<?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>237728</bug_id>
          
          <creation_ts>2022-03-10 12:52:39 -0800</creation_ts>
          <short_desc>[GPU Process] GraphicsContextState should be lazily applied to the platform context</short_desc>
          <delta_ts>2022-03-23 14:36:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=236906</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=236907</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=236913</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=236919</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=236923</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=236924</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>237944</dependson>
    
    <dependson>238066</dependson>
    
    <dependson>238192</dependson>
    
    <dependson>238278</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>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pangle</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</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>1850210</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-10 12:52:39 -0800</bug_when>
    <thetext>The goal is to unify the way all GraphicsContext superclasses commit their state changes to the underlying platform context. This will remove the context states from DisplayList::Recorder and DrawGlyphsRecorder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850211</commentid>
    <comment_count>1</comment_count>
      <attachid>454392</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-10 12:57:27 -0800</bug_when>
    <thetext>Created attachment 454392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850247</commentid>
    <comment_count>2</comment_count>
      <attachid>454401</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-10 14:31:17 -0800</bug_when>
    <thetext>Created attachment 454401
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850756</commentid>
    <comment_count>3</comment_count>
      <attachid>454552</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-13 01:34:51 -0800</bug_when>
    <thetext>Created attachment 454552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850757</commentid>
    <comment_count>4</comment_count>
      <attachid>454553</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-13 01:59:32 -0800</bug_when>
    <thetext>Created attachment 454553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850923</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-14 10:04:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/90253171&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850978</commentid>
    <comment_count>6</comment_count>
      <attachid>454613</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-14 13:09:03 -0700</bug_when>
    <thetext>Created attachment 454613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851036</commentid>
    <comment_count>7</comment_count>
      <attachid>454629</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-14 15:28:56 -0700</bug_when>
    <thetext>Created attachment 454629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851040</commentid>
    <comment_count>8</comment_count>
      <attachid>454631</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-14 15:34:56 -0700</bug_when>
    <thetext>Created attachment 454631
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851153</commentid>
    <comment_count>9</comment_count>
      <attachid>454665</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-14 22:13:08 -0700</bug_when>
    <thetext>Created attachment 454665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851154</commentid>
    <comment_count>10</comment_count>
      <attachid>454666</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-14 22:29:17 -0700</bug_when>
    <thetext>Created attachment 454666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851161</commentid>
    <comment_count>11</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2022-03-14 23:27:49 -0700</bug_when>
    <thetext>*** Bug 236914 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851163</commentid>
    <comment_count>12</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2022-03-14 23:28:33 -0700</bug_when>
    <thetext>*** Bug 236915 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851165</commentid>
    <comment_count>13</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2022-03-14 23:29:37 -0700</bug_when>
    <thetext>*** Bug 236917 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851167</commentid>
    <comment_count>14</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2022-03-14 23:30:06 -0700</bug_when>
    <thetext>*** Bug 236918 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851457</commentid>
    <comment_count>15</comment_count>
      <attachid>454747</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-15 13:10:42 -0700</bug_when>
    <thetext>Created attachment 454747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851471</commentid>
    <comment_count>16</comment_count>
      <attachid>454751</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-15 13:37:04 -0700</bug_when>
    <thetext>Created attachment 454751
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851489</commentid>
    <comment_count>17</comment_count>
      <attachid>454755</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-15 14:00:46 -0700</bug_when>
    <thetext>Created attachment 454755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851509</commentid>
    <comment_count>18</comment_count>
      <attachid>454757</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-15 14:42:42 -0700</bug_when>
    <thetext>Created attachment 454757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851545</commentid>
    <comment_count>19</comment_count>
      <attachid>454765</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-15 15:44:51 -0700</bug_when>
    <thetext>Created attachment 454765
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851592</commentid>
    <comment_count>20</comment_count>
      <attachid>454776</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-15 16:57:18 -0700</bug_when>
    <thetext>Created attachment 454776
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851604</commentid>
    <comment_count>21</comment_count>
      <attachid>454781</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-15 18:06:28 -0700</bug_when>
    <thetext>Created attachment 454781
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851610</commentid>
    <comment_count>22</comment_count>
      <attachid>454785</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-15 18:53:35 -0700</bug_when>
    <thetext>Created attachment 454785
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851637</commentid>
    <comment_count>23</comment_count>
      <attachid>454793</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-15 21:00:20 -0700</bug_when>
    <thetext>Created attachment 454793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851658</commentid>
    <comment_count>24</comment_count>
      <attachid>454801</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2022-03-15 22:52:14 -0700</bug_when>
    <thetext>Created attachment 454801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853872</commentid>
    <comment_count>25</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2022-03-22 13:07:20 -0700</bug_when>
    <thetext>*** Bug 236919 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853991</commentid>
    <comment_count>26</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2022-03-22 16:33:41 -0700</bug_when>
    <thetext>*** Bug 236906 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454392</attachid>
            <date>2022-03-10 12:57:27 -0800</date>
            <delta_ts>2022-03-10 14:31:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220310125726.patch</filename>
            <type>text/plain</type>
            <size>542485</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjcyMzEzNTkxMDEzMGM4
OThiZGVhZDQ2ZmFiZTQyY2IwYzc1Nzg0Ny4uZTk3ZmVhOGE2YmM2MTZjZDFlMGMxNWI5YmUyMzEx
YThiYzgyOWIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0MyBAQAorMjAyMi0wMy0xMCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjphcHBseUxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJv
a2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXlvdXRTdGlwcGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dEhhdGNoaW5nKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1
c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxh
eWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNhdmVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y2xpcEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGhJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGF0dGVybkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpzYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVK
b2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNjYWxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojp0
cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhh
c2lzTWFya3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkZWNvbnN0cnVjdERyYXdHbHlwaHMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4gY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhZGllbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudElt
YWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9J
bWFnZUJ1ZmZlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0SW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlckltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybkltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0dseXBoc0FuZENhY2hlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9y
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1lcmdlQ2hhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2U6OmR1bXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVw
ZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0U3Ryb2tlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldFNoYWRvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3ND
b250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojpjb250ZW5mdWxQYWludERldGVjdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJnZVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6Om1lcmdlU3RhdGVEaWZmcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpmaWxsR3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0dGVybiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmZpbGxTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldEZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJ1bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlR3Jh
ZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXR0ZXJuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
U3BhY2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFN0cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjppbmVDYXAg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZURhc2ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVKb2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjptaXRlckxpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNvbXBvc2l0ZU1vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojpjb21wb3NpdGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJvcFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6Omhhc1Zpc2libGVTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpoYXNCbHVycmVkU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6aGFzU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkQW50aWFsaWFzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTbW9vdGhGb250cyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3THVtaW5hbmNlTWFzayBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzSW5UcmFuc3BhcmVuY3lMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJh
dGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0
ZXJuSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBz
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVs
bGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6fkdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJT
Y29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3Bl
OjpiZWdpbkxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxh
eWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2Vy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6fkludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25seVByaW1pdGl2ZUNoYW5nZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VEaWZmcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXApOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNoYW5nZXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsZWFyQ2hhbmdlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Z2V0Q1RNIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRDVE0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmZpbGxCcnVzaCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmlsbEJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsQnJ1c2gpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmZpbGxSdWxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlQnJ1c2gpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZUJydXNoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VCcnVzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZVBhdHRlcm4pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZVRoaWNrbmVzcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlVGhp
Y2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzdHJva2VT
dHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0
U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Omxp
bmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNl
dExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmxpbmVE
YXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRM
aW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUpv
aW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExp
bmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptaXRlckxp
bWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRN
aXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjb21w
b3NpdGVNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpkcm9wU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnRleHREcmF3aW5nTW9kZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0VGV4dERyYXdpbmdN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRBbnRp
YWxpYXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNl
dFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNldFNob3VsZFNtb290aEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkcmF3THVtaW5hbmNlTWFzayBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RHJhd0x1bWluYW5jZU1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnVzZURhcmtBcHBl
YXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxh
eWVyU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6YmVn
aW5MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjp+VHJh
bnNwYXJlbmN5TGF5ZXJTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGlj
c0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXI6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlTW9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVN
b2RlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVEYXNoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmRlY29k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc1Zpc2libGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6aXNCbHVycmVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRyb3BTaGFkb3c6Omhhc091dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RHJvcFNoYWRvdzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6
OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5o
OgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6TnVsbEdyYXBoaWNzQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNv
cmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OlNoYWRvd0JsdXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCcnVzaC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJydXNoOjpzcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
cnVzaDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnBh
dHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJj
ZUJydXNoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmNvbG9yIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6YnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnJ1c2g6OnNldEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpzZXRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjppc1ByaW1pdGl2
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJydXNoOjpCcnVzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJydXNoOjpCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJy
dXNoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmRlY29k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9E
cmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRl
eHRTdGF0ZVNhdmVyOjpDR0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNH
Q29udGV4dFN0YXRlU2F2ZXI6On5DR0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250
ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0
ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNhdmVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpyZXN0b3JlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3
aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OmNsaXBPdXRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpjbGlwUGF0aEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTaGFkb3dP
ZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lQ2Fw
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q0dNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZURhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0Q0dTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q0c6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6Y2FuVXNlU2hhZG93Qmx1ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6cmVzdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpv
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y29uY2F0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRD
VE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmdldENU
TSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OkNH
Q29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0
U3RhdGVTYXZlcjo6fkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OmRpZFNhdmUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2ggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpiZWdpbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0lt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludGVybmFsQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnNldEludGVybmFsRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGluYXRp
b25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3Jk
QmVnaW5MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZEVuZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxh
dGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNoYWRvd0lzQ2xlYXJlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVD
b3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVt
cEZvckZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6
YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6c2FmZUNvcHkgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6U2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldFN0YXRlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJv
dW5kZWRSZWN0OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjphcHBseSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lQ2FwOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0TGluZURhc2g6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0Ojpjb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp4
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xh
dGU6OnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJv
dGF0ZTo6Um90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
b3RhdGU6OmFuZ2xlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTY2FsZTo6U2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNjYWxlOjphbW91bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldENUTTo6U2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6dHJh
bnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRTdGF0ZTo6c3RhdGVDaGFuZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bGluZUNhcCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNl
dExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lRGFzaDo6ZGFzaEFycmF5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46
OlNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lSm9pbjo6bGluZUpvaW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6Om1pdGVyTGltaXQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29sb3Ig
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21w
b3NpdGVkUmVjdDo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRl
ZFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpl
bmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpSZWNvcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV9kcmF3R2x5cGhzUmVjb3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzYXZlSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlc3RvcmVJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseVN0cm9rZVBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseUZp
bGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Y2xpcEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpjbGlwUGF0aEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpjbGlwT3V0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZmlsbFJlY3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd0ltYWdlQnVmZmVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVySW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdHRlcm5JbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0dseXBocyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlwaHNBbmRDYWNo
ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGlu
ZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp+UmVjb3JkZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seUlubGluZVN0YXRl
Q2hhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3RhdGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzY2FsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNvbmNhdENUTSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmdldENUTSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNs
aXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
bGlwT3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdXJyZW50U3RhdGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdXJyZW50
U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpjdG0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRl
OjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0pOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlY29yZERy
YXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29u
dGV4dFN0YXRlOjpDb250ZXh0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNsb25lRm9yU2F2ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRT
dGF0ZTo6Y2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0YXRlU3RhY2sgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpSZWNvcmRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xp
cCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRD
bGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VF
bGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1Jp
bmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBo
cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpleHRlbnRG
cm9tTG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6flJlY29yZGVySW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkUm90YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlckltcGw6OnJlY29yZFNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5l
Q2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZFNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldE1pdGVyTGlt
aXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkQ2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OlJlY29yZGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OmFwcGx5U2V0U3RhdGVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3Qm94ZXMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRm
dWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNvbnRlbnRmdWxQYWludCk6CisgICAgICAgICog
cmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVG
cm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRC
b3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6
OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2ht
ZW50UGxhY2Vob2xkZXJCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0RGVjb3JhdGlv
blBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpw
YWludEJhY2tncm91bmREZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRQYWlu
dGVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dXNlU3Ryb2tlU3R5bGVUb0ZpbGwpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJT
dXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVy
aW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRyYXcp
OgorCiAyMDIyLTAzLTA3ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAg
ICAgICAgIFRyYW5zaXRpb24gb24gdGV4dC1kZWNvcmF0aW9uLWNvbG9yIGZyb20gY3VycmVudENv
bG9yIGp1bXBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk1YmJiMGVlMmI1MzAzZjM5ZjcxMTI4MDA1ZTA5ODg0NTQ2
MzE3YjguLmMyOGMzY2EyNWRmZGVjNWFhZmFlNDgwNjA2ZDI2NmQxMjAyYjE3OWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsODMgQEAKKzIwMjItMDMtMTAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBh
cHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBz
aG91bGQgYmUgbGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldENUTSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNv
bmNhdGVuYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRNaXRlckxpbWl0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
Y2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpmaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ry
b2tlUGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFBhdGgpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXQpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENs
aXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVkUmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0xpbmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZERyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdG
b2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1l
Rm9yTWVkaWEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlEZXZpY2VT
Y2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6bV9yZW5kZXJpbmdCYWNrZW5k
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVD
YXApOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZFNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxDb21wb3Np
dGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnNlbmQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZp
bmRDb250cm9sbGVyOjpkcmF3UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5k
VGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgorCiAyMDIyLTAzLTA3ICBTaWh1aSBMaXUg
IDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIERlbGV0ZSBXZWJJREJTZXJ2ZXIgYW5k
IFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBiMWQ4NTRjMGM5ZDNl
YmViNDhhMTc2OGVmNzg3MDIxMDQwOGJjNmNjLi43NDAyZGM2ZWI2YTQ3YjA1ZmJmNDdjNGRkMDU3
OGZkODNlNTJiYzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjA0NSw2ICsyMDQ1LDcgQEAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAKK3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDb250ZW50
c0Rpc3BsYXlEZWxlZ2F0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFu
c2Zvcm0uY3BwCkBAIC0yMDg1LDYgKzIwODYsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24u
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnVmZmVyUHJpdmF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUltYWdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDEyOTA3YjBiNDJkMWMy
YzZiNjNkYjg1ZTJiMzIwMTliZjk4Mzg0MTcuLjg2ZWFkZmZjYWRjMzIzNGE4ZTgyNGE1ZmJjYzY4
YWVjNGQxMTA0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTIzMzAsMTAgKzIzMzAsMTIgQEAKIAkJNzFFRkNFREMyMDJCMzhB
OTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1hdGlv
bkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGMDVGN0UyNTEy
NDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGQ0IxNzAyN0JBQjNGRTAwRTA2MzFD
IC8qIEZyYW1lUmF0ZUFsaWduZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcxRkNCMTZEMjdCQUIzREYwMEUwNjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIw
MTc4M0IyN0Q1N0Y5RjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMDE3ODNBMjdENTczQjIwMDlC
RUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1By
b3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJG
RjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3du
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBG
RTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdl
UGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjQ2
MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNDYwREQ2MjdDODVEMDEwMEQ1
RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNCMjc1QzVGQTYwMEE5MTU2QSAvKiBDU1NG
aWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRDI3NUM2MTQ0MDBBOTE1NkEg
LyogRmlsdGVyRWZmZWN0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MjE0QjlCNzI3NDQ1OEZBMDAzQkU2REYgLyogRmlsdGVyRWZmZWN0VmVj
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzI0Njk2M0UyNzVDNjE2NzAwQTkxNTZBIC8qIEZpbHRlckltYWdlVmVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkI0RUY3QzI3NEVFMzdGMDAy
OTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM0MSw2ICsyMzQzLDkgQEAKIAkJNzI0RUU1NTAxREM4
MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0
eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1
NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNTYwNzhFMjc5
RDM0QjYwMDdEMkREMyAvKiBGRUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkY3RTc0RjI3OUNFREU4MDBEODJEMkQgLyogRkVJbWFnZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNTgxODU0
MjdDREE2OUEwMEMzRDk3RSAvKiBTb3VyY2VCcnVzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJj
ZUJydXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkIzNTEwQzI3
QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NjI3Q0RBRkQ1MDBD
M0Q5N0UgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjZDREUyMDI3NTk3MzUwMDBBNDQ1QjIgLyogRmlsdGVyRWZm
ZWN0R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyOTY2MUEyMjc1OTYwQTUwMEU3REY5QiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1NkUy
MjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxh
dGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBOYXRpdmVJbWFnZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjYxRDgyMDlGNDAw
MjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMzI2LDYgKzExMzMxLDcgQEAKIAkJNzFGQ0IxNkQyN0JBQjNE
RjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRnJhbWVSYXRlQWxpZ25lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MUZDQjE2RjI3QkFCM0UwMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZVJhdGVBbGlnbmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5h
dmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0
b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3
ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENHQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzIxMUI1RDYyNzY1MzY4MjAwNzZGRUY4IC8qIEZpbHRlclJlc3VsdHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVyUmVzdWx0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0
NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMTMzNSw2ICsxMTM0MSw4IEBACiAJCTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAv
KiBBbmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNDM1RUY0MjczRDA3NjcwMDA1RTdF
RSAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjQzNUVGNTI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVy
SW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3ND
b250ZXh0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENjI3Qzg1RDAxMDBENUY5
RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250
ZXh0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1
NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1p
bk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzOTcsNiArMTE0MDUsMTAgQEAKIAkJNzJBMTNB
RDUyNzRERTU0RTAwRTJBODhFIC8qIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyQTEzQUQ2Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFwaGljU29m
dHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkExM0FENzI3NERF
NTc4MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBFMjdDQjQyRkQw
MEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VCcnVz
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBGMjdDQjQyRkUwMEQy
N0FFMCAvKiBTb3VyY2VCcnVzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VCcnVzaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3NDI3NEUyMzMzMDAyOTNDMkYgLyogRkVC
bGVuZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUJsZW5kU29mdHdhcmVBcHBs
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjc1Mjc0RTIzMzQwMDI5
M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZF
QmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsdGVySW1hZ2VWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4ODA4LDYgKzI4ODIwLDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjAxNzgzQTI3
RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oICovLAogCQkJCTBGQ0YzMzIz
MEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMzI1OTY4RDBC
MDAzMEU2QUEgLyogQ29sb3JTcGFjZUNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMjI1OTY4RDBCMDAz
MEU2QUEgLyogQ29sb3JTcGFjZUNHLmggKi8sCkBAIC0yOTA0MSw2ICsyOTA1NCw5IEBACiAJCQkJ
N0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCiAJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKKwkJCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5
RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwICovLAorCQkJCTcyNDYwREQ2MjdDODVEMDEw
MEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovLAorCQkJCTcyQjM1MTBEMjdDQTMy
OEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEY1ODBC
MDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBGNTgwQjBB
MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBCMEIwRjEy
QTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLywKQEAgLTI5MTQxLDYgKzI5
MTU3LDcgQEAKIAkJCQlCQ0E1NTkxMjI2M0RCRDc5MDA3RjE5QjMgLyogUGl4ZWxGb3JtYXQuaCAq
LywKIAkJCQlDREQwOEFCRjI3N0U1NEYwMDBFQTM3NTUgLyogUGxhdGZvcm1BdWRpb1RyYWNrQ29u
ZmlndXJhdGlvbi5oICovLAogCQkJCUJDM0U2MjQyMjY1OTc5MTcwMDU0OEFDRCAvKiBQbGF0Zm9y
bUNvbG9yU3BhY2UuaCAqLywKKwkJCQk3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyog
UGxhdGZvcm1JbWFnZS5oICovLAogCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJNTUwNjQwQUQyNDA3NTZEQTAwQUFFMDQ1IC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCkBAIC0yOTE2Niw2ICsyOTE4Myw4IEBACiAJ
CQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLAogCQkJCTBG
M0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8sCiAJCQkJMUM0REIwMjQy
NzMzOUU1RTAwN0IwQUQxIC8qIFNob3VsZExvY2FsaXplQXhpc05hbWVzLmggKi8sCisJCQkJNzJC
MzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmNwcCAqLywKKwkJCQk3MkIzNTEw
RjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLywKIAkJCQkxREQxMjdBQzI1NkUz
QTg3MDBCMjI3RDcgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgKi8sCiAJCQkJQ0Q2NDFFQjIx
ODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVB
QzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovLApAQCAt
MzM4NzAsNiArMzM4ODksNyBAQAogCQkJCUNERTNBRTEyMjRCNDkxNkEwMDEyOEU3RSAvKiBDRE1V
dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVGQTkwNENBMTc4RTYxRjUwMDRDOEEyRCAv
KiBDZXJ0aWZpY2F0ZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTkxQjhGMEI1MjE5NTNENjUw
MDBDMkIwMCAvKiBDZXJ0aWZpY2F0ZVN1bW1hcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDE3
ODNCMjdENTdGOUYwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRTM2RkQxNTE2Qzc4MjY1MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3QkM2OUREMTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJz
aW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTc4NUQ5MTUyNEI0RDFDQTAwMTREQjIx
IC8qIENoYW5uZWxDb3VudE1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ3OTUsNiArMzQ4MTUs
OCBAQAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8qIEdy
YXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlE
RUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzI0NjBERDcyN0M4NkRBRDAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0
YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5N0UgLyogR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEy
QTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIz
RUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNTgwQjBFMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTM2Njk4LDYgKzM2NzIwLDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUz
MDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBh
ZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjZENTZFMjI1M0FFMjhE
MDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3NzA1Qzcy
NTUyNzZDRDAwMUQwQzk0IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTU1MDY0MEFGMjQwNzU4MkQwMEFBRTA0NSAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2Vu
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzM3OSw2ICszNzQwMiw3IEBACiAJCQkJNTEwRDRBMzgx
MDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjNFMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3Vy
Y2VBbHBoYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8q
IFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2MjE3QTlEMDFCMDAyNzRF
NDIgLyogU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2NTE3QTlEMDFC
MDAyNzRFNDIgLyogU291cmNlQnVmZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGMTM1
MDkyNEM5RkNBMzAwNDMyRTFFIC8qIFNvdXJjZUJ1ZmZlclBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3Jh
dGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERl
Y29yYXRpb25QYWludGVyLmNwcAppbmRleCA4NTZhM2RlNTA0ZGVjMGJiZmE5MGFjMTdkZTM3ZjUx
NWUxNGQ5MjA0Li45ZDkzNWE2ZmYzMjMwZjNmNDZhMmVmNWQ3ZWExMDAxMGFlOWUxMGMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBh
aW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNv
cmF0aW9uUGFpbnRlci5jcHAKQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6
OmRyYXdCb3hTaWRlRnJvbVBhdGgoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNv
bnN0CiAgICAgICAgICAgICBEYXNoQXJyYXkgbGluZURhc2g7CiAgICAgICAgICAgICBsaW5lRGFz
aC5hcHBlbmQoZGFzaExlbmd0aCk7CiAgICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZ2FwTGVu
Z3RoKTsKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExpbmVEYXNoKGxp
bmVEYXNoLCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldExpbmVEYXNoKHsgV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9yZGVyIHBhdGgg
Y2F1c2VzIGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6CkBAIC0xMjk0LDcgKzEyOTQsNyBAQCB2
b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQm
IHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNoYWRvd1JlY3RPcmlnaW4gPSBm
aWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNldDsKICAgICAgICAgYXV0byBh
ZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4gLSBhZGp1c3RlZEZpbGxSZWN0
LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNl
dFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRv
dy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICBwYWludGluZ0Nv
bnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRv
d1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0Qm94U2hhZG93
KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0
IH0pOwogCiAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAgICAgICAgICAgIC8vIElm
IHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93
ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMTQwNSw3ICsxNDA1LDcgQEAgdm9pZCBCb3hE
ZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQudHJhbnNsYXRl
KGV4dHJhT2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCi0g
ICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0Qm94U2hh
ZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZh
dWx0KTsKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cu
aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1Jh
ZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCByb3VuZGVkSG9sZVJlY3Qs
IGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFn
ZS5jcHAKaW5kZXggZjRiOThiYTYyZTExOWEwNzcxMzEyZDNiODhjNDkxOTM2ODM2ZWUzNy4uZWU1
MDRmMDhjNDlmYzhkNWI1YWVkNzAyYmUyMTdmMWIwNmZkNGUwZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgSW1hZ2VEcmF3UmVz
dWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdG9tUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY28KIEltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0
KTsKLSAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3Np
dGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29udGV4dC5zZXRD
b21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5k
TW9kZSgpIH0pOwogICAgIGRlc3RDb250ZXh0LmNsaXAoZGVzdFJlY3QpOwogICAgIGRlc3RDb250
ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZGVzdFJlY3Quc2l6
ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgQ3VzdG9tUGFp
bnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0CiAgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CiAKICAg
ICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBzY2FsZSB0byBnZW5lcmF0
ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0
Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1
ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVz
dENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRD
VE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RNLnlT
Y2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJuQ1RNID0gcGF0dGVy
blRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggMGU3ODA2M2UzYTQxY2JjNjkw
ZjBkMGNjYjc4ODExN2RlNjkzOGEwMi4uN2IzMTg3NzgzODY2Mjc1YmI5NDNmNGJkNDhhMmZjZTkw
MTA4YWMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5TGluZURhc2goKSBjb25zdAogICAg
IERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChzdGF0ZSgpLmxpbmVEYXNoLnNpemUoKSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZSgpLmxpbmVEYXNoLnNpemUoKTsgKytpKQog
ICAgICAgICBjb252ZXJ0ZWRMaW5lRGFzaFtpXSA9IHN0YXRpY19jYXN0PERhc2hBcnJheUVsZW1l
bnQ+KHN0YXRlKCkubGluZURhc2hbaV0pOwotICAgIGMtPnNldExpbmVEYXNoKGNvbnZlcnRlZExp
bmVEYXNoLCBzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICBjLT5zZXRMaW5lRGFzaCh7IFdU
Rk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUoKS5saW5l
RGFzaE9mZnNldCkgfSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2V0R2xvYmFsQWxwaGEoZG91YmxlIGFscGhhKQpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKGNv
bnN0IFN0cmluZyYgb3BlCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQo
KTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKLSAgICBjLT5zZXRDb21wb3NpdGVPcGVy
YXRpb24ob3AsIGJsZW5kTW9kZSk7CisgICAgYy0+c2V0Q29tcG9zaXRlTW9kZSh7IG9wLCBibGVu
ZE1vZGUgfSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2NhbGUo
ZG91YmxlIHN4LCBkb3VibGUgc3kpCkBAIC0xMTg2LDcgKzExODYsNyBAQCBib29sIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmlzUG9pbnRJblN0cm9rZUludGVybmFsKGNvbnN0IFBhdGgm
IHBhdGgsIGRvdQogICAgICAgICBEYXNoQXJyYXkgY29udmVydGVkTGluZURhc2gobGluZURhc2gu
c2l6ZSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lRGFzaC5zaXplKCk7
ICsraSkKICAgICAgICAgICAgIGNvbnZlcnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFz
aEFycmF5RWxlbWVudD4obGluZURhc2hbaV0pOwotICAgICAgICBjb250ZXh0LnNldExpbmVEYXNo
KGNvbnZlcnRlZExpbmVEYXNoLCBzdGF0ZS5saW5lRGFzaE9mZnNldCk7CisgICAgICAgIGNvbnRl
eHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGNvbnZlcnRlZExpbmVEYXNoKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHN0YXRlLmxpbmVEYXNoT2Zmc2V0KSB9KTsKICAgICB9KTsKIH0KIApAQCAtMTIwNSw3
ICsxMjA1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclJlY3Qo
ZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGQKICAgICBpZiAoc2hvdWxkRHJhd1No
YWRvd3MoKSkgewogICAgICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNhdmVkID0gdHJ1
ZTsKLSAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJh
bnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgY29udGV4
dC0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFj
aywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0KICAgICBpZiAoc3RhdGUoKS5n
bG9iYWxBbHBoYSAhPSAxKSB7CiAgICAgICAgIGlmICghc2F2ZWQpIHsKQEAgLTEzNjMsOSArMTM2
Myw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlTaGFkb3coKQog
ICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGZsb2F0IHdpZHRoID0gc3Rh
dGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RhdGUo
KS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgICAgIGMtPnNldFNoYWRvdyhGbG9hdFNpemUo
d2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3Is
IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgIGMtPnNldERyb3BTaGFkb3coeyBG
bG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hh
ZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSB9KTsKICAgICB9IGVsc2UKLSAgICAg
ICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywg
U2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyh7IEZs
b2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IH0pOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNob3Vs
ZERyYXdTaGFkb3dzKCkgY29uc3QKQEAgLTI0MzIsMTkgKzI0MzIsMTYgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0UnVuJiB0
ZXh0UnVuLCBkb3UKIAogICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldCgwLCAyICogbWFza1Jl
Y3QuaGVpZ2h0KCkpOwogCi0gICAgICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAg
ICAgICAgICAgZmxvYXQgc2hhZG93UmFkaXVzOwotICAgICAgICAgICAgQ29sb3Igc2hhZG93Q29s
b3I7Ci0gICAgICAgICAgICBjLT5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMs
IHNoYWRvd0NvbG9yKTsKLQogICAgICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QobWFza1Jl
Y3QpOwotICAgICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHNoYWRvd1JhZGl1cyAqIDEuNCk7
Ci0gICAgICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc2hhZG93T2Zmc2V0ICogLTEpOworICAgICAg
ICAgICAgYXV0byBkcm9wU2hhZG93ID0gYy0+ZHJvcFNoYWRvdygpOworCisgICAgICAgICAgICBz
aGFkb3dSZWN0LmluZmxhdGUoZHJvcFNoYWRvdy5ibHVyICogMS40KTsKKyAgICAgICAgICAgIHNo
YWRvd1JlY3QubW92ZShkcm9wU2hhZG93Lm9mZnNldCAqIC0xKTsKICAgICAgICAgICAgIGMtPmNs
aXAoc2hhZG93UmVjdCk7CiAKLSAgICAgICAgICAgIHNoYWRvd09mZnNldCArPSBvZmZzZXQ7Cisg
ICAgICAgICAgICBkcm9wU2hhZG93Lm9mZnNldCArPSBvZmZzZXQ7CiAKLSAgICAgICAgICAgIGMt
PnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgICAgICBjLT5zZXREcm9wU2hhZG93KGRyb3BT
aGFkb3cpOwogCiAgICAgICAgICAgICBpZiAoZmlsbCkKICAgICAgICAgICAgICAgICBjLT5zZXRG
aWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmNwcAppbmRleCA0ZjYzYWRjZTkzOTE2ZGIyMzIwZTk2NzhhYWJmZTBmM2Nk
OTk3NjJiLi45YTgwM2E0MDhkODhjMmZmNDhkZDNiZWEwMjk1MWI4NzU4MDk4ZTBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCkBAIC0xMjQ0LDcg
KzEyNDQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0U3RpcHBsaW5nKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLAogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc2F2ZXIoY29udGV4dCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
MSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tl
KTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgMSwgZGVuc2l0eSB9LCAxKTsKKyAgICBjb250
ZXh0LnNldExpbmVEYXNoKHsgeyAxLCBkZW5zaXR5IH0sIDEgfSk7CiAKICAgICBkcmF3TGF5b3V0
UGF0dGVybihjb250ZXh0LCBxdWFkLCBkZW5zaXR5LCBGbGlwOjpObyk7CiB9CkBAIC0xMjU0LDcg
KzEyNTQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0SGF0Y2hpbmcoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygw
LjUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGU6OkRhc2hlZFN0cm9r
ZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IDIsIDIgfSwgMik7CisgICAgY29udGV4dC5z
ZXRMaW5lRGFzaCh7IHsgMiwgMiB9LCAyIH0pOwogCiAgICAgY29uc3RleHByIGF1dG8gZGVmYXVs
dExheW91dEhhdGNoU3BhY2luZyA9IDEyOwogICAgIGRyYXdMYXlvdXRQYXR0ZXJuKGNvbnRleHQs
IHF1YWQsIGRlZmF1bHRMYXlvdXRIYXRjaFNwYWNpbmcsIGZsaXApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCmluZGV4IDNiOTk1NTg5ZDE4NTZmN2MzMzdmYTAwZDRlZGM1MmFiYmU5MzQxMTUu
LmY0OTVmNDhlNjM2OTVmMTAyN2M1ODY3ODFjODA2MGY1NTcxZjhhZTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKQEAgLTQyOTYsNyArNDI5Niw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp0cmF2
ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxp
ZGF0CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIGxheW91dENvbnRleHQoKS5sYXlv
dXQoKTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChwYWludEludmFsaWRhdGlv
blJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChmcmFtZVJlY3QoKSwg
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgewog
ICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVDb250ZW50cygpLgogICAgICAg
ICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1
bWVudFZpc2libGVSZWN0KSk7CkBAIC00ODQ3LDcgKzQ4NDcsNyBAQCB2b2lkIEZyYW1lVmlldzo6
YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9w
LCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQgd2l0aCBwYWludGluZyBkaXNh
YmxlZC4KLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4
dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBOdWxsR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQoZnJhbWVSZWN0KCksIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxp
ZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0VHJ1bmNhdGVkQXQoc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkQm90dG9tKSkpOwogICAgIEludFJlY3QgZGlydHlSZWN0
KDAsIHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5kZXJWaWV3LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKS5tYXhYKCksIHN0YXRpY19jYXN0PGludD4oY2VpbGYob2xkQm90dG9tIC0g
b2xkVG9wKSkpOwogICAgIHJlbmRlclZpZXctPnNldFByaW50UmVjdChkaXJ0eVJlY3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA5ZmQyNWQ4MGFkMTJkYzkxZGQxMWY5MTU5OGZj
NmM4ZWZhNGNiMmEyLi4zN2UyODc1ZjkxOTE1NjhlYmNkZWZjMWM0N2I0ZDBmMjVjYzBhYWFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjksNyArMjksOCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dCYgc2Vjb25kYXJ5Q29udGV4dCkKLSAgICA6IG1fcHJpbWFyeUNvbnRleHQocHJpbWFyeUNvbnRl
eHQpCisgICAgOiBHcmFwaGljc0NvbnRleHQocHJpbWFyeUNvbnRleHQuY2xpcEJvdW5kcygpLCB7
IH0sIHByaW1hcnlDb250ZXh0LmdldENUTSgpKQorICAgICwgbV9wcmltYXJ5Q29udGV4dChwcmlt
YXJ5Q29udGV4dCkKICAgICAsIG1fc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlDb250ZXh0KQog
ewogfQpAQCAtNDgsMzggKzQ5LDQ4IEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBt
X3ByaW1hcnlDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OnNhdmUoKQorI2lmIFVTRShDRykKK2Jvb2wgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IENv
bnNpZGVyIG5vdCB1c2luZyB0aGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCdzIHN0YXRlIHN0
YWNrIGF0IGFsbCwKLSAgICAvLyBhbmQgbWFraW5nIGFsbCBvZiB0aGUgc3RhdGUgZ2V0dGVycyBh
bmQgc2V0dGVycyB2aXJ0dWFsLgotICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwotICAgIG1f
cHJpbWFyeUNvbnRleHQuc2F2ZSgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zYXZlKCk7Cisg
ICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgpOwogfQogCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQordm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNDQUxheWVyQ29udGV4dCkK
IHsKLSAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LnJlc3RvcmUoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQucmVzdG9yZSgpOworICAgIG1fcHJp
bWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsK
IH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVkQ29u
dGV4dCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNr
bmVzcyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNr
bmVzcyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0Fj
Y2VsZXJhdGVkQ29udGV4dCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKIH0KKyNlbmRpZgogCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIGZyb20sIGNv
bnN0IEZsb2F0UG9pbnQmIHRvKQorUmVuZGVyaW5nTW9kZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdM
aW5lKGZyb20sIHRvKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8p
OworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNhdmVJbXBsKCkKIHsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgbm90IHVzaW5n
IHRoZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0J3Mgc3RhdGUgc3RhY2sgYXQgYWxsLAorICAg
IC8vIGFuZCBtYWtpbmcgYWxsIG9mIHRoZSBzdGF0ZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHZpcnR1
YWwuCisgICAgbV9wcmltYXJ5Q29udGV4dC5zYXZlSW1wbCgpOworICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5zYXZlSW1wbCgpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJl
c3RvcmVJbXBsKCkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LnJlc3RvcmVJbXBsKCk7CisgICAg
bV9zZWNvbmRhcnlDb250ZXh0LnJlc3RvcmVJbXBsKCk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZUNoYW5nZXMoKQoreworICAgIG1fcHJpbWFyeUNvbnRl
eHQuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKIH0KIAogI2lmIFVTRShDRykKQEAgLTk2LDQwICsxMDcsNTIgQEAgdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKIH0KICNlbmRpZgog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgp
OwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKKyAgICBtX3ByaW1hcnlD
b250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiB9CiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZp
bGxQYXRoKHBhdGgpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBJbXBsKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9wcmltYXJ5Q29u
dGV4dC5jbGlwSW1wbChyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcEltcGwocmVj
dCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aEltcGwoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7Ci0gICAg
bV9wcmltYXJ5Q29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIG1f
cHJpbWFyeUNvbnRleHQuY2xpcFBhdGhJbXBsKHBhdGgsIHdpbmRSdWxlKTsKKyAgICBtX3NlY29u
ZGFyeUNvbnRleHQuY2xpcFBhdGhJbXBsKHBhdGgsIHdpbmRSdWxlKTsKIH0KIAotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRJbXBsKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgbV9wcmltYXJ5Q29u
dGV4dC5jbGlwT3V0SW1wbChyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dElt
cGwocmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXRJbXBsKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNs
aXBPdXRJbXBsKHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0SW1wbChwYXRo
KTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
ckltcGwoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBUb0ltYWdlQnVmZmVySW1wbChp
bWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xp
cFRvSW1hZ2VCdWZmZXJJbXBsKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworfQorCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7CisgICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0xNDQsMjgg
KzE2NywyMiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbAogICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5maWxsUmVjdChyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0SW1wbChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKLX0K
LQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmls
bFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3RJbXBsKHJlY3Qs
IGdyYWRpZW50KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3RJbXBsKHJlY3QsIGdy
YWRpZW50KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5m
aWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxs
Um91bmRlZFJlY3QocmVjdCwgY29sb3IpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJv
a2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJl
Y3QocmVjdCwgbGluZVdpZHRoKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNv
bG9yKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCkBAIC0xNzQsOTMgKzE5MSw5NiBAQCB2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVs
bGlwc2UpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwor
ICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmZpbGxQYXRoKHBhdGgpOwogfQogCi0jaWYgVVNFKENHKQotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNDQUxheWVyQ29udGV4dCkK
K3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Ci0gICAgbV9zZWNvbmRhcnlD
b250ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CisgICAgbV9zZWNv
bmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotYm9v
bCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29u
dGV4dCgpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlz
QWNjZWxlcmF0ZWRDb250ZXh0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0Fj
Y2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7Ci0gICAgbV9zZWNvbmRhcnlD
b250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKKyAg
ICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LnN0cm9rZVBhdGgocGF0aCk7CiB9Ci0jZW5kaWYKIAotUmVuZGVyaW5nTW9kZSBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5n
TW9kZSgpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tu
ZXNzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tu
ZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQb2ludCYgdG8pCiB7Ci0gICAgbV9w
cmltYXJ5Q29udGV4dC5jbGlwKHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwKHJl
Y3QpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXQocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlD
b250ZXh0LmNsaXBPdXQocmVjdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShy
ZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuY2xpcE91dChwYXRoKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXRoKHBh
dGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKIH0KIAotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSB3aW5kUnVsZSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBQ
YXRoKHBhdGgsIHdpbmRSdWxlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcFBhdGgocGF0
aCwgd2luZFJ1bGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZvY3VzUmluZyhyZWN0cywg
d2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3Rm9jdXNS
aW5nKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLUludFJlY3QgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Cit2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJldHVybiBtX3ByaW1h
cnlDb250ZXh0LmNsaXBCb3VuZHMoKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdGb2N1c1Jp
bmcocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKKyNpZiBQ
TEFURk9STShNQUMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRMaW5lQ2Fw
KGxpbmVDYXApOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5lQ2FwKGxpbmVDYXApOwor
ICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZvY3VzUmluZyhwYXRoLCB0aW1lT2Zmc2V0LCBuZWVk
c1JlZHJhdywgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3Rm9jdXNSaW5nKHBh
dGgsIHRpbWVPZmZzZXQsIG5lZWRzUmVkcmF3LCBjb2xvcik7CiB9CiAKLXZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXks
IGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBkb3VibGUgdGltZU9mZnNl
dCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBtX3ByaW1h
cnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCk7CisgICAgbV9w
cmltYXJ5Q29udGV4dC5kcmF3Rm9jdXNSaW5nKHJlY3RzLCB0aW1lT2Zmc2V0LCBuZWVkc1JlZHJh
dywgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3Rm9jdXNSaW5nKHJlY3RzLCB0
aW1lT2Zmc2V0LCBuZWVkc1JlZHJhdywgY29sb3IpOwogfQorI2VuZGlmCiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlckltcGwoSW1hZ2VCdWZm
ZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fcHJp
bWFyeUNvbnRleHQuc2V0TGluZUpvaW4obGluZUpvaW4pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5zZXRMaW5lSm9pbihsaW5lSm9pbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3SW1hZ2VC
dWZmZXJJbXBsKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlckltcGwoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRl
ckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVySW1wbChJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVz
dWx0cyYgZmlsdGVyUmVzdWx0cykKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldE1pdGVyTGlt
aXQobWl0ZXJMaW1pdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldE1pdGVyTGltaXQobWl0
ZXJMaW1pdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcklt
cGwoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRzKTsK
KyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXJJbXBsKHNvdXJj
ZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgZmlsdGVyUmVzdWx0cyk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5kcmF3TmF0aXZlSW1hZ2UobmF0aXZlSW1hZ2UsIHNlbGZTaXplLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRp
dmVJbWFnZSwgc2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFn
ZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAKIHZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdl
JiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCkBAIC0yNjks
MzEgKzI4OSwxNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1J
bWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0CiAgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0
dGVybihuYXRpdmVJbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0
ZXJuKG5hdGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQu
ZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhdXRvIHJl
c3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXpl
LCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1fcHJpbWFyeUNv
bnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNp
emUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1
bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybkltcGwoSW1hZ2VCdWZmZXImIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3
VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBo
UnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGlsZWRJ
bWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwg
dlJ1bGUsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4
dC5kcmF3UGF0dGVybkltcGwoaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3UGF0dGVybkltcGwoaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAt
MzA0LDk3ICszMDksMTIgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmwKIH0KICNlbmRpZiAvLyBF
TkFCTEUoVklERU8pCiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNjYWxlKHNjYWxl
KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2NhbGUoc2NhbGUpOwotfQotCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKLXsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC50cmFuc2xhdGUoeCwgeSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnRyYW5z
bGF0ZSh4LCB5KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY29uY2F0
Q1RNKHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIG1fcHJpbWFyeUNv
bnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldENUTSh0
cmFuc2Zvcm0pOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKGluY2x1ZGVEZXZpY2VTY2FsZSk7
Ci19Ci0KLUZsb2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkK
LXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3Qs
IHJvdW5kaW5nTW9kZSk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICBtX3NlY29u
ZGFyeUNvbnRleHQuZHJhd0ZvY3VzUmluZyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwot
fQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZvY3VzUmluZyhwYXRoLCB3aWR0aCwgb2Zm
c2V0LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdGb2N1c1JpbmcocGF0aCwg
d2lkdGgsIG9mZnNldCwgY29sb3IpOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGRv
dWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQot
ewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZvY3VzUmluZyhwYXRoLCB0aW1lT2Zmc2V0LCBu
ZWVkc1JlZHJhdywgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3Rm9jdXNSaW5n
KHBhdGgsIHRpbWVPZmZzZXQsIG5lZWRzUmVkcmF3LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29s
b3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZvY3VzUmluZyhyZWN0cywg
dGltZU9mZnNldCwgbmVlZHNSZWRyYXcsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZHJhd0ZvY3VzUmluZyhyZWN0cywgdGltZU9mZnNldCwgbmVlZHNSZWRyYXcsIGNvbG9yKTsKLX0K
LSNlbmRpZgotCi1GbG9hdFNpemUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQo
Y29uc3QgRm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRv
KQotewotICAgIGF1dG8gc2l6ZSA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RleHQoY2FzY2FkZSwg
cnVuLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGV4dChj
YXNjYWRlLCBydW4sIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KIHZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewogICAgIG1fcHJpbWFyeUNv
bnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdHbHlwaHMo
Zm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01v
ZGUpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01h
cmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9t
LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRy
YXdFbXBoYXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoY2FzY2FkZSwgcnVuLCBtYXJr
LCBwb2ludCwgZnJvbSwgdG8pOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pCi17Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5kcmF3QmlkaVRleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5
QWN0aW9uKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1
biwgcG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7Ci19Ci0KIHZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgbV9w
cmltYXJ5Q29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywg
cHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7CkBAIC00MDcsMTYgKzMyNyw5IEBA
IHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgbWFya2VyU3R5bGUpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiB1cmwsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJs
LCByZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3Qp
OwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9y
UmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKIHsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3Qp
OworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpOwog
fQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2lu
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQpAQCAtNDI1LDE4
ICszMzgsMTYgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAogICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5hZGREZXN0aW5hdGlvbkF0UG9pbnQobmFtZSwgcG9pbnQpOwogfQogCi1ib29sIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0Cit2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gbV9wcmltYXJ5
Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnNl
dERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiB1
cmwsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBUaGlzIGNhbGxzIHVwZGF0ZVN0
YXRlKCkgaW5zdGVhZCBvZiBkaWRVcGRhdGVTdGF0ZSgpIHNvIHRoYXQgY2hhbmdlcwotICAgIC8v
IGFyZSBhbHNvIGFwcGxpZWQgdG8gZWFjaCBjb250ZXh0J3MgR3JhcGhpY3NDb250ZXh0U3RhdGUs
IHNvIHRoYXQgY29kZQotICAgIC8vIGludGVybmFsIHRvIHRoZSBjaGlsZCBjb250ZXh0cyB0aGF0
IHJlYWRzIGZyb20gdGhlIHN0YXRlIGdldHMgdGhlIHJpZ2h0IHZhbHVlcy4KLSAgICBtX3ByaW1h
cnlDb250ZXh0LnVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7Ci0gICAgbV9zZWNvbmRhcnlDb250
ZXh0LnVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRV
UkxGb3JSZWN0KHVybCwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldFVSTEZvclJl
Y3QodXJsLCByZWN0KTsKIH0KIAogI2lmIE9TKFdJTkRPV1MpICYmICFVU0UoQ0FJUk8pCkBAIC00
NDYsNSArMzU3LDE4IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZFByaXZhdGVDb250CiB9CiAjZW5kaWYKIAorCisK
K3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBmYWN0b3IpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFj
dG9yKGZhY3Rvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmFjdG9yKTsKK30KKworRmxvYXRSZWN0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJv
dW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91
bmRpbmdNb2RlKQoreworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJvdW5kVG9EZXZpY2VQ
aXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4YjM0YzkxNDM0MmI3Mzc3NzI3YzExYTcz
YjZkODIxOGUxNTU2Zi4uYjE1ZjJhN2JmNmY3MGM3NWFhOTk3ZTRhOTcxZjhmZmE3OWE4NjZmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaApAQCAtNDMsODMgKzQzLDU0IEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwogICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgc2F2ZSgp
IGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworI2lmIFVTRShDRykKKyAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldElzQ0FMYXllckNv
bnRleHQoYm9vbCkgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOwotICAgIHZvaWQgZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQoYm9vbCkgZmluYWw7CisjZW5kaWYKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCBmaW5hbDsKIAorICAgIHZvaWQgc2F2ZUltcGwoKSBmaW5hbDsKKyAgICB2
b2lkIHJlc3RvcmVJbXBsKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZp
bmFsOwogI2lmIFVTRShDRykKICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwog
ICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCBkcmF3
UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikg
ZmluYWw7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lk
IGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAogICAgIHZvaWQg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKICAgICB2b2lkIGVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBJbXBsKGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGhJbXBsKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXRJbXBsKGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dEltcGwoY29uc3QgUGF0aCYpIGZp
bmFsOworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0OwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAg
IHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRo
KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0SW1wbChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVu
dCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
JikgZmluYWw7CiAKICAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkgZmluYWw7Ci0KLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJv
b2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0g
ICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKLSNlbmRpZgotCi0g
ICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lk
IGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwotCi0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsK
LQotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2
ZW5PZGQpIGZpbmFsOwotCi0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0K
LSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHNl
dExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQp
IGZpbmFsOwotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBG
bG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7
Ci0gICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWw7Ci0g
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUs
IEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotI2VuZGlmCi0K
LSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
IGZpbmFsOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotCi0g
ICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9p
ZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0
aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNj
YWxlKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFs
OwogCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0Jiwg
Um91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CisgICAgdm9pZCBkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQg
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpIGZpbmFsOwogCisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKICAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBm
bG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAt
MTI3LDIzICs5OCwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNl
bmRpZgogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpIGZpbmFsOwotICAgIHZvaWQgZHJhd0ds
eXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRT
bW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
dG8gPSBzdGQ6Om51bGxvcHQpIGZpbmFsOwotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2Fk
ZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZv
bnROb3RSZWFkeSkgZmluYWw7CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3U3lz
dGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkg
ZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBkcmF3
UGF0dGVybkltcGwoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24pIGZpbmFsOworI2VuZGlmCiAKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
KSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKLQogICAgIHZvaWQgZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7Ci0KLSAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgYWRkRGVzdGlu
YXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFs
OwotCiAgICAgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsKKyAgICB2
b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0
UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBk
YXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmlu
YWw7CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQogICAgIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVH
ZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggYmI0ZGFjMDE5YzViOWUxM2IxMzdhZTY5NGU0
YmY2YjI3NmJmY2MwZC4uMWMxYjk2ZWM1Yjk4M2NjNWYxOGQ2ZmYxZmQyNTg1N2ZhOTQzYzQxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2Vu
ZXJhdGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Ny
b3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcApAQCAtOTAsNyArOTAsNyBAQCB2b2lkIENyb3NzZmFk
ZUdlbmVyYXRlZEltYWdlOjpkcmF3Q3Jvc3NmYWRlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
IEltYWdlRHJhd1Jlc3VsdCBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25z
LmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4
dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QubG9jYXRpb24o
KSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaApp
bmRleCAyNWEzZDNmZTg3NzMzMWRkYTM5NTc4MDExYjZkODkwZjIxMmM3MmU2Li4xZGU0ZjMzZDM0
MzEzMTZjM2YxMDZiY2I4YjdlYmFiY2NjMTg2YzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDI0ICsy
Niw5IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2lu
Y2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgi
CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCi0jaWYgVVNFKENPUkVfVEVYVCkKLSNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8Q29yZVRleHQvQ29y
ZVRleHQuaD4KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRl
eHRTUElXaW4uaD4KLSNlbHNlCi0jaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgot
I2VuZGlmCi0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNlbmRpZgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CkBAIC02Miw3NiArNDcs
MzIgQEAgcHVibGljOgogI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCiAgICAg
dm9pZCBkcmF3TmF0aXZlVGV4dChDVEZvbnRSZWYsIENHRmxvYXQgZm9udFNpemUsIENUTGluZVJl
ZiwgQ0dSZWN0IGxpbmVSZWN0KTsKIAotICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0KTsKLSAgICB2b2lkIHJlY29yZEVuZExh
eWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmKTsKLSAgICB2b2lkIHJlY29yZERy
YXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIGNvbnN0IENHQWZmaW5l
VHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBz
aXplX3QgY291bnQpOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlKENHUmVuZGVyaW5nU3RhdGVS
ZWYsIENHR1N0YXRlUmVmLCBDR1JlY3QsIENHSW1hZ2VSZWYpOworICAgIHZvaWQgcmVjb3JkQmVn
aW5MYXllcihDR0dTdGF0ZVJlZik7CisgICAgdm9pZCByZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJl
Zik7CisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENHR1N0YXRlUmVmLCBjb25zdCBDR0dseXBo
W10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7CisgICAgdm9pZCBy
ZWNvcmREcmF3SW1hZ2UoQ0dHU3RhdGVSZWYsIENHUmVjdCwgQ0dJbWFnZVJlZik7CiAjZW5kaWYK
IAotICAgIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMoKSBjb25z
dCB7IHJldHVybiBtX2RlY29uc3RydWN0RHJhd0dseXBoczsgfQotCiBwcml2YXRlOgotI2lmIFVT
RShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29u
dGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgZHJhd0J5
U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwot
ICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJh
d05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwotCi0gICAgdm9pZCBwb3B1bGF0ZUlu
dGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHBvcHVs
YXRlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9p
ZCBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7
Ci0gICAgdm9pZCBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOworICAgIHZvaWQgc2V0SW50ZXJu
YWxGb250KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGUgcHJlcGFyZUludGVybmFsQ29udGV4dCgpOworICAgIHZvaWQgcmVzdG9yZURlc3Rp
bmF0aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSk7
CiAKLSAgICB2b2lkIHVwZGF0ZUZpbGxDb2xvcihjb25zdCBDb2xvciYsIEdyYWRpZW50KiA9IG51
bGxwdHIsIFBhdHRlcm4qID0gbnVsbHB0cik7Ci0gICAgdm9pZCB1cGRhdGVTdHJva2VDb2xvcihj
b25zdCBDb2xvciYsIEdyYWRpZW50KiA9IG51bGxwdHIsIFBhdHRlcm4qID0gbnVsbHB0cik7Ci0g
ICAgdm9pZCB1cGRhdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgZW51bSBjbGFz
cyBTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyB7Ci0gICAgICAgIFVuc3BlY2lmaWVkLAotICAgICAg
ICBZZXMsCi0gICAgICAgIE5vCi0gICAgfTsKLSAgICB2b2lkIHVwZGF0ZVNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNo
YWRvd0NvbG9yLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0KLSNpZiBVU0UoQ09SRV9URVhU
KSAmJiAhUExBVEZPUk0oV0lOKQotICAgIHZvaWQgdXBkYXRlU2hhZG93KENHU3R5bGVSZWYpOwot
I2VuZGlmCisgICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAg
ICB2b2lkIGRyYXdPVFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCos
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd0J5
U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHQmIG1fb3duZXI7CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2Rl
c3RpbmF0aW9uQ29udGV4dDsKICAgICBEZWNvbnN0cnVjdERyYXdHbHlwaHMgbV9kZWNvbnN0cnVj
dERyYXdHbHlwaHM7CiAgICAgRGVyaXZlRm9udEZyb21Db250ZXh0IG1fZGVyaXZlRm9udEZyb21D
b250ZXh0OwogCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICBVbmlx
dWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKLSNlbmRpZgotCiAgICAg
Y29uc3QgRm9udCogbV9vcmlnaW5hbEZvbnQgeyBudWxscHRyIH07CiAgICAgRm9udFNtb290aGlu
Z01vZGUgbV9zbW9vdGhpbmdNb2RlIHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcg
fTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7CiAKLSAgICBzdHJ1
Y3QgU3RhdGUgewotICAgICAgICBzdHJ1Y3QgU3R5bGUgewotICAgICAgICAgICAgQ29sb3IgY29s
b3I7Ci0gICAgICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OwotICAgICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgICAgICAgICBSZWZQ
dHI8UGF0dGVybj4gcGF0dGVybjsKLSAgICAgICAgfTsKLSAgICAgICAgU3R5bGUgZmlsbFN0eWxl
OwotICAgICAgICBTdHlsZSBzdHJva2VTdHlsZTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3RtOwotCi0gICAgICAgIHN0cnVjdCBTaGFkb3dTdGF0ZSB7Ci0gICAgICAgICAgICBGbG9hdFNp
emUgb2Zmc2V0OwotICAgICAgICAgICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICAgICAgICAgIENv
bG9yIGNvbG9yOwotICAgICAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsK
LSAgICAgICAgfTsKLSAgICAgICAgU2hhZG93U3RhdGUgc2hhZG93OwotICAgIH07Ci0gICAgU3Rh
dGUgbV9vcmlnaW5hbFN0YXRlOwotICAgIFN0YXRlIG1fY3VycmVudFN0YXRlOworI2lmIFVTRShD
T1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4
dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cAppbmRleCA4NTE4MGFkMTA5ZmQ4MThlOWJiMTU4OGNlOTYyYWI0NjMwODE2YTA5Li45YjZhZGQw
NWZhYmM2ZTJjOWQwYjU1MDc3MWNmNDhhZGQ1Njc4OWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0yMTQsNyArMjE0LDcgQEAg
c3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2Fz
Y2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBkaXNw
bGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+KCk7
Ci0gICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5
TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIERy
YXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpObyk7CisgICAgRGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgRmxvYXRS
ZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0
RHJhd0dseXBoczo6Tm8pOwogICAgIAogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHRvRmxv
YXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkpKTsKICAg
ICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5nQ29udGV4dCwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9p
bnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCmluZGV4IDY0NTg0ZTVjZmUwMTE4ODJl
ZmFiMmUyM2MzYTU5NGUxNzgyZjI4OTAuLjJmODI3ZjYyNWY2NGI1OWNhMWE2NjQ5NjA3MzBmMDNj
MjNiYzM3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50SW1hZ2UuY3BwCkBAIC00Myw3ICs0Myw3IEBAIEdyYWRpZW50SW1hZ2U6On5HcmFkaWVu
dEltYWdlKCkgPSBkZWZhdWx0OwogSW1hZ2VEcmF3UmVzdWx0IEdyYWRpZW50SW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENv
bnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNv
bXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0
LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVz
dENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVj
dC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgR3JhZGll
bnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkCiAgICAgbV9ncmFkaWVudC0+YWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJh
d2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVkU3JjUmVjdCwgc3BhY2luZyk7CiAKICAgICAvLyBG
YWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBzY2FsZSB0byBnZW5lcmF0ZSBhdCB0
aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0g
ZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZp
Y2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRl
eHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueFNj
YWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RNLnlTY2FsZSgp
KTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJuQ1RNID0gcGF0dGVyblRyYW5z
Zm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDBiYjEzNTk3Y2VhNzM2OWRiYmM2ZTE3MjdmMjZjOTJiOGZiNzUx
NzYuLjMxZDk5ZTliN2U1NTRkMTIyMDQyMjY2ZjJiOTkwZmMwZmNhOGRmNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRpYVBs
YXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk51bGxH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIlN5
c3RlbUltYWdlLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgpAQCAtNzYsNDMzICs3NSwzNDQgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX29mZnNldDsKIH07CiAKLSNkZWZpbmUgQ0hFQ0tfRk9S
X0NIQU5HRURfUFJPUEVSVFkoZmxhZywgcHJvcGVydHkpIFwKLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZykgJiYgKG1fc3RhdGUucHJvcGVy
dHkgIT0gc3RhdGUucHJvcGVydHkpKSBcCi0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6ZmxhZyk7Ci0KLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpCi0gICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAsIHNob3VsZFNt
b290aEZvbnRzKHRydWUpCi0gICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHModHJ1ZSkK
LSAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotICAgICwgZHJhd0x1bWluYW5j
ZU1hc2soZmFsc2UpCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9h
dFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlRmxh
Z3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAg
OiBtX3N0YXRlKGluaXRpYWxDbGlwLCBjaGFuZ2VGbGFncywgaW5pdGlhbENUTSkKIHsKIH0KIAot
R3JhcGhpY3NDb250ZXh0U3RhdGU6On5HcmFwaGljc0NvbnRleHRTdGF0ZSgpID0gZGVmYXVsdDsK
LUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKSA9IGRlZmF1bHQ7Ci1HcmFwaGlj
c0NvbnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpID0gZGVm
YXVsdDsKLQotdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgZmxhZ3MpCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewot
ICAgIGF1dG8gc3Ryb2tlRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xv
ckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5j
b250YWluc0FueShzdHJva2VGbGFncykpIHsKLSAgICAgICAgc3Ryb2tlQ29sb3IgPSBzdGF0ZS5z
dHJva2VDb2xvcjsKLSAgICAgICAgc3Ryb2tlR3JhZGllbnQgPSBzdGF0ZS5zdHJva2VHcmFkaWVu
dDsKLSAgICAgICAgc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZVBhdHRlcm47Ci0gICAgfQot
Ci0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JD
aGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWlu
c0FueShmaWxsRmxhZ3MpKSB7Ci0gICAgICAgIGZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsK
LSAgICAgICAgZmlsbEdyYWRpZW50ID0gc3RhdGUuZmlsbEdyYWRpZW50OwotICAgICAgICBmaWxs
UGF0dGVybiA9IHN0YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICBzaGFk
b3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIHNoYWRvd0JsdXIgPSBzdGF0
ZS5zaGFkb3dCbHVyOwotICAgICAgICBzaGFkb3dDb2xvciA9IHN0YXRlLnNoYWRvd0NvbG9yOwot
ICAgICAgICBzaGFkb3dSYWRpdXNNb2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKLSAgICB9
Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRo
aWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRo
aWNrbmVzczsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdGV4dERyYXdpbmdNb2RlID0gc3RhdGUu
dGV4dERyYXdpbmdNb2RlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHN0cm9rZVN0eWxlID0gc3RhdGUu
c3Ryb2tlU3R5bGU7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZmlsbFJ1bGUgPSBzdGF0ZS5maWxsUnVsZTsK
KyAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV90cmFuc3BhcmVu
Y3lMYXllckNvdW50KTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBhbHBoYSA9IHN0YXRlLmFscGhhOwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQoreworICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUp
OworICAgIHNhdmVJbXBsKCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKSB7Ci0gICAgICAgIGNvbXBvc2l0ZU9wZXJhdG9y
ID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgICAgIGJsZW5kTW9kZSA9IHN0YXRlLmJs
ZW5kTW9kZTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKK3sKKyAgICBpZiAobV9z
dGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHN0YXRlLnNob3Vs
ZEFudGlhbGlhczsKKyAgICBtX3N0YXRlID0gbV9zdGFjay50YWtlTGFzdCgpOwogCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0No
YW5nZSkpCi0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gc3RhdGUuc2hvdWxkU21vb3RoRm9u
dHM7CisgICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0YWNrIGJ1ZmZl
ciB3aGVuIGl0IGdvZXMgZW1wdHkuCisgICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRp
YXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5Lgor
ICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGFjay5jbGVhcigpOwogCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMgPSBzdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7CisgICAgcmVzdG9yZUltcGwo
KTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworRmxvYXRTaXplIEdyYXBoaWNz
Q29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBnZXRDVE0oKTsKKyAgICByZXR1cm4gRmxvYXRTaXplKHRyYW5zZm9ybS54U2NhbGUo
KSwgdHJhbnNmb3JtLnlTY2FsZSgpKTsKK30KKyAgICAKK0Zsb2F0U2l6ZSBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IGdldENUTSgpOworICAgIGF1dG8gdHJhbnNmb3JtZWREZXN0UmVjdCA9IHRyYW5zZm9y
bS5tYXBSZWN0KGRlc3RSZWN0KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtZWREZXN0UmVjdC5zaXpl
KCkgLyBzcmNSZWN0LnNpemUoKTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpKQotICAgICAgICBkcmF3THVt
aW5hbmNlTWFzayA9IHN0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpCit7CisgICAgKyttX3RyYW5zcGFyZW5j
eUxheWVyQ291bnQ7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBpbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit7CisgICAgQVNTRVJU
KG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXll
ckNvdW50OworfQogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdl
KSkKLSAgICAgICAgdXNlRGFya0FwcGVhcmFuY2UgPSBzdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsK
LSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgbV9zdGF0ZS5jbGlwKHJlY3QpOwor
ICAgIGNsaXBJbXBsKHJlY3QpOwogfQogCi1HcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7Ci0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX3N0YXRlLmNsaXAocGF0aC5mYXN0Qm91bmRpbmdS
ZWN0KCkpOworICAgIGNsaXBQYXRoSW1wbChwYXRoLCB3aW5kUnVsZSk7Cit9CiAKLSAgICBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwgc3Ryb2tlR3JhZGll
bnQpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBhdHRlcm5DaGFuZ2Us
IHN0cm9rZVBhdHRlcm4pOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxHcmFk
aWVudENoYW5nZSwgZmlsbEdyYWRpZW50KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShGaWxsUGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIFBh
dGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOworICAgIGNsaXBQYXRoKHBh
dGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd0NoYW5nZSkKLSAgICAgICAgJiYgKG1fc3RhdGUuc2hhZG93T2Zmc2V0ICE9
IHN0YXRlLnNoYWRvd09mZnNldAotICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dCbHVyICE9
IHN0YXRlLnNoYWRvd0JsdXIKLSAgICAgICAgICAgIHx8IG1fc3RhdGUuc2hhZG93Q29sb3IgIT0g
c3RhdGUuc2hhZG93Q29sb3IpKQotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBj
bGlwT3V0SW1wbChyZWN0KTsKK30KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0
cm9rZVRoaWNrbmVzc0NoYW5nZSwgc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShUZXh0RHJhd2luZ01vZGVDaGFuZ2UsIHRleHREcmF3aW5nTW9kZSk7Ci0g
ICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlQ29sb3JDaGFuZ2UsIHN0cm9rZUNv
bG9yKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsQ29sb3JDaGFuZ2UsIGZp
bGxDb2xvcik7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlU3R5bGVDaGFu
Z2UsIHN0cm9rZVN0eWxlKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsUnVs
ZUNoYW5nZSwgZmlsbFJ1bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEFscGhh
Q2hhbmdlLCBhbHBoYSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRo
JiBwYXRoKQoreworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgY2xpcE91dEltcGwocGF0
aCk7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpCbGVuZE1vZGVDaGFuZ2UgfSkKLSAgICAgICAgJiYgKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0
b3IgIT0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgfHwgbV9zdGF0ZS5ibGVuZE1vZGUgIT0gc3Rh
dGUuYmxlbmRNb2RlKSkgewotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSk7Ci0gICAgICAgIGNoYW5nZUZsYWdzLmFk
ZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKKyAgICAgICAgY2xpcE91dChyZWN0LnJl
Y3QoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNob3VsZEFudGlhbGlhcyk7Ci0gICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsIHNob3VsZFNt
b290aEZvbnRzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHNDaGFuZ2UsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7Ci0gICAg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2Us
IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShEcmF3THVtaW5hbmNlTWFza0NoYW5nZSwgZHJhd0x1bWluYW5jZU1hc2spOwotICAgIENIRUNL
X0ZPUl9DSEFOR0VEX1BST1BFUlRZKEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UsIGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9S
VCkKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShVc2VEYXJrQXBwZWFyYW5jZUNoYW5n
ZSwgdXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gY2hhbmdlRmxhZ3M7
CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7CisgICAgY2xp
cE91dChwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11
bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9zdGF0ZS5tZXJnZUNoYW5nZXMoc3RhdGUsIGZsYWdz
KTsKLQotICAgIGF1dG8gc3Ryb2tlRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChm
bGFncy5jb250YWluc0FueShzdHJva2VGbGFncykpCi0gICAgICAgIG1fY2hhbmdlRmxhZ3MucmVt
b3ZlKHN0cm9rZUZsYWdzKTsKLQotICAgIGF1dG8gZmlsbEZsYWdzID0geyBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRp
ZW50Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UgfTsKLSAg
ICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoZmlsbEZsYWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFn
cy5yZW1vdmUoZmlsbEZsYWdzKTsKLQotICAgIGF1dG8gY29tcG9zaXRlT3BlcmF0b3JGbGFncyA9
IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWlu
c0FueShjb21wb3NpdGVPcGVyYXRvckZsYWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1v
dmUoY29tcG9zaXRlT3BlcmF0b3JGbGFncyk7Ci0KLSAgICBtX2NoYW5nZUZsYWdzLmFkZChmbGFn
cyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBjbGlwVG9JbWFnZUJ1ZmZlckltcGwo
aW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlckltcGwoSW1hZ2VCdWZmZXImIGltYWdl
QnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRD
aGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KCptX3N0YXRlLnN0cm9r
ZUdyYWRpZW50LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVBhdHRlcm4oKm1fc3RhdGUu
c3Ryb2tlUGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRG
aWxsR3JhZGllbnQoKm1fc3RhdGUuZmlsbEdyYWRpZW50LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNw
YWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0Rmls
bFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hh
bmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRl
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQotICAgICAgICBjb250ZXh0
LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0
YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwotCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1fc3RhdGUuc3Ry
b2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dFRleHREcmF3aW5nTW9kZShtX3N0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3RhdGUuc3Ryb2tlQ29sb3Ip
OwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fc3RhdGUu
ZmlsbENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
U3R5bGUobV9zdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKQotICAgICAgICBjb250
ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAg
Y29udGV4dC5zZXRBbHBoYShtX3N0YXRlLmFscGhhKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNo
YW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKLSAgICAgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwg
bV9zdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIGNvbnRl
eHQuc2V0U2hvdWxkQW50aWFsaWFzKG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9v
dGhGb250c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMobV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdl
KSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMobV9zdGF0
ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0YXRlLmRyYXdMdW1pbmFu
Y2VNYXNrKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAgY29udGV4
dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChtX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5j
ZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VXNlRGFya0FwcGVhcmFuY2UobV9zdGF0ZS51
c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKKyAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0
aGlzLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoImNoYW5nZS1mbGFncyIsIG1fY2hhbmdlRmxhZ3MudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRD
aGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1ncmFkaWVudCIsIG1fc3Rh
dGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoInN0cm9rZS1wYXR0ZXJuIiwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdl
dCgpKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRl
T3BlcmF0aW9uKCk7CisgICAgc2V0Q29tcG9zaXRlTW9kZSh7IG9wLCBibGVuZE1vZGUgfSk7Cisg
ICAgZmlsbFJlY3QocmVjdCwgY29sb3IpOworICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2
aW91c09wZXJhdG9yKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVu
dCYgZ3JhZGllbnQpCit7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBmaWxsUmVjdElt
cGwocmVjdCwgZ3JhZGllbnQpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKTsKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdEltcGwoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBH
cmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgZ3JhZGllbnQuZmlsbCgqdGhpcywgcmVjdCk7Cit9
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKSkgewotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwg
bV9zdGF0ZS5zaGFkb3dCbHVyKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zm
c2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1jb2xvciIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoInNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUg
PT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkg
eworICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdGlv
bigpLCBibGVuZE1vZGUpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgICAgICAKKyAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
CisgICAgc2V0Q29tcG9zaXRlTW9kZSh7IHByZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSB9KTsK
KyAgICBmaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihwcmV2aW91c09wZXJhdG9yKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS10aGlja25lc3MiLCBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ0
ZXh0LWRyYXdpbmctbW9kZSIsIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlLnRvUmF3KCkpOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtY29sb3IiLCBt
X3N0YXRlLnN0cm9rZUNvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoImZpbGwtY29sb3IiLCBtX3N0YXRlLmZpbGxDb2xvcik7Cit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwogCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2Utc3R5bGUiLCBtX3N0YXRlLnN0
cm9rZVN0eWxlKTsKKyAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVybygpKQor
ICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7CisgICAgZWxzZQor
ICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFu
Z2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtcnVsZSIsIG1fc3RhdGUuZmlsbFJ1
bGUpOworICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxlID0gZmlsbFJ1bGUoKTsKKyAgICBDb2xvciBv
bGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShXaW5kUnVs
ZTo6RXZlbk9kZCk7CisgICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEiLCBtX3N0YXRlLmFscGhhKTsKKyAgICBmaWxsUGF0
aChwYXRoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShvbGRGaWxsUnVsZSk7CisgICAgc2V0Rmls
bENvbG9yKG9sZEZpbGxDb2xvcik7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0b3IiLCBtX3N0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZUFzUGF0aChjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxs
aXBzZShlbGxpcHNlKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpKQot
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBtX3N0YXRlLmJsZW5kTW9kZSk7
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBzZShlbGxp
cHNlKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hvdWxk
QW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9y
JiBzaGFkb3dDb2xvcikKK3sKKyAgICBhdXRvIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwor
ICAgIGF1dG8gb2xkU3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xvcigpOwogCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRz
Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtc21vb3RoLWZvbnRzIiwg
bV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CisgICAgc2V0RmlsbENvbG9yKHNoYWRvd0NvbG9y
KTsKKyAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7CisgICAgZHJhd0VsbGlwc2UoRmxv
YXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSkpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IpOwor
ICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xvcik7CisgICAgZHJhd0VsbGlwc2UocmVjdCk7
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHko
InNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMiLCBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKKyAgICBzZXRTdHJva2VDb2xv
cihvbGRTdHJva2VDb2xvcik7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpKQotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoImRyYXctbHVtaW5hbmNlLW1hc2siLCBtX3N0YXRlLmRyYXdMdW1pbmFu
Y2VNYXNrKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRo
KQoreworICAgIGZpbGxQYXRoKHBhdGgpOworICAgIHN0cm9rZVBhdGgocGF0aCk7Cit9CiAKLSNp
ZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgidXNlLWRhcmstYXBwZWFyYW5jZSIsIG1fc3RhdGUudXNlRGFy
a0FwcGVhcmFuY2UpOwotI2VuZGlmCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICBk
cmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2UubG9naWNh
bFNpemUoKSksIEZsb2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50
aW5nT3B0aW9ucyk7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCiB7Ci0gICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7Ci0gICAgcmV0dXJu
IHRzOworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7
IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLUdy
YXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQogewotICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNT
RVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgZHJhd0ltYWdlQnVmZmVySW1wbChpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0
aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUp
OworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0
eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAg
ICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQogewotICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewotICAgICAg
ICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sg
aXMgZW1wdHkiKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOwotICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwot
Ci0gICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0YWNrIGJ1ZmZlciB3
aGVuIGl0IGdvZXMgZW1wdHkuCi0gICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRpYXRl
bHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5LgotICAg
IGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGFjay5jbGVhcigpOworICAgIGF1
dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIGRyYXdDb25z
dW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBp
bWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2FsU2l6ZSksIGltYWdl
UGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1
bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5n
T3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3MpOwotICAg
IGRpZFVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAg
cmV0dXJuOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgp
OworICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgZGVzdGluYXRp
b24sIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9u
cyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBz
aGFkb3dDb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIHNhdmUoKTsKLQotICAgIHNldFN0cm9rZUNvbG9yKHNoYWRvd0NvbG9y
KTsKLSAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOwotCi0gICAgZHJhd0VsbGlwc2UoRmxv
YXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSkpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRlcnBvbGF0aW9u
UXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMs
IG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgSW1hZ2VCdWZmZXI6OmRyYXdD
b25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKK30KIAotICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xvcik7Ci0gICAgc2V0Rmls
bENvbG9yKGVsbGlwc2VDb2xvcik7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCit7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcklt
cGwoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKK30KIAot
ICAgIGRyYXdFbGxpcHNlKHJlY3QpOyAgCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1
bHRzKQoreworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBzb3Vy
Y2VJbWFnZVJlY3QsIHJlc3VsdHMpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKTsKKyAg
ICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CiAKLSAgICByZXN0b3JlKCk7Cisg
ICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5m
aWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOworICAgIGRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7CisgICAgc2NhbGUoZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRl
LnN0cm9rZUNvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxw
dHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOwor
ICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2Uu
c2l6ZSgpKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIFNoYWRv
d1JhZGl1c01vZGUgcmFkaXVzTW9kZSkKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBt
X3N0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBi
bHVyOwotICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnNoYWRv
d1JhZGl1c01vZGUgPSByYWRpdXNNb2RlOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0
KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlv
bigpKSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3Qs
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFy
U2hhZG93KCkKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0
YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9
IDA7Ci0gICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7Ci0gICAgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdDsKLSAgICBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKKyAgICBJ
bnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlz
U2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJu
IGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCYg
Ymx1ciwgQ29sb3ImIGNvbG9yKSBjb25zdAorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgYmx1ciA9
IG1fc3RhdGUuc2hhZG93Qmx1cjsKLSAgICBjb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7Ci0K
LSAgICByZXR1cm4gaGFzU2hhZG93KCk7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVy
cG9sYXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCitJbWFn
ZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBj
b25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKKyAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1
bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLmZp
bGxHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7
Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxD
b2xvckNoYW5nZSk7CisgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVs
ZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKKyAgICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgor
ICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKKyAgICB9CisKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1
YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24s
IHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJu
KFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBX
VEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKTsKKyAgICBzeXN0ZW1JbWFnZS5kcmF3KCp0
aGlzLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9zdGF0
ZS5maWxsQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwot
ICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBkcmF3UGF0dGVybkltcGwoaW1hZ2UsIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdy
YWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZUdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm5JbXBsKElt
YWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLnN0cm9rZUNvbG9y
ID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsK
LSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVu
dFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0g
ICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKTsKKyAgICBpbWFnZS5kcmF3UGF0dGVybigqdGhpcywgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdy
YWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3Jt
KQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
IHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLmZpbGxHcmFkaWVu
dCA9IFdURk1vdmUoZ3JhZGllbnQpOwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0gPSBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX3N0YXRlLmZpbGxQYXR0
ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKTsKLSAgICAvLyBGSVhNRTogYWxzbyBmaWxsIHBh
dHRlcm4/CisgICAgcGxheWVyLnBsYXllclByaXZhdGUoKS0+cGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZ01vZGUpCiB7Ci0gICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CisgICAgRm9udENh
c2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhz
QW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZ01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApOwot
ICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworICAgIGRyYXdHbHlwaHMoZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQog
CiBGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWdu
ZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCkBAIC01MTEsMTEgKzQyMSw2IEBA
IEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMs
IHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdH
bHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9k
ZSkKLXsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwotfQotCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRv
KQogewogICAgIGZvbnQuZHJhd0VtcGhhc2lzTWFya3MoKnRoaXMsIHJ1biwgbWFyaywgcG9pbnQs
IGZyb20sIHRvKTsKQEAgLTU0OSw3ICs0NTQsNDUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAog
ICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwogICAgIH0KIAotICAgIGJpZGlSdW5z
LmNsZWFyKCk7CisgICAgYmlkaVJ1bnMuY2xlYXIoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5bGUpCit7CisgICAgZHJhd0xp
bmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAs
IHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOworfQor
CitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcpCit7CisgICAgQ29sb3IgZHVt
bXlDb2xvcjsKKyAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xvcik7Cit9CisKK0Zsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCit7Cisg
ICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7CisgICAgZmxvYXQgdGhpY2tu
ZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7CisgICAgaWYgKHByaW50aW5nKQor
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwg
dGhpY2tuZXNzKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7
CisgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFu
ZCB5IHNjYWxlcyBhcmUgZXF1YWwuCisgICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8g
c3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7
CisgICAgaWYgKHNjYWxlIDwgMS4wKSB7CisgICAgICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJh
d3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxpbmUgaGlnaCwKKyAgICAgICAg
Ly8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVz
LiBUbyBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8gZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVk
IHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KKyAg
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA9IDAuNGY7Cisg
ICAgICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPyBzY2Fs
ZSA6IG1pbmltdW1VbmRlcmxpbmVBbHBoYTsKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeShzaGFkZSk7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBkZXZp
Y2VQb2ludCA9IHRyYW5zZm9ybS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIC8vIFZp
c3VhbCBvdmVyZmxvdyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2Vp
bGYuIHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFs
dWUgZm9yIHVuZGVybGluZSBkZWNvcmF0aW9uLgorICAgIEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2lu
ID0gRmxvYXRQb2ludChyb3VuZGYoZGV2aWNlUG9pbnQueCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQu
eSgpKSk7CisgICAgaWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCkpCisgICAg
ICAgIG9yaWdpbiA9IGludmVyc2UudmFsdWUoKS5tYXBQb2ludChkZXZpY2VPcmlnaW4pOworICAg
IHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25l
c3MpKTsKIH0KIAogc3RhdGljIEludFNpemUgc2NhbGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKQEAgLTYzOSwxODcgKzU4Miw5
IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVBbGlnbmVkSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByCiAgICAgcmV0dXJuIGNyZWF0ZVNjYWxlZEltYWdl
QnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUoKSwg
cmVuZGVyaW5nTWV0aG9kKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1J
bWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KQotewotICAgIHN5c3RlbUltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7
Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShp
bWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLUlt
YWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50
KCksIGltYWdlLnNpemUoaW1hZ2VQYWludGluZ09wdGlvbnMub3JpZW50YXRpb24oKSkpOwotICAg
IHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzcmNSZWN0LCBpbWFnZVBhaW50
aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAg
cmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwot
fQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBJbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUo
KnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdl
LmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcs
IG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGls
ZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKLSAg
ICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGhSdWxlID09IEltYWdlOjpT
dHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKLSAgICAgICAgLy8g
SnVzdCBkbyBhIHNjYWxlLgotICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICB9Ci0KLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlv
bnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgq
dGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUs
IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRp
b25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9u
LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUo
KSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
LXsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9
LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0
aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAg
ICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKLSAgICBkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIEZsb2F0UmVjdChkZXN0aW5hdGlv
biwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBp
bWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRv
IGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKLSAgICBkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9
LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVy
cG9sYXRpb25RdWFsaXR5KCkpOwotICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1v
dmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZp
bHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKLXsKLSAgICBhdXRvIHJlc3VsdCA9IGZpbHRl
ci5hcHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCByZXN1bHRzKTsKLSAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBy
ZXN1bHQtPmltYWdlQnVmZmVyKCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAv
IGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOwotICAgIGRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7Ci0gICAgc2NhbGUoZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRl
cm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlLmRyYXdQYXR0
ZXJuKCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAgIGNsaXBQYXRoKHBhdGgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7Ci0gICAgICAgIGNs
aXBPdXQocmVjdC5yZWN0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGF0aCBw
YXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcE91dChwYXRoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAg
aW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKLX0KLQotSW50
UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVu
dCkKLXsKLSAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
Ci0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotICAgIGZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRv
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQotewotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKSB7Ci0gICAgICAgIHNldENvbXBvc2l0
ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKLSAgICAgICAgZmls
bFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgICAgIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZpbGxSZWN0
KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJlY3Qo
cmVjdCk7Ci0KLSAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVybygpKQotICAg
ICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7Ci0gICAgZWxzZQotICAg
ICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAgICBXaW5kUnVs
ZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7Ci0gICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmls
bENvbG9yKCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOwotICAg
IHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBmaWxsUGF0aChwYXRoKTsKLSAgICAKLSAgICBz
ZXRGaWxsUnVsZShvbGRGaWxsUnVsZSk7Ci0gICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7
Ci19CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewot
ICAgIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247Ci0gICAg
bV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVuZE1vZGU7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSk7Ci19CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQ
b2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUg
cGVuU3R5bGUpCiB7CkBAIC04NTAsNzcgKzYxNSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojph
ZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAy
CiAgICAgfQogfQogCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNv
bnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIHJldHVybiBGbG9hdFNp
emUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOwotfQotICAgIAotRmxv
YXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byB0cmFuc2Zvcm1lZERlc3RSZWN0ID0g
dHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RS
ZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBmaWxsUGF0aChwYXRoKTsKLSAgICBz
dHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VB
c1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIFBhdGggcGF0aDsKLSAgICBw
YXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxs
aXBzZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2UpOwot
ICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIGRyYXdMaW5lc0ZvclRleHQo
cmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRo
KCkgfSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0eWxlKTsKLX0KLQotRmxvYXRSZWN0
IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQotewotICAgIENvbG9yIGR1bW15Q29sb3I7Ci0g
ICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQocmVj
dCwgcHJpbnRpbmcsIGR1bW15Q29sb3IpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0
Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgQ29sb3ImIGNvbG9yKQotewotICAgIEZsb2F0UG9p
bnQgb3JpZ2luID0gcmVjdC5sb2NhdGlvbigpOwotICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6
bWF4KHJlY3QuaGVpZ2h0KCksIDAuNWYpOwotICAgIGlmIChwcmludGluZykKLSAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykp
OwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRl
eHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIC8vIEp1c3QgY29tcHV0ZSBz
Y2FsZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcgeCBhbmQgeSBzY2FsZXMgYXJlIGVxdWFsLgot
ICAgIGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLmIoKSA/IHN0ZDo6aHlwb3QodHJhbnNmb3JtLmEo
KSwgdHJhbnNmb3JtLmIoKSkgOiB0cmFuc2Zvcm0uYSgpOwotICAgIGlmIChzY2FsZSA8IDEuMCkg
ewotICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRyYXdzIGEgbGluZSB0aGF0IGlzIGF0IGxl
YXN0IG9uZS1waXhlbCBsaW5lIGhpZ2gsCi0gICAgICAgIC8vIHdoaWNoIHRlbmRzIHRvIHZpc3Vh
bGx5IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxlcy4gVG8gY291bnRlciB0aGlzCi0gICAg
ICAgIC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGllZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9y
IHdoZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMuCi0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPSAwLjRmOwotICAgICAgICBmbG9hdCBzaGFkZSA9IHNj
YWxlID4gbWluaW11bVVuZGVybGluZUFscGhhID8gc2NhbGUgOiBtaW5pbXVtVW5kZXJsaW5lQWxw
aGE7Ci0gICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hh
ZGUpOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFw
UG9pbnQocmVjdC5sb2NhdGlvbigpKTsKLSAgICAvLyBWaXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2Nj
dXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRl
Y29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRlcmxpbmUgZGVjb3Jh
dGlvbi4KLSAgICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRmKGRl
dmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOwotICAgIGlmIChhdXRvIGlu
dmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQotICAgICAgICBvcmlnaW4gPSBpbnZlcnNlLnZh
bHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdp
biwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7Ci19Ci0KIGZsb2F0IEdyYXBo
aWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ry
b2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxvYXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNz
KCk7CkBAIC05NzIsMTUgKzY2Niw0IEBAIFZlY3RvcjxGbG9hdFBvaW50PiBHcmFwaGljc0NvbnRl
eHQ6OmNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0
dXJuIHsgcG9pbnQxLCBwb2ludDIgfTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgp
LT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwotfQotI2Vu
ZGlmCi0KLXZvaWQgTnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBlMTZjMjMw
OTI4MWVkYTlmMDAwZWUzMDRlODMxZWIwZmVhZjhjNjg0Li40NjJlNWNkZWU4YWZkYzY5ZDRhZDE0
MWU0YzRlMmUzMDQzMjRjZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTMwLDQ5ICszMCwxOCBAQAogI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5j
bHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAot
I2lmIFVTRShDRykKLXR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDsKLSNlbGlmIFVTRShDQUlSTykKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBo
aWNzQ29udGV4dENhaXJvOwotfQotdHlwZWRlZiBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
byBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbHNlCi10eXBlZGVmIHZvaWQgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJE
SUJQaXhlbERhdGEuaCIKLXR5cGVkZWYgc3RydWN0IEhEQ19fKiBIREM7Ci0jaWYgIVVTRShDRykK
LS8vIFVJbnQ4IGlzIGRlZmluZWQgaW4gQ29yZUZvdW5kYXRpb24vQ0ZCYXNlLmgKLXR5cGVkZWYg
dW5zaWduZWQgY2hhciBVSW50ODsKLSNlbmRpZgotI2VuZGlmCi0KLS8vIFgxMSBoZWFkZXJzIGRl
ZmluZSBhIGJ1bmNoIG9mIG1hY3JvcyB3aXRoIGNvbW1vbiB0ZXJtcywgaW50ZXJmZXJpbmcgd2l0
aCBXZWJDb3JlIGFuZCBXVEYgZW51bSB2YWx1ZXMuCi0vLyBBcyBhIHdvcmthcm91bmQsIHdlIGV4
cGxpY2l0bHkgdW5kZWYgdGhlbSBoZXJlLgotI2lmIGRlZmluZWQoTm9uZSkKLSN1bmRlZiBOb25l
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKEJlbG93KQotI3VuZGVmIEJlbG93Ci0jZW5kaWYKLSNpZiBk
ZWZpbmVkKFN1Y2Nlc3MpCi0jdW5kZWYgU3VjY2VzcwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwpAQCAtODIsNyArNTEsNiBAQCBjbGFzcyBG
bG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEludFJlY3Q7CiBjbGFz
cyBNZWRpYVBsYXllcjsKIGNsYXNzIFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
R0w7CkBAIC05MSwxNzQgKzU5LDEyIEBAIGNsYXNzIFN5c3RlbUltYWdlOwogY2xhc3MgVGV4dFJ1
bjsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCi1uYW1lc3BhY2UgRGlzcGxheUxpc3Qg
ewotY2xhc3MgUmVjb3JkZXI7Ci19Ci0KLWVudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWlu
dDhfdCB7Ci0gICAgRmlsbCA9IDEgPDwgMCwKLSAgICBTdHJva2UgPSAxIDw8IDEsCi19OwotdXNp
bmcgVGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2RlPjsKLQot
Ly8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Vi
a2l0LWJveC1zaGFkb3cuCi0vLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+
IDhweC4KLWVudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgewotICAgIERlZmF1bHQs
Ci0gICAgTGVnYWN5Ci19OwotCi1lbnVtIFN0cm9rZVN0eWxlIHsKLSAgICBOb1N0cm9rZSwKLSAg
ICBTb2xpZFN0cm9rZSwKLSAgICBEb3R0ZWRTdHJva2UsCi0gICAgRGFzaGVkU3Ryb2tlLAotICAg
IERvdWJsZVN0cm9rZSwKLSAgICBXYXZ5U3Ryb2tlLAotfTsKLQotc3RydWN0IERvY3VtZW50TWFy
a2VyTGluZVN0eWxlIHsKLSAgICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKLSAgICAgICAg
VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKLSAgICAgICAgU3Bl
bGxpbmcsCi0gICAgICAgIEdyYW1tYXIsCi0gICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1l
bnQsCi0gICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcwotICAgIH0gbW9kZTsKLSAgICBib29s
IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2UgfTsKLQotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4g
ZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1vZGU7Ci0gICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8RG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7Ci0gICAgZGVjb2Rl
ciA+PiBtb2RlOwotICAgIGlmICghbW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Ci0gICAg
ZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLSAgICBpZiAoIXNob3VsZFVzZURh
cmtBcHBlYXJhbmNlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IHt7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfX07Ci19Ci0KLXN0cnVjdCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsK
LSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotICAgIFdFQkNPUkVf
RVhQT1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFw
aGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNz
Q29udGV4dFN0YXRlJiYpOwotCi0gICAgZW51bSBDaGFuZ2UgOiB1aW50MzJfdCB7Ci0gICAgICAg
IFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKLSAgICAg
ICAgU3Ryb2tlUGF0dGVybkNoYW5nZSAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxLAotICAg
ICAgICBGaWxsR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDIsCi0g
ICAgICAgIEZpbGxQYXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywK
LSAgICAgICAgU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCA0
LAotICAgICAgICBTdHJva2VDb2xvckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8
IDUsCi0gICAgICAgIFN0cm9rZVN0eWxlQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICA9IDEg
PDwgNiwKLSAgICAgICAgRmlsbENvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCA3LAotICAgICAgICBGaWxsUnVsZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDgsCi0gICAgICAgIFNoYWRvd0NoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgOSwKLSAgICAgICAgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UgICAgICAg
ICAgID0gMSA8PCAxMCwKLSAgICAgICAgQWxwaGFDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMSA8PCAxMSwKLSAgICAgICAgQ29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlICAgICAg
ICAgICAgICAgID0gMSA8PCAxMiwKLSAgICAgICAgQmxlbmRNb2RlQ2hhbmdlICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAxMywKLSAgICAgICAgVGV4dERyYXdpbmdNb2RlQ2hhbmdlICAg
ICAgICAgICAgICAgICAgID0gMSA8PCAxNCwKLSAgICAgICAgU2hvdWxkQW50aWFsaWFzQ2hhbmdl
ICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNSwKLSAgICAgICAgU2hvdWxkU21vb3RoRm9udHND
aGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAxNiwKLSAgICAgICAgU2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzQ2hhbmdlICAgICAgID0gMSA8PCAxNywKLSAgICAgICAgRHJhd0x1bWluYW5j
ZU1hc2tDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAxOCwKLSAgICAgICAgSW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eUNoYW5nZSAgICAgICAgID0gMSA8PCAxOSwKLSNpZiBIQVZFKE9TX0RB
UktfTU9ERV9TVVBQT1JUKQotICAgICAgICBVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSAgICAgICAg
ICAgICAgICAgPSAxIDw8IDIwLAotI2VuZGlmCi0gICAgfTsKLSAgICB1c2luZyBTdGF0ZUNoYW5n
ZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47Ci0KLSAgICB2b2lkIG1lcmdlQ2hhbmdlcyhjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKTsKLQotICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQ7Ci0gICAgUmVm
UHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47Ci0gICAgCi0gICAgUmVmUHRyPEdyYWRpZW50PiBm
aWxsR3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+IGZpbGxQYXR0ZXJuOwotCi0gICAgRmxv
YXRTaXplIHNoYWRvd09mZnNldDsKLQotICAgIENvbG9yIHN0cm9rZUNvbG9yIHsgQ29sb3I6OmJs
YWNrIH07Ci0gICAgQ29sb3IgZmlsbENvbG9yIHsgQ29sb3I6OmJsYWNrIH07Ci0gICAgQ29sb3Ig
c2hhZG93Q29sb3I7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gc3Ryb2tlR3JhZGllbnRTcGFjZVRy
YW5zZm9ybTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07
Ci0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgeyAwIH07Ci0gICAgZmxvYXQgc2hhZG93Qmx1
ciB7IDAgfTsKLSAgICBmbG9hdCBhbHBoYSB7IDEgfTsKLQotICAgIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBXaW5kUnVsZSBmaWxsUnVsZSB7IFdpbmRSdWxl
OjpOb25aZXJvIH07Ci0KLSAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUg
eyBUZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07Ci0gICAgQmxlbmRN
b2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07Ci0gICAgSW50ZXJwb2xhdGlvblF1
YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IEludGVycG9sYXRpb25RdWFsaXR5OjpE
ZWZhdWx0IH07Ci0gICAgU2hhZG93UmFkaXVzTW9kZSBzaGFkb3dSYWRpdXNNb2RlIHsgU2hhZG93
UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwotCi0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgOiAxOwot
ICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwotICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzIDogMTsKLSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIDogMTsK
LSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDogMTsKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9T
VVBQT1JUKQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgOiAxOwotI2VuZGlmCi19OwotCi1z
dHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgewotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlKCkgPSBkZWZhdWx0OwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICAgICAg
LCBtX2NoYW5nZUZsYWdzKGZsYWdzKQotICAgIHsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJikgY29uc3Q7Ci0KLSAgICB2b2lkIGFjY3VtdWxhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLSAgICAKLSAgICB2b2lk
IGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZSBtX3N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIG1f
Y2hhbmdlRmxhZ3M7Ci19OwotCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKLQogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzogICAKKyAgICBmcmllbmQgY2xhc3Mg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNz
Q29udGV4dCgpID0gZGVmYXVsdDsKK3B1YmxpYzogICAKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFw
aGljc0NvbnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZUZsYWdzJiA9IHsgfSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBp
bml0aWFsQ1RNID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0Nv
bnRleHQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpAQCAtMjcwLDI3MCArNzYsMjc1IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBDb250ZXh0IFN0YXRlCisgICAgYm9v
bCBjb250ZW5mdWxQYWludERldGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50ZnVsUGFp
bnREZXRlY3RlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1f
Y29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9CisgICAgCisgICAgdmlydHVhbCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOyB9CiAKLSAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlj
a25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7IGRpZFVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2Up
OyB9Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHJva2VUaGlja25lc3M7IH0KKyAgICAvLyBDb250ZXh0IFN0YXRlCiAKLSAgICB2b2lkIHNldFN0
cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHls
ZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0
eWxlQ2hhbmdlKTsgfQotICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VTdHlsZTsgfQorICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIG1lcmdlU3RhdGVD
aGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikgeyBtX3N0YXRlLm1lcmdl
Q2hhbmdlcyhvdGhlcik7IH0KKyAgICB2b2lkIG1lcmdlU3RhdGVEaWZmcyhjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgb3RoZXIpIHsgbV9zdGF0ZS5tZXJnZURpZmZzKG90aGVyKTsgfQorICAg
IHZvaWQgY2xlYXJTdGF0ZUNoYW5nZXMoKSB7IG1fc3RhdGUuY2xlYXJDaGFuZ2VzKCk7IH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAg
ICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZUNvbG9yOyB9CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuZ2V0Q1RNKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgY3RtKSB7IG1fc3RhdGUuc2V0Q1RNKGN0bSk7IH0KKyAgICB2b2lkIGNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkgeyBzZXRDVE0oZ2V0Q1RNKCkgKiBjdG0pOyB9
CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgeyBzZXRDVE0oZ2V0Q1RNKCku
dHJhbnNsYXRlKHgsIHkpKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQorICAgIHZv
aWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnko
KSk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkgeyBzZXRDVE0oZ2V0Q1RN
KCkuc2NhbGUoc3gsIHN5KSk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywg
cyk7IH0KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyBzY2FsZShzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CisgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJ
blJhZGlhbnMpIHsgc2V0Q1RNKGdldENUTSgpLnJvdGF0ZShyYWQyZGVnKGFuZ2xlSW5SYWRpYW5z
KSkpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBh
dHRlcm4+JiYpOwotICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KKyAgICBjb25zdCBDb2xvciYgZmlsbENvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3Jh
ZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCku
Z3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5maWxsQnJ1c2goKS5wYXR0ZXJuKCk7IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGZpbGxTcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNo
KCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikgeyBtX3N0YXRlLnNldEZpbGxCcnVzaCh7IGNvbG9yIH0pOyB9CisgICAgdm9pZCBz
ZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0RmlsbEdyYWRpZW50KFdU
Rk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IH0KKyAgICB2b2lkIHNldEZpbGxQYXR0
ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VU
cmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4p
LCBzcGFjZVRyYW5zZm9ybSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tl
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsK
LSAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50LmdldCgpOyB9CisgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmZpbGxSdWxlKCk7IH0KKyAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxl
IGZpbGxSdWxlKSB7IG1fc3RhdGUuc2V0RmlsbFJ1bGUoZmlsbFJ1bGUpOyB9CiAKLSAgICB2b2lk
IHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuZmlsbFJ1bGUgPSBmaWxs
UnVsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxS
dWxlQ2hhbmdlKTsgfQotICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5maWxsUnVsZTsgfQorICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGllbnQqIHN0
cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLmdyYWRp
ZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5zdHJva2VCcnVzaCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJy
dXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKSB7IG1fc3RhdGUuc2V0U3Ryb2tlQnJ1c2goeyBjb2xvciB9KTsgfQorICAg
IHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5z
ZXRTdHJva2VHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50KSwgZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bSk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9z
dGF0ZS5zZXRTdHJva2VQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHBhdHRlcm5TcGFjZVRyYW5z
Zm9ybSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENv
bG9yJik7Ci0gICAgY29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuZmlsbENvbG9yOyB9CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3MoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tu
ZXNzKGZsb2F0IHRoaWNrbmVzcykgeyBtX3N0YXRlLnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25l
c3MpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0
ZXJuPiYmKTsKLSAgICBQYXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuZmlsbFBhdHRlcm4uZ2V0KCk7IH0KKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlU3R5bGUoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tl
U3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zZXRTdHJva2VTdHlsZShzdHlsZSk7
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVu
dD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQqIGZpbGxH
cmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9Cisg
ICAgTGluZUNhcCBpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVDYXAoKTsgfQor
ICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsgbV9zdGF0ZS5zZXRMaW5lQ2Fw
KGxpbmVDYXApOyB9CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wg
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOyB9Ci0gICAg
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KKyAgICBjb25zdCBMaW5lRGFzaCBsaW5lRGFzaCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUubGluZURhc2goKTsgfQorICAgIHZvaWQgc2V0TGluZURhc2go
TGluZURhc2gmJiBsaW5lRGFzaCkgeyBtX3N0YXRlLnNldExpbmVEYXNoKFdURk1vdmUobGluZURh
c2gpKTsgfQogCi0gICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxp
YXMpIHsgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXM7IGRpZFVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFu
Z2UpOyB9Ci0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNob3VsZEFudGlhbGlhczsgfQorICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5saW5lSm9pbigpOyB9CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbiBs
aW5lSm9pbikgeyBtX3N0YXRlLnNldExpbmVKb2luKGxpbmVKb2luKTsgfQogCi0gICAgdm9pZCBz
ZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1fc3RhdGUuc2hv
dWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgZGlkVXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKTsgfQotICAg
IGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNt
b290aEZvbnRzOyB9CisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUubWl0ZXJMaW1pdCgpOyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGlt
aXQpIHsgbV9zdGF0ZS5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQpOyB9CiAKLSAgICAvLyBOb3Jt
YWxseSBDRyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVz
IHRoZSBwZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCi0gICAgLy8gSW4gc29tZSBjYXNl
cyB3ZSBoYXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBv
ZiB0aGUgZ2x5cGhzLgotICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJv
b2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOyBkaWRVcGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IH0KKyAgICBD
b21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBv
c2l0ZU1vZGUoKTsgfQorICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGNvbXBvc2l0ZU1vZGUoKS5vcDsgfQorICAgIEJsZW5kTW9kZSBibGVu
ZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBjb21wb3NpdGVNb2RlKCkuYmxlbmRNb2Rl
OyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVNb2RlKENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9k
ZSkgeyBtX3N0YXRlLnNldENvbXBvc2l0ZU1vZGUoY29tcG9zaXRlTW9kZSk7IH0KKyAgICB2b2lk
IHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkgeyBtX3N0YXRlLnNl
dENvbXBvc2l0ZU1vZGUoeyBvcCwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7IH0KIAotICAgIHZvaWQg
c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5
KSB7IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IGRpZFVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlKTsgfQotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHk7IH0KKyAgICBjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5kcm9wU2hhZG93KCk7IH0KKyAgICB2b2lkIHNldERyb3BTaGFkb3coY29uc3Qg
RHJvcFNoYWRvdyYgZHJvcFNoYWRvdykgeyBtX3N0YXRlLnNldERyb3BTaGFkb3coZHJvcFNoYWRv
dyk7IH0KKyAgICB2b2lkIGNsZWFyU2hhZG93KCkgeyBtX3N0YXRlLnNldERyb3BTaGFkb3coeyB9
KTsgfQogCi0gICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0g
YWxwaGE7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBo
YUNoYW5nZSk7IH0KLSAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxw
aGE7IH0KKyAgICBib29sIGhhc1Zpc2libGVTaGFkb3coKSBjb25zdCB7IHJldHVybiBkcm9wU2hh
ZG93KCkuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7
IHJldHVybiBkcm9wU2hhZG93KCkuaXNCbHVycmVkKCk7IH0KKyAgICBib29sIGhhc1NoYWRvdygp
IGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5oYXNPdXRzZXRzKCk7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRv
cjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmJsZW5kTW9kZTsgfQorICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5hbHBoYSgpOyB9CisgICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRl
LnNldEFscGhhKGFscGhhKTsgfQogCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhib29s
IGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3THVt
aW5hbmNlTWFzazsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsgfQotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2so
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOyB9CisgICAgdm9pZCBzZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkpIHsgbV9zdGF0ZS5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkpOyB9CiAKLSAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShU
ZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKSB7IG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9k
ZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3
aW5nTW9kZUNoYW5nZSk7IH0KLSAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZTsgfQorICAgIFRleHRE
cmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
dGV4dERyYXdpbmdNb2RlKCk7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJh
d2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUpIHsgbV9zdGF0ZS5zZXRUZXh0RHJhd2luZ01v
ZGUodGV4dERyYXdpbmdNb2RlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaGFk
b3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBTaGFkb3dSYWRp
dXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRT
aGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxk
QW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMoKTsgfQor
ICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3Rh
dGUuc2V0U2hvdWxkQW50aWFsaWFzKHNob3VsZEFudGlhbGlhcyk7IH0KIAotICAgIGJvb2wgaGFz
VmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNp
YmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVT
aGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0Lndp
ZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNC
bHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3Rh
dGUuc2hhZG93Qmx1cjsgfQorICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKCk7IH0KKyAgICB2b2lkIHNldFNob3VsZFNt
b290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91bGRTbW9v
dGhGb250cyhzaG91bGRTbW9vdGhGb250cyk7IH0KIAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NV
UFBPUlQpCi0gICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJh
bmNlKSB7IG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UgPSB1c2VEYXJrQXBwZWFyYW5jZTsgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJh
bmNlQ2hhbmdlKTsgfQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICAvLyBOb3JtYWxseSBD
RyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBw
ZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCisgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBo
YXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUg
Z2x5cGhzLgorICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKTsgfQorICAgIHZvaWQg
c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKSB7IG1fc3RhdGUuc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250cyk7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIGJvb2wgc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCk7IH0KKyAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJv
b2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zZXRTaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyhzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7IH0KIAotICAgIHZvaWQgdXBkYXRlU3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyk7CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2soKTsgfQorICAgIHZvaWQgc2V0RHJhd0x1bWlu
YW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLnNldERyYXdMdW1pbmFu
Y2VNYXNrKGRyYXdMdW1pbmFuY2VNYXNrKTsgfQogCi0gICAgLy8gQ2FsbGVkICphZnRlciogYW55
IGNoYW5nZSB0byBHcmFwaGljc0NvbnRleHRTdGF0ZTsgZ2VuZXJhbGx5IHVzZWQgdG8gcHJvcGFn
YXRlIGNoYW5nZXMKLSAgICAvLyB0byB0aGUgcGxhdGZvcm0gY29udGV4dCdzIHN0YXRlLgotICAg
IHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7CisjaWYgSEFWRShP
U19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSgpOyB9CisgICAgdm9pZCBzZXRVc2VE
YXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlKSB7IG1fc3RhdGUuc2V0VXNlRGFy
a0FwcGVhcmFuY2UodXNlRGFya0FwcGVhcmFuY2UpOyB9CisjZW5kaWYKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzYXZlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIHJlc3RvcmUoKTsKLSAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKTsKICAgICB1bnNpZ25lZCBzdGFja1NpemUo
KSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQogCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5U3RhdGVDaGFuZ2VzKCkgPSAwOwogI2lmIFVTRShDRykKICAgICAvLyBGSVhNRTogU2hvdWxk
IHRoZXNlIHJlYWxseSBiZSBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IG1ldGhvZHM/Ci0gICAgdmly
dHVhbCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXBw
bHlGaWxsUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJu
KCkgPSAwOworI2VuZGlmCiAKLSAgICAvLyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBp
bnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRoZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgV0VCQ09SRV9FWFBP
UlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IENhbiB0aGlz
IGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJl
IHJlYWQgb2ZmIHRoZSBjb250ZXh0PwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChib29sKSA9IDA7Ci0jZW5kaWYKKyAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAK
LSAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29s
IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJuIHN1cHBvcnRzVHJhbnNwYXJl
bmN5TGF5ZXJzKCkgJiYgbV90cmFuc3BhcmVuY3lMYXllckNvdW50OyB9CiAKLSAgICAvLyBQaXhl
bCBTbmFwcGluZworICAgIC8vIENsaXBwaW5nCiAKLSAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Ci0g
ICAgICAgIFJvdW5kQWxsU2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwot
ICAgIH07Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9p
bnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogCi0gICAgLy8gU2hhcGVzCisgICAgdm9pZCBjbGlwT3V0
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYpOwogCi0gICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwgZG8gYm90aCBzdHJva2lu
ZyBhbmQgZmlsbGluZy4KLSAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRyYXdSZWN0KCksIHdoaWNo
IGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwotICAgIC8vIHVzaW5nIGEgMS1waXhl
bCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0aGUgY29ycmVjdAotICAg
IC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxp
cHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgSW50UmVjdCBjbGlwQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX3N0YXRlLmNsaXBCb3VuZHMo
KSk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICAvLyBTaGFwZXMK
IAotICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IHsgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgc3Ryb2tlRWxsaXBzZUFzUGF0aChl
bGxpcHNlKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUg
PSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBj
b25zdCBDb2xvciYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNv
bnN0IENvbG9yJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGxpbmVXaWR0aCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExpbmVDYXAoTGlu
ZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkm
LCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExpbmVKb2luKExp
bmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwog
Ci0gICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1lZGlhCisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKSA9IDA7CiAKLSAgICBJbnRTaXplIGNvbXBhdGlibGVJbWFnZUJ1ZmZlclNpemUoY29u
c3QgRmxvYXRTaXplJikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0g
c3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxv
cHQpIGNvbnN0OworICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tp
bmcgYW5kIGZpbGxpbmcuCisgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGlj
aCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKKyAgICAvLyB1c2luZyBhIDEtcGl4
ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKKyAg
ICAvLyBzdHJva2UgY29sb3IpLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2Rl
PiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpu
dWxsb3B0KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYg
c2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3Rk
OjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQ
YXRoJikgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0g
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0
aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAwOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRQb2ludCYpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lz
dGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1Jh
aXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwg
Y29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpcnR1
YWwgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFn
ZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIC8v
IEZvY3VzIFJpbmdzCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUs
IEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4g
dGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9m
ZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVP
ZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyNlbmRpZgogCisg
ICAgLy8gSW1hZ2VzCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1
ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0
ZXImLCBGaWx0ZXJSZXN1bHRzJik7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1h
Z2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKIAotICAgIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29u
c3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJh
d1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZh
Y3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvblJlY3QpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQ
YXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogI2lmIEVOQUJMRShWSURF
TykKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAjZW5kaWYKLQotICAg
IC8vIENsaXBwaW5nCi0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSA9
IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBG
bG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0g
MDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3Qg
UGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpID0gMDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0OwotCisgICAgCiAgICAgLy8gVGV4dAogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0g
MCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250
Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChj
b25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhp
bmdNb2RlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZy
b20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpu
dWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6
OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250
Tm90UmVhZHkpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICB7
Ci0gICAgICAgIGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBw
b2ludCwgZm9udFNtb290aGluZ01vZGUpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIEZs
b2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBi
b29sIHByaW50aW5nKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2Us
IFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9r
ZVN0eWxlID0gU29saWRTdHJva2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkg
PSAwOwogCi0gICAgLy8gVHJhbnNwYXJlbmN5IExheWVycworICAgIFdFQkNPUkVfRVhQT1JUIEZs
b2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBi
b29sIHByaW50aW5nKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5j
eUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYm
IHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7IH0KKyAgICAvLyBDb21wYXRpYmxlIEltYWdl
QnVmZmVyCiAKLSAgICAvLyBGb2N1cyBSaW5ncworICAgIEludFNpemUgY29tcGF0aWJsZUltYWdl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikg
PSAwOwotICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50
YXRpb24/IE9yIGVsc2V3aGVyZT8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVl
ZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+
ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAgIC8vIFRyYW5zZm9ybXMKKyAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6
Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAgICB2b2lkIHNjYWxlKGZsb2F0IHMp
IHsgc2NhbGUoeyBzLCBzIH0pOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5z
KSA9IDA7Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHRyYW5z
bGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9Ci0gICAgdm9pZCB0cmFuc2xhdGUo
Y29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54KCksIHAueSgpKTsgfQotICAgIHZp
cnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgPSAwOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4g
PSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0
OwogCi0gICAgdmlydHVhbCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7
CisgICAgCiAKLSAgICBlbnVtIEluY2x1ZGVEZXZpY2VTY2FsZSB7IERlZmluaXRlbHlJbmNsdWRl
RGV2aWNlU2NhbGUsIFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlIH07Ci0gICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVk
ZURldmljZVNjYWxlKSBjb25zdCA9IDA7CisgICAgCisgICAgLy8gUGl4ZWwgU25hcHBpbmcKKwor
ICAgIGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAgICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAg
Um91bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAgfTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5k
QWxsU2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5l
VG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBz
dHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworCisgICAgLy8gVHJhbnNmb3JtcwogCiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250
ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgogICAgIC8vIGFjdGluZyBhcyBhIGJh
c2UtbGV2ZWwgY29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KICAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsg
fQotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OwotICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKIAogICAg
IC8vIExpbmtzCiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBzZXRVUkxGb3JSZWN0KGNv
bnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldERl
c3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0
IEZsb2F0UG9pbnQmKSB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlu
a3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gQ29udGVudGZ1bCBQYWludCBE
ZXRlY3Rpb24KKyNpZiBVU0UoQ0cpCisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3
aHkgaW5zdGVhZCBvZiBhIHdoYXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZv
cm0/CisgICAgdmlydHVhbCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgeyB9CisgICAg
dmlydHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
Ci0gICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW50ZnVsUGFp
bnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkOyB9CisgICAgLy8gRklYTUU6
IENhbiB0aGlzIGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBP
ciBqdXN0IGJlIHJlYWQgb2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0Fj
Y2VsZXJhdGVkQ29udGV4dChib29sKSB7IH0KKyNlbmRpZgogCiAgICAgLy8gRklYTUU6IE5vdGhp
bmcgaW4gdGhpcyBzZWN0aW9uIGJlbG9uZ3MgaGVyZSwgYW5kIHNob3VsZCBiZSBtb3ZlZCBlbHNl
d2hlcmUuCiAjaWYgT1MoV0lORE9XUykKQEAgLTU0NiwxMSArMzU3LDIzIEBAIHB1YmxpYzoKICAg
ICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFuZCBXaW5kb3dzIENhaXJv
IGJhY2tlbmRzLgogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBk
ZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5k
aWYKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgc2F2ZUltcGwoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlc3RvcmVJbXBsKCkgPSAwOwogCi1wcml2YXRlOgotICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xpcEltcGwoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjbGlwUGF0aEltcGwoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1
bGU6OkV2ZW5PZGQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dEltcGwoY29uc3QgRmxv
YXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0SW1wbChjb25zdCBQYXRoJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlckltcGwoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlsbFJlY3RJbXBsKGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3Vs
dHMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVySW1wbChJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm5J
bXBsKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi1wcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxs
RWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VB
c1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7CiAKQEAgLTU2MSwxOTEgKzM4NCwxNiBAQCBwcm90ZWN0
ZWQ6CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tl
V2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7CiAgICAg
VmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0
aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQb2lu
dCBwb2ludDIpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKLQog
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRl
OwogICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRTdGF0ZSwgMT4gbV9zdGFjazsKIAogICAgIHVu
c2lnbmVkIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCB7IDAgfTsKICAgICBib29sIG1fY29udGVu
dGZ1bFBhaW50RGV0ZWN0ZWQgeyBmYWxzZSB9OwogfTsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wg
c2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBt
X3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2
ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwotICAgIH0KLSAgICAK
LSAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcigpCi0gICAgewotICAgICAgICBpZiAobV9z
YXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJl
c3RvcmUpOwotICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0
b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwot
ICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX2NvbnRleHQ7IH0KLQotcHJp
dmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFu
ZFJlc3RvcmU7Ci19OwotCi1jbGFzcyBUcmFuc3BhcmVuY3lMYXllclNjb3BlIHsKLXB1YmxpYzoK
LSAgICBUcmFuc3BhcmVuY3lMYXllclNjb3BlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxv
YXQgYWxwaGEsIGJvb2wgYmVnaW5MYXllciA9IHRydWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCi0gICAgICAgICwgbV9hbHBoYShhbHBoYSkKLSAgICAgICAgLCBtX2JlZ2FuTGF5ZXIo
YmVnaW5MYXllcikKLSAgICB7Ci0gICAgICAgIGlmIChiZWdpbkxheWVyKQotICAgICAgICAgICAg
bV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgYmVnaW5MYXllcihmbG9hdCBhbHBoYSkKLSAgICB7Ci0gICAgICAgIG1fYWxwaGEg
PSBhbHBoYTsKLSAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBo
YSk7Ci0gICAgICAgIG1fYmVnYW5MYXllciA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIH5UcmFu
c3BhcmVuY3lMYXllclNjb3BlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2JlZ2FuTGF5ZXIpCi0g
ICAgICAgICAgICBtX2NvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Ci0gICAgZmxvYXQgbV9hbHBo
YTsKLSAgICBib29sIG1fYmVnYW5MYXllcjsKLX07Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFN0
YXRlU3RhY2tDaGVja2VyIHsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNr
Q2hlY2tlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCi0gICAgICAgICwgbV9zdGFja1NpemUoY29udGV4dC5zdGFja1NpemUoKSkKLSAgICB7
IH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIoKQotICAgIHsK
LSAgICAgICAgaWYgKG1fY29udGV4dC5zdGFja1NpemUoKSAhPSBtX3N0YWNrU2l6ZSkKLSAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0ICVwIHN0YWNrIGNoYW5nZWQgYnkg
JWQiLCAmbV9jb250ZXh0LCAoaW50KW1fY29udGV4dC5zdGFja1NpemUoKSAtIChpbnQpbV9zdGFj
a1NpemUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4
dDsKLSAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKLX07Ci0KLWNsYXNzIEludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1
YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBv
bGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgICAgICA6IG1fZ3Jh
cGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkKLSAgICAgICAgLCBtX2N1cnJlbnRJbnRlcnBv
bGF0aW9uUXVhbGl0eShncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgp
KQotICAgICAgICAsIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKGludGVycG9sYXRpb25R
dWFsaXR5VG9Vc2UgIT0gSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgJiYgbV9jdXJyZW50
SW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKLSAgICB7
Ci0gICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAg
IG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJwb2xh
dGlvblF1YWxpdHlUb1VzZSk7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1
YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBzdGQ6Om9w
dGlvbmFsPEludGVycG9sYXRpb25RdWFsaXR5PiBpbnRlcnBvbGF0aW9uUXVhbGl0eSkKLSAgICAg
ICAgOiBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoZ3JhcGhpY3NDb250ZXh0LCBpbnRl
cnBvbGF0aW9uUXVhbGl0eSA/IGludGVycG9sYXRpb25RdWFsaXR5LnZhbHVlKCkgOiBncmFwaGlj
c0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKCkKLSAgICB7Ci0gICAgICAgIGlmICht
X2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250
ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkobV9jdXJyZW50SW50ZXJwb2xhdGlvblF1
YWxpdHkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhp
Y3NDb250ZXh0OwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1fY3VycmVudEludGVycG9sYXRp
b25RdWFsaXR5OwotICAgIGJvb2wgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQ7Ci19Owot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
PiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywK
LSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcsCi0g
ICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIsCi0gICAg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0aW9uUmVw
bGFjZW1lbnQsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlcwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKLSAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpTdHJva2VHcmFkaWVudENoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEdyYWRpZW50Q2hhbmdlLAotICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsUGF0dGVybkNoYW5n
ZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tl
VGhpY2tuZXNzQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpTdHJva2VDb2xvckNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGVDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxDb2xvckNoYW5nZSwKLSAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbFJ1bGVDaGFuZ2UsCi0gICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNoYWRvd0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0ln
bm9yZVRyYW5zZm9ybXNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkFscGhhQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkJsZW5kTW9kZUNoYW5nZSwKLSAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERyYXdpbmdNb2Rl
Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpT
aG91bGRBbnRpYWxpYXNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHND
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRy
YXdMdW1pbmFuY2VNYXNrQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlCi0jaWYgSEFWRShP
U19EQVJLX01PREVfU1VQUE9SVCkKLSAgICAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZQotI2VuZGlmCi0gICAgPjsKLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6U3Ryb2tlU3R5bGU+IHsK
LSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxl
LAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpOb1N0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJv
a2VTdHlsZTo6U29saWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdHRlZFN0
cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlLAotICAgIFdlYkNv
cmU6OlN0cm9rZVN0eWxlOjpEb3VibGVTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6
OldhdnlTdHJva2UKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVz
PAotICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGUsCi0gICAgICAgIFdlYkNvcmU6OlRl
eHREcmF3aW5nTW9kZTo6RmlsbCwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpT
dHJva2UKLSAgICA+OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZDVm
OTg4MTcwYjI3MmYzOGRlNjhhZmI4YTkxNjE4NjUwNzMzMjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAK
QEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0
YXRlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IENoYW5nZUZsYWdzJiBjaGFuZ2VGbGFn
cywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQorICAgIDogbV9jbGlwQm91bmRz
KGluaXRpYWxDVE0ubWFwUmVjdChpbml0aWFsQ2xpcCkpCisgICAgLCBtX2NoYW5nZUZsYWdzKGNo
YW5nZUZsYWdzKQorICAgICwgbV9jdG0oaW5pdGlhbENUTSkKK3sKK30KKworRmxvYXRSZWN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwQm91bmRzKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBp
bnZlcnNlID0gbV9jdG0uaW52ZXJzZSgpKQorICAgICAgICByZXR1cm4gaW52ZXJzZS0+bWFwUmVj
dChtX2NsaXBCb3VuZHMpOworCisgICAgLy8gSWYgdGhlIENUTSBpcyBub3QgaW52ZXJ0aWJsZSwg
cmV0dXJuIHRoZSBvcmlnaW5hbCByZWN0LgorICAgIC8vIFRoaXMgbWF0Y2hlcyBDR1JlY3RBcHBs
eUludmVyc2VBZmZpbmVUcmFuc2Zvcm0gYmVoYXZpb3IuCisgICAgcmV0dXJuIG1fY2xpcEJvdW5k
czsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25seVByaW1pdGl2ZUNoYW5n
ZXMoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdGV4cHIgQ2hhbmdlRmxhZ3MgcHJpbWl0aXZl
Q2hhbmdlRmxhZ3MgeyBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgQ2hhbmdlOjpTdHJva2VCcnVz
aCwgQ2hhbmdlOjpGaWxsQnJ1c2ggfTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICE9IChtX2No
YW5nZUZsYWdzICYgcHJpbWl0aXZlQ2hhbmdlRmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhDaGFuZ2U6OlN0cm9rZUJydXNoKSAm
JiAhbV9zdHJva2VCcnVzaC5pc1ByaW1pdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhDaGFuZ2U6OkZpbGxCcnVzaCkgJiYgIW1f
ZmlsbEJydXNoLmlzUHJpbWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKQoreworICAgIGF1dG8gbWVyZ2VDaGFu
Z2UgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3Bl
cnR5KSB7CisgICAgICAgIGlmIChvdGhlci5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkp
IHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9wZXJ0eTsKKyAgICAg
ICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgQVNTRVJUKG1fY2xpcEJvdW5kcyA9PSBvdGhlci5tX2NsaXBCb3VuZHMpOworCisgICAgbWVy
Z2VDaGFuZ2UoQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpGaWxsQnJ1
c2gsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1
c2gpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpOworCisgICAgbWVyZ2VDaGFu
Z2UoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VU
aGlja25lc3MsICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VU
aGlja25lc3MpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUpOworCisgICAg
bWVyZ2VDaGFuZ2UoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Okxp
bmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xp
bmVEYXNoKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKTsKKyAgICBtZXJnZUNo
YW5nZShDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpDb21w
b3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21w
b3NpdGVNb2RlKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpOworCisgICAg
bWVyZ2VDaGFuZ2UoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlRleHREcmF3
aW5nTW9kZSwgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3
aW5nTW9kZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7Cisg
ICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAgbWVyZ2VDaGFu
Z2UoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIG1lcmdlQ2hhbmdl
KENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlQ2hhbmdlKENoYW5n
ZTo6RHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisg
ICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZURpZmYgPSBbJl0oQ2hhbmdlIGNoYW5n
ZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmICh0
aGlzLT4qcHJvcGVydHkgIT0gb3RoZXIuKnByb3BlcnR5KSB7CisgICAgICAgICAgICB0aGlzLT4q
cHJvcGVydHkgPSBvdGhlci4qcHJvcGVydHk7CisgICAgICAgICAgICBtX2NoYW5nZUZsYWdzLmFk
ZChjaGFuZ2UpOworICAgICAgICB9CisgICAgfTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkNU
TSwgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0p
OworICAgIAorICAgIG1lcmdlRGlmZihDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAgIG1lcmdlRGlmZihD
aGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAg
IG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6
OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9z
dHJva2VTdHlsZSk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCk7CisgICAgbWVyZ2VE
aWZmKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lSm9pbiwgICAg
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAg
IG1lcmdlRGlmZihDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkNv
bXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21w
b3NpdGVNb2RlKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJn
ZURpZmYoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fYWxwaGEpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAg
IG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6
OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9z
aG91bGRTbW9vdGhGb250cyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzLCAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMsICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6VXNlRGFya0FwcGVhcmFu
Y2UsICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNl
KTsKKyNlbmRpZgorfQorCitUZXh0U3RyZWFtJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHVtcChU
ZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICBhdXRvIGR1bXAgPSBbJl0oQ2hhbmdlIGNoYW5n
ZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5LCBjb25zdCBTdHJpbmcmIG5h
bWUpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkKKyAgICAg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eShuYW1lLCB0aGlzLT4qcHJvcGVydHkpOworICAgIH07CisK
KyAgICB0cy5kdW1wUHJvcGVydHkoImNsaXAtYm91bmRzIiwgbV9jbGlwQm91bmRzKTsKKworICAg
IGR1bXAoQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2N0bSwgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3RtIik7CisKKyAg
ICBkdW1wKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgImZpbGwtYnJ1c2gi
KTsKKyAgICBkdW1wKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgImZpbGwt
cnVsZSIpOworCisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAg
ICJzdHJva2UtYnJ1c2giKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MsICAgICAg
ICAgICAgICAgInN0cm9rZS10aGlja25lc3MiKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlU3R5
bGUsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHls
ZSwgICAgICAgICAgICAgICAgICAgInN0cm9rZS1zdHlsZSIpOworCisgICAgZHVtcChDaGFuZ2U6
OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
bGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAgICJsaW5lLWNhcCIpOworICAgIGR1bXAoQ2hh
bmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2xpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAibGluZS1kYXNoIik7CisgICAgZHVt
cChDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICJsaW5lLWpvaW4iKTsKKyAg
ICBkdW1wKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgIm1pdGVyLWxpbWl0
Iik7CisKKyAgICBkdW1wKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgImNv
bXBvc2l0ZS1tb2RlIik7CisgICAgZHVtcChDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdywgICAgICAgICAgICAg
ICAgICAgICJkcm9wLXNoYWRvdyIpOworCisgICAgZHVtcChDaGFuZ2U6OkFscGhhLCAgICAgICAg
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEsICAgICAgICAg
ICAgICAgICAgICAgICAgICJhbHBoYSIpOworICAgIGR1bXAoQ2hhbmdlOjpJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5LCAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksICAgICAiaW1hZ2UtaW50ZXJwb2xhdGlvbi1xdWFsaXR5Iik7CisgICAgZHVt
cChDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAgICJ0ZXh0LWRyYXdpbmctbW9k
ZSIpOworCisgICAgZHVtcChDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICJz
aG91bGQtYW50aWFsaWFzIik7CisgICAgZHVtcChDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMsICAg
ICAgICAgICAgICJzaG91bGQtc21vb3RoLWZvbnRzIik7CisgICAgZHVtcChDaGFuZ2U6OlNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICJzaG91bGQtc3VicGl4ZWwtcXVhbnRpemUtZm9udHMi
KTsKKyAgICBkdW1wKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgInNoYWRv
d3MtaWdub3JlLXRyYW5zZm9ybXMiKTsKKyAgICBkdW1wKENoYW5nZTo6RHJhd0x1bWluYW5jZU1h
c2ssICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFz
aywgICAgICAgICAgICAgImRyYXctbHVtaW5hbmNlLW1hc2siKTsKKyNpZiBIQVZFKE9TX0RBUktf
TU9ERV9TVVBQT1JUKQorICAgIGR1bXAoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlLCAgICAgICAg
ICAgICAidXNlLWRhcmstYXBwZWFyYW5jZSIpOworI2VuZGlmCisgICAgcmV0dXJuIHRzOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOTk4NjEz
OGJhZTZlZThkMGZkZjAxMDRlMzBlZDEwYjEyYzdjOTdlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApAQCAt
MCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VCcnVzaC5oIgorI2luY2x1ZGUg
IldpbmRSdWxlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVt
IGNsYXNzIENoYW5nZSA6IHVpbnQzMl90IHsKKyAgICAgICAgQ1RNICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMSA8PCAwLAorCisgICAgICAgIEZpbGxCcnVzaCAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMSwKKyAgICAgICAgRmlsbFJ1bGUgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAor
CisgICAgICAgIFN0cm9rZUJydXNoICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICAgICAg
U3Ryb2tlVGhpY2tuZXNzICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAgICBTdHJva2VTdHls
ZSAgICAgICAgICAgICAgICAgPSAxIDw8IDUsCisKKyAgICAgICAgTGluZUNhcCAgICAgICAgICAg
ICAgICAgICAgID0gMSA8PCA2LAorICAgICAgICBMaW5lRGFzaCAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDcsCisgICAgICAgIExpbmVKb2luICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwK
KyAgICAgICAgTWl0ZXJMaW1pdCAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorCisgICAgICAg
IENvbXBvc2l0ZU1vZGUgICAgICAgICAgICAgICA9IDEgPDwgMTAsCisgICAgICAgIERyb3BTaGFk
b3cgICAgICAgICAgICAgICAgICA9IDEgPDwgMTEsCisKKyAgICAgICAgQWxwaGEgICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAxMiwKKyAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSAgID0gMSA8PCAxMywKKyAgICAgICAgVGV4dERyYXdpbmdNb2RlICAgICAgICAgICAgID0gMSA8
PCAxNCwKKworICAgICAgICBTaG91bGRBbnRpYWxpYXMgICAgICAgICAgICAgPSAxIDw8IDE1LAor
ICAgICAgICBTaG91bGRTbW9vdGhGb250cyAgICAgICAgICAgPSAxIDw8IDE2LAorICAgICAgICBT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSAxIDw8IDE3LAorICAgICAgICBTaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyAgICAgPSAxIDw8IDE4LAorICAgICAgICBEcmF3THVtaW5hbmNlTWFzayAg
ICAgICAgICAgPSAxIDw8IDE5LAorI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAg
ICAgIFVzZURhcmtBcHBlYXJhbmNlICAgICAgICAgICA9IDEgPDwgMjAsCisjZW5kaWYKKyAgICB9
OworICAgIHVzaW5nIENoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47CisKKyAgICBzdGF0
aWMgY29uc3RleHByIENoYW5nZUZsYWdzIGluaXRpYWxDaGFuZ2VGbGFncyA9IHsgQ2hhbmdlOjpG
aWxsQnJ1c2gsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzIH07
CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwQm91bmRzLCBjb25zdCBDaGFuZ2VGbGFncyYgPSB7IH0sIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBG
bG9hdFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpIHsgbV9jbGlwQm91bmRzLmludGVyc2VjdChtX2N0bS5tYXBSZWN0KHJlY3QpKTsg
fQorCisgICAgQ2hhbmdlRmxhZ3MgY2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlRmxh
Z3M7IH0KKyAgICB2b2lkIGNsZWFyQ2hhbmdlcygpIHsgbV9jaGFuZ2VGbGFncyA9IHsgfTsgfQor
CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0IHsgcmV0dXJuIG1fY3RtOyB9Cisg
ICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pIHsgbV9jdG0gPSBjdG07
IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6Q1RNKTsgfQorCisgICAgU291cmNlQnJ1c2gmIGZp
bGxCcnVzaCgpIHsgcmV0dXJuIG1fZmlsbEJydXNoOyB9CisgICAgY29uc3QgU291cmNlQnJ1c2gm
IGZpbGxCcnVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEJydXNoOyB9CisgICAgdm9pZCBzZXRG
aWxsQnJ1c2goY29uc3QgU291cmNlQnJ1c2gmIGZpbGxCcnVzaCkgeyBtX2ZpbGxCcnVzaCA9IGZp
bGxCcnVzaDsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisgICAgdm9p
ZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fZmlsbEJydXNoLnNldEdyYWRpZW50KFdURk1v
dmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6
RmlsbEJydXNoKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0
dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX2ZpbGxCcnVz
aC5zZXRQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VG
bGFncy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisKKyAgICBXaW5kUnVsZSBmaWxsUnVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsbFJ1bGU7IH0KKyAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRS
dWxlIGZpbGxSdWxlKSB7IG1fZmlsbFJ1bGUgPSBmaWxsUnVsZTsgbV9jaGFuZ2VGbGFncy5hZGQo
Q2hhbmdlOjpGaWxsUnVsZSk7IH0KKworICAgIFNvdXJjZUJydXNoJiBzdHJva2VCcnVzaCgpIHsg
cmV0dXJuIG1fc3Ryb2tlQnJ1c2g7IH0KKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1
c2goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJydXNoOyB9CisgICAgdm9pZCBzZXRTdHJva2VC
cnVzaChjb25zdCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1c2gpIHsgbV9zdHJva2VCcnVzaCA9IHN0
cm9rZUJydXNoOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsgfQorICAg
IHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1c2guc2V0R3JhZGll
bnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQo
Q2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBh
dHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkg
eyBtX3N0cm9rZUJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zv
cm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsgfQorCisgICAgZmxv
YXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VUaGlja25lc3M7IH0K
KyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpIHsgbV9z
dHJva2VUaGlja25lc3MgPSBzdHJva2VUaGlja25lc3M7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5n
ZTo6U3Ryb2tlVGhpY2tuZXNzKTsgfQorCisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0cm9rZVN0eWxlOyB9CisgICAgdm9pZCBzZXRTdHJva2VTdHlsZShT
dHJva2VTdHlsZSBzdHJva2VTdHlsZSkgeyBtX3N0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7IG1f
Y2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6U3Ryb2tlU3R5bGUpOyB9CisKKyAgICBMaW5lQ2FwIGxp
bmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KKyAgICB2b2lkIHNldExpbmVDYXAo
TGluZUNhcCBsaW5lQ2FwKSB7IG1fbGluZUNhcCA9IGxpbmVDYXA7IG1fY2hhbmdlRmxhZ3MuYWRk
KENoYW5nZTo6TGluZUNhcCk7IH0KKworICAgIGNvbnN0IExpbmVEYXNoJiBsaW5lRGFzaCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZURhc2g7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKExpbmVEYXNo
JiYgbGluZURhc2gpIHsgbV9saW5lRGFzaCA9IFdURk1vdmUobGluZURhc2gpOyBtX2NoYW5nZUZs
YWdzLmFkZChDaGFuZ2U6OkxpbmVEYXNoKTsgfQorCisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBj
b25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikgeyBtX2xpbmVKb2luID0gbGluZUpvaW47IG1fY2hhbmdlRmxhZ3MuYWRkKENo
YW5nZTo6TGluZUpvaW4pOyB9CisKKyAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1
cm4gbV9taXRlckxpbWl0OyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGlt
aXQpIHsgbV9taXRlckxpbWl0ID0gbWl0ZXJMaW1pdDsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdl
OjpNaXRlckxpbWl0KTsgfQorICAgIAorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlTW9kZTsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRl
TW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUpIHsgbV9jb21wb3NpdGVNb2RlID0gY29t
cG9zaXRlTW9kZTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpDb21wb3NpdGVNb2RlKTsgfQor
ICAgIAorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBt
X2Ryb3BTaGFkb3c7IH0KKyAgICB2b2lkIHNldERyb3BTaGFkb3coY29uc3QgRHJvcFNoYWRvdyYg
ZHJvcFNoYWRvdykgeyBtX2Ryb3BTaGFkb3cgPSBkcm9wU2hhZG93OyBtX2NoYW5nZUZsYWdzLmFk
ZChDaGFuZ2U6OkRyb3BTaGFkb3cpOyB9CisKKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0
dXJuIG1fYWxwaGE7IH0KKyAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fYWxwaGEg
PSBhbHBoYTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpBbHBoYSk7IH0KKyAgICAKKyAgICBJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisgICAgdm9pZCBzZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkpIHsgbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KTsgfQorICAgIAorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9CisgICAgdm9pZCBzZXRUZXh0
RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKSB7IG1fdGV4
dERyYXdpbmdNb2RlID0gdGV4dERyYXdpbmdNb2RlOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6
OlRleHREcmF3aW5nTW9kZSk7IH0KKworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRBbnRpYWxpYXM7IH0KKyAgICB2b2lkIHNldFNob3VsZEFudGlhbGlh
cyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3Nob3VsZEFudGlhbGlhcyA9IHNob3VsZEFudGlh
bGlhczsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMpOyB9CisKKyAg
ICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTbW9vdGhG
b250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBzaG91bGRTbW9vdGhG
b250cykgeyBtX3Nob3VsZFNtb290aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7IG1fY2hhbmdl
RmxhZ3MuYWRkKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMpOyB9CisKKyAgICBib29sIHNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMo
Ym9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IG1fY2hhbmdlRmxhZ3MuYWRk
KENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsgfQorCisgICAgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7IH0KKyAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKTsgfQorICAgIAorICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2soKSBjb25zdCB7
IHJldHVybiBtX2RyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgdm9pZCBzZXREcmF3THVtaW5hbmNl
TWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3
THVtaW5hbmNlTWFzazsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFz
ayk7IH0KKworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlRGFya0FwcGVhcmFuY2U7IH0KKyAgICB2
b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV91c2VE
YXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFu
Z2U6OlVzZURhcmtBcHBlYXJhbmNlKTsgfQorI2VuZGlmCisKKyAgICBib29sIGhhc09ubHlQcmlt
aXRpdmVDaGFuZ2VzKCkgY29uc3Q7CisgICAgdm9pZCBtZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIG90aGVyKTsKKyAgICB2b2lkIG1lcmdlRGlmZnMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIG90aGVyKTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYgZHVtcChXVEY6
OlRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsK
KworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9jbGlwQm91bmRzOworCisgICAgQ2hhbmdlRmxh
Z3MgbV9jaGFuZ2VGbGFnczsKKworICAgIEFmZmluZVRyYW5zZm9ybSBtX2N0bTsKKworICAgIFNv
dXJjZUJydXNoIG1fZmlsbEJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgV2luZFJ1bGUgbV9m
aWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07CisKKyAgICBTb3VyY2VCcnVzaCBtX3N0cm9r
ZUJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgZmxvYXQgbV9zdHJva2VUaGlja25lc3MgeyAw
IH07CisgICAgU3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZSB7IFNvbGlkU3Ryb2tlIH07CisKKyAg
ICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1dHQgfTsKKyAgICBMaW5lRGFzaCBtX2xp
bmVEYXNoOworICAgIExpbmVKb2luIG1fbGluZUpvaW4geyBMaW5lSm9pbjo6TWl0ZXIgfTsKKyAg
ICBmbG9hdCBtX21pdGVyTGltaXQgeyAwIH07CisKKyAgICBDb21wb3NpdGVNb2RlIG1fY29tcG9z
aXRlTW9kZSB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1h
bCB9OworICAgIERyb3BTaGFkb3cgbV9kcm9wU2hhZG93OworCisgICAgZmxvYXQgbV9hbHBoYSB7
IDEgfTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OworICAgIFRleHREcmF3aW5nTW9k
ZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdpbmdNb2RlOjpGaWxsIH07CisKKyAg
ICBib29sIG1fc2hvdWxkQW50aWFsaWFzOworICAgIGJvb2wgbV9zaG91bGRTbW9vdGhGb250czsK
KyAgICBib29sIG1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOworICAgIGJvb2wgbV9zaGFk
b3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICBib29sIG1fZHJhd0x1bWluYW5jZU1hc2s7CisjaWYg
SEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIG1fdXNlRGFya0FwcGVhcmFuY2U7
CisjZW5kaWYKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBhdXRvIGVu
Y29kZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJv
cGVydHkpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgdGhpcy0+KnByb3BlcnR5OworICAgIH07CisKKyAgICBlbmNv
ZGVyIDw8IG1fY2xpcEJvdW5kczsKKworICAgIGVuY29kZXIgPDwgbV9jaGFuZ2VGbGFnczsKKwor
ICAgIGVuY29kZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgZW5jb2RlKENoYW5nZTo6RmlsbEJydXNo
LCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVz
aCk7CisgICAgZW5jb2RlKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAgIGVuY29kZShDaGFuZ2U6
OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zdHJva2VCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7Cisg
ICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIGVuY29kZShDaGFuZ2U6Okxp
bmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9s
aW5lQ2FwKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIGVuY29kZShDaGFu
Z2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9saW5lSm9pbik7CisgICAgZW5jb2RlKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisgICAg
ZW5jb2RlKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIGVuY29kZShDaGFuZ2U6OkRyb3BT
aGFkb3csICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9w
U2hhZG93KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7CisgICAgZW5jb2RlKENoYW5n
ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIGVuY29kZShDaGFuZ2U6OlRleHRE
cmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0
RHJhd2luZ01vZGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7Cisg
ICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBlbmNvZGUoQ2hhbmdl
OjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaGFk
b3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIGVuY29kZShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VN
YXNrLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNl
TWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBlbmNvZGUoQ2hhbmdl
OjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CitzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgYXV0byBkZWNvZGUgPSBbJl0o
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKCFzdGF0ZS5tX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICB1c2luZyBQcm9wZXJ0eVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8ZGVj
bHR5cGUoc3RkOjpkZWNsdmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPigpLipwcm9wZXJ0eSk+Ojp0
eXBlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFByb3BlcnR5VHlwZT4gdmFsdWU7CisgICAgICAg
IGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgc3RhdGUuKnByb3BlcnR5ID0gKnZhbHVlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGNsaXBC
b3VuZHM7CisgICAgZGVjb2RlciA+PiBjbGlwQm91bmRzOworICAgIGlmICghY2xpcEJvdW5kcykK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q2hhbmdl
RmxhZ3M+IGNoYW5nZUZsYWdzOworICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7CisgICAgaWYg
KCFjaGFuZ2VGbGFncykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlIHN0YXRlKCpjbGlwQm91bmRzLCAqY2hhbmdlRmxhZ3MpOworCisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RmlsbFJ1
bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUp
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUs
IENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc3Ryb2tlQnJ1c2gpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcykpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlU3R5bGUs
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENo
YW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fbGluZUNhcCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGUoc3RhdGUsIENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fbGluZURhc2gpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpNaXRlckxpbWl0LCAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFu
Z2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2NvbXBvc2l0ZU1vZGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICgh
ZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6QWxwaGEsICAgICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHksICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICgh
ZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRBbnRpYWxp
YXMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMp
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBD
aGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3Nob3VsZFNtb290aEZvbnRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFu
Z2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzaykpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKKworICAgIHJldHVybiBzdGF0ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlPiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6Q1RNLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OkZpbGxCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6RmlsbFJ1bGUsCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGUsCisKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcCwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2gsCisgICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luLAorICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0LAorCisgICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsCisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRyb3BTaGFkb3cs
CisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGEs
CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHksCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsCisgICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLAorICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywKKyNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpVc2VEYXJrQXBwZWFyYW5jZQorI2VuZGlmCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3MjEzMjg1MjYxZTY5MGNh
MzA2MGQ3ZTAyNmU1MGU1MmVlYTU5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCAr
MSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJv
b2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQor
ICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAg
ICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7Cisg
ICAgfQorICAgIAorICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUo
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgICAgIG1f
c2F2ZUFuZFJlc3RvcmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAg
eworICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5y
ZXN0b3JlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29udGV4
dDsgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIGJv
b2wgbV9zYXZlQW5kUmVzdG9yZTsKK307CisKK2NsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUg
eworcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKKyAgICAgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX2FscGhhKGFscGhhKQorICAgICAgICAsIG1f
YmVnYW5MYXllcihiZWdpbkxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKGJlZ2luTGF5ZXIpCisg
ICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQorICAgIHsKKyAgICAg
ICAgbV9hbHBoYSA9IGFscGhhOworICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihtX2FscGhhKTsKKyAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYmVn
YW5MYXllcikKKyAgICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBm
bG9hdCBtX2FscGhhOworICAgIGJvb2wgbV9iZWdhbkxheWVyOworfTsKKworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6
ZSgpKQorICAgIHsgfQorCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKCkK
KyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9zdGFja1NpemUp
CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBzdGFjayBjaGFu
Z2VkIGJ5ICVkIiwgJm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXplKCkgLSAoaW50
KW1fc3RhY2tTaXplKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBt
X2NvbnRleHQ7CisgICAgdW5zaWduZWQgbV9zdGFja1NpemU7Cit9OworCitjbGFzcyBJbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
SW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICAgICAg
OiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgICAgICwgbV9jdXJyZW50
SW50ZXJwb2xhdGlvblF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkoKSkKKyAgICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZChpbnRlcnBv
bGF0aW9uUXVhbGl0eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0ICYmIG1f
Y3VycmVudEludGVycG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2Up
CisgICAgeworICAgICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAg
ICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGlu
dGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpOworICAgIH0KKworICAgIGV4cGxpY2l0IEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
c3RkOjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkp
CisgICAgICAgIDogSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBoaWNzQ29udGV4
dCwgaW50ZXJwb2xhdGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52YWx1ZSgpIDog
Z3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICB7CisgICAg
fQorCisgICAgfkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCisgICAgeworICAgICAg
ICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBo
aWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVudEludGVycG9s
YXRpb25RdWFsaXR5KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBt
X2dyYXBoaWNzQ29udGV4dDsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRl
cnBvbGF0aW9uUXVhbGl0eTsKKyAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2Vk
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCAxNWRmMWRmZGI2ZjNhMTZh
ZDVlYWY2NDcyNjFmY2ZjNGI3YTkzYWI0Li41ZTkwNjE1YjNjNmYxYmJjZWE1NDhhMmRhY2FkNDVj
YWRlYTA2YWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmNwcApAQCAtMTY2LDYgKzE2NiwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lQ2FwIGNhcFN0eWxlKQogICAgIHJldHVybiB0czsKIH0K
IAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZURhc2gpCit7Cisg
ICAgcmV0dXJuIHRzOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBMaW5lSm9pbiBqb2luU3R5bGUpCiB7CiAgICAgc3dpdGNoIChqb2luU3R5bGUpIHsKQEAgLTE4
Miw0ICsxODcsMjQgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGlu
ZUpvaW4gam9pblN0eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgSW50ZXJwb2xhdGlvblF1YWxpdHkpCit7CisgICAgcmV0dXJu
IHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUZXh0RHJh
d2luZ01vZGUpCit7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVNb2RlKQoreworICAgIHJldHVybiB0czsKK30KKwor
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgRHJvcFNoYWRvdykKK3sKKyAg
ICByZXR1cm4gdHM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAppbmRleCA0ZDIwNGU5N2U1
YzU0NGQ3NzZiZmE3ZjMwYWFjYzFiN2M0NjNlMGUwLi4yNDdiZDZlMWQzNDAwNGE2ZDJkODI0NDll
YWY3NzNhYTAxMDE2OWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw5IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIKKyNpbmNsdWRlICJGbG9h
dFNpemUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTczLDYgKzc2LDc5IEBAIGVudW0gY2xh
c3MgQmxlbmRNb2RlIDogdWludDhfdCB7CiAgICAgUGx1c0xpZ2h0ZXIKIH07CiAKK3N0cnVjdCBD
b21wb3NpdGVNb2RlIHsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBvcDsKKyAgICBCbGVuZE1vZGUg
YmxlbmRNb2RlOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbXBvc2l0ZU1vZGUmIG90
aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wID09IG90aGVyLm9wICYmIGJsZW5kTW9kZSA9
PSBvdGhlci5ibGVuZE1vZGU7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVNb2RlPiBkZWNvZGUoRGVjb2RlciYp
OworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29tcG9zaXRlTW9kZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBvcDsKKyAgICBl
bmNvZGVyIDw8IGJsZW5kTW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6
b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gQ29tcG9zaXRlTW9kZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3A7CisgICAg
ZGVjb2RlciA+PiBvcDsKKyAgICBpZiAoIW9wKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKKyAgICBkZWNvZGVy
ID4+IGJsZW5kTW9kZTsKKyAgICBpZiAoIWJsZW5kTW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm9wLCAqYmxlbmRNb2RlIH0gfTsKK30KKworc3Ry
dWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAgICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50
OF90IHsKKyAgICAgICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZl
cywKKyAgICAgICAgU3BlbGxpbmcsCisgICAgICAgIEdyYW1tYXIsCisgICAgICAgIEF1dG9jb3Jy
ZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcworICAgIH0g
bW9kZTsKKyAgICBib29sIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2UgfTsKKworICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEb2N1bWVudE1h
cmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1vZGU7CisgICAgZW5jb2RlciA8PCBzaG91
bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6
b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2VyTGluZVN0eWxl
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1v
ZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkVXNlRGFya0Fw
cGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKKyAgICBp
ZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgcmV0dXJuIHsgeyAqbW9kZSwgKnNob3VsZFVzZURhcmtBcHBlYXJhbmNlIH0gfTsK
K30KKwogZW51bSBjbGFzcyBHcmFkaWVudFNwcmVhZE1ldGhvZCA6IHVpbnQ4X3QgewogICAgIFBh
ZCwKICAgICBSZWZsZWN0LApAQCAtOTMsNiArMTY5LDQyIEBAIGVudW0gY2xhc3MgTGluZUNhcCA6
IHVpbnQ4X3QgewogICAgIFNxdWFyZQogfTsKIAorc3RydWN0IExpbmVEYXNoIHsKKyAgICBEYXNo
QXJyYXkgZGFzaGVzOworICAgIGZsb2F0IG9mZnNldDsKKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGluZURhc2g+IGRlY29kZShEZWNvZGVy
Jik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExpbmVEYXNoJiBhLCBjb25z
dCBMaW5lRGFzaCYgYikKK3sKKyAgICByZXR1cm4gYS5kYXNoZXMgPT0gYi5kYXNoZXMgJiYgYS5v
ZmZzZXQgPT0gYi5vZmZzZXQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIExp
bmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IGRhc2hlczsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGluZURhc2g+IExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERhc2hBcnJheT4gZGFzaGVzOworICAgIGRl
Y29kZXIgPj4gZGFzaGVzOworICAgIGlmICghZGFzaGVzKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gb2Zmc2V0OworICAgIGRlY29kZXIg
Pj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpkYXNoZXMpLCAqb2Zmc2V0IH0gfTsKK30KKwog
ZW51bSBjbGFzcyBMaW5lSm9pbiA6IHVpbnQ4X3QgewogICAgIE1pdGVyLAogICAgIFJvdW5kLApA
QCAtMTA1LDYgKzIxNyw3NiBAQCBlbnVtIEhvcml6b250YWxBbGlnbm1lbnQgewogICAgIEFsaWdu
SENlbnRlcgogfTsKIAorLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBj
YW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisvLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0
bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wg
eworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9OworCitzdHJ1Y3QgRHJvcFNoYWRvdyB7Cisg
ICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICBmbG9hdCBibHVyIHsgMCB9OworICAgIENvbG9yIGNv
bG9yOworICAgIFNoYWRvd1JhZGl1c01vZGUgcmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQgfTsKKyAgICAKKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNv
bG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBpc0JsdXJyZWQoKSBjb25zdCB7IHJldHVybiBp
c1Zpc2libGUoKSAmJiBibHVyOyB9CisgICAgYm9vbCBoYXNPdXRzZXRzKCkgY29uc3QgeyByZXR1
cm4gaXNCbHVycmVkKCkgfHwgKGlzVmlzaWJsZSgpICYmICFvZmZzZXQuaXNaZXJvKCkpOyB9Cisg
ICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERy
b3BTaGFkb3c+IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IERyb3BTaGFkb3cmIGEsIGNvbnN0IERyb3BTaGFkb3cmIGIpCit7CisgICAgcmV0dXJu
IGEub2Zmc2V0ID09IGIub2Zmc2V0ICYmIGEuYmx1ciA9PSBiLmJsdXIgJiYgYS5jb2xvciA9PSBi
LmNvbG9yICYmIGEucmFkaXVzTW9kZSA9PSBiLnJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Cit2b2lkIERyb3BTaGFkb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAoreworICAgIGVuY29kZXIgPDwgb2Zmc2V0OworICAgIGVuY29kZXIgPDwgYmx1cjsKKyAg
ICBlbmNvZGVyIDw8IGNvbG9yOworICAgIGVuY29kZXIgPDwgcmFkaXVzTW9kZTsKK30KKwordGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gRHJvcFNoYWRv
dzo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNp
emU+IG9mZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJs
dXI7CisgICAgZGVjb2RlciA+PiBibHVyOworICAgIGlmICghYmx1cikKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGNvbG9yOworICAgIGRl
Y29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4gcmFkaXVzTW9kZTsK
KyAgICBkZWNvZGVyID4+IHJhZGl1c01vZGU7CisgICAgaWYgKCFyYWRpdXNNb2RlKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb2Zmc2V0LCAqYmx1ciwg
KmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07Cit9CisKK2VudW0gU3Ryb2tlU3R5bGUgeworICAgIE5v
U3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tlLAorICAgIERvdHRlZFN0cm9rZSwKKyAgICBEYXNoZWRT
dHJva2UsCisgICAgRG91YmxlU3Ryb2tlLAorICAgIFdhdnlTdHJva2UsCit9OworCiBlbnVtIFRl
eHRCYXNlbGluZSB7CiAgICAgQWxwaGFiZXRpY1RleHRCYXNlbGluZSwKICAgICBUb3BUZXh0QmFz
ZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwyOCBAQCBlbnVtIFRleHRBbGlnbiB7CiAgICAgUmlnaHRU
ZXh0QWxpZ24KIH07CiAKLVN0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29t
cG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1TdHJpbmcgYmxlbmRNb2RlTmFt
ZShXZWJDb3JlOjpCbGVuZE1vZGUpOwotYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcm
LCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKLWJvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJh
dG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yJiwgV2ViQ29yZTo6
QmxlbmRNb2RlJik7CitlbnVtIGNsYXNzIFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgeworICAg
IEZpbGwgPSAxIDw8IDAsCisgICAgU3Ryb2tlID0gMSA8PCAxLAorfTsKIAotV0VCQ09SRV9FWFBP
UlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6
OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IpOwotV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRS
dWxlKTsKK3VzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0gT3B0aW9uU2V0PFRleHREcmF3aW5n
TW9kZT47CisKK1N0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoQ29tcG9zaXRlT3BlcmF0b3Is
IEJsZW5kTW9kZSk7CitTdHJpbmcgYmxlbmRNb2RlTmFtZShCbGVuZE1vZGUpOworYm9vbCBwYXJz
ZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBCbGVuZE1vZGUmKTsKK2Jvb2wgcGFyc2VDb21wb3Np
dGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENvbXBvc2l0ZU9wZXJhdG9yJiwgQmxl
bmRNb2RlJik7CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mLCBCbGVuZE1vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKK1dF
QkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBDb21wb3NpdGVNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CiBXRUJDT1JFX0VY
UE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUNh
cCk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgTGluZURhc2gpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVKb2luKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBUZXh0RHJhd2luZ01vZGUp
OworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0
cmVhbSYsIFdpbmRSdWxlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBEcm9wU2hhZG93KTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCkBAIC0yMTksNCArNDEzLDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8
V2ViQ29yZTo6TGluZUpvaW4+IHsKICAgICA+OwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51
bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5
bGU6Ok5vU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwKKyAg
ICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9r
ZVN0eWxlOjpEYXNoZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJsZVN0
cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQorICAgID47Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZT4g
eworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlRleHRE
cmF3aW5nTW9kZSwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAorICAg
ICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQorICAgID47Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
OjpNb2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0
aXZlcywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxp
bmcsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIs
CisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0
aW9uUmVwbGFjZW1lbnQsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1v
ZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlcworICAgID47Cit9OworCiB9IC8vIG5hbWVzcGFjZSBX
VEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1h
Z2VHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9O
YW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IDRlMDcxZjcyZjM1YmU4YTU4ZmM0Y2Q1
NzdhMTQ1NmRlMTc0NjY4MmMuLjQxYjA1MTFhOGY3OGExNzliMzA0Y2Y4OWQ0MTAzZTM1ZGUzZTEy
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1h
Z2VHZW5lcmF0ZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcApAQCAtNDQsNyArNDQsNyBAQCBJbWFnZURy
YXdSZXN1bHQgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRgogewogI2lmIFVTRShORVdfVEhFTUUpIHx8IFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQp
OwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVN
b2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0p
OwogICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZShkc3RS
ZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFw
aGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFw
aGljc0NvbnRleHQuaAppbmRleCBiNjIzNjc4ODBlM2U1MzU0YjYxNzExMzQ3YzlhMTFiNDIyNDY4
ODVlLi45OWRkNzhhOTczYTY1YTNiZjNmMzA5NGFlNTc4NDViYjVhNjE5NGIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM4LDg3ICszOCw1NyBAQCBwdWJsaWM6CiAgICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQ
YWludAogICAgIH07CiAKLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9u
UmVhc29ucyByZWFzb25zKQotICAgICAgICA6IG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKHJl
YXNvbnMpCisgICAgTnVsbEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwLCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgcmVhc29ucykKKyAgICAgICAgOiBHcmFwaGlj
c0NvbnRleHQoaW5pdGlhbENsaXApCisgICAgICAgICwgbV9wYWludEludmFsaWRhdGlvblJlYXNv
bnMocmVhc29ucykKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFVTRShDRykKLSAgICB2
b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9Ci0gICAgYm9vbCBpc0NBTGF5
ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotCiAgICAg
Ym9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IGJvb2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpO
b25lOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsgfQogICAgIGJvb2wgaW52YWxpZGF0aW5n
SW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZh
bGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5n
SW1hZ2VzV2l0aEFzeW5jRGVjb2RlczsgfQogICAgIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBh
aW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0g
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQ7IH0KIAot
ICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWwgeyB9Ci0KLSNpZiBVU0Uo
Q0cpCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSNl
bmRpZgotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lz
dGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH07Ci0KLSAgICB2b2lkIGRyYXdQ
YXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6
ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9Ci0KLSAgICBJbnRSZWN0
IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KLQorICAgIHZvaWQgc2F2
ZUltcGwoKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJlc3RvcmVJbXBsKCkgZmluYWwgeyB9CisgICAg
dm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsIHsgfTsKICNpZiBVU0UoQ0cpCiAgICAgdm9p
ZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0KICAgICB2b2lkIGFwcGx5RmlsbFBhdHRl
cm4oKSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0K
ICNlbmRpZgogCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEp
IGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZs
b2F0UG9pbnQmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQot
ICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUm91bmRl
ZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsg
fQotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9
Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZl
bk9kZCkgZmluYWwgeyB9Ci0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJl
dHVybiByZWN0OyB9Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
LCBmbG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHls
ZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWwgeyB9Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBPdXQoY29u
c3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmlu
YWwgeyB9Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgdHJhbnNs
YXRlKGZsb2F0LCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgZmluYWwgeyB9Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2
aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWwgeyByZXR1
cm4geyB9OyB9Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
Ci0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNhdmUoKSBmaW5hbCB7
IH0KLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcElt
cGwoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aEltcGwoY29u
c3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQorICAgIHZv
aWQgY2xpcE91dEltcGwoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlw
T3V0SW1wbChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
ckltcGwoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KIAotICAgIEZs
b2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiA9IHN0
ZDo6bnVsbG9wdCkgZmluYWwgeyByZXR1cm4geyB9OyB9CisgICAgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9u
dCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1
bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGZpbGxSZWN0SW1wbChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwg
eyB9CiAKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWdu
ZWQgPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCkgZmluYWwgeyB9
Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIAorICAgIHZvaWQgc3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQogCi0g
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmll
bnRhdGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlk
Tm90aGluZzsgfQorICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZp
bmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmKSBmaW5hbCB7IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJ
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQotICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRp
bGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikg
ZmluYWwgeyB9CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwg
eyB9CkBAIC0xMjcsMjggKzk3LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBm
aW5hbCB7IH0KICNlbmRpZgogCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0KLSAgICB2b2lk
IGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9Ci0gICAg
dm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsg
fQotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3Jh
ZGllbnQmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9y
bWFsKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBm
aW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotCisg
ICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVySW1wbChJbWFnZUJ1ZmZlciosIGNv
bnN0IEZsb2F0UmVjdCYsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0dGVybkltcGwo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KICNpZiBFTkFCTEUoVklE
RU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbCB7IH0KICNlbmRpZgogCisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwg
dW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9
CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29u
c3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMp
IGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KKwogI2lmIE9TKFdJTkRPV1MpICYmICFVU0UoQ0FJUk8p
CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNv
bnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAotcHJpdmF0
ZToKICAgICBjb25zdCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMgeyBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUgfTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3ND
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmMjQ1NWVmNTg3OTRhZDY5MmViZTY1ODdlMDMxYTg5
ZmYwMTcxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0ID0gc3RydWN0IENHQ29udGV4dDsKKyNlbGlmIFVTRShDQUlSTykKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOworfQordXNpbmcgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQgPSBHcmFwaGljc0NvbnRleHRDYWlybzsKKyNlbHNlCit1c2luZyBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCA9IHZvaWQ7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNw
cAppbmRleCBiYjEzOGI1Mjk3YTUyMWZiZjdkNjkzY2QxMTQxMDQ0MDBmY2FiYzRlLi41N2QxY2Fi
OWM0ZjM3ODAwODkyYzM4ZmYxODc5OTliN2JiOGVhNmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkxLDE3ICsxOTEsMTcgQEAg
U2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3QgRmxv
YXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICB1cGRhdGVTaGFkb3dCbHVyVmFsdWVzKCk7CiB9
CiAKLVNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlKQotICAgIDogbV9jb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIG1fYmx1clJhZGl1
cyhzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dCbHVyKQotICAgICwgbV9vZmZzZXQoc3Rh
dGUuc2hhZG93T2Zmc2V0KQotICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRHJv
cFNoYWRvdyYgZHJvcFNoYWRvdywgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKKyAgICA6
IG1fY29sb3IoZHJvcFNoYWRvdy5jb2xvcikKKyAgICAsIG1fYmx1clJhZGl1cyhkcm9wU2hhZG93
LmJsdXIsIGRyb3BTaGFkb3cuYmx1cikKKyAgICAsIG1fb2Zmc2V0KGRyb3BTaGFkb3cub2Zmc2V0
KQorICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gQ29yZSBHcmFwaGljcyBpbmNvcnJlY3RseSByZW5k
ZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJvYmxlbS84MTAzNDQyPiks
CiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdneSBiZWhhdmlvciBmb3Ig
Y2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgaWYgKHN0YXRlLnNoYWRvd1JhZGl1
c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KSB7Ci0gICAgICAgIGZsb2F0IHNoYWRv
d0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0ZS5zaGFkb3dCbHVyKTsKKyAgICBpZiAo
ZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgeworICAg
ICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoZHJvcFNoYWRvdy5i
bHVyKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRTaXplKHNoYWRvd0JsdXIsIHNoYWRv
d0JsdXIpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2hhZG93Qmx1ci5oCmluZGV4IDE0ZmQ4M2VkZTFhMWJhY2YxNzdmMzMxZWNhZDFhNDMwMjkz
ZjYwM2EuLjQ1ZDBlNTgzMjljZGVlYWJmYjc4YTRkNWU2N2FiOGQ4ODFhZTU0ZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKQEAgLTM4LDggKzM4
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7CitjbGFzcyBH
cmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIEltYWdlQnVmZmVyOworc3RydWN0IERyb3BTaGFk
b3c7CiAKIGNsYXNzIFNoYWRvd0JsdXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYWRv
d0JsdXIpOwpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBTaGFkb3dCbHVyKCk7CiAg
ICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBv
ZmZzZXQsIGNvbnN0IENvbG9yJiwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNl
KTsKLSAgICBTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAgU2hh
ZG93Qmx1cihjb25zdCBEcm9wU2hhZG93JiwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9
IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIGJvb2wgaWdub3JlVHJhbnNmb3JtcyA9IGZh
bHNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnJ1c2guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1
c2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM1NjNlNWZjMzJlNzk5ZWFhMDFhM2QzNWI4YzY3YjA1ZGZhMmQw
MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
b3VyY2VCcnVzaC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291
cmNlQnJ1c2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTb3VyY2VCcnVzaDo6U291cmNl
QnJ1c2goY29uc3QgQ29sb3ImIGNvbG9yLCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYmIGJydXNoKQor
ICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAsIG1fYnJ1c2goV1RGTW92ZShicnVzaCkpCit7Cit9
CisKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgU291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3JtKCkg
Y29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QWZmaW5lVHJhbnNmb3JtPiBpZGVu
dGl0eTsKKyAgICByZXR1cm4gbV9icnVzaCA/IG1fYnJ1c2gtPnNwYWNlVHJhbnNmb3JtIDogaWRl
bnRpdHkuZ2V0KCk7Cit9CisKK0dyYWRpZW50KiBTb3VyY2VCcnVzaDo6Z3JhZGllbnQoKSBjb25z
dAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KGF1dG8qIGdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdyYWRpZW50Pj4oJm1fYnJ1c2gtPmJy
dXNoKSkKKyAgICAgICAgcmV0dXJuIGdyYWRpZW50LT5wdHIoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworUGF0dGVybiogU291cmNlQnJ1c2g6OnBhdHRlcm4oKSBjb25zdAoreworICAgIGlm
ICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8qIHBhdHRl
cm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZtX2JydXNoLT5icnVzaCkpCisgICAgICAg
IHJldHVybiBwYXR0ZXJuLT5wdHIoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBT
b3VyY2VCcnVzaDo6c2V0R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQoreworICAgIG1fYnJ1c2ggPSB7IFdURk1v
dmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSB9OworfQorCit2b2lkIFNvdXJjZUJydXNoOjpz
ZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
c3BhY2VUcmFuc2Zvcm0pCit7CisgICAgbV9icnVzaCA9IHsgV1RGTW92ZShwYXR0ZXJuKSwgc3Bh
Y2VUcmFuc2Zvcm0gfTsKK30KKworV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBTb3VyY2VCcnVzaCkKK3sKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NvdXJjZUJydXNoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
cnVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZhMTViYjBkZjNkOTkzOGZjODNlZGI1ODdhZWRiMDUxZDBiZWJi
ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
b3VyY2VCcnVzaC5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIK
KyNpbmNsdWRlICJHcmFkaWVudC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBTb3VyY2VCcnVzaCB7CitwdWJsaWM6CisgICAgc3RydWN0IEJy
dXNoIHsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4g
YnJ1c2g7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBzcGFjZVRyYW5zZm9ybTsKKworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PEJydXNoPiBkZWNvZGUoRGVjb2RlciYpOworICAgIH07CisKKyAgICBTb3VyY2VCcnVzaCgpID0g
ZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTb3VyY2VCcnVzaChjb25zdCBDb2xvciYsIHN0
ZDo6b3B0aW9uYWw8QnJ1c2g+JiYgPSBzdGQ6Om51bGxvcHQpOworCisgICAgY29uc3QgQ29sb3Im
IGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29u
c3QgQ29sb3IgY29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CisKKyAgICBjb25zdCBzdGQ6Om9w
dGlvbmFsPEJydXNoPiYgYnJ1c2goKSBjb25zdCB7IHJldHVybiBtX2JydXNoOyB9CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBHcmFkaWVudCogZ3JhZGllbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBQYXR0ZXJuKiBwYXR0ZXJuKCkgY29uc3Q7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBzcGFjZVRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRHcmFkaWVudChSZWY8R3Jh
ZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOwor
ICAgIHZvaWQgc2V0UGF0dGVybihSZWY8UGF0dGVybj4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBzcGFjZVRyYW5zZm9ybSA9IHsgfSk7CisKKyAgICBib29sIGlzUHJpbWl0aXZlKCkgY29uc3Qg
eyByZXR1cm4gIW1fYnJ1c2ggJiYgbV9jb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKTsgfQorCisg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNvdXJjZUJy
dXNoPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3IgeyBD
b2xvcjo6YmxhY2sgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPEJydXNoPiBtX2JydXNoOworfTsKKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50Piwg
UmVmPFBhdHRlcm4+PiYgYSwgY29uc3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQ
YXR0ZXJuPj4mIGIpCit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYSwKKyAgICAgICAgWyZd
IChjb25zdCBSZWY8R3JhZGllbnQ+JiBhR3JhZGllbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiBiR3JhZGllbnQgPSBzdGQ6OmdldF9pZjxSZWY8R3JhZGllbnQ+PigmYikpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGFHcmFkaWVudCA9PSAqYkdyYWRpZW50OworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgYVBh
dHRlcm4pIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBiUGF0dGVybiA9IHN0ZDo6Z2V0X2lmPFJl
ZjxQYXR0ZXJuPj4oJmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhUGF0dGVybiA9PSAqYlBh
dHRlcm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICApOworfQor
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYSwgY29u
c3QgU291cmNlQnJ1c2g6OkJydXNoJiBiKQoreworICAgIHJldHVybiBhLmJydXNoID09IGIuYnJ1
c2ggJiYgYS5zcGFjZVRyYW5zZm9ybSA9PSBiLnNwYWNlVHJhbnNmb3JtOworfQorCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoJiBhLCBjb25zdCBTb3VyY2VCcnVzaCYg
YikKK3sKKyAgICByZXR1cm4gYS5jb2xvcigpID09IGIuY29sb3IoKSAmJiBhLmJydXNoKCkgPT0g
Yi5icnVzaCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBTb3VyY2VC
cnVzaDo6QnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgc3BhY2VUcmFuc2Zvcm07CisgICAgV1RGOjpzd2l0Y2hPbihicnVzaCwKKyAgICAgICAg
WyZdIChjb25zdCBSZWY8R3JhZGllbnQ+JiBncmFkaWVudCkgeworICAgICAgICAgICAgZW5jb2Rl
ciA8PCB0cnVlIDw8IGdyYWRpZW50LmdldCgpOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNv
bnN0IFJlZjxQYXR0ZXJuPiYgcGF0dGVybikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBmYWxz
ZSA8PCBwYXR0ZXJuLmdldCgpOworICAgICAgICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g6OkJydXNoPiBTb3VyY2VC
cnVzaDo6QnJ1c2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9u
YWw8QWZmaW5lVHJhbnNmb3JtPiBzcGFjZVRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHNwYWNl
VHJhbnNmb3JtOworICAgIGlmICghc3BhY2VUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGhhc0dyYWRpZW50OworICAgIGRl
Y29kZXIgPj4gaGFzR3JhZGllbnQ7CisgICAgaWYgKCFoYXNHcmFkaWVudCkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBpZiAoKmhhc0dyYWRpZW50KSB7CisgICAgICAg
IGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAo
IWdyYWRpZW50KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0
dXJuIHsgeyBXVEZNb3ZlKCpncmFkaWVudCksICpzcGFjZVRyYW5zZm9ybSB9IH07CisgICAgfQor
CisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOworICAgIGlmICgh
cGF0dGVybikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IFdU
Rk1vdmUoKnBhdHRlcm4pLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworfQorCit0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgordm9pZCBTb3VyY2VCcnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9icnVzaDsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g+
IFNvdXJjZUJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlv
bmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29sb3Ip
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6
b3B0aW9uYWw8QnJ1c2g+PiBicnVzaDsKKyAgICBkZWNvZGVyID4+IGJydXNoOworICAgIGlmICgh
YnJ1c2gpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU291cmNl
QnJ1c2goKmNvbG9yLCBXVEZNb3ZlKCpicnVzaCkpOworfQorCitXVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgU291cmNlQnJ1c2gpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCBjYTI1ZmIzZDhhODAxZjMwMmRmZWUxZmJiOWU2
NjUzZmExNjlmOThlLi4wMDY2MzhhM2RjMTBjYWQyNDFkZGI0MDM0NjAxNTU0MTE3YmVlZGMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAKQEAgLTE4MzMsNyArMTgzMyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
OjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3Qg
VHJhCiAgICAgICAgIAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2lu
KCksIHNpemUoKSk7CiAKLSAgICAgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCBjb250ZXh0
KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZm
aW5lVHJhbnNmb3JtKCkpOworICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRl
eHQoKm1fZGlzcGxheUxpc3QsIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CiAgICAg
ICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIHNpemUoKSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
ODU2YTA0MzkzZmQyNGU5NjI4ZjZmZTkzNDY5ZWViZWE0YWJiNTk4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZl
ci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENHQ29udGV4dFN0YXRlU2F2ZXIgeworcHVibGljOgorICAgIENH
Q29udGV4dFN0YXRlU2F2ZXIoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3Rv
cmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc2F2
ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAgICBpZiAobV9zYXZlQW5k
UmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKKyAg
ICB9CisgICAgCisgICAgfkNHQ29udGV4dFN0YXRlU2F2ZXIoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1f
Y29udGV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2F2ZSgpCisgICAgeworICAgICAgICBB
U1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1f
Y29udGV4dCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOworICAgIH0KKworICAg
IHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7
CisgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICAgICAgbV9z
YXZlQW5kUmVzdG9yZSA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGRpZFNhdmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2F2ZUFuZFJlc3RvcmU7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBDR0NvbnRleHRSZWYgbV9jb250ZXh0OworICAgIGJvb2wgbV9zYXZl
QW5kUmVzdG9yZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCAzMjQ1YzYwMDQzMTU1MmQ1MTNiNzRlZWJjMDlm
MzE4ZWVjM2RkNzJhLi44ZDEzZTM3NGZhYzI2MTBlZTFkNzlkMjFjYWE0NzA4MTI2MGY5ZWI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtMTg1LDE0ICsxODUsMTMgQEAgc3RhdGljIHZvaWQgc2V0Q0dCbGVuZE1vZGUoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUKIH0KIAogR3Jh
cGhpY3NDb250ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFJlZiBjZ0NvbnRleHQp
CisgICAgOiBHcmFwaGljc0NvbnRleHQoQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNnQ29u
dGV4dCksIEdyYXBoaWNzQ29udGV4dFN0YXRlOjppbml0aWFsQ2hhbmdlRmxhZ3MsIENHQ29udGV4
dEdldENUTShjZ0NvbnRleHQpKQogewogICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1
cm47CiAKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNn
Q29udGV4dCk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdp
dGggb3VyIHN0YXRlLgotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIHsgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNv
bG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlIH0p
OwotICAgIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvcmVJbnRlcnBvbGF0
aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRl
eHQoKSkpOworICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29yZUludGVycG9sYXRp
b25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KGludGVybmFsUGxhdGZv
cm1Db250ZXh0KCkpKSk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dENHOjp+R3JhcGhpY3NDb250ZXh0
Q0coKQpAQCAtMjA2LDI4ICsyMDUsMjkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6aGFzUGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKIH0KIAogQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENH
OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIC8vIFNvbWUgY2FsbGVycyB0byB0aGlz
IG1ldGhvZCB1c2VzIHRoZSBwbGF0Zm9ybSBjb250ZXh0IG91dHNpZGUgdGhlIHNjb3BlCisgICAg
Ly8gb2YgdGhpcyBjbGFzcy4gQ29tbWl0IGFueSBjaGFuZ2VzIGJlZm9yZSByZXR1cm5pbmcgdGhl
IHBsYXRmb3JtIGNvbnRleHQuCisgICAgY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRDRyY+KCp0
aGlzKS5hcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJldHVybiBpbnRlcm5hbFBsYXRmb3JtQ29u
dGV4dCgpOworfQorCitDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6OmludGVybmFsUGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9kYXRhLT5tX2NnQ29udGV4dCk7
CiAgICAgcmV0dXJuIG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OnNhdmUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2F2ZUltcGwoKQog
ewotICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwotCiAgICAgLy8gTm90ZTogRG8gbm90IHVz
ZSB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uLCBzaW5jZSB3
ZSB3YW50IHRvIGF2b2lkIHRoZSBleHRyYQogICAgIC8vIHNhdmUgb2YgdGhlIHNlY29uZGFyeSBj
b250ZXh0IChpbiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oKS4KICAgICBDR0Nv
bnRleHRTYXZlR1N0YXRlKHBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBtX2RhdGEtPnNhdmUoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cmVzdG9yZSgpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpyZXN0b3JlSW1wbCgpCiB7Ci0gICAgaWYgKCFzdGFja1NpemUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7Ci0KICAgICAvLyBOb3Rl
OiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRp
b24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gcmVzdG9yZSBvZiB0
aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNH
LmgpLgogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUocGxhdGZvcm1Db250ZXh0KCkpOwpAQCAt
Mzk2LDcgKzM5Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgQ0dDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29u
dGV4dCwgZGVzdFJlY3QpOwogCi0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRl
TW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9
KTsKIAogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBkZXN0UmVjdC54KCksIGRl
c3RSZWN0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShj
b250ZXh0LCAxLCAtMSk7CkBAIC01NTUsMTMgKzU1NSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4pCisgICAgaWYgKCFzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNl
Q1RNKGNnQ29udGV4dCkpOwogCi0gICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4gPSBtX3N0YXRlLnN0
cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKKyAgICBh
dXRvIHBsYXRmb3JtUGF0dGVybiA9IHN0cm9rZVBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0
ZXJuKHVzZXJUb0Jhc2VDVE0pOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTU3NCwxMyArNTc0LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFw
cGx5U3Ryb2tlUGF0dGVybigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBh
dHRlcm4oKQogewotICAgIGlmICghbV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoIWZpbGxQ
YXR0ZXJuKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9
IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCi0gICAgYXV0
byBwbGF0Zm9ybVBhdHRlcm4gPSBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4odXNlclRvQmFzZUNUTSk7CisgICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4gPSBmaWxsUGF0
dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CiAgICAgaWYgKCFw
bGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApAQCAtNTkxLDExICs1OTEsMTEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVybigpCiAgICAgQ0dDb250ZXh0
U2V0RmlsbFBhdHRlcm4oY2dDb250ZXh0LCBwbGF0Zm9ybVBhdHRlcm4uZ2V0KCksICZwYXR0ZXJu
QWxwaGEpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDR1BhdGhEcmF3aW5nTW9kZSYgbW9kZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIENHUGF0aERyYXdpbmdNb2RlJiBtb2RlKQogewotICAgIGJvb2wgc2hv
dWxkRmlsbCA9IHN0YXRlLmZpbGxQYXR0ZXJuIHx8IHN0YXRlLmZpbGxDb2xvci5pc1Zpc2libGUo
KTsKLSAgICBib29sIHNob3VsZFN0cm9rZSA9IHN0YXRlLnN0cm9rZVBhdHRlcm4gfHwgKHN0YXRl
LnN0cm9rZVN0eWxlICE9IE5vU3Ryb2tlICYmIHN0YXRlLnN0cm9rZUNvbG9yLmlzVmlzaWJsZSgp
KTsKLSAgICBib29sIHVzZUVPRmlsbCA9IHN0YXRlLmZpbGxSdWxlID09IFdpbmRSdWxlOjpFdmVu
T2RkOworICAgIGJvb2wgc2hvdWxkRmlsbCA9IGNvbnRleHQuZmlsbFBhdHRlcm4oKSB8fCBjb250
ZXh0LmZpbGxDb2xvcigpLmlzVmlzaWJsZSgpOworICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gY29u
dGV4dC5zdHJva2VQYXR0ZXJuKCkgfHwgKGNvbnRleHQuc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9r
ZSAmJiBjb250ZXh0LnN0cm9rZUNvbG9yKCkuaXNWaXNpYmxlKCkpOworICAgIGJvb2wgdXNlRU9G
aWxsID0gY29udGV4dC5maWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkOwogCiAgICAgaWYg
KHNob3VsZEZpbGwpIHsKICAgICAgICAgaWYgKHNob3VsZFN0cm9rZSkgewpAQCAtNjI0LDkgKzYy
NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7Ci0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKIAotICAgIGlmIChzdGF0ZS5maWxsR3JhZGllbnQgfHwgc3RhdGUuc3Ryb2tlR3JhZGllbnQp
IHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkgfHwgc3Ryb2tlR3JhZGllbnQoKSkgewogICAgICAg
ICAvLyBXZSBkb24ndCBoYXZlIGFueSBvcHRpbWl6ZWQgd2F5IHRvIGZpbGwgJiBzdHJva2UgYSBw
YXRoIHVzaW5nIGdyYWRpZW50cwogICAgICAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0
aGlzLgogICAgICAgICBmaWxsUGF0aChwYXRoKTsKQEAgLTYzNCwxMyArNjMzLDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKGZpbGxQ
YXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICBpZiAoc3RhdGUuc3Ry
b2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBseVN0cm9r
ZVBhdHRlcm4oKTsKIAogICAgIENHUGF0aERyYXdpbmdNb2RlIGRyYXdpbmdNb2RlOwotICAgIGlm
IChjYWxjdWxhdGVEcmF3aW5nTW9kZShzdGF0ZSwgZHJhd2luZ01vZGUpKSB7CisgICAgaWYgKGNh
bGN1bGF0ZURyYXdpbmdNb2RlKCp0aGlzLCBkcmF3aW5nTW9kZSkpIHsKICNpZiBIQVZFKENHX0NP
TlRFWFRfRFJBV19QQVRIX0RJUkVDVCkKICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGhEaXJlY3Qo
Y29udGV4dCwgZHJhd2luZ01vZGUsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51bGxwdHIpOwogI2Vs
c2UKQEAgLTY1OCw3ICs2NTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgeworICAgIGlmIChmaWxs
R3JhZGllbnQoKSkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIEZs
b2F0UmVjdCByZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CiAgICAgICAgICAgICBGbG9h
dFNpemUgbGF5ZXJTaXplID0gZ2V0Q1RNKCkubWFwU2l6ZShyZWN0LnNpemUoKSk7CkBAIC02NzAs
MzMgKzY2OSwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGxheWVyQ29udGV4dCwg
LXJlY3QueCgpLCAtcmVjdC55KCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGxh
eWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGxheWVyQ29udGV4dCwg
cGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5
ZXJDb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgp
KTsKIAogICAgICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQpCiAg
ICAgICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGxheWVyQ29udGV4dCk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNvbnRleHQpOwogCi0g
ICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAg
ICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogICAgICAgICAg
ICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxheWVyLmdldCgpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0
KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBh
dGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5maWxs
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0o
Y29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgICAgICAgICBpZiAoZmlsbFJ1
bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAgICAgICBDR0NvbnRleHRFT0Ns
aXAoY29udGV4dCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0
Q2xpcChjb250ZXh0KTsKIAotICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50
KCp0aGlzKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAg
ICAgIH0KIAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUuZmlsbFBh
dHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4o
KTsKICNpZiBIQVZFKENHX0NPTlRFWFRfRFJBV19QQVRIX0RJUkVDVCkKICAgICBDR0NvbnRleHRE
cmF3UGF0aERpcmVjdChjb250ZXh0LCBmaWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkID8g
a0NHUGF0aEVPRmlsbCA6IGtDR1BhdGhGaWxsLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCBudWxscHRy
KTsKQEAgLTcxNyw3ICs3MTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICBpZiAo
c3Ryb2tlR3JhZGllbnQoKSkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAg
ICAgIEZsb2F0UmVjdCByZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CiAgICAgICAgICAg
ICBmbG9hdCBsaW5lV2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKQEAgLTc0Miw4ICs3NDEsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAg
ICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGxheWVyQ29udGV4dCwgcGF0aC5wbGF0Zm9ybVBh
dGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChs
YXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNvbnRleHQpOwot
ICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRD
VE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0
cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAKICAgICAgICAgICAgIGZsb2F0
IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0LngoKSAtIGxpbmVXaWR0aCk7CiAgICAgICAgICAg
ICBmbG9hdCBkZXN0aW5hdGlvblkgPSByb3VuZGYocmVjdC55KCkgLSBsaW5lV2lkdGgpOwpAQCAt
NzU0LDEzICs3NTMsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRo
LnBsYXRmb3JtUGF0aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0
cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsK
LSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVu
dC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+
cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAg
ICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwogCiAjaWYgVVNFKENHX0NPTlRFWFRfU1RST0tFX0xJ
TkVfU0VHTUVOVFNfV0hFTl9TVFJPS0lOR19QQVRIKQpAQCAtNzg1LDcgKzc4NCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG1f
c3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgpKSB7CiAgICAgICAg
IENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICAgICAgaWYgKGhh
c1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFNpemUgbGF5ZXJTaXplID0gZ2V0Q1RNKCku
bWFwU2l6ZShyZWN0LnNpemUoKSk7CkBAIC03OTgsMjcgKzc5NywyNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgICAgICBD
R0NvbnRleHRBZGRSZWN0KGxheWVyQ29udGV4dCwgcmVjdCk7CiAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGxheWVyQ29udGV4dCk7CiAKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShs
YXllckNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAg
ICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKICAg
ICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckluUmVjdChjb250ZXh0LCByZWN0LCBsYXllci5n
ZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0
KGNvbnRleHQsIHJlY3QpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0
ZS5maWxsR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNh
dENUTShjb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBmaWxsR3Jh
ZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkK
ICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogCiAgICAgYm9vbCBkcmF3T3duU2hhZG93ID0g
Y2FuVXNlU2hhZG93Qmx1cigpOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAg
ICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRo
Q29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBDR0Nv
bnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAg
ICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
KTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywgRmxvYXRSb3Vu
ZGVkUmVjdChyZWN0KSk7CiAgICAgfQogCkBAIC04MzcsOSArODM2LDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdP
d25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2Zm
IENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9y
bUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBj
b250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3Qp
KTsKICAgICB9CiAKQEAgLTg1Miw3ICs4NTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAg
ICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAg
ICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CkBAIC04NjQsOSArODYzLDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAg
ICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dX
aXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBD
R0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAK
LSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFk
b3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywgcmVjdCk7
CiAgICAgfQogCkBAIC04NzQsNyArODczLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAg
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSA9IHJlY3QucmFkaWkoKTsKICAg
ICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExlZnQoKS53aWR0aCgpID09IHJhZGlpLnRv
cFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdodCgpLndpZHRoKCkgPT0gcmFkaWkuYm90
dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgPT0gcmFkaWku
Ym90dG9tUmlnaHQoKS53aWR0aCgpKTsKICAgICBib29sIGVxdWFsSGVpZ2h0cyA9IChyYWRpaS50
b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgpICYmIHJhZGlp
LmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50b3BSaWdodCgpLmhlaWdodCgpICYmIHJh
ZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS5oZWlnaHQoKSk7
Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gbV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0
ZS5maWxsUGF0dGVybjsKKyAgICBib29sIGhhc0N1c3RvbUZpbGwgPSBmaWxsR3JhZGllbnQoKSB8
fCBmaWxsUGF0dGVybigpOwogICAgIGlmICghaGFzQ3VzdG9tRmlsbCAmJiBlcXVhbFdpZHRocyAm
JiBlcXVhbEhlaWdodHMgJiYgcmFkaWkudG9wTGVmdCgpLndpZHRoKCkgKiAyID09IHIud2lkdGgo
KSAmJiByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKiAyID09IHIuaGVpZ2h0KCkpCiAgICAgICAg
IENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0KGNvbnRleHQsIHIpOwogICAgIGVsc2UgewpAQCAt
OTEzLDkgKzkxMiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvCiAgICAgQ0dDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3
T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywg
MCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1Np
emVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0
ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdJbnNldFNo
YWRvdygqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0KTsKICAgICB9CiAKQEAgLTkyOCw0MyAr
OTI3LDQ1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvCiAgICAgc2V0RmlsbENvbG9yKG9sZEZp
bGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEltcGwoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewogICAgIENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCks
IHJlY3QpOwogICAgIG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpjbGlwT3V0SW1wbChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gRklYTUU6
IFVzaW5nIENHUmVjdEluZmluaXRlIGlzIG11Y2ggZmFzdGVyIHRoYW4gZ2V0dGluZyB0aGUgY2xp
cCBib3VuZGluZyBib3guIEhvd2V2ZXIsIGR1ZQogICAgIC8vIHRvIDxyZGFyOi8vcHJvYmxlbS8x
MjU4NDQ5Mj4sIENHUmVjdEluZmluaXRlIGNhbid0IGJlIHVzZWQgd2l0aCBhbiBhY2NlbGVyYXRl
ZCBjb250ZXh0IHRoYXQKICAgICAvLyBoYXMgY2VydGFpbiB0cmFuc2Zvcm1zIHRoYXQgYXJlbid0
IGp1c3QgYSB0cmFuc2xhdGlvbiBvciBhIHNjYWxlLiBBbmQgZHVlIHRvIDxyZGFyOi8vcHJvYmxl
bS8xNDYzNDQ1Mz4KICAgICAvLyB3ZSBjYW5ub3QgdXNlIGl0IGluIGZvciBhIHByaW50aW5nIGNv
bnRleHQgZWl0aGVyLgorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRDVE0oKTsKLSAgICBib29s
IGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9ybUNvbnRleHQo
KSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOwotICAgIENHUmVj
dCByZWN0c1syXSA9IHsgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZpbml0ZSA6IENH
Q29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSksIHJlY3QgfTsKLSAg
ICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENHQ29udGV4dEFk
ZFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgMik7Ci0gICAgQ0dDb250ZXh0RU9DbGlw
KHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dD
b250ZXh0R2V0VHlwZShjb250ZXh0KSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5n
TW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFj
dG0uYygpKSk7CisgICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/
IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpLCBy
ZWN0IH07CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENHQ29udGV4dEFk
ZFJlY3RzKGNvbnRleHQsIHJlY3RzLCAyKTsKKyAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXRJbXBsKGNvbnN0IFBhdGgmIHBhdGgpCiB7
Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDR0NvbnRl
eHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3go
cGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRl
eHRBZGRSZWN0KGNvbnRleHQsIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KSk7
CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0
Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0gICAgQ0dDb250ZXh0RU9DbGlw
KHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBw
YXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGhJbXBsKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewogICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdFplcm8pOwogICAgIGVsc2Ugewot
ICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBD
R0NvbnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsK
KyAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgICAgICBDR0NvbnRleHRB
ZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogCiAgICAgICAgIGlmIChjbGlw
UnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChj
b250ZXh0KTsKQEAgLTk3NSwxMSArOTc2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgbV9kYXRhLT5j
bGlwKHBhdGgpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpjbGlwQm91bmRzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChDR0NvbnRleHRHZXRDbGlwQm91
bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAgIEdyYXBoaWNz
Q29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKQEAgLTEwMDIsMTcgKzk5
OCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAg
ICAgcmVzdG9yZSgpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91
bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHRmxvYXQmIHhPZmZz
ZXQsIENHRmxvYXQmIHlPZmZzZXQpCitzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmth
cm91bmRJZk5lZWRlZChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dG
bG9hdCYgeU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShX
SU4pCiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwogICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0
KTsKICAgICBVTlVTRURfUEFSQU0oeU9mZnNldCk7CiAjZWxzZQotICAgIGlmIChjb250ZXh0LnJl
bmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhDb3Jy
ZWN0U2hhZG93T2Zmc2V0cyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV29y
ayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzU1MzkzODg+IGJ5IGVuc3VyaW5nIHRoYXQgdGhlIG9m
ZnNldHMgd2lsbCBnZXQgdHJ1bmNhdGVkCkBAIC0xMDMwLDEwICsxMDIzLDU1IEBAIHN0YXRpYyB2
b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25z
dCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBvZmZz
ZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNldENHTGlu
ZUNhcChDR0NvbnRleHRSZWYgY29udGV4dCwgTGluZUNhcCBjYXApCiB7Ci0gICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgc3dp
dGNoIChjYXApIHsKKyAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6CisgICAgICAgIENHQ29udGV4dFNl
dExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcEJ1dHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExpbmVDYXA6OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQs
IGtDR0xpbmVDYXBSb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUNhcDo6U3F1
YXJlOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBTcXVh
cmUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CiAKK3N0YXRpYyB2b2lkIHNldENHTGluZUpv
aW4oQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVKb2luIGpvaW4pCit7CisgICAgc3dpdGNoIChq
b2luKSB7CisgICAgY2FzZSBMaW5lSm9pbjo6TWl0ZXI6CisgICAgICAgIENHQ29udGV4dFNldExp
bmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luTWl0ZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExpbmVKb2luOjpSb3VuZDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4
dCwga0NHTGluZUpvaW5Sb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUpvaW46
OkJldmVsOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9p
bkJldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXRDR01p
dGVyTGltaXQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGZsb2F0IGxpbWl0KQoreworICAgIENHQ29u
dGV4dFNldE1pdGVyTGltaXQoY29udGV4dCwgbGltaXQpOworfQorCitzdGF0aWMgdm9pZCBzZXRD
R0xpbmVEYXNoKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywg
ZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKKyAgICAgICAg
ZmxvYXQgbGVuZ3RoID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRh
c2hlc1tpXSk7CisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICBkYXNoT2Zmc2V0ID0g
Zm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOworICAgIH0KKyAgICBDR0NvbnRleHRT
ZXRMaW5lRGFzaChjb250ZXh0LCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6
ZSgpKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coQ0dDb250ZXh0UmVmIGNvbnRleHQs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZs
b2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykKK3sKICAgICBpZiAob2Zmc2V0LmlzWmVybygpICYmICFibHVyKSB7CiAgICAgICAgIENHQ29u
dGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA0NSw3ICsxMDgzLDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3co
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYK
ICAgICBDR0Zsb2F0IHlPZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9hdCBibHVy
UmFkaXVzID0gYmx1cjsKIAotICAgIGlmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkpIHsKKyAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAgICAg
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RNKGNv
bnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jh
c2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTEwNjYsNyAr
MTEwNCw4IEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgLy8gRXh0cmVtZSAiYmx1ciIg
dmFsdWVzIGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcgdGlt
ZXMsIHNvIGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5hcnJv
d1ByZWNpc2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0V29y
a2Fyb3VuZElmTmVlZGVkKGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7CisgICAg
aWYgKHJlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAg
IGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnRleHQsIHhPZmZzZXQsIHlP
ZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMgbWVh
bnMgdGhhdCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBhbmQg
d2Ugc2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3IuCkBA
IC0xMDc2LDQ0ICsxMTE1LDgxIEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlP
ZmZzZXQpLCBibHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKS5nZXQoKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAg
YXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5n
ZXMoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lV2lkdGgoY29udGV4dCwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCAwLmYp
KTsKKyAgICBhdXRvIGNvbnRleHQgPSBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5n
ZSkpCi0gICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNh
Y2hlZENHQ29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpLmdldCgpKTsKKyAgICBmb3IgKGF1dG8gY2hh
bmdlIDogc3RhdGUoKS5jaGFuZ2VzKCkpIHsKKyAgICAgICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE06CisgICAgICAgICAg
ICBDR0NvbnRleHRTZXRDVE0oY29udGV4dCwgc3RhdGUoKS5nZXRDVE0oKSk7CisgICAgICAgICAg
ICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUu
ZmlsbENvbG9yKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpG
aWxsQnJ1c2g6CisgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZSgpLmZp
bGxCcnVzaCgpLmNvbG9yKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgQ0dD
b250ZXh0U2V0QWxwaGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgICAgIENH
Q29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZSgpLnN0cm9rZVRoaWNr
bmVzcygpLCAwLmYpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRh
aW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKLSAgICAgICAgc2V0Q0dC
bGVuZE1vZGUoY29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9k
ZSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1
c2g6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0
LCBjYWNoZWRDR0NvbG9yKHN0YXRlKCkuc3Ryb2tlQnJ1c2goKS5jb2xvcigpKS5nZXQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4
dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5n
TW9kZSkpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVD
YXA6CisgICAgICAgICAgICBzZXRDR0xpbmVDYXAoY29udGV4dCwgc3RhdGUoKS5saW5lQ2FwKCkp
OworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNl
dFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luOgorICAgICAgICAg
ICAgc2V0Q0dMaW5lSm9pbihjb250ZXh0LCBzdGF0ZSgpLmxpbmVKb2luKCkpOworICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21v
b3RoRm9udHMoY29udGV4dCwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoOgorICAgICAgICAgICAgc2V0
Q0dMaW5lRGFzaChjb250ZXh0LCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0ZSgpLmxp
bmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hh
bmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwg
Y2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSk7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoK
KyAgICAgICAgICAgIHNldENHTWl0ZXJMaW1pdChjb250ZXh0LCBzdGF0ZSgpLm1pdGVyTGltaXQo
KSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKLSAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMs
IHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0Nv
bG9yKTsKLX0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21w
b3NpdGVNb2RlOgorICAgICAgICAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgc3RhdGUoKS5j
b21wb3NpdGVNb2RlKCkub3AsIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1p
dChmbG9hdCBsaW1pdCkKLXsKLSAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29u
dGV4dCgpLCBsaW1pdCk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIHNldENHU2hhZG93KGNvbnRleHQsIHJlbmRlcmlu
Z01vZGUoKSwgc3RhdGUoKS5kcm9wU2hhZG93KCkub2Zmc2V0LCBzdGF0ZSgpLmRyb3BTaGFkb3co
KS5ibHVyLCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5jb2xvciwgc3RhdGUoKS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGE6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRB
bHBoYShjb250ZXh0LCBzdGF0ZSgpLmFscGhhKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5OgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
Y29udGV4dCwgY2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZSgpLmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGU6CisgICAgICAgICAgICBDR0Nv
bnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUoc3RhdGUo
KS50ZXh0RHJhd2luZ01vZGUoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXM6CisgICAgICAg
ICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUoKS5zaG91bGRB
bnRpYWxpYXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzOgorICAgICAgICAgICAgQ0dD
b250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY29udGV4dCwgc3RhdGUoKS5zaG91bGRTbW9vdGhG
b250cygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsZWFyU3RhdGVDaGFuZ2VzKCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHIpCkBAIC0xMTI1LDcgKzEyMDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewogICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5z
dHJva2VHcmFkaWVudCkgeworICAgIGlmIChzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIGlm
IChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgY29uc3QgZmxvYXQgZG91YmxlTGluZVdpZHRo
ID0gbGluZVdpZHRoICogMjsKICAgICAgICAgICAgIGZsb2F0IGFkanVzdGVkV2lkdGggPSBjZWls
ZihyZWN0LndpZHRoKCkgKyBkb3VibGVMaW5lV2lkdGgpOwpAQCAtMTEzNSw3ICsxMjExLDYgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIGF1dG8gbGF5ZXIgPSBhZG9wdENGKENHTGF5
ZXJDcmVhdGVXaXRoQ29udGV4dChjb250ZXh0LCBsYXllclNpemUsIDApKTsKIAogICAgICAgICAg
ICAgQ0dDb250ZXh0UmVmIGxheWVyQ29udGV4dCA9IENHTGF5ZXJHZXRDb250ZXh0KGxheWVyLmdl
dCgpKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0gbGluZVdpZHRoOwog
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGxheWVyQ29udGV4dCwgbGluZVdpZHRo
KTsKIAogICAgICAgICAgICAgLy8gQ29tcGVuc2F0ZSBmb3IgdGhlIGxpbmUgd2lkdGgsIG90aGVy
d2lzZSB0aGUgbGF5ZXIncyB0b3AtbGVmdCBjb3JuZXIgd291bGQgYmUKQEAgLTExNDksOCArMTIy
NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGxh
eWVyQ29udGV4dCwgcmVjdCk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhT
dHJva2VkUGF0aChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXll
ckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwg
bV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3Rh
dGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBDR0Nv
bnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAKICAgICAg
ICAgICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0LngoKSAtIGxpbmVX
aWR0aCk7CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkZXN0aW5hdGlvblkgPSByb3VuZGYocmVj
dC55KCkgLSBsaW5lV2lkdGgpOwpAQCAtMTE2MSwxMyArMTIzNiwxMyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdp
ZHRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCByZWN0KTsKICAgICAg
ICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAg
ICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENv
bmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwot
ICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAg
ICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkp
OworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJu
KQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigp
OwogCiAgICAgLy8gVXNpbmcgQ0dDb250ZXh0QWRkUmVjdCBhbmQgQ0dDb250ZXh0U3Ryb2tlUGF0
aCB0byBzdHJva2UgcmVjdCByYXRoZXIgdGhhbgpAQCAtMTE4Miw5NCArMTI1Nyw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBsaW5lV2lkdGgpCiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKLXsKLSAgICBzd2l0
Y2ggKGNhcCkgewotICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKLSAgICAgICAgQ0dDb250ZXh0U2V0
TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcEJ1dHQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIExpbmVDYXA6OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2Fw
KHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwUm91bmQpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIExpbmVDYXA6OlNxdWFyZToKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChwbGF0
Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFNxdWFyZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7
Ci0gICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZGFzaGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbGVuZ3RoICs9IHN0YXRpY19jYXN0
PGZsb2F0PihkYXNoZXNbaV0pOwotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAgZGFz
aE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsKLSAgICB9Ci0gICAg
Q0dDb250ZXh0U2V0TGluZURhc2gocGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hl
cy5kYXRhKCksIGRhc2hlcy5zaXplKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQotewotICAgIHN3aXRjaCAoam9pbikgewotICAgIGNh
c2UgTGluZUpvaW46Ok1pdGVyOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9y
bUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TGluZUpvaW46OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNv
bnRleHQoKSwga0NHTGluZUpvaW5Sb3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGlu
ZUpvaW46OkJldmVsOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRl
eHQoKSwga0NHTGluZUpvaW5CZXZlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAg
IENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOwotICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBDR0NvbnRleHRSb3Rh
dGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKLSAgICBtX2RhdGEtPnJvdGF0ZShhbmds
ZSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5
ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQotewotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQo
KSwgeCwgeSk7Ci0gICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgbV9kYXRhLT5tX3Vz
ZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLXsKLSAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5z
Zm9ybSk7Ci0gICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPm1f
dXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQotewotICAgIENHQ29udGV4dFNldENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3Jt
KTsKLSAgICBtX2RhdGEtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91c2VyVG9E
ZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi1BZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVk
ZVNjYWxlKSBjb25zdAotewotICAgIC8vIFRoZSBDVE0gdXN1YWxseSBpbmNsdWRlcyB0aGUgZGV2
aWNlU2NhbGVGYWN0b3IgZXhjZXB0IGluIFdlYktpdCAxIHdoZW4gdGhlCi0gICAgLy8gY29udGVu
dCBpcyBub24tY29tcG9zaXRlZCwgc2luY2UgdGhlIHNjYWxlIGZhY3RvciBpcyBpbnRlZ3JhdGVk
IGF0IGEgbG93ZXIKLSAgICAvLyBsZXZlbC4gVG8gZ3VhcmFudGVlIHRoZSBkZXZpY2VTY2FsZSBp
cyBpbmNsdWRlZCwgd2UgY2FuIHVzZSB0aGlzIENHIEFQSS4KLSAgICBpZiAoaW5jbHVkZVNjYWxl
ID09IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBDR0NvbnRl
eHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3JtKHBsYXRmb3JtQ29udGV4dCgpKTsK
LQotICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwotfQotCiBG
bG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewogICAgIC8vIEl0IGlz
IG5vdCBlbm91Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2aWNlIHNwYWNlLiBUaGUg
cm90YXRpb24gcGFydCBvZiB0aGUKQEAgLTEyODAsNyArMTI2Nyw5IEBAIEZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFJvdW5kaW5nCiAgICAgaWYgKG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRv
QmVJZGVudGl0eSkKICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3QpOwogCi0gICAg
Q0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9E
ZXZpY2VTcGFjZVRyYW5zZm9ybShwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIENHQWZmaW5lVHJhbnNmb3JtIGRl
dmljZU1hdHJpeCA9IENHQ29udGV4dEdldFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFuc2Zvcm0o
Y29udGV4dCk7CiAgICAgaWYgKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShkZXZpY2VNYXRy
aXgpKSB7CiAgICAgICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJ
ZGVudGl0eSA9IHRydWU7CiAgICAgICAgIHJldHVybiByb3VuZGVkSW50UmVjdChyZWN0KTsKQEAg
LTEzMTksNiArMTMwOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAgICAgaWYgKCF3aWR0
aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIGxvY2FsU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29s
b3IoKSk7CiAKICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRp
YWxpYXNpbmdNb2RlRm9yVGV4dChGbG9hdFJlY3QocG9pbnQsIEZsb2F0U2l6ZSh3aWR0aHMubGFz
dCgpLCB0aGlja25lc3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3IpOwpAQCAtMTM2NCwx
MiArMTM1NCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lcwogICAgIH0KIAogICAgIGlmIChm
aWxsQ29sb3JJc05vdEVxdWFsVG9TdHJva2VDb2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3Io
cGxhdGZvcm1Db250ZXh0KCksIGxvY2FsU3Ryb2tlQ29sb3IpOworICAgICAgICBzZXRDR0ZpbGxD
b2xvcihjb250ZXh0LCBsb2NhbFN0cm9rZUNvbG9yKTsKIAotICAgIENHQ29udGV4dEZpbGxSZWN0
cyhwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaEJvdW5kcy5kYXRhKCksIGRhc2hCb3VuZHMuc2l6ZSgp
KTsKKyAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwgZGFzaEJvdW5kcy5kYXRhKCksIGRh
c2hCb3VuZHMuc2l6ZSgpKTsKIAogICAgIGlmIChmaWxsQ29sb3JJc05vdEVxdWFsVG9TdHJva2VD
b2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGZpbGxDb2xv
cigpKTsKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgZmlsbENvbG9yKCkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKQEAgLTE0MTIsMTcgKzE0MDIsMTggQEAgUmVuZGVy
aW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKQogewogICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihk
ZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBiYXNlIENUTSBvZiBh
IEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQuCiAg
ICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2UgY2Vy
dGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKICAgICAvLyB0byBkcmF3IHdp
dGggYSBzY2FsZSBmYWN0b3Igb2YgMSByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIHNjYWxlIGZhY3Rv
ci4KLSAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBDR0FmZmluZVRy
YW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCkpLCBkZXZp
Y2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBDR0NvbnRleHRTZXRCYXNl
Q1RNKGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShj
b250ZXh0KSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkKIHsKICAgICAvLyBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNv
bGlkIGNvbG9ycy4KLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxs
UGF0dGVybikgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBmaWxsUGF0dGVybigpKSB7CiAg
ICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTQzNCw3ICsxNDI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ry
b2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7CiAgICAgLy8gQ0dDb250ZXh0
U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KLSAgICBpZiAo
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKKyAgICBp
ZiAoc3Ryb2tlR3JhZGllbnQoKSB8fCBzdHJva2VQYXR0ZXJuKCkpIHsKICAgICAgICAgc3Ryb2tl
RWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0Njgs
OSArMTQ1OSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaQogCiBib29sIEdyYXBoaWNzQ29u
dGV4dENHOjpjYW5Vc2VTaGFkb3dCbHVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHJlbmRlcmlu
Z01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hh
ZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgcmV0dXJuIChy
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1
cnJlZFNoYWRvdygpICYmICFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpOwogfQogCi19CiAKLSNl
bmRpZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmgKaW5kZXggNDY4YTQ0YmFhODZlZTUyNjE5ZDI1NWY5Mzk0M2E5NzU1YmFjOWZhYi4uODhk
ZWE1MjUyOWY5MWZhNzFmODY4MzA4YzJkY2Q2YjM2MzZmYjNhNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCwgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI1LDUzICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFVT
RShDRykKKwogI2luY2x1ZGUgIkNvbG9yU3BhY2VDRy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNHQWZmaW5lVHJhbnNmb3JtIGdldFVz
ZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKLQotY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7
Ci1wdWJsaWM6Ci0gICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwg
Ym9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQp
Ci0gICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShtX2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCi0g
ICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIENHQ29udGV4
dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIENHQ29u
dGV4dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRy
dWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCht
X3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRl
eHQpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAg
IGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVz
dG9yZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7
Ci0gICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOwotfTsKLQogY2xhc3MgV0VCQ09SRV9FWFBPUlQg
R3JhcGhpY3NDb250ZXh0Q0cgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKIHB1YmxpYzoKICAg
ICBHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYpOwpAQCAtODUsNjkgKzQ1LDQ2IEBAIHB1
YmxpYzoKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogICAgIENH
Q29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgc2F2
ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSBmaW5hbDsKKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25z
dCBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5h
bDsKIAorICAgIHZvaWQgc2F2ZUltcGwoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmVJbXBsKCkg
ZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogICAgIHZvaWQgYXBw
bHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmlu
YWw7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBmaWxs
UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KSBmaW5hbDsKICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKLSAgICB2
b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKKyAgICB2b2lk
IGNsaXBJbXBsKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGhJbXBs
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKyAgICB2
b2lkIGNsaXBPdXRJbXBsKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXRJbXBs
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0Owog
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGlu
ZVdpZHRoKSBmaW5hbDsKLQotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBl
bGxpcHNlKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBl
bGxpcHNlKSBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5h
bDsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQg
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7Ci0gICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwot
Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIHZvaWQgY2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwotCi0g
ICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldExpbmVD
YXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkm
LCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2lu
KSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwotCi0gICAgdm9p
ZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsOwogCi0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKLSAgICB2b2lkIHNj
YWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xl
SW5SYWRpYW5zKSBmaW5hbDsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBm
aW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92
ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgQWZmaW5lVHJh
bnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VT
Y2FsZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAKLSAgICBGbG9hdFJl
Y3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBS
b3VuZEFsbFNpZGVzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAg
dm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0
LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwpAQCAtMTU2LDE4ICs5MywyMyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBT
dHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBm
aW5hbDsKIAorICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwogICAgIHZvaWQgZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkg
ZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgYWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwor
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5k
aW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworCisgICAgdm9pZCBhcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CiAKICAgICBib29sIHN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGlu
YXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFs
OwogCiAgICAgdmlydHVhbCBib29sIGNhblVzZVNoYWRvd0JsdXIoKSBjb25zdDsKIApAQCAtMTc1
LDkgKzExNywxNiBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisgICAg
Q0dDb250ZXh0UmVmIGludGVybmFsUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRyIH07
CiB9OwogCi19CitDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJl
Zik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIkNHQ29udGV4dFN0YXRl
U2F2ZXIuaCIKIAorI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggZTZjZTJm
Yjk3MjQ3YTZiODZjMDliMWFkMzYxNzAxYzJlYzNlODYyNS4uYWYwMGEwMTMzNDdlMGNkODVhMzBi
ODg0ZWJjNzlmMzJmMWUyMzEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTEyNyw3ICsxMjcsNyBA
QCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYQogCiAgICAgLy8gT2xkIGFuZCBuZXcgY29udGV4dCBz
Y2FsaW5nIGZhY3RvcnMgaGF2ZSB0byBtYXRjaCBhcyB3ZWxsLgogICAgIEFmZmluZVRyYW5zZm9y
bTo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFRyYW5zZm9ybTsKLSAgICBjb250ZXh0LmdldENU
TShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpLmRlY29tcG9z
ZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKKyAgICBjb250ZXh0LmdldENUTSgpLmRlY29tcG9zZShk
ZWNvbXBvc2VkVHJhbnNmb3JtKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5
cGUgY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybTsKICAgICBtX2NhY2hlZFRyYW5zZm9ybS5kZWNv
bXBvc2UoY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybSk7CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9p
ZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QKICAgICB0cmFuc2Zvcm1Db250ZXh0Rm9yUGFpbnRpbmcoYnVm
ZmVyQ29udGV4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KG1fY2FjaGVkSW1hZ2VSZWN0LmxvY2F0aW9u
KCksIHNyY1JlY3Quc2l6ZSgpKSk7CiAgICAgZHJhd1BERlBhZ2UoYnVmZmVyQ29udGV4dCk7CiAK
LSAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9jYWNoZWRUcmFuc2Zvcm0gPSBj
b250ZXh0LmdldENUTSgpOwogICAgIG1fY2FjaGVkRGVzdGluYXRpb25SZWN0ID0gZHN0UmVjdDsK
ICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogICAgICsrbV9jYWNoaW5nQ291bnRG
b3JUZXN0aW5nOwpAQCAtMzYzLDYgKzM2Myw4IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJh
d1BERlBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogCiAgICAgY29udGV4dC50cmFuc2xh
dGUoLW1fY3JvcEJveC5sb2NhdGlvbigpKTsKIAorICAgIGNvbnRleHQuYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKwogICAgIC8vIENHUERGIHBhZ2VzIGFyZSBpbmRleGVkIGZyb20gMS4KICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBDR0NvbnRleHREcmF3UERGUGFnZVdpdGhBbm5vdGF0aW9ucyhjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1BERkRvY3VtZW50R2V0UGFnZShtX2RvY3VtZW50Lmdl
dCgpLCAxKSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0aENHLmNwcAppbmRleCBkNjg5YTUxYTg5MTAyYTUwOTA0NTU5YjQ0MjIzNjlkZTE0NzAz
MzM1Li5mZGVlZjZiMzhkMGM1YjU1NTY3MzdlYjdmNDRhZjJmMmZjOWE0NDQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTI0Nyw3ICsy
NDcsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgIEdyYXBoaWNzQ29udGV4dENHIGdy
YXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3ND
b250ZXh0KTsKIAotICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhDb250YWluc1Bv
aW50KGNvbnRleHQsIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKKyAgICBib29sIGhpdFN1Y2Nlc3Mg
PSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRl
KGNvbnRleHQpOwogCiAgICAgcmV0dXJuIGhpdFN1Y2Nlc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3Jl
VGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3
R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggZWZiYzFlNDk1NDQxYmVkZTczNGU5NDhk
ZDI2ZDM3MTQ0MTY1NTNlMC4uZTliN2FjNGQ3ZjRjYmY3NDEyODkzOWJmYThjMDRlNzY1YTBkYmQ4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEcmF3R2x5cGhz
UmVjb3JkZXIuaCIKIAotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgpAQCAtMzUsNDkg
KzM0LDQxIEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KICNpbmNsdWRlIDxDb3JlVGV4
dC9Db3JlVGV4dC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGJlZ2luTGF5
ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0
YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDRkRpY3Rpb25hcnlSZWYsIENH
Q29udGV4dERlbGVnYXRlUmVmKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGJlZ2luTGF5
ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYsIENH
R1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0LCBDRkRpY3Rpb25hcnlSZWYsIENHQ29udGV4dERlbGVn
YXRlUmVmKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nh
c3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRl
KSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihyc3RhdGUsIGdzdGF0ZSwgcmVjdCk7
CisgICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihnc3RhdGUpOwogICAgIHJldHVybiBkZWxl
Z2F0ZTsKIH0KIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExheWVyKENHQ29udGV4
dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3Rh
dGVSZWYgZ3N0YXRlKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExheWVyKENHQ29u
dGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJl
ZiBnc3RhdGUpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNf
Y2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdh
dGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmRFbmRMYXllcihyc3RhdGUsIGdzdGF0ZSk7CisgICAg
cmVjb3JkZXIucmVjb3JkRW5kTGF5ZXIoZ3N0YXRlKTsKICAgICByZXR1cm4gZGVsZWdhdGU7CiB9
CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdh
dGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0
IENHQWZmaW5lVHJhbnNmb3JtKiB0bSwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQ
b2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIENHRXJyb3IgZHJhd0dseXBo
cyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dH
U3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5cGgg
Z2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKIHsKLSAg
ICBpZiAoQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpID4gMCkgewotICAgICAgICBEcmF3R2x5cGhz
UmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENH
Q29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgICAgICByZWNvcmRlci5yZWNv
cmREcmF3R2x5cGhzKHJzdGF0ZSwgZ3N0YXRlLCB0bSwgZ2x5cGhzLCBwb3NpdGlvbnMsIGNvdW50
KTsKLSAgICB9CisgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2Fz
dDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUp
KTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3R2x5cGhzKGdzdGF0ZSwgZ2x5cGhzLCBwb3NpdGlv
bnMsIGNvdW50KTsKICAgICByZXR1cm4ga0NHRXJyb3JTdWNjZXNzOwogfQogCi1zdGF0aWMgQ0dF
cnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5n
U3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdl
UmVmIGltYWdlKQorc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERlbGVnYXRlUmVm
IGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVj
dCByZWN0LCBDR0ltYWdlUmVmIGltYWdlKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVj
b3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdh
dGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRHJhd0ltYWdlKHJzdGF0
ZSwgZ3N0YXRlLCByZWN0LCBpbWFnZSk7CisgICAgcmVjb3JkZXIucmVjb3JkRHJhd0ltYWdlKGdz
dGF0ZSwgcmVjdCwgaW1hZ2UpOwogICAgIHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAKLVVu
aXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJu
YWxDb250ZXh0KCkKK3N0YXRpYyBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRl
cm5hbENvbnRleHQoRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlcikKIHsKLSAgICBhdXRvIGNv
bnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdhdGVDcmVhdGUodGhpcykpOwor
ICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0
ZSgmcmVjb3JkZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHRE
ZWxlZ2F0ZS5nZXQoKSwgZGVCZWdpbkxheWVyLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERl
bGVnYXRlQ2FsbGJhY2s+KCZiZWdpbkxheWVyKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRD
YWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRW5kTGF5ZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmVuZExheWVyKSk7CiAgICAgQ0dDb250ZXh0
RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0dseXBocywg
cmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmV2ViQ29yZTo6ZHJh
d0dseXBocykpOwpAQCAtODYsNjcgKzc3LDE1IEBAIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+
IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAgICByZXR1cm4g
bWFrZVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHRDRz4oY29udGV4dC5nZXQoKSk7CiB9CiAKLURy
YXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgb3du
ZXIsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZv
bnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293bmVyKG93bmVy
KQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0
JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERy
YXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNvbnRleHQpCisg
ICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiAgICAgLCBtX2Rl
Y29uc3RydWN0RHJhd0dseXBocyhkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAgICAgLCBtX2Rlcml2
ZUZvbnRGcm9tQ29udGV4dChkZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgLCBtX2ludGVybmFs
Q29udGV4dChjcmVhdGVJbnRlcm5hbENvbnRleHQoKSkKKyAgICAsIG1faW50ZXJuYWxDb250ZXh0
KGNyZWF0ZUludGVybmFsQ29udGV4dCgqdGhpcykpCiB7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IGNvbnRleHRTdGF0ZSkKLXsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yID0g
Y29udGV4dFN0YXRlLmZpbGxDb2xvcjsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdy
YWRpZW50ID0gY29udGV4dFN0YXRlLmZpbGxHcmFkaWVudDsKLSAgICBtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUuZmlsbEdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJu
ID0gY29udGV4dFN0YXRlLmZpbGxQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLmNvbG9yID0gY29udGV4dFN0YXRlLnN0cm9rZUNvbG9yOwotICAgIG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5zdHJva2VHcmFkaWVudDsK
LSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9
IGNvbnRleHRTdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLnN0cm9rZVBhdHRlcm47
Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuY3RtID0gbV9vd25lci5nZXRDVE0oKTsgLy8gRklYTUU6
IERlYWwgd2l0aCBiYXNlIENUTS4KLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0
ID0gY29udGV4dFN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBtX29yaWdpbmFsU3RhdGUuc2hhZG93
LmJsdXIgPSBjb250ZXh0U3RhdGUuc2hhZG93Qmx1cjsKLSAgICBtX29yaWdpbmFsU3RhdGUuc2hh
ZG93LmNvbG9yID0gY29udGV4dFN0YXRlLnNoYWRvd0NvbG9yOwotICAgIG1fb3JpZ2luYWxTdGF0
ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA9IGNvbnRleHRTdGF0ZS5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtczsKLQotICAgIG1fY3VycmVudFN0YXRlID0gbV9vcmlnaW5hbFN0YXRlOwotfQotCi12
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAgICBpZiAobV9vcmlnaW5hbFN0
YXRlLmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0
LT5zZXRGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvcik7Ci0gICAgZWxz
ZSBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRl
cm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5n
cmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3Jt
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUu
cGF0dGVybik7Ci0gICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4p
Ci0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4oKm1fb3JpZ2lu
YWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYgKG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWxDb250
ZXh0LT5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IpOwot
ICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCkKLSAgICAg
ICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUu
c3Ryb2tlU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKLSAgICAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5z
dHJva2VTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0
cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKLSAgICB9
Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwot
Ci0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fb3Jp
Z2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgbV9pbnRlcm5hbENvbnRl
eHQtPnNldFNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0
YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBjb250ZXh0U3Rh
dGUuc2hhZG93UmFkaXVzTW9kZSk7Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0VGV4dERy
YXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwotfQotCi12b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBmb250LCBG
b250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6
OnNldEludGVybmFsRm9udChjb25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBzbW9v
dGhpbmdNb2RlKQogewogICAgIEFTU0VSVChDR0FmZmluZVRyYW5zZm9ybUlzSWRlbnRpdHkoQ1RG
b250R2V0TWF0cml4KGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKSk7CiAKQEAgLTE1Niwx
MDQgKzk1LDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNCiAgICAgbV9vcmlnaW5hbFRleHRN
YXRyaXggPSBjb21wdXRlT3ZlcmFsbFRleHRNYXRyaXgoZm9udCk7CiAgICAgaWYgKGZvbnQucGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKQog
ICAgICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgo
Zm9udCwgbV9vcmlnaW5hbFRleHRNYXRyaXgpOwotCi0gICAgYXV0byYgY29udGV4dFN0YXRlID0g
bV9vd25lci5zdGF0ZSgpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb250ZXh0U3RhdGUp
OwotICAgIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnRleHRTdGF0ZSk7CiB9CiAKLXZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29udGV4dCgpCitHcmFwaGljc0Nv
bnRleHRTdGF0ZSBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoKQog
ewotICAgIHVwZGF0ZUNUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKLSAgICB1cGRhdGVGaWxsQ29s
b3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0YXRlLmZpbGxT
dHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuLmdl
dCgpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUu
Y29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmln
aW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0ZVNoYWRvdyht
X29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVy
LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmln
bm9yZVRyYW5zZm9ybXMgPyBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzIDogU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM6Ok5vKTsKKyAgICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBtX2Rlc3RpbmF0
aW9uQ29udGV4dC5zdGF0ZSgpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5tZXJnZVN0YXRlRGlm
ZnMob3JpZ2luYWxTdGF0ZSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPmFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGU7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjp1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImIG5ld0NvbG9yLCBHcmFkaWVudCog
bmV3R3JhZGllbnQsIFBhdHRlcm4qIG5ld1BhdHRlcm4pCit2b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6cmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
b3JpZ2luYWxTdGF0ZSkKIHsKLSAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBpdCBh
Y3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVzZS4KLSAgICAvLyBDVCB3aWxsIG9ubHkg
ZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3JyZWN0
IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNldCBp
dCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29ya3Mg
Y29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRlLmZp
bGxTdHlsZS5jb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGUgbmV3U3RhdGU7Ci0gICAgbmV3U3RhdGUuZmlsbENvbG9yID0gbmV3Q29sb3I7Ci0gICAgaWYg
KG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5maWxsR3JhZGllbnQgPSBuZXdHcmFkaWVu
dDsKLSAgICBpZiAobmV3UGF0dGVybikKLSAgICAgICAgbmV3U3RhdGUuZmlsbFBhdHRlcm4gPSBu
ZXdQYXR0ZXJuOwotICAgIG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5m
aWxsU3R5bGUuY29sb3IgPSBuZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5tZXJn
ZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVy
Ojp1cGRhdGVTdHJva2VDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdH
cmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpy
ZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICAvLyBUaGlzIGNoZWNr
IGxvb2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVzZS4K
LSAgICAvLyBDVCB3aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3aGlj
aCB0aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUludGVy
bmFsQ29udGV4dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHksIHdo
aWNoIHRoaXMgY2hlY2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0NvbG9y
ID09IG1fY3VycmVudFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBuZXdTdGF0ZS5zdHJva2VD
b2xvciA9IG5ld0NvbG9yOwotICAgIGlmIChuZXdHcmFkaWVudCkKLSAgICAgICAgbmV3U3RhdGUu
c3Ryb2tlR3JhZGllbnQgPSBuZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0dGVybikKLSAgICAg
ICAgbmV3U3RhdGUuc3Ryb2tlUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAgbV9vd25lci5kaWRV
cGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JD
aGFuZ2UgfSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IgPSBuZXdDb2xv
cjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0
ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoQ0dH
U3RhdGVHZXRBbHBoYShnc3RhdGUpKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVw
ZGF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKK3ZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpyZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7Ci0gICAgaWYgKGN0bSA9
PSBtX2N1cnJlbnRTdGF0ZS5jdG0pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb3duZXIuc2V0
Q1RNKGN0bSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuY3RtID0gY3RtOworICAgIG1fZGVzdGluYXRp
b25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5h
dGlvbkNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotc3RhdGljIGJvb2wgc2hh
ZG93SXNDbGVhcmVkKGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dC
bHVyKQotewotICAgIHJldHVybiBzaGFkb3dPZmZzZXQgPT0gRmxvYXRTaXplKCkgJiYgIXNoYWRv
d0JsdXI7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFkb3coY29uc3Qg
RmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0IENvbG9yJiBz
aGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyBpZiBub2JvZHkgaGFzIGFueSBzaGFkb3dzLgotICAgIGlmIChzaGFkb3dJc0NsZWFy
ZWQoc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyKSAmJiBzaGFkb3dJc0NsZWFyZWQobV9jdXJyZW50
U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBzdGF0ZUNoYW5nZUZsYWdzOwotCi0g
ICAgaWYgKHNoYWRvd09mZnNldCAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0IHx8IHNo
YWRvd0JsdXIgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgfHwgc2hhZG93Q29sb3IgIT0g
bV9jdXJyZW50U3RhdGUuc2hhZG93LmNvbG9yKSB7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd09m
ZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93Qmx1ciA9IHNoYWRv
d0JsdXI7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7Ci0gICAg
ICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpOwotICAgIH0KLSAgICBpZiAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgIT0gU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkICYmIChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9
PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKSAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cu
aWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czo6WWVzKTsKLSAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKLSAgICB9Ci0gICAgaWYgKHN0YXRl
Q2hhbmdlRmxhZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9vd25lci5kaWRV
cGRhdGVTdGF0ZShuZXdTdGF0ZSwgc3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBtX2N1cnJlbnRT
dGF0ZS5zaGFkb3cub2Zmc2V0ID0gc2hhZG93T2Zmc2V0OwotICAgIG1fY3VycmVudFN0YXRlLnNo
YWRvdy5ibHVyID0gc2hhZG93Qmx1cjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuY29sb3Ig
PSBzaGFkb3dDb2xvcjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3Jt
cyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6
WWVzKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0eWxl
UmVmIHN0eWxlKQorc3RhdGljIHZvaWQgc2V0RHJvcFNoYWRvdyhHcmFwaGljc0NvbnRleHQmIGRl
c3RpbmF0aW9uQ29udGV4dCwgQ0dTdHlsZVJlZiBzdHlsZSkKIHsKICAgICBpZiAoQ0dTdHlsZUdl
dFR5cGUoc3R5bGUpICE9IGtDR1N0eWxlU2hhZG93KSB7CiAgICAgICAgIC8vIEZJWE1FOiBTdXBw
b3J0IG1vcmUga2luZHMgb2YgQ0dTdHlsZXMuCi0gICAgICAgIHVwZGF0ZVNoYWRvdyh7MCwgMH0s
IDAsIENvbG9yKCksIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpVbnNwZWNpZmllZCk7CisgICAg
ICAgIGRlc3RpbmF0aW9uQ29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0yNjEsMjAgKzEzNCw5IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRh
dGVTaGFkb3coQ0dTdHlsZVJlZiBzdHlsZSkKICAgICBhdXRvIHJhZCA9IGRlZzJyYWQoc2hhZG93
U3R5bGUuYXppbXV0aCAtIDE4MCk7CiAgICAgYXV0byBzaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUo
c3RkOjpjb3MocmFkKSwgc3RkOjpzaW4ocmFkKSkgKiBzaGFkb3dTdHlsZS5oZWlnaHQ7CiAgICAg
YXV0byBzaGFkb3dDb2xvciA9IENHU3R5bGVHZXRDb2xvcihzdHlsZSk7Ci0gICAgdXBkYXRlU2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93U3R5bGUucmFkaXVzLCBDb2xvcjo6Y3JlYXRlQW5kUHJl
c2VydmVDb2xvclNwYWNlKHNoYWRvd0NvbG9yKSwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Olll
cyk7Ci19CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVyKENHUmVu
ZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0KQotewotICAgIHVwZGF0
ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgYXV0byBhbHBoYSA9IENHR1N0YXRl
R2V0QWxwaGEoZ3N0YXRlKTsKLSAgICBtX293bmVyLmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoYWxw
aGEpOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIoQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQotewotICAgIHVwZGF0ZUNUTSgqQ0dH
U3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgbV9vd25lci5lbmRUcmFuc3BhcmVuY3lMYXllcigp
OworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBz
dGF0aWNfY2FzdDxmbG9hdD4oc2hhZG93U3R5bGUucmFkaXVzKSwgQ29sb3I6OmNyZWF0ZUFuZFBy
ZXNlcnZlQ29sb3JTcGFjZShzaGFkb3dDb2xvcikgfSk7CisgICAgZGVzdGluYXRpb25Db250ZXh0
LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRydWUpOwogfQogCiBzdGF0aWMgVmVjdG9yPENH
U2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhjb25zdCBDR1BvaW50IHBvc2l0aW9u
c1tdLCBzaXplX3QgY291bnQsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQpA
QCAtMjkwLDE4ICsxNTIsMTggQEAgc3RhdGljIFZlY3RvcjxDR1NpemU+IGNvbXB1dGVBZHZhbmNl
c0Zyb21Qb3NpdGlvbnMoY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2kKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhD
R1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHQWZmaW5lVHJh
bnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNb
XSwgc2l6ZV90IGNvdW50KQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlw
aHMoQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1Bv
aW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCiB7CiAgICAgQVNTRVJUX0lNUExJRVMobV9k
ZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObywgbV9vcmln
aW5hbEZvbnQpOwogCi0gICAgaWYgKCFjb3VudCkKKyAgICBpZiAoIWNvdW50IHx8IENHR1N0YXRl
R2V0QWxwaGEoZ3N0YXRlKSA8PSAwKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0ZvbnRSZWYg
dXNlZEZvbnQgPSBDR0dTdGF0ZUdldEZvbnQoZ3N0YXRlKTsKICAgICBpZiAobV9kZXJpdmVGb250
RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyAmJiB1c2VkRm9udCAhPSBh
ZG9wdENGKENURm9udENvcHlHcmFwaGljc0ZvbnQobV9vcmlnaW5hbEZvbnQtPnBsYXRmb3JtRGF0
YSgpLmN0Rm9udCgpLCBudWxscHRyKSkuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVw
ZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRl
eHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKIAogICAgIC8vIFdlIHdhbnQgdGhl
IHJlcGxheWVyJ3MgQ1RNIGFuZCB0ZXh0IG1hdHJpeCB0byBtYXRjaCB0aGUgY3VycmVudCBDVE0g
YW5kIHRleHQgbWF0cml4LgogICAgIC8vIFRoZSBjdXJyZW50IHRleHQgbWF0cml4IGlzIGEgY29u
Y2F0ZW5hdGlvbiBvZiB3aGF0ZXZlciBXZWJLaXQgc2V0cyBpdCB0byBhbmQgd2hhdGV2ZXIKQEAg
LTMyNCwxMyArMTg2LDE2IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5
cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgICAgIGludmVy
c2VDVE1GaXh1cCA9IGludmVyc2UudmFsdWUoKTsKICAgICBlbHNlCiAgICAgICAgIGN0bUZpeHVw
ID0gQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgbV9vd25lci5jb25jYXRDVE0oY3RtRml4dXApOwor
CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RNKGN0bUZpeHVwKTsKIAogICAgIGF1
dG8gZmlsbENvbG9yID0gQ0dHU3RhdGVHZXRGaWxsQ29sb3IoZ3N0YXRlKTsKKyAgICBtX2Rlc3Rp
bmF0aW9uQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JT
cGFjZShmaWxsQ29sb3IpKTsKKwogICAgIGF1dG8gc3Ryb2tlQ29sb3IgPSBDR0dTdGF0ZUdldFN0
cm9rZUNvbG9yKGdzdGF0ZSk7Ci0gICAgdXBkYXRlRmlsbENvbG9yKENvbG9yOjpjcmVhdGVBbmRQ
cmVzZXJ2ZUNvbG9yU3BhY2UoZmlsbENvbG9yKSk7Ci0gICAgdXBkYXRlU3Ryb2tlQ29sb3IoQ29s
b3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOwotICAgIHVwZGF0
ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250
ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc3Ry
b2tlQ29sb3IpKTsKKworICAgIHNldERyb3BTaGFkb3cobV9kZXN0aW5hdGlvbkNvbnRleHQsIENH
R1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAgICBhdXRvIGZvbnRTaXplID0gQ0dHU3RhdGVH
ZXRGb250U2l6ZShnc3RhdGUpOwogICAgIFJlZiBmb250ID0gbV9kZXJpdmVGb250RnJvbUNvbnRl
eHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyA/ICptX29yaWdpbmFsRm9udCA6IEZvbnQ6
OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNz
Rm9udCh1c2VkRm9udCwgZm9udFNpemUsIG51bGxwdHIsIG51bGxwdHIpKSwgZm9udFNpemUpKTsK
QEAgLTM0NSwzMCArMjEwLDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3
R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgICAgIC8v
IEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjMyOTE3PiAoYERyYXdHbHlwaHNSZWNvcmRl
cmAgc2hvdWxkIGJlIGFibGUgdG8gcmVjb3JkK3JlcGxheSB2ZXJ0aWNhbCB0ZXh0KQogICAgIH0K
IAotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGNvbXB1
dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3VudCwgdGV4dE1hdHJpeCkuZGF0
YSgpLCBjb3VudCwgdGV4dE1hdHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBtX3Ntb290aGlu
Z01vZGUpOwotCi0gICAgbV9vd25lci5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsKKyAgICBt
X2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywg
Y29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCB0ZXh0TWF0cml4
KS5kYXRhKCksIGNvdW50LCB0ZXh0TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21v
b3RoaW5nTW9kZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RNKGludmVyc2VD
VE1GaXh1cCk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2Uo
Q0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0dJ
bWFnZVJlZiBjZ0ltYWdlKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFn
ZShDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNnSW1hZ2UpCiB7
Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICB1cGRhdGVTaGFk
b3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5z
ZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIHNldERyb3BTaGFkb3cobV9kZXN0
aW5hdGlvbkNvbnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAgICAvLyBDb3Jl
IEdyYXBoaWNzIGFzc3VtZXMgYSAieSB1cCIgY29vcmRpbmF0ZSBzeXN0ZW0sIGJ1dCBpbiBXZWJL
aXQsIHdlIHVzZSBhICJ5LWRvd24iIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgIC8vIFRoaXMgbWVh
bnMgdGhhdCBXZWJLaXQncyBkcmF3aW5nIHJvdXRpbmVzIChHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZSgpKSBpbnRlbnRpb25hbGx5IGRyYXcgaW1hZ2VzIHVwc2lkZS1kb3duIGZyb20gQ29yZSBH
cmFwaGljcydzIHBvaW50IG9mIHZpZXcuCiAgICAgLy8gKFRoZXJlJ3MgYSB5LWZsaXAgaW5zaWRl
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSgpLikKICAg
ICAvLyBUaGUgcmVjdCBoYXMgdGhlIHJpZ2h0IGJvdW5kcywgYnV0IHdlIG5lZWQgdG8gdHJhbnNm
b3JtIGZyb20gQ0cncyBjb29yZGluYXRlIHN5c3RlbSB0byBXZWJLaXQncyBieSBwZXJmb3JtaW5n
IG91ciBvd24geS1mbGlwIHNvIGltYWdlcyBhcmUgZHJhd24gdGhlIHJpZ2h0LXNpZGUtdXAuCiAg
ICAgLy8gV2UgZG8gdGhpcyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGUgdHdvIEFQSXMsIHdo
aWNoIGlzIHJpZ2h0IGhlcmUuCi0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhl
aWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKLSAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgx
LCAtMSkpOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRlKDAsIHJlY3Quc2l6
ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQu
c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgCiAgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUlt
YWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5kcmF3TmF0aXZlSW1hZ2UoKmltYWdl
LCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBpbWFnZS0+
c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5U
b3BMZWZ0IH0pOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd05hdGl2ZUltYWdlKCpp
bWFnZSwgaW1hZ2UtPnNpemUoKSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9hdFJlY3QgeyB7IH0sIGlt
YWdlLT5zaXplKCkgfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpP
cmlnaW5Ub3BMZWZ0IH0pOworICAgIAogICAgIC8vIFVuZG8gdGhlIGFib3ZlIHktZmxpcCB0byBy
ZXN0b3JlIHRoZSBjb250ZXh0LgotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7
Ci0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgLShyZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qu
b3JpZ2luLnkpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwg
LTEpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgLShyZWN0LnNpemUu
aGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpKTsKK30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmRyYXdOb25PVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckds
eXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBzZXRJbnRlcm5hbEZvbnQoZm9udCwgc21vb3RoaW5n
TW9kZSk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUludGVybmFsQ29u
dGV4dCgpOworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxDb250ZXh0LCBm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01v
ZGUpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0ZSk7CiB9CiAK
IHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
IGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0zNzksMjUgKzI1MiwxOSBA
QCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIGF1dG8gYm91bmRzID0gZm9udC5ib3Vu
ZHNGb3JHbHlwaChnbHlwaHNbaV0pOwogCiAgICAgICAgIC8vIENyZWF0ZSBhIGxvY2FsIEltYWdl
QnVmZmVyIGJlY2F1c2UgZGVjb2RpbmcgdGhlIFNWRyBmb250cyBoYXMgdG8gaGFwcGVuIGluIFdl
YlByb2Nlc3MuCi0gICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9vd25lci5jcmVhdGVB
bGlnbmVkSW1hZ2VCdWZmZXIoYm91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
UmVuZGVyaW5nTWV0aG9kOjpMb2NhbCkpIHsKKyAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIg
PSBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoYm91bmRzLCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9kOjpMb2NhbCkpIHsK
KyAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
ICAgICAgICAgICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKGltYWdlQnVmZmVyLT5jb250ZXh0
KCksIGZvbnQsIGdseXBocyArIGksIGFkdmFuY2VzICsgaSwgMSwgRmxvYXRQb2ludCgpLCBzbW9v
dGhpbmdNb2RlKTsKIAogICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QoYm91bmRzKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5tb3Zl
QnkocGVuUG9zaXRpb24pOwotICAgICAgICAgICAgbV9vd25lci5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICAgICAgbV9kZXN0aW5hdGlvbkNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKICAg
ICAgICAgfQogCiAgICAgICAgIHBlblBvc2l0aW9uLm1vdmUoc2l6ZShhZHZhbmNlc1tpXSkpOwog
ICAgIH0KIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bihjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAg
ICBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGZvbnQsIHNtb290aGluZ01vZGUpOwotICAgIEZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxDb250ZXh0LCBmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwotICAgIGNvbmNsdWRl
SW50ZXJuYWxDb250ZXh0KCk7Ci19Ci0KIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3QnlT
cGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgYXV0byBvdHN2Z0dseXBocyA9
IGZvbnQuZmluZE9UU1ZHR2x5cGhzKGdseXBocywgbnVtR2x5cGhzKTsKQEAgLTQ0MCw3ICszMDcs
NyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5k
Tm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmIGZvbgogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRy
YXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhz
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGlu
Z01vZGUpCiB7CiAgICAgaWYgKG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzID09IERlY29uc3RydWN0
RHJhd0dseXBoczo6Tm8pIHsKLSAgICAgICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250
KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5n
TW9kZSk7CisgICAgICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZv
bnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhp
bmdNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDUzLDE1ICszMjAsMTcgQEAg
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KENURm9udFJlZiBmb250LCBD
R0Zsb2F0IGZvbnRTaXplLCBDVExpbmUKIHsKICAgICBBU1NFUlQobV9kZWNvbnN0cnVjdERyYXdH
bHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogCi0gICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzYXZlcihtX293bmVyKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHNhdmVyKG1fZGVzdGluYXRpb25Db250ZXh0KTsKIAotICAgIG1fb3duZXIudHJhbnNsYXRl
KGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0LnNpemUuaGVp
Z2h0KTsKLSAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnRyYW5zbGF0ZShsaW5lUmVjdC5vcmlnaW4ueCwgbGluZVJlY3Qub3JpZ2lu
LnkgKyBsaW5lUmVjdC5zaXplLmhlaWdodCk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2Nh
bGUoRmxvYXRTaXplKDEsIC0xKSk7CiAKLSAgICBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KEZvbnQ6
OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGZvbnQsIGZvbnRTaXplKSksIEZvbnRTbW9vdGhpbmdN
b2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKKyAgICBzZXRJbnRlcm5hbEZvbnQoRm9udDo6Y3Jl
YXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNtb290aGluZ01vZGU6
OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIAorICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9IHBy
ZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24obV9p
bnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAwLCAwKTsKICAgICBDVExpbmVEcmF3
KGxpbmUsIG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgY29uY2x1
ZGVJbnRlcm5hbENvbnRleHQoKTsKKyAgICByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KG9yaWdp
bmFsU3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNj
YWRlQ29yZVRleHQuY3BwCmluZGV4IDUxMWUwOWI5NmNlZjAzMjUwOTBlMjNhZjkxNGFlMzVmMmFi
OGVkMmUuLjY5ZWEwNDMzZTI2OThlY2Q3MTE0NWIzMjAyNzM2YzcyZTExYWE3NjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRl
Q29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC0yNDIsMTAgKzI0Miw3IEBAIHZvaWQgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250
JiBmb250LCBjb25zdCBHCiAgICAgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShjb250ZXh0KTsKICAg
ICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkpOwog
Ci0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAg
IENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGNvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgIGF1dG8gZHJvcFNoYWRvdyA9IGNvbnRleHQu
ZHJvcFNoYWRvdygpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRDVE0gPSBjb250ZXh0
LmdldENUTSgpOwogICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKTsKQEAgLTI1OCwxNiArMjU1LDE2IEBAIHZvaWQgRm9udENhc2NhZGU6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBHCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250
ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dD
b2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0
bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGNvbnRl
eHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRleHQuaXNJ
blRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250ZXh0
LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBkcm9wU2hhZG93
LmNvbG9yLmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRvdy5ibHVyICYmICFwbGF0Zm9ybURhdGEuaXND
b2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8
fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFjb250
ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsK
ICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVs
eWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5n
LgogICAgICAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9yIGZpbGxDb2xv
ciA9IGNvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9
IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFz
RmxvYXQoKSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IGRyb3BTaGFkb3cuY29s
b3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsK
ICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAg
ZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAg
ICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNldC53
aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0
aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3du
IGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNo
YWRvd09mZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkg
PyAtMSA6IDEpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIGRyb3BT
aGFkb3cub2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
KSA/IC0xIDogMSk7CiAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChz
aGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5j
ZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGlmIChzeW50aGV0aWNCb2xkT2Zm
c2V0KQogICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRv
d1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRl
eHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CkBAIC0yODAsNyAr
Mjc3LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAgICAgICAgc2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50
LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0
TWF0cml4KTsKIAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRleHQuc2V0
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBj
b250ZXh0LnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250
U21vb3RoaW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggMmUyZjRmNGYyY2I1NWQz
NjVlNWFlMzk5MzI1ZDA1ZjJjMTczNjFmZC4uY2NmNDBjZWE2MmIxNjc0MzY2ZDc0ODQxNjJiMWJj
NGU5Mzc3MDc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC05MCwxMCArOTAsNyBA
QCBib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3Ms
IEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgaWYgKCEoZmxhZ3MgJiBBc1RleHRGbGFnOjpJbmNs
dWRlc1BsYXRmb3JtT3BlcmF0aW9ucykpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHN0YXRl
SXRlbSA9IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICAgICAgLy8gRklYTUU6IGZvciBu
b3csIG9ubHkgZHJvcCB0aGUgaXRlbSBpZiB0aGUgb25seSBzdGF0ZS1jaGFuZ2UgZmxhZ3MgYXJl
IHBsYXRmb3JtLXNwZWNpZmljLgotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZUNoYW5n
ZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250c0NoYW5nZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisg
ICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlKCkuY2hhbmdlcygpID09IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yMDIs
MTYgKzE5OSw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAg
ICAgICAgIHJldHVybiBhcHBlbmQ8U2F2ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihpdGVtLmdl
dDxSZXN0b3JlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJl
dHVybiBhcHBlbmQ8VHJhbnNsYXRlPihpdGVtLmdldDxUcmFuc2xhdGU+KCkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0
PFJvdGF0ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBh
cHBlbmQ8U2NhbGU+KGl0ZW0uZ2V0PFNjYWxlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5n
ZXQ8Q29uY2F0ZW5hdGVDVE0+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTZXRDVE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldElu
bGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTIyMCwxNiArMjA3LDYgQEAgdm9p
ZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0uZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKSk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0
U3RhdGU+KGl0ZW0uZ2V0PFNldFN0YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVDYXA+KGl0ZW0uZ2V0PFNldExpbmVD
YXA+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4g
YXBwZW5kPFNldExpbmVEYXNoPihpdGVtLmdldDxTZXRMaW5lRGFzaD4oKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZUpvaW4+
KGl0ZW0uZ2V0PFNldExpbmVKb2luPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxp
bWl0OgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldE1pdGVyTGltaXQ+KGl0ZW0uZ2V0PFNldE1p
dGVyTGltaXQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPENsZWFyU2hhZG93PihpdGVtLmdldDxDbGVhclNoYWRvdz4oKSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwPihpdGVtLmdl
dDxDbGlwPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMjc0LDggKzI1MSw2
IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9y
PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAg
cmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAg
ICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21w
b3NpdGVkUmVjdD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAg
ICAgICByZXR1cm4gYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRS
ZWN0PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAppbmRleCAw
YzI1MjI2NGFmNDE2NjU2MjE3NTE2MDQxMDQyYThiZGQzYmZhYmI1Li5kZWZjZTg0ZWYzNTg3YmVh
MDZkMjA3ZGI1YjgwMmFhN2M4MjU2NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpEcmF3aW5n
Q29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCi0gICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3ND
b250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQor
ICAgIDogbV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXpl
KSwgaW5pdGlhbENUTSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmNwcAppbmRleCA0NTc3NTUxODliZGFkZDcxOWQyNDVhNGU2ZDJjODFiZGRiMWY3ZGYz
Li4wZGIxNTAzOTYwNDAzMmYzMzAzZmJjYjY1MjFlNTNlNGUzNGY5MThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtNTIsMjEgKzUyLDYgQEAgdm9p
ZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgZ2V0PFJlc3RvcmU+KCkuYXBwbHkoY29udGV4dCk7
CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAg
IGdldDxUcmFuc2xhdGU+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGdldDxSb3RhdGU+KCkuYXBwbHkoY29udGV4
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAg
Z2V0PFNjYWxlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGdldDxDb25jYXRlbmF0ZUNUTT4oKS5h
cHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENU
TToKLSAgICAgICAgZ2V0PFNldENUTT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgZ2V0PFNl
dElubGluZUZpbGxDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAt
NzksMjEgKzY0LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKLSAgICAgICAgZ2V0PFNldExpbmVDYXA+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0PFNldExp
bmVEYXNoPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGdldDxTZXRMaW5lSm9pbj4oKS5hcHBseShjb250
ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6
Ci0gICAgICAgIGdldDxTZXRNaXRlckxpbWl0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGdldDxDbGVh
clNoYWRvdz4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXA6CiAgICAgICAgIGdldDxDbGlwPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAg
ICByZXR1cm47CkBAIC0xNjAsOSArMTMwLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6CiAgICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5hcHBseShjb250ZXh0
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDoKLSAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKLSAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAg
ICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjcwLDkgKzIzNyw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgICAgIGdldDxEcmF3UGF0aD4oKS5+RHJhd1BhdGgo
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDoKLSAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0ZWRSZWN0
KCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAg
ICAgZ2V0PEZpbGxQYXRoPigpLn5GaWxsUGF0aCgpOwogICAgICAgICByZXR1cm47CkBAIC0yODgs
OSArMjUyLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxS
b3VuZGVkUmVjdCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKLSAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBnZXQ8U2V0
U3RhdGU+KCkuflNldFN0YXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxNCw5ICsyNzUsNiBA
QCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
Q2xlYXJSZWN0Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6
Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPENsZWFyU2hhZG93Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8Q2xpcD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI2LDkg
KzI4NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPENsaXBUb0ltYWdlQnVmZmVyPjo6dmFsdWUpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENvbmNhdGVuYXRlQ1RNPjo6dmFs
dWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj46OnZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMzg3LDMzICszNDIsMTUgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSZXN0b3JlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSb3RhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTYXZlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNjYWxlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxDb2xv
cj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZVN0cm9rZUNvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRJbmxpbmVTdHJva2VDb2xvcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2
YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0
OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
ZXRNaXRlckxpbWl0Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTQzNyw5ICszNzQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQog
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUxpbmU+Ojp2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZhbHVlKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIApAQCAtNTAxLDggKzQzNSw2IEBAIGJvb2wgSXRl
bUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRp
b24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3UGF0dGVybj4oaXRlbU9mZnNl
dCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICByZXR1cm4g
Y29weUludG88RHJhd1BhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsQ29tcG9z
aXRlZFJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0
aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CkBAIC01MTMsOCArNDQ1LDYg
QEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRs
ZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0Pihp
dGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAg
ICAgIHJldHVybiBjb3B5SW50bzxTZXRMaW5lRGFzaD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0U3Rh
dGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgpA
QCAtNTMxLDE2ICs0NjEsMTIgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBp
dGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclJl
Y3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoK
LSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsZWFyU2hhZG93PihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXA+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgICAg
ICByZXR1cm4gY29weUludG88Q2xpcE91dD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgICAgICByZXR1cm4gY29weUludG88Q2xp
cFRvSW1hZ2VCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
b25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENvbmNhdGVuYXRlQ1RNPihp
dGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToK
QEAgLTU3MywyNCArNDk5LDEyIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUg
aXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAjZW5kaWYKICAgICBjYXNl
IEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICByZXR1cm4gY29weUludG88UmVzdG9yZT4oaXRl
bU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFJvdGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNhdmU6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTYXZlPihpdGVtT2Zmc2V0LCAqdGhp
cyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxT
Y2FsZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldENUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PFNldElubGluZUZpbGxDb2xvcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5s
aW5lU3Ryb2tlQ29sb3I+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGluZUNhcD4oaXRlbU9mZnNl
dCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1
cm4gY29weUludG88U2V0TGluZUpvaW4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TWl0ZXJM
aW1pdD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRl
bU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CkBAIC02
MDcsOCArNTIxLDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlw
ZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PFN0cm9rZVJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VMaW5lOgogICAgICAgICByZXR1cm4gY29weUludG88U3Ryb2tlTGluZT4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPFRyYW5zbGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKaW5kZXgg
NTRlYTFjODY4MmMwNzQ0MmUyZTg0MTRiNzMyOGFhMzI0ODAyNWE3NS4uYmEwZDk1MWMyMmNmNDlj
ZTQxN2UzMzU1M2IwMGUwYTViOGFiMjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1UeXBlLmNwcApAQCAtMzgsMTYgKzM4LDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVt
SW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNhdmUpOwogICAg
IGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVybiBzaXplb2YoUmVzdG9yZSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFRy
YW5zbGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFJvdGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoU2NhbGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKENvbmNhdGVuYXRlQ1RNKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRD
VE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0Q1RNKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5lRmlsbENv
bG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTU2LDE2
ICs0Niw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkK
ICAgICAgICAgcmV0dXJuIHNpemVvZihTZXRTdHJva2VUaGlja25lc3MpOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0YXRlKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVD
YXApOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFNldExpbmVEYXNoKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihTZXRMaW5lSm9pbik7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRNaXRlckxpbWl0KTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIHNpemVvZihDbGVhclNoYWRv
dyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIHNpemVvZihDbGlw
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMTEwLDggKzkwLDYgQEAgc3RhdGlj
IHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxSZWN0V2l0aENvbG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudDoKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhHcmFkaWVudCk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxDb21wb3NpdGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5k
ZWRSZWN0OgogICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSb3VuZGVkUmVjdCk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CkBAIC0xODIsMjggKzE2MCwxOCBA
QCBib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseUZpbGxQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoK
ICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNlIEl0ZW1U
eXBlOjpSZXN0b3JlOgotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1U
eXBlOjpTYXZlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6
OlNldENUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgogICAgIGNh
c2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKQEAgLTIyMiw3ICsxOTAsNiBAQCBib29sIGlzRHJhd2lu
Z0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVu
Y3lMYXllcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbExpbmU6CkBAIC0yODgsMTMgKzI1NSwxMSBAQCBib29sIGlz
SW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UGF0aDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
Q29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJvdW5kZWRSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1N5c3RlbUltYWdlOgpAQCAtMzA2LDExICsyNzEsOSBAQCBi
b29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlw
ZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBU
b0ltYWdlQnVmZmVyOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0VsbGlwc2U6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXI6CkBAIC0zMzMsMTUgKzI5Niw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUp
CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgogI2VuZGlmCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VU
aGlja25lc3M6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKQEAgLTM1MSw3ICszMDgsNiBAQCBib29sIGlzSW5saW5lSXRlbShJ
dGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0
ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5kZXggZDY4M2IyYWNmNzg0
NWY5OWMzY2QwOTVlYjkxMWU1NGYxZjhjZTExMS4uMTY2MGI5OGZkYTVlZjI3YjNmNzVkMjJhNTc5
YTNhOWFlM2NjNzBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCkBA
IC0zMSwyMCArMzEsMTAgQEAgbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGVudW0gY2xhc3MgSXRl
bVR5cGUgOiB1aW50OF90IHsKICAgICBTYXZlLAogICAgIFJlc3RvcmUsCi0gICAgVHJhbnNsYXRl
LAotICAgIFJvdGF0ZSwKLSAgICBTY2FsZSwKLSAgICBDb25jYXRlbmF0ZUNUTSwKLSAgICBTZXRD
VE0sCiAgICAgU2V0SW5saW5lRmlsbENvbG9yLAogICAgIFNldElubGluZVN0cm9rZUNvbG9yLAog
ICAgIFNldFN0cm9rZVRoaWNrbmVzcywKICAgICBTZXRTdGF0ZSwKLSAgICBTZXRMaW5lQ2FwLAot
ICAgIFNldExpbmVEYXNoLAotICAgIFNldExpbmVKb2luLAotICAgIFNldE1pdGVyTGltaXQsCi0g
ICAgQ2xlYXJTaGFkb3csCiAgICAgQ2xpcCwKICAgICBDbGlwT3V0LAogICAgIENsaXBUb0ltYWdl
QnVmZmVyLApAQCAtNjcsNyArNTcsNiBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7
CiAgICAgRmlsbFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJlY3RXaXRo
R3JhZGllbnQsCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0LAogICAgIEZpbGxSb3VuZGVkUmVjdCwK
ICAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAyM2QwYmJjYzcxYzI4
MWM1MmMzNWE4YzI1MmRhOTZjMGFiMTJhOThjLi44NDNmZGYxZTc3MmU3YzFjMzk2OGMxMzgwZjM0
MTM5ZTg4M2UzMTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC01
NCw2NyArNTQsNiBAQCB2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBUcmFuc2xhdGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnRyYW5z
bGF0ZShtX3gsIG1feSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJ4IiwgaXRlbS54KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgieSIsIGl0ZW0ueSgpKTsKLQot
ICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBSb3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnJvdGF0ZShtX2FuZ2xlKTsKLX0KLQotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYg
aXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImFuZ2xlIiwgaXRlbS5hbmdsZSgpKTsKLQot
ICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2NhbGUobV9zaXplKTsKLX0KLQotc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVt
KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIsIGl0ZW0uYW1vdW50KCkpOwotCi0gICAg
cmV0dXJuIHRzOwotfQotCi12b2lkIFNldENUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0Q1RNKG1fdHJhbnNmb3JtKTsKLX0KLQotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldENUTSYg
aXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNldC1jdG0iLCBpdGVtLnRyYW5zZm9ybSgp
KTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY29uY2F0Q1RNKG1f
dHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENvbmNhdGVuYXRlQ1RNJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY3RtIiwgaXRlbS50cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQg
U2V0SW5saW5lRmlsbENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3IoKSk7CkBAIC0xNDgsNzcgKzg3LDIx
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
ZXRTdHJva2VUaGlja25lc3MmIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0U3RhdGU6
OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0
YXRlLCBmbGFncykKLXsKLX0KLQotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKLSAgICA6IG1fc3RhdGVDaGFuZ2Uoc3RhdGVD
aGFuZ2UpCitTZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlKQorICAgIDogbV9zdGF0ZShzdGF0ZSkKIHsKIH0KIAogdm9pZCBTZXRTdGF0ZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIG1fc3RhdGVDaGFuZ2UuYXBwbHkoY29u
dGV4dCk7CisgICAgY29udGV4dC5tZXJnZVN0YXRlQ2hhbmdlcyhtX3N0YXRlKTsKIH0KIAotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRl
JiBzdGF0ZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBTZXRTdGF0ZSYpCiB7Ci0gICAgdHMgPDwgc3RhdGUuc3RhdGVDaGFuZ2UoKTsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKLXZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXApOwotfQot
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0
TGluZUNhcCYgbGluZUNhcCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtY2FwIiwgbGlu
ZUNhcC5saW5lQ2FwKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRMaW5lRGFzaDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0
TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURh
c2gpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5IiwgbGluZURhc2guZGFzaEFy
cmF5KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQiLCBsaW5lRGFzaC5kYXNo
T2Zmc2V0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRMaW5lSm9pbjo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUpv
aW4obV9saW5lSm9pbik7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCi17Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJsaW5lLWpvaW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsKLSAgICByZXR1cm4gdHM7
Ci19Ci0KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOwotfQot
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0
TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoIm1pdHJlLWxp
bWl0IiwgbWl0ZXJMaW1pdC5taXRlckxpbWl0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLX0KLQogdm9pZCBDbGlwOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7CkBA
IC02NTcsMzAgKzU0MCwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0pCiAgICAgcmV0dXJuIHRz
OwogfQogCi12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yLCBt
X29wLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCi17Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9w
ZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCiB2
b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9ibGVu
ZE1vZGUpOworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvcik7CiB9
CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBG
aWxsUm91bmRlZFJlY3QmIGl0ZW0pCiB7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRl
bS5yb3VuZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xv
cigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9kZSgp
KTsKICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTc2OCw4ICs2MzYsOCBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbEVsbGlwc2UmIGl0ZW0p
CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1QYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVG
b3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
KQotICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkpCitQYWludEZyYW1lRm9y
TWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKKyAgICA6IG1faWRlbnRpZmllcihpZGVu
dGlmaWVyKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKIHsKIH0KQEAgLTEwMTEs
MTkgKzg3OSwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgSXRlbVR5cGUgdHlwZSkKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTYXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6
IHRzIDw8ICJyZXN0b3JlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOiB0
cyA8PCAidHJhbnNsYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOiB0cyA8
PCAicm90YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6IHRzIDw8ICJzY2Fs
ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogdHMgPDwgInNldC1jdG0iOyBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMgPDwgImNvbmNhdGVu
dGF0ZS1jdG0iOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6
IHRzIDw8ICJzZXQtaW5saW5lLWZpbGwtY29sb3IiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRJbmxpbmVTdHJva2VDb2xvcjogdHMgPDwgInNldC1pbmxpbmUtc3Ryb2tlLWNvbG9yIjsg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOiB0cyA8PCAic2V0
LXN0cm9rZS10aGlja25lc3MiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTog
dHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6
IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
RGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0IjsgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwVG9JbWFnZUJ1ZmZlcjogdHMgPDwgImNsaXAtdG8taW1hZ2UtYnVmZmVyIjsgYnJlYWs7
CkBAIC0xMDQ2LDcgKzkwNSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB0
cyA8PCAiZmlsbC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
Q29sb3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtZ3JhZGll
bnQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHRzIDw8
ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
b3VuZGVkUmVjdDogdHMgPDwgImZpbGwtcm91bmRlZC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1y
b3VuZGVkLWhvbGUiOyBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKQEAgLTEw
NzgsNyArOTM2LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjog
dHMgPDwgImFwcGx5LWZpbGwtcGF0dGVybiI7IGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogdHMgPDwgImFwcGx5LWRldmljZS1zY2FsZS1m
YWN0b3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogdHMgPDwgImNs
ZWFyLXNoYWRvdyI7IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7CiB9CkBAIC0xMDg4LDIx
ICs5NDUsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFu
ZGxlIGl0ZW0pCiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKICAgICBzd2l0Y2ggKGl0ZW0udHlw
ZSgpKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICB0cyA8PCBpdGVt
LmdldDxUcmFuc2xhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJv
dGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Um90YXRlPigpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2NhbGU+
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q29uY2F0ZW5hdGVD
VE0+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvcjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpOwogICAg
ICAgICBicmVhazsKQEAgLTExMTUsMTggKzk1Nyw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dGF0ZToKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3RhdGU+KCk7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFNldExpbmVDYXA+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVEYXNoOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lRGFzaD4oKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFNldExpbmVKb2luPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRNaXRlckxpbWl0Pigp
OwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICB0cyA8
PCBpdGVtLmdldDxDbGlwPigpOwogICAgICAgICBicmVhazsKQEAgLTExOTMsOSArMTAyMyw2IEBA
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RmlsbENvbXBvc2l0ZWRSZWN0PigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSb3VuZGVkUmVj
dD4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjcxLDcgKzEwOTgsNiBAQCBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBh
dHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5oCmluZGV4IDk3Y2I1ZmM4ZDA0YmE4NjYyYjcyYzdkZGVlYmM0NDE1NWMyODI1YjcuLmY5MDdi
MzE0YjI1MjliZDI3YmYwNDNlYjE1MjQ0MDMyN2M0YjA2NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbXMuaApAQCAtODUsMTA0ICs4NSw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogfTsKIAotY2xhc3MgVHJh
bnNsYXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlRyYW5zbGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOwotCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgICAgIDogbV94
KHgpCi0gICAgICAgICwgbV95KHkpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IHgoKSBjb25z
dCB7IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIGZsb2F0IG1feCB7IDAgfTsKLSAgICBmbG9hdCBtX3kgeyAwIH07Ci19
OwotCi1jbGFzcyBSb3RhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7Ci0KLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgICAgIDogbV9h
bmdsZShhbmdsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgYW5nbGUoKSBjb25zdCB7IHJl
dHVybiBtX2FuZ2xlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fYW5nbGUgeyAwIH07IC8v
IEluIHJhZGlhbnMuCi19OwotCi1jbGFzcyBTY2FsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTY2FsZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2NhbGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplKQotICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBGbG9hdFNpemUgbV9zaXplOwotfTsKLQotY2xhc3MgU2V0Q1RNIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldENU
TTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAgICA6IG1fdHJhbnNmb3Jt
KHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCi1jbGFzcyBDb25jYXRlbmF0ZUNU
TSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOwotCi0gICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotICAgIHsKLSAgICB9Ci0K
LSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9y
bTsKLX07Ci0KIGNsYXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29s
b3I7CkBAIC0yNDcsMTAgKzE0OSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpOwotCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIHsgcmV0dXJuIG1fc3RhdGVDaGFuZ2U7IH0KKyAgICBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmKTsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKQEAgLTI1OCw0MDQgKzE1OCwyNiBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKTsKIAog
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSYpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgbV9zdGF0
ZUNoYW5nZTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwogfTsKIAogdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgU2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogewotICAgIGF1dG8gY2hhbmdlRmxhZ3MgPSBtX3N0YXRlQ2hhbmdlLm1fY2hhbmdl
RmxhZ3M7Ci0gICAgZW5jb2RlciA8PCBjaGFuZ2VGbGFnczsKLQotICAgIGF1dG8mIHN0YXRlID0g
bV9zdGF0ZUNoYW5nZS5tX3N0YXRlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgQVNT
RVJUKHN0YXRlLnN0cm9rZUdyYWRpZW50KTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuc3Ry
b2tlR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQo
c3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLnN0cm9rZVBh
dHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5m
aWxsR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5maWxsR3JhZGllbnQ7Ci0g
ICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmZpbGxQYXR0ZXJu
KTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuZmlsbFBhdHRlcm47Ci0gICAgfQotCi0gICAg
aWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICBl
bmNvZGVyIDw8IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hh
ZG93Q29sb3I7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKLSAg
ICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0
YXRlLnN0cm9rZUNvbG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LmZpbGxDb2xvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0
cm9rZVN0eWxlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuZmlsbFJ1
bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuY29t
cG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
YmxlbmRNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0gICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuYWxwaGE7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIGVu
Y29kZXIgPDwgc3RhdGUuc2hvdWxkQW50aWFsaWFzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHM7Ci0KLSAgICBpZiAoY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIGVu
Y29kZXIgPDwgc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgZW5jb2RlciA8PCBt
X3N0YXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3RkOjpvcHRpb25hbDxTZXRT
dGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdz
OwotICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7Ci0gICAgaWYgKCFjaGFuZ2VGbGFncykKKyAg
ICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBzdGF0ZTsKKyAgICBkZWNvZGVy
ID4+IHN0YXRlOworICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZTsKLSAgICBzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzID0gKmNoYW5nZUZsYWdzOwotCi0gICAgaWYgKHN0YXRlQ2hh
bmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6
OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFzdHJva2VHcmFkaWVudCkKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5z
dHJva2VHcmFkaWVudCA9IFdURk1vdmUoKnN0cm9rZUdyYWRpZW50KTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgYXV0byBzdHJva2VQYXR0ZXJuID0g
UGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIXN0cm9rZVBhdHRlcm4pCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1f
c3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUoKnN0cm9rZVBhdHRlcm4pOwotICAgIH0KLQot
ICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gZmlsbEdyYWRpZW50
ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFmaWxsR3JhZGllbnQp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdl
Lm1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZSgqZmlsbEdyYWRpZW50KTsKLSAgICB9Ci0K
LSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gZmlsbFBhdHRlcm4g
PSBQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghZmlsbFBhdHRlcm4pCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1f
c3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKCpmaWxsUGF0dGVybik7Ci0gICAgfQotCi0gICAg
aWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IHNo
YWRvd09mZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgIGlm
ICghc2hhZG93T2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
ICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd09mZnNldCA9ICpzaGFkb3dPZmZzZXQ7Ci0K
LSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2hhZG93Qmx1cjsKLSAgICAgICAgZGVjb2Rl
ciA+PiBzaGFkb3dCbHVyOwotICAgICAgICBpZiAoIXNoYWRvd0JsdXIpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93
Qmx1ciA9ICpzaGFkb3dCbHVyOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IHNoYWRv
d0NvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd0NvbG9yOwotICAgICAgICBpZiAoIXNo
YWRvd0NvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBz
dGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0NvbG9yID0gKnNoYWRvd0NvbG9yOwotCi0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4gc2hhZG93UmFkaXVzTW9kZTsKLSAgICAg
ICAgZGVjb2RlciA+PiBzaGFkb3dSYWRpdXNNb2RlOwotICAgICAgICBpZiAoIXNoYWRvd1JhZGl1
c01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFdURk1vdmUoKnNoYWRvd1JhZGl1c01v
ZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKSB7Ci0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHN0cm9rZVRoaWNrbmVzczsKLSAgICAgICAgZGVjb2RlciA+
PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGlmICghc3Ryb2tlVGhpY2tuZXNzKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRl
LnN0cm9rZVRoaWNrbmVzcyA9ICpzdHJva2VUaGlja25lc3M7Ci0gICAgfQotCi0gICAgaWYgKHN0
YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRl
eHREcmF3aW5nTW9kZUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxUZXh0RHJhd2lu
Z01vZGVGbGFncz4gdGV4dERyYXdpbmdNb2RlOwotICAgICAgICBkZWNvZGVyID4+IHRleHREcmF3
aW5nTW9kZTsKLSAgICAgICAgaWYgKCF0ZXh0RHJhd2luZ01vZGUpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUudGV4dERyYXdp
bmdNb2RlID0gV1RGTW92ZSgqdGV4dERyYXdpbmdNb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IHN0cm9rZUNv
bG9yOwotICAgICAgICBkZWNvZGVyID4+IHN0cm9rZUNvbG9yOwotICAgICAgICBpZiAoIXN0cm9r
ZUNvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZUNvbG9yID0gKnN0cm9rZUNvbG9yOwotICAgIH0KLQotICAg
IGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGZp
bGxDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxsQ29sb3I7Ci0gICAgICAgIGlmICghZmls
bENvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLmZpbGxDb2xvciA9ICpmaWxsQ29sb3I7Ci0gICAgfQotCi0gICAgaWYg
KHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVN0eWxlQ2hhbmdlKSkgewotICAgICAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJva2VTdHlsZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tl
U3R5bGUgPSBzdHJva2VTdHlsZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKSB7
Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8V2luZFJ1bGU+IGZpbGxSdWxlOwotICAgICAgICBkZWNv
ZGVyID4+IGZpbGxSdWxlOwotICAgICAgICBpZiAoIWZpbGxSdWxlKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxSdWxl
ID0gKmZpbGxSdWxlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2Up
KSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlT3BlcmF0b3I+IGNvbXBvc2l0ZU9w
ZXJhdG9yOwotICAgICAgICBkZWNvZGVyID4+IGNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBp
ZiAoIWNvbXBvc2l0ZU9wZXJhdG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yID0gKmNvbXBv
c2l0ZU9wZXJhdG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpKSB7Ci0gICAg
ICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0gICAgICAgIGRlY29kZXIg
Pj4gYmxlbmRNb2RlOwotICAgICAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5ibGVuZE1vZGUg
PSAqYmxlbmRNb2RlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFsaXR5PiBp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgICAgICBkZWNvZGVyID4+IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGlmICghaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gKmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBhbHBoYTsKLSAgICAgICAgZGVjb2RlciA+PiBhbHBoYTsKLSAgICAgICAg
aWYgKCFhbHBoYSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAg
c3RhdGVDaGFuZ2UubV9zdGF0ZS5hbHBoYSA9ICphbHBoYTsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkQW50aWFsaWFzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3Vs
ZEFudGlhbGlhczsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91bGRBbnRpYWxpYXM7Ci0gICAgICAg
IGlmICghc2hvdWxkQW50aWFsaWFzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9ICpzaG91bGRB
bnRpYWxpYXM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkgewot
ICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZFNtb290aEZvbnRzOwotICAgICAgICBk
ZWNvZGVyID4+IHNob3VsZFNtb290aEZvbnRzOwotICAgICAgICBpZiAoIXNob3VsZFNtb290aEZv
bnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNo
YW5nZS5tX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0gKnNob3VsZFNtb290aEZvbnRzOwotICAg
IH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKSB7Ci0gICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAg
ICAgICBkZWNvZGVyID4+IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICAgICAgaWYg
KCFzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzID0gKnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAgIGlmICghc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSAqc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgeyBzdGF0ZUNoYW5nZSB9IH07Ci19Ci0KLWNs
YXNzIFNldExpbmVDYXAgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUNhcDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi0gICAg
ICAgIDogbV9saW5lQ2FwKGxpbmVDYXApCi0gICAgewotICAgIH0KLQotICAgIExpbmVDYXAgbGlu
ZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMaW5l
Q2FwIG1fbGluZUNhcDsKLX07Ci0KLWNsYXNzIFNldExpbmVEYXNoIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVEYXNo
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi0gICAg
ICAgIDogbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAgICAgICAsIG1fZGFzaE9mZnNldChkYXNo
T2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9Ci0gICAgZmxvYXQgZGFzaE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFzaD4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKLSAgICBEYXNoQXJyYXkgbV9kYXNoQXJyYXk7Ci0gICAgZmxvYXQgbV9kYXNo
T2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TGluZURhc2g6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9kYXNo
QXJyYXk7Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hPZmZzZXQ7CisgICAgcmV0dXJuIHsgKnN0YXRl
IH07CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1zdGQ6Om9wdGlvbmFsPFNldExpbmVE
YXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpv
cHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJheTsKLSAgICBkZWNvZGVyID4+IGRhc2hBcnJheTsK
LSAgICBpZiAoIWRhc2hBcnJheSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGRhc2hPZmZzZXQ7Ci0gICAgZGVjb2RlciA+PiBkYXNoT2Zm
c2V0OwotICAgIGlmICghZGFzaE9mZnNldCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgIHJldHVybiB7eyAqZGFzaEFycmF5LCAqZGFzaE9mZnNldCB9fTsKLX0KLQotY2xhc3Mg
U2V0TGluZUpvaW4gewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUpvaW47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotICAg
ICAgICA6IG1fbGluZUpvaW4obGluZUpvaW4pCi0gICAgewotICAgIH0KLQotICAgIExpbmVKb2lu
IGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBMaW5lSm9pbiBtX2xpbmVKb2luOwotfTsKLQotY2xhc3MgU2V0TWl0ZXJMaW1pdCB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0K
LSAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi0gICAgICAgIDogbV9taXRlckxp
bWl0KG1pdGVyTGltaXQpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IG1pdGVyTGltaXQoKSBj
b25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9t
aXRlckxpbWl0OwotfTsKLQotY2xhc3MgQ2xlYXJTaGFkb3cgewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci19OwotCiAvLyBGSVhNRTog
dHJlYXQgYXMgZHJhd2luZyBpdGVtPwogY2xhc3MgQ2xpcCB7CiBwdWJsaWM6CkBAIC0xNjEyLDkx
ICsxMTM0LDIwIEBAIHN0ZDo6b3B0aW9uYWw8RmlsbFJlY3RXaXRoR3JhZGllbnQ+IEZpbGxSZWN0
V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlCiAgICAgcmV0dXJuIHt7ICpyZWN0
LCBncmFkaWVudC0+Z2V0KCkgfX07CiB9CiAKLWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
dHJ1ZTsKLQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi0gICAgICAgIDogbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAg
ICAgICAgLCBtX29wKG9wKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7
Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
LSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29w
OyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2Rl
OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7
IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxG
aWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgRmxv
YXRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBtX2NvbG9yOwotICAgIENvbXBvc2l0ZU9wZXJhdG9y
IG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fY29s
b3I7Ci0gICAgZW5jb2RlciA8PCBtX29wOwotICAgIGVuY29kZXIgPDwgbV9ibGVuZE1vZGU7Ci19
Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1zdGQ6Om9wdGlvbmFsPEZpbGxDb21wb3NpdGVk
UmVjdD4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0g
ICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpv
cHRpb25hbDxDb2xvcj4gY29sb3I7Ci0gICAgZGVjb2RlciA+PiBjb2xvcjsKLSAgICBpZiAoIWNv
bG9yKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxD
b21wb3NpdGVPcGVyYXRvcj4gb3A7Ci0gICAgZGVjb2RlciA+PiBvcDsKLSAgICBpZiAoIW9wKQot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxCbGVuZE1v
ZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKLSAgICBpZiAoIWJsZW5k
TW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqcmVj
dCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUgfX07Ci19Ci0KIGNsYXNzIEZpbGxSb3VuZGVkUmVj
dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKIAotICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgRmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAg
ICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKICAgICB7CiAgICAgfQogCiAgICAgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
ICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAg
QmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbFJvdW5k
ZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMTcwOSw3ICsxMTYwLDYgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9y
OwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+CkBAIC0xNzE3LDcgKzExNjcsNiBAQCB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX3JlY3Q7CiAgICAgZW5j
b2RlciA8PCBtX2NvbG9yOwotICAgIGVuY29kZXIgPDwgbV9ibGVuZE1vZGU7CiB9CiAKIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+CkBAIC0xNzMzLDEyICsxMTgyLDcgQEAgc3RkOjpvcHRpb25hbDxG
aWxsUm91bmRlZFJlY3Q+IEZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0
ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0gICAgZGVjb2RlciA+PiBibGVuZE1v
ZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSB9fTsKKyAgICByZXR1cm4g
eyB7ICpyZWN0LCAqY29sb3IgfSB9OwogfQogCiBjbGFzcyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSB7CkBAIC0xOTYxLDcgKzE0MDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgUGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAKICAg
ICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5h
dGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyOyB9CkBAIC0yMjU2LDEzICsxNzAwLDExIEBAIHVzaW5nIERpc3Bs
YXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgIDwgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcgog
ICAgICwgQmVnaW5UcmFuc3BhcmVuY3lMYXllcgogICAgICwgQ2xlYXJSZWN0Ci0gICAgLCBDbGVh
clNoYWRvdwogICAgICwgQ2xpcAogICAgICwgQ2xpcE91dAogICAgICwgQ2xpcE91dFRvUGF0aAog
ICAgICwgQ2xpcFBhdGgKICAgICAsIENsaXBUb0ltYWdlQnVmZmVyCi0gICAgLCBDb25jYXRlbmF0
ZUNUTQogICAgICwgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcgogICAgICwgRHJhd0VsbGlwc2UK
ICAgICAsIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyCkBAIC0yMjc4LDcgKzE3MjAsNiBAQCB1c2lu
ZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZhcmlhbnQKICAgICAsIERyYXdSZWN0CiAgICAgLCBE
cmF3U3lzdGVtSW1hZ2UKICAgICAsIEVuZFRyYW5zcGFyZW5jeUxheWVyCi0gICAgLCBGaWxsQ29t
cG9zaXRlZFJlY3QKICAgICAsIEZpbGxFbGxpcHNlCiAgICAgLCBGaWxsUGF0aAogICAgICwgRmls
bFJlY3QKQEAgLTIyODgsMjMgKzE3MjksMTUgQEAgdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gc3Rk
Ojp2YXJpYW50CiAgICAgLCBGaWxsUm91bmRlZFJlY3QKICAgICAsIEZsdXNoQ29udGV4dAogICAg
ICwgUmVzdG9yZQotICAgICwgUm90YXRlCiAgICAgLCBTYXZlCi0gICAgLCBTY2FsZQotICAgICwg
U2V0Q1RNCiAgICAgLCBTZXRJbmxpbmVGaWxsQ29sb3IKICAgICAsIFNldElubGluZVN0cm9rZUNv
bG9yCi0gICAgLCBTZXRMaW5lQ2FwCi0gICAgLCBTZXRMaW5lRGFzaAotICAgICwgU2V0TGluZUpv
aW4KLSAgICAsIFNldE1pdGVyTGltaXQKICAgICAsIFNldFN0YXRlCiAgICAgLCBTZXRTdHJva2VU
aGlja25lc3MKICAgICAsIFN0cm9rZUVsbGlwc2UKICAgICAsIFN0cm9rZUxpbmUKICAgICAsIFN0
cm9rZVBhdGgKICAgICAsIFN0cm9rZVJlY3QKLSAgICAsIFRyYW5zbGF0ZQogCiAjaWYgRU5BQkxF
KElOTElORV9QQVRIX0RBVEEpCiAgICAgLCBGaWxsTGluZQpAQCAtMjM0MSwyMCArMTc3NCwxMCBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSwKICAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNhdmUsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpSZXN0b3JlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
VHJhbnNsYXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlLAot
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2NhbGUsCi0gICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRDVE0sCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldElubGluZUZpbGxDb2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0U3RhdGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZURh
c2gsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbiwKLSAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1pdGVyTGltaXQsCi0gICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclNoYWRvdywKICAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXAsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpDbGlwT3V0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xp
cFRvSW1hZ2VCdWZmZXIsCkBAIC0yMzc2LDcgKzE3OTksNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50LAotICAgIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCiAjaWYgRU5BQkxFKElOTElORV9Q
QVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXgg
ZWVlNDQ3MWQzNTRlNzUxNTMxMjUxODlkZmNjOTQxOGEzOTQ1MTRhMS4uZjI4YTIxNTJkODFjNGZm
OTZjNTRiMDU3ZGUxZTU0MDA0MzhkMmQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmNwcApAQCAtNDIsMzUwICs0MiwxNTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLVJlY29yZGVyOjpSZWNvcmRlcihjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNv
bnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogbV9kcmF3R2x5
cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3RydWN0RHJhd0dseXBocykKLXsKLSAgICBtX3N0YXRl
U3RhY2suYXBwZW5kKHsgc3RhdGUsIGluaXRpYWxDVE0sIGluaXRpYWxDVE0ubWFwUmVjdChpbml0
aWFsQ2xpcCkgfSk7Ci19Ci0KLVJlY29yZGVyOjp+UmVjb3JkZXIoKQotewotICAgIEFTU0VSVCht
X3N0YXRlU3RhY2suc2l6ZSgpID09IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBpdCBpbmRpY2F0ZXMg
bWlzbWF0Y2hlZCBzYXZlL3Jlc3RvcmUuCi19CitSZWNvcmRlcjo6UmVjb3JkZXIoY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdH
bHlwaHMpCisgICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENsaXAsIHsgfSwgIGluaXRpYWxD
VE0pCisgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZGVjb25zdHJ1Y3REcmF3R2x5
cGhzKQogCi1zdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQogewotICAgIHN0YXRpYyBjb25zdGV4cHIg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgaW5saW5lU3RhdGVDaGFuZ2VG
bGFncyB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFu
Z2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwKLSAgICB9OwotCi0g
ICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFuZ2VGbGFncyAmIGlubGluZVN0YXRlQ2hhbmdlRmxh
Z3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5t
X3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0
QXNTUkdCQUJ5dGVzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQotewotICAgIGlmICghY29udGFpbnNPbmx5SW5saW5l
U3RhdGVDaGFuZ2VzKGNoYW5nZXMsIGNoYW5nZUZsYWdzKSkgewotICAgICAgICBpZiAoYXV0byBw
YXR0ZXJuID0gY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVBhdHRlcm4pCi0gICAgICAgICAgICByZWNv
cmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7Ci0gICAgICAgIGlmIChhdXRvIHBh
dHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuZmlsbFBhdHRlcm4pCi0gICAgICAgICAgICByZWNvcmRS
ZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7Ci0gICAgICAgIHJlY29yZFNldFN0YXRl
KGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKCpjaGFu
Z2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwotCi0gICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25l
c3NDaGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoY2hhbmdlcy5tX3N0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldElu
bGluZUZpbGxDb2xvcigqY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0
ZXMoKSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBjdXJyZW50bHkgaW52b2tlZCBpbiBhbiBh
ZC1ob2MgbWFubmVyIHdoZW4gcmVjb3JkaW5nIGRyYXdpbmcgaXRlbXMuIFdlIHNob3VsZCBjb25z
aWRlciBlaXRoZXIKLSAgICAvLyBzcGxpdHRpbmcgR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5n
ZXMgaW50byBpbmRpdmlkdWFsIGRpc3BsYXkgbGlzdCBpdGVtcywgb3IgcmVmYWN0b3JpbmcgdGhl
IGNvZGUgc3VjaCB0aGF0Ci0gICAgLy8gdGhpcyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBpbnZv
a2VkIHdoZW4gcmVjb3JkaW5nIGEgZHJhd2luZyBpdGVtLgotICAgIGF1dG8mIHN0YXRlQ2hhbmdl
cyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOwotICAgIGF1dG8gY2hhbmdlc0Zyb21MYXN0
U3RhdGUgPSBzdGF0ZUNoYW5nZXMuY2hhbmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0
RHJhd2luZ1N0YXRlKTsKLSAgICBpZiAoIWNoYW5nZXNGcm9tTGFzdFN0YXRlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInBy
ZS1kcmF3aW5nLCBzYXZpbmcgc3RhdGUgIiA8PCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShz
dGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKLSAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW0oc3RhdGVDaGFuZ2VzLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSk7Ci0gICAg
c3RhdGVDaGFuZ2VzLm1fY2hhbmdlRmxhZ3MgPSB7IH07Ci0gICAgY3VycmVudFN0YXRlKCkubGFz
dERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOwotfQotCi1jb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OnN0YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY3Vy
cmVudFN0YXRlKCkuc3RhdGVDaGFuZ2UubV9zdGF0ZTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZGlk
VXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBjdXJyZW50U3RhdGUo
KS5zdGF0ZUNoYW5nZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIHJlY29yZFNldExpbmVDYXAo
bGluZUNhcCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIHJlY29yZFNldExpbmVEYXNo
KGRhc2hBcnJheSwgZGFzaE9mZnNldCk7Ci19CitSZWNvcmRlcjo6flJlY29yZGVyKCkgPSBkZWZh
dWx0OwogCi12b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3Zv
aWQgUmVjb3JkZXI6OnNhdmVJbXBsKCkKIHsKLSAgICByZWNvcmRTZXRMaW5lSm9pbihsaW5lSm9p
bik7CisgICAgcmVjb3JkU2F2ZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0
KGZsb2F0IG1pdGVyTGltaXQpCit2b2lkIFJlY29yZGVyOjpyZXN0b3JlSW1wbCgpCiB7Ci0gICAg
cmVjb3JkU2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICByZWNvcmRSZXN0b3JlKCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmls
dGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdGF0ZUNo
YW5nZXMoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIGVmZmVjdCA6IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVJbWFnZSkpIHsKLSAgICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1h
Z2U+KGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFn
ZS5zb3VyY2VJbWFnZSgpKSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rmls
dGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJl
c3VsdHMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFzb3VyY2VJbWFnZSkgewotICAgICAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihu
dWxscHRyLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5n
ZXMoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGlmICghcmVjb3JkUmVzb3VyY2VV
c2UoKnNvdXJjZUltYWdlKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0
cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKHN0YXRlKCkuaGFzT25seVByaW1p
dGl2ZUNoYW5nZXMoKSkgeworICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoKSkKKyAgICAgICAgICAgIHJl
Y29yZFNldElubGluZUZpbGxDb2xvcigqZmlsbENvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVzKCkp
OwogCi0gICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJj
ZUltYWdlUmVjdCwgZmlsdGVyKTsKLX0KKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkKKyAgICAg
ICAgICAgIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKCpzdHJva2VDb2xvcigpLnRyeUdldEFz
U1JHQkFCeXRlcygpKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBtX2RyYXdH
bHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBj
b3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNt
b290aGluZ01vZGUpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsK
LSAgICByZWNvcmRSZXNvdXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7Ci0gICAgcmVj
b3JkRHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3Is
IHNtb290aGluZ01vZGUpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBpZiAoIXJl
Y29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OworICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSkKKyAgICAgICAgICAgIHJlY29yZFNldFN0
cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICByZWNvcmREcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7Ci0gICAgcmVjb3JkRHJhd05hdGl2
ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCi17Ci0gICAgcmVjb3JkRHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0
aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7Ci0gICAgcmVjb3JkRHJhd1Bh
dHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12
b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLQotICAg
IGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OkZpbGxCcnVzaCkpIHsKKyAgICAgICAgaWYgKGF1dG8gcGF0dGVybiA9IGZpbGxQ
YXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1h
Z2UoKSk7CisgICAgfQorICAgIAorICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaCkpIHsKKyAgICAgICAgaWYg
KGF1dG8gcGF0dGVybiA9IHN0cm9rZVBhdHRlcm4oKSkKKyAgICAgICAgICAgIHJlY29yZFJlc291
cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKICAgICB9CiAKLSAgICByZWNvcmREcmF3UGF0
dGVybihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19
Ci0KLXZvaWQgUmVjb3JkZXI6OnNhdmUoKQotewotICAgIHJlY29yZFNhdmUoKTsKLSAgICBtX3N0
YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVTdGFjay5sYXN0KCkuY2xvbmVGb3JTYXZlKCkpOwotfQot
Ci12b2lkIFJlY29yZGVyOjpyZXN0b3JlKCkKLXsKLSAgICBpZiAoIW1fc3RhdGVTdGFjay5zaXpl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0g
ICAgcmVjb3JkUmVzdG9yZSgpOwotfQotCi12b2lkIFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSkKLXsKLSAgICBjdXJyZW50U3RhdGUoKS50cmFuc2xhdGUoeCwgeSk7Ci0gICAg
cmVjb3JkVHJhbnNsYXRlKHgsIHkpOwotfQotCi12b2lkIFJlY29yZGVyOjpyb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpCi17Ci0gICAgY3VycmVudFN0YXRlKCkucm90YXRlKGFuZ2xlSW5SYWRp
YW5zKTsKLSAgICByZWNvcmRSb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIFJlY29y
ZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgY3VycmVudFN0YXRlKCku
c2NhbGUoc2l6ZSk7Ci0gICAgcmVjb3JkU2NhbGUoc2l6ZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6
OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAo
dHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3VycmVudFN0
YXRlKCkuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgcmVjb3JkQ29uY2F0ZW5hdGVDVE0odHJh
bnNmb3JtKTsKKyAgICByZWNvcmRTZXRTdGF0ZShzdGF0ZSgpKTsKIH0KIAotdm9pZCBSZWNvcmRl
cjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQorI2lmIFVTRShDRykK
K3ZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgY3VycmVudFN0YXRl
KCkuc2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgcmVjb3JkU2V0Q1RNKHRyYW5zZm9ybSk7CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKTsKIH0K
IAotQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNs
dWRlRGV2aWNlU2NhbGUpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkK
IHsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpOwogfQorI2VuZGlmCiAKIHZvaWQgUmVj
b3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwog
ICAgIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgbV9zdGF0ZVN0
YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIo
KSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIEdyYXBoaWNzQ29udGV4dDo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHJl
Y29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3Qo
KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmREcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotfQot
Ci12b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZERyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3TGluZXNGb3JUZXh0KEZsb2F0UG9pbnQoKSwgdG9G
bG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVz
KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmNsaXBJbXBsKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZERyYXdFbGxpcHNlKHJlY3QpOworICAgIHJlY29yZENsaXAocmVjdCk7
CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIFJl
Y29yZGVyOjpjbGlwUGF0aEltcGwoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUp
CiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRE
cmF3UGF0aChwYXRoKTsKKyAgICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6Y2xp
cE91dEltcGwoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdl
SXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lk
dGgsIG9mZnNldCwgY29sb3IpOworICAgIHJlY29yZENsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQg
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29y
ZGVyOjpjbGlwT3V0SW1wbChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3Rz
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgcmVjb3JkQ2xpcE91dFRvUGF0aChwYXRoKTsK
IH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKK3ZvaWQgUmVjb3JkZXI6OmNs
aXBUb0ltYWdlQnVmZmVySW1wbChJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmVj
b3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpOworICAgIHJlY29yZENsaXBUb0ltYWdlQnVmZmVy
KGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3Qg
Q29sb3ImKQordm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
cmVjb3JkQ2xlYXJSZWN0KHJlY3QpOwogfQotI2VuZGlmCiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJl
Y3QocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxsUmVj
dFdpdGhDb2xvcihyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQordm9pZCBSZWNvcmRlcjo6
ZmlsbFJlY3RJbXBsKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQog
ewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CiAgICAgcmVjb3JkRmls
bFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVyOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29yZGVyOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkRmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xv
cik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2
b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAg
cmVjb3JkRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwg
cm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShy
ZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJlY29yZEZpbGxFbGxpcHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHBhdGgu
aGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQwMiwyMSArMjA1LDIxIEBAIHZvaWQgUmVj
b3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkRmlsbFBhdGgocGF0
aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKTsKLSAgICByZWNvcmRGaWxsRWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZFN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkU3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkU3Ryb2tlRWxsaXBzZShyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ry
b2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYg
KHBhdGguaGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQzMyw3MyArMjM2LDExMSBAQCB2
b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkU3Ry
b2tlUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFN0cm9rZUVsbGlwc2UocmVjdCk7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25l
c3MpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmRDbGVhclJlY3QocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZWNvcmREcmF3TGluZShwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0Uo
Q0cpCi12b2lkIFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3RWxsaXBzZShyZWN0KTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVyOjpkcmF3
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdGgocGF0aCk7CiB9Ci0jZW5kaWYKIAotdm9pZCBS
ZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVy
c2VjdChjdXJyZW50U3RhdGUoKS5jdG0ubWFwUmVjdChyZWN0KSk7Ci0gICAgcmVjb3JkQ2xpcChy
ZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdGb2N1c1JpbmdQ
YXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xp
cE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJlY29yZENsaXBPdXQocmVjdCk7CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMs
IHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25z
dCBQYXRoJiBwYXRoKQorI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKIHsKLSAgICBy
ZWNvcmRDbGlwT3V0VG9QYXRoKHBhdGgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxl
KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5jbGlw
Qm91bmRzLmludGVyc2VjdChjdXJyZW50U3RhdGUoKS5jdG0ubWFwUmVjdChwYXRoLmZhc3RCb3Vu
ZGluZ1JlY3QoKSkpOwotICAgIHJlY29yZENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQorI2VuZGlmCiAKLUludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3Vu
ZHMoKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVySW1wbChJbWFnZUJ1ZmZl
ciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
aWYgKGF1dG8gaW52ZXJzZSA9IGN1cnJlbnRTdGF0ZSgpLmN0bS5pbnZlcnNlKCkpCi0gICAgICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGludmVyc2UtPm1hcFJlY3QoY3VycmVudFN0YXRlKCku
Y2xpcEJvdW5kcykpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKQor
ICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlckltcGwoaW1hZ2VCdWZmZXIs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBlbHNlCisgICAgICAgIHJlY29yZERy
YXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwor
fQogCi0gICAgLy8gSWYgdGhlIENUTSBpcyBub3QgaW52ZXJ0aWJsZSwgcmV0dXJuIHRoZSBvcmln
aW5hbCByZWN0LgotICAgIC8vIFRoaXMgbWF0Y2hlcyBDR1JlY3RBcHBseUludmVyc2VBZmZpbmVU
cmFuc2Zvcm0gYmVoYXZpb3IuCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoY3VycmVudFN0
YXRlKCkuY2xpcEJvdW5kcyk7Cit2b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
ckltcGwoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCit7CisgICAg
Zm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXIuZWZmZWN0c09mVHlwZShGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFSW1hZ2UpKSB7CisgICAgICAgIGF1dG8mIGZlSW1hZ2UgPSBkb3duY2FzdDxGRUltYWdl
PihlZmZlY3QuZ2V0KCkpOworICAgICAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGZlSW1hZ2Uu
c291cmNlSW1hZ2UoKSkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXJJbXBsKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwg
cmVzdWx0cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIXNvdXJjZUltYWdlKSB7CisgICAgICAgIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KG51bGxwdHIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoKnNvdXJjZUltYWdlKSkgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVySW1wbChzb3VyY2VJbWFn
ZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNv
dXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpOwotICAgIHJlY29yZENsaXBU
b0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCk7CisgICAgcmVjb3JkUmVzb3VyY2VV
c2UoaW1hZ2UpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd05hdGl2
ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBSZWNv
cmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgc3Rk
OjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJh
d1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2Rl
LCByZW5kZXJpbmdNZXRob2QudmFsdWVfb3IoUmVuZGVyaW5nTWV0aG9kOjpEaXNwbGF5TGlzdCkp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1N5c3RlbUltYWdlKHN5
c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgcmVjb3JkUmVzb3Vy
Y2VVc2UoaW1hZ2UpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1Bh
dHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCit2
b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybkltcGwoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQoreworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKQor
ICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuSW1wbChpbWFnZUJ1ZmZlciwgZGVz
dFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cyk7CisgICAgZWxzZQorICAgICAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8p
CkBAIC01MDksNzIgKzM1MCw2MCBAQCB2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdAogICAgICAgICBH
cmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBBU1NFUlQocGxheWVyLmlkZW50aWZpZXIoKSk7
Ci0gICAgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworCisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEocGxh
eWVyLmlkZW50aWZpZXIoKSwgZGVzdGluYXRpb24pOwogfQogI2VuZGlmCiAKLXZvaWQgUmVjb3Jk
ZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lk
IFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIC8vIFdlIG1vZGlmeSB0aGUgc3RhdGUgZGlyZWN0
bHkgaGVyZSBpbnN0ZWFkIG9mIGNhbGxpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZSgpCi0gICAg
Ly8gYmVjYXVzZSB0aGUgcmVjb3JkZWQgaXRlbSB3aWxsIHNjYWxlKCkgd2hlbiByZXBsYXllZC4K
LSAgICBjdXJyZW50U3RhdGUoKS5zY2FsZSh7IGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2Fs
ZUZhY3RvciB9KTsKLQotICAgIC8vIEZJWE1FOiB0aGlzIGNoYW5nZXMgdGhlIGJhc2VDVE0sIHdo
aWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNhY2hlZCBleHRlbnRzLgotICAgIC8vIEFz
c2VydCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgZWFybHkgb24/Ci0gICAgcmVjb3JkQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICBtX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiB9CiAKLUZsb2F0
UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBo
c0FuZENhY2hlRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50
LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3Ro
aW5nTW9kZSkKIHsKLSAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rl
dmljZVBpeGVscygpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIERpc3BsYXlMaXN0OjpSZWNv
cmRlci4iKTsKLSAgICByZXR1cm4gcmVjdDsKKyAgICByZWNvcmRSZXNvdXJjZVVzZShjb25zdF9j
YXN0PEZvbnQmPihmb250KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRE
cmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21v
b3RoaW5nTW9kZSk7CiB9CiAKLWNvbnN0IFJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVy
OjpjdXJyZW50U3RhdGUoKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCiB7
Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJldHVybiBtX3N0YXRlU3Rh
Y2subGFzdCgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0xpbmVz
Rm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7
CiB9CiAKLVJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpjdXJyZW50U3RhdGUoKQor
dm9pZCBSZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIEFTU0VSVChtX3N0
YXRlU3RhY2suc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
cmVjdCwgc3R5bGUpOwogfQogCi1jb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0o
KSBjb25zdAorUmVmUHRyPEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2Rl
PiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5n
TWV0aG9kKSBjb25zdAogewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07CisgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QudmFsdWVfb3Io
UmVuZGVyaW5nTWV0aG9kOjpEaXNwbGF5TGlzdCkpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250
ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIGN0bS50cmFuc2xh
dGUoeCwgeSk7Ci19CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKGZsb2F0
IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIGRvdWJsZSBhbmdsZUluRGVncmVlcyA9IHJhZDJkZWco
c3RhdGljX2Nhc3Q8ZG91YmxlPihhbmdsZUluUmFkaWFucykpOwotICAgIGN0bS5yb3RhdGUoYW5n
bGVJbkRlZ3JlZXMpOwotICAgIAotICAgIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbjsKLSAgICBy
b3RhdGlvbi5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOwotfQogCi12b2lkIFJlY29yZGVyOjpDb250
ZXh0U3RhdGU6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBjdG0uc2NhbGUo
c2l6ZSk7Ci19CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgbWF0cml4KQordm9pZCBSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICBjdG0gPSBtYXRyaXg7CisgICAg
Ly8gV2UgbW9kaWZ5IHRoZSBzdGF0ZSBkaXJlY3RseSBoZXJlIGluc3RlYWQgb2YgY2FsbGluZyBH
cmFwaGljc0NvbnRleHQ6OnNjYWxlKCkKKyAgICAvLyBiZWNhdXNlIHRoZSByZWNvcmRlZCBpdGVt
IHdpbGwgc2NhbGUoKSB3aGVuIHJlcGxheWVkLgorICAgIHNjYWxlKHsgZGV2aWNlU2NhbGVGYWN0
b3IsIGRldmljZVNjYWxlRmFjdG9yIH0pOworCisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0
aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVu
dHMuCisgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAgICBy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBtYXRyaXgpCitGbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKIHsKLSAgICBj
dG0gKj0gbWF0cml4OworICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRv
RGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlzcGxheUxpc3Q6OlJl
Y29yZGVyLiIpOworICAgIHJldHVybiByZWN0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5
TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggODQ1ZWMwMDc3
MmVkMmM1NGExZTZjYjI2YjIxNTFkYWJhYTZlYzA3NS4uNGI1MmFkNzhjMzdiMjA2YzcwNDI4OGQ1
ODdhYjU5YmNiZTFjZjY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
CkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogI2luY2x1
ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiSW5s
aW5lUGF0aERhdGEuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KQEAgLTUxLDcgKzUwLDcgQEAgY2xhc3MgUmVjb3JkZXIgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVj
b3JkZXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5
cGhzOjpZZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEZsb2F0UmVjdCYg
aW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBo
c1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRl
Y29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5S
ZWNvcmRlcigpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9
IDA7CkBAIC02MSw0NyArNjAsMzUgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRTYXZlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRSZXN0b3JlKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JB
PHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldElubGluZVN0cm9rZUNv
bG9yKFNSR0JBPHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0cm9r
ZVRoaWNrbmVzcyhmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVDYXAoTGluZUNh
cCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExp
bmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldE1pdGVyTGlt
aXQoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJikgPSAwOworCisjaWYgVVNFKENHKQorICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseVN0
cm9rZVBhdHRlcm4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRl
cm4oKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXAoY29uc3QgRmxv
YXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91dChjb25zdCBG
bG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TmF0aXZl
SW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFuc3Bh
cmVuY3lMYXllcigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZUxpbmVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxs
UmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0Jiwg
R3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25zdCBBcmNEYXRhJikgPSAwOwpAQCAtMTA5LDExICs5
NiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxCZXppZXJDdXJ2
ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgPSAwOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lk
IHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3QgQXJjRGF0YSYpID0gMDsKQEAgLTEy
MSwxMTYgKzEwNyw4MCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9r
ZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpID0gMDsKICNlbmRpZgogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotI2lmIFVT
RShDRykKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRE
cmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgPSAwOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbikgPSAwOwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxv
Y2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSA9IDA7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmKSA9IDA7CiAgICAg
dmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKEltYWdlQnVmZmVyJikgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShjb25zdCBTb3VyY2VJbWFnZSYpID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoRm9udCYpID0gMDsKIAotICAgIHN0cnVj
dCBDb250ZXh0U3RhdGUgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotICAgICAgICBG
bG9hdFJlY3QgY2xpcEJvdW5kczsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ug
c3RhdGVDaGFuZ2U7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIGxhc3REcmF3aW5nU3Rh
dGU7Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYg
Y2xpcCkKLSAgICAgICAgICAgIDogY3RtKHRyYW5zZm9ybSkKLSAgICAgICAgICAgICwgY2xpcEJv
dW5kcyhjbGlwKQotICAgICAgICAgICAgLCBsYXN0RHJhd2luZ1N0YXRlKHN0YXRlKQotICAgICAg
ICB7Ci0gICAgICAgIH0KLQotICAgICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JTYXZlKCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgQ29udGV4dFN0YXRlIHN0YXRlKGxhc3REcmF3aW5n
U3RhdGUsIGN0bSwgY2xpcEJvdW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5zdGF0ZUNoYW5nZSA9
IHN0YXRlQ2hhbmdlOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQ29udGV4dFN0YXRlIGNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBhdXRvIHN0YXRlID0gY2xvbmVGb3JTYXZlKCk7Ci0gICAgICAg
ICAgICBzdGF0ZS5sYXN0RHJhd2luZ1N0YXRlLmFscGhhID0gMTsKLSAgICAgICAgICAgIHJldHVy
biBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpOwotICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7Ci0gICAg
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgICAgIHZvaWQgY29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgICAgICB2b2lkIHNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKLSAgICB9OwotCi0gICAgY29uc3QgVmVjdG9yPENvbnRleHRTdGF0ZSwg
ND4mIHN0YXRlU3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlU3RhY2s7IH0KLQotICAgIGNv
bnN0IENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCkgY29uc3Q7Ci0gICAgQ29udGV4dFN0YXRl
JiBjdXJyZW50U3RhdGUoKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmlu
Z01vZGU+LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IG92ZXJyaWRlOwor
ICAgIAorCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpID0gMDsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAorICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2F2ZUltcGwoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlc3RvcmVJbXBsKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0
YXRlQ2hhbmdlcygpIGZpbmFsOwogI2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNv
bnRleHQoYm9vbCkgZmluYWwgeyB9Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0
KGJvb2wpIGZpbmFsIHsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdHJva2VQYXR0
ZXJuKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
ZmluYWw7CiAjZW5kaWYKIAotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUoKSBjb25zdCBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGNsaXBJbXBsKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xpcFBhdGhJbXBsKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2Rk
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXRJbXBsKGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dEltcGwoY29uc3Qg
UGF0aCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXJJ
bXBsKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFs
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxv
YXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lSm9p
bihMaW5lSm9pbikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNaXRlckxpbWl0
KGZsb2F0KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJiwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0
SW1wbChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmls
bFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0KLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9rZVBh
dHRlcm4oKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
KSBmaW5hbDsKLSNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChj
b25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdO
YXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25l
c3MpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0
cm9rZVN0eWxlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7CiAKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwpAQCAtMjQxLDQwICsxOTEsMjYg
QEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcs
IGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2F2ZSgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3Jt
IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5j
bHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVySW1w
bChJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVy
KiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYs
IEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3lz
dGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybkltcGwoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwogI2lmIEVOQUJMRShW
SURFTykKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2VuZGlmCiAKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSkgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKKworICAgIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmlu
YWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7CiAK
LSAgICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwotCi0gICAgVmVjdG9yPENvbnRleHRTdGF0ZSwgND4g
bV9zdGF0ZVN0YWNrOwogICAgIERyYXdHbHlwaHNSZWNvcmRlciBtX2RyYXdHbHlwaHNSZWNvcmRl
cjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3Bw
CmluZGV4IDFmZGM2YmE1NmJmZGIyNjM2ZWZiMzQ2MmFkYTJhOTkwZDMzODk5NDUuLjVhNmFlODRm
ZjQ1NGY0YWNkMzg1MjUxMDk2Yjg1NzNhZGIzZDFlMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcApAQCAtNDIsMTggKzQyLDEzIEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlckltcGw6OlJl
Y29yZGVySW1wbChEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJh
d0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBSZWNvcmRlcihzdGF0ZSwgaW5p
dGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKK1JlY29yZGVySW1w
bDo6UmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgRmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5
cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMp
CisgICAgOiBSZWNvcmRlcihpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3
R2x5cGhzKQogICAgICwgbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKIHsKICAgICBMT0dfV0lU
SF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVjb3JkaW5nIHdpdGggY2xpcCAi
IDw8IGluaXRpYWxDbGlwKTsKIH0KIAotUmVjb3JkZXJJbXBsOjp+UmVjb3JkZXJJbXBsKCkKLXsK
LSAgICBBU1NFUlQoc3RhdGVTdGFjaygpLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywg
aXQgaW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgotfQotCiB2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkU2F2ZSgpCiB7CiAgICAgYXBwZW5kPFNhdmU+KCk7CkBAIC02NCwzMSArNTks
NiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUmVzdG9yZSgpCiAgICAgYXBwZW5kPFJlc3Rv
cmU+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkKLXsKLSAgICBhcHBlbmQ8VHJhbnNsYXRlPih4LCB5KTsKLX0KLQotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBhcHBlbmQ8Um90YXRl
PihhbmdsZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTY2FsZShjb25zdCBGbG9h
dFNpemUmIHNjYWxlKQotewotICAgIGFwcGVuZDxTY2FsZT4oc2NhbGUpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQotewotICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKLXsKLSAgICBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KHRyYW5zZm9ybSk7Ci19Ci0KIHZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4gaW5s
aW5lQ29sb3IpCiB7CiAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oaW5saW5lQ29sb3Ip
OwpAQCAtMTA0LDkzICs3NCwyMiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNz
Pih0aGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKLXsKLSAgICBhcHBlbmQ8U2V0U3RhdGU+KHN0YXRl
LCBjaGFuZ2VGbGFncyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lQ2Fw
KExpbmVDYXAgbGluZUNhcCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgYXBwZW5kPFNldExpbmVDYXA+
KGxpbmVDYXApOworICAgIGFwcGVuZDxTZXRTdGF0ZT4oc3RhdGUpOwogfQogCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBhcnJheSwgZmxvYXQg
ZGFzaE9mZnNldCkKLXsKLSAgICBhcHBlbmQ8U2V0TGluZURhc2g+KGFycmF5LCBkYXNoT2Zmc2V0
KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGpv
aW4pCi17Ci0gICAgYXBwZW5kPFNldExpbmVKb2luPihqb2luKTsKLX0KLQotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgYXBwZW5kPFNl
dE1pdGVyTGltaXQ+KGxpbWl0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFy
U2hhZG93KCkKLXsKLSAgICBhcHBlbmQ8Q2xlYXJTaGFkb3c+KCk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgYXBw
ZW5kPENsaXA+KGNsaXBSZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBhcHBlbmQ8Q2xpcE91dD4oY2xp
cFJlY3QpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKLXsKLSAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGFw
cGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCi17Ci0gICAgYXBwZW5k
PENsaXBQYXRoPihwYXRoLCBydWxlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChz
b3VyY2VJbWFnZSkKLSAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKTsKLSAgICBhcHBlbmQ8RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI+
KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKLX0KLQotdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRT
bW9vdGhpbmdNb2RlIG1vZGUpCi17Ci0gICAgYXBwZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBo
cywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZDxEcmF3SW1hZ2VC
dWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi17Ci0gICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2VJZGVudGlmaWVyLCBpbWFn
ZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3U3lzdGVt
SW1hZ2U+KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIGFwcGVuZDxBcHBseVN0
cm9rZVBhdHRlcm4+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVy
bihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kPERy
YXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+
KCk7CiB9CisjZW5kaWYgLy8gVVNFKENHKQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewpAQCAtMjAyLDQ0ICsxMDEsMzQg
QEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBh
cHBlbmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsK
LSAgICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGxpbmVXaWR0aCk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQy
KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwKGNvbnN0IEZs
b2F0UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KGJsb2Nr
TG9jYXRpb24sIGxvY2FsQW5jaG9yLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJs
ZUxpbmVzKTsKKyAgICBhcHBlbmQ8Q2xpcD4oY2xpcFJlY3QpOwogfQogCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQogewot
ICAgIGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihyZWN0LCBzdHlsZSk7CisgICAg
YXBwZW5kPENsaXBQYXRoPihwYXRoLCBydWxlKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgYXBwZW5k
PERyYXdFbGxpcHNlPihyZWN0KTsKKyAgICBhcHBlbmQ8Q2xpcE91dD4oY2xpcFJlY3QpOwogfQog
Ci12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7
Ci0gICAgYXBwZW5kPERyYXdQYXRoPihwYXRoKTsKKyAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4o
cGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsK
LSAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1BhdGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KTsKKyAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKTsKKyAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI1NywyMyArMTQ2
LDIyIEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBnCiAgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdy
YWRpZW50PihyZWN0LCBncmFkaWVudCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRG
aWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KHJl
Y3QsIGNvbG9yLCBvcCwgbW9kZSk7CisgICAgYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwg
Y29sb3IpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2Rl
IG1vZGUpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJl
Y3QsIGNvbG9yLCBtb2RlKTsKKyAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJl
Y3QsIHJvdW5kZWRSZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IGFwcGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9y
KTsKKyAgICBhcHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwogfQogCiAjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCi0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsTGluZShjb25zdCBM
aW5lRGF0YSYgbGluZSkKIHsKICAgICBhcHBlbmQ8RmlsbExpbmU+KGxpbmUpOwpAQCAtMjkzLDcg
KzE4MSw2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3Qg
QmV6aWVyQ3VydmVEYXRhJiBjdXJ2ZSkKIHsKICAgICBhcHBlbmQ8RmlsbEJlemllckN1cnZlPihj
dXJ2ZSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zMDEsMjUg
KzE4OCwxNyBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKICAgICBhcHBlbmQ8RmlsbFBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGFwcGVu
ZDxGaWxsRWxsaXBzZT4ocmVjdCk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsK
LSAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAg
ICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KLSNlbmRpZiAv
LyBFTkFCTEUoVklERU8pCiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPFN0
cm9rZVJlY3Q+KHJlY3QsIHdpZHRoKTsKKyAgICBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7
CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmIGxpbmUpCiB7CiAgICAgYXBwZW5kPFN0
cm9rZUxpbmU+KGxpbmUpOwpAQCAtMzM5LDcgKzIxOCw2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewog
ICAgIGFwcGVuZDxTdHJva2VCZXppZXJDdXJ2ZT4oY3VydmUpOwogfQotCiAjZW5kaWYgLy8gRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNDcsMzMgKzIyNSw4NCBAQCB2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxTdHJv
a2VQYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAg
IGFwcGVuZDxTdHJva2VFbGxpcHNlPihyZWN0KTsKKyAgICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3Qs
IGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQog
ewotICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOworICAgIGFwcGVuZDxEcmF3TGluZT4ocG9p
bnQxLCBwb2ludDIpOwogfQogCi0jaWYgVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhcHBlbmQ8RHJhd0Vs
bGlwc2U+KHJlY3QpOworfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQ
YXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBw
YXRoKQogewotICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+KCk7CisgICAgYXBwZW5kPERy
YXdQYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBh
dHRlcm4oKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4oKTsKKyAgICBhcHBlbmQ8RHJhd0Zv
Y3VzUmluZ1BhdGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotI2VuZGlmIC8v
IFVTRShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCit7CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVj
dHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKK30KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBp
bWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9y
PihzY2FsZUZhY3Rvcik7CisgICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2VJZGVudGlm
aWVyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIGFwcGVuZDxEcmF3
U3lzdGVtSW1hZ2U+KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworfQorCit2b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZl
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhcHBlbmQ8RHJhd0lt
YWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgc3RkOjpv
cHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7CisgICAgaWYg
KHNvdXJjZUltYWdlKQorICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcigpOworICAgIGFwcGVuZDxEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cj4oV1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworfQorCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGFwcGVuZDxEcmF3UGF0dGVybj4o
aW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRp
ZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBhcHBlbmQ8UGFpbnRG
cmFtZUZvck1lZGlhPihpZGVudGlmaWVyLCBkZXN0aW5hdGlvbik7Cit9CisjZW5kaWYKKwordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRT
bW9vdGhpbmdNb2RlIG1vZGUpCit7CisgICAgYXBwZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBo
cywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzKQoreworICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihGbG9hdFBv
aW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBk
b3VibGVMaW5lcyk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUmIHN0eWxlKQoreworICAgIGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
PihyZWN0LCBzdHlsZSk7CiB9CiAKIGJvb2wgUmVjb3JkZXJJbXBsOjpyZWNvcmRSZXNvdXJjZVVz
ZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UpCkBAIC00MDUsNiArMzM0LDE1IEBAIGJvb2wgUmVj
b3JkZXJJbXBsOjpyZWNvcmRSZXNvdXJjZVVzZShGb250JiBmb250KQogICAgIHJldHVybiB0cnVl
OwogfQogCisKKworCisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQoreworICAgIGFwcGVuZDxBcHBseURldmljZVNjYWxl
RmFjdG9yPihzY2FsZUZhY3Rvcik7Cit9CisKIC8vIEZJWE1FOiBzaGFyZSB3aXRoIFNoYWRvd0Rh
dGEKIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdFeHRlbnQoZmxvYXQgYmx1clJh
ZGl1cykKIHsKQEAgLTQxNSwyMiArMzUzLDkgQEAgc3RhdGljIGlubGluZSBmbG9hdCBzaGFkb3dQ
YWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQogICAgIHJldHVybiBjZWlsZihibHVyUmFk
aXVzICogcmFkaXVzRXh0ZW50TXVsdGlwbGllcik7CiB9CiAKLUZsb2F0UmVjdCBSZWNvcmRlcklt
cGw6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CitG
bG9hdFJlY3QgUmVjb3JkZXJJbXBsOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRS
ZWN0JikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgYm91bmRzID0gcmVjdDsKLSAgICBhdXRvJiBz
dGF0ZSA9IGN1cnJlbnRTdGF0ZSgpOwotCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAg
ICBmbG9hdCBzaGFkb3dSYWRpdXM7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdl
dFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Ci0gICAg
ICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7Ci0gICAgICAgIHNoYWRvd0V4dGVu
dC5tb3ZlKHNoYWRvd09mZnNldCk7Ci0gICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRv
d1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOwotICAgICAgICBib3VuZHMudW5pdGUoc2hh
ZG93RXh0ZW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHN0YXRlLmNsaXBC
b3VuZHMsIHN0YXRlLmN0bS5tYXBSZWN0KGJvdW5kcykpOworICAgIHJldHVybiB7IH07CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVySW1wbC5oCmluZGV4IDY0MjI2NWYwOTgwMjJjZjJiMDVmMTgwYzE3NGZhMDM0NjJm
MmRkNDAuLjZkZTZhZWRmZmNiMTdkYjJkMDgxYjQyYzFkZTZiYzMyOWEzOGJmNDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCkBAIC0zNSw5ICszNSw4IEBA
IGNsYXNzIFJlY29yZGVySW1wbCA6IHB1YmxpYyBSZWNvcmRlciB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXJJbXBsKTsKIHB1
YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmLCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3
R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXJJbXBsKCk7Ci0KKyAgICBXRUJD
T1JFX0VYUE9SVCBSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmLCBjb25zdCBGbG9hdFJlY3QmIGlu
aXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0sIERyYXdH
bHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVy
OjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CisgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0KIAogICAgIHZvaWQgY29u
dmVydFRvTHVtaW5hbmNlTWFzaygpIGZpbmFsIHsgfQpAQCAtNDcsNDcgKzQ2LDM1IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRTYXZlKCkgZmluYWw7CiAgICAgdm9pZCByZWNv
cmRSZXN0b3JlKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKwogICAgIHZv
aWQgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2
b2lkIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAg
ICB2b2lkIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVD
YXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNo
QXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVK
b2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSBmaW5hbDsKKyAgICB2b2lkIHJl
Y29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgZmluYWw7CisKKyNpZiBV
U0UoQ0cpCisgICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2
b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBy
ZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKICAgICB2b2lkIHJlY29yZENsaXAoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgRmlsdGVyJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUm
IGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
Q2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGll
bnQoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZp
bGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgZmlu
YWw7CisgICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNv
cmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbEFy
Yyhjb25zdCBBcmNEYXRhJikgZmluYWw7CkBAIC05NSwxMSArODIsMTAgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSBmaW5h
bDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0jaWYg
RU5BQkxFKFZJREVPKQotICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKLSAgICB2
b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworCisg
ICAgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCBy
ZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRT
dHJva2VBcmMoY29uc3QgQXJjRGF0YSYpIGZpbmFsOwpAQCAtMTA3LDEzICs5MywyOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVE
YXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBm
aW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1Bh
dGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikg
ZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFs
OworCisgICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcios
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5hbDsKKyAgICB2
b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJh
d1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pIGZpbmFsOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVG
b3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24pIGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlJikgZmluYWw7CiAKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdl
JikgZmluYWw7CiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShJbWFnZUJ1ZmZlciYpIGZpbmFs
OwpAQCAtMTM5LDYgKzE0MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2
b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCiAgICAgRmxv
YXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAog
ICAgIERpc3BsYXlMaXN0JiBtX2Rpc3BsYXlMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuY3BwCmluZGV4IDhmZjE5ZDAwMzU0Y2RiZWRlM2E1YmExYWY3NThjZmYwMjNh
MjVhMjIuLjY2ZmM5ZDg4MmE0ZDNmN2RlOGU4OTEyYTFmMzBhZjE5OGQwMzUyODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTk3LDEwICs5NywxMCBAQCBp
bmxpbmUgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBh
cHBseVNldFN0YXRlSXRlbShHcmFwaAogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH07CiAKLSAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdl
KHNldFN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkp
CisgICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRT
dGF0ZUl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm4g
KmltYWdlSWRlbnRpZmllcjsKIAotICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBh
dHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5maWxsUGF0
dGVybi5nZXQoKSkpCisgICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRp
bGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAg
ICAgICByZXR1cm4gKmltYWdlSWRlbnRpZmllcjsKIAogICAgIHNldFN0YXRlSXRlbS5hcHBseShj
b250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApp
bmRleCBkMDljMTM3M2VhOWFhYWY0YTE4NTEzNmVlODg1M2Q3ODhmYzQxNzhkLi5kNzk3MzE0ZDI0
OTA2NzY4YjhkNzU3YjdjNGRiY2U1Mzc4MWZhM2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0ds
eXBoc1JlY29yZGVySGFyZkJ1enouY3BwCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFw
aGljc0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9t
Q29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdH
bHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVjb25z
dHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCisgICAgOiBtX2Rlc3RpbmF0
aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01v
ZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9u
dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2Rl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNw
cAppbmRleCA1ZDY2ZWI3MmFkMTNjMjRkYWMwOTVhOTQ1ZjYxNGE2ZjU1MjIyNDkyLi5jODMxNDgw
MjI3YjEwZjUxYzRkMzQ0ZWQ2OTVhMTNmNDA2Y2I2OGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVy
V2luLmNwcApAQCAtMzIsMTQgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25l
ciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBt
X293bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocywg
RGVyaXZlRm9udEZyb21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQob3duZXIp
CiB7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBz
dGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3du
ZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9kZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRl
eHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggNjBjNWE4Y2Q2ZDUwZTkwMGU0YzFlYmQxZmQ4ZTJk
ZGFlOGI2ZGI5ZC4uOGI1NDhjZjFhYjVhYWJhNjI3NmU4YmI2YTgzODNiZjFkN2NkODI3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZS5jcHAKQEAgLTI5MywxMiArMjkzLDEyIEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2U6OmRyYXdCb3hlcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgRmxvYXRS
ZWN0IGZyYW1lUmVjdCgyLCAyLCBzaXplLndpZHRoKCkgLSAzLCBzaXplLmhlaWdodCgpIC0gMyk7
CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOwogICAgIGNvbnRleHQu
c2V0U3Ryb2tlVGhpY2tuZXNzKDMpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoV2lk
dGhzLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgbV9kYXNoV2lkdGhzLCAwIH0pOwog
ICAgIG1fcGF0aC5hZGRSZWN0KGZyYW1lUmVjdCk7CiAgICAgbV9wYXRoLmNsb3NlU3VicGF0aCgp
OwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChtX3BhdGgpOwogCi0gICAgY29udGV4dC5zZXRMaW5l
RGFzaChEYXNoQXJyYXkoKSwgMCk7CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IHsgfSwgMCB9
KTsKICAgICBtX3BhdGguY2xlYXIoKTsKICAgICBtX3BhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwg
Ym94VG9wICsgYm94U2l6ZSkpOwogICAgIG1fcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludChzaXpl
LndpZHRoKCksIGJveFRvcCArIGJveFNpemUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAppbmRleCAxYjE4MmExZDM2YjdjZmFh
YTBiMTY5ZDBkOGM4NTQzNWY0M2I3NjdkLi5lODBmMmVlODkxOTM5MTQ0MThlODc4YmYwYTRhMjg0
MGVlNjg5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1
bFBhaW50Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRm
dWxQYWludENoZWNrZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBAIGJvb2wgQ29udGVudGZ1bFBhaW50
Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KEZyYW1lVmlldyYgZnJhbWVWaWV3
KQogICAgIGZyYW1lVmlldy5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5D
b21wb3NpdGluZ0xheWVycyk7CiAgICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRz
KHRydWUpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjaGVja2VyQ29udGV4dChOdWxsR3Jh
cGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRm
dWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjaGVja2VyQ29udGV4dChmcmFtZVZp
ZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOwogICAgIGZy
YW1lVmlldy5wYWludChjaGVja2VyQ29udGV4dCwgZnJhbWVWaWV3LnJlbmRlclZpZXcoKS0+ZG9j
dW1lbnRSZWN0KCkpOwogCiAgICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKG9s
ZEVudGlyZUNvbnRlbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
ZWdhY3lFbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxs
aXBzaXNCb3guY3BwCmluZGV4IGM5YWIyMTc2MTQxZmE3YTMzOWEyMDk3YjNhYmY5NzY1MDc4N2U0
ZjEuLjRiZmY4ZDAwODM5MjUxNGNiZTYyY2E5NWQ0ZTc0M2ZjMTk3ZjAxOWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcApAQCAtNTUsNyArNTUs
NyBAQCB2b2lkIExlZ2FjeUVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGJvb2wgc2V0U2hhZG93ID0gZmFsc2U7
CiAgICAgaWYgKGxpbmVTdHlsZS50ZXh0U2hhZG93KCkpIHsKICAgICAgICAgQ29sb3Igc2hhZG93
Q29sb3IgPSBsaW5lU3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIobGluZVN0eWxlLnRl
eHRTaGFkb3coKS0+Y29sb3IoKSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KExheW91dFNp
emUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgpLnZhbHVlKCksIGxpbmVTdHlsZS50ZXh0U2hh
ZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+cmFkaXVzKCkudmFs
dWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBMYXlv
dXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPngoKS52YWx1ZSgpLCBsaW5lU3R5bGUudGV4
dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnJhZGl1cygp
LnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKaW5kZXggMjRjODJjOWQ2YmQ0M2Y3NGJhMDVhYjVhYzc2NzkzZDc1ZDE1ZTU3Ny4uOGQ5
N2QyNTcxZTI0NTNkZjE5MjhiZGU2Yzc3Yzc2MzE1ZmJjODgyZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC03MDUsNyArNzA1
LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgYm94U2hhZG93ID0gYm94U2hh
ZG93LT5uZXh0KCk7CiAKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0KGJveFNoYWRvdy0+eCgp
LnZhbHVlKCksIGJveFNoYWRvdy0+eSgpLnZhbHVlKCkpOwotICAgIGNvbnRleHQuc2V0U2hhZG93
KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzdHlsZS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpLCBib3hTaGFkb3ctPmlzV2Vi
a2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNN
b2RlOjpEZWZhdWx0KTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQs
IGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JG
aWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygp
ID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9
KTsKIH0KIAogSW50ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNob29z
ZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgSW1hZ2UmIGlt
YWdlLCBjb25zdCB2b2lkKiBsYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKQEAgLTIwODcs
NyArMjA4Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBh
dGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGF1dG8gbGluZURhc2ggPSBEYXNoQXJyYXk6OmZyb20oZGFzaExlbmd0aCwgZ2Fw
TGVuZ3RoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFzaChXVEZNb3Zl
KGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0
TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVz
ZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTI0NTYsNyArMjQ1Niw3IEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5m
bywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9hdFBvaW50IHNuYXBwZWRTaGFkb3dP
cmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dSZWN0T3JpZ2luLngo
KSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdp
bi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAgICAgICBGbG9hdFNpemUgc25hcHBl
ZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4gLSBwaXhlbFNuYXBwZWRGaWxsUmVj
dC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc25h
cHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dl
YmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVz
TW9kZTo6RGVmYXVsdCk7CisgICAgICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzbmFw
cGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Vi
a2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNN
b2RlOjpEZWZhdWx0IH0pOwogCiAgICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5
IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTU4LDcg
KzI1NTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAgc2hhZG93T2Zm
c2V0IC09IGV4dHJhT2Zmc2V0OwogCiAgICAgICAgICAgICBhdXRvIHNuYXBwZWRTaGFkb3dPZmZz
ZXQgPSByb3VuZFNpemVUb0RldmljZVBpeGVscyhzaGFkb3dPZmZzZXQsIGRldmljZVNjYWxlRmFj
dG9yKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/
IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwor
ICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc25hcHBlZFNoYWRvd09mZnNldCwg
c2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8g
U2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsK
ICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocGl4ZWxTbmFwcGVk
T3V0ZXJSZWN0LCBwaXhlbFNuYXBwZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsKICAgICAgICAgfQog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDNlMzY1
MDVkYzU3ZmRkYjVjOGNiNTgyODkzZmY0MTE3NmRlODcwYmEuLmQ5ZWZiODA5MjQ3NmM2N2YzYmUy
YTY3ZGE0MjkyOWI0MTAzN2E1MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcApAQCAtMjI1OCwxNCArMjI1OCwxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpiZWdpblRy
YW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUAog
I2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAgIGJvb2wgdXNlc0NvbXBvc2l0ZU9w
ZXJhdGlvbiA9IGhhc0JsZW5kTW9kZSgpICYmICEocmVuZGVyZXIoKS5pc0xlZ2FjeVNWR1Jvb3Qo
KSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJWaWV3TGF5ZXIoKSk7CiAgICAgICAg
IGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAgICAgICAgY29udGV4dC5zZXRDb21w
b3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkp
OworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgY29udGV4dC5jb21wb3Np
dGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkgfSk7CiAjZW5kaWYKIAogICAgICAgICBjb250ZXh0
LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIocmVuZGVyZXIoKS5vcGFjaXR5KCkpOwogCiAjaWYgRU5B
QkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVPcGVyYXRpb24p
Ci0gICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0LmNvbXBv
c2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgICAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1v
ZGU6Ok5vcm1hbCB9KTsKICNlbmRpZgogCiAjaWZkZWYgUkVWRUFMX1RSQU5TUEFSRU5DWV9MQVlF
UlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
aW5kZXggYTg1MGUxMzc0YTEyNTgyMjBjZWZjOGZkN2EyYjczZjc2N2E3NDNhYy4uY2UxZWE2ZmM1
MDNlZDgxY2JkMGViMGE5ZGM3ZmYxOTBjOTQzMmRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE4MzEsNyArMTgzMSw5IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lvbigpCiAgICAgfTsKIAogICAg
IGF1dG8gdXBkYXRlRXZlbnRSZWdpb25Gb3JMYXllciA9IFsmXShHcmFwaGljc0xheWVyJiBncmFw
aGljc0xheWVyKSB7Ci0gICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQoTnVs
bEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICAg
ICAgYXV0byBkaXJ0eVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludChncmFwaGljc0xheWVyLm9m
ZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NMYXllci5zaXplKCkpOworICAgIAorICAgICAg
ICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KGRpcnR5UmVjdCwgTnVsbEdyYXBoaWNz
Q29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAgICAgICAgRXZlbnRS
ZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRBQkxFX1JFR0lPTikKICAgICAgICAg
aWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRpdGFibGVSZWdpb24oKSkKQEAgLTE4
NTMsOCArMTg1NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lv
bigpCiAgICAgICAgICAgICBldmVudFJlZ2lvbkNvbnRleHQudW5pdGUoZW5jbG9zaW5nSW50UmVj
dChGbG9hdFJlY3QoLWxheWVyT2Zmc2V0LCBncmFwaGljc0xheWVyLnNpemUoKSkpLCByZW5kZXJl
cigpLnN0eWxlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBkaXJ0eVJlY3QgPSBlbmNs
b3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KGdyYXBoaWNzTGF5ZXIub2Zmc2V0RnJv
bVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNpemUoKSkpOwotICAgICAgICBwYWludEludG9M
YXllcigmZ3JhcGhpY3NMYXllciwgbnVsbENvbnRleHQsIGRpcnR5UmVjdCwgeyB9LCAmZXZlbnRS
ZWdpb25Db250ZXh0KTsKKyAgICAgICAgcGFpbnRJbnRvTGF5ZXIoJmdyYXBoaWNzTGF5ZXIsIG51
bGxDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVjdCksIHsgfSwgJmV2ZW50UmVnaW9u
Q29udGV4dCk7CiAKICAgICAgICAgZXZlbnRSZWdpb24udHJhbnNsYXRlKHRvSW50U2l6ZShsYXll
ck9mZnNldCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0K
aW5kZXggMzBjZDM0M2VhN2RmOTE2OGNjM2NkZTQ3ZGJlZjhmNzU5ZTg4ZjczMS4uMjU2ZmM3NDk1
NmRhMzM4NmE1NGQzNTJkZTExYjZmZjczNjY5YTFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtNjA1LDcgKzYwNSw3IEBAIHZvaWQgUmVuZGVyVGhl
bWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0CiAgICAgY29uc3QgRmxvYXRTaXplIGlubmVyU2hhZG93T2Zmc2V0IHsgMCwgNSB9
OwogICAgIGNvbnN0ZXhwciBhdXRvIGlubmVyU2hhZG93Qmx1ciA9IDEwLjBmOwogICAgIGF1dG8g
aW5uZXJTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4geyAwLCAwLCAwLCAwLjA0ZiB9Owot
ICAgIGNvbnRleHQuc2V0U2hhZG93KGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIs
IGlubmVyU2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IGlubmVyU2hh
ZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3IgfSk7CiAgICAgY29u
dGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAogICAgIFBhdGggaW5uZXJTaGFkb3dQ
YXRoOwpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0
ZW1QcmV2aWV3QmFkZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBQYWludEluZm8mIHBhaW4KICAgICAv
LyBVc2UgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiwgYmVjYXVzZSBpdCBjYWxjdWxhdGVz
IHRoZSBibHVyIHJhZGl1cyBpbiBjb250ZXh0IHNwYWNlLAogICAgIC8vIHJhdGhlciB0aGFuIHNj
cmVlbiBzcGFjZS4KICAgICBjb25zdGV4cHIgYXV0byBzaGFkb3dDb2xvciA9IENvbG9yOjpibGFj
ay5jb2xvcldpdGhBbHBoYUJ5dGUoMjYpOwotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3co
RmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFkb3dDb2xvciB9KTsKIAogICAgIC8v
IFRoZSBjaXJjbGUgbXVzdCBoYXZlIGFuIGFscGhhIGNoYW5uZWwgdmFsdWUgb2YgMSBmb3IgdGhl
IHNoYWRvdyBjb2xvciB0byBhcHBlYXIuCiAgICAgQ0dGbG9hdCBjaXJjbGVDb2xvckNvbXBvbmVu
dHNbNF0gPSB7IDAsIDAsIDAsIDEgfTsKQEAgLTIyNzMsNyArMjI3Myw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjCiAKICAgICBib29sIGlzRW1wdHkgPSAhc3RhdGVzLmNvbnRhaW5zQW55KHsg
Q29udHJvbFN0YXRlczo6U3RhdGVzOjpDaGVja2VkLCBDb250cm9sU3RhdGVzOjpTdGF0ZXM6Oklu
ZGV0ZXJtaW5hdGUgfSk7CiAgICAgYXV0byBmaXJzdFNoYWRvd0NvbG9yID0gRGlzcGxheVAzPGZs
b2F0PiB7IDAsIDAsIDAsIGlzRW1wdHkgPyAwLjA1ZiA6IDAuMWYgfTsKLSAgICBjb250ZXh0LnNl
dFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0Nv
bG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBpbm5lclNoYWRvd09mZnNldCwgaW5u
ZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yIH0pOwogICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVyU2hhZG93UGF0aDsKQEAgLTIyOTAs
NyArMjI5MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVy
U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAgICAgY29udGV4dC5maWxsUGF0
aChpbm5lclNoYWRvd1BhdGgpOwogCiAgICAgY29uc3RleHByIGF1dG8gc2Vjb25kU2hhZG93Q29s
b3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMSwgMSwgMSwgMC41ZiB9OwotICAgIGNvbnRleHQuc2V0
U2hhZG93KEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwgc2Vjb25kU2hhZG93Q29sb3IpOworICAgIGNv
bnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwgc2Vjb25kU2hhZG93
Q29sb3IgfSk7CiAKICAgICBjb250ZXh0LmZpbGxQYXRoKGlubmVyU2hhZG93UGF0aCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggMDEwZWNiYWVk
ODdhNzNhNDIwYWZiOTdlOGU4MGZlYTYzNzlmZWQzZS4uMTBkYzkwZTU3ZTVhZTBmNDI1YTBkYWFh
MzY0ZjgxNGU0NDk0OTkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQpAQCAtMjgxNiw3ICsyODE2LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50
UGxhY2Vob2xkZXJCb3JkZXIoY29uc3QgUmVuZGVyQXR0YWNobWVudCYgYXR0YWNobWVudCwKICAg
ICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOwogICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcldpZHRo
KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKERhc2hlZFN0cm9rZSk7Ci0gICAgY29udGV4
dC5zZXRMaW5lRGFzaCh7YXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyRGFzaExlbmd0aH0sIDAp
OworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRl
ckRhc2hMZW5ndGggfSwgMCB9KTsKICAgICBjb250ZXh0LnN0cm9rZVBhdGgoYm9yZGVyUGF0aCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlv
blBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFp
bnRlci5jcHAKaW5kZXggNjc1NTY4YWZmNjExOGYwMTNiZDFkNGY1NWE2YzM2NGZhOGFmMzhlOC4u
ODMwOWIyZjhkNGEzMWZhMDNiMWFiZjg0MzlkYTBmM2VmMTYyODQwYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTI3MSw3
ICsyNzEsNyBAQCB2b2lkIFRleHREZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kRGVj
b3JhdGlvbnMoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgYwogICAgICAgICAgICAgQ29sb3Igc2hh
ZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CiAgICAgICAgICAgICBpZiAobV9zaGFkb3dDb2xv
ckZpbHRlcikKICAgICAgICAgICAgICAgICBtX3NoYWRvd0NvbG9yRmlsdGVyLT50cmFuc2Zvcm1D
b2xvcihzaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICBtX2NvbnRleHQuc2V0U2hhZG93KEZsb2F0
U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQpLCBzaGFkb3ctPnJhZGl1cygpLnZh
bHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5zZXREcm9wU2hhZG93
KHsgRmxvYXRTaXplKHNoYWRvd1gsIHNoYWRvd1kgLSBleHRyYU9mZnNldCksIHNoYWRvdy0+cmFk
aXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiAgICAgICAgICAgICBzaGFkb3cgPSBzaGFk
b3ctPm5leHQoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWlu
dGVyLmNwcAppbmRleCA4ODVkODI2ZWU5ZTc5NmY0YjVjNWI1ODMzZjcxYTAyOGM0NTQxYTdhLi5m
ZTg4NjljMTllNWY4ZDQzYjdmYTE2ZTQwMWI0ZmJjNmRjZjdlZWZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgU2hhZG93QXBwbGll
cjo6U2hhZG93QXBwbGllcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFNoYWRvd0Rh
dGEqIHNoYWRvdywKICAgICB9CiAKICAgICBpZiAoIW1fYXZvaWREcmF3aW5nU2hhZG93KQotICAg
ICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgp
LCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNoYWRvd09m
ZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogfQogCiBpbmxpbmUg
Ym9vbCBTaGFkb3dBcHBsaWVyOjppc0xhc3RTaGFkb3dJdGVyYXRpb24oKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5kZXggN2VkNTM3YzkyNzkz
NzcwZjQ0ODhhZTI5ZGY0MDcyN2Q3ZWIxYTNhOS4uNmM3MzBlZjA3ZTQ4YzdlY2Y4YzQwZTM3ZTAw
MzQ1Y2ZhYjU2YzY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguY3BwCkBAIC02OSw3ICs2OSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjpj
YWxjdWxhdGVVcGRhdGVkU3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogc3RhdGljIHZvaWQgdXNl
U3Ryb2tlU3R5bGVUb0ZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChh
dXRvIGdyYWRpZW50ID0gY29udGV4dC5zdHJva2VHcmFkaWVudCgpKQotICAgICAgICBjb250ZXh0
LnNldEZpbGxHcmFkaWVudCgqZ3JhZGllbnQsIGNvbnRleHQuc3RhdGUoKS5zdHJva2VHcmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoKmdyYWRp
ZW50LCBjb250ZXh0LnN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOwogICAgIGVsc2UgaWYgKFBhdHRl
cm4qIHBhdHRlcm4gPSBjb250ZXh0LnN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgY29udGV4dC5z
ZXRGaWxsUGF0dGVybigqcGF0dGVybik7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggY2MzOGVjNzAzMGU2MGNl
MTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4uYjY1ODY4ZDFiZDM0YzkwZDRiYmZkZDQ3N2FkMmM3
NDI4MmEwNTZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwCkBAIC01MDEsMTAgKzUwMSwxMiBAQCB2b2lkIFNWR1JlbmRlclN1cHBv
cnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNhblNldExpbmVEYXNoKQotICAgICAgICAg
ICAgY29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGxlbmd0aENvbnRleHQudmFsdWVGb3JM
ZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKSAqIHNjYWxlRmFjdG9yKTsKKyAgICAg
ICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGRhc2hBcnJheSksIGxlbmd0aENv
bnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKSAqIHNjYWxl
RmFjdG9yIH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0LnNldFN0cm9rZVN0
eWxlKFNvbGlkU3Ryb2tlKTsKICAgICB9CisKKyAgICBjb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CiB9CiAKIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6c3R5bGVDaGFuZ2VkKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAy
ZmI4ZjMzYTg3MGRmY2NlYjYyZTE0OTY1NmIxNDQzNzIyZWJlYTJkLi5mNTc5ZTVhNzVmZTkxMGY2
ZTViNThhOWFlZmI2ODM1ODk2MjIxMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTExNSwxMiArMTE1LDEyIEBA
IHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5k
ZXJFbGVtZW50JiByZW5kZXJlciwgUGFpCiAgICAgICAgIGlmIChvcGFjaXR5IDwgMSB8fCBoYXNC
bGVuZE1vZGUgfHwgaXNvbGF0ZU1hc2tGb3JCbGVuZGluZyB8fCBoYXNJc29sYXRpb24pIHsKIAog
ICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkKLSAgICAgICAgICAgICAgICBtX3BhaW50SW5m
by0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BhaW50SW5mby0+Y29udGV4dCgp
LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5ibGVuZE1vZGUoKSk7CisgICAgICAgICAgICAg
ICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVNb2RlKHsgbV9wYWludEluZm8t
PmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgc3R5bGUuYmxlbmRNb2RlKCkgfSk7CiAK
ICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuYmVnaW5UcmFuc3BhcmVuY3lMYXll
cihvcGFjaXR5KTsKIAogICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkKLSAgICAgICAgICAg
ICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BhaW50
SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7
CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVNb2Rl
KHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2Rl
OjpOb3JtYWwgfSk7CiAKICAgICAgICAgICAgIG1fcmVuZGVyaW5nRmxhZ3MgfD0gRW5kT3BhY2l0
eUxheWVyOwogICAgICAgICB9CkBAIC0yNzMsNyArMjczLDcgQEAgYm9vbCBTVkdSZW5kZXJpbmdD
b250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVy
KQogCiAgICAgLy8gSW52YWxpZGF0ZSBhbiBleGlzdGluZyBidWZmZXIgaWYgdGhlIHNjYWxlIGlz
IG5vdCBjb3JyZWN0LgogICAgIGlmIChpbWFnZUJ1ZmZlcikgewotICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5nZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuZ2V0Q1RNKCk7CiAgICAg
ICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0JveCA9IGV4cGFuZGVkSW50U2l6ZShib3VuZGlu
Z0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXplIGJ1ZmZlclNpemUoc3RhdGljX2Nhc3Q8aW50
PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lkdGgoKSAqIHRyYW5zZm9ybS54U2NhbGUoKSkp
LCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC5oZWlnaHQoKSAqIHRy
YW5zZm9ybS55U2NhbGUoKSkpKTsKICAgICAgICAgaWYgKGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZm
ZXItPmJhY2tlbmRTaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cAppbmRleCA0ZGQ3ZjgwZTM3Nzc5ODdkY2I3MGMxYTNjOGE4N2NkOGE0ZmQ2ZmI5Li5jZDg4YWRm
MDhkZGE4MDNiZmQ5M2Y4OTU3NzQwNzY4NmFjNGM1NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTI2OSwxNCArMjY5LDE0IEBAIEltYWdlRHJhd1Jlc3Vs
dCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjCiAgICAgQVNTRVJUKHZpZXcpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7Cisg
ICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigp
LCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChlbmNsb3NpbmdJbnRS
ZWN0KGRzdFJlY3QpKTsKIAogICAgIGZsb2F0IGFscGhhID0gY29udGV4dC5hbHBoYSgpOwogICAg
IGJvb2wgY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5zcGFyZW5jeUxheWVyID0gb3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpICE9IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIHx8IG9wdGlv
bnMuYmxlbmRNb2RlKCkgIT0gQmxlbmRNb2RlOjpOb3JtYWwgfHwgYWxwaGEgPCAxOwogICAgIGlm
IChjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJlbmN5TGF5ZXIpIHsKICAgICAgICAgY29udGV4
dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGFscGhhKTsKLSAgICAgICAgY29udGV4dC5zZXRDb21w
b3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6
Tm9ybWFsKTsKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgQ29tcG9zaXRlT3Bl
cmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsIH0pOwogICAgIH0KIAogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgaG9ub3Igb3B0aW9ucy5vcmllbnRhdGlvbigpLCBzaW5jZSBJbWFn
ZUJpdG1hcCdzIGZsaXBZIGhhbmRsaW5nIHJlbGllcyBvbiBpdC4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAwMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CmluZGV4IDU0MzgxODJkZGU4NzYzZWJhZDM4ZjE5MmRmNzk1YWEwNjBiNjUxYmIuLjhkYTM5MGY2
ZGE3MGUzNzk1NTBhNTcyZTA5ZTA4NDExODljMmRkZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAKQEAgLTc0LDMxICs3NCw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6cmVzdG9yZSgpCiAgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6UmVzdG9yZSgpKTsKIH0K
IAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpUcmFuc2xhdGUoeCwgeSkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZSkK
LXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpSb3RhdGUoYW5nbGUpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxl
KQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNjYWxlKHNjYWxlKSk7Ci19Ci0KLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldENUTShjdG0pKTsKLX0K
LQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjb25jYXRlbmF0ZUNUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDb25j
YXRlbmF0ZUNUTShjdG0pKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpz
ZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmIGl0ZW0p
CiB7CiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsKQEAgLTEyOCw0MCArMTAzLDE1IEBA
IHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0U3RhdGUoRGlzcGxheUxpc3Q6OlNl
dFN0YXRlJiYgaXRlbSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfTsKIAotICAgIGlmICgh
Zml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5zdHJva2VQYXR0
ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZSgpLnN0
cm9rZUJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmaXhQ
YXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLmZpbGxQYXR0ZXJuLmdl
dCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZSgpLmZpbGxCcnVz
aCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGhhbmRsZUl0ZW0oV1RGTW92
ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZUNh
cChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2V0TGlu
ZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0
TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYgaXRlbSkKLXsKLSAgICBoYW5kbGVJ
dGVtKFdURk1vdmUoaXRlbSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxh
eUxpc3Q6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBoYW5kbGVJdGVt
KERpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0KGxpbWl0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxh
eUxpc3Q6OkNsZWFyU2hhZG93KCkpOwotfQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGhhbmRsZUl0ZW0oRGlzcGxh
eUxpc3Q6OkNsaXAocmVjdCkpOwpAQCAtMzcxLDE0ICszMjEsOSBAQCB2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aEdyYWRpZW50KERpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhHcgogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRl
ZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGhhbmRsZUl0ZW0oRGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSk7CisgICAgaGFu
ZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKSk7CiB9CiAK
IHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9s
ZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4
IDNiYmFmNzY1ZDA1ZjQ0YWJmNGQ5NjFlNzY2Y2U2NTQ2OThlZGUyOTQuLjgxODg5NjZhZmZhNzA5
ZTZmZDBhMzFiZmNhNmMzZTcxODU2NWM1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaApA
QCAtNTksMjAgKzU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2F2ZSgpOwogICAgIHZvaWQg
cmVzdG9yZSgpOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOwotICAgIHZv
aWQgcm90YXRlKGZsb2F0IGFuZ2xlKTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgc2NhbGUpOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSYpOwotICAgIHZvaWQgY29uY2F0ZW5hdGVDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtJik7CiAgICAgdm9pZCBzZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmKTsKICAgICB2b2lkIHNldElubGluZVN0cm9rZUNv
bG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvciYmKTsKICAgICB2
b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CiAgICAgdm9pZCBzZXRTdGF0ZShXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUmJik7Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6
OkxpbmVDYXApOwotICAgIHZvaWQgc2V0TGluZURhc2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVEYXNoJiYpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pOwot
ICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpOwog
ICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXBP
dXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
cihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKQEAgLTk3LDggKzg3LDcgQEAgcHVibGljOgogICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBmaWxs
UmVjdFdpdGhDb2xvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpD
b2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoR3JhZGllbnQoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50JiYpOwotICAgIHZvaWQgZmlsbENvbXBvc2l0ZWRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29y
ZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci0gICAgdm9pZCBmaWxs
Um91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
KTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpD
b2xvciYpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQgZmlsbExpbmUo
Y29uc3QgV2ViQ29yZTo6TGluZURhdGEmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXIubWVzc2FnZXMuaW4KaW5kZXggMjgwMmZmZThmODM5N2MwZWQ0ZGYxMjFhMDE3ZmU3ODEwOGZm
NmMyMC4uNDMxMTg0YmE0MzMwOTEzYzAyYWQ3NjQ0MGVkZDYzNTk5YzE3ODQwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KQEAgLTI1LDQ3ICsyNSwzNSBA
QAogbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0
cmVhbSB7CiAgICAgU2F2ZSgpCiAgICAgUmVzdG9yZSgpCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCi0gICAgUm90YXRlKGZsb2F0IGFuZ2xlKQotICAgIFNjYWxlKFdlYkNvcmU6OkZs
b2F0U2l6ZSBzY2FsZSkKLSAgICBTZXRDVE0oV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bSkK
LSAgICBDb25jYXRlbmF0ZUNUTShXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3RtKQorCiAgICAg
U2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29s
b3IgaXRlbSkKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0SW5saW5lU3Ryb2tlQ29sb3IgaXRlbSkKICAgICBTZXRTdHJva2VUaGlja25lc3MoZmxvYXQg
dGhpY2tuZXNzKQogICAgIFNldFN0YXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZSBp
dGVtKQotICAgIFNldExpbmVDYXAoZW51bTp1aW50OF90IFdlYkNvcmU6OkxpbmVDYXAgbGluZUNh
cCkKLSAgICBTZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2ggaXRl
bSkKLSAgICBTZXRMaW5lSm9pbihlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6TGluZUpvaW4gbGluZUpv
aW4pCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLSAgICBDbGVhclNoYWRvdygpCisK
KyNpZiBVU0UoQ0cpCisgICAgQXBwbHlTdHJva2VQYXR0ZXJuKCkKKyAgICBBcHBseUZpbGxQYXR0
ZXJuKCkKKyNlbmRpZgorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KQorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKKwogICAgIENsaXAoV2ViQ29yZTo6RmxvYXRS
ZWN0IHJlY3QpCisgICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgQ2xpcE91dChXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCkKLSAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJl
Y3QgZGVzdGluYXRpb25SZWN0KQogICAgIENsaXBPdXRUb1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRo
KQotICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90IFdlYkNvcmU6
OldpbmRSdWxlIHdpbmRSdWxlKQotICAgIERyYXdHbHlwaHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdHbHlwaHMgaXRlbSkKLSAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNlSW1hZ2VJZGVu
dGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJl
ZmVyZW5jZSBmaWx0ZXIpCi0gICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVj
dCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBEcmF3TmF0aXZlSW1hZ2Uo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2Vi
Q29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBX
ZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdP
cHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd1N5c3RlbUltYWdlKFJlZjxXZWJDb3JlOjpTeXN0ZW1J
bWFnZT4gc3lzdGVtSW1hZ2UsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QpCi0g
ICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdl
SWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJl
Y3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0sIFdlYkNvcmU6
OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBzdHJ1Y3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBCZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotICAgIERy
YXdSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi0g
ICAgRHJhd0xpbmUoV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDEsIFdlYkNvcmU6OkZsb2F0UG9p
bnQgcG9pbnQyKQotICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdMaW5lc0ZvclRleHQgaXRlbSkKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNv
cmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgc3R5bGUpCi0gICAgRHJhd0VsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAg
RHJhd1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNv
cmU6OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3Ig
Y29sb3IpCi0gICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+
IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikK
KyAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGlu
YXRpb25SZWN0KQorCisgICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorCiAg
ICAgRmlsbFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAgICAgRmlsbFJlY3RXaXRoQ29s
b3IoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZp
bGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFk
aWVudCBpdGVtKQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpDb21wb3NpdGVP
cGVyYXRvciBvcCwgZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9kZSBibGVuZE1vZGUpCi0g
ICAgRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgcmVjdCwgV2ViQ29y
ZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVuZE1vZGUgYmxlbmRNb2Rl
KQorICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJlY3QsIFdl
YkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFdlYkNvcmU6
OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJvdW5kZWRIb2xlUmVj
dCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBGaWxsRWxsaXBzZShXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBGaWxsTGluZShz
dHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBGaWxsQXJjKHN0cnVjdCBXZWJDb3Jl
OjpBcmNEYXRhIGRhdGEpCkBAIC03MywxMSArNjEsMTAgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgRmlsbEJlemllckN1
cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRpZgogICAgIEZp
bGxQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBGaWxsRWxsaXBzZShXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCkKLSAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLSAgICBUcmFuc2Zvcm1U
b0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCi0g
ICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciBpZGVu
dGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCisKICAgICBTdHJva2VSZWN0
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisKKyAgICBTdHJva2VF
bGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQogICAgIFN0cm9rZUxpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRhdGEpCiAgICAg
U3Ryb2tlQXJjKHN0cnVjdCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC04NSwxMiArNzIsMzEg
QEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0
cmVhbSB7CiAgICAgU3Ryb2tlQmV6aWVyQ3VydmUoc3RydWN0IFdlYkNvcmU6OkJlemllckN1cnZl
RGF0YSBkYXRhKQogI2VuZGlmCiAgICAgU3Ryb2tlUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0g
ICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDbGVhclJlY3Qo
V2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0jaWYgVVNFKENHKQotICAgIEFwcGx5U3Ryb2tlUGF0
dGVybigpCi0gICAgQXBwbHlGaWxsUGF0dGVybigpCisKKyAgICBEcmF3UmVjdChXZWJDb3JlOjpG
bG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIERyYXdMaW5lKFdlYkNv
cmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MikKKworICAg
IERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIERyYXdQYXRoKFdlYkNv
cmU6OlBhdGggcGF0aCkKKworICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNvcmU6OlBhdGggcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisgICAg
RHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJlY3RzLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKworICAgIERyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBz
b3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlcikKKyAgICBEcmF3SW1h
Z2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVy
SWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCwgV2ViQ29yZTo6
RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBv
cHRpb25zKQorICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVtSW1hZ2U+IHN5
c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQorICAgIERyYXdO
YXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVu
dGlmaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUgaW1hZ2VTaXplLCBXZWJDb3JlOjpGbG9hdFJlY3Qg
ZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1h
Z2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3UGF0dGVybihXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJl
Y3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB0aWxlUmVjdCwgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwaGFzZSwgV2ViQ29yZTo6
RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBv
cHRpb25zKQorI2lmIEVOQUJMRShWSURFTykKKyAgICBQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBk
ZXN0aW5hdGlvbikKICNlbmRpZgorCisgICAgRHJhd0dseXBocyhXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0dseXBocyBpdGVtKQorICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKKyAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgc3R5bGUpCisKKyAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKKyAgICBU
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9y
U3BhY2UpCiAgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKICAg
ICBGbHVzaENvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGlk
ZW50aWZpZXIpCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5j
cHAKaW5kZXggODU3N2NiYmRlNmQzOTAxZDM0NzA3NjFlZDMwZjc5ZDk4ZTgyYjk4ZC4uZDM3ZTA0
OTg2MzIxY2MwMTIyZDY3M2Y0MWNhMWU4MDFmZTUyZTczMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcApAQCAtMzIsMzYgKzMyLDIxIEBACiAjaW5jbHVk
ZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvTWVkaWFQbGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
JiByZW5kZXJpbmdCYWNrZW5kLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKLSAgICA6IERpc3BsYXlMaXN0OjpS
ZWNvcmRlcih7IH0sIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlw
aHMpCisgICAgOiBEaXNwbGF5TGlzdDo6UmVjb3JkZXIoaW5pdGlhbENsaXAsIGluaXRpYWxDVE0s
IGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlm
aWVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKQogICAgICwgbV9p
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikKICAgICAsIG1fcmVuZGVyaW5nQmFja2VuZChyZW5kZXJp
bmdCYWNrZW5kKQogewogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6Q29udmVydFRvTHVtaW5hbmNlTWFzaygpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25z
dCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCi17Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xvclNw
YWNlKGNvbG9yU3BhY2UpKTsKLX0KLQogUmVuZGVyaW5nTW9kZSBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyID8gbV9pbWFnZUJ1ZmZlci0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZDsKQEAgLTc3LDMxICs2Miw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRSZXN0b3JlKCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpSZXN0b3JlKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNsYXRlKHgs
IHkpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJv
dGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpSb3RhdGUoYW5nbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCi17Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2NhbGUoc2NhbGUpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRDVE0odHJhbnNmb3JtKSk7Ci19Ci0KLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb25jYXRlbmF0ZUNUTSh0cmFuc2Zvcm0pKTsKLX0KLQog
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldElubGluZUZpbGxD
b2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpTZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxDb2xvciB7IGNvbG9yIH0pKTsKQEAgLTExNyw5MyArNzcsMjIgQEAgdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9h
dCB0aGlja25lc3MpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6U2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFn
cykKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRT
dGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUgeyBzdGF0ZSwgZmxhZ3MgfSkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcChMaW5lQ2Fw
IGxpbmVDYXApCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGFycmF5LCBmbG9h
dCBkYXNoT2Zmc2V0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OlNldExpbmVEYXNoKERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCB7IGFycmF5LCBkYXNo
T2Zmc2V0IH0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0
KGZsb2F0IGxpbWl0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OlNldE1pdGVyTGltaXQobGltaXQpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyU2hhZG93KCkKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVhclNoYWRvdygpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkNsaXAocmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChyZWN0KSk7Ci19Ci0KLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBU
b0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBk
ZXN0aW5hdGlvblJlY3QpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0VG9QYXRoKHBhdGgpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRo
KGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwotfQotCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdlKQot
ICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVj
dCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UoUmVmPEZpbHRlcj4geyBmaWx0ZXIgfSkpKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdHbHlwaHMoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2lu
dCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCi17Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNwbGF5TGlzdDo6
RHJhd0dseXBocyB7IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwg
bW9kZSB9KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZm
ZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6U2V0U3RhdGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlIHsgc3RhdGUgfSkpOwogfQog
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2ZUlt
YWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJ
bWFnZShpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0KQorI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFn
ZSwgZGVzdGluYXRpb25SZWN0KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6QXBwbHlTdHJva2VQYXR0ZXJuKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdQYXR0ZXJuKGltYWdlSWRlbnRpZmll
ciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlG
aWxsUGF0dGVybigpKTsKIH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAKIHZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9w
YWNpdHkpCiB7CkBAIC0yMTUsNDQgKzEwNCwzNCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKCkpOwog
fQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UmVjdChyZWN0LCB3aWR0aCkpOwotfQot
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQx
LCBwb2ludDIpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3
TGluZXNGb3JUZXh0KERpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0IHsgYmxvY2tMb2NhdGlv
biwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMg
fSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAo
cmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERv
Y3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxl
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwUGF0aChwYXRoLCBydWxlKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0VsbGlwc2UocmVjdCkpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXQocmVjdCkpOwog
fQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdGgocGF0aCkpOworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkp
OwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0Zv
Y3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNl
dCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIoKSwgZGVzdGluYXRpb25SZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xl
YXJSZWN0KHJlY3QpKTsKIH0KIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI3MCwyMyArMTQ5LDIy
IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdp
dGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6RmlsbFJlY3RXaXRoR3JhZGllbnQoRGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50IHsgcmVjdCwgZ3JhZGllbnQgfSkpOwogfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
QmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgbW9kZSkpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSb3VuZGVk
UmVjdChyb3VuZGVkUmVjdCwgY29sb3IpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5kZWRSZWN0KHJvdW5kZWRSZWN0LCBjb2xvciwg
bW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7CiB9CiAK
ICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJiBkYXRhKQogewogICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxMaW5lKGRhdGEp
KTsKQEAgLTMwNiw3ICsxODQsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YQogewogICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxCZXppZXJDdXJ2ZShk
YXRhKSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCkBAIC0zMTQsMjMgKzE5MSwxNyBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUGF0aChwYXRoKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RmlsbEVsbGlwc2UocmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBw
bGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9yTWVkaWEocGxheWVyLmlkZW50aWZpZXIoKSwg
ZGVzdGluYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpTdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZVJlY3QocmVjdCwg
d2lkdGgpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpT
dHJva2VFbGxpcHNlKHJlY3QpKTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
CiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlTGluZShj
b25zdCBMaW5lRGF0YSYgZGF0YSkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTdHJva2VMaW5lKGRhdGEpKTsKQEAgLTM1MCw3ICsyMjEsNiBAQCB2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUo
Y29uc3QgQmV6aWVyQ3VydmVEYQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlN0cm9rZUJlemllckN1cnZlKGRhdGEpKTsKIH0KLQogI2VuZGlmIC8vIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzU4LDMzICsyMjgs
ODQgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpTdHJva2VQYXRoKHBhdGgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUVsbGlwc2UocmVjdCkp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0
KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVhclJlY3QocmVjdCkpOworICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lKHBvaW50
MSwgcG9pbnQyKSk7CiB9CiAKLSNpZiBVU0UoQ0cpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdFbGxpcHNl
KHJlY3QpKTsKK30KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZEFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseVN0cm9rZVBhdHRlcm4oKSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdGgocGF0aCkp
OwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlG
aWxsUGF0dGVybigpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RmlsbFBhdHRlcm4oKSk7CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lk
dGgsIG9mZnNldCwgY29sb3IpKTsKIH0KIAotI2VuZGlmIC8vIFVTRShDRykKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikp
OworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdl
QnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
c2NhbGVGYWN0b3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBG
aWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50
aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoV1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRl
clJlZmVyZW5jZShSZWY8RmlsdGVyPiB7IGZpbHRlciB9KSkpOworfQorCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJbWFnZShpbWFnZUlkZW50
aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShT
eXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdT
eXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7Cit9CisKK3ZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlm
aWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVy
IGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6UGFpbnRGcmFtZUZvck1lZGlhKGlk
ZW50aWZpZXIsIGRlc3RpbmF0aW9uKSk7Cit9CisjZW5kaWYKKwordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZv
bnRTbW9vdGhpbmdNb2RlIG1vZGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNwbGF5TGlzdDo6RHJhd0dseXBocyB7IGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSB9KSk7Cit9CisKK3Zv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQoreworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lc0ZvclRleHQoRGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBv
aW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyB9KSk7Cit9CisK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUmIHN0eWxlKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKIH0KIAog
Ym9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKE5h
dGl2ZUltYWdlJiBpbWFnZSkKQEAgLTQzNCwxMSArMzU1LDYgQEAgYm9vbCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKEZvbnQmIGZvbnQpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVz
aENvbnRleHQoR3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmx1c2hDb250ZXh0
KGlkZW50aWZpZXIpKTsKLX0KLQogUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9y
U3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpv
cHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkgY29uc3QKIHsKICAgICBp
ZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpIHsKQEAgLTQ2NCw2ICszODAsMjkgQEAg
UmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0
ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb24KICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVh
dGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBzY2FsZUZhY3RvcigpLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QpOwogfQogCisKKworCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q29udmVydFRvTHVtaW5hbmNl
TWFzaygpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5z
Zm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKK30KKwordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQgc2NhbGVGYWN0b3IpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOworfQorCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZsdXNoQ29udGV4dChpZGVudGlmaWVyKSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCmluZGV4IDliMzNhMDY3
ZmQxNmJjY2YxNDA0MmMxOTc0ZGQ2OTE5NDIyNjI0NjguLmYyYWQ4ZDBhYTQ1ODU4OWFlZTgxOTA3
ZDljOTA4OTZkMzRiNmY3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIAogY2xhc3MgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlciB7CisgICAgZnJp
ZW5kIGNsYXNzIFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKIHB1YmxpYzoKICAgICBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGluaXRpYWxD
bGlwLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIH5SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHkoKSA9IGRlZmF1bHQ7CkBAIC01MCw2MyArNTEsMzkgQEAgcHVibGljOgog
ICAgIHZvaWQgZmx1c2hDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRp
ZmllcikgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2
b2lkIHNlbmQoVCYmIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVu
ZGVyaW5nQmFja2VuZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9uZWVkc0Zs
dXNoID0gdHJ1ZTsKLSAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RG
TW92ZShtZXNzYWdlKSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwotICAgIH0KLQot
ICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7Ci0KICAgICBXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKIAogICAgIHZv
aWQgcmVjb3JkU2F2ZSgpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0Q1RN
KGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
Q29uY2F0ZW5hdGVDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisK
ICAgICB2b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90
PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpT
UkdCQTx1aW50OF90PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3Mo
ZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKFdlYkNvcmU6Okxp
bmVDYXApIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6
RGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRM
aW5lSm9pbihXZWJDb3JlOjpMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRl
ckxpbWl0KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7
CisgICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZSYpIGZpbmFsOworCisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQ
YXR0ZXJuKCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7
CisjZW5kaWYKKworICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkg
ZmluYWw7CisgICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAg
ICAgdm9pZCByZWNvcmRDbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRS
dWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBm
aW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdl
YkNvcmU6OldpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd0dseXBocyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdl
YkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNv
cmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lz
dGVtSW1hZ2UoV2ViQ29yZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KTsKLSAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1Jp
bmdQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmlu
Z1JlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZENsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVh
clJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29y
ZEZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50JikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2Vi
Q29yZTo6QmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBX
ZWJDb3JlOjpCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYp
IGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQogICAgIHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBm
aW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxBcmMoY29uc3QgV2ViQ29yZTo6QXJjRGF0YSYpIGZp
bmFsOwpAQCAtMTE0LDkgKzkxLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6
aWVyQ3VydmUoY29uc3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYK
ICAgICB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVy
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5h
bDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VF
bGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBXZWJDb3JlOjpM
aW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IFdlYkNvcmU6
OkFyY0RhdGEmKSBmaW5hbDsKQEAgLTEyNCwxMyArMTAyLDI4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEm
KSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBXZWJDb3Jl
OjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJlY29yZEFw
cGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVy
bigpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJh
d0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwb2ludDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0
aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1
c1JpbmdQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3Vz
UmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVyJikg
ZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShXZWJDb3Jl
OjpTeXN0ZW1JbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KTsKKyAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9y
TWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlw
aHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgq
LCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhp
bmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwog
CiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpIGZpbmFs
OwogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5h
bDsKQEAgLTE0MSw2ICsxMzQsMTggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJD
b3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nTWV0aG9kPikgY29uc3QgZmluYWw7CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2VuZChUJiYgbWVzc2FnZSkKKyAgICB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBtX25lZWRzRmx1c2ggPSB0cnVlOworICAgICAgICBtX3JlbmRlcmlu
Z0JhY2tlbmQtPnNlbmRUb1N0cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rlc3RpbmF0aW9uQnVm
ZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0KSBmaW5hbDsKKwogICAgIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcjsKICAgICBXZWFrUHRyPFdlYkNv
cmU6OkltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwogICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5PiBtX3JlbmRlcmluZ0JhY2tlbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggMWQ2NDNiNmI0
Mjg4ZDA4ZTAzOGM0NjI1ZDA1NDlkZTY4YWYyYWE3Ny4uMDc5OTNiMzgwZjFlYTdkMzQ5ZGQ3ZWJm
YzE2MGM4MDRkYWQ0M2UzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgRmluZENv
bnRyb2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvCiAKICAgICAvLyBEcmF3IHdoaXRlIGZyYW1lcyBhcm91bmQgdGhlIGhvbGVz
LgogICAgIC8vIFdlIGRvdWJsZSB0aGUgdGhpY2tuZXNzIGJlY2F1c2UgaGFsZiBvZiB0aGUgc3Ry
b2tlIHdpbGwgYmUgZXJhc2VkIHdoZW4gd2UgY2xlYXIgdGhlIGhvbGVzLgotICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkp
LCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dERyb3BTaGFkb3coeyBGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNo
YWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRT
dHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VU
aGlja25lc3MoYm9yZGVyV2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiB3aGl0ZUZy
YW1lUGF0aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCBmMTZmNzk2ZTA0
N2U5OTE5NzJjMGVkMWY0YWUxMTNjZTE2NTY1YzEwLi40OWUwMGJlMzM3ZWFmZWUxMjkzZWYwNzdh
ZGY2MTdjZGFlM2Q0YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0
Nyw3ICsyNDcsNyBAQCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3Qo
V2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogCiAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAg
ICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZz
ZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAg
IGdyYXBoaWNzQ29udGV4dC5zZXREcm9wU2hhZG93KHsgV2ViQ29yZTo6RmxvYXRTaXplKHNoYWRv
d09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9
KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRDb2xvcik7CiAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JCb3JkZXJXaWR0aCAq
IDIpOwogICAgIGZvciAoYXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzZmExMjQxOGZhMDZkMmI1
MjhmYmQ2YjE2OGQwN2ZlZWIzMTFiZGZjLi5jZWI0Y2M3N2NhNmNjNDQyNzcxNWM2MDk5NDAxOTFh
NThhYzkyODllIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDMtMTAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fp
ZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0
ZSBzaG91bGQgYmUgbGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIyLTAzLTA3ICBKb25hdGhhbiBC
ZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbZ2l0LXdlYmtpdF0gRGVyaXZl
IGJyYW5jaCBuYW1lIGZyb20gYnVnIHRpdGxlIChGb2xsb3ctdXAgZml4KQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHRUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9C
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5kZXggOGU0MWM1YTczYWUzNjg0
Y2VkZGYxZjk0ZjlmMTcxODk1MzUxNGM5Zi4uZWJlNjQ0ODcxZTI4ZjUxOWNkMjYxMjBiOGE4Mjc4
ODZjMDE5MDJiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3Rz
Q0cuY3BwCkBAIC01NCw3ICs1NCw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRl
c3RzLCBCYXNpYykKICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmltYXJ5Q29udGV4dChwcmltYXJ5
Q0dDb250ZXh0LmdldCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7
Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIHsgfSwgRmxv
YXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVj
b3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBj
b250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtOTAsMTAg
KzkwLDEwIEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCYXNpYykKIFRF
U1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUZXh0KQogewogICAgIEluTWVtb3J5
RGlzcGxheUxpc3QgcHJpbWFyeURpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBwcmltYXJ5
Q29udGV4dChwcmltYXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRX
aWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHByaW1hcnlDb250
ZXh0KHByaW1hcnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29u
dGV4dEhlaWdodCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBzZWNvbmRhcnlEaXNwbGF5
TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlEaXNwbGF5
TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwg
eyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlEaXNwbGF5
TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAg
ICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFy
eUNvbnRleHQpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0VGVzdHMsIEJvcmRlcnMpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgcHJpbWFyeUNvbnRl
eHQocHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRp
c3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0
LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0p
OworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCBGbG9hdFJl
Y3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAK
QEAgLTIyOCw3ICsyMjgsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywg
VHJhbnNmb3JtZWRDbGlwKQogICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQgPSBw
cmltYXJ5Q29udGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsK
LSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCB7IH0sIEZs
b2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFy
eUNvbnRleHRETChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAg
R3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5Q29udGV4dERMOwog
CiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29u
ZGFyeUNvbnRleHQpOwpAQCAtMjg3LDE1ICsyODcsMTUgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0VGVzdHMsIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgR3JhcGhpY3NDb250
ZXh0JiBwcmltYXJ5Q29udGV4dCA9IHByaW1hcnlDb250ZXh0Q0c7CiAKICAgICBJbk1lbW9yeURp
c3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0
REwoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgeyB9KTsKKyAg
ICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCBGbG9hdFJlY3Qo
MCwgMCwgMTAwLCAxMDApKTsKICAgICBHcmFwaGljc0NvbnRleHQmIHNlY29uZGFyeUNvbnRleHQg
PSBzZWNvbmRhcnlDb250ZXh0REw7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0
eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKICAgICBjdHguYXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcigyKTsKIAotICAgIGF1dG8gcHJpbWFyeUNUTSA9IHByaW1hcnlDb250ZXh0
LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlDb250
ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVs
eUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgYXV0byBwcmltYXJ5Q1RNID0gcHJpbWFyeUNvbnRl
eHQuZ2V0Q1RNKCk7CisgICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlDb250ZXh0Lmdl
dENUTSgpOwogCiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueFNjYWxlKCksIHNlY29uZGFyeUNU
TS54U2NhbGUoKSk7CiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueVNjYWxlKCksIHNlY29uZGFy
eUNUTS55U2NhbGUoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454401</attachid>
            <date>2022-03-10 14:31:17 -0800</date>
            <delta_ts>2022-03-13 01:34:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220310143116.patch</filename>
            <type>text/plain</type>
            <size>543994</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDE4NzcwNThhODlkYjky
YzZhZGUxODQ4MWJkMGRjYWUxYTYyMDA5Mi4uNGQ5YjhkYzY0MzUyMjMxMDNmZjAwZTRlMDAyODQ5
ZmZiYzJhZjMyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0MyBAQAorMjAyMi0wMy0xMCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjphcHBseUxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJv
a2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXlvdXRTdGlwcGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dEhhdGNoaW5nKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1
c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxh
eWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNhdmVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y2xpcEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGhJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGF0dGVybkltcGwpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpzYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVK
b2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNjYWxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojp0
cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhh
c2lzTWFya3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkZWNvbnN0cnVjdERyYXdHbHlwaHMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4gY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhZGllbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudElt
YWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9J
bWFnZUJ1ZmZlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0SW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlckltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybkltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0dseXBoc0FuZENhY2hlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9y
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1lcmdlQ2hhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2U6OmR1bXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVw
ZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0U3Ryb2tlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldFNoYWRvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3ND
b250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojpjb250ZW5mdWxQYWludERldGVjdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJnZVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6Om1lcmdlU3RhdGVEaWZmcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpmaWxsR3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0dGVybiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmZpbGxTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldEZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJ1bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlR3Jh
ZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXR0ZXJuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
U3BhY2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFN0cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjppbmVDYXAg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZURhc2ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVKb2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjptaXRlckxpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNvbXBvc2l0ZU1vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojpjb21wb3NpdGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJvcFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6Omhhc1Zpc2libGVTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpoYXNCbHVycmVkU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6aGFzU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkQW50aWFsaWFzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTbW9vdGhGb250cyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3THVtaW5hbmNlTWFzayBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzSW5UcmFuc3BhcmVuY3lMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJh
dGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0
ZXJuSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBz
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVs
bGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6fkdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJT
Y29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3Bl
OjpiZWdpbkxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxh
eWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2Vy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6fkludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25seVByaW1pdGl2ZUNoYW5nZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VEaWZmcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXApOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNoYW5nZXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsZWFyQ2hhbmdlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Z2V0Q1RNIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRDVE0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmZpbGxCcnVzaCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmlsbEJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsQnJ1c2gpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmZpbGxSdWxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlQnJ1c2gpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZUJydXNoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VCcnVzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZVBhdHRlcm4pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZVRoaWNrbmVzcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlVGhp
Y2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzdHJva2VT
dHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0
U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Omxp
bmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNl
dExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmxpbmVE
YXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRM
aW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUpv
aW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExp
bmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptaXRlckxp
bWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRN
aXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjb21w
b3NpdGVNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpkcm9wU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnRleHREcmF3aW5nTW9kZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0VGV4dERyYXdpbmdN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRBbnRp
YWxpYXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNl
dFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNldFNob3VsZFNtb290aEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkcmF3THVtaW5hbmNlTWFzayBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RHJhd0x1bWluYW5jZU1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnVzZURhcmtBcHBl
YXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxh
eWVyU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6YmVn
aW5MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjp+VHJh
bnNwYXJlbmN5TGF5ZXJTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGlj
c0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXI6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlTW9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVN
b2RlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVEYXNoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmRlY29k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc1Zpc2libGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6aXNCbHVycmVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRyb3BTaGFkb3c6Omhhc091dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RHJvcFNoYWRvdzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6
OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5o
OgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6TnVsbEdyYXBoaWNzQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNv
cmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OlNoYWRvd0JsdXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCcnVzaC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJydXNoOjpzcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
cnVzaDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnBh
dHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJj
ZUJydXNoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmNvbG9yIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6YnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnJ1c2g6OnNldEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpzZXRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjppc1ByaW1pdGl2
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJydXNoOjpCcnVzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJydXNoOjpCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJy
dXNoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmRlY29k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9E
cmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRl
eHRTdGF0ZVNhdmVyOjpDR0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNH
Q29udGV4dFN0YXRlU2F2ZXI6On5DR0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250
ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0
ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNhdmVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpyZXN0b3JlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3
aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OmNsaXBPdXRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpjbGlwUGF0aEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTaGFkb3dP
ZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lQ2Fw
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q0dNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZURhc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0Q0dTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q0c6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6Y2FuVXNlU2hhZG93Qmx1ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6cmVzdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpv
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y29uY2F0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRD
VE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmdldENU
TSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OkNH
Q29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0
U3RhdGVTYXZlcjo6fkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OmRpZFNhdmUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2ggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpiZWdpbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0lt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludGVybmFsQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnNldEludGVybmFsRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGluYXRp
b25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3Jk
QmVnaW5MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZEVuZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxh
dGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNoYWRvd0lzQ2xlYXJlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVD
b3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVt
cEZvckZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6
YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6c2FmZUNvcHkgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6U2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldFN0YXRlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJv
dW5kZWRSZWN0OjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjphcHBseSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lQ2FwOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0TGluZURhc2g6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0Ojpjb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp4
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xh
dGU6OnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJv
dGF0ZTo6Um90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
b3RhdGU6OmFuZ2xlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTY2FsZTo6U2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNjYWxlOjphbW91bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldENUTTo6U2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6dHJh
bnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRTdGF0ZTo6c3RhdGVDaGFuZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bGluZUNhcCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNl
dExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lRGFzaDo6ZGFzaEFycmF5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46
OlNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lSm9pbjo6bGluZUpvaW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6Om1pdGVyTGltaXQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29sb3Ig
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21w
b3NpdGVkUmVjdDo6Y29tcG9zaXRlT3BlcmF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRl
ZFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpl
bmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpSZWNvcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV9kcmF3R2x5cGhzUmVjb3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzYXZlSW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlc3RvcmVJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseVN0cm9rZVBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseUZp
bGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Y2xpcEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpjbGlwUGF0aEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpjbGlwT3V0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZmlsbFJlY3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd0ltYWdlQnVmZmVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVySW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdHRlcm5JbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0dseXBocyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlwaHNBbmRDYWNo
ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGlu
ZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp+UmVjb3JkZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seUlubGluZVN0YXRl
Q2hhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3RhdGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzY2FsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNvbmNhdENUTSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmdldENUTSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNs
aXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
bGlwT3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdXJyZW50U3RhdGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdXJyZW50
U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpjdG0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRl
OjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0pOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlY29yZERy
YXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29u
dGV4dFN0YXRlOjpDb250ZXh0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNsb25lRm9yU2F2ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRT
dGF0ZTo6Y2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0YXRlU3RhY2sgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpSZWNvcmRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xp
cCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRD
bGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VF
bGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1Jp
bmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBo
cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpleHRlbnRG
cm9tTG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6flJlY29yZGVySW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkUm90YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlckltcGw6OnJlY29yZFNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5l
Q2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZFNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldE1pdGVyTGlt
aXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkQ2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OlJlY29yZGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OmFwcGx5U2V0U3RhdGVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3Qm94ZXMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRm
dWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNvbnRlbnRmdWxQYWludCk6CisgICAgICAgICog
cmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVG
cm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRC
b3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6
OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2ht
ZW50UGxhY2Vob2xkZXJCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0RGVjb3JhdGlv
blBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpw
YWludEJhY2tncm91bmREZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRQYWlu
dGVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dXNlU3Ryb2tlU3R5bGVUb0ZpbGwpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJT
dXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVy
aW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRyYXcp
OgorCiAyMDIyLTAzLTEwICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgQVg6IFN1cHBvcnQgdXBkYXRlZCBXZWJTcGVlY2ggQVBJCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBl
NWVkNDY0ZjM1MjdkNDQzMDE5NTI4ZmZiZDI2YWJlM2VmYjA0NjkuLjQwZmVmOGZmNWE2ZmYwMmUx
Yzc4NWFkMTZlMDYxMTJiNmMzMjkyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMjIt
MDMtMTAgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQ
VSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6aWx5IGFwcGxpZWQg
dG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
c2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNvbmNhdGVuYXRlQ1RNKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZUNhcCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNl
dExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3cpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsQ29tcG9zaXRl
ZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxsUGF0
dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkQ2xpcCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQ2xpcFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRDbGVhclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZEZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZVJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlw
c2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmUpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdFbGxpcHNlKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3U3lz
dGVtSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdHbHlwaHMpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNvbnZlcnRUb0x1bWluYW5jZU1h
c2spOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRy
YW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6bV9yZW5kZXJpbmdCYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldENUTSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVEYXNo
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
Q2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnNlbmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpkcmF3UmVjdCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJh
d1JlY3QpOgorCiAyMDIyLTAzLTEwICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5j
b20+CiAKICAgICAgICAgQVg6IFN1cHBvcnQgdXBkYXRlZCBXZWJTcGVlY2ggQVBJCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CmluZGV4IDA3MmQ4OTlhMDdmYTU5OGEzOTdkZDNhYmMzM2UwZmY3ODQ4ZTc2Y2YuLmM1NjBk
N2M0ZGZhODQ5ZDM4MzQ5ZDk5OWVlZTZlNWQxNDBlZDQwNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0y
MDQ1LDYgKzIwNDUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5jcHAKQEAgLTIwODQsNiArMjA4NSw3IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL1NvdXJjZUltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9y
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGNlYmY0NmYxMmM1MDA3NTE2NDI2MjVmZjk4Njg2MjBlMjg4NWM5Y2EuLjkzZWUx
MDc5MjkxN2IwZTgxZDI5NTc1ZWZiMDNlOWNhMmY5NjVjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIzMzIsMTAgKzIzMzIs
MTIgQEAKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJC
Mzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzFGQ0IxNzAyN0JBQjNGRTAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRkNCMTZEMjdCQUIzREYwMEUw
NjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIwMTc4M0IyN0Q1N0Y5RjAwOUJFQjFCIC8qIENHQ29udGV4
dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzMy
MjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyogU1ZHUHJv
cGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAw
RkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyogSW1hZ2VC
aXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUy
MzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3Qzcg
LyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3ND
b250ZXh0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNC
Mjc1QzVGQTYwMEE5MTU2QSAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
MjQ2OTYzRDI3NUM2MTQ0MDBBOTE1NkEgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjE0QjlCNzI3NDQ1OEZBMDAz
QkU2REYgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0Njk2M0UyNzVDNjE2NzAwQTkxNTZBIC8qIEZpbHRl
ckltYWdlVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM0Myw2ICsy
MzQ1LDkgQEAKIAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURD
N0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFj
dGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3Rh
dGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyNTYwNzhFMjc5RDM0QjYwMDdEMkREMyAvKiBGRUltYWdlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkY3RTc0RjI3OUNFREU4
MDBEODJEMkQgLyogRkVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyNTgxODU0MjdDREE2OUEwMEMzRDk3RSAvKiBTb3VyY2VCcnVzaC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEYy
N0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5N0UgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUx
MEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZDREUyMDI3NTk3
MzUwMDBBNDQ1QjIgLyogRmlsdGVyRWZmZWN0R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOTY2MUEyMjc1OTYwQTUwMEU3REY5QiAvKiBG
aWx0ZXJFZmZlY3RHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZF
MTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAv
KiBOYXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMzM4LDYgKzExMzQz
LDcgQEAKIAkJNzFGQ0IxNkQyN0JBQjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVSYXRlQWxpZ25lci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZDQjE2RjI3QkFCM0UwMDBFMDYzMUMgLyogRnJh
bWVSYXRlQWxpZ25lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
cmFtZVJhdGVBbGlnbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1
MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRT
dGF0ZVNhdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENHQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxMUI1RDYyNzY1MzY4MjAwNzZGRUY4IC8qIEZpbHRl
clJlc3VsdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0cy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRW
YWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcg
LyogU1ZHVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM0Nyw2ICsxMTM1Myw4IEBACiAJCTcy
MkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQW5pbWF0aW9uRnJhbWVSYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNDM1RUY0MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjQzNUVGNTI3
M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmls
dGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENTI3Qzg1
RDAxMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjQ2MERENjI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8q
IEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJs
ZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdF
NTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
RVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE0MDks
NiArMTE0MTcsMTAgQEAKIAkJNzJBMTNBRDUyNzRERTU0RTAwRTJBODhFIC8qIFNvdXJjZUFscGhh
U29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmVBcHBs
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQTEzQUQ2Mjc0REU1NzgwMEUy
QTg4RSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkExM0FENzI3NERFNTc4MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3
YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FF
MCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwRDI3
Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQjM1MTBFMjdDQjQyRkQwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTb3VyY2VCcnVzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTb3VyY2VCcnVzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3
NDI3NEUyMzMzMDAyOTNDMkYgLyogRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQjRFRjc1Mjc0RTIzMzQwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmlsdGVy
SW1hZ2VWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2VWZWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4MTg2LDE4ICsyODE5OCwxOCBAQAogCQkJCUFBMkE1
QUJEMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXMuY3BwICovLAogCQkJCUFBMkE1
QUJFMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXMuaCAqLywKIAkJCQlBQTJBNUFC
RjE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmlkbCAqLywKLQkJCQlBQTJBNUFD
MDE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzRXZlbnQuY3BwICovLAotCQkJCUFB
MkE1QUMxMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNFdmVudC5oICovLAotCQkJ
CUFBMkE1QUMyMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNFdmVudC5pZGwgKi8s
Ci0JCQkJMjlGODNFQzkyN0Q1OTRFNTAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0V2ZW50SW5p
dC5oICovLAotCQkJCTI5RjgzRUNCMjdENTk1MjYwMEUxRjBGRCAvKiBTcGVlY2hTeW50aGVzaXNF
dmVudEluaXQuaWRsICovLAogCQkJCTI5RjgzRUM2MjdEMzE5MjYwMEUxRjBGRCAvKiBTcGVlY2hT
eW50aGVzaXNFcnJvckNvZGUuaCAqLywKIAkJCQkyOUY4M0VDRTI3RDVGQTYzMDBFMUYwRkQgLyog
U3BlZWNoU3ludGhlc2lzRXJyb3JDb2RlLmlkbCAqLywKIAkJCQkyOUY4M0VDNDI3RDMxNUEyMDBF
MUYwRkQgLyogU3BlZWNoU3ludGhlc2lzRXJyb3JFdmVudC5jcHAgKi8sCiAJCQkJMjlGODNFQzMy
N0QzMTVBMjAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnQuaCAqLywKIAkJCQky
OUY4M0VDNTI3RDMxNUI4MDBFMUYwRkQgLyogU3BlZWNoU3ludGhlc2lzRXJyb3JFdmVudC5pZGwg
Ki8sCi0JCQkJMjlGODNFQ0YyN0Q2QzcyQTAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9y
RXZlbnRJbml0LmlkbCAqLywKIAkJCQkyOUY4M0VEMDI3RDZDODg1MDBFMUYwRkQgLyogU3BlZWNo
U3ludGhlc2lzRXJyb3JFdmVudEluaXQuaCAqLywKKwkJCQkyOUY4M0VDRjI3RDZDNzJBMDBFMUYw
RkQgLyogU3BlZWNoU3ludGhlc2lzRXJyb3JFdmVudEluaXQuaWRsICovLAorCQkJCUFBMkE1QUMw
MTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNFdmVudC5jcHAgKi8sCisJCQkJQUEy
QTVBQzExNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc0V2ZW50LmggKi8sCisJCQkJ
QUEyQTVBQzIxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc0V2ZW50LmlkbCAqLywK
KwkJCQkyOUY4M0VDOTI3RDU5NEU1MDBFMUYwRkQgLyogU3BlZWNoU3ludGhlc2lzRXZlbnRJbml0
LmggKi8sCisJCQkJMjlGODNFQ0IyN0Q1OTUyNjAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0V2
ZW50SW5pdC5pZGwgKi8sCiAJCQkJQUEyQTVBQzQxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZS5jcHAgKi8sCiAJCQkJQUEyQTVBQzUxNkE0ODVENTAwOTc1QTI1IC8q
IFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oICovLAogCQkJCUFBMkE1QUMzMTZBNDg1RDUwMDk3
NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaWRsICovLApAQCAtMjg4MjksNiArMjg4
NDEsNyBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIx
QiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2
Nzk1IC8qIENvbG9yQ0cuY3BwICovLAogCQkJCUJDQUZFREIzMjU5NjhEMEIwMDMwRTZBQSAvKiBD
b2xvclNwYWNlQ0cuY3BwICovLAogCQkJCUJDQUZFREIyMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xv
clNwYWNlQ0cuaCAqLywKQEAgLTI5MDYyLDYgKzI5MDc1LDkgQEAKIAkJCQk3QkIzNEE0NzI1Mzc3
NkM3MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8sCiAJ
CQkJN0JCMzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRy
YWN0b3IuaCAqLywKIAkJCQk3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZS5oICovLAorCQkJCTcyNDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAgKi8sCisJCQkJNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdy
YXBoaWNzQ29udGV4dFN0YXRlLmggKi8sCisJCQkJNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8q
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFE
Njg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMjkxNjIsNiArMjkxNzgsNyBAQAogCQkJ
CUJDQTU1OTEyMjYzREJENzkwMDdGMTlCMyAvKiBQaXhlbEZvcm1hdC5oICovLAogCQkJCUNERDA4
QUJGMjc3RTU0RjAwMEVBMzc1NSAvKiBQbGF0Zm9ybUF1ZGlvVHJhY2tDb25maWd1cmF0aW9uLmgg
Ki8sCiAJCQkJQkMzRTYyNDIyNjU5NzkxNzAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5o
ICovLAorCQkJCTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dC5oICovLAogCQkJCTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdl
LmggKi8sCiAJCQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQk1NTA2NDBBRDI0MDc1NkRBMDBBQUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1
ZmZlckJhY2tlbmQuaCAqLywKQEAgLTI5MTg1LDYgKzI5MjAyLDggQEAKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKIAkJCQkxQzREQjAyNDI3MzM5RTVFMDA3QjBB
RDEgLyogU2hvdWxkTG9jYWxpemVBeGlzTmFtZXMuaCAqLywKKwkJCQk3MkIzNTEwRTI3Q0I0MkZE
MDBEMjdBRTAgLyogU291cmNlQnJ1c2guY3BwICovLAorCQkJCTcyQjM1MTBGMjdDQjQyRkUwMEQy
N0FFMCAvKiBTb3VyY2VCcnVzaC5oICovLAogCQkJCTFERDEyN0FDMjU2RTNBODcwMEIyMjdENyAv
KiBTb3VyY2VCdWZmZXJQcml2YXRlLmNwcCAqLywKIAkJCQlDRDY0MUVCMjE4MThGNUVEMDBFRTRD
NDEgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5oICovLAogCQkJCUNEQzhCNUFDMTgwNEFFNUQwMDE2
RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi8sCkBAIC0zMzg5Miw2ICszMzkx
MSw3IEBACiAJCQkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRl
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8qIENl
cnRpZmljYXRlU3VtbWFyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5RjAw
OUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZG
RDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNzg1RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5lbENv
dW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDgxOCw2ICszNDgzOCw4IEBACiAJCQkJNDlD
N0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Qjk1Q0ZFQjI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAw
RTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUw
RjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzY3MjEsNiArMzY3NDMsNyBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0
Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjU4MTg1NTI3Q0RBODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQ
bGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc3MDVDNzI1NTI3NkNEMDAxRDBD
OTQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQUYy
NDA3NTgyRDAwQUFFMDQ1IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM3NDAxLDYgKzM3NDI0LDcgQEAKIAkJCQk1MTBENEEzODEwMzE2NUVFMDA0OUVB
NTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFC
QUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1c2gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTY1MTdBOUQwMUIwMDI3NEU0MiAvKiBT
b3VyY2VCdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYxMzUwOTI0QzlGQ0EzMDA0
MzJFMUUgLyogU291cmNlQnVmZmVyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50
ZXIuY3BwCmluZGV4IDg1NmEzZGU1MDRkZWMwYmJmYTkwYWMxN2RlMzdmNTE1ZTE0ZDkyMDQuLjlk
OTM1YTZmZjMyMzBmM2Y0NmEyZWY1ZDdlYTEwMDEwYWU5ZTEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVy
LmNwcApAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVG
cm9tUGF0aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICAgICAg
ICAgIERhc2hBcnJheSBsaW5lRGFzaDsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNo
TGVuZ3RoKTsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hM
ZW5ndGgpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2go
eyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVz
IHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgQm94RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250
ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdpbiA9IGZpbGxSZWN0LnJlY3Qo
KS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBhdXRvIGFkanVzdGVkU2hhZG93
T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0
aW9uKCk7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVz
dGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNo
YWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldERyb3BTaGFkb3coeyBhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVl
KCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAKICAgICAg
ICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBv
cGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBz
byBzYXZlcyB0aW1lCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWlu
dGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hh
ZAogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQp
OwogICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZh
bHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNo
YWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVm
YXVsdCB9KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsK
ICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAppbmRleCBm
NGI5OGJhNjJlMTE5YTA3NzEzMTJkM2I4OGM0OTE5MzY4MzZlZTM3Li5lZTUwNGYwOGM0OWZjOGQ1
YjVhZWQ3MDJiZTIxN2YxYjA2ZmQ0ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRJbWFnZS5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFp
bnRJbWFnZTo6ZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjbwog
SW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RD
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUo
eyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAg
ICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRl
KGRlc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVj
dC5zaXplKCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKIAogICAgIC8vIEZhY3RvciBp
biB0aGUgZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0
IHJlc29sdXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29u
dGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRD
VE0oKTsKICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7
CiAgICAgZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAg
IEFmZmluZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCAwZTc4MDYzZTNhNDFjYmM2OTBmMGQwY2NiNzg4MTE3
ZGU2OTM4YTAyLi43YjMxODc3ODM4NjYyNzViYjk0M2Y0YmQ0OGEyZmNlOTAxMDhhYzExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcApAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCgpIGNvbnN0CiAgICAgRGFzaEFycmF5IGNv
bnZlcnRlZExpbmVEYXNoKHN0YXRlKCkubGluZURhc2guc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRlKCkubGluZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbnZl
cnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4oc3RhdGUoKS5s
aW5lRGFzaFtpXSk7Ci0gICAgYy0+c2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRl
KCkubGluZURhc2hPZmZzZXQpOworICAgIGMtPnNldExpbmVEYXNoKHsgV1RGTW92ZShjb252ZXJ0
ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KSB9
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxBbHBo
YShkb3VibGUgYWxwaGEpCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBv
cGUKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICgh
YykKICAgICAgICAgcmV0dXJuOwotICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxl
bmRNb2RlKTsKKyAgICBjLT5zZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzY2FsZShkb3VibGUgc3gsIGRv
dWJsZSBzeSkKQEAgLTExODYsNyArMTE4Niw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZG91CiAg
ICAgICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50
PihsaW5lRGFzaFtpXSk7Ci0gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goY29udmVydGVkTGlu
ZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICAgICAgY29udGV4dC5zZXRMaW5lRGFz
aCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUu
bGluZURhc2hPZmZzZXQpIH0pOwogICAgIH0pOwogfQogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChkb3VibGUgeCwgZG91
YmxlIHksIGRvdWJsZSB3aWR0aCwgZAogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAg
ICAgICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBj
b250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBjb250ZXh0LT5zZXREcm9wU2hh
ZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRp
dXNNb2RlOjpMZWdhY3kgfSk7CiAgICAgfQogICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9
IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTM2Myw5ICsxMzYzLDkgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3Vs
ZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09m
ZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNl
dC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdo
dCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRTaGFk
b3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kpOworICAgICAgICBjLT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAs
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiB9
CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3Mo
KSBjb25zdApAQCAtMjQzMiwxOSArMjQzMiwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGRvdQog
CiAgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0KDAsIDIgKiBtYXNrUmVjdC5oZWlnaHQoKSk7
CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBmbG9h
dCBzaGFkb3dSYWRpdXM7Ci0gICAgICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICAgICAg
ICAgIGMtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3Ip
OwotCiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChtYXNrUmVjdCk7Ci0gICAgICAg
ICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hhZG93UmFkaXVzICogMS40KTsKLSAgICAgICAgICAg
IHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQgKiAtMSk7CisgICAgICAgICAgICBhdXRvIGRy
b3BTaGFkb3cgPSBjLT5kcm9wU2hhZG93KCk7CisKKyAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5m
bGF0ZShkcm9wU2hhZG93LmJsdXIgKiAxLjQpOworICAgICAgICAgICAgc2hhZG93UmVjdC5tb3Zl
KGRyb3BTaGFkb3cub2Zmc2V0ICogLTEpOwogICAgICAgICAgICAgYy0+Y2xpcChzaGFkb3dSZWN0
KTsKIAotICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKKyAgICAgICAgICAgIGRy
b3BTaGFkb3cub2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5KTsKKyAgICAgICAgICAgIGMtPnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICAg
ICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xvcihDb2xv
cjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCmluZGV4IDRmNjNhZGNlOTM5MTZkYjIzMjBlOTY3OGFhYmZlMGYzY2Q5OTc2MmIuLjlhODAz
YTQwOGQ4OGMyZmY0OGRkM2JlYTAyOTUxYjg3NTgwOThlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTEyNDQsNyArMTI0NCw3IEBAIHN0
YXRpYyB2b2lkIGRyYXdMYXlvdXRTdGlwcGxpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZl
cihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAgICBjb250
ZXh0LnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAgIGNvbnRl
eHQuc2V0TGluZURhc2goeyAxLCBkZW5zaXR5IH0sIDEpOworICAgIGNvbnRleHQuc2V0TGluZURh
c2goeyB7IDEsIGRlbnNpdHkgfSwgMSB9KTsKIAogICAgIGRyYXdMYXlvdXRQYXR0ZXJuKGNvbnRl
eHQsIHF1YWQsIGRlbnNpdHksIEZsaXA6Ok5vKTsKIH0KQEAgLTEyNTQsNyArMTI1NCw3IEBAIHN0
YXRpYyB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVy
KGNvbnRleHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNSk7CiAgICAgY29u
dGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlKTsKLSAgICBjb250
ZXh0LnNldExpbmVEYXNoKHsgMiwgMiB9LCAyKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
eyAyLCAyIH0sIDIgfSk7CiAKICAgICBjb25zdGV4cHIgYXV0byBkZWZhdWx0TGF5b3V0SGF0Y2hT
cGFjaW5nID0gMTI7CiAgICAgZHJhd0xheW91dFBhdHRlcm4oY29udGV4dCwgcXVhZCwgZGVmYXVs
dExheW91dEhhdGNoU3BhY2luZywgZmxpcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5k
ZXggM2I5OTU1ODlkMTg1NmY3YzMzN2ZhMDBkNGVkYzUyYWJiZTkzNDExNS4uZjQ5NWY0OGU2MzY5
NWYxMDI3YzU4Njc4MWM4MDYwZjU1NzFmOGFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cApAQCAtNDI5Niw3ICs0Mjk2LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9yUGFpbnRJ
bnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXQKICAgICBpZiAo
bmVlZHNMYXlvdXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwogCi0gICAg
TnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Cisg
ICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGZyYW1lUmVjdCgpLCBwYWludEludmFsaWRh
dGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRlbnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVu
dHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJl
Y3QpKTsKQEAgLTQ4NDcsNyArNDg0Nyw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVp
Z2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAg
ICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgotICAgIE51
bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFs
aWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChm
cmFtZVJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2FzdDxpbnQ+
KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3RhdGljX2Nh
c3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93UmVjdCgp
Lm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3ApKSk7CiAg
ICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQuY3BwCmluZGV4IDlmZDI1ZDgwYWQxMmRjOTFkZDExZjkxNTk4ZmM2YzhlZmE0Y2IyYTIu
LjM3ZTI4NzVmOTE5MTU2OGViY2RlZmMxYzQ3YjRkMGYyNWNjMGFhYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuY3BwCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCwgR3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlD
b250ZXh0KQotICAgIDogbV9wcmltYXJ5Q29udGV4dChwcmltYXJ5Q29udGV4dCkKKyAgICA6IEdy
YXBoaWNzQ29udGV4dChwcmltYXJ5Q29udGV4dC5jbGlwQm91bmRzKCksIHsgfSwgcHJpbWFyeUNv
bnRleHQuZ2V0Q1RNKCkpCisgICAgLCBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250ZXh0KQog
ICAgICwgbV9zZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeUNvbnRleHQpCiB7CiB9CkBAIC00OCwz
OCArNDksNDggQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c2F2ZSgpCisjaWYgVVNFKENHKQorYm9vbCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpp
c0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgbm90IHVz
aW5nIHRoZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0J3Mgc3RhdGUgc3RhY2sgYXQgYWxsLAot
ICAgIC8vIGFuZCBtYWtpbmcgYWxsIG9mIHRoZSBzdGF0ZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHZp
cnR1YWwuCi0gICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5zYXZlKCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNhdmUoKTsKKyAgICByZXR1cm4gbV9w
cmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQogewotICAgIEdyYXBo
aWNzQ29udGV4dDo6cmVzdG9yZSgpOwotICAgIG1fcHJpbWFyeUNvbnRleHQucmVzdG9yZSgpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yZXN0b3JlKCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5z
ZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOwogfQogCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KQogewotICAg
IG1fcHJpbWFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLSAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBt
X3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250
ZXh0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNB
Y2NlbGVyYXRlZENvbnRleHQpOwogfQorI2VuZGlmCiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQb2lu
dCYgdG8pCitSZW5kZXJpbmdNb2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmlu
Z01vZGUoKSBjb25zdAogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8p
OwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CisgICAgcmV0dXJu
IG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2F2ZUltcGwoKQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQuZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdFbGxp
cHNlKHJlY3QpOworICAgIC8vIEZJWE1FOiBDb25zaWRlciBub3QgdXNpbmcgdGhlIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQncyBzdGF0ZSBzdGFjayBhdCBhbGwsCisgICAgLy8gYW5kIG1ha2lu
ZyBhbGwgb2YgdGhlIHN0YXRlIGdldHRlcnMgYW5kIHNldHRlcnMgdmlydHVhbC4KKyAgICBtX3By
aW1hcnlDb250ZXh0LnNhdmVJbXBsKCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNhdmVJbXBs
KCk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZUltcGwoKQor
eworICAgIG1fcHJpbWFyeUNvbnRleHQucmVzdG9yZUltcGwoKTsKKyAgICBtX3NlY29uZGFyeUNv
bnRleHQucmVzdG9yZUltcGwoKTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjphcHBseVN0YXRlQ2hhbmdlcygpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOwog
fQogCiAjaWYgVVNFKENHKQpAQCAtOTYsNDAgKzEwNyw1MiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogfQogI2VuZGlmCiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOworICAgIG1fcHJpbWFyeUNvbnRleHQuYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5maWxsUGF0aChwYXRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7
CisgICAgbV9wcmltYXJ5Q29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcEltcGwoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBJbXBs
KHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwSW1wbChyZWN0KTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoSW1wbChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgbV9zZWNvbmRhcnlDb250
ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgbV9wcmltYXJ5Q29udGV4
dC5jbGlwUGF0aEltcGwocGF0aCwgd2luZFJ1bGUpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5j
bGlwUGF0aEltcGwocGF0aCwgd2luZFJ1bGUpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y2xpcE91dEltcGwoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fcHJp
bWFyeUNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXRJ
bXBsKHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0SW1wbChyZWN0KTsKIH0K
IAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0IGZhY3RvcikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dElt
cGwoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmFjdG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmYWN0b3IpOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dEltcGwocGF0
aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXRJbXBsKHBhdGgpOworfQorCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVySW1wbChJbWFnZUJ1
ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQorewor
ICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFRvSW1hZ2VCdWZmZXJJbXBsKGltYWdlQnVmZmVyLCBk
ZXN0aW5hdGlvblJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZl
ckltcGwoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAg
ICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuY2xlYXJSZWN0KHJlY3QpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTE0NCwyOCArMTY3LDIyIEBAIHZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJl
Y3QsIGNvbG9yKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91
bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RJbXBsKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQuZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRhcnlD
b250ZXh0LmZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotfQotCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xv
cik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdEltcGwocmVjdCwgZ3JhZGllbnQpOwor
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdEltcGwocmVjdCwgZ3JhZGllbnQpOwogfQog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250
ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSb3VuZGVkUmVj
dChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdChy
ZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwg
bGluZVdpZHRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBsaW5l
V2lkdGgpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCiB2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgZWxsaXBzZSkKQEAgLTE3NCw5MyArMTkxLDk2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkK
K3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgbV9wcmltYXJ5
Q29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFBhdGgo
cGF0aCk7CiB9CiAKLSNpZiBVU0UoQ0cpCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVy
Q29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0SXND
QUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnN0
cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi1ib29sIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkK
IHsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOworICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENv
bnRleHQpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250
ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0SXNB
Y2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOworICAgIG1fcHJpbWFyeUNv
bnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUGF0
aChwYXRoKTsKIH0KLSNlbmRpZgogCi1SZW5kZXJpbmdNb2RlIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKIHsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yZW5kZXJpbmdNb2RlKCk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiBmcm9tLCBjb25zdCBGbG9hdFBvaW50JiB0bykKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LmNsaXAocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXAocmVjdCk7CisgICAgbV9w
cmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LmRyYXdMaW5lKGZyb20sIHRvKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fcHJp
bWFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91
dChyZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9w
cmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlw
T3V0KHBhdGgpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7CisgICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxl
KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFBhdGgocGF0aCwgd2lu
ZFJ1bGUpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7
CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3Rm9jdXNSaW5nKHJlY3RzLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdGb2N1c1JpbmcocmVjdHMsIHdp
ZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotSW50UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuY2xp
cEJvdW5kcygpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZvY3VzUmluZyhwYXRoLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdGb2N1c1Jpbmco
cGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQorI2lmIFBMQVRGT1JNKE1BQykK
K3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiBwYXRoLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVDYXAobGluZUNhcCk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVDYXAobGluZUNhcCk7CisgICAgbV9wcmltYXJ5
Q29udGV4dC5kcmF3Rm9jdXNSaW5nKHBhdGgsIHRpbWVPZmZzZXQsIG5lZWRzUmVkcmF3LCBjb2xv
cik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdGb2N1c1JpbmcocGF0aCwgdGltZU9mZnNl
dCwgbmVlZHNSZWRyYXcsIGNvbG9yKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9m
ZnNldCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
TGluZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0TGluZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0
LmRyYXdGb2N1c1JpbmcocmVjdHMsIHRpbWVPZmZzZXQsIG5lZWRzUmVkcmF3LCBjb2xvcik7Cisg
ICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdGb2N1c1JpbmcocmVjdHMsIHRpbWVPZmZzZXQsIG5l
ZWRzUmVkcmF3LCBjb2xvcik7CiB9CisjZW5kaWYKIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVySW1wbChJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5z
ZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVKb2lu
KGxpbmVKb2luKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlckltcGwoaW1h
Z2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVySW1wbChpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwog
fQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQg
bWl0ZXJMaW1pdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiBmaWx0ZXJS
ZXN1bHRzKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0
KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAg
ICBtX3ByaW1hcnlDb250ZXh0LmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVySW1wbChzb3VyY2VJbWFn
ZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlckltcGwoc291cmNlSW1hZ2UsIHNvdXJj
ZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdl
LCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZShuYXRpdmVJbWFnZSwgc2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd05hdGl2ZUltYWdlKG5hdGl2ZUltYWdlLCBzZWxm
U2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFn
ZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKQEAgLTI2OSwzMSArMjg5LDE2IEBA
IHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5hdGl2ZUlt
YWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5n
LCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdHRlcm4obmF0aXZlSW1h
Z2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmlt
YXJ5Q29udGV4dC5kcmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGls
ZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGls
ZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9w
dGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0
dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGlt
YWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5n
LCBvcHRpb25zKTsKIH0KIAotSW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdQYXR0ZXJuSW1wbChJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3ByaW1hcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGlt
YWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwg
b3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9u
cyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJu
SW1wbChpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuSW1w
bChpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC0zMDQsOTcgKzMwOSwx
MiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShN
ZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbAogfQogI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
IAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNjYWxlKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2NhbGUoc2NhbGUpOwotICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5zY2FsZShzY2FsZSk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIG1fcHJpbWFyeUNv
bnRleHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQucm90
YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnRy
YW5zbGF0ZSh4LCB5KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOwot
fQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNvbmNhdENU
TSh0cmFuc2Zvcm0pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jb25jYXRDVE0odHJhbnNmb3Jt
KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRDVE0o
dHJhbnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7Ci19
Ci0KLUFmZmluZVRyYW5zZm9ybSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5j
bHVkZURldmljZVNjYWxlIGluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9wcmltYXJ5Q29udGV4dC5nZXRDVE0oaW5jbHVkZURldmljZVNjYWxlKTsKLX0KLQotRmxvYXRS
ZWN0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQotewotICAgIHJldHVy
biBtX3ByaW1hcnlDb250ZXh0LnJvdW5kVG9EZXZpY2VQaXhlbHMocmVjdCwgcm91bmRpbmdNb2Rl
KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZvY3VzUmlu
ZyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3Rm9jdXNSaW5nKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9w
cmltYXJ5Q29udGV4dC5kcmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ZvY3VzUmluZyhwYXRoLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcik7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZz
ZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5kcmF3Rm9jdXNSaW5nKHBhdGgsIHRpbWVPZmZzZXQsIG5lZWRzUmVkcmF3LCBj
b2xvcik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdGb2N1c1JpbmcocGF0aCwgdGltZU9m
ZnNldCwgbmVlZHNSZWRyYXcsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91
YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3Rm9jdXNSaW5nKHJlY3RzLCB0aW1lT2Zmc2V0LCBu
ZWVkc1JlZHJhdywgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3Rm9jdXNSaW5n
KHJlY3RzLCB0aW1lT2Zmc2V0LCBuZWVkc1JlZHJhdywgY29sb3IpOwotfQotI2VuZGlmCi0KLUZs
b2F0U2l6ZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCi17Ci0gICAgYXV0
byBzaXplID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3VGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBm
cm9tLCB0byk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwg
cG9pbnQsIGZyb20sIHRvKTsKLSAgICByZXR1cm4gc2l6ZTsKLX0KLQogdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGlu
Z01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3R2x5
cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhp
bmdNb2RlKTsKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9u
dENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYg
bWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHRvKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0VtcGhhc2lzTWFy
a3MoY2FzY2FkZSwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC5kcmF3RW1waGFzaXNNYXJrcyhjYXNjYWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9t
LCB0byk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdCaWRp
VGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3QmlkaVRleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgY3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKLX0KLQogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKIHsKICAgICBtX3ByaW1hcnlDb250ZXh0
LmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91
YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKQEAgLTQwNywxNiArMzI3LDkgQEAgdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihyZWN0LCBtYXJrZXJTdHlsZSk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVybCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3QpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7Ci19Ci0KLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAogewotICAgIG1fcHJpbWFy
eUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOwotICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAgcmV0dXJu
IG1fcHJpbWFyeUNvbnRleHQuc3VwcG9ydHNJbnRlcm5hbExpbmtzKCk7CiB9CiAKIHZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCkBAIC00MjUsMTggKzMzOCwxNiBAQCB2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFkZERlc3RpbmF0
aW9uQXRQb2ludChuYW1lLCBwb2ludCk7CiB9CiAKLWJvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnN1cHBv
cnRzSW50ZXJuYWxMaW5rcygpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25G
b3JSZWN0KG5hbWUsIHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlv
bkZvclJlY3QobmFtZSwgcmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVybCwgY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIC8vIFRoaXMgY2FsbHMgdXBkYXRlU3RhdGUoKSBpbnN0ZWFk
IG9mIGRpZFVwZGF0ZVN0YXRlKCkgc28gdGhhdCBjaGFuZ2VzCi0gICAgLy8gYXJlIGFsc28gYXBw
bGllZCB0byBlYWNoIGNvbnRleHQncyBHcmFwaGljc0NvbnRleHRTdGF0ZSwgc28gdGhhdCBjb2Rl
Ci0gICAgLy8gaW50ZXJuYWwgdG8gdGhlIGNoaWxkIGNvbnRleHRzIHRoYXQgcmVhZHMgZnJvbSB0
aGUgc3RhdGUgZ2V0cyB0aGUgcmlnaHQgdmFsdWVzLgotICAgIG1fcHJpbWFyeUNvbnRleHQudXBk
YXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQudXBkYXRlU3Rh
dGUoc3RhdGUsIGZsYWdzKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJs
LCByZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3Qp
OwogfQogCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShDQUlSTykKQEAgLTQ0Niw1ICszNTcsMTgg
QEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnQKIH0KICNlbmRpZgogCisKKwordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikK
K3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsK
KyAgICBtX3NlY29uZGFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwor
fQorCitGbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCit7
CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91bmRUb0RldmljZVBpeGVscyhyZWN0LCBy
b3VuZGluZ01vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQuaAppbmRleCBmNThiMzRjOTE0MzQyYjczNzc3MjdjMTFhNzNiNmQ4MjE4ZTE1NTZm
Li5iMTVmMmE3YmY2ZjcwYzc1YWE5OTdlNGE5NzFmOGZmYTc5YTg2NmY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dC5oCkBAIC00Myw4MyArNDMsNTQgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGxh
dGZvcm1Db250ZXh0KCkgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAg
dm9pZCByZXN0b3JlKCkgZmluYWw7CisjaWYgVVNFKENHKQorICAgIGJvb2wgaXNDQUxheWVyQ29u
dGV4dCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBm
aW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29s
KSBmaW5hbDsKKyNlbmRpZgorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0
IGZpbmFsOwogCisgICAgdm9pZCBzYXZlSW1wbCgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZUlt
cGwoKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNF
KENHKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBs
eUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBh
dGgmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKSBmaW5hbDsKIAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBm
YWN0b3IpIGZpbmFsOworICAgIHZvaWQgY2xpcEltcGwoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisgICAgdm9pZCBjbGlwUGF0aEltcGwoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6
OkV2ZW5PZGQpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dEltcGwoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CisgICAgdm9pZCBjbGlwT3V0SW1wbChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9p
ZCBjbGlwVG9JbWFnZUJ1ZmZlckltcGwoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkgZmluYWw7CisKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7CiAgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91
bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFs
OwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFs
OwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQg
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOworICAg
IHZvaWQgZmlsbFJlY3RJbXBsKGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAog
ICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLSAg
ICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLQot
I2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7Ci0g
ICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0KLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotCi0gICAgdm9pZCBj
bGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7
Ci0KLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgc2V0
TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGlu
ZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0KLSAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2Vs
ZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lkIGRy
YXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAg
IHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgSW1h
Z2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdS
ZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVS
dWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotCi0jaWYgRU5B
QkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKLQotICAgIHVzaW5nIEdy
YXBoaWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBm
aW5hbDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAg
dm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0KLSAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0o
SW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZp
bmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBGbG9h
dFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUg
PSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7CiAK
KyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQg
ZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIAogICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKICNpZiBQTEFURk9STShNQUMpCkBAIC0xMjcsMjMgKzk4LDI2
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBG
bG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiB0byA9IHN0ZDo6bnVsbG9wdCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUp
IGZpbmFsOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYs
IHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVs
bG9wdCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250
Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBm
aW5hbDsKKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlckltcGwoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
ckltcGwoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIHZvaWQgZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0
ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuSW1wbChJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcGFpbnRGcmFtZUZvck1l
ZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Cisj
ZW5kaWYKIAorICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25z
dCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwogICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cywgU3Ryb2tlU3R5bGUpIGZpbmFsOwotCiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKIAot
ICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLQotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0KICAgICBib29s
IHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGlu
YXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFs
OworICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKSBmaW5hbDsKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKIAogI2lmIE9T
KFdJTkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlLmNwcAppbmRleCBiYjRkYWMwMTljNWI5ZTEzYjEzN2FlNjk0ZTRiZjZiMjc2YmZjYzBk
Li4xYzFiOTZlYzViOTgzY2M1ZjE4ZDZmZjFmZDI1ODU3ZmE5NDNjNDFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJh
dGVkSW1hZ2UuY3BwCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1h
Z2U6OmRyYXdDcm9zc2ZhZGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogSW1hZ2VEcmF3UmVz
dWx0IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2Rl
KCkpOworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAoZHN0UmVj
dCk7CiAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAo
ZHN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDI1YTNkM2Zl
ODc3MzMxZGRhMzk1NzgwMTFiNmQ4OTBmMjEyYzcyZTYuLjFkZTRmMzNkMzQzMTMxNmMzZjEwNmJj
YjhiN2ViYWJjY2MxODZjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjQgKzI2LDkgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3Iu
aCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CiAKLSNpZiBVU0UoQ09SRV9URVhUKQotI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2lm
IFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgot
I2Vsc2UKLSNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+Ci0jZW5kaWYKLSNpbmNs
dWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsKQEAgLTYyLDc2ICs0NywzMiBAQCBwdWJsaWM6
CiAjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKICAgICB2b2lkIGRyYXdOYXRp
dmVUZXh0KENURm9udFJlZiwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lUmVmLCBDR1JlY3QgbGlu
ZVJlY3QpOwogCi0gICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYs
IENHR1N0YXRlUmVmLCBDR1JlY3QpOwotICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJp
bmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYpOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhDR1Jl
bmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBj
b25zdCBDR0dseXBoW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7
Ci0gICAgdm9pZCByZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVS
ZWYsIENHUmVjdCwgQ0dJbWFnZVJlZik7CisgICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHR1N0
YXRlUmVmKTsKKyAgICB2b2lkIHJlY29yZEVuZExheWVyKENHR1N0YXRlUmVmKTsKKyAgICB2b2lk
IHJlY29yZERyYXdHbHlwaHMoQ0dHU3RhdGVSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQ
b2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KTsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFn
ZShDR0dTdGF0ZVJlZiwgQ0dSZWN0LCBDR0ltYWdlUmVmKTsKICNlbmRpZgogCi0gICAgRGVjb25z
dHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocygpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVjb25zdHJ1Y3REcmF3R2x5cGhzOyB9Ci0KIHByaXZhdGU6Ci0jaWYgVVNFKENPUkVfVEVYVCkg
JiYgIVBMQVRGT1JNKFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJ
bnRlcm5hbENvbnRleHQoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRv
T1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3
T1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFu
Y2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4o
Y29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50
LCBGb250U21vb3RoaW5nTW9kZSk7Ci0KLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHByZXBhcmVJbnRl
cm5hbENvbnRleHQoY29uc3QgRm9udCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGNv
bmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgdm9pZCBzZXRJbnRlcm5hbEZvbnQoY29uc3Qg
Rm9udCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBwcmVw
YXJlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgdm9pZCByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKTsKIAotICAgIHZvaWQg
dXBkYXRlRmlsbENvbG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVy
biogPSBudWxscHRyKTsKLSAgICB2b2lkIHVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiwg
R3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRyKTsKLSAgICB2b2lkIHVwZGF0
ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBlbnVtIGNsYXNzIFNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zIHsKLSAgICAgICAgVW5zcGVjaWZpZWQsCi0gICAgICAgIFllcywKLSAgICAg
ICAgTm8KLSAgICB9OwotICAgIHZvaWQgdXBkYXRlU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hh
ZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLQotI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9S
TShXSU4pCi0gICAgdm9pZCB1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZik7Ci0jZW5kaWYKKyAgICB2
b2lkIGRyYXdOb25PVFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCos
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd09U
U1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFy
dFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRv
T1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCYgbV9vd25lcjsKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fZGVzdGluYXRpb25Db250
ZXh0OwogICAgIERlY29uc3RydWN0RHJhd0dseXBocyBtX2RlY29uc3RydWN0RHJhd0dseXBoczsK
ICAgICBEZXJpdmVGb250RnJvbUNvbnRleHQgbV9kZXJpdmVGb250RnJvbUNvbnRleHQ7CiAKLSNp
ZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGlj
c0NvbnRleHQ+IG1faW50ZXJuYWxDb250ZXh0OwotI2VuZGlmCi0KICAgICBjb25zdCBGb250KiBt
X29yaWdpbmFsRm9udCB7IG51bGxwdHIgfTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290
aGluZ01vZGUgeyBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX29yaWdpbmFsVGV4dE1hdHJpeDsKIAotICAgIHN0cnVjdCBTdGF0ZSB7Ci0g
ICAgICAgIHN0cnVjdCBTdHlsZSB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAg
ICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQ7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBw
YXR0ZXJuOwotICAgICAgICB9OwotICAgICAgICBTdHlsZSBmaWxsU3R5bGU7Ci0gICAgICAgIFN0
eWxlIHN0cm9rZVN0eWxlOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0KLSAgICAg
ICAgc3RydWN0IFNoYWRvd1N0YXRlIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0g
ICAgICAgICAgICBmbG9hdCBibHVyIHsgMCB9OwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0g
ICAgICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybXMgeyBmYWxzZSB9OwotICAgICAgICB9Owot
ICAgICAgICBTaGFkb3dTdGF0ZSBzaGFkb3c7Ci0gICAgfTsKLSAgICBTdGF0ZSBtX29yaWdpbmFs
U3RhdGU7Ci0gICAgU3RhdGUgbV9jdXJyZW50U3RhdGU7CisjaWYgVVNFKENPUkVfVEVYVCkgJiYg
IVBMQVRGT1JNKFdJTikKKyAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFs
Q29udGV4dDsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg1MTgw
YWQxMDlmZDgxOGU5YmIxNTg4Y2U5NjJhYjQ2MzA4MTZhMDkuLjliNmFkZDA1ZmFiYzZlMmM5ZDBi
NTUwNzcxY2Y0OGFkZDU2Nzg5ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNwbGF5
TGlzdEZvclRleAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IGRpc3BsYXlMaXN0ID0gbWFr
ZVVuaXF1ZTxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4oKTsKLSAgICBEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBjb250ZXh0
LnN0YXRlKCksIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgRHJhd0dseXBoc1JlY29y
ZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKTsKKyAgICBEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoKSwgQWZmaW5l
VHJhbnNmb3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpO
byk7CiAgICAgCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gdG9GbG9hdFBvaW50KFdlYkNv
cmU6OnNpemUoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKSkpOwogICAgIGRyYXdHbHlwaEJ1
ZmZlcihyZWNvcmRpbmdDb250ZXh0LCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCwgY3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnRJbWFnZS5jcHAKaW5kZXggNjQ1ODRlNWNmZTAxMTg4MmVmYWIyZTIzYzNhNTk0
ZTE3ODJmMjg5MC4uMmY4MjdmNjI1ZjY0YjU5Y2ExYTY2NDk2MDczMGYwM2MyM2JjMzdhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5j
cHAKQEAgLTQzLDcgKzQzLDcgQEAgR3JhZGllbnRJbWFnZTo6fkdyYWRpZW50SW1hZ2UoKSA9IGRl
ZmF1bHQ7CiBJbWFnZURyYXdSZXN1bHQgR3JhZGllbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihkZXN0Q29udGV4dCk7Ci0gICAg
ZGVzdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgZGVzdENvbnRleHQuc2V0Q29tcG9zaXRl
TW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9
KTsKICAgICBkZXN0Q29udGV4dC5jbGlwKGRlc3RSZWN0KTsKICAgICBkZXN0Q29udGV4dC50cmFu
c2xhdGUoZGVzdFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBz
cmNSZWN0LnNpemUoKSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBHcmFkaWVudEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGQK
ICAgICBtX2dyYWRpZW50LT5hZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKGFkanVzdGVk
U2l6ZSwgYWRqdXN0ZWRTcmNSZWN0LCBzcGFjaW5nKTsKIAogICAgIC8vIEZhY3RvciBpbiB0aGUg
ZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29s
dXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5n
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oKTsK
ICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7CiAgICAg
ZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAK
aW5kZXggMGJiMTM1OTdjZWE3MzY5ZGJiYzZlMTcyN2YyNmM5MmI4ZmI3NTE3Ni4uMzFkOTllOWI3
ZTU1NGQxMjIwNDIyNjZmMmI5OTBmYzBmY2E4ZGY0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zNiw3ICszNiw2
IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiU3lzdGVtSW1hZ2UuaCIK
ICNpbmNsdWRlICJUZXh0UnVuLmgiCkBAIC03Niw0MzMgKzc1LDM0NCBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIG1fb2Zmc2V0OwogfTsKIAotI2RlZmluZSBDSEVDS19GT1JfQ0hBTkdFRF9QUk9Q
RVJUWShmbGFnLCBwcm9wZXJ0eSkgXAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0eSAhPSBzdGF0ZS5w
cm9wZXJ0eSkpIFwKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpmbGFnKTsKLQotR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkK
LSAgICA6IHNob3VsZEFudGlhbGlhcyh0cnVlKQotICAgICwgc2hvdWxkU21vb3RoRm9udHModHJ1
ZSkKLSAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyh0cnVlKQotICAgICwgc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0gICAgLCBkcmF3THVtaW5hbmNlTWFzayhmYWxzZSkK
K0dyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2VGbGFncyYgY2hhbmdlRmxh
Z3MsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fc3RhdGUoaW5p
dGlhbENsaXAsIGNoYW5nZUZsYWdzLCBpbml0aWFsQ1RNKQogewogfQogCi1HcmFwaGljc0NvbnRl
eHRTdGF0ZTo6fkdyYXBoaWNzQ29udGV4dFN0YXRlKCkgPSBkZWZhdWx0OwotR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JikgPSBkZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRl
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJikgPSBkZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpvcGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJikgPSBkZWZhdWx0OwotCi12b2lk
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFn
cykKK0dyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7Ci0gICAgYXV0byBzdHJv
a2VGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0
cm9rZUZsYWdzKSkgewotICAgICAgICBzdHJva2VDb2xvciA9IHN0YXRlLnN0cm9rZUNvbG9yOwot
ICAgICAgICBzdHJva2VHcmFkaWVudCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgICAgICBz
dHJva2VQYXR0ZXJuID0gc3RhdGUuc3Ryb2tlUGF0dGVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGZp
bGxGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGZpbGxGbGFn
cykpIHsKLSAgICAgICAgZmlsbENvbG9yID0gc3RhdGUuZmlsbENvbG9yOwotICAgICAgICBmaWxs
R3JhZGllbnQgPSBzdGF0ZS5maWxsR3JhZGllbnQ7Ci0gICAgICAgIGZpbGxQYXR0ZXJuID0gc3Rh
dGUuZmlsbFBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIHNoYWRvd09mZnNldCA9IHN0
YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7
Ci0gICAgICAgIHNoYWRvd0NvbG9yID0gc3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIHNoYWRv
d1JhZGl1c01vZGUgPSBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwotICAgIH0KLQotICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
KSkKLSAgICAgICAgc3Ryb2tlVGhpY2tuZXNzID0gc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UpKQotICAgICAgICB0ZXh0RHJhd2luZ01vZGUgPSBzdGF0ZS50ZXh0RHJhd2luZ01v
ZGU7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgc3Ryb2tlU3R5bGUgPSBzdGF0ZS5zdHJva2VTdHlsZTsK
LQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVD
aGFuZ2UpKQotICAgICAgICBmaWxsUnVsZSA9IHN0YXRlLmZpbGxSdWxlOworICAgIEFTU0VSVCht
X3N0YWNrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQp
OworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBo
YUNoYW5nZSkpCi0gICAgICAgIGFscGhhID0gc3RhdGUuYWxwaGE7Cit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2F2ZSgpCit7CisgICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7CisgICAgc2F2ZUlt
cGwoKTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVu
ZE1vZGVDaGFuZ2UgfSkpIHsKLSAgICAgICAgY29tcG9zaXRlT3BlcmF0b3IgPSBzdGF0ZS5jb21w
b3NpdGVPcGVyYXRvcjsKLSAgICAgICAgYmxlbmRNb2RlID0gc3RhdGUuYmxlbmRNb2RlOwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQoreworICAgIGlmIChtX3N0YWNrLmlzRW1wdHko
KSkgeworICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hh
bmdlKSkKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gc3RhdGUuc2hvdWxkQW50aWFsaWFzOwor
ICAgIG1fc3RhdGUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAg
ICAgc2hvdWxkU21vb3RoRm9udHMgPSBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKKyAgICAvLyBN
YWtlIHN1cmUgd2UgZGVhbGxvY2F0ZSB0aGUgc3RhdGUgc3RhY2sgYnVmZmVyIHdoZW4gaXQgZ29l
cyBlbXB0eS4KKyAgICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkg
YWdhaW4sIGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHkuCisgICAgaWYgKG1fc3Rh
Y2suaXNFbXB0eSgpKQorICAgICAgICBtX3N0YWNrLmNsZWFyKCk7CiAKLSAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
c0NoYW5nZSkpCi0gICAgICAgIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKKyAgICByZXN0b3JlSW1wbCgpOworfQogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc3RhdGUu
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CitGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2Fs
ZUZhY3RvcigpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENU
TSgpOworICAgIHJldHVybiBGbG9hdFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0u
eVNjYWxlKCkpOworfQorICAgIAorRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0
b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCkgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RN
KCk7CisgICAgYXV0byB0cmFuc2Zvcm1lZERlc3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVz
dFJlY3QpOworICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Qu
c2l6ZSgpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIGRyYXdMdW1pbmFuY2VNYXNrID0g
c3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCkKK3sKKyAgICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsK
K30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIGltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkgPSBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5Owordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV90cmFuc3BhcmVu
Y3lMYXllckNvdW50ID4gMCk7CisgICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7Cit9CiAK
LSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChmbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICB1
c2VEYXJrQXBwZWFyYW5jZSA9IHN0YXRlLnVzZURhcmtBcHBlYXJhbmNlOwotI2VuZGlmCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX3N0YXRlLmNsaXAocmVjdCk7CisgICAgY2xpcEltcGwo
cmVjdCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKLSAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFnczsKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIG1fc3RhdGUuY2xpcChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7CisgICAg
Y2xpcFBhdGhJbXBsKHBhdGgsIHdpbmRSdWxlKTsKK30KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKFN0cm9rZUdyYWRpZW50Q2hhbmdlLCBzdHJva2VHcmFkaWVudCk7Ci0gICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlUGF0dGVybkNoYW5nZSwgc3Ryb2tlUGF0dGVy
bik7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbEdyYWRpZW50Q2hhbmdlLCBm
aWxsR3JhZGllbnQpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxQYXR0ZXJu
Q2hhbmdlLCBmaWxsUGF0dGVybik7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCit7CisgICAgUGF0aCBwYXRoOworICAg
IHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7CisgICAgY2xpcFBhdGgocGF0aCk7Cit9CiAKLSAg
ICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKQotICAgICAgICAmJiAobV9zdGF0ZS5zaGFkb3dPZmZzZXQgIT0gc3RhdGUuc2hhZG93
T2Zmc2V0Ci0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0JsdXIgIT0gc3RhdGUuc2hhZG93
Qmx1cgotICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dDb2xvciAhPSBzdGF0ZS5zaGFkb3dD
b2xvcikpCi0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hh
ZG93Q2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3sKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGNsaXBPdXRJbXBsKHJl
Y3QpOworfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZ
KFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4dERyYXdpbmdNb2RlKTsKLSAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xvckNoYW5nZSwgc3Ryb2tlQ29sb3IpOwotICAgIENI
RUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKLSAg
ICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5
bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxs
UnVsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhh
KTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBjbGlwT3V0SW1wbChwYXRoKTsKK30KIAotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNv
bXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNo
YW5nZSB9KQotICAgICAgICAmJiAobV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciAhPSBzdGF0ZS5j
b21wb3NpdGVPcGVyYXRvciB8fCBtX3N0YXRlLmJsZW5kTW9kZSAhPSBzdGF0ZS5ibGVuZE1vZGUp
KSB7Ci0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9z
aXRlT3BlcmF0aW9uQ2hhbmdlKTsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIGlmICgh
cmVjdC5pc1JvdW5kZWQoKSkgeworICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3Vs
ZEFudGlhbGlhc0NoYW5nZSwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShTaG91bGRTbW9vdGhGb250c0NoYW5nZSwgc2hvdWxkU21vb3RoRm9udHMpOwot
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
c0NoYW5nZSwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKERyYXdMdW1pbmFu
Y2VNYXNrQ2hhbmdlLCBkcmF3THVtaW5hbmNlTWFzayk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURf
UFJPUEVSVFkoSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSwgaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIENIRUNL
X0ZPUl9DSEFOR0VEX1BST1BFUlRZKFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlLCB1c2VEYXJrQXBw
ZWFyYW5jZSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBjaGFuZ2VGbGFnczsKKyAgICBQYXRoIHBh
dGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwT3V0KHBhdGgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3MpOwotCi0gICAgYXV0
byBzdHJva2VGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
QW55KHN0cm9rZUZsYWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoc3Ryb2tlRmxh
Z3MpOwotCi0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5j
b250YWluc0FueShmaWxsRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShmaWxs
RmxhZ3MpOwotCi0gICAgYXV0byBjb21wb3NpdGVPcGVyYXRvckZsYWdzID0geyBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6QmxlbmRNb2RlQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGNvbXBvc2l0
ZU9wZXJhdG9yRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShjb21wb3NpdGVP
cGVyYXRvckZsYWdzKTsKLQotICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGZsYWdzKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIGNsaXBUb0ltYWdlQnVmZmVySW1wbChpbWFnZUJ1ZmZlciwg
ZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBUb0ltYWdlQnVmZmVySW1wbChJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpCi0gICAg
ICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3JhZGllbnQsIG1f
c3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkp
Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlUGF0dGVybigqbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgq
bV9zdGF0ZS5maWxsR3JhZGllbnQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqbV9z
dGF0ZS5maWxsUGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAg
ICBjb250ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1f
c3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29s
b3IsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobV9zdGF0ZS5zdHJva2VUaGlja25lc3Mp
OwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdN
b2RlKG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IobV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0KLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hh
bmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IobV9zdGF0ZS5maWxsQ29sb3IpOwot
Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRl
LnN0cm9rZVN0eWxlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbFJ1
bGUobV9zdGF0ZS5maWxsUnVsZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEFs
cGhhKG1fc3RhdGUuYWxwaGEpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnNBbnko
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKQotICAgICAgICBjb250ZXh0LnNldENv
bXBvc2l0ZU9wZXJhdGlvbihtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBtX3N0YXRlLmJsZW5k
TW9kZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRTbW9vdGhGb250cyhtX3N0YXRlLnNob3VsZFNt
b290aEZvbnRzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBj
b250ZXh0LnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhtX3N0YXRlLnNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpKQotICAgICAgICBjb250
ZXh0LnNldERyYXdMdW1pbmFuY2VNYXNrKG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkobV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKLQot
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAg
ICAgICAgY29udGV4dC5zZXRVc2VEYXJrQXBwZWFyYW5jZShtX3N0YXRlLnVzZURhcmtBcHBlYXJh
bmNlKTsKLSNlbmRpZgorICAgIGltYWdlQnVmZmVyLmNsaXBUb01hc2soKnRoaXMsIGRlc3RpbmF0
aW9uUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4
dFN0cmVhbSYgdHMpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdlLWZs
YWdzIiwgbV9jaGFuZ2VGbGFncy50b1JhdygpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWdyYWRpZW50IiwgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudC5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgic3Ryb2tlLXBhdHRlcm4iLCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOworICAgIENv
bXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsK
KyAgICBzZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKKyAgICBmaWxsUmVjdChy
ZWN0LCBjb2xvcik7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3Ip
OworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1n
cmFkaWVudCIsIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkK
K3sKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGZpbGxSZWN0SW1wbChyZWN0LCBncmFk
aWVudCk7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZp
bGwtcGF0dGVybiIsIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0SW1wbChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFk
aWVudCkKK3sKKyAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKK30KIAotICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
KSB7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRv
d0JsdXIpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRl
LnNoYWRvd09mZnNldCk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWNvbG9yIiwg
bV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11
c2UtbGVnYWN5LXJhZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRp
dXNNb2RlOjpMZWdhY3kpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCit7CisgICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAgIGZp
bGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9k
ZSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgICAgIAorICAgIENvbXBvc2l0ZU9wZXJh
dG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICBzZXRDb21w
b3NpdGVNb2RlKHsgcHJldmlvdXNPcGVyYXRvciwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxSb3Vu
ZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3Vz
T3BlcmF0b3IpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic3Ryb2tlLXRoaWNrbmVzcyIsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJh
d2luZ01vZGVDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRleHQtZHJhd2luZy1t
b2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2Up
KQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1jb2xvciIsIG1fc3RhdGUuc3Ryb2tl
Q29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1j
b2xvciIsIG1fc3RhdGUuZmlsbENvbG9yKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIFBhdGgg
cGF0aDsKKyAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tlU3R5bGUpOwor
ICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCisgICAgICAgIHBhdGgu
YWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHBhdGgu
YWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1ydWxlIiwgbV9zdGF0ZS5maWxsUnVsZSk7CisgICAgV2lu
ZFJ1bGUgb2xkRmlsbFJ1bGUgPSBmaWxsUnVsZSgpOworICAgIENvbG9yIG9sZEZpbGxDb2xvciA9
IGZpbGxDb2xvcigpOworICAgIAorICAgIHNldEZpbGxSdWxlKFdpbmRSdWxlOjpFdmVuT2RkKTsK
KyAgICBzZXRGaWxsQ29sb3IoY29sb3IpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJhbHBoYSIsIG1fc3RhdGUuYWxwaGEpOworICAgIGZpbGxQYXRoKHBhdGgpOworICAg
IAorICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmls
bENvbG9yKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpOwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2Up
OworICAgIGZpbGxQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIG1fc3RhdGUuYmxlbmRNb2RlKTsKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkK
K3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2UpOworICAgIHN0
cm9rZVBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJzaG91bGQtYW50aWFsaWFzIiwgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
KQoreworICAgIGF1dG8gb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CisgICAgYXV0byBvbGRT
dHJva2VDb2xvciA9IHN0cm9rZUNvbG9yKCk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgtZm9udHMiLCBtX3N0YXRlLnNob3Vs
ZFNtb290aEZvbnRzKTsKKyAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOworICAgIHNldFN0
cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKKyAgICBkcmF3RWxsaXBzZShGbG9hdFJlY3QocmVjdC54
KCksIHJlY3QueSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAKLSAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91
bGQtc3VicGl4ZWwtcXVhbnRpemUtZm9udHMiLCBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cyk7CisgICAgc2V0RmlsbENvbG9yKGVsbGlwc2VDb2xvcik7CisgICAgc2V0U3Ryb2tl
Q29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBkcmF3RWxsaXBzZShyZWN0KTsKIAotICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy1pZ25v
cmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9yKG9sZFN0cm9rZUNv
bG9yKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZHJhdy1sdW1pbmFuY2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgZmls
bFBhdGgocGF0aCk7CisgICAgc3Ryb2tlUGF0aChwYXRoKTsKK30KIAotI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJ1c2UtZGFyay1hcHBlYXJhbmNlIiwgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSk7
Ci0jZW5kaWYKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworICAgIGRyYXdJbWFnZUJ1ZmZl
cihpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxv
YXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsK
IH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9u
cykKIHsKLSAgICBzdGF0ZUNoYW5nZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7CisgICAgZHJh
d0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9n
aWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0
Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNw
YXJlbmN5TGF5ZXJDb3VudCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBkcmF3SW1h
Z2VCdWZmZXJJbXBsKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZUJ1ZmZlckltcGwoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7CisgICAgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3Bl
KCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGltYWdlLmRyYXco
KnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cmVzdG9yZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0lt
YWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCiB7Ci0gICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigi
RVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOwor
ICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlID0g
bV9zdGFjay5sYXN0KCk7Ci0gICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7Ci0KLSAgICAvLyBNYWtl
IHN1cmUgd2UgZGVhbGxvY2F0ZSB0aGUgc3RhdGUgc3RhY2sgYnVmZmVyIHdoZW4gaXQgZ29lcyBl
bXB0eS4KLSAgICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkgYWdh
aW4sIGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHkuCi0gICAgaWYgKG1fc3RhY2su
aXNFbXB0eSgpKQotICAgICAgICBtX3N0YWNrLmNsZWFyKCk7CisgICAgYXV0byBpbWFnZUxvZ2lj
YWxTaXplID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFdURk1vdmUoaW1hZ2UpLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlTG9naWNhbFNp
emUpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlv
bnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBmbGFncykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewot
ICAgIG1fc3RhdGUubWVyZ2VDaGFuZ2VzKHN0YXRlLCBmbGFncyk7Ci0gICAgZGlkVXBkYXRlU3Rh
dGUoc3RhdGUsIGZsYWdzKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAg
YXV0byBpbWFnZUxvZ2ljYWxTaXplID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgZHJhd0Nv
bnN1bWluZ0ltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0
KHsgfSwgaW1hZ2VMb2dpY2FsU2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgc2F2ZSgpOwotCi0gICAgc2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IpOwotICAgIHNldEZp
bGxDb2xvcihzaGFkb3dDb2xvcik7Ci0KLSAgICBkcmF3RWxsaXBzZShGbG9hdFJlY3QocmVjdC54
KCksIHJlY3QueSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CisgICAgaWYg
KCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRl
cnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZN
b3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOworfQogCi0g
ICAgc2V0U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKLSAgICBzZXRGaWxsQ29sb3IoZWxsaXBz
ZUNvbG9yKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKK3sKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworICAgIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVySW1wbChzb3VyY2VJbWFn
ZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOworfQogCi0gICAgZHJhd0VsbGlw
c2UocmVjdCk7ICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
ckltcGwoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCit7CisgICAg
YXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwg
cmVzdWx0cyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybjsKIAotICAgIHJlc3RvcmUoKTsKKyAgICBzY2FsZSh7IDEg
LyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCku
aGVpZ2h0KCkgfSk7CisgICAgZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgcmVzdWx0LT5h
YnNvbHV0ZUltYWdlUmVjdCgpKTsKKyAgICBzY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29s
b3IpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3Ig
PSBjb2xvcjsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0
YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7CisgICAgcmV0dXJuIGRy
YXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBv
ZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hhZG93UmFkaXVzTW9kZSBy
YWRpdXNNb2RlKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUuc2hhZG93
T2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgbV9z
dGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9
IHJhZGl1c01vZGU7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd0NoYW5nZSk7CisgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgp
LCBpbWFnZS5zaXplKGltYWdlUGFpbnRpbmdPcHRpb25zLm9yaWVudGF0aW9uKCkpKTsKKyAgICBy
ZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCwgaW1hZ2VQYWludGlu
Z09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQorSW1h
Z2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUuc2hhZG93T2Zm
c2V0ID0gRmxvYXRTaXplKCk7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsKLSAgICBtX3N0
YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKLSAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUg
PSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOworICAgIEludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywg
b3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhdygq
dGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLWJvb2wgR3JhcGhpY3ND
b250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYg
Y29sb3IpIGNvbnN0CitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICBvZmZzZXQgPSBtX3N0YXRlLnNoYWRvd09mZnNldDsKLSAgICBibHVyID0gbV9zdGF0ZS5zaGFk
b3dCbHVyOwotICAgIGNvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKLQotICAgIHJldHVybiBo
YXNTaGFkb3coKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xh
dGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxp
dHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK0ltYWdlRHJhd1Jlc3VsdCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNjYWxlRmFjdG9yLAorICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRp
bGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0g
bnVsbHB0cjsKLSAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsK
KyAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpT
dHJldGNoVGlsZSkgeworICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCisgICAgICAgIHJldHVy
biBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOworICAgIH0K
KworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0
eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAg
ICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxl
U2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+
JiYgcGF0dGVybikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVt
SW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsK
LSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUocGF0dGVy
bik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVBhdHRlcm5DaGFuZ2UpOworICAgIHN5c3RlbUltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0
aW9uUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8
UGF0dGVybj4mJiBwYXR0ZXJuKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKElt
YWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9
IHsgfTsKLSAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5m
aWxsUGF0dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworICAgIGRyYXdQYXR0ZXJuSW1wbChpbWFnZSwgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3Jh
ZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybkltcGwoSW1hZ2VCdWZmZXImIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07Ci0gICAg
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwotICAgIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zv
cm07Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2Up
OworICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCisjaWYgRU5BQkxF
KFZJREVPKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewotICAgIG1fc3Rh
dGUuZmlsbENvbG9yID0geyB9OwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZShn
cmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRy
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
R3JhZGllbnRDaGFuZ2UpOwotICAgIC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KKyAgICBw
bGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywg
ZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsK
LSAgICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKKyAgICBGb250Q2FzY2FkZTo6ZHJhd0ds
eXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9u
dFNtb290aGluZ01vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsK
LSAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCk7Ci0gICAgLS1tX3RyYW5z
cGFyZW5jeUxheWVyQ291bnQ7CisgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2Vz
LCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CiAKIEZsb2F0U2l6ZSBH
cmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKQEAgLTUxMSwxMSArNDIxLDYgQEAgRmxvYXRTaXplIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwKICAgICByZXR1cm4gZm9udC5kcmF3VGV4dCgqdGhpcywgcnVuLCBwb2ludCwg
ZnJvbSwgdG8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotewotICAgIEZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1H
bHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCiB7CiAgICAgZm9u
dC5kcmF3RW1waGFzaXNNYXJrcygqdGhpcywgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwpA
QCAtNTQ5LDcgKzQ1NCw0NSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgICAgIGJpZGlS
dW4gPSBiaWRpUnVuLT5uZXh0KCk7CiAgICAgfQogCi0gICAgYmlkaVJ1bnMuY2xlYXIoKTsKKyAg
ICBiaWRpUnVucy5jbGVhcigpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVV
bmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHlsZSkKK3sKKyAgICBkcmF3TGluZXNGb3JUZXh0KHJl
Y3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5IHsgMCwgcmVjdC53aWR0aCgp
IH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHlsZSk7Cit9CisKK0Zsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykKK3sKKyAgICBDb2xvciBkdW1teUNvbG9yOworICAg
IHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KHJlY3Qs
IHByaW50aW5nLCBkdW1teUNvbG9yKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6
Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIENvbG9yJiBjb2xvcikKK3sKKyAgICBGbG9hdFBvaW50
IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBmbG9hdCB0aGlja25lc3MgPSBzdGQ6Om1h
eChyZWN0LmhlaWdodCgpLCAwLjVmKTsKKyAgICBpZiAocHJpbnRpbmcpCisgICAgICAgIHJldHVy
biBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsK
KworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICAvLyBKdXN0
IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3VtaW5nIHggYW5kIHkgc2NhbGVzIGFy
ZSBlcXVhbC4KKyAgICBmbG9hdCBzY2FsZSA9IHRyYW5zZm9ybS5iKCkgPyBzdGQ6Omh5cG90KHRy
YW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJhbnNmb3JtLmEoKTsKKyAgICBpZiAoc2Nh
bGUgPCAxLjApIHsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGFsd2F5cyBkcmF3cyBhIGxpbmUgdGhh
dCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdoLAorICAgICAgICAvLyB3aGljaCB0ZW5k
cyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBzbWFsbCBzY2FsZXMuIFRvIGNvdW50ZXIg
dGhpcworICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhhIGlzIGFwcGxpZWQgdG8gdGhlIHVuZGVy
bGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwgc2NhbGVzLgorICAgICAgICBzdGF0aWMg
Y29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhhID0gMC40ZjsKKyAgICAgICAgZmxvYXQg
c2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA/IHNjYWxlIDogbWluaW11bVVu
ZGVybGluZUFscGhhOworICAgICAgICBjb2xvciA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KHNoYWRlKTsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50IGRldmljZVBvaW50ID0gdHJh
bnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgLy8gVmlzdWFsIG92ZXJmbG93
IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFsIHJvdW5kZi9jZWlsZi4gdmlzdWFsT3Zl
cmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBvdmVyZmxvdyB2YWx1ZSBmb3IgdW5kZXJs
aW5lIGRlY29yYXRpb24uCisgICAgRmxvYXRQb2ludCBkZXZpY2VPcmlnaW4gPSBGbG9hdFBvaW50
KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihkZXZpY2VQb2ludC55KCkpKTsKKyAgICBp
ZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVyc2UoKSkKKyAgICAgICAgb3JpZ2luID0g
aW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9yaWdpbik7CisgICAgcmV0dXJuIEZsb2F0
UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOwogfQogCiBz
dGF0aWMgSW50U2l6ZSBzY2FsZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBGbG9hdFNpemUmIHNjYWxlKQpAQCAtNjM5LDE4NyArNTgyLDkgQEAgUmVmUHRyPElt
YWdlQnVmZmVyPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFJlY3QmIHIKICAgICByZXR1cm4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIocmVjdCwg
c2NhbGVGYWN0b3IoKSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSgpLCByZW5kZXJpbmdNZXRo
b2QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0g
ICAgc3lzdGVtSW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKLX0KLQotSW1hZ2VE
cmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJl
Y3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGlt
YWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQotewotICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6
ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlvbigpKSk7Ci0gICAgcmV0dXJuIGRyYXdJ
bWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3QsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsK
LX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgq
dGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1hZ2Uu
ZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJh
d1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9u
cy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0
aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19
Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAotICAgIEltYWdlOjpUaWxl
UnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYm
IHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewotICAgICAgICAvLyBKdXN0IGRvIGEgc2Nh
bGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IG9wdGlvbnMpOwotICAgIH0KLQotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5h
dGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAg
ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLmxvZ2lj
YWxTaXplKCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGRyYXdJ
bWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlLmxvZ2lj
YWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwotICAgIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0lt
YWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gaW1hZ2VM
b2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwotICAgIGRyYXdDb25zdW1pbmdJbWFn
ZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZUxvZ2lj
YWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2FsU2l6ZSksIGltYWdlUGFpbnRpbmdP
cHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1
ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17
Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gaW1hZ2VMb2dpY2Fs
U2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwotICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZl
cihXVEZNb3ZlKGltYWdlKSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNh
bFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0gICAg
ICAgIHJldHVybjsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xh
dGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxp
dHkoKSk7Ci0gICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0
aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJS
ZXN1bHRzJiByZXN1bHRzKQotewotICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyLmFwcGx5KHNvdXJj
ZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMpOwotICAgIGlmICghcmVzdWx0KQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IHJlc3VsdC0+aW1hZ2VC
dWZmZXIoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBz
Y2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRl
clNjYWxlKCkuaGVpZ2h0KCkgfSk7Ci0gICAgZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwg
cmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKLSAgICBzY2FsZShmaWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZl
ciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2UuZHJhd1BhdHRlcm4oKnRoaXMsIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUm91
bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkK
LXsKLSAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKLSAgICAgICAgY2xpcE91dChyZWN0LnJl
Y3QoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0
aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKLSAgICBjbGlwT3V0KHBhdGgpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKLXsKLSAgICBpbWFnZUJ1ZmZlci5j
bGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNz
Q29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIGdy
YWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIENvbXBvc2l0ZU9wZXJh
dG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKLSAgICBzZXRDb21w
b3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7Ci0gICAgZmlsbFJlY3QocmVjdCwgY29sb3Ip
OwotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91c09wZXJhdG9yKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAg
aWYgKHJlY3QuaXNSb3VuZGVkKCkpIHsKLSAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNv
bXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwotICAgICAgICBmaWxsUm91bmRlZFJlY3RJ
bXBsKHJlY3QsIGNvbG9yKTsKLSAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0
ZU9wZXJhdGlvbigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmlsbFJlY3QocmVjdC5yZWN0KCks
IGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUmVjdChyZWN0KTsKLQotICAg
IGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCi0gICAgICAgIHBhdGguYWRk
Um91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGguYWRk
UmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAotICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxl
ID0gZmlsbFJ1bGUoKTsKLSAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKLSAg
ICAKLSAgICBzZXRGaWxsUnVsZShXaW5kUnVsZTo6RXZlbk9kZCk7Ci0gICAgc2V0RmlsbENvbG9y
KGNvbG9yKTsKIAotICAgIGZpbGxQYXRoKHBhdGgpOwotICAgIAotICAgIHNldEZpbGxSdWxlKG9s
ZEZpbGxSdWxlKTsKLSAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKLX0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgbV9zdGF0ZS5j
b21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbjsKLSAgICBtX3N0YXRlLmJsZW5k
TW9kZSA9IGJsZW5kTW9kZTsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKTsKLX0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxv
YXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBwZW5TdHlsZSkKIHsK
QEAgLTg1MCw3NyArNjE1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1Bp
eGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIKICAgICB9CiB9CiAK
LUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0u
eFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci19Ci0gICAgCi1GbG9hdFNpemUgR3JhcGhp
Y3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdAotewotICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURl
dmljZVNjYWxlKTsKLSAgICBhdXRvIHRyYW5zZm9ybWVkRGVzdFJlY3QgPSB0cmFuc2Zvcm0ubWFw
UmVjdChkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8g
c3JjUmVjdC5zaXplKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25z
dCBQYXRoJiBwYXRoKQotewotICAgIGZpbGxQYXRoKHBhdGgpOwotICAgIHN0cm9rZVBhdGgocGF0
aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBz
ZShlbGxpcHNlKTsKLSAgICBmaWxsUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAg
IFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgc3Ryb2tlUGF0
aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywg
U3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9u
KCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGlu
ZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250
ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgQ29sb3IgZHVtbXlDb2xvcjsKLSAgICByZXR1cm4gY29t
cHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChyZWN0LCBwcmludGluZywg
ZHVtbXlDb2xvcik7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5l
Qm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBi
b29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCi17Ci0gICAgRmxvYXRQb2ludCBvcmlnaW4gPSBy
ZWN0LmxvY2F0aW9uKCk7Ci0gICAgZmxvYXQgdGhpY2tuZXNzID0gc3RkOjptYXgocmVjdC5oZWln
aHQoKSwgMC41Zik7Ci0gICAgaWYgKHByaW50aW5nKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7Ci0KLSAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVs
eUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGlt
ZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCi0gICAgZmxvYXQgc2Nh
bGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0u
YigpKSA6IHRyYW5zZm9ybS5hKCk7Ci0gICAgaWYgKHNjYWxlIDwgMS4wKSB7Ci0gICAgICAgIC8v
IFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVs
IGxpbmUgaGlnaCwKLSAgICAgICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxt
IHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVyIHRoaXMKLSAgICAgICAgLy8gZWZmZWN0
LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlz
IGF0IHNtYWxsIHNjYWxlcy4KLSAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1VbmRl
cmxpbmVBbHBoYSA9IDAuNGY7Ci0gICAgICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVt
VW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1VbmRlcmxpbmVBbHBoYTsKLSAgICAgICAg
Y29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShzaGFkZSk7Ci0gICAgfQot
Ci0gICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRyYW5zZm9ybS5tYXBQb2ludChyZWN0Lmxv
Y2F0aW9uKCkpOwotICAgIC8vIFZpc3VhbCBvdmVyZmxvdyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0
byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRq
dXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVybGluZSBkZWNvcmF0aW9uLgotICAgIEZs
b2F0UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2ludChyb3VuZGYoZGV2aWNlUG9pbnQueCgp
KSwgY2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7Ci0gICAgaWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5z
Zm9ybS5pbnZlcnNlKCkpCi0gICAgICAgIG9yaWdpbiA9IGludmVyc2UudmFsdWUoKS5tYXBQb2lu
dChkZXZpY2VPcmlnaW4pOwotICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUo
cmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKLX0KLQogZmxvYXQgR3JhcGhpY3NDb250ZXh0Ojpk
YXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aChmbG9hdCBzdHJva2VXaWR0aCkgY29u
c3QKIHsKICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJva2VUaGlja25lc3MoKTsKQEAgLTk3Miwx
NSArNjY2LDQgQEAgVmVjdG9yPEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGlu
ZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2ludDEs
IHBvaW50MiB9OwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKQotewotICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3VycmVu
dEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7Ci19Ci0jZW5kaWYKLQotdm9pZCBO
dWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdl
QnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKQotewotfQotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGZiOTVkZDI1YjI3MWRlYjlmYTg1
ZmYyZDlmMWY3NDcxNmEwNjZiYWUuLmUxMTQ1MGY0ZGZkMjIxMWVjNTg1ZDcxMGFkYTAwYjlhMjdm
OTAyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
My0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsNDkg
KzMwLDE4IEBACiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNlLmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJJ
bWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVBh
aW50aW5nT3B0aW9ucy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQYXR0ZXJu
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5k
ZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCi0jaWYgVVNFKENHKQot
dHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2VsaWYg
VVNFKENBSVJPKQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fp
cm87Ci19Ci10eXBlZGVmIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0OwotI2Vsc2UKLXR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIkRJQlBpeGVsRGF0YS5o
IgotdHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKLSNpZiAhVVNFKENHKQotLy8gVUludDggaXMg
ZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2UuaAotdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IFVJbnQ4OwotI2VuZGlmCi0jZW5kaWYKLQotLy8gWDExIGhlYWRlcnMgZGVmaW5lIGEgYnVuY2gg
b2YgbWFjcm9zIHdpdGggY29tbW9uIHRlcm1zLCBpbnRlcmZlcmluZyB3aXRoIFdlYkNvcmUgYW5k
IFdURiBlbnVtIHZhbHVlcy4KLS8vIEFzIGEgd29ya2Fyb3VuZCwgd2UgZXhwbGljaXRseSB1bmRl
ZiB0aGVtIGhlcmUuCi0jaWYgZGVmaW5lZChOb25lKQotI3VuZGVmIE5vbmUKLSNlbmRpZgotI2lm
IGRlZmluZWQoQmVsb3cpCi0jdW5kZWYgQmVsb3cKLSNlbmRpZgotI2lmIGRlZmluZWQoU3VjY2Vz
cykKLSN1bmRlZiBTdWNjZXNzCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBBZmZpbmVUcmFuc2Zvcm07CkBAIC04Miw3ICs1MSw2IEBAIGNsYXNzIEZsb2F0Um91bmRlZFJl
Y3Q7CiBjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1lZGlhUGxheWVy
OwogY2xhc3MgUm91bmRlZFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRHTDsKQEAgLTkxLDE3
NCArNTksMTIgQEAgY2xhc3MgU3lzdGVtSW1hZ2U7CiBjbGFzcyBUZXh0UnVuOwogY2xhc3MgVHJh
bnNmb3JtYXRpb25NYXRyaXg7CiAKLW5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7Ci1jbGFzcyBSZWNv
cmRlcjsKLX0KLQotZW51bSBjbGFzcyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKLSAgICBG
aWxsID0gMSA8PCAwLAotICAgIFN0cm9rZSA9IDEgPDwgMSwKLX07Ci11c2luZyBUZXh0RHJhd2lu
Z01vZGVGbGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwotCi0vLyBMZWdhY3kgc2hh
ZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRv
dy4KLS8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgotZW51bSBj
bGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7Ci0gICAgRGVmYXVsdCwKLSAgICBMZWdhY3kK
LX07Ci0KLWVudW0gU3Ryb2tlU3R5bGUgewotICAgIE5vU3Ryb2tlLAotICAgIFNvbGlkU3Ryb2tl
LAotICAgIERvdHRlZFN0cm9rZSwKLSAgICBEYXNoZWRTdHJva2UsCi0gICAgRG91YmxlU3Ryb2tl
LAotICAgIFdhdnlTdHJva2UsCi19OwotCi1zdHJ1Y3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
ewotICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4X3QgewotICAgICAgICBUZXh0Q2hlY2tpbmdE
aWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAotICAgICAgICBTcGVsbGluZywKLSAgICAg
ICAgR3JhbW1hciwKLSAgICAgICAgQXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKLSAgICAgICAg
RGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAgfSBtb2RlOwotICAgIGJvb2wgc2hvdWxkVXNlRGFy
a0FwcGVhcmFuY2UgeyBmYWxzZSB9OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBkZWNvZGUoRGVjb2Rl
ciYpOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIg
PDwgbW9kZTsKLSAgICBlbmNvZGVyIDw8IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOwotfQotCi10
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVT
dHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9kZTsKLSAgICBkZWNvZGVyID4+IG1vZGU7Ci0g
ICAgaWYgKCFtb2RlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpv
cHRpb25hbDxib29sPiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLSAgICBkZWNvZGVyID4+IHNo
b3VsZFVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmICghc2hvdWxkVXNlRGFya0FwcGVhcmFuY2Up
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKm1vZGUsICpz
aG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9fTsKLX0KLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewotICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBo
aWNzQ29udGV4dFN0YXRlKCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0
YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUm
Jik7Ci0KLSAgICBlbnVtIENoYW5nZSA6IHVpbnQzMl90IHsKLSAgICAgICAgU3Ryb2tlR3JhZGll
bnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAotICAgICAgICBTdHJva2VQYXR0
ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCi0gICAgICAgIEZpbGxHcmFk
aWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwKLSAgICAgICAgRmlsbFBh
dHRlcm5DaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLAotICAgICAgICBTdHJv
a2VUaGlja25lc3NDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDQsCi0gICAgICAgIFN0
cm9rZUNvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKLSAgICAgICAg
U3Ryb2tlU3R5bGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA2LAotICAgICAg
ICBGaWxsQ29sb3JDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCi0gICAg
ICAgIEZpbGxSdWxlQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKLSAg
ICAgICAgU2hhZG93Q2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAot
ICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSAgICAgICAgICAgPSAxIDw8IDEw
LAotICAgICAgICBBbHBoYUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8
IDExLAotICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UgICAgICAgICAgICAgICAgPSAx
IDw8IDEyLAotICAgICAgICBCbGVuZE1vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDEzLAotICAgICAgICBUZXh0RHJhd2luZ01vZGVDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDE0LAotICAgICAgICBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDE1LAotICAgICAgICBTaG91bGRTbW9vdGhGb250c0NoYW5nZSAgICAgICAg
ICAgICAgICAgPSAxIDw8IDE2LAotICAgICAgICBTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHND
aGFuZ2UgICAgICAgPSAxIDw8IDE3LAotICAgICAgICBEcmF3THVtaW5hbmNlTWFza0NoYW5nZSAg
ICAgICAgICAgICAgICAgPSAxIDw8IDE4LAotICAgICAgICBJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5Q2hhbmdlICAgICAgICAgPSAxIDw8IDE5LAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCi0gICAgICAgIFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlICAgICAgICAgICAgICAgICA9IDEg
PDwgMjAsCi0jZW5kaWYKLSAgICB9OwotICAgIHVzaW5nIFN0YXRlQ2hhbmdlRmxhZ3MgPSBPcHRp
b25TZXQ8Q2hhbmdlPjsKLQotICAgIHZvaWQgbWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0g
ICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKLSAgICBSZWZQdHI8UGF0dGVybj4g
c3Ryb2tlUGF0dGVybjsKLSAgICAKLSAgICBSZWZQdHI8R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsK
LSAgICBSZWZQdHI8UGF0dGVybj4gZmlsbFBhdHRlcm47Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93
T2Zmc2V0OwotCi0gICAgQ29sb3Igc3Ryb2tlQ29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKLSAgICBD
b2xvciBmaWxsQ29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsK
LQotICAgIEFmZmluZVRyYW5zZm9ybSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAg
IEFmZmluZVRyYW5zZm9ybSBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLQotICAgIGZsb2F0
IHN0cm9rZVRoaWNrbmVzcyB7IDAgfTsKLSAgICBmbG9hdCBzaGFkb3dCbHVyIHsgMCB9OwotICAg
IGZsb2F0IGFscGhhIHsgMSB9OwotCi0gICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUgeyBTb2xp
ZFN0cm9rZSB9OwotICAgIFdpbmRSdWxlIGZpbGxSdWxlIHsgV2luZFJ1bGU6Ok5vblplcm8gfTsK
LQotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSB7IFRleHREcmF3aW5n
TW9kZTo6RmlsbCB9OwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yIHsg
Q29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2Rl
IHsgQmxlbmRNb2RlOjpOb3JtYWwgfTsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgfTsKLSAg
ICBTaGFkb3dSYWRpdXNNb2RlIHNoYWRvd1JhZGl1c01vZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpE
ZWZhdWx0IH07Ci0KLSAgICBib29sIHNob3VsZEFudGlhbGlhcyA6IDE7Ci0gICAgYm9vbCBzaG91
bGRTbW9vdGhGb250cyA6IDE7Ci0gICAgYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMg
OiAxOwotICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgOiAxOwotICAgIGJvb2wgZHJh
d0x1bWluYW5jZU1hc2sgOiAxOwotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAg
Ym9vbCB1c2VEYXJrQXBwZWFyYW5jZSA6IDE7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSB7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UoKSA9
IGRlZmF1bHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBmbGFncykKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgICAgICAsIG1fY2hhbmdlRmxh
Z3MoZmxhZ3MpCi0gICAgewotICAgIH0KLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
KSBjb25zdDsKLQotICAgIHZvaWQgYWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgZHVtcChXVEY6OlRl
eHRTdHJlYW0mKSBjb25zdDsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsK
LX07Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwotCiBjbGFzcyBHcmFwaGljc0NvbnRleHQg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOiAgIAorICAgIGZyaWVuZCBjbGFzcyBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KCkgPSBk
ZWZhdWx0OworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dChjb25z
dCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0p
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAgICAg
dmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CkBAIC0yNzAsMjcwICs3NiwyNzUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlk
YXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIAotICAgIC8vIENvbnRleHQgU3RhdGUKKyAgICBib29sIGNvbnRlbmZ1bFBhaW50
RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkOyB9Cisg
ICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW50ZnVsUGFpbnRE
ZXRlY3RlZCA9IHRydWU7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0K
IAotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykgeyBtX3N0YXRl
LnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSk7IH0KLSAgICBmbG9hdCBz
dHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzczsg
fQorICAgIC8vIENvbnRleHQgU3RhdGUKIAotICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tl
U3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOyBkaWRVcGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9Ci0g
ICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZVN0eWxlOyB9CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgbWVyZ2VTdGF0ZUNoYW5nZXMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1fc3RhdGUubWVyZ2VDaGFuZ2VzKG90aGVyKTsg
fQorICAgIHZvaWQgbWVyZ2VTdGF0ZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBv
dGhlcikgeyBtX3N0YXRlLm1lcmdlRGlmZnMob3RoZXIpOyB9CisgICAgdm9pZCBjbGVhclN0YXRl
Q2hhbmdlcygpIHsgbV9zdGF0ZS5jbGVhckNoYW5nZXMoKTsgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBz
dHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7IH0KKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5nZXRDVE0oKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pIHsg
bV9zdGF0ZS5zZXRDVE0oY3RtKTsgfQorICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgY3RtKSB7IHNldENUTShnZXRDVE0oKSAqIGN0bSk7IH0KKyAgICB2b2lkIHRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KSB7IHNldENUTShnZXRDVE0oKS50cmFuc2xhdGUoeCwgeSkp
OyB9CisgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHRyYW5zbGF0
ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoY29u
c3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54KCksIHAueSgpKTsgfQorICAgIHZvaWQg
c2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KSB7IHNldENUTShnZXRDVE0oKS5zY2FsZShzeCwgc3kp
KTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZShzLCBzKTsgfQorICAgIHZvaWQg
c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHNjYWxlKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgeyBzZXRD
VE0oZ2V0Q1RNKCkucm90YXRlKHJhZDJkZWcoYW5nbGVJblJhZGlhbnMpKSk7IH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJik7Ci0gICAg
UGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlUGF0
dGVybi5nZXQoKTsgfQorICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmZpbGxCcnVzaCgpLmNvbG9yKCk7IH0KKyAgICBHcmFkaWVudCogZmlsbEdyYWRp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5ncmFkaWVudCgpOyB9Cisg
ICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxCcnVz
aCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbFNwYWNlVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5zcGFjZVRyYW5zZm9y
bSgpOyB9CisgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fc3Rh
dGUuc2V0RmlsbEJydXNoKHsgY29sb3IgfSk7IH0KKyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChS
ZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFu
c2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRGaWxsR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCks
IHNwYWNlVHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+
JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsgfSkg
eyBtX3N0YXRlLnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3Jt
KTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3Jh
ZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwotICAgIEdyYWRpZW50KiBz
dHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0
KCk7IH0KKyAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmls
bFJ1bGUoKTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9z
dGF0ZS5zZXRGaWxsUnVsZShmaWxsUnVsZSk7IH0KIAotICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2lu
ZFJ1bGUgZmlsbFJ1bGUpIHsgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOyBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpOyB9Ci0g
ICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOyB9
CisgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHJva2VCcnVzaCgpLmNvbG9yKCk7IH0KKyAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBh
dHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNo
KCkucGF0dGVybigpOyB9CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VTcGFjZVRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5zcGFjZVRyYW5z
Zm9ybSgpOyB9CisgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsg
bV9zdGF0ZS5zZXRTdHJva2VCcnVzaCh7IGNvbG9yIH0pOyB9CisgICAgdm9pZCBzZXRTdHJva2VH
cmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldFN0cm9rZUdyYWRpZW50
KFdURk1vdmUoZ3JhZGllbnQpLCBncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsgfQorICAgIHZvaWQg
c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5TcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldFN0cm9rZVBh
dHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgcGF0dGVyblNwYWNlVHJhbnNmb3JtKTsgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBjb25z
dCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQ29sb3I7IH0K
KyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcygpOyB9CisgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tu
ZXNzKSB7IG1fc3RhdGUuc2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7IH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOwotICAgIFBh
dHRlcm4qIGZpbGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsUGF0dGVybi5n
ZXQoKTsgfQorICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5zdHJva2VTdHlsZSgpOyB9CisgICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHls
ZSBzdHlsZSkgeyBtX3N0YXRlLnNldFN0cm9rZVN0eWxlKHN0eWxlKTsgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mID0geyB9KTsKLSAgICBHcmFkaWVudCogZmlsbEdyYWRpZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7IH0KKyAgICBMaW5lQ2FwIGluZUNh
cCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubGluZUNhcCgpOyB9CisgICAgdm9pZCBzZXRMaW5l
Q2FwKExpbmVDYXAgbGluZUNhcCkgeyBtX3N0YXRlLnNldExpbmVDYXAobGluZUNhcCk7IH0KIAot
ICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcykgeyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KLSAgICBib29sIHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtczsgfQorICAgIGNvbnN0IExpbmVEYXNoIGxpbmVEYXNoKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5saW5lRGFzaCgpOyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVE
YXNoKSB7IG1fc3RhdGUuc2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCkpOyB9CiAKLSAgICB2
b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNo
b3VsZEFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlhczsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7IH0KLSAgICBib29s
IHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFz
OyB9CisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVK
b2luKCk7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKSB7IG1fc3Rh
dGUuc2V0TGluZUpvaW4obGluZUpvaW4pOyB9CiAKLSAgICB2b2lkIHNldFNob3VsZFNtb290aEZv
bnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyA9
IHNob3VsZFNtb290aEZvbnRzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaG91bGRTbW9v
dGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHM7IH0KKyAg
ICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5taXRlckxpbWl0KCk7
IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkgeyBtX3N0YXRlLnNl
dE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7IH0KIAotICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMg
c3VicGl4ZWwtcXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNl
IG9mIGFsaWduaW5nIGdseXBocy4KLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlz
YWJsZSB0byB0byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0g
ICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBz
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9Ci0g
ICAgYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsgfQorICAgIENvbXBvc2l0ZU1vZGUgY29t
cG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlTW9kZSgpOyB9Cisg
ICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
Y29tcG9zaXRlTW9kZSgpLm9wOyB9CisgICAgQmxlbmRNb2RlIGJsZW5kTW9kZU9wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGNvbXBvc2l0ZU1vZGUoKS5ibGVuZE1vZGU7IH0KKyAgICB2b2lkIHNl
dENvbXBvc2l0ZU1vZGUoQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2RlKSB7IG1fc3RhdGUuc2V0
Q29tcG9zaXRlTW9kZShjb21wb3NpdGVNb2RlKTsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKSB7IG1fc3RhdGUuc2V0Q29tcG9zaXRlTW9kZSh7
IG9wLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsgfQogCi0gICAgdm9pZCBzZXRJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9zdGF0ZS5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpOyB9
Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsgfQorICAgIGNv
bnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyb3BT
aGFkb3coKTsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9w
U2hhZG93KSB7IG1fc3RhdGUuc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93KTsgfQorICAgIHZvaWQg
Y2xlYXJTaGFkb3coKSB7IG1fc3RhdGUuc2V0RHJvcFNoYWRvdyh7IH0pOyB9CiAKLSAgICB2b2lk
IHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuYWxwaGEgPSBhbHBoYTsgZGlkVXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKTsgfQotICAg
IGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYTsgfQorICAgIGJvb2wg
aGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5pc1Zpc2libGUo
KTsgfQorICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFk
b3coKS5pc0JsdXJyZWQoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyByZXR1cm4g
ZHJvcFNoYWRvdygpLmhhc091dHNldHMoKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5k
TW9kZTo6Tm9ybWFsKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOyB9Ci0gICAgQmxlbmRN
b2RlIGJsZW5kTW9kZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYmxlbmRNb2Rl
OyB9CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhKCk7IH0K
KyAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuc2V0QWxwaGEoYWxwaGEp
OyB9CiAKLSAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1h
c2spIHsgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOyBkaWRV
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1h
c2tDaGFuZ2UpOyB9Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7IH0KKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KCk7IH0KKyAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkgeyBt
X3N0YXRlLnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSk7IH0KIAotICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZs
YWdzIG1vZGUpIHsgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyBkaWRVcGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsg
fQotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3Mg
dGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUo
KTsgfQorICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIHRl
eHREcmF3aW5nTW9kZSkgeyBtX3N0YXRlLnNldFRleHREcmF3aW5nTW9kZSh0ZXh0RHJhd2luZ01v
ZGUpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIFNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dS
YWRpdXNNb2RlOjpEZWZhdWx0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xl
YXJTaGFkb3coKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldFNoYWRvdyhGbG9hdFNpemUm
LCBmbG9hdCYsIENvbG9yJikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhcygpOyB9CisgICAgdm9pZCBzZXRTaG91
bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zZXRTaG91bGRBbnRp
YWxpYXMoc2hvdWxkQW50aWFsaWFzKTsgfQogCi0gICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQotICAgIGJv
b2wgaGFzU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0
YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRl
LnNoYWRvd09mZnNldC5oZWlnaHQoKSk7IH0KLSAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBj
b25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9
CisgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hv
dWxkU21vb3RoRm9udHMoKTsgfQorICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBz
aG91bGRTbW9vdGhGb250cykgeyBtX3N0YXRlLnNldFNob3VsZFNtb290aEZvbnRzKHNob3VsZFNt
b290aEZvbnRzKTsgfQogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lk
IHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51
c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOyBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9Ci0g
ICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFy
a0FwcGVhcmFuY2U7IH0KLSNlbmRpZgorICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4
ZWwtcXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFs
aWduaW5nIGdseXBocy4KKyAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0
byB0byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCisgICAgYm9v
bCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0
ZS5zZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKTsg
fQorICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcykgeyBtX3N0YXRlLnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKTsgfQogCi0gICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsK
KyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3
THVtaW5hbmNlTWFzaygpOyB9CisgICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhib29sIGRy
YXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuc2V0RHJhd0x1bWluYW5jZU1hc2soZHJhd0x1bWlu
YW5jZU1hc2spOyB9CiAKLSAgICAvLyBDYWxsZWQgKmFmdGVyKiBhbnkgY2hhbmdlIHRvIEdyYXBo
aWNzQ29udGV4dFN0YXRlOyBnZW5lcmFsbHkgdXNlZCB0byBwcm9wYWdhdGUgY2hhbmdlcwotICAg
IC8vIHRvIHRoZSBwbGF0Zm9ybSBjb250ZXh0J3Mgc3RhdGUuCi0gICAgdmlydHVhbCB2b2lkIGRp
ZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpID0gMDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQ
T1JUKQorICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnVzZURhcmtBcHBlYXJhbmNlKCk7IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS5zZXRVc2VEYXJrQXBwZWFyYW5jZSh1c2VE
YXJrQXBwZWFyYW5jZSk7IH0KKyNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIHNhdmUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwot
ICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVzdG9yZSgpOwogICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhY2suc2l6ZSgpOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMo
KSA9IDA7CiAjaWYgVVNFKENHKQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJl
IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0aG9kcz8KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
dHJva2VQYXR0ZXJuKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7CisjZW5kaWYK
IAotICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFrZSB0aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0
LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNyb3NzLXBsYXRmb3JtPwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2Nh
bGVGYWN0b3IoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0
b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0Nv
bnRleHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNv
bnRleHQ/Ci0gICAgdmlydHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpID0g
MDsKLSNlbmRpZgorICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKIAotICAgIHZpcnR1YWwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZDsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5j
eUxheWVyKCkgY29uc3QgeyByZXR1cm4gc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKSAmJiBt
X3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7IH0KIAotICAgIC8vIFBpeGVsIFNuYXBwaW5nCisgICAg
Ly8gQ2xpcHBpbmcKIAotICAgIGVudW0gUm91bmRpbmdNb2RlIHsKLSAgICAgICAgUm91bmRBbGxT
aWRlcywKLSAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCi0gICAgfTsKLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5k
aW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jik7CiAKLSAgICAvLyBTaGFwZXMKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
Jik7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7CiAKLSAgICAv
LyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBib3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgot
ICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1JlY3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkg
YnV0IGFsd2F5cyBzdHJva2VzCi0gICAgLy8gdXNpbmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBm
cm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBjb3JyZWN0Ci0gICAgLy8gc3Ryb2tlIGNvbG9y
KS4KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzID0gMSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fc3RhdGUuY2xpcEJvdW5kcygpKTsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0
cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOworICAgIC8vIFNoYXBlcwogCi0gICAgdmlydHVhbCB2
b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBmaWxsRWxsaXBzZUFz
UGF0aChlbGxpcHNlKTsgfQotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYp
ID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgR3JhZGllbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91
bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9y
bWFsKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIHZpcnR1YWwgdm9pZCBm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgp
ID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxp
bWl0KGZsb2F0KSA9IDA7Ci0KLSAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEKLQot
ICAgIEludFNpemUgY29tcGF0aWJsZUltYWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmKSBj
b25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8
UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgLy8gVGhlc2UgZHJh
dyBtZXRob2RzIHdpbGwgZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KKyAgICAvLyBGSVhN
RTogLi4uZXhjZXB0IGRyYXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMg
c3Ryb2tlcworICAgIC8vIHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVj
dCBib3JkZXJzIChvZiB0aGUgY29ycmVjdAorICAgIC8vIHN0cm9rZSBjb2xvcikuCiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZElt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
PSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
ZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgPSAw
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0
ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UmFp
c2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBj
b25zdCBDb2xvciYgc2hhZG93Q29sb3IpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlydHVh
bCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdS
ZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdl
IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgLy8g
Rm9jdXMgUmluZ3MKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJikgPSAwOworICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0
aGUgQ0cgaW1wbGVtZW50YXRpb24/IE9yIGVsc2V3aGVyZT8KKyNpZiBQTEFURk9STShNQUMpCisg
ICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zm
c2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9m
ZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOworI2VuZGlmCiAKKyAg
ICAvLyBJbWFnZXMKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4s
IGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRl
ciYsIEZpbHRlclJlc3VsdHMmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQg
ZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCi0gICAgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFj
dG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAjaWYgRU5BQkxFKFZJREVP
KQogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKICNlbmRpZgotCi0gICAg
Ly8gQ2xpcHBpbmcKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAw
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQ
YXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91bmRz
KCkgY29uc3Q7Ci0KKyAgICAKICAgICAvLyBUZXh0CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAw
LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGlu
Z01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
LCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51
bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6
Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnRO
b3RSZWFkeSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIHsK
LSAgICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBv
aW50LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJv
b2wgcHJpbnRpbmcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNv
bnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwg
U3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tl
U3R5bGUgPSBTb2xpZFN0cm9rZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9
IDA7CiAKLSAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCisgICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJv
b2wgcHJpbnRpbmcpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgYm9vbCBpc0luVHJhbnNwYXJlbmN5
TGF5ZXIoKSBjb25zdCB7IHJldHVybiAobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCkgJiYg
c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKTsgfQorICAgIC8vIENvbXBhdGlibGUgSW1hZ2VC
dWZmZXIKIAotICAgIC8vIEZvY3VzIFJpbmdzCisgICAgSW50U2l6ZSBjb21wYXRpYmxlSW1hZ2VC
dWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9
IDA7Ci0gICAgLy8gRklYTUU6IENhbiB3ZSBoaWRlIHRoZXNlIGluIHRoZSBDRyBpbXBsZW1lbnRh
dGlvbj8gT3IgZWxzZXdoZXJlPwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRz
UmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7Ci0jZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4g
PSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCi0gICAgLy8gVHJhbnNmb3JtcworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVu
ZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
ZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAgIHZvaWQgc2NhbGUoZmxvYXQgcykg
eyBzY2FsZSh7IHMsIHMgfSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRT
aXplJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
ID0gMDsKLSAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNs
YXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KLSAgICB2b2lkIHRyYW5zbGF0ZShj
b25zdCBGbG9hdFBvaW50JiBwKSB7IHRyYW5zbGF0ZShwLngoKSwgcC55KCkpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9
IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7
CisKKyAgICAKKworICAgIAorICAgIC8vIFBpeGVsIFNuYXBwaW5nCiAKLSAgICB2aXJ0dWFsIHZv
aWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICBlbnVtIFJvdW5kaW5n
TW9kZSB7CisgICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAgIFJvdW5kT3JpZ2luQW5kRGlt
ZW5zaW9ucworICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVz
KEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9r
ZVN0eWxlKTsKIAotICAgIGVudW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1
ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsKLSAgICB2aXJ0dWFs
IEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNs
dWRlRGV2aWNlU2NhbGUpIGNvbnN0ID0gMDsKKyAgICAvLyBUcmFuc2Zvcm1zCiAKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNvbnRl
eHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAgICAgLy8gYWN0aW5nIGFzIGEgYmFz
ZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgogICAgIHZpcnR1YWwgdm9p
ZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3IpOyB9
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OwogCiAgICAg
Ly8gTGlua3MKIAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29u
c3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVz
dGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3Qg
RmxvYXRQb2ludCYpIHsgfQogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5r
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBDb250ZW50ZnVsIFBhaW50IERl
dGVjdGlvbgorI2lmIFVTRShDRykKKyAgICAvLyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdo
eSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRoZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9y
bT8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSB7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
LSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWlu
dERldGVjdGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBGSVhNRTog
Q2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9y
IGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/CisgICAgdmlydHVhbCB2b2lkIHNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wpIHsgfQorI2VuZGlmCiAKICAgICAvLyBGSVhNRTogTm90aGlu
ZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBoZXJlLCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVsc2V3
aGVyZS4KICNpZiBPUyhXSU5ET1dTKQpAQCAtNTQ2LDExICszNTcsMjMgQEAgcHVibGljOgogICAg
IC8vIHB1dCBjb2RlIHNoYXJlZCBiZXR3ZWVuIFdpbmRvd3MgQ0cgYW5kIFdpbmRvd3MgQ2Fpcm8g
YmFja2VuZHMuCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRp
ZgorICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBzYXZlSW1wbCgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVzdG9yZUltcGwoKSA9IDA7CiAKLXByaXZhdGU6Ci0gICAgdmlydHVh
bCBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgdm9pZCBjbGlwSW1wbChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNsaXBQYXRoSW1wbChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0SW1wbChjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXRJbXBsKGNvbnN0IFBhdGgmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVySW1wbChJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKKworICAgIHZpcnR1YWwgdm9pZCBm
aWxsUmVjdEltcGwoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKKworICAgIHZpcnR1YWwg
dm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlckltcGwoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0
cyYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybklt
cGwoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLXByb3RlY3RlZDoKICAgICB2b2lkIGZpbGxF
bGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgc3Ryb2tlRWxsaXBzZUFz
UGF0aChjb25zdCBGbG9hdFJlY3QmKTsKIApAQCAtNTYxLDE5MSArMzg0LDE2IEBAIHByb3RlY3Rl
ZDoKICAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VX
aWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdDsKICAgICBW
ZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRp
Y2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50
IHBvaW50MikgY29uc3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwotCiBw
cml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7
CiAgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCiAgICAgdW5z
aWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsgMCB9OwogICAgIGJvb2wgbV9jb250ZW50
ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9OwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBz
YXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1f
c2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZl
QW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgfQotICAgIAot
ICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3Nh
dmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzYXZlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVz
dG9yZSk7Ci0gICAgICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0g
ICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5k
UmVzdG9yZTsKLX07Ci0KLWNsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgewotcHVibGljOgot
ICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9h
dCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKLSAgICAgICAgLCBtX2FscGhhKGFscGhhKQotICAgICAgICAsIG1fYmVnYW5MYXllcihi
ZWdpbkxheWVyKQotICAgIHsKLSAgICAgICAgaWYgKGJlZ2luTGF5ZXIpCi0gICAgICAgICAgICBt
X2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQotICAgIHsKLSAgICAgICAgbV9hbHBoYSA9
IGFscGhhOwotICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhh
KTsKLSAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgflRyYW5z
cGFyZW5jeUxheWVyU2NvcGUoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKLSAg
ICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICBmbG9hdCBtX2FscGhh
OwotICAgIGJvb2wgbV9iZWdhbkxheWVyOwotfTsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTdGFja0NoZWNrZXIgewotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKLSAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQotICAgIHsg
fQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCi0gICAgewot
ICAgICAgICBpZiAobV9jb250ZXh0LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQotICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBieSAl
ZCIsICZtX2NvbnRleHQsIChpbnQpbV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0YWNr
U2l6ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0
OwotICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwotfTsKLQotY2xhc3MgSW50ZXJwb2xhdGlvblF1
YWxpdHlNYWludGFpbmVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9s
YXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCi0gICAgICAgIDogbV9ncmFw
aGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQotICAgICAgICAsIG1fY3VycmVudEludGVycG9s
YXRpb25RdWFsaXR5KGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkp
Ci0gICAgICAgICwgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlvblF1
YWxpdHlUb1VzZSAhPSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJlbnRJ
bnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgIHsK
LSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAg
bV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBvbGF0
aW9uUXVhbGl0eVRvVXNlKTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6b3B0
aW9uYWw8SW50ZXJwb2xhdGlvblF1YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5KQotICAgICAg
ICA6IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGludGVy
cG9sYXRpb25RdWFsaXR5ID8gaW50ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBoaWNz
Q29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAgewotICAgIH0KLQotICAg
IH5JbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
aW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRl
eHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVh
bGl0eSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGlj
c0NvbnRleHQ7Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xhdGlv
blF1YWxpdHk7Ci0gICAgYm9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKLX07Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+
IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpNb2RlLAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAot
ICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKLSAg
ICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKLSAgICBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBs
YWNlbWVudCwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGlj
dGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1U
cmFpdHM8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZT4gewotICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlN0cm9rZUdyYWRpZW50Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsR3JhZGllbnRDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxQYXR0ZXJuQ2hhbmdl
LAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlN0cm9rZUNvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsUnVsZUNoYW5nZSwKLSAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93Q2hhbmdlLAot
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtc0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6QWxwaGFDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QmxlbmRNb2RlQ2hhbmdlLAotICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGVD
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNo
b3VsZEFudGlhbGlhc0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0No
YW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJh
d0x1bWluYW5jZU1hc2tDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UKLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgICAgICAsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlCi0jZW5kaWYKLSAgICA+OwotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4gewot
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUs
Ci0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9r
ZVN0eWxlOjpTb2xpZFN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ry
b2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCi0gICAgV2ViQ29y
ZTo6U3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6
V2F2eVN0cm9rZQotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlRleHREcmF3aW5nTW9kZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
Ci0gICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4
dERyYXdpbmdNb2RlOjpGaWxsLAotICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0
cm9rZQotICAgID47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDhkNWY5
ODgxNzBiMjcyZjM4ZGU2OGFmYjhhOTE2MTg2NTA3MzMyMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcApA
QCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3Rh
dGUuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoY29u
c3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQ2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdz
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2NsaXBCb3VuZHMo
aW5pdGlhbENUTS5tYXBSZWN0KGluaXRpYWxDbGlwKSkKKyAgICAsIG1fY2hhbmdlRmxhZ3MoY2hh
bmdlRmxhZ3MpCisgICAgLCBtX2N0bShpbml0aWFsQ1RNKQoreworfQorCitGbG9hdFJlY3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmNsaXBCb3VuZHMoKSBjb25zdAoreworICAgIGlmIChhdXRvIGlu
dmVyc2UgPSBtX2N0bS5pbnZlcnNlKCkpCisgICAgICAgIHJldHVybiBpbnZlcnNlLT5tYXBSZWN0
KG1fY2xpcEJvdW5kcyk7CisKKyAgICAvLyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCBy
ZXR1cm4gdGhlIG9yaWdpbmFsIHJlY3QuCisgICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5
SW52ZXJzZUFmZmluZVRyYW5zZm9ybSBiZWhhdmlvci4KKyAgICByZXR1cm4gbV9jbGlwQm91bmRz
OworfQorCitib29sIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpoYXNPbmx5UHJpbWl0aXZlQ2hhbmdl
cygpIGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBwcmltaXRpdmVD
aGFuZ2VGbGFncyB7IENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCBDaGFuZ2U6OlN0cm9rZUJydXNo
LCBDaGFuZ2U6OkZpbGxCcnVzaCB9OworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgIT0gKG1fY2hh
bmdlRmxhZ3MgJiBwcmltaXRpdmVDaGFuZ2VGbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKENoYW5nZTo6U3Ryb2tlQnJ1c2gpICYm
ICFtX3N0cm9rZUJydXNoLmlzUHJpbWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKENoYW5nZTo6RmlsbEJydXNoKSAmJiAhbV9m
aWxsQnJ1c2guaXNQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyhj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZUNoYW5n
ZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVy
dHkpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkg
eworICAgICAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gb3RoZXIuKnByb3BlcnR5OworICAgICAg
ICAgICAgbV9jaGFuZ2VGbGFncy5hZGQoY2hhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICBBU1NFUlQobV9jbGlwQm91bmRzID09IG90aGVyLm1fY2xpcEJvdW5kcyk7CisKKyAgICBtZXJn
ZUNoYW5nZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2N0bSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkZpbGxCcnVz
aCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVz
aCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZUNoYW5n
ZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3N0cm9rZUJydXNoKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZVRo
aWNrbmVzcywgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRo
aWNrbmVzcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBt
ZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXApOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGlu
ZURhc2gsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGlu
ZURhc2gpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNvbXBv
c2l0ZU1vZGUsICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBv
c2l0ZU1vZGUpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBt
ZXJnZUNoYW5nZShDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2FscGhhKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6VGV4dERyYXdp
bmdNb2RlLCAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdp
bmdNb2RlKTsKKworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAg
ICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZUNoYW5n
ZShDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VDaGFuZ2Uo
Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdl
OjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICBtZXJnZUNoYW5nZShDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBvdGhlcikKK3sKKyAgICBhdXRvIG1lcmdlRGlmZiA9IFsmXShDaGFuZ2UgY2hhbmdl
LCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHRo
aXMtPipwcm9wZXJ0eSAhPSBvdGhlci4qcHJvcGVydHkpIHsKKyAgICAgICAgICAgIHRoaXMtPipw
cm9wZXJ0eSA9IG90aGVyLipwcm9wZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRk
KGNoYW5nZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q1RN
LCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7
CisgICAgCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENo
YW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2ZpbGxSdWxlKTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAg
bWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6
U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0
cm9rZVN0eWxlKTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZURp
ZmYoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVKb2luLCAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAg
bWVyZ2VEaWZmKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q29t
cG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBv
c2l0ZU1vZGUpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9hbHBoYSk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSwgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAg
bWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6
U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3No
b3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMsICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cywgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
OworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5j
ZSwgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2Up
OworI2VuZGlmCit9CisKK1RleHRTdHJlYW0mIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpkdW1wKFRl
eHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGF1dG8gZHVtcCA9IFsmXShDaGFuZ2UgY2hhbmdl
LCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHksIGNvbnN0IFN0cmluZyYgbmFt
ZSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQorICAgICAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KG5hbWUsIHRoaXMtPipwcm9wZXJ0eSk7CisgICAgfTsKKwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2xpcC1ib3VuZHMiLCBtX2NsaXBCb3VuZHMpOworCisgICAg
ZHVtcChDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fY3RtLCAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdG0iKTsKKworICAg
IGR1bXAoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2ZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAiZmlsbC1icnVzaCIp
OworICAgIGR1bXAoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgICAiZmlsbC1y
dWxlIik7CisKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAg
InN0cm9rZS1icnVzaCIpOworICAgIGR1bXAoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcywgICAgICAg
ICAgICAgICAic3Ryb2tlLXRoaWNrbmVzcyIpOworICAgIGR1bXAoQ2hhbmdlOjpTdHJva2VTdHls
ZSwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxl
LCAgICAgICAgICAgICAgICAgICAic3Ryb2tlLXN0eWxlIik7CisKKyAgICBkdW1wKENoYW5nZTo6
TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9s
aW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgImxpbmUtY2FwIik7CisgICAgZHVtcChDaGFu
Z2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fbGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgICJsaW5lLWRhc2giKTsKKyAgICBkdW1w
KENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9saW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICAgImxpbmUtam9pbiIpOworICAg
IGR1bXAoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX21pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICAibWl0ZXItbGltaXQi
KTsKKworICAgIGR1bXAoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICAiY29t
cG9zaXRlLW1vZGUiKTsKKyAgICBkdW1wKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93LCAgICAgICAgICAgICAg
ICAgICAgImRyb3Atc2hhZG93Iik7CisKKyAgICBkdW1wKENoYW5nZTo6QWxwaGEsICAgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgICAgICAgICAg
ICAgICAgICAgICAgICAgImFscGhhIik7CisgICAgZHVtcChDaGFuZ2U6OkltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSwgICAgICJpbWFnZS1pbnRlcnBvbGF0aW9uLXF1YWxpdHkiKTsKKyAgICBkdW1w
KENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgInRleHQtZHJhd2luZy1tb2Rl
Iik7CisKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICAgInNo
b3VsZC1hbnRpYWxpYXMiKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywgICAg
ICAgICAgICAgInNob3VsZC1zbW9vdGgtZm9udHMiKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICAgInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIp
OworICAgIGR1bXAoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgICAic2hhZG93
cy1pZ25vcmUtdHJhbnNmb3JtcyIpOworICAgIGR1bXAoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFz
aywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNr
LCAgICAgICAgICAgICAiZHJhdy1sdW1pbmFuY2UtbWFzayIpOworI2lmIEhBVkUoT1NfREFSS19N
T0RFX1NVUFBPUlQpCisgICAgZHVtcChDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAg
ICAgICJ1c2UtZGFyay1hcHBlYXJhbmNlIik7CisjZW5kaWYKKyAgICByZXR1cm4gdHM7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5OTg2MTM4
YmFlNmVlOGQwZmRmMDEwNGUzMGVkMTBiMTJjN2M5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oCkBAIC0w
LDAgKzEsMzYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIlNvdXJjZUJydXNoLmgiCisjaW5jbHVkZSAi
V2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGUgeworcHVibGljOgorICAgIGVudW0g
Y2xhc3MgQ2hhbmdlIDogdWludDMyX3QgeworICAgICAgICBDVE0gICAgICAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDAsCisKKyAgICAgICAgRmlsbEJydXNoICAgICAgICAgICAgICAgICAgID0g
MSA8PCAxLAorICAgICAgICBGaWxsUnVsZSAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDIsCisK
KyAgICAgICAgU3Ryb2tlQnJ1c2ggICAgICAgICAgICAgICAgID0gMSA8PCAzLAorICAgICAgICBT
dHJva2VUaGlja25lc3MgICAgICAgICAgICAgPSAxIDw8IDQsCisgICAgICAgIFN0cm9rZVN0eWxl
ICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKKworICAgICAgICBMaW5lQ2FwICAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDYsCisgICAgICAgIExpbmVEYXNoICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgNywKKyAgICAgICAgTGluZUpvaW4gICAgICAgICAgICAgICAgICAgID0gMSA8PCA4LAor
ICAgICAgICBNaXRlckxpbWl0ICAgICAgICAgICAgICAgICAgPSAxIDw8IDksCisKKyAgICAgICAg
Q29tcG9zaXRlTW9kZSAgICAgICAgICAgICAgID0gMSA8PCAxMCwKKyAgICAgICAgRHJvcFNoYWRv
dyAgICAgICAgICAgICAgICAgID0gMSA8PCAxMSwKKworICAgICAgICBBbHBoYSAgICAgICAgICAg
ICAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
ICAgPSAxIDw8IDEzLAorICAgICAgICBUZXh0RHJhd2luZ01vZGUgICAgICAgICAgICAgPSAxIDw8
IDE0LAorCisgICAgICAgIFNob3VsZEFudGlhbGlhcyAgICAgICAgICAgICA9IDEgPDwgMTUsCisg
ICAgICAgIFNob3VsZFNtb290aEZvbnRzICAgICAgICAgICA9IDEgPDwgMTYsCisgICAgICAgIFNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IDEgPDwgMTcsCisgICAgICAgIFNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zICAgICA9IDEgPDwgMTgsCisgICAgICAgIERyYXdMdW1pbmFuY2VNYXNrICAg
ICAgICAgICA9IDEgPDwgMTksCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAg
ICAgVXNlRGFya0FwcGVhcmFuY2UgICAgICAgICAgID0gMSA8PCAyMCwKKyNlbmRpZgorICAgIH07
CisgICAgdXNpbmcgQ2hhbmdlRmxhZ3MgPSBPcHRpb25TZXQ8Q2hhbmdlPjsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgQ2hhbmdlRmxhZ3MgaW5pdGlhbENoYW5nZUZsYWdzID0geyBDaGFuZ2U6OkZp
bGxCcnVzaCwgQ2hhbmdlOjpTdHJva2VCcnVzaCwgQ2hhbmdlOjpTdHJva2VUaGlja25lc3MgfTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXBCb3VuZHMsIGNvbnN0IENoYW5nZUZsYWdzJiA9IHsgfSwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIEZs
b2F0UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7CisgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkgeyBtX2NsaXBCb3VuZHMuaW50ZXJzZWN0KG1fY3RtLm1hcFJlY3QocmVjdCkpOyB9
CisKKyAgICBDaGFuZ2VGbGFncyBjaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFuZ2VGbGFn
czsgfQorICAgIHZvaWQgY2xlYXJDaGFuZ2VzKCkgeyBtX2NoYW5nZUZsYWdzID0geyB9OyB9CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9jdG07IH0KKyAg
ICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkgeyBtX2N0bSA9IGN0bTsg
bV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpDVE0pOyB9CisKKyAgICBTb3VyY2VCcnVzaCYgZmls
bEJydXNoKCkgeyByZXR1cm4gbV9maWxsQnJ1c2g7IH0KKyAgICBjb25zdCBTb3VyY2VCcnVzaCYg
ZmlsbEJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9maWxsQnJ1c2g7IH0KKyAgICB2b2lkIHNldEZp
bGxCcnVzaChjb25zdCBTb3VyY2VCcnVzaCYgZmlsbEJydXNoKSB7IG1fZmlsbEJydXNoID0gZmls
bEJydXNoOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVzaCk7IH0KKyAgICB2b2lk
IHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxsQnJ1c2guc2V0R3JhZGllbnQoV1RGTW92
ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpG
aWxsQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0
ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fZmlsbEJydXNo
LnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZs
YWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVzaCk7IH0KKworICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1
bGUgZmlsbFJ1bGUpIHsgbV9maWxsUnVsZSA9IGZpbGxSdWxlOyBtX2NoYW5nZUZsYWdzLmFkZChD
aGFuZ2U6OkZpbGxSdWxlKTsgfQorCisgICAgU291cmNlQnJ1c2gmIHN0cm9rZUJydXNoKCkgeyBy
ZXR1cm4gbV9zdHJva2VCcnVzaDsgfQorICAgIGNvbnN0IFNvdXJjZUJydXNoJiBzdHJva2VCcnVz
aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQnJ1c2g7IH0KKyAgICB2b2lkIHNldFN0cm9rZUJy
dXNoKGNvbnN0IFNvdXJjZUJydXNoJiBzdHJva2VCcnVzaCkgeyBtX3N0cm9rZUJydXNoID0gc3Ry
b2tlQnJ1c2g7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6U3Ryb2tlQnJ1c2gpOyB9CisgICAg
dm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9zdHJva2VCcnVzaC5zZXRHcmFkaWVu
dChXVEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChD
aGFuZ2U6OlN0cm9rZUJydXNoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7
IG1fc3Ryb2tlQnJ1c2guc2V0UGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pLCBzcGFjZVRyYW5zZm9y
bSk7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6U3Ryb2tlQnJ1c2gpOyB9CisKKyAgICBmbG9h
dCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZVRoaWNrbmVzczsgfQor
ICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHN0cm9rZVRoaWNrbmVzcykgeyBtX3N0
cm9rZVRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzczsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdl
OjpTdHJva2VUaGlja25lc3MpOyB9CisKKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3Ryb2tlU3R5bGU7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0
cm9rZVN0eWxlIHN0cm9rZVN0eWxlKSB7IG1fc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTsgbV9j
aGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VTdHlsZSk7IH0KKworICAgIExpbmVDYXAgbGlu
ZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQorICAgIHZvaWQgc2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApIHsgbV9saW5lQ2FwID0gbGluZUNhcDsgbV9jaGFuZ2VGbGFncy5hZGQo
Q2hhbmdlOjpMaW5lQ2FwKTsgfQorCisgICAgY29uc3QgTGluZURhc2gmIGxpbmVEYXNoKCkgY29u
c3QgeyByZXR1cm4gbV9saW5lRGFzaDsgfQorICAgIHZvaWQgc2V0TGluZURhc2goTGluZURhc2gm
JiBsaW5lRGFzaCkgeyBtX2xpbmVEYXNoID0gV1RGTW92ZShsaW5lRGFzaCk7IG1fY2hhbmdlRmxh
Z3MuYWRkKENoYW5nZTo6TGluZURhc2gpOyB9CisKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2lu
IGxpbmVKb2luKSB7IG1fbGluZUpvaW4gPSBsaW5lSm9pbjsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hh
bmdlOjpMaW5lSm9pbik7IH0KKworICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVy
biBtX21pdGVyTGltaXQ7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1p
dCkgeyBtX21pdGVyTGltaXQgPSBtaXRlckxpbWl0OyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6
Ok1pdGVyTGltaXQpOyB9CisgICAgCisgICAgQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVN
b2RlKENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX2NvbXBvc2l0ZU1vZGUgPSBjb21w
b3NpdGVNb2RlOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUpOyB9Cisg
ICAgCisgICAgY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1f
ZHJvcFNoYWRvdzsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBk
cm9wU2hhZG93KSB7IG1fZHJvcFNoYWRvdyA9IGRyb3BTaGFkb3c7IG1fY2hhbmdlRmxhZ3MuYWRk
KENoYW5nZTo6RHJvcFNoYWRvdyk7IH0KKworICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1
cm4gbV9hbHBoYTsgfQorICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9hbHBoYSA9
IGFscGhhOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkFscGhhKTsgfQorICAgIAorICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAgICB2b2lkIHNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSkgeyBtX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRp
b25RdWFsaXR5OyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkpOyB9CisgICAgCisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKyAgICB2b2lkIHNldFRleHRE
cmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUpIHsgbV90ZXh0
RHJhd2luZ01vZGUgPSB0ZXh0RHJhd2luZ01vZGU7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6
VGV4dERyYXdpbmdNb2RlKTsgfQorCisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMoKSBjb25zdCB7
IHJldHVybiBtX3Nob3VsZEFudGlhbGlhczsgfQorICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFz
KGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFs
aWFzOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlNob3VsZEFudGlhbGlhcyk7IH0KKworICAg
IGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNtb290aEZv
bnRzOyB9CisgICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZv
bnRzKSB7IG1fc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgbV9jaGFuZ2VG
bGFncy5hZGQoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cyk7IH0KKworICAgIGJvb2wgc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhi
b29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykgeyBtX3Nob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cyA9IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsgbV9jaGFuZ2VGbGFncy5hZGQo
Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOyB9CisKKyAgICBib29sIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dzSWdub3JlVHJhbnNm
b3JtczsgfQorICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykgeyBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpOyB9CisgICAgCisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd0x1bWluYW5jZU1hc2s7IH0KKyAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VN
YXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spIHsgbV9kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdM
dW1pbmFuY2VNYXNrOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNr
KTsgfQorCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtB
cHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV91c2VEYXJrQXBwZWFyYW5jZTsgfQorICAgIHZv
aWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgeyBtX3VzZURh
cmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5n
ZTo6VXNlRGFya0FwcGVhcmFuY2UpOyB9CisjZW5kaWYKKworICAgIGJvb2wgaGFzT25seVByaW1p
dGl2ZUNoYW5nZXMoKSBjb25zdDsKKyAgICB2b2lkIG1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgb3RoZXIpOworICAgIHZvaWQgbWVyZ2VEaWZmcyhjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgb3RoZXIpOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBkdW1wKFdURjo6
VGV4dFN0cmVhbSYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwor
Citwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2NsaXBCb3VuZHM7CisKKyAgICBDaGFuZ2VGbGFn
cyBtX2NoYW5nZUZsYWdzOworCisgICAgQWZmaW5lVHJhbnNmb3JtIG1fY3RtOworCisgICAgU291
cmNlQnJ1c2ggbV9maWxsQnJ1c2ggeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBXaW5kUnVsZSBtX2Zp
bGxSdWxlIHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKKworICAgIFNvdXJjZUJydXNoIG1fc3Ryb2tl
QnJ1c2ggeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBmbG9hdCBtX3N0cm9rZVRoaWNrbmVzcyB7IDAg
fTsKKyAgICBTdHJva2VTdHlsZSBtX3N0cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKKworICAg
IExpbmVDYXAgbV9saW5lQ2FwIHsgTGluZUNhcDo6QnV0dCB9OworICAgIExpbmVEYXNoIG1fbGlu
ZURhc2g7CisgICAgTGluZUpvaW4gbV9saW5lSm9pbiB7IExpbmVKb2luOjpNaXRlciB9OworICAg
IGZsb2F0IG1fbWl0ZXJMaW1pdCB7IDAgfTsKKworICAgIENvbXBvc2l0ZU1vZGUgbV9jb21wb3Np
dGVNb2RlIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFs
IH07CisgICAgRHJvcFNoYWRvdyBtX2Ryb3BTaGFkb3c7CisKKyAgICBmbG9hdCBtX2FscGhhIHsg
MSB9OworICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSB7IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbV90ZXh0RHJhd2luZ01vZGUgeyBUZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKKworICAg
IGJvb2wgbV9zaG91bGRBbnRpYWxpYXM7CisgICAgYm9vbCBtX3Nob3VsZFNtb290aEZvbnRzOwor
ICAgIGJvb2wgbV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7CisgICAgYm9vbCBtX3NoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIGJvb2wgbV9kcmF3THVtaW5hbmNlTWFzazsKKyNpZiBI
QVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgbV91c2VEYXJrQXBwZWFyYW5jZTsK
KyNlbmRpZgorfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGF1dG8gZW5j
b2RlID0gWyZdKENoYW5nZSBjaGFuZ2UsIGF1dG8gR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9w
ZXJ0eSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQorICAg
ICAgICAgICAgZW5jb2RlciA8PCB0aGlzLT4qcHJvcGVydHk7CisgICAgfTsKKworICAgIGVuY29k
ZXIgPDwgbV9jbGlwQm91bmRzOworCisgICAgZW5jb2RlciA8PCBtX2NoYW5nZUZsYWdzOworCisg
ICAgZW5jb2RlKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpGaWxsQnJ1c2gs
ICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNo
KTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6
U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3N0cm9rZUJydXNoKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzKTsKKyAg
ICBlbmNvZGUoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6TGlu
ZUNhcCwgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xp
bmVDYXApOworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCk7CisgICAgZW5jb2RlKENoYW5n
ZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2xpbmVKb2luKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCk7CisKKyAgICBl
bmNvZGUoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fY29tcG9zaXRlTW9kZSk7CisgICAgZW5jb2RlKENoYW5nZTo6RHJvcFNo
YWRvdywgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BT
aGFkb3cpOworCisgICAgZW5jb2RlKENoYW5nZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhKTsKKyAgICBlbmNvZGUoQ2hhbmdl
OjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgZW5jb2RlKENoYW5nZTo6VGV4dERy
YXdpbmdNb2RlLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHRE
cmF3aW5nTW9kZSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAg
ICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMpOworICAgIGVuY29kZShDaGFuZ2U6
OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIGVuY29kZShDaGFuZ2U6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyk7CisgICAgZW5jb2RlKENoYW5nZTo6RHJhd0x1bWluYW5jZU1h
c2ssICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VN
YXNrKTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGVuY29kZShDaGFuZ2U6
OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV91c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBhdXRvIGRlY29kZSA9IFsmXShH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENoYW5nZSBjaGFuZ2UsIGF1dG8gR3JhcGhpY3ND
b250ZXh0U3RhdGU6Oipwcm9wZXJ0eSkgeworICAgICAgICBpZiAoIXN0YXRlLm1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IHVzaW5nIFByb3BlcnR5VHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxkZWNs
dHlwZShzdGQ6OmRlY2x2YWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+KCkuKnByb3BlcnR5KT46OnR5
cGU7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8UHJvcGVydHlUeXBlPiB2YWx1ZTsKKyAgICAgICAg
ZGVjb2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBzdGF0ZS4qcHJvcGVydHkgPSAqdmFsdWU7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH07CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gY2xpcEJv
dW5kczsKKyAgICBkZWNvZGVyID4+IGNsaXBCb3VuZHM7CisgICAgaWYgKCFjbGlwQm91bmRzKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDaGFuZ2VG
bGFncz4gY2hhbmdlRmxhZ3M7CisgICAgZGVjb2RlciA+PiBjaGFuZ2VGbGFnczsKKyAgICBpZiAo
IWNoYW5nZUZsYWdzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGUgc3RhdGUoKmNsaXBCb3VuZHMsICpjaGFuZ2VGbGFncyk7CisKKyAgICBp
ZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpGaWxsUnVs
ZSwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zdHJva2VCcnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYg
KCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTdHJva2VTdHlsZSwg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hh
bmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9saW5lQ2FwKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29k
ZShzdGF0ZSwgQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lRGFzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6Ok1pdGVyTGltaXQsICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
Y29tcG9zaXRlTW9kZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFk
ZWNvZGUoc3RhdGUsIENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSwgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFk
ZWNvZGUoc3RhdGUsIENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZEFudGlhbGlh
cywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcykp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENo
YW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc2hvdWxkU21vb3RoRm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAg
IGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorCisgICAgcmV0dXJuIHN0YXRlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKKyAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpDVE0sCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6RmlsbEJydXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpGaWxsUnVsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLAorICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZSwKKworICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwLAorICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaCwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4sCisgICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQsCisKKyAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSwKKyAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdywK
KworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYSwK
KyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsCisgICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLAorI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlVzZURhcmtBcHBlYXJhbmNlCisjZW5kaWYKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjcyMTMyODUyNjFlNjkwY2Ez
MDYwZDdlMDI2ZTUwZTUyZWVhNTkwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaApAQCAtMCwwICsx
LDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9v
bCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKKyAgICB7CisgICAgICAg
IGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgbV9jb250ZXh0LnNhdmUoKTsKKyAg
ICB9CisgICAgCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNhdmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X3NhdmVBbmRSZXN0b3JlKTsKKyAgICAgICAgbV9jb250ZXh0LnNhdmUoKTsKKyAgICAgICAgbV9z
YXZlQW5kUmVzdG9yZSA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKKyAgICAgICAgbV9jb250ZXh0LnJl
c3RvcmUoKTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOworICAgIH0KKyAgICAK
KyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiAmbV9jb250ZXh0
OyB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CisgICAgYm9v
bCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKworY2xhc3MgVHJhbnNwYXJlbmN5TGF5ZXJTY29wZSB7
CitwdWJsaWM6CisgICAgVHJhbnNwYXJlbmN5TGF5ZXJTY29wZShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGZsb2F0IGFscGhhLCBib29sIGJlZ2luTGF5ZXIgPSB0cnVlKQorICAgICAgICA6IG1f
Y29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fYWxwaGEoYWxwaGEpCisgICAgICAgICwgbV9i
ZWdhbkxheWVyKGJlZ2luTGF5ZXIpCisgICAgeworICAgICAgICBpZiAoYmVnaW5MYXllcikKKyAg
ICAgICAgICAgIG1fY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1fYWxwaGEpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGJlZ2luTGF5ZXIoZmxvYXQgYWxwaGEpCisgICAgeworICAgICAg
ICBtX2FscGhhID0gYWxwaGE7CisgICAgICAgIG1fY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxh
eWVyKG1fYWxwaGEpOworICAgICAgICBtX2JlZ2FuTGF5ZXIgPSB0cnVlOworICAgIH0KKyAgICAK
KyAgICB+VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSgpCisgICAgeworICAgICAgICBpZiAobV9iZWdh
bkxheWVyKQorICAgICAgICAgICAgbV9jb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIGZs
b2F0IG1fYWxwaGE7CisgICAgYm9vbCBtX2JlZ2FuTGF5ZXI7Cit9OworCitjbGFzcyBHcmFwaGlj
c0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlciB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTdGFja0NoZWNrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorICAgICAgICA6IG1f
Y29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc3RhY2tTaXplKGNvbnRleHQuc3RhY2tTaXpl
KCkpCisgICAgeyB9CisKKyAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC5zdGFja1NpemUoKSAhPSBtX3N0YWNrU2l6ZSkK
KyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0ICVwIHN0YWNrIGNoYW5n
ZWQgYnkgJWQiLCAmbV9jb250ZXh0LCAoaW50KW1fY29udGV4dC5zdGFja1NpemUoKSAtIChpbnQp
bV9zdGFja1NpemUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1f
Y29udGV4dDsKKyAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKK307CisKK2NsYXNzIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW50ZXJwb2xh
dGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQorICAgICAgICA6
IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgLCBtX2N1cnJlbnRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKQorICAgICAgICAsIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKGludGVycG9s
YXRpb25RdWFsaXR5VG9Vc2UgIT0gSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgJiYgbV9j
dXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkK
KyAgICB7CisgICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkKKyAgICAg
ICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoaW50
ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSk7CisgICAgfQorCisgICAgZXhwbGljaXQgSW50ZXJwb2xh
dGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBz
dGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFsaXR5PiBpbnRlcnBvbGF0aW9uUXVhbGl0eSkK
KyAgICAgICAgOiBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoZ3JhcGhpY3NDb250ZXh0
LCBpbnRlcnBvbGF0aW9uUXVhbGl0eSA/IGludGVycG9sYXRpb25RdWFsaXR5LnZhbHVlKCkgOiBn
cmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQorICAgIHsKKyAgICB9
CisKKyAgICB+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKCkKKyAgICB7CisgICAgICAg
IGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkKKyAgICAgICAgICAgIG1fZ3JhcGhp
Y3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkobV9jdXJyZW50SW50ZXJwb2xh
dGlvblF1YWxpdHkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1f
Z3JhcGhpY3NDb250ZXh0OworICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1fY3VycmVudEludGVy
cG9sYXRpb25RdWFsaXR5OworICAgIGJvb2wgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IDE1ZGYxZGZkYjZmM2ExNmFk
NWVhZjY0NzI2MWZjZmM0YjdhOTNhYjQuLjVlOTA2MTViM2M2ZjFiYmNlYTU0OGEyZGFjYWQ0NWNh
ZGVhMDZhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuY3BwCkBAIC0xNjYsNiArMTY2LDExIEBAIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIExpbmVDYXAgY2FwU3R5bGUpCiAgICAgcmV0dXJuIHRzOwogfQog
CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lRGFzaCkKK3sKKyAg
ICByZXR1cm4gdHM7Cit9CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IExpbmVKb2luIGpvaW5TdHlsZSkKIHsKICAgICBzd2l0Y2ggKGpvaW5TdHlsZSkgewpAQCAtMTgy
LDQgKzE4NywyNCBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5l
Sm9pbiBqb2luU3R5bGUpCiAgICAgcmV0dXJuIHRzOwogfQogCitUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSkKK3sKKyAgICByZXR1cm4g
dHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFRleHREcmF3
aW5nTW9kZSkKK3sKKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU1vZGUpCit7CisgICAgcmV0dXJuIHRzOworfQorCitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBEcm9wU2hhZG93KQoreworICAg
IHJldHVybiB0czsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4IDRkMjA0ZTk3ZTVj
NTQ0ZDc3NmJmYTdmMzBhYWNjMWI3YzQ2M2UwZTAuLjI0N2JkNmUxZDM0MDA0YTZkMmQ4MjQ0OWVh
Zjc3M2FhMDEwMTY5YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmgKQEAgLTI1LDYgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRhc2hBcnJheS5oIgorI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgogI2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNzMsNiArNzYsNzkgQEAgZW51bSBjbGFz
cyBCbGVuZE1vZGUgOiB1aW50OF90IHsKICAgICBQbHVzTGlnaHRlcgogfTsKIAorc3RydWN0IENv
bXBvc2l0ZU1vZGUgeworICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wOworICAgIEJsZW5kTW9kZSBi
bGVuZE1vZGU7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29tcG9zaXRlTW9kZSYgb3Ro
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gb3AgPT0gb3RoZXIub3AgJiYgYmxlbmRNb2RlID09
IG90aGVyLmJsZW5kTW9kZTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU1vZGU+IGRlY29kZShEZWNvZGVyJik7
Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBDb21wb3NpdGVNb2RlOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG9wOworICAgIGVu
Y29kZXIgPDwgYmxlbmRNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpv
cHRpb25hbDxDb21wb3NpdGVNb2RlPiBDb21wb3NpdGVNb2RlOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBvcDsKKyAgICBk
ZWNvZGVyID4+IG9wOworICAgIGlmICghb3ApCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRNb2RlOworICAgIGRlY29kZXIg
Pj4gYmxlbmRNb2RlOworICAgIGlmICghYmxlbmRNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb3AsICpibGVuZE1vZGUgfSB9OworfQorCitzdHJ1
Y3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgeworICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4
X3QgeworICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVz
LAorICAgICAgICBTcGVsbGluZywKKyAgICAgICAgR3JhbW1hciwKKyAgICAgICAgQXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudCwKKyAgICAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCisgICAgfSBt
b2RlOworICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFy
a2VyTGluZVN0eWxlPiBkZWNvZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbW9kZTsKKyAgICBlbmNvZGVyIDw8IHNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpv
cHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9k
ZTsKKyAgICBkZWNvZGVyID4+IG1vZGU7CisgICAgaWYgKCFtb2RlKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRVc2VEYXJrQXBw
ZWFyYW5jZTsKKyAgICBkZWNvZGVyID4+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOworICAgIGlm
ICghc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4geyB7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfSB9Owor
fQorCiBlbnVtIGNsYXNzIEdyYWRpZW50U3ByZWFkTWV0aG9kIDogdWludDhfdCB7CiAgICAgUGFk
LAogICAgIFJlZmxlY3QsCkBAIC05Myw2ICsxNjksNDIgQEAgZW51bSBjbGFzcyBMaW5lQ2FwIDog
dWludDhfdCB7CiAgICAgU3F1YXJlCiB9OwogCitzdHJ1Y3QgTGluZURhc2ggeworICAgIERhc2hB
cnJheSBkYXNoZXM7CisgICAgZmxvYXQgb2Zmc2V0OworICAgIAorICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxMaW5lRGFzaD4gZGVjb2RlKERlY29kZXIm
KTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZURhc2gmIGEsIGNvbnN0
IExpbmVEYXNoJiBiKQoreworICAgIHJldHVybiBhLmRhc2hlcyA9PSBiLmRhc2hlcyAmJiBhLm9m
ZnNldCA9PSBiLm9mZnNldDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgTGlu
ZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
ZGFzaGVzOworICAgIGVuY29kZXIgPDwgb2Zmc2V0OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorc3RkOjpvcHRpb25hbDxMaW5lRGFzaD4gTGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RGFzaEFycmF5PiBkYXNoZXM7CisgICAgZGVj
b2RlciA+PiBkYXNoZXM7CisgICAgaWYgKCFkYXNoZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBvZmZzZXQ7CisgICAgZGVjb2RlciA+
PiBvZmZzZXQ7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4geyB7IFdURk1vdmUoKmRhc2hlcyksICpvZmZzZXQgfSB9OworfQorCiBl
bnVtIGNsYXNzIExpbmVKb2luIDogdWludDhfdCB7CiAgICAgTWl0ZXIsCiAgICAgUm91bmQsCkBA
IC0xMDUsNiArMjE3LDc2IEBAIGVudW0gSG9yaXpvbnRhbEFsaWdubWVudCB7CiAgICAgQWxpZ25I
Q2VudGVyCiB9OwogCisvLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNh
bnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRt
ZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7
CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisKK3N0cnVjdCBEcm9wU2hhZG93IHsKKyAg
ICBGbG9hdFNpemUgb2Zmc2V0OworICAgIGZsb2F0IGJsdXIgeyAwIH07CisgICAgQ29sb3IgY29s
b3I7CisgICAgU2hhZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6
RGVmYXVsdCB9OworICAgIAorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gY29s
b3IuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGlzQmx1cnJlZCgpIGNvbnN0IHsgcmV0dXJuIGlz
VmlzaWJsZSgpICYmIGJsdXI7IH0KKyAgICBib29sIGhhc091dHNldHMoKSBjb25zdCB7IHJldHVy
biBpc0JsdXJyZWQoKSB8fCAoaXNWaXNpYmxlKCkgJiYgIW9mZnNldC5pc1plcm8oKSk7IH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RHJv
cFNoYWRvdz4gZGVjb2RlKERlY29kZXImKTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRHJvcFNoYWRvdyYgYSwgY29uc3QgRHJvcFNoYWRvdyYgYikKK3sKKyAgICByZXR1cm4g
YS5vZmZzZXQgPT0gYi5vZmZzZXQgJiYgYS5ibHVyID09IGIuYmx1ciAmJiBhLmNvbG9yID09IGIu
Y29sb3IgJiYgYS5yYWRpdXNNb2RlID09IGIucmFkaXVzTW9kZTsKK30KKwordGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KK3ZvaWQgRHJvcFNoYWRvdzo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBvZmZzZXQ7CisgICAgZW5jb2RlciA8PCBibHVyOworICAg
IGVuY29kZXIgPDwgY29sb3I7CisgICAgZW5jb2RlciA8PCByYWRpdXNNb2RlOworfQorCit0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxEcm9wU2hhZG93PiBEcm9wU2hhZG93
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6
ZT4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYmx1
cjsKKyAgICBkZWNvZGVyID4+IGJsdXI7CisgICAgaWYgKCFibHVyKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7CisgICAgZGVj
b2RlciA+PiBjb2xvcjsKKyAgICBpZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiByYWRpdXNNb2RlOwor
ICAgIGRlY29kZXIgPj4gcmFkaXVzTW9kZTsKKyAgICBpZiAoIXJhZGl1c01vZGUpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICpvZmZzZXQsICpibHVyLCAq
Y29sb3IsICpyYWRpdXNNb2RlIH0gfTsKK30KKworZW51bSBTdHJva2VTdHlsZSB7CisgICAgTm9T
dHJva2UsCisgICAgU29saWRTdHJva2UsCisgICAgRG90dGVkU3Ryb2tlLAorICAgIERhc2hlZFN0
cm9rZSwKKyAgICBEb3VibGVTdHJva2UsCisgICAgV2F2eVN0cm9rZSwKK307CisKIGVudW0gVGV4
dEJhc2VsaW5lIHsKICAgICBBbHBoYWJldGljVGV4dEJhc2VsaW5lLAogICAgIFRvcFRleHRCYXNl
bGluZSwKQEAgLTEyMiwxNiArMzA0LDI4IEBAIGVudW0gVGV4dEFsaWduIHsKICAgICBSaWdodFRl
eHRBbGlnbgogfTsKIAotU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShXZWJDb3JlOjpDb21w
b3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKLVN0cmluZyBibGVuZE1vZGVOYW1l
KFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1ib29sIHBhcnNlQmxlbmRNb2RlKGNvbnN0IFN0cmluZyYs
IFdlYkNvcmU6OkJsZW5kTW9kZSYpOwotYm9vbCBwYXJzZUNvbXBvc2l0ZUFuZEJsZW5kT3BlcmF0
b3IoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3ImLCBXZWJDb3JlOjpC
bGVuZE1vZGUmKTsKK2VudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7CisgICAg
RmlsbCA9IDEgPDwgMCwKKyAgICBTdHJva2UgPSAxIDw8IDEsCit9OwogCi1XRUJDT1JFX0VYUE9S
VCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6
QmxlbmRNb2RlKTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcik7Ci1XRUJDT1JFX0VY
UE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2luZFJ1
bGUpOwordXNpbmcgVGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdN
b2RlPjsKKworU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlKTsKK1N0cmluZyBibGVuZE1vZGVOYW1lKEJsZW5kTW9kZSk7Citib29sIHBhcnNl
QmxlbmRNb2RlKGNvbnN0IFN0cmluZyYsIEJsZW5kTW9kZSYpOworYm9vbCBwYXJzZUNvbXBvc2l0
ZUFuZEJsZW5kT3BlcmF0b3IoY29uc3QgU3RyaW5nJiwgQ29tcG9zaXRlT3BlcmF0b3ImLCBCbGVu
ZE1vZGUmKTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIEJsZW5kTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29tcG9zaXRlT3BlcmF0b3IpOworV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IENvbXBvc2l0ZU1vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYsIEludGVycG9sYXRpb25RdWFsaXR5KTsKIFdFQkNPUkVfRVhQ
T1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lQ2Fw
KTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBMaW5lRGFzaCk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUpvaW4pOworV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFRleHREcmF3aW5nTW9kZSk7
CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgV2luZFJ1bGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYsIERyb3BTaGFkb3cpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKQEAgLTIxOSw0ICs0MTMsMzUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpMaW5lSm9pbj4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OlN0cm9rZVN0eWxlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZh
bHVlczwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHls
ZTo6Tm9TdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAorICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tl
U3R5bGU6OkRhc2hlZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG91YmxlU3Ry
b2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tlCisgICAgPjsKK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlPiB7
CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERy
YXdpbmdNb2RlLAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OkZpbGwsCisgICAg
ICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZTo6U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
Ok1vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRp
dmVzLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGlu
ZywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwK
KyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rp
b25SZXBsYWNlbWVudCwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9k
ZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCisgICAgPjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFn
ZUdlbmVyYXRlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05h
bWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggNGUwNzFmNzJmMzViZThhNThmYzRjZDU3
N2ExNDU2ZGUxNzQ2NjgyYy4uNDFiMDUxMWE4Zjc4YTE3OWIzMDRjZjg5ZDQxMDNlMzVkZTNlMTI1
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFn
ZUdlbmVyYXRlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEltYWdlRHJh
d1Jlc3VsdCBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGCiB7CiAjaWYgVVNFKE5FV19USEVNRSkgfHwgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7
Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVy
YXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1v
ZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7
CiAgICAgY29udGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJl
Y3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBo
aWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBo
aWNzQ29udGV4dC5oCmluZGV4IGI2MjM2Nzg4MGUzZTUzNTRiNjE3MTEzNDdjOWExMWI0MjI0Njg4
NWUuLjk5ZGQ3OGE5NzNhNjVhM2JmM2YzMDk0YWU1Nzg0NWJiNWE2MTk0YjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzgsODcgKzM4LDU3IEBAIHB1YmxpYzoKICAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBh
aW50CiAgICAgfTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHJlYXNvbnMpCi0gICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVh
c29ucykKKyAgICBOdWxsR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQorICAgICAgICA6IEdyYXBoaWNz
Q29udGV4dChpbml0aWFsQ2xpcCkKKyAgICAgICAgLCBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29u
cyhyZWFzb25zKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIHZv
aWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXll
ckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0KICAgICBi
b29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAg
Ym9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5v
bmU7IH0KICAgICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVh
c29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdJ
bWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFs
aWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJ
bWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9CiAgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFp
bnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQ
YWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQogCi0g
ICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KLQotI2lmIFVTRShD
RykKLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQotI2Vu
ZGlmCi0KLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0
ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfTsKLQotICAgIHZvaWQgZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KLQotICAgIEludFJlY3Qg
Y2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotCisgICAgdm9pZCBzYXZl
SW1wbCgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZUltcGwoKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWwgeyB9OwogI2lmIFVTRShDRykKICAgICB2b2lk
IGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsIHsgfQogICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVy
bigpIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQog
I2VuZGlmCiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0ID0gMSkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9Ci0g
ICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSb3VuZGVk
UmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9
Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbCB7IH0K
LSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVu
T2RkKSBmaW5hbCB7IH0KLSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsIHsgcmV0
dXJuIHJlY3Q7IH0KLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFsc2UsIFN0cm9rZVN0eWxl
ID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbCB7IH0KLSAgICB2
b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xpcE91dChjb25z
dCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bCB7IH0KLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCB0cmFuc2xh
dGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKSBmaW5hbCB7IH0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbCB7IHJldHVy
biB7IH07IH0KLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0K
LSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsg
fQotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
IGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwSW1w
bChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBQYXRoSW1wbChjb25z
dCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9CisgICAgdm9p
ZCBjbGlwT3V0SW1wbChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBP
dXRJbXBsKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVy
SW1wbChJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQogCi0gICAgRmxv
YXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3Rk
OjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQor
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZmlsbFJlY3RJbXBsKGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9Cisg
ICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7
IH0KIAotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25l
ZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpudWxsb3B0KSBmaW5hbCB7IH0K
LSAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
biA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFsIHsgfQorICAg
IHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBm
aWxsUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgCisgICAgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSkgZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAKLSAg
ICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVu
dGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRO
b3RoaW5nOyB9CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmlu
YWwgeyB9CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYpIGZpbmFsIHsgfQogCi0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKElt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkg
ZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9Ci0gICAgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGls
ZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyByZXR1cm4g
SW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbCB7IH0KIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KICAgICB2b2lkIGRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbCB7
IH0KQEAgLTEyNywyOCArOTcsMjYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZp
bmFsIHsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLQotICAgIHZvaWQg
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9
Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFk
aWVudCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3Jt
YWwpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZp
bmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9Ci0KKyAg
ICB2b2lkIGRyYXdJbWFnZUJ1ZmZlckltcGwoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsg
fQorICAgIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVyKiwgY29u
c3QgRmxvYXRSZWN0JiwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXR0ZXJuSW1wbChJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQogI2lmIEVOQUJMRShWSURF
TykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsIHsgfQogI2VuZGlmCiAKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9u
dCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1
bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25z
dCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWwgeyB9CisgICAgdm9p
ZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykg
ZmluYWwgeyByZXR1cm4gcmVjdDsgfQorCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShDQUlSTykK
ICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29u
dGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi1wcml2YXRl
OgogICAgIGNvbnN0IFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBtX3BhaW50SW52YWxpZGF0aW9u
UmVhc29ucyB7IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSB9OwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWYyNDU1ZWY1ODc5NGFkNjkyZWJlNjU4N2UwMzFhODlm
ZjAxNzExMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQgPSBzdHJ1Y3QgQ0dDb250ZXh0OworI2VsaWYgVVNFKENBSVJPKQorbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87Cit9Cit1c2luZyBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dENhaXJvOworI2Vsc2UKK3VzaW5nIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0ID0gdm9pZDsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
CmluZGV4IGJiMTM4YjUyOTdhNTIxZmJmN2Q2OTNjZDExNDEwNDQwMGZjYWJjNGUuLjU3ZDFjYWI5
YzRmMzc4MDA4OTJjMzhmZjE4Nzk5OWI3YmI4ZWE2YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xOTEsMTcgKzE5MSwxNyBAQCBT
aGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9h
dFNpemUmIG9mZnNldCwgY29uc3QgQwogICAgIHVwZGF0ZVNoYWRvd0JsdXJWYWx1ZXMoKTsKIH0K
IAotU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUpCi0gICAgOiBtX2NvbG9yKHN0YXRlLnNoYWRvd0NvbG9yKQotICAgICwgbV9ibHVyUmFkaXVz
KHN0YXRlLnNoYWRvd0JsdXIsIHN0YXRlLnNoYWRvd0JsdXIpCi0gICAgLCBtX29mZnNldChzdGF0
ZS5zaGFkb3dPZmZzZXQpCi0gICAgLCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQorU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBEcm9w
U2hhZG93JiBkcm9wU2hhZG93LCBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQorICAgIDog
bV9jb2xvcihkcm9wU2hhZG93LmNvbG9yKQorICAgICwgbV9ibHVyUmFkaXVzKGRyb3BTaGFkb3cu
Ymx1ciwgZHJvcFNoYWRvdy5ibHVyKQorICAgICwgbV9vZmZzZXQoZHJvcFNoYWRvdy5vZmZzZXQp
CisgICAgLCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KQogewogI2lmIFVTRShDRykKICAgICAvLyBDb3JlIEdyYXBoaWNzIGluY29ycmVjdGx5IHJlbmRl
cnMgc2hhZG93cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6Ly9wcm9ibGVtLzgxMDM0NDI+KSwK
ICAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBj
YW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLSAgICBpZiAoc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpIHsKLSAgICAgICAgZmxvYXQgc2hhZG93
Qmx1ciA9IHJhZGl1c1RvTGVnYWN5UmFkaXVzKHN0YXRlLnNoYWRvd0JsdXIpOworICAgIGlmIChk
cm9wU2hhZG93LnJhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KSB7CisgICAg
ICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhkcm9wU2hhZG93LmJs
dXIpOwogICAgICAgICBtX2JsdXJSYWRpdXMgPSBGbG9hdFNpemUoc2hhZG93Qmx1ciwgc2hhZG93
Qmx1cik7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmgKaW5kZXggMTRmZDgzZWRlMWExYmFjZjE3N2YzMzFlY2FkMWE0MzAyOTNm
NjAzYS4uNDVkMGU1ODMyOWNkZWVhYmZiNzhhNGQ1ZTY3YWI4ZDg4MWFlNTRmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaApAQCAtMzgsOCArMzgs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dFN0YXRlOwogY2xhc3MgSW1hZ2VCdWZmZXI7CitzdHJ1Y3QgRHJvcFNoYWRv
dzsKIAogY2xhc3MgU2hhZG93Qmx1ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhZG93
Qmx1cik7CkBAIC01Miw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIFNoYWRvd0JsdXIoKTsKICAg
ICBTaGFkb3dCbHVyKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9m
ZnNldCwgY29uc3QgQ29sb3ImLCBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gZmFsc2Up
OwotICAgIFNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICBTaGFk
b3dCbHVyKGNvbnN0IERyb3BTaGFkb3cmLCBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0g
ZmFsc2UpOwogCiAgICAgdm9pZCBzZXRTaGFkb3dWYWx1ZXMoY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgRmxvYXRTaXplJiAsIGNvbnN0IENvbG9yJiwgYm9vbCBpZ25vcmVUcmFuc2Zvcm1zID0gZmFs
c2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3Vy
Y2VCcnVzaC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVz
aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzU2M2U1ZmMzMmU3OTllYWEwMWEzZDM1YjhjNjdiMDVkZmEyZDAy
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJydXNoLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIy
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3Vy
Y2VCcnVzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NvdXJjZUJydXNoOjpTb3VyY2VC
cnVzaChjb25zdCBDb2xvciYgY29sb3IsIHN0ZDo6b3B0aW9uYWw8QnJ1c2g+JiYgYnJ1c2gpCisg
ICAgOiBtX2NvbG9yKGNvbG9yKQorICAgICwgbV9icnVzaChXVEZNb3ZlKGJydXNoKSkKK3sKK30K
KworY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBTb3VyY2VCcnVzaDo6c3BhY2VUcmFuc2Zvcm0oKSBj
b25zdAoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBZmZpbmVUcmFuc2Zvcm0+IGlkZW50
aXR5OworICAgIHJldHVybiBtX2JydXNoID8gbV9icnVzaC0+c3BhY2VUcmFuc2Zvcm0gOiBpZGVu
dGl0eS5nZXQoKTsKK30KKworR3JhZGllbnQqIFNvdXJjZUJydXNoOjpncmFkaWVudCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2JydXNoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAo
YXV0byogZ3JhZGllbnQgPSBzdGQ6OmdldF9pZjxSZWY8R3JhZGllbnQ+PigmbV9icnVzaC0+YnJ1
c2gpKQorICAgICAgICByZXR1cm4gZ3JhZGllbnQtPnB0cigpOworICAgIHJldHVybiBudWxscHRy
OworfQorCitQYXR0ZXJuKiBTb3VyY2VCcnVzaDo6cGF0dGVybigpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2JydXNoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byogcGF0dGVy
biA9IHN0ZDo6Z2V0X2lmPFJlZjxQYXR0ZXJuPj4oJm1fYnJ1c2gtPmJydXNoKSkKKyAgICAgICAg
cmV0dXJuIHBhdHRlcm4tPnB0cigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFNv
dXJjZUJydXNoOjpzZXRHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pCit7CisgICAgbV9icnVzaCA9IHsgV1RGTW92
ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtIH07Cit9CisKK3ZvaWQgU291cmNlQnJ1c2g6OnNl
dFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBz
cGFjZVRyYW5zZm9ybSkKK3sKKyAgICBtX2JydXNoID0geyBXVEZNb3ZlKHBhdHRlcm4pLCBzcGFj
ZVRyYW5zZm9ybSB9OworfQorCitXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIFNvdXJjZUJydXNoKQoreworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnJ1c2guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJy
dXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmExNWJiMGRmM2Q5OTM4ZmM4M2VkYjU4N2FlZGIwNTFkMGJlYmJk
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJydXNoLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvci5oIgor
I2luY2x1ZGUgIkdyYWRpZW50LmgiCisjaW5jbHVkZSAiUGF0dGVybi5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNvdXJjZUJydXNoIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQnJ1
c2ggeworICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50PiwgUmVmPFBhdHRlcm4+PiBi
cnVzaDsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHNwYWNlVHJhbnNmb3JtOworCisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
QnJ1c2g+IGRlY29kZShEZWNvZGVyJik7CisgICAgfTsKKworICAgIFNvdXJjZUJydXNoKCkgPSBk
ZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIFNvdXJjZUJydXNoKGNvbnN0IENvbG9yJiwgc3Rk
OjpvcHRpb25hbDxCcnVzaD4mJiA9IHN0ZDo6bnVsbG9wdCk7CisKKyAgICBjb25zdCBDb2xvciYg
Y29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CisgICAgdm9pZCBzZXRDb2xvcihjb25z
dCBDb2xvciBjb2xvcikgeyBtX2NvbG9yID0gY29sb3I7IH0KKworICAgIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8QnJ1c2g+JiBicnVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fYnJ1c2g7IH0KKworICAgIFdF
QkNPUkVfRVhQT1JUIEdyYWRpZW50KiBncmFkaWVudCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIFBhdHRlcm4qIHBhdHRlcm4oKSBjb25zdDsKKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHNwYWNlVHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEdyYWRpZW50KFJlZjxHcmFk
aWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsgfSk7Cisg
ICAgdm9pZCBzZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHNwYWNlVHJhbnNmb3JtID0geyB9KTsKKworICAgIGJvb2wgaXNQcmltaXRpdmUoKSBjb25zdCB7
IHJldHVybiAhbV9icnVzaCAmJiBtX2NvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpOyB9CisKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U291cmNlQnJ1
c2g+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgQ29sb3IgbV9jb2xvciB7IENv
bG9yOjpibGFjayB9OworICAgIHN0ZDo6b3B0aW9uYWw8QnJ1c2g+IG1fYnJ1c2g7Cit9OworCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBS
ZWY8UGF0dGVybj4+JiBhLCBjb25zdCBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50PiwgUmVmPFBh
dHRlcm4+PiYgYikKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihhLAorICAgICAgICBbJl0g
KGNvbnN0IFJlZjxHcmFkaWVudD4mIGFHcmFkaWVudCkgeworICAgICAgICAgICAgaWYgKGF1dG8q
IGJHcmFkaWVudCA9IHN0ZDo6Z2V0X2lmPFJlZjxHcmFkaWVudD4+KCZiKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYUdyYWRpZW50ID09ICpiR3JhZGllbnQ7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29uc3QgUmVmPFBhdHRlcm4+JiBhUGF0
dGVybikgeworICAgICAgICAgICAgaWYgKGF1dG8qIGJQYXR0ZXJuID0gc3RkOjpnZXRfaWY8UmVm
PFBhdHRlcm4+PigmYikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFQYXR0ZXJuID09ICpiUGF0
dGVybjsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICk7Cit9CisK
K2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlQnJ1c2g6OkJydXNoJiBhLCBjb25z
dCBTb3VyY2VCcnVzaDo6QnJ1c2gmIGIpCit7CisgICAgcmV0dXJuIGEuYnJ1c2ggPT0gYi5icnVz
aCAmJiBhLnNwYWNlVHJhbnNmb3JtID09IGIuc3BhY2VUcmFuc2Zvcm07Cit9CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgU291cmNlQnJ1c2gmIGEsIGNvbnN0IFNvdXJjZUJydXNoJiBi
KQoreworICAgIHJldHVybiBhLmNvbG9yKCkgPT0gYi5jb2xvcigpICYmIGEuYnJ1c2goKSA9PSBi
LmJydXNoKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+Cit2b2lkIFNvdXJjZUJy
dXNoOjpCcnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rl
ciA8PCBzcGFjZVRyYW5zZm9ybTsKKyAgICBXVEY6OnN3aXRjaE9uKGJydXNoLAorICAgICAgICBb
Jl0gKGNvbnN0IFJlZjxHcmFkaWVudD4mIGdyYWRpZW50KSB7CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHRydWUgPDwgZ3JhZGllbnQuZ2V0KCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29u
c3QgUmVmPFBhdHRlcm4+JiBwYXR0ZXJuKSB7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGZhbHNl
IDw8IHBhdHRlcm4uZ2V0KCk7CisgICAgICAgIH0KKyAgICApOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxTb3VyY2VCcnVzaDo6QnJ1c2g+IFNvdXJjZUJy
dXNoOjpCcnVzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25h
bDxBZmZpbmVUcmFuc2Zvcm0+IHNwYWNlVHJhbnNmb3JtOworICAgIGRlY29kZXIgPj4gc3BhY2VU
cmFuc2Zvcm07CisgICAgaWYgKCFzcGFjZVRyYW5zZm9ybSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gaGFzR3JhZGllbnQ7CisgICAgZGVj
b2RlciA+PiBoYXNHcmFkaWVudDsKKyAgICBpZiAoIWhhc0dyYWRpZW50KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIAorICAgIGlmICgqaGFzR3JhZGllbnQpIHsKKyAgICAgICAg
YXV0byBncmFkaWVudCA9IEdyYWRpZW50OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmICgh
Z3JhZGllbnQpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1
cm4geyB7IFdURk1vdmUoKmdyYWRpZW50KSwgKnNwYWNlVHJhbnNmb3JtIH0gfTsKKyAgICB9CisK
KyAgICBhdXRvIHBhdHRlcm4gPSBQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7CisgICAgaWYgKCFw
YXR0ZXJuKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgV1RG
TW92ZSgqcGF0dGVybiksICpzcGFjZVRyYW5zZm9ybSB9IH07Cit9CisKK3RlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Cit2b2lkIFNvdXJjZUJydXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fY29sb3I7CisgICAgZW5jb2RlciA8PCBtX2JydXNoOwor
fQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxTb3VyY2VCcnVzaD4g
U291cmNlQnJ1c2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9u
YWw8Q29sb3I+IGNvbG9yOworICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpv
cHRpb25hbDxCcnVzaD4+IGJydXNoOworICAgIGRlY29kZXIgPj4gYnJ1c2g7CisgICAgaWYgKCFi
cnVzaCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBTb3VyY2VC
cnVzaCgqY29sb3IsIFdURk1vdmUoKmJydXNoKSk7Cit9CisKK1dURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBTb3VyY2VCcnVzaCk7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IGNhMjVmYjNkOGE4MDFmMzAyZGZlZTFmYmI5ZTY2
NTNmYTE2OWY5OGUuLjAwNjYzOGEzZGMxMGNhZDI0MWRkYjQwMzQ2MDE1NTQxMTdiZWVkYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcApAQCAtMTgzMyw3ICsxODMzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6
OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBU
cmEKICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4o
KSwgc2l6ZSgpKTsKIAotICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQo
Km1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZp
bmVUcmFuc2Zvcm0oKSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4
dCgqbV9kaXNwbGF5TGlzdCwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAg
ICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4
NTZhMDQzOTNmZDI0ZTk2MjhmNmZlOTM0NjllZWJlYTRhYmI1OTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVy
LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7CitwdWJsaWM6CisgICAgQ0dD
b250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9y
ZSA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9zYXZl
QW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRS
ZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOworICAg
IH0KKyAgICAKKyAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCisgICAgeworICAgICAgICBpZiAo
bV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUobV9j
b250ZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUobV9j
b250ZXh0KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7CisgICAgfQorCisgICAg
dm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsK
KyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOworICAgICAgICBtX3Nh
dmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgZGlkU2F2ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9yZTsKKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7CisgICAgYm9vbCBtX3NhdmVB
bmRSZXN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDMyNDVjNjAwNDMxNTUyZDUxM2I3NGVlYmMwOWYz
MThlZWMzZGQ3MmEuLjhkMTNlMzc0ZmFjMjYxMGVlMWQ3OWQyMWNhYTQ3MDgxMjYwZjllYjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC0xODUsMTQgKzE4NSwxMyBAQCBzdGF0aWMgdm9pZCBzZXRDR0JsZW5kTW9kZShDR0NvbnRl
eHRSZWYgY29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZQogfQogCiBHcmFw
aGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkK
KyAgICA6IEdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY2dDb250
ZXh0KSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmluaXRpYWxDaGFuZ2VGbGFncywgQ0dDb250ZXh0
R2V0Q1RNKGNnQ29udGV4dCkpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY2dD
b250ZXh0KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0
aCBvdXIgc3RhdGUuCi0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgeyBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29s
b3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UgfSk7
Ci0gICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29yZUludGVycG9sYXRp
b25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4
dCgpKSk7CisgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb3JlSW50ZXJwb2xhdGlv
blF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJuYWxQbGF0Zm9y
bUNvbnRleHQoKSkpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRD
RygpCkBAIC0yMDYsMjggKzIwNSwyOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dENHOjpoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdAogfQogCiBDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6
OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgLy8gU29tZSBjYWxsZXJzIHRvIHRoaXMg
bWV0aG9kIHVzZXMgdGhlIHBsYXRmb3JtIGNvbnRleHQgb3V0c2lkZSB0aGUgc2NvcGUKKyAgICAv
LyBvZiB0aGlzIGNsYXNzLiBDb21taXQgYW55IGNoYW5nZXMgYmVmb3JlIHJldHVybmluZyB0aGUg
cGxhdGZvcm0gY29udGV4dC4KKyAgICBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dENHJj4oKnRo
aXMpLmFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmV0dXJuIGludGVybmFsUGxhdGZvcm1Db250
ZXh0KCk7Cit9CisKK0NHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJuYWxQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdAogewogICAgIEFTU0VSVChtX2RhdGEtPm1fY2dDb250ZXh0KTsK
ICAgICByZXR1cm4gbV9kYXRhLT5tX2NnQ29udGV4dC5nZXQoKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6c2F2ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzYXZlSW1wbCgpCiB7
Ci0gICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7Ci0KICAgICAvLyBOb3RlOiBEbyBub3QgdXNl
IHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdl
IHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gc2F2ZSBvZiB0aGUgc2Vjb25kYXJ5IGNv
bnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgogICAgIENHQ29u
dGV4dFNhdmVHU3RhdGUocGxhdGZvcm1Db250ZXh0KCkpOwogICAgIG1fZGF0YS0+c2F2ZSgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpyZXN0b3JlKCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnJlc3RvcmVJbXBsKCkKIHsKLSAgICBpZiAoIXN0YWNrU2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKLQogICAgIC8vIE5vdGU6
IERvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjbGFzcyBpbXBsZW1lbnRhdGlv
biwgc2luY2Ugd2Ugd2FudCB0byBhdm9pZCB0aGUgZXh0cmEKICAgICAvLyByZXN0b3JlIG9mIHRo
ZSBzZWNvbmRhcnkgY29udGV4dCAoaW4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cu
aCkuCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQoKSk7CkBAIC0z
OTYsNyArMzk2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKICAgICBDR0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LCBkZXN0UmVjdCk7CiAKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVN
b2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0p
OwogCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGRlc3RSZWN0LngoKSwgZGVz
dFJlY3QueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNv
bnRleHQsIDEsIC0xKTsKQEAgLTU1NSwxMyArNTU1LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuc3Ryb2tl
UGF0dGVybikKKyAgICBpZiAoIXN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VD
VE0oY2dDb250ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUuc3Ry
b2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOworICAgIGF1
dG8gcGxhdGZvcm1QYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4odXNlclRvQmFzZUNUTSk7CiAgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJl
dHVybjsKIApAQCAtNTc0LDEzICs1NzQsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBw
bHlTdHJva2VQYXR0ZXJuKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0
dGVybigpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmICghZmlsbFBh
dHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0g
QWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKLSAgICBhdXRv
IHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0
dGVybih1c2VyVG9CYXNlQ1RNKTsKKyAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IGZpbGxQYXR0
ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKICAgICBpZiAoIXBs
YXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01OTEsMTEgKzU5MSwxMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBDR0NvbnRleHRT
ZXRGaWxsUGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5B
bHBoYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0aERyYXdpbmdNb2RlJiBtb2RlKQor
c3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCiB7Ci0gICAgYm9vbCBzaG91
bGRGaWxsID0gc3RhdGUuZmlsbFBhdHRlcm4gfHwgc3RhdGUuZmlsbENvbG9yLmlzVmlzaWJsZSgp
OwotICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCAoc3RhdGUu
c3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UgJiYgc3RhdGUuc3Ryb2tlQ29sb3IuaXNWaXNpYmxlKCkp
OwotICAgIGJvb2wgdXNlRU9GaWxsID0gc3RhdGUuZmlsbFJ1bGUgPT0gV2luZFJ1bGU6OkV2ZW5P
ZGQ7CisgICAgYm9vbCBzaG91bGRGaWxsID0gY29udGV4dC5maWxsUGF0dGVybigpIHx8IGNvbnRl
eHQuZmlsbENvbG9yKCkuaXNWaXNpYmxlKCk7CisgICAgYm9vbCBzaG91bGRTdHJva2UgPSBjb250
ZXh0LnN0cm9rZVBhdHRlcm4oKSB8fCAoY29udGV4dC5zdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tl
ICYmIGNvbnRleHQuc3Ryb2tlQ29sb3IoKS5pc1Zpc2libGUoKSk7CisgICAgYm9vbCB1c2VFT0Zp
bGwgPSBjb250ZXh0LmZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQ7CiAKICAgICBpZiAo
c2hvdWxkRmlsbCkgewogICAgICAgICBpZiAoc2hvdWxkU3Ryb2tlKSB7CkBAIC02MjQsOSArNjI0
LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OwogCi0gICAgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0ZS5zdHJva2VHcmFkaWVudCkg
eworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAg
IC8vIFdlIGRvbid0IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8gZmlsbCAmIHN0cm9rZSBhIHBh
dGggdXNpbmcgZ3JhZGllbnRzCiAgICAgICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRo
aXMuCiAgICAgICAgIGZpbGxQYXRoKHBhdGgpOwpAQCAtNjM0LDEzICs2MzMsMTMgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBh
dHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIGlmIChzdGF0ZS5zdHJv
a2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tl
UGF0dGVybigpOwogCiAgICAgQ0dQYXRoRHJhd2luZ01vZGUgZHJhd2luZ01vZGU7Ci0gICAgaWYg
KGNhbGN1bGF0ZURyYXdpbmdNb2RlKHN0YXRlLCBkcmF3aW5nTW9kZSkpIHsKKyAgICBpZiAoY2Fs
Y3VsYXRlRHJhd2luZ01vZGUoKnRoaXMsIGRyYXdpbmdNb2RlKSkgewogI2lmIEhBVkUoQ0dfQ09O
VEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgICAgICBDR0NvbnRleHREcmF3UGF0aERpcmVjdChj
b250ZXh0LCBkcmF3aW5nTW9kZSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CiAjZWxz
ZQpAQCAtNjU4LDcgKzY1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxH
cmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgRmxv
YXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIEZsb2F0
U2l6ZSBsYXllclNpemUgPSBnZXRDVE0oKS5tYXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTY3MCwz
MyArNjY5LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0obGF5ZXJDb250ZXh0LCAt
cmVjdC54KCksIC1yZWN0LnkoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgobGF5
ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBw
YXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXll
ckNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICAg
ICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkp
OwogCiAgICAgICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAg
ICAgICAgICAgICAgICBDR0NvbnRleHRFT0NsaXAobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7CiAKLSAg
ICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAg
ICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAg
ICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQp
OwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0
aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0
KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShj
b250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAgICAgIGlmIChmaWxsUnVs
ZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xp
cChjb250ZXh0KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRD
bGlwKGNvbnRleHQpOwogCi0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQo
KnRoaXMpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsUGF0
dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigp
OwogI2lmIEhBVkUoQ0dfQ09OVEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgIENHQ29udGV4dERy
YXdQYXRoRGlyZWN0KGNvbnRleHQsIGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQgPyBr
Q0dQYXRoRU9GaWxsIDoga0NHUGF0aEZpbGwsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51bGxwdHIp
OwpAQCAtNzE3LDcgKzcxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChz
dHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAg
ICAgRmxvYXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAg
IGZsb2F0IGxpbmVXaWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtNzQyLDggKzc0MSw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAg
ICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0
aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxh
eWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0g
ICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENU
TShsYXllckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ry
b2tlR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgZmxvYXQg
ZGVzdGluYXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAgICAg
IGZsb2F0IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0aCk7CkBAIC03
NTQsMTMgKzc1MywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgu
cGxhdGZvcm1QYXRoKCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ry
b2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwot
ICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50
LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwg
c3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5w
YWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAg
ICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICNpZiBVU0UoQ0dfQ09OVEVYVF9TVFJPS0VfTElO
RV9TRUdNRU5UU19XSEVOX1NUUk9LSU5HX1BBVEgpCkBAIC03ODUsNyArNzg0LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9z
dGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkpIHsKICAgICAgICAg
Q0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBpZiAoaGFz
U2hhZG93KCkpIHsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXllclNpemUgPSBnZXRDVE0oKS5t
YXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTc5OCwyNyArNzk3LDI3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgICAgIENH
Q29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENHQ29udGV4
dENsaXAobGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxh
eWVyQ29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAg
ICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgp
KTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogICAg
ICAgICAgICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxheWVyLmdl
dCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dCwgcmVjdCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwg
bV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRl
LmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0
Q1RNKGNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIGZpbGxHcmFk
aWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigpKQog
ICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKICAgICBib29sIGRyYXdPd25TaGFkb3cgPSBj
YW5Vc2VTaGFkb3dCbHVyKCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNv
bnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAg
IC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhD
b2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29u
dGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAg
ICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0Js
dXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkp
OwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9hdFJvdW5k
ZWRSZWN0KHJlY3QpKTsKICAgICB9CiAKQEAgLTgzNyw5ICs4MzYsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093
blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYg
Q0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3Jt
Q29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93
V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0Js
dXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hh
ZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNv
bnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3QocmVjdCkp
OwogICAgIH0KIApAQCAtODUyLDcgKzg1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAg
ICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAg
ICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKQEAgLTg2NCw5ICs4NjMsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAg
ICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dp
dGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAot
ICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRv
d0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCByZWN0KTsK
ICAgICB9CiAKQEAgLTg3NCw3ICs4NzMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxs
Um91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0CiAgICAg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpID0gcmVjdC5yYWRpaSgpOwogICAg
IGJvb2wgZXF1YWxXaWR0aHMgPSAocmFkaWkudG9wTGVmdCgpLndpZHRoKCkgPT0gcmFkaWkudG9w
UmlnaHQoKS53aWR0aCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSA9PSByYWRpaS5ib3R0
b21MZWZ0KCkud2lkdGgoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSA9PSByYWRpaS5i
b3R0b21SaWdodCgpLndpZHRoKCkpOwogICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gKHJhZGlpLnRv
cExlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgJiYgcmFkaWku
Ym90dG9tTGVmdCgpLmhlaWdodCgpID09IHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgJiYgcmFk
aWkudG9wUmlnaHQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgpKTsK
LSAgICBib29sIGhhc0N1c3RvbUZpbGwgPSBtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRl
LmZpbGxQYXR0ZXJuOworICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IGZpbGxHcmFkaWVudCgpIHx8
IGZpbGxQYXR0ZXJuKCk7CiAgICAgaWYgKCFoYXNDdXN0b21GaWxsICYmIGVxdWFsV2lkdGhzICYm
IGVxdWFsSGVpZ2h0cyAmJiByYWRpaS50b3BMZWZ0KCkud2lkdGgoKSAqIDIgPT0gci53aWR0aCgp
ICYmIHJhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSAqIDIgPT0gci5oZWlnaHQoKSkKICAgICAgICAg
Q0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3QoY29udGV4dCwgcik7CiAgICAgZWxzZSB7CkBAIC05
MTMsOSArOTEyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG8KICAgICBDR0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdP
d25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dD
b250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAw
LCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6
ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRl
KTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd0luc2V0U2hh
ZG93KCp0aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3QpOwogICAgIH0KIApAQCAtOTI4LDQzICs5
MjcsNDUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG8KICAgICBzZXRGaWxsQ29sb3Iob2xkRmls
bENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwSW1wbChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCk7CiAgICAgbV9kYXRhLT5jbGlwKHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmNsaXBPdXRJbXBsKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICAvLyBGSVhNRTog
VXNpbmcgQ0dSZWN0SW5maW5pdGUgaXMgbXVjaCBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRoZSBjbGlw
IGJvdW5kaW5nIGJveC4gSG93ZXZlciwgZHVlCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEy
NTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVk
IGNvbnRleHQgdGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3Qg
anVzdCBhIHRyYW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVt
LzE0NjM0NDUzPgogICAgIC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29u
dGV4dCBlaXRoZXIuCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSA9IGdldENUTSgpOwotICAgIGJvb2wg
Y2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgp
KSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7Ci0gICAgQ0dSZWN0
IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dD
b250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9OwotICAg
IENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRk
UmVjdHMocGxhdGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKLSAgICBDR0NvbnRleHRFT0NsaXAo
cGxhdGZvcm1Db250ZXh0KCkpOworICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0Nv
bnRleHRHZXRUeXBlKGNvbnRleHQpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdN
b2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0
bS5jKCkpKTsKKyAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8g
Q0dSZWN0SW5maW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCksIHJl
Y3QgfTsKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRk
UmVjdHMoY29udGV4dCwgcmVjdHMsIDIpOworICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dEltcGwoY29uc3QgUGF0aCYgcGF0aCkKIHsK
LSAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENHQ29udGV4
dEFkZFJlY3QocGxhdGZvcm1Db250ZXh0KCksIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChw
bGF0Zm9ybUNvbnRleHQoKSkpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENHQ29udGV4
dEFkZFJlY3QoY29udGV4dCwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpKTsK
ICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQotICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHBsYXRm
b3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICBDR0NvbnRleHRFT0NsaXAo
cGxhdGZvcm1Db250ZXh0KCkpOworICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBh
dGgucGxhdGZvcm1QYXRoKCkpOworICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aEltcGwoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENH
Q29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOwor
ICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4dEFk
ZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAKICAgICAgICAgaWYgKGNsaXBS
dWxlID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNv
bnRleHQpOwpAQCAtOTc1LDExICs5NzYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICBtX2RhdGEtPmNs
aXAocGF0aCk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMoKSBj
b25zdAotewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3Vu
ZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwpAQCAtMTAwMiwxNyArOTk4
LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAg
ICByZXN0b3JlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3Vu
ZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNl
dCwgQ0dGbG9hdCYgeU9mZnNldCkKK3N0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fy
b3VuZElmTmVlZGVkKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zs
b2F0JiB5T2Zmc2V0KQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJ
TikKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKHhPZmZzZXQp
OwogICAgIFVOVVNFRF9QQVJBTSh5T2Zmc2V0KTsKICNlbHNlCi0gICAgaWYgKGNvbnRleHQucmVu
ZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpCisgICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJl
Y3RTaGFkb3dPZmZzZXRzKGNvbnRleHQpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXb3Jr
IGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vNTUzOTM4OD4gYnkgZW5zdXJpbmcgdGhhdCB0aGUgb2Zm
c2V0cyB3aWxsIGdldCB0cnVuY2F0ZWQKQEAgLTEwMzAsMTAgKzEwMjMsNTUgQEAgc3RhdGljIHZv
aWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0Q0dMaW5l
Q2FwKENHQ29udGV4dFJlZiBjb250ZXh0LCBMaW5lQ2FwIGNhcCkKIHsKLSAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzd2l0
Y2ggKGNhcCkgeworICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKKyAgICAgICAgQ0dDb250ZXh0U2V0
TGluZUNhcChjb250ZXh0LCBrQ0dMaW5lQ2FwQnV0dCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTGluZUNhcDo6Um91bmQ6CisgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAoY29udGV4dCwg
a0NHTGluZUNhcFJvdW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQ2FwOjpTcXVh
cmU6CisgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcFNxdWFy
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KIAorc3RhdGljIHZvaWQgc2V0Q0dMaW5lSm9p
bihDR0NvbnRleHRSZWYgY29udGV4dCwgTGluZUpvaW4gam9pbikKK3sKKyAgICBzd2l0Y2ggKGpv
aW4pIHsKKyAgICBjYXNlIExpbmVKb2luOjpNaXRlcjoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZUpvaW4oY29udGV4dCwga0NHTGluZUpvaW5NaXRlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTGluZUpvaW46OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0
LCBrQ0dMaW5lSm9pblJvdW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lSm9pbjo6
QmV2ZWw6CisgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2lu
QmV2ZWwpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNldENHTWl0
ZXJMaW1pdChDR0NvbnRleHRSZWYgY29udGV4dCwgZmxvYXQgbGltaXQpCit7CisgICAgQ0dDb250
ZXh0U2V0TWl0ZXJMaW1pdChjb250ZXh0LCBsaW1pdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENH
TGluZURhc2goQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQoreworICAgIGlmIChkYXNoT2Zmc2V0IDwgMCkgeworICAgICAgICBm
bG9hdCBsZW5ndGggPSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIGxlbmd0aCArPSBzdGF0aWNfY2FzdDxmbG9hdD4oZGFz
aGVzW2ldKTsKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBm
bW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7CisgICAgfQorICAgIENHQ29udGV4dFNl
dExpbmVEYXNoKGNvbnRleHQsIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXpl
KCkpOworfQorCitzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhDR0NvbnRleHRSZWYgY29udGV4dCwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxv
YXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KQorewogICAgIGlmIChvZmZzZXQuaXNaZXJvKCkgJiYgIWJsdXIpIHsKICAgICAgICAgQ0dDb250
ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogICAgICAg
ICByZXR1cm47CkBAIC0xMDQ1LDcgKzEwODMsNyBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhj
b25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJgog
ICAgIENHRmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWlnaHQoKTsKICAgICBDR0Zsb2F0IGJsdXJS
YWRpdXMgPSBibHVyOwogCi0gICAgaWYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoKSkgeworICAgIGlmICghc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKICAgICAg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IGdldFVzZXJUb0Jhc2VDVE0oY29u
dGV4dCk7CiAKICAgICAgICAgQ0dGbG9hdCBBID0gdXNlclRvQmFzZUNUTS5hICogdXNlclRvQmFz
ZUNUTS5hICsgdXNlclRvQmFzZUNUTS5iICogdXNlclRvQmFzZUNUTS5iOwpAQCAtMTA2Niw3ICsx
MTA0LDggQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICAvLyBFeHRyZW1lICJibHVyIiB2
YWx1ZXMgY2FuIG1ha2UgdGV4dCBkcmF3aW5nIGNyYXNoIG9yIHRha2UgY3JhenkgbG9uZyB0aW1l
cywgc28gY2xhbXAKICAgICBibHVyUmFkaXVzID0gc3RkOjptaW4oYmx1clJhZGl1cywgbmFycm93
UHJlY2lzaW9uVG9DR0Zsb2F0KDEwMDAuMCkpOwogCi0gICAgYXBwbHlTaGFkb3dPZmZzZXRXb3Jr
YXJvdW5kSWZOZWVkZWQoZ3JhcGhpY3NDb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICBp
ZiAocmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKKyAgICAgICAg
YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29udGV4dCwgeE9mZnNldCwgeU9m
ZnNldCk7CiAKICAgICAvLyBDaGVjayBmb3IgYW4gaW52YWxpZCBjb2xvciwgYXMgdGhpcyBtZWFu
cyB0aGF0IHRoZSBjb2xvciB3YXMgbm90IHNldCBmb3IgdGhlIHNoYWRvdwogICAgIC8vIGFuZCB3
ZSBzaG91bGQgdGhlcmVmb3JlIGp1c3QgdXNlIHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KQEAg
LTEwNzYsNDQgKzExMTUsODEgQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICAgICAgQ0dD
b250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZU1ha2UoeE9mZnNldCwgeU9m
ZnNldCksIGJsdXJSYWRpdXMsIGNhY2hlZENHQ29sb3IoY29sb3IpLmdldCgpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFn
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBh
dXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdl
cygpKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNl
dExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlja25lc3MsIDAuZikp
OworICAgIGF1dG8gY29udGV4dCA9IGludGVybmFsUGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBp
ZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdl
KSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2Fj
aGVkQ0dDb2xvcihzdGF0ZS5zdHJva2VDb2xvcikuZ2V0KCkpOworICAgIGZvciAoYXV0byBjaGFu
Z2UgOiBzdGF0ZSgpLmNoYW5nZXMoKSkgeworICAgICAgICBzd2l0Y2ggKGNoYW5nZSkgeworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTToKKyAgICAgICAgICAg
IENHQ29udGV4dFNldENUTShjb250ZXh0LCBzdGF0ZSgpLmdldENUTSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZS5m
aWxsQ29sb3IpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZp
bGxCcnVzaDoKKyAgICAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0YXRlKCkuZmls
bEJydXNoKCkuY29sb3IoKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBDR0Nv
bnRleHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5hbHBoYSk7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ0dD
b250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0YXRlKCkuc3Ryb2tlVGhpY2tu
ZXNzKCksIDAuZikpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKQotICAgICAgICBzZXRDR0Js
ZW5kTW9kZShjb250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2Rl
KTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVz
aDoKKyAgICAgICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQs
IGNhY2hlZENHQ29sb3Ioc3RhdGUoKS5zdHJva2VCcnVzaCgpLmNvbG9yKCkpLmdldCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0
RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdN
b2RlKSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNh
cDoKKyAgICAgICAgICAgIHNldENHTGluZUNhcChjb250ZXh0LCBzdGF0ZSgpLmxpbmVDYXAoKSk7
CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0
U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW46CisgICAgICAgICAg
ICBzZXRDR0xpbmVKb2luKGNvbnRleHQsIHN0YXRlKCkubGluZUpvaW4oKSk7CisgICAgICAgICAg
ICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9v
dGhGb250cyhjb250ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2g6CisgICAgICAgICAgICBzZXRD
R0xpbmVEYXNoKGNvbnRleHQsIHN0YXRlKCkubGluZURhc2goKS5kYXNoZXMsIHN0YXRlKCkubGlu
ZURhc2goKS5vZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFu
Z2UpKQotICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBj
Z0ludGVycG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0Ogor
ICAgICAgICAgICAgc2V0Q0dNaXRlckxpbWl0KGNvbnRleHQsIHN0YXRlKCkubWl0ZXJMaW1pdCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQotICAgICAgICBzZXRDR1NoYWRvdygqdGhpcywg
c3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29s
b3IpOwotfQorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBv
c2l0ZU1vZGU6CisgICAgICAgICAgICBzZXRDR0JsZW5kTW9kZShjb250ZXh0LCBzdGF0ZSgpLmNv
bXBvc2l0ZU1vZGUoKS5vcCwgc3RhdGUoKS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0
KGZsb2F0IGxpbWl0KQotewotICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250
ZXh0KCksIGxpbWl0KTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpEcm9wU2hhZG93OgorICAgICAgICAgICAgc2V0Q0dTaGFkb3coY29udGV4dCwgcmVuZGVyaW5n
TW9kZSgpLCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5vZmZzZXQsIHN0YXRlKCkuZHJvcFNoYWRvdygp
LmJsdXIsIHN0YXRlKCkuZHJvcFNoYWRvdygpLmNvbG9yLCBzdGF0ZSgpLnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYToKKyAgICAgICAgICAgIENHQ29udGV4dFNldEFs
cGhhKGNvbnRleHQsIHN0YXRlKCkuYWxwaGEoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHk6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShj
b250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5KHN0YXRlKCkuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlRleHREcmF3aW5nTW9kZToKKyAgICAgICAgICAgIENHQ29u
dGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9kZShzdGF0ZSgp
LnRleHREcmF3aW5nTW9kZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAg
ICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZSgpLnNob3VsZEFu
dGlhbGlhcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHM6CisgICAgICAgICAgICBDR0Nv
bnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250ZXh0LCBzdGF0ZSgpLnNob3VsZFNtb290aEZv
bnRzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgY2xlYXJTdGF0ZUNoYW5nZXMoKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cikKQEAgLTExMjUsNyArMTIwMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLnN0
cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgaWYg
KGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkb3VibGVMaW5lV2lkdGgg
PSBsaW5lV2lkdGggKiAyOwogICAgICAgICAgICAgZmxvYXQgYWRqdXN0ZWRXaWR0aCA9IGNlaWxm
KHJlY3Qud2lkdGgoKSArIGRvdWJsZUxpbmVXaWR0aCk7CkBAIC0xMTM1LDcgKzEyMTEsNiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbGluZVdpZHRoKQogICAgICAgICAgICAgYXV0byBsYXllciA9IGFkb3B0Q0YoQ0dMYXll
ckNyZWF0ZVdpdGhDb250ZXh0KGNvbnRleHQsIGxheWVyU2l6ZSwgMCkpOwogCiAgICAgICAgICAg
ICBDR0NvbnRleHRSZWYgbGF5ZXJDb250ZXh0ID0gQ0dMYXllckdldENvbnRleHQobGF5ZXIuZ2V0
KCkpOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSBsaW5lV2lkdGg7CiAg
ICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgobGF5ZXJDb250ZXh0LCBsaW5lV2lkdGgp
OwogCiAgICAgICAgICAgICAvLyBDb21wZW5zYXRlIGZvciB0aGUgbGluZSB3aWR0aCwgb3RoZXJ3
aXNlIHRoZSBsYXllcidzIHRvcC1sZWZ0IGNvcm5lciB3b3VsZCBiZQpAQCAtMTE0OSw4ICsxMjI0
LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QobGF5
ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0
cm9rZWRQYXRoKGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVy
Q29udGV4dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBt
X3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0
ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29u
dGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAg
ICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAg
ICAgICAgY29uc3QgZmxvYXQgZGVzdGluYXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdp
ZHRoKTsKICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0
LnkoKSAtIGxpbmVXaWR0aCk7CkBAIC0xMTYxLDEzICsxMjM2LDEzIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lk
dGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIHJlY3QpOwogICAgICAg
ICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAg
ICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29u
Y2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0g
ICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7
CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4p
CisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7
CiAKICAgICAvLyBVc2luZyBDR0NvbnRleHRBZGRSZWN0IGFuZCBDR0NvbnRleHRTdHJva2VQYXRo
IHRvIHN0cm9rZSByZWN0IHJhdGhlciB0aGFuCkBAIC0xMTgyLDk0ICsxMjU3LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQotewotICAgIHN3aXRj
aCAoY2FwKSB7Ci0gICAgY2FzZSBMaW5lQ2FwOjpCdXR0OgotICAgICAgICBDR0NvbnRleHRTZXRM
aW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwQnV0dCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgTGluZUNhcDo6Um91bmQ6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVDYXAo
cGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBSb3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTGluZUNhcDo6U3F1YXJlOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRm
b3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwU3F1YXJlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkm
IGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsK
LSAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBkYXNoZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGRhc2hlc1tpXSk7Ci0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICBkYXNo
T2Zmc2V0ID0gZm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOwotICAgIH0KLSAgICBD
R0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVz
LmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNl
dExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0gICAgc3dpdGNoIChqb2luKSB7Ci0gICAgY2Fz
ZSBMaW5lSm9pbjo6TWl0ZXI6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3Jt
Q29udGV4dCgpLCBrQ0dMaW5lSm9pbk1pdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBM
aW5lSm9pbjo6Um91bmQ6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29u
dGV4dCgpLCBrQ0dMaW5lSm9pblJvdW5kKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5l
Sm9pbjo6QmV2ZWw6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4
dCgpLCBrQ0dMaW5lSm9pbkJldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAg
Q0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgbV9kYXRhLT5zY2FsZShzaXplKTsKLSAgICBtX2RhdGEtPm1fdXNlclRv
RGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6cm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIENHQ29udGV4dFJvdGF0
ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgYW5nbGUpOwotICAgIG1fZGF0YS0+cm90YXRlKGFuZ2xl
KTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkg
PSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCi17Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgp
LCB4LCB5KTsKLSAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBtX2RhdGEtPm1fdXNl
clRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQotewotICAgIENHQ29udGV4dENvbmNhdENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNm
b3JtKTsKLSAgICBtX2RhdGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi17Ci0gICAgQ0dDb250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0p
OwotICAgIG1fZGF0YS0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0Rl
dmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLUFmZmluZVRyYW5z
Zm9ybSBHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRl
U2NhbGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZp
Y2VTY2FsZUZhY3RvciBleGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0aGUKLSAgICAvLyBjb250ZW50
IGlzIG5vbi1jb21wb3NpdGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQg
YXQgYSBsb3dlcgotICAgIC8vIGxldmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlz
IGluY2x1ZGVkLCB3ZSBjYW4gdXNlIHRoaXMgQ0cgQVBJLgotICAgIGlmIChpbmNsdWRlU2NhbGUg
PT0gRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkKLSAgICAgICAgcmV0dXJuIENHQ29udGV4
dEdldFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxhdGZvcm1Db250ZXh0KCkpOwot
Ci0gICAgcmV0dXJuIENHQ29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KIEZs
b2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7CiAgICAgLy8gSXQgaXMg
bm90IGVub3VnaCBqdXN0IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UuIFRoZSBy
b3RhdGlvbiBwYXJ0IG9mIHRoZQpAQCAtMTI4MCw3ICsxMjY3LDkgQEAgRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Um91bmRpbmcKICAgICBpZiAobV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9C
ZUlkZW50aXR5KQogICAgICAgICByZXR1cm4gcm91bmRlZEludFJlY3QocmVjdCk7CiAKLSAgICBD
R0FmZmluZVRyYW5zZm9ybSBkZXZpY2VNYXRyaXggPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0Rl
dmljZVNwYWNlVHJhbnNmb3JtKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2
aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShj
b250ZXh0KTsKICAgICBpZiAoQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lkZW50aXR5KGRldmljZU1hdHJp
eCkpIHsKICAgICAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlk
ZW50aXR5ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3QpOwpAQCAt
MTMxOSw2ICsxMzA4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXMKICAgICBpZiAoIXdpZHRo
cy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xv
cigpKTsKIAogICAgIEZsb2F0UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KEZsb2F0UmVjdChwb2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0
KCksIHRoaWNrbmVzcykpLCBwcmludGluZywgbG9jYWxTdHJva2VDb2xvcik7CkBAIC0xMzY0LDEy
ICsxMzU0LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAgICAgfQogCiAgICAgaWYgKGZp
bGxDb2xvcklzTm90RXF1YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihw
bGF0Zm9ybUNvbnRleHQoKSwgbG9jYWxTdHJva2VDb2xvcik7CisgICAgICAgIHNldENHRmlsbENv
bG9yKGNvbnRleHQsIGxvY2FsU3Ryb2tlQ29sb3IpOwogCi0gICAgQ0dDb250ZXh0RmlsbFJlY3Rz
KHBsYXRmb3JtQ29udGV4dCgpLCBkYXNoQm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkp
OworICAgIENHQ29udGV4dEZpbGxSZWN0cyhjb250ZXh0LCBkYXNoQm91bmRzLmRhdGEoKSwgZGFz
aEJvdW5kcy5zaXplKCkpOwogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1YWxUb1N0cm9rZUNv
bG9yKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9y
KCkpOworICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBmaWxsQ29sb3IoKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpAQCAtMTQxMiwxNyArMTQwMiwxOCBAQCBSZW5kZXJp
bmdNb2RlIEdyYXBoaWNzQ29udGV4dENHOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogCiAgICAgLy8gQ29yZUdyYXBoaWNzIGV4cGVjdHMgdGhlIGJhc2UgQ1RNIG9mIGEg
SGlEUEkgY29udGV4dCB0byBoYXZlIHRoZSBzY2FsZSBmYWN0b3IgYXBwbGllZCB0byBpdC4KICAg
ICAvLyBGYWlsaW5nIHRvIGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBDVE0gd2lsbCBjYXVzZSBjZXJ0
YWluIENHIGZlYXR1cmVzLCBzdWNoIGFzIGZvY3VzIHJpbmdzLAogICAgIC8vIHRvIGRyYXcgd2l0
aCBhIHNjYWxlIGZhY3RvciBvZiAxIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2NhbGUgZmFjdG9y
LgotICAgIENHQ29udGV4dFNldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJh
bnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmlj
ZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIENHQ29udGV4dFNldEJhc2VD
VE0oY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKGNv
bnRleHQpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KQogewogICAgIC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29s
aWQgY29sb3JzLgotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQ
YXR0ZXJuKSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgpIHx8IGZpbGxQYXR0ZXJuKCkpIHsKICAg
ICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xNDM0LDcgKzE0MjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRT
dHJva2VFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAgIGlmICht
X3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgIGlm
IChzdHJva2VHcmFkaWVudCgpIHx8IHN0cm9rZVBhdHRlcm4oKSkgewogICAgICAgICBzdHJva2VF
bGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ2OCw5
ICsxNDU5LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFkZERlc3RpbmF0aW9uQXRQb2lu
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pCiAKIGJvb2wgR3JhcGhpY3NDb250
ZXh0Q0c6OmNhblVzZVNoYWRvd0JsdXIoKSBjb25zdAogewotICAgIHJldHVybiAocmVuZGVyaW5n
TW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFk
b3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICByZXR1cm4gKHJl
bmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVy
cmVkU2hhZG93KCkgJiYgIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCk7CiB9CiAKLX0KIAotI2Vu
ZGlmCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuaAppbmRleCA0NjhhNDRiYWE4NmVlNTI2MTlkMjU1ZjkzOTQzYTk3NTViYWM5ZmFiLi44OGRl
YTUyNTI5ZjkxZmE3MWY4NjgzMDhjMmRjZDZiMzYzNmZiM2E0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDEwLCAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjUsNTMgKzI1LDEzIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNF
KENHKQorCiAjaW5jbHVkZSAiQ29sb3JTcGFjZUNHLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNl
clRvQmFzZUNUTShDR0NvbnRleHRSZWYpOwotCi1jbGFzcyBDR0NvbnRleHRTdGF0ZVNhdmVyIHsK
LXB1YmxpYzoKLSAgICBDR0NvbnRleHRTdGF0ZVNhdmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBi
b29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkK
LSAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAg
ICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRl
KG1fY29udGV4dCk7Ci0gICAgfQotICAgIAotICAgIH5DR0NvbnRleHRTdGF0ZVNhdmVyKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNhdmUoKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
c2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4
dCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBkaWRTYXZlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0
b3JlOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dDsK
LSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Ci19OwotCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBH
cmFwaGljc0NvbnRleHRDRyA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgewogcHVibGljOgogICAg
IEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFJlZik7CkBAIC04NSw2OSArNDUsNDYgQEAgcHVi
bGljOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgQ0dD
b250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZl
KCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5
ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0
IGZpbmFsOwogCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCBmaW5hbDsKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFs
OwogCisgICAgdm9pZCBzYXZlSW1wbCgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZUltcGwoKSBm
aW5hbDsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAgICAgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5h
bDsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
IGZpbmFsOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAotICAgIHZv
aWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOworICAgIHZvaWQg
Y2xpcEltcGwoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwUGF0aEltcGwo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOworICAgIHZv
aWQgY2xpcE91dEltcGwoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dEltcGwo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7CiAg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxs
Um91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBj
b25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5l
V2lkdGgpIGZpbmFsOwotCi0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpIGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFs
OwotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0K
LSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7Ci0KLSAg
ICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgc2V0TGluZUNh
cChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYs
IGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4p
IGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0KLSAgICB2b2lk
IGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikg
ZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2Nh
bGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJ
blJhZGlhbnMpIGZpbmFsOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZp
bmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwor
ICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNj
YWxlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKIAotICAgIEZsb2F0UmVj
dCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJv
dW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQs
IGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CkBAIC0xNTYsMTggKzkzLDIzIEBA
IHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlmCiAKLSAgICB2b2lk
IGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0
cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsOwogCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBm
aW5hbDsKIAotICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Cisg
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRp
bmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CisKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAogICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5h
bExpbmtzKCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpIGZpbmFsOworICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5h
dGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7
CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuVXNlU2hhZG93Qmx1cigpIGNvbnN0OwogCkBAIC0xNzUs
OSArMTE3LDE2IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUq
IGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBD
R0NvbnRleHRSZWYgaW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKwogcHJpdmF0ZToK
ICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsK
IH07CiAKLX0KK0NHQWZmaW5lVHJhbnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVm
KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjaW5jbHVkZSAiQ0dDb250ZXh0U3RhdGVT
YXZlci5oIgogCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCBlNmNlMmZi
OTcyNDdhNmI4NmMwOWIxYWQzNjE3MDFjMmVjM2U4NjI1Li5hZjAwYTAxMzM0N2UwY2Q4NWEzMGI4
ODRlYmM3OWYzMmYxZTIzMTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBA
IGJvb2wgUERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hCiAKICAgICAvLyBPbGQgYW5kIG5ldyBjb250ZXh0IHNj
YWxpbmcgZmFjdG9ycyBoYXZlIHRvIG1hdGNoIGFzIHdlbGwuCiAgICAgQWZmaW5lVHJhbnNmb3Jt
OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHJhbnNmb3JtOwotICAgIGNvbnRleHQuZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3Nl
KGRlY29tcG9zZWRUcmFuc2Zvcm0pOworICAgIGNvbnRleHQuZ2V0Q1RNKCkuZGVjb21wb3NlKGRl
Y29tcG9zZWRUcmFuc2Zvcm0pOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlw
ZSBjYWNoZWREZWNvbXBvc2VkVHJhbnNmb3JtOwogICAgIG1fY2FjaGVkVHJhbnNmb3JtLmRlY29t
cG9zZShjYWNoZWREZWNvbXBvc2VkVHJhbnNmb3JtKTsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lk
IFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdAogICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhidWZm
ZXJDb250ZXh0LCBkc3RSZWN0LCBGbG9hdFJlY3QobV9jYWNoZWRJbWFnZVJlY3QubG9jYXRpb24o
KSwgc3JjUmVjdC5zaXplKCkpKTsKICAgICBkcmF3UERGUGFnZShidWZmZXJDb250ZXh0KTsKIAot
ICAgIG1fY2FjaGVkVHJhbnNmb3JtID0gY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpE
ZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNv
bnRleHQuZ2V0Q1RNKCk7CiAgICAgbV9jYWNoZWREZXN0aW5hdGlvblJlY3QgPSBkc3RSZWN0Owog
ICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7CiAgICAgKyttX2NhY2hpbmdDb3VudEZv
clRlc3Rpbmc7CkBAIC0zNjMsNiArMzYzLDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3
UERGUGFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAKICAgICBjb250ZXh0LnRyYW5zbGF0
ZSgtbV9jcm9wQm94LmxvY2F0aW9uKCkpOwogCisgICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdl
cygpOworCiAgICAgLy8gQ0dQREYgcGFnZXMgYXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIENHQ29udGV4dERyYXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCksIENHUERGRG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0
KCksIDEpLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXRoQ0cuY3BwCmluZGV4IGQ2ODlhNTFhODkxMDJhNTA5MDQ1NTliNDQyMjM2OWRlMTQ3MDMz
MzUuLmZkZWVmNmIzOGQwYzViNTU1NjczN2ViN2Y0NGFmMmYyZmM5YTQ0NDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMjQ3LDcgKzI0
Nyw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0Nv
bnRleHQpOwogCi0gICAgYm9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9p
bnQoY29udGV4dCwgcG9pbnQsIGtDR1BhdGhTdHJva2UpOworICAgIGJvb2wgaGl0U3VjY2VzcyA9
IENHQ29udGV4dFBhdGhDb250YWluc1BvaW50KGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKSwgcG9pbnQsIGtDR1BhdGhTdHJva2UpOwogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
Y29udGV4dCk7CiAKICAgICByZXR1cm4gaGl0U3VjY2VzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVU
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdH
bHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBlZmJjMWU0OTU0NDFiZWRlNzM0ZTk0OGRk
MjZkMzcxNDQxNjU1M2UwLi5lOWI3YWM0ZDdmNGNiZjc0MTI4OTM5YmZhOGMwNGU3NjVhMGRiZDg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9E
cmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYXdHbHlwaHNS
ZWNvcmRlci5oIgogCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0zNSw0OSAr
MzQsNDEgQEAKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQogI2luY2x1ZGUgPENvcmVUZXh0
L0NvcmVUZXh0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgUExBVEZPUk0oV0lO
KQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXll
cihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3Rh
dGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dD
b250ZXh0RGVsZWdhdGVSZWYpCitzdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXll
cihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dH
U3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdh
dGVSZWYpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2Fz
dDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUp
KTsKLSAgICByZWNvcmRlci5yZWNvcmRCZWdpbkxheWVyKHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsK
KyAgICByZWNvcmRlci5yZWNvcmRCZWdpbkxheWVyKGdzdGF0ZSk7CiAgICAgcmV0dXJuIGRlbGVn
YXRlOwogfQogCi1zdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0
RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0
ZVJlZiBnc3RhdGUpCitzdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250
ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVm
IGdzdGF0ZSkKIHsKICAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19j
YXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0
ZSkpOwotICAgIHJlY29yZGVyLnJlY29yZEVuZExheWVyKHJzdGF0ZSwgZ3N0YXRlKTsKKyAgICBy
ZWNvcmRlci5yZWNvcmRFbmRMYXllcihnc3RhdGUpOwogICAgIHJldHVybiBkZWxlZ2F0ZTsKIH0K
IAotc3RhdGljIENHRXJyb3IgZHJhd0dseXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0
ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3Qg
Q0dBZmZpbmVUcmFuc2Zvcm0qIHRtLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1Bv
aW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCitzdGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhz
KENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dT
dGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBn
bHlwaHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQogewotICAg
IGlmIChDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkgPiAwKSB7Ci0gICAgICAgIERyYXdHbHlwaHNS
ZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dD
b250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgICAgIHJlY29yZGVyLnJlY29y
ZERyYXdHbHlwaHMocnN0YXRlLCBnc3RhdGUsIHRtLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQp
OwotICAgIH0KKyAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0
PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkp
OworICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlwaHMoZ3N0YXRlLCBnbHlwaHMsIHBvc2l0aW9u
cywgY291bnQpOwogICAgIHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAKLXN0YXRpYyBDR0Vy
cm9yIGRyYXdJbWFnZShDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdT
dGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VS
ZWYgaW1hZ2UpCitzdGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYg
ZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0
IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2UpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNv
cmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0
ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UocnN0YXRl
LCBnc3RhdGUsIHJlY3QsIGltYWdlKTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UoZ3N0
YXRlLCByZWN0LCBpbWFnZSk7CiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotVW5p
cXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5h
bENvbnRleHQoKQorc3RhdGljIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVy
bmFsQ29udGV4dChEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyKQogewotICAgIGF1dG8gY29u
dGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7Cisg
ICAgYXV0byBjb250ZXh0RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRl
KCZyZWNvcmRlcikpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERl
bGVnYXRlLmdldCgpLCBkZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVs
ZWdhdGVDYWxsYmFjaz4oJmJlZ2luTGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENh
bGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVFbmRMYXllciwgcmVpbnRlcnByZXRfY2Fz
dDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmZW5kTGF5ZXIpKTsKICAgICBDR0NvbnRleHRE
ZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCBy
ZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZXZWJDb3JlOjpkcmF3
R2x5cGhzKSk7CkBAIC04Niw2NyArNzcsMTUgQEAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4g
RHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogICAgIHJldHVybiBt
YWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAotRHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25l
ciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9u
dEZyb21Db250ZXh0IGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIp
CitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQm
IGRlc3RpbmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJh
d0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0IGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAg
ICA6IG1fZGVzdGluYXRpb25Db250ZXh0KGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICAsIG1fZGVj
b25zdHJ1Y3REcmF3R2x5cGhzKGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGVyaXZl
Rm9udEZyb21Db250ZXh0KGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICAsIG1faW50ZXJuYWxD
b250ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4dCgpKQorICAgICwgbV9pbnRlcm5hbENvbnRleHQo
Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCp0aGlzKSkKIHsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
Y29udGV4dFN0YXRlKQotewotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBj
b250ZXh0U3RhdGUuZmlsbENvbG9yOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3Jh
ZGllbnQgPSBjb250ZXh0U3RhdGUuZmlsbEdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5m
aWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGll
bnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4g
PSBjb250ZXh0U3RhdGUuZmlsbFBhdHRlcm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tl
U3R5bGUuY29sb3IgPSBjb250ZXh0U3RhdGUuc3Ryb2tlQ29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50ID0gY29udGV4dFN0YXRlLnN0cm9rZUdyYWRpZW50Owot
ICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtID0g
Y29udGV4dFN0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5h
bFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUuc3Ryb2tlUGF0dGVybjsK
LQotICAgIG1fb3JpZ2luYWxTdGF0ZS5jdG0gPSBtX293bmVyLmdldENUTSgpOyAvLyBGSVhNRTog
RGVhbCB3aXRoIGJhc2UgQ1RNLgotCi0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQg
PSBjb250ZXh0U3RhdGUuc2hhZG93T2Zmc2V0OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cu
Ymx1ciA9IGNvbnRleHRTdGF0ZS5zaGFkb3dCbHVyOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cuY29sb3IgPSBjb250ZXh0U3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRl
LnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gY29udGV4dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOwotCi0gICAgbV9jdXJyZW50U3RhdGUgPSBtX29yaWdpbmFsU3RhdGU7Ci19Ci0KLXZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQotewotICAgIGlmIChtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQt
PnNldEZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKLSAgICBlbHNl
IGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVy
bmFsQ29udGV4dC0+c2V0RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdy
YWRpZW50LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5w
YXR0ZXJuKTsKLSAgICAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikK
LSAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7Ci0g
ICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAg
ICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5z
dHJva2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0
cm9rZVN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ry
b2tlUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgIH0K
LQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0K
LSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBtX2ludGVybmFsQ29udGV4
dC0+c2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3Rh
dGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0
ZS5zaGFkb3dSYWRpdXNNb2RlKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJh
d2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6
c2V0SW50ZXJuYWxGb250KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290
aGluZ01vZGUpCiB7CiAgICAgQVNTRVJUKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShDVEZv
bnRHZXRNYXRyaXgoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpKTsKIApAQCAtMTU2LDEw
NCArOTUsMzggQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRl
eHQoY29uc3QgRm9udCYgZm9udCwgRm9udFNtb290aGluZ00KICAgICBtX29yaWdpbmFsVGV4dE1h
dHJpeCA9IGNvbXB1dGVPdmVyYWxsVGV4dE1hdHJpeChmb250KTsKICAgICBpZiAoZm9udC5wbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCiAg
ICAgICAgIG1fb3JpZ2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChm
b250LCBtX29yaWdpbmFsVGV4dE1hdHJpeCk7Ci0KLSAgICBhdXRvJiBjb250ZXh0U3RhdGUgPSBt
X293bmVyLnN0YXRlKCk7Ci0gICAgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnRleHRTdGF0ZSk7
Ci0gICAgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29udGV4dFN0YXRlKTsKIH0KIAotdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OmNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkKK0dyYXBoaWNzQ29u
dGV4dFN0YXRlIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCgpCiB7
Ci0gICAgdXBkYXRlQ1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwotICAgIHVwZGF0ZUZpbGxDb2xv
cihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0
eWxlLmdyYWRpZW50LmdldCgpLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4uZ2V0
KCkpOwotICAgIHVwZGF0ZVN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5j
b2xvciwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LmdldCgpLCBtX29yaWdp
bmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybi5nZXQoKSk7Ci0gICAgdXBkYXRlU2hhZG93KG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIs
IG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdu
b3JlVHJhbnNmb3JtcyA/IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMgOiBTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtczo6Tm8pOworICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9IG1fZGVzdGluYXRp
b25Db250ZXh0LnN0YXRlKCk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPm1lcmdlU3RhdGVEaWZm
cyhvcmlnaW5hbFN0YXRlKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+YXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZXR1cm4gb3JpZ2luYWxTdGF0ZTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnVwZGF0ZUZpbGxDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBu
ZXdHcmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpyZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBv
cmlnaW5hbFN0YXRlKQogewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFj
dHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwgb25seSBl
dmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3Qg
Y2hlY2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0
IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBj
b3JyZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuZmls
bFN0eWxlLmNvbG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZSBuZXdTdGF0ZTsKLSAgICBuZXdTdGF0ZS5maWxsQ29sb3IgPSBuZXdDb2xvcjsKLSAgICBpZiAo
bmV3R3JhZGllbnQpCi0gICAgICAgIG5ld1N0YXRlLmZpbGxHcmFkaWVudCA9IG5ld0dyYWRpZW50
OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5maWxsUGF0dGVybiA9IG5l
d1BhdHRlcm47Ci0gICAgbV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlIH0pOwotICAgIG1fY3VycmVudFN0YXRlLmZp
bGxTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0Lm1lcmdl
U3RhdGVEaWZmcyhvcmlnaW5hbFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6
OnVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5ld0dy
YWRpZW50LCBQYXR0ZXJuKiBuZXdQYXR0ZXJuKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJl
Y29yZEJlZ2luTGF5ZXIoQ0dHU3RhdGVSZWYgZ3N0YXRlKQogewotICAgIC8vIFRoaXMgY2hlY2sg
bG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgot
ICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNo
IHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50ZXJu
YWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hp
Y2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29sb3Ig
PT0gbV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLnN0cm9rZUNv
bG9yID0gbmV3Q29sb3I7Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5z
dHJva2VHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAg
ICBuZXdTdGF0ZS5zdHJva2VQYXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLmRpZFVw
ZGF0ZVN0YXRlKG5ld1N0YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNo
YW5nZSB9KTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IG5ld0NvbG9y
OworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRl
KSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihDR0dT
dGF0ZUdldEFscGhhKGdzdGF0ZSkpOwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBk
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQordm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnJlY29yZEVuZExheWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICBpZiAoY3RtID09
IG1fY3VycmVudFN0YXRlLmN0bSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vd25lci5zZXRD
VE0oY3RtKTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5jdG0gPSBjdG07CisgICAgbV9kZXN0aW5hdGlv
bkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0
aW9uQ29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi1zdGF0aWMgYm9vbCBzaGFk
b3dJc0NsZWFyZWQoY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0Js
dXIpCi17Ci0gICAgcmV0dXJuIHNoYWRvd09mZnNldCA9PSBGbG9hdFNpemUoKSAmJiAhc2hhZG93
Qmx1cjsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNo
YWRvd0NvbG9yLCBTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykKLXsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zIGlmIG5vYm9keSBoYXMgYW55IHNoYWRvd3MuCi0gICAgaWYgKHNoYWRvd0lzQ2xlYXJl
ZChzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIpICYmIHNoYWRvd0lzQ2xlYXJlZChtX2N1cnJlbnRT
dGF0ZS5zaGFkb3cub2Zmc2V0LCBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuYmx1cikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIHN0YXRlQ2hhbmdlRmxhZ3M7Ci0KLSAg
ICBpZiAoc2hhZG93T2Zmc2V0ICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQgfHwgc2hh
ZG93Qmx1ciAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuYmx1ciB8fCBzaGFkb3dDb2xvciAhPSBt
X2N1cnJlbnRTdGF0ZS5zaGFkb3cuY29sb3IpIHsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93T2Zm
c2V0ID0gc2hhZG93T2Zmc2V0OwotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dCbHVyID0gc2hhZG93
Qmx1cjsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICAg
ICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5n
ZSk7Ci0gICAgfQotICAgIGlmIChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAhPSBTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtczo6VW5zcGVjaWZpZWQgJiYgKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09
IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5p
Z25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zID0gKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
OjpZZXMpOwotICAgICAgICBzdGF0ZUNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc3RhdGVD
aGFuZ2VGbGFncy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX293bmVyLmRpZFVw
ZGF0ZVN0YXRlKG5ld1N0YXRlLCBzdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIG1fY3VycmVudFN0
YXRlLnNoYWRvdy5vZmZzZXQgPSBzaGFkb3dPZmZzZXQ7Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hh
ZG93LmJsdXIgPSBzaGFkb3dCbHVyOwotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5jb2xvciA9
IHNoYWRvd0NvbG9yOwotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1z
ID0gKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZ
ZXMpOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KENHU3R5bGVS
ZWYgc3R5bGUpCitzdGF0aWMgdm9pZCBzZXREcm9wU2hhZG93KEdyYXBoaWNzQ29udGV4dCYgZGVz
dGluYXRpb25Db250ZXh0LCBDR1N0eWxlUmVmIHN0eWxlKQogewogICAgIGlmIChDR1N0eWxlR2V0
VHlwZShzdHlsZSkgIT0ga0NHU3R5bGVTaGFkb3cpIHsKICAgICAgICAgLy8gRklYTUU6IFN1cHBv
cnQgbW9yZSBraW5kcyBvZiBDR1N0eWxlcy4KLSAgICAgICAgdXBkYXRlU2hhZG93KHswLCAwfSwg
MCwgQ29sb3IoKSwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkKTsKKyAgICAg
ICAgZGVzdGluYXRpb25Db250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTI2MSwyMCArMTM0LDkgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0
ZVNoYWRvdyhDR1N0eWxlUmVmIHN0eWxlKQogICAgIGF1dG8gcmFkID0gZGVnMnJhZChzaGFkb3dT
dHlsZS5hemltdXRoIC0gMTgwKTsKICAgICBhdXRvIHNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShz
dGQ6OmNvcyhyYWQpLCBzdGQ6OnNpbihyYWQpKSAqIHNoYWRvd1N0eWxlLmhlaWdodDsKICAgICBh
dXRvIHNoYWRvd0NvbG9yID0gQ0dTdHlsZUdldENvbG9yKHN0eWxlKTsKLSAgICB1cGRhdGVTaGFk
b3coc2hhZG93T2Zmc2V0LCBzaGFkb3dTdHlsZS5yYWRpdXMsIENvbG9yOjpjcmVhdGVBbmRQcmVz
ZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3IpLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVz
KTsKLX0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QpCi17Ci0gICAgdXBkYXRl
Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICBhdXRvIGFscGhhID0gQ0dHU3RhdGVH
ZXRBbHBoYShnc3RhdGUpOwotICAgIG1fb3duZXIuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBo
YSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dT
dGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICBtX293bmVyLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CisgICAgZGVzdGluYXRpb25Db250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHN0
YXRpY19jYXN0PGZsb2F0PihzaGFkb3dTdHlsZS5yYWRpdXMpLCBDb2xvcjo6Y3JlYXRlQW5kUHJl
c2VydmVDb2xvclNwYWNlKHNoYWRvd0NvbG9yKSB9KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQu
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXModHJ1ZSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q0dT
aXplPiBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25z
W10sIHNpemVfdCBjb3VudCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCkBA
IC0yOTAsMTggKzE1MiwxOCBAQCBzdGF0aWMgVmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFuY2Vz
RnJvbVBvc2l0aW9ucyhjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENH
UmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFu
c2Zvcm0qLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1td
LCBzaXplX3QgY291bnQpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBo
cyhDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9p
bnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKIHsKICAgICBBU1NFUlRfSU1QTElFUyhtX2Rl
cml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vLCBtX29yaWdp
bmFsRm9udCk7CiAKLSAgICBpZiAoIWNvdW50KQorICAgIGlmICghY291bnQgfHwgQ0dHU3RhdGVH
ZXRBbHBoYShnc3RhdGUpIDw9IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIENHRm9udFJlZiB1
c2VkRm9udCA9IENHR1N0YXRlR2V0Rm9udChnc3RhdGUpOwogICAgIGlmIChtX2Rlcml2ZUZvbnRG
cm9tQ29udGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vICYmIHVzZWRGb250ICE9IGFk
b3B0Q0YoQ1RGb250Q29weUdyYXBoaWNzRm9udChtX29yaWdpbmFsRm9udC0+cGxhdGZvcm1EYXRh
KCkuY3RGb250KCksIG51bGxwdHIpKS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBk
YXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4
dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwogCiAgICAgLy8gV2Ugd2FudCB0aGUg
cmVwbGF5ZXIncyBDVE0gYW5kIHRleHQgbWF0cml4IHRvIG1hdGNoIHRoZSBjdXJyZW50IENUTSBh
bmQgdGV4dCBtYXRyaXguCiAgICAgLy8gVGhlIGN1cnJlbnQgdGV4dCBtYXRyaXggaXMgYSBjb25j
YXRlbmF0aW9uIG9mIHdoYXRldmVyIFdlYktpdCBzZXRzIGl0IHRvIGFuZCB3aGF0ZXZlcgpAQCAt
MzI0LDEzICsxODYsMTYgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlw
aHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgaW52ZXJz
ZUNUTUZpeHVwID0gaW52ZXJzZS52YWx1ZSgpOwogICAgIGVsc2UKICAgICAgICAgY3RtRml4dXAg
PSBBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICBtX293bmVyLmNvbmNhdENUTShjdG1GaXh1cCk7CisK
KyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jb25jYXRDVE0oY3RtRml4dXApOwogCiAgICAgYXV0
byBmaWxsQ29sb3IgPSBDR0dTdGF0ZUdldEZpbGxDb2xvcihnc3RhdGUpOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNw
YWNlKGZpbGxDb2xvcikpOworCiAgICAgYXV0byBzdHJva2VDb2xvciA9IENHR1N0YXRlR2V0U3Ry
b2tlQ29sb3IoZ3N0YXRlKTsKLSAgICB1cGRhdGVGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFBy
ZXNlcnZlQ29sb3JTcGFjZShmaWxsQ29sb3IpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihDb2xv
cjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHN0cm9rZUNvbG9yKSk7Ci0gICAgdXBkYXRl
U2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJv
a2VDb2xvcikpOworCisgICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dH
U3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKIAogICAgIGF1dG8gZm9udFNpemUgPSBDR0dTdGF0ZUdl
dEZvbnRTaXplKGdzdGF0ZSk7CiAgICAgUmVmIGZvbnQgPSBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4
dCA9PSBEZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vID8gKm1fb3JpZ2luYWxGb250IDogRm9udDo6
Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NG
b250KHVzZWRGb250LCBmb250U2l6ZSwgbnVsbHB0ciwgbnVsbHB0cikpLCBmb250U2l6ZSkpOwpA
QCAtMzQ1LDMwICsyMTAsMzggQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdH
bHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgLy8g
RklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMzI5MTc+IChgRHJhd0dseXBoc1JlY29yZGVy
YCBzaG91bGQgYmUgYWJsZSB0byByZWNvcmQrcmVwbGF5IHZlcnRpY2FsIHRleHQpCiAgICAgfQog
Ci0gICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgY29tcHV0
ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCB0ZXh0TWF0cml4KS5kYXRh
KCksIGNvdW50LCB0ZXh0TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5n
TW9kZSk7Ci0KLSAgICBtX293bmVyLmNvbmNhdENUTShpbnZlcnNlQ1RNRml4dXApOworICAgIG1f
ZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBj
b21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9ucywgY291bnQsIHRleHRNYXRyaXgp
LmRhdGEoKSwgY291bnQsIHRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9v
dGhpbmdNb2RlKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jb25jYXRDVE0oaW52ZXJzZUNU
TUZpeHVwKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZShD
R1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0lt
YWdlUmVmIGNnSW1hZ2UpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdl
KENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgY2dJbWFnZSkKIHsK
LSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIHVwZGF0ZVNoYWRv
dyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNl
dENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3Rp
bmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKIAogICAgIC8vIENvcmUg
R3JhcGhpY3MgYXNzdW1lcyBhICJ5IHVwIiBjb29yZGluYXRlIHN5c3RlbSwgYnV0IGluIFdlYktp
dCwgd2UgdXNlIGEgInktZG93biIgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IFdlYktpdCdzIGRyYXdpbmcgcm91dGluZXMgKEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKCkpIGludGVudGlvbmFsbHkgZHJhdyBpbWFnZXMgdXBzaWRlLWRvd24gZnJvbSBDb3JlIEdy
YXBoaWNzJ3MgcG9pbnQgb2Ygdmlldy4KICAgICAvLyAoVGhlcmUncyBhIHktZmxpcCBpbnNpZGUg
dGhlIGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkuKQogICAg
IC8vIFRoZSByZWN0IGhhcyB0aGUgcmlnaHQgYm91bmRzLCBidXQgd2UgbmVlZCB0byB0cmFuc2Zv
cm0gZnJvbSBDRydzIGNvb3JkaW5hdGUgc3lzdGVtIHRvIFdlYktpdCdzIGJ5IHBlcmZvcm1pbmcg
b3VyIG93biB5LWZsaXAgc28gaW1hZ2VzIGFyZSBkcmF3biB0aGUgcmlnaHQtc2lkZS11cC4KICAg
ICAvLyBXZSBkbyB0aGlzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHRoZSB0d28gQVBJcywgd2hp
Y2ggaXMgcmlnaHQgaGVyZS4KLSAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCByZWN0LnNpemUuaGVp
Z2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpOwotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEs
IC0xKSk7Ci0KKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgcmVjdC5zaXpl
LmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICAKICAgICBhdXRvIGltYWdlID0gTmF0aXZlSW1h
Z2U6OmNyZWF0ZShjZ0ltYWdlKTsKLSAgICBtX293bmVyLmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2Us
IGltYWdlLT5zaXplKCksIEZsb2F0UmVjdChyZWN0KSwgRmxvYXRSZWN0IHt7IH0sIGltYWdlLT5z
aXplKCl9LCBJbWFnZVBhaW50aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRv
cExlZnQgfSk7Ci0KKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmlt
YWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7IHsgfSwgaW1h
Z2UtPnNpemUoKSB9LCBJbWFnZVBhaW50aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9y
aWdpblRvcExlZnQgfSk7CisgICAgCiAgICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJl
c3RvcmUgdGhlIGNvbnRleHQuCi0gICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsK
LSAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5v
cmlnaW4ueSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAt
MSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5o
ZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworfQorCit2b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQoreworICAgIHNldEludGVybmFsRm9udChmb250LCBzbW9vdGhpbmdN
b2RlKTsKKyAgICAKKyAgICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KCk7CisgICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZv
bnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9k
ZSk7CisgICAgcmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChvcmlnaW5hbFN0YXRlKTsKIH0KIAog
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1bihjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2lu
dCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKQEAgLTM3OSwyNSArMjUyLDE5IEBA
IHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICAgICAgYXV0byBib3VuZHMgPSBmb250LmJvdW5k
c0ZvckdseXBoKGdseXBoc1tpXSk7CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgbG9jYWwgSW1hZ2VC
dWZmZXIgYmVjYXVzZSBkZWNvZGluZyB0aGUgU1ZHIGZvbnRzIGhhcyB0byBoYXBwZW4gaW4gV2Vi
UHJvY2Vzcy4KLSAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX293bmVyLmNyZWF0ZUFs
aWduZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBS
ZW5kZXJpbmdNZXRob2Q6OkxvY2FsKSkgeworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IG1fZGVzdGluYXRpb25Db250ZXh0LmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6OkxvY2FsKSkgewor
ICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5hcHBseVN0YXRlQ2hhbmdlcygpOwog
ICAgICAgICAgICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoaW1hZ2VCdWZmZXItPmNvbnRleHQo
KSwgZm9udCwgZ2x5cGhzICsgaSwgYWR2YW5jZXMgKyBpLCAxLCBGbG9hdFBvaW50KCksIHNtb290
aGluZ01vZGUpOwogCiAgICAgICAgICAgICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChib3VuZHMpOwogICAgICAgICAgICAgZGVzdGluYXRpb25SZWN0Lm1vdmVC
eShwZW5Qb3NpdGlvbik7Ci0gICAgICAgICAgICBtX293bmVyLmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogICAg
ICAgICB9CiAKICAgICAgICAgcGVuUG9zaXRpb24ubW92ZShzaXplKGFkdmFuY2VzW2ldKSk7CiAg
ICAgfQogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAg
IHByZXBhcmVJbnRlcm5hbENvbnRleHQoZm9udCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgRm9udENh
c2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2YW5j
ZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgY29uY2x1ZGVJ
bnRlcm5hbENvbnRleHQoKTsKLX0KLQogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNw
bGl0dGluZ0ludG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9u
dFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBhdXRvIG90c3ZnR2x5cGhzID0g
Zm9udC5maW5kT1RTVkdHbHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpOwpAQCAtNDQwLDcgKzMwNyw3
IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmRO
b25PVFNWR1J1bnMoY29uc3QgRm9udCYgZm9uCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5n
TW9kZSkKIHsKICAgICBpZiAobV9kZWNvbnN0cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3RE
cmF3R2x5cGhzOjpObykgewotICAgICAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQo
Zm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdN
b2RlKTsKKyAgICAgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9u
dChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGlu
Z01vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NTMsMTUgKzMyMCwxNyBAQCB2
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQoQ1RGb250UmVmIGZvbnQsIENH
RmxvYXQgZm9udFNpemUsIENUTGluZQogewogICAgIEFTU0VSVChtX2RlY29uc3RydWN0RHJhd0ds
eXBocyA9PSBEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHNhdmVyKG1fb3duZXIpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc2F2ZXIobV9kZXN0aW5hdGlvbkNvbnRleHQpOwogCi0gICAgbV9vd25lci50cmFuc2xhdGUo
bGluZVJlY3Qub3JpZ2luLngsIGxpbmVSZWN0Lm9yaWdpbi55ICsgbGluZVJlY3Quc2l6ZS5oZWln
aHQpOwotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9kZXN0aW5h
dGlvbkNvbnRleHQudHJhbnNsYXRlKGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4u
eSArIGxpbmVSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2Fs
ZShGbG9hdFNpemUoMSwgLTEpKTsKIAotICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoRm9udDo6
Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNtb290aGluZ01v
ZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIHNldEludGVybmFsRm9udChGb250OjpjcmVh
dGUoRm9udFBsYXRmb3JtRGF0YShmb250LCBmb250U2l6ZSkpLCBGb250U21vb3RoaW5nTW9kZTo6
U3VicGl4ZWxBbnRpYWxpYXNlZCk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJl
cGFyZUludGVybmFsQ29udGV4dCgpOwogICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihtX2lu
dGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIDAsIDApOwogICAgIENUTGluZURyYXco
bGluZSwgbV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBjb25jbHVk
ZUludGVybmFsQ29udGV4dCgpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2lu
YWxTdGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHAKaW5kZXggNTExZTA5Yjk2Y2VmMDMyNTA5MGUyM2FmOTE0YWUzNWYyYWI4
ZWQyZS4uNjllYTA0MzNlMjY5OGVjZDcxMTQ1YjMyMDI3MzZjNzJlMTFhYTc2NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVD
b3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTI0MiwxMCArMjQyLDcgQEAgdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEcKICAgICBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOwogICAg
IENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAK
LSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAg
Q29sb3Igc2hhZG93Q29sb3I7Ci0gICAgY29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBz
aGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CisgICAgYXV0byBkcm9wU2hhZG93ID0gY29udGV4dC5k
cm9wU2hhZG93KCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQu
Z2V0Q1RNKCk7CiAgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGlj
Qm9sZE9mZnNldCgpOwpAQCAtMjU4LDE2ICsyNTUsMTYgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEcKICAgICAgICAgfQogICAgIH07CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRl
eHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0Nv
bG9yLmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRt
YXBGb250KCkgJiYgKCFjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4
dENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0lu
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQu
dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIGRyb3BTaGFkb3cu
Y29sb3IuaXNWYWxpZCgpICYmICFkcm9wU2hhZG93LmJsdXIgJiYgIXBsYXRmb3JtRGF0YS5pc0Nv
bG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8
IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRl
eHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewog
ICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5
aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcu
CiAgICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9y
ID0gY29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0g
c2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNG
bG9hdCgpKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gZHJvcFNoYWRvdy5jb2xv
ci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwog
ICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBm
bG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOworICAg
ICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIGRyb3BTaGFkb3cub2Zmc2V0Lndp
ZHRoKCk7CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRo
ZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24g
aXMgbmVnYXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hh
ZG93T2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/
IC0xIDogMSk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgZHJvcFNo
YWRvdy5vZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
ID8gLTEgOiAxKTsKICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNo
YWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZz
ZXQpCiAgICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93
VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4
dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKQEAgLTI4MCw3ICsy
NzcsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgICAgICBzaG93R2x5cGhzV2l0aEFk
dmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQu
eSgpKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRN
YXRyaXgpOwogCiAgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykKLSAgICAgICAgY29udGV4dC5zZXRT
aGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNv
bnRleHQuc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93KTsKIAogI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRT
bW9vdGhpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCAyZTJmNGY0ZjJjYjU1ZDM2
NWU1YWUzOTkzMjVkMDVmMmMxNzM2MWZkLi5jY2Y0MGNlYTYyYjE2NzQzNjZkNzQ4NDE2MmIxYmM0
ZTkzNzcwNzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTkwLDEwICs5MCw3IEBA
IGJvb2wgRGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncyBmbGFncywg
SXRlbUhhbmRsZSBpdGVtKQogICAgICAgICBpZiAoIShmbGFncyAmIEFzVGV4dEZsYWc6OkluY2x1
ZGVzUGxhdGZvcm1PcGVyYXRpb25zKSkgewogICAgICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJ
dGVtID0gaXRlbS5nZXQ8U2V0U3RhdGU+KCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIG5v
dywgb25seSBkcm9wIHRoZSBpdGVtIGlmIHRoZSBvbmx5IHN0YXRlLWNoYW5nZSBmbGFncyBhcmUg
cGxhdGZvcm0tc3BlY2lmaWMuCi0gICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlQ2hhbmdl
KCkubV9jaGFuZ2VGbGFncyA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzQ2hhbmdlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAg
ICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGUoKS5jaGFuZ2VzKCkgPT0gR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTIwMiwx
NiArMTk5LDYgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAg
ICAgICAgcmV0dXJuIGFwcGVuZDxTYXZlPihpdGVtLmdldDxTYXZlPigpKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICByZXR1cm4gYXBwZW5kPFJlc3RvcmU+KGl0ZW0uZ2V0
PFJlc3RvcmU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0
dXJuIGFwcGVuZDxUcmFuc2xhdGU+KGl0ZW0uZ2V0PFRyYW5zbGF0ZT4oKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gYXBwZW5kPFJvdGF0ZT4oaXRlbS5nZXQ8
Um90YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIGFw
cGVuZDxTY2FsZT4oaXRlbS5nZXQ8U2NhbGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNh
dGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4gYXBwZW5kPENvbmNhdGVuYXRlQ1RNPihpdGVtLmdl
dDxDb25jYXRlbmF0ZUNUTT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAg
ICByZXR1cm4gYXBwZW5kPFNldENUTT4oaXRlbS5nZXQ8U2V0Q1RNPigpKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5s
aW5lRmlsbENvbG9yPihpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgpAQCAtMjIwLDE2ICsyMDcsNiBAQCB2b2lk
IERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBw
ZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRlbS5nZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRT
dGF0ZT4oaXRlbS5nZXQ8U2V0U3RhdGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVD
YXA6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZUNhcD4oaXRlbS5nZXQ8U2V0TGluZUNh
cD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBh
cHBlbmQ8U2V0TGluZURhc2g+KGl0ZW0uZ2V0PFNldExpbmVEYXNoPigpKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lSm9pbj4o
aXRlbS5nZXQ8U2V0TGluZUpvaW4+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGlt
aXQ6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4oaXRlbS5nZXQ8U2V0TWl0
ZXJMaW1pdD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJl
dHVybiBhcHBlbmQ8Q2xlYXJTaGFkb3c+KGl0ZW0uZ2V0PENsZWFyU2hhZG93PigpKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICByZXR1cm4gYXBwZW5kPENsaXA+KGl0ZW0uZ2V0
PENsaXA+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CkBAIC0yNzQsOCArMjUxLDYg
QEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0
dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29sb3I+
KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICBy
ZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtLmdldDxGaWxsUmVjdFdpdGhH
cmFkaWVudD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAg
ICAgICByZXR1cm4gYXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbS5nZXQ8RmlsbENvbXBv
c2l0ZWRSZWN0PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAg
ICAgIHJldHVybiBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihpdGVtLmdldDxGaWxsUm91bmRlZFJl
Y3Q+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDBj
MjUyMjY0YWY0MTY2NTYyMTc1MTYwNDEwNDJhOGJkZDNiZmFiYjUuLmRlZmNlODRlZjM1ODdiZWEw
NmQyMDdkYjViODAyYWE3YzgyNTY1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdD
b250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgaW5pdGlhbENUTSkKLSAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0pCisg
ICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUp
LCBpbml0aWFsQ1RNKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuY3BwCmluZGV4IDQ1Nzc1NTE4OWJkYWRkNzE5ZDI0NWE0ZTZkMmM4MWJkZGIxZjdkZjMu
LjBkYjE1MDM5NjA0MDMyZjMzMDNmYmNiNjUyMWU1M2U0ZTM0ZjkxOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCkBAIC01MiwyMSArNTIsNiBAQCB2b2lk
IEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0
ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICBnZXQ8UmVzdG9yZT4oKS5hcHBseShjb250ZXh0KTsK
ICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAg
Z2V0PFRyYW5zbGF0ZT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgZ2V0PFJvdGF0ZT4oKS5hcHBseShjb250ZXh0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBn
ZXQ8U2NhbGU+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgZ2V0PENvbmNhdGVuYXRlQ1RNPigpLmFw
cGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RN
OgotICAgICAgICBnZXQ8U2V0Q1RNPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICBnZXQ8U2V0
SW5saW5lRmlsbENvbG9yPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CkBAIC03
OSwyMSArNjQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2Fw
OgotICAgICAgICBnZXQ8U2V0TGluZUNhcD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBnZXQ8U2V0TGlu
ZURhc2g+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgZ2V0PFNldExpbmVKb2luPigpLmFwcGx5KGNvbnRl
eHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
LSAgICAgICAgZ2V0PFNldE1pdGVyTGltaXQ+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgZ2V0PENsZWFy
U2hhZG93PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcDoKICAgICAgICAgZ2V0PENsaXA+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTE2MCw5ICsxMzAsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFk
aWVudDoKICAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpLmFwcGx5KGNvbnRleHQp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0
OgotICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOwotICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAg
ICBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47
CkBAIC0yNzAsOSArMjM3LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICAgICAgZ2V0PERyYXdQYXRoPigpLn5EcmF3UGF0aCgp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0
OgotICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpLn5GaWxsQ29tcG9zaXRlZFJlY3Qo
KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAg
ICBnZXQ8RmlsbFBhdGg+KCkufkZpbGxQYXRoKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4OCw5
ICsyNTIsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5+RmlsbFJv
dW5kZWRSZWN0KCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
RGFzaDoKLSAgICAgICAgZ2V0PFNldExpbmVEYXNoPigpLn5TZXRMaW5lRGFzaCgpOwotICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIGdldDxTZXRT
dGF0ZT4oKS5+U2V0U3RhdGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzE0LDkgKzI3NSw2IEBA
IHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0
OgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxD
bGVhclJlY3Q+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclNoYWRvdzoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8Q2xlYXJTaGFkb3c+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNl
IEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxDbGlwPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC0zMjYsOSAr
Mjg0LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwVG9JbWFnZUJ1ZmZlcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8Q2xpcFRvSW1hZ2VCdWZmZXI+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q29uY2F0ZW5hdGVDVE0+Ojp2YWx1
ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPjo6dmFsdWUpOwogICAgICAgICByZXR1
cm47CkBAIC0zODcsMzMgKzM0MiwxNSBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAg
IGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJlc3RvcmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJvdGF0ZT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNhdmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2NhbGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldENUTT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lRmlsbENvbG9y
Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
U3Ryb2tlQ29sb3I6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFNldElubGluZVN0cm9rZUNvbG9yPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUNhcD46OnZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRMaW5lSm9pbj46OnZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNl
dE1pdGVyTGltaXQ+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRTdHJva2VUaGlja25lc3M6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldFN0cm9rZVRoaWNrbmVzcz46OnZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDM3LDkgKzM3NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U3Ryb2tlTGluZT46OnZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VHJhbnNsYXRlPjo6dmFsdWUpOwot
ICAgICAgICByZXR1cm47CiAgICAgfQogfQogCkBAIC01MDEsOCArNDM1LDYgQEAgYm9vbCBJdGVt
SGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlv
bikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdQYXR0ZXJuPihpdGVtT2Zmc2V0
LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgICAgIHJldHVybiBj
b3B5SW50bzxEcmF3UGF0aD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxDb21wb3Np
dGVkUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRo
OgogICAgICAgICByZXR1cm4gY29weUludG88RmlsbFBhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKQEAgLTUxMyw4ICs0NDUsNiBA
QCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxl
IGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
Um91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsUm91bmRlZFJlY3Q+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVEYXNoPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRTdGF0
ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CkBA
IC01MzEsMTYgKzQ2MSwxMiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0
ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29w
eUludG88QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsZWFyUmVj
dD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93Ogot
ICAgICAgICByZXR1cm4gY29weUludG88Q2xlYXJTaGFkb3c+KGl0ZW1PZmZzZXQsICp0aGlzKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICByZXR1cm4gY29weUludG88Q2xpcD4o
aXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CiAgICAgICAg
IHJldHVybiBjb3B5SW50bzxDbGlwT3V0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlw
VG9JbWFnZUJ1ZmZlcj4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNv
bmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4gY29weUludG88Q29uY2F0ZW5hdGVDVE0+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyOgogICAgICAgICByZXR1cm4gY29weUludG88RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgpA
QCAtNTczLDI0ICs0OTksMTIgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBp
dGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICNlbmRpZgogICAgIGNhc2Ug
SXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxSZXN0b3JlPihpdGVt
T2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1
cm4gY29weUludG88Um90YXRlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2F2ZToKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNhdmU+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNj
YWxlPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAg
ICAgICByZXR1cm4gY29weUludG88U2V0Q1RNPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88
U2V0SW5saW5lRmlsbENvbG9yPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxp
bmVTdHJva2VDb2xvcj4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVDYXA6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRMaW5lQ2FwPihpdGVtT2Zmc2V0
LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVy
biBjb3B5SW50bzxTZXRMaW5lSm9pbj4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRNaXRlckxp
bWl0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVt
T2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKQEAgLTYw
Nyw4ICs1MjEsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBl
LCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88
U3Ryb2tlUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZUxpbmU6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTdHJva2VMaW5lPihpdGVtT2Zmc2V0LCAq
dGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gY29w
eUludG88VHJhbnNsYXRlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCA1
NGVhMWM4NjgyYzA3NDQyZTJlODQxNGI3MzI4YWEzMjQ4MDI1YTc1Li5iYTBkOTUxYzIyY2Y0OWNl
NDE3ZTMzNTUzYjAwZTBhNWI4YWIyMDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuY3BwCkBAIC0zOCwxNiArMzgsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1J
bkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoU2F2ZSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgcmV0dXJuIHNpemVvZihSZXN0b3JlKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoVHJh
bnNsYXRlKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoUm90YXRlKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihTY2FsZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAg
IHJldHVybiBzaXplb2YoQ29uY2F0ZW5hdGVDVE0pOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENU
TToKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRDVE0pOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIHNpemVvZihTZXRJbmxpbmVGaWxsQ29s
b3IpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgpAQCAtNTYsMTYg
KzQ2LDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQog
ICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0cm9rZVRoaWNrbmVzcyk7CiAgICAgY2FzZSBJdGVt
VHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0U3RhdGUpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZUNh
cCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoU2V0TGluZURhc2gpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKFNldExpbmVKb2luKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRl
ckxpbWl0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldE1pdGVyTGltaXQpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gc2l6ZW9mKENsZWFyU2hhZG93
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICByZXR1cm4gc2l6ZW9mKENsaXAp
OwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CkBAIC0xMTAsOCArOTAsNiBAQCBzdGF0aWMg
c2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBz
aXplb2YoRmlsbFJlY3RXaXRoQ29sb3IpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aEdyYWRpZW50OgogICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0V2l0aEdyYWRpZW50KTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoRmlsbENvbXBvc2l0ZWRSZWN0KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRl
ZFJlY3Q6CiAgICAgICAgIHJldHVybiBzaXplb2YoRmlsbFJvdW5kZWRSZWN0KTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKQEAgLTE4MiwyOCArMTYwLDE4IEBA
IGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkFw
cGx5RmlsbFBhdHRlcm46CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgog
I2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5h
dGVDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OgogICAgIGNhc2UgSXRlbVR5
cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5
cGU6OlNhdmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0Q1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lQ2FwOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVKb2luOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOgotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgpAQCAtMjIyLDcgKzE5MCw2IEBAIGJvb2wgaXNEcmF3aW5n
SXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5j
eUxheWVyOgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsTGluZToKQEAgLTI4OCwxMyArMjU1LDExIEBAIGJvb2wgaXNJ
bmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXRoOgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUm91bmRlZFJlY3Q6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKICAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3U3lzdGVtSW1hZ2U6CkBAIC0zMDYsMTEgKzI3MSw5IEBAIGJv
b2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBl
OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoK
LSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRv
SW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3RWxsaXBzZToKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cjoKQEAgLTMzMywxNSArMjk2LDkgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkK
ICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CiAjZW5kaWYKICAgICBjYXNl
IEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNl
IEl0ZW1UeXBlOjpTYXZlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRl
bVR5cGU6OlNldENUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZUNhcDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgogI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQpAQCAtMzUxLDcgKzMwOCw2IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0
ZW1UeXBlIHR5cGUpCiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRl
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAppbmRleCBkNjgzYjJhY2Y3ODQ1
Zjk5YzNjZDA5NWViOTExZTU0ZjFmOGNlMTExLi4xNjYwYjk4ZmRhNWVmMjdiM2Y3NWQyMmE1Nzlh
M2E5YWUzY2M3MGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAg
LTMxLDIwICszMSwxMCBAQCBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogZW51bSBjbGFzcyBJdGVt
VHlwZSA6IHVpbnQ4X3QgewogICAgIFNhdmUsCiAgICAgUmVzdG9yZSwKLSAgICBUcmFuc2xhdGUs
Ci0gICAgUm90YXRlLAotICAgIFNjYWxlLAotICAgIENvbmNhdGVuYXRlQ1RNLAotICAgIFNldENU
TSwKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IsCiAgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAg
ICAgU2V0U3Ryb2tlVGhpY2tuZXNzLAogICAgIFNldFN0YXRlLAotICAgIFNldExpbmVDYXAsCi0g
ICAgU2V0TGluZURhc2gsCi0gICAgU2V0TGluZUpvaW4sCi0gICAgU2V0TWl0ZXJMaW1pdCwKLSAg
ICBDbGVhclNoYWRvdywKICAgICBDbGlwLAogICAgIENsaXBPdXQsCiAgICAgQ2xpcFRvSW1hZ2VC
dWZmZXIsCkBAIC02Nyw3ICs1Nyw2IEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsK
ICAgICBGaWxsUmVjdCwKICAgICBGaWxsUmVjdFdpdGhDb2xvciwKICAgICBGaWxsUmVjdFdpdGhH
cmFkaWVudCwKLSAgICBGaWxsQ29tcG9zaXRlZFJlY3QsCiAgICAgRmlsbFJvdW5kZWRSZWN0LAog
ICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmluZGV4IDIzZDBiYmNjNzFjMjgx
YzUyYzM1YThjMjUyZGE5NmMwYWIxMmE5OGMuLjg0M2ZkZjFlNzcyZTdjMWMzOTY4YzEzODBmMzQx
MzllODgzZTMxNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTU0
LDY3ICs1NCw2IEBAIHZvaWQgUmVzdG9yZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQogCi12b2lkIFRyYW5zbGF0ZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQudHJhbnNs
YXRlKG1feCwgbV95KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHko
IngiLCBpdGVtLngoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ5IiwgaXRlbS55KCkpOwotCi0g
ICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFJvdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQucm90YXRlKG1fYW5nbGUpOwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUm90YXRlJiBp
dGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5nbGUiLCBpdGVtLmFuZ2xlKCkpOwotCi0g
ICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNjYWxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zY2FsZShtX3NpemUpOwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2NhbGUmIGl0ZW0p
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzaXplIiwgaXRlbS5hbW91bnQoKSk7Ci0KLSAgICBy
ZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0Q1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRDVE0obV90cmFuc2Zvcm0pOwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0Q1RNJiBp
dGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgic2V0LWN0bSIsIGl0ZW0udHJhbnNmb3JtKCkp
OwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENvbmNhdGVuYXRlQ1RNOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5jb25jYXRDVE0obV90
cmFuc2Zvcm0pOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQ29uY2F0ZW5hdGVDVE0mIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJjdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQogdm9pZCBT
ZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihjb2xvcigpKTsKQEAgLTE0OCw3NyArODcsMjEg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNl
dFN0cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRTdGF0ZTo6
U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICA6IG1fc3RhdGVDaGFuZ2Uoc3Rh
dGUsIGZsYWdzKQotewotfQotCi1TZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQotICAgIDogbV9zdGF0ZUNoYW5nZShzdGF0ZUNo
YW5nZSkKK1NldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUpCisgICAgOiBtX3N0YXRlKHN0YXRlKQogewogfQogCiB2b2lkIFNldFN0YXRlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgbV9zdGF0ZUNoYW5nZS5hcHBseShjb250
ZXh0KTsKKyAgICBjb250ZXh0Lm1lcmdlU3RhdGVDaGFuZ2VzKG1fc3RhdGUpOwogfQogCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUm
IHN0YXRlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFNldFN0YXRlJikKIHsKLSAgICB0cyA8PCBzdGF0ZS5zdGF0ZUNoYW5nZSgpOwogICAgIHJl
dHVybiB0czsKIH0KIAotdm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRM
aW5lQ2FwJiBsaW5lQ2FwKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1jYXAiLCBsaW5l
Q2FwLmxpbmVDYXAoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVEYXNoOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRM
aW5lRGFzaChtX2Rhc2hBcnJheSwgbV9kYXNoT2Zmc2V0KTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFz
aCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRhc2gtYXJyYXkiLCBsaW5lRGFzaC5kYXNoQXJy
YXkoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLW9mZnNldCIsIGxpbmVEYXNoLmRhc2hP
ZmZzZXQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVKb2luOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lSm9p
bihtX2xpbmVKb2luKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFNldExpbmVKb2luJiBsaW5lSm9pbikKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImxpbmUtam9pbiIsIGxpbmVKb2luLmxpbmVKb2luKCkpOwotICAgIHJldHVybiB0czsK
LX0KLQotdm9pZCBTZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1pdCk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRN
aXRlckxpbWl0JiBtaXRlckxpbWl0KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibWl0cmUtbGlt
aXQiLCBtaXRlckxpbWl0Lm1pdGVyTGltaXQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lk
IENsZWFyU2hhZG93OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5jbGVhclNoYWRvdygpOwotfQotCiB2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKQEAg
LTY1NywzMCArNTQwLDE1IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKICAgICByZXR1cm4gdHM7
CiB9CiAKLXZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IsIG1f
b3AsIG1fYmxlbmRNb2RlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYgaXRlbSkKLXsKLSAgICB0cy5k
dW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJj
b2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3Bl
cmF0aW9uIiwgaXRlbS5jb21wb3NpdGVPcGVyYXRvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9kZSgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZv
aWQgRmlsbFJvdW5kZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7Ci0gICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5k
TW9kZSk7CisgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yKTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZp
bGxSb3VuZGVkUmVjdCYgaXRlbSkKIHsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVt
LnJvdW5kZWRSZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9y
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkp
OwogICAgIHJldHVybiB0czsKIH0KIApAQCAtNzY4LDggKzYzNiw4IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkK
IH0KIAogI2lmIEVOQUJMRShWSURFTykKLVBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZv
ck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24p
Ci0gICAgOiBtX2lkZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKK1BhaW50RnJhbWVGb3JN
ZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIpCiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogewogfQpAQCAtMTAxMSwx
OSArODc5LDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBJdGVtVHlwZSB0eXBlKQogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6
OlNhdmU6IHRzIDw8ICJzYXZlIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTog
dHMgPDwgInJlc3RvcmUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHRz
IDw8ICJ0cmFuc2xhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHRzIDw8
ICJyb3RhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogdHMgPDwgInNjYWxl
IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB0cyA8PCAic2V0LWN0bSI7IGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB0cyA8PCAiY29uY2F0ZW50
YXRlLWN0bSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjog
dHMgPDwgInNldC1pbmxpbmUtZmlsbC1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZVN0cm9rZUNvbG9yOiB0cyA8PCAic2V0LWlubGluZS1zdHJva2UtY29sb3IiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHRzIDw8ICJzZXQt
c3Ryb2tlLXRoaWNrbmVzcyI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB0
cyA8PCAic2V0LXN0YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDog
dHMgPDwgInNldC1saW5lLWNhcCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVE
YXNoOiB0cyA8PCAic2V0LWxpbmUtZGFzaCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVKb2luOiB0cyA8PCAic2V0LWxpbmUtam9pbiI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldE1pdGVyTGltaXQ6IHRzIDw8ICJzZXQtbWl0ZXItbGltaXQiOyBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwOiB0cyA8PCAiY2xpcCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBPdXQ6IHRzIDw8ICJjbGlwLW91dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBUb0ltYWdlQnVmZmVyOiB0cyA8PCAiY2xpcC10by1pbWFnZS1idWZmZXIiOyBicmVhazsK
QEAgLTEwNDYsNyArOTA1LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHRz
IDw8ICJmaWxsLXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvcjogdHMgPDwgImZpbGwtcmVjdC13aXRoLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1ncmFkaWVu
dCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogdHMgPDwg
ImZpbGwtY29tcG9zaXRlZC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OiB0cyA8PCAiZmlsbC1yb3VuZGVkLXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogdHMgPDwgImZpbGwtcmVjdC13aXRoLXJv
dW5kZWQtaG9sZSI7IGJyZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpAQCAtMTA3
OCw3ICs5MzYsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB0
cyA8PCAiYXBwbHktZmlsbC1wYXR0ZXJuIjsgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOiB0cyA8PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZh
Y3RvciI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xl
YXItc2hhZG93IjsgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0czsKIH0KQEAgLTEwODgsMjEg
Kzk0NSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5k
bGUgaXRlbSkKICAgICB0cyA8PCBpdGVtLnR5cGUoKTsKIAogICAgIHN3aXRjaCAoaXRlbS50eXBl
KCkpIHsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PFRyYW5zbGF0ZT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90
YXRlOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxSb3RhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTY2FsZT4o
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICB0
cyA8PCBpdGVtLmdldDxTZXRDVE0+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNU
TT4oKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENv
bG9yOgogICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMTExNSwxOCArOTU3LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
YXRlOgogICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
U2V0TGluZUNhcD4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVEYXNoPigpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8U2V0TGluZUpvaW4+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCk7
Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PENsaXA+KCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE5Myw5ICsxMDIzLDYgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQog
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICB0cyA8PCBp
dGVtLmdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxG
aWxsQ29tcG9zaXRlZFJlY3Q+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0
PigpOwogICAgICAgICBicmVhazsKQEAgLTEyNzEsNyArMTA5OCw2IEBAIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0
dGVybjoKICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgKaW5kZXggOTdjYjVmYzhkMDRiYTg2NjJiNzJjN2RkZWViYzQ0MTU1YzI4MjViNy4uZjkwN2Iz
MTRiMjUyOWJkMjdiZjA0M2ViMTUyNDQwMzI3YzRiMDY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCkBAIC04NSwxMDQgKzg1LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9OwogCi1jbGFzcyBUcmFu
c2xhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6VHJhbnNsYXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
ZmFsc2U7Ci0KLSAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICAgICAgOiBtX3go
eCkKLSAgICAgICAgLCBtX3koeSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgeCgpIGNvbnN0
IHsgcmV0dXJuIG1feDsgfQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgZmxvYXQgbV94IHsgMCB9OwotICAgIGZsb2F0IG1feSB7IDAgfTsKLX07
Ci0KLWNsYXNzIFJvdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpSb3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKLQotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICAgICAgOiBtX2Fu
Z2xlKGFuZ2xlKQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5nbGU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9hbmdsZSB7IDAgfTsgLy8g
SW4gcmFkaWFucy4KLX07Ci0KLWNsYXNzIFNjYWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNjYWxlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCi0gICAgICAgIDogbV9zaXplKHNpemUpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0
IEZsb2F0U2l6ZSYgYW1vdW50KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIEZsb2F0U2l6ZSBtX3NpemU7Ci19OwotCi1jbGFzcyBTZXRDVE0gewotcHVibGljOgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0Q1RN
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0o
dHJhbnNmb3JtKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKLX07Ci0KLWNsYXNzIENvbmNhdGVuYXRlQ1RN
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkNvbmNhdGVuYXRlQ1RNOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
ZmFsc2U7Ci0KLSAgICBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLSAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgewotICAgIH0KLQot
ICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2Zvcm07IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3Jt
OwotfTsKLQogY2xhc3MgU2V0SW5saW5lRmlsbENvbG9yIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjsKQEAgLTI0NywxMCArMTQ5LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyk7Ci0KLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlQ2hhbmdlOyB9Ci0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKCkgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQorICAgIGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYpOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFNldFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMjU4LDQwNCArMTU4LDI2IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpOwogCiBw
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlJik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBtX3N0YXRl
Q2hhbmdlOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CiB9OwogCiB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBTZXRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiB7Ci0gICAgYXV0byBjaGFuZ2VGbGFncyA9IG1fc3RhdGVDaGFuZ2UubV9jaGFuZ2VG
bGFnczsKLSAgICBlbmNvZGVyIDw8IGNoYW5nZUZsYWdzOwotCi0gICAgYXV0byYgc3RhdGUgPSBt
X3N0YXRlQ2hhbmdlLm1fc3RhdGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuc3Ryb2tlR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5zdHJv
a2VHcmFkaWVudDsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChz
dGF0ZS5zdHJva2VQYXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuc3Ryb2tlUGF0
dGVybjsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmZp
bGxHcmFkaWVudCk7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLmZpbGxHcmFkaWVudDsKLSAg
ICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuZmlsbFBhdHRlcm4p
OwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5n
ZSkpIHsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIGVu
Y29kZXIgPDwgc3RhdGUuc2hhZG93Qmx1cjsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFk
b3dDb2xvcjsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwotICAg
IH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VU
aGlja25lc3M7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
dGV4dERyYXdpbmdNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuc3Ryb2tlQ29sb3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
ZmlsbENvbG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc3Ry
b2tlU3R5bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWxsUnVs
ZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jb21w
b3NpdGVPcGVyYXRvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5i
bGVuZE1vZGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0KLSAgICBpZiAoY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAg
ZW5jb2RlciA8PCBzdGF0ZS5hbHBoYTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgZW5j
b2RlciA8PCBzdGF0ZS5zaG91bGRBbnRpYWxpYXM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgZW5j
b2RlciA8PCBzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICBlbmNvZGVyIDw8IG1f
c3RhdGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBzdGQ6Om9wdGlvbmFsPFNldFN0
YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgc3RkOjpvcHRp
b25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncz4gY2hhbmdlRmxhZ3M7
Ci0gICAgZGVjb2RlciA+PiBjaGFuZ2VGbGFnczsKLSAgICBpZiAoIWNoYW5nZUZsYWdzKQorICAg
IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IHN0YXRlOworICAgIGRlY29kZXIg
Pj4gc3RhdGU7CisgICAgaWYgKCFzdGF0ZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgIHN0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3MgPSAqY2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc3RhdGVDaGFu
Z2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3Jh
ZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVudDo6
ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIXN0cm9rZUdyYWRpZW50KQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0
cm9rZUdyYWRpZW50ID0gV1RGTW92ZSgqc3Ryb2tlR3JhZGllbnQpOwotICAgIH0KLQotICAgIGlm
IChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0cm9rZVBhdHRlcm4gPSBQ
YXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghc3Ryb2tlUGF0dGVybikKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5zdHJva2VQYXR0ZXJuID0gV1RGTW92ZSgqc3Ryb2tlUGF0dGVybik7Ci0gICAgfQotCi0g
ICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmaWxsR3JhZGllbnQg
PSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIWZpbGxHcmFkaWVudCkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKCpmaWxsR3JhZGllbnQpOwotICAgIH0KLQot
ICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmaWxsUGF0dGVybiA9
IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFmaWxsUGF0dGVybikKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5maWxsUGF0dGVybiA9IFdURk1vdmUoKmZpbGxQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gc2hh
ZG93T2Zmc2V0OwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd09mZnNldDsKLSAgICAgICAgaWYg
KCFzaGFkb3dPZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gKnNoYWRvd09mZnNldDsKLQot
ICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzaGFkb3dCbHVyOwotICAgICAgICBkZWNvZGVy
ID4+IHNoYWRvd0JsdXI7Ci0gICAgICAgIGlmICghc2hhZG93Qmx1cikKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dC
bHVyID0gKnNoYWRvd0JsdXI7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc2hhZG93
Q29sb3I7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93Q29sb3I7Ci0gICAgICAgIGlmICghc2hh
ZG93Q29sb3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7Ci0KLSAgICAgICAg
c3RkOjpvcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiBzaGFkb3dSYWRpdXNNb2RlOwotICAgICAg
ICBkZWNvZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGlmICghc2hhZG93UmFkaXVz
TW9kZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gV1RGTW92ZSgqc2hhZG93UmFkaXVzTW9k
ZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpIHsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gc3Ryb2tlVGhpY2tuZXNzOwotICAgICAgICBkZWNvZGVyID4+
IHN0cm9rZVRoaWNrbmVzczsKLSAgICAgICAgaWYgKCFzdHJva2VUaGlja25lc3MpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzID0gKnN0cm9rZVRoaWNrbmVzczsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4
dERyYXdpbmdNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPFRleHREcmF3aW5n
TW9kZUZsYWdzPiB0ZXh0RHJhd2luZ01vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gdGV4dERyYXdp
bmdNb2RlOwotICAgICAgICBpZiAoIXRleHREcmF3aW5nTW9kZSkKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS50ZXh0RHJhd2lu
Z01vZGUgPSBXVEZNb3ZlKCp0ZXh0RHJhd2luZ01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc3Ryb2tlQ29s
b3I7Ci0gICAgICAgIGRlY29kZXIgPj4gc3Ryb2tlQ29sb3I7Ci0gICAgICAgIGlmICghc3Ryb2tl
Q29sb3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUuc3Ryb2tlQ29sb3IgPSAqc3Ryb2tlQ29sb3I7Ci0gICAgfQotCi0gICAg
aWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gZmls
bENvbG9yOwotICAgICAgICBkZWNvZGVyID4+IGZpbGxDb2xvcjsKLSAgICAgICAgaWYgKCFmaWxs
Q29sb3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUuZmlsbENvbG9yID0gKmZpbGxDb2xvcjsKLSAgICB9Ci0KLSAgICBpZiAo
c3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlU3R5bGVDaGFuZ2UpKSB7Ci0gICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cm9rZVN0eWxlKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VT
dHlsZSA9IHN0cm9rZVN0eWxlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpIHsK
LSAgICAgICAgc3RkOjpvcHRpb25hbDxXaW5kUnVsZT4gZmlsbFJ1bGU7Ci0gICAgICAgIGRlY29k
ZXIgPj4gZmlsbFJ1bGU7Ci0gICAgICAgIGlmICghZmlsbFJ1bGUpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbFJ1bGUg
PSAqZmlsbFJ1bGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkp
IHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gY29tcG9zaXRlT3Bl
cmF0b3I7Ci0gICAgICAgIGRlY29kZXIgPj4gY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgICAgIGlm
ICghY29tcG9zaXRlT3BlcmF0b3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSAqY29tcG9z
aXRlT3BlcmF0b3I7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpIHsKLSAgICAg
ICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICAgICAgZGVjb2RlciA+
PiBibGVuZE1vZGU7Ci0gICAgICAgIGlmICghYmxlbmRNb2RlKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmJsZW5kTW9kZSA9
ICpibGVuZE1vZGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1YWxpdHk+IGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGRlY29kZXIgPj4gaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eTsKLSAgICAgICAgaWYgKCFpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5t
X3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSAqaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IGFscGhhOwotICAgICAgICBkZWNvZGVyID4+IGFscGhhOwotICAgICAgICBp
ZiAoIWFscGhhKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBz
dGF0ZUNoYW5nZS5tX3N0YXRlLmFscGhhID0gKmFscGhhOwotICAgIH0KLQotICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRBbnRpYWxpYXNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxk
QW50aWFsaWFzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAg
aWYgKCFzaG91bGRBbnRpYWxpYXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gKnNob3VsZEFu
dGlhbGlhczsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7Ci0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgICAgIGRl
Y29kZXIgPj4gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxkU21vb3RoRm9u
dHMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSAqc2hvdWxkU21vb3RoRm9udHM7Ci0gICAg
fQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpIHsKLSAgICAg
ICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAg
ICAgIGRlY29kZXIgPj4gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgICAgICBpZiAo
IXNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMgPSAqc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgIH0KLQotICAgIGlm
IChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25h
bDxib29sPiBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtczsKLSAgICAgICAgaWYgKCFzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFu
Z2UubV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9ICpzaGFkb3dzSWdub3JlVHJhbnNm
b3JtczsKLSAgICB9Ci0KLSAgICByZXR1cm4geyB7IHN0YXRlQ2hhbmdlIH0gfTsKLX0KLQotY2xh
c3MgU2V0TGluZUNhcCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICAg
ICAgOiBtX2xpbmVDYXAobGluZUNhcCkKLSAgICB7Ci0gICAgfQotCi0gICAgTGluZUNhcCBsaW5l
Q2FwKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ2FwOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIExpbmVD
YXAgbV9saW5lQ2FwOwotfTsKLQotY2xhc3MgU2V0TGluZURhc2ggewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZURhc2g7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLSAgICAg
ICAgOiBtX2Rhc2hBcnJheShkYXNoQXJyYXkpCi0gICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hP
ZmZzZXQpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkg
Y29uc3QgeyByZXR1cm4gbV9kYXNoQXJyYXk7IH0KLSAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9kYXNoT2Zmc2V0OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwot
Ci1wcml2YXRlOgotICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKLSAgICBmbG9hdCBtX2Rhc2hP
ZmZzZXQ7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRMaW5lRGFzaDo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hB
cnJheTsKLSAgICBlbmNvZGVyIDw8IG1fZGFzaE9mZnNldDsKKyAgICByZXR1cm4geyAqc3RhdGUg
fTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8U2V0TGluZURh
c2g+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9w
dGlvbmFsPERhc2hBcnJheT4gZGFzaEFycmF5OwotICAgIGRlY29kZXIgPj4gZGFzaEFycmF5Owot
ICAgIGlmICghZGFzaEFycmF5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gZGFzaE9mZnNldDsKLSAgICBkZWNvZGVyID4+IGRhc2hPZmZz
ZXQ7Ci0gICAgaWYgKCFkYXNoT2Zmc2V0KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgcmV0dXJuIHt7ICpkYXNoQXJyYXksICpkYXNoT2Zmc2V0IH19OwotfQotCi1jbGFzcyBT
ZXRMaW5lSm9pbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi0gICAg
ICAgIDogbV9saW5lSm9pbihsaW5lSm9pbikKLSAgICB7Ci0gICAgfQotCi0gICAgTGluZUpvaW4g
bGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IExpbmVKb2luIG1fbGluZUpvaW47Ci19OwotCi1jbGFzcyBTZXRNaXRlckxpbWl0IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNl
dE1pdGVyTGltaXQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQot
ICAgIFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLSAgICAgICAgOiBtX21pdGVyTGlt
aXQobWl0ZXJMaW1pdCkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBtX21p
dGVyTGltaXQ7Ci19OwotCi1jbGFzcyBDbGVhclNoYWRvdyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLX07Ci0KIC8vIEZJWE1FOiB0
cmVhdCBhcyBkcmF3aW5nIGl0ZW0/CiBjbGFzcyBDbGlwIHsKIHB1YmxpYzoKQEAgLTE2MTIsOTEg
KzExMzQsMjAgQEAgc3RkOjpvcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFkaWVudD4gRmlsbFJlY3RX
aXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICByZXR1cm4ge3sgKnJlY3Qs
IGdyYWRpZW50LT5nZXQoKSB9fTsKIH0KIAotY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0
cnVlOwotCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKLSAgICAgICAgOiBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAg
ICAgICAsIG1fb3Aob3ApCi0gICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQot
ICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLSAgICBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3A7
IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gc3RkOjpudWxsb3B0OyB9Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZp
bGxDb21wb3NpdGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBGbG9h
dFJlY3QgbV9yZWN0OwotICAgIENvbG9yIG1fY29sb3I7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
bV9vcDsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwgbV9jb2xv
cjsKLSAgICBlbmNvZGVyIDw8IG1fb3A7Ci0gICAgZW5jb2RlciA8PCBtX2JsZW5kTW9kZTsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8RmlsbENvbXBvc2l0ZWRS
ZWN0PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAg
ICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBjb2xvcjsKLSAgICBkZWNvZGVyID4+IGNvbG9yOwotICAgIGlmICghY29s
b3IpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPENv
bXBvc2l0ZU9wZXJhdG9yPiBvcDsKLSAgICBkZWNvZGVyID4+IG9wOwotICAgIGlmICghb3ApCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9k
ZT4gYmxlbmRNb2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgIGlmICghYmxlbmRN
b2RlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICpyZWN0
LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSB9fTsKLX0KLQogY2xhc3MgRmlsbFJvdW5kZWRSZWN0
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkZpbGxSb3VuZGVkUmVjdDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSB0cnVlOwogCi0gICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBGaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAg
ICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQogICAgIHsKICAgICB9CiAKICAgICBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQog
ICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLSAgICBC
bGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KIAogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxsUm91bmRl
ZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CkBAIC0xNzA5LDcgKzExNjAsNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEZsb2F0Um91bmRlZFJlY3QgbV9yZWN0OwogICAgIENvbG9yIG1fY29sb3I7
Ci0gICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KQEAgLTE3MTcsNyArMTE2Nyw2IEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fcmVjdDsKICAgICBlbmNv
ZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX2JsZW5kTW9kZTsKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTE3MzMsMTIgKzExODIsNyBAQCBzdGQ6Om9wdGlvbmFsPEZp
bGxSb3VuZGVkUmVjdD4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
ICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3Rk
OjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVyID4+IGJsZW5kTW9k
ZTsKLSAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqYmxlbmRNb2RlIH19OworICAgIHJldHVybiB7
IHsgKnJlY3QsICpjb2xvciB9IH07CiB9CiAKIGNsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
IHsKQEAgLTE5NjEsNyArMTQwNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKLSAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAogICAg
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uOyB9CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0KQEAgLTIyNTYsMTMgKzE3MDAsMTEgQEAgdXNpbmcgRGlzcGxh
eUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgPCBBcHBseURldmljZVNjYWxlRmFjdG9yCiAg
ICAgLCBCZWdpblRyYW5zcGFyZW5jeUxheWVyCiAgICAgLCBDbGVhclJlY3QKLSAgICAsIENsZWFy
U2hhZG93CiAgICAgLCBDbGlwCiAgICAgLCBDbGlwT3V0CiAgICAgLCBDbGlwT3V0VG9QYXRoCiAg
ICAgLCBDbGlwUGF0aAogICAgICwgQ2xpcFRvSW1hZ2VCdWZmZXIKLSAgICAsIENvbmNhdGVuYXRl
Q1RNCiAgICAgLCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyCiAgICAgLCBEcmF3RWxsaXBzZQog
ICAgICwgRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIKQEAgLTIyNzgsNyArMTcyMCw2IEBAIHVzaW5n
IERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgICwgRHJhd1JlY3QKICAgICAsIERy
YXdTeXN0ZW1JbWFnZQogICAgICwgRW5kVHJhbnNwYXJlbmN5TGF5ZXIKLSAgICAsIEZpbGxDb21w
b3NpdGVkUmVjdAogICAgICwgRmlsbEVsbGlwc2UKICAgICAsIEZpbGxQYXRoCiAgICAgLCBGaWxs
UmVjdApAQCAtMjI4OCwyMyArMTcyOSwxNSBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6
OnZhcmlhbnQKICAgICAsIEZpbGxSb3VuZGVkUmVjdAogICAgICwgRmx1c2hDb250ZXh0CiAgICAg
LCBSZXN0b3JlCi0gICAgLCBSb3RhdGUKICAgICAsIFNhdmUKLSAgICAsIFNjYWxlCi0gICAgLCBT
ZXRDVE0KICAgICAsIFNldElubGluZUZpbGxDb2xvcgogICAgICwgU2V0SW5saW5lU3Ryb2tlQ29s
b3IKLSAgICAsIFNldExpbmVDYXAKLSAgICAsIFNldExpbmVEYXNoCi0gICAgLCBTZXRMaW5lSm9p
bgotICAgICwgU2V0TWl0ZXJMaW1pdAogICAgICwgU2V0U3RhdGUKICAgICAsIFNldFN0cm9rZVRo
aWNrbmVzcwogICAgICwgU3Ryb2tlRWxsaXBzZQogICAgICwgU3Ryb2tlTGluZQogICAgICwgU3Ry
b2tlUGF0aAogICAgICwgU3Ryb2tlUmVjdAotICAgICwgVHJhbnNsYXRlCiAKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKICAgICAsIEZpbGxMaW5lCkBAIC0yMzQxLDIwICsxNzc0LDEwIEBA
IHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlPiB7CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlLAogICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2F2ZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlJlc3RvcmUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpU
cmFuc2xhdGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGUsCi0g
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTY2FsZSwKLSAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldENUTSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbENvbG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3MsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTZXRTdGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNl
dExpbmVDYXAsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFz
aCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVKb2luLAotICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCwKLSAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyU2hhZG93LAogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkNsaXBPdXQsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlw
VG9JbWFnZUJ1ZmZlciwKQEAgLTIzNzYsNyArMTc5OSw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVu
dW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7CiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCBl
ZWU0NDcxZDM1NGU3NTE1MzEyNTE4OWRmY2M5NDE4YTM5NDUxNGExLi5mMjhhMjE1MmQ4MWM0ZmY5
NmM1NGIwNTdkZTFlNTQwMDQzOGQyZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwCkBAIC00MiwzNTAgKzQyLDE1MyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotUmVjb3JkZXI6OlJlY29yZGVyKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBtX2RyYXdHbHlw
aHNSZWNvcmRlcigqdGhpcywgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotewotICAgIG1fc3RhdGVT
dGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENUTS5tYXBSZWN0KGluaXRp
YWxDbGlwKSB9KTsKLX0KLQotUmVjb3JkZXI6On5SZWNvcmRlcigpCi17Ci0gICAgQVNTRVJUKG1f
c3RhdGVTdGFjay5zaXplKCkgPT0gMSk7IC8vIElmIHRoaXMgZmlyZXMsIGl0IGluZGljYXRlcyBt
aXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4KLX0KK1JlY29yZGVyOjpSZWNvcmRlcihjb25zdCBGbG9h
dFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERy
YXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0ds
eXBocykKKyAgICA6IEdyYXBoaWNzQ29udGV4dChpbml0aWFsQ2xpcCwgeyB9LCAgaW5pdGlhbENU
TSkKKyAgICAsIG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBkZWNvbnN0cnVjdERyYXdHbHlw
aHMpCiAKLXN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBpbmxpbmVTdGF0ZUNoYW5nZUZs
YWdzIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5n
ZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLAotICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgIH07Ci0KLSAg
ICBpZiAoY2hhbmdlRmxhZ3MgIT0gKGNoYW5nZUZsYWdzICYgaW5saW5lU3RhdGVDaGFuZ2VGbGFn
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1f
c3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRB
c1NSR0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17Ci0gICAgaWYgKCFjb250YWluc09ubHlJbmxpbmVT
dGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7Ci0gICAgICAgIGlmIChhdXRvIHBh
dHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAgICAgICAgICAgIHJlY29y
ZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKLSAgICAgICAgaWYgKGF1dG8gcGF0
dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5maWxsUGF0dGVybikKLSAgICAgICAgICAgIHJlY29yZFJl
c291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKLSAgICAgICAgcmVjb3JkU2V0U3RhdGUo
Y2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoKmNoYW5n
ZXMubV9zdGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7Ci0KLSAgICBpZiAo
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhjaGFuZ2VzLm1fc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0SW5s
aW5lRmlsbENvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLnRyeUdldEFzU1JHQkFCeXRl
cygpKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGN1cnJlbnRseSBpbnZva2VkIGluIGFuIGFk
LWhvYyBtYW5uZXIgd2hlbiByZWNvcmRpbmcgZHJhd2luZyBpdGVtcy4gV2Ugc2hvdWxkIGNvbnNp
ZGVyIGVpdGhlcgotICAgIC8vIHNwbGl0dGluZyBHcmFwaGljc0NvbnRleHQgc3RhdGUgY2hhbmdl
cyBpbnRvIGluZGl2aWR1YWwgZGlzcGxheSBsaXN0IGl0ZW1zLCBvciByZWZhY3RvcmluZyB0aGUg
Y29kZSBzdWNoIHRoYXQKLSAgICAvLyB0aGlzIG1ldGhvZCBpcyBhdXRvbWF0aWNhbGx5IGludm9r
ZWQgd2hlbiByZWNvcmRpbmcgYSBkcmF3aW5nIGl0ZW0uCi0gICAgYXV0byYgc3RhdGVDaGFuZ2Vz
ID0gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2U7Ci0gICAgYXV0byBjaGFuZ2VzRnJvbUxhc3RT
dGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3RE
cmF3aW5nU3RhdGUpOwotICAgIGlmICghY2hhbmdlc0Zyb21MYXN0U3RhdGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJl
LWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0
YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOwotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbShzdGF0ZUNoYW5nZXMsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKTsKLSAgICBz
dGF0ZUNoYW5nZXMubV9jaGFuZ2VGbGFncyA9IHsgfTsKLSAgICBjdXJyZW50U3RhdGUoKS5sYXN0
RHJhd2luZ1N0YXRlID0gc3RhdGVDaGFuZ2VzLm1fc3RhdGU7Ci19Ci0KLWNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBSZWNvcmRlcjo6c3RhdGUoKSBjb25zdAotewotICAgIHJldHVybiBjdXJy
ZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5tX3N0YXRlOwotfQotCi12b2lkIFJlY29yZGVyOjpkaWRV
cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGN1cnJlbnRTdGF0ZSgp
LnN0YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgcmVjb3JkU2V0TGluZUNhcChs
aW5lQ2FwKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgcmVjb3JkU2V0TGluZURhc2go
ZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KK1JlY29yZGVyOjp+UmVjb3JkZXIoKSA9IGRlZmF1
bHQ7CiAKLXZvaWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQordm9p
ZCBSZWNvcmRlcjo6c2F2ZUltcGwoKQogewotICAgIHJlY29yZFNldExpbmVKb2luKGxpbmVKb2lu
KTsKKyAgICByZWNvcmRTYXZlKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnNldE1pdGVyTGltaXQo
ZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgUmVjb3JkZXI6OnJlc3RvcmVJbXBsKCkKIHsKLSAgICBy
ZWNvcmRTZXRNaXRlckxpbWl0KG1pdGVyTGltaXQpOworICAgIHJlY29yZFJlc3RvcmUoKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0
ZXIsIEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCit2b2lkIFJlY29yZGVyOjphcHBseVN0YXRlQ2hh
bmdlcygpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLQotICAg
IGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUltYWdlKSkgewotICAgICAgICBhdXRvJiBmZUltYWdlID0gZG93bmNhc3Q8RkVJbWFn
ZT4oZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShmZUltYWdl
LnNvdXJjZUltYWdlKCkpKSB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVz
dWx0cyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IXNvdXJjZUltYWdlKSB7Ci0gICAgICAgIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKG51
bGxwdHIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdl
cygpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVz
ZSgqc291cmNlSW1hZ2UpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoc3RhdGUoKS5oYXNPbmx5UHJpbWl0
aXZlQ2hhbmdlcygpKSB7CisgICAgICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1c2gpKQorICAgICAgICAgICAgcmVj
b3JkU2V0SW5saW5lRmlsbENvbG9yKCpmaWxsQ29sb3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7
CiAKLSAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNl
SW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQorICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKQorICAgICAg
ICAgICAgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoKnN0cm9rZUNvbG9yKCkudHJ5R2V0QXNT
UkdCQUJ5dGVzKCkpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFy
dFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIG1fZHJhd0ds
eXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd0ds
eXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21v
b3RoaW5nTW9kZSkKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwot
ICAgIHJlY29yZFJlc291cmNlVXNlKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKTsKLSAgICByZWNv
cmREcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwg
c21vb3RoaW5nTW9kZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLQotICAgIGlmICghcmVj
b3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
CisgICAgICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3MpKQorICAgICAgICAgICAgcmVjb3JkU2V0U3Ry
b2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKLSAgICByZWNvcmREcmF3TmF0aXZl
SW1hZ2UoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3U3lzdGVt
SW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkKLXsKLSAgICByZWNvcmREcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3Rp
bmF0aW9uUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKLSAgICByZWNvcmREcmF3UGF0
dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZv
aWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotCi0gICAg
aWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UGF0dGVybihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6RmlsbEJydXNoKSkgeworICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gZmlsbFBh
dHRlcm4oKSkKKyAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFn
ZSgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkgeworICAgICAgICBpZiAo
YXV0byBwYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpKQorICAgICAgICAgICAgcmVjb3JkUmVzb3Vy
Y2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOwogICAgIH0KIAotICAgIHJlY29yZERyYXdQYXR0
ZXJuKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0K
LQotdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCi17Ci0gICAgcmVjb3JkU2F2ZSgpOwotICAgIG1fc3Rh
dGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclNhdmUoKSk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQotewotICAgIGlmICghbV9zdGF0ZVN0YWNrLnNpemUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAg
ICByZWNvcmRSZXN0b3JlKCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQotewotICAgIGN1cnJlbnRTdGF0ZSgpLnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBy
ZWNvcmRUcmFuc2xhdGUoeCwgeSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBh
bmdsZUluUmFkaWFucykKLXsKLSAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlh
bnMpOwotICAgIHJlY29yZFJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBjdXJyZW50U3RhdGUoKS5z
Y2FsZShzaXplKTsKLSAgICByZWNvcmRTY2FsZShzaXplKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIGlmICh0
cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjdXJyZW50U3Rh
dGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICByZWNvcmRDb25jYXRlbmF0ZUNUTSh0cmFu
c2Zvcm0pOworICAgIHJlY29yZFNldFN0YXRlKHN0YXRlKCkpOwogfQogCi12b2lkIFJlY29yZGVy
OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisjaWYgVVNFKENHKQor
dm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBjdXJyZW50U3RhdGUo
KS5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICByZWNvcmRTZXRDVE0odHJhbnNmb3JtKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpOwogfQog
Ci1BZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQog
ewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCk7CiB9CisjZW5kaWYKIAogdm9pZCBSZWNv
cmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAg
ICAgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBtX3N0YXRlU3Rh
Y2suYXBwZW5kKG1fc3RhdGVTdGFjay5sYXN0KCkuY2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllcigp
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpl
bmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVj
b3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgp
OwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotfQotCi12b2lkIFJl
Y29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdMaW5lc0ZvclRleHQoRmxvYXRQb2ludCgpLCB0b0Zs
b2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMp
OwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi17Ci0gICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6Y2xpcEltcGwoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5
KCk7Ci0gICAgcmVjb3JkRHJhd0VsbGlwc2UocmVjdCk7CisgICAgcmVjb3JkQ2xpcChyZWN0KTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVj
b3JkZXI6OmNsaXBQYXRoSW1wbChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkK
IHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERy
YXdQYXRoKHBhdGgpOworICAgIHJlY29yZENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpjbGlw
T3V0SW1wbChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgcmVjb3JkQ2xpcE91dChyZWN0KTsKIH0KIAotdm9pZCBS
ZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3Jk
ZXI6OmNsaXBPdXRJbXBsKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMs
IHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKKyAgICByZWNvcmRDbGlwT3V0VG9QYXRoKHBhdGgpOwog
fQogCi0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQordm9pZCBSZWNvcmRlcjo6Y2xp
cFRvSW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZWNv
cmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcik7CisgICAgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIo
aW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBD
b2xvciYpCit2b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBy
ZWNvcmRDbGVhclJlY3QocmVjdCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxsUmVj
dChyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0
V2l0aENvbG9yKHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCit2b2lkIFJlY29yZGVyOjpm
aWxsUmVjdEltcGwoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKICAgICByZWNvcmRGaWxs
UmVjdFdpdGhHcmFkaWVudChyZWN0LCBncmFkaWVudCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNv
cmRGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9y
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3Zv
aWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICBy
ZWNvcmRGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5n
ZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJl
Y3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgcmVjb3JkRmlsbEVsbGlwc2UocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewogICAgICAgICBpZiAocGF0aC5o
YXNJbmxpbmVEYXRhPExpbmVEYXRhPigpKQpAQCAtNDAyLDIxICsyMDUsMjEgQEAgdm9pZCBSZWNv
cmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICByZWNvcmRGaWxsUGF0aChwYXRo
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZEZpbGxFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgcmVjb3JkU3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12
b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQordm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNv
cmRTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJv
a2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewogICAgICAgICBpZiAo
cGF0aC5oYXNJbmxpbmVEYXRhPExpbmVEYXRhPigpKQpAQCAtNDMzLDczICsyMzYsMTExIEBAIHZv
aWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICByZWNvcmRTdHJv
a2VQYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkU3Ryb2tlRWxsaXBzZShyZWN0KTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVz
cyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZENsZWFyUmVjdChyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZERyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKIH0KIAotI2lmIFVTRShD
RykKLXZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJlY29yZGVyOjpk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdFbGxpcHNlKHJlY3QpOwogfQog
Ci12b2lkIFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0aChwYXRoKTsKIH0KLSNlbmRpZgogCi12b2lkIFJl
Y29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJz
ZWN0KGN1cnJlbnRTdGF0ZSgpLmN0bS5tYXBSZWN0KHJlY3QpKTsKLSAgICByZWNvcmRDbGlwKHJl
Y3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1Bh
dGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmVjb3JkQ2xpcE91dChyZWN0KTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywg
d2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQogewotICAgIHJl
Y29yZENsaXBPdXRUb1BhdGgocGF0aCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUp
Cit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jiwg
ZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBC
b3VuZHMuaW50ZXJzZWN0KGN1cnJlbnRTdGF0ZSgpLmN0bS5tYXBSZWN0KHBhdGguZmFzdEJvdW5k
aW5nUmVjdCgpKSk7Ci0gICAgcmVjb3JkQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOworICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CisjZW5kaWYKIAotSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5k
cygpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXJJbXBsKEltYWdlQnVmZmVy
JiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBp
ZiAoYXV0byBpbnZlcnNlID0gY3VycmVudFN0YXRlKCkuY3RtLmludmVyc2UoKSkKLSAgICAgICAg
cmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoaW52ZXJzZS0+bWFwUmVjdChjdXJyZW50U3RhdGUoKS5j
bGlwQm91bmRzKSk7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVySW1wbChpbWFnZUJ1ZmZlciwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIGVsc2UKKyAgICAgICAgcmVjb3JkRHJh
d0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9
CiAKLSAgICAvLyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdp
bmFsIHJlY3QuCi0gICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRy
YW5zZm9ybSBiZWhhdmlvci4KLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3Rh
dGUoKS5jbGlwQm91bmRzKTsKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
SW1wbChJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKK3sKKyAgICBm
b3IgKGF1dG8mIGVmZmVjdCA6IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlw
ZTo6RkVJbWFnZSkpIHsKKyAgICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+
KGVmZmVjdC5nZXQoKSk7CisgICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5z
b3VyY2VJbWFnZSgpKSkgeworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVy
ZWRJbWFnZUJ1ZmZlckltcGwoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBy
ZXN1bHRzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghc291cmNlSW1hZ2UpIHsKKyAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIo
bnVsbHB0ciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZSgqc291cmNlSW1hZ2UpKSB7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXJJbXBsKHNvdXJjZUltYWdl
LCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291
cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
Cit2b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcik7Ci0gICAgcmVjb3JkQ2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0KTsKKyAgICByZWNvcmRSZXNvdXJjZVVz
ZShpbWFnZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TmF0aXZl
SW1hZ2UoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFJlY29y
ZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6
Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVu
ZGVyaW5nTWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3
U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKIHsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVJbWFn
ZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUs
IHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdNZXRob2Q6OkRpc3BsYXlMaXN0KSk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3U3lzdGVtSW1hZ2Uoc3lz
dGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICByZWNvcmRSZXNvdXJj
ZVVzZShpbWFnZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0
dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuSW1wbChJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm5JbXBsKGltYWdlQnVmZmVyLCBkZXN0
UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KTsKKyAgICBlbHNlCisgICAgICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAogI2lmIEVOQUJMRShWSURFTykK
QEAgLTUwOSw3MiArMzUwLDYwIEBAIHZvaWQgUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShN
ZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0CiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEFTU0VSVChwbGF5ZXIuaWRlbnRpZmllcigpKTsK
LSAgICByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5
ZXIuaWRlbnRpZmllcigpLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIAotdm9pZCBSZWNvcmRl
cjo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgLy8gV2UgbW9kaWZ5IHRoZSBzdGF0ZSBkaXJlY3Rs
eSBoZXJlIGluc3RlYWQgb2YgY2FsbGluZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKCkKLSAgICAv
LyBiZWNhdXNlIHRoZSByZWNvcmRlZCBpdGVtIHdpbGwgc2NhbGUoKSB3aGVuIHJlcGxheWVkLgot
ICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHsgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxl
RmFjdG9yIH0pOwotCi0gICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hp
Y2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCi0gICAgLy8gQXNz
ZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KLSAgICByZWNvcmRBcHBseURldmlj
ZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZh
bmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAotRmxvYXRS
ZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
R3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhz
QW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQs
IGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhp
bmdNb2RlKQogewotICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2
aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlzcGxheUxpc3Q6OlJlY29y
ZGVyLiIpOwotICAgIHJldHVybiByZWN0OworICAgIHJlY29yZFJlc291cmNlVXNlKGNvbnN0X2Nh
c3Q8Rm9udCY+KGZvbnQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERy
YXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9v
dGhpbmdNb2RlKTsKIH0KIAotY29uc3QgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6
OmN1cnJlbnRTdGF0ZSgpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKIHsK
LSAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGVTdGFj
ay5sYXN0KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TGluZXNG
b3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsK
IH0KIAotUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpCit2
b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgQVNTRVJUKG1fc3Rh
dGVTdGFjay5zaXplKCkpOwotICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihy
ZWN0LCBzdHlsZSk7CiB9CiAKLWNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVjb3JkZXI6OmN0bSgp
IGNvbnN0CitSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+
IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiByZW5kZXJpbmdN
ZXRob2QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKKyAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihS
ZW5kZXJpbmdNZXRob2Q6OkRpc3BsYXlMaXN0KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRl
eHRTdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgY3RtLnRyYW5zbGF0
ZSh4LCB5KTsKLX0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpCi17Ci0gICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzID0gcmFkMmRlZyhz
dGF0aWNfY2FzdDxkb3VibGU+KGFuZ2xlSW5SYWRpYW5zKSk7Ci0gICAgY3RtLnJvdGF0ZShhbmds
ZUluRGVncmVlcyk7Ci0gICAgCi0gICAgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uOwotICAgIHJv
dGF0aW9uLnJvdGF0ZShhbmdsZUluRGVncmVlcyk7Ci19CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRl
eHRTdGF0ZTo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGN0bS5zY2FsZShz
aXplKTsKLX0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBtYXRyaXgpCit2b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgIGN0bSA9IG1hdHJpeDsKKyAgICAv
LyBXZSBtb2RpZnkgdGhlIHN0YXRlIGRpcmVjdGx5IGhlcmUgaW5zdGVhZCBvZiBjYWxsaW5nIEdy
YXBoaWNzQ29udGV4dDo6c2NhbGUoKQorICAgIC8vIGJlY2F1c2UgdGhlIHJlY29yZGVkIGl0ZW0g
d2lsbCBzY2FsZSgpIHdoZW4gcmVwbGF5ZWQuCisgICAgc2NhbGUoeyBkZXZpY2VTY2FsZUZhY3Rv
ciwgZGV2aWNlU2NhbGVGYWN0b3IgfSk7CisKKyAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRo
ZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50
cy4KKyAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPworICAgIHJl
Y29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogfQogCi12b2lk
IFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG1hdHJpeCkKK0Zsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQogewotICAgIGN0
bSAqPSBtYXRyaXg7CisgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVj
b3JkZXIuIik7CisgICAgcmV0dXJuIHJlY3Q7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlM
aXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA4NDVlYzAwNzcy
ZWQyYzU0YTFlNmNiMjZiMjE1MWRhYmFhNmVjMDc1Li40YjUyYWQ3OGMzN2IyMDZjNzA0Mjg4ZDU4
N2FiNTliY2JlMWNmNjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
QEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCiAjaW5jbHVk
ZSAiRHJhd0dseXBoc1JlY29yZGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4KICNpbmNsdWRlICJJbmxp
bmVQYXRoRGF0YS5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgpAQCAtNTEsNyArNTAsNyBAQCBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNv
cmRlcihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlw
aHM6Olllcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoY29uc3QgRmxvYXRSZWN0JiBp
bml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVj
b25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJl
Y29yZGVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpID0g
MDsKQEAgLTYxLDQ3ICs2MCwzNSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZFNhdmUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFJlc3RvcmUoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
ID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8
dWludDhfdD4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29s
b3IoU1JHQkE8dWludDhfdD4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGluZUNhcChMaW5lQ2Fw
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGlu
ZUpvaW4oTGluZUpvaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1p
dChmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclNoYWRvdygpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmKSA9IDA7CisKKyNpZiBVU0UoQ0cpCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5U3Ry
b2tlUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVy
bigpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdOYXRpdmVJ
bWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb25SZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxS
ZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBH
cmFkaWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSA9IDA7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IEFyY0RhdGEmKSA9IDA7CkBAIC0xMDksMTEgKzk2
LDEwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZl
KGNvbnN0IEJlemllckN1cnZlRGF0YSYpID0gMDsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRG
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSA9IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSA9IDA7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25zdCBBcmNEYXRhJikgPSAwOwpAQCAtMTIx
LDExNiArMTA3LDgwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tl
QmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgPSAwOwogI2VuZGlmCiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0jaWYgVVNF
KENHKQotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSA9IDA7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKSA9IDA7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpID0gMDsKIAogICAg
IHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJbWFnZSYpID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1hZ2VCdWZmZXImKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKGNvbnN0IFNvdXJjZUltYWdlJikgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShGb250JikgPSAwOwogCi0gICAgc3RydWN0
IENvbnRleHRTdGF0ZSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0gICAgICAgIEZs
b2F0UmVjdCBjbGlwQm91bmRzOwotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBz
dGF0ZUNoYW5nZTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbGFzdERyYXdpbmdTdGF0
ZTsKLQotICAgICAgICBDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBj
bGlwKQotICAgICAgICAgICAgOiBjdG0odHJhbnNmb3JtKQotICAgICAgICAgICAgLCBjbGlwQm91
bmRzKGNsaXApCi0gICAgICAgICAgICAsIGxhc3REcmF3aW5nU3RhdGUoc3RhdGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZvclNhdmUoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBDb250ZXh0U3RhdGUgc3RhdGUobGFzdERyYXdpbmdT
dGF0ZSwgY3RtLCBjbGlwQm91bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLnN0YXRlQ2hhbmdlID0g
c3RhdGVDaGFuZ2U7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGF1dG8gc3RhdGUgPSBjbG9uZUZvclNhdmUoKTsKLSAgICAgICAg
ICAgIHN0YXRlLmxhc3REcmF3aW5nU3RhdGUuYWxwaGEgPSAxOwotICAgICAgICAgICAgcmV0dXJu
IHN0YXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSk7Ci0gICAgICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKLSAgICAg
ICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICAgICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOwotICAgIH07Ci0KLSAgICBjb25zdCBWZWN0b3I8Q29udGV4dFN0YXRlLCA0
PiYgc3RhdGVTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVTdGFjazsgfQotCi0gICAgY29u
c3QgQ29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKSBjb25zdDsKLSAgICBDb250ZXh0U3RhdGUm
IGN1cnJlbnRTdGF0ZSgpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TW9kZT4sIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgCisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCkgPSAwOwogCiBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxh
dGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzYXZlSW1wbCgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVzdG9yZUltcGwoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5U3Rh
dGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29u
dGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQo
Ym9vbCkgZmluYWwgeyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9rZVBhdHRl
cm4oKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBm
aW5hbDsKICNlbmRpZgogCi0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSgpIGNvbnN0IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRp
ZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xpcEltcGwoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGlwUGF0aEltcGwoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dEltcGwoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0SW1wbChjb25zdCBQ
YXRoJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcklt
cGwoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVKb2lu
KExpbmVKb2luKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1pdGVyTGltaXQo
ZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3RJ
bXBsKGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9s
ZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxs
UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLQotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5U3Ryb2tlUGF0
dGVybigpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlGaWxsUGF0dGVybigp
IGZpbmFsOwotI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSkg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250
U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdT
eXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKIAorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CkBAIC0yNDEsNDAgKzE5MSwyNiBA
QCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
YXZlKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCkgZmluYWw7Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNs
dWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOwotCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXJJbXBs
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlckltcGwoSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwg
RmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuSW1wbChJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAjaWYgRU5BQkxFKFZJ
REVPKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKIAorICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3Qg
Rm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9v
dGhpbmdNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworCisgICAgCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5h
bDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKIAot
ICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7Ci0KLSAgICBWZWN0b3I8Q29udGV4dFN0YXRlLCA0PiBt
X3N0YXRlU3RhY2s7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyIG1fZHJhd0dseXBoc1JlY29yZGVy
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAK
aW5kZXggMWZkYzZiYTU2YmZkYjI2MzZlZmIzNDYyYWRhMmE5OTBkMzM4OTk0NS4uNWE2YWU4NGZm
NDU0ZjRhY2QzODUyNTEwOTZiODU3M2FkYjNkMWUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCkBAIC00MiwxOCArNDIsMTMgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLVJlY29yZGVySW1wbDo6UmVj
b3JkZXJJbXBsKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3
R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKLSAgICA6IFJlY29yZGVyKHN0YXRlLCBpbml0
aWFsQ2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorUmVjb3JkZXJJbXBs
OjpSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBGbG9hdFJlY3Qm
IGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlw
aHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykK
KyAgICA6IFJlY29yZGVyKGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdH
bHlwaHMpCiAgICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQogewogICAgIExPR19XSVRI
X1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiXG5SZWNvcmRpbmcgd2l0aCBjbGlwICIg
PDwgaW5pdGlhbENsaXApOwogfQogCi1SZWNvcmRlckltcGw6On5SZWNvcmRlckltcGwoKQotewot
ICAgIEFTU0VSVChzdGF0ZVN0YWNrKCkuc2l6ZSgpID09IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBp
dCBpbmRpY2F0ZXMgbWlzbWF0Y2hlZCBzYXZlL3Jlc3RvcmUuCi19Ci0KIHZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRTYXZlKCkKIHsKICAgICBhcHBlbmQ8U2F2ZT4oKTsKQEAgLTY0LDMxICs1OSw2
IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRSZXN0b3JlKCkKICAgICBhcHBlbmQ8UmVzdG9y
ZT4oKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQotewotICAgIGFwcGVuZDxUcmFuc2xhdGU+KHgsIHkpOwotfQotCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIGFwcGVuZDxSb3RhdGU+
KGFuZ2xlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2NhbGUpCi17Ci0gICAgYXBwZW5kPFNjYWxlPihzY2FsZSk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Ci17Ci0gICAgYXBwZW5kPFNldENUTT4odHJhbnNmb3JtKTsKLX0KLQotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQotewotICAgIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4odHJhbnNmb3JtKTsKLX0KLQogdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBpbmxp
bmVDb2xvcikKIHsKICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihpbmxpbmVDb2xvcik7
CkBAIC0xMDQsOTMgKzc0LDIyIEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdHJva2VU
aGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+
KHRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQotewotICAgIGFwcGVuZDxTZXRTdGF0ZT4oc3RhdGUs
IGNoYW5nZUZsYWdzKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVDYXAo
TGluZUNhcCBsaW5lQ2FwKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldFN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBhcHBlbmQ8U2V0TGluZUNhcD4o
bGluZUNhcCk7CisgICAgYXBwZW5kPFNldFN0YXRlPihzdGF0ZSk7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGFycmF5LCBmbG9hdCBk
YXNoT2Zmc2V0KQotewotICAgIGFwcGVuZDxTZXRMaW5lRGFzaD4oYXJyYXksIGRhc2hPZmZzZXQp
OwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4gam9p
bikKLXsKLSAgICBhcHBlbmQ8U2V0TGluZUpvaW4+KGpvaW4pOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBhcHBlbmQ8U2V0
TWl0ZXJMaW1pdD4obGltaXQpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJT
aGFkb3coKQotewotICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0KLQotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBhcHBl
bmQ8Q2xpcD4oY2xpcFJlY3QpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91
dChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQotewotICAgIGFwcGVuZDxDbGlwT3V0PihjbGlw
UmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KQotewotICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXBw
ZW5kPENsaXBPdXRUb1BhdGg+KHBhdGgpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
Q2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKLXsKLSAgICBhcHBlbmQ8
Q2xpcFBhdGg+KHBhdGgsIHJ1bGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNv
dXJjZUltYWdlKQotICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpOwotICAgIGFwcGVuZDxEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcj4o
V1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQotCi12b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNt
b290aGluZ01vZGUgbW9kZSkKLXsKLSAgICBhcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlKTsKLX0KLQotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kPERyYXdJbWFnZUJ1
ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdO
YXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpbWFnZUlkZW50aWZpZXIsIGltYWdl
U2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCisjaWYgVVNFKENHKQordm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kPERyYXdTeXN0ZW1J
bWFnZT4oc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgYXBwZW5kPEFwcGx5U3Ry
b2tlUGF0dGVybj4oKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJu
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBhcHBlbmQ8RHJh
d1BhdHRlcm4+KGltYWdlSWRlbnRpZmllciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4o
KTsKIH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CkBAIC0yMDIsNDQgKzEwMSwzNCBA
QCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIGFw
cGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewot
ICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwgbGluZVdpZHRoKTsKLX0KLQotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKQotewotICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIp
OwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXAoY29uc3QgRmxv
YXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oYmxvY2tM
b2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91Ymxl
TGluZXMpOworICAgIGFwcGVuZDxDbGlwPihjbGlwUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCiB7Ci0g
ICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKKyAgICBh
cHBlbmQ8Q2xpcFBhdGg+KHBhdGgsIHJ1bGUpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBhcHBlbmQ8
RHJhd0VsbGlwc2U+KHJlY3QpOworICAgIGFwcGVuZDxDbGlwT3V0PihjbGlwUmVjdCk7CiB9CiAK
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsK
LSAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOworICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihw
YXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNv
bnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewot
ICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3Ip
OworICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29s
b3IpOworICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjU3LDIzICsxNDYs
MjIgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGcKICAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ+KHJlY3QsIGdyYWRpZW50KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZp
bGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlKQordm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4ocmVj
dCwgY29sb3IsIG9wLCBtb2RlKTsKKyAgICBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihyZWN0LCBj
b2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUg
bW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVj
dCwgY29sb3IsIG1vZGUpOworICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVj
dCwgcm91bmRlZFJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
YXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkUmVjdCwgY29sb3Ip
OworICAgIGFwcGVuZDxGaWxsRWxsaXBzZT4ocmVjdCk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxMaW5lKGNvbnN0IExp
bmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVuZDxGaWxsTGluZT4obGluZSk7CkBAIC0yOTMsNyAr
MTgxLDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBC
ZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewogICAgIGFwcGVuZDxGaWxsQmV6aWVyQ3VydmU+KGN1
cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTMwMSwyNSAr
MTg4LDE3IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoKQogICAgIGFwcGVuZDxGaWxsUGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXBwZW5k
PEZpbGxFbGxpcHNlPihyZWN0KTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewot
ICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwgZGVzdGluYXRpb24pOworICAg
IGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQotI2VuZGlmIC8v
IEVOQUJMRShWSURFTykKIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8U3Ry
b2tlUmVjdD4ocmVjdCwgd2lkdGgpOworICAgIGFwcGVuZDxTdHJva2VFbGxpcHNlPihyZWN0KTsK
IH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYgbGluZSkKIHsKICAgICBhcHBlbmQ8U3Ry
b2tlTGluZT4obGluZSk7CkBAIC0zMzksNyArMjE4LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYgY3VydmUpCiB7CiAg
ICAgYXBwZW5kPFN0cm9rZUJlemllckN1cnZlPihjdXJ2ZSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM0NywzMyArMjI1LDg0IEBAIHZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgYXBwZW5kPFN0cm9r
ZVBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
YXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOworICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwg
Ym9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7
Ci0gICAgYXBwZW5kPENsZWFyUmVjdD4ocmVjdCk7CisgICAgYXBwZW5kPERyYXdMaW5lPihwb2lu
dDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGFwcGVuZDxEcmF3RWxs
aXBzZT4ocmVjdCk7Cit9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBh
dHRlcm4oKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiB7Ci0gICAgYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKKyAgICBhcHBlbmQ8RHJh
d1BhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0
dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPigpOworICAgIGFwcGVuZDxEcmF3Rm9j
dXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCi0jZW5kaWYgLy8g
VVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0
cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOworfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+
KHNjYWxlRmFjdG9yKTsKKyAgICBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpbWFnZUlkZW50aWZp
ZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit7CisgICAgYXBwZW5kPERyYXdT
eXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGFwcGVuZDxEcmF3SW1h
Z2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAo
c291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgYXBwZW5kPERyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
PihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7Cit9CisKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXBwZW5kPERyYXdQYXR0ZXJuPihp
bWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQoreworICAgIGFwcGVuZDxQYWludEZy
YW1lRm9yTWVkaWE+KGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNlbmRpZgorCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNt
b290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBhcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlKTsKK30KKwordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMpCit7CisgICAgYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9p
bnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRv
dWJsZUxpbmVzKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSYgc3R5bGUpCit7CisgICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+
KHJlY3QsIHN0eWxlKTsKIH0KIAogYm9vbCBSZWNvcmRlckltcGw6OnJlY29yZFJlc291cmNlVXNl
KE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSkKQEAgLTQwNSw2ICszMzQsMTUgQEAgYm9vbCBSZWNv
cmRlckltcGw6OnJlY29yZFJlc291cmNlVXNlKEZvbnQmIGZvbnQpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKKworCisKKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCit7CisgICAgYXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I+KHNjYWxlRmFjdG9yKTsKK30KKwogLy8gRklYTUU6IHNoYXJlIHdpdGggU2hhZG93RGF0
YQogc3RhdGljIGlubGluZSBmbG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFk
aXVzKQogewpAQCAtNDE1LDIyICszNTMsOSBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IHNoYWRvd1Bh
aW50aW5nRXh0ZW50KGZsb2F0IGJsdXJSYWRpdXMpCiAgICAgcmV0dXJuIGNlaWxmKGJsdXJSYWRp
dXMgKiByYWRpdXNFeHRlbnRNdWx0aXBsaWVyKTsKIH0KIAotRmxvYXRSZWN0IFJlY29yZGVySW1w
bDo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK0Zs
b2F0UmVjdCBSZWNvcmRlckltcGw6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJl
Y3QmKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBib3VuZHMgPSByZWN0OwotICAgIGF1dG8mIHN0
YXRlID0gY3VycmVudFN0YXRlKCk7Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAg
IGZsb2F0IHNoYWRvd1JhZGl1czsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoZ2V0
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKLSAgICAg
ICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5kczsKLSAgICAgICAgc2hhZG93RXh0ZW50
Lm1vdmUoc2hhZG93T2Zmc2V0KTsKLSAgICAgICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93
UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7Ci0gICAgICAgIGJvdW5kcy51bml0ZShzaGFk
b3dFeHRlbnQpOwotICAgIH0KLQotICAgIHJldHVybiBpbnRlcnNlY3Rpb24oc3RhdGUuY2xpcEJv
dW5kcywgc3RhdGUuY3RtLm1hcFJlY3QoYm91bmRzKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXJJbXBsLmgKaW5kZXggNjQyMjY1ZjA5ODAyMmNmMmIwNWYxODBjMTc0ZmEwMzQ2MmYy
ZGQ0MC4uNmRlNmFlZGZmY2IxN2RiMmQwODFiNDJjMWRlNmJjMzI5YTM4YmY0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKQEAgLTM1LDkgKzM1LDggQEAg
Y2xhc3MgUmVjb3JkZXJJbXBsIDogcHVibGljIFJlY29yZGVyIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlckltcGwpOwogcHVi
bGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdH
bHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRlckltcGwoKTsKLQorICAgIFdFQkNP
UkVfRVhQT1JUIFJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYgaW5p
dGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSwgRHJhd0ds
eXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKKyAgICAKICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBjb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgZmluYWwgeyB9CkBAIC00Nyw0NyArNDYsMzUgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZFNhdmUoKSBmaW5hbDsKICAgICB2b2lkIHJlY29y
ZFJlc3RvcmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRTY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworCiAgICAgdm9p
ZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZv
aWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAg
IHZvaWQgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUNh
cChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUpv
aW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCkg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclNoYWRvdygpIGZpbmFsOworICAgIHZvaWQgcmVj
b3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBmaW5hbDsKKworI2lmIFVT
RShDRykKKyAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIHJl
Y29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkQ2xpcChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CiAgICAgdm9pZCByZWNv
cmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBQ
YXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rmls
dGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBGaWx0ZXImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3Qg
Rm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9v
dGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERy
YXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVy
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
bG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCByZWNvcmRD
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVu
dChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmls
bENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29y
ZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsQXJj
KGNvbnN0IEFyY0RhdGEmKSBmaW5hbDsKQEAgLTk1LDExICs4MiwxMCBAQCBwcml2YXRlOgogICAg
IHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpIGZpbmFs
OwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBF
TkFCTEUoVklERU8pCi0gICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKLSNlbmRpZgotICAgIHZv
aWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisKKyAg
ICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJl
Y29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFN0
cm9rZUFyYyhjb25zdCBBcmNEYXRhJikgZmluYWw7CkBAIC0xMDcsMTMgKzkzLDI4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURh
dGEmKSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZp
bmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0Vs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0aChj
b25zdCBQYXRoJikgZmluYWw7CisgICAgCisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0
aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7
CisKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3
U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZv
ck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bikgZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWdu
ZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9k
ZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUmKSBmaW5hbDsKIAogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2Um
KSBmaW5hbDsKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKEltYWdlQnVmZmVyJikgZmluYWw7
CkBAIC0xMzksNiArMTQwLDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAorICAgIHZv
aWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKICAgICBGbG9h
dFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCiAg
ICAgRGlzcGxheUxpc3QmIG1fZGlzcGxheUxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5jcHAKaW5kZXggOGZmMTlkMDAzNTRjZGJlZGUzYTViYTFhZjc1OGNmZjAyM2Ey
NWEyMi4uNjZmYzlkODgyYTRkM2Y3ZGU4ZTg5MTJhMWYzMGFmMTk4ZDAzNTI4MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApAQCAtOTcsMTAgKzk3LDEwIEBAIGlu
bGluZSBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGFw
cGx5U2V0U3RhdGVJdGVtKEdyYXBoCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAg
fTsKIAotICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uo
c2V0U3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkK
KyAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0
YXRlSXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybiAq
aW1hZ2VJZGVudGlmaWVyOwogCi0gICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0
dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLmZpbGxQYXR0
ZXJuLmdldCgpKSkKKyAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGls
ZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAg
ICAgIHJldHVybiAqaW1hZ2VJZGVudGlmaWVyOwogCiAgICAgc2V0U3RhdGVJdGVtLmFwcGx5KGNv
bnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCmlu
ZGV4IGQwOWMxMzczZWE5YWFhZjRhMTg1MTM2ZWU4ODUzZDc4OGZjNDE3OGQuLmQ3OTczMTRkMjQ5
MDY3NjhiOGQ3NTdiN2M0ZGJjZTUzNzgxZmEzZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5
cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKQEAgLTMyLDE0ICszMiwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBo
aWNzQ29udGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21D
b250ZXh0KQotICAgIDogbV9vd25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0ds
eXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0
cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRp
b25Db250ZXh0KGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCiB7Ci0gICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZv
bnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9k
ZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3Bw
CmluZGV4IDVkNjZlYjcyYWQxM2MyNGRhYzA5NWE5NDVmNjE0YTZmNTUyMjI0OTIuLmM4MzE0ODAy
MjdiMTBmNTFjNGQzNDRlZDY5NWExM2Y0MDZjYjY4ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJX
aW4uY3BwCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EcmF3
R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIG93bmVy
LCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1f
b3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFw
aGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBE
ZXJpdmVGb250RnJvbUNvbnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChvd25lcikK
IHsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgbV9vd25l
ci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgc3RhcnRQb2ludCwgbV9zbW9vdGhpbmdNb2RlKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4
dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgc3RhcnRQb2ludCwgbV9zbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFs
dGltZVZpZGVvU291cmNlLmNwcAppbmRleCAzY2Y3NDYwYzgwZTNiZTFkNWJhM2YwY2VkN2MxOWIy
NWRmMjlhYmYyLi43ODVlOTRiZWNmMDdjZDRhODRjOWMzNGQ5Y2VjYzgzODU3ZTA2OTlmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZp
ZGVvU291cmNlLmNwcApAQCAtMjkyLDEyICsyOTIsMTIgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZTo6ZHJhd0JveGVzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBGbG9hdFJl
Y3QgZnJhbWVSZWN0KDIsIDIsIHNpemUud2lkdGgoKSAtIDMsIHNpemUuaGVpZ2h0KCkgLSAzKTsK
ICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSk7CiAgICAgY29udGV4dC5z
ZXRTdHJva2VUaGlja25lc3MoMyk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaChtX2Rhc2hXaWR0
aHMsIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBtX2Rhc2hXaWR0aHMsIDAgfSk7CiAg
ICAgbV9wYXRoLmFkZFJlY3QoZnJhbWVSZWN0KTsKICAgICBtX3BhdGguY2xvc2VTdWJwYXRoKCk7
CiAgICAgY29udGV4dC5zdHJva2VQYXRoKG1fcGF0aCk7CiAKLSAgICBjb250ZXh0LnNldExpbmVE
YXNoKERhc2hBcnJheSgpLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyB9LCAwIH0p
OwogICAgIG1fcGF0aC5jbGVhcigpOwogICAgIG1fcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgwLCBi
b3hUb3AgKyBib3hTaXplKSk7CiAgICAgbV9wYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHNpemUu
d2lkdGgoKSwgYm94VG9wICsgYm94U2l6ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IDFiMTgyYTFkMzZiN2NmYWFh
MGIxNjlkMGQ4Yzg1NDM1ZjQzYjc2N2QuLmU4MGYyZWU4OTE5MzkxNDQxOGU4NzhiZjBhNGEyODQw
ZWU2ODlkMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVs
UGFpbnRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1
bFBhaW50Q2hlY2tlci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRD
aGVja2VyOjpxdWFsaWZpZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcp
CiAgICAgZnJhbWVWaWV3LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNv
bXBvc2l0aW5nTGF5ZXJzKTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMo
dHJ1ZSk7CiAKLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNoZWNrZXJDb250ZXh0KE51bGxHcmFw
aGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVudGZ1
bFBhaW50KTsKKyAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNoZWNrZXJDb250ZXh0KGZyYW1lVmll
dy5yZW5kZXJWaWV3KCktPmRvY3VtZW50UmVjdCgpLCBOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJh
bWVWaWV3LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1
bWVudFJlY3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xk
RW50aXJlQ29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUVsbGlwc2lzQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxp
cHNpc0JveC5jcHAKaW5kZXggYzlhYjIxNzYxNDFmYTdhMzM5YTIwOTdiM2FiZjk3NjUwNzg3ZTRm
MS4uNGJmZjhkMDA4MzkyNTE0Y2JlNjJjYTk1ZDRlNzQzZmMxOTdmMDE5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCkBAIC01NSw3ICs1NSw3
IEBAIHZvaWQgTGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgYm9vbCBzZXRTaGFkb3cgPSBmYWxzZTsK
ICAgICBpZiAobGluZVN0eWxlLnRleHRTaGFkb3coKSkgewogICAgICAgICBDb2xvciBzaGFkb3dD
b2xvciA9IGxpbmVTdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihsaW5lU3R5bGUudGV4
dFNoYWRvdygpLT5jb2xvcigpKTsKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coTGF5b3V0U2l6
ZShsaW5lU3R5bGUudGV4dFNoYWRvdygpLT54KCkudmFsdWUoKSwgbGluZVN0eWxlLnRleHRTaGFk
b3coKS0+eSgpLnZhbHVlKCkpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT5yYWRpdXMoKS52YWx1
ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IExheW91
dFNpemUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgpLnZhbHVlKCksIGxpbmVTdHlsZS50ZXh0
U2hhZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+cmFkaXVzKCku
dmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiAgICAgICAgIHNldFNoYWRvdyA9IHRydWU7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAppbmRleCAyNGM4MmM5ZDZiZDQzZjc0YmEwNWFiNWFjNzY3OTNkNzVkMTVlNTc3Li44ZDk3
ZDI1NzFlMjQ1M2RmMTkyOGJkZTZjNzdjNzYzMTVmYmM4ODJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTcwNSw3ICs3MDUs
NyBAQCBzdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdAogICAgICAgICBib3hTaGFkb3cgPSBib3hTaGFk
b3ctPm5leHQoKTsKIAogICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoYm94U2hhZG93LT54KCku
dmFsdWUoKSwgYm94U2hhZG93LT55KCkudmFsdWUoKSk7Ci0gICAgY29udGV4dC5zZXRTaGFkb3co
c2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHN0eWxlLmNvbG9yQnlB
cHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJr
aXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01v
ZGU6OkRlZmF1bHQpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNoYWRvd09mZnNldCwg
Ym94U2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZp
bHRlcihib3hTaGFkb3ctPmNvbG9yKCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkg
PyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0p
OwogfQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hvb3Nl
SW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJbWFnZSYgaW1h
Z2UsIGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpAQCAtMjA4Nyw3
ICsyMDg3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0
aChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgYXV0byBsaW5lRGFzaCA9IERhc2hBcnJheTo6ZnJvbShkYXNoTGVuZ3RoLCBnYXBM
ZW5ndGgpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKFdURk1vdmUo
bGluZURhc2gpLCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRM
aW5lRGFzaCh7IFdURk1vdmUobGluZURhc2gpLCBkYXNoTGVuZ3RoIH0pOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBGSVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBwYXRoIGNhdXNl
cyBpc3N1ZXMgd2l0aCB0aWdodCBjb3JuZXJzOgpAQCAtMjQ1Niw3ICsyNDU2LDcgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIEZsb2F0UG9pbnQgc25hcHBlZFNoYWRvd09y
aWdpbiA9IEZsb2F0UG9pbnQocm91bmRUb0RldmljZVBpeGVsKHNoYWRvd1JlY3RPcmlnaW4ueCgp
LCBkZXZpY2VTY2FsZUZhY3RvciksIHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dSZWN0T3JpZ2lu
LnkoKSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBzbmFwcGVk
U2hhZG93T2Zmc2V0ID0gc25hcHBlZFNoYWRvd09yaWdpbiAtIHBpeGVsU25hcHBlZEZpbGxSZWN0
LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFw
cGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Vi
a2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNN
b2RlOjpEZWZhdWx0KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNuYXBw
ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJr
aXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01v
ZGU6OkRlZmF1bHQgfSk7CiAKICAgICAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5uZWNlc3Nhcnkg
dG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAgLTI1NTgsNyAr
MjU1OCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBzaGFkb3dPZmZz
ZXQgLT0gZXh0cmFPZmZzZXQ7CiAKICAgICAgICAgICAgIGF1dG8gc25hcHBlZFNoYWRvd09mZnNl
dCA9IHJvdW5kU2l6ZVRvRGV2aWNlUGl4ZWxzKHNoYWRvd09mZnNldCwgZGV2aWNlU2NhbGVGYWN0
b3IpOwotICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwg
c2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8g
U2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Cisg
ICAgICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzbmFwcGVkU2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBT
aGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwog
ICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShwaXhlbFNuYXBwZWRP
dXRlclJlY3QsIHBpeGVsU25hcHBlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAgICAgICB9CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggODUwYmRl
NDhlNDkyOGU4NmRjMTc2YjYyMzIxZmVlZDliNjg2YzNjZC4uOGNmOTYxZTBiYzIzNjRlOTYyY2Rh
ODgxZjg1OWU0ZjMxYTNjOTgzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCkBAIC0yMjUzLDE0ICsyMjUzLDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQCiAj
aWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgYm9vbCB1c2VzQ29tcG9zaXRlT3Bl
cmF0aW9uID0gaGFzQmxlbmRNb2RlKCkgJiYgIShyZW5kZXJlcigpLmlzTGVnYWN5U1ZHUm9vdCgp
ICYmIHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1JlbmRlclZpZXdMYXllcigpKTsKICAgICAgICAg
aWYgKHVzZXNDb21wb3NpdGVPcGVyYXRpb24pCi0gICAgICAgICAgICBjb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUoKSk7
CisgICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0LmNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUoKSB9KTsKICNlbmRpZgogCiAgICAgICAgIGNvbnRleHQu
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihyZW5kZXJlcigpLm9wYWNpdHkoKSk7CiAKICNpZiBFTkFC
TEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZU9wZXJhdGlvbikK
LSAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnRleHQuY29tcG9z
aXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgICAgIGNvbnRleHQu
c2V0Q29tcG9zaXRlTW9kZSh7IGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9k
ZTo6Tm9ybWFsIH0pOwogI2VuZGlmCiAKICNpZmRlZiBSRVZFQUxfVFJBTlNQQVJFTkNZX0xBWUVS
UwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApp
bmRleCBhODUwZTEzNzRhMTI1ODIyMGNlZmM4ZmQ3YTJiNzNmNzY3YTc0M2FjLi5jZTFlYTZmYzUw
M2VkODFjYmQwZWIwYTlkYzdmZjE5MGM5NDMyZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMTgzMSw3ICsxODMxLDkgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKCkKICAgICB9OwogCiAgICAg
YXV0byB1cGRhdGVFdmVudFJlZ2lvbkZvckxheWVyID0gWyZdKEdyYXBoaWNzTGF5ZXImIGdyYXBo
aWNzTGF5ZXIpIHsKLSAgICAgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBudWxsQ29udGV4dChOdWxs
R3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgICAg
ICBhdXRvIGRpcnR5UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KGdyYXBoaWNzTGF5ZXIub2Zm
c2V0RnJvbVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNpemUoKSk7CisgICAgCisgICAgICAg
IE51bGxHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQoZGlydHlSZWN0LCBOdWxsR3JhcGhpY3ND
b250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOwogICAgICAgICBFdmVudFJl
Z2lvbiBldmVudFJlZ2lvbjsKICNpZiBFTkFCTEUoRURJVEFCTEVfUkVHSU9OKQogICAgICAgICBp
ZiAocmVuZGVyZXIoKS5wYWdlKCkuc2hvdWxkQnVpbGRFZGl0YWJsZVJlZ2lvbigpKQpAQCAtMTg1
Myw4ICsxODU1LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9u
KCkKICAgICAgICAgICAgIGV2ZW50UmVnaW9uQ29udGV4dC51bml0ZShlbmNsb3NpbmdJbnRSZWN0
KEZsb2F0UmVjdCgtbGF5ZXJPZmZzZXQsIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKSksIHJlbmRlcmVy
KCkuc3R5bGUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGRpcnR5UmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoZ3JhcGhpY3NMYXllci5vZmZzZXRGcm9t
UmVuZGVyZXIoKSksIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKSk7Ci0gICAgICAgIHBhaW50SW50b0xh
eWVyKCZncmFwaGljc0xheWVyLCBudWxsQ29udGV4dCwgZGlydHlSZWN0LCB7IH0sICZldmVudFJl
Z2lvbkNvbnRleHQpOworICAgICAgICBwYWludEludG9MYXllcigmZ3JhcGhpY3NMYXllciwgbnVs
bENvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoZGlydHlSZWN0KSwgeyB9LCAmZXZlbnRSZWdpb25D
b250ZXh0KTsKIAogICAgICAgICBldmVudFJlZ2lvbi50cmFuc2xhdGUodG9JbnRTaXplKGxheWVy
T2Zmc2V0KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpp
bmRleCAzMGNkMzQzZWE3ZGY5MTY4Y2MzY2RlNDdkYmVmOGY3NTllODhmNzMxLi4yNTZmYzc0OTU2
ZGEzMzg2YTU0ZDM1MmRlMTFiNmZmNzM2NjlhMWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC02MDUsNyArNjA1LDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRUZXh0RmllbGRJbm5lclNoYWRvdyhjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QKICAgICBjb25zdCBGbG9hdFNpemUgaW5uZXJTaGFkb3dPZmZzZXQgeyAwLCA1IH07
CiAgICAgY29uc3RleHByIGF1dG8gaW5uZXJTaGFkb3dCbHVyID0gMTAuMGY7CiAgICAgYXV0byBp
bm5lclNoYWRvd0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIDAuMDRmIH07Ci0g
ICAgY29udGV4dC5zZXRTaGFkb3coaW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwg
aW5uZXJTaGFkb3dDb2xvcik7CisgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgaW5uZXJTaGFk
b3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgaW5uZXJTaGFkb3dDb2xvciB9KTsKICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCBpbm5lclNoYWRvd1Bh
dGg7CkBAIC0yMDgwLDcgKzIwODAsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludFN5c3Rl
bVByZXZpZXdCYWRnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IFBhaW50SW5mbyYgcGFpbgogICAgIC8v
IFVzZSB0aGUgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9uLCBiZWNhdXNlIGl0IGNhbGN1bGF0ZXMg
dGhlIGJsdXIgcmFkaXVzIGluIGNvbnRleHQgc3BhY2UsCiAgICAgLy8gcmF0aGVyIHRoYW4gc2Ny
ZWVuIHNwYWNlLgogICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0gQ29sb3I6OmJsYWNr
LmNvbG9yV2l0aEFscGhhQnl0ZSgyNik7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhG
bG9hdFNpemUgeyB9LCAxNiwgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRE
cm9wU2hhZG93KHsgRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yIH0pOwogCiAgICAgLy8g
VGhlIGNpcmNsZSBtdXN0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCB2YWx1ZSBvZiAxIGZvciB0aGUg
c2hhZG93IGNvbG9yIHRvIGFwcGVhci4KICAgICBDR0Zsb2F0IGNpcmNsZUNvbG9yQ29tcG9uZW50
c1s0XSA9IHsgMCwgMCwgMCwgMSB9OwpAQCAtMjI3Myw3ICsyMjczLDcgQEAgdm9pZCBSZW5kZXJU
aGVtZUlPUzo6cGFpbnRDaGVja2JveFJhZGlvSW5uZXJTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGMKIAogICAgIGJvb2wgaXNFbXB0eSA9ICFzdGF0ZXMuY29udGFpbnNBbnkoeyBD
b250cm9sU3RhdGVzOjpTdGF0ZXM6OkNoZWNrZWQsIENvbnRyb2xTdGF0ZXM6OlN0YXRlczo6SW5k
ZXRlcm1pbmF0ZSB9KTsKICAgICBhdXRvIGZpcnN0U2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8Zmxv
YXQ+IHsgMCwgMCwgMCwgaXNFbXB0eSA/IDAuMDVmIDogMC4xZiB9OwotICAgIGNvbnRleHQuc2V0
U2hhZG93KGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGZpcnN0U2hhZG93Q29s
b3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IGlubmVyU2hhZG93T2Zmc2V0LCBpbm5l
clNoYWRvd0JsdXIsIGZpcnN0U2hhZG93Q29sb3IgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29s
b3IoQ29sb3I6OmJsYWNrKTsKIAogICAgIFBhdGggaW5uZXJTaGFkb3dQYXRoOwpAQCAtMjI5MCw3
ICsyMjkwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveFJhZGlvSW5uZXJT
aGFkb3coY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGMKICAgICBjb250ZXh0LmZpbGxQYXRo
KGlubmVyU2hhZG93UGF0aCk7CiAKICAgICBjb25zdGV4cHIgYXV0byBzZWNvbmRTaGFkb3dDb2xv
ciA9IERpc3BsYXlQMzxmbG9hdD4geyAxLCAxLCAxLCAwLjVmIH07Ci0gICAgY29udGV4dC5zZXRT
aGFkb3coRmxvYXRTaXplIHsgMCwgMCB9LCAxLCBzZWNvbmRTaGFkb3dDb2xvcik7CisgICAgY29u
dGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplIHsgMCwgMCB9LCAxLCBzZWNvbmRTaGFkb3dD
b2xvciB9KTsKIAogICAgIGNvbnRleHQuZmlsbFBhdGgoaW5uZXJTaGFkb3dQYXRoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAwMTBlY2JhZWQ4
N2E3M2E0MjBhZmI5N2U4ZTgwZmVhNjM3OWZlZDNlLi4xMGRjOTBlNTdlNWFlMGY0MjVhMGRhYWEz
NjRmODE0ZTQ0OTQ5OTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCkBAIC0yODE2LDcgKzI4MTYsNyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRQ
bGFjZWhvbGRlckJvcmRlcihjb25zdCBSZW5kZXJBdHRhY2htZW50JiBhdHRhY2htZW50LAogICAg
IGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IocGxhY2Vob2xkZXJCb3JkZXJDb2xvcik7CiAgICAgY29u
dGV4dC5zZXRTdHJva2VUaGlja25lc3MoYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyV2lkdGgp
OwogICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoRGFzaGVkU3Ryb2tlKTsKLSAgICBjb250ZXh0
LnNldExpbmVEYXNoKHthdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNoTGVuZ3RofSwgMCk7
CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IHsgYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVy
RGFzaExlbmd0aCB9LCAwIH0pOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChib3JkZXJQYXRoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9u
UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWlu
dGVyLmNwcAppbmRleCA2NzU1NjhhZmY2MTE4ZjAxM2JkMWQ0ZjU1YTZjMzY0ZmE4YWYzOGU4Li44
MzA5YjJmOGQ0YTMxZmEwM2IxYWJmODQzOWRhMGYzZWYxNjI4NDBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcApAQCAtMjcxLDcg
KzI3MSw3IEBAIHZvaWQgVGV4dERlY29yYXRpb25QYWludGVyOjpwYWludEJhY2tncm91bmREZWNv
cmF0aW9ucyhjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjCiAgICAgICAgICAgICBDb2xvciBzaGFk
b3dDb2xvciA9IHNoYWRvdy0+Y29sb3IoKTsKICAgICAgICAgICAgIGlmIChtX3NoYWRvd0NvbG9y
RmlsdGVyKQogICAgICAgICAgICAgICAgIG1fc2hhZG93Q29sb3JGaWx0ZXItPnRyYW5zZm9ybUNv
bG9yKHNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIG1fY29udGV4dC5zZXRTaGFkb3coRmxvYXRT
aXplKHNoYWRvd1gsIHNoYWRvd1kgLSBleHRyYU9mZnNldCksIHNoYWRvdy0+cmFkaXVzKCkudmFs
dWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICAgICAgbV9jb250ZXh0LnNldERyb3BTaGFkb3co
eyBGbG9hdFNpemUoc2hhZG93WCwgc2hhZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5yYWRp
dXMoKS52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsKICAgICAgICAgICAgIHNoYWRvdyA9IHNoYWRv
dy0+bmV4dCgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
ZXIuY3BwCmluZGV4IDg4NWQ4MjZlZTllNzk2ZjRiNWM1YjU4MzNmNzFhMDI4YzQ1NDFhN2EuLmZl
ODg2OWMxOWU1ZjhkNDNiN2ZhMTZlNDAxYjRmYmM2ZGNmN2VlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAtNzQsNyArNzQsNyBAQCBTaGFkb3dBcHBsaWVy
OjpTaGFkb3dBcHBsaWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2hhZG93RGF0
YSogc2hhZG93LAogICAgIH0KIAogICAgIGlmICghbV9hdm9pZERyYXdpbmdTaGFkb3cpCi0gICAg
ICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCks
IHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zm
c2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiB9CiAKIGlubGluZSBi
b29sIFNoYWRvd0FwcGxpZXI6OmlzTGFzdFNoYWRvd0l0ZXJhdGlvbigpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRleCA3ZWQ1MzdjOTI3OTM3
NzBmNDQ4OGFlMjlkZjQwNzI3ZDdlYjFhM2E5Li42YzczMGVmMDdlNDhjN2VjZjhjNDBlMzdlMDAz
NDVjZmFiNTZjNjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUGF0aC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OmNh
bGN1bGF0ZVVwZGF0ZWRTdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CiBzdGF0aWMgdm9pZCB1c2VT
dHJva2VTdHlsZVRvRmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKGF1
dG8gZ3JhZGllbnQgPSBjb250ZXh0LnN0cm9rZUdyYWRpZW50KCkpCi0gICAgICAgIGNvbnRleHQu
c2V0RmlsbEdyYWRpZW50KCpncmFkaWVudCwgY29udGV4dC5zdGF0ZSgpLnN0cm9rZUdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqZ3JhZGll
bnQsIGNvbnRleHQuc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgZWxzZSBpZiAoUGF0dGVy
biogcGF0dGVybiA9IGNvbnRleHQuc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBjb250ZXh0LnNl
dEZpbGxQYXR0ZXJuKCpwYXR0ZXJuKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCBjYzM4ZWM3MDMwZTYwY2Ux
NzU5YjEzMjg3ZGUyNWY3M2Q1NjVjODU4Li5iNjU4NjhkMWJkMzRjOTBkNGJiZmRkNDc3YWQyYzc0
MjgyYTA1NmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyU3VwcG9ydC5jcHAKQEAgLTUwMSwxMCArNTAxLDEyIEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9y
dDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY2FuU2V0TGluZURhc2gpCi0gICAgICAgICAg
ICBjb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxl
bmd0aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zmc2V0KCkpICogc2NhbGVGYWN0b3IpOworICAgICAg
ICAgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IFdURk1vdmUoZGFzaEFycmF5KSwgbGVuZ3RoQ29u
dGV4dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zmc2V0KCkpICogc2NhbGVG
YWN0b3IgfSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5
bGUoU29saWRTdHJva2UpOwogICAgIH0KKworICAgIGNvbnRleHQuYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKIH0KIAogdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpzdHlsZUNoYW5nZWQoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDJm
YjhmMzNhODcwZGZjY2ViNjJlMTQ5NjU2YjE0NDM3MjJlYmVhMmQuLmY1NzllNWE3NWZlOTEwZjZl
NWI1OGE5YWVmYjY4MzU4OTYyMjEwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTE1LDEyICsxMTUsMTIgQEAg
dm9pZCBTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBQYWkKICAgICAgICAgaWYgKG9wYWNpdHkgPCAxIHx8IGhhc0Js
ZW5kTW9kZSB8fCBpc29sYXRlTWFza0ZvckJsZW5kaW5nIHx8IGhhc0lzb2xhdGlvbikgewogCiAg
ICAgICAgICAgICBpZiAoaGFzQmxlbmRNb2RlKQotICAgICAgICAgICAgICAgIG1fcGFpbnRJbmZv
LT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGFpbnRJbmZvLT5jb250ZXh0KCku
Y29tcG9zaXRlT3BlcmF0aW9uKCksIHN0eWxlLmJsZW5kTW9kZSgpKTsKKyAgICAgICAgICAgICAg
ICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU1vZGUoeyBtX3BhaW50SW5mby0+
Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5ibGVuZE1vZGUoKSB9KTsKIAog
ICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5iZWdpblRyYW5zcGFyZW5jeUxheWVy
KG9wYWNpdHkpOwogCiAgICAgICAgICAgICBpZiAoaGFzQmxlbmRNb2RlKQotICAgICAgICAgICAg
ICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGFpbnRJ
bmZvLT5jb250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsK
KyAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU1vZGUo
eyBtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6
Ok5vcm1hbCB9KTsKIAogICAgICAgICAgICAgbV9yZW5kZXJpbmdGbGFncyB8PSBFbmRPcGFjaXR5
TGF5ZXI7CiAgICAgICAgIH0KQEAgLTI3Myw3ICsyNzMsNyBAQCBib29sIFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckZvcmVncm91bmQoUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIp
CiAKICAgICAvLyBJbnZhbGlkYXRlIGFuIGV4aXN0aW5nIGJ1ZmZlciBpZiB0aGUgc2NhbGUgaXMg
bm90IGNvcnJlY3QuCiAgICAgaWYgKGltYWdlQnVmZmVyKSB7Ci0gICAgICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5nZXRDVE0oKTsKICAgICAg
ICAgSW50U2l6ZSBleHBhbmRlZEJvdW5kaW5nQm94ID0gZXhwYW5kZWRJbnRTaXplKGJvdW5kaW5n
Qm94LnNpemUoKSk7CiAgICAgICAgIEludFNpemUgYnVmZmVyU2l6ZShzdGF0aWNfY2FzdDxpbnQ+
KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC53aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgpKSks
IHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94LmhlaWdodCgpICogdHJh
bnNmb3JtLnlTY2FsZSgpKSkpOwogICAgICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBpbWFnZUJ1ZmZl
ci0+YmFja2VuZFNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CmluZGV4IDRkZDdmODBlMzc3Nzk4N2RjYjcwYzFhM2M4YTg3Y2Q4YTRmZDZmYjkuLmNkODhhZGYw
OGRkYTgwM2JmZDkzZjg5NTc3NDA3Njg2YWM0YzU0NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcApAQCAtMjY5LDE0ICsyNjksMTQgQEAgSW1hZ2VEcmF3UmVzdWx0
IFNWR0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWMKICAgICBBU1NFUlQodmlldyk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRp
b24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAg
ICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4dC5jbGlwKGVuY2xvc2luZ0ludFJl
Y3QoZHN0UmVjdCkpOwogCiAgICAgZmxvYXQgYWxwaGEgPSBjb250ZXh0LmFscGhhKCk7CiAgICAg
Ym9vbCBjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJlbmN5TGF5ZXIgPSBvcHRpb25zLmNvbXBv
c2l0ZU9wZXJhdG9yKCkgIT0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfHwgb3B0aW9u
cy5ibGVuZE1vZGUoKSAhPSBCbGVuZE1vZGU6Ok5vcm1hbCB8fCBhbHBoYSA8IDE7CiAgICAgaWYg
KGNvbXBvc2l0aW5nUmVxdWlyZXNUcmFuc3BhcmVuY3lMYXllcikgewogICAgICAgICBjb250ZXh0
LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoYWxwaGEpOwotICAgICAgICBjb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgQmxlbmRNb2RlOjpO
b3JtYWwpOworICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBDb21wb3NpdGVPcGVy
YXRvcjo6U291cmNlT3ZlciwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAgICAgfQogCiAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBob25vciBvcHRpb25zLm9yaWVudGF0aW9uKCksIHNpbmNlIEltYWdl
Qml0bWFwJ3MgZmxpcFkgaGFuZGxpbmcgcmVsaWVzIG9uIGl0LiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAK
aW5kZXggNTQzODE4MmRkZTg3NjNlYmFkMzhmMTkyZGY3OTVhYTA2MGI2NTFiYi4uOGRhMzkwZjZk
YTcwZTM3OTU1MGE1NzJlMDllMDg0MTE4OWMyZGRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcApAQCAtNzQsMzEgKzc0LDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpyZXN0b3JlKCkKICAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpSZXN0b3JlKCkpOwogfQog
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlRyYW5zbGF0ZSh4LCB5KSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlKQot
ewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlJvdGF0ZShhbmdsZSkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUp
Ci17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2NhbGUoc2NhbGUpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBjdG0pCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2V0Q1RNKGN0bSkpOwotfQot
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNvbmNhdGVuYXRlQ1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNvbmNh
dGVuYXRlQ1RNKGN0bSkpOwotfQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNl
dElubGluZUZpbGxDb2xvcihEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yJiYgaXRlbSkK
IHsKICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwpAQCAtMTI4LDQwICsxMDMsMTUgQEAg
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0
U3RhdGUmJiBpdGVtKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9OwogCi0gICAgaWYgKCFm
aXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLnN0cm9rZVBhdHRl
cm4uZ2V0KCkpKQorICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlKCkuc3Ry
b2tlQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZpeFBh
dHRlcm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCkpKQorICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlKCkuZmlsbEJydXNo
KCkucGF0dGVybigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaGFuZGxlSXRlbShXVEZNb3Zl
KGl0ZW0pKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lQ2Fw
KExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRMaW5l
Q2FwKGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRM
aW5lRGFzaChEaXNwbGF5TGlzdDo6U2V0TGluZURhc2gmJiBpdGVtKQotewotICAgIGhhbmRsZUl0
ZW0oV1RGTW92ZShpdGVtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5
TGlzdDo6U2V0TGluZUpvaW4obGluZUpvaW4pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGhhbmRsZUl0ZW0o
RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQobGltaXQpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5
TGlzdDo6Q2xlYXJTaGFkb3coKSk7Ci19Ci0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaGFuZGxlSXRlbShEaXNwbGF5
TGlzdDo6Q2xpcChyZWN0KSk7CkBAIC0zNzEsMTQgKzMyMSw5IEBAIHZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoR3JhZGllbnQoRGlzcGxheUxpc3Q6OkZpbGxSZWN0
V2l0aEdyCiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsKIH0KIAotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVk
UmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5
TGlzdDo6RmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKKyAgICBoYW5k
bGVJdGVtKERpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpKTsKIH0KIAog
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXgg
M2JiYWY3NjVkMDVmNDRhYmY0ZDk2MWU3NjZjZTY1NDY5OGVkZTI5NC4uODE4ODk2NmFmZmE3MDll
NmZkMGEzMWJmY2E2YzNlNzE4NTY1YzU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCkBA
IC01OSwyMCArNTksMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlKCk7CiAgICAgdm9pZCBy
ZXN0b3JlKCk7Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdm9p
ZCByb3RhdGUoZmxvYXQgYW5nbGUpOwotICAgIHZvaWQgc2NhbGUoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBzY2FsZSk7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtJik7Ci0gICAgdm9pZCBjb25jYXRlbmF0ZUNUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0mKTsKICAgICB2b2lkIHNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yJiYpOwogICAgIHZvaWQgc2V0SW5saW5lU3Ryb2tlQ29s
b3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yJiYpOwogICAgIHZv
aWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKICAgICB2b2lkIHNldFN0YXRlKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZSYmKTsKLSAgICB2b2lkIHNldExpbmVDYXAoV2ViQ29yZTo6
TGluZUNhcCk7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZURhc2gmJik7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihXZWJDb3JlOjpMaW5lSm9pbik7Ci0g
ICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCk7CiAg
ICAgdm9pZCBjbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgY2xpcE91
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVy
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpOwpAQCAtOTcsOCArODcsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIGZpbGxS
ZWN0V2l0aENvbG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3RXaXRoR3JhZGllbnQmJik7Ci0gICAgdm9pZCBmaWxsQ29tcG9zaXRlZFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3Jl
OjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKLSAgICB2b2lkIGZpbGxS
b3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVuZE1vZGUpOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYp
OwogICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJik7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCBmaWxsTGluZShj
b25zdCBXZWJDb3JlOjpMaW5lRGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ci5tZXNzYWdlcy5pbgppbmRleCAyODAyZmZlOGY4Mzk3YzBlZDRkZjEyMWEwMTdmZTc4MTA4ZmY2
YzIwLi40MzExODRiYTQzMzA5MTNjMDJhZDc2NDQwZWRkNjM1OTljMTc4NDBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbgpAQCAtMjUsNDcgKzI1LDM1IEBA
CiBtZXNzYWdlcyAtPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIE5vdFJlZkNvdW50ZWQgU3Ry
ZWFtIHsKICAgICBTYXZlKCkKICAgICBSZXN0b3JlKCkKLSAgICBUcmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkKLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgU2NhbGUoV2ViQ29yZTo6Rmxv
YXRTaXplIHNjYWxlKQotICAgIFNldENUTShXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3RtKQot
ICAgIENvbmNhdGVuYXRlQ1RNKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG0pCisKICAgICBT
ZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xv
ciBpdGVtKQogICAgIFNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRJbmxpbmVTdHJva2VDb2xvciBpdGVtKQogICAgIFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0
aGlja25lc3MpCiAgICAgU2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlIGl0
ZW0pCi0gICAgU2V0TGluZUNhcChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6TGluZUNhcCBsaW5lQ2Fw
KQotICAgIFNldExpbmVEYXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCBpdGVt
KQotICAgIFNldExpbmVKb2luKGVudW06dWludDhfdCBXZWJDb3JlOjpMaW5lSm9pbiBsaW5lSm9p
bikKLSAgICBTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotICAgIENsZWFyU2hhZG93KCkKKwor
I2lmIFVTRShDRykKKyAgICBBcHBseVN0cm9rZVBhdHRlcm4oKQorICAgIEFwcGx5RmlsbFBhdHRl
cm4oKQorI2VuZGlmCisKKyAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
CisgICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQorCiAgICAgQ2xpcChXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCkKKyAgICBDbGlwUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGVudW06dWludDhfdCBX
ZWJDb3JlOjpXaW5kUnVsZSB3aW5kUnVsZSkKICAgICBDbGlwT3V0KFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0KQotICAgIENsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVj
dCBkZXN0aW5hdGlvblJlY3QpCiAgICAgQ2xpcE91dFRvUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgp
Ci0gICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6
V2luZFJ1bGUgd2luZFJ1bGUpCi0gICAgRHJhd0dseXBocyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0dseXBocyBpdGVtKQotICAgIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50
aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVm
ZXJlbmNlIGZpbHRlcikKLSAgICBEcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0
IGRlc3RpbmF0aW9uUmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJD
b3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIERyYXdOYXRpdmVJbWFnZShX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJD
b3JlOjpGbG9hdFNpemUgaW1hZ2VTaXplLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdl
YkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09w
dGlvbnMgb3B0aW9ucykKLSAgICBEcmF3U3lzdGVtSW1hZ2UoUmVmPFdlYkNvcmU6OlN5c3RlbUlt
YWdlPiBzeXN0ZW1JbWFnZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKLSAg
ICBEcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVj
dCB0aWxlUmVjdCwgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6
RmxvYXRQb2ludCBwaGFzZSwgV2ViQ29yZTo6RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJD
b3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLSAgICBFbmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgRHJh
d1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLSAg
ICBEcmF3TGluZShXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MSwgV2ViQ29yZTo6RmxvYXRQb2lu
dCBwb2ludDIpCi0gICAgRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0xpbmVzRm9yVGV4dCBpdGVtKQotICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSBzdHlsZSkKLSAgICBEcmF3RWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBE
cmF3UGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0gICAgRHJhd0ZvY3VzUmluZ1BhdGgoV2ViQ29y
ZTo6UGF0aCBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBj
b2xvcikKLSAgICBEcmF3Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4g
cmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQor
ICAgIENsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5h
dGlvblJlY3QpCisKKyAgICBDbGVhclJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisKICAg
ICBGaWxsUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKICAgICBGaWxsUmVjdFdpdGhDb2xv
cihXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCiAgICAgRmls
bFJlY3RXaXRoR3JhZGllbnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50IGl0ZW0pCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0
LCBXZWJDb3JlOjpDb2xvciBjb2xvciwgZW51bTp1aW50OF90IFdlYkNvcmU6OkNvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6QmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAg
ICBGaWxsUm91bmRlZFJlY3QoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCByZWN0LCBXZWJDb3Jl
OjpDb2xvciBjb2xvciwgZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9kZSBibGVuZE1vZGUp
CisgICAgRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgcmVjdCwgV2Vi
Q29yZTo6Q29sb3IgY29sb3IpCiAgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Qgcm91bmRlZEhvbGVSZWN0
LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKworICAgIEZpbGxFbGxpcHNlKFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0KQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIEZpbGxMaW5lKHN0
cnVjdCBXZWJDb3JlOjpMaW5lRGF0YSBkYXRhKQogICAgIEZpbGxBcmMoc3RydWN0IFdlYkNvcmU6
OkFyY0RhdGEgZGF0YSkKQEAgLTczLDExICs2MSwxMCBAQCBtZXNzYWdlcyAtPiBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyIE5vdFJlZkNvdW50ZWQgU3RyZWFtIHsKICAgICBGaWxsQmV6aWVyQ3Vy
dmUoc3RydWN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSBkYXRhKQogI2VuZGlmCiAgICAgRmls
bFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIEZpbGxFbGxpcHNlKFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0KQotICAgIENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotICAgIFRyYW5zZm9ybVRv
Q29sb3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKLSAg
ICBQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50
aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvbikKKwogICAgIFN0cm9rZVJlY3Qo
V2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKworICAgIFN0cm9rZUVs
bGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAgICAgU3Ryb2tlTGluZShzdHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBT
dHJva2VBcmMoc3RydWN0IFdlYkNvcmU6OkFyY0RhdGEgZGF0YSkKQEAgLTg1LDEyICs3MiwzMSBA
QCBtZXNzYWdlcyAtPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIE5vdFJlZkNvdW50ZWQgU3Ry
ZWFtIHsKICAgICBTdHJva2VCZXppZXJDdXJ2ZShzdHJ1Y3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVE
YXRhIGRhdGEpCiAjZW5kaWYKICAgICBTdHJva2VQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAg
ICBTdHJva2VFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotICAgIENsZWFyUmVjdChX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSNpZiBVU0UoQ0cpCi0gICAgQXBwbHlTdHJva2VQYXR0
ZXJuKCkKLSAgICBBcHBseUZpbGxQYXR0ZXJuKCkKKworICAgIERyYXdSZWN0KFdlYkNvcmU6OkZs
b2F0UmVjdCByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisgICAgRHJhd0xpbmUoV2ViQ29y
ZTo6RmxvYXRQb2ludCBwb2ludDEsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQyKQorCisgICAg
RHJhd0VsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisgICAgRHJhd1BhdGgoV2ViQ29y
ZTo6UGF0aCBwYXRoKQorCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRo
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKyAgICBE
cmF3Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorCisgICAgRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI+IHNvdXJjZUltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IHNv
dXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyKQorICAgIERyYXdJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBXZWJDb3JlOjpG
bG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9w
dGlvbnMpCisgICAgRHJhd1N5c3RlbUltYWdlKFJlZjxXZWJDb3JlOjpTeXN0ZW1JbWFnZT4gc3lz
dGVtSW1hZ2UsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QpCisgICAgRHJhd05h
dGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50
aWZpZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFnZVNpemUsIFdlYkNvcmU6OkZsb2F0UmVjdCBk
ZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFn
ZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQorICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVj
dCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBoYXNlLCBXZWJDb3JlOjpG
bG9hdFNpemUgc3BhY2luZywgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9w
dGlvbnMpCisjaWYgRU5BQkxFKFZJREVPKQorICAgIFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3Jl
OjpNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRl
c3RpbmF0aW9uKQogI2VuZGlmCisKKyAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3R2x5cGhzIGl0ZW0pCisgICAgRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCBpdGVtKQorICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKKworICAgIENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQorICAgIFRy
YW5zZm9ybVRvQ29sb3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JT
cGFjZSkKICAgICBBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogICAg
IEZsdXNoQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRl
bnRpZmllcikKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNw
cAppbmRleCA4NTc3Y2JiZGU2ZDM5MDFkMzQ3MDc2MWVkMzBmNzlkOThlODJiOThkLi5kMzdlMDQ5
ODYzMjFjYzAxMjJkNjczZjQxY2ExZTgwMWZlNTJlNzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCkBAIC0zMiwzNiArMzIsMjEgQEAKICNpbmNsdWRl
ICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9NZWRpYVBsYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHkoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkm
IHJlbmRlcmluZ0JhY2tlbmQsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVj
dERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogRGlzcGxheUxpc3Q6OlJl
Y29yZGVyKHsgfSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBo
cykKKyAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcihpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSwg
ZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZp
ZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpCiAgICAgLCBtX2lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyKQogICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kKHJlbmRlcmlu
Z0JhY2tlbmQpCiB7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbnN0
IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2Zvcm1Ub0NvbG9yU3Bh
Y2UoY29sb3JTcGFjZSkpOwotfQotCiBSZW5kZXJpbmdNb2RlIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXIgPyBtX2ltYWdlQnVmZmVyLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOwpAQCAtNzcsMzEgKzYyLDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFJlc3RvcmUoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2xhdGUoeCwg
eSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90
YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlJvdGF0ZShhbmdsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTY2FsZShzY2FsZSkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldENUTSh0cmFuc2Zvcm0pKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNvbmNhdGVuYXRlQ1RNKHRyYW5zZm9ybSkpOwotfQotCiB2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0SW5saW5lRmlsbENv
bG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlNldElubGluZUZpbGxDb2xvcihEaXNwbGF5TGlzdDo6U2V0SW5s
aW5lRmlsbENvbG9yIHsgY29sb3IgfSkpOwpAQCAtMTE3LDkzICs3NywyMiBAQCB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0
IHRoaWNrbmVzcykKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpTZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldFN0
YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7IHN0YXRlLCBmbGFncyB9KSk7Ci19Ci0KLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXAg
bGluZUNhcCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpTZXRMaW5lQ2FwKGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgYXJyYXksIGZsb2F0
IGRhc2hPZmZzZXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6U2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIHsgYXJyYXksIGRhc2hP
ZmZzZXQgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUpvaW4obGluZUpvaW4pKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldE1pdGVyTGltaXQo
ZmxvYXQgbGltaXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyU2hhZG93KCkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
Q2xpcChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0KHJlY3QpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
Ci17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRl
c3RpbmF0aW9uUmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwUGF0aChwYXRoLCBydWxlKSk7Ci19Ci0KLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsKLSAgICBpZiAoc291cmNlSW1hZ2UpCi0g
ICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKCk7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0
LCBJUEM6OkZpbHRlclJlZmVyZW5jZShSZWY8RmlsdGVyPiB7IGZpbHRlciB9KSkpOwotfQotCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50
JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKLXsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpE
cmF3R2x5cGhzIHsgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBt
b2RlIH0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdJbWFnZUJ1ZmZl
cihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUgeyBzdGF0ZSB9KSk7CiB9CiAK
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1h
Z2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUlt
YWdlKGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cykpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvblJlY3QpCisjaWYgVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdl
LCBkZXN0aW5hdGlvblJlY3QpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpBcHBseVN0cm9rZVBhdHRlcm4oKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVy
LCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseUZp
bGxQYXR0ZXJuKCkpOwogfQorI2VuZGlmIC8vIFVTRShDRykKIAogdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKIHsKQEAgLTIxNSw0NCArMTA0LDM0IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIHdpZHRoKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZShwb2ludDEs
IHBvaW50MikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25z
dCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdM
aW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBibG9ja0xvY2F0aW9u
LCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyB9
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcChy
ZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsKIH0KIAotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RWxsaXBzZShyZWN0KSk7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChyZWN0KSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0aChj
b25zdCBQYXRoJiBwYXRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dFRvUGF0aChwYXRoKSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9j
dXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpLCBkZXN0aW5hdGlvblJlY3QpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29s
b3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVh
clJlY3QocmVjdCkpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjcwLDIzICsxNDksMjIg
QEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0
aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQgeyByZWN0LCBncmFkaWVudCB9KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBC
bGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBtb2RlKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5kZWRS
ZWN0KHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBtb2RlKQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRlZFJlY3Qocm91bmRlZFJlY3QsIGNvbG9yLCBt
b2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxFbGxpcHNlKHJlY3QpKTsKIH0KIAog
I2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGRhdGEpCiB7CiAgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbExpbmUoZGF0YSkp
OwpAQCAtMzA2LDcgKzE4NCw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhCiB7CiAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEJlemllckN1cnZlKGRh
dGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKQEAgLTMxNCwyMyArMTkxLDE3IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxQYXRoKHBhdGgpKTsKIH0KIAotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBs
YXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigpLCBk
ZXN0aW5hdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OlN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlUmVjdChyZWN0LCB3
aWR0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0
cm9rZUVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0K
IHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VMaW5lKGNv
bnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlN0cm9rZUxpbmUoZGF0YSkpOwpAQCAtMzUwLDcgKzIyMSw2IEBAIHZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShj
b25zdCBCZXppZXJDdXJ2ZURhCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6U3Ryb2tlQmV6aWVyQ3VydmUoZGF0YSkpOwogfQotCiAjZW5kaWYgLy8gRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNTgsMzMgKzIyOCw4
NCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlN0cm9rZVBhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlRWxsaXBzZShyZWN0KSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1JlY3Qo
cmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyUmVjdChyZWN0KSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQx
LCBwb2ludDIpKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0VsbGlwc2Uo
cmVjdCkpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
QXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZp
bGxQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcikpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7
Cit9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihz
Y2FsZUZhY3RvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZp
bHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkKKyAgICAgICAgaWRlbnRp
ZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVy
UmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRp
ZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworfQorCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5
c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
Cit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1N5
c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpKTsKK30KKwordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFnZUlkZW50aWZp
ZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cykpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIg
aWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9yTWVkaWEoaWRl
bnRpZmllciwgZGVzdGluYXRpb24pKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9u
dFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsKK30KKwordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmVzRm9yVGV4dChEaXNw
bGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9p
bnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzIH0pKTsKK30KKwor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSYgc3R5bGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOwogfQogCiBi
b29sIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoTmF0
aXZlSW1hZ2UmIGltYWdlKQpAQCAtNDM0LDExICszNTUsNiBAQCBib29sIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoRm9udCYgZm9udCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNo
Q29udGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRleHQo
aWRlbnRpZmllcikpOwotfQotCiBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JT
cGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAogewogICAgIGlm
IChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkgewpAQCAtNDY0LDYgKzM4MCwyOSBAQCBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y3JlYXRl
QWxpZ25lZEltYWdlQnVmZmVyKGNvbgogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0
ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3BhY2UsIHJlbmRl
cmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAKKworCisKK3ZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNm
b3JtVG9Db2xvclNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29s
b3JTcGFjZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworfQorCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKSk7Cit9CisKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQoR3JhcGhpY3NDb250
ZXh0Rmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmx1c2hDb250ZXh0KGlkZW50aWZpZXIpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKaW5kZXggOWIzM2EwNjdm
ZDE2YmNjZjE0MDQyYzE5NzRkZDY5MTk0MjI2MjQ2OC4uZjJhZDhkMGFhNDU4NTg5YWVlODE5MDdk
OWM5MDg5NmQzNGI2ZjcwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eS5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OwogCiBjbGFzcyBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyIHsKKyAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOwogcHVibGljOgogICAgIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIFdlYkNvcmU6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gV2ViQ29yZTo6RHJhd0dseXBoc1JlY29y
ZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CiAgICAgflJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eSgpID0gZGVmYXVsdDsKQEAgLTUwLDYzICs1MSwzOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBmbHVzaENvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlm
aWVyKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZv
aWQgc2VuZChUJiYgbWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW5k
ZXJpbmdCYWNrZW5kKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX25lZWRzRmx1
c2ggPSB0cnVlOwotICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQtPnNlbmRUb1N0cmVhbShXVEZN
b3ZlKG1lc3NhZ2UpLCBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcik7Ci0gICAgfQotCi0g
ICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKLQogICAgIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9p
ZCByZWNvcmRTYXZlKCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRSZXN0b3JlKCkgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2NhbGUo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRDVE0o
Y29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRD
b25jYXRlbmF0ZUNUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKwog
ICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+
KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OlNS
R0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhm
bG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVDYXAoV2ViQ29yZTo6TGlu
ZUNhcCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBXZWJDb3JlOjpE
YXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExp
bmVKb2luKFdlYkNvcmU6OkxpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldE1pdGVy
TGltaXQoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlJikgZmluYWw7CisKKyNpZiBVU0UoQ0cpCisgICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBh
dHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsK
KyNlbmRpZgorCisgICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBm
aW5hbDsKKyAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKICAg
ICB2b2lkIHJlY29yZENsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAg
dm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1
bGUpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6Oklt
YWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZp
bmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2Vi
Q29yZTo6V2luZFJ1bGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VC
dWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVyJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291
bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJDb3JlOjpGb250
U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdTeXN0
ZW1JbWFnZShXZWJDb3JlOjpTeXN0ZW1JbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
OwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBibG9ja0xv
Y2F0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgo
Y29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmlu
Z1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5n
UmVjdHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
Q2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZENsZWFy
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3Jk
RmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CiAgICAgdm9pZCByZWNv
cmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6R3JhZGllbnQmKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJD
b3JlOjpCbGVuZE1vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdl
YkNvcmU6OkJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAgICAgdm9pZCByZWNvcmRGaWxsTGluZShjb25zdCBXZWJDb3JlOjpMaW5lRGF0YSYpIGZp
bmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25zdCBXZWJDb3JlOjpBcmNEYXRhJikgZmlu
YWw7CkBAIC0xMTQsOSArOTEsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZEZpbGxCZXpp
ZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgog
ICAgIHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXIm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFN0cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFs
OworCisgICAgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZUVs
bGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRTdHJva2VMaW5lKGNvbnN0IFdlYkNvcmU6Okxp
bmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3QgV2ViQ29yZTo6
QXJjRGF0YSYpIGZpbmFsOwpAQCAtMTI0LDEzICsxMDIsMjggQEAgcHJpdmF0ZToKICAgICB2b2lk
IHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSYp
IGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRTdHJva2VQYXRoKGNvbnN0IFdlYkNvcmU6
OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgcmVjb3JkQXBw
bHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJu
KCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3
TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIHBvaW50MikgIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3Vz
UmluZ1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNS
aW5nUmVjdHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmREcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciosIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBXZWJDb3JlOjpGaWx0ZXImKSBm
aW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFdlYkNvcmU6
OlN5c3RlbUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
OworICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JN
ZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCByZWNvcmRBcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0dseXBo
cyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCos
IGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9udFNtb290aGlu
Z01vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7CisgICAg
dm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7CiAK
ICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJikgZmluYWw7
CiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGZpbmFs
OwpAQCAtMTQxLDYgKzEzNCwxOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6UmVuZGVyaW5nTWV0aG9kPikgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPFdlYkNv
cmU6OkltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdNZXRob2Q+KSBjb25zdCBmaW5hbDsKIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZW5kKFQmJiBtZXNzYWdlKQorICAgIHsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbmRlcmluZ0JhY2tlbmQpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIG1fbmVlZHNGbHVzaCA9IHRydWU7CisgICAgICAgIG1fcmVuZGVyaW5n
QmFja2VuZC0+c2VuZFRvU3RyZWFtKFdURk1vdmUobWVzc2FnZSksIG1fZGVzdGluYXRpb25CdWZm
ZXJJZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpIGZpbmFsOworCiAgICAgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyOwogICAgIFdlYWtQdHI8V2ViQ29y
ZTo6SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7CiAgICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk+IG1fcmVuZGVyaW5nQmFja2VuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAxZDY0M2I2YjQy
ODhkMDhlMDM4YzQ2MjVkMDU0OWRlNjhhZjJhYTc3Li4wNzk5M2IzODBmMWVhN2QzNDlkZDdlYmZj
MTYwYzgwNGRhZDQzZTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBGaW5kQ29u
dHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgY28KIAogICAgIC8vIERyYXcgd2hpdGUgZnJhbWVzIGFyb3VuZCB0aGUgaG9sZXMu
CiAgICAgLy8gV2UgZG91YmxlIHRoZSB0aGlja25lc3MgYmVjYXVzZSBoYWxmIG9mIHRoZSBzdHJv
a2Ugd2lsbCBiZSBlcmFzZWQgd2hlbiB3ZSBjbGVhciB0aGUgaG9sZXMuCi0gICAgZ3JhcGhpY3ND
b250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSks
IHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hh
ZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IgfSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0
cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhib3JkZXJXaWR0aCAqIDIpOwogICAgIGZvciAoYXV0byYgcGF0aCA6IHdoaXRlRnJh
bWVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCmluZGV4IGYxNmY3OTZlMDQ3
ZTk5MTk3MmMwZWQxZjRhZTExM2NlMTY1NjVjMTAuLjQ5ZTAwYmUzMzdlYWZlZTEyOTNlZjA3N2Fk
ZjYxN2NkYWUzZDRhMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcApAQCAtMjQ3
LDcgKzI0Nyw3IEBAIHZvaWQgV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdChX
ZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6OkdyYXBoCiAKICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAotICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coV2ViQ29yZTo6RmxvYXRTaXplKHNoYWRvd09mZnNl
dFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAg
Z3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3coeyBXZWJDb3JlOjpGbG9hdFNpemUoc2hhZG93
T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yIH0p
OwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihmb3VuZENvbG9yKTsKICAgICBn
cmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGluZGljYXRvckJvcmRlcldpZHRoICog
Mik7CiAgICAgZm9yIChhdXRvJiBwYXRoIDogZm91bmRGcmFtZVBhdGhzKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGM4ZWM0MjYzNWExNDZlMTg4
NjI0YjE2Yzg2NWQzYTVhYzBkMGE4MjUuLmEwYmM0MTYzNzhmODlkZWQ4M2VlNjE3ZDk0YTU5YzU4
ODIxZTVkNDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wMy0xMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlk
QGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0YXRl
IHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjItMDMtMDkgIEpvbmF0aGFuIEJl
ZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFtFV1NdIEFkZCBERUZBVUxUX0JS
QU5DSCB2YXJpYWJsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHND
Ry5jcHAKaW5kZXggOGU0MWM1YTczYWUzNjg0Y2VkZGYxZjk0ZjlmMTcxODk1MzUxNGM5Zi4uZWJl
NjQ0ODcxZTI4ZjUxOWNkMjYxMjBiOGE4Mjc4ODZjMDE5MDJiZiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRU
ZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCkBAIC01NCw3ICs1NCw3IEBAIFRFU1Qo
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCYXNpYykKICAgICBHcmFwaGljc0NvbnRl
eHRDRyBwcmltYXJ5Q29udGV4dChwcmltYXJ5Q0dDb250ZXh0LmdldCgpKTsKIAogICAgIEluTWVt
b3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNv
bnRleHQoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29u
dGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlz
cGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsK
IAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNv
bmRhcnlDb250ZXh0KTsKIApAQCAtOTAsMTAgKzkwLDEwIEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dFRlc3RzLCBCYXNpYykKIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRl
c3RzLCBUZXh0KQogewogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgcHJpbWFyeURpc3BsYXlMaXN0
OwotICAgIFJlY29yZGVySW1wbCBwcmltYXJ5Q29udGV4dChwcmltYXJ5RGlzcGxheUxpc3QsIHsg
fSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7Cisg
ICAgUmVjb3JkZXJJbXBsIHByaW1hcnlDb250ZXh0KHByaW1hcnlEaXNwbGF5TGlzdCwgRmxvYXRS
ZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgSW5NZW1vcnlE
aXNwbGF5TGlzdCBzZWNvbmRhcnlEaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25k
YXJ5Q29udGV4dChzZWNvbmRhcnlEaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29u
dGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25k
YXJ5Q29udGV4dChzZWNvbmRhcnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRX
aWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBj
dHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC0yMDEsNyArMjAxLDcg
QEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJvcmRlcnMpCiAgICAgR3Jh
cGhpY3NDb250ZXh0Q0cgcHJpbWFyeUNvbnRleHQocHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAK
ICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBz
ZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0
V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlD
b250ZXh0KGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0
SGVpZ2h0KSk7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29u
dGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQCBURVNUKEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgVHJhbnNmb3JtZWRDbGlwKQogICAgIEdyYXBoaWNz
Q29udGV4dCYgcHJpbWFyeUNvbnRleHQgPSBwcmltYXJ5Q29udGV4dENHOwogCiAgICAgSW5NZW1v
cnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29u
dGV4dERMKGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7
CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRETChkaXNwbGF5TGlzdCwgRmxvYXRS
ZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250
ZXh0ID0gc2Vjb25kYXJ5Q29udGV4dERMOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwpAQCAtMjg3LDE1ICsyODcs
MTUgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IpCiAgICAgR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCA9IHByaW1hcnlD
b250ZXh0Q0c7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJl
Y29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0
KDAsIDAsIDEwMCwgMTAwKSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4
dERMKGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBHcmFwaGlj
c0NvbnRleHQmIHNlY29uZGFyeUNvbnRleHQgPSBzZWNvbmRhcnlDb250ZXh0REw7CiAKICAgICBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29u
dGV4dCk7CiAKICAgICBjdHguYXBwbHlEZXZpY2VTY2FsZUZhY3RvcigyKTsKIAotICAgIGF1dG8g
cHJpbWFyeUNUTSA9IHByaW1hcnlDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1
ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byBz
ZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6Oklu
Y2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgYXV0
byBwcmltYXJ5Q1RNID0gcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKCk7CisgICAgYXV0byBzZWNvbmRh
cnlDVE0gPSBzZWNvbmRhcnlDb250ZXh0LmdldENUTSgpOwogCiAgICAgRVhQRUNUX0VRKHByaW1h
cnlDVE0ueFNjYWxlKCksIHNlY29uZGFyeUNUTS54U2NhbGUoKSk7CiAgICAgRVhQRUNUX0VRKHBy
aW1hcnlDVE0ueVNjYWxlKCksIHNlY29uZGFyeUNUTS55U2NhbGUoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454552</attachid>
            <date>2022-03-13 01:34:51 -0800</date>
            <delta_ts>2022-03-13 03:01:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220313013450.patch</filename>
            <type>text/plain</type>
            <size>582410</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg2MDhiMzk4NGMxMWY5
ZDJhYzgyNGU4NDY0Nzk4ZDAxNDljMDMyNy4uMjUwOTQ4MDhlYTRlZDhjZjEwOWEyYTUwODVjZmZi
Y2ExNjg0NGQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3NyBAQAorMjAyMi0wMy0xMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjphcHBseUxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJv
a2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXlvdXRTdGlwcGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dEhhdGNoaW5nKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1
c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxh
eWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3Rp
bmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlk
VXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBo
c1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRlY29u
c3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRp
c3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEltYWdlOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZh
Y3RvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFj
dG9yRm9yRHJhd2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ds
eXBoc0FuZENhY2hlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRl
cmxpbmVCb3VuZHNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmluY3JlbWVudCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmF0RW5kIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6Y3VycmVudCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmRpcmVjdGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yPT0g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvcGVy
YXRvciE9IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlOjphY2N1bXVsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6dXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3Jh
ZGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRG
aWxsR3JhZGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb250ZW50ZnVsUGFpbnRE
ZXRlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01v
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdGF0ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Om1lcmdlU3RhdGVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVyZ2VTdGF0ZURpZmZzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTdGF0ZUNoYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
Y2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNmb3JtIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmluZUNhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpsaW5l
RGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVE
YXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZUpvaW4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Om1pdGVyTGltaXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcG9zaXRlTW9kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU9wZXJhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJsZW5kTW9kZU9wZXJhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU1vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpkcm9wU2hhZG93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJvcFNoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNTaGFkb3cgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxp
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRTbW9vdGhGb250
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNt
b290aEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNrIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJhd0x1bWluYW5j
ZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1c2VEYXJrQXBwZWFy
YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVzZURh
cmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omlz
SW5UcmFuc3BhcmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2NhbGVk
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0
c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRJc0NBTGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6Y29udGV4
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNj
b3BlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OmJlZ2luTGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVyU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0No
ZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjp+R3JhcGhpY3ND
b250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWlu
dGFpbmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpoYXNPbmx5
UHJpbWl0aXZlQ2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptZXJnZURpZmZzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Y2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Y2xlYXJDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmlsbEJy
dXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpmaWxsQnJ1c2gg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxC
cnVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbEdy
YWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxs
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmlsbFJ1
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZp
bGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzdHJva2VC
cnVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlQnJ1
c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0
cm9rZUJydXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRT
dHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2V0U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OnN0cm9rZVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUNhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bGluZURhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpsaW5lSm9pbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1pdGVyTGltaXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmNvbXBvc2l0ZU1vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENvbXBvc2l0ZU1vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyb3BTaGFkb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNob3VsZEFudGlhbGlhcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTbW9vdGhGb250cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU21vb3RoRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyYXdM
dW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpzZXREcmF3THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFVzZURhcmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6fkdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXI6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5
ZXJTY29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFu
c3BhcmVuY3lMYXllclNjb3BlOjpiZWdpbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5z
cGFyZW5jeUxheWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlv
blF1YWxpdHlNYWludGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lcjo6fkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZU1vZGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVNb2RlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lRGFzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6
OmlzVmlzaWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc0JsdXJy
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6aGFzT3V0c2V0cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFt
ZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9OdWxsR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3ND
b250ZXh0OjpOdWxsR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFw
aGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVy
OjpTaGFkb3dCbHVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVy
V2luLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpTb3VyY2VCcnVzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c3BhY2VUcmFuc2Zvcm0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmdyYWRpZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJydXNoOjpwYXR0ZXJuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUJydXNoOjpzZXRHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6
c2V0UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJydXNoOjpjb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVz
aDo6c2V0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmJydXNoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRHcmFkaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCcnVzaDo6aXNQcmltaXRpdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6QnJ1c2g6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6QnJ1c2g6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJydXNoOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Rl
eHRCb3hJdGVyYXRvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Qm94SXRlcmF0b3I6OmluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRl
cmF0b3I6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6
Y3VycmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmRpcmVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvciE9
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRD
aGFuZ2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25l
c3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpD
YWlybzo6U3RhdGU6OmdldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUNh
cCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2Fpcm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRN
aXRlckxpbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJh
dGlvbnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cmVu
ZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdG
b2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdO
YXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzo6Y3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkaWRVcGRhdGVTdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y29uY2F0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRD
VE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNl
dExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVy
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3
R2x5cGhzUmVjb3JkZXJXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVT
YXZlcjo6Q0dDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRT
dGF0ZVNhdmVyOjp+Q0dDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRl
U2F2ZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
ZGlkU2F2ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBo
aWNzQ29udGV4dENHKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpwbGF0
Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmludGVybmFsUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0
ZURyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjphcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xpbmVDYXApOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR01p
dGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lRGFzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRDR1NoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJv
dW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpj
YW5Vc2VTaGFkb3dCbHVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzY2FsZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmg6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0
YXRlU2F2ZXI6On5DR0NvbnRleHRTdGF0ZVNhdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpzdHJva2VDb250YWlucyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YmVnaW5MYXllcik6CisgICAgICAgIChXZWJDb3JlOjplbmRMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpzZXRJbnRlcm5hbEZvbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVzdG9yZURlc3RpbmF0aW9u
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJl
Z2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRF
bmRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bik6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1bik6CisgICAgICAgIChXZWJD
b3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3TmF0aXZlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
cmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRl
SW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVGaWxsQ29sb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTdHJva2VDb2xvcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUNUTSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzaGFkb3dJc0NsZWFyZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFkb3cpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29y
ZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvd0dseXBoc1dpdGhBZHZhbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6
OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZTo6c2FmZUNvcHkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJ
bmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdGF0ZTo6U2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8
PCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjphcHBs
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1l
ZGlhOjpQYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlRyYW5zbGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJvdGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmFwcGx5IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2g6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lSm9pbjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6YXBwbHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVj
dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3RhdGU6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRTdGF0ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0Ojpjb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp4IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OnkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmFuZ2xlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjphbW91
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENU
TTo6U2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRD
VE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6dHJhbnNmb3JtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGVD
aGFuZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlOjpzdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bGluZUNhcCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaEFy
cmF5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lRGFzaDo6ZGFzaE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6bGlu
ZUpvaW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6Om1pdGVyTGltaXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENv
bXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29sb3IgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29t
cG9zaXRlT3BlcmF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Omdsb2JhbEJv
dW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bENvbXBvc2l0ZWRSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVj
dDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
Um91bmRlZFJlY3Q6OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpSZWNvcmRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV9kcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGVhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Zmls
bEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxs
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd05hdGl2
ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1N5
c3RlbUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWlu
dEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
ZHJhd0dseXBoc0FuZENhY2hlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6flJlY29yZGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojpjb250YWluc09ubHlJbmxp
bmVTdGF0ZUNoYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldE1pdGVyTGltaXQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp0cmFu
c2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
Ojpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdXJyZW50U3RhdGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdXJy
ZW50U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpjdG0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0
YXRlOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0pOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlY29y
ZERyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
Q29udGV4dFN0YXRlOjpDb250ZXh0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNsb25lRm9yU2F2ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRl
eHRTdGF0ZTo6Y2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0YXRlU3RhY2sgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpSZWNvcmRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmRDbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxC
ZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBs
OjpyZWNvcmRTdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlckltcGw6OnJlY29yZFN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJh
d0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRpdmVJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFBh
aW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpleHRl
bnRGcm9tTG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6flJlY29yZGVySW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkUm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OnJlY29yZFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZFNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRM
aW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldE1pdGVy
TGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OlJlY29yZGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OmFwcGx5U2V0U3RhdGVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3Qm94ZXMpOgorICAgICAgICAqIHJlbmRl
cmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRmdWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNvbnRlbnRmdWxQYWludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dy
b3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNp
ZGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcnMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRh
Y2htZW50UGxhY2Vob2xkZXJCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0RGVjb3Jh
dGlvblBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29yYXRpb25QYWludGVy
OjpwYWludEJhY2tncm91bmREZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dXNlU3Ryb2tlU3R5bGVUb0ZpbGwpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5k
ZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVu
ZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRy
YXcpOgorCiAyMDIyLTAzLTEwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgog
CiAgICAgICAgIENhdGFseXN0IEphdmFTY3JpcHRDb3JlLCBXZWJDb3JlLCBXZWJLaXRMZWdhY3ks
IGFuZCBXZWJLaXQgc2hvdWxkbid0IGJlIGNvcGllZCB0byB0aGUgU2Vjb25kYXJ5IFBhdGgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggN2EyZDViYTMxMmMwYmEwNGI0YTg2ZDAwZTU0ODQ3MzA5YWU2NTYzOS4uOTY4MDNm
NTA4ZWY5NjNmMjU0MGQ1Y2NiZDZmOTc4NDFmYTE3ZWMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4
MyBAQAorMjAyMi0wMy0xMyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXpp
bHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpz
ZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRvdyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZp
bGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRB
cHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
Q2xpcE91dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQ2xpcE91dFRvUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmls
bFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxC
ZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZERyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3TGluZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5n
UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjptX3JlbmRlcmluZ0JhY2tlbmQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFRy
YW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkUm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6c2VuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6
OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFu
Z2VDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250
cm9sbGVyOjpkcmF3UmVjdCk6CisKIDIwMjItMDMtMTAgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9m
ZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2F0YWx5c3QgSmF2YVNjcmlwdENvcmUsIFdlYkNvcmUs
IFdlYktpdExlZ2FjeSwgYW5kIFdlYktpdCBzaG91bGRuJ3QgYmUgY29waWVkIHRvIHRoZSBTZWNv
bmRhcnkgUGF0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAwNzJkODk5YTA3ZmE1OThhMzk3ZGQzYWJjMzNl
MGZmNzg0OGU3NmNmLi5jNTYwZDdjNGRmYTg0OWQzODM0OWQ5OTllZWU2ZTVkMTQwZWQ0MDRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dApAQCAtMjA0NSw2ICsyMDQ1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnRJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dFN0YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0
ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwCkBAIC0y
MDg0LDYgKzIwODUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVk
UmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9Tb3VyY2VCcnVzaC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZh
dGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2YjlkYzE5ODc5MzI3NGY3MGRiZGZhYTdhMDcw
NDM3YWRkYmU2OTE1Li5kNjc5MzE0YTg3YzVmZjYyMGQ3NTJjMzhkZGY1ZmMzNzc1ZDYxNjFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0yMzMxLDEwICsyMzMxLDEyIEBACiAJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBB
bmltYXRpb25FZmZlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUYwNUY4MDI1
MTI0NDJFMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRjA1RjdFMjUxMjQ0MEMwMDcxRTY5MyAv
KiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcxRkNCMTcwMjdCQUIzRkUwMEUwNjMxQyAvKiBGcmFtZVJhdGVB
bGlnbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MUZDQjE2RDI3QkFCM0RGMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDE3ODNCMjdENTdGOUYw
MDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjAxNzgzQTI3RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250
ZXh0U3RhdGVTYXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMTQ0MzMzMjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEy
NDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3Bl
cnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxQjQ5NzQyNTEyQkEz
QjAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdl
Qml0bWFwQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThB
M0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI0NjBERDcyN0M4NkRBRDAw
RDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjQ2MERENjI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhp
Y3NDb250ZXh0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3MjQ2OTYzQjI3NUM1RkE2MDBBOTE1NkEgLyogQ1NTRmlsdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUzRkI4MzIxM0IxQkI4
MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzI0Njk2M0QyNzVDNjE0NDAwQTkxNTZBIC8qIEZpbHRlckVmZmVj
dFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzIxNEI5QjcyNzQ0NThGQTAwM0JFNkRGIC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNFMjc1QzYx
NjcwMEE5MTU2QSAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCNEVGN0MyNzRFRTM3RjAwMjkzQzJGIC8qIEZpbHRl
ckltYWdlVmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTIzNDIsNiArMjM0NCw5IEBACiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAv
KiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURD
ODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjU2MDc4RTI3OUQzNEI2MDA3RDJERDMg
LyogRkVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzJGN0U3NEYyNzlDRURFODAwRDgyRDJEIC8qIEZFSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5
N0UgLyogU291cmNlQnJ1c2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNTgxODU1MjdD
REE4MEUwMEMzRDk3RSAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEMyN0M5RjkzRTAwRDI3QUUw
IC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTYyN0NEQUZENTAwQzNEOTdFIC8qIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyQjM1MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI2Q0RFMjAyNzU5NzM1MDAwQTQ0NUIyIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk2NjFBMjI3
NTk2MEE1MDBFN0RGOUIgLyogRmlsdGVyRWZmZWN0R2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZENTZFMjI1M0FFMjhEMDAwMkVG
OTAgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI2RDU2RTEyNTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZENTZF
MzI1M0FFMzY2MDAwMkVGOTAgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRp
dmVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xMTMxNyw2ICsxMTMyMiw4IEBACiAJCTcxRkNCMTZEMjdCQUIzREYwMEUwNjMxQyAvKiBG
cmFtZVJhdGVBbGlnbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1l
UmF0ZUFsaWduZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQ0IxNkYyN0JB
QjNFMDAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRnJhbWVSYXRlQWxpZ25lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3Vj
aFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2lu
dHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzgzQTI3RDU3M0IyMDA5
QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDR0NvbnRleHRT
dGF0ZVNhdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDZENDM1MjdEQURF
Q0EwMDQwRkVCMiAvKiBUZXh0Qm94SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEJveEl0
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTFCNUQ2Mjc2NTM2ODIw
MDc2RkVGOCAvKiBGaWx0ZXJSZXN1bHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3
IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRl
ZFZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYy
MjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
VmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzMjYsNiAr
MTEzMzMsOCBAQAogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVS
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjQzNUVGNDI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI0MzVFRjUyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzI0NjBERDUyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRC
bGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRC
bGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEz
QTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTExMzg4LDYgKzExMzk3LDEwIEBACiAJCTcyQTEzQUQ1Mjc0REU1NEUwMEUyQTg4
RSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VB
bHBoYVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkEx
M0FENjI3NERFNTc4MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBMTNBRDcyNzRERTU3ODAwRTJBODhFIC8qIFNv
dXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlR3JhcGhp
Y1NvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEw
QzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAgLyogU291cmNl
QnJ1c2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlQnJ1c2guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1
c2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQnJ1c2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJCNEVGNzQyNzRFMjMzMzAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2FyZUFwcGxp
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3NTI3NEUyMzM0MDAyOTNDMkYgLyogRkVCbGVuZFNv
ZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5kU29mdHdhcmVBcHBs
aWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNEVGN0MyNzRFRTM3RjAw
MjkzQzJGIC8qIEZpbHRlckltYWdlVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdl
VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODE2NSwxOCArMjgxNzgs
MTggQEAKIAkJCQlBQTJBNUFCRDE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmNw
cCAqLywKIAkJCQlBQTJBNUFCRTE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmgg
Ki8sCiAJCQkJQUEyQTVBQkYxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5pZGwg
Ki8sCi0JCQkJQUEyQTVBQzAxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc0V2ZW50
LmNwcCAqLywKLQkJCQlBQTJBNUFDMTE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lz
RXZlbnQuaCAqLywKLQkJCQlBQTJBNUFDMjE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhl
c2lzRXZlbnQuaWRsICovLAotCQkJCTI5RjgzRUM5MjdENTk0RTUwMEUxRjBGRCAvKiBTcGVlY2hT
eW50aGVzaXNFdmVudEluaXQuaCAqLywKLQkJCQkyOUY4M0VDQjI3RDU5NTI2MDBFMUYwRkQgLyog
U3BlZWNoU3ludGhlc2lzRXZlbnRJbml0LmlkbCAqLywKIAkJCQkyOUY4M0VDNjI3RDMxOTI2MDBF
MUYwRkQgLyogU3BlZWNoU3ludGhlc2lzRXJyb3JDb2RlLmggKi8sCiAJCQkJMjlGODNFQ0UyN0Q1
RkE2MzAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yQ29kZS5pZGwgKi8sCiAJCQkJMjlG
ODNFQzQyN0QzMTVBMjAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnQuY3BwICov
LAogCQkJCTI5RjgzRUMzMjdEMzE1QTIwMEUxRjBGRCAvKiBTcGVlY2hTeW50aGVzaXNFcnJvckV2
ZW50LmggKi8sCiAJCQkJMjlGODNFQzUyN0QzMTVCODAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNp
c0Vycm9yRXZlbnQuaWRsICovLAotCQkJCTI5RjgzRUNGMjdENkM3MkEwMEUxRjBGRCAvKiBTcGVl
Y2hTeW50aGVzaXNFcnJvckV2ZW50SW5pdC5pZGwgKi8sCiAJCQkJMjlGODNFRDAyN0Q2Qzg4NTAw
RTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnRJbml0LmggKi8sCisJCQkJMjlGODNF
Q0YyN0Q2QzcyQTAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnRJbml0LmlkbCAq
LywKKwkJCQlBQTJBNUFDMDE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzRXZlbnQu
Y3BwICovLAorCQkJCUFBMkE1QUMxMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNF
dmVudC5oICovLAorCQkJCUFBMkE1QUMyMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVz
aXNFdmVudC5pZGwgKi8sCisJCQkJMjlGODNFQzkyN0Q1OTRFNTAwRTFGMEZEIC8qIFNwZWVjaFN5
bnRoZXNpc0V2ZW50SW5pdC5oICovLAorCQkJCTI5RjgzRUNCMjdENTk1MjYwMEUxRjBGRCAvKiBT
cGVlY2hTeW50aGVzaXNFdmVudEluaXQuaWRsICovLAogCQkJCUFBMkE1QUM0MTZBNDg1RDUwMDk3
NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwICovLAogCQkJCUFBMkE1QUM1MTZB
NDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaCAqLywKIAkJCQlBQTJB
NUFDMzE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmlkbCAqLywK
QEAgLTI4ODA4LDYgKzI4ODIxLDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNn
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjAxNzgz
QTI3RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oICovLAogCQkJCTBGQ0Yz
MzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMzI1OTY4
RDBCMDAzMEU2QUEgLyogQ29sb3JTcGFjZUNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMjI1OTY4RDBC
MDAzMEU2QUEgLyogQ29sb3JTcGFjZUNHLmggKi8sCkBAIC0yOTA0MSw2ICsyOTA1NSw5IEBACiAJ
CQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRy
YWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0Nv
bnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCiAJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENF
IC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKKwkJCQk3MjQ2MERENTI3Qzg1RDAxMDBE
NUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwICovLAorCQkJCTcyNDYwREQ2MjdDODVE
MDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovLAorCQkJCTcyQjM1MTBEMjdD
QTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEY1
ODBCMDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBGNTgw
QjBBMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBCMEIw
RjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLywKQEAgLTI5MTQxLDYg
KzI5MTU4LDcgQEAKIAkJCQlCQ0E1NTkxMjI2M0RCRDc5MDA3RjE5QjMgLyogUGl4ZWxGb3JtYXQu
aCAqLywKIAkJCQlDREQwOEFCRjI3N0U1NEYwMDBFQTM3NTUgLyogUGxhdGZvcm1BdWRpb1RyYWNr
Q29uZmlndXJhdGlvbi5oICovLAogCQkJCUJDM0U2MjQyMjY1OTc5MTcwMDU0OEFDRCAvKiBQbGF0
Zm9ybUNvbG9yU3BhY2UuaCAqLywKKwkJCQk3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAgLyogUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAg
LyogUGxhdGZvcm1JbWFnZS5oICovLAogCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQ
bGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJNTUwNjQwQUQyNDA3NTZEQTAwQUFFMDQ1IC8q
IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCkBAIC0yOTE2NCw2ICsyOTE4Miw4IEBA
CiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLAogCQkJ
CTBGM0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8sCiAJCQkJMUM0REIw
MjQyNzMzOUU1RTAwN0IwQUQxIC8qIFNob3VsZExvY2FsaXplQXhpc05hbWVzLmggKi8sCisJCQkJ
NzJCMzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmNwcCAqLywKKwkJCQk3MkIz
NTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLywKIAkJCQkxREQxMjdBQzI1
NkUzQTg3MDBCMjI3RDcgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgKi8sCiAJCQkJQ0Q2NDFF
QjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLywKIAkJCQlDREM4
QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovLApA
QCAtMjkxNzUsNiArMjkxOTUsNyBAQAogCQkJCTA4NzU1OEM0MTNCNEE1N0QwMEY0OTMwNyAvKiBT
dXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCAqLywKIAkJCQk5NUU5RjQ0NDI3QzlBMzlC
MDA5NDUzMzcgLyogU3lzdGVtSW1hZ2UuaCAqLywKIAkJCQkzQkI2QjgwRjIyQTdEMzExMDAzQTJB
NjkgLyogVGFiU2l6ZS5oICovLAorCQkJCTcyMDZENDM1MjdEQURFQ0EwMDQwRkVCMiAvKiBUZXh0
Qm94SXRlcmF0b3IuaCAqLywKIAkJCQkzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1
bi5jcHAgKi8sCiAJCQkJQTgyNEI0NjQwRTJFRjJFQTAwODFBN0I3IC8qIFRleHRSdW4uaCAqLywK
IAkJCQlDRDFFNzM0NjE2N0JDNzhFMDA5QTg4NUQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24u
Y3BwICovLApAQCAtMzM0NDcsOCArMzM0NjgsNiBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxk
UGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCi0J
CQkJNjU2NTgwRjQwOUQxMkIyMDAwMEU2MUQ3IC8qIENTU1Byb3BlcnR5TmFtZXMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTY1NjU4MTUxMDlEMTMwNDMwMDBFNjFENyAvKiBDU1NWYWx1ZUtleXdvcmRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCRjFGODBBNTZFMDAxNkE0Q0Ug
LyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2Qjk1MTk1MjA3RDYzMzQwMEE3
RDJERCAvKiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzg3Myw2ICsz
Mzg5Miw3IEBACiAJCQkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmlj
YXRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8q
IENlcnRpZmljYXRlU3VtbWFyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5
RjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
MzZGRDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNzg1RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5l
bENvdW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDE5OCw2ICszNDIxOCw3IEBACiAJCQkJ
QTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MUYwNUY4MDI1MTI0NDJFMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTcxMzE3MTM0MUZCRTc4REIwMEY3NThERSAvKiBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk2NTY1ODBGNDA5RDEyQjIwMDAw
RTYxRDcgLyogQ1NTUHJvcGVydHlOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ2RDM3NDYx
RDZEMDFENDAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NDlDNzcwNTFENkUzOUVBMDBDMERFNEYgLyogQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ1MDA3NzA4NEYgLyogQ1NTUHJvcGVy
dHlQYXJzZXJXb3JrZXJTYWZlLmggaW4gSGVhZGVycyAqLywKQEAgLTM0MjQwLDYgKzM0MjYxLDcg
QEAKIAkJCQk0QkFGRDBEOTIxOTIxRUEwMDBDMEFCNjQgLyogQ1NTVW5wYXJzZWRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRUUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFM0JCQzI0NzIzODM1NTI2MDA2RUMzOUYgLyogQ1NTVmFsdWVL
ZXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1NjU4MTUxMDlEMTMwNDMwMDBFNjFENyAvKiBDU1NW
YWx1ZUtleXdvcmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNFOTBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTVmFsdWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlCRDlGQTEzMUZEMkVE
MDAzQzU2RjAgLyogQ1NTVmFsdWVQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NDQ0Q0JFODFE
ODg2MUMyMDA3M0EwNzQgLyogQ1NTVmFyaWFibGVEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTM0
Nzk3LDYgKzM0ODE5LDggQEAKIAkJCQk0OUM3QjlGQzEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCOTVDRkVCMjc1NEZGNkUw
MDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
ODBENjcwODBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNDYwREQ3MjdDODZEQUQwMEQ1RjlGNCAvKiBHcmFw
aGljc0NvbnRleHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTYyN0NEQUZENTAw
QzNEOTdFIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXll
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDkxNCw2ICszNDkzOCw3IEBACiAJCQkJQThD
RkY3QTcwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxNb2RFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlGNEIwMDE4OTI2RTdGMjFGMDA2RUFBQkUgLyogSFRNTE5hbWVDYWNoZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThERjNGRDQwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxOYW1lQ29sbGVjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThEMDZCMzkwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxO
YW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MUQ0NUEwQTEyN0NCQzAwQjEyQTY4IC8qIEhU
TUxPYmplY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGMTBBMTkxNkRGMDBB
OEVGNUYgLyogSFRNTE9MaXN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxMzY5REUw
OTczNzRGNjAwRDc0NDYzIC8qIEhUTUxPcHRHcm91cEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzU0NTksNiArMzU0ODQsNyBAQAogCQkJCUJDNjQ2NDk4MTFEODIzNDkwMDY0NTVCMCAvKiBK
U0RPTVN0cmluZ01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzY5NDU2M0QxMjE0RDk3QzAwMDdD
QkFFIC8qIEpTRE9NVG9rZW5MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTM3RTAwNjEyREJD
NUE0MDBBNkIyMzMgLyogSlNET01VUkwuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MDNCQTBGMDlF
QjE4RjkwMDc5N0M3RiAvKiBKU0RPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2OTMy
NzQwRDdFMjkzOTAwQUU0NEQxIC8qIEpTRE9NV2luZG93QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjUyRkJCQkMwREUyN0NCNjAwMDFEMzg2IC8qIEpTRE9NV2luZG93Q3VzdG9tLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0NjBDQkYzNjFENEJDRDBFMDA5MkU4OEUgLyogSlNET01XaW5kb3dQcm9w
ZXJ0aWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NjgzLDYgKzM1NzA5LDcgQEAKIAkJCQlBOUQy
NDdGODBENzU3RTM0MDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTc3RDUxMDI1MUVENzRCNTgwMERBNEM4NyAvKiBKU05hdmlnYXRvckNyZWRlbnRpYWxzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MUY4ODZDMDFGMzI5MjMxMDBDMTkzRUYgLyogSlNOYXZpZ2F0b3JT
ZXJ2aWNlV29ya2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNERDMEQzODA5RkVEMDczMDA3QjAy
MzUgLyogSlNOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0MzlDMzExNkNGNDk0MDA0OEM3
NTAgLyogSlNOb2RlQ3VzdG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDExNUI3MzA5Rjg0Q0Q2
MDBDQTRGQzEgLyogSlNOb2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTc1MEQ4RTBB
OTBFNTIxMDAwRkYyMTUgLyogSlNOb2RlSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMzU4
NDcsMTIgKzM1ODc0LDYgQEAKIAkJCQlCQ0UwMTM5QjBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDcyNkZFRTE2REExMUJDMDAzQTRFNkQgLyog
SlNTdHlsZVNoZWV0Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODRFQkQ4MzBDQjhDOTc3
MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQThEMDZC
MzkwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQw
M0JBMEYwOUVCMThGOTAwNzk3QzdGIC8qIEpTRE9NV2luZG93LmggaW4gSGVhZGVycyAqLywKLQkJ
CQkxNERDMEQzODA5RkVEMDczMDA3QjAyMzUgLyogSlNOb2RlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwOEM3QTJDNzEwREM3NDYyMDAyRDM2OEIgLyogU1ZHTmFtZXMuaCBpbiBIZWFkZXJzICovLAot
CQkJCTFBMTQxNEI2MTNBMEYwNTAwMDE5OTk2QyAvKiBXZWJLaXRGb250RmFtaWx5TmFtZXMuaCBp
biBIZWFkZXJzICovLAotCQkJCTdDRDU4REZCMUY5NTY1QTUwMDExMjc5MSAvKiBTZXR0aW5ncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTcxRjIxODkxREE1N0M1NDAwNUM5RUZEIC8qIEpTU3VidGxl
Q3J5cHRvLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjAxMTEwODBBQjc3NDA1MDBEQjBFNjggLyog
SlNTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjREOTEyOTIxM0NBOTUxRTAwRDIx
OTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzA2
LDYgKzM2NzI3LDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1F
dmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhD
NkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUx
OTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MjZENTZFMjI1M0FFMjhEMDAwMkVGOTAgLyogUGxhdGZvcm1J
bWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3NzA1QzcyNTUyNzZDRDAwMUQwQzk0IC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1MDY0MEFGMjQwNzU4MkQw
MEFBRTA0NSAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNzMyOSw2ICszNzM1MSw3IEBACiAJCQkJNDZFRjE0MkExRjk3QjdEODAwQzJBNTI0IC8qIFNl
cnZpY2VXb3JrZXJXaW5kb3dDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTEwMDk5
RTY0OTIwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBp
biBIZWFkZXJzICovLAorCQkJCTdDRDU4REZCMUY5NTY1QTUwMDExMjc5MSAvKiBTZXR0aW5ncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0NDOTcyMkUxRjkzRTMzNjAwMDRENENGIC8qIFNldHRpbmdz
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFCQkE4NjYyNTdFMzczQjAwQUM3RjZEIC8qIFNG
cmFtZVV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNERDQ1MDEyRjVFQTFCMDAwRDkxOTAg
LyogU2hhZG93Qmx1ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzM4NSw2ICszNzQwOCw3IEBACiAJ
CQkJNTEwRDRBMzgxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0
cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjNFMEZDN0RGRjAwMDk1
NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTQyN0NEQTY5
QTAwQzNEOTdFIC8qIFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2MjE3
QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNB
NDk2NTE3QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQ0RGMTM1MDkyNEM5RkNBMzAwNDMyRTFFIC8qIFNvdXJjZUJ1ZmZlclBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNzY1Niw2ICszNzY4MCw3IEBACiAJCQkJQjIyMjdBNEIwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR01ldGFkYXRhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJB
MUYyQjEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTRFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNUGF0aEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTA4QzdBMkM3MTBEQzc0NjIwMDJEMzY4QiAvKiBTVkdOYW1l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFNThENTAxREQ2OUExRTAwMTI4NTUyIC8qIFNWR051
bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBNTEwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R051bWJlckxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTU3MEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdQYXJzZXJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzgxMDAsNiArMzgx
MjUsNyBAQAogCQkJCUE1ODRGRTMwMTg2NENCODQwMDg0M0IxMCAvKiBXZWJJbmplY3RlZFNjcmlw
dE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0ODIyMzExMUUzODY5QjgwMDY2RkM3OSAv
KiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1REZFQkFC
NzE4NTkyQjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywK
KwkJCQkxQTE0MTRCNjEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyRDA2MjE0NTFEQTYzOUJBMDBBN0ZCMjYgLyogV2ViS2l0TWVk
aWFLZXlNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMDYyMTUxMURBNjNBOUYw
MEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU5lZWRlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRDA2MjE0RTFEQTYzQThFMDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlzLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hE
ZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDg1NmEzZGU1MDRkZWMwYmJmYTkwYWMxN2Rl
MzdmNTE1ZTE0ZDkyMDQuLjlkOTM1YTZmZjMyMzBmM2Y0NmEyZWY1ZDdlYTEwMDEwYWU5ZTEwYzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0
aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcApAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgQm9yZGVyUGFp
bnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4
dCwgY29uc3QKICAgICAgICAgICAgIERhc2hBcnJheSBsaW5lRGFzaDsKICAgICAgICAgICAgIGxp
bmVEYXNoLmFwcGVuZChkYXNoTGVuZ3RoKTsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChn
YXBMZW5ndGgpOwotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURh
c2gobGluZURhc2gsIGRhc2hMZW5ndGgpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIg
cGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTEyOTQsNyArMTI5NCw3
IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29u
dGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdp
biA9IGZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBh
dXRvIGFkanVzdGVkU2hhZG93T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmls
bFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQuc2V0U2hhZG93KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwg
c2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50
aW5nQ29udGV4dC5jb250ZXh0LnNldERyb3BTaGFkb3coeyBhZGp1c3RlZFNoYWRvd09mZnNldCwg
c2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hT
aGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRl
ZmF1bHQgfSk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAg
Ly8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0
LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCB2b2lk
IEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBh
aW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC50cmFu
c2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7
CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNl
dCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRC
b3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93
KHsgc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNo
YWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xl
UmVjdCwgZmlsbENvbG9yKTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWlu
dEltYWdlLmNwcAppbmRleCBmNGI5OGJhNjJlMTE5YTA3NzEzMTJkM2I4OGM0OTE5MzY4MzZlZTM3
Li5lZTUwNGYwOGM0OWZjOGQ1YjVhZWQ3MDJiZTIxN2YxYjA2ZmQ0ZTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBJbWFnZURy
YXdSZXN1bHQgQ3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjbwogSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENv
bnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNv
bXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0
LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVz
dENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVj
dC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBDdXN0
b21QYWludEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QKICAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsK
IAogICAgIC8vIEZhY3RvciBpbiB0aGUgZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdl
bmVyYXRlIGF0IHRoZSBiZXN0IHJlc29sdXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENv
bnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5
SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0g
PSBkZXN0Q29udGV4dC5nZXRDVE0oKTsKICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29u
dGV4dENUTS54U2NhbGUoKSk7CiAgICAgZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRD
VE0ueVNjYWxlKCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBw
YXR0ZXJuVHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCAwZTc4MDYzZTNhNDFj
YmM2OTBmMGQwY2NiNzg4MTE3ZGU2OTM4YTAyLi5kYmM5NTdjNTNkMDRhMzk2ZWFjNjRkNjdmZTZh
MmIxN2U0NDhjNjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtNjk3LDcgKzY5Nyw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCgpIGNvbnN0
CiAgICAgRGFzaEFycmF5IGNvbnZlcnRlZExpbmVEYXNoKHN0YXRlKCkubGluZURhc2guc2l6ZSgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlKCkubGluZURhc2guc2l6ZSgpOyAr
K2kpCiAgICAgICAgIGNvbnZlcnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5
RWxlbWVudD4oc3RhdGUoKS5saW5lRGFzaFtpXSk7Ci0gICAgYy0+c2V0TGluZURhc2goY29udmVy
dGVkTGluZURhc2gsIHN0YXRlKCkubGluZURhc2hPZmZzZXQpOworICAgIGMtPnNldExpbmVEYXNo
KHsgV1RGTW92ZShjb252ZXJ0ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZSgp
LmxpbmVEYXNoT2Zmc2V0KSB9KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpzZXRHbG9iYWxBbHBoYShkb3VibGUgYWxwaGEpCkBAIC03MjgsNyArNzI4LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRp
b24oY29uc3QgU3RyaW5nJiBvcGUKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29u
dGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwotICAgIGMtPnNldENvbXBvc2l0
ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKKyAgICBjLT5zZXRDb21wb3NpdGVNb2RlKHsgb3As
IGJsZW5kTW9kZSB9KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
Y2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKQEAgLTExODYsNyArMTE4Niw3IEBAIGJvb2wgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwoY29uc3Qg
UGF0aCYgcGF0aCwgZG91CiAgICAgICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5l
RGFzaC5zaXplKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2Fz
dDxEYXNoQXJyYXlFbGVtZW50PihsaW5lRGFzaFtpXSk7Ci0gICAgICAgIGNvbnRleHQuc2V0TGlu
ZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICAgICAg
Y29udGV4dC5zZXRMaW5lRGFzaCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oc3RhdGUubGluZURhc2hPZmZzZXQpIH0pOwogICAgIH0pOwogfQogCkBAIC0x
MjA1LDcgKzEyMDUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFy
UmVjdChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB3aWR0aCwgZAogICAgIGlmIChzaG91bGRE
cmF3U2hhZG93cygpKSB7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQg
PSB0cnVlOwotICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9y
Ojp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBj
b250ZXh0LT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVu
dEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiAgICAgfQogICAgIGlmIChzdGF0
ZSgpLmdsb2JhbEFscGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTM2Myw5
ICsxMzYzLDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRv
dygpCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQgd2lkdGgg
PSBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBz
dGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0
U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dD
b2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRv
dyh7IEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUo
KS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0gZWxzZQot
ICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBjLT5zZXREcm9wU2hhZG93
KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kgfSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjQzMiwxOSArMjQzMiwxNiBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRS
dW4mIHRleHRSdW4sIGRvdQogCiAgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0KDAsIDIgKiBt
YXNrUmVjdC5oZWlnaHQoKSk7CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7
Ci0gICAgICAgICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7Ci0gICAgICAgICAgICBDb2xvciBzaGFk
b3dDb2xvcjsKLSAgICAgICAgICAgIGMtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cywgc2hhZG93Q29sb3IpOwotCiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdCht
YXNrUmVjdCk7Ci0gICAgICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hhZG93UmFkaXVzICog
MS40KTsKLSAgICAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQgKiAtMSk7Cisg
ICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cgPSBjLT5kcm9wU2hhZG93KCk7CisKKyAgICAgICAg
ICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShkcm9wU2hhZG93LmJsdXJSYWRpdXMgKiAxLjQpOworICAg
ICAgICAgICAgc2hhZG93UmVjdC5tb3ZlKGRyb3BTaGFkb3cub2Zmc2V0ICogLTEpOwogICAgICAg
ICAgICAgYy0+Y2xpcChzaGFkb3dSZWN0KTsKIAotICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9
IG9mZnNldDsKKyAgICAgICAgICAgIGRyb3BTaGFkb3cub2Zmc2V0ICs9IG9mZnNldDsKIAotICAg
ICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dD
b2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgICAgIGMtPnNldERyb3BT
aGFkb3coZHJvcFNoYWRvdyk7CiAKICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAg
ICAgIGMtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCmluZGV4IDRmNjNhZGNlOTM5MTZkYjIzMjBlOTY3
OGFhYmZlMGYzY2Q5OTc2MmIuLjlhODAzYTQwOGQ4OGMyZmY0OGRkM2JlYTAyOTUxYjg3NTgwOThl
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAK
QEAgLTEyNDQsNyArMTI0NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRTdGlwcGxpbmcoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9r
ZVRoaWNrbmVzcygxKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpE
YXNoZWRTdHJva2UpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2goeyAxLCBkZW5zaXR5IH0sIDEp
OworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IDEsIGRlbnNpdHkgfSwgMSB9KTsKIAogICAg
IGRyYXdMYXlvdXRQYXR0ZXJuKGNvbnRleHQsIHF1YWQsIGRlbnNpdHksIEZsaXA6Ok5vKTsKIH0K
QEAgLTEyNTQsNyArMTI1NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKGNvbnRleHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKDAuNSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6
RGFzaGVkU3Ryb2tlKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgMiwgMiB9LCAyKTsKKyAg
ICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyAyLCAyIH0sIDIgfSk7CiAKICAgICBjb25zdGV4cHIg
YXV0byBkZWZhdWx0TGF5b3V0SGF0Y2hTcGFjaW5nID0gMTI7CiAgICAgZHJhd0xheW91dFBhdHRl
cm4oY29udGV4dCwgcXVhZCwgZGVmYXVsdExheW91dEhhdGNoU3BhY2luZywgZmxpcCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggM2I5OTU1ODlkMTg1NmY3YzMzN2ZhMDBkNGVkYzUy
YWJiZTkzNDExNS4uZjQ5NWY0OGU2MzY5NWYxMDI3YzU4Njc4MWM4MDYwZjU1NzFmOGFlNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNDI5Niw3ICs0Mjk2LDcgQEAgdm9pZCBGcmFt
ZVZpZXc6OnRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXQKICAgICBpZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgbGF5b3V0Q29u
dGV4dCgpLmxheW91dCgpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBhaW50
SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGZy
YW1lUmVjdCgpLCBwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9ybVdp
ZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRlbnRz
KCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0KExl
Z2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ4NDcsNyArNDg0Nyw3IEBAIHZvaWQg
RnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9tLCBm
bG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRoIHBh
aW50aW5nIGRpc2FibGVkLgotICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChOdWxsR3Jh
cGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIE51bGxH
cmFwaGljc0NvbnRleHQgY29udGV4dChmcmFtZVJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVu
Y2F0ZWRBdChzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVj
dCBkaXJ0eVJlY3QoMCwgc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZp
ZXctPmxheW91dE92ZXJmbG93UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihv
bGRCb3R0b20gLSBvbGRUb3ApKSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5
UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDlmZDI1ZDgwYWQxMmRjOTFk
ZDExZjkxNTk4ZmM2YzhlZmE0Y2IyYTIuLjI4OTU3NGI5YzFlNDBjZDcxMmI0ZTJiNmU5ZWIzNGIw
MTcyOWRmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCkBAIC0yOSw3ICsyOSw4IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OkJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0KQotICAgIDogbV9wcmltYXJ5Q29udGV4dChw
cmltYXJ5Q29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChwcmltYXJ5Q29udGV4dC5jbGlw
Qm91bmRzKCksIHsgfSwgcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKCkpCisgICAgLCBtX3ByaW1hcnlD
b250ZXh0KHByaW1hcnlDb250ZXh0KQogICAgICwgbV9zZWNvbmRhcnlDb250ZXh0KHNlY29uZGFy
eUNvbnRleHQpCiB7CiB9CkBAIC00OCw2ICs0OSwzMCBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKICAg
ICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIAorI2lmIFVT
RShDRykKK2Jvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgp
OworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRl
eHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXND
QUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKK30KKwordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxl
cmF0ZWRDb250ZXh0KQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENv
bnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJ
c0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7Cit9CisjZW5kaWYKKwor
UmVuZGVyaW5nTW9kZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Cit9
CisKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCiB7CiAgICAgLy8gRklY
TUU6IENvbnNpZGVyIG5vdCB1c2luZyB0aGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCdzIHN0
YXRlIHN0YWNrIGF0IGFsbCwKQEAgLTY0LDIyICs4OSwxMCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnJlc3RvcmUoKQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yZXN0b3JlKCk7
CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotfQotCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIGZyb20sIGNvbnN0
IEZsb2F0UG9pbnQmIHRvKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwg
dG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci19Ci0KLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseVN0YXRlQ2hhbmdl
cygpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5h
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseVN0YXRlQ2hh
bmdlcygpOwogfQogCiAjaWYgVVNFKENHKQpAQCAtOTYsMjIgKzEwOSwxMCBAQCB2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogfQogI2VuZGlmCiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZmlsbFBhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOwot
fQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCBmYWN0b3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRo
KHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOworICAgIG1f
cHJpbWFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7CiB9CiAKIHZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQpAQCAtMTI2LDIyMiArMTI3LDEyNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikKLXsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwotfQotCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5maWxsUmVjdChyZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJv
dW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxS
b3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0
LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci19Ci0KLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0
aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsK
LX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsRWxsaXBzZShl
bGxpcHNlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19
Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNl
KGVsbGlwc2UpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2Up
OwotfQotCi0jaWYgVVNFKENHKQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNDQUxheWVyQ29udGV4dCkKLXsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Ci19Ci0K
LWJvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0
KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJ
c0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsK
LX0KLSNlbmRpZgotCi1SZW5kZXJpbmdNb2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJl
bmRlcmluZ01vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRl
cmluZ01vZGUoKTsKLX0KLQogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7
CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwKHJlY3QpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5jbGlwKHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91
dChyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKLX0KLQotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5jbGlwT3V0KHBhdGgpOwotfQotCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogeworICAgIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogICAgIG1fcHJpbWFyeUNv
bnRleHQuY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5j
bGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRl
eHQuY2xpcEJvdW5kcygpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LnNldExpbmVDYXAobGluZUNhcCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVDYXAo
bGluZUNhcCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBk
YXNoT2Zmc2V0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJy
YXksIGRhc2hPZmZzZXQpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5lRGFzaChkYXNo
QXJyYXksIGRhc2hPZmZzZXQpOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsK
KyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKIH0KIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LnNldExpbmVKb2luKGxpbmVKb2luKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuc2V0TGluZUpvaW4obGluZUpvaW4pOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRh
cnlDb250ZXh0LmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3Qp
OwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXJMaW1pdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldE1pdGVy
TGltaXQobWl0ZXJMaW1pdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldE1pdGVyTGltaXQo
bWl0ZXJMaW1pdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7CisgICAg
bV9zZWNvbmRhcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdl
LCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobmF0
aXZlSW1hZ2UsIHNlbGZTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwgc2VsZlNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0
KHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2Um
IHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1h
Z2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3
UGF0dGVybihuYXRpdmVJbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQ
YXR0ZXJuKG5hdGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0
KHJlY3QsIGdyYWRpZW50KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwg
Z3JhZGllbnQpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1
dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOwogfQogCi1JbWFn
ZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3ByaW1hcnlDb250ZXh0LmRyYXdU
aWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywg
b3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0K
IAotSW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZElt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6
VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1f
cHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVT
Y2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7CisgICAgbV9zZWNvbmRh
cnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGlu
YXRpb24pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOwogfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
IAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNjYWxlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIG1fcHJpbWFy
eUNvbnRleHQuc2NhbGUoc2NhbGUpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zY2FsZShzY2Fs
ZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVz
cyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tu
ZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
cm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQucm90YXRlKGFu
Z2xlSW5SYWRpYW5zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBz
ZSk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CiB9CiAK
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBt
X3NlY29uZGFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOworICAgIG1fcHJpbWFyeUNvbnRleHQu
c3Ryb2tlUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRo
KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmNvbmNhdENUTSh0cmFuc2Zvcm0pOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmIGZyb20sIGNvbnN0IEZsb2F0UG9pbnQmIHRvKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldENUTSh0cmFuc2Zv
cm0pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBtX3ByaW1hcnlD
b250ZXh0LmdldENUTShpbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd0VsbGlwc2UocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJl
Y3QpOwogfQogCi1GbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01v
ZGUpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91bmRUb0RldmljZVBpeGVs
cyhyZWN0LCByb3VuZGluZ01vZGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0
aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwogfQogCiB2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCkBAIC0zNzAsMjkgKzI3NSw1NCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBkbwogfQogI2Vu
ZGlmCiAKLUZsb2F0U2l6ZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25z
dCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXV0byBz
aXplID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3VGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBmcm9t
LCB0byk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9p
bnQsIGZyb20sIHRvKTsKLSAgICByZXR1cm4gc2l6ZTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiBmaWx0ZXJSZXN1bHRzKQogewotICAg
IG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1H
bHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9u
dFNtb290aGluZ01vZGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VC
dWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRz
KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNl
SW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRzKTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gdG8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd0VtcGhhc2lzTWFya3MoY2FzY2FkZSwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RW1waGFzaXNNYXJrcyhjYXNjYWRlLCBydW4sIG1h
cmssIHBvaW50LCBmcm9tLCB0byk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pCit2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRl
eHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdCaWRpVGV4dChjYXNjYWRlLCBydW4s
IHBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOworICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVj
dCk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJh
d1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0dGVy
bihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIG1fcHJpbWFy
eUNvbnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5kcmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
ciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQoreworICAgIG1fcHJpbWFy
eUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7
Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250
U21vb3RoaW5nTW9kZSkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwor
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMs
IG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKQEAgLTQwNywx
NiArMzM3LDkgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKICAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBtYXJrZXJTdHlsZSk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVy
bCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0VVJM
Rm9yUmVjdCh1cmwsIHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0
KHVybCwgcmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVz
dGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQorYm9vbCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3Mo
KSBjb25zdAogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5h
bWUsIHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3Qo
bmFtZSwgcmVjdCk7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuc3VwcG9ydHNJbnRlcm5h
bExpbmtzKCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGlu
YXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
CkBAIC00MjUsMTggKzM0OCwxNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFk
ZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0CiAgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmFkZERlc3RpbmF0aW9uQXRQb2ludChuYW1lLCBwb2ludCk7CiB9CiAKLWJv
b2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29u
c3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJldHVy
biBtX3ByaW1hcnlDb250ZXh0LnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpOworICAgIG1fcHJpbWFy
eUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CiB9CiAKLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBmbGFncykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChj
b25zdCBVUkwmIHVybCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIC8vIFRoaXMgY2Fs
bHMgdXBkYXRlU3RhdGUoKSBpbnN0ZWFkIG9mIGRpZFVwZGF0ZVN0YXRlKCkgc28gdGhhdCBjaGFu
Z2VzCi0gICAgLy8gYXJlIGFsc28gYXBwbGllZCB0byBlYWNoIGNvbnRleHQncyBHcmFwaGljc0Nv
bnRleHRTdGF0ZSwgc28gdGhhdCBjb2RlCi0gICAgLy8gaW50ZXJuYWwgdG8gdGhlIGNoaWxkIGNv
bnRleHRzIHRoYXQgcmVhZHMgZnJvbSB0aGUgc3RhdGUgZ2V0cyB0aGUgcmlnaHQgdmFsdWVzLgot
ICAgIG1fcHJpbWFyeUNvbnRleHQudXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQudXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKKyAgICBtX3ByaW1hcnlD
b250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0VVJMRm9yUmVjdCh1cmwsIHJlY3QpOwogfQogCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShD
QUlSTykKQEAgLTQ0Niw1ICszNjcsMTAgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnQKIH0KICNl
bmRpZgogCitGbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUp
Cit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91bmRUb0RldmljZVBpeGVscyhyZWN0
LCByb3VuZGluZ01vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuaAppbmRleCBmNThiMzRjOTE0MzQyYjczNzc3MjdjMTFhNzNiNmQ4MjE4ZTE1
NTZmLi43YTM3YTExM2RkODE1ZWIzYjk1NjA3NTJkOWRjNzBlYjVhODk3YzViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dC5oCkBAIC00Myw4MyArNDMsNTQgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0g
ICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisjaWYgVVNFKENHKQorICAgIGJvb2wgaXNDQUxheWVy
Q29udGV4dCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29s
KSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChi
b29sKSBmaW5hbDsKKyNlbmRpZgorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNv
bnN0IGZpbmFsOwogCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkg
ZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogI2lmIFVTRShDRykK
ICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlGaWxs
UGF0dGVybigpIGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikg
ZmluYWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVy
KCkgZmluYWw7CiAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9y
KSBmaW5hbDsKLQotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7Ci0gICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91bmRl
ZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwot
ICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwot
ICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgc3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwotCi0gICAg
dm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotICAgIHZv
aWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotCi0jaWYg
VVNFKENHKQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBi
b29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0g
V2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLQogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAg
dm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb25SZWN0KSBmaW5hbDsKIAotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdp
bmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwotCi0gICAgSW50UmVjdCBjbGlwQm91
bmRzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7
Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0
KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lk
IHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpG
cm9tSW1hZ2UgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKElt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291
cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFj
dG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKIAotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwot
I2VuZGlmCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZv
aWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAKLSAgICB1
c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRT
aXplJikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFs
OwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQg
ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIHZvaWQg
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25z
dCBQYXRoJikgZmluYWw7CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAg
IEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5n
TW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5h
bDsKIAorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAg
dm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCiAgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xv
ciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTEyNywyMyAr
OTgsMjYgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAot
ICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5n
TW9kZSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3Rk
OjpudWxsb3B0KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpIGZpbmFsOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1J
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBm
aW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKKyNlbmRpZgog
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CiAgICAgdm9pZCBk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJv
a2VTdHlsZSkgZmluYWw7Ci0KICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9p
ZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCi0g
ICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLQogICAgIGJvb2wgc3VwcG9y
dHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0
UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAg
dm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mp
IGZpbmFsOworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwogCiAjaWYgT1MoV0lORE9X
UykgJiYgIVVTRShDQUlSTykKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2Uu
Y3BwCmluZGV4IGJiNGRhYzAxOWM1YjllMTNiMTM3YWU2OTRlNGJmNmIyNzZiZmNjMGQuLjFjMWI5
NmVjNWI5ODNjYzVmMThkNmZmMWZkMjU4NTdmYTk0M2M0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFn
ZS5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJh
d0Nyb3NzZmFkZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiBJbWFnZURyYXdSZXN1bHQgQ3Jv
c3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7Cisg
ICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigp
LCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAg
ICBjb250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0
LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKaW5kZXggMjVhM2QzZmU4NzczMzFk
ZGEzOTU3ODAxMWI2ZDg5MGYyMTJjNzJlNi4uMWRlNGYzM2QzNDMxMzE2YzNmMTA2YmNiOGI3ZWJh
YmNjYzE4NmMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RHJhd0dseXBoc1JlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRHJhd0dseXBoc1JlY29yZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyNCArMjYsOSBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KIAotI2lmIFVTRShDT1JFX1RFWFQpCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0Nv
cmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0jaWYgUExBVEZP
Uk0oV0lOKQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jZWxzZQot
I2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29yZVRleHRTUEkuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBGbG9hdFBvaW50OwpAQCAtNjIsNzYgKzQ3LDMyIEBAIHB1YmxpYzoKICNpZiBV
U0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQogICAgIHZvaWQgZHJhd05hdGl2ZVRleHQo
Q1RGb250UmVmLCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmVSZWYsIENHUmVjdCBsaW5lUmVjdCk7
CiAKLSAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3Rh
dGVSZWYsIENHUmVjdCk7Ci0gICAgdm9pZCByZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZik7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENH
R2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KTsKLSAgICB2
b2lkIHJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgQ0dS
ZWN0LCBDR0ltYWdlUmVmKTsKKyAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dHU3RhdGVSZWYp
OworICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dHU3RhdGVSZWYpOworICAgIHZvaWQgcmVjb3Jk
RHJhd0dseXBocyhDR0dTdGF0ZVJlZiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBDR1BvaW50IHBv
c2l0aW9uc1tdLCBzaXplX3QgY291bnQpOworICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlKENHR1N0
YXRlUmVmLCBDR1JlY3QsIENHSW1hZ2VSZWYpOwogI2VuZGlmCiAKLSAgICBEZWNvbnN0cnVjdERy
YXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvbnN0
cnVjdERyYXdHbHlwaHM7IH0KLQogcHJpdmF0ZToKLSNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExB
VEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFs
Q29udGV4dCgpOwotI2VuZGlmCi0KLSAgICB2b2lkIGRyYXdCeVNwbGl0dGluZ0ludG9PVFNWR0Fu
ZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGRyYXdPVFNWR1J1
bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGRyYXdOb25PVFNWR1J1bihjb25zdCBG
b250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSos
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlKTsKLQotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9pZCBwb3B1bGF0ZUludGVybmFsQ29udGV4dChj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIHZvaWQgcHJlcGFyZUludGVybmFsQ29u
dGV4dChjb25zdCBGb250JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgY29uY2x1ZGVJ
bnRlcm5hbENvbnRleHQoKTsKKyAgICB2b2lkIHNldEludGVybmFsRm9udChjb25zdCBGb250Jiwg
Rm9udFNtb290aGluZ01vZGUpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHByZXBhcmVJbnRl
cm5hbENvbnRleHQoKTsKKyAgICB2b2lkIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIG9yaWdpbmFsU3RhdGUpOwogCi0gICAgdm9pZCB1cGRhdGVG
aWxsQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51
bGxwdHIpOwotICAgIHZvaWQgdXBkYXRlU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVu
dCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51bGxwdHIpOwotICAgIHZvaWQgdXBkYXRlQ1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIGVudW0gY2xhc3MgU2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgewotICAgICAgICBVbnNwZWNpZmllZCwKLSAgICAgICAgWWVzLAotICAgICAgICBObwot
ICAgIH07Ci0gICAgdm9pZCB1cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZz
ZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpOwotCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikK
LSAgICB2b2lkIHVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmKTsKLSNlbmRpZgorICAgIHZvaWQgZHJh
d05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3T1RTVkdSdW4o
Y29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdCeVNwbGl0dGluZ0ludG9PVFNWR0Fu
ZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0
JiBtX293bmVyOworICAgIEdyYXBoaWNzQ29udGV4dCYgbV9kZXN0aW5hdGlvbkNvbnRleHQ7CiAg
ICAgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzOwogICAgIERl
cml2ZUZvbnRGcm9tQ29udGV4dCBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dDsKIAotI2lmIFVTRShD
T1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4
dD4gbV9pbnRlcm5hbENvbnRleHQ7Ci0jZW5kaWYKLQogICAgIGNvbnN0IEZvbnQqIG1fb3JpZ2lu
YWxGb250IHsgbnVsbHB0ciB9OwogICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21vb3RoaW5nTW9k
ZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nIH07CiAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OwogCi0gICAgc3RydWN0IFN0YXRlIHsKLSAgICAgICAg
c3RydWN0IFN0eWxlIHsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAgICAgICAgUmVm
UHRyPEdyYWRpZW50PiBncmFkaWVudDsKLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBncmFk
aWVudFNwYWNlVHJhbnNmb3JtOwotICAgICAgICAgICAgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm47
Ci0gICAgICAgIH07Ci0gICAgICAgIFN0eWxlIGZpbGxTdHlsZTsKLSAgICAgICAgU3R5bGUgc3Ry
b2tlU3R5bGU7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKLQotICAgICAgICBzdHJ1
Y3QgU2hhZG93U3RhdGUgewotICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldDsKLSAgICAgICAg
ICAgIGZsb2F0IGJsdXIgeyAwIH07Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAg
ICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07Ci0gICAgICAgIH07Ci0gICAgICAg
IFNoYWRvd1N0YXRlIHNoYWRvdzsKLSAgICB9OwotICAgIFN0YXRlIG1fb3JpZ2luYWxTdGF0ZTsK
LSAgICBTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKyNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZP
Uk0oV0lOKQorICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJuYWxDb250ZXh0
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODUxODBhZDEwOWZk
ODE4ZTliYjE1ODhjZTk2MmFiNDYzMDgxNmEwOS4uMzYxMWIxMmNhOWFiMjllYjkyMWYyMzI1ZTFm
OTZkMjk1MjUzYzdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRy
YXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYg
cnVuCiAKIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4g
Rm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4dFJ1bihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4gdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSk7Cisg
ICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCAhY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpOwog
ICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uID0gdG8udmFsdWVfb3IocnVuLmxlbmd0aCgpKTsKICAg
ICAKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMg
cGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtp
dC5vcmcvYi8xMDAwNTAKQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxh
eUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZvclRl
eAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlz
cGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IGRpc3BsYXlMaXN0ID0gbWFrZVVuaXF1ZTxE
aXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4oKTsKLSAgICBEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCks
IEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNv
bnN0cnVjdERyYXdHbHlwaHM6Ok5vKTsKKyAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIHJl
Y29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3Jt
KCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpObyk7CiAgICAg
CiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gdG9GbG9hdFBvaW50KFdlYkNvcmU6OnNpemUo
Z2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKSkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihyZWNv
cmRpbmdDb250ZXh0LCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5
QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnRJbWFnZS5jcHAKaW5kZXggNjQ1ODRlNWNmZTAxMTg4MmVmYWIyZTIzYzNhNTk0ZTE3ODJmMjg5
MC4uMmY4MjdmNjI1ZjY0YjU5Y2ExYTY2NDk2MDczMGYwM2MyM2JjMzdhYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKQEAgLTQz
LDcgKzQzLDcgQEAgR3JhZGllbnRJbWFnZTo6fkdyYWRpZW50SW1hZ2UoKSA9IGRlZmF1bHQ7CiBJ
bWFnZURyYXdSZXN1bHQgR3JhZGllbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihkZXN0Q29udGV4dCk7Ci0gICAgZGVzdENvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0
aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgZGVzdENvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9w
dGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBk
ZXN0Q29udGV4dC5jbGlwKGRlc3RSZWN0KTsKICAgICBkZXN0Q29udGV4dC50cmFuc2xhdGUoZGVz
dFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNp
emUoKSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBHcmFkaWVudEltYWdlOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGQKICAgICBtX2dy
YWRpZW50LT5hZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKGFkanVzdGVkU2l6ZSwgYWRq
dXN0ZWRTcmNSZWN0LCBzcGFjaW5nKTsKIAogICAgIC8vIEZhY3RvciBpbiB0aGUgZGVzdGluYXRp
b24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29sdXRpb24KLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oR3Jh
cGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oKTsKICAgICBkb3Vi
bGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7CiAgICAgZG91YmxlIHlT
Y2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAgIEFmZmluZVRyYW5zZm9y
bSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggMGJi
MTM1OTdjZWE3MzY5ZGJiYzZlMTcyN2YyNmM5MmI4ZmI3NTE3Ni4uODk4NzhmYWJjNDVjMTQ1OWM2
NTgyZDkxMTdmYWM4OWNlYTFhMjllOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNiBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQmlkaVJlc29sdmVyLmgiCi0j
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJG
aWx0ZXJJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKQEAgLTM2LDQ3MyAr
MzUsMzAyIEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgi
CiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiTnVsbEdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiU3lzdGVtSW1h
Z2UuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiVGV4dEJveEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFRleHRCb3hJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVGV4dEJveEl0ZXJhdG9y
KCkKLSAgICAgICAgOiBtX3RleHRSdW4oMCkKLSAgICAgICAgLCBtX29mZnNldCgwKQotICAgIHsK
LSAgICB9Ci0KLSAgICBUZXh0Qm94SXRlcmF0b3IoY29uc3QgVGV4dFJ1biogdGV4dFJ1biwgdW5z
aWduZWQgb2Zmc2V0KQotICAgICAgICA6IG1fdGV4dFJ1bih0ZXh0UnVuKQotICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgb2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICB2b2lkIGluY3JlbWVudCgpIHsgbV9vZmZzZXQr
KzsgfQotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV90ZXh0UnVuIHx8IG1fb2Zm
c2V0ID49IG1fdGV4dFJ1bi0+bGVuZ3RoKCk7IH0KLSAgICBVQ2hhciBjdXJyZW50KCkgY29uc3Qg
eyByZXR1cm4gKCptX3RleHRSdW4pW21fb2Zmc2V0XTsgfQotICAgIFVDaGFyRGlyZWN0aW9uIGRp
cmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGF0RW5kKCkgPyBVX09USEVSX05FVVRSQUwgOiB1X2No
YXJEaXJlY3Rpb24oY3VycmVudCgpKTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRl
eHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9vZmZz
ZXQgPT0gb3RoZXIubV9vZmZzZXQgJiYgbV90ZXh0UnVuID09IG90aGVyLm1fdGV4dFJ1bjsKLSAg
ICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOyB9Ci0KLXByaXZhdGU6Ci0gICAgY29u
c3QgVGV4dFJ1biogbV90ZXh0UnVuOwotICAgIHVuc2lnbmVkIG1fb2Zmc2V0OwotfTsKLQotI2Rl
ZmluZSBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkgXAotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKSAmJiAo
bV9zdGF0ZS5wcm9wZXJ0eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKLSAgICAgICAgY2hhbmdlRmxh
Z3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKTsKLQotR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkKLSAgICA6IHNob3VsZEFudGlhbGlhcyh0cnVlKQot
ICAgICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKLSAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cyh0cnVlKQotICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0gICAg
LCBkcmF3THVtaW5hbmNlTWFzayhmYWxzZSkKK0dyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2VGbGFncyYgY2hhbmdlRmxhZ3MsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5p
dGlhbENUTSkKKyAgICA6IG1fc3RhdGUoaW5pdGlhbENsaXAsIGNoYW5nZUZsYWdzLCBpbml0aWFs
Q1RNKQogewogfQogCi1HcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBoaWNzQ29udGV4dFN0YXRl
KCkgPSBkZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpID0gZGVm
YXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0
b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OwotR3JhcGhpY3NDb250
ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0
U3RhdGUmJikgPSBkZWZhdWx0OwotCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNo
YW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK0dyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNz
Q29udGV4dCgpCiB7Ci0gICAgYXV0byBzdHJva2VGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGll
bnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0cm9rZUZsYWdzKSkgewotICAgICAgICBzdHJva2VD
b2xvciA9IHN0YXRlLnN0cm9rZUNvbG9yOwotICAgICAgICBzdHJva2VHcmFkaWVudCA9IHN0YXRl
LnN0cm9rZUdyYWRpZW50OwotICAgICAgICBzdHJva2VQYXR0ZXJuID0gc3RhdGUuc3Ryb2tlUGF0
dGVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbGxGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENo
YW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zQW55KGZpbGxGbGFncykpIHsKLSAgICAgICAgZmlsbENvbG9yID0gc3Rh
dGUuZmlsbENvbG9yOwotICAgICAgICBmaWxsR3JhZGllbnQgPSBzdGF0ZS5maWxsR3JhZGllbnQ7
Ci0gICAgICAgIGZpbGxQYXR0ZXJuID0gc3RhdGUuZmlsbFBhdHRlcm47Ci0gICAgfQotCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7
Ci0gICAgICAgIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgc2hh
ZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgICAgIHNoYWRvd0NvbG9yID0gc3RhdGUu
c2hhZG93Q29sb3I7Ci0gICAgICAgIHNoYWRvd1JhZGl1c01vZGUgPSBzdGF0ZS5zaGFkb3dSYWRp
dXNNb2RlOwotICAgIH0KLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgc3Ryb2tlVGhpY2tuZXNzID0g
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICB0ZXh0RHJhd2lu
Z01vZGUgPSBzdGF0ZS50ZXh0RHJhd2luZ01vZGU7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgc3Ryb2tl
U3R5bGUgPSBzdGF0ZS5zdHJva2VTdHlsZTsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKQotICAgICAgICBmaWxsUnVsZSA9IHN0
YXRlLmZpbGxSdWxlOworICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJU
KCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGFscGhhID0gc3Rh
dGUuYWxwaGE7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCit7CisgICAgbV9zdGFjay5h
cHBlbmQobV9zdGF0ZSk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKSB7Ci0gICAgICAgIGNvbXBvc2l0ZU9wZXJhdG9yID0g
c3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgICAgIGJsZW5kTW9kZSA9IHN0YXRlLmJsZW5k
TW9kZTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKK3sKKyAgICBpZiAobV9zdGFj
ay5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFu
dGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHN0YXRlLnNob3VsZEFu
dGlhbGlhczsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IHN0
YXRlLnNob3VsZFNtb290aEZvbnRzOworICAgIG1fc3RhdGUgPSBtX3N0YWNrLnRha2VMYXN0KCk7
CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIHNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cyA9IHN0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLQotICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXNDaGFuZ2UpKQotICAgICAgICBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIGRyYXdMdW1pbmFu
Y2VNYXNrID0gc3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7CisgICAgLy8gTWFrZSBzdXJlIHdlIGRl
YWxsb2NhdGUgdGhlIHN0YXRlIHN0YWNrIGJ1ZmZlciB3aGVuIGl0IGdvZXMgZW1wdHkuCisgICAg
Ly8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhh
dCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5LgorICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkK
KyAgICAgICAgbV9zdGFjay5jbGVhcigpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAg
ICAgICAgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHk7CitGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0
Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIHJldHVy
biBGbG9hdFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworfQor
ICAgIAorRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QK
K3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgYXV0byB0
cmFuc2Zvcm1lZERlc3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOworICAgIHJl
dHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOworfQogCi0j
aWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAgdXNl
RGFya0FwcGVhcmFuY2UgPSBzdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsKLSNlbmRpZgordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpCit7CisgICAgKytt
X3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CisgICAgQVNTRVJUKG1fdHJhbnNwYXJl
bmN5TGF5ZXJDb3VudCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworfQog
Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlR3JhZGllbnRDaGFuZ2UsIHN0
cm9rZUdyYWRpZW50KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VQYXR0
ZXJuQ2hhbmdlLCBzdHJva2VQYXR0ZXJuKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShGaWxsR3JhZGllbnRDaGFuZ2UsIGZpbGxHcmFkaWVudCk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoRmlsbFBhdHRlcm5DaGFuZ2UsIGZpbGxQYXR0ZXJuKTsKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3N0YXRlLmNs
aXAocmVjdCk7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKQotICAgICAgICAmJiAobV9zdGF0ZS5zaGFkb3dPZmZz
ZXQgIT0gc3RhdGUuc2hhZG93T2Zmc2V0Ci0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0Js
dXIgIT0gc3RhdGUuc2hhZG93Qmx1cgotICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dDb2xv
ciAhPSBzdGF0ZS5zaGFkb3dDb2xvcikpCi0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSkKK3sKKyAgICBtX3N0YXRlLmNsaXAocGF0
aC5mYXN0Qm91bmRpbmdSZWN0KCkpOworfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVS
VFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwotICAgIENIRUNLX0ZP
Ul9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4dERyYXdpbmdNb2Rl
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xvckNoYW5nZSwgc3Ry
b2tlQ29sb3IpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxDb2xvckNoYW5n
ZSwgZmlsbENvbG9yKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VTdHls
ZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
QWxwaGFDaGFuZ2UsIGFscGhhKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAg
cGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwUGF0aChwYXRoKTsKK30KIAotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNv
bXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNo
YW5nZSB9KQotICAgICAgICAmJiAobV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciAhPSBzdGF0ZS5j
b21wb3NpdGVPcGVyYXRvciB8fCBtX3N0YXRlLmJsZW5kTW9kZSAhPSBzdGF0ZS5ibGVuZE1vZGUp
KSB7Ci0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9z
aXRlT3BlcmF0aW9uQ2hhbmdlKTsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIGlmICgh
cmVjdC5pc1JvdW5kZWQoKSkgeworICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3Vs
ZEFudGlhbGlhc0NoYW5nZSwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShTaG91bGRTbW9vdGhGb250c0NoYW5nZSwgc2hvdWxkU21vb3RoRm9udHMpOwot
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
c0NoYW5nZSwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKERyYXdMdW1pbmFu
Y2VNYXNrQ2hhbmdlLCBkcmF3THVtaW5hbmNlTWFzayk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURf
UFJPUEVSVFkoSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSwgaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIENIRUNL
X0ZPUl9DSEFOR0VEX1BST1BFUlRZKFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlLCB1c2VEYXJrQXBw
ZWFyYW5jZSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBjaGFuZ2VGbGFnczsKKyAgICBQYXRoIHBh
dGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwT3V0KHBhdGgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3MpOwotCi0gICAgYXV0
byBzdHJva2VGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
QW55KHN0cm9rZUZsYWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoc3Ryb2tlRmxh
Z3MpOwotCi0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5j
b250YWluc0FueShmaWxsRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShmaWxs
RmxhZ3MpOwotCi0gICAgYXV0byBjb21wb3NpdGVPcGVyYXRvckZsYWdzID0geyBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6QmxlbmRNb2RlQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGNvbXBvc2l0
ZU9wZXJhdG9yRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShjb21wb3NpdGVP
cGVyYXRvckZsYWdzKTsKLQotICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGZsYWdzKTsKKyAgICBpbWFn
ZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQogewotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ry
b2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3JhZGllbnQsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlUGF0dGVybigqbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKTsKLQotICAgIGlmIChtX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqbV9zdGF0ZS5maWxsR3JhZGll
bnQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdl
KSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqbV9zdGF0ZS5maWxsUGF0dGVybik7
Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0
LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hhZG93
UmFkaXVzTW9kZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRT
dHJva2VUaGlja25lc3MobV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNo
YW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKG1fc3RhdGUudGV4dERy
YXdpbmdNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
Q29sb3IobV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgY29u
dGV4dC5zZXRGaWxsQ29sb3IobV9zdGF0ZS5maWxsQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9rZVN0eWxlKTsKLQot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
UnVsZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbFJ1bGUobV9zdGF0ZS5maWxsUnVs
ZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEFscGhhKG1fc3RhdGUuYWxwaGEp
OwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Qmxl
bmRNb2RlQ2hhbmdlIH0pKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbiht
X3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBtX3N0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFs
aWFzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMobV9zdGF0ZS5z
aG91bGRBbnRpYWxpYXMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4
dC5zZXRTaG91bGRTbW9vdGhGb250cyhtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKLQotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250cyhtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7
Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldERyYXdMdW1pbmFu
Y2VNYXNrKG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOwotCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKLQotI2lmIEhBVkUoT1NfREFSS19N
T0RFX1NVUFBPUlQpCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRV
c2VEYXJrQXBwZWFyYW5jZShtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlKTsKLSNlbmRpZgorICAg
IENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24o
KTsKKyAgICBzZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKKyAgICBmaWxsUmVj
dChyZWN0LCBjb2xvcik7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0
b3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wKFRleHRTdHJl
YW0mIHRzKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y2hhbmdlLWZsYWdzIiwgbV9jaGFuZ2VGbGFncy50b1JhdygpKTsKLQotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5n
ZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWdyYWRpZW50IiwgbV9zdGF0ZS5z
dHJva2VHcmFkaWVudC5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkp
OwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1ncmFk
aWVudCIsIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKLQotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1wYXR0ZXJuIiwgbV9zdGF0ZS5maWxsUGF0dGVy
bi5nZXQoKSk7CisgICAgZ3JhZGllbnQuZmlsbCgqdGhpcywgcmVjdCk7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdl
KSkgewotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFk
b3dCbHVyKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1jb2xvciIs
IG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvd3Mt
dXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFk
aXVzTW9kZTo6TGVnYWN5KTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQoreworICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgeworICAgICAgICBm
aWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1v
ZGUpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgICAgICAKKyAgICBDb21wb3NpdGVPcGVy
YXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7CisgICAgc2V0Q29t
cG9zaXRlTW9kZSh7IHByZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSB9KTsKKyAgICBmaWxsUm91
bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91
c09wZXJhdG9yKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoInN0cm9rZS10aGlja25lc3MiLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAg
ICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERy
YXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ0ZXh0LWRyYXdpbmct
bW9kZSIsIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlLnRvUmF3KCkpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdl
KSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtY29sb3IiLCBtX3N0YXRlLnN0cm9r
ZUNvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwt
Y29sb3IiLCBtX3N0YXRlLmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoInN0cm9rZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tlU3R5bGUpOwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUmVjdChyZWN0KTsK
IAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1ydWxlIiwgbV9z
dGF0ZS5maWxsUnVsZSk7CisgICAgaWYgKCFyb3VuZGVkSG9sZVJlY3QucmFkaWkoKS5pc1plcm8o
KSkKKyAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyb3VuZGVkSG9sZVJlY3QpOworICAgIGVs
c2UKKyAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5kZWRIb2xlUmVjdC5yZWN0KCkpOwogCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSIsIG1fc3RhdGUuYWxwaGEpOwor
ICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxlID0gZmlsbFJ1bGUoKTsKKyAgICBDb2xvciBvbGRGaWxs
Q29sb3IgPSBmaWxsQ29sb3IoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShXaW5kUnVsZTo6RXZl
bk9kZCk7CisgICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2Up
KQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3IpOworICAgIGZpbGxQYXRoKHBhdGgpOworICAgIAorICAgIHNldEZp
bGxSdWxlKG9sZEZpbGxSdWxlKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKK30K
IAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBt
X3N0YXRlLmJsZW5kTW9kZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1Bh
dGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQoreworICAgIFBhdGggcGF0aDsKKyAgICBwYXRo
LmFkZEVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFs
aWFzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtYW50aWFsaWFzIiwg
bV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVs
bGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQoreworICAgIFBhdGggcGF0aDsK
KyAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7CisgICAgc3Ryb2tlUGF0aChwYXRoKTsKK30K
IAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxk
LXNtb290aC1mb250cyIsIG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQoreworICAgIGF1
dG8gb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CisgICAgYXV0byBvbGRTdHJva2VDb2xvciA9
IHN0cm9rZUNvbG9yKCk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtc3VicGl4ZWwtcXVhbnRpemUtZm9udHMiLCBtX3N0
YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgc2V0RmlsbENvbG9yKHNoYWRv
d0NvbG9yKTsKKyAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7CisgICAgZHJhd0VsbGlw
c2UoRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSkpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIiwgbV9zdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7CisgICAgc2V0RmlsbENvbG9yKGVsbGlwc2VDb2xvcik7CisgICAgc2V0
U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBkcmF3RWxsaXBzZShyZWN0KTsKIAotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVt
aW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhdy1sdW1pbmFu
Y2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOworICAgIHNldEZpbGxDb2xvcihv
bGRGaWxsQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9yKG9sZFN0cm9rZUNvbG9yKTsKK30KIAot
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJ1c2UtZGFyay1hcHBlYXJhbmNlIiwgbV9zdGF0ZS51c2VE
YXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChj
b25zdCBQYXRoJiBwYXRoKQoreworICAgIGZpbGxQYXRoKHBhdGgpOworICAgIHN0cm9rZVBhdGgo
cGF0aCk7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFBv
aW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQogewotICAgIHN0YXRlQ2hhbmdlLmR1bXAodHMpOwotICAgIHJldHVybiB0czsK
KyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2Uu
bG9naWNhbFNpemUoKSksIEZsb2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFn
ZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4
dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIEFTU0VSVChtX3N0YWNrLmlzRW1w
dHkoKSk7Ci0gICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOworICAgIGRyYXdJ
bWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlLmxvZ2lj
YWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzYXZlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
bV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVy
cG9sYXRpb25RdWFsaXR5KCkpOworICAgIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgaWYgKG1fc3Rh
Y2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOworICAgIGlmICghaW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlID0gbV9zdGFjay5sYXN0KCk7Ci0gICAg
bV9zdGFjay5yZW1vdmVMYXN0KCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgd2UgZGVhbGxvY2F0ZSB0
aGUgc3RhdGUgc3RhY2sgYnVmZmVyIHdoZW4gaXQgZ29lcyBlbXB0eS4KLSAgICAvLyBDYW52YXMg
ZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkgYWdhaW4sIGJ1dCB0aGF0IGdvZXMgaW50
byBpbmxpbmUgY2FwYWNpdHkuCi0gICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQotICAgICAgICBt
X3N0YWNrLmNsZWFyKCk7CisgICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0gaW1hZ2UtPmxvZ2lj
YWxTaXplKCk7CisgICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpLCBG
bG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlTG9naWNhbFNpemUpLCBGbG9hdFJlY3QoeyB9LCBp
bWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUubWVyZ2VDaGFu
Z2VzKHN0YXRlLCBmbGFncyk7Ci0gICAgZGlkVXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKKyAg
ICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBpbWFnZUxvZ2ljYWxTaXpl
ID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdU
Rk1vdmUoaW1hZ2UpLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2FsU2l6
ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGVsbGlw
c2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc2F2ZSgpOwotCi0gICAgc2V0
U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IpOwotICAgIHNldEZpbGxDb2xvcihzaGFkb3dDb2xvcik7
Ci0KLSAgICBkcmF3RWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgMSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0KLSAgICBzZXRTdHJva2VDb2xvcihlbGxpcHNl
Q29sb3IpOwotICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IpOwotCi0gICAgZHJhd0VsbGlw
c2UocmVjdCk7ICAKLQotICAgIHJlc3RvcmUoKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25R
dWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkp
OworICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywg
ZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3Vs
dHMmIHJlc3VsdHMpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwotICAgIG1f
c3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVy
biA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKKyAgICBhdXRvIHJlc3VsdCA9IGZpbHRlci5hcHBs
eShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCByZXN1bHRzKTsKKyAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSByZXN1bHQt
PmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRl
ci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOworICAgIGRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7CisgICAgc2NhbGUoZmlsdGVyLmZp
bHRlclNjYWxlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIFNoYWRv
d1JhZGl1c01vZGUgcmFkaXVzTW9kZSkKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0g
Ymx1cjsKLSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKKyAgICByZXR1cm4gZHJhd0ltYWdl
KGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIGltYWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKK0ltYWdlRHJhd1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9u
cykKIHsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwotICAgIG1fc3Rh
dGUuc2hhZG93Qmx1ciA9IDA7Ci0gICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7Ci0g
ICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdDsK
LSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKTsKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUo
aW1hZ2VQYWludGluZ09wdGlvbnMub3JpZW50YXRpb24oKSkpOworICAgIHJldHVybiBkcmF3SW1h
Z2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzcmNSZWN0LCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBvZmZzZXQsIGZs
b2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgYmx1
ciA9IG1fc3RhdGUuc2hhZG93Qmx1cjsKLSAgICBjb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7
Ci0KLSAgICByZXR1cm4gaGFzU2hhZG93KCk7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWlu
dGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmlu
dGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOwotICAgIG1fc3Rh
dGUuZmlsbEdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVs
bHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbENvbG9yQ2hhbmdlKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50
ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlv
blF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRp
b24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQorSW1h
Z2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsCisgICAgSW1hZ2U6OlRpbGVSdWxlIGhS
dWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5z
dHJva2VHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gV1RG
TW92ZShwYXR0ZXJuKTsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSk7CisgICAgaWYgKGhSdWxlID09IEltYWdlOjpT
dHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKKyAgICAgICAgLy8g
SnVzdCBkbyBhIHNjYWxlLgorICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBvcHRpb25zKTsKKyAgICB9CisKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlv
bnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgq
dGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUs
IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0geyB9
OwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLmZpbGxQ
YXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpOworICAgIHN5c3RlbUltYWdl
LmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50
ID0gV1RGTW92ZShncmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJh
bnNmb3JtID0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSk7CisgICAgaW1hZ2UuZHJhd1BhdHRl
cm4oKnRoaXMsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRp
ZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxs
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7IH07Ci0g
ICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKLSAgICBtX3N0YXRl
LmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07
Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3RhdGUo
bV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSk7Ci0gICAg
Ly8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCkt
PnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9CisjZW5k
aWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewotICAgICsrbV90cmFuc3BhcmVuY3lM
YXllckNvdW50OworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewotICAgIEFTU0VSVChtX3RyYW5zcGFy
ZW5jeUxheWVyQ291bnQgPiAwKTsKLSAgICAtLW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKKyAg
ICBkcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZv
bnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rl
eHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRv
KQpAQCAtNTExLDExICszMzksNiBAQCBGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4
dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgIHJldHVy
biBmb250LmRyYXdUZXh0KCp0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGlu
Z01vZGUgZm9udFNtb290aGluZ01vZGUpCi17Ci0gICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMo
KnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9v
dGhpbmdNb2RlKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtz
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKICAgICBmb250LmRyYXdFbXBoYXNpc01hcmtzKCp0
aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CkBAIC01NDksNyArMzcyLDQ1IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgYmlkaVJ1biA9IGJpZGlSdW4tPm5leHQoKTsK
ICAgICB9CiAKLSAgICBiaWRpUnVucy5jbGVhcigpOworICAgIGJpZGlSdW5zLmNsZWFyKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxl
IHN0eWxlKQoreworICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0Lmhl
aWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRpbmcsIGRvdWJsZVVu
ZGVybGluZXMsIHN0eWxlKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0
ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50
aW5nKQoreworICAgIENvbG9yIGR1bW15Q29sb3I7CisgICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91
bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQocmVjdCwgcHJpbnRpbmcsIGR1bW15Q29sb3Ip
OworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFu
dGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGlu
ZywgQ29sb3ImIGNvbG9yKQoreworICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gcmVjdC5sb2NhdGlv
bigpOworICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIDAuNWYp
OworICAgIGlmIChwcmludGluZykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZs
b2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOworCisgICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIC8vIEp1c3QgY29tcHV0ZSBzY2FsZSBpbiB4IGRp
bWVuc2lvbiwgYXNzdW1pbmcgeCBhbmQgeSBzY2FsZXMgYXJlIGVxdWFsLgorICAgIGZsb2F0IHNj
YWxlID0gdHJhbnNmb3JtLmIoKSA/IHN0ZDo6aHlwb3QodHJhbnNmb3JtLmEoKSwgdHJhbnNmb3Jt
LmIoKSkgOiB0cmFuc2Zvcm0uYSgpOworICAgIGlmIChzY2FsZSA8IDEuMCkgeworICAgICAgICAv
LyBUaGlzIGNvZGUgYWx3YXlzIGRyYXdzIGEgbGluZSB0aGF0IGlzIGF0IGxlYXN0IG9uZS1waXhl
bCBsaW5lIGhpZ2gsCisgICAgICAgIC8vIHdoaWNoIHRlbmRzIHRvIHZpc3VhbGx5IG92ZXJ3aGVs
bSB0ZXh0IGF0IHNtYWxsIHNjYWxlcy4gVG8gY291bnRlciB0aGlzCisgICAgICAgIC8vIGVmZmVj
dCwgYW4gYWxwaGEgaXMgYXBwbGllZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9yIHdoZW4gdGV4dCBp
cyBhdCBzbWFsbCBzY2FsZXMuCisgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtVW5k
ZXJsaW5lQWxwaGEgPSAwLjRmOworICAgICAgICBmbG9hdCBzaGFkZSA9IHNjYWxlID4gbWluaW11
bVVuZGVybGluZUFscGhhID8gc2NhbGUgOiBtaW5pbXVtVW5kZXJsaW5lQWxwaGE7CisgICAgICAg
IGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hhZGUpOworICAgIH0K
KworICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFwUG9pbnQocmVjdC5s
b2NhdGlvbigpKTsKKyAgICAvLyBWaXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2NjdXIgaGVyZSBkdWUg
dG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zIGFk
anVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRlcmxpbmUgZGVjb3JhdGlvbi4KKyAgICBG
bG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRmKGRldmljZVBvaW50Lngo
KSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOworICAgIGlmIChhdXRvIGludmVyc2UgPSB0cmFu
c2Zvcm0uaW52ZXJzZSgpKQorICAgICAgICBvcmlnaW4gPSBpbnZlcnNlLnZhbHVlKCkubWFwUG9p
bnQoZGV2aWNlT3JpZ2luKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXpl
KHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9CiAKIHN0YXRpYyBJbnRTaXplIHNjYWxlZElt
YWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc2Nh
bGUpCkBAIC02MzksMTg3ICs1MDAsOSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IEdyYXBoaWNzQ29u
dGV4dDo6Y3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcgogICAgIHJl
dHVybiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBzY2FsZUZhY3RvcigpLCBjb2xvclNw
YWNlLCByZW5kZXJpbmdNb2RlKCksIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKLXsKLSAgICBzeXN0ZW1JbWFnZS5kcmF3KCp0
aGlzLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewot
ICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2Uu
c2l6ZSgpKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgRmxvYXRS
ZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKGltYWdlUGFpbnRpbmdPcHRpb25z
Lm9yaWVudGF0aW9uKCkpKTsKLSAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlv
biwgc3JjUmVjdCwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwotICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRp
b25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5
KCkpOwotICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsCi0gICAgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGls
ZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0
Y2hUaWxlKSB7Ci0gICAgICAgIC8vIEp1c3QgZG8gYSBzY2FsZS4KLSAgICAgICAgcmV0dXJuIGRy
YXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgfQotCi0g
ICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9y
VGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIHJl
dHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2Fs
ZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2Us
IEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2UubG9naWNhbFNpemUoKSksIEZsb2F0UmVjdCh7
IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
aW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0
aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRp
bmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAg
aW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdl
QnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBpZiAoIWltYWdl
KQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0gaW1hZ2UtPmxv
Z2ljYWxTaXplKCk7Ci0gICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2Up
LCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlTG9naWNhbFNpemUpLCBGbG9hdFJlY3QoeyB9
LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBpZiAoIWltYWdlKQotICAg
ICAgICByZXR1cm47Ci0gICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0gaW1hZ2UtPmxvZ2ljYWxT
aXplKCk7Ci0gICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpLCBkZXN0
aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2FsU2l6ZSksIGltYWdlUGFpbnRpbmdP
cHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1
ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29w
ZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBJbWFnZUJ1ZmZl
cjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCi17Ci0g
ICAgYXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVj
dCwgcmVzdWx0cyk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBhdXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZlcigpOwotICAgIGlmICghaW1h
Z2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjYWxlKHsgMSAvIGZpbHRlci5maWx0
ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9KTsK
LSAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1bHQtPmFic29sdXRlSW1hZ2VS
ZWN0KCkpOwotICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBpbWFnZS5kcmF3UGF0dGVybigqdGhpcywgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkK
LXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKLSAgICBj
bGlwUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQotewotICAgIGlmICghcmVjdC5pc1Jv
dW5kZWQoKSkgewotICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3Qp
OwotICAgIGNsaXBPdXQocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb25SZWN0KQotewotICAgIGltYWdlQnVmZmVyLmNsaXBUb01hc2soKnRoaXMsIGRlc3Rp
bmF0aW9uUmVjdCk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW50UmVjdCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgZ3JhZGllbnQuZmlsbCgqdGhpcywgcmVj
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCi17Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9
IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxl
bmRNb2RlKTsKLSAgICBmaWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAgc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkg
ewotICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9uKCksIGJs
ZW5kTW9kZSk7Ci0gICAgICAgIGZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotICAg
ICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9uKCkpOwotICAgIH0g
ZWxzZQotICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0ZU9wZXJh
dGlvbigpLCBibGVuZE1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBQYXRoIHBh
dGg7Ci0gICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotCi0gICAgaWYgKCFyb3VuZGVkSG9sZVJlY3Qu
cmFkaWkoKS5pc1plcm8oKSkKLSAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyb3VuZGVkSG9s
ZVJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5kZWRIb2xlUmVjdC5y
ZWN0KCkpOwogCi0gICAgV2luZFJ1bGUgb2xkRmlsbFJ1bGUgPSBmaWxsUnVsZSgpOwotICAgIENv
bG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwotICAgIAotICAgIHNldEZpbGxSdWxlKFdp
bmRSdWxlOjpFdmVuT2RkKTsKLSAgICBzZXRGaWxsQ29sb3IoY29sb3IpOwogCi0gICAgZmlsbFBh
dGgocGF0aCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOwotICAgIHNldEZp
bGxDb2xvcihvbGRGaWxsQ29sb3IpOwotfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbiwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yID0gY29t
cG9zaXRlT3BlcmF0aW9uOwotICAgIG1fc3RhdGUuYmxlbmRNb2RlID0gYmxlbmRNb2RlOwotICAg
IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpOwotfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRv
UGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ry
b2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQogewpAQCAtODUwLDc3ICs1MzMsNiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9p
bnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAotRmxvYXRTaXplIEdyYXBoaWNzQ29u
dGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zv
cm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKLSAgICByZXR1cm4gRmxvYXRTaXplKHRyYW5zZm9ybS54U2NhbGUoKSwgdHJhbnNmb3JtLnlT
Y2FsZSgpKTsKLX0KLSAgICAKLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9y
Rm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShH
cmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIGF1dG8g
dHJhbnNmb3JtZWREZXN0UmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KGRlc3RSZWN0KTsKLSAgICBy
ZXR1cm4gdHJhbnNmb3JtZWREZXN0UmVjdC5zaXplKCkgLyBzcmNSZWN0LnNpemUoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAg
ZmlsbFBhdGgocGF0aCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsK
LSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2UpOwotICAgIGZpbGxQ
YXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0
aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGgu
YWRkRWxsaXBzZShlbGxpcHNlKTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHlsZSkKLXsK
LSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFz
aEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBz
dHlsZSk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVC
b3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykKLXsKLSAg
ICBDb2xvciBkdW1teUNvbG9yOwotICAgIHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KHJlY3QsIHByaW50aW5nLCBkdW1teUNvbG9yKTsKLX0KLQotRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIENvbG9yJiBj
b2xvcikKLXsKLSAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKLSAgICBm
bG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKLSAgICBpZiAo
cHJpbnRpbmcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVj
dC53aWR0aCgpLCB0aGlja25lc3MpKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsK
LSAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3VtaW5nIHggYW5k
IHkgc2NhbGVzIGFyZSBlcXVhbC4KLSAgICBmbG9hdCBzY2FsZSA9IHRyYW5zZm9ybS5iKCkgPyBz
dGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJhbnNmb3JtLmEoKTsK
LSAgICBpZiAoc2NhbGUgPCAxLjApIHsKLSAgICAgICAgLy8gVGhpcyBjb2RlIGFsd2F5cyBkcmF3
cyBhIGxpbmUgdGhhdCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdoLAotICAgICAgICAv
LyB3aGljaCB0ZW5kcyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBzbWFsbCBzY2FsZXMu
IFRvIGNvdW50ZXIgdGhpcwotICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhhIGlzIGFwcGxpZWQg
dG8gdGhlIHVuZGVybGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwgc2NhbGVzLgotICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhhID0gMC40ZjsKLSAg
ICAgICAgZmxvYXQgc2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA/IHNjYWxl
IDogbWluaW11bVVuZGVybGluZUFscGhhOwotICAgICAgICBjb2xvciA9IGNvbG9yLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KHNoYWRlKTsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IGRldmlj
ZVBvaW50ID0gdHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7Ci0gICAgLy8gVmlz
dWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFsIHJvdW5kZi9jZWls
Zi4gdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBvdmVyZmxvdyB2YWx1
ZSBmb3IgdW5kZXJsaW5lIGRlY29yYXRpb24uCi0gICAgRmxvYXRQb2ludCBkZXZpY2VPcmlnaW4g
PSBGbG9hdFBvaW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihkZXZpY2VQb2ludC55
KCkpKTsKLSAgICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVyc2UoKSkKLSAgICAg
ICAgb3JpZ2luID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9yaWdpbik7Ci0gICAg
cmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVz
cykpOwotfQotCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVDb3JuZXJXaWR0aEZv
clN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAgIGZsb2F0IHRoaWNr
bmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtOTcyLDE1ICs1ODQsNCBAQCBWZWN0b3I8Rmxv
YXRQb2ludD4gR3JhcGhpY3NDb250ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhib29s
IGlzVmVydGljYWxMaQogICAgIHJldHVybiB7IHBvaW50MSwgcG9pbnQyIH07CiB9CiAKLSNpZiBF
TkFCTEUoVklERU8pCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17Ci0gICAg
cGxheWVyLnBsYXllclByaXZhdGUoKS0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoKnRoaXMs
IGRlc3RpbmF0aW9uKTsKLX0KLSNlbmRpZgotCi12b2lkIE51bGxHcmFwaGljc0NvbnRleHQ6OmRy
YXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCi17Ci19
Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKaW5kZXggZmI5NWRkMjViMjcxZGViOWZhODVmZjJkOWYxZjc0NzE2YTA2NmJhZS4u
MWM3MzVmZGRmOWRjMjA3NjJiMjg5OGI1NjNjZjI0NDJlN2RkMDNhZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9iaWxl
LCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCw0OSArMzAsMTggQEAKICNpbmNsdWRlICJE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRTdGF0ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1h
Z2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRl
IDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvT3B0aW9uU2V0Lmg+CiAKLSNpZiBVU0UoQ0cpCi10eXBlZGVmIHN0cnVjdCBDR0NvbnRl
eHQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZWxpZiBVU0UoQ0FJUk8pCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsKLX0KLXR5cGVkZWYgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8gUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZWxzZQot
dHlwZWRlZiB2b2lkIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShXSU4pCi0jaW5jbHVkZSAiRElCUGl4ZWxEYXRhLmgiCi10eXBlZGVmIHN0cnVjdCBIRENf
XyogSERDOwotI2lmICFVU0UoQ0cpCi0vLyBVSW50OCBpcyBkZWZpbmVkIGluIENvcmVGb3VuZGF0
aW9uL0NGQmFzZS5oCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUludDg7Ci0jZW5kaWYKLSNlbmRp
ZgotCi0vLyBYMTEgaGVhZGVycyBkZWZpbmUgYSBidW5jaCBvZiBtYWNyb3Mgd2l0aCBjb21tb24g
dGVybXMsIGludGVyZmVyaW5nIHdpdGggV2ViQ29yZSBhbmQgV1RGIGVudW0gdmFsdWVzLgotLy8g
QXMgYSB3b3JrYXJvdW5kLCB3ZSBleHBsaWNpdGx5IHVuZGVmIHRoZW0gaGVyZS4KLSNpZiBkZWZp
bmVkKE5vbmUpCi0jdW5kZWYgTm9uZQotI2VuZGlmCi0jaWYgZGVmaW5lZChCZWxvdykKLSN1bmRl
ZiBCZWxvdwotI2VuZGlmCi0jaWYgZGVmaW5lZChTdWNjZXNzKQotI3VuZGVmIFN1Y2Nlc3MKLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKQEAg
LTgyLDcgKzUxLDYgQEAgY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50Owog
Y2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogY2xhc3MgSW1hZ2VCdWZmZXI7
Ci1jbGFzcyBJbnRSZWN0OwogY2xhc3MgTWVkaWFQbGF5ZXI7CiBjbGFzcyBSb3VuZGVkUmVjdDsK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMOwpAQCAtOTEsMTc0ICs1OSwxMiBAQCBjbGFzcyBTeXN0
ZW1JbWFnZTsKIGNsYXNzIFRleHRSdW47CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAot
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIFJlY29yZGVyOwotfQotCi1lbnVtIGNsYXNz
IFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgewotICAgIEZpbGwgPSAxIDw8IDAsCi0gICAgU3Ry
b2tlID0gMSA8PCAxLAotfTsKLXVzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0gT3B0aW9uU2V0
PFRleHREcmF3aW5nTW9kZT47Ci0KLS8vIExlZ2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMgdXNl
ZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotLy8gSXQgaGFzIGRpZmZlcmVu
dCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi1lbnVtIGNsYXNzIFNoYWRvd1JhZGl1c01vZGUg
OiBib29sIHsKLSAgICBEZWZhdWx0LAotICAgIExlZ2FjeQotfTsKLQotZW51bSBTdHJva2VTdHls
ZSB7Ci0gICAgTm9TdHJva2UsCi0gICAgU29saWRTdHJva2UsCi0gICAgRG90dGVkU3Ryb2tlLAot
ICAgIERhc2hlZFN0cm9rZSwKLSAgICBEb3VibGVTdHJva2UsCi0gICAgV2F2eVN0cm9rZSwKLX07
Ci0KLXN0cnVjdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSB7Ci0gICAgZW51bSBjbGFzcyBNb2Rl
IDogdWludDhfdCB7Ci0gICAgICAgIFRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRl
cm5hdGl2ZXMsCi0gICAgICAgIFNwZWxsaW5nLAotICAgICAgICBHcmFtbWFyLAotICAgICAgICBB
dXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAotICAgICAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZXMK
LSAgICB9IG1vZGU7Ci0gICAgYm9vbCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB7IGZhbHNlIH07
Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtb2RlOwotICAgIGVuY29kZXIg
PDwgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1zdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxN
b2RlPiBtb2RlOwotICAgIGRlY29kZXIgPj4gbW9kZTsKLSAgICBpZiAoIW1vZGUpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZFVz
ZURhcmtBcHBlYXJhbmNlOwotICAgIGRlY29kZXIgPj4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7
Ci0gICAgaWYgKCFzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqbW9kZSwgKnNob3VsZFVzZURhcmtBcHBlYXJhbmNl
IH19OwotfQotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U7Ci0KLXN0cnVjdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSB7Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0
U3RhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0U3RhdGUoKTsKLQot
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3Rh
dGUmJik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIG9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKLQotICAgIGVudW0gQ2hhbmdl
IDogdWludDMyX3QgewotICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDAsCi0gICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2UgICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMSwKLSAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdlICAgICAgICAgICAg
ICAgICAgICAgID0gMSA8PCAyLAotICAgICAgICBGaWxsUGF0dGVybkNoYW5nZSAgICAgICAgICAg
ICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgICAgIFN0cm9rZVRoaWNrbmVzc0NoYW5nZSAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgNCwKLSAgICAgICAgU3Ryb2tlQ29sb3JDaGFuZ2UgICAgICAg
ICAgICAgICAgICAgICAgID0gMSA8PCA1LAotICAgICAgICBTdHJva2VTdHlsZUNoYW5nZSAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDYsCi0gICAgICAgIEZpbGxDb2xvckNoYW5nZSAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNywKLSAgICAgICAgRmlsbFJ1bGVDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA4LAotICAgICAgICBTaGFkb3dDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDksCi0gICAgICAgIFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zQ2hhbmdlICAgICAgICAgICA9IDEgPDwgMTAsCi0gICAgICAgIEFscGhhQ2hhbmdl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTEsCi0gICAgICAgIENvbXBvc2l0
ZU9wZXJhdGlvbkNoYW5nZSAgICAgICAgICAgICAgICA9IDEgPDwgMTIsCi0gICAgICAgIEJsZW5k
TW9kZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTMsCi0gICAgICAgIFRl
eHREcmF3aW5nTW9kZUNoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTQsCi0gICAgICAg
IFNob3VsZEFudGlhbGlhc0NoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTUsCi0gICAg
ICAgIFNob3VsZFNtb290aEZvbnRzQ2hhbmdlICAgICAgICAgICAgICAgICA9IDEgPDwgMTYsCi0g
ICAgICAgIFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSAgICAgICA9IDEgPDwgMTcs
Ci0gICAgICAgIERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlICAgICAgICAgICAgICAgICA9IDEgPDwg
MTgsCi0gICAgICAgIEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UgICAgICAgICA9IDEg
PDwgMTksCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICAgICAgVXNlRGFya0Fw
cGVhcmFuY2VDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAyMCwKLSNlbmRpZgotICAgIH07
Ci0gICAgdXNpbmcgU3RhdGVDaGFuZ2VGbGFncyA9IE9wdGlvblNldDxDaGFuZ2U+OwotCi0gICAg
dm9pZCBtZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBSZWZQdHI8R3JhZGllbnQ+IHN0
cm9rZUdyYWRpZW50OwotICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOwotICAgIAot
ICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50OwotICAgIFJlZlB0cjxQYXR0ZXJuPiBm
aWxsUGF0dGVybjsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0KLSAgICBDb2xvciBz
dHJva2VDb2xvciB7IENvbG9yOjpibGFjayB9OwotICAgIENvbG9yIGZpbGxDb2xvciB7IENvbG9y
OjpibGFjayB9OwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotCi0gICAgQWZmaW5lVHJhbnNmb3Jt
IHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtOwotCi0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzIHsgMCB9
OwotICAgIGZsb2F0IHNoYWRvd0JsdXIgeyAwIH07Ci0gICAgZmxvYXQgYWxwaGEgeyAxIH07Ci0K
LSAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSB7IFNvbGlkU3Ryb2tlIH07Ci0gICAgV2luZFJ1
bGUgZmlsbFJ1bGUgeyBXaW5kUnVsZTo6Tm9uWmVybyB9OwotCi0gICAgVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdpbmdNb2RlOjpGaWxsIH07Ci0gICAgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291
cmNlT3ZlciB9OwotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUgeyBCbGVuZE1vZGU6Ok5vcm1hbCB9
OwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgeyBJ
bnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OwotICAgIFNoYWRvd1JhZGl1c01vZGUgc2hh
ZG93UmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKLQotICAgIGJvb2wg
c2hvdWxkQW50aWFsaWFzIDogMTsKLSAgICBib29sIHNob3VsZFNtb290aEZvbnRzIDogMTsKLSAg
ICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA6IDE7Ci0gICAgYm9vbCBzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyA6IDE7Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzayA6IDE7Ci0j
aWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNl
IDogMTsKLSNlbmRpZgotfTsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHsK
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsKLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgICAgICA6IG1f
c3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9jaGFuZ2VGbGFncyhmbGFncykKLSAgICB7Ci0gICAg
fQotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zy
b21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OwotCi0gICAgdm9pZCBh
Y2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncyBtX2NoYW5nZUZsYWdzOwotfTsKLQotV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlJik7Ci0KIGNsYXNzIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoR3JhcGhpY3NDb250ZXh0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
ICAgCisgICAgZnJpZW5kIGNsYXNzIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1bHQ7CitwdWJsaWM6CisgICAg
V0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2VGbGFncyYgPSB7IH0sIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZv
cm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI3MCwyNzAgKzc2LDI3MCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0Rl
Y29kZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBkZXRlY3Rp
bmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgLy8gQ29u
dGV4dCBTdGF0ZQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICB2b2lkIHNldENvbnRlbnRmdWxQ
YWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQorICAg
IAorICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1
cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VU
aGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0gdGhp
Y2tuZXNzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlVGhpY2tuZXNzQ2hhbmdlKTsgfQotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOyB9CisgICAgLy8gQ29udGV4dCBTdGF0
ZQogCi0gICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkgeyBtX3N0YXRl
LnN0cm9rZVN0eWxlID0gc3R5bGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7IH0KLSAgICBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlU3R5bGU7IH0KKyAgICBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Cisg
ICAgdm9pZCBtZXJnZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3Ro
ZXIpIHsgbV9zdGF0ZS5tZXJnZUNoYW5nZXMob3RoZXIpOyB9CisgICAgdm9pZCBtZXJnZVN0YXRl
RGlmZnMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1fc3RhdGUubWVyZ2VE
aWZmcyhvdGhlcik7IH0KKyAgICB2b2lkIGNsZWFyU3RhdGVDaGFuZ2VzKCkgeyBtX3N0YXRlLmNs
ZWFyQ2hhbmdlcygpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9y
KGNvbnN0IENvbG9yJik7Ci0gICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvcjsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0o
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmdldENUTSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkgeyBtX3N0YXRlLnNldENUTShjdG0pOyB9
CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pIHsgc2V0Q1RN
KGdldENUTSgpICogY3RtKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
IHsgc2V0Q1RNKGdldENUTSgpLnRyYW5zbGF0ZSh4LCB5KSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFBvaW50JiBwKSB7IHRy
YW5zbGF0ZShwLngoKSwgcC55KCkpOyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQg
c3kpIHsgc2V0Q1RNKGdldENUTSgpLnNjYWxlKHN4LCBzeSkpOyB9CisgICAgdm9pZCBzY2FsZShm
bG9hdCBzKSB7IHNjYWxlKHMsIHMpOyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpIHsgc2NhbGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQg
cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSB7IHNldENUTShnZXRDVE0oKS5yb3RhdGUocmFk
MmRlZyhhbmdsZUluUmFkaWFucykpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRT
dHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJu
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CisgICAgY29u
c3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCku
Y29sb3IoKTsgfQorICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmZpbGxCcnVzaCgpLmdyYWRpZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBmaWxsUGF0dGVy
bigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkucGF0dGVybigpOyB9CisgICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNldEZp
bGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9zdGF0ZS5zZXRGaWxsQnJ1c2goeyBjb2xv
ciB9KTsgfQorICAgIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVu
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRl
LnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0pOyB9Cisg
ICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0RmlsbFBhdHRl
cm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQqIHN0cm9rZUdyYWRpZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQorICAgIFdpbmRSdWxlIGZp
bGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsUnVsZSgpOyB9CisgICAgdm9pZCBz
ZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLnNldEZpbGxSdWxlKGZpbGxS
dWxlKTsgfQogCi0gICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0
YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KLSAgICBXaW5kUnVsZSBmaWxsUnVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KKyAgICBjb25zdCBDb2xvciYgc3Ry
b2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsg
fQorICAgIEdyYWRpZW50KiBzdHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
c3Ryb2tlQnJ1c2goKS5ncmFkaWVudCgpOyB9CisgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5wYXR0ZXJuKCk7IH0KKyAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNl
dFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldFN0cm9rZUJydXNo
KHsgY29sb3IgfSk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4m
JiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3Jt
ID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIGdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQ
YXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblNwYWNlVHJh
bnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4p
LCBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsgfQorICAgIGZsb2F0IHN0cm9rZVRoaWNr
bmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKCk7IH0KKyAgICB2
b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zZXRTdHJv
a2VUaGlja25lc3ModGhpY2tuZXNzKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRG
aWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7Ci0gICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpOyB9CisgICAgU3Ryb2tlU3R5
bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0eWxlKCk7IH0K
KyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc2V0
U3Ryb2tlU3R5bGUoc3R5bGUpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxH
cmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwot
ICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxH
cmFkaWVudC5nZXQoKTsgfQorICAgIExpbmVDYXAgaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5saW5lQ2FwKCk7IH0KKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKSB7
IG1fc3RhdGUuc2V0TGluZUNhcChsaW5lQ2FwKTsgfQogCi0gICAgdm9pZCBzZXRTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgZGlkVXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CisgICAgY29uc3QgTGlu
ZURhc2ggbGluZURhc2goKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVEYXNoKCk7IH0KKyAg
ICB2b2lkIHNldExpbmVEYXNoKExpbmVEYXNoJiYgbGluZURhc2gpIHsgbV9zdGF0ZS5zZXRMaW5l
RGFzaChXVEZNb3ZlKGxpbmVEYXNoKSk7IH0KIAotICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFz
KGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxk
QW50aWFsaWFzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXM7IH0KKyAgICBMaW5lSm9pbiBsaW5l
Sm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubGluZUpvaW4oKTsgfQorICAgIHZvaWQgc2V0
TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pIHsgbV9zdGF0ZS5zZXRMaW5lSm9pbihsaW5lSm9p
bik7IH0KIAotICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBzaG91bGRTbW9vdGhG
b250cykgeyBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7IGRp
ZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhG
b250c0NoYW5nZSk7IH0KLSAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250czsgfQorICAgIGZsb2F0IG1pdGVyTGltaXQoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLm1pdGVyTGltaXQoKTsgfQorICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCBtaXRlckxpbWl0KSB7IG1fc3RhdGUuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0
KTsgfQogCi0gICAgLy8gTm9ybWFsbHkgQ0cgZW5hYmxlcyBzdWJwaXhlbC1xdWFudGl6YXRpb24g
YmVjYXVzZSBpdCBpbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgYWxpZ25pbmcgZ2x5cGhzLgot
ICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgaGF2ZSB0byBkaXNhYmxlIHRvIHRvIGVuc3VyZSBhIGhp
Z2gtcXVhbGl0eSBvdXRwdXQgb2YgdGhlIGdseXBocy4KLSAgICB2b2lkIHNldFNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyhib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykgeyBtX3N0
YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250czsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSk7IH0KLSAgICBib29sIHNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzOyB9CisgICAgQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVNb2RlKCk7IH0KKyAgICBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBjb21wb3NpdGVNb2RlKCkub3A7IH0K
KyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29tcG9z
aXRlTW9kZSgpLmJsZW5kTW9kZTsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRlTW9kZShDb21wb3Np
dGVNb2RlIGNvbXBvc2l0ZU1vZGUpIHsgbV9zdGF0ZS5zZXRDb21wb3NpdGVNb2RlKGNvbXBvc2l0
ZU1vZGUpOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0
b3Igb3ApIHsgbV9zdGF0ZS5zZXRDb21wb3NpdGVNb2RlKHsgb3AsIEJsZW5kTW9kZTo6Tm9ybWFs
IH0pOyB9CiAKLSAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgcXVhbGl0eSkgeyBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
PSBxdWFsaXR5OyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSk7IH0KLSAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisgICAgY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNo
YWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJvcFNoYWRvdygpOyB9CisgICAgdm9pZCBz
ZXREcm9wU2hhZG93KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpIHsgbV9zdGF0ZS5zZXRE
cm9wU2hhZG93KGRyb3BTaGFkb3cpOyB9CisgICAgdm9pZCBjbGVhclNoYWRvdygpIHsgbV9zdGF0
ZS5zZXREcm9wU2hhZG93KHsgfSk7IH0KIAotICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEp
IHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOyB9Ci0gICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29u
c3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBoYXNCbHVy
cmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmlzQmx1cnJlZCgpOyB9Cisg
ICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93KCkuaGFzT3V0c2V0
cygpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0KKyAgICBmbG9hdCBhbHBoYSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGEoKTsgfQorICAgIHZvaWQgc2V0QWxwaGEoZmxv
YXQgYWxwaGEpIHsgbV9zdGF0ZS5zZXRBbHBoYShhbHBoYSk7IH0KIAotICAgIHZvaWQgc2V0RHJh
d0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLmRyYXdMdW1p
bmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7IH0KLSAgICBib29s
IGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNl
TWFzazsgfQorICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsg
fQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVh
bGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSB7IG1fc3RhdGUuc2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsgfQogCi0gICAgdm9pZCBz
ZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRlLnRl
eHREcmF3aW5nTW9kZSA9IG1vZGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOyB9Ci0gICAgVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2lu
Z01vZGU7IH0KKyAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSgpOyB9CisgICAgdm9pZCBzZXRUZXh0
RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKSB7IG1fc3Rh
dGUuc2V0VGV4dERyYXdpbmdNb2RlKHRleHREcmF3aW5nTW9kZSk7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0
IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpOwotICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25z
dDsKKyAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hv
dWxkQW50aWFsaWFzKCk7IH0KKyAgICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sIHNob3Vs
ZEFudGlhbGlhcykgeyBtX3N0YXRlLnNldFNob3VsZEFudGlhbGlhcyhzaG91bGRBbnRpYWxpYXMp
OyB9CiAKLSAgICBib29sIGhhc1Zpc2libGVTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNoYWRvd0NvbG9yLmlzVmlzaWJsZSgpOyB9Ci0gICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7
IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYgKG1fc3RhdGUuc2hhZG93Qmx1ciB8fCBtX3N0
YXRlLnNoYWRvd09mZnNldC53aWR0aCgpIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgp
KTsgfQotICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2li
bGVTaGFkb3coKSAmJiBtX3N0YXRlLnNoYWRvd0JsdXI7IH0KKyAgICBib29sIHNob3VsZFNtb290
aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cygpOyB9Cisg
ICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1f
c3RhdGUuc2V0U2hvdWxkU21vb3RoRm9udHMoc2hvdWxkU21vb3RoRm9udHMpOyB9CiAKLSNpZiBI
QVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2Uo
Ym9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0gdXNl
RGFya0FwcGVhcmFuY2U7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSk7IH0KLSAgICBib29sIHVzZURhcmtBcHBlYXJh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQotI2VuZGlm
CisgICAgLy8gTm9ybWFsbHkgQ0cgZW5hYmxlcyBzdWJwaXhlbC1xdWFudGl6YXRpb24gYmVjYXVz
ZSBpdCBpbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgYWxpZ25pbmcgZ2x5cGhzLgorICAgIC8v
IEluIHNvbWUgY2FzZXMgd2UgaGF2ZSB0byBkaXNhYmxlIHRvIHRvIGVuc3VyZSBhIGhpZ2gtcXVh
bGl0eSBvdXRwdXQgb2YgdGhlIGdseXBocy4KKyAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzKCk7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykgeyBtX3N0YXRlLnNldFNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cyhzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOyB9CiAKLSAgICB2aXJ0dWFs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKyAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpOyB9CisgICAgdm9pZCBzZXRTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUu
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOyB9CiAK
LSAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIGJvb2wgZHJhd0x1bWluYW5j
ZU1hc2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrKCk7IH0KKyAg
ICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spIHsgbV9z
dGF0ZS5zZXREcmF3THVtaW5hbmNlTWFzayhkcmF3THVtaW5hbmNlTWFzayk7IH0KIAotICAgIC8v
IENhbGxlZCAqYWZ0ZXIqIGFueSBjaGFuZ2UgdG8gR3JhcGhpY3NDb250ZXh0U3RhdGU7IGdlbmVy
YWxseSB1c2VkIHRvIHByb3BhZ2F0ZSBjaGFuZ2VzCi0gICAgLy8gdG8gdGhlIHBsYXRmb3JtIGNv
bnRleHQncyBzdGF0ZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cykgPSAwOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UoKTsg
fQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkg
eyBtX3N0YXRlLnNldFVzZURhcmtBcHBlYXJhbmNlKHVzZURhcmtBcHBlYXJhbmNlKTsgfQorI2Vu
ZGlmCiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7Ci0gICAgCiAgICAgdW5zaWduZWQgc3Rh
Y2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorICAgIHZpcnR1YWwg
dm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpID0gMDsKICNpZiBVU0UoQ0cpCiAgICAgLy8gRklYTUU6
IFNob3VsZCB0aGVzZSByZWFsbHkgYmUgcHVibGljIEdyYXBoaWNzQ29udGV4dCBtZXRob2RzPwot
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U3Ryb2tl
UGF0dGVybigpID0gMDsKKyNlbmRpZgogCi0gICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMg
YSB3aHkgaW5zdGVhZCBvZiBhIHdoYXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxh
dGZvcm0/Ci0gICAgdmlydHVhbCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworICAgIFdFQkNP
UkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKIAotICAgIC8vIEZJWE1FOiBD
YW4gdGhpcyBiZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9yIHBhcmFtZXRlcj8gT3Ig
anVzdCBiZSByZWFkIG9mZiB0aGUgY29udGV4dD8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbnRleHQoYm9vbCkgPSAwOwotI2VuZGlmCisgICAgLy8gVGhpcyBmdW5jdGlvbiBh
cHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250ZXh0LCBtYWtpbmcgdGhl
IGNvbnRleHQgY2FwYWJsZSBvZgorICAgIC8vIGFjdGluZyBhcyBhIGJhc2UtbGV2ZWwgY29udGV4
dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsgfQogCi0gICAgdmlydHVh
bCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkOyB9CisgICAgLy8gVHJhbnNwYXJlbmN5IExheWVycwogCi0gICAg
Ly8gUGl4ZWwgU25hcHBpbmcKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGlzSW5UcmFuc3BhcmVu
Y3lMYXllcigpIGNvbnN0IHsgcmV0dXJuIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgJiYg
bV90cmFuc3BhcmVuY3lMYXllckNvdW50OyB9CiAKLSAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Ci0g
ICAgICAgIFJvdW5kQWxsU2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwot
ICAgIH07Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9p
bnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsK
KyAgICAvLyBDbGlwcGluZwogCi0gICAgLy8gU2hhcGVzCisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVu
T2RkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0Jik7CiAKLSAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBib3Ro
IHN0cm9raW5nIGFuZCBmaWxsaW5nLgotICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1JlY3Qo
KSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCi0gICAgLy8gdXNpbmcg
YSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBjb3Jy
ZWN0Ci0gICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3Ip
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKKworICAgIEludFJl
Y3QgY2xpcEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9zdGF0ZS5j
bGlwQm91bmRzKCkpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CisgICAg
Ly8gU2hhcGVzCiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlw
c2VBc1BhdGgoZWxsaXBzZSk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYpID0gMDsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2Rl
ID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3RJ
bXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
R3JhZGllbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBC
bGVuZE1vZGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IHNldExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE1pdGVyTGlt
aXQoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUGF0aChjb25z
dCBQYXRoJikgPSAwOwogCi0gICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1lZGlhCisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSA9IDA7CiAKLSAgICBJbnRTaXplIGNvbXBhdGlibGVJbWFn
ZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhv
ZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPElt
YWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJp
bmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0g
c3RkOjpudWxsb3B0KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+
ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51
bGxvcHQpIGNvbnN0OworICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ry
b2tpbmcgYW5kIGZpbGxpbmcuCisgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3
aGljaCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKKyAgICAvLyB1c2luZyBhIDEt
cGl4ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QK
KyAgICAvLyBzdHJva2UgY29sb3IpLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29u
c3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0
ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8
UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxm
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkg
PSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpcnR1YWwgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpG
cm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQg
ZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmll
bnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIC8vIEZvY3VzIFJpbmdzCiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29u
c3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGls
ZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICAv
LyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBl
bHNld2hlcmU/CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNv
bnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBj
b25zdCBDb2xvciYpID0gMDsKKyNlbmRpZgogCisgICAgLy8gSW1hZ2VzCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFBvaW50
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwg
Y29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VP
cmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jl
c3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFn
ZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURy
YXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdTeXN0ZW1JbWFn
ZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKIAorICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJu
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogI2lmIEVOQUJMRShWSURFTykKICAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAjZW5kaWYKLQotICAgIC8vIENsaXBwaW5nCi0K
LSAgICB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxl
ID0gV2luZFJ1bGU6OkV2ZW5PZGQpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OwotCisg
ICAgCiAgICAgLy8gVGV4dAogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBGbG9hdFNpemUg
ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0
ZDo6bnVsbG9wdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMo
Y29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3Ro
aW5nTW9kZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNpc01h
cmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcm
IG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
PSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogCi0g
ICAgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
IGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBG
b250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIGRyYXdH
bHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290
aGluZ01vZGUpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBjb21wdXRl
VW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3Qm
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0g
U29saWRTdHJva2UpOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRT
dHJva2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwogCi0gICAgLy8g
VHJhbnNwYXJlbmN5IExheWVycwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgYm9vbCBpc0luVHJhbnNw
YXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiAobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4g
MCkgJiYgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JU
IEZsb2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3Qm
LCBib29sIHByaW50aW5nKTsKIAotICAgIC8vIEZvY3VzIFJpbmdzCisgICAgLy8gQ29tcGF0aWJs
ZSBJbWFnZUJ1ZmZlcgogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgLy8gRklYTUU6IENh
biB3ZSBoaWRlIHRoZXNlIGluIHRoZSBDRyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPwot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3Im
KSA9IDA7Ci0jZW5kaWYKKyAgICBJbnRTaXplIGNvbXBhdGlibGVJbWFnZUJ1ZmZlclNpemUoY29u
c3QgRmxvYXRTaXplJikgY29uc3Q7CiAKLSAgICAvLyBUcmFuc2Zvcm1zCisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
ZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAgIHZvaWQgc2NhbGUoZmxvYXQgcykg
eyBzY2FsZSh7IHMsIHMgfSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRT
aXplJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
ID0gMDsKLSAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNs
YXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KLSAgICB2b2lkIHRyYW5zbGF0ZShj
b25zdCBGbG9hdFBvaW50JiBwKSB7IHRyYW5zbGF0ZShwLngoKSwgcC55KCkpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisgICAgV0VCQ09SRV9F
WFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpv
cHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFs
PFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01l
dGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAgICBlbnVtIElu
Y2x1ZGVEZXZpY2VTY2FsZSB7IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUsIFBvc3NpYmx5
SW5jbHVkZURldmljZVNjYWxlIH07Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RN
KEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCA9
IDA7CisgICAgLy8gUGl4ZWwgU25hcHBpbmcKIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gYXBwbGll
cyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFraW5nIHRoZSBjb250
ZXh0IGNhcGFibGUgb2YKLSAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVsIGNvbnRleHQgZm9y
IGEgSGlEUEkgZW52aXJvbm1lbnQuCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KLSAgICBXRUJDT1JFX0VYUE9S
VCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9h
dFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAgZW51bSBSb3VuZGluZ01vZGUgewor
ICAgICAgICBSb3VuZEFsbFNpZGVzLAorICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMK
KyAgICB9OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgPSAwOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBv
aW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7
CiAKICAgICAvLyBMaW5rcwogCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5r
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0Jikg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcm
LCBjb25zdCBGbG9hdFBvaW50JikgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRl
cm5hbExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIC8vIENvbnRlbnRmdWwg
UGFpbnQgRGV0ZWN0aW9uCisjaWYgVVNFKENHKQorICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFrZSB0
aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNyb3Nz
LXBsYXRmb3JtPworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIHsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVu
dGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBjb250ZW5mdWxQYWludERldGVj
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZDsgfQorICAgIC8v
IEZJWE1FOiBDYW4gdGhpcyBiZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9yIHBhcmFt
ZXRlcj8gT3IganVzdCBiZSByZWFkIG9mZiB0aGUgY29udGV4dD8KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgeyB9CisjZW5kaWYKIAogICAgIC8vIEZJWE1F
OiBOb3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQgYmUgbW92
ZWQgZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCkBAIC01NDYsMTAgKzM1Miw3IEBAIHB1Ymxp
YzoKICAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFuZCBXaW5kb3dz
IENhaXJvIGJhY2tlbmRzLgogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CiAjZW5kaWYKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNUcmFuc3BhcmVu
Y3lMYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KKyAgICAKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgc3Ry
b2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTU2MSwxOTEgKzM2NCwxNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJu
QW5kU3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29u
c3Q7CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJv
b2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwg
RmxvYXRQb2ludCBwb2ludDIpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9z
dGF0ZTsKLQogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNUcmFuc3BhcmVuY3lM
YXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZSBtX3N0YXRlOwogICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRTdGF0ZSwgMT4gbV9zdGFjazsK
IAogICAgIHVuc2lnbmVkIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCB7IDAgfTsKICAgICBib29s
IG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgeyBmYWxzZSB9OwogfTsKIAotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQp
Ci0gICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAg
aWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwotICAg
IH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcigpCi0gICAgewotICAgICAg
ICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1f
c2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwotICAgICAgICBtX3Nh
dmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3RvcmUoKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQucmVz
dG9yZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotICAgIAot
ICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX2NvbnRleHQ7
IH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICBib29s
IG1fc2F2ZUFuZFJlc3RvcmU7Ci19OwotCi1jbGFzcyBUcmFuc3BhcmVuY3lMYXllclNjb3BlIHsK
LXB1YmxpYzoKLSAgICBUcmFuc3BhcmVuY3lMYXllclNjb3BlKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgZmxvYXQgYWxwaGEsIGJvb2wgYmVnaW5MYXllciA9IHRydWUpCi0gICAgICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9hbHBoYShhbHBoYSkKLSAgICAgICAgLCBtX2Jl
Z2FuTGF5ZXIoYmVnaW5MYXllcikKLSAgICB7Ci0gICAgICAgIGlmIChiZWdpbkxheWVyKQotICAg
ICAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgYmVnaW5MYXllcihmbG9hdCBhbHBoYSkKLSAgICB7Ci0gICAgICAg
IG1fYWxwaGEgPSBhbHBoYTsKLSAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIobV9hbHBoYSk7Ci0gICAgICAgIG1fYmVnYW5MYXllciA9IHRydWU7Ci0gICAgfQotICAgIAot
ICAgIH5UcmFuc3BhcmVuY3lMYXllclNjb3BlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2JlZ2Fu
TGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Ci0gICAgZmxv
YXQgbV9hbHBoYTsKLSAgICBib29sIG1fYmVnYW5MYXllcjsKLX07Ci0KLWNsYXNzIEdyYXBoaWNz
Q29udGV4dFN0YXRlU3RhY2tDaGVja2VyIHsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9zdGFja1NpemUoY29udGV4dC5zdGFja1NpemUo
KSkKLSAgICB7IH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIo
KQotICAgIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC5zdGFja1NpemUoKSAhPSBtX3N0YWNrU2l6
ZSkKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0ICVwIHN0YWNrIGNo
YW5nZWQgYnkgJWQiLCAmbV9jb250ZXh0LCAoaW50KW1fY29udGV4dC5zdGFja1NpemUoKSAtIChp
bnQpbV9zdGFja1NpemUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQm
IG1fY29udGV4dDsKLSAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKLX07Ci0KLWNsYXNzIEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgICAg
ICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkKLSAgICAgICAgLCBtX2N1cnJl
bnRJbnRlcnBvbGF0aW9uUXVhbGl0eShncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpKQotICAgICAgICAsIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKGludGVy
cG9sYXRpb25RdWFsaXR5VG9Vc2UgIT0gSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgJiYg
bV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gaW50ZXJwb2xhdGlvblF1YWxpdHlUb1Vz
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkKLSAg
ICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
aW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSk7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBzdGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFsaXR5PiBpbnRlcnBvbGF0aW9uUXVhbGl0
eSkKLSAgICAgICAgOiBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoZ3JhcGhpY3NDb250
ZXh0LCBpbnRlcnBvbGF0aW9uUXVhbGl0eSA/IGludGVycG9sYXRpb25RdWFsaXR5LnZhbHVlKCkg
OiBncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKCkKLSAgICB7Ci0gICAg
ICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIG1fZ3Jh
cGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkobV9jdXJyZW50SW50ZXJw
b2xhdGlvblF1YWxpdHkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQm
IG1fZ3JhcGhpY3NDb250ZXh0OwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1fY3VycmVudElu
dGVycG9sYXRpb25RdWFsaXR5OwotICAgIGJvb2wgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5n
ZWQ7Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLW5hbWVzcGFjZSBXVEYgewotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpNb2RlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVy
bmF0aXZlcywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3Bl
bGxpbmcsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1t
YXIsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3Jy
ZWN0aW9uUmVwbGFjZW1lbnQsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlcwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsK
LSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAgICBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTdHJva2VHcmFkaWVudENoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSwKLSAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEdyYWRpZW50Q2hhbmdl
LAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsUGF0
dGVybkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VDb2xvckNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGVDaGFuZ2UsCi0gICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxDb2xvckNoYW5nZSwKLSAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbFJ1bGVDaGFu
Z2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNoYWRv
d0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkFscGhhQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsCi0gICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkJsZW5kTW9kZUNoYW5n
ZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERy
YXdpbmdNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlLAotICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlCi0j
aWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICAgICAgLCBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZQotI2VuZGlmCi0g
ICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6U3Ryb2tl
U3R5bGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OlN0
cm9rZVN0eWxlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpOb1N0cm9rZSwKLSAgICBXZWJD
b3JlOjpTdHJva2VTdHlsZTo6U29saWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6
OkRvdHRlZFN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlLAot
ICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEb3VibGVTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ry
b2tlU3R5bGU6OldhdnlTdHJva2UKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51
bVRyYWl0czxXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBF
bnVtVmFsdWVzPAotICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGUsCi0gICAgICAgIFdl
YkNvcmU6OlRleHREcmF3aW5nTW9kZTo6RmlsbCwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdp
bmdNb2RlOjpTdHJva2UKLSAgICA+OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA4ZDVmOTg4MTcwYjI3MmYzOGRlNjhhZmI4YTkxNjE4NjUwNzMzMjMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRT
dGF0ZS5jcHAKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFN0YXRlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IENoYW5nZUZsYWdzJiBj
aGFuZ2VGbGFncywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQorICAgIDogbV9j
bGlwQm91bmRzKGluaXRpYWxDVE0ubWFwUmVjdChpbml0aWFsQ2xpcCkpCisgICAgLCBtX2NoYW5n
ZUZsYWdzKGNoYW5nZUZsYWdzKQorICAgICwgbV9jdG0oaW5pdGlhbENUTSkKK3sKK30KKworRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwQm91bmRzKCkgY29uc3QKK3sKKyAgICBp
ZiAoYXV0byBpbnZlcnNlID0gbV9jdG0uaW52ZXJzZSgpKQorICAgICAgICByZXR1cm4gaW52ZXJz
ZS0+bWFwUmVjdChtX2NsaXBCb3VuZHMpOworCisgICAgLy8gSWYgdGhlIENUTSBpcyBub3QgaW52
ZXJ0aWJsZSwgcmV0dXJuIHRoZSBvcmlnaW5hbCByZWN0LgorICAgIC8vIFRoaXMgbWF0Y2hlcyBD
R1JlY3RBcHBseUludmVyc2VBZmZpbmVUcmFuc2Zvcm0gYmVoYXZpb3IuCisgICAgcmV0dXJuIG1f
Y2xpcEJvdW5kczsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25seVByaW1p
dGl2ZUNoYW5nZXMoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdGV4cHIgQ2hhbmdlRmxhZ3Mg
cHJpbWl0aXZlQ2hhbmdlRmxhZ3MgeyBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgQ2hhbmdlOjpT
dHJva2VCcnVzaCwgQ2hhbmdlOjpGaWxsQnJ1c2ggfTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
ICE9IChtX2NoYW5nZUZsYWdzICYgcHJpbWl0aXZlQ2hhbmdlRmxhZ3MpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhDaGFuZ2U6OlN0cm9r
ZUJydXNoKSAmJiAhbV9zdHJva2VCcnVzaC5pc1ByaW1pdGl2ZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhDaGFuZ2U6OkZpbGxCcnVz
aCkgJiYgIW1fZmlsbEJydXNoLmlzUHJpbWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJn
ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKQoreworICAgIGF1dG8g
bWVyZ2VDaGFuZ2UgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmIChvdGhlci5tX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KGNoYW5nZSkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9wZXJ0
eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgQVNTRVJUKG1fY2xpcEJvdW5kcyA9PSBvdGhlci5tX2NsaXBCb3VuZHMpOwor
CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdl
OjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9maWxsQnJ1c2gpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpOworCisgICAg
bWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdl
OjpTdHJva2VUaGlja25lc3MsICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zdHJva2VUaGlja25lc3MpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U3Ryb2tlU3R5bGUs
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUp
OworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZUNoYW5nZShD
aGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2xpbmVEYXNoKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVKb2luLCAgICAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKTsKKyAg
ICBtZXJnZUNoYW5nZShDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hh
bmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkRyb3BTaGFkb3cs
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cp
OworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hh
bmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3RleHREcmF3aW5nTW9kZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZEFudGlh
bGlhcywgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlh
bGlhcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAg
bWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIG1l
cmdlQ2hhbmdlKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NV
UFBPUlQpCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5k
aWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VEaWZmcyhjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZURpZmYgPSBbJl0oQ2hh
bmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAg
ICAgIGlmICh0aGlzLT4qcHJvcGVydHkgIT0gb3RoZXIuKnByb3BlcnR5KSB7CisgICAgICAgICAg
ICB0aGlzLT4qcHJvcGVydHkgPSBvdGhlci4qcHJvcGVydHk7CisgICAgICAgICAgICBtX2NoYW5n
ZUZsYWdzLmFkZChjaGFuZ2UpOworICAgICAgICB9CisgICAgfTsKKworICAgIG1lcmdlRGlmZihD
aGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9jdG0pOworICAgIAorICAgIG1lcmdlRGlmZihDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAgIG1l
cmdlRGlmZihDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTdHJva2VC
cnVzaCwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1
c2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpOworICAgIG1lcmdlRGlm
ZihDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lQ2FwLCAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCk7Cisg
ICAgbWVyZ2VEaWZmKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5l
Sm9pbiwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpv
aW4pOworICAgIG1lcmdlRGlmZihDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KTsKKworICAgIG1lcmdlRGlmZihD
aGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpEcm9wU2hhZG93LCAg
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisK
KyAgICBtZXJnZURpZmYoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHksICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpUZXh0RHJhd2luZ01v
ZGUsICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2Rl
KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMpOworICAgIG1lcmdlRGlm
ZihDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMsICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lm
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6VXNlRGFy
a0FwcGVhcmFuY2UsICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtB
cHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCitUZXh0U3RyZWFtJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICBhdXRvIGR1bXAgPSBbJl0oQ2hh
bmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5LCBjb25zdCBT
dHJpbmcmIG5hbWUpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdl
KSkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eShuYW1lLCB0aGlzLT4qcHJvcGVydHkpOwor
ICAgIH07CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImNsaXAtYm91bmRzIiwgbV9jbGlwQm91bmRz
KTsKKworICAgIGR1bXAoQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSwgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3Rt
Iik7CisKKyAgICBkdW1wKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgImZp
bGwtYnJ1c2giKTsKKyAgICBkdW1wKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSwgICAgICAgICAgICAgICAgICAg
ICAgImZpbGwtcnVsZSIpOworCisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gsICAgICAgICAg
ICAgICAgICAgICJzdHJva2UtYnJ1c2giKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlVGhpY2tu
ZXNzLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25l
c3MsICAgICAgICAgICAgICAgInN0cm9rZS10aGlja25lc3MiKTsKKyAgICBkdW1wKENoYW5nZTo6
U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9z
dHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgInN0cm9rZS1zdHlsZSIpOworCisgICAgZHVt
cChDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAgICJsaW5lLWNhcCIpOworICAg
IGR1bXAoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2xpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAibGluZS1kYXNoIik7
CisgICAgZHVtcChDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICJsaW5lLWpv
aW4iKTsKKyAgICBkdW1wKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgIm1p
dGVyLWxpbWl0Iik7CisKKyAgICBkdW1wKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCAgICAgICAgICAg
ICAgICAgImNvbXBvc2l0ZS1tb2RlIik7CisgICAgZHVtcChDaGFuZ2U6OkRyb3BTaGFkb3csICAg
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdywgICAg
ICAgICAgICAgICAgICAgICJkcm9wLXNoYWRvdyIpOworCisgICAgZHVtcChDaGFuZ2U6OkFscGhh
LCAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEs
ICAgICAgICAgICAgICAgICAgICAgICAgICJhbHBoYSIpOworICAgIGR1bXAoQ2hhbmdlOjpJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAiaW1hZ2UtaW50ZXJwb2xhdGlvbi1xdWFsaXR5Iik7
CisgICAgZHVtcChDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAgICJ0ZXh0LWRy
YXdpbmctbW9kZSIpOworCisgICAgZHVtcChDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzLCAgICAgICAg
ICAgICAgICJzaG91bGQtYW50aWFsaWFzIik7CisgICAgZHVtcChDaGFuZ2U6OlNob3VsZFNtb290
aEZvbnRzLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3Ro
Rm9udHMsICAgICAgICAgICAgICJzaG91bGQtc21vb3RoLWZvbnRzIik7CisgICAgZHVtcChDaGFu
Z2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICJzaG91bGQtc3VicGl4ZWwtcXVhbnRp
emUtZm9udHMiKTsKKyAgICBkdW1wKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAg
ICAgInNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMiKTsKKyAgICBkdW1wKENoYW5nZTo6RHJhd0x1
bWluYW5jZU1hc2ssICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVt
aW5hbmNlTWFzaywgICAgICAgICAgICAgImRyYXctbHVtaW5hbmNlLW1hc2siKTsKKyNpZiBIQVZF
KE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGR1bXAoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5j
ZSwgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNl
LCAgICAgICAgICAgICAidXNlLWRhcmstYXBwZWFyYW5jZSIpOworI2VuZGlmCisgICAgcmV0dXJu
IHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hMTM3Yjc0MzY4MjM4ZDAxZmM2YTQ1OWY1MDE1MDUzMjg3ZjFjMzJhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGUuaApAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VCcnVzaC5oIgor
I2luY2x1ZGUgIldpbmRSdWxlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKK3B1YmxpYzoK
KyAgICBlbnVtIGNsYXNzIENoYW5nZSA6IHVpbnQzMl90IHsKKyAgICAgICAgQ1RNICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMSA8PCAwLAorCisgICAgICAgIEZpbGxCcnVzaCAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMSwKKyAgICAgICAgRmlsbFJ1bGUgICAgICAgICAgICAgICAgICAgID0g
MSA8PCAyLAorCisgICAgICAgIFN0cm9rZUJydXNoICAgICAgICAgICAgICAgICA9IDEgPDwgMywK
KyAgICAgICAgU3Ryb2tlVGhpY2tuZXNzICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAgICBT
dHJva2VTdHlsZSAgICAgICAgICAgICAgICAgPSAxIDw8IDUsCisKKyAgICAgICAgTGluZUNhcCAg
ICAgICAgICAgICAgICAgICAgID0gMSA8PCA2LAorICAgICAgICBMaW5lRGFzaCAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDcsCisgICAgICAgIExpbmVKb2luICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgOCwKKyAgICAgICAgTWl0ZXJMaW1pdCAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAor
CisgICAgICAgIENvbXBvc2l0ZU1vZGUgICAgICAgICAgICAgICA9IDEgPDwgMTAsCisgICAgICAg
IERyb3BTaGFkb3cgICAgICAgICAgICAgICAgICA9IDEgPDwgMTEsCisKKyAgICAgICAgQWxwaGEg
ICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxMiwKKyAgICAgICAgSW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSAgID0gMSA8PCAxMywKKyAgICAgICAgVGV4dERyYXdpbmdNb2RlICAgICAgICAg
ICAgID0gMSA8PCAxNCwKKworICAgICAgICBTaG91bGRBbnRpYWxpYXMgICAgICAgICAgICAgPSAx
IDw8IDE1LAorICAgICAgICBTaG91bGRTbW9vdGhGb250cyAgICAgICAgICAgPSAxIDw8IDE2LAor
ICAgICAgICBTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSAxIDw8IDE3LAorICAgICAgICBT
aGFkb3dzSWdub3JlVHJhbnNmb3JtcyAgICAgPSAxIDw8IDE4LAorICAgICAgICBEcmF3THVtaW5h
bmNlTWFzayAgICAgICAgICAgPSAxIDw8IDE5LAorI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCisgICAgICAgIFVzZURhcmtBcHBlYXJhbmNlICAgICAgICAgICA9IDEgPDwgMjAsCisjZW5k
aWYKKyAgICB9OworICAgIHVzaW5nIENoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47CisK
KyAgICBzdGF0aWMgY29uc3RleHByIENoYW5nZUZsYWdzIGluaXRpYWxDaGFuZ2VGbGFncyA9IHsg
Q2hhbmdlOjpGaWxsQnJ1c2gsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsIENoYW5nZTo6U3Ryb2tlVGhp
Y2tuZXNzIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25z
dCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwQm91bmRzLCBjb25zdCBDaGFuZ2VGbGFncyYgPSB7IH0s
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSk7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBGbG9hdFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZvaWQgY2xpcChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpIHsgbV9jbGlwQm91bmRzLmludGVyc2VjdChtX2N0bS5tYXBSZWN0
KHJlY3QpKTsgfQorCisgICAgQ2hhbmdlRmxhZ3MgY2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hhbmdlRmxhZ3M7IH0KKyAgICB2b2lkIGNsZWFyQ2hhbmdlcygpIHsgbV9jaGFuZ2VGbGFncyA9
IHsgfTsgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3RtOyB9CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pIHsgbV9j
dG0gPSBjdG07IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6Q1RNKTsgfQorCisgICAgU291cmNl
QnJ1c2gmIGZpbGxCcnVzaCgpIHsgcmV0dXJuIG1fZmlsbEJydXNoOyB9CisgICAgY29uc3QgU291
cmNlQnJ1c2gmIGZpbGxCcnVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEJydXNoOyB9CisgICAg
dm9pZCBzZXRGaWxsQnJ1c2goY29uc3QgU291cmNlQnJ1c2gmIGZpbGxCcnVzaCkgeyBtX2ZpbGxC
cnVzaCA9IGZpbGxCcnVzaDsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9
CisgICAgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fZmlsbEJydXNoLnNldEdyYWRp
ZW50KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxhZ3MuYWRk
KENoYW5nZTo6RmlsbEJydXNoKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRl
cm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBt
X2ZpbGxCcnVzaC5zZXRQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtKTsg
bV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisKKyAgICBXaW5kUnVsZSBm
aWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbFJ1bGU7IH0KKyAgICB2b2lkIHNldEZpbGxS
dWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fZmlsbFJ1bGUgPSBmaWxsUnVsZTsgbV9jaGFuZ2VG
bGFncy5hZGQoQ2hhbmdlOjpGaWxsUnVsZSk7IH0KKworICAgIFNvdXJjZUJydXNoJiBzdHJva2VC
cnVzaCgpIHsgcmV0dXJuIG1fc3Ryb2tlQnJ1c2g7IH0KKyAgICBjb25zdCBTb3VyY2VCcnVzaCYg
c3Ryb2tlQnJ1c2goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJydXNoOyB9CisgICAgdm9pZCBz
ZXRTdHJva2VCcnVzaChjb25zdCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1c2gpIHsgbV9zdHJva2VC
cnVzaCA9IHN0cm9rZUJydXNoOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNo
KTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1c2gu
c2V0R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VG
bGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBhdHRl
cm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3Bh
Y2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsgfQor
CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VUaGlj
a25lc3M7IH0KKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25l
c3MpIHsgbV9zdHJva2VUaGlja25lc3MgPSBzdHJva2VUaGlja25lc3M7IG1fY2hhbmdlRmxhZ3Mu
YWRkKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKTsgfQorCisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tl
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZVN0eWxlOyB9CisgICAgdm9pZCBzZXRTdHJv
a2VTdHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkgeyBtX3N0cm9rZVN0eWxlID0gc3Ryb2tl
U3R5bGU7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6U3Ryb2tlU3R5bGUpOyB9CisKKyAgICBM
aW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KKyAgICB2b2lkIHNl
dExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKSB7IG1fbGluZUNhcCA9IGxpbmVDYXA7IG1fY2hhbmdl
RmxhZ3MuYWRkKENoYW5nZTo6TGluZUNhcCk7IH0KKworICAgIGNvbnN0IExpbmVEYXNoJiBsaW5l
RGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZURhc2g7IH0KKyAgICB2b2lkIHNldExpbmVEYXNo
KExpbmVEYXNoJiYgbGluZURhc2gpIHsgbV9saW5lRGFzaCA9IFdURk1vdmUobGluZURhc2gpOyBt
X2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkxpbmVEYXNoKTsgfQorCisgICAgTGluZUpvaW4gbGlu
ZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9CisgICAgdm9pZCBzZXRMaW5lSm9p
bihMaW5lSm9pbiBsaW5lSm9pbikgeyBtX2xpbmVKb2luID0gbGluZUpvaW47IG1fY2hhbmdlRmxh
Z3MuYWRkKENoYW5nZTo6TGluZUpvaW4pOyB9CisKKyAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29u
c3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyTGltaXQpIHsgbV9taXRlckxpbWl0ID0gbWl0ZXJMaW1pdDsgbV9jaGFuZ2VGbGFncy5h
ZGQoQ2hhbmdlOjpNaXRlckxpbWl0KTsgfQorICAgIAorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9z
aXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlTW9kZTsgfQorICAgIHZvaWQgc2V0
Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUpIHsgbV9jb21wb3NpdGVN
b2RlID0gY29tcG9zaXRlTW9kZTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpDb21wb3NpdGVN
b2RlKTsgfQorICAgIAorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7
IHJldHVybiBtX2Ryb3BTaGFkb3c7IH0KKyAgICB2b2lkIHNldERyb3BTaGFkb3coY29uc3QgRHJv
cFNoYWRvdyYgZHJvcFNoYWRvdykgeyBtX2Ryb3BTaGFkb3cgPSBkcm9wU2hhZG93OyBtX2NoYW5n
ZUZsYWdzLmFkZChDaGFuZ2U6OkRyb3BTaGFkb3cpOyB9CisKKyAgICBmbG9hdCBhbHBoYSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWxwaGE7IH0KKyAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7
IG1fYWxwaGEgPSBhbHBoYTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpBbHBoYSk7IH0KKyAg
ICAKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisgICAgdm9pZCBz
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkpIHsgbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KTsgfQorICAgIAorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRE
cmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9CisgICAgdm9p
ZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2Rl
KSB7IG1fdGV4dERyYXdpbmdNb2RlID0gdGV4dERyYXdpbmdNb2RlOyBtX2NoYW5nZUZsYWdzLmFk
ZChDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSk7IH0KKworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFz
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRBbnRpYWxpYXM7IH0KKyAgICB2b2lkIHNldFNob3Vs
ZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3Nob3VsZEFudGlhbGlhcyA9IHNo
b3VsZEFudGlhbGlhczsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMp
OyB9CisKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRTbW9vdGhGb250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBzaG91
bGRTbW9vdGhGb250cykgeyBtX3Nob3VsZFNtb290aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7
IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMpOyB9CisKKyAgICBi
b29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IG1fY2hhbmdl
RmxhZ3MuYWRkKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsgfQorCisgICAg
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM7IH0KKyAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJv
b2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9
IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKTsgfQorICAgIAorICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2so
KSBjb25zdCB7IHJldHVybiBtX2RyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgdm9pZCBzZXREcmF3
THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fZHJhd0x1bWluYW5jZU1h
c2sgPSBkcmF3THVtaW5hbmNlTWFzazsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpEcmF3THVt
aW5hbmNlTWFzayk7IH0KKworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgYm9v
bCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlRGFya0FwcGVhcmFuY2U7
IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2Up
IHsgbV91c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOyBtX2NoYW5nZUZsYWdz
LmFkZChDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlKTsgfQorI2VuZGlmCisKKyAgICBib29sIGhh
c09ubHlQcmltaXRpdmVDaGFuZ2VzKCkgY29uc3Q7CisgICAgdm9pZCBtZXJnZUNoYW5nZXMoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKTsKKyAgICB2b2lkIG1lcmdlRGlmZnMoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKTsKKworICAgIFdURjo6VGV4dFN0cmVhbSYg
ZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4gZGVjb2RlKERl
Y29kZXImKTsKKworcHJpdmF0ZToKKyAgICBGbG9hdFJlY3QgbV9jbGlwQm91bmRzOworCisgICAg
Q2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKKworICAgIEFmZmluZVRyYW5zZm9ybSBtX2N0bTsK
KworICAgIFNvdXJjZUJydXNoIG1fZmlsbEJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgV2lu
ZFJ1bGUgbV9maWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07CisKKyAgICBTb3VyY2VCcnVz
aCBtX3N0cm9rZUJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgZmxvYXQgbV9zdHJva2VUaGlj
a25lc3MgeyAwIH07CisgICAgU3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZSB7IFNvbGlkU3Ryb2tl
IH07CisKKyAgICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1dHQgfTsKKyAgICBMaW5l
RGFzaCBtX2xpbmVEYXNoOworICAgIExpbmVKb2luIG1fbGluZUpvaW4geyBMaW5lSm9pbjo6TWl0
ZXIgfTsKKyAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAwIH07CisKKyAgICBDb21wb3NpdGVNb2Rl
IG1fY29tcG9zaXRlTW9kZSB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1v
ZGU6Ok5vcm1hbCB9OworICAgIERyb3BTaGFkb3cgbV9kcm9wU2hhZG93OworCisgICAgZmxvYXQg
bV9hbHBoYSB7IDEgfTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OworICAgIFRleHRE
cmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdpbmdNb2RlOjpGaWxs
IH07CisKKyAgICBib29sIG1fc2hvdWxkQW50aWFsaWFzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9z
aG91bGRTbW9vdGhGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2RyYXdMdW1pbmFuY2VNYXNrIHsgZmFsc2UgfTsKKyNpZiBI
QVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgbV91c2VEYXJrQXBwZWFyYW5jZSB7
IGZhbHNlIH07CisjZW5kaWYKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBhdXRvIGVuY29kZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hh
bmdlKSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdGhpcy0+KnByb3BlcnR5OworICAgIH07CisK
KyAgICBlbmNvZGVyIDw8IG1fY2xpcEJvdW5kczsKKworICAgIGVuY29kZXIgPDwgbV9jaGFuZ2VG
bGFnczsKKworICAgIGVuY29kZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgZW5jb2RlKENoYW5nZTo6
RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2ZpbGxCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAgIGVuY29k
ZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlVGhpY2tu
ZXNzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNr
bmVzcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIGVuY29kZShD
aGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIGVu
Y29kZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgZW5jb2RlKENoYW5nZTo6TWl0ZXJMaW1pdCwg
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQp
OworCisgICAgZW5jb2RlKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIGVuY29kZShDaGFu
Z2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkFscGhhLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7CisgICAgZW5j
b2RlKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIGVuY29kZShDaGFu
Z2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkQW50aWFs
aWFzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlh
bGlhcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBlbmNv
ZGUoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBlbmNvZGUoQ2hh
bmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIGVuY29kZShDaGFuZ2U6OkRyYXdM
dW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3
THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBlbmNv
ZGUoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3RlbXBsYXRlPGNs
YXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgYXV0byBkZWNv
ZGUgPSBbJl0oR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDaGFuZ2UgY2hhbmdlLCBhdXRv
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKCFzdGF0ZS5t
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgICAgICB1c2luZyBQcm9wZXJ0eVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZl
cmVuY2U8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPigpLipwcm9w
ZXJ0eSk+Ojp0eXBlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFByb3BlcnR5VHlwZT4gdmFsdWU7
CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RhdGUuKnByb3BlcnR5ID0gKnZhbHVlOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGNsaXBCb3VuZHM7CisgICAgZGVjb2RlciA+PiBjbGlwQm91bmRzOworICAgIGlmICghY2xp
cEJvdW5kcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOworICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7
CisgICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwor
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlKCpjbGlwQm91bmRzLCAqY2hhbmdlRmxhZ3Mp
OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkZpbGxCcnVzaCwg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
ZmlsbFJ1bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNv
ZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcykpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ry
b2tlU3R5bGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tl
U3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUo
c3RhdGUsIENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZUNhcCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpNaXRl
ckxpbWl0LCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxp
bWl0KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0
YXRlLCBDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6QWxwaGEsICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2lt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91
bGRBbnRpYWxpYXMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRB
bnRpYWxpYXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2Rl
KHN0YXRlLCBDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0
YXRlLCBDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFz
aywgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzaykp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKKworICAgIHJldHVybiBzdGF0ZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6Q1RNLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbFJ1bGUsCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gsCisgICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywKKyAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGUsCisKKyAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcCwKKyAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2gsCisgICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luLAorICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0LAor
CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0
ZU1vZGUsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRy
b3BTaGFkb3csCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6QWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwKKworICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsCisgICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLAor
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLAorICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywKKyNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZQorI2VuZGlmCisgICAgPjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3MjEzMjg1
MjYxZTY5MGNhMzA2MGQ3ZTAyNmU1MGU1MmVlYTU5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgK
QEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChj
b250ZXh0KQorICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAg
eworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5z
YXZlKCk7CisgICAgfQorICAgIAorICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgbV9jb250ZXh0
LnJlc3RvcmUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5zYXZlKCk7Cisg
ICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9y
ZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1f
Y29udGV4dC5yZXN0b3JlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
Jm1fY29udGV4dDsgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0
OworICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKK307CisKK2NsYXNzIFRyYW5zcGFyZW5jeUxh
eWVyU2NvcGUgeworcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKKyAg
ICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX2FscGhhKGFscGhhKQorICAg
ICAgICAsIG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKGJlZ2lu
TGF5ZXIpCisgICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2Fs
cGhhKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQorICAg
IHsKKyAgICAgICAgbV9hbHBoYSA9IGFscGhhOworICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQorICAgIHsKKyAgICAgICAg
aWYgKG1fYmVnYW5MYXllcikKKyAgICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lM
YXllcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4
dDsKKyAgICBmbG9hdCBtX2FscGhhOworICAgIGJvb2wgbV9iZWdhbkxheWVyOworfTsKKworY2xh
c3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgeworcHVibGljOgorICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAg
ICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0
LnN0YWNrU2l6ZSgpKQorICAgIHsgfQorCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9z
dGFja1NpemUpCisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBz
dGFjayBjaGFuZ2VkIGJ5ICVkIiwgJm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXpl
KCkgLSAoaW50KW1fc3RhY2tTaXplKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3ND
b250ZXh0JiBtX2NvbnRleHQ7CisgICAgdW5zaWduZWQgbV9zdGFja1NpemU7Cit9OworCitjbGFz
cyBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0
IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkK
KyAgICAgICAgOiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgICAgICwg
bV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSkKKyAgICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdl
ZChpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZh
dWx0ICYmIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFs
aXR5VG9Vc2UpCisgICAgeworICAgICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5n
ZWQpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpOworICAgIH0KKworICAgIGV4cGxpY2l0
IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgc3RkOjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlv
blF1YWxpdHkpCisgICAgICAgIDogSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBo
aWNzQ29udGV4dCwgaW50ZXJwb2xhdGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52
YWx1ZSgpIDogZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAg
ICB7CisgICAgfQorCisgICAgfkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCisgICAg
eworICAgICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAg
ICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVu
dEludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3ND
b250ZXh0JiBtX2dyYXBoaWNzQ29udGV4dDsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1
cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2VkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCAxNWRmMWRm
ZGI2ZjNhMTZhZDVlYWY2NDcyNjFmY2ZjNGI3YTkzYWI0Li41ZTkwNjE1YjNjNmYxYmJjZWE1NDhh
MmRhY2FkNDVjYWRlYTA2YWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcApAQCAtMTY2LDYgKzE2NiwxMSBAQCBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lQ2FwIGNhcFN0eWxlKQogICAgIHJldHVy
biB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZURh
c2gpCit7CisgICAgcmV0dXJuIHRzOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBMaW5lSm9pbiBqb2luU3R5bGUpCiB7CiAgICAgc3dpdGNoIChqb2luU3R5bGUp
IHsKQEAgLTE4Miw0ICsxODcsMjQgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgTGluZUpvaW4gam9pblN0eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSW50ZXJwb2xhdGlvblF1YWxpdHkpCit7Cisg
ICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBUZXh0RHJhd2luZ01vZGUpCit7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVNb2RlKQoreworICAgIHJldHVybiB0
czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgRHJvcFNoYWRv
dykKK3sKKyAgICByZXR1cm4gdHM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAppbmRleCA0
ZDIwNGU5N2U1YzU0NGQ3NzZiZmE3ZjMwYWFjYzFiN2M0NjNlMGUwLi5hMTkwODEyMGU4ZjhjNGIw
NTJmNTQwZTBmZmYzYjYyYTQ5YTU3ZjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw5IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIKKyNpbmNs
dWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9F
bnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTczLDYgKzc2LDc5IEBA
IGVudW0gY2xhc3MgQmxlbmRNb2RlIDogdWludDhfdCB7CiAgICAgUGx1c0xpZ2h0ZXIKIH07CiAK
K3N0cnVjdCBDb21wb3NpdGVNb2RlIHsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBvcDsKKyAgICBC
bGVuZE1vZGUgYmxlbmRNb2RlOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbXBvc2l0
ZU1vZGUmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wID09IG90aGVyLm9wICYmIGJs
ZW5kTW9kZSA9PSBvdGhlci5ibGVuZE1vZGU7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVNb2RlPiBkZWNvZGUo
RGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29tcG9zaXRl
TW9kZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBv
cDsKKyAgICBlbmNvZGVyIDw8IGJsZW5kTW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gQ29tcG9zaXRlTW9kZTo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4g
b3A7CisgICAgZGVjb2RlciA+PiBvcDsKKyAgICBpZiAoIW9wKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKKyAg
ICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKKyAgICBpZiAoIWJsZW5kTW9kZSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm9wLCAqYmxlbmRNb2RlIH0gfTsK
K30KKworc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAgICBlbnVtIGNsYXNzIE1v
ZGUgOiB1aW50OF90IHsKKyAgICAgICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFs
dGVybmF0aXZlcywKKyAgICAgICAgU3BlbGxpbmcsCisgICAgICAgIEdyYW1tYXIsCisgICAgICAg
IEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZl
cworICAgIH0gbW9kZTsKKyAgICBib29sIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2Ug
fTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxE
b2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1vZGU7CisgICAgZW5jb2Rl
ciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFs
PE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxk
VXNlRGFya0FwcGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5j
ZTsKKyAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqbW9kZSwgKnNob3VsZFVzZURhcmtBcHBlYXJh
bmNlIH0gfTsKK30KKwogZW51bSBjbGFzcyBHcmFkaWVudFNwcmVhZE1ldGhvZCA6IHVpbnQ4X3Qg
ewogICAgIFBhZCwKICAgICBSZWZsZWN0LApAQCAtOTMsNiArMTY5LDQyIEBAIGVudW0gY2xhc3Mg
TGluZUNhcCA6IHVpbnQ4X3QgewogICAgIFNxdWFyZQogfTsKIAorc3RydWN0IExpbmVEYXNoIHsK
KyAgICBEYXNoQXJyYXkgZGFzaGVzOworICAgIGZsb2F0IG9mZnNldDsKKyAgICAKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGluZURhc2g+IGRlY29k
ZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExpbmVEYXNo
JiBhLCBjb25zdCBMaW5lRGFzaCYgYikKK3sKKyAgICByZXR1cm4gYS5kYXNoZXMgPT0gYi5kYXNo
ZXMgJiYgYS5vZmZzZXQgPT0gYi5vZmZzZXQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IGRhc2hlczsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGluZURhc2g+IExpbmVEYXNoOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERhc2hBcnJheT4gZGFzaGVz
OworICAgIGRlY29kZXIgPj4gZGFzaGVzOworICAgIGlmICghZGFzaGVzKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gb2Zmc2V0OworICAg
IGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpkYXNoZXMpLCAqb2Zmc2V0IH0g
fTsKK30KKwogZW51bSBjbGFzcyBMaW5lSm9pbiA6IHVpbnQ4X3QgewogICAgIE1pdGVyLAogICAg
IFJvdW5kLApAQCAtMTA1LDYgKzIxNyw3NiBAQCBlbnVtIEhvcml6b250YWxBbGlnbm1lbnQgewog
ICAgIEFsaWduSENlbnRlcgogfTsKIAorLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1
c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisvLyBJdCBoYXMgZGlmZmVy
ZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9k
ZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9OworCitzdHJ1Y3QgRHJvcFNo
YWRvdyB7CisgICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICBmbG9hdCBibHVyUmFkaXVzIHsgMCB9
OworICAgIENvbG9yIGNvbG9yOworICAgIFNoYWRvd1JhZGl1c01vZGUgcmFkaXVzTW9kZSB7IFNo
YWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKKyAgICAKKyAgICBib29sIGlzVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBpc0JsdXJyZWQoKSBj
b25zdCB7IHJldHVybiBpc1Zpc2libGUoKSAmJiBibHVyUmFkaXVzOyB9CisgICAgYm9vbCBoYXNP
dXRzZXRzKCkgY29uc3QgeyByZXR1cm4gaXNCbHVycmVkKCkgfHwgKGlzVmlzaWJsZSgpICYmICFv
ZmZzZXQuaXNaZXJvKCkpOyB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IGRlY29kZShEZWNvZGVyJik7Cit9OworCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERyb3BTaGFkb3cmIGEsIGNvbnN0IERyb3BTaGFk
b3cmIGIpCit7CisgICAgcmV0dXJuIGEub2Zmc2V0ID09IGIub2Zmc2V0ICYmIGEuYmx1clJhZGl1
cyA9PSBiLmJsdXJSYWRpdXMgJiYgYS5jb2xvciA9PSBiLmNvbG9yICYmIGEucmFkaXVzTW9kZSA9
PSBiLnJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERyb3BT
aGFkb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
b2Zmc2V0OworICAgIGVuY29kZXIgPDwgYmx1clJhZGl1czsKKyAgICBlbmNvZGVyIDw8IGNvbG9y
OworICAgIGVuY29kZXIgPDwgcmFkaXVzTW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gRHJvcFNoYWRvdzo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IG9mZnNldDsKKyAgICBk
ZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJsdXJSYWRpdXM7CisgICAgZGVj
b2RlciA+PiBibHVyUmFkaXVzOworICAgIGlmICghYmx1clJhZGl1cykKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGNvbG9yOworICAgIGRl
Y29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4gcmFkaXVzTW9kZTsK
KyAgICBkZWNvZGVyID4+IHJhZGl1c01vZGU7CisgICAgaWYgKCFyYWRpdXNNb2RlKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb2Zmc2V0LCAqYmx1clJh
ZGl1cywgKmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07Cit9CisKK2VudW0gU3Ryb2tlU3R5bGUgewor
ICAgIE5vU3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tlLAorICAgIERvdHRlZFN0cm9rZSwKKyAgICBE
YXNoZWRTdHJva2UsCisgICAgRG91YmxlU3Ryb2tlLAorICAgIFdhdnlTdHJva2UsCit9OworCiBl
bnVtIFRleHRCYXNlbGluZSB7CiAgICAgQWxwaGFiZXRpY1RleHRCYXNlbGluZSwKICAgICBUb3BU
ZXh0QmFzZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwyOCBAQCBlbnVtIFRleHRBbGlnbiB7CiAgICAg
UmlnaHRUZXh0QWxpZ24KIH07CiAKLVN0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoV2ViQ29y
ZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1TdHJpbmcgYmxlbmRN
b2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwotYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBT
dHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKLWJvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVu
ZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yJiwgV2Vi
Q29yZTo6QmxlbmRNb2RlJik7CitlbnVtIGNsYXNzIFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3Qg
eworICAgIEZpbGwgPSAxIDw8IDAsCisgICAgU3Ryb2tlID0gMSA8PCAxLAorfTsKIAotV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdl
YkNvcmU6OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IpOwotV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IFdpbmRSdWxlKTsKK3VzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0gT3B0aW9uU2V0PFRleHRE
cmF3aW5nTW9kZT47CisKK1N0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoQ29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSk7CitTdHJpbmcgYmxlbmRNb2RlTmFtZShCbGVuZE1vZGUpOworYm9v
bCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBCbGVuZE1vZGUmKTsKK2Jvb2wgcGFyc2VD
b21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENvbXBvc2l0ZU9wZXJhdG9y
JiwgQmxlbmRNb2RlJik7CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBCbGVuZE1vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENvbXBvc2l0ZU9wZXJhdG9y
KTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBDb21wb3NpdGVNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CiBXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
TGluZUNhcCk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgTGluZURhc2gpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVKb2luKTsKK1dFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBUZXh0RHJhd2lu
Z01vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBEcm9wU2hhZG93KTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCkBAIC0yMTksNCArNDEzLDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1U
cmFpdHM8V2ViQ29yZTo6TGluZUpvaW4+IHsKICAgICA+OwogfTsKIAordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4geworICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCisgICAgV2ViQ29yZTo6U3Ry
b2tlU3R5bGU6Ok5vU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9r
ZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAorICAgIFdlYkNvcmU6
OlN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRv
dWJsZVN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQorICAgID47
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5n
TW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6
OlRleHREcmF3aW5nTW9kZSwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxs
LAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQorICAgID47Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGlu
ZVN0eWxlOjpNb2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKKyAgICBXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFs
dGVybmF0aXZlcywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6
U3BlbGxpbmcsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6Okdy
YW1tYXIsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9j
b3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlcworICAgID47Cit9OworCiB9IC8vIG5hbWVz
cGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05h
bWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IDRlMDcxZjcyZjM1YmU4YTU4
ZmM0Y2Q1NzdhMTQ1NmRlMTc0NjY4MmMuLjQxYjA1MTFhOGY3OGExNzliMzA0Y2Y4OWQ0MTAzZTM1
ZGUzZTEyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05h
bWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcApAQCAtNDQsNyArNDQsNyBAQCBJ
bWFnZURyYXdSZXN1bHQgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRgogewogI2lmIFVTRShORVdfVEhFTUUpIHx8IFBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNv
bnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21w
b3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9k
ZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRyYW5zbGF0
ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0
LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051
bGxHcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051
bGxHcmFwaGljc0NvbnRleHQuaAppbmRleCBiNjIzNjc4ODBlM2U1MzU0YjYxNzExMzQ3YzlhMTFi
NDIyNDY4ODVlLi5kNjdkM2VhMTE1ZDI0ZWZkOTA5ZTAzYWM5YWRlOTNhOGI0NzY0ZmM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNz
Q29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM4LDg3ICszOCw1NyBAQCBwdWJsaWM6CiAgICAgICAgIERldGVjdGluZ0NvbnRl
bnRmdWxQYWludAogICAgIH07CiAKLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxp
ZGF0aW9uUmVhc29ucyByZWFzb25zKQotICAgICAgICA6IG1fcGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zKHJlYXNvbnMpCisgICAgTnVsbEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGlu
aXRpYWxDbGlwLCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgcmVhc29ucykKKyAgICAgICAgOiBH
cmFwaGljc0NvbnRleHQoaW5pdGlhbENsaXApCisgICAgICAgICwgbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMocmVhc29ucykKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFVTRShDRykK
LSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9Ci0gICAgYm9vbCBp
c0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgot
CiAgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIGJvb2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zOjpOb25lOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRh
dGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsgfQogICAgIGJvb2wgaW52YWxp
ZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxp
ZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlczsgfQogICAgIGJvb2wgZGV0ZWN0aW5nQ29udGVu
dGZ1bFBhaW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNv
bnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQ7
IH0KIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWwgeyB9Ci0KLSNp
ZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbCB7
IH0KLSNlbmRpZgotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3U3lzdGVtSW1h
Z2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH07Ci0KLSAgICB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9Ci0KLSAgICBJ
bnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KLQorICAgIHZv
aWQgc2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorICAgIHZv
aWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbCB7IH07CiAjaWYgVVNFKENHKQogICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJu
KCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAj
ZW5kaWYKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgPSAxKSBm
aW5hbCB7IH0KLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JikgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KLSAg
ICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJvdW5kZWRS
ZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0K
LSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQot
ICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5P
ZGQpIGZpbmFsIHsgfQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWwgeyByZXR1
cm4gcmVjdDsgfQotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50Jiwg
ZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wgPSBmYWxzZSwgU3Ryb2tlU3R5bGUg
PSBTb2xpZFN0cm9rZSkgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZp
bmFsIHsgfQotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZp
bmFsIHsgfQotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsIHsgfQotICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0
IFBhdGgmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFs
IHsgfQotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIHRyYW5zbGF0
ZShmbG9hdCwgZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpIGZpbmFsIHsgfQotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmlj
ZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHsgfTsgfQotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWwgeyB9CisgICAgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsIHsgfQorCiAgICAgdm9pZCBjbGlwKGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdp
bmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQogICAgIHZvaWQgY2xpcE91dChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNhdmUoKSBmaW5hbCB7IH0KLSAg
ICB2b2lkIHJlc3RvcmUoKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQogCi0g
ICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
ID0gc3RkOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFs
IHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFs
IHsgfQogCi0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2ln
bmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQpIGZpbmFsIHsg
fQotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1
biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWwgeyB9Cisg
ICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICAKKyAgICB2b2lkIHN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KIAot
ICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3Jp
ZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRp
ZE5vdGhpbmc7IH0KKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JikgZmluYWwgeyB9CiAKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KLSAgICBJbWFn
ZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpU
aWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IHJldHVy
biBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYp
IGZpbmFsIHsgfQogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQogICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFs
IHsgfQpAQCAtMTI3LDI4ICs5NywyNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikg
ZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1
ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotCi0gICAgdm9p
ZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAg
IHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdy
YWRpZW50JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5v
cm1hbCkgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLQor
ICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxv
YXRSZWN0JiwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZv
aWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CiAjZW5kaWYKIAorICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJh
eSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIGZpbmFsIHsgfQorCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJl
dHVybiByZWN0OyB9CisKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQogICAgIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLXByaXZhdGU6CiAgICAgY29u
c3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsg
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45ZjI0NTVlZjU4Nzk0YWQ2OTJlYmU2NTg3ZTAzMWE4OWZmMDE3MTExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IHN0
cnVjdCBDR0NvbnRleHQ7CisjZWxpZiBVU0UoQ0FJUk8pCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsKK30KK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0ID0gR3JhcGhpY3NDb250ZXh0Q2Fpcm87CisjZWxzZQordXNpbmcgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQgPSB2b2lkOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggYmIx
MzhiNTI5N2E1MjFmYmY3ZDY5M2NkMTE0MTA0NDAwZmNhYmM0ZS4uOTAyNGY1ZDFhYmZjZTM4MDgx
ODNhM2IyMzFmYmNlMGZmYjJmZjQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTE5MSwxNyArMTkxLDE3IEBAIFNoYWRvd0JsdXI6
OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0LCBjb25zdCBDCiAgICAgdXBkYXRlU2hhZG93Qmx1clZhbHVlcygpOwogfQogCi1TaGFkb3dC
bHVyOjpTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6
IG1fY29sb3Ioc3RhdGUuc2hhZG93Q29sb3IpCi0gICAgLCBtX2JsdXJSYWRpdXMoc3RhdGUuc2hh
ZG93Qmx1ciwgc3RhdGUuc2hhZG93Qmx1cikKLSAgICAsIG1fb2Zmc2V0KHN0YXRlLnNoYWRvd09m
ZnNldCkKLSAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IERyb3BTaGFkb3cmIGRy
b3BTaGFkb3csIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCisgICAgOiBtX2NvbG9yKGRy
b3BTaGFkb3cuY29sb3IpCisgICAgLCBtX2JsdXJSYWRpdXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVz
LCBkcm9wU2hhZG93LmJsdXJSYWRpdXMpCisgICAgLCBtX29mZnNldChkcm9wU2hhZG93Lm9mZnNl
dCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpCiB7CiAjaWYgVVNFKENHKQogICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVu
ZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4p
LAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9y
IGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRp
dXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgewotICAgICAgICBmbG9hdCBzaGFk
b3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CisgICAgaWYg
KGRyb3BTaGFkb3cucmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpIHsKKyAg
ICAgICAgZmxvYXQgc2hhZG93Qmx1ciA9IHJhZGl1c1RvTGVnYWN5UmFkaXVzKGRyb3BTaGFkb3cu
Ymx1clJhZGl1cyk7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVy
LCBzaGFkb3dCbHVyKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuaAppbmRleCAxNGZkODNlZGUxYTFiYWNmMTc3ZjMzMWVjYWQx
YTQzMDI5M2Y2MDNhLi40NWQwZTU4MzI5Y2RlZWFiZmI3OGE0ZDVlNjdhYjhkODgxYWU1NGZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCkBAIC0z
OCw4ICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3Jt
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK3N0cnVjdCBE
cm9wU2hhZG93OwogCiBjbGFzcyBTaGFkb3dCbHVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTaGFkb3dCbHVyKTsKQEAgLTUyLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgU2hhZG93Qmx1
cigpOwogICAgIFNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMg
PSBmYWxzZSk7Ci0gICAgU2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwor
ICAgIFNoYWRvd0JsdXIoY29uc3QgRHJvcFNoYWRvdyYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgPSBmYWxzZSk7CiAKICAgICB2b2lkIHNldFNoYWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBGbG9hdFNpemUmICwgY29uc3QgQ29sb3ImLCBib29sIGlnbm9yZVRyYW5zZm9y
bXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJydXNoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJydXNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTYzZTVmYzMyZTc5OWVhYTAxYTNkMzViOGM2N2Iw
NWRmYTJkMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU291cmNlQnJ1c2guY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNvdXJjZUJydXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU291cmNlQnJ1c2g6
OlNvdXJjZUJydXNoKGNvbnN0IENvbG9yJiBjb2xvciwgc3RkOjpvcHRpb25hbDxCcnVzaD4mJiBi
cnVzaCkKKyAgICA6IG1fY29sb3IoY29sb3IpCisgICAgLCBtX2JydXNoKFdURk1vdmUoYnJ1c2gp
KQoreworfQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFNvdXJjZUJydXNoOjpzcGFjZVRyYW5z
Zm9ybSgpIGNvbnN0Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEFmZmluZVRyYW5zZm9y
bT4gaWRlbnRpdHk7CisgICAgcmV0dXJuIG1fYnJ1c2ggPyBtX2JydXNoLT5zcGFjZVRyYW5zZm9y
bSA6IGlkZW50aXR5LmdldCgpOworfQorCitHcmFkaWVudCogU291cmNlQnJ1c2g6OmdyYWRpZW50
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChhdXRvKiBncmFkaWVudCA9IHN0ZDo6Z2V0X2lmPFJlZjxHcmFkaWVudD4+KCZtX2Jy
dXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBncmFkaWVudC0+cHRyKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK1BhdHRlcm4qIFNvdXJjZUJydXNoOjpwYXR0ZXJuKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRv
KiBwYXR0ZXJuID0gc3RkOjpnZXRfaWY8UmVmPFBhdHRlcm4+PigmbV9icnVzaC0+YnJ1c2gpKQor
ICAgICAgICByZXR1cm4gcGF0dGVybi0+cHRyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3ZvaWQgU291cmNlQnJ1c2g6OnNldEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkKK3sKKyAgICBtX2JydXNoID0g
eyBXVEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKwordm9pZCBTb3VyY2VC
cnVzaDo6c2V0UGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQoreworICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUocGF0dGVy
biksIHNwYWNlVHJhbnNmb3JtIH07Cit9CisKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgU291cmNlQnJ1c2gpCit7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCcnVzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnJ1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTE1YmIwZGYzZDk5MzhmYzgzZWRiNTg3YWVkYjA1
MWQwYmViYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU291cmNlQnJ1c2guaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNv
bG9yLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU291cmNlQnJ1c2ggeworcHVibGljOgorICAgIHN0
cnVjdCBCcnVzaCB7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0
dGVybj4+IGJydXNoOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gc3BhY2VUcmFuc2Zvcm07CisK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxCcnVzaD4gZGVjb2RlKERlY29kZXImKTsKKyAgICB9OworCisgICAgU291cmNlQnJ1
c2goKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgU291cmNlQnJ1c2goY29uc3QgQ29s
b3ImLCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYmID0gc3RkOjpudWxsb3B0KTsKKworICAgIGNvbnN0
IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICB2b2lkIHNldENv
bG9yKGNvbnN0IENvbG9yIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQorCisgICAgY29uc3Qg
c3RkOjpvcHRpb25hbDxCcnVzaD4mIGJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9icnVzaDsgfQor
CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhZGllbnQqIGdyYWRpZW50KCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgUGF0dGVybiogcGF0dGVybigpIGNvbnN0OworICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIHZvaWQgc2V0R3JhZGllbnQo
UmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0g
eyB9KTsKKyAgICB2b2lkIHNldFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworCisgICAgYm9vbCBpc1ByaW1pdGl2ZSgp
IGNvbnN0IHsgcmV0dXJuICFtX2JydXNoICYmIG1fY29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCk7
IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxT
b3VyY2VCcnVzaD4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBDb2xvciBtX2Nv
bG9yIHsgQ29sb3I6OmJsYWNrIH07CisgICAgc3RkOjpvcHRpb25hbDxCcnVzaD4gbV9icnVzaDsK
K307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFk
aWVudD4sIFJlZjxQYXR0ZXJuPj4mIGEsIGNvbnN0IHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+
LCBSZWY8UGF0dGVybj4+JiBiKQoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGEsCisgICAg
ICAgIFsmXSAoY29uc3QgUmVmPEdyYWRpZW50PiYgYUdyYWRpZW50KSB7CisgICAgICAgICAgICBp
ZiAoYXV0byogYkdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdyYWRpZW50Pj4oJmIpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBhR3JhZGllbnQgPT0gKmJHcmFkaWVudDsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8UGF0dGVy
bj4mIGFQYXR0ZXJuKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYlBhdHRlcm4gPSBzdGQ6Omdl
dF9pZjxSZWY8UGF0dGVybj4+KCZiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYVBhdHRlcm4g
PT0gKmJQYXR0ZXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
KTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaDo6QnJ1c2gm
IGEsIGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYikKK3sKKyAgICByZXR1cm4gYS5icnVzaCA9
PSBiLmJydXNoICYmIGEuc3BhY2VUcmFuc2Zvcm0gPT0gYi5zcGFjZVRyYW5zZm9ybTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaCYgYSwgY29uc3QgU291cmNl
QnJ1c2gmIGIpCit7CisgICAgcmV0dXJuIGEuY29sb3IoKSA9PSBiLmNvbG9yKCkgJiYgYS5icnVz
aCgpID09IGIuYnJ1c2goKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KK3ZvaWQg
U291cmNlQnJ1c2g6OkJydXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBlbmNvZGVyIDw8IHNwYWNlVHJhbnNmb3JtOworICAgIFdURjo6c3dpdGNoT24oYnJ1c2gsCisg
ICAgICAgIFsmXSAoY29uc3QgUmVmPEdyYWRpZW50PiYgZ3JhZGllbnQpIHsKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgdHJ1ZSA8PCBncmFkaWVudC5nZXQoKTsKKyAgICAgICAgfSwKKyAgICAgICAg
WyZdIChjb25zdCBSZWY8UGF0dGVybj4mIHBhdHRlcm4pIHsKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgZmFsc2UgPDwgcGF0dGVybi5nZXQoKTsKKyAgICAgICAgfQorICAgICk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoOjpCcnVzaD4g
U291cmNlQnJ1c2g6OkJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6
Om9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gc3BhY2VUcmFuc2Zvcm07CisgICAgZGVjb2RlciA+
PiBzcGFjZVRyYW5zZm9ybTsKKyAgICBpZiAoIXNwYWNlVHJhbnNmb3JtKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBoYXNHcmFkaWVudDsK
KyAgICBkZWNvZGVyID4+IGhhc0dyYWRpZW50OworICAgIGlmICghaGFzR3JhZGllbnQpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgaWYgKCpoYXNHcmFkaWVudCkgewor
ICAgICAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKKyAgICAg
ICAgaWYgKCFncmFkaWVudCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
ICAgIHJldHVybiB7IHsgV1RGTW92ZSgqZ3JhZGllbnQpLCAqc3BhY2VUcmFuc2Zvcm0gfSB9Owor
ICAgIH0KKworICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsKKyAg
ICBpZiAoIXBhdHRlcm4pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJu
IHsgeyBXVEZNb3ZlKCpwYXR0ZXJuKSwgKnNwYWNlVHJhbnNmb3JtIH0gfTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU291cmNlQnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1f
YnJ1c2g7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJj
ZUJydXNoPiBTb3VyY2VCcnVzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3Rk
OjpvcHRpb25hbDxDb2xvcj4gY29sb3I7CisgICAgZGVjb2RlciA+PiBjb2xvcjsKKyAgICBpZiAo
IWNvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25h
bDxzdGQ6Om9wdGlvbmFsPEJydXNoPj4gYnJ1c2g7CisgICAgZGVjb2RlciA+PiBicnVzaDsKKyAg
ICBpZiAoIWJydXNoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJu
IFNvdXJjZUJydXNoKCpjb2xvciwgV1RGTW92ZSgqYnJ1c2gpKTsKK30KKworV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFNvdXJjZUJydXNoKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvVGV4dEJveEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9UZXh0Qm94SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBjZjY1YmEy
YzEwZTg4ODhkZDQ5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0Qm94
SXRlcmF0b3IgeworcHVibGljOgorICAgIFRleHRCb3hJdGVyYXRvcigpCisgICAgICAgIDogbV90
ZXh0UnVuKDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAgVGV4
dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkKKyAg
ICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisg
ICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9CisgICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBib29sIGF0
RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRSdW4t
Pmxlbmd0aCgpOyB9CisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90ZXh0
UnVuKVttX29mZnNldF07IH0KKyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1cnJl
bnQoKSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zm
c2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICFv
cGVyYXRvcj09KG90aGVyKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4
dFJ1bjsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBo
aWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuY3BwCmluZGV4IGNhMjVmYjNkOGE4MDFmMzAyZGZlZTFmYmI5ZTY2NTNmYTE2
OWY5OGUuLjAwNjYzOGEzZGMxMGNhZDI0MWRkYjQwMzQ2MDE1NTQxMTdiZWVkYzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmNwcApAQCAtMTgzMyw3ICsxODMzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vy
c2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmEKICAg
ICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwgc2l6
ZSgpKTsKIAotICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1fZGlz
cGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFu
c2Zvcm0oKSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4dCgqbV9k
aXNwbGF5TGlzdCwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAgICAgcGFp
bnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
c2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1NmEyM2E1
ZmRmYjEwYWZlY2EyY2M5MmE3Mjc5NDU4MTAyZS4uOGFlMWI1ZmE5ZmVlNTMwODM1ZTdmNmEyNTcw
N2M4NDM0MTc3MDUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC00NDYsMTcgKzQ0NiwxNiBA
QCBzdGF0aWMgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJv
b2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAKLXZvaWQgc2V0
U3Ryb2tlVGhpY2tuZXNzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJvX3QqIGNy
IHBsYXRmb3JtQ29udGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQogewotICAgIGNhaXJvX3Nl
dF9saW5lX3dpZHRoKHBsYXRmb3JtQ29udGV4dC5jcigpLCBzdHJva2VUaGlja25lc3MpOworICAg
IGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIHNl
dFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIFN0cm9r
ZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiBjciwgU3Ry
b2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkYXNoUGF0
dGVybltdID0geyA1LjAsIDUuMCB9OwogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG90UGF0dGVy
bltdID0geyAxLjAsIDEuMCB9OwogCi0gICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQu
Y3IoKTsKICAgICBzd2l0Y2ggKHN0cm9rZVN0eWxlKSB7CiAgICAgY2FzZSBOb1N0cm9rZToKICAg
ICAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB3YXkgdG8gZW11bGF0ZSBOb1N0cm9rZT8K
QEAgLTQ3NywyOSArNDc2LDI5IEBAIHZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5CiAgICAgfQogfQog
Ci12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiBjciwgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQog
ewotICAgIGNhaXJvX3NldF9vcGVyYXRvcihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgdG9DYWlyb09w
ZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CisgICAgY2Fpcm9fc2V0X29w
ZXJhdG9yKGNyLCB0b0NhaXJvT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBibGVuZE1vZGUp
KTsKIH0KIAotdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBs
YXRmb3JtQ29udGV4dCwgYm9vbCBlbmFibGUpCit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWly
b190KiBjciwgYm9vbCBlbmFibGUpCiB7CiAgICAgLy8gV2hlbiB0cnVlLCB1c2UgdGhlIGRlZmF1
bHQgQ2Fpcm8gYmFja2VuZCBhbnRpYWxpYXMgbW9kZSAodXN1YWxseSB0aGlzCiAgICAgLy8gZW5h
YmxlcyBzdGFuZGFyZCAnZ3JheXNjYWxlJyBhbnRpYWxpYXNpbmcpOyBmYWxzZSB0byBleHBsaWNp
dGx5IGRpc2FibGUKICAgICAvLyBhbnRpYWxpYXNpbmcuCi0gICAgY2Fpcm9fc2V0X2FudGlhbGlh
cyhwbGF0Zm9ybUNvbnRleHQuY3IoKSwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQg
OiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhjciwgZW5h
YmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CiB9
CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBzZXRDVE0oY2Fpcm9fdCogY3Is
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGNvbnN0IGNhaXJvX21h
dHJpeF90IG1hdHJpeCA9IHRvQ2Fpcm9NYXRyaXgodHJhbnNmb3JtKTsKLSAgICBjYWlyb19zZXRf
bWF0cml4KHBsYXRmb3JtQ29udGV4dC5jcigpLCAmbWF0cml4KTsKKyAgICBjYWlyb19zZXRfbWF0
cml4KGNyLCAmbWF0cml4KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0Nv
bnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQorQWZmaW5lVHJhbnNmb3JtIGdldENUTShjYWly
b190KiBjcikKIHsKICAgICBjYWlyb19tYXRyaXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRyaXgo
cGxhdGZvcm1Db250ZXh0LmNyKCksICZtKTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7
CiAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybShtLnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngw
LCBtLnkwKTsKIH0KIApAQCAtNjIyLDcgKzYyMSw3IEBAIGJvb2wgU2hhZG93U3RhdGU6OmlzUmVx
dWlyZWQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkgY29uc3QKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBzZXRMaW5lQ2FwKEdyYXBoaWNzQ29udGV4dENhaXJvJiBw
bGF0Zm9ybUNvbnRleHQsIExpbmVDYXAgbGluZUNhcCkKK3ZvaWQgc2V0TGluZUNhcChjYWlyb190
KiBjciwgTGluZUNhcCBsaW5lQ2FwKQogewogICAgIGNhaXJvX2xpbmVfY2FwX3QgY2Fpcm9DYXAg
eyB9OwogICAgIHN3aXRjaCAobGluZUNhcCkgewpAQCAtNjM2LDE4ICs2MzUsMTggQEAgdm9pZCBz
ZXRMaW5lQ2FwKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVDYXAg
bGluZUNhcCkKICAgICAgICAgY2Fpcm9DYXAgPSBDQUlST19MSU5FX0NBUF9TUVVBUkU7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBjYWlyb19zZXRfbGluZV9jYXAocGxhdGZvcm1Db250ZXh0
LmNyKCksIGNhaXJvQ2FwKTsKKyAgICBjYWlyb19zZXRfbGluZV9jYXAoY3IsIGNhaXJvQ2FwKTsK
IH0KIAotdm9pZCBzZXRMaW5lRGFzaChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgc2V0
TGluZURhc2goY2Fpcm9fdCogY3IsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNo
T2Zmc2V0KQogewogICAgIGlmIChzdGQ6OmFsbF9vZihkYXNoZXMuYmVnaW4oKSwgZGFzaGVzLmVu
ZCgpLCBbXShhdXRvJiBkYXNoKSB7IHJldHVybiAhZGFzaDsgfSkpCi0gICAgICAgIGNhaXJvX3Nl
dF9kYXNoKHBsYXRmb3JtQ29udGV4dC5jcigpLCAwLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fc2V0
X2Rhc2goY3IsIDAsIDAsIDApOwogICAgIGVsc2UKLSAgICAgICAgY2Fpcm9fc2V0X2Rhc2gocGxh
dGZvcm1Db250ZXh0LmNyKCksIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCksIGRhc2hPZmZz
ZXQpOworICAgICAgICBjYWlyb19zZXRfZGFzaChjciwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNp
emUoKSwgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUpvaW4gbGluZUpvaW4pCit2b2lkIHNldExpbmVK
b2luKGNhaXJvX3QqIGNyLCBMaW5lSm9pbiBsaW5lSm9pbikKIHsKICAgICBjYWlyb19saW5lX2pv
aW5fdCBjYWlyb0pvaW4geyB9OwogICAgIHN3aXRjaCAobGluZUpvaW4pIHsKQEAgLTY2MSwxMiAr
NjYwLDEyIEBAIHZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgTGluZUpvaW4gbGluZUpvaW4pCiAgICAgICAgIGNhaXJvSm9pbiA9IENBSVJPX0xJ
TkVfSk9JTl9CRVZFTDsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3NldF9saW5l
X2pvaW4ocGxhdGZvcm1Db250ZXh0LmNyKCksIGNhaXJvSm9pbik7CisgICAgY2Fpcm9fc2V0X2xp
bmVfam9pbihjciwgY2Fpcm9Kb2luKTsKIH0KIAotdm9pZCBzZXRNaXRlckxpbWl0KEdyYXBoaWNz
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IG1pdGVyTGltaXQpCit2b2lkIHNl
dE1pdGVyTGltaXQoY2Fpcm9fdCogY3IsIGZsb2F0IG1pdGVyTGltaXQpCiB7Ci0gICAgY2Fpcm9f
c2V0X21pdGVyX2xpbWl0KHBsYXRmb3JtQ29udGV4dC5jcigpLCBtaXRlckxpbWl0KTsKKyAgICBj
YWlyb19zZXRfbWl0ZXJfbGltaXQoY3IsIG1pdGVyTGltaXQpOwogfQogCiB2b2lkIGZpbGxSZWN0
KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNo
YWRvd1N0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAppbmRleCA1NDk4NTYzY2U0OWMxNWUzNWQwODI1OWMy
ZDI2ZGM3YjE3Y2VhODg1Li44N2VjYzIwNThkNGE3NWQzM2RkZDIxMmVkODg3N2U4ZDNhOGE3OGVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb09wZXJhdGlvbnMuaApAQCAtNTQsMTQgKzU0LDE0IEBAIG5hbWVzcGFjZSBDYWlybyB7
CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAKLXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKEdyYXBoaWNz
Q29udGV4dENhaXJvJiwgZmxvYXQpOwotdm9pZCBzZXRTdHJva2VTdHlsZShHcmFwaGljc0NvbnRl
eHRDYWlybyYsIFN0cm9rZVN0eWxlKTsKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJvX3Qq
LCBmbG9hdCk7Cit2b2lkIHNldFN0cm9rZVN0eWxlKGNhaXJvX3QqLCBTdHJva2VTdHlsZSk7CiAK
LXZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7Ci12b2lkIHNldFNob3VsZEFudGlhbGlhcyhHcmFwaGlj
c0NvbnRleHRDYWlybyYsIGJvb2wpOwordm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oY2Fpcm9f
dCosIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwordm9pZCBzZXRTaG91bGRBbnRpYWxp
YXMoY2Fpcm9fdCosIGJvb2wpOwogCi12b2lkIHNldENUTShHcmFwaGljc0NvbnRleHRDYWlybyYs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGlj
c0NvbnRleHRDYWlybyYpOwordm9pZCBzZXRDVE0oY2Fpcm9fdCosIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpOworQWZmaW5lVHJhbnNmb3JtIGdldENUTShjYWlyb190Kik7CiAKIEludFJlY3QgZ2V0
Q2xpcEJvdW5kcyhHcmFwaGljc0NvbnRleHRDYWlybyYpOwogRmxvYXRSZWN0IHJvdW5kVG9EZXZp
Y2VQaXhlbHMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTEy
NSwxMCArMTI1LDEwIEBAIHN0cnVjdCBTaGFkb3dTdGF0ZSB7CiAgICAgQ29tcG9zaXRlT3BlcmF0
b3IgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zl
ciB9OwogfTsKIAotdm9pZCBzZXRMaW5lQ2FwKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgTGluZUNh
cCk7Ci12b2lkIHNldExpbmVEYXNoKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRGFzaEFy
cmF5JiwgZmxvYXQpOwotdm9pZCBzZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYsIExp
bmVKb2luKTsKLXZvaWQgc2V0TWl0ZXJMaW1pdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGZsb2F0
KTsKK3ZvaWQgc2V0TGluZUNhcChjYWlyb190KiwgTGluZUNhcCk7Cit2b2lkIHNldExpbmVEYXNo
KGNhaXJvX3QqLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7Cit2b2lkIHNldExpbmVKb2luKGNh
aXJvX3QqLCBMaW5lSm9pbik7Cit2b2lkIHNldE1pdGVyTGltaXQoY2Fpcm9fdCosIGZsb2F0KTsK
IAogdm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZpbGxTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwogdm9pZCBmaWxsUmVjdChH
cmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgY29u
c3QgU2hhZG93U3RhdGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBjMzIz
MDQ0NTM1MWIwM2YyYWE4NzM2YWVlMmJjZTc4YmM0MzYxZjQ5Li5iZjcxZTNlYjE5NTg2YTZkOTk0
MGIwZmE3M2VmMjkwZjJkZWE5MmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBA
IC04NiwxMCArODYsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dENhaXJvOjpoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxl
KSBjb25zdAorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9k
ZSgpIGNvbnN0CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTY2FsZSk7Ci0gICAgcmV0dXJu
IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIENh
aXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKSA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
IH0KIAogR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdApAQCAtMTM0LDUzICsxMzMsMTEwIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnJlc3RvcmUoKQogICAgIGNhaXJvX3Jlc3RvcmUobV9jci5nZXQoKSk7CiB9CiAK
LS8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCi12b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFwcGx5U3Rh
dGVDaGFuZ2VzKCkKIHsKLSAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KCp0aGlzLCByZWN0LCBi
b3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRl
LnN0cm9rZUNvbG9yKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb3IgKGF1dG8gY2hhbmdlIDogc3RhdGUoKS5jaGFuZ2VzKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpDVE06CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENUTShtX2NyLmdldCgp
LCBzdGF0ZSgpLmdldENUTSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAg
ICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9jci5nZXQoKSwgc3RkOjptYXgo
c3RhdGUoKS5zdHJva2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlOgor
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX2NyLmdldCgpLCBzdGF0
ZSgpLnN0cm9rZVN0eWxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAgICAgICAgICAgQ2Fpcm86
OnNldExpbmVDYXAobV9jci5nZXQoKSwgc3RhdGUoKS5saW5lQ2FwKCkpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5l
Sm9pbjoKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihtX2NyLmdldCgpLCBzdGF0ZSgp
LmxpbmVKb2luKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRM
aW5lRGFzaChtX2NyLmdldCgpLCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0ZSgpLmxp
bmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoKKyAgICAgICAgICAgIENhaXJv
OjpzZXRNaXRlckxpbWl0KG1fY3IuZ2V0KCksIHN0YXRlKCkubWl0ZXJMaW1pdCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6Q29tcG9zaXRlTW9kZToKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKG1fY3IuZ2V0KCksIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9wLCBzdGF0ZSgp
LmNvbXBvc2l0ZU1vZGUoKS5ibGVuZE1vZGUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAg
ICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgICAgICAgICAg
ICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdp
dGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAgICAgLy8gV2UgZmxpcCB0
aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMK
KyAgICAgICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cgPSB0aGlzLT5kcm9wU2hhZG93KCk7Cisg
ICAgICAgICAgICAgICAgZHJvcFNoYWRvdy5vZmZzZXQgPSB7IGRyb3BTaGFkb3cub2Zmc2V0Lndp
ZHRoKCksIC1kcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQoKSB9OworICAgICAgICAgICAgICAgIHNl
dERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFu
dGlhbGlhczoKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1f
Y3IuZ2V0KCksIHN0YXRlKCkuc2hvdWxkQW50aWFsaWFzKCkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgY2xlYXJTdGF0ZUNoYW5nZXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxv
YXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUlt
YWdlKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBz
cmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3Rh
dGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIEdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBDYWlybzo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7CiB9CiAKLS8vIFRoaXMgaXMgb25seSB1c2Vk
IHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkK
LSAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKKyAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMpOworfQogCi0gICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywg
cG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIENhaXJvOjpjbGlwKCp0aGlzLCByZWN0KTsKIH0K
IAotLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVz
IHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0
aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCp0aGlzLCByZWN0LCBz
dGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgs
IGNsaXBSdWxlKTsKKyAgICBDYWlybzo6Y2xpcFBhdGgoKnRoaXMsIHBhdGgsIGNsaXBSdWxlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENh
aXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpGaWxsU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgQ2Fpcm86OmNsaXBP
dXQoKnRoaXMsIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChh
dXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSkpCisgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywgbmF0aXZlSW1h
Z2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOworfQogCi0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VQYXRoKCp0aGlzLCBwYXRoLCBD
YWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIENhaXJvOjpjbGVhclJlY3QoKnRoaXMsIHJlY3QpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yMTYs
MTIzICsyNzIsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEMKICAgICBDYWlybzo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqdGhpcywgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2Rl
OjpOb3JtYWwpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGNsaXBSdWxlKQotewotICAgIENhaXJvOjpjbGlwUGF0aCgqdGhpcywgcGF0aCwgY2xpcFJ1
bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwQm91bmRzKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNv
bnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0g
ICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCp0aGlzLCBu
YXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotI2lmIFBMQVRG
T1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQotICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygq
dGhpcywgcGF0aCwgY29sb3IpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VE
X1BBUkFNKG9mZnNldCk7Ci0gICAgcmV0dXJuOwotI2Vsc2UKLSAgICBDYWlybzo6ZHJhd0ZvY3Vz
UmluZygqdGhpcywgcGF0aCwgd2lkdGgsIGNvbG9yKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSNpZiBQTEFURk9STShXUEUpIHx8
IFBMQVRGT1JNKEdUSykKLSAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3Rz
LCBjb2xvcik7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKLSAgICByZXR1cm47Ci0jZWxzZQotICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCp0aGlz
LCByZWN0cywgd2lkdGgsIGNvbG9yKTsKLSNlbmRpZgorICAgIENhaXJvOjpmaWxsUm91bmRlZFJl
Y3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKKyAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIENhaXJvOjpkcmF3TGluZXNGb3JU
ZXh0KCp0aGlzLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRl
cmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIENhaXJvOjpkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKCp0aGlzLCByZWN0LCBzdHlsZSk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHJvdW5kaW5n
TW9kZSk7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscygqdGhp
cywgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KQotewotICAgIENhaXJvOjp0cmFuc2xhdGUoKnRoaXMsIHgsIHkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tu
ZXNzKCp0aGlzLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldFN0cm9rZVN0eWxlKCp0aGlzLCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAo
ZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlm
IChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmlu
ZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2Ug
Q0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0
byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0Lmhl
aWdodCgpIH07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqdGhpcywgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3Is
IHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3Vs
ZEFudGlhbGlhcygqdGhpcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQotewotICAgIENhaXJvOjpjb25jYXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKLXsKLSAgICBDYWlybzo6U3RhdGU6OnNldENUTSgqdGhpcywgdHJhbnNmb3JtKTsK
LX0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcihvcGFjaXR5KTsKLSAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqdGhpcywg
b3BhY2l0eSk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWly
bzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIEdy
YXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBDYWlybzo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKnRoaXMpOwotfQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3QoKnRoaXMsIHJlY3QpOwor
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZmlsbFBhdGgoKnRo
aXMsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCkBAIC0zNDEsNTggKzMwMSw2OCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENhaXJvOjpzdHJva2VSZWN0KCp0aGlzLCByZWN0LCBs
aW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcChMaW5l
Q2FwIGxpbmVDYXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAoKnRoaXMsIGxpbmVDYXApOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBDYWlybzo6c2V0TGluZURhc2go
KnRoaXMsIGRhc2hlcywgZGFzaE9mZnNldCk7Ci19CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2lu
KExpbmVKb2luIGxpbmVKb2luKQotewotICAgIENhaXJvOjpzZXRMaW5lSm9pbigqdGhpcywgbGlu
ZUpvaW4pOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6c3Ry
b2tlUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRN
aXRlckxpbWl0KGZsb2F0IG1pdGVyKQorLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGgg
YSBzdHJva2VkIGJvcmRlci4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIENhaXJv
OjpzZXRNaXRlckxpbWl0KCp0aGlzLCBtaXRlcik7CisgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHko
KSk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpkcmF3UmVj
dCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKKy8vIFRoaXMgaXMgb25seSB1c2VkIHRv
IGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcGF0aCk7
Ci19CisgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsK
IAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCi17Ci0g
ICAgQ2Fpcm86OnJvdGF0ZSgqdGhpcywgcmFkaWFucyk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOworICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVz
ZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBDYWlybzo6c2NhbGUoKnRoaXMsIHNpemUpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKKyAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnRoaXMsIHJlY3QsIHN0YXRlLmZpbGxDb2xv
ciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlj
a25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKKyNpZiBQTEFURk9S
TShXUEUpIHx8IFBMQVRGT1JNKEdUSykKKyAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRo
aXMsIHBhdGgsIGNvbG9yKTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9Q
QVJBTShvZmZzZXQpOworICAgIHJldHVybjsKKyNlbHNlCisgICAgQ2Fpcm86OmRyYXdGb2N1c1Jp
bmcoKnRoaXMsIHBhdGgsIHdpZHRoLCBjb2xvcik7CisjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIENhaXJvOjpmaWxsUm91
bmRlZFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkp
OworI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQorICAgIFRoZW1lQWR3YWl0YTo6
cGFpbnRGb2N1cygqdGhpcywgcmVjdHMsIGNvbG9yKTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgp
OworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAgIHJldHVybjsKKyNlbHNlCisgICAgQ2Fp
cm86OmRyYXdGb2N1c1JpbmcoKnRoaXMsIHJlY3RzLCB3aWR0aCwgY29sb3IpOworI2VuZGlmCiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmICghY29sb3IuaXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0aGlzLCByZWN0LCByb3VuZGVk
SG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CisgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCp0aGlzLCBuYXRpdmVJbWFnZS5w
bGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRl
LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkBAIC00MDQsMTEgKzM3NCw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBu
YXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0CiAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCp0aGlz
LCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIG5hdGl2ZUltYWdlLnNpemUoKSwg
ZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9
CiAKLVJlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBj
b25zdAotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpw
bGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRy
YXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhz
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5n
KQogewogICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCkBAIC00MzgsOCArNDAz
LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICAgICAgZm9udFNtb290aGluZyk7CiB9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCit7Cisg
ICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3sKKyAgICBDYWlybzo6ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUpOworfQorCitGbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQoreworICAgIFVOVVNFRF9QQVJB
TShyb3VuZGluZ01vZGUpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMoKnRoaXMsIHJlY3QpOworfQorCiBjYWlyb190KiBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y3IoKSBjb25zdAogeworICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0Q2Fpcm8mPigqdGhp
cykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZXR1cm4gbV9jci5nZXQoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmgKaW5kZXggNTY0NjFjMTU5YTU4M2M4OWM2MWU4ZjAyZTRlMGJl
ZTdiMDU5MzJlZi4uNDYwNmRhZmZjYjkzY2FjMzRlMWM2MWRlNWE2YTVkZGE1MGNlZDA3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5oCkBAIC01MCw2MSArNTAsNTAgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgR3JhcGhpY3NDb250
ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkaWRV
cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUo
KSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9y
ZSgpIGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKIAotICAgIHZv
aWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2lu
KSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworICAgIHZvaWQg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9pZCBlbmRUcmFuc3Bh
cmVuY3lMYXllcigpIGZpbmFsOworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKKyAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgCisgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0OwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbDsKLSAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOwogICAgIHZvaWQg
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisKICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAg
dm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdH
bHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0KSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICB2
b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKICAgICB2b2lkIGRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKLSAgICB2
b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUpIGZpbmFsOworCiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKIAotICAgIHZvaWQgc2F2ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwot
Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJvdGF0
ZShmbG9hdCkgZmluYWw7Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKLSAgICB2
b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgY29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7CiAKLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBj
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgZmluYWw7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZp
bmFsOwotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAg
ICAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2
b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJv
b2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFs
OwogCiAgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0Jiwg
R3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTg1NmEwNDM5M2ZkMjRlOTYyOGY2ZmU5MzQ2OWVlYmVhNGFiYjU5OAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29u
dGV4dFN0YXRlU2F2ZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDR0NvbnRleHRTdGF0ZVNhdmVyIHsKK3B1
YmxpYzoKKyAgICBDR0NvbnRleHRTdGF0ZVNhdmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBib29s
IHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAg
ICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQorICAgIHsKKyAgICAgICAg
aWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1f
Y29udGV4dCk7CisgICAgfQorICAgIAorICAgIH5DR0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7
CisgICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0UmVz
dG9yZUdTdGF0ZShtX2NvbnRleHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNhdmUoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKKyAgICAgICAgQ0dDb250ZXh0
U2F2ZUdTdGF0ZShtX2NvbnRleHQpOworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsK
KyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2F2
ZUFuZFJlc3RvcmUpOworICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7
CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBkaWRTYXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3Jl
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dDsKKyAg
ICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggMzI0NWM2MDA0MzE1NTJk
NTEzYjc0ZWViYzA5ZjMxOGVlYzNkZDcyYS4uODgzYmZmMWViZWE3YTk4YTdhOThiNzE1N2RjMDVm
M2U1MGZkNzBkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTE4NSwxNCArMTg1LDEzIEBAIHN0YXRpYyB2b2lkIHNldENHQmxl
bmRNb2RlKENHQ29udGV4dFJlZiBjb250ZXh0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlCiB9CiAKIEdyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRS
ZWYgY2dDb250ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KENHQ29udGV4dEdldENsaXBCb3Vu
ZGluZ0JveChjZ0NvbnRleHQpLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW5pdGlhbENoYW5nZUZs
YWdzLCBDR0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KSkKIHsKICAgICBpZiAoIWNnQ29udGV4dCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZShjZ0NvbnRleHQpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFy
dHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCB7
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNr
bmVzc0NoYW5nZSB9KTsKLSAgICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBj
b3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
cGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNv
cmVJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpKSkpOwogfQogCiBHcmFwaGljc0NvbnRleHRDRzo6fkdy
YXBoaWNzQ29udGV4dENHKCkKQEAgLTIwNiw2ICsyMDUsMTQgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHRDRzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIH0KIAogQ0dDb250ZXh0UmVmIEdyYXBo
aWNzQ29udGV4dENHOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIC8vIFNvbWUgY2Fs
bGVycyB0byB0aGlzIG1ldGhvZCB1c2VzIHRoZSBwbGF0Zm9ybSBjb250ZXh0IG91dHNpZGUgdGhl
IHNjb3BlCisgICAgLy8gb2YgdGhpcyBjbGFzcy4gQ29tbWl0IGFueSBjaGFuZ2VzIGJlZm9yZSBy
ZXR1cm5pbmcgdGhlIHBsYXRmb3JtIGNvbnRleHQuCisgICAgY29uc3RfY2FzdDxHcmFwaGljc0Nv
bnRleHRDRyY+KCp0aGlzKS5hcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJldHVybiBpbnRlcm5h
bFBsYXRmb3JtQ29udGV4dCgpOworfQorCitDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6
OmludGVybmFsUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9kYXRhLT5t
X2NnQ29udGV4dCk7CiAgICAgcmV0dXJuIG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCk7CkBAIC0z
OTYsNyArNDAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKICAgICBDR0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LCBkZXN0UmVjdCk7CiAKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVN
b2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0p
OwogCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGRlc3RSZWN0LngoKSwgZGVz
dFJlY3QueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNv
bnRleHQsIDEsIC0xKTsKQEAgLTU1NSwxMyArNTYyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuc3Ryb2tl
UGF0dGVybikKKyAgICBpZiAoIXN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VD
VE0oY2dDb250ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUuc3Ry
b2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOworICAgIGF1
dG8gcGxhdGZvcm1QYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4odXNlclRvQmFzZUNUTSk7CiAgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJl
dHVybjsKIApAQCAtNTc0LDEzICs1ODEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBw
bHlTdHJva2VQYXR0ZXJuKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0
dGVybigpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmICghZmlsbFBh
dHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0g
QWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKLSAgICBhdXRv
IHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0
dGVybih1c2VyVG9CYXNlQ1RNKTsKKyAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IGZpbGxQYXR0
ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKICAgICBpZiAoIXBs
YXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01OTEsMTEgKzU5OCwxMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBDR0NvbnRleHRT
ZXRGaWxsUGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5B
bHBoYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0aERyYXdpbmdNb2RlJiBtb2RlKQor
c3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCiB7Ci0gICAgYm9vbCBzaG91
bGRGaWxsID0gc3RhdGUuZmlsbFBhdHRlcm4gfHwgc3RhdGUuZmlsbENvbG9yLmlzVmlzaWJsZSgp
OwotICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCAoc3RhdGUu
c3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UgJiYgc3RhdGUuc3Ryb2tlQ29sb3IuaXNWaXNpYmxlKCkp
OwotICAgIGJvb2wgdXNlRU9GaWxsID0gc3RhdGUuZmlsbFJ1bGUgPT0gV2luZFJ1bGU6OkV2ZW5P
ZGQ7CisgICAgYm9vbCBzaG91bGRGaWxsID0gY29udGV4dC5maWxsUGF0dGVybigpIHx8IGNvbnRl
eHQuZmlsbENvbG9yKCkuaXNWaXNpYmxlKCk7CisgICAgYm9vbCBzaG91bGRTdHJva2UgPSBjb250
ZXh0LnN0cm9rZVBhdHRlcm4oKSB8fCAoY29udGV4dC5zdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tl
ICYmIGNvbnRleHQuc3Ryb2tlQ29sb3IoKS5pc1Zpc2libGUoKSk7CisgICAgYm9vbCB1c2VFT0Zp
bGwgPSBjb250ZXh0LmZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQ7CiAKICAgICBpZiAo
c2hvdWxkRmlsbCkgewogICAgICAgICBpZiAoc2hvdWxkU3Ryb2tlKSB7CkBAIC02MjQsOSArNjMx
LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRl
OwogCi0gICAgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0ZS5zdHJva2VHcmFkaWVudCkg
eworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAg
IC8vIFdlIGRvbid0IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8gZmlsbCAmIHN0cm9rZSBhIHBh
dGggdXNpbmcgZ3JhZGllbnRzCiAgICAgICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRo
aXMuCiAgICAgICAgIGZpbGxQYXRoKHBhdGgpOwpAQCAtNjM0LDEzICs2NDAsMTMgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBh
dHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIGlmIChzdGF0ZS5zdHJv
a2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tl
UGF0dGVybigpOwogCiAgICAgQ0dQYXRoRHJhd2luZ01vZGUgZHJhd2luZ01vZGU7Ci0gICAgaWYg
KGNhbGN1bGF0ZURyYXdpbmdNb2RlKHN0YXRlLCBkcmF3aW5nTW9kZSkpIHsKKyAgICBpZiAoY2Fs
Y3VsYXRlRHJhd2luZ01vZGUoKnRoaXMsIGRyYXdpbmdNb2RlKSkgewogI2lmIEhBVkUoQ0dfQ09O
VEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgICAgICBDR0NvbnRleHREcmF3UGF0aERpcmVjdChj
b250ZXh0LCBkcmF3aW5nTW9kZSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CiAjZWxz
ZQpAQCAtNjU4LDcgKzY2NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxH
cmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgRmxv
YXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIEZsb2F0
U2l6ZSBsYXllclNpemUgPSBnZXRDVE0oKS5tYXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTY3MCwz
MyArNjc2LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0obGF5ZXJDb250ZXh0LCAt
cmVjdC54KCksIC1yZWN0LnkoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgobGF5
ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBw
YXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXll
ckNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICAg
ICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkp
OwogCiAgICAgICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAg
ICAgICAgICAgICAgICBDR0NvbnRleHRFT0NsaXAobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7CiAKLSAg
ICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAg
ICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAg
ICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQp
OwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0
aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0
KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShj
b250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAgICAgIGlmIChmaWxsUnVs
ZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xp
cChjb250ZXh0KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRD
bGlwKGNvbnRleHQpOwogCi0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQo
KnRoaXMpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsUGF0
dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigp
OwogI2lmIEhBVkUoQ0dfQ09OVEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgIENHQ29udGV4dERy
YXdQYXRoRGlyZWN0KGNvbnRleHQsIGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQgPyBr
Q0dQYXRoRU9GaWxsIDoga0NHUGF0aEZpbGwsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51bGxwdHIp
OwpAQCAtNzE3LDcgKzcyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChz
dHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAg
ICAgRmxvYXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAg
IGZsb2F0IGxpbmVXaWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtNzQyLDggKzc0OCw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAg
ICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0
aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxh
eWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0g
ICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENU
TShsYXllckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ry
b2tlR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgZmxvYXQg
ZGVzdGluYXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAgICAg
IGZsb2F0IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0aCk7CkBAIC03
NTQsMTMgKzc2MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgu
cGxhdGZvcm1QYXRoKCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ry
b2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwot
ICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50
LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwg
c3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5w
YWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAg
ICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICNpZiBVU0UoQ0dfQ09OVEVYVF9TVFJPS0VfTElO
RV9TRUdNRU5UU19XSEVOX1NUUk9LSU5HX1BBVEgpCkBAIC03ODUsNyArNzkxLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9z
dGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkpIHsKICAgICAgICAg
Q0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBpZiAoaGFz
U2hhZG93KCkpIHsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXllclNpemUgPSBnZXRDVE0oKS5t
YXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTc5OCwyNyArODA0LDI3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgICAgIENH
Q29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENHQ29udGV4
dENsaXAobGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxh
eWVyQ29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAg
ICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgp
KTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogICAg
ICAgICAgICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxheWVyLmdl
dCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dCwgcmVjdCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwg
bV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRl
LmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0
Q1RNKGNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIGZpbGxHcmFk
aWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigpKQog
ICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKICAgICBib29sIGRyYXdPd25TaGFkb3cgPSBj
YW5Vc2VTaGFkb3dCbHVyKCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNv
bnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAg
IC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhD
b2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29u
dGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAg
ICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0Js
dXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkp
OwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9hdFJvdW5k
ZWRSZWN0KHJlY3QpKTsKICAgICB9CiAKQEAgLTgzNyw5ICs4NDMsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093
blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYg
Q0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3Jt
Q29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93
V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0Js
dXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hh
ZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNv
bnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3QocmVjdCkp
OwogICAgIH0KIApAQCAtODUyLDcgKzg1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAg
ICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAg
ICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKQEAgLTg2NCw5ICs4NzAsOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAg
ICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dp
dGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAot
ICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRv
d0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCByZWN0KTsK
ICAgICB9CiAKQEAgLTg3NCw3ICs4ODAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxs
Um91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0CiAgICAg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpID0gcmVjdC5yYWRpaSgpOwogICAg
IGJvb2wgZXF1YWxXaWR0aHMgPSAocmFkaWkudG9wTGVmdCgpLndpZHRoKCkgPT0gcmFkaWkudG9w
UmlnaHQoKS53aWR0aCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSA9PSByYWRpaS5ib3R0
b21MZWZ0KCkud2lkdGgoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSA9PSByYWRpaS5i
b3R0b21SaWdodCgpLndpZHRoKCkpOwogICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gKHJhZGlpLnRv
cExlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgJiYgcmFkaWku
Ym90dG9tTGVmdCgpLmhlaWdodCgpID09IHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgJiYgcmFk
aWkudG9wUmlnaHQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgpKTsK
LSAgICBib29sIGhhc0N1c3RvbUZpbGwgPSBtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRl
LmZpbGxQYXR0ZXJuOworICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IGZpbGxHcmFkaWVudCgpIHx8
IGZpbGxQYXR0ZXJuKCk7CiAgICAgaWYgKCFoYXNDdXN0b21GaWxsICYmIGVxdWFsV2lkdGhzICYm
IGVxdWFsSGVpZ2h0cyAmJiByYWRpaS50b3BMZWZ0KCkud2lkdGgoKSAqIDIgPT0gci53aWR0aCgp
ICYmIHJhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSAqIDIgPT0gci5oZWlnaHQoKSkKICAgICAgICAg
Q0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3QoY29udGV4dCwgcik7CiAgICAgZWxzZSB7CkBAIC05
MTMsOSArOTE5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG8KICAgICBDR0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdP
d25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dD
b250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAw
LCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6
ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRl
KTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd0luc2V0U2hh
ZG93KCp0aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3QpOwogICAgIH0KIApAQCAtOTMwLDYgKzkz
Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cChyZWN0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByZWN0
KTsKICAgICBtX2RhdGEtPmNsaXAocmVjdCk7CiB9CkBAIC05NDAsMzEgKzk0NywzNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAv
LyB0byA8cmRhcjovL3Byb2JsZW0vMTI1ODQ0OTI+LCBDR1JlY3RJbmZpbml0ZSBjYW4ndCBiZSB1
c2VkIHdpdGggYW4gYWNjZWxlcmF0ZWQgY29udGV4dCB0aGF0CiAgICAgLy8gaGFzIGNlcnRhaW4g
dHJhbnNmb3JtcyB0aGF0IGFyZW4ndCBqdXN0IGEgdHJhbnNsYXRpb24gb3IgYSBzY2FsZS4gQW5k
IGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vMTQ2MzQ0NTM+CiAgICAgLy8gd2UgY2Fubm90IHVzZSBp
dCBpbiBmb3IgYSBwcmludGluZyBjb250ZXh0IGVpdGhlci4KKyAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3Rt
ID0gZ2V0Q1RNKCk7Ci0gICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4dEdl
dFR5cGUocGxhdGZvcm1Db250ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJp
bmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYg
IWN0bS5jKCkpKTsKLSAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRl
ID8gQ0dSZWN0SW5maW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1D
b250ZXh0KCkpLCByZWN0IH07Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICBDR0NvbnRleHRBZGRSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdHMsIDIp
OwotICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgYm9vbCBjYW5V
c2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUoY29udGV4dCkgIT0ga0NHQ29udGV4
dFR5cGVQREYgJiYgKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOworICAgIENHUmVjdCByZWN0c1syXSA9IHsg
Y2FuVXNlQ0dSZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZpbml0ZSA6IENHQ29udGV4dEdldENsaXBC
b3VuZGluZ0JveChjb250ZXh0KSwgcmVjdCB9OworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRSZWN0cyhjb250ZXh0LCByZWN0cywgMik7CisgICAgQ0dD
b250ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBDR0Nv
bnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dEJlZ2luUGF0
aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIENHQ29udGV4dEdldENs
aXBCb3VuZGluZ0JveChjb250ZXh0KSk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKLSAgICAg
ICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgo
KSk7Ci0gICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAgQ0dD
b250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBDR0NvbnRl
eHRFT0NsaXAoY29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRo
KGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogeworICAgIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CiAgICAgZWxzZSB7Ci0g
ICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENH
Q29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOwor
ICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4dEFk
ZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAKICAgICAgICAgaWYgKGNsaXBS
dWxlID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNv
bnRleHQpOwpAQCAtOTc1LDExICs5ODYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICBtX2RhdGEtPmNs
aXAocGF0aCk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMoKSBj
b25zdAotewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3Vu
ZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwpAQCAtMTAwMiwxNyArMTAw
OCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAg
ICAgcmVzdG9yZSgpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91
bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHRmxvYXQmIHhPZmZz
ZXQsIENHRmxvYXQmIHlPZmZzZXQpCitzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmth
cm91bmRJZk5lZWRlZChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dG
bG9hdCYgeU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShX
SU4pCiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwogICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0
KTsKICAgICBVTlVTRURfUEFSQU0oeU9mZnNldCk7CiAjZWxzZQotICAgIGlmIChjb250ZXh0LnJl
bmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhDb3Jy
ZWN0U2hhZG93T2Zmc2V0cyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV29y
ayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzU1MzkzODg+IGJ5IGVuc3VyaW5nIHRoYXQgdGhlIG9m
ZnNldHMgd2lsbCBnZXQgdHJ1bmNhdGVkCkBAIC0xMDMwLDEwICsxMDMzLDU1IEBAIHN0YXRpYyB2
b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25z
dCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBvZmZz
ZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNldENHTGlu
ZUNhcChDR0NvbnRleHRSZWYgY29udGV4dCwgTGluZUNhcCBjYXApCiB7Ci0gICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgc3dp
dGNoIChjYXApIHsKKyAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6CisgICAgICAgIENHQ29udGV4dFNl
dExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcEJ1dHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExpbmVDYXA6OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQs
IGtDR0xpbmVDYXBSb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUNhcDo6U3F1
YXJlOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBTcXVh
cmUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CiAKK3N0YXRpYyB2b2lkIHNldENHTGluZUpv
aW4oQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVKb2luIGpvaW4pCit7CisgICAgc3dpdGNoIChq
b2luKSB7CisgICAgY2FzZSBMaW5lSm9pbjo6TWl0ZXI6CisgICAgICAgIENHQ29udGV4dFNldExp
bmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luTWl0ZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExpbmVKb2luOjpSb3VuZDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4
dCwga0NHTGluZUpvaW5Sb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUpvaW46
OkJldmVsOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9p
bkJldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXRDR01p
dGVyTGltaXQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGZsb2F0IGxpbWl0KQoreworICAgIENHQ29u
dGV4dFNldE1pdGVyTGltaXQoY29udGV4dCwgbGltaXQpOworfQorCitzdGF0aWMgdm9pZCBzZXRD
R0xpbmVEYXNoKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywg
ZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKKyAgICAgICAg
ZmxvYXQgbGVuZ3RoID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRh
c2hlc1tpXSk7CisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICBkYXNoT2Zmc2V0ID0g
Zm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOworICAgIH0KKyAgICBDR0NvbnRleHRT
ZXRMaW5lRGFzaChjb250ZXh0LCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6
ZSgpKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coQ0dDb250ZXh0UmVmIGNvbnRleHQs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZs
b2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykKK3sKICAgICBpZiAob2Zmc2V0LmlzWmVybygpICYmICFibHVyKSB7CiAgICAgICAgIENHQ29u
dGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA0NSw3ICsxMDkzLDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3co
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYK
ICAgICBDR0Zsb2F0IHlPZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9hdCBibHVy
UmFkaXVzID0gYmx1cjsKIAotICAgIGlmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkpIHsKKyAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAgICAg
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RNKGNv
bnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jh
c2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTEwNjYsNyAr
MTExNCw4IEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgLy8gRXh0cmVtZSAiYmx1ciIg
dmFsdWVzIGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcgdGlt
ZXMsIHNvIGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5hcnJv
d1ByZWNpc2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0V29y
a2Fyb3VuZElmTmVlZGVkKGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7CisgICAg
aWYgKHJlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAg
IGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnRleHQsIHhPZmZzZXQsIHlP
ZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMgbWVh
bnMgdGhhdCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBhbmQg
d2Ugc2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3IuCkBA
IC0xMDc2LDQ0ICsxMTI1LDgxIEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlP
ZmZzZXQpLCBibHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKS5nZXQoKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAg
YXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5n
ZXMoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lV2lkdGgoY29udGV4dCwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCAwLmYp
KTsKKyAgICBhdXRvIGNvbnRleHQgPSBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5n
ZSkpCi0gICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNh
Y2hlZENHQ29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpLmdldCgpKTsKKyAgICBmb3IgKGF1dG8gY2hh
bmdlIDogc3RhdGUoKS5jaGFuZ2VzKCkpIHsKKyAgICAgICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE06CisgICAgICAgICAg
ICBDR0NvbnRleHRTZXRDVE0oY29udGV4dCwgc3RhdGUoKS5nZXRDVE0oKSk7CisgICAgICAgICAg
ICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUu
ZmlsbENvbG9yKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpG
aWxsQnJ1c2g6CisgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZSgpLmZp
bGxCcnVzaCgpLmNvbG9yKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgQ0dD
b250ZXh0U2V0QWxwaGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgICAgIENH
Q29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZSgpLnN0cm9rZVRoaWNr
bmVzcygpLCAwLmYpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRh
aW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKLSAgICAgICAgc2V0Q0dC
bGVuZE1vZGUoY29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9k
ZSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1
c2g6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0
LCBjYWNoZWRDR0NvbG9yKHN0YXRlKCkuc3Ryb2tlQnJ1c2goKS5jb2xvcigpKS5nZXQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4
dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5n
TW9kZSkpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVD
YXA6CisgICAgICAgICAgICBzZXRDR0xpbmVDYXAoY29udGV4dCwgc3RhdGUoKS5saW5lQ2FwKCkp
OworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNl
dFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luOgorICAgICAgICAg
ICAgc2V0Q0dMaW5lSm9pbihjb250ZXh0LCBzdGF0ZSgpLmxpbmVKb2luKCkpOworICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21v
b3RoRm9udHMoY29udGV4dCwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoOgorICAgICAgICAgICAgc2V0
Q0dMaW5lRGFzaChjb250ZXh0LCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0ZSgpLmxp
bmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hh
bmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwg
Y2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSk7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoK
KyAgICAgICAgICAgIHNldENHTWl0ZXJMaW1pdChjb250ZXh0LCBzdGF0ZSgpLm1pdGVyTGltaXQo
KSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKLSAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMs
IHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0Nv
bG9yKTsKLX0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21w
b3NpdGVNb2RlOgorICAgICAgICAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgc3RhdGUoKS5j
b21wb3NpdGVNb2RlKCkub3AsIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1p
dChmbG9hdCBsaW1pdCkKLXsKLSAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29u
dGV4dCgpLCBsaW1pdCk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIHNldENHU2hhZG93KGNvbnRleHQsIHJlbmRlcmlu
Z01vZGUoKSwgc3RhdGUoKS5kcm9wU2hhZG93KCkub2Zmc2V0LCBzdGF0ZSgpLmRyb3BTaGFkb3co
KS5ibHVyUmFkaXVzLCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5jb2xvciwgc3RhdGUoKS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGE6CisgICAgICAgICAgICBDR0NvbnRl
eHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZSgpLmFscGhhKCkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5OgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1
YWxpdHkoY29udGV4dCwgY2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZSgpLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGU6CisgICAgICAgICAg
ICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUo
c3RhdGUoKS50ZXh0RHJhd2luZ01vZGUoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXM6Cisg
ICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUoKS5z
aG91bGRBbnRpYWxpYXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzOgorICAgICAgICAg
ICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY29udGV4dCwgc3RhdGUoKS5zaG91bGRT
bW9vdGhGb250cygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsZWFyU3RhdGVDaGFu
Z2VzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpCkBAIC0xMTI1LDcgKzEyMTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewogICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9z
dGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChzdHJva2VHcmFkaWVudCgpKSB7CiAgICAg
ICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgY29uc3QgZmxvYXQgZG91YmxlTGlu
ZVdpZHRoID0gbGluZVdpZHRoICogMjsKICAgICAgICAgICAgIGZsb2F0IGFkanVzdGVkV2lkdGgg
PSBjZWlsZihyZWN0LndpZHRoKCkgKyBkb3VibGVMaW5lV2lkdGgpOwpAQCAtMTEzNSw3ICsxMjIx
LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIGF1dG8gbGF5ZXIgPSBhZG9wdENG
KENHTGF5ZXJDcmVhdGVXaXRoQ29udGV4dChjb250ZXh0LCBsYXllclNpemUsIDApKTsKIAogICAg
ICAgICAgICAgQ0dDb250ZXh0UmVmIGxheWVyQ29udGV4dCA9IENHTGF5ZXJHZXRDb250ZXh0KGxh
eWVyLmdldCgpKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0gbGluZVdp
ZHRoOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGxheWVyQ29udGV4dCwgbGlu
ZVdpZHRoKTsKIAogICAgICAgICAgICAgLy8gQ29tcGVuc2F0ZSBmb3IgdGhlIGxpbmUgd2lkdGgs
IG90aGVyd2lzZSB0aGUgbGF5ZXIncyB0b3AtbGVmdCBjb3JuZXIgd291bGQgYmUKQEAgLTExNDks
OCArMTIzNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRS
ZWN0KGxheWVyQ29udGV4dCwgcmVjdCk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0
aFdpdGhTdHJva2VkUGF0aChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xp
cChsYXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29u
dGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAg
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAg
ICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9ybSgp
KTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAK
ICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0LngoKSAt
IGxpbmVXaWR0aCk7CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkZXN0aW5hdGlvblkgPSByb3Vu
ZGYocmVjdC55KCkgLSBsaW5lV2lkdGgpOwpAQCAtMTE2MSwxMyArMTI0NiwxMyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
bGluZVdpZHRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCByZWN0KTsK
ICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQp
OwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29u
dGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQoKnRoaXMpOwor
ICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNm
b3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VQ
YXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0
dGVybigpOwogCiAgICAgLy8gVXNpbmcgQ0dDb250ZXh0QWRkUmVjdCBhbmQgQ0dDb250ZXh0U3Ry
b2tlUGF0aCB0byBzdHJva2UgcmVjdCByYXRoZXIgdGhhbgpAQCAtMTE4Miw5NCArMTI2Nyw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKLXsKLSAg
ICBzd2l0Y2ggKGNhcCkgewotICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKLSAgICAgICAgQ0dDb250
ZXh0U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcEJ1dHQpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIExpbmVDYXA6OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRTZXRM
aW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwUm91bmQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNh
cChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFNxdWFyZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2goY29uc3QgRGFz
aEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgaWYgKGRhc2hPZmZzZXQg
PCAwKSB7Ci0gICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbGVuZ3RoICs9IHN0YXRp
Y19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOwotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICAg
ICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsKLSAgICB9
Ci0gICAgQ0dDb250ZXh0U2V0TGluZURhc2gocGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQs
IGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQotewotICAgIHN3aXRjaCAoam9pbikgewot
ICAgIGNhc2UgTGluZUpvaW46Ok1pdGVyOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihw
bGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTGluZUpvaW46OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0
Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5Sb3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTGluZUpvaW46OkJldmVsOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9y
bUNvbnRleHQoKSwga0NHTGluZUpvaW5CZXZlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQot
ewotICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwotICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7Ci0gICAgbV9kYXRhLT5t
X3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBDR0NvbnRl
eHRSb3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKLSAgICBtX2RhdGEtPnJvdGF0
ZShhbmdsZSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlk
ZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KQotewotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHQoKSwgeCwgeSk7Ci0gICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgbV9kYXRh
LT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLXsKLSAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0KCks
IHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX2Rh
dGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQotewotICAgIENHQ29udGV4dFNldENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJh
bnNmb3JtKTsKLSAgICBtX2RhdGEtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi1BZmZp
bmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUg
aW5jbHVkZVNjYWxlKSBjb25zdAotewotICAgIC8vIFRoZSBDVE0gdXN1YWxseSBpbmNsdWRlcyB0
aGUgZGV2aWNlU2NhbGVGYWN0b3IgZXhjZXB0IGluIFdlYktpdCAxIHdoZW4gdGhlCi0gICAgLy8g
Y29udGVudCBpcyBub24tY29tcG9zaXRlZCwgc2luY2UgdGhlIHNjYWxlIGZhY3RvciBpcyBpbnRl
Z3JhdGVkIGF0IGEgbG93ZXIKLSAgICAvLyBsZXZlbC4gVG8gZ3VhcmFudGVlIHRoZSBkZXZpY2VT
Y2FsZSBpcyBpbmNsdWRlZCwgd2UgY2FuIHVzZSB0aGlzIENHIEFQSS4KLSAgICBpZiAoaW5jbHVk
ZVNjYWxlID09IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBD
R0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3JtKHBsYXRmb3JtQ29udGV4
dCgpKTsKLQotICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwot
fQotCiBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewogICAgIC8v
IEl0IGlzIG5vdCBlbm91Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2aWNlIHNwYWNl
LiBUaGUgcm90YXRpb24gcGFydCBvZiB0aGUKQEAgLTEyODAsNyArMTI3Nyw5IEBAIEZsb2F0UmVj
dCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIFJvdW5kaW5nCiAgICAgaWYgKG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1L
bm93blRvQmVJZGVudGl0eSkKICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3QpOwog
Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0VXNlclNw
YWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIENHQWZmaW5lVHJhbnNm
b3JtIGRldmljZU1hdHJpeCA9IENHQ29udGV4dEdldFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFu
c2Zvcm0oY29udGV4dCk7CiAgICAgaWYgKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShkZXZp
Y2VNYXRyaXgpKSB7CiAgICAgICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93
blRvQmVJZGVudGl0eSA9IHRydWU7CiAgICAgICAgIHJldHVybiByb3VuZGVkSW50UmVjdChyZWN0
KTsKQEAgLTEzMTksNiArMTMxOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAgICAgaWYg
KCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIGxvY2FsU3Ryb2tlQ29sb3Ioc3Ry
b2tlQ29sb3IoKSk7CiAKICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNB
bmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChGbG9hdFJlY3QocG9pbnQsIEZsb2F0U2l6ZSh3aWR0
aHMubGFzdCgpLCB0aGlja25lc3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3IpOwpAQCAt
MTM2NCwxMiArMTM2NCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lcwogICAgIH0KIAogICAg
IGlmIChmaWxsQ29sb3JJc05vdEVxdWFsVG9TdHJva2VDb2xvcikKLSAgICAgICAgc2V0Q0dGaWxs
Q29sb3IocGxhdGZvcm1Db250ZXh0KCksIGxvY2FsU3Ryb2tlQ29sb3IpOworICAgICAgICBzZXRD
R0ZpbGxDb2xvcihjb250ZXh0LCBsb2NhbFN0cm9rZUNvbG9yKTsKIAotICAgIENHQ29udGV4dEZp
bGxSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaEJvdW5kcy5kYXRhKCksIGRhc2hCb3VuZHMu
c2l6ZSgpKTsKKyAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwgZGFzaEJvdW5kcy5kYXRh
KCksIGRhc2hCb3VuZHMuc2l6ZSgpKTsKIAogICAgIGlmIChmaWxsQ29sb3JJc05vdEVxdWFsVG9T
dHJva2VDb2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGZp
bGxDb2xvcigpKTsKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgZmlsbENvbG9yKCkp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYg
bGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKQEAgLTE0MTIsMTcgKzE0MTIsMTggQEAg
UmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKQogewogICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBiYXNlIENU
TSBvZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQgdG8g
aXQuCiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwgY2F1
c2UgY2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKICAgICAvLyB0byBk
cmF3IHdpdGggYSBzY2FsZSBmYWN0b3Igb2YgMSByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIHNjYWxl
IGZhY3Rvci4KLSAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBDR0Fm
ZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCkp
LCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBDR0NvbnRleHRT
ZXRCYXNlQ1RNKGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFz
ZUNUTShjb250ZXh0KSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBv
cnRzIHNvbGlkIGNvbG9ycy4KLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0
ZS5maWxsUGF0dGVybikgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBmaWxsUGF0dGVybigp
KSB7CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTQzNCw3ICsxNDM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Zmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7CiAgICAgLy8gQ0dD
b250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KLSAg
ICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsK
KyAgICBpZiAoc3Ryb2tlR3JhZGllbnQoKSB8fCBzdHJva2VQYXR0ZXJuKCkpIHsKICAgICAgICAg
c3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTE0NjgsOSArMTQ2OSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaQogCiBib29sIEdyYXBo
aWNzQ29udGV4dENHOjpjYW5Vc2VTaGFkb3dCbHVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHJl
bmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVy
cmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgcmV0
dXJuIChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYg
aGFzQmx1cnJlZFNoYWRvdygpICYmICFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpOwogfQogCi19
CiAKLSNlbmRpZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmgKaW5kZXggNDY4YTQ0YmFhODZlZTUyNjE5ZDI1NWY5Mzk0M2E5NzU1YmFjOWZh
Yi4uZjk5YzNkOWI5YmQyODI1ODY1ZmRmN2VhODBiMmFmMDBlMzRiNTJkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAx
MCwgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDUzICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAor
I2lmIFVTRShDRykKKwogI2luY2x1ZGUgIkNvbG9yU3BhY2VDRy5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNHQWZmaW5lVHJhbnNmb3Jt
IGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKLQotY2xhc3MgQ0dDb250ZXh0U3RhdGVT
YXZlciB7Ci1wdWJsaWM6Ci0gICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29u
dGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCi0gICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKLSAgICB7
Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0U2F2
ZUdTdGF0ZShtX2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB+Q0dDb250ZXh0U3RhdGVTYXZl
cigpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIENH
Q29udGV4dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBz
YXZlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAg
IENHQ29udGV4dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9y
ZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZSht
X2NvbnRleHQpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zYXZl
QW5kUmVzdG9yZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIENHQ29udGV4dFJlZiBtX2Nv
bnRleHQ7Ci0gICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOwotfTsKLQogY2xhc3MgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0Q0cgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKIHB1Ymxp
YzoKICAgICBHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYpOwpAQCAtODUsNjkgKzQ1LDQ4
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwog
ICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZv
aWQgc2F2ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIHZvaWQgc2V0
SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQo
KSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29s
KSBmaW5hbDsKIAorICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZp
bmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5
U3Ryb2tlUGF0dGVybigpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFs
OwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikg
ZmluYWw7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkg
ZmluYWw7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCiAgICAgdm9p
ZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CiAKLSAgICB1c2lu
ZyBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0OwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLQotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29u
dGV4dChib29sKSBmaW5hbDsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5h
bDsKLQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7Ci0gICAg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAogICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotCiAgICAgdm9pZCBjbGlwUGF0aChj
b25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisgICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQg
c2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERh
c2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4o
TGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7
CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7
CiAKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6
ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2
b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQg
ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChj
b25zdCBQYXRoJikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwot
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUo
ZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5j
bHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQg
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKIAot
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5k
aW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmlu
YWw7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBm
bG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CkBAIC0xNTYs
MTggKzk1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlm
CiAKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsOwogCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CiAgICAgdm9pZCBk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50
JikgZmluYWw7CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CiAKICAgICBib29sIHN1
cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJM
JiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9y
UmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZv
aWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQ
b2ludCYpIGZpbmFsOwogCiAgICAgdmlydHVhbCBib29sIGNhblVzZVNoYWRvd0JsdXIoKSBjb25z
dDsKIApAQCAtMTc1LDkgKzExNywxNiBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICNl
bmRpZgogCisgICAgQ0dDb250ZXh0UmVmIGludGVybmFsUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7
CisKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEg
eyBudWxscHRyIH07CiB9OwogCi19CitDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RN
KENHQ29udGV4dFJlZik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIkNH
Q29udGV4dFN0YXRlU2F2ZXIuaCIKIAorI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAK
aW5kZXggZTZjZTJmYjk3MjQ3YTZiODZjMDliMWFkMzYxNzAxYzJlYzNlODYyNS4uYWYwMGEwMTMz
NDdlMGNkODVhMzBiODg0ZWJjNzlmMzJmMWUyMzEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTEy
Nyw3ICsxMjcsNyBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNo
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYQogCiAgICAgLy8gT2xkIGFuZCBu
ZXcgY29udGV4dCBzY2FsaW5nIGZhY3RvcnMgaGF2ZSB0byBtYXRjaCBhcyB3ZWxsLgogICAgIEFm
ZmluZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFRyYW5zZm9ybTsKLSAgICBj
b250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2Nh
bGUpLmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKKyAgICBjb250ZXh0LmdldENUTSgp
LmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybTo6
RGVjb21wb3NlZFR5cGUgY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybTsKICAgICBtX2NhY2hlZFRy
YW5zZm9ybS5kZWNvbXBvc2UoY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybSk7CkBAIC0yNTUsNyAr
MjU1LDcgQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVk
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICB0cmFuc2Zvcm1Db250ZXh0Rm9y
UGFpbnRpbmcoYnVmZmVyQ29udGV4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KG1fY2FjaGVkSW1hZ2VS
ZWN0LmxvY2F0aW9uKCksIHNyY1JlY3Quc2l6ZSgpKSk7CiAgICAgZHJhd1BERlBhZ2UoYnVmZmVy
Q29udGV4dCk7CiAKLSAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKEdyYXBo
aWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9jYWNoZWRU
cmFuc2Zvcm0gPSBjb250ZXh0LmdldENUTSgpOwogICAgIG1fY2FjaGVkRGVzdGluYXRpb25SZWN0
ID0gZHN0UmVjdDsKICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogICAgICsrbV9j
YWNoaW5nQ291bnRGb3JUZXN0aW5nOwpAQCAtMzYzLDYgKzM2Myw4IEBAIHZvaWQgUERGRG9jdW1l
bnRJbWFnZTo6ZHJhd1BERlBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogCiAgICAgY29u
dGV4dC50cmFuc2xhdGUoLW1fY3JvcEJveC5sb2NhdGlvbigpKTsKIAorICAgIGNvbnRleHQuYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKwogICAgIC8vIENHUERGIHBhZ2VzIGFyZSBpbmRleGVkIGZyb20g
MS4KICNpZiBQTEFURk9STShDT0NPQSkKICAgICBDR0NvbnRleHREcmF3UERGUGFnZVdpdGhBbm5v
dGF0aW9ucyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1BERkRvY3VtZW50R2V0UGFnZSht
X2RvY3VtZW50LmdldCgpLCAxKSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCBkNjg5YTUxYTg5MTAyYTUwOTA0NTU5YjQ0
MjIzNjlkZTE0NzAzMzM1Li5mZGVlZjZiMzhkMGM1YjU1NTY3MzdlYjdmNDRhZjJmMmZjOWE0NDQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAK
QEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgIEdyYXBoaWNz
Q29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBzdHJva2VTdHlsZUFwcGxp
ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAotICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBh
dGhDb250YWluc1BvaW50KGNvbnRleHQsIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKKyAgICBib29s
IGhpdFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChncmFwaGljc0NvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKICAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogCiAgICAgcmV0dXJuIGhpdFN1Y2Nlc3M7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhz
UmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggZWZiYzFlNDk1NDQx
YmVkZTczNGU5NDhkZDI2ZDM3MTQ0MTY1NTNlMC4uZTliN2FjNGQ3ZjRjYmY3NDEyODkzOWJmYThj
MDRlNzY1YTBkYmQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVU
ZXh0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJEcmF3R2x5cGhzUmVjb3JkZXIuaCIKIAotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5j
bHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9udC5o
IgpAQCAtMzUsNDkgKzM0LDQxIEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KICNpbmNs
dWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lm
IFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgot
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRl
UmVmIGJlZ2luTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5n
U3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDRkRpY3Rp
b25hcnlSZWYsIENHQ29udGV4dERlbGVnYXRlUmVmKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRl
UmVmIGJlZ2luTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0LCBDRkRpY3Rpb25hcnlSZWYsIENH
Q29udGV4dERlbGVnYXRlUmVmKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIg
PSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJ
bmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihyc3RhdGUsIGdz
dGF0ZSwgcmVjdCk7CisgICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihnc3RhdGUpOwogICAg
IHJldHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExh
eWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJz
dGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVu
ZExheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVm
LCBDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRl
ciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdl
dEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmRFbmRMYXllcihyc3RhdGUsIGdz
dGF0ZSk7CisgICAgcmVjb3JkZXIucmVjb3JkRW5kTGF5ZXIoZ3N0YXRlKTsKICAgICByZXR1cm4g
ZGVsZWdhdGU7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdh
dGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBn
c3RhdGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiB0bSwgY29uc3QgQ0dHbHlwaCBnbHlwaHNb
XSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIENHRXJy
b3IgZHJhd0dseXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdT
dGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNv
bnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBj
b3VudCkKIHsKLSAgICBpZiAoQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpID4gMCkgewotICAgICAg
ICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNS
ZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgICAgICBy
ZWNvcmRlci5yZWNvcmREcmF3R2x5cGhzKHJzdGF0ZSwgZ3N0YXRlLCB0bSwgZ2x5cGhzLCBwb3Np
dGlvbnMsIGNvdW50KTsKLSAgICB9CisgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9
ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldElu
Zm8oZGVsZWdhdGUpKTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3R2x5cGhzKGdzdGF0ZSwgZ2x5
cGhzLCBwb3NpdGlvbnMsIGNvdW50KTsKICAgICByZXR1cm4ga0NHRXJyb3JTdWNjZXNzOwogfQog
Ci1zdGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUs
IENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCBy
ZWN0LCBDR0ltYWdlUmVmIGltYWdlKQorc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4
dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBn
c3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGltYWdlKQogewogICAgIERyYXdHbHlwaHNS
ZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dD
b250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRHJh
d0ltYWdlKHJzdGF0ZSwgZ3N0YXRlLCByZWN0LCBpbWFnZSk7CisgICAgcmVjb3JkZXIucmVjb3Jk
RHJhd0ltYWdlKGdzdGF0ZSwgcmVjdCwgaW1hZ2UpOwogICAgIHJldHVybiBrQ0dFcnJvclN1Y2Nl
c3M7CiB9CiAKLVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6
Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKK3N0YXRpYyBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0
PiBjcmVhdGVJbnRlcm5hbENvbnRleHQoRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlcikKIHsK
LSAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdhdGVDcmVh
dGUodGhpcykpOworICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHRE
ZWxlZ2F0ZUNyZWF0ZSgmcmVjb3JkZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxi
YWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVCZWdpbkxheWVyLCByZWludGVycHJldF9jYXN0
PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZiZWdpbkxheWVyKSk7CiAgICAgQ0dDb250ZXh0
RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRW5kTGF5ZXIsIHJl
aW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmVuZExheWVyKSk7CiAg
ICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRl
RHJhd0dseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigm
V2ViQ29yZTo6ZHJhd0dseXBocykpOwpAQCAtODYsNjcgKzc3LDE1IEBAIFVuaXF1ZVJlZjxHcmFw
aGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkK
ICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHRDRz4oY29udGV4dC5nZXQo
KSk7CiB9CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNz
Q29udGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlw
aHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBt
X293bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocyBk
ZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJv
bUNvbnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQp
CiAgICAgLCBtX2RlY29uc3RydWN0RHJhd0dseXBocyhkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAg
ICAgLCBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dChkZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAg
LCBtX2ludGVybmFsQ29udGV4dChjcmVhdGVJbnRlcm5hbENvbnRleHQoKSkKKyAgICAsIG1faW50
ZXJuYWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4dCgqdGhpcykpCiB7CiB9CiAKLXZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0
eWxlLmNvbG9yID0gY29udGV4dFN0YXRlLmZpbGxDb2xvcjsKLSAgICBtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLmdyYWRpZW50ID0gY29udGV4dFN0YXRlLmZpbGxHcmFkaWVudDsKLSAgICBtX29y
aWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3Rh
dGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxT
dHlsZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLmZpbGxQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5h
bFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yID0gY29udGV4dFN0YXRlLnN0cm9rZUNvbG9yOwotICAg
IG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5zdHJv
a2VHcmFkaWVudDsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwot
ICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLnN0
cm9rZVBhdHRlcm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuY3RtID0gbV9vd25lci5nZXRDVE0o
KTsgLy8gRklYTUU6IERlYWwgd2l0aCBiYXNlIENUTS4KLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cub2Zmc2V0ID0gY29udGV4dFN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBtX29yaWdpbmFs
U3RhdGUuc2hhZG93LmJsdXIgPSBjb250ZXh0U3RhdGUuc2hhZG93Qmx1cjsKLSAgICBtX29yaWdp
bmFsU3RhdGUuc2hhZG93LmNvbG9yID0gY29udGV4dFN0YXRlLnNoYWRvd0NvbG9yOwotICAgIG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA9IGNvbnRleHRTdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtczsKLQotICAgIG1fY3VycmVudFN0YXRlID0gbV9vcmlnaW5hbFN0
YXRlOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAgICBpZiAo
bV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50
ZXJuYWxDb250ZXh0LT5zZXRGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xv
cik7Ci0gICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCkKLSAg
ICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRl
LmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNw
YWNlVHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxTdGF0
ZS5maWxsU3R5bGUucGF0dGVybik7Ci0gICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0
eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbFBhdHRl
cm4oKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYg
KG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5
bGUuY29sb3IpOwotICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFk
aWVudCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KCptX29y
aWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VT
dHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJU
KG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKLSAgICAgICAgaWYgKG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENv
bnRleHQtPnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0
ZXJuKTsKLSAgICB9Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0Q1RNKG1fb3JpZ2luYWxT
dGF0ZS5jdG0pOwotCi0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgbV9p
bnRlcm5hbENvbnRleHQtPnNldFNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwg
bV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9y
LCBjb250ZXh0U3RhdGUuc2hhZG93UmFkaXVzTW9kZSk7Ci0KLSAgICBtX2ludGVybmFsQ29udGV4
dC0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwotfQot
Ci12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBG
b250JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OnNldEludGVybmFsRm9udChjb25zdCBGb250JiBmb250LCBGb250U21vb3Ro
aW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIEFTU0VSVChDR0FmZmluZVRyYW5zZm9ybUlz
SWRlbnRpdHkoQ1RGb250R2V0TWF0cml4KGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKSk7
CiAKQEAgLTE1NiwxMDQgKzk1LDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJl
SW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNCiAgICAgbV9v
cmlnaW5hbFRleHRNYXRyaXggPSBjb21wdXRlT3ZlcmFsbFRleHRNYXRyaXgoZm9udCk7CiAgICAg
aWYgKGZvbnQucGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246
OlZlcnRpY2FsKQogICAgICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVWZXJ0aWNh
bFRleHRNYXRyaXgoZm9udCwgbV9vcmlnaW5hbFRleHRNYXRyaXgpOwotCi0gICAgYXV0byYgY29u
dGV4dFN0YXRlID0gbV9vd25lci5zdGF0ZSgpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShj
b250ZXh0U3RhdGUpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnRleHRTdGF0ZSk7
CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29udGV4dCgp
CitHcmFwaGljc0NvbnRleHRTdGF0ZSBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5h
bENvbnRleHQoKQogewotICAgIHVwZGF0ZUNUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKLSAgICB1
cGRhdGVGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvciwgbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuLmdldCgpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUu
c3Ryb2tlU3R5bGUuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudC5n
ZXQoKSwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVw
ZGF0ZVNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRl
LnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBtX29yaWdpbmFsU3Rh
dGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPyBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVz
IDogU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Ok5vKTsKKyAgICBhdXRvIG9yaWdpbmFsU3RhdGUg
PSBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5t
ZXJnZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPmFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGU7CiB9CiAKLXZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImIG5ld0NvbG9y
LCBHcmFkaWVudCogbmV3R3JhZGllbnQsIFBhdHRlcm4qIG5ld1BhdHRlcm4pCit2b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6cmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSkKIHsKLSAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdy
b25nIGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVzZS4KLSAgICAvLyBD
VCB3aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlz
IHRoZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4
dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMg
Y2hlY2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0NvbG9yID09IG1fY3Vy
cmVudFN0YXRlLmZpbGxTdHlsZS5jb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGUgbmV3U3RhdGU7Ci0gICAgbmV3U3RhdGUuZmlsbENvbG9yID0gbmV3Q29s
b3I7Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5maWxsR3JhZGllbnQg
PSBuZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0dGVybikKLSAgICAgICAgbmV3U3RhdGUuZmls
bFBhdHRlcm4gPSBuZXdQYXR0ZXJuOwotICAgIG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3Rh
dGUsIHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1
cnJlbnRTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBuZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9u
Q29udGV4dC5tZXJnZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7CiB9CiAKLXZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjp1cGRhdGVTdHJva2VDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdy
YWRpZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICAv
LyBUaGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBs
aW1pdGVkIHVzZS4KLSAgICAvLyBDVCB3aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlk
IGNvbG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBj
b25jbHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9y
aWdpbmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAg
aWYgKG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBuZXdT
dGF0ZS5zdHJva2VDb2xvciA9IG5ld0NvbG9yOwotICAgIGlmIChuZXdHcmFkaWVudCkKLSAgICAg
ICAgbmV3U3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBuZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0
dGVybikKLSAgICAgICAgbmV3U3RhdGUuc3Ryb2tlUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAg
bV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlQ29sb3JDaGFuZ2UgfSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29s
b3IgPSBuZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRl
R2V0Q1RNKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OnVwZGF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKK3ZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7Ci0g
ICAgaWYgKGN0bSA9PSBtX2N1cnJlbnRTdGF0ZS5jdG0pCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fb3duZXIuc2V0Q1RNKGN0bSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuY3RtID0gY3RtOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Cisg
ICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotc3Rh
dGljIGJvb2wgc2hhZG93SXNDbGVhcmVkKGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBm
bG9hdCBzaGFkb3dCbHVyKQotewotICAgIHJldHVybiBzaGFkb3dPZmZzZXQgPT0gRmxvYXRTaXpl
KCkgJiYgIXNoYWRvd0JsdXI7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVT
aGFkb3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyBpZiBub2JvZHkgaGFzIGFueSBzaGFkb3dzLgotICAgIGlmIChz
aGFkb3dJc0NsZWFyZWQoc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyKSAmJiBzaGFkb3dJc0NsZWFy
ZWQobV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJs
dXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0
ZTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBzdGF0ZUNoYW5n
ZUZsYWdzOwotCi0gICAgaWYgKHNoYWRvd09mZnNldCAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cu
b2Zmc2V0IHx8IHNoYWRvd0JsdXIgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgfHwgc2hh
ZG93Q29sb3IgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmNvbG9yKSB7Ci0gICAgICAgIG5ld1N0
YXRlLnNoYWRvd09mZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93
Qmx1ciA9IHNoYWRvd0JsdXI7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd0NvbG9yID0gc2hhZG93
Q29sb3I7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMg
IT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkICYmIChzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKSAhPSBtX2N1cnJlbnRT
dGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtczo6WWVzKTsKLSAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKLSAgICB9Ci0g
ICAgaWYgKHN0YXRlQ2hhbmdlRmxhZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgc3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAg
ICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0ID0gc2hhZG93T2Zmc2V0OwotICAgIG1fY3Vy
cmVudFN0YXRlLnNoYWRvdy5ibHVyID0gc2hhZG93Qmx1cjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5z
aGFkb3cuY29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuaWdu
b3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtczo6WWVzKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNo
YWRvdyhDR1N0eWxlUmVmIHN0eWxlKQorc3RhdGljIHZvaWQgc2V0RHJvcFNoYWRvdyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgQ0dTdHlsZVJlZiBzdHlsZSkKIHsKICAgICBp
ZiAoQ0dTdHlsZUdldFR5cGUoc3R5bGUpICE9IGtDR1N0eWxlU2hhZG93KSB7CiAgICAgICAgIC8v
IEZJWE1FOiBTdXBwb3J0IG1vcmUga2luZHMgb2YgQ0dTdHlsZXMuCi0gICAgICAgIHVwZGF0ZVNo
YWRvdyh7MCwgMH0sIDAsIENvbG9yKCksIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpVbnNwZWNp
ZmllZCk7CisgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0yNjEsMjAgKzEzNCw5IEBAIHZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjp1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZiBzdHlsZSkKICAgICBhdXRvIHJhZCA9IGRl
ZzJyYWQoc2hhZG93U3R5bGUuYXppbXV0aCAtIDE4MCk7CiAgICAgYXV0byBzaGFkb3dPZmZzZXQg
PSBGbG9hdFNpemUoc3RkOjpjb3MocmFkKSwgc3RkOjpzaW4ocmFkKSkgKiBzaGFkb3dTdHlsZS5o
ZWlnaHQ7CiAgICAgYXV0byBzaGFkb3dDb2xvciA9IENHU3R5bGVHZXRDb2xvcihzdHlsZSk7Ci0g
ICAgdXBkYXRlU2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93U3R5bGUucmFkaXVzLCBDb2xvcjo6
Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHNoYWRvd0NvbG9yKSwgU2hhZG93c0lnbm9yZVRy
YW5zZm9ybXM6Olllcyk7Ci19CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdp
bkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0KQot
ewotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgYXV0byBhbHBo
YSA9IENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKTsKLSAgICBtX293bmVyLmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoYWxwaGEpOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5k
TGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQotewotICAgIHVw
ZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgbV9vd25lci5lbmRUcmFuc3Bh
cmVuY3lMYXllcigpOworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hh
ZG93T2Zmc2V0LCBzdGF0aWNfY2FzdDxmbG9hdD4oc2hhZG93U3R5bGUucmFkaXVzKSwgQ29sb3I6
OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzaGFkb3dDb2xvcikgfSk7CisgICAgZGVzdGlu
YXRpb25Db250ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRydWUpOwogfQogCiBzdGF0
aWMgVmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhjb25zdCBDR1Bv
aW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiB0
ZXh0TWF0cml4KQpAQCAtMjkwLDE4ICsxNTIsMTggQEAgc3RhdGljIFZlY3RvcjxDR1NpemU+IGNv
bXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMoY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2kK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3Jk
RHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0
IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2lu
dCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJl
Y29yZERyYXdHbHlwaHMoQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0dseXBoIGdseXBoc1td
LCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCiB7CiAgICAgQVNTRVJU
X0lNUExJRVMobV9kZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0
OjpObywgbV9vcmlnaW5hbEZvbnQpOwogCi0gICAgaWYgKCFjb3VudCkKKyAgICBpZiAoIWNvdW50
IHx8IENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSA8PSAwKQogICAgICAgICByZXR1cm47CiAKICAg
ICBDR0ZvbnRSZWYgdXNlZEZvbnQgPSBDR0dTdGF0ZUdldEZvbnQoZ3N0YXRlKTsKICAgICBpZiAo
bV9kZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyAmJiB1
c2VkRm9udCAhPSBhZG9wdENGKENURm9udENvcHlHcmFwaGljc0ZvbnQobV9vcmlnaW5hbEZvbnQt
PnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBudWxscHRyKSkuZ2V0KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0
aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKIAogICAgIC8v
IFdlIHdhbnQgdGhlIHJlcGxheWVyJ3MgQ1RNIGFuZCB0ZXh0IG1hdHJpeCB0byBtYXRjaCB0aGUg
Y3VycmVudCBDVE0gYW5kIHRleHQgbWF0cml4LgogICAgIC8vIFRoZSBjdXJyZW50IHRleHQgbWF0
cml4IGlzIGEgY29uY2F0ZW5hdGlvbiBvZiB3aGF0ZXZlciBXZWJLaXQgc2V0cyBpdCB0byBhbmQg
d2hhdGV2ZXIKQEAgLTMyNCwxMyArMTg2LDE2IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpy
ZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAg
ICAgICAgIGludmVyc2VDVE1GaXh1cCA9IGludmVyc2UudmFsdWUoKTsKICAgICBlbHNlCiAgICAg
ICAgIGN0bUZpeHVwID0gQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgbV9vd25lci5jb25jYXRDVE0o
Y3RtRml4dXApOworCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RNKGN0bUZpeHVw
KTsKIAogICAgIGF1dG8gZmlsbENvbG9yID0gQ0dHU3RhdGVHZXRGaWxsQ29sb3IoZ3N0YXRlKTsK
KyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFBy
ZXNlcnZlQ29sb3JTcGFjZShmaWxsQ29sb3IpKTsKKwogICAgIGF1dG8gc3Ryb2tlQ29sb3IgPSBD
R0dTdGF0ZUdldFN0cm9rZUNvbG9yKGdzdGF0ZSk7Ci0gICAgdXBkYXRlRmlsbENvbG9yKENvbG9y
OjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2UoZmlsbENvbG9yKSk7Ci0gICAgdXBkYXRlU3Ry
b2tlQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikp
OwotICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOworICAgIG1fZGVz
dGluYXRpb25Db250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNv
bG9yU3BhY2Uoc3Ryb2tlQ29sb3IpKTsKKworICAgIHNldERyb3BTaGFkb3cobV9kZXN0aW5hdGlv
bkNvbnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAgICBhdXRvIGZvbnRTaXpl
ID0gQ0dHU3RhdGVHZXRGb250U2l6ZShnc3RhdGUpOwogICAgIFJlZiBmb250ID0gbV9kZXJpdmVG
b250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyA/ICptX29yaWdpbmFs
Rm9udCA6IEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGFkb3B0Q0YoQ1RGb250Q3JlYXRl
V2l0aEdyYXBoaWNzRm9udCh1c2VkRm9udCwgZm9udFNpemUsIG51bGxwdHIsIG51bGxwdHIpKSwg
Zm9udFNpemUpKTsKQEAgLTM0NSwzMCArMjEwLDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0
CiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjMyOTE3PiAoYERyYXdH
bHlwaHNSZWNvcmRlcmAgc2hvdWxkIGJlIGFibGUgdG8gcmVjb3JkK3JlcGxheSB2ZXJ0aWNhbCB0
ZXh0KQogICAgIH0KIAotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBn
bHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3VudCwgdGV4
dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgdGV4dE1hdHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0p
LCBtX3Ntb290aGluZ01vZGUpOwotCi0gICAgbV9vd25lci5jb25jYXRDVE0oaW52ZXJzZUNUTUZp
eHVwKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZv
bnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50
LCB0ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9u
c1swXSksIG1fc21vb3RoaW5nTW9kZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0
Q1RNKGludmVyc2VDVE1GaXh1cCk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNv
cmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1Jl
Y3QgcmVjdCwgQ0dJbWFnZVJlZiBjZ0ltYWdlKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJl
Y29yZERyYXdJbWFnZShDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVm
IGNnSW1hZ2UpCiB7Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAg
ICB1cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0
aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIHNldERyb3BT
aGFkb3cobV9kZXN0aW5hdGlvbkNvbnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAK
ICAgICAvLyBDb3JlIEdyYXBoaWNzIGFzc3VtZXMgYSAieSB1cCIgY29vcmRpbmF0ZSBzeXN0ZW0s
IGJ1dCBpbiBXZWJLaXQsIHdlIHVzZSBhICJ5LWRvd24iIGNvb3JkaW5hdGUgc3lzdGVtLgogICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCBXZWJLaXQncyBkcmF3aW5nIHJvdXRpbmVzIChHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZSgpKSBpbnRlbnRpb25hbGx5IGRyYXcgaW1hZ2VzIHVwc2lkZS1kb3du
IGZyb20gQ29yZSBHcmFwaGljcydzIHBvaW50IG9mIHZpZXcuCiAgICAgLy8gKFRoZXJlJ3MgYSB5
LWZsaXAgaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZSgpLikKICAgICAvLyBUaGUgcmVjdCBoYXMgdGhlIHJpZ2h0IGJvdW5kcywgYnV0IHdlIG5l
ZWQgdG8gdHJhbnNmb3JtIGZyb20gQ0cncyBjb29yZGluYXRlIHN5c3RlbSB0byBXZWJLaXQncyBi
eSBwZXJmb3JtaW5nIG91ciBvd24geS1mbGlwIHNvIGltYWdlcyBhcmUgZHJhd24gdGhlIHJpZ2h0
LXNpZGUtdXAuCiAgICAgLy8gV2UgZG8gdGhpcyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGUg
dHdvIEFQSXMsIHdoaWNoIGlzIHJpZ2h0IGhlcmUuCi0gICAgbV9vd25lci50cmFuc2xhdGUoMCwg
cmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKLSAgICBtX293bmVyLnNjYWxl
KEZsb2F0U2l6ZSgxLCAtMSkpOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRl
KDAsIHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSk7CisgICAgbV9kZXN0aW5h
dGlvbkNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgCiAgICAgYXV0byBpbWFn
ZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5kcmF3TmF0aXZl
SW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7
eyB9LCBpbWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0
aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd05h
dGl2ZUltYWdlKCppbWFnZSwgaW1hZ2UtPnNpemUoKSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9hdFJl
Y3QgeyB7IH0sIGltYWdlLT5zaXplKCkgfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9y
aWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOworICAgIAogICAgIC8vIFVuZG8gdGhlIGFib3Zl
IHktZmxpcCB0byByZXN0b3JlIHRoZSBjb250ZXh0LgotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRT
aXplKDEsIC0xKSk7Ci0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgLShyZWN0LnNpemUuaGVpZ2h0
ICsgMiAqIHJlY3Qub3JpZ2luLnkpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShG
bG9hdFNpemUoMSwgLTEpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwg
LShyZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpKTsKK30KKwordm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9u
dFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBzZXRJbnRlcm5hbEZvbnQoZm9u
dCwgc21vb3RoaW5nTW9kZSk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFy
ZUludGVybmFsQ29udGV4dCgpOworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJu
YWxDb250ZXh0LCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQs
IHNtb290aGluZ01vZGUpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxT
dGF0ZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0zNzks
MjUgKzI1MiwxOSBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIGF1dG8gYm91bmRz
ID0gZm9udC5ib3VuZHNGb3JHbHlwaChnbHlwaHNbaV0pOwogCiAgICAgICAgIC8vIENyZWF0ZSBh
IGxvY2FsIEltYWdlQnVmZmVyIGJlY2F1c2UgZGVjb2RpbmcgdGhlIFNWRyBmb250cyBoYXMgdG8g
aGFwcGVuIGluIFdlYlByb2Nlc3MuCi0gICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9v
d25lci5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoYm91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9kOjpMb2NhbCkpIHsKKyAgICAgICAgaWYgKGF1dG8g
aW1hZ2VCdWZmZXIgPSBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZm
ZXIoYm91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9k
OjpMb2NhbCkpIHsKKyAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKICAgICAgICAgICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKGltYWdlQnVm
ZmVyLT5jb250ZXh0KCksIGZvbnQsIGdseXBocyArIGksIGFkdmFuY2VzICsgaSwgMSwgRmxvYXRQ
b2ludCgpLCBzbW9vdGhpbmdNb2RlKTsKIAogICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RpbmF0
aW9uUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKTsKICAgICAgICAgICAgIGRlc3RpbmF0
aW9uUmVjdC5tb3ZlQnkocGVuUG9zaXRpb24pOwotICAgICAgICAgICAgbV9vd25lci5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICAgICAgbV9k
ZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZGVzdGluYXRp
b25SZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIHBlblBvc2l0aW9uLm1vdmUoc2l6ZShhZHZh
bmNlc1tpXSkpOwogICAgIH0KIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25P
VFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5n
TW9kZSkKLXsKLSAgICBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGZvbnQsIHNtb290aGluZ01vZGUp
OwotICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxDb250ZXh0LCBmb250LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwot
ICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7Ci19Ci0KIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgYXV0byBv
dHN2Z0dseXBocyA9IGZvbnQuZmluZE9UU1ZHR2x5cGhzKGdseXBocywgbnVtR2x5cGhzKTsKQEAg
LTQ0MCw3ICszMDcsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0J5U3BsaXR0aW5n
SW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmIGZvbgogdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgaWYgKG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzID09
IERlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pIHsKLSAgICAgICAgbV9vd25lci5kcmF3R2x5cGhz
QW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2lu
dCwgc21vb3RoaW5nTW9kZSk7CisgICAgICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBv
aW50LCBzbW9vdGhpbmdNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDUzLDE1
ICszMjAsMTcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KENURm9u
dFJlZiBmb250LCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmUKIHsKICAgICBBU1NFUlQobV9kZWNv
bnN0cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihtX293bmVyKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHNhdmVyKG1fZGVzdGluYXRpb25Db250ZXh0KTsKIAotICAgIG1fb3du
ZXIudHJhbnNsYXRlKGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVS
ZWN0LnNpemUuaGVpZ2h0KTsKLSAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwor
ICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZShsaW5lUmVjdC5vcmlnaW4ueCwgbGlu
ZVJlY3Qub3JpZ2luLnkgKyBsaW5lUmVjdC5zaXplLmhlaWdodCk7CisgICAgbV9kZXN0aW5hdGlv
bkNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAKLSAgICBwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGZvbnQsIGZvbnRTaXplKSksIEZv
bnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKKyAgICBzZXRJbnRlcm5hbEZv
bnQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNt
b290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIAorICAgIGF1dG8gb3JpZ2lu
YWxTdGF0ZSA9IHByZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKICAgICBDR0NvbnRleHRTZXRUZXh0
UG9zaXRpb24obV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAwLCAwKTsKICAg
ICBDVExpbmVEcmF3KGxpbmUsIG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7
Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKKyAgICByZXN0b3JlRGVzdGluYXRpb25D
b250ZXh0KG9yaWdpbmFsU3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2Fz
Y2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCmluZGV4IDUxMWUwOWI5NmNlZjAzMjUwOTBlMjNh
ZjkxNGFlMzVmMmFiOGVkMmUuLmU1MzRjYzU1YWYyNmI3ZmI4MjgwZTYzYjdkYzI1YTNkNGE0MTYz
NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC0xNTIsMjUgKzE1Miwy
NyBAQCBzdGF0aWMgdm9pZCBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMoVmVj
dG9yPENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYg
Zm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3Qg
Q0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dGV4dE1hdHJpeCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQogewogICAgIGlmICgh
Y291bnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBs
YXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisKICAgICBWZWN0b3I8Q0dQb2ludCwg
MjU2PiBwb3NpdGlvbnMoY291bnQpOwogICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24o
KSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7Ci0gICAgICAgIFNjb3BlZFRleHRNYXRy
aXggc2F2ZWRNYXRyaXgoY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCB0ZXh0TWF0cml4
KSwgY29udGV4dCk7CisgICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgoY29tcHV0
ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCB0ZXh0TWF0cml4KSwgY2dDb250ZXh0KTsKIAogICAg
ICAgICBWZWN0b3I8Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhjb3VudCk7CiAgICAgICAgIENU
Rm9udEdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQo
KSwgZ2x5cGhzLCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7CiAKICAgICAgICAgYXV0byBh
c2NlbnREZWx0YSA9IGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jh
c2VsaW5lKSAtIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpOwotICAgICAgICBmaWxs
VmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjb250ZXh0LCB0cmFu
c2xhdGlvbnMuZGF0YSgpLCBhZHZhbmNlcywgY291bnQsIHBvaW50LCBhc2NlbnREZWx0YSk7Ci0g
ICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBv
c2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICAgICAgZmlsbFZlY3RvcldpdGhW
ZXJ0aWNhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY2dDb250ZXh0LCB0cmFuc2xhdGlvbnMu
ZGF0YSgpLCBhZHZhbmNlcywgY291bnQsIHBvaW50LCBhc2NlbnREZWx0YSk7CisgICAgICAgIENU
Rm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5k
YXRhKCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpbGxWZWN0
b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgYWR2YW5j
ZXMsIGNvdW50LCBwb2ludCk7Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRh
LmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAg
ICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBj
Z0NvbnRleHQsIGFkdmFuY2VzLCBjb3VudCwgcG9pbnQpOworICAgICAgICBDVEZvbnREcmF3R2x5
cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3Vu
dCwgY2dDb250ZXh0KTsKICAgICB9CiB9CiAKQEAgLTI0MiwxMCArMjQ0LDcgQEAgdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEcKICAgICBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOwogICAg
IENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAK
LSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAg
Q29sb3Igc2hhZG93Q29sb3I7Ci0gICAgY29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBz
aGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CisgICAgYXV0byBkcm9wU2hhZG93ID0gY29udGV4dC5k
cm9wU2hhZG93KCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQu
Z2V0Q1RNKCk7CiAgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGlj
Qm9sZE9mZnNldCgpOwpAQCAtMjU4LDI5ICsyNTcsMjkgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEcKICAgICAgICAgfQogICAgIH07CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRl
eHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0Nv
bG9yLmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRt
YXBGb250KCkgJiYgKCFjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4
dENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0lu
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQu
dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIGRyb3BTaGFkb3cu
Y29sb3IuaXNWYWxpZCgpICYmICFkcm9wU2hhZG93LmJsdXJSYWRpdXMgJiYgIXBsYXRmb3JtRGF0
YS5pc0NvbG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpIHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYg
IWNvbnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKGhhc1NpbXBsZVNoYWRv
dykgewogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBv
ZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxp
YXNpbmcuCiAgICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmls
bENvbG9yID0gY29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENv
bG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFs
cGhhQXNGbG9hdCgpKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gZHJvcFNoYWRv
dy5jb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0
KCkpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAg
ICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgp
OworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIGRyb3BTaGFkb3cub2Zm
c2V0LndpZHRoKCk7CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9y
bXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNv
IGRvd24gaXMgbmVnYXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgp
ICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoKSA/IC0xIDogMSk7Ci0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2lu
dChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZ
ID0gcG9pbnQueSgpICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNvbnRl
eHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGlm
IChzeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhGbG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4
dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1h
dHJpeCk7CisgICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hh
ZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNvbnRl
eHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CiAgICAgfQogCi0gICAgc2hvd0dseXBoc1dp
dGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1H
bHlwaHMsIHRleHRNYXRyaXgpOworICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZv
bnQsIGNvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAK
ICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZh
bmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50Lnko
KSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0
cml4KTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50Lngo
KSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNvbnRleHQsIGdseXBo
cywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAKICAgICBpZiAoaGFzU2ltcGxl
U2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0Js
dXIsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KGRyb3BTaGFk
b3cpOwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHNob3VsZFNtb290aEZv
bnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwCmluZGV4IDJlMmY0ZjRmMmNiNTVkMzY1ZTVhZTM5OTMyNWQwNWYyYzE3MzYxZmQuLmNj
ZjQwY2VhNjJiMTY3NDM2NmQ3NDg0MTYyYjFiYzRlOTM3NzA3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmNwcApAQCAtOTAsMTAgKzkwLDcgQEAgYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVt
cEZvckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIGlm
ICghKGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMpKSB7CiAg
ICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBpdGVtLmdldDxTZXRTdGF0ZT4oKTsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93LCBvbmx5IGRyb3AgdGhlIGl0ZW0gaWYgdGhl
IG9ubHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4KLSAgICAgICAg
ICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRl
Q2hhbmdlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0
ZSgpLmNoYW5nZXMoKSA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjAyLDE2ICsxOTksNiBAQCB2b2lkIERpc3BsYXlMaXN0
OjphcHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPFNhdmU+KGl0
ZW0uZ2V0PFNhdmU+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8UmVzdG9yZT4oaXRlbS5nZXQ8UmVzdG9yZT4oKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gYXBwZW5kPFRyYW5zbGF0ZT4oaXRlbS5n
ZXQ8VHJhbnNsYXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJl
dHVybiBhcHBlbmQ8Um90YXRlPihpdGVtLmdldDxSb3RhdGU+KCkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNjYWxlOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNjYWxlPihpdGVtLmdldDxTY2FsZT4o
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBh
cHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVt
LmdldDxTZXRDVE0+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoK
ICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0uZ2V0PFNldElu
bGluZUZpbGxDb2xvcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29s
b3I6CkBAIC0yMjAsMTYgKzIwNyw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFu
ZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVt
LmdldDxTZXRTdHJva2VUaGlja25lc3M+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRl
OgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0YXRlPihpdGVtLmdldDxTZXRTdGF0ZT4oKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxT
ZXRMaW5lQ2FwPihpdGVtLmdldDxTZXRMaW5lQ2FwPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lRGFzaD4oaXRlbS5nZXQ8
U2V0TGluZURhc2g+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAg
ICByZXR1cm4gYXBwZW5kPFNldExpbmVKb2luPihpdGVtLmdldDxTZXRMaW5lSm9pbj4oKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxT
ZXRNaXRlckxpbWl0PihpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGVhclNoYWRvdz4oaXRl
bS5nZXQ8Q2xlYXJTaGFkb3c+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAg
IHJldHVybiBhcHBlbmQ8Q2xpcD4oaXRlbS5nZXQ8Q2xpcD4oKSk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcE91dDoKQEAgLTI3NCw4ICsyNTEsNiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQo
SXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9y
PihpdGVtLmdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbENvbXBv
c2l0ZWRSZWN0PihpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOwogICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUm91bmRl
ZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3REcmF3aW5nQ29udGV4dC5jcHAKaW5kZXggMGMyNTIyNjRhZjQxNjY1NjIxNzUxNjA0MTA0MmE4
YmRkM2JmYWJiNS4uZGVmY2U4NGVmMzU4N2JlYTA2ZDIwN2RiNWI4MDJhYTdjODI1NjUwYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcApAQCAt
MzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3Qg
ewogCiBEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDogbV9jb250
ZXh0KG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0s
IGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0
LCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0pCiB7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggNDU3NzU1MTg5YmRh
ZGQ3MTlkMjQ1YTRlNmQyYzgxYmRkYjFmN2RmMy4uMGRiMTUwMzk2MDQwMzJmMzMwM2ZiY2I2NTIx
ZTUzZTRlMzRmOTE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZl
ci5jcHAKQEAgLTUyLDIxICs1Miw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIGdl
dDxSZXN0b3JlPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBnZXQ8VHJhbnNsYXRlPigpLmFwcGx5KGNvbnRl
eHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAg
ICBnZXQ8Um90YXRlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGdldDxTY2FsZT4oKS5hcHBseShjb250ZXh0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAg
ICAgICBnZXQ8Q29uY2F0ZW5hdGVDVE0+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGdldDxTZXRDVE0+KCkuYXBw
bHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVGaWxsQ29sb3I6CiAgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkuYXBwbHkoY29u
dGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc5LDIxICs2NCw2IEBAIHZvaWQgSXRlbUhhbmRs
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0YXRlOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIGdldDxTZXRMaW5lQ2FwPigp
LmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZURhc2g6Ci0gICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5hcHBseShjb250ZXh0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBn
ZXQ8U2V0TGluZUpvaW4+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICBnZXQ8U2V0TWl0ZXJMaW1pdD4o
KS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyU2hhZG93OgotICAgICAgICBnZXQ8Q2xlYXJTaGFkb3c+KCkuYXBwbHkoY29udGV4dCk7Ci0g
ICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICBnZXQ8Q2xp
cD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTYwLDkgKzEzMCw2IEBA
IHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICBnZXQ8RmlsbFJlY3RX
aXRoR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGdldDxGaWxsQ29tcG9zaXRl
ZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkuYXBw
bHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI3MCw5ICsyMzcsNiBAQCB2b2lkIEl0
ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAg
ICBnZXQ8RHJhd1BhdGg+KCkufkRyYXdQYXRoKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGdldDxGaWxsQ29tcG9zaXRl
ZFJlY3Q+KCkufkZpbGxDb21wb3NpdGVkUmVjdCgpOwotICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIGdldDxGaWxsUGF0aD4oKS5+RmlsbFBhdGgo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjg4LDkgKzI1Miw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6
ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBn
ZXQ8RmlsbFJvdW5kZWRSZWN0PigpLn5GaWxsUm91bmRlZFJlY3QoKTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBnZXQ8U2V0TGluZURh
c2g+KCkuflNldExpbmVEYXNoKCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRTdGF0ZToKICAgICAgICAgZ2V0PFNldFN0YXRlPigpLn5TZXRTdGF0ZSgpOwogICAgICAg
ICByZXR1cm47CkBAIC0zMTQsOSArMjc1LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsZWFyUmVjdD46OnZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclNoYWRvdz46OnZhbHVl
KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsaXA+Ojp2YWx1ZSk7
CiAgICAgICAgIHJldHVybjsKQEAgLTMyNiw5ICsyODQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRl
c3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwVG9JbWFnZUJ1
ZmZlcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNh
dGVuYXRlQ1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxDb25jYXRlbmF0ZUNUTT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTM4NywzMyArMzQyLDE1IEBAIHZv
aWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UmVzdG9y
ZT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Um90
YXRlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToK
ICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2F2
ZT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTY2Fs
ZT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0
Q1RNPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lRmlsbENvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lU3Ryb2tlQ29s
b3I+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxTZXRMaW5lQ2FwPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPFNldExpbmVKb2luPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TWl0ZXJMaW1pdD46OnZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0U3Ryb2tl
VGhpY2tuZXNzPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC00MzcsOSArMzc0LDYgQEAg
dm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5l
OgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
dHJva2VMaW5lPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6
VHJhbnNsYXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxUcmFuc2xhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICB9CiB9CiAK
QEAgLTUwMSw4ICs0MzUsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0
ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29w
eUludG88RHJhd1BhdHRlcm4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UGF0aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdQYXRoPihpdGVtT2Zmc2V0
LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAg
ICByZXR1cm4gY29weUludG88RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxG
aWxsUGF0aD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aENvbG9yOgpAQCAtNTEzLDggKzQ0NSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHko
SXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAg
IHJldHVybiBjb3B5SW50bzxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbU9mZnNldCwgKnRo
aXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJu
IGNvcHlJbnRvPEZpbGxSb3VuZGVkUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGluZURh
c2g+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0YXRlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKQEAgLTUzMSwxNiArNDYxLDEyIEBAIGJvb2wgSXRl
bUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRp
b24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxCZWdpblRyYW5zcGFyZW5jeUxheWVy
PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAg
ICAgICByZXR1cm4gY29weUludG88Q2xlYXJSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVh
clNoYWRvdz4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAg
ICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBPdXQ+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoK
ICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBUb0ltYWdlQnVmZmVyPihpdGVtT2Zmc2V0LCAq
dGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVy
biBjb3B5SW50bzxDb25jYXRlbmF0ZUNUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgICAgIHJldHVybiBjb3B5
SW50bzxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CkBAIC01NzMsMjQgKzQ5OSwxMiBAQCBib29sIEl0
ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0
aW9uKSBjb25zdAogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPFJlc3RvcmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxSb3RhdGU+KGl0ZW1PZmZz
ZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICByZXR1cm4gY29w
eUludG88U2F2ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxl
OgotICAgICAgICByZXR1cm4gY29weUludG88U2NhbGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRDVE0+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29s
b3I6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW1PZmZz
ZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtT2Zmc2V0LCAq
dGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPFNldExpbmVDYXA+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVKb2luPihpdGVt
T2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPFNldE1pdGVyTGltaXQ+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CiAgICAgICAgIHJldHVybiBjb3B5
SW50bzxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgpAQCAtNjA3LDggKzUyMSw2IEBAIGJvb2wgSXRlbUhhbmRs
ZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNv
bnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTdHJva2VSZWN0PihpdGVtT2Zmc2V0LCAqdGhp
cyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToKICAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPFN0cm9rZUxpbmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpU
cmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxUcmFuc2xhdGU+KGl0ZW1PZmZzZXQs
ICp0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuY3BwCmluZGV4IDU0ZWExYzg2ODJjMDc0NDJlMmU4NDE0YjczMjhh
YTMyNDgwMjVhNzUuLmJhMGQ5NTFjMjJjZjQ5Y2U0MTdlMzM1NTNiMDBlMGE1YjhhYjIwOTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKQEAgLTM4LDE2ICszOCw2
IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAg
ICAgcmV0dXJuIHNpemVvZihTYXZlKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAg
ICAgICByZXR1cm4gc2l6ZW9mKFJlc3RvcmUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0
ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihUcmFuc2xhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihSb3RhdGUpOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNjYWxlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNjYWxlKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihDb25jYXRlbmF0ZUNU
TSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNl
dENUTSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICBy
ZXR1cm4gc2l6ZW9mKFNldElubGluZUZpbGxDb2xvcik7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lU3Ryb2tlQ29sb3I6CkBAIC01NiwxNiArNDYsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVP
Zkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0U3Ry
b2tlVGhpY2tuZXNzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgcmV0
dXJuIHNpemVvZihTZXRTdGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lQ2FwKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lRGFzaCk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZUpvaW4p
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoU2V0TWl0ZXJMaW1pdCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoQ2xlYXJTaGFkb3cpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6
CiAgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91
dDoKQEAgLTExMCw4ICs5MCw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRl
bVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhDb2xvcik7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHJldHVybiBz
aXplb2YoRmlsbFJlY3RXaXRoR3JhZGllbnQpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21w
b3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsQ29tcG9zaXRlZFJlY3QpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIHNpemVv
ZihGaWxsUm91bmRlZFJlY3QpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOgpAQCAtMTgyLDI4ICsxNjAsMTggQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBl
IHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKICAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclNoYWRvdzoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBPdXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoK
LSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpG
bHVzaENvbnRleHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTY2FsZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNv
bG9yOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZURhc2g6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgY2FzZSBJdGVtVHlwZTo6
VHJhbnNsYXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBJdGVtVHlwZTo6QmVn
aW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CkBAIC0y
MjIsNyArMTkwLDYgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgogI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxMaW5lOgpA
QCAtMjg4LDEzICsyNTUsMTEgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5l
c0ZvclRleHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aEdyYWRpZW50OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdTeXN0ZW1J
bWFnZToKQEAgLTMwNiwxMSArMjcxLDkgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlw
ZSkKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hh
ZG93OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91
dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyOgpAQCAtMzMzLDE1ICsyOTYsOSBAQCBib29s
IGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJh
bWVGb3JNZWRpYToKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2NhbGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVT
dHJva2VDb2xvcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVKb2luOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUVsbGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCkBAIC0zNTEsNyAr
MzA4LDYgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICNlbmRpZgogICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToK
LSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtVHlwZS5oCmluZGV4IGQ2ODNiMmFjZjc4NDVmOTljM2NkMDk1ZWI5MTFlNTRmMWY4Y2UxMTEu
LjE2NjBiOThmZGE1ZWYyN2IzZjc1ZDIyYTU3OWEzYTlhZTNjYzcwZmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1UeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaApAQCAtMzEsMjAgKzMxLDEwIEBAIG5hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7CiBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CiAgICAgU2F2ZSwK
ICAgICBSZXN0b3JlLAotICAgIFRyYW5zbGF0ZSwKLSAgICBSb3RhdGUsCi0gICAgU2NhbGUsCi0g
ICAgQ29uY2F0ZW5hdGVDVE0sCi0gICAgU2V0Q1RNLAogICAgIFNldElubGluZUZpbGxDb2xvciwK
ICAgICBTZXRJbmxpbmVTdHJva2VDb2xvciwKICAgICBTZXRTdHJva2VUaGlja25lc3MsCiAgICAg
U2V0U3RhdGUsCi0gICAgU2V0TGluZUNhcCwKLSAgICBTZXRMaW5lRGFzaCwKLSAgICBTZXRMaW5l
Sm9pbiwKLSAgICBTZXRNaXRlckxpbWl0LAotICAgIENsZWFyU2hhZG93LAogICAgIENsaXAsCiAg
ICAgQ2xpcE91dCwKICAgICBDbGlwVG9JbWFnZUJ1ZmZlciwKQEAgLTY3LDcgKzU3LDYgQEAgZW51
bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIEZpbGxSZWN0LAogICAgIEZpbGxSZWN0
V2l0aENvbG9yLAogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50LAotICAgIEZpbGxDb21wb3NpdGVk
UmVjdCwKICAgICBGaWxsUm91bmRlZFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUs
CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5jcHAKaW5kZXggMjNkMGJiY2M3MWMyODFjNTJjMzVhOGMyNTJkYTk2YzBhYjEyYTk4Yy4u
ODQzZmRmMWU3NzJlN2MxYzM5NjhjMTM4MGYzNDEzOWU4ODNlMzE1YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNTQsNjcgKzU0LDYgQEAgdm9pZCBSZXN0b3JlOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgY29udGV4dC5yZXN0b3Jl
KCk7CiB9CiAKLXZvaWQgVHJhbnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgY29udGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNsYXRlJiBp
dGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgieCIsIGl0ZW0ueCgpKTsKLSAgICB0cy5kdW1w
UHJvcGVydHkoInkiLCBpdGVtLnkoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgUm90
YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4
dC5yb3RhdGUobV9hbmdsZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSb3RhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJhbmdsZSIsIGl0ZW0uYW5nbGUoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2Nh
bGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0
LnNjYWxlKG1fc2l6ZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBTY2FsZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNp
emUiLCBpdGVtLmFtb3VudCgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRDVE06
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNl
dENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBTZXRDVE0mIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJzZXQtY3RtIiwgaXRlbS50cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZv
aWQgQ29uY2F0ZW5hdGVDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LmNvbmNhdENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYg
aXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImN0bSIsIGl0ZW0udHJhbnNmb3JtKCkpOwot
Ci0gICAgcmV0dXJuIHRzOwotfQotCiB2b2lkIFNldElubGluZUZpbGxDb2xvcjo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KGNvbG9yKCkpOwpAQCAtMTQ4LDc3ICs4NywyMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3Ryb2tlVGhpY2tuZXNzJiBzdGF0ZSkKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZs
YWdzKQotICAgIDogbV9zdGF0ZUNoYW5nZShzdGF0ZSwgZmxhZ3MpCi17Ci19Ci0KLVNldFN0YXRl
OjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2Up
Ci0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlKQorU2V0U3RhdGU6OlNldFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKKyAgICA6IG1fc3RhdGUoc3RhdGUpCiB7
CiB9CiAKIHZvaWQgU2V0U3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICBtX3N0YXRlQ2hhbmdlLmFwcGx5KGNvbnRleHQpOworICAgIGNvbnRleHQubWVyZ2VTdGF0
ZUNoYW5nZXMobV9zdGF0ZSk7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3RhdGUpCitzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmKQogewotICAgIHRzIDw8
IHN0YXRlLnN0YXRlQ2hhbmdlKCk7CiAgICAgcmV0dXJuIHRzOwogfQogCi12b2lkIFNldExpbmVD
YXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0
LnNldExpbmVDYXAobV9saW5lQ2FwKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXApCi17Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJsaW5lLWNhcCIsIGxpbmVDYXAubGluZUNhcCgpKTsKLSAgICByZXR1cm4g
dHM7Ci19Ci0KLXZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5LCBtX2Rhc2hP
ZmZzZXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
ZGFzaC1hcnJheSIsIGxpbmVEYXNoLmRhc2hBcnJheSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImRhc2gtb2Zmc2V0IiwgbGluZURhc2guZGFzaE9mZnNldCgpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwotfQotCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpvaW4m
IGxpbmVKb2luKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1qb2luIiwgbGluZUpvaW4u
bGluZUpvaW4oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldE1pdGVyTGltaXQ6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldE1p
dGVyTGltaXQobV9taXRlckxpbWl0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVyTGltaXQmIG1pdGVyTGltaXQpCi17Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJtaXRyZS1saW1pdCIsIG1pdGVyTGltaXQubWl0ZXJMaW1pdCgp
KTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJTaGFkb3c6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7Ci19
Ci0KIHZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwpAQCAtNjU3LDMwICs1NDAsMTUgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aEdy
YWRpZW50JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotdm9pZCBGaWxsQ29tcG9zaXRlZFJl
Y3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0
LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwotfQotCi1zdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBv
c2l0ZWRSZWN0JiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVj
dCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNvbXBvc2l0ZU9wZXJh
dG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2Rl
KCkpOwotICAgIHJldHVybiB0czsKLX0KLQogdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBjb250ZXh0LmZpbGxSb3VuZGVk
UmVjdChtX3JlY3QsIG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKKyAgICBjb250ZXh0LmZpbGxSb3Vu
ZGVkUmVjdChtX3JlY3QsIG1fY29sb3IpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQogewogICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJi
bGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCkBAIC03
NjgsOCArNjM2LDggQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotUGFp
bnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLSAgICA6IG1faWRlbnRpZmllcihwbGF5ZXIu
aWRlbnRpZmllcigpKQorUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fZGVzdGluYXRpb24o
ZGVzdGluYXRpb24pCiB7CiB9CkBAIC0xMDExLDE5ICs4NzksMTAgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgc3dpdGNo
ICh0eXBlKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNjYWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRDVE06IHRzIDw8ICJzZXQtY3RtIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29u
Y2F0ZW5hdGVDVE06IHRzIDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB0cyA8PCAic2V0LWlubGluZS1maWxsLWNvbG9y
IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6IHRzIDw8
ICJzZXQtaW5saW5lLXN0cm9rZS1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0cm9rZVRoaWNrbmVzczogdHMgPDwgInNldC1zdHJva2UtdGhpY2tuZXNzIjsgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHRzIDw8ICJzZXQtc3RhdGUiOyBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB0cyA8PCAic2V0LWxpbmUtY2FwIjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6IHRzIDw8ICJzZXQtbGluZS1kYXNoIjsg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHRzIDw8ICJzZXQtbGluZS1q
b2luIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogdHMgPDwgInNl
dC1taXRlci1saW1pdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHRzIDw8ICJj
bGlwIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDogdHMgPDwgImNsaXAtb3V0
IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6IHRzIDw8ICJj
bGlwLXRvLWltYWdlLWJ1ZmZlciI7IGJyZWFrOwpAQCAtMTA0Niw3ICs5MDUsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlwZSkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogdHMgPDwgImZpbGwtcmVjdCI7IGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgt
Y29sb3IiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDog
dHMgPDwgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21wb3NpdGVkLXJlY3QiOyBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6IHRzIDw8ICJmaWxsLXJvdW5k
ZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIjsgYnJlYWs7CiAjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCkBAIC0xMDc4LDcgKzkzNiw2IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2Ug
SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHRzIDw8ICJhcHBseS1maWxsLXBhdHRlcm4iOyBi
cmVhazsKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
IHRzIDw8ICJhcHBseS1kZXZpY2Utc2NhbGUtZmFjdG9yIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJTaGFkb3c6IHRzIDw8ICJjbGVhci1zaGFkb3ciOyBicmVhazsKICAgICB9CiAg
ICAgcmV0dXJuIHRzOwogfQpAQCAtMTA4OCwyMSArOTQ1LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIHRzIDw8IGl0ZW0udHlw
ZSgpOwogCiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlRy
YW5zbGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8VHJhbnNsYXRlPigpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFJvdGF0ZT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0g
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNjYWxlPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldENUTT4oKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpOwotICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFNldElubGluZUZpbGxDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTE1LDE4ICs5NTcs
NiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0
ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFNldFN0YXRlPigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lQ2FwPigpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8U2V0TGluZURhc2g+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVKb2luOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lSm9pbj4oKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcD4oKTsKICAgICAgICAg
YnJlYWs7CkBAIC0xMTkzLDkgKzEwMjMsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoR3JhZGllbnQ6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50
PigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJl
Y3Q6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKTsKLSAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICB0
cyA8PCBpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTI3
MSw3ICsxMDk4LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRl
bUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKICAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgogI2VuZGlmCi0gICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCA5N2NiNWZjOGQwNGJhODY2MmI3
MmM3ZGRlZWJjNDQxNTVjMjgyNWI3Li5mOTA3YjMxNGIyNTI5YmQyN2JmMDQzZWIxNTI0NDAzMjdj
NGIwNjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTg1LDEwNCArODUs
NiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIH07CiAKLWNsYXNzIFRyYW5zbGF0ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFuc2xhdGU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KQotICAgICAgICA6IG1feCh4KQotICAgICAgICAsIG1feSh5KQotICAgIHsK
LSAgICB9Ci0KLSAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgZmxvYXQg
eSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBtX3ggeyAw
IH07Ci0gICAgZmxvYXQgbV95IHsgMCB9OwotfTsKLQotY2xhc3MgUm90YXRlIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlJvdGF0
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgUm90YXRl
KGZsb2F0IGFuZ2xlKQotICAgICAgICA6IG1fYW5nbGUoYW5nbGUpCi0gICAgewotICAgIH0KLQot
ICAgIGZsb2F0IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBmbG9hdCBtX2FuZ2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgotfTsKLQotY2xhc3MgU2Nh
bGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6U2NhbGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
LQotICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICAgICAgOiBtX3NpemUoc2l6
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRTaXplIG1fc2l6ZTsKLX07
Ci0KLWNsYXNzIFNldENUTSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRDVE07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLSAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgewotICAgIH0KLQot
ICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2Zvcm07IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3Jt
OwotfTsKLQotY2xhc3MgQ29uY2F0ZW5hdGVDVE0gewotcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE07Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIENvbmNhdGVuYXRlQ1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAgICA6IG1fdHJhbnNmb3Jt
KHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCiBjbGFzcyBTZXRJbmxpbmVGaWxs
Q29sb3IgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOwpAQCAtMjQ3LDEwICsxNDksOCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVDaGFu
Z2U7IH0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UoKSB7IHJl
dHVybiBtX3N0YXRlQ2hhbmdlOyB9CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7
CkBAIC0yNTgsNDA0ICsxNTgsMjYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKLQotICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGVDaGFuZ2U7CisgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGUgbV9zdGF0ZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFNldFN0
YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBhdXRvIGNoYW5nZUZs
YWdzID0gbV9zdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzOwotICAgIGVuY29kZXIgPDwgY2hhbmdl
RmxhZ3M7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVDaGFuZ2UubV9zdGF0ZTsKLQotICAg
IGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3Jh
ZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5zdHJva2VHcmFkaWVudCk7Ci0g
ICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgIH0KLQotICAgIGlm
IChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVy
bkNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0cm9rZVBhdHRlcm4pOwotICAgICAg
ICBlbmNvZGVyIDw8ICpzdGF0ZS5zdHJva2VQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdl
KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuZmlsbEdyYWRpZW50KTsKLSAgICAgICAgZW5jb2Rl
ciA8PCAqc3RhdGUuZmlsbEdyYWRpZW50OwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0ZS5maWxsUGF0dGVybik7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRl
LmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICBlbmNvZGVyIDw8IHN0
YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dCbHVyOwot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9yOwotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZVRoaWNrbmVzczsKLQotICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdl
KSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS50ZXh0RHJhd2luZ01vZGU7Ci0KLSAgICBpZiAo
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hh
bmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VDb2xvcjsKLQotICAgIGlmIChj
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdl
KSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWxsQ29sb3I7Ci0KLSAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkK
LSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VTdHlsZTsKLQotICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKQotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLmZpbGxSdWxlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgaWYgKGNo
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2Up
KQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmJsZW5kTW9kZTsKLQotICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmFscGhhOwotCi0g
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRB
bnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNob3VsZEFudGlhbGlh
czsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNob3Vs
ZFNtb290aEZvbnRzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBl
bmNvZGVyIDw8IHN0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLQotICAgIGlmIChj
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zOworICAgIGVuY29kZXIgPDwgbV9zdGF0ZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IFNldFN0YXRlOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKLSAgICBkZWNvZGVyID4+IGNoYW5nZUZsYWdz
OwotICAgIGlmICghY2hhbmdlRmxhZ3MpCisgICAgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRl
eHRTdGF0ZT4gc3RhdGU7CisgICAgZGVjb2RlciA+PiBzdGF0ZTsKKyAgICBpZiAoIXN0YXRlKQog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2Ugc3RhdGVDaGFuZ2U7Ci0gICAgc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncyA9ICpjaGFu
Z2VGbGFnczsKLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgYXV0
byBzdHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlm
ICghc3Ryb2tlR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKCpzdHJv
a2VHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKSB7Ci0g
ICAgICAgIGF1dG8gc3Ryb2tlUGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsKLSAg
ICAgICAgaWYgKCFzdHJva2VQYXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBXVEZNb3Zl
KCpzdHJva2VQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkg
ewotICAgICAgICBhdXRvIGZpbGxHcmFkaWVudCA9IEdyYWRpZW50OjpkZWNvZGUoZGVjb2Rlcik7
Ci0gICAgICAgIGlmICghZmlsbEdyYWRpZW50KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxHcmFkaWVudCA9IFdURk1v
dmUoKmZpbGxHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkg
ewotICAgICAgICBhdXRvIGZpbGxQYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOwot
ICAgICAgICBpZiAoIWZpbGxQYXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZSgq
ZmlsbFBhdHRlcm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgIGRlY29kZXIg
Pj4gc2hhZG93T2Zmc2V0OwotICAgICAgICBpZiAoIXNoYWRvd09mZnNldCkKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFk
b3dPZmZzZXQgPSAqc2hhZG93T2Zmc2V0OwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+
IHNoYWRvd0JsdXI7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93Qmx1cjsKLSAgICAgICAgaWYg
KCFzaGFkb3dCbHVyKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAg
ICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0JsdXIgPSAqc2hhZG93Qmx1cjsKLQotICAgICAg
ICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzaGFkb3dDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBz
aGFkb3dDb2xvcjsKLSAgICAgICAgaWYgKCFzaGFkb3dDb2xvcikKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dDb2xv
ciA9ICpzaGFkb3dDb2xvcjsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPFNoYWRvd1JhZGl1c01v
ZGU+IHNoYWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93UmFkaXVzTW9k
ZTsKLSAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd1JhZGl1c01v
ZGUgPSBXVEZNb3ZlKCpzaGFkb3dSYWRpdXNNb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVD
aGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
VGhpY2tuZXNzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzdHJva2VU
aGlja25lc3M7Ci0gICAgICAgIGRlY29kZXIgPj4gc3Ryb2tlVGhpY2tuZXNzOwotICAgICAgICBp
ZiAoIXN0cm9rZVRoaWNrbmVzcykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSAqc3Ryb2tlVGhp
Y2tuZXNzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKSB7Ci0gICAg
ICAgIHN0ZDo6b3B0aW9uYWw8VGV4dERyYXdpbmdNb2RlRmxhZ3M+IHRleHREcmF3aW5nTW9kZTsK
LSAgICAgICAgZGVjb2RlciA+PiB0ZXh0RHJhd2luZ01vZGU7Ci0gICAgICAgIGlmICghdGV4dERy
YXdpbmdNb2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBz
dGF0ZUNoYW5nZS5tX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IFdURk1vdmUoKnRleHREcmF3aW5n
TW9kZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkgewotICAgICAgICBz
dGQ6Om9wdGlvbmFsPENvbG9yPiBzdHJva2VDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBzdHJv
a2VDb2xvcjsKLSAgICAgICAgaWYgKCFzdHJva2VDb2xvcikKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VDb2xvciA9
ICpzdHJva2VDb2xvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkgewotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBmaWxsQ29sb3I7Ci0gICAgICAgIGRlY29kZXIgPj4g
ZmlsbENvbG9yOwotICAgICAgICBpZiAoIWZpbGxDb2xvcikKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5maWxsQ29sb3IgPSAq
ZmlsbENvbG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpIHsKLSAgICAg
ICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c3Ryb2tlU3R5bGUpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAg
ICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7Ci0gICAgfQot
Ci0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPFdpbmRS
dWxlPiBmaWxsUnVsZTsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxsUnVsZTsKLSAgICAgICAgaWYg
KCFmaWxsUnVsZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAg
c3RhdGVDaGFuZ2UubV9zdGF0ZS5maWxsUnVsZSA9ICpmaWxsUnVsZTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPENv
bXBvc2l0ZU9wZXJhdG9yPiBjb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgZGVjb2RlciA+PiBj
b21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgaWYgKCFjb21wb3NpdGVPcGVyYXRvcikKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5jb21wb3NpdGVPcGVyYXRvciA9ICpjb21wb3NpdGVPcGVyYXRvcjsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6QmxlbmRNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4g
YmxlbmRNb2RlOwotICAgICAgICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKLSAgICAgICAgaWYgKCFi
bGVuZE1vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuYmxlbmRNb2RlID0gKmJsZW5kTW9kZTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRp
b25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKLSAg
ICAgICAgZGVjb2RlciA+PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgICAgICBpZiAo
IWltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSA9ICppbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgIH0KLQotICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBo
YUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYWxwaGE7Ci0gICAgICAg
IGRlY29kZXIgPj4gYWxwaGE7Ci0gICAgICAgIGlmICghYWxwaGEpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuYWxwaGEgPSAq
YWxwaGE7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpIHsKLSAgICAg
ICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRBbnRpYWxpYXM7Ci0gICAgICAgIGRlY29kZXIg
Pj4gc2hvdWxkQW50aWFsaWFzOwotICAgICAgICBpZiAoIXNob3VsZEFudGlhbGlhcykKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5zaG91bGRBbnRpYWxpYXMgPSAqc2hvdWxkQW50aWFsaWFzOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxib29sPiBz
aG91bGRTbW9vdGhGb250czsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91bGRTbW9vdGhGb250czsK
LSAgICAgICAgaWYgKCFzaG91bGRTbW9vdGhGb250cykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRTbW9vdGhGb250
cyA9ICpzaG91bGRTbW9vdGhGb250czsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5n
ZS5tX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9ICpzaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hh
bmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgICAg
ICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zID0gKnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgIH0KLQotICAgIHJldHVybiB7
IHsgc3RhdGVDaGFuZ2UgfSB9OwotfQotCi1jbGFzcyBTZXRMaW5lQ2FwIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVD
YXA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExp
bmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotICAgICAgICA6IG1fbGluZUNhcChsaW5lQ2FwKQotICAg
IHsKLSAgICB9Ci0KLSAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVD
YXA7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZUNhcCBtX2xpbmVDYXA7Ci19OwotCi1jbGFzcyBT
ZXRMaW5lRGFzaCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFy
cmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotICAgICAgICA6IG1fZGFzaEFycmF5KGRhc2hBcnJheSkK
LSAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKLSAgICB7Ci0gICAgfQotCi0gICAg
Y29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hBcnJheTsg
fQotICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hPZmZzZXQ7IH0K
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2V0
TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgRGFzaEFycmF5IG1f
ZGFzaEFycmF5OwotICAgIGZsb2F0IG1fZGFzaE9mZnNldDsKLX07Ci0KLXRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Ci12b2lkIFNldExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fZGFzaEFycmF5OwotICAgIGVuY29kZXIgPDwgbV9kYXNo
T2Zmc2V0OworICAgIHJldHVybiB7ICpzdGF0ZSB9OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFzaD4gU2V0TGluZURhc2g6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8RGFzaEFycmF5PiBkYXNoQXJyYXk7
Ci0gICAgZGVjb2RlciA+PiBkYXNoQXJyYXk7Ci0gICAgaWYgKCFkYXNoQXJyYXkpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkYXNoT2Zm
c2V0OwotICAgIGRlY29kZXIgPj4gZGFzaE9mZnNldDsKLSAgICBpZiAoIWRhc2hPZmZzZXQpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKmRhc2hBcnJheSwg
KmRhc2hPZmZzZXQgfX07Ci19Ci0KLWNsYXNzIFNldExpbmVKb2luIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVKb2lu
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5l
Sm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAgICAgICAgOiBtX2xpbmVKb2luKGxpbmVKb2luKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1f
bGluZUpvaW47IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZUpvaW4gbV9saW5lSm9pbjsKLX07Ci0K
LWNsYXNzIFNldE1pdGVyTGltaXQgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRl
ckxpbWl0KQotICAgICAgICA6IG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQotICAgIHsKLSAgICB9
Ci0KLSAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKLX07Ci0KLWNsYXNzIENsZWFy
U2hhZG93IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkNsZWFyU2hhZG93OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwotfTsKLQogLy8gRklYTUU6IHRyZWF0IGFzIGRyYXdpbmcgaXRlbT8KIGNsYXNz
IENsaXAgewogcHVibGljOgpAQCAtMTYxMiw5MSArMTEzNCwyMCBAQCBzdGQ6Om9wdGlvbmFsPEZp
bGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZQogICAgIHJldHVybiB7eyAqcmVjdCwgZ3JhZGllbnQtPmdldCgpIH19OwogfQogCi1j
bGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7Ci0KLSAgICBGaWxsQ29tcG9zaXRlZFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgICAgICA6IG1fcmVjdChyZWN0KQot
ICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgICAgICwgbV9vcChvcCkKLSAgICAgICAgLCBt
X2JsZW5kTW9kZShibGVuZE1vZGUpCi0gICAgewotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KLSAg
ICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbENvbXBvc2l0ZWRSZWN0PiBkZWNvZGUoRGVj
b2RlciYpOwotCi1wcml2YXRlOgotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgQ29sb3IgbV9j
b2xvcjsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAgIEJsZW5kTW9kZSBtX2JsZW5k
TW9kZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEZpbGxDb21wb3NpdGVk
UmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBt
X3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAgIGVuY29kZXIgPDwgbV9vcDsKLSAg
ICBlbmNvZGVyIDw8IG1fYmxlbmRNb2RlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
c3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IEZpbGxDb21wb3NpdGVkUmVjdDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IHJl
Y3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGNvbG9yOwotICAgIGRl
Y29kZXIgPj4gY29sb3I7Ci0gICAgaWYgKCFjb2xvcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlT3BlcmF0b3I+IG9wOwotICAgIGRl
Y29kZXIgPj4gb3A7Ci0gICAgaWYgKCFvcCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0gICAgZGVjb2RlciA+
PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKm9wLCAqYmxlbmRNb2RlIH19
OwotfQotCiBjbGFzcyBGaWxsUm91bmRlZFJlY3QgewogcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBGaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQorICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAg
ICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUp
CiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbGxSb3VuZGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKQEAg
LTE3MDksNyArMTE2MCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRmxvYXRSb3VuZGVkUmVj
dCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7
CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMTcxNyw3ICsxMTY3LDYgQEAgdm9p
ZCBGaWxsUm91bmRlZFJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAg
IGVuY29kZXIgPDwgbV9yZWN0OwogICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKLSAgICBlbmNvZGVy
IDw8IG1fYmxlbmRNb2RlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtMTczMywx
MiArMTE4Miw3IEBAIHN0ZDo6b3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBGaWxsUm91bmRlZFJl
Y3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRN
b2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgIGlmICghYmxlbmRNb2RlKQotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3Is
ICpibGVuZE1vZGUgfX07CisgICAgcmV0dXJuIHsgeyAqcmVjdCwgKmNvbG9yIH0gfTsKIH0KIAog
Y2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgewpAQCAtMTk2MSw3ICsxNDA1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24p
OworICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24pOwogCiAgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KICAgICBNZWRpYVBsYXllcklkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQpAQCAtMjI1
NiwxMyArMTcwMCwxMSBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZhcmlhbnQKICAg
ICA8IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IKICAgICAsIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIK
ICAgICAsIENsZWFyUmVjdAotICAgICwgQ2xlYXJTaGFkb3cKICAgICAsIENsaXAKICAgICAsIENs
aXBPdXQKICAgICAsIENsaXBPdXRUb1BhdGgKICAgICAsIENsaXBQYXRoCiAgICAgLCBDbGlwVG9J
bWFnZUJ1ZmZlcgotICAgICwgQ29uY2F0ZW5hdGVDVE0KICAgICAsIERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIKICAgICAsIERyYXdFbGxpcHNlCiAgICAgLCBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cgpAQCAtMjI3OCw3ICsxNzIwLDYgQEAgdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJp
YW50CiAgICAgLCBEcmF3UmVjdAogICAgICwgRHJhd1N5c3RlbUltYWdlCiAgICAgLCBFbmRUcmFu
c3BhcmVuY3lMYXllcgotICAgICwgRmlsbENvbXBvc2l0ZWRSZWN0CiAgICAgLCBGaWxsRWxsaXBz
ZQogICAgICwgRmlsbFBhdGgKICAgICAsIEZpbGxSZWN0CkBAIC0yMjg4LDIzICsxNzI5LDE1IEBA
IHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgICwgRmlsbFJvdW5kZWRS
ZWN0CiAgICAgLCBGbHVzaENvbnRleHQKICAgICAsIFJlc3RvcmUKLSAgICAsIFJvdGF0ZQogICAg
ICwgU2F2ZQotICAgICwgU2NhbGUKLSAgICAsIFNldENUTQogICAgICwgU2V0SW5saW5lRmlsbENv
bG9yCiAgICAgLCBTZXRJbmxpbmVTdHJva2VDb2xvcgotICAgICwgU2V0TGluZUNhcAotICAgICwg
U2V0TGluZURhc2gKLSAgICAsIFNldExpbmVKb2luCi0gICAgLCBTZXRNaXRlckxpbWl0CiAgICAg
LCBTZXRTdGF0ZQogICAgICwgU2V0U3Ryb2tlVGhpY2tuZXNzCiAgICAgLCBTdHJva2VFbGxpcHNl
CiAgICAgLCBTdHJva2VMaW5lCiAgICAgLCBTdHJva2VQYXRoCiAgICAgLCBTdHJva2VSZWN0Ci0g
ICAgLCBUcmFuc2xhdGUKIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgICwgRmls
bExpbmUKQEAgLTIzNDEsMjAgKzE3NzQsMTAgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGUsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTYXZl
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UmVzdG9yZSwKLSAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNjYWxlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0Q1RN
LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0sCiAg
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3IsCiAg
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvciwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzcywK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlLAotICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUNhcCwKLSAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNoLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0TGluZUpvaW4sCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRNaXRlckxpbWl0LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xlYXJTaGFkb3csCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwLAog
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dCwKICAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyLApAQCAtMjM3Niw3ICsx
Nzk5LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxS
ZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29s
b3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFk
aWVudCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVk
UmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVj
dCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlLAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVlZTQ0NzFkMzU0ZTc1MTUzMTI1MTg5ZGZjYzk0
MThhMzk0NTE0YTEuLjU2YWU0N2MxZmE1MWNhOGRiOGJjMzYyOTU4ZTI4NzI1MTA1MTM1MDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTQyLDM1MCArNDIs
MTg2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1S
ZWNvcmRlcjo6UmVjb3JkZXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25z
dCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0
RHJhd0dseXBocykKLSAgICA6IG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBkZWNvbnN0cnVj
dERyYXdHbHlwaHMpCi17Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZCh7IHN0YXRlLCBpbml0aWFs
Q1RNLCBpbml0aWFsQ1RNLm1hcFJlY3QoaW5pdGlhbENsaXApIH0pOwotfQorUmVjb3JkZXI6OlJl
Y29yZGVyKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMg
ZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDogR3JhcGhpY3NDb250ZXh0KGluaXRpYWxDbGlw
LCB7IH0sICBpbml0aWFsQ1RNKQorICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRl
Y29uc3RydWN0RHJhd0dseXBocykKIAotUmVjb3JkZXI6On5SZWNvcmRlcigpCiB7Ci0gICAgQVNT
RVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPT0gMSk7IC8vIElmIHRoaXMgZmlyZXMsIGl0IGluZGlj
YXRlcyBtaXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4KIH0KIAotc3RhdGljIGJvb2wgY29udGFpbnNP
bmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBj
aGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFn
cykKLXsKLSAgICBzdGF0aWMgY29uc3RleHByIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGlubGluZVN0YXRlQ2hhbmdlRmxhZ3MgewotICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLAotICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsQ29sb3JDaGFuZ2UsCi0gICAgfTsKLQotICAgIGlmIChjaGFuZ2VGbGFncyAhPSAoY2hhbmdl
RmxhZ3MgJiBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NS
R0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworUmVjb3JkZXI6On5SZWNvcmRlcigp
ID0gZGVmYXVsdDsKIAotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50
cnlHZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCit2b2lkIFJlY29yZGVyOjpzYXZlKCkKIHsK
LSAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjaGFuZ2VzLCBjaGFuZ2VG
bGFncykpIHsKLSAgICAgICAgaWYgKGF1dG8gcGF0dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuKQotICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUlt
YWdlKCkpOwotICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gY2hhbmdlcy5tX3N0YXRlLmZpbGxQ
YXR0ZXJuKQotICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdl
KCkpOwotICAgICAgICByZWNvcmRTZXRTdGF0ZShjaGFuZ2VzLm1fc3RhdGUsIGNoYW5nZUZsYWdz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICByZWNv
cmRTZXRJbmxpbmVTdHJva2VDb2xvcigqY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdl
dEFzU1JHQkFCeXRlcygpKTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0
U3Ryb2tlVGhpY2tuZXNzKGNoYW5nZXMubV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAg
aWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JD
aGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoKmNoYW5nZXMubV9zdGF0
ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6
c2F2ZSgpOworICAgIHJlY29yZFNhdmUoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKQordm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCiB7Ci0g
ICAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IGludm9rZWQgaW4gYW4gYWQtaG9jIG1hbm5l
ciB3aGVuIHJlY29yZGluZyBkcmF3aW5nIGl0ZW1zLiBXZSBzaG91bGQgY29uc2lkZXIgZWl0aGVy
Ci0gICAgLy8gc3BsaXR0aW5nIEdyYXBoaWNzQ29udGV4dCBzdGF0ZSBjaGFuZ2VzIGludG8gaW5k
aXZpZHVhbCBkaXNwbGF5IGxpc3QgaXRlbXMsIG9yIHJlZmFjdG9yaW5nIHRoZSBjb2RlIHN1Y2gg
dGhhdAotICAgIC8vIHRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgaW52b2tlZCB3aGVuIHJl
Y29yZGluZyBhIGRyYXdpbmcgaXRlbS4KLSAgICBhdXRvJiBzdGF0ZUNoYW5nZXMgPSBjdXJyZW50
U3RhdGUoKS5zdGF0ZUNoYW5nZTsKLSAgICBhdXRvIGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3Rh
dGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0
ZSk7Ci0gICAgaWYgKCFjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkKKyAgICBpZiAoIXN0YWNrU2l6ZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBz
dHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZpbmcgc3RhdGUgIiA8PCBHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oc3RhdGVDaGFuZ2VzLCBjaGFuZ2VzRnJvbUxhc3RT
dGF0ZSk7Ci0gICAgc3RhdGVDaGFuZ2VzLm1fY2hhbmdlRmxhZ3MgPSB7IH07Ci0gICAgY3VycmVu
dFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOwotfQotCi1j
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OnN0YXRlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2UubV9zdGF0ZTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBj
dXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIHJlY29y
ZFNldExpbmVDYXAobGluZUNhcCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIHJlY29y
ZFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6
OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIHJlY29yZFNldExpbmVKb2lu
KGxpbmVKb2luKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRl
ckxpbWl0KQotewotICAgIHJlY29yZFNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CisgICAgcmVjb3JkUmVzdG9yZSgpOwogfQogCi12b2lk
IFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmls
dGVyUmVzdWx0cyYgcmVzdWx0cykKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKCkK
IHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotCi0gICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBmaWx0ZXIuZWZmZWN0c09mVHlwZShGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
SW1hZ2UpKSB7Ci0gICAgICAgIGF1dG8mIGZlSW1hZ2UgPSBkb3duY2FzdDxGRUltYWdlPihlZmZl
Y3QuZ2V0KCkpOwotICAgICAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGZlSW1hZ2Uuc291cmNl
SW1hZ2UoKSkpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghc291cmNl
SW1hZ2UpIHsKLSAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIobnVsbHB0ciwg
c291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgIGlmICghc3RhdGUoKS5jaGFuZ2VzKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKCpzb3Vy
Y2VJbWFnZSkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIo
c291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKLX0KIAotdm9pZCBSZWNvcmRl
cjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21v
b3RoaW5nTW9kZSkKLXsKLSAgICBtX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzKGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7
Ci19CisgICAgaWYgKHN0YXRlKCkuaGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSkgeworICAgICAg
ICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6RmlsbEJydXNoKSkKKyAgICAgICAgICAgIHJlY29yZFNldElubGluZUZpbGxDb2xvcigq
ZmlsbENvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
Y291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpOwotICAgIHJl
Y29yZERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9y
LCBzbW9vdGhpbmdNb2RlKTsKLX0KKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkKKyAgICAgICAg
ICAgIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKCpzdHJva2VDb2xvcigpLnRyeUdldEFzU1JH
QkFCeXRlcygpKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotCi0gICAgaWYgKCFyZWNvcmRSZXNv
dXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAg
ICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlN0cm9rZVRoaWNrbmVzcykpCisgICAgICAgICAgICByZWNvcmRTZXRTdHJva2VUaGlj
a25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
cmVjb3JkRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwotICAgIHJlY29yZERyYXdOYXRpdmVJbWFnZShp
bWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFnZShT
eXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KQotewotICAgIHJlY29yZERyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25S
ZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwotICAgIHJlY29yZERyYXdQYXR0ZXJuKGlt
YWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNv
cmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBpZiAoIXJl
Y29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OmRyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpGaWxsQnJ1c2gpKSB7CisgICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBmaWxsUGF0dGVybigp
KQorICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKSB7CisgICAgICAgIGlmIChhdXRvIHBh
dHRlcm4gPSBzdHJva2VQYXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShw
YXR0ZXJuLT50aWxlSW1hZ2UoKSk7CiAgICAgfQogCi0gICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1h
Z2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lk
IFJlY29yZGVyOjpzYXZlKCkKLXsKLSAgICByZWNvcmRTYXZlKCk7Ci0gICAgbV9zdGF0ZVN0YWNr
LmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKCFtX3N0YXRlU3RhY2suc2l6ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIHJlY29y
ZFJlc3RvcmUoKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCi17Ci0gICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOwotICAgIHJlY29yZFRy
YW5zbGF0ZSh4LCB5KTsKKyAgICByZWNvcmRTZXRTdGF0ZShzdGF0ZSgpKTsKIH0KIAotdm9pZCBS
ZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQorI2lmIFVTRShDRykKK3ZvaWQg
UmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkucm90
YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICByZWNvcmRSb3RhdGUoYW5nbGVJblJhZGlhbnMpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7
CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQg
UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxl
KHNpemUpOwotICAgIHJlY29yZFNjYWxlKHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpOwogfQorI2VuZGlmCiAKLXZvaWQgUmVjb3Jk
ZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgUmVj
b3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7
Ci0gICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBH
cmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3Ip
OwogCi0gICAgY3VycmVudFN0YXRlKCkuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgcmVjb3Jk
Q29uY2F0ZW5hdGVDVE0odHJhbnNmb3JtKTsKKyAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRo
ZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50
cy4KKyAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPworICAgIHJl
Y29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogfQogCi12b2lk
IFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lk
IFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAg
Y3VycmVudFN0YXRlKCkuc2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgcmVjb3JkU2V0Q1RNKHRyYW5z
Zm9ybSk7Ci19CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotQWZmaW5lVHJhbnNmb3JtIFJl
Y29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKLX0KKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpzYXZlKCk7CiAKLXZvaWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSkKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAg
IHNldEFscGhhKG9wYWNpdHkpOwogICAgIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSk7Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25l
Rm9yVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwot
ICAgIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgbV9zdGF0ZVN0YWNrLnJlbW92
ZUxhc3QoKTsKLX0KKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi12b2lkIFJlY29yZGVyOjpk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci19CisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwogCi12
b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZERyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLX0KLQotdm9pZCBSZWNv
cmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmREcmF3TGluZXNGb3JUZXh0KEZsb2F0UG9pbnQoKSwgdG9GbG9h
dFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsK
KyAgICByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi12b2lkIFJlY29yZGVyOjpk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAg
IHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIHJl
Y29yZENsaXAocmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIHdpbmRSdWxlKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0VsbGlwc2UocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAg
ICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRy
YXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OwotICAgIHJlY29yZERyYXdQYXRoKHBhdGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgcmVjb3JkQ2xpcE91dChyZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9j
dXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmRDbGlwT3V0VG9QYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29y
ZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNl
dCwgY29sb3IpOwotfQorICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIs
IGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSNpZiBQTEFURk9S
TShNQUMpCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUs
IGJvb2wmLCBjb25zdCBDb2xvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQordm9p
ZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xlYXJS
ZWN0KHJlY3QpOwogfQotI2VuZGlmCiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3QocmVjdCk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihy
ZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxs
UmVjdFdpdGhHcmFkaWVudChyZWN0LCBncmFkaWVudCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNv
cmRGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9y
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3Zv
aWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICBy
ZWNvcmRGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5n
ZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJl
Y3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgcmVjb3JkRmlsbEVsbGlwc2UocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewogICAgICAgICBpZiAocGF0aC5o
YXNJbmxpbmVEYXRhPExpbmVEYXRhPigpKQpAQCAtNDAyLDIxICsyMzgsMjEgQEAgdm9pZCBSZWNv
cmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICByZWNvcmRGaWxsUGF0aChwYXRo
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZEZpbGxFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgcmVjb3JkU3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12
b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQordm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNv
cmRTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJv
a2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewogICAgICAgICBpZiAo
cGF0aC5oYXNJbmxpbmVEYXRhPExpbmVEYXRhPigpKQpAQCAtNDMzLDE0OCArMjY5LDE2OCBAQCB2
b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkU3Ry
b2tlUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFN0cm9rZUVsbGlwc2UocmVjdCk7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25l
c3MpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmRDbGVhclJlY3QocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZWNvcmREcmF3TGluZShwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0Uo
Q0cpCi12b2lkIFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3RWxsaXBzZShyZWN0KTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVyOjpkcmF3
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdGgocGF0aCk7CiB9Ci0jZW5kaWYKIAotdm9pZCBS
ZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVy
c2VjdChjdXJyZW50U3RhdGUoKS5jdG0ubWFwUmVjdChyZWN0KSk7Ci0gICAgcmVjb3JkQ2xpcChy
ZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdGb2N1c1JpbmdQ
YXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xp
cE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJlY29yZENsaXBPdXQocmVjdCk7CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMs
IHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25z
dCBQYXRoJiBwYXRoKQorI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKIHsKLSAgICBy
ZWNvcmRDbGlwT3V0VG9QYXRoKHBhdGgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxl
KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5jbGlw
Qm91bmRzLmludGVyc2VjdChjdXJyZW50U3RhdGUoKS5jdG0ubWFwUmVjdChwYXRoLmZhc3RCb3Vu
ZGluZ1JlY3QoKSkpOwotICAgIHJlY29yZENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQorI2VuZGlmCiAKLUludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3Vu
ZHMoKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAo
YXV0byBpbnZlcnNlID0gY3VycmVudFN0YXRlKCkuY3RtLmludmVyc2UoKSkKLSAgICAgICAgcmV0
dXJuIGVuY2xvc2luZ0ludFJlY3QoaW52ZXJzZS0+bWFwUmVjdChjdXJyZW50U3RhdGUoKS5jbGlw
Qm91bmRzKSk7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIC8v
IElmIHRoZSBDVE0gaXMgbm90IGludmVydGlibGUsIHJldHVybiB0aGUgb3JpZ2luYWwgcmVjdC4K
LSAgICAvLyBUaGlzIG1hdGNoZXMgQ0dSZWN0QXBwbHlJbnZlcnNlQWZmaW5lVHJhbnNmb3JtIGJl
aGF2aW9yLgotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBC
b3VuZHMpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ltYWdlQnVm
ZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQg
UmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQogewotICAg
IHJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKTsKLSAgICByZWNvcmRDbGlwVG9JbWFnZUJ1
ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QpOwotfQorICAgIGZvciAoYXV0byYgZWZmZWN0IDog
ZmlsdGVyLmVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgeworICAg
ICAgICBhdXRvJiBmZUltYWdlID0gZG93bmNhc3Q8RkVJbWFnZT4oZWZmZWN0LmdldCgpKTsKKyAg
ICAgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShmZUltYWdlLnNvdXJjZUltYWdlKCkpKSB7Cisg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJj
ZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVjb3JkZXI6
OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJp
bmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkgY29uc3QKLXsKLSAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdNZXRo
b2Q6OkRpc3BsYXlMaXN0KSk7Ci19CisgICAgaWYgKCFzb3VyY2VJbWFnZSkgeworICAgICAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgICAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihudWxscHRyLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsK
LSAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0
OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgaWYgKCFyZWNv
cmRSZXNvdXJjZVVzZSgqc291cmNlSW1hZ2UpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmls
dGVyLCByZXN1bHRzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBBU1NFUlQocGxheWVy
LmlkZW50aWZpZXIoKSk7Ci0gICAgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVz
dGluYXRpb24pOworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rmls
dGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwog
fQotI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICAvLyBXZSBtb2RpZnkgdGhlIHN0YXRlIGRpcmVjdGx5
IGhlcmUgaW5zdGVhZCBvZiBjYWxsaW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoKQotICAgIC8v
IGJlY2F1c2UgdGhlIHJlY29yZGVkIGl0ZW0gd2lsbCBzY2FsZSgpIHdoZW4gcmVwbGF5ZWQuCi0g
ICAgY3VycmVudFN0YXRlKCkuc2NhbGUoeyBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVG
YWN0b3IgfSk7CisgICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
K30KIAotICAgIC8vIEZJWE1FOiB0aGlzIGNoYW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwg
aW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNhY2hlZCBleHRlbnRzLgotICAgIC8vIEFzc2VydCB0aGF0
IGl0J3Mgb25seSBjYWxsZWQgZWFybHkgb24/Ci0gICAgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Cit2b2lkIFJlY29yZGVyOjpkcmF3U3lzdGVtSW1hZ2Uo
U3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKK3sKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdTeXN0ZW1JbWFn
ZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotRmxvYXRSZWN0IFJlY29yZGVy
Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250
ZXh0OjpSb3VuZGluZ01vZGUpCit2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRl
eHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNw
bGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0gICAgcmV0dXJuIHJlY3Q7CisgICAgcmVjb3JkUmVzb3Vy
Y2VVc2UoaW1hZ2UpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1Bh
dHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi1j
b25zdCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlJiBSZWNvcmRlcjo6Y3VycmVudFN0YXRlKCkgY29u
c3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSk7Ci0gICAgcmV0
dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFn
ZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihpbWFnZUJ1
ZmZlciwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVj
b3JkZXI6OmN1cnJlbnRTdGF0ZSgpCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZWNvcmRlcjo6
cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24pCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJl
dHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworICAgIGlmICghcGxheWVyLmlkZW50aWZpZXIoKSkg
eworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRl
c3RpbmF0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllci5pZGVudGlmaWVyKCks
IGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRpZgogCi1jb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29y
ZGVyOjpjdG0oKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICByZXR1cm4g
Y3VycmVudFN0YXRlKCkuY3RtOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgbV9kcmF3
R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250
ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBSZWNvcmRlcjo6ZHJh
d0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckds
eXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVk
IGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUg
c21vb3RoaW5nTW9kZSkKIHsKLSAgICBjdG0udHJhbnNsYXRlKHgsIHkpOworICAgIHJlY29yZFJl
c291cmNlVXNlKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQs
IGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4
dFN0YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit2b2lkIFJlY29yZGVyOjpkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBT
dHJva2VTdHlsZSkKIHsKLSAgICBkb3VibGUgYW5nbGVJbkRlZ3JlZXMgPSByYWQyZGVnKHN0YXRp
Y19jYXN0PGRvdWJsZT4oYW5nbGVJblJhZGlhbnMpKTsKLSAgICBjdG0ucm90YXRlKGFuZ2xlSW5E
ZWdyZWVzKTsKLSAgICAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gcm90YXRpb247Ci0gICAgcm90YXRp
b24ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAg
IHJlY29yZERyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlTGluZXMpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKIHsKLSAgICBjdG0uc2NhbGUoc2l6ZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBtYXRyaXgpCitSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01v
ZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiByZW5kZXJp
bmdNZXRob2QpIGNvbnN0CiB7Ci0gICAgY3RtID0gbWF0cml4OworICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nTWV0aG9kLnZhbHVlX29yKFJlbmRlcmluZ01l
dGhvZDo6RGlzcGxheUxpc3QpKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCitGbG9hdFJlY3QgUmVjb3Jk
ZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0Nv
bnRleHQ6OlJvdW5kaW5nTW9kZSkKIHsKLSAgICBjdG0gKj0gbWF0cml4OworICAgIFdURkxvZ0Fs
d2F5cygiR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBj
b21wYXRpYmxlIHdpdGggRGlzcGxheUxpc3Q6OlJlY29yZGVyLiIpOworICAgIHJldHVybiByZWN0
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmgKaW5kZXggODQ1ZWMwMDc3MmVkMmM1NGExZTZjYjI2YjIxNTFkYWJhYTZl
YzA3NS4uYWUzNDM3OWJlNjdmMDVlMTA0MmY2YWRjNWFhYmY4OGMyNzBjMTczNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVk
ZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJ
bWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiSW5saW5lUGF0aERhdGEuaCIKICNpbmNsdWRlICJU
ZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTUxLDcgKzUwLDcg
QEAgY2xhc3MgUmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBw
dWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlw
aHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlY29yZGVyKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdH
bHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAgdmlydHVhbCB2
b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CkBAIC02MSw0NyArNjAsMzUgQEAgcHVi
bGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTYXZlKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRSZXN0b3JlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRSb3RhdGUoZmxvYXQgYW5nbGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2NhbGUo
Y29uc3QgRmxvYXRTaXplJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDb25jYXRl
bmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZFNldExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZFNl
dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSAwOworCisjaWYgVVNFKENHKQor
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisjZW5kaWYKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSAwOworCiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91
dFRvUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZUltYWdlUmVjdCwgRmlsdGVyJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3R2x5
cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9y
LCBGb250U21vb3RoaW5nTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludDIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9h
dFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJh
d0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVj
dHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7
CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RX
aXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYsIEJsZW5kTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUm91bmRl
ZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsTGluZShj
b25zdCBMaW5lRGF0YSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25z
dCBBcmNEYXRhJikgPSAwOwpAQCAtMTA5LDExICs5NiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSA9
IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkUGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikg
PSAwOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VM
aW5lKGNvbnN0IExpbmVEYXRhJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VB
cmMoY29uc3QgQXJjRGF0YSYpID0gMDsKQEAgLTEyMSwxMTYgKzEwNyw4MSBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1
cnZlRGF0YSYpID0gMDsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VQYXRo
KGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBs
eUZpbGxQYXR0ZXJuKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgo
Y29uc3QgUGF0aCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5n
UGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZp
ZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworI2lmIEVOQUJM
RShWSURFTykKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgPSAwOwogI2Vu
ZGlmCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWdu
ZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9k
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3Vy
Y2VVc2UoTmF0aXZlSW1hZ2UmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNl
VXNlKEltYWdlQnVmZmVyJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVz
ZShjb25zdCBTb3VyY2VJbWFnZSYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3Vy
Y2VVc2UoRm9udCYpID0gMDsKIAotICAgIHN0cnVjdCBDb250ZXh0U3RhdGUgewotICAgICAgICBB
ZmZpbmVUcmFuc2Zvcm0gY3RtOwotICAgICAgICBGbG9hdFJlY3QgY2xpcEJvdW5kczsKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2U7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlIGxhc3REcmF3aW5nU3RhdGU7Ci0KLSAgICAgICAgQ29udGV4dFN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY2xpcCkKLSAgICAgICAgICAgIDogY3RtKHRy
YW5zZm9ybSkKLSAgICAgICAgICAgICwgY2xpcEJvdW5kcyhjbGlwKQotICAgICAgICAgICAgLCBs
YXN0RHJhd2luZ1N0YXRlKHN0YXRlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBD
b250ZXh0U3RhdGUgY2xvbmVGb3JTYXZlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
Q29udGV4dFN0YXRlIHN0YXRlKGxhc3REcmF3aW5nU3RhdGUsIGN0bSwgY2xpcEJvdW5kcyk7Ci0g
ICAgICAgICAgICBzdGF0ZS5zdGF0ZUNoYW5nZSA9IHN0YXRlQ2hhbmdlOwotICAgICAgICAgICAg
cmV0dXJuIHN0YXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlIGNsb25lRm9y
VHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHN0
YXRlID0gY2xvbmVGb3JTYXZlKCk7Ci0gICAgICAgICAgICBzdGF0ZS5sYXN0RHJhd2luZ1N0YXRl
LmFscGhhID0gMTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOwotICAgICAgICB2b2lkIHJvdGF0
ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7Ci0gICAgICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRT
aXplJik7Ci0gICAgICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwot
ICAgICAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB9OwotCi0g
ICAgY29uc3QgVmVjdG9yPENvbnRleHRTdGF0ZSwgND4mIHN0YXRlU3RhY2soKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlU3RhY2s7IH0KLQotICAgIGNvbnN0IENvbnRleHRTdGF0ZSYgY3VycmVudFN0
YXRlKCkgY29uc3Q7Ci0gICAgQ29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKTsKLQogICAgIFdF
QkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+LCBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ01ldGhvZD4pIGNvbnN0IG92ZXJyaWRlOworICAgIAorCisgICAgdmlydHVhbCB2b2lkIHJl
Y29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKIAogcHJpdmF0ZToKICAgICBi
b29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG51bGxwdHI7IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICNpZiBVU0UoQ0cpCi0g
ICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQotICAgIGJvb2wgaXND
QUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwogI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKIAotICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBm
aW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUg
PSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xp
cE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWl0
ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBj
b25zdCBDb2xvciYsIEJsZW5kTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNv
bnN0IENvbG9yJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUGF0aChjb25z
dCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotI2lm
IFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwot
I2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBG
b250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5
cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQm
IGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdTeXN0ZW1JbWFn
ZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CkBAIC0yNDEsNDAgKzE5MiwyMyBAQCBwcml2YXRl
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29s
b3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCkgZmluYWw7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNl
U2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNs
aXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
SW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWw7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50
LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBGbG9h
dFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRl
eHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7CiAKLSAgICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyk7Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwotCi0g
ICAgVmVjdG9yPENvbnRleHRTdGF0ZSwgND4gbV9zdGF0ZVN0YWNrOwogICAgIERyYXdHbHlwaHNS
ZWNvcmRlciBtX2RyYXdHbHlwaHNSZWNvcmRlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCmluZGV4IDFmZGM2YmE1NmJmZGIyNjM2ZWZiMzQ2
MmFkYTJhOTkwZDMzODk5NDUuLjFmYjRkZDc5NWFlMTBhYThjY2NiY2RkODMxNGVlYTgwODZlOGRi
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcApA
QCAtNDIsMTggKzQyLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QgewogCi1SZWNvcmRlckltcGw6OlJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYgZGlzcGxh
eUxpc3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5
cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMp
Ci0gICAgOiBSZWNvcmRlcihzdGF0ZSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3Ry
dWN0RHJhd0dseXBocykKK1JlY29yZGVySW1wbDo6UmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiBk
aXNwbGF5TGlzdCwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0ds
eXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBSZWNvcmRlcihpbml0aWFsQ2xpcCwg
aW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kaXNwbGF5TGlzdChk
aXNwbGF5TGlzdCkKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0g
PDwgIlxuUmVjb3JkaW5nIHdpdGggY2xpcCAiIDw8IGluaXRpYWxDbGlwKTsKIH0KIAotUmVjb3Jk
ZXJJbXBsOjp+UmVjb3JkZXJJbXBsKCkKLXsKLSAgICBBU1NFUlQoc3RhdGVTdGFjaygpLnNpemUo
KSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9y
ZXN0b3JlLgotfQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2F2ZSgpCiB7CiAgICAgYXBw
ZW5kPFNhdmU+KCk7CkBAIC02NCwzMSArNTksNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
UmVzdG9yZSgpCiAgICAgYXBwZW5kPFJlc3RvcmU+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBhcHBlbmQ8VHJhbnNs
YXRlPih4LCB5KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZShmbG9hdCBh
bmdsZSkKLXsKLSAgICBhcHBlbmQ8Um90YXRlPihhbmdsZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRTY2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIGFwcGVuZDxT
Y2FsZT4oc2NhbGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5z
Zm9ybSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBhcHBlbmQ8Q29uY2F0ZW5hdGVD
VE0+KHRyYW5zZm9ybSk7Ci19Ci0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRJbmxpbmVG
aWxsQ29sb3IoU1JHQkE8dWludDhfdD4gaW5saW5lQ29sb3IpCiB7CiAgICAgYXBwZW5kPFNldElu
bGluZUZpbGxDb2xvcj4oaW5saW5lQ29sb3IpOwpAQCAtMTA0LDkyICs3NCwyNiBAQCB2b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAg
ICBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPih0aGlja25lc3MpOwogfQogCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKLXsK
LSAgICBhcHBlbmQ8U2V0U3RhdGU+KHN0YXRlLCBjaGFuZ2VGbGFncyk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBhcHBl
bmQ8U2V0TGluZUNhcD4obGluZUNhcCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRT
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewot
ICAgIGFwcGVuZDxTZXRMaW5lRGFzaD4oYXJyYXksIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBhcHBl
bmQ8U2V0TGluZUpvaW4+KGpvaW4pOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0
TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4obGlt
aXQpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAg
IGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENs
aXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBhcHBlbmQ8Q2xpcD4oY2xpcFJl
Y3QpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmIGNsaXBSZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBhcHBlbmQ8Q2xpcE91dD4oY2xpcFJl
Y3QpOworICAgIGFwcGVuZDxTZXRTdGF0ZT4oc3RhdGUpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKLXsKLSAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VC
dWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5h
dGlvblJlY3QpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aChj
b25zdCBQYXRoJiBwYXRoKQotewotICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKLX0K
LQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIHJ1bGUpCi17Ci0gICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCBydWxlKTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRl
ciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChzb3VyY2VJbWFnZSkKLSAgICAgICAgaWRlbnRpZmll
ciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKLSAgICBhcHBl
bmQ8RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI+KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUlt
YWdlUmVjdCwgZmlsdGVyKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCi17Ci0gICAgYXBw
ZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hv
ciwgbW9kZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCisjaWYgVVNFKENHKQordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kPERyYXdOYXRp
dmVJbWFnZT4oaW1hZ2VJZGVudGlmaWVyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKKyAgICBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpOwogfQogCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4o
c3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRl
cm4+KCk7CiB9CisjZW5kaWYgLy8gVVNFKENHKQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZp
ZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cyk7CisgICAgYXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKIH0K
IAogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSkKQEAgLTIwMiw0NCArMTA2LDM0IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRF
bmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgYXBwZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigp
OwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBs
aW5lV2lkdGgpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXBw
ZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNv
bnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIGFw
cGVuZDxEcmF3TGluZXNGb3JUZXh0PihibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tu
ZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CisgICAgYXBwZW5kPENsaXA+KGNs
aXBSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSYgc3R5bGUpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0
aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKIHsKLSAgICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcj4ocmVjdCwgc3R5bGUpOworICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7
CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmIGNsaXBSZWN0KQogewotICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7CisgICAgYXBw
ZW5kPENsaXBPdXQ+KGNsaXBSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91
dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7
CisgICAgYXBwZW5kPENsaXBPdXRUb1BhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRo
PihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgYXBwZW5kPENsaXBUb0ltYWdlQnVm
ZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRp
b25SZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0
cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVj
dHM+KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgYXBwZW5kPENsZWFyUmVjdD4o
cmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCkBAIC0yNTcsMjMgKzE1MSwyMiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYg
ZwogICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4ocmVjdCwgZ3JhZGllbnQpOwogfQog
Ci12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIG1vZGUpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBh
cHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0PihyZWN0LCBjb2xvciwgb3AsIG1vZGUpOworICAgIGFw
cGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBtb2RlKQordm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihyZWN0LCBjb2xvciwgbW9kZSk7CisgICAgYXBwZW5k
PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpOwogfQog
Ci12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU+KHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcik7CisgICAgYXBwZW5kPEZpbGxFbGxpcHNlPihy
ZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGxpbmUpCiB7CiAgICAgYXBwZW5k
PEZpbGxMaW5lPihsaW5lKTsKQEAgLTI5Myw3ICsxODYsNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYgY3VydmUpCiB7CiAg
ICAgYXBwZW5kPEZpbGxCZXppZXJDdXJ2ZT4oY3VydmUpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxF
KElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQpAQCAtMzAxLDI1ICsxOTMsMTcgQEAgdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgYXBwZW5kPEZpbGxQYXRoPihw
YXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhcHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwotfQotCi0j
aWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQor
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRp
YT4ocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgYXBwZW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGJv
cmRlclRoaWNrbmVzcyk7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdp
ZHRoKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCB3aWR0aCk7CisgICAg
YXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCi0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVE
YXRhJiBsaW5lKQogewogICAgIGFwcGVuZDxTdHJva2VMaW5lPihsaW5lKTsKQEAgLTMzOSw3ICsy
MjMsNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3Qg
QmV6aWVyQ3VydmVEYXRhJiBjdXJ2ZSkKIHsKICAgICBhcHBlbmQ8U3Ryb2tlQmV6aWVyQ3VydmU+
KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzQ3
LDMzICsyMzAsODQgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKICAgICBhcHBlbmQ8U3Ryb2tlUGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7
CisgICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0
KTsKKyAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsKIH0KIAotI2lmIFVTRShD
RykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgYXBwZW5kPERyYXdFbGxpcHNlPihyZWN0KTsKK30KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8QXBwbHlTdHJv
a2VQYXR0ZXJuPigpOworICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kPEFwcGx5RmlsbFBh
dHRlcm4+KCk7CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zm
c2V0LCBjb2xvcik7CiB9CiAKLSNlbmRpZiAvLyBVU0UoQ0cpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGFw
cGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Cit9
CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
IHNjYWxlRmFjdG9yKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRpdmVJbWFnZShS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBh
cHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oc2NhbGVGYWN0b3IpOworICAgIGFwcGVuZDxE
cmF3TmF0aXZlSW1hZ2U+KGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVt
SW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkKK3sKKyAgICBhcHBlbmQ8RHJhd1N5c3RlbUltYWdlPihzeXN0ZW1JbWFnZSwgZGVz
dGluYXRpb25SZWN0KTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30K
Kwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZp
bHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkKKyAgICAgICAgaWRlbnRp
ZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBh
cHBlbmQ8RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI+KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJj
ZUltYWdlUmVjdCwgZmlsdGVyKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQ
YXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+KGltYWdlSWRlbnRpZmllciwgZGVzdFJlY3QsIHRp
bGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKworI2lmIEVO
QUJMRShWSURFTykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pCit7CisgICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4oaWRlbnRpZmllciwgZGVz
dGluYXRpb24pOworfQorI2VuZGlmCisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQoreworICAgIGFw
cGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNo
b3IsIG1vZGUpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3sKKyAgICBhcHBl
bmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRo
aWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOworfQorCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3sKKyAgICBhcHBl
bmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOwogfQogCiBib29sIFJl
Y29yZGVySW1wbDo6cmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlKQpA
QCAtNDE3LDIwICszNTEsMTYgQEAgc3RhdGljIGlubGluZSBmbG9hdCBzaGFkb3dQYWludGluZ0V4
dGVudChmbG9hdCBibHVyUmFkaXVzKQogCiBGbG9hdFJlY3QgUmVjb3JkZXJJbXBsOjpleHRlbnRG
cm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewotICAgIEZsb2F0
UmVjdCBib3VuZHMgPSByZWN0OwotICAgIGF1dG8mIHN0YXRlID0gY3VycmVudFN0YXRlKCk7Cisg
ICAgYXV0byBib3VuZHMgPSByZWN0OwogCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAg
ICBmbG9hdCBzaGFkb3dSYWRpdXM7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdl
dFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Ci0gICAg
ICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7Ci0gICAgICAgIHNoYWRvd0V4dGVu
dC5tb3ZlKHNoYWRvd09mZnNldCk7Ci0gICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRv
d1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOworICAgIGlmIChoYXNTaGFkb3coKSkgewor
ICAgICAgICBhdXRvIHNoYWRvd0V4dGVudCA9IGJvdW5kczsKKyAgICAgICAgc2hhZG93RXh0ZW50
Lm1vdmUoZHJvcFNoYWRvdygpLm9mZnNldCk7CisgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRl
KHNoYWRvd1BhaW50aW5nRXh0ZW50KGRyb3BTaGFkb3coKS5ibHVyUmFkaXVzKSk7CiAgICAgICAg
IGJvdW5kcy51bml0ZShzaGFkb3dFeHRlbnQpOwogICAgIH0KIAotICAgIHJldHVybiBpbnRlcnNl
Y3Rpb24oc3RhdGUuY2xpcEJvdW5kcywgc3RhdGUuY3RtLm1hcFJlY3QoYm91bmRzKSk7CisgICAg
cmV0dXJuIGludGVyc2VjdGlvbihjbGlwQm91bmRzKCksIGdldENUTSgpLm1hcFJlY3QoYm91bmRz
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCmluZGV4IDY0MjI2NWYwOTgwMjJjZjJiMDVmMTgwYzE3
NGZhMDM0NjJmMmRkNDAuLjZkZTZhZWRmZmNiMTdkYjJkMDgxYjQyYzFkZTZiYzMyOWEzOGJmNDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCkBAIC0zNSw5
ICszNSw4IEBAIGNsYXNzIFJlY29yZGVySW1wbCA6IHB1YmxpYyBSZWNvcmRlciB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXJJ
bXBsKTsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlckltcGwoRGlzcGxheUxp
c3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlw
aHM6Olllcyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXJJbXBsKCk7Ci0K
KyAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmLCBjb25zdCBGbG9h
dFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7
IH0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBo
c1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CisgICAgCiAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0KIAogICAg
IHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIGZpbmFsIHsgfQpAQCAtNDcsNDcgKzQ2LDM1
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRTYXZlKCkgZmluYWw7CiAgICAg
dm9pZCByZWNvcmRSZXN0b3JlKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsK
KwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBm
aW5hbDsKICAgICB2b2lkIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZFNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZFNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldE1pdGVyTGlt
aXQoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSBmaW5hbDsKKyAg
ICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgZmluYWw7
CisKKyNpZiBVU0UoQ0cpCisgICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyNlbmRpZgorCisg
ICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2
b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKICAgICB2b2lkIHJlY29y
ZENsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwUGF0aChj
b25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogICAg
IHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5
cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9y
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdl
SWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4o
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lM
YXllcigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBG
bG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3Qg
UGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RX
aXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5k
TW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAg
dm9pZCByZWNvcmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkRmlsbEFyYyhjb25zdCBBcmNEYXRhJikgZmluYWw7CkBAIC05NSwxMSArODIsMTAgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURh
dGEmKSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5k
aWYKLSAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZp
bmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAg
ICAgdm9pZCByZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJikgZmluYWw7CiAgICAgdm9p
ZCByZWNvcmRTdHJva2VBcmMoY29uc3QgQXJjRGF0YSYpIGZpbmFsOwpAQCAtMTA3LDEzICs5Mywy
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6
aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRl
cm4oKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKwor
ICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJl
Y29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgcmVjb3JkRHJhd0Zv
Y3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pIGZpbmFsOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHJlY29yZFBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24pIGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCByZWNvcmRBcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNt
b290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7CisgICAgdm9pZCByZWNvcmRE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50
TWFya2VyTGluZVN0eWxlJikgZmluYWw7CiAKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKE5h
dGl2ZUltYWdlJikgZmluYWw7CiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShJbWFnZUJ1ZmZl
ciYpIGZpbmFsOwpAQCAtMTM5LDYgKzE0MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOwor
CiAgICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKIAogICAgIERpc3BsYXlMaXN0JiBtX2Rpc3BsYXlMaXN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVw
bGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCmluZGV4IDhmZjE5ZDAwMzU0Y2RiZWRlM2E1YmExYWY3
NThjZmYwMjNhMjVhMjIuLjY2ZmM5ZDg4MmE0ZDNmN2RlOGU4OTEyYTFmMzBhZjE5OGQwMzUyODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTk3LDEwICs5
NywxMCBAQCBpbmxpbmUgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyPiBhcHBseVNldFN0YXRlSXRlbShHcmFwaAogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgIH07CiAKLSAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJu
VGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVy
bi5nZXQoKSkpCisgICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJ
bWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAg
ICByZXR1cm4gKmltYWdlSWRlbnRpZmllcjsKIAotICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmll
ciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0
ZS5maWxsUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4
UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJu
KCkpKQogICAgICAgICByZXR1cm4gKmltYWdlSWRlbnRpZmllcjsKIAogICAgIHNldFN0YXRlSXRl
bS5hcHBseShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZC
dXp6LmNwcAppbmRleCBkMDljMTM3M2VhOWFhYWY0YTE4NTEzNmVlODg1M2Q3ODhmYzQxNzhkLi5k
Nzk3MzE0ZDI0OTA2NzY4YjhkNzU3YjdjNGRiY2U1Mzc4MWZhM2QyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJI
YXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCkBAIC0zMiwxNCArMzIsMTQgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNv
cmRlcihHcmFwaGljc0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2
ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4
dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCisgICAgOiBt
X2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9CiAKIHZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENh
Y2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNt
b290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNo
ZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9v
dGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29y
ZGVyV2luLmNwcAppbmRleCA1ZDY2ZWI3MmFkMTNjMjRkYWMwOTVhOTQ1ZjYxNGE2ZjU1MjIyNDky
Li5jODMxNDgwMjI3YjEwZjUxYzRkMzQ0ZWQ2OTVhMTNmNDA2Y2I2OGVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBo
c1JlY29yZGVyV2luLmNwcApAQCAtMzIsMTQgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250
ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQp
Ci0gICAgOiBtX293bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVj
b3JkZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJh
d0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRl
eHQob3duZXIpCiB7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewot
ICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2Vz
LCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9kZSk7CisgICAgbV9kZXN0aW5h
dGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2Vz
LCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9kZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggM2NmNzQ2MGM4MGUzYmUxZDViYTNm
MGNlZDdjMTliMjVkZjI5YWJmMi4uNzg1ZTk0YmVjZjA3Y2Q0YTg0YzljMzRkOWNlY2M4Mzg1N2Uw
Njk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTI5MiwxMiArMjkyLDEyIEBAIHZvaWQgTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAg
ICAgRmxvYXRSZWN0IGZyYW1lUmVjdCgyLCAyLCBzaXplLndpZHRoKCkgLSAzLCBzaXplLmhlaWdo
dCgpIC0gMyk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOwogICAg
IGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDMpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2go
bV9kYXNoV2lkdGhzLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgbV9kYXNoV2lkdGhz
LCAwIH0pOwogICAgIG1fcGF0aC5hZGRSZWN0KGZyYW1lUmVjdCk7CiAgICAgbV9wYXRoLmNsb3Nl
U3VicGF0aCgpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChtX3BhdGgpOwogCi0gICAgY29udGV4
dC5zZXRMaW5lRGFzaChEYXNoQXJyYXkoKSwgMCk7CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7
IHsgfSwgMCB9KTsKICAgICBtX3BhdGguY2xlYXIoKTsKICAgICBtX3BhdGgubW92ZVRvKEZsb2F0
UG9pbnQoMCwgYm94VG9wICsgYm94U2l6ZSkpOwogICAgIG1fcGF0aC5hZGRMaW5lVG8oRmxvYXRQ
b2ludChzaXplLndpZHRoKCksIGJveFRvcCArIGJveFNpemUpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAppbmRleCAxYjE4MmEx
ZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0M2I3NjdkLi5lODBmMmVlODkxOTM5MTQ0MThlODc4
YmYwYTRhMjg0MGVlNjg5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBAIGJvb2wgQ29udGVu
dGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KEZyYW1lVmlldyYg
ZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3I6
OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CiAgICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGly
ZUNvbnRlbnRzKHRydWUpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjaGVja2VyQ29udGV4
dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGlu
Z0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjaGVja2VyQ29udGV4
dChmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSwgTnVsbEdyYXBoaWNzQ29u
dGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQp
OwogICAgIGZyYW1lVmlldy5wYWludChjaGVja2VyQ29udGV4dCwgZnJhbWVWaWV3LnJlbmRlclZp
ZXcoKS0+ZG9jdW1lbnRSZWN0KCkpOwogCiAgICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNv
bnRlbnRzKG9sZEVudGlyZUNvbnRlbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5RWxsaXBzaXNCb3guY3BwCmluZGV4IGM5YWIyMTc2MTQxZmE3YTMzOWEyMDk3YjNhYmY5
NzY1MDc4N2U0ZjEuLjRiZmY4ZDAwODM5MjUxNGNiZTYyY2E5NWQ0ZTc0M2ZjMTk3ZjAxOWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcApAQCAt
NTUsNyArNTUsNyBAQCB2b2lkIExlZ2FjeUVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGJvb2wgc2V0U2hhZG93
ID0gZmFsc2U7CiAgICAgaWYgKGxpbmVTdHlsZS50ZXh0U2hhZG93KCkpIHsKICAgICAgICAgQ29s
b3Igc2hhZG93Q29sb3IgPSBsaW5lU3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIobGlu
ZVN0eWxlLnRleHRTaGFkb3coKS0+Y29sb3IoKSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93
KExheW91dFNpemUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgpLnZhbHVlKCksIGxpbmVTdHls
ZS50ZXh0U2hhZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+cmFk
aXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0LnNldERyb3BTaGFk
b3coeyBMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPngoKS52YWx1ZSgpLCBsaW5l
U3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCkt
PnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAgICBzZXRTaGFkb3cgPSB0
cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKaW5kZXggMjRjODJjOWQ2YmQ0M2Y3NGJhMDVhYjVhYzc2NzkzZDc1ZDE1
ZTU3Ny4uOGQ5N2QyNTcxZTI0NTNkZjE5MjhiZGU2Yzc3Yzc2MzE1ZmJjODgyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC03
MDUsNyArNzA1LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgYm94U2hhZG93
ID0gYm94U2hhZG93LT5uZXh0KCk7CiAKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0KGJveFNo
YWRvdy0+eCgpLnZhbHVlKCksIGJveFNoYWRvdy0+eSgpLnZhbHVlKCkpOwotICAgIGNvbnRleHQu
c2V0U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzdHls
ZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpLCBib3hTaGFk
b3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFk
b3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUuY29sb3JCeUFwcGx5
aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93LT5pc1dlYmtpdEJv
eFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6
RGVmYXVsdCB9KTsKIH0KIAogSW50ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmNob29zZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
SW1hZ2UmIGltYWdlLCBjb25zdCB2b2lkKiBsYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkK
QEAgLTIwODcsNyArMjA4Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hT
aWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGF1dG8gbGluZURhc2ggPSBEYXNoQXJyYXk6OmZyb20oZGFzaExl
bmd0aCwgZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFz
aChXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7CisgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIg
cGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTI0NTYsNyArMjQ1Niw3
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50
SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9hdFBvaW50IHNuYXBw
ZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dSZWN0
T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93
UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAgICAgICBGbG9hdFNp
emUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4gLSBwaXhlbFNuYXBw
ZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAgY29udGV4dC5zZXRT
aGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hh
ZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgICAgICBjb250ZXh0LnNldERyb3BTaGFk
b3coeyBzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFk
b3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwogCiAgICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFk
aXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVu
bmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBA
IC0yNTU4LDcgKzI1NTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNo
YWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAg
c2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCiAgICAgICAgICAgICBhdXRvIHNuYXBwZWRT
aGFkb3dPZmZzZXQgPSByb3VuZFNpemVUb0RldmljZVBpeGVscyhzaGFkb3dPZmZzZXQsIGRldmlj
ZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFk
b3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hT
aGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRl
ZmF1bHQpOworICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc25hcHBlZFNoYWRv
d09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNo
YWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVm
YXVsdCB9KTsKICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocGl4
ZWxTbmFwcGVkT3V0ZXJSZWN0LCBwaXhlbFNuYXBwZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsKICAg
ICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmlu
ZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2MjMyMWZlZWQ5YjY4NmMzY2QuLjhjZjk2MWUwYmMy
MzY0ZTk2MmNkYTg4MWY4NTllNGYzMWEzYzk4M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcApAQCAtMjI1MywxNCArMjI1MywxNCBAQCB2b2lkIFJlbmRlckxheWVy
OjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IExheWVyUAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAgIGJvb2wgdXNlc0Nv
bXBvc2l0ZU9wZXJhdGlvbiA9IGhhc0JsZW5kTW9kZSgpICYmICEocmVuZGVyZXIoKS5pc0xlZ2Fj
eVNWR1Jvb3QoKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJWaWV3TGF5ZXIoKSk7
CiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAgICAgICAgY29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxl
bmRNb2RlKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgY29udGV4
dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkgfSk7CiAjZW5kaWYKIAogICAgICAg
ICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIocmVuZGVyZXIoKS5vcGFjaXR5KCkpOwog
CiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVP
cGVyYXRpb24pCi0gICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250
ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgICAg
ICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigp
LCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICNlbmRpZgogCiAjaWZkZWYgUkVWRUFMX1RSQU5TUEFS
RU5DWV9MQVlFUlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAKaW5kZXggYTg1MGUxMzc0YTEyNTgyMjBjZWZjOGZkN2EyYjczZjc2N2E3NDNhYy4u
Y2UxZWE2ZmM1MDNlZDgxY2JkMGViMGE5ZGM3ZmYxOTBjOTQzMmRkZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE4MzEsNyArMTgz
MSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lvbigpCiAgICAg
fTsKIAogICAgIGF1dG8gdXBkYXRlRXZlbnRSZWdpb25Gb3JMYXllciA9IFsmXShHcmFwaGljc0xh
eWVyJiBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVsbENv
bnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25l
KTsKKyAgICAgICAgYXV0byBkaXJ0eVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludChncmFwaGlj
c0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NMYXllci5zaXplKCkpOworICAg
IAorICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KGRpcnR5UmVjdCwgTnVs
bEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAgICAg
ICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRBQkxFX1JFR0lPTikK
ICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRpdGFibGVSZWdpb24o
KSkKQEAgLTE4NTMsOCArMTg1NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVF
dmVudFJlZ2lvbigpCiAgICAgICAgICAgICBldmVudFJlZ2lvbkNvbnRleHQudW5pdGUoZW5jbG9z
aW5nSW50UmVjdChGbG9hdFJlY3QoLWxheWVyT2Zmc2V0LCBncmFwaGljc0xheWVyLnNpemUoKSkp
LCByZW5kZXJlcigpLnN0eWxlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBkaXJ0eVJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KGdyYXBoaWNzTGF5ZXIu
b2Zmc2V0RnJvbVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNpemUoKSkpOwotICAgICAgICBw
YWludEludG9MYXllcigmZ3JhcGhpY3NMYXllciwgbnVsbENvbnRleHQsIGRpcnR5UmVjdCwgeyB9
LCAmZXZlbnRSZWdpb25Db250ZXh0KTsKKyAgICAgICAgcGFpbnRJbnRvTGF5ZXIoJmdyYXBoaWNz
TGF5ZXIsIG51bGxDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVjdCksIHsgfSwgJmV2
ZW50UmVnaW9uQ29udGV4dCk7CiAKICAgICAgICAgZXZlbnRSZWdpb24udHJhbnNsYXRlKHRvSW50
U2l6ZShsYXllck9mZnNldCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MubW0KaW5kZXggMzBjZDM0M2VhN2RmOTE2OGNjM2NkZTQ3ZGJlZjhmNzU5ZTg4ZjczMS4u
MjU2ZmM3NDk1NmRhMzM4NmE1NGQzNTJkZTExYjZmZjczNjY5YTFmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtNjA1LDcgKzYwNSw3IEBAIHZvaWQg
UmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3coY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0CiAgICAgY29uc3QgRmxvYXRTaXplIGlubmVyU2hhZG93T2Zmc2V0
IHsgMCwgNSB9OwogICAgIGNvbnN0ZXhwciBhdXRvIGlubmVyU2hhZG93Qmx1ciA9IDEwLjBmOwog
ICAgIGF1dG8gaW5uZXJTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4geyAwLCAwLCAwLCAw
LjA0ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNo
YWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7
IGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3IgfSk7
CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAogICAgIFBhdGggaW5u
ZXJTaGFkb3dQYXRoOwpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6
cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBQYWludEluZm8mIHBh
aW4KICAgICAvLyBVc2UgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiwgYmVjYXVzZSBpdCBj
YWxjdWxhdGVzIHRoZSBibHVyIHJhZGl1cyBpbiBjb250ZXh0IHNwYWNlLAogICAgIC8vIHJhdGhl
ciB0aGFuIHNjcmVlbiBzcGFjZS4KICAgICBjb25zdGV4cHIgYXV0byBzaGFkb3dDb2xvciA9IENv
bG9yOjpibGFjay5jb2xvcldpdGhBbHBoYUJ5dGUoMjYpOwotICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXRTaGFkb3coRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yKTsKKyAgICBncmFwaGljc0Nv
bnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFkb3dDb2xvciB9KTsK
IAogICAgIC8vIFRoZSBjaXJjbGUgbXVzdCBoYXZlIGFuIGFscGhhIGNoYW5uZWwgdmFsdWUgb2Yg
MSBmb3IgdGhlIHNoYWRvdyBjb2xvciB0byBhcHBlYXIuCiAgICAgQ0dGbG9hdCBjaXJjbGVDb2xv
ckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDAsIDEgfTsKQEAgLTIyNzMsNyArMjI3Myw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjCiAKICAgICBib29sIGlzRW1wdHkgPSAhc3RhdGVzLmNvbnRh
aW5zQW55KHsgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpDaGVja2VkLCBDb250cm9sU3RhdGVzOjpT
dGF0ZXM6OkluZGV0ZXJtaW5hdGUgfSk7CiAgICAgYXV0byBmaXJzdFNoYWRvd0NvbG9yID0gRGlz
cGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIGlzRW1wdHkgPyAwLjA1ZiA6IDAuMWYgfTsKLSAgICBj
b250ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJz
dFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBpbm5lclNoYWRvd09m
ZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yIH0pOwogICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVyU2hhZG93UGF0aDsK
QEAgLTIyOTAsNyArMjI5MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hS
YWRpb0lubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAgICAgY29udGV4
dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogCiAgICAgY29uc3RleHByIGF1dG8gc2Vjb25k
U2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMSwgMSwgMSwgMC41ZiB9OwotICAgIGNv
bnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwgc2Vjb25kU2hhZG93Q29sb3Ip
OworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwgc2Vj
b25kU2hhZG93Q29sb3IgfSk7CiAKICAgICBjb250ZXh0LmZpbGxQYXRoKGlubmVyU2hhZG93UGF0
aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXgg
MDEwZWNiYWVkODdhNzNhNDIwYWZiOTdlOGU4MGZlYTYzNzlmZWQzZS4uMTBkYzkwZTU3ZTVhZTBm
NDI1YTBkYWFhMzY0ZjgxNGU0NDk0OTkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjgxNiw3ICsyODE2LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRB
dHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIoY29uc3QgUmVuZGVyQXR0YWNobWVudCYgYXR0YWNo
bWVudCwKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHBsYWNlaG9sZGVyQm9yZGVyQ29sb3Ip
OwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQbGFjZWhvbGRlckJv
cmRlcldpZHRoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKERhc2hlZFN0cm9rZSk7Ci0g
ICAgY29udGV4dC5zZXRMaW5lRGFzaCh7YXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyRGFzaExl
bmd0aH0sIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IGF0dGFjaG1lbnRQbGFjZWhv
bGRlckJvcmRlckRhc2hMZW5ndGggfSwgMCB9KTsKICAgICBjb250ZXh0LnN0cm9rZVBhdGgoYm9y
ZGVyUGF0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNv
cmF0aW9uUGFpbnRlci5jcHAKaW5kZXggNjc1NTY4YWZmNjExOGYwMTNiZDFkNGY1NWE2YzM2NGZh
OGFmMzhlOC4uODMwOWIyZjhkNGEzMWZhMDNiMWFiZjg0MzlkYTBmM2VmMTYyODQwYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAK
QEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFRleHREZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCYWNr
Z3JvdW5kRGVjb3JhdGlvbnMoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgYwogICAgICAgICAgICAg
Q29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CiAgICAgICAgICAgICBpZiAobV9z
aGFkb3dDb2xvckZpbHRlcikKICAgICAgICAgICAgICAgICBtX3NoYWRvd0NvbG9yRmlsdGVyLT50
cmFuc2Zvcm1Db2xvcihzaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICBtX2NvbnRleHQuc2V0U2hh
ZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQpLCBzaGFkb3ctPnJh
ZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5zZXRE
cm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd1gsIHNoYWRvd1kgLSBleHRyYU9mZnNldCksIHNo
YWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiAgICAgICAgICAgICBzaGFk
b3cgPSBzaGFkb3ctPm5leHQoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRQYWludGVyLmNwcAppbmRleCA4ODVkODI2ZWU5ZTc5NmY0YjVjNWI1ODMzZjcxYTAyOGM0
NTQxYTdhLi5mZTg4NjljMTllNWY4ZDQzYjdmYTE2ZTQwMWI0ZmJjNmRjZjdlZWZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgU2hh
ZG93QXBwbGllcjo6U2hhZG93QXBwbGllcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvdywKICAgICB9CiAKICAgICBpZiAoIW1fYXZvaWREcmF3aW5nU2hh
ZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cy52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7
IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogfQog
CiBpbmxpbmUgYm9vbCBTaGFkb3dBcHBsaWVyOjppc0xhc3RTaGFkb3dJdGVyYXRpb24oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5kZXggN2Vk
NTM3YzkyNzkzNzcwZjQ0ODhhZTI5ZGY0MDcyN2Q3ZWIxYTNhOS4uNmM3MzBlZjA3ZTQ4YzdlY2Y4
YzQwZTM3ZTAwMzQ1Y2ZhYjU2YzY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02OSw3ICs2OSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJT
VkdQYXRoOjpjYWxjdWxhdGVVcGRhdGVkU3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAogc3RhdGlj
IHZvaWQgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIGlmIChhdXRvIGdyYWRpZW50ID0gY29udGV4dC5zdHJva2VHcmFkaWVudCgpKQotICAgICAg
ICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqZ3JhZGllbnQsIGNvbnRleHQuc3RhdGUoKS5zdHJv
a2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGll
bnQoKmdyYWRpZW50LCBjb250ZXh0LnN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOwogICAgIGVsc2Ug
aWYgKFBhdHRlcm4qIHBhdHRlcm4gPSBjb250ZXh0LnN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAg
Y29udGV4dC5zZXRGaWxsUGF0dGVybigqcGF0dGVybik7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggY2MzOGVj
NzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4uYjY1ODY4ZDFiZDM0YzkwZDRiYmZk
ZDQ3N2FkMmM3NDI4MmEwNTZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC01MDEsMTAgKzUwMSwxMiBAQCB2b2lkIFNWR1Jl
bmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNhblNldExpbmVEYXNoKQot
ICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGxlbmd0aENvbnRleHQu
dmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKSAqIHNjYWxlRmFjdG9y
KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGRhc2hBcnJheSks
IGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgp
KSAqIHNjYWxlRmFjdG9yIH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICB9CisKKyAgICBjb250ZXh0LmFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CiB9CiAKIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6c3R5bGVDaGFuZ2VkKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNw
cAppbmRleCAyZmI4ZjMzYTg3MGRmY2NlYjYyZTE0OTY1NmIxNDQzNzIyZWJlYTJkLi5mNTc5ZTVh
NzVmZTkxMGY2ZTViNThhOWFlZmI2ODM1ODk2MjIxMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTExNSwxMiAr
MTE1LDEyIEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29u
dGVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUGFpCiAgICAgICAgIGlmIChvcGFjaXR5IDwg
MSB8fCBoYXNCbGVuZE1vZGUgfHwgaXNvbGF0ZU1hc2tGb3JCbGVuZGluZyB8fCBoYXNJc29sYXRp
b24pIHsKIAogICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkKLSAgICAgICAgICAgICAgICBt
X3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BhaW50SW5mby0+
Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5ibGVuZE1vZGUoKSk7CisgICAg
ICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVNb2RlKHsgbV9w
YWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgc3R5bGUuYmxlbmRNb2Rl
KCkgfSk7CiAKICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkKLSAg
ICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJhdGlv
bihtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21w
b3NpdGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwg
QmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAKICAgICAgICAgICAgIG1fcmVuZGVyaW5nRmxhZ3MgfD0g
RW5kT3BhY2l0eUxheWVyOwogICAgICAgICB9CkBAIC0yNzMsNyArMjczLDcgQEAgYm9vbCBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGlt
YWdlQnVmZmVyKQogCiAgICAgLy8gSW52YWxpZGF0ZSBhbiBleGlzdGluZyBidWZmZXIgaWYgdGhl
IHNjYWxlIGlzIG5vdCBjb3JyZWN0LgogICAgIGlmIChpbWFnZUJ1ZmZlcikgewotICAgICAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5nZXRDVE0o
R3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuZ2V0Q1RN
KCk7CiAgICAgICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0JveCA9IGV4cGFuZGVkSW50U2l6
ZShib3VuZGluZ0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXplIGJ1ZmZlclNpemUoc3RhdGlj
X2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lkdGgoKSAqIHRyYW5zZm9ybS54
U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC5oZWln
aHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKICAgICAgICAgaWYgKGJ1ZmZlclNpemUgIT0g
aW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcAppbmRleCA0ZGQ3ZjgwZTM3Nzc5ODdkY2I3MGMxYTNjOGE4N2NkOGE0ZmQ2ZmI5
Li5jZDg4YWRmMDhkZGE4MDNiZmQ5M2Y4OTU3NzQwNzY4NmFjNGM1NDYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTI2OSwxNCArMjY5LDE0IEBAIEltYWdl
RHJhd1Jlc3VsdCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjCiAgICAgQVNTRVJUKHZpZXcpOwogCiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1v
ZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChlbmNs
b3NpbmdJbnRSZWN0KGRzdFJlY3QpKTsKIAogICAgIGZsb2F0IGFscGhhID0gY29udGV4dC5hbHBo
YSgpOwogICAgIGJvb2wgY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5zcGFyZW5jeUxheWVyID0gb3B0
aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpICE9IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVy
IHx8IG9wdGlvbnMuYmxlbmRNb2RlKCkgIT0gQmxlbmRNb2RlOjpOb3JtYWwgfHwgYWxwaGEgPCAx
OwogICAgIGlmIChjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJlbmN5TGF5ZXIpIHsKICAgICAg
ICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGFscGhhKTsKLSAgICAgICAgY29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJs
ZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsIH0pOwogICAgIH0K
IAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaG9ub3Igb3B0aW9ucy5vcmllbnRhdGlvbigpLCBz
aW5jZSBJbWFnZUJpdG1hcCdzIGZsaXBZIGhhbmRsaW5nIHJlbGllcyBvbiBpdC4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAwMQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwCmluZGV4IDU0MzgxODJkZGU4NzYzZWJhZDM4ZjE5MmRmNzk1YWEwNjBiNjUxYmIu
LjhkYTM5MGY2ZGE3MGUzNzk1NTBhNTcyZTA5ZTA4NDExODljMmRkZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5jcHAKQEAgLTc0LDMxICs3NCw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6UmVzdG9y
ZSgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjp0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpUcmFuc2xhdGUo
eCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJvdGF0ZShmbG9h
dCBhbmdsZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpSb3RhdGUoYW5nbGUpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNp
emUmIHNjYWxlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNjYWxlKHNjYWxlKSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldENUTShj
dG0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjb25jYXRlbmF0ZUNU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlM
aXN0OjpDb25jYXRlbmF0ZUNUTShjdG0pKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpzZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xv
ciYmIGl0ZW0pCiB7CiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsKQEAgLTEyOCw0MCAr
MTAzLDE1IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0U3RhdGUoRGlzcGxh
eUxpc3Q6OlNldFN0YXRlJiYgaXRlbSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfTsKIAot
ICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5z
dHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5z
dGF0ZSgpLnN0cm9rZUJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLmZpbGxQ
YXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZSgp
LmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGhhbmRsZUl0
ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlz
dDo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6c2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYgaXRlbSkKLXsKLSAg
ICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIGhhbmRsZUl0
ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBo
YW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0KGxpbWl0KSk7Ci19Ci0KLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewotICAgIGhhbmRsZUl0
ZW0oRGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93KCkpOwotfQotCiB2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGhhbmRsZUl0
ZW0oRGlzcGxheUxpc3Q6OkNsaXAocmVjdCkpOwpAQCAtMzcxLDE0ICszMjEsOSBAQCB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aEdyYWRpZW50KERpc3BsYXlMaXN0
OjpGaWxsUmVjdFdpdGhHcgogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
QmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpGaWxs
Q29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGhhbmRsZUl0
ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSk7
CisgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9y
KSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmggYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ci5oCmluZGV4IDNiYmFmNzY1ZDA1ZjQ0YWJmNGQ5NjFlNzY2Y2U2NTQ2OThlZGUyOTQuLjgxODg5
NjZhZmZhNzA5ZTZmZDBhMzFiZmNhNmMzZTcxODU2NWM1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXIuaApAQCAtNTksMjAgKzU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2F2ZSgpOwog
ICAgIHZvaWQgcmVzdG9yZSgpOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
OwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlKTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgY29uY2F0ZW5hdGVDVE0oY29uc3QgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBzZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmKTsKICAgICB2b2lkIHNldElubGlu
ZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvciYm
KTsKICAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CiAgICAgdm9pZCBzZXRTdGF0
ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUmJik7Ci0gICAgdm9pZCBzZXRMaW5lQ2Fw
KFdlYkNvcmU6OkxpbmVDYXApOwotICAgIHZvaWQgc2V0TGluZURhc2goV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVEYXNoJiYpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oV2ViQ29yZTo6TGlu
ZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0gICAgdm9pZCBjbGVhclNo
YWRvdygpOwogICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2
b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwVG9J
bWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKQEAgLTk3LDggKzg3LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAg
dm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoR3JhZGllbnQoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50JiYpOwotICAgIHZvaWQgZmlsbENvbXBv
c2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
JiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci0gICAg
dm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKKyAgICB2b2lkIGZpbGxS
b3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQg
ZmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KaW5kZXggMjgwMmZmZThmODM5N2MwZWQ0ZGYxMjFhMDE3
ZmU3ODEwOGZmNmMyMC4uNDE0YzMxYTEzMjBjMGIyZTc4NmJjOGQ5ZjY1OTgxMDJkODcwZjQ4OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KQEAgLTI1LDQ3
ICsyNSwzNSBAQAogbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZD
b3VudGVkIFN0cmVhbSB7CiAgICAgU2F2ZSgpCiAgICAgUmVzdG9yZSgpCi0gICAgVHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgUm90YXRlKGZsb2F0IGFuZ2xlKQotICAgIFNjYWxlKFdl
YkNvcmU6OkZsb2F0U2l6ZSBzY2FsZSkKLSAgICBTZXRDVE0oV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtIGN0bSkKLSAgICBDb25jYXRlbmF0ZUNUTShXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3Rt
KQorCiAgICAgU2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxp
bmVGaWxsQ29sb3IgaXRlbSkKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3IgaXRlbSkKICAgICBTZXRTdHJva2VUaGlja25l
c3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIFNldFN0YXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRTdGF0ZSBpdGVtKQotICAgIFNldExpbmVDYXAoZW51bTp1aW50OF90IFdlYkNvcmU6OkxpbmVD
YXAgbGluZUNhcCkKLSAgICBTZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2ggaXRlbSkKLSAgICBTZXRMaW5lSm9pbihlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6TGluZUpv
aW4gbGluZUpvaW4pCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLSAgICBDbGVhclNo
YWRvdygpCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVybigpCisgICAgQXBwbHlG
aWxsUGF0dGVybigpCisjZW5kaWYKKyAgICBBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNj
YWxlRmFjdG9yKQorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQor
ICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKKwogICAgIENsaXAoV2ViQ29yZTo6RmxvYXRSZWN0
IHJlY3QpCisgICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVtOnVpbnQ4X3QgV2Vi
Q29yZTo6V2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgQ2xpcE91dChXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdCkKLSAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qg
ZGVzdGluYXRpb25SZWN0KQogICAgIENsaXBPdXRUb1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQot
ICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90IFdlYkNvcmU6Oldp
bmRSdWxlIHdpbmRSdWxlKQotICAgIERyYXdHbHlwaHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdHbHlwaHMgaXRlbSkKLSAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNlSW1hZ2VJZGVudGlm
aWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVy
ZW5jZSBmaWx0ZXIpCi0gICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBk
ZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29y
ZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBEcmF3TmF0aXZlSW1hZ2UoV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29y
ZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJD
b3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRp
b25zIG9wdGlvbnMpCi0gICAgRHJhd1N5c3RlbUltYWdlKFJlZjxXZWJDb3JlOjpTeXN0ZW1JbWFn
ZT4gc3lzdGVtSW1hZ2UsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QpCi0gICAg
RHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRl
bnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qg
dGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0sIFdlYkNvcmU6OkZs
b2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBzdHJ1Y3QgV2ViQ29y
ZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBCZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotICAgIERyYXdS
ZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi0gICAg
RHJhd0xpbmUoV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDEsIFdlYkNvcmU6OkZsb2F0UG9pbnQg
cG9pbnQyKQotICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdM
aW5lc0ZvclRleHQgaXRlbSkKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNvcmU6
OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCi0gICAgRHJhd0VsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgRHJh
d1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNvcmU6
OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29s
b3IpCi0gICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKyAg
ICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRp
b25SZWN0KQorCisgICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorCiAgICAg
RmlsbFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAgICAgRmlsbFJlY3RXaXRoQ29sb3Io
V2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxS
ZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVu
dCBpdGVtKQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwg
V2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpDb21wb3NpdGVPcGVy
YXRvciBvcCwgZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAg
RmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgcmVjdCwgV2ViQ29yZTo6
Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVuZE1vZGUgYmxlbmRNb2RlKQor
ICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJlY3QsIFdlYkNv
cmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFdlYkNvcmU6OkZs
b2F0UmVjdCByZWN0LCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJvdW5kZWRIb2xlUmVjdCwg
V2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBGaWxsRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBGaWxsTGluZShzdHJ1
Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBGaWxsQXJjKHN0cnVjdCBXZWJDb3JlOjpB
cmNEYXRhIGRhdGEpCkBAIC03MywxMSArNjEsMTAgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgRmlsbEJlemllckN1cnZl
KHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRpZgogICAgIEZpbGxQ
YXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBGaWxsRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCkKLSAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLSAgICBUcmFuc2Zvcm1Ub0Nv
bG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCi0gICAg
UGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlm
aWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCisKICAgICBTdHJva2VSZWN0KFdl
YkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisKKyAgICBTdHJva2VFbGxp
cHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogICAgIFN0cm9rZUxpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRhdGEpCiAgICAgU3Ry
b2tlQXJjKHN0cnVjdCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC04NSwxMyArNzIsMzEgQEAg
bWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVh
bSB7CiAgICAgU3Ryb2tlQmV6aWVyQ3VydmUoc3RydWN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0
YSBkYXRhKQogI2VuZGlmCiAgICAgU3Ryb2tlUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0gICAg
U3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDbGVhclJlY3QoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QpCi0jaWYgVVNFKENHKQotICAgIEFwcGx5U3Ryb2tlUGF0dGVy
bigpCi0gICAgQXBwbHlGaWxsUGF0dGVybigpCisKKyAgICBEcmF3UmVjdChXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIERyYXdMaW5lKFdlYkNvcmU6
OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MikKKworICAgIERy
YXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIERyYXdQYXRoKFdlYkNvcmU6
OlBhdGggcGF0aCkKKworICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisgICAgRHJh
d0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKworICAgIERyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBzb3Vy
Y2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlcikKKyAgICBEcmF3SW1hZ2VC
dWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRl
bnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCwgV2ViQ29yZTo6Rmxv
YXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRp
b25zKQorICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVtSW1hZ2U+IHN5c3Rl
bUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQorICAgIERyYXdOYXRp
dmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlm
aWVyLCBXZWJDb3JlOjpGbG9hdFNpemUgaW1hZ2VTaXplLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVz
dFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQ
YWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qg
ZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB0aWxlUmVjdCwgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwaGFzZSwgV2ViQ29yZTo6Rmxv
YXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRp
b25zKQorI2lmIEVOQUJMRShWSURFTykKKyAgICBQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0
aW5hdGlvbikKICNlbmRpZgotICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVG
YWN0b3IpCisKKyAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
IGl0ZW0pCisgICAgRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xp
bmVzRm9yVGV4dCBpdGVtKQorICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKKworICAgIENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQorICAgIFRyYW5zZm9ybVRvQ29s
b3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICBG
bHVzaENvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGlkZW50
aWZpZXIpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNw
cAppbmRleCA4NTc3Y2JiZGU2ZDM5MDFkMzQ3MDc2MWVkMzBmNzlkOThlODJiOThkLi42Y2ZiYWJj
YTdiY2ZiZWRjNTk1NDgzZThlZWIxZDVhYjEyMDk2NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCkBAIC0zMiwzNiArMzIsMjEgQEAKICNpbmNsdWRl
ICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9NZWRpYVBsYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHkoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkm
IHJlbmRlcmluZ0JhY2tlbmQsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVj
dERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogRGlzcGxheUxpc3Q6OlJl
Y29yZGVyKHsgfSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBo
cykKKyAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcihpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSwg
ZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZp
ZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpCiAgICAgLCBtX2lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyKQogICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kKHJlbmRlcmlu
Z0JhY2tlbmQpCiB7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbnN0
IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2Zvcm1Ub0NvbG9yU3Bh
Y2UoY29sb3JTcGFjZSkpOwotfQotCiBSZW5kZXJpbmdNb2RlIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXIgPyBtX2ltYWdlQnVmZmVyLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOwpAQCAtNzcsMzEgKzYyLDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFJlc3RvcmUoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2xhdGUoeCwg
eSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90
YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlJvdGF0ZShhbmdsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTY2FsZShzY2FsZSkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldENUTSh0cmFuc2Zvcm0pKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNvbmNhdGVuYXRlQ1RNKHRyYW5zZm9ybSkpOwotfQotCiB2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0SW5saW5lRmlsbENv
bG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlNldElubGluZUZpbGxDb2xvcihEaXNwbGF5TGlzdDo6U2V0SW5s
aW5lRmlsbENvbG9yIHsgY29sb3IgfSkpOwpAQCAtMTE3LDkyICs3NywyNiBAQCB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0
IHRoaWNrbmVzcykKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpTZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldFN0
YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7IHN0YXRlLCBmbGFncyB9KSk7Ci19Ci0KLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXAg
bGluZUNhcCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpTZXRMaW5lQ2FwKGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgYXJyYXksIGZsb2F0
IGRhc2hPZmZzZXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6U2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIHsgYXJyYXksIGRhc2hP
ZmZzZXQgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUpvaW4obGluZUpvaW4pKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldE1pdGVyTGltaXQo
ZmxvYXQgbGltaXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyU2hhZG93KCkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
Q2xpcChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0KHJlY3QpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
Ci17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRl
c3RpbmF0aW9uUmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIp
Ci17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50
aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdlKQotICAgICAgICBpZGVudGlmaWVyID0gc291cmNl
SW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOwotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdURk1v
dmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UoUmVm
PEZpbHRlcj4geyBmaWx0ZXIgfSkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUgeyBzdGF0ZSB9KSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdHbHlwaHMoRGlzcGxh
eUxpc3Q6OkRyYXdHbHlwaHMgeyBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxB
bmNob3IsIG1vZGUgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1h
Z2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCisjaWYg
VVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5
U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKIH0KIAotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFn
ZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdTeXN0
ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKIH0KKyNl
bmRpZiAvLyBVU0UoQ0cpCiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFnZUlkZW50aWZp
ZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5
RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKQEAgLTIxNSw0NCArMTA5LDM0IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CiB9CiAK
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIHdpZHRoKSk7Ci19Ci0KLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZShwb2ludDEsIHBv
aW50MikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBG
bG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5l
c0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBibG9ja0xvY2F0aW9uLCBs
b2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyB9KSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcChyZWN0
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsKIH0KIAotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RWxsaXBzZShyZWN0KSk7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChyZWN0KSk7CiB9CiAK
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0aChjb25z
dCBQYXRoJiBwYXRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dFRvUGF0aChwYXRoKSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNS
aW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNs
aXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
LCBkZXN0aW5hdGlvblJlY3QpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3Zv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3Ip
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVhclJl
Y3QocmVjdCkpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjcwLDIzICsxNTQsMjIgQEAg
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aEdy
YWRpZW50KGNvbnN0IEZsb2F0UmVjdCYKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoR3JhZGllbnQgeyByZWN0LCBncmFkaWVudCB9KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVu
ZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRG
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBtb2RlKSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5kZWRSZWN0
KHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBtb2RlKQordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRlZFJlY3Qocm91bmRlZFJlY3QsIGNvbG9yLCBtb2Rl
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKSk7CiB9CiAKLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxFbGxpcHNlKHJlY3QpKTsKIH0KIAogI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGRhdGEpCiB7CiAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbExpbmUoZGF0YSkpOwpA
QCAtMzA2LDcgKzE4OSw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhCiB7CiAgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEJlemllckN1cnZlKGRhdGEp
KTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKQEAgLTMxNCwyMyArMTk2LDE3IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxQYXRoKHBhdGgpKTsKIH0KIAotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigpLCBkZXN0
aW5hdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OlN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlUmVjdChyZWN0LCB3aWR0
aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9r
ZUVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0KIHZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VMaW5lKGNvbnN0
IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlN0cm9rZUxpbmUoZGF0YSkpOwpAQCAtMzUwLDcgKzIyNiw2IEBAIHZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25z
dCBCZXppZXJDdXJ2ZURhCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6U3Ryb2tlQmV6aWVyQ3VydmUoZGF0YSkpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxF
KElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNTgsMzMgKzIzMyw4NCBA
QCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OlN0cm9rZVBhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlRWxsaXBzZShyZWN0KSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1JlY3QocmVj
dCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyUmVjdChyZWN0KSk7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQxLCBw
b2ludDIpKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0VsbGlwc2UocmVj
dCkpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBw
bHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQ
YXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcikpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7Cit9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseURldmlj
ZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihzY2Fs
ZUZhY3RvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRl
ciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyPiBpZGVudGlmaWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkKKyAgICAgICAgaWRlbnRpZmll
ciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVm
ZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmll
ciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworfQorCit2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3Rl
bUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpKTsKK30KKwordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFnZUlkZW50aWZpZXIs
IGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucykp
OworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRl
bnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9yTWVkaWEoaWRlbnRp
ZmllciwgZGVzdGluYXRpb24pKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNt
b290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsKK30KKwordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmVzRm9yVGV4dChEaXNwbGF5
TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQp
LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzIH0pKTsKK30KKwordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSYgc3R5bGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOwogfQogCiBib29s
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZl
SW1hZ2UmIGltYWdlKQpAQCAtNDM0LDExICszNjAsNiBAQCBib29sIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoRm9udCYgZm9udCkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29u
dGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRleHQoaWRl
bnRpZmllcikpOwotfQotCiBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFj
ZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9wdGlv
bmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAogewogICAgIGlmIChV
TkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkgewpAQCAtNDY0LDYgKzM4NSwyMSBAQCBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y3JlYXRlQWxp
Z25lZEltYWdlQnVmZmVyKGNvbgogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVNj
YWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3BhY2UsIHJlbmRlcmlu
Z01vZGUsIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkpOwor
fQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xv
clNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkK
K3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2Zv
cm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KEdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmll
ciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkZsdXNoQ29udGV4dChpZGVudGlmaWVyKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCmluZGV4IDliMzNhMDY3ZmQxNmJjY2YxNDA0MmMxOTc0
ZGQ2OTE5NDIyNjI0NjguLmYyYWQ4ZDBhYTQ1ODU4OWFlZTgxOTA3ZDljOTA4OTZkMzRiNmY3MDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaApAQCAtMzgsNiAr
MzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTsKIAogY2xhc3MgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5IDogcHVibGljIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlciB7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjsKIHB1YmxpYzoKICAgICBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHkoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0mLCBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3Ry
dWN0RHJhd0dseXBocyA9IFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3RE
cmF3R2x5cGhzOjpZZXMpOwogICAgIH5SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkoKSA9
IGRlZmF1bHQ7CkBAIC01MCw2MyArNTEsMzkgQEAgcHVibGljOgogICAgIHZvaWQgZmx1c2hDb250
ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllcikgZmluYWw7CiAKIHBy
aXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNlbmQoVCYmIG1lc3Nh
Z2UpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsKLSAgICAg
ICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwgbV9k
ZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwotICAgIH0KLQotICAgIGZyaWVuZCBjbGFzcyBX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7Ci0KICAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgcmVjb3JkU2F2ZSgpIGZp
bmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkVHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRlKGZs
b2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29u
c3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZFNl
dElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90PikgZmluYWw7CiAgICAgdm9p
ZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90PikgZmlu
YWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQg
ZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihXZWJDb3JlOjpM
aW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRT
ZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGZpbmFsOworCisj
aWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7Cisg
ICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKworICAgIHZv
aWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRDbGlw
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFBh
dGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBmaW5hbDsKICAgICB2
b2lkIHJlY29yZENsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZENsaXBPdXRUb1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNvcmU6Oklt
YWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIFdl
YkNvcmU6OkZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBX
ZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdl
YkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGUpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVy
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoV2ViQ29yZTo6
U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHJlY29y
ZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lc0Zv
clRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJD
b3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFdlYkNvcmU6OlBh
dGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFdlYkNv
cmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVy
KFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29s
b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxs
Q29tcG9zaXRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVuZE1vZGUp
IGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOwogICAgIHZvaWQg
cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
ZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQgcmVj
b3JkRmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZEZpbGxBcmMoY29uc3QgV2ViQ29yZTo6QXJjRGF0YSYpIGZpbmFsOwpAQCAtMTE0LDkgKzkx
LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgV2Vi
Q29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZEZp
bGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxF
bGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
UGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQgcmVj
b3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
IHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBXZWJDb3JlOjpMaW5lRGF0YSYpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IFdlYkNvcmU6OkFyY0RhdGEmKSBmaW5hbDsK
QEAgLTEyNCwxMyArMTAyLDI4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRTdHJva2VCZXpp
ZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworCisgICAg
dm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludDIp
ICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQ
YXRoJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFdl
YkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpD
b2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVm
ZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVyJikgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShXZWJDb3JlOjpTeXN0ZW1JbWFnZSYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKKyAgICB2b2lkIHJlY29y
ZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBFTkFC
TEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
KSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6
Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAg
ICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwogCiAgICAgYm9vbCByZWNvcmRS
ZXNvdXJjZVVzZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpIGZpbmFsOwogICAgIGJvb2wgcmVjb3Jk
UmVzb3VyY2VVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5hbDsKQEAgLTE0MSw2ICsxMzQs
MTggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUFs
aWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3Jl
OjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmlu
Z01ldGhvZD4pIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4g
Y3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
UmVuZGVyaW5nTWV0aG9kPikgY29uc3QgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHZvaWQgc2VuZChUJiYgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VM
WSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBt
X25lZWRzRmx1c2ggPSB0cnVlOworICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQtPnNlbmRUb1N0
cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcik7Cisg
ICAgfQorCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5h
bDsKKwogICAgIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBtX2Rlc3RpbmF0
aW9uQnVmZmVySWRlbnRpZmllcjsKICAgICBXZWFrUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBt
X2ltYWdlQnVmZmVyOwogICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBt
X3JlbmRlcmluZ0JhY2tlbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggMWQ2NDNiNmI0Mjg4ZDA4ZTAzOGM0NjI1ZDA1
NDlkZTY4YWYyYWE3Ny4uMDc5OTNiMzgwZjFlYTdkMzQ5ZGQ3ZWJmYzE2MGM4MDRkYWQ0M2UzYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9s
bGVyLmNwcApAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmRyYXdSZWN0
KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvCiAKICAg
ICAvLyBEcmF3IHdoaXRlIGZyYW1lcyBhcm91bmQgdGhlIGhvbGVzLgogICAgIC8vIFdlIGRvdWJs
ZSB0aGUgdGhpY2tuZXNzIGJlY2F1c2UgaGFsZiBvZiB0aGUgc3Ryb2tlIHdpbGwgYmUgZXJhc2Vk
IHdoZW4gd2UgY2xlYXIgdGhlIGhvbGVzLgotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3co
RmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVz
LCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3coeyBGbG9h
dFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNo
YWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6
d2hpdGUpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lk
dGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiB3aGl0ZUZyYW1lUGF0aHMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRU
ZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCBmMTZmNzk2ZTA0N2U5OTE5NzJjMGVkMWY0YWUx
MTNjZTE2NTY1YzEwLi40OWUwMGJlMzM3ZWFmZWUxMjkzZWYwNzdhZGY2MTdjZGFlM2Q0YTE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRS
YW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lk
IFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJs
YXkmLCBXZWJDb3JlOjpHcmFwaAogCiAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBncmFwaGljc0NvbnRleHQu
c2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZ
KSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXREcm9wU2hhZG93KHsgV2ViQ29yZTo6RmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09m
ZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAgICBncmFwaGljc0Nv
bnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRDb2xvcik7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JCb3JkZXJXaWR0aCAqIDIpOwogICAgIGZvciAoYXV0
byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhOGU5NjBkNzhkY2I4ZGE4Y2M0NDhmMjUyNzMzZWUzNmIw
Mzc0ZWUwLi40MzM2NzQ0NjcwNDdhZWUwOTM0NTZkYmY2MjU5MzE5ZjdhZmE3ZWIwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMjItMDMtMTMgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAg
ICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6aWx5
IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2Nn
L0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorCiAyMDIyLTAzLTEwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFw
cGxlLmNvbT4KIAogICAgICAgICBbZ2l0LXdlYmtpdF0gU3VwcG9ydCBtdWx0aXBsZSBtZXRhZGF0
YSBsb2NhdGlvbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cu
Y3BwCmluZGV4IDhlNDFjNWE3M2FlMzY4NGNlZGRmMWY5NGY5ZjE3MTg5NTM1MTRjOWYuLmViZTY0
NDg3MWUyOGY1MTljZDI2MTIwYjhhODI3ODg2YzAxOTAyYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVz
dHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcApAQCAtNTQsNyArNTQsNyBAQCBURVNUKEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgQmFzaWMpCiAgICAgR3JhcGhpY3NDb250ZXh0
Q0cgcHJpbWFyeUNvbnRleHQocHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAKICAgICBJbk1lbW9y
eURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250
ZXh0KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRl
eHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3Bs
YXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAK
ICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25k
YXJ5Q29udGV4dCk7CiAKQEAgLTkwLDEwICs5MCwxMCBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHRUZXN0cywgQmFzaWMpCiBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0
cywgVGV4dCkKIHsKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IHByaW1hcnlEaXNwbGF5TGlzdDsK
LSAgICBSZWNvcmRlckltcGwgcHJpbWFyeUNvbnRleHQocHJpbWFyeURpc3BsYXlMaXN0LCB7IH0s
IEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAg
IFJlY29yZGVySW1wbCBwcmltYXJ5Q29udGV4dChwcmltYXJ5RGlzcGxheUxpc3QsIEZsb2F0UmVj
dCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEluTWVtb3J5RGlz
cGxheUxpc3Qgc2Vjb25kYXJ5RGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFy
eUNvbnRleHQoc2Vjb25kYXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRl
eHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFy
eUNvbnRleHQoc2Vjb25kYXJ5RGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lk
dGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4
KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtMjAxLDcgKzIwMSw3IEBA
IFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCb3JkZXJzKQogICAgIEdyYXBo
aWNzQ29udGV4dENHIHByaW1hcnlDb250ZXh0KHByaW1hcnlDR0NvbnRleHQuZ2V0KCkpOwogCiAg
ICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vj
b25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdp
ZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29u
dGV4dChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhl
aWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRl
eHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC0yMjgsNyArMjI4LDcgQEAgVEVTVChCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIFRyYW5zZm9ybWVkQ2xpcCkKICAgICBHcmFwaGljc0Nv
bnRleHQmIHByaW1hcnlDb250ZXh0ID0gcHJpbWFyeUNvbnRleHRDRzsKIAogICAgIEluTWVtb3J5
RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRl
eHRETChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApLCB7IH0pOwor
ICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIEZsb2F0UmVj
dCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5Q29udGV4
dCA9IHNlY29uZGFyeUNvbnRleHRETDsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQg
Y3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKQEAgLTI4NywxNSArMjg3LDE1
IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBBcHBseURldmljZVNjYWxl
RmFjdG9yKQogICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQgPSBwcmltYXJ5Q29u
dGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNv
cmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgw
LCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRE
TChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgR3JhcGhpY3ND
b250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5Q29udGV4dERMOwogCiAgICAgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRl
eHQpOwogCiAgICAgY3R4LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoMik7CiAKLSAgICBhdXRvIHBy
aW1hcnlDVE0gPSBwcmltYXJ5Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRl
RGV2aWNlU2NhbGU6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIGF1dG8gc2Vj
b25kYXJ5Q1RNID0gc2Vjb25kYXJ5Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNs
dWRlRGV2aWNlU2NhbGU6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIGF1dG8g
cHJpbWFyeUNUTSA9IHByaW1hcnlDb250ZXh0LmdldENUTSgpOworICAgIGF1dG8gc2Vjb25kYXJ5
Q1RNID0gc2Vjb25kYXJ5Q29udGV4dC5nZXRDVE0oKTsKIAogICAgIEVYUEVDVF9FUShwcmltYXJ5
Q1RNLnhTY2FsZSgpLCBzZWNvbmRhcnlDVE0ueFNjYWxlKCkpOwogICAgIEVYUEVDVF9FUShwcmlt
YXJ5Q1RNLnlTY2FsZSgpLCBzZWNvbmRhcnlDVE0ueVNjYWxlKCkpOwo=
</data>
<flag name="commit-queue"
          id="482239"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454553</attachid>
            <date>2022-03-13 01:59:32 -0800</date>
            <delta_ts>2022-03-14 13:08:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220313015931.patch</filename>
            <type>text/plain</type>
            <size>582473</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg2MDhiMzk4NGMxMWY5
ZDJhYzgyNGU4NDY0Nzk4ZDAxNDljMDMyNy4uMjUwOTQ4MDhlYTRlZDhjZjEwOWEyYTUwODVjZmZi
Y2ExNjg0NGQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3NyBAQAorMjAyMi0wMy0xMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjphcHBseUxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJv
a2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXlvdXRTdGlwcGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dEhhdGNoaW5nKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1
c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxh
eWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3Rp
bmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlk
VXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBo
c1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRlY29u
c3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRp
c3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEltYWdlOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZh
Y3RvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFj
dG9yRm9yRHJhd2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ds
eXBoc0FuZENhY2hlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRl
cmxpbmVCb3VuZHNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmluY3JlbWVudCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmF0RW5kIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6Y3VycmVudCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmRpcmVjdGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yPT0g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvcGVy
YXRvciE9IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlOjphY2N1bXVsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6dXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3Jh
ZGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRG
aWxsR3JhZGllbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb250ZW50ZnVsUGFpbnRE
ZXRlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01v
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdGF0ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Om1lcmdlU3RhdGVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVyZ2VTdGF0ZURpZmZzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTdGF0ZUNoYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
Y2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNmb3JtIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmluZUNhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpsaW5l
RGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVE
YXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZUpvaW4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Om1pdGVyTGltaXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcG9zaXRlTW9kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU9wZXJhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJsZW5kTW9kZU9wZXJhdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU1vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpkcm9wU2hhZG93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJvcFNoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNTaGFkb3cgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxp
YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRTbW9vdGhGb250
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNt
b290aEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNrIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJhd0x1bWluYW5j
ZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1c2VEYXJrQXBwZWFy
YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVzZURh
cmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omlz
SW5UcmFuc3BhcmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2NhbGVk
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0
c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRJc0NBTGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6Y29udGV4
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNj
b3BlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OmJlZ2luTGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVyU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0No
ZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjp+R3JhcGhpY3ND
b250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWlu
dGFpbmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpoYXNPbmx5
UHJpbWl0aXZlQ2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptZXJnZURpZmZzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Y2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Y2xlYXJDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmlsbEJy
dXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpmaWxsQnJ1c2gg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxC
cnVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbEdy
YWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxs
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmlsbFJ1
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZp
bGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzdHJva2VC
cnVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlQnJ1
c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0
cm9rZUJydXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRT
dHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2V0U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OnN0cm9rZVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUNhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bGluZURhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpsaW5lSm9pbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1pdGVyTGltaXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmNvbXBvc2l0ZU1vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENvbXBvc2l0ZU1vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyb3BTaGFkb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNob3VsZEFudGlhbGlhcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTbW9vdGhGb250cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU21vb3RoRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyYXdM
dW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpzZXREcmF3THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFVzZURhcmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6fkdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXI6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5
ZXJTY29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFu
c3BhcmVuY3lMYXllclNjb3BlOjpiZWdpbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5z
cGFyZW5jeUxheWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlv
blF1YWxpdHlNYWludGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lcjo6fkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZU1vZGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVNb2RlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMaW5lRGFzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6
OmlzVmlzaWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc0JsdXJy
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6aGFzT3V0c2V0cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFt
ZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9OdWxsR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3ND
b250ZXh0OjpOdWxsR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFw
aGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVy
OjpTaGFkb3dCbHVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVy
V2luLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpTb3VyY2VCcnVzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c3BhY2VUcmFuc2Zvcm0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmdyYWRpZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJydXNoOjpwYXR0ZXJuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUJydXNoOjpzZXRHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6
c2V0UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJydXNoOjpjb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVz
aDo6c2V0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmJydXNoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRHcmFkaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCcnVzaDo6aXNQcmltaXRpdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6QnJ1c2g6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6QnJ1c2g6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJydXNoOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Rl
eHRCb3hJdGVyYXRvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Qm94SXRlcmF0b3I6OmluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRl
cmF0b3I6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6
Y3VycmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmRpcmVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9y
PT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvciE9
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRD
aGFuZ2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25l
c3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpD
YWlybzo6U3RhdGU6OmdldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUNh
cCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2Fpcm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRN
aXRlckxpbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJh
dGlvbnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cmVu
ZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdG
b2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdO
YXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzo6Y3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkaWRVcGRhdGVTdGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y29uY2F0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRD
VE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNl
dExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVy
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3
R2x5cGhzUmVjb3JkZXJXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVT
YXZlcjo6Q0dDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRT
dGF0ZVNhdmVyOjp+Q0dDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRl
U2F2ZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
ZGlkU2F2ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBo
aWNzQ29udGV4dENHKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpwbGF0
Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmludGVybmFsUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0
ZURyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjphcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xpbmVDYXApOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR01p
dGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lRGFzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRDR1NoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJv
dW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpj
YW5Vc2VTaGFkb3dCbHVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2gpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzY2FsZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmg6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0
YXRlU2F2ZXI6On5DR0NvbnRleHRTdGF0ZVNhdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpzdHJva2VDb250YWlucyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YmVnaW5MYXllcik6CisgICAgICAgIChXZWJDb3JlOjplbmRMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpzZXRJbnRlcm5hbEZvbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVzdG9yZURlc3RpbmF0aW9u
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJl
Z2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRF
bmRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bik6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1bik6CisgICAgICAgIChXZWJD
b3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3TmF0aXZlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
cmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRl
SW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVGaWxsQ29sb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTdHJva2VDb2xvcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUNUTSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzaGFkb3dJc0NsZWFyZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFkb3cpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29y
ZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvd0dseXBoc1dpdGhBZHZhbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6
OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZTo6c2FmZUNvcHkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJ
bmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdGF0ZTo6U2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8
PCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjphcHBs
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1l
ZGlhOjpQYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlRyYW5zbGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJvdGF0ZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmFwcGx5IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2g6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lSm9pbjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6YXBwbHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVj
dDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3RhdGU6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRTdGF0ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0Ojpjb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp4IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OnkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmFuZ2xlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjphbW91
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENU
TTo6U2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRD
VE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6dHJhbnNmb3JtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGVD
aGFuZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlOjpzdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bGluZUNhcCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaEFy
cmF5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lRGFzaDo6ZGFzaE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6bGlu
ZUpvaW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6Om1pdGVyTGltaXQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENv
bXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29sb3IgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29t
cG9zaXRlT3BlcmF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Omdsb2JhbEJv
dW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bENvbXBvc2l0ZWRSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVj
dDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
Um91bmRlZFJlY3Q6OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpSZWNvcmRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV9kcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGVhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Zmls
bEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxs
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd05hdGl2
ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1N5
c3RlbUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWlu
dEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
ZHJhd0dseXBoc0FuZENhY2hlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6flJlY29yZGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojpjb250YWluc09ubHlJbmxp
bmVTdGF0ZUNoYW5nZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldE1pdGVyTGltaXQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp0cmFu
c2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
Ojpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdXJyZW50U3RhdGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdXJy
ZW50U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpjdG0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0
YXRlOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0pOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlY29y
ZERyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
Q29udGV4dFN0YXRlOjpDb250ZXh0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNsb25lRm9yU2F2ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRl
eHRTdGF0ZTo6Y2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0YXRlU3RhY2sgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpSZWNvcmRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmRDbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxC
ZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBs
OjpyZWNvcmRTdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlckltcGw6OnJlY29yZFN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJh
d0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRpdmVJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFBh
aW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpleHRl
bnRGcm9tTG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6flJlY29yZGVySW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkUm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OnJlY29yZFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZFNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRM
aW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldE1pdGVy
TGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OlJlY29yZGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OmFwcGx5U2V0U3RhdGVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3Qm94ZXMpOgorICAgICAgICAqIHJlbmRl
cmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRmdWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNvbnRlbnRmdWxQYWludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dy
b3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNp
ZGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcnMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRh
Y2htZW50UGxhY2Vob2xkZXJCb3JkZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0RGVjb3Jh
dGlvblBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dERlY29yYXRpb25QYWludGVy
OjpwYWludEJhY2tncm91bmREZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dXNlU3Ryb2tlU3R5bGVUb0ZpbGwpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5k
ZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVu
ZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKToKKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRy
YXcpOgorCiAyMDIyLTAzLTEwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgog
CiAgICAgICAgIENhdGFseXN0IEphdmFTY3JpcHRDb3JlLCBXZWJDb3JlLCBXZWJLaXRMZWdhY3ks
IGFuZCBXZWJLaXQgc2hvdWxkbid0IGJlIGNvcGllZCB0byB0aGUgU2Vjb25kYXJ5IFBhdGgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggN2EyZDViYTMxMmMwYmEwNGI0YTg2ZDAwZTU0ODQ3MzA5YWU2NTYzOS4uOTY4MDNm
NTA4ZWY5NjNmMjU0MGQ1Y2NiZDZmOTc4NDFmYTE3ZWMwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4
MyBAQAorMjAyMi0wMy0xMyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXpp
bHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpz
ZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRvdyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZp
bGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRB
cHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
Q2xpcE91dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQ2xpcE91dFRvUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmls
bFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxC
ZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZERyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3TGluZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5n
UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjptX3JlbmRlcmluZ0JhY2tlbmQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFRy
YW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkUm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6c2VuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6
OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFu
Z2VDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250
cm9sbGVyOjpkcmF3UmVjdCk6CisKIDIwMjItMDMtMTAgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9m
ZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2F0YWx5c3QgSmF2YVNjcmlwdENvcmUsIFdlYkNvcmUs
IFdlYktpdExlZ2FjeSwgYW5kIFdlYktpdCBzaG91bGRuJ3QgYmUgY29waWVkIHRvIHRoZSBTZWNv
bmRhcnkgUGF0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAwNzJkODk5YTA3ZmE1OThhMzk3ZGQzYWJjMzNl
MGZmNzg0OGU3NmNmLi5jNTYwZDdjNGRmYTg0OWQzODM0OWQ5OTllZWU2ZTVkMTQwZWQ0MDRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dApAQCAtMjA0NSw2ICsyMDQ1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnRJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dFN0YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0
ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwCkBAIC0y
MDg0LDYgKzIwODUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVk
UmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9Tb3VyY2VCcnVzaC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZh
dGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2YjlkYzE5ODc5MzI3NGY3MGRiZGZhYTdhMDcw
NDM3YWRkYmU2OTE1Li5kNjc5MzE0YTg3YzVmZjYyMGQ3NTJjMzhkZGY1ZmMzNzc1ZDYxNjFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0yMzMxLDEwICsyMzMxLDEyIEBACiAJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBB
bmltYXRpb25FZmZlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUYwNUY4MDI1
MTI0NDJFMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRjA1RjdFMjUxMjQ0MEMwMDcxRTY5MyAv
KiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcxRkNCMTcwMjdCQUIzRkUwMEUwNjMxQyAvKiBGcmFtZVJhdGVB
bGlnbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MUZDQjE2RDI3QkFCM0RGMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDE3ODNCMjdENTdGOUYw
MDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjAxNzgzQTI3RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250
ZXh0U3RhdGVTYXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMTQ0MzMzMjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEy
NDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3Bl
cnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxQjQ5NzQyNTEyQkEz
QjAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdl
Qml0bWFwQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThB
M0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI0NjBERDcyN0M4NkRBRDAw
RDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjQ2MERENjI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhp
Y3NDb250ZXh0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3MjQ2OTYzQjI3NUM1RkE2MDBBOTE1NkEgLyogQ1NTRmlsdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUzRkI4MzIxM0IxQkI4
MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzI0Njk2M0QyNzVDNjE0NDAwQTkxNTZBIC8qIEZpbHRlckVmZmVj
dFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzIxNEI5QjcyNzQ0NThGQTAwM0JFNkRGIC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNFMjc1QzYx
NjcwMEE5MTU2QSAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCNEVGN0MyNzRFRTM3RjAwMjkzQzJGIC8qIEZpbHRl
ckltYWdlVmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTIzNDIsNiArMjM0NCw5IEBACiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAv
KiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURD
ODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjU2MDc4RTI3OUQzNEI2MDA3RDJERDMg
LyogRkVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzJGN0U3NEYyNzlDRURFODAwRDgyRDJEIC8qIEZFSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5
N0UgLyogU291cmNlQnJ1c2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNTgxODU1MjdD
REE4MEUwMEMzRDk3RSAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEMyN0M5RjkzRTAwRDI3QUUw
IC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTYyN0NEQUZENTAwQzNEOTdFIC8qIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyQjM1MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI2Q0RFMjAyNzU5NzM1MDAwQTQ0NUIyIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk2NjFBMjI3
NTk2MEE1MDBFN0RGOUIgLyogRmlsdGVyRWZmZWN0R2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZENTZFMjI1M0FFMjhEMDAwMkVG
OTAgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI2RDU2RTEyNTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZENTZF
MzI1M0FFMzY2MDAwMkVGOTAgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRp
dmVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0xMTMxNyw2ICsxMTMyMiw4IEBACiAJCTcxRkNCMTZEMjdCQUIzREYwMEUwNjMxQyAvKiBG
cmFtZVJhdGVBbGlnbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1l
UmF0ZUFsaWduZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQ0IxNkYyN0JB
QjNFMDAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRnJhbWVSYXRlQWxpZ25lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3Vj
aFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2lu
dHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzgzQTI3RDU3M0IyMDA5
QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDR0NvbnRleHRT
dGF0ZVNhdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDZENDM1MjdEQURF
Q0EwMDQwRkVCMiAvKiBUZXh0Qm94SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEJveEl0
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTFCNUQ2Mjc2NTM2ODIw
MDc2RkVGOCAvKiBGaWx0ZXJSZXN1bHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3
IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRl
ZFZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYy
MjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
VmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzMjYsNiAr
MTEzMzMsOCBAQAogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVS
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjQzNUVGNDI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI0MzVFRjUyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZpbHRlckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzI0NjBERDUyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRC
bGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRC
bGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEz
QTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTExMzg4LDYgKzExMzk3LDEwIEBACiAJCTcyQTEzQUQ1Mjc0REU1NEUwMEUyQTg4
RSAvKiBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VB
bHBoYVNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkEx
M0FENjI3NERFNTc4MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBMTNBRDcyNzRERTU3ODAwRTJBODhFIC8qIFNv
dXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlR3JhcGhp
Y1NvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEw
QzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAgLyogU291cmNl
QnJ1c2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlQnJ1c2guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1
c2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQnJ1c2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJCNEVGNzQyNzRFMjMzMzAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2FyZUFwcGxp
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3NTI3NEUyMzM0MDAyOTNDMkYgLyogRkVCbGVuZFNv
ZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5kU29mdHdhcmVBcHBs
aWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNEVGN0MyNzRFRTM3RjAw
MjkzQzJGIC8qIEZpbHRlckltYWdlVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdl
VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODE2NSwxOCArMjgxNzgs
MTggQEAKIAkJCQlBQTJBNUFCRDE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmNw
cCAqLywKIAkJCQlBQTJBNUFCRTE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmgg
Ki8sCiAJCQkJQUEyQTVBQkYxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5pZGwg
Ki8sCi0JCQkJQUEyQTVBQzAxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc0V2ZW50
LmNwcCAqLywKLQkJCQlBQTJBNUFDMTE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lz
RXZlbnQuaCAqLywKLQkJCQlBQTJBNUFDMjE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhl
c2lzRXZlbnQuaWRsICovLAotCQkJCTI5RjgzRUM5MjdENTk0RTUwMEUxRjBGRCAvKiBTcGVlY2hT
eW50aGVzaXNFdmVudEluaXQuaCAqLywKLQkJCQkyOUY4M0VDQjI3RDU5NTI2MDBFMUYwRkQgLyog
U3BlZWNoU3ludGhlc2lzRXZlbnRJbml0LmlkbCAqLywKIAkJCQkyOUY4M0VDNjI3RDMxOTI2MDBF
MUYwRkQgLyogU3BlZWNoU3ludGhlc2lzRXJyb3JDb2RlLmggKi8sCiAJCQkJMjlGODNFQ0UyN0Q1
RkE2MzAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yQ29kZS5pZGwgKi8sCiAJCQkJMjlG
ODNFQzQyN0QzMTVBMjAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnQuY3BwICov
LAogCQkJCTI5RjgzRUMzMjdEMzE1QTIwMEUxRjBGRCAvKiBTcGVlY2hTeW50aGVzaXNFcnJvckV2
ZW50LmggKi8sCiAJCQkJMjlGODNFQzUyN0QzMTVCODAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNp
c0Vycm9yRXZlbnQuaWRsICovLAotCQkJCTI5RjgzRUNGMjdENkM3MkEwMEUxRjBGRCAvKiBTcGVl
Y2hTeW50aGVzaXNFcnJvckV2ZW50SW5pdC5pZGwgKi8sCiAJCQkJMjlGODNFRDAyN0Q2Qzg4NTAw
RTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnRJbml0LmggKi8sCisJCQkJMjlGODNF
Q0YyN0Q2QzcyQTAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnRJbml0LmlkbCAq
LywKKwkJCQlBQTJBNUFDMDE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzRXZlbnQu
Y3BwICovLAorCQkJCUFBMkE1QUMxMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNF
dmVudC5oICovLAorCQkJCUFBMkE1QUMyMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVz
aXNFdmVudC5pZGwgKi8sCisJCQkJMjlGODNFQzkyN0Q1OTRFNTAwRTFGMEZEIC8qIFNwZWVjaFN5
bnRoZXNpc0V2ZW50SW5pdC5oICovLAorCQkJCTI5RjgzRUNCMjdENTk1MjYwMEUxRjBGRCAvKiBT
cGVlY2hTeW50aGVzaXNFdmVudEluaXQuaWRsICovLAogCQkJCUFBMkE1QUM0MTZBNDg1RDUwMDk3
NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwICovLAogCQkJCUFBMkE1QUM1MTZB
NDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaCAqLywKIAkJCQlBQTJB
NUFDMzE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmlkbCAqLywK
QEAgLTI4ODA4LDYgKzI4ODIxLDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNn
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjAxNzgz
QTI3RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oICovLAogCQkJCTBGQ0Yz
MzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMzI1OTY4
RDBCMDAzMEU2QUEgLyogQ29sb3JTcGFjZUNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMjI1OTY4RDBC
MDAzMEU2QUEgLyogQ29sb3JTcGFjZUNHLmggKi8sCkBAIC0yOTA0MSw2ICsyOTA1NSw5IEBACiAJ
CQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRy
YWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0Nv
bnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCiAJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENF
IC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKKwkJCQk3MjQ2MERENTI3Qzg1RDAxMDBE
NUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwICovLAorCQkJCTcyNDYwREQ2MjdDODVE
MDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovLAorCQkJCTcyQjM1MTBEMjdD
QTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEY1
ODBCMDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBGNTgw
QjBBMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBCMEIw
RjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLywKQEAgLTI5MTQxLDYg
KzI5MTU4LDcgQEAKIAkJCQlCQ0E1NTkxMjI2M0RCRDc5MDA3RjE5QjMgLyogUGl4ZWxGb3JtYXQu
aCAqLywKIAkJCQlDREQwOEFCRjI3N0U1NEYwMDBFQTM3NTUgLyogUGxhdGZvcm1BdWRpb1RyYWNr
Q29uZmlndXJhdGlvbi5oICovLAogCQkJCUJDM0U2MjQyMjY1OTc5MTcwMDU0OEFDRCAvKiBQbGF0
Zm9ybUNvbG9yU3BhY2UuaCAqLywKKwkJCQk3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAgLyogUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAg
LyogUGxhdGZvcm1JbWFnZS5oICovLAogCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQ
bGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJNTUwNjQwQUQyNDA3NTZEQTAwQUFFMDQ1IC8q
IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCkBAIC0yOTE2NCw2ICsyOTE4Miw4IEBA
CiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLAogCQkJ
CTBGM0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8sCiAJCQkJMUM0REIw
MjQyNzMzOUU1RTAwN0IwQUQxIC8qIFNob3VsZExvY2FsaXplQXhpc05hbWVzLmggKi8sCisJCQkJ
NzJCMzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmNwcCAqLywKKwkJCQk3MkIz
NTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLywKIAkJCQkxREQxMjdBQzI1
NkUzQTg3MDBCMjI3RDcgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgKi8sCiAJCQkJQ0Q2NDFF
QjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLywKIAkJCQlDREM4
QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovLApA
QCAtMjkxNzUsNiArMjkxOTUsNyBAQAogCQkJCTA4NzU1OEM0MTNCNEE1N0QwMEY0OTMwNyAvKiBT
dXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCAqLywKIAkJCQk5NUU5RjQ0NDI3QzlBMzlC
MDA5NDUzMzcgLyogU3lzdGVtSW1hZ2UuaCAqLywKIAkJCQkzQkI2QjgwRjIyQTdEMzExMDAzQTJB
NjkgLyogVGFiU2l6ZS5oICovLAorCQkJCTcyMDZENDM1MjdEQURFQ0EwMDQwRkVCMiAvKiBUZXh0
Qm94SXRlcmF0b3IuaCAqLywKIAkJCQkzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1
bi5jcHAgKi8sCiAJCQkJQTgyNEI0NjQwRTJFRjJFQTAwODFBN0I3IC8qIFRleHRSdW4uaCAqLywK
IAkJCQlDRDFFNzM0NjE2N0JDNzhFMDA5QTg4NUQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24u
Y3BwICovLApAQCAtMzM0NDcsOCArMzM0NjgsNiBAQAogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxk
UGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCi0J
CQkJNjU2NTgwRjQwOUQxMkIyMDAwMEU2MUQ3IC8qIENTU1Byb3BlcnR5TmFtZXMuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTY1NjU4MTUxMDlEMTMwNDMwMDBFNjFENyAvKiBDU1NWYWx1ZUtleXdvcmRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyogQWJvcnRD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCRjFGODBBNTZFMDAxNkE0Q0Ug
LyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2Qjk1MTk1MjA3RDYzMzQwMEE3
RDJERCAvKiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzg3Myw2ICsz
Mzg5Miw3IEBACiAJCQkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmlj
YXRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8q
IENlcnRpZmljYXRlU3VtbWFyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5
RjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
MzZGRDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNzg1RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5l
bENvdW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDE5OCw2ICszNDIxOCw3IEBACiAJCQkJ
QTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MUYwNUY4MDI1MTI0NDJFMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTcxMzE3MTM0MUZCRTc4REIwMEY3NThERSAvKiBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk2NTY1ODBGNDA5RDEyQjIwMDAw
RTYxRDcgLyogQ1NTUHJvcGVydHlOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ2RDM3NDYx
RDZEMDFENDAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NDlDNzcwNTFENkUzOUVBMDBDMERFNEYgLyogQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ1MDA3NzA4NEYgLyogQ1NTUHJvcGVy
dHlQYXJzZXJXb3JrZXJTYWZlLmggaW4gSGVhZGVycyAqLywKQEAgLTM0MjQwLDYgKzM0MjYxLDcg
QEAKIAkJCQk0QkFGRDBEOTIxOTIxRUEwMDBDMEFCNjQgLyogQ1NTVW5wYXJzZWRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRUUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFM0JCQzI0NzIzODM1NTI2MDA2RUMzOUYgLyogQ1NTVmFsdWVL
ZXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1NjU4MTUxMDlEMTMwNDMwMDBFNjFENyAvKiBDU1NW
YWx1ZUtleXdvcmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkNFOTBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTVmFsdWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlCRDlGQTEzMUZEMkVE
MDAzQzU2RjAgLyogQ1NTVmFsdWVQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NDQ0Q0JFODFE
ODg2MUMyMDA3M0EwNzQgLyogQ1NTVmFyaWFibGVEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTM0
Nzk3LDYgKzM0ODE5LDggQEAKIAkJCQk0OUM3QjlGQzEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCOTVDRkVCMjc1NEZGNkUw
MDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
ODBENjcwODBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNDYwREQ3MjdDODZEQUQwMEQ1RjlGNCAvKiBHcmFw
aGljc0NvbnRleHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTYyN0NEQUZENTAw
QzNEOTdFIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXll
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDkxNCw2ICszNDkzOCw3IEBACiAJCQkJQThD
RkY3QTcwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxNb2RFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlGNEIwMDE4OTI2RTdGMjFGMDA2RUFBQkUgLyogSFRNTE5hbWVDYWNoZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThERjNGRDQwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxOYW1lQ29sbGVjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThEMDZCMzkwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxO
YW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MUQ0NUEwQTEyN0NCQzAwQjEyQTY4IC8qIEhU
TUxPYmplY3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGMTBBMTkxNkRGMDBB
OEVGNUYgLyogSFRNTE9MaXN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxMzY5REUw
OTczNzRGNjAwRDc0NDYzIC8qIEhUTUxPcHRHcm91cEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzU0NTksNiArMzU0ODQsNyBAQAogCQkJCUJDNjQ2NDk4MTFEODIzNDkwMDY0NTVCMCAvKiBK
U0RPTVN0cmluZ01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzY5NDU2M0QxMjE0RDk3QzAwMDdD
QkFFIC8qIEpTRE9NVG9rZW5MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTM3RTAwNjEyREJD
NUE0MDBBNkIyMzMgLyogSlNET01VUkwuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MDNCQTBGMDlF
QjE4RjkwMDc5N0M3RiAvKiBKU0RPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2OTMy
NzQwRDdFMjkzOTAwQUU0NEQxIC8qIEpTRE9NV2luZG93QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjUyRkJCQkMwREUyN0NCNjAwMDFEMzg2IC8qIEpTRE9NV2luZG93Q3VzdG9tLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0NjBDQkYzNjFENEJDRDBFMDA5MkU4OEUgLyogSlNET01XaW5kb3dQcm9w
ZXJ0aWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NjgzLDYgKzM1NzA5LDcgQEAKIAkJCQlBOUQy
NDdGODBENzU3RTM0MDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTc3RDUxMDI1MUVENzRCNTgwMERBNEM4NyAvKiBKU05hdmlnYXRvckNyZWRlbnRpYWxzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MUY4ODZDMDFGMzI5MjMxMDBDMTkzRUYgLyogSlNOYXZpZ2F0b3JT
ZXJ2aWNlV29ya2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNERDMEQzODA5RkVEMDczMDA3QjAy
MzUgLyogSlNOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0MzlDMzExNkNGNDk0MDA0OEM3
NTAgLyogSlNOb2RlQ3VzdG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDExNUI3MzA5Rjg0Q0Q2
MDBDQTRGQzEgLyogSlNOb2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTc1MEQ4RTBB
OTBFNTIxMDAwRkYyMTUgLyogSlNOb2RlSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMzU4
NDcsMTIgKzM1ODc0LDYgQEAKIAkJCQlCQ0UwMTM5QjBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHls
ZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDcyNkZFRTE2REExMUJDMDAzQTRFNkQgLyog
SlNTdHlsZVNoZWV0Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODRFQkQ4MzBDQjhDOTc3
MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQThEMDZC
MzkwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQw
M0JBMEYwOUVCMThGOTAwNzk3QzdGIC8qIEpTRE9NV2luZG93LmggaW4gSGVhZGVycyAqLywKLQkJ
CQkxNERDMEQzODA5RkVEMDczMDA3QjAyMzUgLyogSlNOb2RlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwOEM3QTJDNzEwREM3NDYyMDAyRDM2OEIgLyogU1ZHTmFtZXMuaCBpbiBIZWFkZXJzICovLAot
CQkJCTFBMTQxNEI2MTNBMEYwNTAwMDE5OTk2QyAvKiBXZWJLaXRGb250RmFtaWx5TmFtZXMuaCBp
biBIZWFkZXJzICovLAotCQkJCTdDRDU4REZCMUY5NTY1QTUwMDExMjc5MSAvKiBTZXR0aW5ncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTcxRjIxODkxREE1N0M1NDAwNUM5RUZEIC8qIEpTU3VidGxl
Q3J5cHRvLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjAxMTEwODBBQjc3NDA1MDBEQjBFNjggLyog
SlNTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjREOTEyOTIxM0NBOTUxRTAwRDIx
OTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzA2
LDYgKzM2NzI3LDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1F
dmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhD
NkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUx
OTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MjZENTZFMjI1M0FFMjhEMDAwMkVGOTAgLyogUGxhdGZvcm1J
bWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3NzA1QzcyNTUyNzZDRDAwMUQwQzk0IC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1MDY0MEFGMjQwNzU4MkQw
MEFBRTA0NSAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNzMyOSw2ICszNzM1MSw3IEBACiAJCQkJNDZFRjE0MkExRjk3QjdEODAwQzJBNTI0IC8qIFNl
cnZpY2VXb3JrZXJXaW5kb3dDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTEwMDk5
RTY0OTIwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBp
biBIZWFkZXJzICovLAorCQkJCTdDRDU4REZCMUY5NTY1QTUwMDExMjc5MSAvKiBTZXR0aW5ncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0NDOTcyMkUxRjkzRTMzNjAwMDRENENGIC8qIFNldHRpbmdz
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFCQkE4NjYyNTdFMzczQjAwQUM3RjZEIC8qIFNG
cmFtZVV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNERDQ1MDEyRjVFQTFCMDAwRDkxOTAg
LyogU2hhZG93Qmx1ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzM4NSw2ICszNzQwOCw3IEBACiAJ
CQkJNTEwRDRBMzgxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0
cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjNFMEZDN0RGRjAwMDk1
NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTQyN0NEQTY5
QTAwQzNEOTdFIC8qIFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2MjE3
QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNB
NDk2NTE3QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQ0RGMTM1MDkyNEM5RkNBMzAwNDMyRTFFIC8qIFNvdXJjZUJ1ZmZlclBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNzY1Niw2ICszNzY4MCw3IEBACiAJCQkJQjIyMjdBNEIwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR01ldGFkYXRhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJB
MUYyQjEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTRFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNUGF0aEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTA4QzdBMkM3MTBEQzc0NjIwMDJEMzY4QiAvKiBTVkdOYW1l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NFNThENTAxREQ2OUExRTAwMTI4NTUyIC8qIFNWR051
bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBNTEwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R051bWJlckxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTU3MEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdQYXJzZXJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzgxMDAsNiArMzgx
MjUsNyBAQAogCQkJCUE1ODRGRTMwMTg2NENCODQwMDg0M0IxMCAvKiBXZWJJbmplY3RlZFNjcmlw
dE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0ODIyMzExMUUzODY5QjgwMDY2RkM3OSAv
KiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1REZFQkFC
NzE4NTkyQjZEMDBDNzVCRUIgLyogV2ViS2l0QXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywK
KwkJCQkxQTE0MTRCNjEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyRDA2MjE0NTFEQTYzOUJBMDBBN0ZCMjYgLyogV2ViS2l0TWVk
aWFLZXlNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMDYyMTUxMURBNjNBOUYw
MEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU5lZWRlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRDA2MjE0RTFEQTYzQThFMDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlzLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hE
ZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDg1NmEzZGU1MDRkZWMwYmJmYTkwYWMxN2Rl
MzdmNTE1ZTE0ZDkyMDQuLjlkOTM1YTZmZjMyMzBmM2Y0NmEyZWY1ZDdlYTEwMDEwYWU5ZTEwYzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0
aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcApAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgQm9yZGVyUGFp
bnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4
dCwgY29uc3QKICAgICAgICAgICAgIERhc2hBcnJheSBsaW5lRGFzaDsKICAgICAgICAgICAgIGxp
bmVEYXNoLmFwcGVuZChkYXNoTGVuZ3RoKTsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChn
YXBMZW5ndGgpOwotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURh
c2gobGluZURhc2gsIGRhc2hMZW5ndGgpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIg
cGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTEyOTQsNyArMTI5NCw3
IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29u
dGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdp
biA9IGZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBh
dXRvIGFkanVzdGVkU2hhZG93T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmls
bFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQuc2V0U2hhZG93KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwg
c2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50
aW5nQ29udGV4dC5jb250ZXh0LnNldERyb3BTaGFkb3coeyBhZGp1c3RlZFNoYWRvd09mZnNldCwg
c2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hT
aGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRl
ZmF1bHQgfSk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAg
Ly8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0
LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCB2b2lk
IEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBh
aW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC50cmFu
c2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7
CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNl
dCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRC
b3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93
KHsgc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNo
YWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xl
UmVjdCwgZmlsbENvbG9yKTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWlu
dEltYWdlLmNwcAppbmRleCBmNGI5OGJhNjJlMTE5YTA3NzEzMTJkM2I4OGM0OTE5MzY4MzZlZTM3
Li5lZTUwNGYwOGM0OWZjOGQ1YjVhZWQ3MDJiZTIxN2YxYjA2ZmQ0ZTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBJbWFnZURy
YXdSZXN1bHQgQ3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjbwogSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENv
bnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNv
bXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0
LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVz
dENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVj
dC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBDdXN0
b21QYWludEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QKICAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsK
IAogICAgIC8vIEZhY3RvciBpbiB0aGUgZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdl
bmVyYXRlIGF0IHRoZSBiZXN0IHJlc29sdXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENv
bnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5
SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0g
PSBkZXN0Q29udGV4dC5nZXRDVE0oKTsKICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29u
dGV4dENUTS54U2NhbGUoKSk7CiAgICAgZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRD
VE0ueVNjYWxlKCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBw
YXR0ZXJuVHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCAwZTc4MDYzZTNhNDFj
YmM2OTBmMGQwY2NiNzg4MTE3ZGU2OTM4YTAyLi5kYmM5NTdjNTNkMDRhMzk2ZWFjNjRkNjdmZTZh
MmIxN2U0NDhjNjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtNjk3LDcgKzY5Nyw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCgpIGNvbnN0
CiAgICAgRGFzaEFycmF5IGNvbnZlcnRlZExpbmVEYXNoKHN0YXRlKCkubGluZURhc2guc2l6ZSgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlKCkubGluZURhc2guc2l6ZSgpOyAr
K2kpCiAgICAgICAgIGNvbnZlcnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5
RWxlbWVudD4oc3RhdGUoKS5saW5lRGFzaFtpXSk7Ci0gICAgYy0+c2V0TGluZURhc2goY29udmVy
dGVkTGluZURhc2gsIHN0YXRlKCkubGluZURhc2hPZmZzZXQpOworICAgIGMtPnNldExpbmVEYXNo
KHsgV1RGTW92ZShjb252ZXJ0ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZSgp
LmxpbmVEYXNoT2Zmc2V0KSB9KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpzZXRHbG9iYWxBbHBoYShkb3VibGUgYWxwaGEpCkBAIC03MjgsNyArNzI4LDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRp
b24oY29uc3QgU3RyaW5nJiBvcGUKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29u
dGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwotICAgIGMtPnNldENvbXBvc2l0
ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKKyAgICBjLT5zZXRDb21wb3NpdGVNb2RlKHsgb3As
IGJsZW5kTW9kZSB9KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
Y2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKQEAgLTExODYsNyArMTE4Niw3IEBAIGJvb2wgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwoY29uc3Qg
UGF0aCYgcGF0aCwgZG91CiAgICAgICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5l
RGFzaC5zaXplKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNp
emUoKTsgKytpKQogICAgICAgICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2Fz
dDxEYXNoQXJyYXlFbGVtZW50PihsaW5lRGFzaFtpXSk7Ci0gICAgICAgIGNvbnRleHQuc2V0TGlu
ZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICAgICAg
Y29udGV4dC5zZXRMaW5lRGFzaCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oc3RhdGUubGluZURhc2hPZmZzZXQpIH0pOwogICAgIH0pOwogfQogCkBAIC0x
MjA1LDcgKzEyMDUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFy
UmVjdChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB3aWR0aCwgZAogICAgIGlmIChzaG91bGRE
cmF3U2hhZG93cygpKSB7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQg
PSB0cnVlOwotICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9y
Ojp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBj
b250ZXh0LT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVu
dEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiAgICAgfQogICAgIGlmIChzdGF0
ZSgpLmdsb2JhbEFscGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTM2Myw5
ICsxMzYzLDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRv
dygpCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQgd2lkdGgg
PSBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBz
dGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0
U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dD
b2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRv
dyh7IEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUo
KS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0gZWxzZQot
ICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBjLT5zZXREcm9wU2hhZG93
KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kgfSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjQzMiwxOSArMjQzMiwxNiBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRS
dW4mIHRleHRSdW4sIGRvdQogCiAgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0KDAsIDIgKiBt
YXNrUmVjdC5oZWlnaHQoKSk7CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7
Ci0gICAgICAgICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7Ci0gICAgICAgICAgICBDb2xvciBzaGFk
b3dDb2xvcjsKLSAgICAgICAgICAgIGMtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cywgc2hhZG93Q29sb3IpOwotCiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdCht
YXNrUmVjdCk7Ci0gICAgICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hhZG93UmFkaXVzICog
MS40KTsKLSAgICAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQgKiAtMSk7Cisg
ICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cgPSBjLT5kcm9wU2hhZG93KCk7CisKKyAgICAgICAg
ICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShkcm9wU2hhZG93LmJsdXJSYWRpdXMgKiAxLjQpOworICAg
ICAgICAgICAgc2hhZG93UmVjdC5tb3ZlKGRyb3BTaGFkb3cub2Zmc2V0ICogLTEpOwogICAgICAg
ICAgICAgYy0+Y2xpcChzaGFkb3dSZWN0KTsKIAotICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9
IG9mZnNldDsKKyAgICAgICAgICAgIGRyb3BTaGFkb3cub2Zmc2V0ICs9IG9mZnNldDsKIAotICAg
ICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dD
b2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgICAgIGMtPnNldERyb3BT
aGFkb3coZHJvcFNoYWRvdyk7CiAKICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAg
ICAgIGMtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCmluZGV4IDRmNjNhZGNlOTM5MTZkYjIzMjBlOTY3
OGFhYmZlMGYzY2Q5OTc2MmIuLjlhODAzYTQwOGQ4OGMyZmY0OGRkM2JlYTAyOTUxYjg3NTgwOThl
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAK
QEAgLTEyNDQsNyArMTI0NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRTdGlwcGxpbmcoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9r
ZVRoaWNrbmVzcygxKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpE
YXNoZWRTdHJva2UpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2goeyAxLCBkZW5zaXR5IH0sIDEp
OworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IDEsIGRlbnNpdHkgfSwgMSB9KTsKIAogICAg
IGRyYXdMYXlvdXRQYXR0ZXJuKGNvbnRleHQsIHF1YWQsIGRlbnNpdHksIEZsaXA6Ok5vKTsKIH0K
QEAgLTEyNTQsNyArMTI1NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKGNvbnRleHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKDAuNSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6
RGFzaGVkU3Ryb2tlKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgMiwgMiB9LCAyKTsKKyAg
ICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyAyLCAyIH0sIDIgfSk7CiAKICAgICBjb25zdGV4cHIg
YXV0byBkZWZhdWx0TGF5b3V0SGF0Y2hTcGFjaW5nID0gMTI7CiAgICAgZHJhd0xheW91dFBhdHRl
cm4oY29udGV4dCwgcXVhZCwgZGVmYXVsdExheW91dEhhdGNoU3BhY2luZywgZmxpcCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggM2I5OTU1ODlkMTg1NmY3YzMzN2ZhMDBkNGVkYzUy
YWJiZTkzNDExNS4uZjQ5NWY0OGU2MzY5NWYxMDI3YzU4Njc4MWM4MDYwZjU1NzFmOGFlNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNDI5Niw3ICs0Mjk2LDcgQEAgdm9pZCBGcmFt
ZVZpZXc6OnRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXQKICAgICBpZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgbGF5b3V0Q29u
dGV4dCgpLmxheW91dCgpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBhaW50
SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGZy
YW1lUmVjdCgpLCBwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9ybVdp
ZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRlbnRz
KCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0KExl
Z2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ4NDcsNyArNDg0Nyw3IEBAIHZvaWQg
RnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9tLCBm
bG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRoIHBh
aW50aW5nIGRpc2FibGVkLgotICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChOdWxsR3Jh
cGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIE51bGxH
cmFwaGljc0NvbnRleHQgY29udGV4dChmcmFtZVJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVu
Y2F0ZWRBdChzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVj
dCBkaXJ0eVJlY3QoMCwgc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZp
ZXctPmxheW91dE92ZXJmbG93UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihv
bGRCb3R0b20gLSBvbGRUb3ApKSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5
UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDlmZDI1ZDgwYWQxMmRjOTFk
ZDExZjkxNTk4ZmM2YzhlZmE0Y2IyYTIuLjI4OTU3NGI5YzFlNDBjZDcxMmI0ZTJiNmU5ZWIzNGIw
MTcyOWRmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCkBAIC0yOSw3ICsyOSw4IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OkJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0KQotICAgIDogbV9wcmltYXJ5Q29udGV4dChw
cmltYXJ5Q29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChwcmltYXJ5Q29udGV4dC5jbGlw
Qm91bmRzKCksIHsgfSwgcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKCkpCisgICAgLCBtX3ByaW1hcnlD
b250ZXh0KHByaW1hcnlDb250ZXh0KQogICAgICwgbV9zZWNvbmRhcnlDb250ZXh0KHNlY29uZGFy
eUNvbnRleHQpCiB7CiB9CkBAIC00OCw2ICs0OSwzMCBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKICAg
ICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIAorI2lmIFVT
RShDRykKK2Jvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgp
OworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRl
eHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXND
QUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKK30KKwordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxl
cmF0ZWRDb250ZXh0KQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENv
bnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJ
c0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7Cit9CisjZW5kaWYKKwor
UmVuZGVyaW5nTW9kZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Cit9
CisKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCiB7CiAgICAgLy8gRklY
TUU6IENvbnNpZGVyIG5vdCB1c2luZyB0aGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCdzIHN0
YXRlIHN0YWNrIGF0IGFsbCwKQEAgLTY0LDIyICs4OSwxMCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnJlc3RvcmUoKQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yZXN0b3JlKCk7
CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotfQotCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIGZyb20sIGNvbnN0
IEZsb2F0UG9pbnQmIHRvKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwg
dG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci19Ci0KLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseVN0YXRlQ2hhbmdl
cygpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5h
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseVN0YXRlQ2hh
bmdlcygpOwogfQogCiAjaWYgVVNFKENHKQpAQCAtOTYsMjIgKzEwOSwxMCBAQCB2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogfQogI2VuZGlmCiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZmlsbFBhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOwot
fQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCBmYWN0b3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRo
KHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOworICAgIG1f
cHJpbWFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7CiB9CiAKIHZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQpAQCAtMTI2LDIyMiArMTI3LDEyNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikKLXsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwotfQotCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5maWxsUmVjdChyZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJv
dW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxS
b3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0
LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci19Ci0KLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0
aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsK
LX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsRWxsaXBzZShl
bGxpcHNlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19
Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNl
KGVsbGlwc2UpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2Up
OwotfQotCi0jaWYgVVNFKENHKQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNDQUxheWVyQ29udGV4dCkKLXsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Ci19Ci0K
LWJvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0
KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJ
c0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsK
LX0KLSNlbmRpZgotCi1SZW5kZXJpbmdNb2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJl
bmRlcmluZ01vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRl
cmluZ01vZGUoKTsKLX0KLQogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7
CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwKHJlY3QpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5jbGlwKHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91
dChyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKLX0KLQotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5jbGlwT3V0KHBhdGgpOwotfQotCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogeworICAgIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogICAgIG1fcHJpbWFyeUNv
bnRleHQuY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5j
bGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRl
eHQuY2xpcEJvdW5kcygpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LnNldExpbmVDYXAobGluZUNhcCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVDYXAo
bGluZUNhcCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBk
YXNoT2Zmc2V0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJy
YXksIGRhc2hPZmZzZXQpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5lRGFzaChkYXNo
QXJyYXksIGRhc2hPZmZzZXQpOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsK
KyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKIH0KIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LnNldExpbmVKb2luKGxpbmVKb2luKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuc2V0TGluZUpvaW4obGluZUpvaW4pOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRh
cnlDb250ZXh0LmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3Qp
OwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXJMaW1pdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldE1pdGVy
TGltaXQobWl0ZXJMaW1pdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldE1pdGVyTGltaXQo
bWl0ZXJMaW1pdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7CisgICAg
bV9zZWNvbmRhcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdl
LCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobmF0
aXZlSW1hZ2UsIHNlbGZTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwgc2VsZlNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0
KHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2Um
IHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1h
Z2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3
UGF0dGVybihuYXRpdmVJbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQ
YXR0ZXJuKG5hdGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0
KHJlY3QsIGdyYWRpZW50KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwg
Z3JhZGllbnQpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1
dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOwogfQogCi1JbWFn
ZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3ByaW1hcnlDb250ZXh0LmRyYXdU
aWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywg
b3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0K
IAotSW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZElt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6
VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1f
cHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVT
Y2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7CisgICAgbV9zZWNvbmRh
cnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGlu
YXRpb24pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOwogfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykK
IAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNjYWxlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIG1fcHJpbWFy
eUNvbnRleHQuc2NhbGUoc2NhbGUpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zY2FsZShzY2Fs
ZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVz
cyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tu
ZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
cm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQucm90YXRlKGFu
Z2xlSW5SYWRpYW5zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBz
ZSk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CiB9CiAK
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBt
X3NlY29uZGFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOworICAgIG1fcHJpbWFyeUNvbnRleHQu
c3Ryb2tlUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRo
KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmNvbmNhdENUTSh0cmFuc2Zvcm0pOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmIGZyb20sIGNvbnN0IEZsb2F0UG9pbnQmIHRvKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldENUTSh0cmFuc2Zv
cm0pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBtX3ByaW1hcnlD
b250ZXh0LmdldENUTShpbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd0VsbGlwc2UocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJl
Y3QpOwogfQogCi1GbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01v
ZGUpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91bmRUb0RldmljZVBpeGVs
cyhyZWN0LCByb3VuZGluZ01vZGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0
aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwogfQogCiB2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCkBAIC0zNzAsMjkgKzI3NSw1NCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBkbwogfQogI2Vu
ZGlmCiAKLUZsb2F0U2l6ZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25z
dCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXV0byBz
aXplID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3VGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBmcm9t
LCB0byk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9p
bnQsIGZyb20sIHRvKTsKLSAgICByZXR1cm4gc2l6ZTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiBmaWx0ZXJSZXN1bHRzKQogewotICAg
IG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1H
bHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9u
dFNtb290aGluZ01vZGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VC
dWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRz
KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNl
SW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRzKTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gdG8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd0VtcGhhc2lzTWFya3MoY2FzY2FkZSwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RW1waGFzaXNNYXJrcyhjYXNjYWRlLCBydW4sIG1h
cmssIHBvaW50LCBmcm9tLCB0byk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pCit2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRl
eHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdCaWRpVGV4dChjYXNjYWRlLCBydW4s
IHBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOworICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVj
dCk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJh
d1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0dGVy
bihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIG1fcHJpbWFy
eUNvbnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5kcmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
ciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQoreworICAgIG1fcHJpbWFy
eUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7
Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250
U21vb3RoaW5nTW9kZSkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwor
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMs
IG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKQEAgLTQwNywx
NiArMzM3LDkgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKICAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBtYXJrZXJTdHlsZSk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVy
bCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0VVJM
Rm9yUmVjdCh1cmwsIHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0
KHVybCwgcmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVz
dGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQorYm9vbCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3Mo
KSBjb25zdAogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5h
bWUsIHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3Qo
bmFtZSwgcmVjdCk7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuc3VwcG9ydHNJbnRlcm5h
bExpbmtzKCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGlu
YXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
CkBAIC00MjUsMTggKzM0OCwxNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFk
ZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0CiAgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmFkZERlc3RpbmF0aW9uQXRQb2ludChuYW1lLCBwb2ludCk7CiB9CiAKLWJv
b2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29u
c3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJldHVy
biBtX3ByaW1hcnlDb250ZXh0LnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpOworICAgIG1fcHJpbWFy
eUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CiB9CiAKLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBmbGFncykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChj
b25zdCBVUkwmIHVybCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIC8vIFRoaXMgY2Fs
bHMgdXBkYXRlU3RhdGUoKSBpbnN0ZWFkIG9mIGRpZFVwZGF0ZVN0YXRlKCkgc28gdGhhdCBjaGFu
Z2VzCi0gICAgLy8gYXJlIGFsc28gYXBwbGllZCB0byBlYWNoIGNvbnRleHQncyBHcmFwaGljc0Nv
bnRleHRTdGF0ZSwgc28gdGhhdCBjb2RlCi0gICAgLy8gaW50ZXJuYWwgdG8gdGhlIGNoaWxkIGNv
bnRleHRzIHRoYXQgcmVhZHMgZnJvbSB0aGUgc3RhdGUgZ2V0cyB0aGUgcmlnaHQgdmFsdWVzLgot
ICAgIG1fcHJpbWFyeUNvbnRleHQudXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQudXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKKyAgICBtX3ByaW1hcnlD
b250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0VVJMRm9yUmVjdCh1cmwsIHJlY3QpOwogfQogCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShD
QUlSTykKQEAgLTQ0Niw1ICszNjcsMTAgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnQKIH0KICNl
bmRpZgogCitGbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUp
Cit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91bmRUb0RldmljZVBpeGVscyhyZWN0
LCByb3VuZGluZ01vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuaAppbmRleCBmNThiMzRjOTE0MzQyYjczNzc3MjdjMTFhNzNiNmQ4MjE4ZTE1
NTZmLi43YTM3YTExM2RkODE1ZWIzYjk1NjA3NTJkOWRjNzBlYjVhODk3YzViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dC5oCkBAIC00Myw4MyArNDMsNTQgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0g
ICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisjaWYgVVNFKENHKQorICAgIGJvb2wgaXNDQUxheWVy
Q29udGV4dCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29s
KSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChi
b29sKSBmaW5hbDsKKyNlbmRpZgorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNv
bnN0IGZpbmFsOwogCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkg
ZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogI2lmIFVTRShDRykK
ICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlGaWxs
UGF0dGVybigpIGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikg
ZmluYWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVy
KCkgZmluYWw7CiAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9y
KSBmaW5hbDsKLQotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7Ci0gICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91bmRl
ZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwot
ICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwot
ICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgc3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwotCi0gICAg
dm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotICAgIHZv
aWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotCi0jaWYg
VVNFKENHKQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBi
b29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0g
V2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLQogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAg
dm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb25SZWN0KSBmaW5hbDsKIAotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdp
bmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwotCi0gICAgSW50UmVjdCBjbGlwQm91
bmRzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7
Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0
KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lk
IHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpG
cm9tSW1hZ2UgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKElt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291
cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFj
dG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKIAotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwot
I2VuZGlmCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZv
aWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAKLSAgICB1
c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRT
aXplJikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFs
OwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQg
ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIHZvaWQg
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25z
dCBQYXRoJikgZmluYWw7CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAg
IEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5n
TW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5h
bDsKIAorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAg
dm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCiAgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xv
ciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTEyNywyMyAr
OTgsMjYgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAot
ICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5n
TW9kZSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3Rk
OjpudWxsb3B0KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpIGZpbmFsOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1J
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBm
aW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKKyNlbmRpZgog
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CiAgICAgdm9pZCBk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJv
a2VTdHlsZSkgZmluYWw7Ci0KICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9p
ZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCi0g
ICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLQogICAgIGJvb2wgc3VwcG9y
dHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0
UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAg
dm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mp
IGZpbmFsOworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwogCiAjaWYgT1MoV0lORE9X
UykgJiYgIVVTRShDQUlSTykKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2Uu
Y3BwCmluZGV4IGJiNGRhYzAxOWM1YjllMTNiMTM3YWU2OTRlNGJmNmIyNzZiZmNjMGQuLjFjMWI5
NmVjNWI5ODNjYzVmMThkNmZmMWZkMjU4NTdmYTk0M2M0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFn
ZS5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJh
d0Nyb3NzZmFkZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiBJbWFnZURyYXdSZXN1bHQgQ3Jv
c3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7Cisg
ICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigp
LCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAg
ICBjb250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0
LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKaW5kZXggMjVhM2QzZmU4NzczMzFk
ZGEzOTU3ODAxMWI2ZDg5MGYyMTJjNzJlNi4uM2JjYjUwNWFmM2MyODJmNDIyMzI1Y2Q3ZTMwMDUz
NGZkOWY5OWNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RHJhd0dseXBoc1JlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRHJhd0dseXBoc1JlY29yZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyNCArMjYsMTEgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNp
bmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3Rm
L1VuaXF1ZVJlZi5oPgogCi0jaWYgVVNFKENPUkVfVEVYVCkKLSNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpZiBQ
TEFURk9STShXSU4pCi0jaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KLSNl
bHNlCi0jaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgotI2VuZGlmCi0jaW5jbHVk
ZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CkBAIC02Miw3NiArNDksMzIgQEAgcHVibGljOgog
I2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCiAgICAgdm9pZCBkcmF3TmF0aXZl
VGV4dChDVEZvbnRSZWYsIENHRmxvYXQgZm9udFNpemUsIENUTGluZVJlZiwgQ0dSZWN0IGxpbmVS
ZWN0KTsKIAotICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBD
R0dTdGF0ZVJlZiwgQ0dSZWN0KTsKLSAgICB2b2lkIHJlY29yZEVuZExheWVyKENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmKTsKLSAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29u
c3QgQ0dHbHlwaFtdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpOwot
ICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVm
LCBDR1JlY3QsIENHSW1hZ2VSZWYpOworICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR0dTdGF0
ZVJlZik7CisgICAgdm9pZCByZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJlZik7CisgICAgdm9pZCBy
ZWNvcmREcmF3R2x5cGhzKENHR1N0YXRlUmVmLCBjb25zdCBDR0dseXBoW10sIGNvbnN0IENHUG9p
bnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7CisgICAgdm9pZCByZWNvcmREcmF3SW1hZ2Uo
Q0dHU3RhdGVSZWYsIENHUmVjdCwgQ0dJbWFnZVJlZik7CiAjZW5kaWYKIAotICAgIERlY29uc3Ry
dWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2Rl
Y29uc3RydWN0RHJhd0dseXBoczsgfQotCiBwcml2YXRlOgotI2lmIFVTRShDT1JFX1RFWFQpICYm
ICFQTEFURk9STShXSU4pCi0gICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlSW50
ZXJuYWxDb250ZXh0KCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgZHJhd0J5U3BsaXR0aW5nSW50b09U
U1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd09U
U1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNo
b3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd05vbk9UU1ZHUnVuKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwg
Rm9udFNtb290aGluZ01vZGUpOwotCi0gICAgdm9pZCBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9pZCBwcmVwYXJlSW50ZXJu
YWxDb250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBjb25j
bHVkZUludGVybmFsQ29udGV4dCgpOworICAgIHZvaWQgc2V0SW50ZXJuYWxGb250KGNvbnN0IEZv
bnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgcHJlcGFy
ZUludGVybmFsQ29udGV4dCgpOworICAgIHZvaWQgcmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSk7CiAKLSAgICB2b2lkIHVw
ZGF0ZUZpbGxDb2xvcihjb25zdCBDb2xvciYsIEdyYWRpZW50KiA9IG51bGxwdHIsIFBhdHRlcm4q
ID0gbnVsbHB0cik7Ci0gICAgdm9pZCB1cGRhdGVTdHJva2VDb2xvcihjb25zdCBDb2xvciYsIEdy
YWRpZW50KiA9IG51bGxwdHIsIFBhdHRlcm4qID0gbnVsbHB0cik7Ci0gICAgdm9pZCB1cGRhdGVD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgZW51bSBjbGFzcyBTaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyB7Ci0gICAgICAgIFVuc3BlY2lmaWVkLAotICAgICAgICBZZXMsCi0gICAgICAg
IE5vCi0gICAgfTsKLSAgICB2b2lkIHVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRv
d09mZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0KLSNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0o
V0lOKQotICAgIHZvaWQgdXBkYXRlU2hhZG93KENHU3R5bGVSZWYpOwotI2VuZGlmCisgICAgdm9p
ZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdPVFNW
R1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQ
b2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd0J5U3BsaXR0aW5nSW50b09U
U1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAKLSAgICBHcmFwaGljc0Nv
bnRleHQmIG1fb3duZXI7CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2Rlc3RpbmF0aW9uQ29udGV4
dDsKICAgICBEZWNvbnN0cnVjdERyYXdHbHlwaHMgbV9kZWNvbnN0cnVjdERyYXdHbHlwaHM7CiAg
ICAgRGVyaXZlRm9udEZyb21Db250ZXh0IG1fZGVyaXZlRm9udEZyb21Db250ZXh0OwogCi0jaWYg
VVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3ND
b250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKLSNlbmRpZgotCiAgICAgY29uc3QgRm9udCogbV9v
cmlnaW5hbEZvbnQgeyBudWxscHRyIH07CiAgICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhp
bmdNb2RlIHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfTsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7CiAKLSAgICBzdHJ1Y3QgU3RhdGUgewotICAg
ICAgICBzdHJ1Y3QgU3R5bGUgewotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAg
ICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OwotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgICAgICAgICBSZWZQdHI8UGF0dGVybj4gcGF0
dGVybjsKLSAgICAgICAgfTsKLSAgICAgICAgU3R5bGUgZmlsbFN0eWxlOwotICAgICAgICBTdHls
ZSBzdHJva2VTdHlsZTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotCi0gICAgICAg
IHN0cnVjdCBTaGFkb3dTdGF0ZSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0OwotICAg
ICAgICAgICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAg
ICAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsKLSAgICAgICAgfTsKLSAg
ICAgICAgU2hhZG93U3RhdGUgc2hhZG93OwotICAgIH07Ci0gICAgU3RhdGUgbV9vcmlnaW5hbFN0
YXRlOwotICAgIFN0YXRlIG1fY3VycmVudFN0YXRlOworI2lmIFVTRShDT1JFX1RFWFQpICYmICFQ
TEFURk9STShXSU4pCisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gbV9pbnRlcm5hbENv
bnRleHQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA4NTE4MGFk
MTA5ZmQ4MThlOWJiMTU4OGNlOTYyYWI0NjMwODE2YTA5Li4zNjExYjEyY2E5YWIyOWViOTIxZjIz
MjVlMWY5NmQyOTUyNTNjN2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4KIAogc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlM
aXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXh0UnVuKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikgY29uc3QKIHsKLSAgICBBU1NFUlQoIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsICFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQo
KSk7CiAgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52YWx1ZV9vcihydW4ubGVuZ3RoKCkp
OwogICAgIAogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFu
ZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8v
d2Via2l0Lm9yZy9iLzEwMDA1MApAQCAtMjE0LDcgKzIxNCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxE
aXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0
Rm9yVGV4CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5p
cXVlPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIERpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGwgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxheUxpc3QsIGNvbnRleHQuc3Rh
dGUoKSwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pOworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGwgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFu
c2Zvcm0oKSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKTsK
ICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQgPSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6
c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpKSk7CiAgICAgZHJhd0dseXBoQnVmZmVy
KHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBzdGFydFBvaW50LCBjdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudEltYWdlLmNwcAppbmRleCA2NDU4NGU1Y2ZlMDExODgyZWZhYjJlMjNjM2E1OTRlMTc4
MmYyODkwLi4yZjgyN2Y2MjVmNjRiNTljYTFhNjY0OTYwNzMwZjAzYzIzYmMzN2FiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcApA
QCAtNDMsNyArNDMsNyBAQCBHcmFkaWVudEltYWdlOjp+R3JhZGllbnRJbWFnZSgpID0gZGVmYXVs
dDsKIEltYWdlRHJhd1Jlc3VsdCBHcmFkaWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsKLSAgICBkZXN0
Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigp
LCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVNb2Rl
KHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwog
ICAgIGRlc3RDb250ZXh0LmNsaXAoZGVzdFJlY3QpOwogICAgIGRlc3RDb250ZXh0LnRyYW5zbGF0
ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1Jl
Y3Quc2l6ZSgpKQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIEdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZAogICAg
IG1fZ3JhZGllbnQtPmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoYWRqdXN0ZWRTaXpl
LCBhZGp1c3RlZFNyY1JlY3QsIHNwYWNpbmcpOwogCiAgICAgLy8gRmFjdG9yIGluIHRoZSBkZXN0
aW5hdGlvbiBjb250ZXh0J3Mgc2NhbGUgdG8gZ2VuZXJhdGUgYXQgdGhlIGJlc3QgcmVzb2x1dGlv
bgotICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENU
TShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIEFm
ZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENUTSgpOwogICAg
IGRvdWJsZSB4U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RNLnhTY2FsZSgpKTsKICAgICBkb3Vi
bGUgeVNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS55U2NhbGUoKSk7CiAgICAgQWZmaW5lVHJh
bnNmb3JtIGFkanVzdGVkUGF0dGVybkNUTSA9IHBhdHRlcm5UcmFuc2Zvcm07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRl
eCAwYmIxMzU5N2NlYTczNjlkYmJjNmUxNzI3ZjI2YzkyYjhmYjc1MTc2Li44OTg3OGZhYmM0NWMx
NDU5YzY1ODJkOTExN2ZhYzg5Y2VhMWEyOWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw2IEBA
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIu
aCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkZpbHRlckltYWdlLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgpAQCAtMzYs
NDczICszNSwzMDIgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKLSNpbmNsdWRlICJOdWxsR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJTeXN0
ZW1JbWFnZS5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0Qm94SXRlcmF0
b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgVGV4dEJveEl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBUZXh0Qm94SXRl
cmF0b3IoKQotICAgICAgICA6IG1fdGV4dFJ1bigwKQotICAgICAgICAsIG1fb2Zmc2V0KDApCi0g
ICAgewotICAgIH0KLQotICAgIFRleHRCb3hJdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVu
LCB1bnNpZ25lZCBvZmZzZXQpCi0gICAgICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCi0gICAgICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXQo
KSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIHZvaWQgaW5jcmVtZW50KCkgeyBtX29m
ZnNldCsrOyB9Ci0gICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHRSdW4gfHwg
bV9vZmZzZXQgPj0gbV90ZXh0UnVuLT5sZW5ndGgoKTsgfQotICAgIFVDaGFyIGN1cnJlbnQoKSBj
b25zdCB7IHJldHVybiAoKm1fdGV4dFJ1bilbbV9vZmZzZXRdOyB9Ci0gICAgVUNoYXJEaXJlY3Rp
b24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYXRFbmQoKSA/IFVfT1RIRVJfTkVVVFJBTCA6
IHVfY2hhckRpcmVjdGlvbihjdXJyZW50KCkpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X29mZnNldCA9PSBvdGhlci5tX29mZnNldCAmJiBtX3RleHRSdW4gPT0gb3RoZXIubV90ZXh0UnVu
OwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90
aGVyKSBjb25zdCB7IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0KLQotcHJpdmF0ZToKLSAg
ICBjb25zdCBUZXh0UnVuKiBtX3RleHRSdW47Ci0gICAgdW5zaWduZWQgbV9vZmZzZXQ7Ci19Owot
Ci0jZGVmaW5lIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKGZsYWcsIHByb3BlcnR5KSBcCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OmZsYWcp
ICYmIChtX3N0YXRlLnByb3BlcnR5ICE9IHN0YXRlLnByb3BlcnR5KSkgXAotICAgICAgICBjaGFu
Z2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OmZsYWcpOwotCi1HcmFwaGljc0NvbnRl
eHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQotICAgIDogc2hvdWxkQW50aWFsaWFzKHRy
dWUpCi0gICAgLCBzaG91bGRTbW9vdGhGb250cyh0cnVlKQotICAgICwgc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzKHRydWUpCi0gICAgLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkK
LSAgICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQorR3JhcGhpY3NDb250ZXh0OjpHcmFwaGlj
c0NvbnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZUZsYWdzJiBjaGFuZ2VGbGFncywgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBpbml0aWFsQ1RNKQorICAgIDogbV9zdGF0ZShpbml0aWFsQ2xpcCwgY2hhbmdlRmxhZ3MsIGlu
aXRpYWxDVE0pCiB7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjp+R3JhcGhpY3NDb250ZXh0
U3RhdGUoKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0Nv
bnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJikg
PSBkZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpv
cGVyYXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGlj
c0NvbnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShHcmFwaGljc0Nv
bnRleHRTdGF0ZSYmKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1l
cmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorR3JhcGhpY3NDb250ZXh0Ojp+R3Jh
cGhpY3NDb250ZXh0KCkKIHsKLSAgICBhdXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VH
cmFkaWVudENoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2Ug
fTsKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoc3Ryb2tlRmxhZ3MpKSB7Ci0gICAgICAgIHN0
cm9rZUNvbG9yID0gc3RhdGUuc3Ryb2tlQ29sb3I7Ci0gICAgICAgIHN0cm9rZUdyYWRpZW50ID0g
c3RhdGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgICAgIHN0cm9rZVBhdHRlcm4gPSBzdGF0ZS5zdHJv
a2VQYXR0ZXJuOwotICAgIH0KLQotICAgIGF1dG8gZmlsbEZsYWdzID0geyBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRp
ZW50Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UgfTsKLSAg
ICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoZmlsbEZsYWdzKSkgewotICAgICAgICBmaWxsQ29sb3Ig
PSBzdGF0ZS5maWxsQ29sb3I7Ci0gICAgICAgIGZpbGxHcmFkaWVudCA9IHN0YXRlLmZpbGxHcmFk
aWVudDsKLSAgICAgICAgZmlsbFBhdHRlcm4gPSBzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9Ci0K
LSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5n
ZSkpIHsKLSAgICAgICAgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAg
ICBzaGFkb3dCbHVyID0gc3RhdGUuc2hhZG93Qmx1cjsKLSAgICAgICAgc2hhZG93Q29sb3IgPSBz
dGF0ZS5zaGFkb3dDb2xvcjsKLSAgICAgICAgc2hhZG93UmFkaXVzTW9kZSA9IHN0YXRlLnNoYWRv
d1JhZGl1c01vZGU7Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBzdHJva2VUaGlja25l
c3MgPSBzdGF0ZS5zdHJva2VUaGlja25lc3M7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIHRleHRE
cmF3aW5nTW9kZSA9IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBz
dHJva2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGZpbGxSdWxl
ID0gc3RhdGUuZmlsbFJ1bGU7CisgICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgYWxwaGEg
PSBzdGF0ZS5hbHBoYTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKK3sKKyAgICBtX3N0
YWNrLmFwcGVuZChtX3N0YXRlKTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpIHsKLSAgICAgICAgY29tcG9zaXRlT3BlcmF0
b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgYmxlbmRNb2RlID0gc3RhdGUu
YmxlbmRNb2RlOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQoreworICAgIGlmICht
X3N0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gc3RhdGUuc2hv
dWxkQW50aWFsaWFzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIHNob3VsZFNtb290aEZvbnRz
ID0gc3RhdGUuc2hvdWxkU21vb3RoRm9udHM7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2sudGFrZUxh
c3QoKTsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzID0gc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc3RhdGUu
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgZHJhd0x1
bWluYW5jZU1hc2sgPSBzdGF0ZS5kcmF3THVtaW5hbmNlTWFzazsKKyAgICAvLyBNYWtlIHN1cmUg
d2UgZGVhbGxvY2F0ZSB0aGUgc3RhdGUgc3RhY2sgYnVmZmVyIHdoZW4gaXQgZ29lcyBlbXB0eS4K
KyAgICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkgYWdhaW4sIGJ1
dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHkuCisgICAgaWYgKG1fc3RhY2suaXNFbXB0
eSgpKQorICAgICAgICBtX3N0YWNrLmNsZWFyKCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2Up
KQotICAgICAgICBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eTsKK0Zsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yKCkg
Y29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAg
cmV0dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7
Cit9CisgICAgCitGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdp
bmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBj
b25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICBh
dXRvIHRyYW5zZm9ybWVkRGVzdFJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7Cisg
ICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7Cit9
CiAKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChmbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAg
ICB1c2VEYXJrQXBwZWFyYW5jZSA9IHN0YXRlLnVzZURhcmtBcHBlYXJhbmNlOwotI2VuZGlmCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKK3sKKyAg
ICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9t
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKSBjb25zdAordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFnczsKKyAgICBBU1NFUlQobV90cmFu
c3BhcmVuY3lMYXllckNvdW50ID4gMCk7CisgICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7
Cit9CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5n
ZSwgc3Ryb2tlR3JhZGllbnQpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9r
ZVBhdHRlcm5DaGFuZ2UsIHN0cm9rZVBhdHRlcm4pOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BS
T1BFUlRZKEZpbGxHcmFkaWVudENoYW5nZSwgZmlsbEdyYWRpZW50KTsKLSAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShGaWxsUGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fc3Rh
dGUuY2xpcChyZWN0KTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpCi0gICAgICAgICYmIChtX3N0YXRlLnNoYWRv
d09mZnNldCAhPSBzdGF0ZS5zaGFkb3dPZmZzZXQKLSAgICAgICAgICAgIHx8IG1fc3RhdGUuc2hh
ZG93Qmx1ciAhPSBzdGF0ZS5zaGFkb3dCbHVyCi0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRv
d0NvbG9yICE9IHN0YXRlLnNoYWRvd0NvbG9yKSkKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlKQoreworICAgIG1fc3RhdGUuY2xp
cChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Cit9CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTdHJva2VUaGlja25lc3NDaGFuZ2UsIHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoVGV4dERyYXdpbmdNb2RlQ2hhbmdlLCB0ZXh0RHJhd2lu
Z01vZGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZUNvbG9yQ2hhbmdl
LCBzdHJva2VDb2xvcik7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbENvbG9y
Q2hhbmdlLCBmaWxsQ29sb3IpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9r
ZVN0eWxlQ2hhbmdlLCBzdHJva2VTdHlsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVS
VFkoRmlsbFJ1bGVDaGFuZ2UsIGZpbGxSdWxlKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9Q
RVJUWShBbHBoYUNoYW5nZSwgYWxwaGEpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIFBhdGggcGF0aDsK
KyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOworICAgIGNsaXBQYXRoKHBhdGgpOworfQog
Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRN
b2RlQ2hhbmdlIH0pCi0gICAgICAgICYmIChtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0
YXRlLmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUuYmxlbmRNb2RlICE9IHN0YXRlLmJsZW5k
TW9kZSkpIHsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCit7CisgICAg
aWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
U2hvdWxkQW50aWFsaWFzQ2hhbmdlLCBzaG91bGRBbnRpYWxpYXMpOwotICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNob3VsZFNtb290aEZvbnRzQ2hhbmdlLCBzaG91bGRTbW9vdGhGb250
cyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotICAgIENIRUNLX0ZP
Ul9DSEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dz
SWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1
bWluYW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KTsKLQotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoVXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UsIHVzZURh
cmtBcHBlYXJhbmNlKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGNoYW5nZUZsYWdzOworICAgIFBh
dGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOworICAgIGNsaXBPdXQocGF0
aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KQogewotICAgIG1fc3RhdGUubWVyZ2VDaGFuZ2VzKHN0YXRlLCBmbGFncyk7Ci0KLSAg
ICBhdXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JD
aGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29u
dGFpbnNBbnkoc3Ryb2tlRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShzdHJv
a2VGbGFncyk7Ci0KLSAgICBhdXRvIGZpbGxGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5n
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZs
YWdzLmNvbnRhaW5zQW55KGZpbGxGbGFncykpCi0gICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3Zl
KGZpbGxGbGFncyk7Ci0KLSAgICBhdXRvIGNvbXBvc2l0ZU9wZXJhdG9yRmxhZ3MgPSB7IEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoY29t
cG9zaXRlT3BlcmF0b3JGbGFncykpCi0gICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3ZlKGNvbXBv
c2l0ZU9wZXJhdG9yRmxhZ3MpOwotCi0gICAgbV9jaGFuZ2VGbGFncy5hZGQoZmxhZ3MpOworICAg
IGltYWdlQnVmZmVyLmNsaXBUb01hc2soKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VHcmFkaWVudCgqbV9zdGF0ZS5zdHJva2VHcmFkaWVudCwgbV9zdGF0ZS5zdHJva2VH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29u
dGV4dC5zZXRTdHJva2VQYXR0ZXJuKCptX3N0YXRlLnN0cm9rZVBhdHRlcm4pOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVu
dENoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KCptX3N0YXRlLmZpbGxH
cmFkaWVudCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5D
aGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxQYXR0ZXJuKCptX3N0YXRlLmZpbGxQYXR0
ZXJuKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7
Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dP
ZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5z
aGFkb3dSYWRpdXNNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBjb250ZXh0
LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdN
b2RlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUobV9zdGF0ZS50
ZXh0RHJhd2luZ01vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihtX3N0YXRlLnN0cm9rZUNvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKG1fc3RhdGUuc3Ryb2tlU3R5bGUp
OwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsUnVsZShtX3N0YXRlLmZp
bGxSdWxlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5h
bHBoYSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpCbGVuZE1vZGVDaGFuZ2UgfSkpCi0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3RhdGUuYmxlbmRNb2RlKTsKLQotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRB
bnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhtX3N0
YXRlLnNob3VsZEFudGlhbGlhcyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBj
b250ZXh0LnNldFNob3VsZFNtb290aEZvbnRzKG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwot
Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RHJhd0x1
bWluYW5jZU1hc2sobV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayk7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotCi0jaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICBjb250ZXh0
LnNldFVzZURhcmtBcHBlYXJhbmNlKG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlm
CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJh
dGlvbigpOworICAgIHNldENvbXBvc2l0ZU1vZGUoeyBvcCwgYmxlbmRNb2RlIH0pOworICAgIGZp
bGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNP
cGVyYXRvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4
dFN0cmVhbSYgdHMpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJjaGFuZ2UtZmxhZ3MiLCBtX2NoYW5nZUZsYWdzLnRvUmF3KCkpOwotCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50
Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0
YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJzdHJva2UtcGF0dGVybiIsIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5n
ZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxs
LWdyYWRpZW50IiwgbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdl
KSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRlLmZpbGxQ
YXR0ZXJuLmdldCgpKTsKKyAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKK30KIAotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dD
aGFuZ2UpKSB7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRl
LnNoYWRvd0JsdXIpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBt
X3N0YXRlLnNoYWRvd09mZnNldCk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWNv
bG9yIiwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hh
ZG93cy11c2UtbGVnYWN5LXJhZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFk
b3dSYWRpdXNNb2RlOjpMZWdhY3kpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAg
ICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJs
ZW5kTW9kZSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgICAgIAorICAgIENvbXBvc2l0
ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICBz
ZXRDb21wb3NpdGVNb2RlKHsgcHJldmlvdXNPcGVyYXRvciwgYmxlbmRNb2RlIH0pOworICAgIGZp
bGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBy
ZXZpb3VzT3BlcmF0b3IpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgic3Ryb2tlLXRoaWNrbmVzcyIsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsK
LQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpU
ZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRleHQtZHJh
d2luZy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUudG9SYXcoKSk7Ci0KLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JD
aGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1jb2xvciIsIG1fc3RhdGUu
c3Ryb2tlQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
ZmlsbC1jb2xvciIsIG1fc3RhdGUuZmlsbENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXN0eWxlIiwgbV9zdGF0ZS5zdHJva2VTdHlsZSk7
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSZWN0KHJl
Y3QpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXJ1bGUi
LCBtX3N0YXRlLmZpbGxSdWxlKTsKKyAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlz
WmVybygpKQorICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7Cisg
ICAgZWxzZQorICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAK
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxw
aGFDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIiwgbV9zdGF0ZS5hbHBo
YSk7CisgICAgV2luZFJ1bGUgb2xkRmlsbFJ1bGUgPSBmaWxsUnVsZSgpOworICAgIENvbG9yIG9s
ZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOworICAgIAorICAgIHNldEZpbGxSdWxlKFdpbmRSdWxl
OjpFdmVuT2RkKTsKKyAgICBzZXRGaWxsQ29sb3IoY29sb3IpOwogCi0gICAgaWYgKG1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNo
YW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdG9yIiwgbV9z
dGF0ZS5jb21wb3NpdGVPcGVyYXRvcik7CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgCisgICAg
c2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOworICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3Ip
OworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9k
ZSIsIG1fc3RhdGUuYmxlbmRNb2RlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBz
ZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAg
IHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKK30KIAotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRB
bnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1hbnRpYWxp
YXMiLCBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBw
YXRoOworICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKKyAgICBzdHJva2VQYXRoKHBhdGgp
OworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJz
aG91bGQtc21vb3RoLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Cit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCit7Cisg
ICAgYXV0byBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKKyAgICBhdXRvIG9sZFN0cm9rZUNv
bG9yID0gc3Ryb2tlQ29sb3IoKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQot
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIs
IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBzZXRGaWxsQ29sb3Io
c2hhZG93Q29sb3IpOworICAgIHNldFN0cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKKyAgICBkcmF3
RWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgMSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKSk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoInNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMiLCBtX3N0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAg
ICBzZXRTdHJva2VDb2xvcihlbGxpcHNlQ29sb3IpOworICAgIGRyYXdFbGxpcHNlKHJlY3QpOwog
Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRy
YXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJkcmF3LWx1
bWluYW5jZS1tYXNrIiwgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayk7CisgICAgc2V0RmlsbENv
bG9yKG9sZEZpbGxDb2xvcik7CisgICAgc2V0U3Ryb2tlQ29sb3Iob2xkU3Ryb2tlQ29sb3IpOwor
fQogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2Up
KQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInVzZS1kYXJrLWFwcGVhcmFuY2UiLCBtX3N0YXRl
LnVzZURhcmtBcHBlYXJhbmNlKTsKLSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgc3Ryb2tl
UGF0aChwYXRoKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCiB7Ci0gICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7Ci0gICAgcmV0dXJu
IHRzOworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBp
bWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSks
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3ND
b250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhY2su
aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7CisgICAg
ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2Uu
bG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNhdmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBtX3N0YWNrLmFwcGVuZChtX3N0YXRlKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMu
aW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRp
b24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3Jl
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBpZiAo
bV9zdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RhdGUgPSBtX3N0YWNrLmxhc3QoKTsK
LSAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZWFsbG9j
YXRlIHRoZSBzdGF0ZSBzdGFjayBidWZmZXIgd2hlbiBpdCBnb2VzIGVtcHR5LgotICAgIC8vIENh
bnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2FpbiwgYnV0IHRoYXQgZ29l
cyBpbnRvIGlubGluZSBjYXBhY2l0eS4KLSAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fc3RhY2suY2xlYXIoKTsKKyAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+
bG9naWNhbFNpemUoKTsKKyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFn
ZSksIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7
IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VC
dWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5tZXJn
ZUNoYW5nZXMoc3RhdGUsIGZsYWdzKTsKLSAgICBkaWRVcGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3Mp
OworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGltYWdlTG9naWNh
bFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoV1RGTW92ZShpbWFnZSksIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2lj
YWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
ZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzYXZlKCk7Ci0KLSAg
ICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7Ci0gICAgc2V0RmlsbENvbG9yKHNoYWRvd0Nv
bG9yKTsKLQotICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAx
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIHNldFN0cm9rZUNvbG9yKGVs
bGlwc2VDb2xvcik7Ci0gICAgc2V0RmlsbENvbG9yKGVsbGlwc2VDb2xvcik7Ci0KLSAgICBkcmF3
RWxsaXBzZShyZWN0KTsgIAotCi0gICAgcmVzdG9yZSgpOworICAgIGlmICghaW1hZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xh
dGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxp
dHkoKSk7CisgICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0
aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVy
UmVzdWx0cyYgcmVzdWx0cykKIHsKLSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7Ci0g
ICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQ
YXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVy
LmFwcGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMpOworICAgIGlmICgh
cmVzdWx0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHJl
c3VsdC0+aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBzY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8g
ZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7CisgICAgZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgcmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKKyAgICBzY2FsZShmaWx0
ZXIuZmlsdGVyU2NhbGUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3co
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwg
U2hhZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRp
b24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsK
LSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0Js
dXIgPSBibHVyOwotICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRl
LnNoYWRvd1JhZGl1c01vZGUgPSByYWRpdXNNb2RlOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOworICAgIHJldHVybiBkcmF3
SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQorSW1hZ2VEcmF3UmVzdWx0
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQogewotICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsKLSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3Io
KTsKLSAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZh
dWx0OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dDaGFuZ2UpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uu
c2l6ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlvbigpKSk7CisgICAgcmV0dXJuIGRy
YXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3QsIGltYWdlUGFpbnRpbmdPcHRpb25z
KTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNl
dCwgZmxvYXQmIGJsdXIsIENvbG9yJiBjb2xvcikgY29uc3QKK0ltYWdlRHJhd1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICBvZmZzZXQgPSBtX3N0YXRlLnNoYWRvd09mZnNldDsKLSAg
ICBibHVyID0gbV9zdGF0ZS5zaGFkb3dCbHVyOwotICAgIGNvbG9yID0gbV9zdGF0ZS5zaGFkb3dD
b2xvcjsKLQotICAgIHJldHVybiBoYXNTaGFkb3coKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlv
bnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMs
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK0ltYWdlRHJhd1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0gY29sb3I7Ci0gICAg
bV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4g
PSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5l
ciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBv
bGF0aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0
aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4p
CitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKKyAgICBJbWFnZTo6VGlsZVJ1
bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0
YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4g
PSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKTsKKyAgICBpZiAoaFJ1bGUgPT0gSW1h
Z2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgeworICAgICAg
ICAvLyBKdXN0IGRvIGEgc2NhbGUuCisgICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOworICAgIH0KKworICAgIEludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywg
b3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1Rp
bGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2
UnVsZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3Ig
PSB7IH07Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUu
ZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgc3lzdGVt
SW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3RhdGUu
c3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsKKyAgICBpbWFnZS5kcmF3
UGF0dGVybigqdGhpcywgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxs
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsg
fTsKLSAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwotICAgIG1f
c3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBmaWxsR3JhZGllbnRTcGFjZVRyYW5z
Zm9ybTsKLSAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKTsK
LSAgICAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRlcm4/CisgICAgcGxheWVyLnBsYXllclByaXZh
dGUoKS0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKIH0K
KyNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgKyttX3RyYW5zcGFy
ZW5jeUxheWVyQ291bnQ7CisgICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApOwotICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50
OworICAgIGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2lu
dCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiBGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gdG8pCkBAIC01MTEsMTEgKzMzOSw2IEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRy
YXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAg
cmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLXsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0ds
eXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9u
dFNtb290aGluZ01vZGUpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lz
TWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
QXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20s
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvKQogewogICAgIGZvbnQuZHJhd0VtcGhhc2lzTWFy
a3MoKnRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKQEAgLTU0OSw3ICszNzIsNDUg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4
dCgpOwogICAgIH0KIAotICAgIGJpZGlSdW5zLmNsZWFyKCk7CisgICAgYmlkaVJ1bnMuY2xlYXIo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tl
U3R5bGUgc3R5bGUpCit7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJl
Y3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91
YmxlVW5kZXJsaW5lcywgc3R5bGUpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpj
b21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wg
cHJpbnRpbmcpCit7CisgICAgQ29sb3IgZHVtbXlDb2xvcjsKKyAgICByZXR1cm4gY29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlD
b2xvcik7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRz
QW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHBy
aW50aW5nLCBDb2xvciYgY29sb3IpCit7CisgICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0Lmxv
Y2F0aW9uKCk7CisgICAgZmxvYXQgdGhpY2tuZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwg
MC41Zik7CisgICAgaWYgKHByaW50aW5nKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdp
biwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CisKKyAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGlu
IHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCisgICAgZmxv
YXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFu
c2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7CisgICAgaWYgKHNjYWxlIDwgMS4wKSB7CisgICAg
ICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25l
LXBpeGVsIGxpbmUgaGlnaCwKKyAgICAgICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3Zl
cndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8g
ZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0
ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmlt
dW1VbmRlcmxpbmVBbHBoYSA9IDAuNGY7CisgICAgICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBt
aW5pbXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1VbmRlcmxpbmVBbHBoYTsKKyAg
ICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShzaGFkZSk7Cisg
ICAgfQorCisgICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRyYW5zZm9ybS5tYXBQb2ludChy
ZWN0LmxvY2F0aW9uKCkpOworICAgIC8vIFZpc3VhbCBvdmVyZmxvdyBtaWdodCBvY2N1ciBoZXJl
IGR1ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlv
bnMgYWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVybGluZSBkZWNvcmF0aW9uLgor
ICAgIEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2ludChyb3VuZGYoZGV2aWNlUG9p
bnQueCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7CisgICAgaWYgKGF1dG8gaW52ZXJzZSA9
IHRyYW5zZm9ybS5pbnZlcnNlKCkpCisgICAgICAgIG9yaWdpbiA9IGludmVyc2UudmFsdWUoKS5t
YXBQb2ludChkZXZpY2VPcmlnaW4pOworICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9h
dFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKIH0KIAogc3RhdGljIEludFNpemUgc2Nh
bGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXpl
JiBzY2FsZSkKQEAgLTYzOSwxODcgKzUwMCw5IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhp
Y3NDb250ZXh0OjpjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByCiAg
ICAgcmV0dXJuIGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNv
bG9yU3BhY2UsIHJlbmRlcmluZ01vZGUoKSwgcmVuZGVyaW5nTWV0aG9kKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIHN5c3RlbUltYWdlLmRy
YXcoKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
Ci17Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBp
bWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFn
ZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBG
bG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoaW1hZ2VQYWludGluZ09w
dGlvbnMub3JpZW50YXRpb24oKSkpOwotICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3Rp
bmF0aW9uLCBzcmNSZWN0LCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jl
c3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50
ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1
YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24s
IHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1
bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTY2FsZUZhY3RvciwKLSAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdl
OjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17
Ci0gICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6
U3RyZXRjaFRpbGUpIHsKLSAgICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgotICAgICAgICByZXR1
cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICB9
Ci0KLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxp
dHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0g
ICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGls
ZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihp
bWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRS
ZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2Us
IGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQ
YWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVh
bGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsK
LSAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8
SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGlmICgh
aW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFn
ZS0+bG9naWNhbFNpemUoKTsKLSAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShp
bWFnZSksIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVj
dCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdl
QnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9n
aWNhbFNpemUoKTsKLSAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSks
IGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0lt
YWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAg
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhp
c1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIEltYWdl
QnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24s
IHNvdXJjZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVy
ZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykK
LXsKLSAgICBhdXRvIHJlc3VsdCA9IGZpbHRlci5hcHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1h
Z2VSZWN0LCByZXN1bHRzKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSByZXN1bHQtPmltYWdlQnVmZmVyKCk7Ci0gICAgaWYg
KCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2NhbGUoeyAxIC8gZmlsdGVy
LmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgp
IH0pOwotICAgIGRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJ
bWFnZVJlY3QoKSk7Ci0gICAgc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwot
ICAgIGNsaXBQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0
LmlzUm91bmRlZCgpKSB7Ci0gICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3Qo
cmVjdCk7Ci0gICAgY2xpcE91dChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywg
ZGVzdGluYXRpb25SZWN0KTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3Vu
ZHMoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRS
ZWN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBncmFkaWVudC5maWxsKCp0aGlz
LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJh
dG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9w
LCBibGVuZE1vZGUpOwotICAgIGZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICBzZXRDb21wb3Np
dGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChyZWN0LmlzUm91bmRl
ZCgpKSB7Ci0gICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24o
KSwgYmxlbmRNb2RlKTsKLSAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7
Ci0gICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRl
T3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFBh
dGggcGF0aDsKLSAgICBwYXRoLmFkZFJlY3QocmVjdCk7Ci0KLSAgICBpZiAoIXJvdW5kZWRIb2xl
UmVjdC5yYWRpaSgpLmlzWmVybygpKQotICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5k
ZWRIb2xlUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVS
ZWN0LnJlY3QoKSk7CiAKLSAgICBXaW5kUnVsZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7Ci0g
ICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1
bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBm
aWxsUGF0aChwYXRoKTsKLSAgICAKLSAgICBzZXRGaWxsUnVsZShvbGRGaWxsUnVsZSk7Ci0gICAg
c2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7Ci19CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9u
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3Ig
PSBjb21wb3NpdGVPcGVyYXRpb247Ci0gICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVuZE1vZGU7
Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RM
aW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9h
dCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBAIC04NTAsNzcgKzUzMyw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxv
YXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyCiAgICAgfQogfQogCi1GbG9hdFNpemUgR3JhcGhp
Y3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRy
YW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNl
U2NhbGUpOwotICAgIHJldHVybiBGbG9hdFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zv
cm0ueVNjYWxlKCkpOwotfQotICAgIAotRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVG
YWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAg
YXV0byB0cmFuc2Zvcm1lZERlc3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOwot
ICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsK
LSAgICBmaWxsUGF0aChwYXRoKTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAg
ZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNl
QXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAg
cGF0aC5hZGRFbGxpcHNlKGVsbGlwc2UpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxl
KQotewotICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgp
LCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGlu
ZXMsIHN0eWxlKTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVy
bGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQot
ewotICAgIENvbG9yIGR1bW15Q29sb3I7Ci0gICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5k
QW50aWFsaWFzaW5nTW9kZUZvclRleHQocmVjdCwgcHJpbnRpbmcsIGR1bW15Q29sb3IpOwotfQot
Ci1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlh
c2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgQ29s
b3ImIGNvbG9yKQotewotICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gcmVjdC5sb2NhdGlvbigpOwot
ICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIDAuNWYpOwotICAg
IGlmIChwcmludGluZykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6
ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2Nh
bGUpOwotICAgIC8vIEp1c3QgY29tcHV0ZSBzY2FsZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcg
eCBhbmQgeSBzY2FsZXMgYXJlIGVxdWFsLgotICAgIGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLmIo
KSA/IHN0ZDo6aHlwb3QodHJhbnNmb3JtLmEoKSwgdHJhbnNmb3JtLmIoKSkgOiB0cmFuc2Zvcm0u
YSgpOwotICAgIGlmIChzY2FsZSA8IDEuMCkgewotICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlz
IGRyYXdzIGEgbGluZSB0aGF0IGlzIGF0IGxlYXN0IG9uZS1waXhlbCBsaW5lIGhpZ2gsCi0gICAg
ICAgIC8vIHdoaWNoIHRlbmRzIHRvIHZpc3VhbGx5IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNj
YWxlcy4gVG8gY291bnRlciB0aGlzCi0gICAgICAgIC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBw
bGllZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9yIHdoZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMu
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPSAwLjRm
OwotICAgICAgICBmbG9hdCBzaGFkZSA9IHNjYWxlID4gbWluaW11bVVuZGVybGluZUFscGhhID8g
c2NhbGUgOiBtaW5pbXVtVW5kZXJsaW5lQWxwaGE7Ci0gICAgICAgIGNvbG9yID0gY29sb3IuY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hhZGUpOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQg
ZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFwUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKLSAgICAv
LyBWaXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2NjdXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRm
L2NlaWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93
IHZhbHVlIGZvciB1bmRlcmxpbmUgZGVjb3JhdGlvbi4KLSAgICBGbG9hdFBvaW50IGRldmljZU9y
aWdpbiA9IEZsb2F0UG9pbnQocm91bmRmKGRldmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBv
aW50LnkoKSkpOwotICAgIGlmIChhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQot
ICAgICAgICBvcmlnaW4gPSBpbnZlcnNlLnZhbHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsK
LSAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhp
Y2tuZXNzKSk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldp
ZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxvYXQg
dGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC05NzIsMTUgKzU4NCw0IEBAIFZlY3Rv
cjxGbG9hdFBvaW50PiBHcmFwaGljc0NvbnRleHQ6OmNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJz
KGJvb2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0dXJuIHsgcG9pbnQxLCBwb2ludDIgfTsKIH0KIAot
I2lmIEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsK
LSAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgq
dGhpcywgZGVzdGluYXRpb24pOwotfQotI2VuZGlmCi0KLXZvaWQgTnVsbEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikK
LXsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAppbmRleCBmYjk1ZGQyNWIyNzFkZWI5ZmE4NWZmMmQ5ZjFmNzQ3MTZhMDY2
YmFlLi4xYzczNWZkZGY5ZGMyMDc2MmIyODk4YjU2M2NmMjQ0MmU3ZGQwM2FlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBN
b2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMwLDQ5ICszMCwxOCBAQAogI2luY2x1
ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRl
ICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAotI2lmIFVTRShDRykKLXR5cGVkZWYgc3RydWN0IENH
Q29udGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbGlmIFVTRShDQUlSTykKLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOwotfQotdHlwZWRlZiBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNl
bHNlCi10eXBlZGVmIHZvaWQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZW5kaWYKLQotI2lm
IFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJESUJQaXhlbERhdGEuaCIKLXR5cGVkZWYgc3RydWN0
IEhEQ19fKiBIREM7Ci0jaWYgIVVTRShDRykKLS8vIFVJbnQ4IGlzIGRlZmluZWQgaW4gQ29yZUZv
dW5kYXRpb24vQ0ZCYXNlLmgKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBVSW50ODsKLSNlbmRpZgot
I2VuZGlmCi0KLS8vIFgxMSBoZWFkZXJzIGRlZmluZSBhIGJ1bmNoIG9mIG1hY3JvcyB3aXRoIGNv
bW1vbiB0ZXJtcywgaW50ZXJmZXJpbmcgd2l0aCBXZWJDb3JlIGFuZCBXVEYgZW51bSB2YWx1ZXMu
Ci0vLyBBcyBhIHdvcmthcm91bmQsIHdlIGV4cGxpY2l0bHkgdW5kZWYgdGhlbSBoZXJlLgotI2lm
IGRlZmluZWQoTm9uZSkKLSN1bmRlZiBOb25lCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEJlbG93KQot
I3VuZGVmIEJlbG93Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKFN1Y2Nlc3MpCi0jdW5kZWYgU3VjY2Vz
cwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3Jt
OwpAQCAtODIsNyArNTEsNiBAQCBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGll
bnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiBjbGFzcyBJbWFnZUJ1
ZmZlcjsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBNZWRpYVBsYXllcjsKIGNsYXNzIFJvdW5kZWRS
ZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0w7CkBAIC05MSwxNzQgKzU5LDEyIEBAIGNsYXNz
IFN5c3RlbUltYWdlOwogY2xhc3MgVGV4dFJ1bjsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OwogCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotY2xhc3MgUmVjb3JkZXI7Ci19Ci0KLWVudW0g
Y2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7Ci0gICAgRmlsbCA9IDEgPDwgMCwKLSAg
ICBTdHJva2UgPSAxIDw8IDEsCi19OwotdXNpbmcgVGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRp
b25TZXQ8VGV4dERyYXdpbmdNb2RlPjsKLQotLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBp
cyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0vLyBJdCBoYXMgZGlm
ZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KLWVudW0gY2xhc3MgU2hhZG93UmFkaXVz
TW9kZSA6IGJvb2wgewotICAgIERlZmF1bHQsCi0gICAgTGVnYWN5Ci19OwotCi1lbnVtIFN0cm9r
ZVN0eWxlIHsKLSAgICBOb1N0cm9rZSwKLSAgICBTb2xpZFN0cm9rZSwKLSAgICBEb3R0ZWRTdHJv
a2UsCi0gICAgRGFzaGVkU3Ryb2tlLAotICAgIERvdWJsZVN0cm9rZSwKLSAgICBXYXZ5U3Ryb2tl
LAotfTsKLQotc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKLSAgICBlbnVtIGNsYXNz
IE1vZGUgOiB1aW50OF90IHsKLSAgICAgICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0
aEFsdGVybmF0aXZlcywKLSAgICAgICAgU3BlbGxpbmcsCi0gICAgICAgIEdyYW1tYXIsCi0gICAg
ICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCi0gICAgICAgIERpY3RhdGlvbkFsdGVybmF0
aXZlcwotICAgIH0gbW9kZTsKLSAgICBib29sIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFs
c2UgfTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25h
bDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1vZGU7Ci0gICAgZW5j
b2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLXN0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlv
bmFsPE1vZGU+IG1vZGU7Ci0gICAgZGVjb2RlciA+PiBtb2RlOwotICAgIGlmICghbW9kZSkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hv
dWxkVXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZTsKLSAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVh
cmFuY2UgfX07Ci19Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTsKLQotc3Ry
dWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgp
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRl
eHRTdGF0ZSYmKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0gICAgZW51bSBD
aGFuZ2UgOiB1aW50MzJfdCB7Ci0gICAgICAgIFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMCwKLSAgICAgICAgU3Ryb2tlUGF0dGVybkNoYW5nZSAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAxLAotICAgICAgICBGaWxsR3JhZGllbnRDaGFuZ2UgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDIsCi0gICAgICAgIEZpbGxQYXR0ZXJuQ2hhbmdlICAgICAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgMywKLSAgICAgICAgU3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
ICAgICAgICAgICAgICAgICAgID0gMSA8PCA0LAotICAgICAgICBTdHJva2VDb2xvckNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDUsCi0gICAgICAgIFN0cm9rZVN0eWxlQ2hhbmdl
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNiwKLSAgICAgICAgRmlsbENvbG9yQ2hhbmdl
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA3LAotICAgICAgICBGaWxsUnVsZUNoYW5n
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDgsCi0gICAgICAgIFNoYWRvd0NoYW5n
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOSwKLSAgICAgICAgU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXNDaGFuZ2UgICAgICAgICAgID0gMSA8PCAxMCwKLSAgICAgICAgQWxwaGFD
aGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxMSwKLSAgICAgICAgQ29t
cG9zaXRlT3BlcmF0aW9uQ2hhbmdlICAgICAgICAgICAgICAgID0gMSA8PCAxMiwKLSAgICAgICAg
QmxlbmRNb2RlQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxMywKLSAgICAg
ICAgVGV4dERyYXdpbmdNb2RlQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNCwKLSAg
ICAgICAgU2hvdWxkQW50aWFsaWFzQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNSwK
LSAgICAgICAgU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAx
NiwKLSAgICAgICAgU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlICAgICAgID0gMSA8
PCAxNywKLSAgICAgICAgRHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UgICAgICAgICAgICAgICAgID0g
MSA8PCAxOCwKLSAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSAgICAgICAg
ID0gMSA8PCAxOSwKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgICAgICBVc2VE
YXJrQXBwZWFyYW5jZUNoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDIwLAotI2VuZGlmCi0g
ICAgfTsKLSAgICB1c2luZyBTdGF0ZUNoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47Ci0K
LSAgICB2b2lkIG1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIFJlZlB0cjxHcmFkaWVu
dD4gc3Ryb2tlR3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47Ci0g
ICAgCi0gICAgUmVmUHRyPEdyYWRpZW50PiBmaWxsR3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRl
cm4+IGZpbGxQYXR0ZXJuOwotCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLQotICAgIENv
bG9yIHN0cm9rZUNvbG9yIHsgQ29sb3I6OmJsYWNrIH07Ci0gICAgQ29sb3IgZmlsbENvbG9yIHsg
Q29sb3I6OmJsYWNrIH07Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0KLSAgICBBZmZpbmVUcmFu
c2Zvcm0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
ZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3Mg
eyAwIH07Ci0gICAgZmxvYXQgc2hhZG93Qmx1ciB7IDAgfTsKLSAgICBmbG9hdCBhbHBoYSB7IDEg
fTsKLQotICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBX
aW5kUnVsZSBmaWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07Ci0KLSAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUgeyBUZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKLSAg
ICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyIH07Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9y
bWFsIH07Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSB7IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07Ci0gICAgU2hhZG93UmFkaXVzTW9k
ZSBzaGFkb3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwotCi0gICAg
Ym9vbCBzaG91bGRBbnRpYWxpYXMgOiAxOwotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAx
OwotICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKLSAgICBib29sIHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zIDogMTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDog
MTsKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGJvb2wgdXNlRGFya0FwcGVh
cmFuY2UgOiAxOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UgewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKCkgPSBkZWZhdWx0OwotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgICAg
IDogbV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgLCBtX2NoYW5nZUZsYWdzKGZsYWdzKQotICAgIHsK
LSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFu
Z2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgY29uc3Q7Ci0KLSAgICB2
b2lkIGFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIG1fY2hhbmdlRmxhZ3M7Ci19OwotCi1XVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UmKTsKLQogY2xhc3MgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzogICAKKyAgICBmcmllbmQgY2xhc3MgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKK3B1YmxpYzoK
KyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0
aWFsQ2xpcCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZUZsYWdzJiA9IHsgfSwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9KTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNQ
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMjcwLDI3MCArNzYs
MjcwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFz
eW5jRGVjb2RlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGRl
dGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAv
LyBDb250ZXh0IFN0YXRlCisgICAgYm9vbCBjb250ZW5mdWxQYWludERldGVjdGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZDsgfQorICAgIHZvaWQgc2V0Q29udGVu
dGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9
CisgICAgCisgICAgdmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7
IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKLSAgICB2b2lkIHNldFN0
cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlja25lc3Mg
PSB0aGlja25lc3M7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KKyAgICAvLyBDb250ZXh0
IFN0YXRlCiAKLSAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1f
c3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKTsgfQotICAgIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VTdHlsZTsgfQorICAgIGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7
IH0KKyAgICB2b2lkIG1lcmdlU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBvdGhlcikgeyBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhvdGhlcik7IH0KKyAgICB2b2lkIG1lcmdl
U3RhdGVEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpIHsgbV9zdGF0ZS5t
ZXJnZURpZmZzKG90aGVyKTsgfQorICAgIHZvaWQgY2xlYXJTdGF0ZUNoYW5nZXMoKSB7IG1fc3Rh
dGUuY2xlYXJDaGFuZ2VzKCk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tl
Q29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUNvbG9yOyB9CisgICAgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZ2V0Q1RNKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKSB7IG1fc3RhdGUuc2V0Q1RNKGN0
bSk7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkgeyBz
ZXRDVE0oZ2V0Q1RNKCkgKiBjdG0pOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkgeyBzZXRDVE0oZ2V0Q1RNKCkudHJhbnNsYXRlKHgsIHkpKTsgfQorICAgIHZvaWQgdHJh
bnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAp
IHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBm
bG9hdCBzeSkgeyBzZXRDVE0oZ2V0Q1RNKCkuc2NhbGUoc3gsIHN5KSk7IH0KKyAgICB2b2lkIHNj
YWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkgeyBzY2FsZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CisgICAg
dm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIHsgc2V0Q1RNKGdldENUTSgpLnJvdGF0
ZShyYWQyZGVnKGFuZ2xlSW5SYWRpYW5zKSkpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOwotICAgIFBhdHRlcm4qIHN0cm9rZVBh
dHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KKyAg
ICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1
c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIGZpbGxQ
YXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5wYXR0ZXJuKCk7IH0K
KyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxTcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZvaWQg
c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldEZpbGxCcnVzaCh7
IGNvbG9yIH0pOyB9CisgICAgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdy
YWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KSB7IG1f
c3RhdGUuc2V0RmlsbEdyYWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7
IH0KKyAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRGaWxs
UGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pLCBzcGFjZVRyYW5zZm9ybSk7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKLSAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpOyB9CisgICAgV2luZFJ1
bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlKCk7IH0KKyAgICB2
b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuc2V0RmlsbFJ1bGUo
ZmlsbFJ1bGUpOyB9CiAKLSAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7
IG1fc3RhdGUuZmlsbFJ1bGUgPSBmaWxsUnVsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKTsgfQotICAgIFdpbmRSdWxlIGZpbGxS
dWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQorICAgIGNvbnN0IENvbG9y
JiBzdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5jb2xv
cigpOyB9CisgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5zdHJva2VCcnVzaCgpLmdyYWRpZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBzdHJva2VQYXR0
ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnBhdHRlcm4oKTsgfQor
ICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZv
aWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fc3RhdGUuc2V0U3Ryb2tl
QnJ1c2goeyBjb2xvciB9KTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRp
ZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRTdHJva2VHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50
KSwgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBhdHRlcm4o
UmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuU3Bh
Y2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRTdHJva2VQYXR0ZXJuKFdURk1vdmUocGF0
dGVybiksIHBhdHRlcm5TcGFjZVRyYW5zZm9ybSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgY29uc3QgQ29sb3ImIGZpbGxDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9yOyB9CisgICAgZmxvYXQgc3Ryb2tl
VGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3MoKTsgfQor
ICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykgeyBtX3N0YXRlLnNl
dFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQYXR0ZXJuKiBmaWxsUGF0dGVy
bigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCk7IH0KKyAgICBTdHJv
a2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlU3R5bGUo
KTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0
ZS5zZXRTdHJva2VTdHlsZShzdHlsZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsg
fSk7Ci0gICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
ZmlsbEdyYWRpZW50LmdldCgpOyB9CisgICAgTGluZUNhcCBpbmVDYXAoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmxpbmVDYXAoKTsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApIHsgbV9zdGF0ZS5zZXRMaW5lQ2FwKGxpbmVDYXApOyB9CiAKLSAgICB2b2lkIHNldFNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyBkaWRV
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KKyAgICBjb25z
dCBMaW5lRGFzaCBsaW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubGluZURhc2goKTsg
fQorICAgIHZvaWQgc2V0TGluZURhc2goTGluZURhc2gmJiBsaW5lRGFzaCkgeyBtX3N0YXRlLnNl
dExpbmVEYXNoKFdURk1vdmUobGluZURhc2gpKTsgfQogCi0gICAgdm9pZCBzZXRTaG91bGRBbnRp
YWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBz
aG91bGRBbnRpYWxpYXM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsgfQorICAgIExpbmVKb2lu
IGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5saW5lSm9pbigpOyB9CisgICAgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikgeyBtX3N0YXRlLnNldExpbmVKb2luKGxp
bmVKb2luKTsgfQogCi0gICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNt
b290aEZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250
czsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNt
b290aEZvbnRzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzOyB9CisgICAgZmxvYXQgbWl0ZXJMaW1p
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubWl0ZXJMaW1pdCgpOyB9CisgICAgdm9pZCBzZXRN
aXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpIHsgbV9zdGF0ZS5zZXRNaXRlckxpbWl0KG1pdGVy
TGltaXQpOyB9CiAKLSAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXph
dGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlw
aHMuCi0gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJl
IGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgotICAgIHZvaWQgc2V0U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7
IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7IH0KKyAgICBDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU1vZGUoKTsgfQorICAgIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbXBvc2l0ZU1vZGUoKS5v
cDsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBj
b21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVNb2RlKENv
bXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX3N0YXRlLnNldENvbXBvc2l0ZU1vZGUoY29t
cG9zaXRlTW9kZSk7IH0KKyAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRvciBvcCkgeyBtX3N0YXRlLnNldENvbXBvc2l0ZU1vZGUoeyBvcCwgQmxlbmRNb2RlOjpO
b3JtYWwgfSk7IH0KIAotICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRl
cnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSA9IHF1YWxpdHk7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQotICAgIEludGVycG9sYXRp
b25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAgICBjb25zdCBEcm9wU2hhZG93JiBk
cm9wU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcm9wU2hhZG93KCk7IH0KKyAgICB2
b2lkIHNldERyb3BTaGFkb3coY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdykgeyBtX3N0YXRl
LnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7IH0KKyAgICB2b2lkIGNsZWFyU2hhZG93KCkgeyBt
X3N0YXRlLnNldERyb3BTaGFkb3coeyB9KTsgfQogCi0gICAgdm9pZCBzZXRBbHBoYShmbG9hdCBh
bHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0KLSAgICBmbG9hdCBhbHBoYSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KKyAgICBib29sIGhhc1Zpc2libGVTaGFkb3co
KSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93KCkuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGhh
c0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93KCkuaXNCbHVycmVkKCk7
IH0KKyAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5oYXNP
dXRzZXRzKCk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0g
ICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVy
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsgfQorICAgIGZsb2F0IGFs
cGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYSgpOyB9CisgICAgdm9pZCBzZXRBbHBo
YShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLnNldEFscGhhKGFscGhhKTsgfQogCi0gICAgdm9pZCBz
ZXREcmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuZHJh
d0x1bWluYW5jZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFzazsgZGlkVXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsgfQotICAg
IGJvb2wgZHJhd0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1p
bmFuY2VNYXNrOyB9CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSgpOyB9CisgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRp
b25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpIHsgbV9zdGF0ZS5zZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOyB9CiAKLSAgICB2
b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKSB7IG1fc3Rh
dGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSk7IH0KLSAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHRE
cmF3aW5nTW9kZTsgfQorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKCk7IH0KKyAgICB2b2lkIHNl
dFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUpIHsg
bV9zdGF0ZS5zZXRUZXh0RHJhd2luZ01vZGUodGV4dERyYXdpbmdNb2RlKTsgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwg
Y29uc3QgQ29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVs
dCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYp
IGNvbnN0OworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zaG91bGRBbnRpYWxpYXMoKTsgfQorICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wg
c2hvdWxkQW50aWFsaWFzKSB7IG1fc3RhdGUuc2V0U2hvdWxkQW50aWFsaWFzKHNob3VsZEFudGlh
bGlhcyk7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNv
bnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8
IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVp
Z2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFz
VmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAgIGJvb2wgc2hvdWxk
U21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKCk7
IH0KKyAgICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMp
IHsgbV9zdGF0ZS5zZXRTaG91bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cyk7IH0KIAot
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFy
YW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlKSB7IG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2Ug
PSB1c2VEYXJrQXBwZWFyYW5jZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKTsgfQotICAgIGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0j
ZW5kaWYKKyAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBi
ZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCisg
ICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGln
aC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgorICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMoKTsgfQorICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJv
b2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2V0U2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7IH0KIAotICAgIHZp
cnR1YWwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQorICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCk7IH0KKyAgICB2b2lkIHNldFNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9z
dGF0ZS5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7
IH0KIAotICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgYm9vbCBkcmF3THVt
aW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2soKTsg
fQorICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykg
eyBtX3N0YXRlLnNldERyYXdMdW1pbmFuY2VNYXNrKGRyYXdMdW1pbmFuY2VNYXNrKTsgfQogCi0g
ICAgLy8gQ2FsbGVkICphZnRlciogYW55IGNoYW5nZSB0byBHcmFwaGljc0NvbnRleHRTdGF0ZTsg
Z2VuZXJhbGx5IHVzZWQgdG8gcHJvcGFnYXRlIGNoYW5nZXMKLSAgICAvLyB0byB0aGUgcGxhdGZv
cm0gY29udGV4dCdzIHN0YXRlLgotICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKSA9IDA7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVz
ZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5j
ZSgpOyB9CisgICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJh
bmNlKSB7IG1fc3RhdGUuc2V0VXNlRGFya0FwcGVhcmFuY2UodXNlRGFya0FwcGVhcmFuY2UpOyB9
CisjZW5kaWYKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzYXZlKCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlc3RvcmUoKTsKLSAgICAKICAgICB1bnNpZ25l
ZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQogCisgICAgdmly
dHVhbCB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgPSAwOwogI2lmIFVTRShDRykKICAgICAvLyBG
SVhNRTogU2hvdWxkIHRoZXNlIHJlYWxseSBiZSBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IG1ldGhv
ZHM/Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
dHJva2VQYXR0ZXJuKCkgPSAwOworI2VuZGlmCiAKLSAgICAvLyBGSVhNRTogQ2FuIHdlIG1ha2Ug
dGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRoZW4gaGF2ZSBpdCBleGlzdCBjcm9z
cy1wbGF0Zm9ybT8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCA9IDA7CisgICAg
V0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OwogCi0gICAgLy8gRklY
TUU6IENhbiB0aGlzIGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVy
PyBPciBqdXN0IGJlIHJlYWQgb2ZmIHRoZSBjb250ZXh0PwotICAgIHZpcnR1YWwgdm9pZCBzZXRJ
c0FjY2VsZXJhdGVkQ29udGV4dChib29sKSA9IDA7Ci0jZW5kaWYKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNvbnRleHQsIG1ha2lu
ZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCisgICAgLy8gYWN0aW5nIGFzIGEgYmFzZS1sZXZlbCBj
b250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgorICAgIHZpcnR1YWwgdm9pZCBhcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3IpOyB9CiAKLSAgICB2
aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KKyAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAK
LSAgICAvLyBQaXhlbCBTbmFwcGluZworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5z
cGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMo
KSAmJiBtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7IH0KIAotICAgIGVudW0gUm91bmRpbmdNb2Rl
IHsKLSAgICAgICAgUm91bmRBbGxTaWRlcywKLSAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNp
b25zCi0gICAgfTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxv
YXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5
bGUpOworICAgIC8vIENsaXBwaW5nCiAKLSAgICAvLyBTaGFwZXMKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6
OkV2ZW5PZGQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRv
IGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxpbmcuCi0gICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3
UmVjdCgpLCB3aGljaCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKLSAgICAvLyB1
c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhl
IGNvcnJlY3QKLSAgICAvLyBzdHJva2UgY29sb3IpLgotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpOworCisgICAg
SW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX3N0
YXRlLmNsaXBCb3VuZHMoKSk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBmaWxsUGF0aChjb25zdCBQ
YXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsK
KyAgICAvLyBTaGFwZXMKIAotICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpIHsgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgc3Ryb2tl
RWxsaXBzZUFzUGF0aChlbGxpcHNlKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IENvbG9yJikgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVk
UmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBHcmFkaWVudCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYsIEJsZW5kTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWl0
ZXJMaW1pdChmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxQYXRo
KGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKIAotICAgIEludFNpemUgY29tcGF0aWJs
ZUltYWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhv
ZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
ID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0
ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwgZG8gYm90
aCBzdHJva2luZyBhbmQgZmlsbGluZy4KKyAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRyYXdSZWN0
KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcworICAgIC8vIHVzaW5n
IGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0aGUgY29y
cmVjdAorICAgIC8vIHN0cm9rZSBjb2xvcikuCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0
KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKIAotICAgIHZp
cnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mg
PSAxKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29s
b3IpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlydHVhbCBkcmF3UGF0aChjb25zdCBQYXRo
Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQ
T1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRp
b246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jl
c3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFn
ZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgLy8gRm9jdXMgUmluZ3MKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwor
ICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50YXRpb24/
IE9yIGVsc2V3aGVyZT8KKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIGRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJh
dywgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRy
YXcsIGNvbnN0IENvbG9yJikgPSAwOworI2VuZGlmCiAKKyAgICAvLyBJbWFnZXMKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZm
ZXI+LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFn
ZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
ID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRy
YXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJ
bWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIElt
YWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJ
bWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVS
dWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpOwog
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKICNlbmRpZgotCi0gICAgLy8gQ2xpcHBp
bmcKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7
Ci0KKyAgICAKICAgICAvLyBUZXh0CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0
U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRv
ID0gc3RkOjpudWxsb3B0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ds
eXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRT
bW9vdGhpbmdNb2RlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0VtcGhh
c2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25l
ZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIHsKLSAgICAgICAg
ZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250
U21vb3RoaW5nTW9kZSk7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNv
bXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRp
bmcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0
UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5
bGUgPSBTb2xpZFN0cm9rZSk7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBT
b2xpZFN0cm9rZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAKLSAg
ICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCi0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBib29sIGlzSW5U
cmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJuIChtX3RyYW5zcGFyZW5jeUxheWVyQ291
bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0
UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwogCi0gICAgLy8gRm9jdXMgUmluZ3MKKyAgICAvLyBDb21w
YXRpYmxlIEltYWdlQnVmZmVyCiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICAvLyBGSVhN
RTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hl
cmU/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENv
bG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBD
b2xvciYpID0gMDsKLSNlbmRpZgorICAgIEludFNpemUgY29tcGF0aWJsZUltYWdlQnVmZmVyU2l6
ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKIAotICAgIC8vIFRyYW5zZm9ybXMKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCi0gICAgdm9pZCBzY2FsZShmbG9h
dCBzKSB7IHNjYWxlKHsgcywgcyB9KTsgfQotICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykgPSAwOwotICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0
cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQotICAgIHZvaWQgdHJhbnNs
YXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBz
dGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFs
PFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVy
aW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxs
b3B0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpv
cHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAgIGVu
dW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9z
c2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBn
ZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNv
bnN0ID0gMDsKKyAgICAvLyBQaXhlbCBTbmFwcGluZwogCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBh
cHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250ZXh0LCBtYWtpbmcgdGhl
IGNvbnRleHQgY2FwYWJsZSBvZgotICAgIC8vIGFjdGluZyBhcyBhIGJhc2UtbGV2ZWwgY29udGV4
dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsgfQotICAgIFdFQkNPUkVf
RVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JU
IEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAgICBlbnVtIFJvdW5kaW5nTW9k
ZSB7CisgICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5z
aW9ucworICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZs
b2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0
eWxlKTsKIAogICAgIC8vIExpbmtzCiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5h
bExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBzZXRV
UkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogCiAgICAgdmlydHVh
bCB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFJl
Y3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0
cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gQ29udGVu
dGZ1bCBQYWludCBEZXRlY3Rpb24KKyNpZiBVU0UoQ0cpCisgICAgLy8gRklYTUU6IENhbiB3ZSBt
YWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdoYXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3Qg
Y3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9v
bCkgeyB9CisgICAgdmlydHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogCi0gICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9j
b250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50
RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkOyB9Cisg
ICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3Ig
cGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQgb2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwg
dm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSB7IH0KKyNlbmRpZgogCiAgICAgLy8g
RklYTUU6IE5vdGhpbmcgaW4gdGhpcyBzZWN0aW9uIGJlbG9uZ3MgaGVyZSwgYW5kIHNob3VsZCBi
ZSBtb3ZlZCBlbHNld2hlcmUuCiAjaWYgT1MoV0lORE9XUykKQEAgLTU0NiwxMCArMzUyLDcgQEAg
cHVibGljOgogICAgIC8vIHB1dCBjb2RlIHNoYXJlZCBiZXR3ZWVuIFdpbmRvd3MgQ0cgYW5kIFdp
bmRvd3MgQ2Fpcm8gYmFja2VuZHMuCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxw
dHI7IH0KICNlbmRpZgotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQorICAgIAogcHJvdGVjdGVk
OgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9p
ZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtNTYxLDE5MSArMzY0
LDE2IEBAIHByb3RlY3RlZDoKICAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBh
dHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRo
KSBjb25zdDsKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5l
cnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9p
bnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29uc3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZSBtX3N0YXRlOwotCiBwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFy
ZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlIG1fc3RhdGU7CiAgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0
YWNrOwogCiAgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsgMCB9OwogICAg
IGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9OwogCi1jbGFzcyBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKLSAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0gICAgewotICAg
ICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7
Ci0gICAgfQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgbV9jb250ZXh0LnJlc3Rv
cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgICAg
IG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgcmVzdG9yZSgpCi0g
ICAgewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29udGV4
dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKLSAgICB9Ci0g
ICAgCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29u
dGV4dDsgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAg
IGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KLWNsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2Nv
cGUgewotcHVibGljOgotICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKLSAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX2FscGhhKGFscGhhKQotICAgICAgICAs
IG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQotICAgIHsKLSAgICAgICAgaWYgKGJlZ2luTGF5ZXIp
Ci0gICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQotICAgIHsKLSAg
ICAgICAgbV9hbHBoYSA9IGFscGhhOwotICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihtX2FscGhhKTsKLSAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
YmVnYW5MYXllcikKLSAgICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAg
ICBmbG9hdCBtX2FscGhhOwotICAgIGJvb2wgbV9iZWdhbkxheWVyOwotfTsKLQotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgewotcHVibGljOgotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNr
U2l6ZSgpKQotICAgIHsgfQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hl
Y2tlcigpCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0LnN0YWNrU2l6ZSgpICE9IG1fc3Rh
Y2tTaXplKQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQgJXAgc3Rh
Y2sgY2hhbmdlZCBieSAlZCIsICZtX2NvbnRleHQsIChpbnQpbV9jb250ZXh0LnN0YWNrU2l6ZSgp
IC0gKGludCltX3N0YWNrU2l6ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dCYgbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwotfTsKLQotY2xhc3Mg
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBJ
bnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCi0g
ICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQotICAgICAgICAsIG1f
Y3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpCi0gICAgICAgICwgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQo
aW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSAhPSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVs
dCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBpbnRlcnBvbGF0aW9uUXVhbGl0
eVRvVXNlKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2Vk
KQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBJ
bnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1YWxpdHk+IGludGVycG9sYXRpb25R
dWFsaXR5KQotICAgICAgICA6IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihncmFwaGlj
c0NvbnRleHQsIGludGVycG9sYXRpb25RdWFsaXR5ID8gaW50ZXJwb2xhdGlvblF1YWxpdHkudmFs
dWUoKSA6IGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAg
ewotICAgIH0KLQotICAgIH5JbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoKQotICAgIHsK
LSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAg
bV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX2N1cnJlbnRJ
bnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9jdXJy
ZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgYm9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlZDsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotbmFtZXNwYWNlIFdURiB7
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlLAotICAgIFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRo
QWx0ZXJuYXRpdmVzLAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
OjpTcGVsbGluZywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6
R3JhbW1hciwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0
b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUdyYWRpZW50Q2hhbmdlLAotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlLAotICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsR3JhZGllbnRD
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZp
bGxQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUNvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZUNoYW5nZSwKLSAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbENvbG9yQ2hhbmdl
LAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsUnVs
ZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
U2hhZG93Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGFDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QmxlbmRNb2Rl
Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpU
ZXh0RHJhd2luZ01vZGVDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhc0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsCi0gICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250c0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFu
Z2UKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgICAgICAsIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlCi0jZW5k
aWYKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpT
dHJva2VTdHlsZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29y
ZTo6U3Ryb2tlU3R5bGUsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlLAotICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VT
dHlsZTo6RG90dGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEYXNoZWRTdHJv
a2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZSwKLSAgICBXZWJDb3Jl
OjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZT4gewotICAgIHVzaW5nIHZhbHVl
cyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZSwKLSAgICAg
ICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAotICAgICAgICBXZWJDb3JlOjpUZXh0
RHJhd2luZ01vZGU6OlN0cm9rZQotICAgID47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDhkNWY5ODgxNzBiMjcyZjM4ZGU2OGFmYjhhOTE2MTg2NTA3MzMyMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dFN0YXRlLmNwcApAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0U3RhdGUuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQ2hhbmdlRmxh
Z3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAg
OiBtX2NsaXBCb3VuZHMoaW5pdGlhbENUTS5tYXBSZWN0KGluaXRpYWxDbGlwKSkKKyAgICAsIG1f
Y2hhbmdlRmxhZ3MoY2hhbmdlRmxhZ3MpCisgICAgLCBtX2N0bShpbml0aWFsQ1RNKQoreworfQor
CitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXBCb3VuZHMoKSBjb25zdAorewor
ICAgIGlmIChhdXRvIGludmVyc2UgPSBtX2N0bS5pbnZlcnNlKCkpCisgICAgICAgIHJldHVybiBp
bnZlcnNlLT5tYXBSZWN0KG1fY2xpcEJvdW5kcyk7CisKKyAgICAvLyBJZiB0aGUgQ1RNIGlzIG5v
dCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlY3QuCisgICAgLy8gVGhpcyBtYXRj
aGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9ybSBiZWhhdmlvci4KKyAgICByZXR1
cm4gbV9jbGlwQm91bmRzOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpoYXNPbmx5
UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDaGFuZ2VG
bGFncyBwcmltaXRpdmVDaGFuZ2VGbGFncyB7IENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCBDaGFu
Z2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6OkZpbGxCcnVzaCB9OworCisgICAgaWYgKG1fY2hhbmdl
RmxhZ3MgIT0gKG1fY2hhbmdlRmxhZ3MgJiBwcmltaXRpdmVDaGFuZ2VGbGFncykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKENoYW5nZTo6
U3Ryb2tlQnJ1c2gpICYmICFtX3N0cm9rZUJydXNoLmlzUHJpbWl0aXZlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKENoYW5nZTo6Rmls
bEJydXNoKSAmJiAhbV9maWxsQnJ1c2guaXNQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpCit7CisgICAg
YXV0byBtZXJnZUNoYW5nZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoY2hhbmdlKSkgeworICAgICAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gb3RoZXIuKnBy
b3BlcnR5OworICAgICAgICAgICAgbV9jaGFuZ2VGbGFncy5hZGQoY2hhbmdlKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBBU1NFUlQobV9jbGlwQm91bmRzID09IG90aGVyLm1fY2xpcEJvdW5k
cyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisKKyAgICBtZXJnZUNoYW5nZShD
aGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpGaWxsUnVsZSwgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisK
KyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKTsKKyAgICBtZXJnZUNoYW5nZShD
aGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VT
dHlsZSwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VT
dHlsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXApOworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZUpvaW4s
ICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4p
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCk7CisKKyAgICBtZXJnZUNoYW5n
ZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RHJvcFNo
YWRvdywgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNo
YWRvdyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhKTsKKyAgICBtZXJnZUNoYW5n
ZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdlQ2hhbmdlKENo
YW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U2hvdWxk
QW50aWFsaWFzLCAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxk
QW50aWFsaWFzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsK
KyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7Cisg
ICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisgICAgbWVy
Z2VDaGFuZ2UoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsK
KyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZURpZmZzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikKK3sKKyAgICBhdXRvIG1lcmdlRGlmZiA9IFsm
XShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsK
KyAgICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSAhPSBvdGhlci4qcHJvcGVydHkpIHsKKyAgICAg
ICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9wZXJ0eTsKKyAgICAgICAgICAgIG1f
Y2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbWVyZ2VE
aWZmKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2N0bSk7CisgICAgCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbEJydXNoLCAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7Cisg
ICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0
cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJv
a2VCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVy
Z2VEaWZmKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVD
YXAsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2Fw
KTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6
OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9s
aW5lSm9pbik7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisgICAgbWVyZ2VE
aWZmKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkRyb3BTaGFk
b3csICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93
KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2lt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlRleHREcmF3
aW5nTW9kZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2lu
Z01vZGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7CisgICAgbWVy
Z2VEaWZmKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTaGFkb3dz
SWdub3JlVHJhbnNmb3JtcywgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNr
LCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpV
c2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNl
RGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK1RleHRTdHJlYW0mIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGF1dG8gZHVtcCA9IFsm
XShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHksIGNv
bnN0IFN0cmluZyYgbmFtZSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhj
aGFuZ2UpKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KG5hbWUsIHRoaXMtPipwcm9wZXJ0
eSk7CisgICAgfTsKKworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2xpcC1ib3VuZHMiLCBtX2NsaXBC
b3VuZHMpOworCisgICAgZHVtcChDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJjdG0iKTsKKworICAgIGR1bXAoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAg
ICAiZmlsbC1icnVzaCIpOworICAgIGR1bXAoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlLCAgICAgICAgICAgICAg
ICAgICAgICAiZmlsbC1ydWxlIik7CisKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgICAg
ICAgICAgICAgICAgICAgInN0cm9rZS1icnVzaCIpOworICAgIGR1bXAoQ2hhbmdlOjpTdHJva2VU
aGlja25lc3MsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRo
aWNrbmVzcywgICAgICAgICAgICAgICAic3Ryb2tlLXRoaWNrbmVzcyIpOworICAgIGR1bXAoQ2hh
bmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3N0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICAic3Ryb2tlLXN0eWxlIik7CisKKyAg
ICBkdW1wKENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgImxpbmUtY2FwIik7
CisgICAgZHVtcChDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgICJsaW5lLWRh
c2giKTsKKyAgICBkdW1wKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICAgImxp
bmUtam9pbiIpOworICAgIGR1bXAoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQsICAgICAgICAgICAgICAgICAg
ICAibWl0ZXItbGltaXQiKTsKKworICAgIGR1bXAoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUsICAgICAg
ICAgICAgICAgICAiY29tcG9zaXRlLW1vZGUiKTsKKyAgICBkdW1wKENoYW5nZTo6RHJvcFNoYWRv
dywgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93
LCAgICAgICAgICAgICAgICAgICAgImRyb3Atc2hhZG93Iik7CisKKyAgICBkdW1wKENoYW5nZTo6
QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9h
bHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAgImFscGhhIik7CisgICAgZHVtcChDaGFuZ2U6
OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICJpbWFnZS1pbnRlcnBvbGF0aW9uLXF1YWxp
dHkiKTsKKyAgICBkdW1wKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgInRl
eHQtZHJhd2luZy1tb2RlIik7CisKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMsICAg
ICAgICAgICAgICAgInNob3VsZC1hbnRpYWxpYXMiKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxk
U21vb3RoRm9udHMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
bW9vdGhGb250cywgICAgICAgICAgICAgInNob3VsZC1zbW9vdGgtZm9udHMiKTsKKyAgICBkdW1w
KENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgInNob3VsZC1zdWJwaXhlbC1x
dWFudGl6ZS1mb250cyIpOworICAgIGR1bXAoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cywgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
LCAgICAgICAic2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIpOworICAgIGR1bXAoQ2hhbmdlOjpE
cmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ry
YXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAiZHJhdy1sdW1pbmFuY2UtbWFzayIpOworI2lm
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgZHVtcChDaGFuZ2U6OlVzZURhcmtBcHBl
YXJhbmNlLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVh
cmFuY2UsICAgICAgICAgICAgICJ1c2UtZGFyay1hcHBlYXJhbmNlIik7CisjZW5kaWYKKyAgICBy
ZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjc5MzYxNGY2ZTNjY2JhM2E2ZGFlMzQ5YTc4MjU2MWFiNmI5ZmE0MDUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRTdGF0ZS5oCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIlNvdXJjZUJydXNo
LmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGUgeworcHVi
bGljOgorICAgIGVudW0gY2xhc3MgQ2hhbmdlIDogdWludDMyX3QgeworICAgICAgICBDVE0gICAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCisKKyAgICAgICAgRmlsbEJydXNoICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAxLAorICAgICAgICBGaWxsUnVsZSAgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIsCisKKyAgICAgICAgU3Ryb2tlQnJ1c2ggICAgICAgICAgICAgICAgID0gMSA8
PCAzLAorICAgICAgICBTdHJva2VUaGlja25lc3MgICAgICAgICAgICAgPSAxIDw8IDQsCisgICAg
ICAgIFN0cm9rZVN0eWxlICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKKworICAgICAgICBMaW5l
Q2FwICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDYsCisgICAgICAgIExpbmVEYXNoICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgNywKKyAgICAgICAgTGluZUpvaW4gICAgICAgICAgICAgICAg
ICAgID0gMSA8PCA4LAorICAgICAgICBNaXRlckxpbWl0ICAgICAgICAgICAgICAgICAgPSAxIDw8
IDksCisKKyAgICAgICAgQ29tcG9zaXRlTW9kZSAgICAgICAgICAgICAgID0gMSA8PCAxMCwKKyAg
ICAgICAgRHJvcFNoYWRvdyAgICAgICAgICAgICAgICAgID0gMSA8PCAxMSwKKworICAgICAgICBB
bHBoYSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5ICAgPSAxIDw8IDEzLAorICAgICAgICBUZXh0RHJhd2luZ01vZGUgICAg
ICAgICAgICAgPSAxIDw8IDE0LAorCisgICAgICAgIFNob3VsZEFudGlhbGlhcyAgICAgICAgICAg
ICA9IDEgPDwgMTUsCisgICAgICAgIFNob3VsZFNtb290aEZvbnRzICAgICAgICAgICA9IDEgPDwg
MTYsCisgICAgICAgIFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IDEgPDwgMTcsCisgICAg
ICAgIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zICAgICA9IDEgPDwgMTgsCisgICAgICAgIERyYXdM
dW1pbmFuY2VNYXNrICAgICAgICAgICA9IDEgPDwgMTksCisjaWYgSEFWRShPU19EQVJLX01PREVf
U1VQUE9SVCkKKyAgICAgICAgVXNlRGFya0FwcGVhcmFuY2UgICAgICAgICAgID0gMSA8PCAyMCwK
KyNlbmRpZgorICAgIH07CisgICAgdXNpbmcgQ2hhbmdlRmxhZ3MgPSBPcHRpb25TZXQ8Q2hhbmdl
PjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgQ2hhbmdlRmxhZ3MgaW5pdGlhbENoYW5nZUZsYWdz
ID0geyBDaGFuZ2U6OkZpbGxCcnVzaCwgQ2hhbmdlOjpTdHJva2VCcnVzaCwgQ2hhbmdlOjpTdHJv
a2VUaGlja25lc3MgfTsKKworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRl
KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXBCb3VuZHMsIGNvbnN0IENoYW5nZUZsYWdzJiA9
IHsgfSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9KTsKKworICAgIFdF
QkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7CisgICAgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyBtX2NsaXBCb3VuZHMuaW50ZXJzZWN0KG1fY3RtLm1h
cFJlY3QocmVjdCkpOyB9CisKKyAgICBDaGFuZ2VGbGFncyBjaGFuZ2VzKCkgY29uc3QgeyByZXR1
cm4gbV9jaGFuZ2VGbGFnczsgfQorICAgIHZvaWQgY2xlYXJDaGFuZ2VzKCkgeyBtX2NoYW5nZUZs
YWdzID0geyB9OyB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1
cm4gbV9jdG07IH0KKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkg
eyBtX2N0bSA9IGN0bTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpDVE0pOyB9CisKKyAgICBT
b3VyY2VCcnVzaCYgZmlsbEJydXNoKCkgeyByZXR1cm4gbV9maWxsQnJ1c2g7IH0KKyAgICBjb25z
dCBTb3VyY2VCcnVzaCYgZmlsbEJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9maWxsQnJ1c2g7IH0K
KyAgICB2b2lkIHNldEZpbGxCcnVzaChjb25zdCBTb3VyY2VCcnVzaCYgZmlsbEJydXNoKSB7IG1f
ZmlsbEJydXNoID0gZmlsbEJydXNoOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVz
aCk7IH0KKyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxsQnJ1c2guc2V0
R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFn
cy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8
UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3Jt
KSB7IG1fZmlsbEJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zv
cm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVzaCk7IH0KKworICAgIFdpbmRS
dWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorICAgIHZvaWQgc2V0
RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9maWxsUnVsZSA9IGZpbGxSdWxlOyBtX2No
YW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxSdWxlKTsgfQorCisgICAgU291cmNlQnJ1c2gmIHN0
cm9rZUJydXNoKCkgeyByZXR1cm4gbV9zdHJva2VCcnVzaDsgfQorICAgIGNvbnN0IFNvdXJjZUJy
dXNoJiBzdHJva2VCcnVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQnJ1c2g7IH0KKyAgICB2
b2lkIHNldFN0cm9rZUJydXNoKGNvbnN0IFNvdXJjZUJydXNoJiBzdHJva2VCcnVzaCkgeyBtX3N0
cm9rZUJydXNoID0gc3Ryb2tlQnJ1c2g7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6U3Ryb2tl
QnJ1c2gpOyB9CisgICAgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3Jh
ZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9zdHJva2VC
cnVzaC5zZXRHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0pOyBtX2No
YW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tl
UGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNw
YWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1c2guc2V0UGF0dGVybihXVEZNb3ZlKHBhdHRlcm4p
LCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6U3Ryb2tlQnJ1c2gp
OyB9CisKKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0cm9r
ZVRoaWNrbmVzczsgfQorICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHN0cm9rZVRo
aWNrbmVzcykgeyBtX3N0cm9rZVRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzczsgbV9jaGFuZ2VG
bGFncy5hZGQoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MpOyB9CisKKyAgICBTdHJva2VTdHlsZSBz
dHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlU3R5bGU7IH0KKyAgICB2b2lkIHNl
dFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKSB7IG1fc3Ryb2tlU3R5bGUgPSBz
dHJva2VTdHlsZTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VTdHlsZSk7IH0KKwor
ICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQorICAgIHZv
aWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsgbV9saW5lQ2FwID0gbGluZUNhcDsgbV9j
aGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpMaW5lQ2FwKTsgfQorCisgICAgY29uc3QgTGluZURhc2gm
IGxpbmVEYXNoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lRGFzaDsgfQorICAgIHZvaWQgc2V0TGlu
ZURhc2goTGluZURhc2gmJiBsaW5lRGFzaCkgeyBtX2xpbmVEYXNoID0gV1RGTW92ZShsaW5lRGFz
aCk7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6TGluZURhc2gpOyB9CisKKyAgICBMaW5lSm9p
biBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KKyAgICB2b2lkIHNldExp
bmVKb2luKExpbmVKb2luIGxpbmVKb2luKSB7IG1fbGluZUpvaW4gPSBsaW5lSm9pbjsgbV9jaGFu
Z2VGbGFncy5hZGQoQ2hhbmdlOjpMaW5lSm9pbik7IH0KKworICAgIGZsb2F0IG1pdGVyTGltaXQo
KSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQo
ZmxvYXQgbWl0ZXJMaW1pdCkgeyBtX21pdGVyTGltaXQgPSBtaXRlckxpbWl0OyBtX2NoYW5nZUZs
YWdzLmFkZChDaGFuZ2U6Ok1pdGVyTGltaXQpOyB9CisgICAgCisgICAgQ29tcG9zaXRlTW9kZSBj
b21wb3NpdGVNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVNb2RlOyB9CisgICAgdm9p
ZCBzZXRDb21wb3NpdGVNb2RlKENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX2NvbXBv
c2l0ZU1vZGUgPSBjb21wb3NpdGVNb2RlOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkNvbXBv
c2l0ZU1vZGUpOyB9CisgICAgCisgICAgY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdygpIGNv
bnN0IHsgcmV0dXJuIG1fZHJvcFNoYWRvdzsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25z
dCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KSB7IG1fZHJvcFNoYWRvdyA9IGRyb3BTaGFkb3c7IG1f
Y2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6RHJvcFNoYWRvdyk7IH0KKworICAgIGZsb2F0IGFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYTsgfQorICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxw
aGEpIHsgbV9hbHBoYSA9IGFscGhhOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkFscGhhKTsg
fQorICAgIAorICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAgICB2
b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkgeyBtX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5OyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkpOyB9CisgICAgCisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3Mg
dGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKyAg
ICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2lu
Z01vZGUpIHsgbV90ZXh0RHJhd2luZ01vZGUgPSB0ZXh0RHJhd2luZ01vZGU7IG1fY2hhbmdlRmxh
Z3MuYWRkKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlKTsgfQorCisgICAgYm9vbCBzaG91bGRBbnRp
YWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEFudGlhbGlhczsgfQorICAgIHZvaWQgc2V0
U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc2hvdWxkQW50aWFsaWFz
ID0gc2hvdWxkQW50aWFsaWFzOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlNob3VsZEFudGlh
bGlhcyk7IH0KKworICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZFNtb290aEZvbnRzOyB9CisgICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29s
IHNob3VsZFNtb290aEZvbnRzKSB7IG1fc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhG
b250czsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cyk7IH0KKwor
ICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9z
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cyhib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykgeyBtX3Nob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsgbV9j
aGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOyB9CisK
KyAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zaGFk
b3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOyB9CisgICAgCisgICAgYm9vbCBkcmF3THVtaW5hbmNl
TWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0x1bWluYW5jZU1hc2s7IH0KKyAgICB2b2lkIHNl
dERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spIHsgbV9kcmF3THVtaW5h
bmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkRy
YXdMdW1pbmFuY2VNYXNrKTsgfQorCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV91c2VEYXJrQXBwZWFy
YW5jZTsgfQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFy
YW5jZSkgeyBtX3VzZURhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7IG1fY2hhbmdl
RmxhZ3MuYWRkKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UpOyB9CisjZW5kaWYKKworICAgIGJv
b2wgaGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSBjb25zdDsKKyAgICB2b2lkIG1lcmdlQ2hhbmdl
cyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpOworICAgIHZvaWQgbWVyZ2VEaWZm
cyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpOworCisgICAgV1RGOjpUZXh0U3Ry
ZWFtJiBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBkZWNv
ZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIEZsb2F0UmVjdCBtX2NsaXBCb3VuZHM7CisK
KyAgICBDaGFuZ2VGbGFncyBtX2NoYW5nZUZsYWdzOworCisgICAgQWZmaW5lVHJhbnNmb3JtIG1f
Y3RtOworCisgICAgU291cmNlQnJ1c2ggbV9maWxsQnJ1c2ggeyBDb2xvcjo6YmxhY2sgfTsKKyAg
ICBXaW5kUnVsZSBtX2ZpbGxSdWxlIHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKKworICAgIFNvdXJj
ZUJydXNoIG1fc3Ryb2tlQnJ1c2ggeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBmbG9hdCBtX3N0cm9r
ZVRoaWNrbmVzcyB7IDAgfTsKKyAgICBTdHJva2VTdHlsZSBtX3N0cm9rZVN0eWxlIHsgU29saWRT
dHJva2UgfTsKKworICAgIExpbmVDYXAgbV9saW5lQ2FwIHsgTGluZUNhcDo6QnV0dCB9OworICAg
IExpbmVEYXNoIG1fbGluZURhc2g7CisgICAgTGluZUpvaW4gbV9saW5lSm9pbiB7IExpbmVKb2lu
OjpNaXRlciB9OworICAgIGZsb2F0IG1fbWl0ZXJMaW1pdCB7IDAgfTsKKworICAgIENvbXBvc2l0
ZU1vZGUgbV9jb21wb3NpdGVNb2RlIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJs
ZW5kTW9kZTo6Tm9ybWFsIH07CisgICAgRHJvcFNoYWRvdyBtX2Ryb3BTaGFkb3c7CisKKyAgICBm
bG9hdCBtX2FscGhhIHsgMSB9OworICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1faW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSB7IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAg
VGV4dERyYXdpbmdNb2RlRmxhZ3MgbV90ZXh0RHJhd2luZ01vZGUgeyBUZXh0RHJhd2luZ01vZGU6
OkZpbGwgfTsKKworICAgIGJvb2wgbV9zaG91bGRBbnRpYWxpYXMgeyB0cnVlIH07CisgICAgYm9v
bCBtX3Nob3VsZFNtb290aEZvbnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMgeyB0cnVlIH07CisgICAgYm9vbCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZHJhd0x1bWluYW5jZU1hc2sgeyBmYWxzZSB9Owor
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgYm9vbCBtX3VzZURhcmtBcHBlYXJh
bmNlIHsgZmFsc2UgfTsKKyNlbmRpZgorfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3Zv
aWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
eworICAgIGF1dG8gZW5jb2RlID0gWyZdKENoYW5nZSBjaGFuZ2UsIGF1dG8gR3JhcGhpY3NDb250
ZXh0U3RhdGU6Oipwcm9wZXJ0eSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhjaGFuZ2UpKQorICAgICAgICAgICAgZW5jb2RlciA8PCB0aGlzLT4qcHJvcGVydHk7CisgICAg
fTsKKworICAgIGVuY29kZXIgPDwgbV9jbGlwQm91bmRzOworCisgICAgZW5jb2RlciA8PCBtX2No
YW5nZUZsYWdzOworCisgICAgZW5jb2RlKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisKKyAgICBlbmNvZGUoQ2hh
bmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fZmlsbEJydXNoKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpOworCisgICAg
ZW5jb2RlKENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTdHJva2VU
aGlja25lc3MsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tl
VGhpY2tuZXNzKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUpOworCisgICAgZW5j
b2RlKENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2xpbmVDYXApOworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVEYXNoLCAgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCk7Cisg
ICAgZW5jb2RlKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpNaXRlckxp
bWl0LCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJM
aW1pdCk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY29tcG9zaXRlTW9kZSk7CisgICAgZW5jb2Rl
KENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2Ryb3BTaGFkb3cpOworCisgICAgZW5jb2RlKENoYW5nZTo6QWxwaGEsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhKTsKKyAg
ICBlbmNvZGUoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgZW5jb2Rl
KENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRB
bnRpYWxpYXMsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxk
QW50aWFsaWFzKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMpOworICAg
IGVuY29kZShDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIGVuY29k
ZShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisgICAgZW5jb2RlKENoYW5nZTo6
RHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2RyYXdMdW1pbmFuY2VNYXNrKTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAg
IGVuY29kZShDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBhdXRv
IGRlY29kZSA9IFsmXShHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENoYW5nZSBjaGFuZ2Us
IGF1dG8gR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSkgeworICAgICAgICBpZiAoIXN0
YXRlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgIHVzaW5nIFByb3BlcnR5VHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3Zl
X3JlZmVyZW5jZTxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+KCku
KnByb3BlcnR5KT46OnR5cGU7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8UHJvcGVydHlUeXBlPiB2
YWx1ZTsKKyAgICAgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzdGF0ZS4qcHJvcGVydHkgPSAqdmFs
dWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gY2xpcEJvdW5kczsKKyAgICBkZWNvZGVyID4+IGNsaXBCb3VuZHM7CisgICAgaWYg
KCFjbGlwQm91bmRzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxDaGFuZ2VGbGFncz4gY2hhbmdlRmxhZ3M7CisgICAgZGVjb2RlciA+PiBjaGFuZ2VG
bGFnczsKKyAgICBpZiAoIWNoYW5nZUZsYWdzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgc3RhdGUoKmNsaXBCb3VuZHMsICpjaGFuZ2VG
bGFncyk7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpDVE0sICAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RmlsbEJy
dXNoLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNo
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsUnVsZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAo
IWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdl
OjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9z
dHJva2VTdHlsZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRl
Y29kZShzdGF0ZSwgQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCkpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUpvaW4sICAg
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
Ok1pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21p
dGVyTGltaXQpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNv
ZGUoc3RhdGUsIENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fY29tcG9zaXRlTW9kZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdykpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpBbHBo
YSwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENo
YW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3No
b3VsZEFudGlhbGlhcykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFk
ZWNvZGUoc3RhdGUsIENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGUoc3RhdGUsIENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyYXdMdW1pbmFu
Y2VNYXNrLCAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VN
YXNrKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQorICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlVzZURhcmtBcHBlYXJh
bmNlLCAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNl
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorCisgICAgcmV0dXJuIHN0
YXRlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlLAorICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE0sCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsUnVsZSwKKworICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaCwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLAorICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZSwKKwor
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwLAor
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaCwK
KyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4s
CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGlt
aXQsCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29t
cG9zaXRlTW9kZSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6RHJvcFNoYWRvdywKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpBbHBoYSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlLAorCisgICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywKKyAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9u
dHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsCisgICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrCisjaWYgSEFW
RShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZQorI2VuZGlmCisgICAgPjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3
MjEzMjg1MjYxZTY5MGNhMzA2MGQ3ZTAyNmU1MGU1MmVlYTU5MGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29u
dGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUp
CisgICAgeworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29u
dGV4dC5zYXZlKCk7CisgICAgfQorICAgIAorICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
KCkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgbV9j
b250ZXh0LnJlc3RvcmUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5zYXZl
KCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQg
cmVzdG9yZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAg
ICAgIG1fY29udGV4dC5yZXN0b3JlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gJm1fY29udGV4dDsgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9j
b250ZXh0OworICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKK307CisKK2NsYXNzIFRyYW5zcGFy
ZW5jeUxheWVyU2NvcGUgeworcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1
ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX2FscGhhKGFscGhh
KQorICAgICAgICAsIG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQorICAgIHsKKyAgICAgICAgaWYg
KGJlZ2luTGF5ZXIpCisgICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXll
cihtX2FscGhhKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhh
KQorICAgIHsKKyAgICAgICAgbV9hbHBoYSA9IGFscGhhOworICAgICAgICBtX2NvbnRleHQuYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fYmVnYW5MYXllcikKKyAgICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3Bh
cmVuY3lMYXllcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1f
Y29udGV4dDsKKyAgICBmbG9hdCBtX2FscGhhOworICAgIGJvb2wgbV9iZWdhbkxheWVyOworfTsK
KworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgeworcHVibGljOgorICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3N0YWNrU2l6ZShj
b250ZXh0LnN0YWNrU2l6ZSgpKQorICAgIHsgfQorCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRl
U3RhY2tDaGVja2VyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkg
IT0gbV9zdGFja1NpemUpCisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4
dCAlcCBzdGFjayBjaGFuZ2VkIGJ5ICVkIiwgJm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3Rh
Y2tTaXplKCkgLSAoaW50KW1fc3RhY2tTaXplKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3Jh
cGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CisgICAgdW5zaWduZWQgbV9zdGFja1NpemU7Cit9Owor
CitjbGFzcyBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgeworcHVibGljOgorICAgIGV4
cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlU
b1VzZSkKKyAgICAgICAgOiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAg
ICAgICwgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlZChpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5
OjpEZWZhdWx0ICYmIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRp
b25RdWFsaXR5VG9Vc2UpCisgICAgeworICAgICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0
eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpOworICAgIH0KKworICAgIGV4
cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgc3RkOjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJw
b2xhdGlvblF1YWxpdHkpCisgICAgICAgIDogSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
KGdyYXBoaWNzQ29udGV4dCwgaW50ZXJwb2xhdGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVh
bGl0eS52YWx1ZSgpIDogZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KSkKKyAgICB7CisgICAgfQorCisgICAgfkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigp
CisgICAgeworICAgICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAg
ICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1f
Y3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3Jh
cGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4dDsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eSBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICBib29sIG1faW50ZXJwb2xhdGlv
blF1YWxpdHlDaGFuZ2VkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCAx
NWRmMWRmZGI2ZjNhMTZhZDVlYWY2NDcyNjFmY2ZjNGI3YTkzYWI0Li41ZTkwNjE1YjNjNmYxYmJj
ZWE1NDhhMmRhY2FkNDVjYWRlYTA2YWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcApAQCAtMTY2LDYgKzE2NiwxMSBAQCBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lQ2FwIGNhcFN0eWxlKQogICAg
IHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
TGluZURhc2gpCit7CisgICAgcmV0dXJuIHRzOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBqb2luU3R5bGUpCiB7CiAgICAgc3dpdGNoIChqb2lu
U3R5bGUpIHsKQEAgLTE4Miw0ICsxODcsMjQgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgTGluZUpvaW4gam9pblN0eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSW50ZXJwb2xhdGlvblF1YWxpdHkp
Cit7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBUZXh0RHJhd2luZ01vZGUpCit7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVNb2RlKQoreworICAgIHJl
dHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgRHJv
cFNoYWRvdykKK3sKKyAgICByZXR1cm4gdHM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApp
bmRleCA0ZDIwNGU5N2U1YzU0NGQ3NzZiZmE3ZjMwYWFjYzFiN2M0NjNlMGUwLi5hMTkwODEyMGU4
ZjhjNGIwNTJmNTQwZTBmZmYzYjYyYTQ5YTU3ZjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw5IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIK
KyNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUg
PHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTczLDYgKzc2
LDc5IEBAIGVudW0gY2xhc3MgQmxlbmRNb2RlIDogdWludDhfdCB7CiAgICAgUGx1c0xpZ2h0ZXIK
IH07CiAKK3N0cnVjdCBDb21wb3NpdGVNb2RlIHsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBvcDsK
KyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENv
bXBvc2l0ZU1vZGUmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wID09IG90aGVyLm9w
ICYmIGJsZW5kTW9kZSA9PSBvdGhlci5ibGVuZE1vZGU7CisgICAgfQorICAgIAorICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVNb2RlPiBk
ZWNvZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29t
cG9zaXRlTW9kZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rl
ciA8PCBvcDsKKyAgICBlbmNvZGVyIDw8IGJsZW5kTW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gQ29tcG9zaXRlTW9kZTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVy
YXRvcj4gb3A7CisgICAgZGVjb2RlciA+PiBvcDsKKyAgICBpZiAoIW9wKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9k
ZTsKKyAgICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKKyAgICBpZiAoIWJsZW5kTW9kZSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm9wLCAqYmxlbmRNb2Rl
IH0gfTsKK30KKworc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAgICBlbnVtIGNs
YXNzIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNl
V2l0aEFsdGVybmF0aXZlcywKKyAgICAgICAgU3BlbGxpbmcsCisgICAgICAgIEdyYW1tYXIsCisg
ICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgICAgIERpY3RhdGlvbkFsdGVy
bmF0aXZlcworICAgIH0gbW9kZTsKKyAgICBib29sIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIHsg
ZmFsc2UgfTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3Rl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1vZGU7CisgICAg
ZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9w
dGlvbmFsPE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4g
c2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBw
ZWFyYW5jZTsKKyAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqbW9kZSwgKnNob3VsZFVzZURhcmtB
cHBlYXJhbmNlIH0gfTsKK30KKwogZW51bSBjbGFzcyBHcmFkaWVudFNwcmVhZE1ldGhvZCA6IHVp
bnQ4X3QgewogICAgIFBhZCwKICAgICBSZWZsZWN0LApAQCAtOTMsNiArMTY5LDQyIEBAIGVudW0g
Y2xhc3MgTGluZUNhcCA6IHVpbnQ4X3QgewogICAgIFNxdWFyZQogfTsKIAorc3RydWN0IExpbmVE
YXNoIHsKKyAgICBEYXNoQXJyYXkgZGFzaGVzOworICAgIGZsb2F0IG9mZnNldDsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGluZURhc2g+
IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExp
bmVEYXNoJiBhLCBjb25zdCBMaW5lRGFzaCYgYikKK3sKKyAgICByZXR1cm4gYS5kYXNoZXMgPT0g
Yi5kYXNoZXMgJiYgYS5vZmZzZXQgPT0gYi5vZmZzZXQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Cit2b2lkIExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sK
KyAgICBlbmNvZGVyIDw8IGRhc2hlczsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsKK30KKwordGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGluZURhc2g+IExpbmVEYXNoOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERhc2hBcnJheT4g
ZGFzaGVzOworICAgIGRlY29kZXIgPj4gZGFzaGVzOworICAgIGlmICghZGFzaGVzKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gb2Zmc2V0
OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpkYXNoZXMpLCAqb2Zm
c2V0IH0gfTsKK30KKwogZW51bSBjbGFzcyBMaW5lSm9pbiA6IHVpbnQ4X3QgewogICAgIE1pdGVy
LAogICAgIFJvdW5kLApAQCAtMTA1LDYgKzIxNyw3NiBAQCBlbnVtIEhvcml6b250YWxBbGlnbm1l
bnQgewogICAgIEFsaWduSENlbnRlcgogfTsKIAorLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1
cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisvLyBJdCBoYXMg
ZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xhc3MgU2hhZG93UmFk
aXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9OworCitzdHJ1Y3Qg
RHJvcFNoYWRvdyB7CisgICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICBmbG9hdCBibHVyUmFkaXVz
IHsgMCB9OworICAgIENvbG9yIGNvbG9yOworICAgIFNoYWRvd1JhZGl1c01vZGUgcmFkaXVzTW9k
ZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKKyAgICAKKyAgICBib29sIGlzVmlzaWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBpc0JsdXJy
ZWQoKSBjb25zdCB7IHJldHVybiBpc1Zpc2libGUoKSAmJiBibHVyUmFkaXVzOyB9CisgICAgYm9v
bCBoYXNPdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gaXNCbHVycmVkKCkgfHwgKGlzVmlzaWJsZSgp
ICYmICFvZmZzZXQuaXNaZXJvKCkpOyB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IGRlY29kZShEZWNvZGVyJik7Cit9
OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERyb3BTaGFkb3cmIGEsIGNvbnN0IERy
b3BTaGFkb3cmIGIpCit7CisgICAgcmV0dXJuIGEub2Zmc2V0ID09IGIub2Zmc2V0ICYmIGEuYmx1
clJhZGl1cyA9PSBiLmJsdXJSYWRpdXMgJiYgYS5jb2xvciA9PSBiLmNvbG9yICYmIGEucmFkaXVz
TW9kZSA9PSBiLnJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IERyb3BTaGFkb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgb2Zmc2V0OworICAgIGVuY29kZXIgPDwgYmx1clJhZGl1czsKKyAgICBlbmNvZGVyIDw8
IGNvbG9yOworICAgIGVuY29kZXIgPDwgcmFkaXVzTW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gRHJvcFNoYWRvdzo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IG9mZnNldDsK
KyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJsdXJSYWRpdXM7Cisg
ICAgZGVjb2RlciA+PiBibHVyUmFkaXVzOworICAgIGlmICghYmx1clJhZGl1cykKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGNvbG9yOwor
ICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4gcmFkaXVz
TW9kZTsKKyAgICBkZWNvZGVyID4+IHJhZGl1c01vZGU7CisgICAgaWYgKCFyYWRpdXNNb2RlKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb2Zmc2V0LCAq
Ymx1clJhZGl1cywgKmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07Cit9CisKK2VudW0gU3Ryb2tlU3R5
bGUgeworICAgIE5vU3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tlLAorICAgIERvdHRlZFN0cm9rZSwK
KyAgICBEYXNoZWRTdHJva2UsCisgICAgRG91YmxlU3Ryb2tlLAorICAgIFdhdnlTdHJva2UsCit9
OworCiBlbnVtIFRleHRCYXNlbGluZSB7CiAgICAgQWxwaGFiZXRpY1RleHRCYXNlbGluZSwKICAg
ICBUb3BUZXh0QmFzZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwyOCBAQCBlbnVtIFRleHRBbGlnbiB7
CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLVN0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUo
V2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1TdHJpbmcg
YmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwotYm9vbCBwYXJzZUJsZW5kTW9kZShj
b25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKLWJvb2wgcGFyc2VDb21wb3NpdGVB
bmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9y
JiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CitlbnVtIGNsYXNzIFRleHREcmF3aW5nTW9kZSA6IHVp
bnQ4X3QgeworICAgIEZpbGwgPSAxIDw8IDAsCisgICAgU3Ryb2tlID0gMSA8PCAxLAorfTsKIAot
V0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3Ip
OwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0
cmVhbSYsIFdpbmRSdWxlKTsKK3VzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0gT3B0aW9uU2V0
PFRleHREcmF3aW5nTW9kZT47CisKK1N0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CitTdHJpbmcgYmxlbmRNb2RlTmFtZShCbGVuZE1vZGUp
OworYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBCbGVuZE1vZGUmKTsKK2Jvb2wg
cGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENvbXBvc2l0ZU9w
ZXJhdG9yJiwgQmxlbmRNb2RlJik7CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBCbGVuZE1vZGUpOworV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENvbXBvc2l0ZU9w
ZXJhdG9yKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBDb21wb3NpdGVNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSk7
CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgTGluZUNhcCk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZURhc2gpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVKb2luKTsKK1dFQkNPUkVf
RVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBUZXh0
RHJhd2luZ01vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBEcm9wU2hhZG93KTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCkBAIC0yMTksNCArNDEzLDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6TGluZUpvaW4+IHsKICAgICA+OwogfTsKIAordGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4geworICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCisgICAgV2ViQ29y
ZTo6U3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xp
ZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAorICAgIFdl
YkNvcmU6OlN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5
bGU6OkRvdWJsZVN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQor
ICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHRE
cmF3aW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdl
YkNvcmU6OlRleHREcmF3aW5nTW9kZSwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2Rl
OjpGaWxsLAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQorICAgID47
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpNb2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKKyAgICBXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNl
V2l0aEFsdGVybmF0aXZlcywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
TW9kZTo6U3BlbGxpbmcsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1v
ZGU6OkdyYW1tYXIsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6
OkF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlcworICAgID47Cit9OworCiB9IC8v
IG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IDRlMDcxZjcyZjM1
YmU4YTU4ZmM0Y2Q1NzdhMTQ1NmRlMTc0NjY4MmMuLjQxYjA1MTFhOGY3OGExNzliMzA0Y2Y4OWQ0
MTAzZTM1ZGUzZTEyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcApAQCAtNDQsNyArNDQs
NyBAQCBJbWFnZURyYXdSZXN1bHQgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRgogewogI2lmIFVTRShORVdfVEhFTUUpIHx8IFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMu
Y29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5z
ZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJs
ZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRy
YW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBz
cmNSZWN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL051bGxHcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL051bGxHcmFwaGljc0NvbnRleHQuaAppbmRleCBiNjIzNjc4ODBlM2U1MzU0YjYxNzExMzQ3
YzlhMTFiNDIyNDY4ODVlLi5kNjdkM2VhMTE1ZDI0ZWZkOTA5ZTAzYWM5YWRlOTNhOGI0NzY0ZmM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhp
Y3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdy
YXBoaWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM4LDg3ICszOCw1NyBAQCBwdWJsaWM6CiAgICAgICAgIERldGVjdGlu
Z0NvbnRlbnRmdWxQYWludAogICAgIH07CiAKLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0KFBhaW50
SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQotICAgICAgICA6IG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zKHJlYXNvbnMpCisgICAgTnVsbEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwLCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgcmVhc29ucykKKyAgICAg
ICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENsaXApCisgICAgICAgICwgbV9wYWludEludmFs
aWRhdGlvblJlYXNvbnMocmVhc29ucykKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFVT
RShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9Ci0gICAg
Ym9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSNl
bmRpZgotCiAgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIGJvb2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpOb25lOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludElu
dmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsgfQogICAgIGJvb2wg
aW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlczsgfQogICAgIGJvb2wgZGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVs
UGFpbnQ7IH0KIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWwgeyB9
Ci0KLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBm
aW5hbCB7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3U3lz
dGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH07Ci0KLSAg
ICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9Ci0K
LSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KLQor
ICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQor
ICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbCB7IH07CiAjaWYgVVNFKENHKQogICAg
IHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBhcHBseUZpbGxQ
YXR0ZXJuKCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwg
eyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
PSAxKSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5h
bCB7IH0KLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFs
IHsgfQotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6
OkV2ZW5PZGQpIGZpbmFsIHsgfQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWwg
eyByZXR1cm4gcmVjdDsgfQotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wgPSBmYWxzZSwgU3Ryb2tl
U3R5bGUgPSBTb2xpZFN0cm9rZSkgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVD
YXApIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxv
YXQpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsIHsgfQot
ICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYp
IGZpbmFsIHsgfQotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIHRy
YW5zbGF0ZShmbG9hdCwgZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVk
ZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHsgfTsgfQotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
IHsgfQorICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWwgeyB9Cisg
ICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsIHsgfQorCiAgICAgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0
aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQogICAgIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNhdmUoKSBmaW5hbCB7
IH0KLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZHJhd1JhaXNlZEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpIGZpbmFs
IHsgfQorICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBj
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsg
fQogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+ID0gc3RkOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUp
IGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFs
IHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYs
IHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQpIGZp
bmFsIHsgfQotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWwg
eyB9CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICAKKyAgICB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7
IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IElt
YWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1
bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgZmluYWwgeyB9CiAKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVk
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KLSAg
ICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBJbWFnZTo6VGlsZVJ1bGUsIElt
YWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7
IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICB2b2lkIGRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYp
IGZpbmFsIHsgfQpAQCAtMTI3LDI4ICs5NywyNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENv
bG9yJikgZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotCi0g
ICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsg
fQotICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBm
aW5hbCB7IH0KLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIEdyYWRpZW50JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1v
ZGU6Ok5vcm1hbCkgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5v
cm1hbCkgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7
IH0KLQorICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29u
c3QgRmxvYXRSZWN0JiwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9CiAjaWYgRU5BQkxFKFZJREVPKQog
ICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JikgZmluYWwgeyB9CiAjZW5kaWYKIAorICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERh
c2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpIGZpbmFsIHsgfQorCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5h
bCB7IHJldHVybiByZWN0OyB9CisKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQogICAg
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLXByaXZhdGU6CiAg
ICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45ZjI0NTVlZjU4Nzk0YWQ2OTJlYmU2NTg3ZTAzMWE4OWZmMDE3
MTExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCA9IHN0cnVjdCBDR0NvbnRleHQ7CisjZWxpZiBVU0UoQ0FJUk8pCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsKK30KK3VzaW5nIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0Q2Fpcm87CisjZWxzZQordXNpbmcgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQgPSB2b2lkOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5k
ZXggYmIxMzhiNTI5N2E1MjFmYmY3ZDY5M2NkMTE0MTA0NDAwZmNhYmM0ZS4uOTAyNGY1ZDFhYmZj
ZTM4MDgxODNhM2IyMzFmYmNlMGZmYjJmZjQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTE5MSwxNyArMTkxLDE3IEBAIFNoYWRv
d0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0LCBjb25zdCBDCiAgICAgdXBkYXRlU2hhZG93Qmx1clZhbHVlcygpOwogfQogCi1T
aGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkK
LSAgICA6IG1fY29sb3Ioc3RhdGUuc2hhZG93Q29sb3IpCi0gICAgLCBtX2JsdXJSYWRpdXMoc3Rh
dGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Qmx1cikKLSAgICAsIG1fb2Zmc2V0KHN0YXRlLnNo
YWRvd09mZnNldCkKLSAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IERyb3BTaGFk
b3cmIGRyb3BTaGFkb3csIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCisgICAgOiBtX2Nv
bG9yKGRyb3BTaGFkb3cuY29sb3IpCisgICAgLCBtX2JsdXJSYWRpdXMoZHJvcFNoYWRvdy5ibHVy
UmFkaXVzLCBkcm9wU2hhZG93LmJsdXJSYWRpdXMpCisgICAgLCBtX29mZnNldChkcm9wU2hhZG93
Lm9mZnNldCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpCiB7CiAjaWYgVVNFKENHKQogICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0
bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEw
MzQ0Mj4pLAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZp
b3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAgIGlmIChzdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgewotICAgICAgICBmbG9h
dCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7Cisg
ICAgaWYgKGRyb3BTaGFkb3cucmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kp
IHsKKyAgICAgICAgZmxvYXQgc2hhZG93Qmx1ciA9IHJhZGl1c1RvTGVnYWN5UmFkaXVzKGRyb3BT
aGFkb3cuYmx1clJhZGl1cyk7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFk
b3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAppbmRleCAxNGZkODNlZGUxYTFiYWNmMTc3ZjMz
MWVjYWQxYTQzMDI5M2Y2MDNhLi40NWQwZTU4MzI5Y2RlZWFiZmI3OGE0ZDVlNjdhYjhkODgxYWU1
NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5o
CkBAIC0zOCw4ICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlOworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK3N0
cnVjdCBEcm9wU2hhZG93OwogCiBjbGFzcyBTaGFkb3dCbHVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTaGFkb3dCbHVyKTsKQEAgLTUyLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgU2hh
ZG93Qmx1cigpOwogICAgIFNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgPSBmYWxzZSk7Ci0gICAgU2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYpOworICAgIFNoYWRvd0JsdXIoY29uc3QgRHJvcFNoYWRvdyYsIGJvb2wgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAKICAgICB2b2lkIHNldFNoYWRvd1ZhbHVlcyhjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmICwgY29uc3QgQ29sb3ImLCBib29sIGlnbm9yZVRy
YW5zZm9ybXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJydXNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTYzZTVmYzMyZTc5OWVhYTAxYTNkMzVi
OGM2N2IwNWRmYTJkMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNvdXJjZUJydXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU291cmNl
QnJ1c2g6OlNvdXJjZUJydXNoKGNvbnN0IENvbG9yJiBjb2xvciwgc3RkOjpvcHRpb25hbDxCcnVz
aD4mJiBicnVzaCkKKyAgICA6IG1fY29sb3IoY29sb3IpCisgICAgLCBtX2JydXNoKFdURk1vdmUo
YnJ1c2gpKQoreworfQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFNvdXJjZUJydXNoOjpzcGFj
ZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEFmZmluZVRy
YW5zZm9ybT4gaWRlbnRpdHk7CisgICAgcmV0dXJuIG1fYnJ1c2ggPyBtX2JydXNoLT5zcGFjZVRy
YW5zZm9ybSA6IGlkZW50aXR5LmdldCgpOworfQorCitHcmFkaWVudCogU291cmNlQnJ1c2g6Omdy
YWRpZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIGlmIChhdXRvKiBncmFkaWVudCA9IHN0ZDo6Z2V0X2lmPFJlZjxHcmFkaWVudD4+
KCZtX2JydXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBncmFkaWVudC0+cHRyKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK1BhdHRlcm4qIFNvdXJjZUJydXNoOjpwYXR0ZXJuKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
IChhdXRvKiBwYXR0ZXJuID0gc3RkOjpnZXRfaWY8UmVmPFBhdHRlcm4+PigmbV9icnVzaC0+YnJ1
c2gpKQorICAgICAgICByZXR1cm4gcGF0dGVybi0+cHRyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgU291cmNlQnJ1c2g6OnNldEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFk
aWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkKK3sKKyAgICBtX2Jy
dXNoID0geyBXVEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKwordm9pZCBT
b3VyY2VCcnVzaDo6c2V0UGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQoreworICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUo
cGF0dGVybiksIHNwYWNlVHJhbnNmb3JtIH07Cit9CisKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgU291cmNlQnJ1c2gpCit7CisgICAgcmV0dXJuIHRzOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU291cmNlQnJ1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTE1YmIwZGYzZDk5MzhmYzgzZWRiNTg3
YWVkYjA1MWQwYmViYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU291cmNlQnJ1c2ggeworcHVibGljOgor
ICAgIHN0cnVjdCBCcnVzaCB7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBS
ZWY8UGF0dGVybj4+IGJydXNoOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gc3BhY2VUcmFuc2Zv
cm07CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxCcnVzaD4gZGVjb2RlKERlY29kZXImKTsKKyAgICB9OworCisgICAgU291
cmNlQnJ1c2goKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgU291cmNlQnJ1c2goY29u
c3QgQ29sb3ImLCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYmID0gc3RkOjpudWxsb3B0KTsKKworICAg
IGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICB2b2lk
IHNldENvbG9yKGNvbnN0IENvbG9yIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQorCisgICAg
Y29uc3Qgc3RkOjpvcHRpb25hbDxCcnVzaD4mIGJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9icnVz
aDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgR3JhZGllbnQqIGdyYWRpZW50KCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgUGF0dGVybiogcGF0dGVybigpIGNvbnN0OworICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIHZvaWQgc2V0R3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNm
b3JtID0geyB9KTsKKyAgICB2b2lkIHNldFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworCisgICAgYm9vbCBpc1ByaW1p
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2JydXNoICYmIG1fY29sb3IudHJ5R2V0QXNTUkdCQUJ5
dGVzKCk7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxTb3VyY2VCcnVzaD4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBDb2xv
ciBtX2NvbG9yIHsgQ29sb3I6OmJsYWNrIH07CisgICAgc3RkOjpvcHRpb25hbDxCcnVzaD4gbV9i
cnVzaDsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjp2YXJpYW50PFJl
ZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGEsIGNvbnN0IHN0ZDo6dmFyaWFudDxSZWY8R3Jh
ZGllbnQ+LCBSZWY8UGF0dGVybj4+JiBiKQoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGEs
CisgICAgICAgIFsmXSAoY29uc3QgUmVmPEdyYWRpZW50PiYgYUdyYWRpZW50KSB7CisgICAgICAg
ICAgICBpZiAoYXV0byogYkdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdyYWRpZW50Pj4oJmIp
KQorICAgICAgICAgICAgICAgIHJldHVybiBhR3JhZGllbnQgPT0gKmJHcmFkaWVudDsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8
UGF0dGVybj4mIGFQYXR0ZXJuKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYlBhdHRlcm4gPSBz
dGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYVBh
dHRlcm4gPT0gKmJQYXR0ZXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaDo6
QnJ1c2gmIGEsIGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYikKK3sKKyAgICByZXR1cm4gYS5i
cnVzaCA9PSBiLmJydXNoICYmIGEuc3BhY2VUcmFuc2Zvcm0gPT0gYi5zcGFjZVRyYW5zZm9ybTsK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaCYgYSwgY29uc3Qg
U291cmNlQnJ1c2gmIGIpCit7CisgICAgcmV0dXJuIGEuY29sb3IoKSA9PSBiLmNvbG9yKCkgJiYg
YS5icnVzaCgpID09IGIuYnJ1c2goKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4K
K3ZvaWQgU291cmNlQnJ1c2g6OkJydXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVyIDw8IHNwYWNlVHJhbnNmb3JtOworICAgIFdURjo6c3dpdGNoT24oYnJ1
c2gsCisgICAgICAgIFsmXSAoY29uc3QgUmVmPEdyYWRpZW50PiYgZ3JhZGllbnQpIHsKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgdHJ1ZSA8PCBncmFkaWVudC5nZXQoKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgWyZdIChjb25zdCBSZWY8UGF0dGVybj4mIHBhdHRlcm4pIHsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgZmFsc2UgPDwgcGF0dGVybi5nZXQoKTsKKyAgICAgICAgfQorICAgICk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoOjpC
cnVzaD4gU291cmNlQnJ1c2g6OkJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gc3BhY2VUcmFuc2Zvcm07CisgICAgZGVj
b2RlciA+PiBzcGFjZVRyYW5zZm9ybTsKKyAgICBpZiAoIXNwYWNlVHJhbnNmb3JtKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBoYXNHcmFk
aWVudDsKKyAgICBkZWNvZGVyID4+IGhhc0dyYWRpZW50OworICAgIGlmICghaGFzR3JhZGllbnQp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgaWYgKCpoYXNHcmFkaWVu
dCkgeworICAgICAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsK
KyAgICAgICAgaWYgKCFncmFkaWVudCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgICAgIHJldHVybiB7IHsgV1RGTW92ZSgqZ3JhZGllbnQpLCAqc3BhY2VUcmFuc2Zvcm0g
fSB9OworICAgIH0KKworICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVy
KTsKKyAgICBpZiAoIXBhdHRlcm4pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
cmV0dXJuIHsgeyBXVEZNb3ZlKCpwYXR0ZXJuKSwgKnNwYWNlVHJhbnNmb3JtIH0gfTsKK30KKwor
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU291cmNlQnJ1c2g6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVy
IDw8IG1fYnJ1c2g7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFs
PFNvdXJjZUJydXNoPiBTb3VyY2VCcnVzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7CisgICAgZGVjb2RlciA+PiBjb2xvcjsKKyAg
ICBpZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxzdGQ6Om9wdGlvbmFsPEJydXNoPj4gYnJ1c2g7CisgICAgZGVjb2RlciA+PiBicnVz
aDsKKyAgICBpZiAoIWJydXNoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
cmV0dXJuIFNvdXJjZUJydXNoKCpjb2xvciwgV1RGTW92ZSgqYnJ1c2gpKTsKK30KKworV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFNvdXJjZUJydXNoKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UZXh0Qm94SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBj
ZjY1YmEyYzEwZTg4ODhkZDQ5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRleHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBU
ZXh0Qm94SXRlcmF0b3IgeworcHVibGljOgorICAgIFRleHRCb3hJdGVyYXRvcigpCisgICAgICAg
IDogbV90ZXh0UnVuKDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisg
ICAgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNl
dCkKKyAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKKyAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CisgICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBi
b29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3Rl
eHRSdW4tPmxlbmd0aCgpOyB9CisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgq
bV90ZXh0UnVuKVttX29mZnNldF07IH0KKyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBj
b25zdCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9u
KGN1cnJlbnQoKSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVy
Lm1fb2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4q
IG1fdGV4dFJ1bjsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IGNhMjVmYjNkOGE4MDFmMzAyZGZlZTFmYmI5ZTY2
NTNmYTE2OWY5OGUuLjAwNjYzOGEzZGMxMGNhZDI0MWRkYjQwMzQ2MDE1NTQxMTdiZWVkYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcApAQCAtMTgzMyw3ICsxODMzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6
OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBU
cmEKICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4o
KSwgc2l6ZSgpKTsKIAotICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQo
Km1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZp
bmVUcmFuc2Zvcm0oKSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4
dCgqbV9kaXNwbGF5TGlzdCwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAg
ICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1
NmEyM2E1ZmRmYjEwYWZlY2EyY2M5MmE3Mjc5NDU4MTAyZS4uOGFlMWI1ZmE5ZmVlNTMwODM1ZTdm
NmEyNTcwN2M4NDM0MTc3MDUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC00NDYsMTcgKzQ0
NiwxNiBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3Ju
ZXJzKGJvb2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAKLXZv
aWQgc2V0U3Ryb2tlVGhpY2tuZXNzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJv
X3QqIGNyIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQogewotICAgIGNh
aXJvX3NldF9saW5lX3dpZHRoKHBsYXRmb3JtQ29udGV4dC5jcigpLCBzdHJva2VUaGlja25lc3Mp
OworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MpOwogfQogCi12
b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQs
IFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiBj
ciwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBk
YXNoUGF0dGVybltdID0geyA1LjAsIDUuMCB9OwogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG90
UGF0dGVybltdID0geyAxLjAsIDEuMCB9OwogCi0gICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNv
bnRleHQuY3IoKTsKICAgICBzd2l0Y2ggKHN0cm9rZVN0eWxlKSB7CiAgICAgY2FzZSBOb1N0cm9r
ZToKICAgICAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB3YXkgdG8gZW11bGF0ZSBOb1N0
cm9rZT8KQEAgLTQ3NywyOSArNDc2LDI5IEBAIHZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5CiAgICAg
fQogfQogCi12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYg
cGxhdGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiBj
ciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQogewotICAgIGNhaXJvX3NldF9vcGVyYXRvcihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgdG9D
YWlyb09wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CisgICAgY2Fpcm9f
c2V0X29wZXJhdG9yKGNyLCB0b0NhaXJvT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBibGVu
ZE1vZGUpKTsKIH0KIAotdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0Q2Fp
cm8mIHBsYXRmb3JtQ29udGV4dCwgYm9vbCBlbmFibGUpCit2b2lkIHNldFNob3VsZEFudGlhbGlh
cyhjYWlyb190KiBjciwgYm9vbCBlbmFibGUpCiB7CiAgICAgLy8gV2hlbiB0cnVlLCB1c2UgdGhl
IGRlZmF1bHQgQ2Fpcm8gYmFja2VuZCBhbnRpYWxpYXMgbW9kZSAodXN1YWxseSB0aGlzCiAgICAg
Ly8gZW5hYmxlcyBzdGFuZGFyZCAnZ3JheXNjYWxlJyBhbnRpYWxpYXNpbmcpOyBmYWxzZSB0byBl
eHBsaWNpdGx5IGRpc2FibGUKICAgICAvLyBhbnRpYWxpYXNpbmcuCi0gICAgY2Fpcm9fc2V0X2Fu
dGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQuY3IoKSwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RF
RkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhj
ciwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9O
RSk7CiB9CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBzZXRDVE0oY2Fpcm9f
dCogY3IsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGNvbnN0IGNh
aXJvX21hdHJpeF90IG1hdHJpeCA9IHRvQ2Fpcm9NYXRyaXgodHJhbnNmb3JtKTsKLSAgICBjYWly
b19zZXRfbWF0cml4KHBsYXRmb3JtQ29udGV4dC5jcigpLCAmbWF0cml4KTsKKyAgICBjYWlyb19z
ZXRfbWF0cml4KGNyLCAmbWF0cml4KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQorQWZmaW5lVHJhbnNmb3JtIGdldENU
TShjYWlyb190KiBjcikKIHsKICAgICBjYWlyb19tYXRyaXhfdCBtOwotICAgIGNhaXJvX2dldF9t
YXRyaXgocGxhdGZvcm1Db250ZXh0LmNyKCksICZtKTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNy
LCAmbSk7CiAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybShtLnh4LCBtLnl4LCBtLnh5LCBtLnl5
LCBtLngwLCBtLnkwKTsKIH0KIApAQCAtNjIyLDcgKzYyMSw3IEBAIGJvb2wgU2hhZG93U3RhdGU6
OmlzUmVxdWlyZWQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBzZXRMaW5lQ2FwKEdyYXBoaWNzQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVDYXAgbGluZUNhcCkKK3ZvaWQgc2V0TGluZUNhcChj
YWlyb190KiBjciwgTGluZUNhcCBsaW5lQ2FwKQogewogICAgIGNhaXJvX2xpbmVfY2FwX3QgY2Fp
cm9DYXAgeyB9OwogICAgIHN3aXRjaCAobGluZUNhcCkgewpAQCAtNjM2LDE4ICs2MzUsMTggQEAg
dm9pZCBzZXRMaW5lQ2FwKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIExp
bmVDYXAgbGluZUNhcCkKICAgICAgICAgY2Fpcm9DYXAgPSBDQUlST19MSU5FX0NBUF9TUVVBUkU7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYWlyb19zZXRfbGluZV9jYXAocGxhdGZvcm1D
b250ZXh0LmNyKCksIGNhaXJvQ2FwKTsKKyAgICBjYWlyb19zZXRfbGluZV9jYXAoY3IsIGNhaXJv
Q2FwKTsKIH0KIAotdm9pZCBzZXRMaW5lRGFzaChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3Zv
aWQgc2V0TGluZURhc2goY2Fpcm9fdCogY3IsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9h
dCBkYXNoT2Zmc2V0KQogewogICAgIGlmIChzdGQ6OmFsbF9vZihkYXNoZXMuYmVnaW4oKSwgZGFz
aGVzLmVuZCgpLCBbXShhdXRvJiBkYXNoKSB7IHJldHVybiAhZGFzaDsgfSkpCi0gICAgICAgIGNh
aXJvX3NldF9kYXNoKHBsYXRmb3JtQ29udGV4dC5jcigpLCAwLCAwLCAwKTsKKyAgICAgICAgY2Fp
cm9fc2V0X2Rhc2goY3IsIDAsIDAsIDApOwogICAgIGVsc2UKLSAgICAgICAgY2Fpcm9fc2V0X2Rh
c2gocGxhdGZvcm1Db250ZXh0LmNyKCksIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCksIGRh
c2hPZmZzZXQpOworICAgICAgICBjYWlyb19zZXRfZGFzaChjciwgZGFzaGVzLmRhdGEoKSwgZGFz
aGVzLnNpemUoKSwgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUpvaW4gbGluZUpvaW4pCit2b2lkIHNl
dExpbmVKb2luKGNhaXJvX3QqIGNyLCBMaW5lSm9pbiBsaW5lSm9pbikKIHsKICAgICBjYWlyb19s
aW5lX2pvaW5fdCBjYWlyb0pvaW4geyB9OwogICAgIHN3aXRjaCAobGluZUpvaW4pIHsKQEAgLTY2
MSwxMiArNjYwLDEyIEBAIHZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBs
YXRmb3JtQ29udGV4dCwgTGluZUpvaW4gbGluZUpvaW4pCiAgICAgICAgIGNhaXJvSm9pbiA9IENB
SVJPX0xJTkVfSk9JTl9CRVZFTDsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3Nl
dF9saW5lX2pvaW4ocGxhdGZvcm1Db250ZXh0LmNyKCksIGNhaXJvSm9pbik7CisgICAgY2Fpcm9f
c2V0X2xpbmVfam9pbihjciwgY2Fpcm9Kb2luKTsKIH0KIAotdm9pZCBzZXRNaXRlckxpbWl0KEdy
YXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IG1pdGVyTGltaXQpCit2
b2lkIHNldE1pdGVyTGltaXQoY2Fpcm9fdCogY3IsIGZsb2F0IG1pdGVyTGltaXQpCiB7Ci0gICAg
Y2Fpcm9fc2V0X21pdGVyX2xpbWl0KHBsYXRmb3JtQ29udGV4dC5jcigpLCBtaXRlckxpbWl0KTsK
KyAgICBjYWlyb19zZXRfbWl0ZXJfbGltaXQoY3IsIG1pdGVyTGltaXQpOwogfQogCiB2b2lkIGZp
bGxSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU2hhZG93U3Rh
dGUmIHNoYWRvd1N0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAppbmRleCA1NDk4NTYzY2U0OWMxNWUzNWQw
ODI1OWMyZDI2ZGM3YjE3Y2VhODg1Li44N2VjYzIwNThkNGE3NWQzM2RkZDIxMmVkODg3N2U4ZDNh
OGE3OGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb09wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaApAQCAtNTQsMTQgKzU0LDE0IEBAIG5hbWVzcGFjZSBD
YWlybyB7CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAKLXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKEdy
YXBoaWNzQ29udGV4dENhaXJvJiwgZmxvYXQpOwotdm9pZCBzZXRTdHJva2VTdHlsZShHcmFwaGlj
c0NvbnRleHRDYWlybyYsIFN0cm9rZVN0eWxlKTsKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNh
aXJvX3QqLCBmbG9hdCk7Cit2b2lkIHNldFN0cm9rZVN0eWxlKGNhaXJvX3QqLCBTdHJva2VTdHls
ZSk7CiAKLXZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKEdyYXBoaWNzQ29udGV4dENhaXJvJiwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7Ci12b2lkIHNldFNob3VsZEFudGlhbGlhcyhH
cmFwaGljc0NvbnRleHRDYWlybyYsIGJvb2wpOwordm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24o
Y2Fpcm9fdCosIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwordm9pZCBzZXRTaG91bGRB
bnRpYWxpYXMoY2Fpcm9fdCosIGJvb2wpOwogCi12b2lkIHNldENUTShHcmFwaGljc0NvbnRleHRD
YWlybyYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotQWZmaW5lVHJhbnNmb3JtIGdldENUTShH
cmFwaGljc0NvbnRleHRDYWlybyYpOwordm9pZCBzZXRDVE0oY2Fpcm9fdCosIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOworQWZmaW5lVHJhbnNmb3JtIGdldENUTShjYWlyb190Kik7CiAKIEludFJl
Y3QgZ2V0Q2xpcEJvdW5kcyhHcmFwaGljc0NvbnRleHRDYWlybyYpOwogRmxvYXRSZWN0IHJvdW5k
VG9EZXZpY2VQaXhlbHMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmKTsK
QEAgLTEyNSwxMCArMTI1LDEwIEBAIHN0cnVjdCBTaGFkb3dTdGF0ZSB7CiAgICAgQ29tcG9zaXRl
T3BlcmF0b3IgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291
cmNlT3ZlciB9OwogfTsKIAotdm9pZCBzZXRMaW5lQ2FwKEdyYXBoaWNzQ29udGV4dENhaXJvJiwg
TGluZUNhcCk7Ci12b2lkIHNldExpbmVEYXNoKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3Qg
RGFzaEFycmF5JiwgZmxvYXQpOwotdm9pZCBzZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWly
byYsIExpbmVKb2luKTsKLXZvaWQgc2V0TWl0ZXJMaW1pdChHcmFwaGljc0NvbnRleHRDYWlybyYs
IGZsb2F0KTsKK3ZvaWQgc2V0TGluZUNhcChjYWlyb190KiwgTGluZUNhcCk7Cit2b2lkIHNldExp
bmVEYXNoKGNhaXJvX3QqLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7Cit2b2lkIHNldExpbmVK
b2luKGNhaXJvX3QqLCBMaW5lSm9pbik7Cit2b2lkIHNldE1pdGVyTGltaXQoY2Fpcm9fdCosIGZs
b2F0KTsKIAogdm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZpbGxTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwogdm9pZCBmaWxs
UmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JiwgY29uc3QgU2hhZG93U3RhdGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRl
eCBjMzIzMDQ0NTM1MWIwM2YyYWE4NzM2YWVlMmJjZTc4YmM0MzYxZjQ5Li5iZjcxZTNlYjE5NTg2
YTZkOTk0MGIwZmE3M2VmMjkwZjJkZWE5MmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCkBAIC04NiwxMCArODYsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dENhaXJvOjpoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVk
ZVNjYWxlKSBjb25zdAorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVy
aW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTY2FsZSk7Ci0gICAg
cmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0
dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgp
KSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZDsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdApAQCAtMTM0LDUzICsxMzMsMTEwIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogICAgIGNhaXJvX3Jlc3RvcmUobV9jci5nZXQoKSk7
CiB9CiAKLS8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIu
Ci12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFw
cGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KCp0aGlzLCBy
ZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUs
IHN0YXRlLnN0cm9rZUNvbG9yKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gY2hhbmdlIDogc3RhdGUoKS5jaGFuZ2VzKCkpIHsK
KyAgICAgICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpDVE06CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENUTShtX2Ny
LmdldCgpLCBzdGF0ZSgpLmdldENUTSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAg
ICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9jci5nZXQoKSwgc3Rk
OjptYXgoc3RhdGUoKS5zdHJva2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0
eWxlOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX2NyLmdldCgp
LCBzdGF0ZSgpLnN0cm9rZVN0eWxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAgICAgICAgICAg
Q2Fpcm86OnNldExpbmVDYXAobV9jci5nZXQoKSwgc3RhdGUoKS5saW5lQ2FwKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpMaW5lSm9pbjoKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihtX2NyLmdldCgpLCBz
dGF0ZSgpLmxpbmVKb2luKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaDoKKyAgICAgICAgICAgIENhaXJv
OjpzZXRMaW5lRGFzaChtX2NyLmdldCgpLCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0
ZSgpLmxpbmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoKKyAgICAgICAgICAg
IENhaXJvOjpzZXRNaXRlckxpbWl0KG1fY3IuZ2V0KCksIHN0YXRlKCkubWl0ZXJMaW1pdCgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6Q29tcG9zaXRlTW9kZToKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG1fY3IuZ2V0KCksIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9wLCBz
dGF0ZSgpLmNvbXBvc2l0ZU1vZGUoKS5ibGVuZE1vZGUpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcm9wU2hhZG93Ogor
ICAgICAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgICAg
ICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lh
dGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAgICAgLy8gV2Ug
ZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZ
IGF4aXMKKyAgICAgICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cgPSB0aGlzLT5kcm9wU2hhZG93
KCk7CisgICAgICAgICAgICAgICAgZHJvcFNoYWRvdy5vZmZzZXQgPSB7IGRyb3BTaGFkb3cub2Zm
c2V0LndpZHRoKCksIC1kcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQoKSB9OworICAgICAgICAgICAg
ICAgIHNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNo
b3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFs
aWFzKG1fY3IuZ2V0KCksIHN0YXRlKCkuc2hvdWxkQW50aWFsaWFzKCkpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgY2xlYXJTdGF0ZUNoYW5nZXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkK
IHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0
Zm9ybUltYWdlKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RS
ZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
fSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIEdyYXBoaWNz
Q29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBDYWlybzo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7CiB9CiAKLS8vIFRoaXMgaXMgb25s
eSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0
cm9rZSkKLSAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKKyAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMpOworfQog
Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZSgq
dGhpcywgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xv
ciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIENhaXJvOjpjbGlwKCp0aGlzLCByZWN0
KTsKIH0KIAotLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBj
aXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCp0aGlzLCBy
ZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xv
ciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRo
KHBhdGgsIGNsaXBSdWxlKTsKKyAgICBDYWlybzo6Y2xpcFBhdGgoKnRoaXMsIHBhdGgsIGNsaXBS
dWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpG
aWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgQ2Fpcm86
OmNsaXBPdXQoKnRoaXMsIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpj
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywgbmF0
aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOworfQogCi0gICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VQYXRoKCp0aGlzLCBw
YXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIENhaXJvOjpjbGVhclJlY3QoKnRoaXMsIHJlY3QpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBA
IC0yMTYsMTIzICsyNzIsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEMKICAgICBDYWlybzo6
U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqdGhpcywgcHJldmlvdXNPcGVyYXRvciwgQmxl
bmRNb2RlOjpOb3JtYWwpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIGNsaXBSdWxlKQotewotICAgIENhaXJvOjpjbGlwUGF0aCgqdGhpcywgcGF0aCwg
Y2xpcFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwQm91bmRz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0
Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
Ci17Ci0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCp0
aGlzLCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotI2lm
IFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQotICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRG
b2N1cygqdGhpcywgcGF0aCwgY29sb3IpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgcmV0dXJuOwotI2Vsc2UKLSAgICBDYWlybzo6ZHJh
d0ZvY3VzUmluZygqdGhpcywgcGF0aCwgd2lkdGgsIGNvbG9yKTsKLSNlbmRpZgotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSNpZiBQTEFURk9STShX
UEUpIHx8IFBMQVRGT1JNKEdUSykKLSAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMs
IHJlY3RzLCBjb2xvcik7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLSAgICByZXR1cm47Ci0jZWxzZQotICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5n
KCp0aGlzLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKLSNlbmRpZgorICAgIENhaXJvOjpmaWxsUm91
bmRlZFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKKyAgICBp
ZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIENhaXJvOjpkcmF3TGlu
ZXNGb3JUZXh0KCp0aGlzLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIENhaXJvOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKCp0aGlzLCByZWN0LCBzdHlsZSk7Ci19Ci0KLUZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHJv
dW5kaW5nTW9kZSk7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVs
cygqdGhpcywgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIENhaXJvOjp0cmFuc2xhdGUoKnRoaXMsIHgsIHkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tl
VGhpY2tuZXNzKCp0aGlzLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBDYWly
bzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKCp0aGlzLCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAg
ICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8g
TWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBD
YW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQg
c2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAg
ICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zm
c2V0LmhlaWdodCgpIH07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqdGhpcywgc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dFNob3VsZEFudGlhbGlhcygqdGhpcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQotewotICAgIENhaXJvOjpjb25jYXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6U3RhdGU6OnNldENUTSgqdGhpcywgdHJhbnNm
b3JtKTsKLX0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigq
dGhpcywgb3BhY2l0eSk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENh
aXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0
LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBDYWlybzo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMpOwotfQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3QoKnRoaXMsIHJl
Y3QpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZmlsbFBh
dGgoKnRoaXMsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCkBAIC0zNDEsNTggKzMwMSw2
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENhaXJvOjpzdHJva2VSZWN0KCp0aGlzLCBy
ZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNh
cChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAoKnRoaXMsIGxpbmVD
YXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBDYWlybzo6c2V0TGlu
ZURhc2goKnRoaXMsIGRhc2hlcywgZGFzaE9mZnNldCk7Ci19CisgICAgaWYgKHBhdGguaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExp
bmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIENhaXJvOjpzZXRMaW5lSm9pbigqdGhp
cywgbGluZUpvaW4pOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWly
bzo6c3Ryb2tlUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENh
aXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQorLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xl
IHdpdGggYSBzdHJva2VkIGJvcmRlci4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAg
IENhaXJvOjpzZXRNaXRlckxpbWl0KCp0aGlzLCBtaXRlcik7CisgICAgQVNTRVJUKCFyZWN0Lmlz
RW1wdHkoKSk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpk
cmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKKy8vIFRoaXMgaXMgb25seSB1
c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywg
cGF0aCk7Ci19CisgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJl
dHVybjsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKGZsb2F0IHJhZGlhbnMp
Ci17Ci0gICAgQ2Fpcm86OnJvdGF0ZSgqdGhpcywgcmFkaWFucyk7CisgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywgcG9pbnQxLCBwb2lu
dDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisvLyBUaGlzIG1ldGhvZCBpcyBv
bmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBDYWlybzo6c2NhbGUoKnRoaXMsIHNpemUpOworICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnRoaXMsIHJlY3QsIHN0YXRlLmZp
bGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKKyNpZiBQ
TEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKKyAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9j
dXMoKnRoaXMsIHBhdGgsIGNvbG9yKTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVO
VVNFRF9QQVJBTShvZmZzZXQpOworICAgIHJldHVybjsKKyNlbHNlCisgICAgQ2Fpcm86OmRyYXdG
b2N1c1JpbmcoKnRoaXMsIHBhdGgsIHdpZHRoLCBjb2xvcik7CisjZW5kaWYKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIENhaXJvOjpm
aWxsUm91bmRlZFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUoKSkpOworI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQorICAgIFRoZW1lQWR3
YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcmVjdHMsIGNvbG9yKTsKKyAgICBVTlVTRURfUEFSQU0o
d2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAgIHJldHVybjsKKyNlbHNlCisg
ICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnRoaXMsIHJlY3RzLCB3aWR0aCwgY29sb3IpOworI2Vu
ZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmICghY29sb3Iu
aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0aGlzLCByZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCp0aGlzLCBuYXRpdmVJ
bWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMs
IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkBAIC00MDQsMTEg
KzM3NCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2ZUlt
YWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0CiAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJu
KCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIG5hdGl2ZUltYWdlLnNp
emUoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9u
cyk7CiB9CiAKLVJlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01v
ZGUoKSBjb25zdAotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21v
b3RoaW5nKQogewogICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCkBAIC00Mzgs
OCArNDAzLDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICAgICAgZm9udFNtb290aGlu
Zyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUp
Cit7CisgICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBDYWly
bzo6ZHJhd0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmlu
dGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3sKKyAgICBDYWly
bzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUpOworfQorCitG
bG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQoreworICAgIFVOVVNF
RF9QQVJBTShyb3VuZGluZ01vZGUpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoKnRoaXMsIHJlY3QpOworfQorCiBjYWlyb190KiBHcmFwaGljc0NvbnRleHRD
YWlybzo6Y3IoKSBjb25zdAogeworICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0Q2Fpcm8m
PigqdGhpcykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZXR1cm4gbV9jci5nZXQoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKaW5kZXggNTY0NjFjMTU5YTU4M2M4OWM2MWU4ZjAy
ZTRlMGJlZTdiMDU5MzJlZi4uNDYwNmRhZmZjYjkzY2FjMzRlMWM2MWRlNWE2YTVkZGE1MGNlZDA3
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCkBAIC01MCw2MSArNTAsNTAgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9p
ZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQg
cmVzdG9yZSgpIGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKIAot
ICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2luKExp
bmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworICAg
IHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5h
bDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgCisgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0OwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFs
OwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsK
LSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbDsKLSAgICB2
b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOwogICAg
IHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisKICAgICB2b2lkIGZpbGxQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7
Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQ
YXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAK
ICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKICAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7
Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsK
LSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworCiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3Im
KSBmaW5hbDsKIAotICAgIHZvaWQgc2F2ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZp
bmFsOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lk
IHJvdGF0ZShmbG9hdCkgZmluYWw7Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsK
LSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgY29uY2F0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3Jh
cGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9p
ZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgZmluYWw7CiAKLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAg
dm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChj
b25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1
bGUpIGZpbmFsOwotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUp
IGZpbmFsOwogCiAgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNh
dmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTg1NmEwNDM5M2ZkMjRlOTYyOGY2ZmU5MzQ2OWVlYmVhNGFiYjU5
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0NHQ29udGV4dFN0YXRlU2F2ZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShDRykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDR0NvbnRleHRTdGF0ZVNhdmVy
IHsKK3B1YmxpYzoKKyAgICBDR0NvbnRleHRTdGF0ZVNhdmVyKENHQ29udGV4dFJlZiBjb250ZXh0
LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4
dCkKKyAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKG1fY29udGV4dCk7CisgICAgfQorICAgIAorICAgIH5DR0NvbnRleHRTdGF0ZVNhdmVyKCkK
KyAgICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNhdmUo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKKyAgICAgICAgQ0dD
b250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0g
dHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29u
dGV4dCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBkaWRTYXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NhdmVBbmRS
ZXN0b3JlOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgQ0dDb250ZXh0UmVmIG1fY29udGV4
dDsKKyAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggMzI0NWM2MDA0
MzE1NTJkNTEzYjc0ZWViYzA5ZjMxOGVlYzNkZDcyYS4uODgzYmZmMWViZWE3YTk4YTdhOThiNzE1
N2RjMDVmM2U1MGZkNzBkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4NSwxNCArMTg1LDEzIEBAIHN0YXRpYyB2b2lkIHNl
dENHQmxlbmRNb2RlKENHQ29udGV4dFJlZiBjb250ZXh0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
QmxlbmRNb2RlCiB9CiAKIEdyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhDR0Nv
bnRleHRSZWYgY2dDb250ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KENHQ29udGV4dEdldENs
aXBCb3VuZGluZ0JveChjZ0NvbnRleHQpLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW5pdGlhbENo
YW5nZUZsYWdzLCBDR0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KSkKIHsKICAgICBpZiAoIWNnQ29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4
dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSB9KTsKLSAgICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkgPSBjb3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1
YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KGNvcmVJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVh
bGl0eShpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpKSkpOwogfQogCiBHcmFwaGljc0NvbnRleHRD
Rzo6fkdyYXBoaWNzQ29udGV4dENHKCkKQEAgLTIwNiw2ICsyMDUsMTQgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRDRzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIH0KIAogQ0dDb250ZXh0UmVm
IEdyYXBoaWNzQ29udGV4dENHOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIC8vIFNv
bWUgY2FsbGVycyB0byB0aGlzIG1ldGhvZCB1c2VzIHRoZSBwbGF0Zm9ybSBjb250ZXh0IG91dHNp
ZGUgdGhlIHNjb3BlCisgICAgLy8gb2YgdGhpcyBjbGFzcy4gQ29tbWl0IGFueSBjaGFuZ2VzIGJl
Zm9yZSByZXR1cm5pbmcgdGhlIHBsYXRmb3JtIGNvbnRleHQuCisgICAgY29uc3RfY2FzdDxHcmFw
aGljc0NvbnRleHRDRyY+KCp0aGlzKS5hcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJldHVybiBp
bnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpOworfQorCitDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250
ZXh0Q0c6OmludGVybmFsUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9k
YXRhLT5tX2NnQ29udGV4dCk7CiAgICAgcmV0dXJuIG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCk7
CkBAIC0zOTYsNyArNDAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4o
TmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKICAgICBDR0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LCBkZXN0UmVjdCk7CiAKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21w
b3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9k
ZSgpIH0pOwogCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGRlc3RSZWN0Lngo
KSwgZGVzdFJlY3QueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxl
Q1RNKGNvbnRleHQsIDEsIC0xKTsKQEAgLTU1NSwxMyArNTYyLDEzIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAoIW1fc3RhdGUu
c3Ryb2tlUGF0dGVybikKKyAgICBpZiAoIXN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAg
IEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJU
b0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IG1fc3Rh
dGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOwor
ICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CiAgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNTc0LDEzICs1ODEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlG
aWxsUGF0dGVybigpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmICgh
ZmlsbFBhdHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNl
Q1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKLSAg
ICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKKyAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IGZp
bGxQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKICAgICBp
ZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01OTEsMTEgKzU5OCwx
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBDR0Nv
bnRleHRTZXRGaWxsUGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBh
dHRlcm5BbHBoYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9k
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0aERyYXdpbmdNb2RlJiBt
b2RlKQorc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCiB7Ci0gICAgYm9v
bCBzaG91bGRGaWxsID0gc3RhdGUuZmlsbFBhdHRlcm4gfHwgc3RhdGUuZmlsbENvbG9yLmlzVmlz
aWJsZSgpOwotICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCAo
c3RhdGUuc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UgJiYgc3RhdGUuc3Ryb2tlQ29sb3IuaXNWaXNp
YmxlKCkpOwotICAgIGJvb2wgdXNlRU9GaWxsID0gc3RhdGUuZmlsbFJ1bGUgPT0gV2luZFJ1bGU6
OkV2ZW5PZGQ7CisgICAgYm9vbCBzaG91bGRGaWxsID0gY29udGV4dC5maWxsUGF0dGVybigpIHx8
IGNvbnRleHQuZmlsbENvbG9yKCkuaXNWaXNpYmxlKCk7CisgICAgYm9vbCBzaG91bGRTdHJva2Ug
PSBjb250ZXh0LnN0cm9rZVBhdHRlcm4oKSB8fCAoY29udGV4dC5zdHJva2VTdHlsZSgpICE9IE5v
U3Ryb2tlICYmIGNvbnRleHQuc3Ryb2tlQ29sb3IoKS5pc1Zpc2libGUoKSk7CisgICAgYm9vbCB1
c2VFT0ZpbGwgPSBjb250ZXh0LmZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQ7CiAKICAg
ICBpZiAoc2hvdWxkRmlsbCkgewogICAgICAgICBpZiAoc2hvdWxkU3Ryb2tlKSB7CkBAIC02MjQs
OSArNjMxLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBt
X3N0YXRlOwogCi0gICAgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0ZS5zdHJva2VHcmFk
aWVudCkgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBzdHJva2VHcmFkaWVudCgpKSB7CiAg
ICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8gZmlsbCAmIHN0cm9r
ZSBhIHBhdGggdXNpbmcgZ3JhZGllbnRzCiAgICAgICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFi
b3V0IHRoaXMuCiAgICAgICAgIGZpbGxQYXRoKHBhdGgpOwpAQCAtNjM0LDEzICs2NDAsMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAo
ZmlsbFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIGlmIChzdGF0
ZS5zdHJva2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5
U3Ryb2tlUGF0dGVybigpOwogCiAgICAgQ0dQYXRoRHJhd2luZ01vZGUgZHJhd2luZ01vZGU7Ci0g
ICAgaWYgKGNhbGN1bGF0ZURyYXdpbmdNb2RlKHN0YXRlLCBkcmF3aW5nTW9kZSkpIHsKKyAgICBp
ZiAoY2FsY3VsYXRlRHJhd2luZ01vZGUoKnRoaXMsIGRyYXdpbmdNb2RlKSkgewogI2lmIEhBVkUo
Q0dfQ09OVEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgICAgICBDR0NvbnRleHREcmF3UGF0aERp
cmVjdChjb250ZXh0LCBkcmF3aW5nTW9kZSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7
CiAjZWxzZQpAQCAtNjU4LDcgKzY2NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYg
KGZpbGxHcmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAg
ICAgRmxvYXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAg
IEZsb2F0U2l6ZSBsYXllclNpemUgPSBnZXRDVE0oKS5tYXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAg
LTY3MCwzMyArNjc2LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0obGF5ZXJDb250
ZXh0LCAtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBh
dGgobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250
ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENU
TShsYXllckNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAg
ICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNm
b3JtKCkpOwogCiAgICAgICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9k
ZCkKICAgICAgICAgICAgICAgICBDR0NvbnRleHRFT0NsaXAobGF5ZXJDb250ZXh0KTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7
CiAKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQp
OworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAg
ICAgICAgICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0
KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNv
bnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRm
b3JtUGF0aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRl
LmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNh
dENUTShjb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAgICAgIGlmIChm
aWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgICAgIENHQ29udGV4
dEVPQ2xpcChjb250ZXh0KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0Nv
bnRleHRDbGlwKGNvbnRleHQpOwogCi0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+
cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5m
aWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0
dGVybigpOwogI2lmIEhBVkUoQ0dfQ09OVEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgIENHQ29u
dGV4dERyYXdQYXRoRGlyZWN0KGNvbnRleHQsIGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5P
ZGQgPyBrQ0dQYXRoRU9GaWxsIDoga0NHUGF0aEZpbGwsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51
bGxwdHIpOwpAQCAtNzE3LDcgKzcyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAg
IGlmIChzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAg
ICAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAg
ICAgICAgIGZsb2F0IGxpbmVXaWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtNzQyLDggKzc0
OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBwYXRoLnBsYXRm
b3JtUGF0aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQ
YXRoKGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4
dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENv
bmNhdENUTShsYXllckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAg
ICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAg
ZmxvYXQgZGVzdGluYXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAg
ICAgICAgIGZsb2F0IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0aCk7
CkBAIC03NTQsMTMgKzc2MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQs
IHBhdGgucGxhdGZvcm1QYXRoKCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhX
aXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRl
eHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ry
b2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29u
dGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVu
dCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkK
ICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICNpZiBVU0UoQ0dfQ09OVEVYVF9TVFJP
S0VfTElORV9TRUdNRU5UU19XSEVOX1NUUk9LSU5HX1BBVEgpCkBAIC03ODUsNyArNzkxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBp
ZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkpIHsKICAg
ICAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBp
ZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXllclNpemUgPSBnZXRD
VE0oKS5tYXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTc5OCwyNyArODA0LDI3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAg
ICAgIENHQ29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENH
Q29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0
Q1RNKGxheWVyQ29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0g
ICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAg
ICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQp
OwogICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxh
eWVyLmdldCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBU
b1JlY3QoY29udGV4dCwgcmVjdCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29u
dGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBt
X3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0
Q29uY2F0Q1RNKGNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIGZp
bGxHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVy
bigpKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKICAgICBib29sIGRyYXdPd25TaGFk
b3cgPSBjYW5Vc2VTaGFkb3dCbHVyKCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAg
ICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAg
IENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsK
IAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNo
YWRvd0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9h
dFJvdW5kZWRSZWN0KHJlY3QpKTsKICAgICB9CiAKQEAgLTgzNyw5ICs4NDMsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwg
ZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVy
biBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBs
YXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0
U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNo
YWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250
ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAg
ICAgIGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3Qo
cmVjdCkpOwogICAgIH0KIApAQCAtODUyLDcgKzg1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKQEAgLTg2NCw5ICs4NzAs
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7
CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNo
YWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAg
ICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAw
KTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAg
IFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBy
ZWN0KTsKICAgICB9CiAKQEAgLTg3NCw3ICs4ODAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
CiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpID0gcmVjdC5yYWRpaSgp
OwogICAgIGJvb2wgZXF1YWxXaWR0aHMgPSAocmFkaWkudG9wTGVmdCgpLndpZHRoKCkgPT0gcmFk
aWkudG9wUmlnaHQoKS53aWR0aCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSA9PSByYWRp
aS5ib3R0b21MZWZ0KCkud2lkdGgoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSA9PSBy
YWRpaS5ib3R0b21SaWdodCgpLndpZHRoKCkpOwogICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gKHJh
ZGlpLnRvcExlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgJiYg
cmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgpID09IHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkg
JiYgcmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21SaWdodCgpLmhlaWdo
dCgpKTsKLSAgICBib29sIGhhc0N1c3RvbUZpbGwgPSBtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBt
X3N0YXRlLmZpbGxQYXR0ZXJuOworICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IGZpbGxHcmFkaWVu
dCgpIHx8IGZpbGxQYXR0ZXJuKCk7CiAgICAgaWYgKCFoYXNDdXN0b21GaWxsICYmIGVxdWFsV2lk
dGhzICYmIGVxdWFsSGVpZ2h0cyAmJiByYWRpaS50b3BMZWZ0KCkud2lkdGgoKSAqIDIgPT0gci53
aWR0aCgpICYmIHJhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSAqIDIgPT0gci5oZWlnaHQoKSkKICAg
ICAgICAgQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3QoY29udGV4dCwgcik7CiAgICAgZWxzZSB7
CkBAIC05MTMsOSArOTE5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG8KICAgICBDR0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYg
KGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAg
ICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVa
ZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQs
IENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyht
X3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwg
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd0lu
c2V0U2hhZG93KCp0aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3QpOwogICAgIH0KIApAQCAtOTMw
LDYgKzkzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcChyZWN0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4dCgp
LCByZWN0KTsKICAgICBtX2RhdGEtPmNsaXAocmVjdCk7CiB9CkBAIC05NDAsMzEgKzk0NywzNSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICAvLyB0byA8cmRhcjovL3Byb2JsZW0vMTI1ODQ0OTI+LCBDR1JlY3RJbmZpbml0ZSBjYW4n
dCBiZSB1c2VkIHdpdGggYW4gYWNjZWxlcmF0ZWQgY29udGV4dCB0aGF0CiAgICAgLy8gaGFzIGNl
cnRhaW4gdHJhbnNmb3JtcyB0aGF0IGFyZW4ndCBqdXN0IGEgdHJhbnNsYXRpb24gb3IgYSBzY2Fs
ZS4gQW5kIGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vMTQ2MzQ0NTM+CiAgICAgLy8gd2UgY2Fubm90
IHVzZSBpdCBpbiBmb3IgYSBwcmludGluZyBjb250ZXh0IGVpdGhlci4KKyAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgY3RtID0gZ2V0Q1RNKCk7Ci0gICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29u
dGV4dEdldFR5cGUocGxhdGZvcm1Db250ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChy
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5i
KCkgJiYgIWN0bS5jKCkpKTsKLSAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdElu
ZmluaXRlID8gQ0dSZWN0SW5maW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxh
dGZvcm1Db250ZXh0KCkpLCByZWN0IH07Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBDR0NvbnRleHRBZGRSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dHMsIDIpOwotICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgYm9v
bCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUoY29udGV4dCkgIT0ga0NH
Q29udGV4dFR5cGVQREYgJiYgKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOworICAgIENHUmVjdCByZWN0c1sy
XSA9IHsgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZpbml0ZSA6IENHQ29udGV4dEdl
dENsaXBCb3VuZGluZ0JveChjb250ZXh0KSwgcmVjdCB9OworICAgIENHQ29udGV4dEJlZ2luUGF0
aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRSZWN0cyhjb250ZXh0LCByZWN0cywgMik7Cisg
ICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgp
LCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dEJl
Z2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIENHQ29udGV4
dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KSk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9y
bVBhdGgoKSk7Ci0gICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAg
ICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBD
R0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogeworICAgIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOworCiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAg
ICAgIENHQ29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRo
KCkpOworICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgICAgIENHQ29u
dGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAKICAgICAgICAgaWYg
KGNsaXBSdWxlID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgQ0dDb250ZXh0RU9D
bGlwKGNvbnRleHQpOwpAQCAtOTc1LDExICs5ODYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICBtX2Rh
dGEtPmNsaXAocGF0aCk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3Vu
ZHMoKSBjb25zdAotewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENs
aXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgR3Jh
cGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwpAQCAtMTAwMiwx
NyArMTAwOCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFuc3BhcmVuY3lMYXll
cigpCiAgICAgcmVzdG9yZSgpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHRmxvYXQm
IHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCitzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNl
dFdvcmthcm91bmRJZk5lZWRlZChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNl
dCwgQ0dGbG9hdCYgeU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFU
Rk9STShXSU4pCiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwogICAgIFVOVVNFRF9QQVJBTSh4
T2Zmc2V0KTsKICAgICBVTlVTRURfUEFSQU0oeU9mZnNldCk7CiAjZWxzZQotICAgIGlmIChjb250
ZXh0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZz
ZXRzKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgIGlmIChDR0NvbnRleHREcmF3c1dp
dGhDb3JyZWN0U2hhZG93T2Zmc2V0cyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gV29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzU1MzkzODg+IGJ5IGVuc3VyaW5nIHRoYXQg
dGhlIG9mZnNldHMgd2lsbCBnZXQgdHJ1bmNhdGVkCkBAIC0xMDMwLDEwICsxMDMzLDU1IEBAIHN0
YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1NoYWRv
dyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXpl
JiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNl
dENHTGluZUNhcChDR0NvbnRleHRSZWYgY29udGV4dCwgTGluZUNhcCBjYXApCiB7Ci0gICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Cisg
ICAgc3dpdGNoIChjYXApIHsKKyAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6CisgICAgICAgIENHQ29u
dGV4dFNldExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcEJ1dHQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIExpbmVDYXA6OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNv
bnRleHQsIGtDR0xpbmVDYXBSb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUNh
cDo6U3F1YXJlOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVD
YXBTcXVhcmUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CiAKK3N0YXRpYyB2b2lkIHNldENH
TGluZUpvaW4oQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVKb2luIGpvaW4pCit7CisgICAgc3dp
dGNoIChqb2luKSB7CisgICAgY2FzZSBMaW5lSm9pbjo6TWl0ZXI6CisgICAgICAgIENHQ29udGV4
dFNldExpbmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luTWl0ZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIExpbmVKb2luOjpSb3VuZDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4o
Y29udGV4dCwga0NHTGluZUpvaW5Sb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGlu
ZUpvaW46OkJldmVsOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dM
aW5lSm9pbkJldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBz
ZXRDR01pdGVyTGltaXQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGZsb2F0IGxpbWl0KQoreworICAg
IENHQ29udGV4dFNldE1pdGVyTGltaXQoY29udGV4dCwgbGltaXQpOworfQorCitzdGF0aWMgdm9p
ZCBzZXRDR0xpbmVEYXNoKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRh
c2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKKyAg
ICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBk
YXNoZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGRhc2hlc1tpXSk7CisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICBkYXNoT2Zm
c2V0ID0gZm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOworICAgIH0KKyAgICBDR0Nv
bnRleHRTZXRMaW5lRGFzaChjb250ZXh0LCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNo
ZXMuc2l6ZSgpKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coQ0dDb250ZXh0UmVmIGNv
bnRleHQsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBvZmZz
ZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgYm9vbCBzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcykKK3sKICAgICBpZiAob2Zmc2V0LmlzWmVybygpICYmICFibHVyKSB7CiAgICAgICAg
IENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTA0NSw3ICsxMDkzLDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dT
aGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0
U2l6ZSYKICAgICBDR0Zsb2F0IHlPZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9h
dCBibHVyUmFkaXVzID0gYmx1cjsKIAotICAgIGlmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKCkpIHsKKyAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7
CiAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNl
Q1RNKGNvbnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVz
ZXJUb0Jhc2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTEw
NjYsNyArMTExNCw4IEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgLy8gRXh0cmVtZSAi
Ymx1ciIgdmFsdWVzIGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxv
bmcgdGltZXMsIHNvIGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMs
IG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zm
c2V0V29ya2Fyb3VuZElmTmVlZGVkKGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7
CisgICAgaWYgKHJlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisg
ICAgICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnRleHQsIHhPZmZz
ZXQsIHlPZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRo
aXMgbWVhbnMgdGhhdCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAv
LyBhbmQgd2Ugc2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29s
b3IuCkBAIC0xMDc2LDQ0ICsxMTI1LDgxIEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAg
ICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZz
ZXQsIHlPZmZzZXQpLCBibHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKS5nZXQoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7
Ci0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKCFzdGF0ZSgp
LmNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBDR0Nv
bnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
LCAwLmYpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpOwog
Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xv
ckNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRl
eHQsIGNhY2hlZENHQ29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpLmdldCgpKTsKKyAgICBmb3IgKGF1
dG8gY2hhbmdlIDogc3RhdGUoKS5jaGFuZ2VzKCkpIHsKKyAgICAgICAgc3dpdGNoIChjaGFuZ2Up
IHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE06CisgICAg
ICAgICAgICBDR0NvbnRleHRTZXRDVE0oY29udGV4dCwgc3RhdGUoKS5nZXRDVE0oKSk7CisgICAg
ICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwg
c3RhdGUuZmlsbENvbG9yKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpGaWxsQnJ1c2g6CisgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0
ZSgpLmZpbGxCcnVzaCgpLmNvbG9yKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAg
ICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAg
ICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZSgpLnN0cm9r
ZVRoaWNrbmVzcygpLCAwLmYpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNo
YW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKLSAgICAgICAg
c2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJs
ZW5kTW9kZSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ry
b2tlQnJ1c2g6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihj
b250ZXh0LCBjYWNoZWRDR0NvbG9yKHN0YXRlKCkuc3Ryb2tlQnJ1c2goKS5jb2xvcigpKS5nZXQo
KSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0
U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHRE
cmF3aW5nTW9kZSkpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkxpbmVDYXA6CisgICAgICAgICAgICBzZXRDR0xpbmVDYXAoY29udGV4dCwgc3RhdGUoKS5saW5l
Q2FwKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIENHQ29u
dGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luOgorICAg
ICAgICAgICAgc2V0Q0dMaW5lSm9pbihjb250ZXh0LCBzdGF0ZSgpLmxpbmVKb2luKCkpOworICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hv
dWxkU21vb3RoRm9udHMoY29udGV4dCwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoOgorICAgICAgICAg
ICAgc2V0Q0dMaW5lRGFzaChjb250ZXh0LCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0
ZSgpLmxpbmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5Q2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29u
dGV4dCwgY2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJM
aW1pdDoKKyAgICAgICAgICAgIHNldENHTWl0ZXJMaW1pdChjb250ZXh0LCBzdGF0ZSgpLm1pdGVy
TGltaXQoKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKLSAgICAgICAgc2V0Q0dTaGFkb3co
KnRoaXMsIHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNo
YWRvd0NvbG9yKTsKLX0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpDb21wb3NpdGVNb2RlOgorICAgICAgICAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgc3Rh
dGUoKS5jb21wb3NpdGVNb2RlKCkub3AsIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9k
ZSk7CisgICAgICAgICAgICBicmVhazsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TWl0
ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRm
b3JtQ29udGV4dCgpLCBsaW1pdCk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIHNldENHU2hhZG93KGNvbnRleHQsIHJl
bmRlcmluZ01vZGUoKSwgc3RhdGUoKS5kcm9wU2hhZG93KCkub2Zmc2V0LCBzdGF0ZSgpLmRyb3BT
aGFkb3coKS5ibHVyUmFkaXVzLCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5jb2xvciwgc3RhdGUoKS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGE6CisgICAgICAgICAgICBD
R0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZSgpLmFscGhhKCkpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5OgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xh
dGlvblF1YWxpdHkoY29udGV4dCwgY2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZSgpLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGU6CisgICAg
ICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2lu
Z01vZGUoc3RhdGUoKS50ZXh0RHJhd2luZ01vZGUoKSkpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxp
YXM6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3Rh
dGUoKS5zaG91bGRBbnRpYWxpYXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzOgorICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY29udGV4dCwgc3RhdGUoKS5z
aG91bGRTbW9vdGhGb250cygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsZWFyU3Rh
dGVDaGFuZ2VzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHIpCkBAIC0xMTI1LDcgKzEyMTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQog
ewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBp
ZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChzdHJva2VHcmFkaWVudCgpKSB7
CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgY29uc3QgZmxvYXQgZG91
YmxlTGluZVdpZHRoID0gbGluZVdpZHRoICogMjsKICAgICAgICAgICAgIGZsb2F0IGFkanVzdGVk
V2lkdGggPSBjZWlsZihyZWN0LndpZHRoKCkgKyBkb3VibGVMaW5lV2lkdGgpOwpAQCAtMTEzNSw3
ICsxMjIxLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIGF1dG8gbGF5ZXIgPSBh
ZG9wdENGKENHTGF5ZXJDcmVhdGVXaXRoQ29udGV4dChjb250ZXh0LCBsYXllclNpemUsIDApKTsK
IAogICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGxheWVyQ29udGV4dCA9IENHTGF5ZXJHZXRDb250
ZXh0KGxheWVyLmdldCgpKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0g
bGluZVdpZHRoOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGxheWVyQ29udGV4
dCwgbGluZVdpZHRoKTsKIAogICAgICAgICAgICAgLy8gQ29tcGVuc2F0ZSBmb3IgdGhlIGxpbmUg
d2lkdGgsIG90aGVyd2lzZSB0aGUgbGF5ZXIncyB0b3AtbGVmdCBjb3JuZXIgd291bGQgYmUKQEAg
LTExNDksOCArMTIzNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBDR0NvbnRl
eHRBZGRSZWN0KGxheWVyQ29udGV4dCwgcmVjdCk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBs
YWNlUGF0aFdpdGhTdHJva2VkUGF0aChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250
ZXh0Q2xpcChsYXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxh
eWVyQ29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAg
ICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAg
ICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4
dCk7CiAKICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0
LngoKSAtIGxpbmVXaWR0aCk7CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkZXN0aW5hdGlvblkg
PSByb3VuZGYocmVjdC55KCkgLSBsaW5lV2lkdGgpOwpAQCAtMTE2MSwxMyArMTI0NiwxMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbGluZVdpZHRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCBy
ZWN0KTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNv
bnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICAgICAgICAg
IENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQoKnRo
aXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIHN0cm9rZVNwYWNl
VHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5z
dHJva2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ry
b2tlUGF0dGVybigpOwogCiAgICAgLy8gVXNpbmcgQ0dDb250ZXh0QWRkUmVjdCBhbmQgQ0dDb250
ZXh0U3Ryb2tlUGF0aCB0byBzdHJva2UgcmVjdCByYXRoZXIgdGhhbgpAQCAtMTE4Miw5NCArMTI2
Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkK
LXsKLSAgICBzd2l0Y2ggKGNhcCkgewotICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKLSAgICAgICAg
Q0dDb250ZXh0U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcEJ1dHQpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVDYXA6OlJvdW5kOgotICAgICAgICBDR0NvbnRl
eHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwUm91bmQpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToKLSAgICAgICAgQ0dDb250ZXh0U2V0
TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFNxdWFyZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgaWYgKGRhc2hP
ZmZzZXQgPCAwKSB7Ci0gICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbGVuZ3RoICs9
IHN0YXRpY19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOwotICAgICAgICBpZiAobGVuZ3RoKQotICAg
ICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsK
LSAgICB9Ci0gICAgQ0dDb250ZXh0U2V0TGluZURhc2gocGxhdGZvcm1Db250ZXh0KCksIGRhc2hP
ZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQotewotICAgIHN3aXRjaCAoam9p
bikgewotICAgIGNhc2UgTGluZUpvaW46Ok1pdGVyOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5l
Sm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgTGluZUpvaW46OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9p
bihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5Sb3VuZCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgTGluZUpvaW46OkJldmVsOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihw
bGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5CZXZlbCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQotewotICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7Ci0gICAgbV9k
YXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBD
R0NvbnRleHRSb3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKLSAgICBtX2RhdGEt
PnJvdGF0ZShhbmdsZSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3du
VG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0
Zm9ybUNvbnRleHQoKSwgeCwgeSk7Ci0gICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAg
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250
ZXh0KCksIHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAg
ICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxz
ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQotewotICAgIENHQ29udGV4dFNldENUTShwbGF0Zm9ybUNvbnRleHQo
KSwgdHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0
YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQot
Ci1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2aWNl
U2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAotewotICAgIC8vIFRoZSBDVE0gdXN1YWxseSBpbmNs
dWRlcyB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgZXhjZXB0IGluIFdlYktpdCAxIHdoZW4gdGhlCi0g
ICAgLy8gY29udGVudCBpcyBub24tY29tcG9zaXRlZCwgc2luY2UgdGhlIHNjYWxlIGZhY3RvciBp
cyBpbnRlZ3JhdGVkIGF0IGEgbG93ZXIKLSAgICAvLyBsZXZlbC4gVG8gZ3VhcmFudGVlIHRoZSBk
ZXZpY2VTY2FsZSBpcyBpbmNsdWRlZCwgd2UgY2FuIHVzZSB0aGlzIENHIEFQSS4KLSAgICBpZiAo
aW5jbHVkZVNjYWxlID09IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpCi0gICAgICAgIHJl
dHVybiBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3JtKHBsYXRmb3Jt
Q29udGV4dCgpKTsKLQotICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0
KCkpOwotfQotCiBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewog
ICAgIC8vIEl0IGlzIG5vdCBlbm91Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2aWNl
IHNwYWNlLiBUaGUgcm90YXRpb24gcGFydCBvZiB0aGUKQEAgLTEyODAsNyArMTI3Nyw5IEBAIEZs
b2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIFJvdW5kaW5nCiAgICAgaWYgKG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSkKICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJl
Y3QpOwogCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0
VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIENHQWZmaW5l
VHJhbnNmb3JtIGRldmljZU1hdHJpeCA9IENHQ29udGV4dEdldFVzZXJTcGFjZVRvRGV2aWNlU3Bh
Y2VUcmFuc2Zvcm0oY29udGV4dCk7CiAgICAgaWYgKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0
eShkZXZpY2VNYXRyaXgpKSB7CiAgICAgICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zv
cm1Lbm93blRvQmVJZGVudGl0eSA9IHRydWU7CiAgICAgICAgIHJldHVybiByb3VuZGVkSW50UmVj
dChyZWN0KTsKQEAgLTEzMTksNiArMTMxOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAg
ICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIGxvY2FsU3Ryb2tlQ29s
b3Ioc3Ryb2tlQ29sb3IoKSk7CiAKICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVC
b3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChGbG9hdFJlY3QocG9pbnQsIEZsb2F0U2l6
ZSh3aWR0aHMubGFzdCgpLCB0aGlja25lc3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3Ip
OwpAQCAtMTM2NCwxMiArMTM2NCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lcwogICAgIH0K
IAogICAgIGlmIChmaWxsQ29sb3JJc05vdEVxdWFsVG9TdHJva2VDb2xvcikKLSAgICAgICAgc2V0
Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGxvY2FsU3Ryb2tlQ29sb3IpOworICAgICAg
ICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBsb2NhbFN0cm9rZUNvbG9yKTsKIAotICAgIENHQ29u
dGV4dEZpbGxSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaEJvdW5kcy5kYXRhKCksIGRhc2hC
b3VuZHMuc2l6ZSgpKTsKKyAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwgZGFzaEJvdW5k
cy5kYXRhKCksIGRhc2hCb3VuZHMuc2l6ZSgpKTsKIAogICAgIGlmIChmaWxsQ29sb3JJc05vdEVx
dWFsVG9TdHJva2VDb2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0
KCksIGZpbGxDb2xvcigpKTsKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgZmlsbENv
bG9yKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0
IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKQEAgLTE0MTIsMTcgKzE0MTIs
MTggQEAgUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNv
bnN0CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBi
YXNlIENUTSBvZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxp
ZWQgdG8gaXQuCiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdp
bGwgY2F1c2UgY2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKICAgICAv
LyB0byBkcmF3IHdpdGggYSBzY2FsZSBmYWN0b3Igb2YgMSByYXRoZXIgdGhhbiB0aGUgYWN0dWFs
IHNjYWxlIGZhY3Rvci4KLSAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgp
LCBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJhc2VDVE0ocGxhdGZvcm1Db250
ZXh0KCkpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBDR0Nv
bnRleHRTZXRCYXNlQ1RNKGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0
R2V0QmFzZUNUTShjb250ZXh0KSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9y
KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5
IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwg
bV9zdGF0ZS5maWxsUGF0dGVybikgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBmaWxsUGF0
dGVybigpKSB7CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMTQzNCw3ICsxNDM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogdm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7CiAgICAg
Ly8gQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9y
cy4KLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRl
cm4pIHsKKyAgICBpZiAoc3Ryb2tlR3JhZGllbnQoKSB8fCBzdHJva2VQYXR0ZXJuKCkpIHsKICAg
ICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTE0NjgsOSArMTQ2OSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphZGREZXN0
aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaQogCiBib29s
IEdyYXBoaWNzQ29udGV4dENHOjpjYW5Vc2VTaGFkb3dCbHVyKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBo
YXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Cisg
ICAgcmV0dXJuIChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpOwog
fQogCi19CiAKLSNlbmRpZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmgKaW5kZXggNDY4YTQ0YmFhODZlZTUyNjE5ZDI1NWY5Mzk0M2E5NzU1
YmFjOWZhYi4uZjk5YzNkOWI5YmQyODI1ODY1ZmRmN2VhODBiMmFmMDBlMzRiNTJkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAxMCwgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDUzICsyNSwxMyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2lmIFVTRShDRykKKwogI2luY2x1ZGUgIkNvbG9yU3BhY2VDRy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNHQWZmaW5lVHJh
bnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKLQotY2xhc3MgQ0dDb250ZXh0
U3RhdGVTYXZlciB7Ci1wdWJsaWM6Ci0gICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRS
ZWYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAgICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkK
LSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB+Q0dDb250ZXh0U3Rh
dGVTYXZlcigpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAg
ICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzYXZlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0g
ICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICAgICAgbV9zYXZlQW5k
UmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdT
dGF0ZShtX2NvbnRleHQpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAg
fQotICAgIAotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9zYXZlQW5kUmVzdG9yZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIENHQ29udGV4dFJl
ZiBtX2NvbnRleHQ7Ci0gICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOwotfTsKLQogY2xhc3MgV0VC
Q09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0Q0cgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsK
IHB1YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYpOwpAQCAtODUsNjkg
KzQ1LDQ4IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZp
bmFsOwogICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAot
ICAgIHZvaWQgc2F2ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIHZv
aWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKKyAgICBib29sIGlzQ0FMYXllckNv
bnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sKSBmaW5hbDsKIAorICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9y
ZSgpIGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICAgICB2b2lk
IGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigp
IGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQg
ZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQ
YXRoJikgZmluYWw7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkgZmluYWw7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCiAg
ICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CiAKLSAg
ICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0OwotICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLQotICAgIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25z
dCBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7
Ci0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9p
ZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIHZvaWQg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAogICAgIHZvaWQgY2xpcChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
Ci0KLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotCiAgICAgdm9pZCBjbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7Cisg
ICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBm
aW5hbDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAg
IHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGlu
ZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmlu
YWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9p
ZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikg
ZmluYWw7CiAKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsK
LSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAg
IHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxs
UGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNj
YWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCBy
b3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwotICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0IHgsIGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7
CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3Np
Ymx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAg
IHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5h
bDsKIAotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRo
JikgZmluYWw7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CkBA
IC0xNTYsMTggKzk1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOwog
I2VuZGlmCiAKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdOYXRpdmVJ
bWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pIGZpbmFsOwogCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CiAgICAg
dm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBV
UkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25G
b3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAg
dm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9h
dFBvaW50JikgZmluYWw7CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CiAKICAgICBi
b29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkaWRV
cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29u
c3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIHNldERlc3RpbmF0
aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwor
ICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
RmxvYXRQb2ludCYpIGZpbmFsOwogCiAgICAgdmlydHVhbCBib29sIGNhblVzZVNoYWRvd0JsdXIo
KSBjb25zdDsKIApAQCAtMTc1LDkgKzExNywxNiBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5h
bDsKICNlbmRpZgogCisgICAgQ0dDb250ZXh0UmVmIGludGVybmFsUGxhdGZvcm1Db250ZXh0KCkg
Y29uc3Q7CisKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBt
X2RhdGEgeyBudWxscHRyIH07CiB9OwogCi19CitDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9C
YXNlQ1RNKENHQ29udGV4dFJlZik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1
ZGUgIkNHQ29udGV4dFN0YXRlU2F2ZXIuaCIKIAorI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFn
ZS5jcHAKaW5kZXggZTZjZTJmYjk3MjQ3YTZiODZjMDliMWFkMzYxNzAxYzJlYzNlODYyNS4uYWYw
MGEwMTMzNDdlMGNkODVhMzBiODg0ZWJjNzlmMzJmMWUyMzEyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAK
QEAgLTEyNyw3ICsxMjcsNyBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVy
c01hdGNoKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYQogCiAgICAgLy8gT2xk
IGFuZCBuZXcgY29udGV4dCBzY2FsaW5nIGZhY3RvcnMgaGF2ZSB0byBtYXRjaCBhcyB3ZWxsLgog
ICAgIEFmZmluZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFRyYW5zZm9ybTsK
LSAgICBjb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpLmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKKyAgICBjb250ZXh0Lmdl
dENUTSgpLmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKIAogICAgIEFmZmluZVRyYW5z
Zm9ybTo6RGVjb21wb3NlZFR5cGUgY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybTsKICAgICBtX2Nh
Y2hlZFRyYW5zZm9ybS5kZWNvbXBvc2UoY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybSk7CkBAIC0y
NTUsNyArMjU1LDcgQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlm
TmVlZGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICB0cmFuc2Zvcm1Db250
ZXh0Rm9yUGFpbnRpbmcoYnVmZmVyQ29udGV4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KG1fY2FjaGVk
SW1hZ2VSZWN0LmxvY2F0aW9uKCksIHNyY1JlY3Quc2l6ZSgpKSk7CiAgICAgZHJhd1BERlBhZ2Uo
YnVmZmVyQ29udGV4dCk7CiAKLSAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9j
YWNoZWRUcmFuc2Zvcm0gPSBjb250ZXh0LmdldENUTSgpOwogICAgIG1fY2FjaGVkRGVzdGluYXRp
b25SZWN0ID0gZHN0UmVjdDsKICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogICAg
ICsrbV9jYWNoaW5nQ291bnRGb3JUZXN0aW5nOwpAQCAtMzYzLDYgKzM2Myw4IEBAIHZvaWQgUERG
RG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogCiAg
ICAgY29udGV4dC50cmFuc2xhdGUoLW1fY3JvcEJveC5sb2NhdGlvbigpKTsKIAorICAgIGNvbnRl
eHQuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAgIC8vIENHUERGIHBhZ2VzIGFyZSBpbmRleGVk
IGZyb20gMS4KICNpZiBQTEFURk9STShDT0NPQSkKICAgICBDR0NvbnRleHREcmF3UERGUGFnZVdp
dGhBbm5vdGF0aW9ucyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1BERkRvY3VtZW50R2V0
UGFnZShtX2RvY3VtZW50LmdldCgpLCAxKSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCBkNjg5YTUxYTg5MTAyYTUwOTA0
NTU5YjQ0MjIzNjlkZTE0NzAzMzM1Li5mZGVlZjZiMzhkMGM1YjU1NTY3MzdlYjdmNDRhZjJmMmZj
OWE0NDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
YXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhD
Ry5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgIEdy
YXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBzdHJva2VTdHls
ZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAotICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29u
dGV4dFBhdGhDb250YWluc1BvaW50KGNvbnRleHQsIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKKyAg
ICBib29sIGhpdFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChncmFwaGljc0Nv
bnRleHQucGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKICAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogCiAgICAgcmV0dXJuIGhpdFN1Y2Nlc3M7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3
R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggZWZiYzFl
NDk1NDQxYmVkZTczNGU5NDhkZDI2ZDM3MTQ0MTY1NTNlMC4uZTliN2FjNGQ3ZjRjYmY3NDEyODkz
OWJmYThjMDRlNzY1YTBkYmQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRl
ckNvcmVUZXh0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJEcmF3R2x5cGhzUmVjb3JkZXIuaCIKIAotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgi
CiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAi
Rm9udC5oIgpAQCAtMzUsNDkgKzM0LDQxIEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0K
ICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdp
bi5oPgotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIENHQ29udGV4dERl
bGVnYXRlUmVmIGJlZ2luTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVu
ZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBD
RkRpY3Rpb25hcnlSZWYsIENHQ29udGV4dERlbGVnYXRlUmVmKQorc3RhdGljIENHQ29udGV4dERl
bGVnYXRlUmVmIGJlZ2luTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVu
ZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0LCBDRkRpY3Rpb25hcnlS
ZWYsIENHQ29udGV4dERlbGVnYXRlUmVmKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVj
b3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdh
dGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihyc3Rh
dGUsIGdzdGF0ZSwgcmVjdCk7CisgICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihnc3RhdGUp
OwogICAgIHJldHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVm
IGVuZExheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRl
UmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRl
UmVmIGVuZExheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0
YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiBy
ZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxl
Z2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmRFbmRMYXllcihyc3Rh
dGUsIGdzdGF0ZSk7CisgICAgcmVjb3JkZXIucmVjb3JkRW5kTGF5ZXIoZ3N0YXRlKTsKICAgICBy
ZXR1cm4gZGVsZWdhdGU7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0
RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0
ZVJlZiBnc3RhdGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiB0bSwgY29uc3QgQ0dHbHlwaCBn
bHlwaHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGlj
IENHRXJyb3IgZHJhd0dseXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9y
bSosIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNp
emVfdCBjb3VudCkKIHsKLSAgICBpZiAoQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpID4gMCkgewot
ICAgICAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdH
bHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAg
ICAgICByZWNvcmRlci5yZWNvcmREcmF3R2x5cGhzKHJzdGF0ZSwgZ3N0YXRlLCB0bSwgZ2x5cGhz
LCBwb3NpdGlvbnMsIGNvdW50KTsKLSAgICB9CisgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNv
cmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0
ZUdldEluZm8oZGVsZWdhdGUpKTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3R2x5cGhzKGdzdGF0
ZSwgZ2x5cGhzLCBwb3NpdGlvbnMsIGNvdW50KTsKICAgICByZXR1cm4ga0NHRXJyb3JTdWNjZXNz
OwogfQogCi1zdGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVs
ZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENH
UmVjdCByZWN0LCBDR0ltYWdlUmVmIGltYWdlKQorc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENH
Q29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0
ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGltYWdlKQogewogICAgIERyYXdH
bHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVy
Kj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVj
b3JkRHJhd0ltYWdlKHJzdGF0ZSwgZ3N0YXRlLCByZWN0LCBpbWFnZSk7CisgICAgcmVjb3JkZXIu
cmVjb3JkRHJhd0ltYWdlKGdzdGF0ZSwgcmVjdCwgaW1hZ2UpOwogICAgIHJldHVybiBrQ0dFcnJv
clN1Y2Nlc3M7CiB9CiAKLVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNv
cmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKK3N0YXRpYyBVbmlxdWVSZWY8R3JhcGhpY3ND
b250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRleHQoRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRl
cikKIHsKLSAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdh
dGVDcmVhdGUodGhpcykpOworICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0Nv
bnRleHREZWxlZ2F0ZUNyZWF0ZSgmcmVjb3JkZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNl
dENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVCZWdpbkxheWVyLCByZWludGVycHJl
dF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZiZWdpbkxheWVyKSk7CiAgICAgQ0dD
b250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRW5kTGF5
ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmVuZExheWVy
KSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0
KCksIGRlRHJhd0dseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxi
YWNrPigmV2ViQ29yZTo6ZHJhd0dseXBocykpOwpAQCAtODYsNjcgKzc3LDE1IEBAIFVuaXF1ZVJl
ZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250
ZXh0KCkKICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHRDRz4oY29udGV4
dC5nZXQoKSk7CiB9CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdy
YXBoaWNzQ29udGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERy
YXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNvbnRleHQpCi0g
ICAgOiBtX293bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3Jk
ZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0ds
eXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVG
b250RnJvbUNvbnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNv
bnRleHQpCiAgICAgLCBtX2RlY29uc3RydWN0RHJhd0dseXBocyhkZWNvbnN0cnVjdERyYXdHbHlw
aHMpCiAgICAgLCBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dChkZXJpdmVGb250RnJvbUNvbnRleHQp
Ci0gICAgLCBtX2ludGVybmFsQ29udGV4dChjcmVhdGVJbnRlcm5hbENvbnRleHQoKSkKKyAgICAs
IG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4dCgqdGhpcykpCiB7CiB9CiAK
LXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAgICBtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLmNvbG9yID0gY29udGV4dFN0YXRlLmZpbGxDb2xvcjsKLSAgICBtX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50ID0gY29udGV4dFN0YXRlLmZpbGxHcmFkaWVudDsKLSAg
ICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBjb250
ZXh0U3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRl
LmZpbGxTdHlsZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLmZpbGxQYXR0ZXJuOwotCi0gICAgbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yID0gY29udGV4dFN0YXRlLnN0cm9rZUNvbG9y
OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0
ZS5zdHJva2VHcmFkaWVudDsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNm
b3JtOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuID0gY29udGV4dFN0
YXRlLnN0cm9rZVBhdHRlcm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuY3RtID0gbV9vd25lci5n
ZXRDVE0oKTsgLy8gRklYTUU6IERlYWwgd2l0aCBiYXNlIENUTS4KLQotICAgIG1fb3JpZ2luYWxT
dGF0ZS5zaGFkb3cub2Zmc2V0ID0gY29udGV4dFN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBtX29y
aWdpbmFsU3RhdGUuc2hhZG93LmJsdXIgPSBjb250ZXh0U3RhdGUuc2hhZG93Qmx1cjsKLSAgICBt
X29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yID0gY29udGV4dFN0YXRlLnNoYWRvd0NvbG9yOwot
ICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA9IGNvbnRleHRTdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLQotICAgIG1fY3VycmVudFN0YXRlID0gbV9vcmln
aW5hbFN0YXRlOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5h
bENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAg
ICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
IG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5jb2xvcik7Ci0gICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVu
dCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFk
aWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2lu
YWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7Ci0gICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0Rmls
bFBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7Ci0gICAgfQotCi0g
ICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAg
ICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ry
b2tlU3R5bGUuY29sb3IpOwotICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHls
ZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50
KCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5z
dHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKLSAgICAgICAgaWYg
KG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRl
cm5hbENvbnRleHQtPnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHls
ZS5wYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0Q1RNKG1fb3Jp
Z2luYWxTdGF0ZS5jdG0pOwotCi0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3Jtcyk7Ci0g
ICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9m
ZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93
LmNvbG9yLCBjb250ZXh0U3RhdGUuc2hhZG93UmFkaXVzTW9kZSk7Ci0KLSAgICBtX2ludGVybmFs
Q29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUp
OwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChj
b25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OnNldEludGVybmFsRm9udChjb25zdCBGb250JiBmb250LCBGb250
U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIEFTU0VSVChDR0FmZmluZVRyYW5z
Zm9ybUlzSWRlbnRpdHkoQ1RGb250R2V0TWF0cml4KGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250
KCkpKSk7CiAKQEAgLTE1NiwxMDQgKzk1LDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpw
cmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNCiAg
ICAgbV9vcmlnaW5hbFRleHRNYXRyaXggPSBjb21wdXRlT3ZlcmFsbFRleHRNYXRyaXgoZm9udCk7
CiAgICAgaWYgKGZvbnQucGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50
YXRpb246OlZlcnRpY2FsKQogICAgICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVW
ZXJ0aWNhbFRleHRNYXRyaXgoZm9udCwgbV9vcmlnaW5hbFRleHRNYXRyaXgpOwotCi0gICAgYXV0
byYgY29udGV4dFN0YXRlID0gbV9vd25lci5zdGF0ZSgpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxT
dGF0ZShjb250ZXh0U3RhdGUpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnRleHRT
dGF0ZSk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29u
dGV4dCgpCitHcmFwaGljc0NvbnRleHRTdGF0ZSBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJ
bnRlcm5hbENvbnRleHQoKQogewotICAgIHVwZGF0ZUNUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsK
LSAgICB1cGRhdGVGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvciwgbV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5wYXR0ZXJuLmdldCgpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihtX29yaWdpbmFs
U3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFk
aWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4uZ2V0KCkpOwot
ICAgIHVwZGF0ZVNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5h
bFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBtX29yaWdp
bmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPyBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czo6WWVzIDogU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Ok5vKTsKKyAgICBhdXRvIG9yaWdpbmFs
U3RhdGUgPSBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOworICAgIG1faW50ZXJuYWxDb250
ZXh0LT5tZXJnZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7CisgICAgbV9pbnRlcm5hbENvbnRl
eHQtPmFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGU7CiB9CiAK
LXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImIG5l
d0NvbG9yLCBHcmFkaWVudCogbmV3R3JhZGllbnQsIFBhdHRlcm4qIG5ld1BhdHRlcm4pCit2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSkKIHsKLSAgICAvLyBUaGlzIGNoZWNrIGxv
b2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVzZS4KLSAg
ICAvLyBDVCB3aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3aGljaCB0
aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUludGVybmFs
Q29udGV4dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHksIHdoaWNo
IHRoaXMgY2hlY2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0NvbG9yID09
IG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5jb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3U3RhdGU7Ci0gICAgbmV3U3RhdGUuZmlsbENvbG9yID0g
bmV3Q29sb3I7Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5maWxsR3Jh
ZGllbnQgPSBuZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0dGVybikKLSAgICAgICAgbmV3U3Rh
dGUuZmlsbFBhdHRlcm4gPSBuZXdQYXR0ZXJuOwotICAgIG1fb3duZXIuZGlkVXBkYXRlU3RhdGUo
bmV3U3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSB9KTsKLSAg
ICBtX2N1cnJlbnRTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBuZXdDb2xvcjsKKyAgICBtX2Rlc3Rp
bmF0aW9uQ29udGV4dC5tZXJnZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7CiB9CiAKLXZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTdHJva2VDb2xvcihjb25zdCBDb2xvciYgbmV3Q29s
b3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsK
LSAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9y
IG91ciBsaW1pdGVkIHVzZS4KLSAgICAvLyBDVCB3aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBh
IHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAv
LyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQg
d2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28u
Ci0gICAgaWYgKG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAg
ICBuZXdTdGF0ZS5zdHJva2VDb2xvciA9IG5ld0NvbG9yOwotICAgIGlmIChuZXdHcmFkaWVudCkK
LSAgICAgICAgbmV3U3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBuZXdHcmFkaWVudDsKLSAgICBpZiAo
bmV3UGF0dGVybikKLSAgICAgICAgbmV3U3RhdGUuc3Ryb2tlUGF0dGVybiA9IG5ld1BhdHRlcm47
Ci0gICAgbV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UgfSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5
bGUuY29sb3IgPSBuZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNH
R1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpKTsKIH0KIAotdm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKK3Zv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJlZiBnc3RhdGUp
CiB7Ci0gICAgaWYgKGN0bSA9PSBtX2N1cnJlbnRTdGF0ZS5jdG0pCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fb3duZXIuc2V0Q1RNKGN0bSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuY3RtID0gY3Rt
OworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRl
KSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0K
IAotc3RhdGljIGJvb2wgc2hhZG93SXNDbGVhcmVkKGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zm
c2V0LCBmbG9hdCBzaGFkb3dCbHVyKQotewotICAgIHJldHVybiBzaGFkb3dPZmZzZXQgPT0gRmxv
YXRTaXplKCkgJiYgIXNoYWRvd0JsdXI7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1
cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0Js
dXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMpCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRl
ciBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyBpZiBub2JvZHkgaGFzIGFueSBzaGFkb3dzLgotICAg
IGlmIChzaGFkb3dJc0NsZWFyZWQoc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyKSAmJiBzaGFkb3dJ
c0NsZWFyZWQobV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9jdXJyZW50U3RhdGUuc2hh
ZG93LmJsdXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBu
ZXdTdGF0ZTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBzdGF0
ZUNoYW5nZUZsYWdzOwotCi0gICAgaWYgKHNoYWRvd09mZnNldCAhPSBtX2N1cnJlbnRTdGF0ZS5z
aGFkb3cub2Zmc2V0IHx8IHNoYWRvd0JsdXIgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIg
fHwgc2hhZG93Q29sb3IgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmNvbG9yKSB7Ci0gICAgICAg
IG5ld1N0YXRlLnNoYWRvd09mZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICAgICAgbmV3U3RhdGUu
c2hhZG93Qmx1ciA9IHNoYWRvd0JsdXI7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd0NvbG9yID0g
c2hhZG93Q29sb3I7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgIT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkICYmIChzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKSAhPSBtX2N1
cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICBuZXdTdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLSAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKLSAg
ICB9Ci0gICAgaWYgKHN0YXRlQ2hhbmdlRmxhZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgc3RhdGVDaGFuZ2VGbGFncyk7
Ci0KLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0ID0gc2hhZG93T2Zmc2V0OwotICAg
IG1fY3VycmVudFN0YXRlLnNoYWRvdy5ibHVyID0gc2hhZG93Qmx1cjsKLSAgICBtX2N1cnJlbnRT
dGF0ZS5zaGFkb3cuY29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFk
b3cuaWdub3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVw
ZGF0ZVNoYWRvdyhDR1N0eWxlUmVmIHN0eWxlKQorc3RhdGljIHZvaWQgc2V0RHJvcFNoYWRvdyhH
cmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgQ0dTdHlsZVJlZiBzdHlsZSkKIHsK
ICAgICBpZiAoQ0dTdHlsZUdldFR5cGUoc3R5bGUpICE9IGtDR1N0eWxlU2hhZG93KSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IG1vcmUga2luZHMgb2YgQ0dTdHlsZXMuCi0gICAgICAgIHVw
ZGF0ZVNoYWRvdyh7MCwgMH0sIDAsIENvbG9yKCksIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpV
bnNwZWNpZmllZCk7CisgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5jbGVhclNoYWRvdygpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNjEsMjAgKzEzNCw5IEBAIHZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjp1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZiBzdHlsZSkKICAgICBhdXRvIHJh
ZCA9IGRlZzJyYWQoc2hhZG93U3R5bGUuYXppbXV0aCAtIDE4MCk7CiAgICAgYXV0byBzaGFkb3dP
ZmZzZXQgPSBGbG9hdFNpemUoc3RkOjpjb3MocmFkKSwgc3RkOjpzaW4ocmFkKSkgKiBzaGFkb3dT
dHlsZS5oZWlnaHQ7CiAgICAgYXV0byBzaGFkb3dDb2xvciA9IENHU3R5bGVHZXRDb2xvcihzdHls
ZSk7Ci0gICAgdXBkYXRlU2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93U3R5bGUucmFkaXVzLCBD
b2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHNoYWRvd0NvbG9yKSwgU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM6Olllcyk7Ci19CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNv
cmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dS
ZWN0KQotewotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgYXV0
byBhbHBoYSA9IENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKTsKLSAgICBtX293bmVyLmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoYWxwaGEpOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVj
b3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQotewot
ICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgbV9vd25lci5lbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zZXREcm9wU2hhZG93
KHsgc2hhZG93T2Zmc2V0LCBzdGF0aWNfY2FzdDxmbG9hdD4oc2hhZG93U3R5bGUucmFkaXVzKSwg
Q29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzaGFkb3dDb2xvcikgfSk7CisgICAg
ZGVzdGluYXRpb25Db250ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRydWUpOwogfQog
CiBzdGF0aWMgVmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhjb25z
dCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQsIGNvbnN0IENHQWZmaW5lVHJhbnNm
b3JtJiB0ZXh0TWF0cml4KQpAQCAtMjkwLDE4ICsxNTIsMTggQEAgc3RhdGljIFZlY3RvcjxDR1Np
emU+IGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMoY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNb
XSwgc2kKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6
cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUs
IGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3Qg
Q0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQordm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0dseXBoIGds
eXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCiB7CiAgICAg
QVNTRVJUX0lNUExJRVMobV9kZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21D
b250ZXh0OjpObywgbV9vcmlnaW5hbEZvbnQpOwogCi0gICAgaWYgKCFjb3VudCkKKyAgICBpZiAo
IWNvdW50IHx8IENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSA8PSAwKQogICAgICAgICByZXR1cm47
CiAKICAgICBDR0ZvbnRSZWYgdXNlZEZvbnQgPSBDR0dTdGF0ZUdldEZvbnQoZ3N0YXRlKTsKICAg
ICBpZiAobV9kZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpO
byAmJiB1c2VkRm9udCAhPSBhZG9wdENGKENURm9udENvcHlHcmFwaGljc0ZvbnQobV9vcmlnaW5h
bEZvbnQtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBudWxscHRyKSkuZ2V0KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAg
bV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKIAog
ICAgIC8vIFdlIHdhbnQgdGhlIHJlcGxheWVyJ3MgQ1RNIGFuZCB0ZXh0IG1hdHJpeCB0byBtYXRj
aCB0aGUgY3VycmVudCBDVE0gYW5kIHRleHQgbWF0cml4LgogICAgIC8vIFRoZSBjdXJyZW50IHRl
eHQgbWF0cml4IGlzIGEgY29uY2F0ZW5hdGlvbiBvZiB3aGF0ZXZlciBXZWJLaXQgc2V0cyBpdCB0
byBhbmQgd2hhdGV2ZXIKQEAgLTMyNCwxMyArMTg2LDE2IEBAIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdz
dGF0CiAgICAgICAgIGludmVyc2VDVE1GaXh1cCA9IGludmVyc2UudmFsdWUoKTsKICAgICBlbHNl
CiAgICAgICAgIGN0bUZpeHVwID0gQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgbV9vd25lci5jb25j
YXRDVE0oY3RtRml4dXApOworCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RNKGN0
bUZpeHVwKTsKIAogICAgIGF1dG8gZmlsbENvbG9yID0gQ0dHU3RhdGVHZXRGaWxsQ29sb3IoZ3N0
YXRlKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmNyZWF0
ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShmaWxsQ29sb3IpKTsKKwogICAgIGF1dG8gc3Ryb2tlQ29s
b3IgPSBDR0dTdGF0ZUdldFN0cm9rZUNvbG9yKGdzdGF0ZSk7Ci0gICAgdXBkYXRlRmlsbENvbG9y
KENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2UoZmlsbENvbG9yKSk7Ci0gICAgdXBk
YXRlU3Ryb2tlQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VD
b2xvcikpOwotICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVz
ZXJ2ZUNvbG9yU3BhY2Uoc3Ryb2tlQ29sb3IpKTsKKworICAgIHNldERyb3BTaGFkb3cobV9kZXN0
aW5hdGlvbkNvbnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAgICBhdXRvIGZv
bnRTaXplID0gQ0dHU3RhdGVHZXRGb250U2l6ZShnc3RhdGUpOwogICAgIFJlZiBmb250ID0gbV9k
ZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyA/ICptX29y
aWdpbmFsRm9udCA6IEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGFkb3B0Q0YoQ1RGb250
Q3JlYXRlV2l0aEdyYXBoaWNzRm9udCh1c2VkRm9udCwgZm9udFNpemUsIG51bGxwdHIsIG51bGxw
dHIpKSwgZm9udFNpemUpKTsKQEAgLTM0NSwzMCArMjEwLDM4IEBAIHZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVm
IGdzdGF0CiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjMyOTE3PiAo
YERyYXdHbHlwaHNSZWNvcmRlcmAgc2hvdWxkIGJlIGFibGUgdG8gcmVjb3JkK3JlcGxheSB2ZXJ0
aWNhbCB0ZXh0KQogICAgIH0KIAotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChm
b250LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3Vu
dCwgdGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgdGV4dE1hdHJpeC5tYXBQb2ludChwb3NpdGlv
bnNbMF0pLCBtX3Ntb290aGluZ01vZGUpOwotCi0gICAgbV9vd25lci5jb25jYXRDVE0oaW52ZXJz
ZUNUTUZpeHVwKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVG
b250KGZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMs
IGNvdW50LCB0ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0TWF0cml4Lm1hcFBvaW50KHBv
c2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQu
Y29uY2F0Q1RNKGludmVyc2VDVE1GaXh1cCk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRl
LCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJlZiBjZ0ltYWdlKQordm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnJlY29yZERyYXdJbWFnZShDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0lt
YWdlUmVmIGNnSW1hZ2UpCiB7Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUp
KTsKLSAgICB1cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKyAgICBtX2Rl
c3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIHNl
dERyb3BTaGFkb3cobV9kZXN0aW5hdGlvbkNvbnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRl
KSk7CiAKICAgICAvLyBDb3JlIEdyYXBoaWNzIGFzc3VtZXMgYSAieSB1cCIgY29vcmRpbmF0ZSBz
eXN0ZW0sIGJ1dCBpbiBXZWJLaXQsIHdlIHVzZSBhICJ5LWRvd24iIGNvb3JkaW5hdGUgc3lzdGVt
LgogICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBXZWJLaXQncyBkcmF3aW5nIHJvdXRpbmVzIChHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZSgpKSBpbnRlbnRpb25hbGx5IGRyYXcgaW1hZ2VzIHVwc2lk
ZS1kb3duIGZyb20gQ29yZSBHcmFwaGljcydzIHBvaW50IG9mIHZpZXcuCiAgICAgLy8gKFRoZXJl
J3MgYSB5LWZsaXAgaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZSgpLikKICAgICAvLyBUaGUgcmVjdCBoYXMgdGhlIHJpZ2h0IGJvdW5kcywgYnV0
IHdlIG5lZWQgdG8gdHJhbnNmb3JtIGZyb20gQ0cncyBjb29yZGluYXRlIHN5c3RlbSB0byBXZWJL
aXQncyBieSBwZXJmb3JtaW5nIG91ciBvd24geS1mbGlwIHNvIGltYWdlcyBhcmUgZHJhd24gdGhl
IHJpZ2h0LXNpZGUtdXAuCiAgICAgLy8gV2UgZG8gdGhpcyBhdCB0aGUgYm91bmRhcnkgYmV0d2Vl
biB0aGUgdHdvIEFQSXMsIHdoaWNoIGlzIHJpZ2h0IGhlcmUuCi0gICAgbV9vd25lci50cmFuc2xh
dGUoMCwgcmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKLSAgICBtX293bmVy
LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJh
bnNsYXRlKDAsIHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSk7CisgICAgbV9k
ZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgCiAgICAgYXV0
byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5kcmF3
TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0
UmVjdCB7eyB9LCBpbWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9y
aWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQu
ZHJhd05hdGl2ZUltYWdlKCppbWFnZSwgaW1hZ2UtPnNpemUoKSwgRmxvYXRSZWN0KHJlY3QpLCBG
bG9hdFJlY3QgeyB7IH0sIGltYWdlLT5zaXplKCkgfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJ
bWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOworICAgIAogICAgIC8vIFVuZG8gdGhl
IGFib3ZlIHktZmxpcCB0byByZXN0b3JlIHRoZSBjb250ZXh0LgotICAgIG1fb3duZXIuc2NhbGUo
RmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgLShyZWN0LnNpemUu
aGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xh
dGUoMCwgLShyZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpKTsKK30KKwordm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bihjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2lu
dCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBzZXRJbnRlcm5hbEZv
bnQoZm9udCwgc21vb3RoaW5nTW9kZSk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0g
cHJlcGFyZUludGVybmFsQ29udGV4dCgpOworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1f
aW50ZXJuYWxDb250ZXh0LCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0
UG9pbnQsIHNtb290aGluZ01vZGUpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3Jp
Z2luYWxTdGF0ZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4o
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBA
IC0zNzksMjUgKzI1MiwxOSBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVu
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIGF1dG8g
Ym91bmRzID0gZm9udC5ib3VuZHNGb3JHbHlwaChnbHlwaHNbaV0pOwogCiAgICAgICAgIC8vIENy
ZWF0ZSBhIGxvY2FsIEltYWdlQnVmZmVyIGJlY2F1c2UgZGVjb2RpbmcgdGhlIFNWRyBmb250cyBo
YXMgdG8gaGFwcGVuIGluIFdlYlByb2Nlc3MuCi0gICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVy
ID0gbV9vd25lci5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoYm91bmRzLCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9kOjpMb2NhbCkpIHsKKyAgICAgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jcmVhdGVBbGlnbmVkSW1h
Z2VCdWZmZXIoYm91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5n
TWV0aG9kOjpMb2NhbCkpIHsKKyAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKICAgICAgICAgICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKGlt
YWdlQnVmZmVyLT5jb250ZXh0KCksIGZvbnQsIGdseXBocyArIGksIGFkdmFuY2VzICsgaSwgMSwg
RmxvYXRQb2ludCgpLCBzbW9vdGhpbmdNb2RlKTsKIAogICAgICAgICAgICAgRmxvYXRSZWN0IGRl
c3RpbmF0aW9uUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKTsKICAgICAgICAgICAgIGRl
c3RpbmF0aW9uUmVjdC5tb3ZlQnkocGVuUG9zaXRpb24pOwotICAgICAgICAgICAgbV9vd25lci5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICAg
ICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZGVz
dGluYXRpb25SZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIHBlblBvc2l0aW9uLm1vdmUoc2l6
ZShhZHZhbmNlc1tpXSkpOwogICAgIH0KIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRy
YXdOb25PVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21v
b3RoaW5nTW9kZSkKLXsKLSAgICBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGZvbnQsIHNtb290aGlu
Z01vZGUpOwotICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxDb250ZXh0LCBm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01v
ZGUpOwotICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7Ci19Ci0KIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAg
YXV0byBvdHN2Z0dseXBocyA9IGZvbnQuZmluZE9UU1ZHR2x5cGhzKGdseXBocywgbnVtR2x5cGhz
KTsKQEAgLTQ0MCw3ICszMDcsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0J5U3Bs
aXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmIGZvbgogdm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1
bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9v
dGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgaWYgKG1fZGVjb25zdHJ1Y3REcmF3R2x5
cGhzID09IERlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pIHsKLSAgICAgICAgbV9vd25lci5kcmF3
R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3Rh
cnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBz
dGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NDUzLDE1ICszMjAsMTcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0
KENURm9udFJlZiBmb250LCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmUKIHsKICAgICBBU1NFUlQo
bV9kZWNvbnN0cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwog
Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihtX293bmVyKTsKKyAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKG1fZGVzdGluYXRpb25Db250ZXh0KTsKIAotICAg
IG1fb3duZXIudHJhbnNsYXRlKGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSAr
IGxpbmVSZWN0LnNpemUuaGVpZ2h0KTsKLSAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAt
MSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZShsaW5lUmVjdC5vcmlnaW4u
eCwgbGluZVJlY3Qub3JpZ2luLnkgKyBsaW5lUmVjdC5zaXplLmhlaWdodCk7CisgICAgbV9kZXN0
aW5hdGlvbkNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAKLSAgICBwcmVwYXJlSW50
ZXJuYWxDb250ZXh0KEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGZvbnQsIGZvbnRTaXpl
KSksIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKKyAgICBzZXRJbnRl
cm5hbEZvbnQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwg
Rm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIAorICAgIGF1dG8g
b3JpZ2luYWxTdGF0ZSA9IHByZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKICAgICBDR0NvbnRleHRT
ZXRUZXh0UG9zaXRpb24obV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAwLCAw
KTsKICAgICBDVExpbmVEcmF3KGxpbmUsIG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKKyAgICByZXN0b3JlRGVzdGlu
YXRpb25Db250ZXh0KG9yaWdpbmFsU3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9G
b250Q2FzY2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCmluZGV4IDUxMWUwOWI5NmNlZjAzMjUw
OTBlMjNhZjkxNGFlMzVmMmFiOGVkMmUuLmU1MzRjYzU1YWYyNmI3ZmI4MjgwZTYzYjdkYzI1YTNk
NGE0MTYzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC0xNTIsMjUg
KzE1MiwyNyBAQCBzdGF0aWMgdm9pZCBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlv
bnMoVmVjdG9yPENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucwogICAgIH0KIH0KIAotc3RhdGljIHZv
aWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
Rm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywg
Y29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdGV4dE1hdHJpeCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1
bnNpZ25lZCBjb3VudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQogewogICAg
IGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRl
eHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisKICAgICBWZWN0b3I8Q0dQ
b2ludCwgMjU2PiBwb3NpdGlvbnMoY291bnQpOwogICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50
YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7Ci0gICAgICAgIFNjb3BlZFRl
eHRNYXRyaXggc2F2ZWRNYXRyaXgoY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCB0ZXh0
TWF0cml4KSwgY29udGV4dCk7CisgICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgo
Y29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCB0ZXh0TWF0cml4KSwgY2dDb250ZXh0KTsK
IAogICAgICAgICBWZWN0b3I8Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhjb3VudCk7CiAgICAg
ICAgIENURm9udEdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBsYXRmb3JtRGF0YS5j
dEZvbnQoKSwgZ2x5cGhzLCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7CiAKICAgICAgICAg
YXV0byBhc2NlbnREZWx0YSA9IGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3Jh
cGhpY0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpOwotICAgICAg
ICBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjb250ZXh0
LCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBhZHZhbmNlcywgY291bnQsIHBvaW50LCBhc2NlbnREZWx0
YSk7Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlw
aHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICAgICAgZmlsbFZlY3Rv
cldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY2dDb250ZXh0LCB0cmFuc2xh
dGlvbnMuZGF0YSgpLCBhZHZhbmNlcywgY291bnQsIHBvaW50LCBhc2NlbnREZWx0YSk7CisgICAg
ICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0
aW9ucy5kYXRhKCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZp
bGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwg
YWR2YW5jZXMsIGNvdW50LCBwb2ludCk7Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZv
cm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0
KTsKKyAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRp
b25zLCBjZ0NvbnRleHQsIGFkdmFuY2VzLCBjb3VudCwgcG9pbnQpOworICAgICAgICBDVEZvbnRE
cmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgp
LCBjb3VudCwgY2dDb250ZXh0KTsKICAgICB9CiB9CiAKQEAgLTI0MiwxMCArMjQ0LDcgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAgICBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQp
OwogICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUo
KSk7CiAKLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7
Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgY29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CisgICAgYXV0byBkcm9wU2hhZG93ID0gY29u
dGV4dC5kcm9wU2hhZG93KCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNv
bnRleHQuZ2V0Q1RNKCk7CiAgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3lu
dGhldGljQm9sZE9mZnNldCgpOwpAQCAtMjU4LDI5ICsyNTcsMjkgQEAgdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEcKICAgICAgICAgfQogICAgIH07CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9
IGNvbnRleHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNo
YWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29s
b3JCaXRtYXBGb250KCkgJiYgKCFjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwg
Y29udGV4dENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4
dC5pc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNv
bnRleHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIGRyb3BT
aGFkb3cuY29sb3IuaXNWYWxpZCgpICYmICFkcm9wU2hhZG93LmJsdXJSYWRpdXMgJiYgIXBsYXRm
b3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcygpIHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQo
KSkgJiYgIWNvbnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKGhhc1NpbXBs
ZVNoYWRvdykgewogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5z
dGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBh
bnRpYWxpYXNpbmcuCiAgICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29s
b3IgZmlsbENvbG9yID0gY29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93
RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENv
bG9yLmFscGhhQXNGbG9hdCgpKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gZHJv
cFNoYWRvdy5jb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFB
c0Zsb2F0KCkpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3Ip
OwotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53
aWR0aCgpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIGRyb3BTaGFk
b3cub2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRy
YW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5
ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9p
bnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoKSA/IC0xIDogMSk7Ci0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxv
YXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBo
cywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgICAgIGZsb2F0IHNoYWRv
d1RleHRZID0gcG9pbnQueSgpICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4
dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKyAgICAgICAgc2hvd0dseXBo
c1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQs
IGNvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAg
ICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hh
ZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
dGV4dE1hdHJpeCk7CisgICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9p
bnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQs
IGNvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAg
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CiAgICAgfQogCi0gICAgc2hvd0ds
eXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2Vz
LCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9p
bnQsIGZvbnQsIGNvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJp
eCk7CiAKICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hvd0dseXBoc1dp
dGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBv
aW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0
ZXh0TWF0cml4KTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBv
aW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNvbnRleHQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAKICAgICBpZiAoaGFz
U2ltcGxlU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KGRy
b3BTaGFkb3cpOwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHNob3VsZFNt
b290aEZvbnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuY3BwCmluZGV4IDJlMmY0ZjRmMmNiNTVkMzY1ZTVhZTM5OTMyNWQwNWYyYzE3MzYx
ZmQuLmNjZjQwY2VhNjJiMTY3NDM2NmQ3NDg0MTYyYjFiYzRlOTM3NzA3NTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmNwcApAQCAtOTAsMTAgKzkwLDcgQEAgYm9vbCBEaXNwbGF5TGlzdDo6c2hv
dWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAg
ICAgIGlmICghKGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMp
KSB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBpdGVtLmdldDxTZXRTdGF0
ZT4oKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93LCBvbmx5IGRyb3AgdGhlIGl0ZW0g
aWYgdGhlIG9ubHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4KLSAg
ICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoc3RhdGVJdGVt
LnN0YXRlQ2hhbmdlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAgICAgICAgICAgaWYgKHN0YXRlSXRl
bS5zdGF0ZSgpLmNoYW5nZXMoKSA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjAyLDE2ICsxOTksNiBAQCB2b2lkIERpc3Bs
YXlMaXN0OjphcHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPFNh
dmU+KGl0ZW0uZ2V0PFNhdmU+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAg
ICAgIHJldHVybiBhcHBlbmQ8UmVzdG9yZT4oaXRlbS5nZXQ8UmVzdG9yZT4oKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gYXBwZW5kPFRyYW5zbGF0ZT4o
aXRlbS5nZXQ8VHJhbnNsYXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAg
ICAgIHJldHVybiBhcHBlbmQ8Um90YXRlPihpdGVtLmdldDxSb3RhdGU+KCkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNjYWxlOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNjYWxlPihpdGVtLmdldDxT
Y2FsZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJl
dHVybiBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0Q1RN
PihpdGVtLmdldDxTZXRDVE0+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvcjoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0uZ2V0
PFNldElubGluZUZpbGxDb2xvcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6CkBAIC0yMjAsMTYgKzIwNyw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJ
dGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNz
PihpdGVtLmdldDxTZXRTdHJva2VUaGlja25lc3M+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0YXRlOgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0YXRlPihpdGVtLmdldDxTZXRTdGF0
ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRMaW5lQ2FwPihpdGVtLmdldDxTZXRMaW5lQ2FwPigpKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lRGFzaD4oaXRl
bS5nZXQ8U2V0TGluZURhc2g+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgot
ICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVKb2luPihpdGVtLmdldDxTZXRMaW5lSm9pbj4o
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRNaXRlckxpbWl0PihpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGVhclNoYWRv
dz4oaXRlbS5nZXQ8Q2xlYXJTaGFkb3c+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAg
ICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcD4oaXRlbS5nZXQ8Q2xpcD4oKSk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dDoKQEAgLTI3NCw4ICsyNTEsNiBAQCB2b2lkIERpc3BsYXlMaXN0Ojph
cHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0
aENvbG9yPihpdGVtLmdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RX
aXRoR3JhZGllbnQ+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8Rmls
bENvbXBvc2l0ZWRSZWN0PihpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOwogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxs
Um91bmRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKSk7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKaW5kZXggMGMyNTIyNjRhZjQxNjY1NjIxNzUxNjA0
MTA0MmE4YmRkM2JmYWJiNS4uZGVmY2U4NGVmMzU4N2JlYTA2ZDIwN2RiNWI4MDJhYTdjODI1NjUw
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNw
cApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QgewogCiBEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDog
bV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVj
dCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3Bs
YXlMaXN0LCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0pCiB7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggNDU3NzU1
MTg5YmRhZGQ3MTlkMjQ1YTRlNmQyYzgxYmRkYjFmN2RmMy4uMGRiMTUwMzk2MDQwMzJmMzMwM2Zi
Y2I2NTIxZTUzZTRlMzRmOTE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bUJ1ZmZlci5jcHAKQEAgLTUyLDIxICs1Miw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAg
ICAgIGdldDxSZXN0b3JlPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBnZXQ8VHJhbnNsYXRlPigpLmFwcGx5
KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgot
ICAgICAgICBnZXQ8Um90YXRlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGdldDxTY2FsZT4oKS5hcHBseShjb250
ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
OgotICAgICAgICBnZXQ8Q29uY2F0ZW5hdGVDVE0+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGdldDxTZXRDVE0+
KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkuYXBw
bHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc5LDIxICs2NCw2IEBAIHZvaWQgSXRl
bUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5
cGU6OlNldFN0YXRlOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIGdldDxTZXRMaW5l
Q2FwPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5hcHBseShjb250ZXh0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAg
ICAgICBnZXQ8U2V0TGluZUpvaW4+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICBnZXQ8U2V0TWl0ZXJM
aW1pdD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBnZXQ8Q2xlYXJTaGFkb3c+KCkuYXBwbHkoY29udGV4
dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICBn
ZXQ8Q2xpcD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTYwLDkgKzEz
MCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQog
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICBnZXQ8Rmls
bFJlY3RXaXRoR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGdldDxGaWxsQ29t
cG9zaXRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+
KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI3MCw5ICsyMzcsNiBAQCB2
b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgog
ICAgICAgICBnZXQ8RHJhd1BhdGg+KCkufkRyYXdQYXRoKCk7CiAgICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGdldDxGaWxsQ29t
cG9zaXRlZFJlY3Q+KCkufkZpbGxDb21wb3NpdGVkUmVjdCgpOwotICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIGdldDxGaWxsUGF0aD4oKS5+Rmls
bFBhdGgoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjg4LDkgKzI1Miw2IEBAIHZvaWQgSXRlbUhh
bmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAg
ICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLn5GaWxsUm91bmRlZFJlY3QoKTsKICAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBnZXQ8U2V0
TGluZURhc2g+KCkuflNldExpbmVEYXNoKCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgZ2V0PFNldFN0YXRlPigpLn5TZXRTdGF0ZSgpOwog
ICAgICAgICByZXR1cm47CkBAIC0zMTQsOSArMjc1LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0
cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsZWFyUmVjdD46OnZhbHVlKTsKICAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclNoYWRvdz46
OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsaXA+Ojp2
YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTMyNiw5ICsyODQsNiBAQCB2b2lkIEl0ZW1IYW5k
bGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwVG9J
bWFnZUJ1ZmZlcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6
OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxDb25jYXRlbmF0ZUNUTT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTM4NywzMyArMzQyLDE1
IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9y
ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
UmVzdG9yZT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlJv
dGF0ZToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8Um90YXRlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2F2ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8U2F2ZT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNj
YWxlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxTY2FsZT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dENUTToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8U2V0Q1RNPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lU3Ry
b2tlQ29sb3I+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxTZXRMaW5lQ2FwPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVKb2luPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TWl0ZXJMaW1pdD46OnZhbHVlKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoK
ICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0
U3Ryb2tlVGhpY2tuZXNzPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC00MzcsOSArMzc0
LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VMaW5lOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxTdHJva2VMaW5lPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxUcmFuc2xhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICB9
CiB9CiAKQEAgLTUwMSw4ICs0MzUsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1U
eXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1
cm4gY29weUludG88RHJhd1BhdHRlcm4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UGF0aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdQYXRoPihpdGVt
T2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0Ogot
ICAgICAgICByZXR1cm4gY29weUludG88RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtT2Zmc2V0LCAq
dGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIHJldHVybiBjb3B5
SW50bzxGaWxsUGF0aD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aENvbG9yOgpAQCAtNTEzLDggKzQ0NSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2Fm
ZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAg
ICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbU9mZnNl
dCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPEZpbGxSb3VuZGVkUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0
TGluZURhc2g+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZToKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0YXRlPihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKQEAgLTUzMSwxNiArNDYxLDEyIEBAIGJv
b2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVz
dGluYXRpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxCZWdpblRyYW5zcGFyZW5j
eUxheWVyPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0
OgogICAgICAgICByZXR1cm4gY29weUludG88Q2xlYXJSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBjb3B5SW50
bzxDbGVhclNoYWRvdz4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXA6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBP
dXQ+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1
ZmZlcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBUb0ltYWdlQnVmZmVyPihpdGVtT2Zm
c2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAg
IHJldHVybiBjb3B5SW50bzxDb25jYXRlbmF0ZUNUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgICAgIHJldHVy
biBjb3B5SW50bzxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CkBAIC01NzMsMjQgKzQ5OSwxMiBAQCBi
b29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRl
c3RpbmF0aW9uKSBjb25zdAogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPFJlc3RvcmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxSb3RhdGU+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICByZXR1
cm4gY29weUludG88U2F2ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNjYWxlOgotICAgICAgICByZXR1cm4gY29weUludG88U2NhbGU+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxT
ZXRDVE0+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVG
aWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xv
cjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtT2Zm
c2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFNldExpbmVDYXA+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVKb2lu
PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
LSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldE1pdGVyTGltaXQ+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CiAgICAgICAgIHJldHVy
biBjb3B5SW50bzxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgpAQCAtNjA3LDggKzUyMSw2IEBAIGJvb2wgSXRl
bUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRp
b24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTdHJva2VSZWN0PihpdGVtT2Zmc2V0
LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToKICAgICAgICAgcmV0dXJu
IGNvcHlJbnRvPFN0cm9rZUxpbmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxUcmFuc2xhdGU+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCmluZGV4IDU0ZWExYzg2ODJjMDc0NDJlMmU4NDE0
YjczMjhhYTMyNDgwMjVhNzUuLmJhMGQ5NTFjMjJjZjQ5Y2U0MTdlMzM1NTNiMDBlMGE1YjhhYjIw
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKQEAgLTM4LDE2
ICszOCw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkK
ICAgICAgICAgcmV0dXJuIHNpemVvZihTYXZlKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3Jl
OgogICAgICAgICByZXR1cm4gc2l6ZW9mKFJlc3RvcmUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRy
YW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihUcmFuc2xhdGUpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihSb3RhdGUpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNjYWxlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNjYWxlKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihDb25jYXRl
bmF0ZUNUTSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFNldENUTSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAg
ICAgICByZXR1cm4gc2l6ZW9mKFNldElubGluZUZpbGxDb2xvcik7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CkBAIC01NiwxNiArNDYsNiBAQCBzdGF0aWMgc2l6ZV90
IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2Yo
U2V0U3Ryb2tlVGhpY2tuZXNzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAg
ICAgcmV0dXJuIHNpemVvZihTZXRTdGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lQ2FwKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lRGFzaCk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGlu
ZUpvaW4pOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoU2V0TWl0ZXJMaW1pdCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoQ2xlYXJTaGFkb3cpOwogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXA6CiAgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dDoKQEAgLTExMCw4ICs5MCw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0
ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhDb2xv
cik7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHJl
dHVybiBzaXplb2YoRmlsbFJlY3RXaXRoR3JhZGllbnQpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsQ29tcG9zaXRlZFJl
Y3QpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJu
IHNpemVvZihGaWxsUm91bmRlZFJlY3QpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlOgpAQCAtMTgyLDI4ICsxNjAsMTggQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0
ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKICAgICBj
YXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGVhclNoYWRvdzoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBPdXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
UGF0aDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1U
eXBlOjpGbHVzaENvbnRleHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNl
IEl0ZW1UeXBlOjpSb3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0
cm9rZUNvbG9yOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZURhc2g6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgY2FzZSBJdGVt
VHlwZTo6VHJhbnNsYXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6
CkBAIC0yMjIsNyArMTkwLDYgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6
CiAgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNl
OgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxM
aW5lOgpAQCAtMjg4LDEzICsyNTUsMTEgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlw
ZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgogICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdMaW5lc0ZvclRleHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRo
OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlOgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdT
eXN0ZW1JbWFnZToKQEAgLTMwNiwxMSArMjcxLDkgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5
cGUgdHlwZSkKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyU2hhZG93OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyOgpAQCAtMzMzLDE1ICsyOTYsOSBA
QCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlBh
aW50RnJhbWVGb3JNZWRpYToKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJ
bmxpbmVTdHJva2VDb2xvcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGlt
aXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZUVsbGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCkBAIC0z
NTEsNyArMzA4LDYgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICNlbmRpZgog
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
TGluZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtVHlwZS5oCmluZGV4IGQ2ODNiMmFjZjc4NDVmOTljM2NkMDk1ZWI5MTFlNTRmMWY4
Y2UxMTEuLjE2NjBiOThmZGE1ZWYyN2IzZjc1ZDIyYTU3OWEzYTlhZTNjYzcwZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1UeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaApAQCAtMzEsMjAgKzMxLDEwIEBAIG5hbWVz
cGFjZSBEaXNwbGF5TGlzdCB7CiBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CiAgICAg
U2F2ZSwKICAgICBSZXN0b3JlLAotICAgIFRyYW5zbGF0ZSwKLSAgICBSb3RhdGUsCi0gICAgU2Nh
bGUsCi0gICAgQ29uY2F0ZW5hdGVDVE0sCi0gICAgU2V0Q1RNLAogICAgIFNldElubGluZUZpbGxD
b2xvciwKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvciwKICAgICBTZXRTdHJva2VUaGlja25lc3Ms
CiAgICAgU2V0U3RhdGUsCi0gICAgU2V0TGluZUNhcCwKLSAgICBTZXRMaW5lRGFzaCwKLSAgICBT
ZXRMaW5lSm9pbiwKLSAgICBTZXRNaXRlckxpbWl0LAotICAgIENsZWFyU2hhZG93LAogICAgIENs
aXAsCiAgICAgQ2xpcE91dCwKICAgICBDbGlwVG9JbWFnZUJ1ZmZlciwKQEAgLTY3LDcgKzU3LDYg
QEAgZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIEZpbGxSZWN0LAogICAgIEZp
bGxSZWN0V2l0aENvbG9yLAogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50LAotICAgIEZpbGxDb21w
b3NpdGVkUmVjdCwKICAgICBGaWxsUm91bmRlZFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUsCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKaW5kZXggMjNkMGJiY2M3MWMyODFjNTJjMzVhOGMyNTJkYTk2YzBhYjEy
YTk4Yy4uODQzZmRmMWU3NzJlN2MxYzM5NjhjMTM4MGYzNDEzOWU4ODNlMzE1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNTQsNjcgKzU0LDYgQEAgdm9pZCBSZXN0
b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgY29udGV4dC5y
ZXN0b3JlKCk7CiB9CiAKLXZvaWQgVHJhbnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNs
YXRlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgieCIsIGl0ZW0ueCgpKTsKLSAgICB0
cy5kdW1wUHJvcGVydHkoInkiLCBpdGVtLnkoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZv
aWQgUm90YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAg
Y29udGV4dC5yb3RhdGUobV9hbmdsZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSb3RhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJhbmdsZSIsIGl0ZW0uYW5nbGUoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZv
aWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LnNjYWxlKG1fc2l6ZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY2FsZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoInNpemUiLCBpdGVtLmFtb3VudCgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBT
ZXRDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250
ZXh0LnNldENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRDVE0mIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJzZXQtY3RtIiwgaXRlbS50cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgQ29uY2F0ZW5hdGVDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKLXsKLSAgICBjb250ZXh0LmNvbmNhdENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0
ZUNUTSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImN0bSIsIGl0ZW0udHJhbnNmb3Jt
KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCiB2b2lkIFNldElubGluZUZpbGxDb2xvcjo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKGNvbG9yKCkpOwpAQCAtMTQ4LDc3ICs4NywyMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3Ryb2tlVGhpY2tuZXNzJiBzdGF0
ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIGZsYWdzKQotICAgIDogbV9zdGF0ZUNoYW5nZShzdGF0ZSwgZmxhZ3MpCi17Ci19Ci0KLVNl
dFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVD
aGFuZ2UpCi0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlKQorU2V0U3RhdGU6OlNldFN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKKyAgICA6IG1fc3RhdGUoc3Rh
dGUpCiB7CiB9CiAKIHZvaWQgU2V0U3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKIHsKLSAgICBtX3N0YXRlQ2hhbmdlLmFwcGx5KGNvbnRleHQpOworICAgIGNvbnRleHQubWVy
Z2VTdGF0ZUNoYW5nZXMobV9zdGF0ZSk7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3RhdGUpCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmKQogewotICAg
IHRzIDw8IHN0YXRlLnN0YXRlQ2hhbmdlKCk7CiAgICAgcmV0dXJuIHRzOwogfQogCi12b2lkIFNl
dExpbmVDYXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LnNldExpbmVDYXAobV9saW5lQ2FwKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXApCi17Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWNhcCIsIGxpbmVDYXAubGluZUNhcCgpKTsKLSAgICBy
ZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5LCBt
X2Rhc2hPZmZzZXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQotewotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiZGFzaC1hcnJheSIsIGxpbmVEYXNoLmRhc2hBcnJheSgpKTsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImRhc2gtb2Zmc2V0IiwgbGluZURhc2guZGFzaE9mZnNldCgpKTsKLSAgICByZXR1cm4g
dHM7Ci19Ci0KLXZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGlu
ZUpvaW4mIGxpbmVKb2luKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1qb2luIiwgbGlu
ZUpvaW4ubGluZUpvaW4oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldE1pdGVyTGlt
aXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0
LnNldE1pdGVyTGltaXQobV9taXRlckxpbWl0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVyTGltaXQmIG1pdGVyTGltaXQp
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJtaXRyZS1saW1pdCIsIG1pdGVyTGltaXQubWl0ZXJM
aW1pdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJTaGFkb3c6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyU2hhZG93
KCk7Ci19Ci0KIHZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwpAQCAtNjU3LDMwICs1NDAsMTUgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0
V2l0aEdyYWRpZW50JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotdm9pZCBGaWxsQ29tcG9z
aXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwotfQot
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmls
bENvbXBvc2l0ZWRSZWN0JiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0
ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNvbXBvc2l0
ZU9wZXJhdG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxl
bmRNb2RlKCkpOwotICAgIHJldHVybiB0czsKLX0KLQogdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBjb250ZXh0LmZpbGxS
b3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKKyAgICBjb250ZXh0LmZp
bGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQog
ewogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7CiAgICAgcmV0dXJuIHRzOwogfQog
CkBAIC03NjgsOCArNjM2LDggQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQogfQogCiAjaWYgRU5BQkxFKFZJREVP
KQotUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBs
YXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLSAgICA6IG1faWRlbnRpZmllcihw
bGF5ZXIuaWRlbnRpZmllcigpKQorUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fZGVzdGlu
YXRpb24oZGVzdGluYXRpb24pCiB7CiB9CkBAIC0xMDExLDE5ICs4NzksMTAgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRDVE06IHRzIDw8ICJzZXQtY3RtIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q29uY2F0ZW5hdGVDVE06IHRzIDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB0cyA8PCAic2V0LWlubGluZS1maWxs
LWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6
IHRzIDw8ICJzZXQtaW5saW5lLXN0cm9rZS1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldFN0cm9rZVRoaWNrbmVzczogdHMgPDwgInNldC1zdHJva2UtdGhpY2tuZXNzIjsgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHRzIDw8ICJzZXQtc3RhdGUiOyBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB0cyA8PCAic2V0LWxpbmUtY2FwIjsg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6IHRzIDw8ICJzZXQtbGluZS1k
YXNoIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHRzIDw8ICJzZXQt
bGluZS1qb2luIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogdHMg
PDwgInNldC1taXRlci1saW1pdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHRz
IDw8ICJjbGlwIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDogdHMgPDwgImNs
aXAtb3V0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6IHRz
IDw8ICJjbGlwLXRvLWltYWdlLWJ1ZmZlciI7IGJyZWFrOwpAQCAtMTA0Niw3ICs5MDUsNiBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlw
ZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogdHMgPDwgImZpbGwtcmVjdCI7IGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8PCAiZmlsbC1yZWN0
LXdpdGgtY29sb3IiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFk
aWVudDogdHMgPDwgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IjsgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21wb3NpdGVkLXJlY3Qi
OyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6IHRzIDw8ICJmaWxs
LXJvdW5kZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIjsgYnJlYWs7CiAj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCkBAIC0xMDc4LDcgKzkzNiw2IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHRzIDw8ICJhcHBseS1maWxsLXBhdHRl
cm4iOyBicmVhazsKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6IHRzIDw8ICJhcHBseS1kZXZpY2Utc2NhbGUtZmFjdG9yIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHRzIDw8ICJjbGVhci1zaGFkb3ciOyBicmVhazsKICAg
ICB9CiAgICAgcmV0dXJuIHRzOwogfQpAQCAtMTA4OCwyMSArOTQ1LDYgQEAgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIHRzIDw8IGl0
ZW0udHlwZSgpOwogCiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSXRlbVR5
cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8VHJhbnNsYXRlPigpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFJvdGF0ZT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2Nh
bGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNjYWxlPigpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldENUTT4o
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0g
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpOwotICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTE1LDE4
ICs5NTcsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFu
ZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lQ2FwPigpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVKb2luOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lSm9pbj4oKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKLSAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcD4oKTsKICAg
ICAgICAgYnJlYWs7CkBAIC0xMTkzLDkgKzEwMjMsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdy
YWRpZW50PigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKTsK
LSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAg
ICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMTI3MSw3ICsxMDk4LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVy
bjoKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgogI2VuZGlmCi0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1
cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCA5N2NiNWZjOGQwNGJh
ODY2MmI3MmM3ZGRlZWJjNDQxNTVjMjgyNWI3Li5mOTA3YjMxNGIyNTI5YmQyN2JmMDQzZWIxNTI0
NDAzMjdjNGIwNjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTg1LDEw
NCArODUsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIH07CiAKLWNsYXNzIFRyYW5zbGF0ZSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFuc2xhdGU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgICAgICA6IG1feCh4KQotICAgICAgICAsIG1feSh5KQot
ICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAg
ZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBt
X3ggeyAwIH07Ci0gICAgZmxvYXQgbV95IHsgMCB9OwotfTsKLQotY2xhc3MgUm90YXRlIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OlJvdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAg
Um90YXRlKGZsb2F0IGFuZ2xlKQotICAgICAgICA6IG1fYW5nbGUoYW5nbGUpCi0gICAgewotICAg
IH0KLQotICAgIGZsb2F0IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQotCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICBmbG9hdCBtX2FuZ2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgotfTsKLQotY2xh
c3MgU2NhbGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6U2NhbGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKLQotICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICAgICAgOiBtX3Np
emUoc2l6ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRTaXplIG1fc2l6
ZTsKLX07Ci0KLWNsYXNzIFNldENUTSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRDVE07Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLSAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgewotICAg
IH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2Zvcm07IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJh
bnNmb3JtOwotfTsKLQotY2xhc3MgQ29uY2F0ZW5hdGVDVE0gewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE07
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIENvbmNhdGVu
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAgICA6IG1fdHJh
bnNmb3JtKHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCiBjbGFzcyBTZXRJbmxp
bmVGaWxsQ29sb3IgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOwpAQCAtMjQ3LDEwICsxNDksOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGVDaGFuZ2U7IH0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2Uo
KSB7IHJldHVybiBtX3N0YXRlQ2hhbmdlOyB9CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIFdFQkNPUkVfRVhQT1JU
IFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAKICAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNv
ZGVyJik7CkBAIC0yNTgsNDA0ICsxNTgsMjYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKLQotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGVDaGFuZ2U7CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGUgbV9zdGF0ZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lk
IFNldFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBhdXRvIGNo
YW5nZUZsYWdzID0gbV9zdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzOwotICAgIGVuY29kZXIgPDwg
Y2hhbmdlRmxhZ3M7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVDaGFuZ2UubV9zdGF0ZTsK
LQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5zdHJva2VHcmFkaWVu
dCk7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgIH0KLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
UGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0cm9rZVBhdHRlcm4pOwot
ICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5zdHJva2VQYXR0ZXJuOwotICAgIH0KLQotICAgIGlm
IChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50
Q2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuZmlsbEdyYWRpZW50KTsKLSAgICAgICAg
ZW5jb2RlciA8PCAqc3RhdGUuZmlsbEdyYWRpZW50OwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKSB7
Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5maWxsUGF0dGVybik7Ci0gICAgICAgIGVuY29kZXIgPDwg
KnN0YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dC
bHVyOwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9yOwotICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2Up
KQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZVRoaWNrbmVzczsKLQotICAgIGlmIChj
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2Rl
Q2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS50ZXh0RHJhd2luZ01vZGU7Ci0KLSAg
ICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNv
bG9yQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VDb2xvcjsKLQotICAg
IGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWxsQ29sb3I7Ci0KLSAgICBpZiAo
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hh
bmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VTdHlsZTsKLQotICAgIGlmIChj
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2Up
KQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmZpbGxSdWxlOwotCi0gICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFu
Z2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAg
aWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVD
aGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmJsZW5kTW9kZTsKLQotICAgIGlmIChj
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmFscGhh
OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNob3VsZEFu
dGlhbGlhczsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LnNob3VsZFNtb290aEZvbnRzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLQotICAg
IGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0ln
bm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOworICAgIGVuY29kZXIgPDwgbV9zdGF0ZTsKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IFNldFN0YXRlOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKLSAgICBkZWNvZGVyID4+IGNoYW5n
ZUZsYWdzOwotICAgIGlmICghY2hhbmdlRmxhZ3MpCisgICAgc3RkOjpvcHRpb25hbDxHcmFwaGlj
c0NvbnRleHRTdGF0ZT4gc3RhdGU7CisgICAgZGVjb2RlciA+PiBzdGF0ZTsKKyAgICBpZiAoIXN0
YXRlKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2U7Ci0gICAgc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncyA9
ICpjaGFuZ2VGbGFnczsKLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpIHsKLSAgICAg
ICAgYXV0byBzdHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAg
ICAgIGlmICghc3Ryb2tlR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBXVEZNb3Zl
KCpzdHJva2VHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2Up
KSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlUGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVy
KTsKLSAgICAgICAgaWYgKCFzdHJva2VQYXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBX
VEZNb3ZlKCpzdHJva2VQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hh
bmdlKSkgewotICAgICAgICBhdXRvIGZpbGxHcmFkaWVudCA9IEdyYWRpZW50OjpkZWNvZGUoZGVj
b2Rlcik7Ci0gICAgICAgIGlmICghZmlsbEdyYWRpZW50KQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxHcmFkaWVudCA9
IFdURk1vdmUoKmZpbGxHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hh
bmdlKSkgewotICAgICAgICBhdXRvIGZpbGxQYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29k
ZXIpOwotICAgICAgICBpZiAoIWZpbGxQYXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RG
TW92ZSgqZmlsbFBhdHRlcm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgIGRl
Y29kZXIgPj4gc2hhZG93T2Zmc2V0OwotICAgICAgICBpZiAoIXNoYWRvd09mZnNldCkKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5zaGFkb3dPZmZzZXQgPSAqc2hhZG93T2Zmc2V0OwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8
ZmxvYXQ+IHNoYWRvd0JsdXI7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93Qmx1cjsKLSAgICAg
ICAgaWYgKCFzaGFkb3dCbHVyKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0JsdXIgPSAqc2hhZG93Qmx1cjsKLQot
ICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzaGFkb3dDb2xvcjsKLSAgICAgICAgZGVjb2Rl
ciA+PiBzaGFkb3dDb2xvcjsKLSAgICAgICAgaWYgKCFzaGFkb3dDb2xvcikKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFk
b3dDb2xvciA9ICpzaGFkb3dDb2xvcjsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPFNoYWRvd1Jh
ZGl1c01vZGU+IHNoYWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93UmFk
aXVzTW9kZTsKLSAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd1Jh
ZGl1c01vZGUgPSBXVEZNb3ZlKCpzaGFkb3dSYWRpdXNNb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAo
c3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBz
dHJva2VUaGlja25lc3M7Ci0gICAgICAgIGRlY29kZXIgPj4gc3Ryb2tlVGhpY2tuZXNzOwotICAg
ICAgICBpZiAoIXN0cm9rZVRoaWNrbmVzcykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSAqc3Ry
b2tlVGhpY2tuZXNzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKSB7
Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8VGV4dERyYXdpbmdNb2RlRmxhZ3M+IHRleHREcmF3aW5n
TW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiB0ZXh0RHJhd2luZ01vZGU7Ci0gICAgICAgIGlmICgh
dGV4dERyYXdpbmdNb2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
ICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IFdURk1vdmUoKnRleHRE
cmF3aW5nTW9kZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkgewotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzdHJva2VDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+
PiBzdHJva2VDb2xvcjsKLSAgICAgICAgaWYgKCFzdHJva2VDb2xvcikKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VD
b2xvciA9ICpzdHJva2VDb2xvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkg
ewotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBmaWxsQ29sb3I7Ci0gICAgICAgIGRlY29k
ZXIgPj4gZmlsbENvbG9yOwotICAgICAgICBpZiAoIWZpbGxDb2xvcikKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5maWxsQ29s
b3IgPSAqZmlsbENvbG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpIHsK
LSAgICAgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc3Ryb2tlU3R5bGUpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7Ci0g
ICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFs
PFdpbmRSdWxlPiBmaWxsUnVsZTsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxsUnVsZTsKLSAgICAg
ICAgaWYgKCFmaWxsUnVsZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAg
ICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5maWxsUnVsZSA9ICpmaWxsUnVsZTsKLSAgICB9Ci0K
LSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlv
bmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBjb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgZGVjb2Rl
ciA+PiBjb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgaWYgKCFjb21wb3NpdGVPcGVyYXRvcikK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9ICpjb21wb3NpdGVPcGVyYXRvcjsKLSAgICB9Ci0K
LSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEJsZW5k
TW9kZT4gYmxlbmRNb2RlOwotICAgICAgICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKLSAgICAgICAg
aWYgKCFibGVuZE1vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuYmxlbmRNb2RlID0gKmJsZW5kTW9kZTsKLSAgICB9Ci0K
LSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKLSAgICAgICAgc3Rk
OjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eTsKLSAgICAgICAgZGVjb2RlciA+PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgICAg
ICBpZiAoIWltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSA9ICppbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgIH0KLQotICAgIGlm
IChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpBbHBoYUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYWxwaGE7Ci0g
ICAgICAgIGRlY29kZXIgPj4gYWxwaGE7Ci0gICAgICAgIGlmICghYWxwaGEpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuYWxw
aGEgPSAqYWxwaGE7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpIHsK
LSAgICAgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRBbnRpYWxpYXM7Ci0gICAgICAgIGRl
Y29kZXIgPj4gc2hvdWxkQW50aWFsaWFzOwotICAgICAgICBpZiAoIXNob3VsZEFudGlhbGlhcykK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSAqc2hvdWxkQW50aWFsaWFzOwotICAgIH0KLQotICAg
IGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxi
b29sPiBzaG91bGRTbW9vdGhGb250czsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91bGRTbW9vdGhG
b250czsKLSAgICAgICAgaWYgKCFzaG91bGRTbW9vdGhGb250cykKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRTbW9v
dGhGb250cyA9ICpzaG91bGRTbW9vdGhGb250czsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFu
Z2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+
IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9ICpzaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwot
ICAgICAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zID0gKnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgIH0KLQotICAgIHJl
dHVybiB7IHsgc3RhdGVDaGFuZ2UgfSB9OwotfQotCi1jbGFzcyBTZXRMaW5lQ2FwIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNl
dExpbmVDYXA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAg
IFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotICAgICAgICA6IG1fbGluZUNhcChsaW5lQ2Fw
KQotICAgIHsKLSAgICB9Ci0KLSAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBt
X2xpbmVDYXA7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZUNhcCBtX2xpbmVDYXA7Ci19OwotCi1j
bGFzcyBTZXRMaW5lRGFzaCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYg
ZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotICAgICAgICA6IG1fZGFzaEFycmF5KGRhc2hB
cnJheSkKLSAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hB
cnJheTsgfQotICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hPZmZz
ZXQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9u
YWw8U2V0TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgRGFzaEFy
cmF5IG1fZGFzaEFycmF5OwotICAgIGZsb2F0IG1fZGFzaE9mZnNldDsKLX07Ci0KLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fZGFzaEFycmF5OwotICAgIGVuY29kZXIgPDwg
bV9kYXNoT2Zmc2V0OworICAgIHJldHVybiB7ICpzdGF0ZSB9OwogfQogCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFzaD4gU2V0TGluZURhc2g6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8RGFzaEFycmF5PiBkYXNo
QXJyYXk7Ci0gICAgZGVjb2RlciA+PiBkYXNoQXJyYXk7Ci0gICAgaWYgKCFkYXNoQXJyYXkpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBk
YXNoT2Zmc2V0OwotICAgIGRlY29kZXIgPj4gZGFzaE9mZnNldDsKLSAgICBpZiAoIWRhc2hPZmZz
ZXQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKmRhc2hB
cnJheSwgKmRhc2hPZmZzZXQgfX07Ci19Ci0KLWNsYXNzIFNldExpbmVKb2luIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExp
bmVKb2luOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBT
ZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAgICAgICAgOiBtX2xpbmVKb2luKGxpbmVK
b2luKQotICAgIHsKLSAgICB9Ci0KLSAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZUpvaW47IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZUpvaW4gbV9saW5lSm9pbjsK
LX07Ci0KLWNsYXNzIFNldE1pdGVyTGltaXQgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9h
dCBtaXRlckxpbWl0KQotICAgICAgICA6IG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQotICAgIHsK
LSAgICB9Ci0KLSAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxp
bWl0OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKLX07Ci0KLWNsYXNz
IENsZWFyU2hhZG93IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyU2hhZG93OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwotfTsKLQogLy8gRklYTUU6IHRyZWF0IGFzIGRyYXdpbmcgaXRlbT8K
IGNsYXNzIENsaXAgewogcHVibGljOgpAQCAtMTYxMiw5MSArMTEzNCwyMCBAQCBzdGQ6Om9wdGlv
bmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZQogICAgIHJldHVybiB7eyAqcmVjdCwgZ3JhZGllbnQtPmdldCgpIH19Owog
fQogCi1jbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgewotcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7Ci0KLSAgICBGaWxsQ29tcG9z
aXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgICAgICA6IG1fcmVjdChy
ZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgICAgICwgbV9vcChvcCkKLSAgICAg
ICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCi0gICAgewotICAgIH0KLQotICAgIEZsb2F0UmVj
dCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQotICAgIEJsZW5kTW9kZSBibGVu
ZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7
IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbENvbXBvc2l0ZWRSZWN0PiBkZWNv
ZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgQ29s
b3IgbV9jb2xvcjsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAgIEJsZW5kTW9kZSBt
X2JsZW5kTW9kZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEZpbGxDb21w
b3NpdGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rl
ciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAgIGVuY29kZXIgPDwgbV9v
cDsKLSAgICBlbmNvZGVyIDw8IG1fYmxlbmRNb2RlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotc3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IEZpbGxDb21wb3NpdGVkUmVj
dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGNvbG9yOwot
ICAgIGRlY29kZXIgPj4gY29sb3I7Ci0gICAgaWYgKCFjb2xvcikKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlT3BlcmF0b3I+IG9wOwot
ICAgIGRlY29kZXIgPj4gb3A7Ci0gICAgaWYgKCFvcCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0gICAgZGVj
b2RlciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKm9wLCAqYmxlbmRN
b2RlIH19OwotfQotCiBjbGFzcyBGaWxsUm91bmRlZFJlY3QgewogcHVibGljOgogICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBGaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIDogbV9yZWN0KHJl
Y3QpCiAgICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBtX2JsZW5kTW9kZShibGVu
ZE1vZGUpCiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBj
b25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbGxSb3VuZGVkUmVjdD4gZGVjb2RlKERlY29kZXIm
KTsKQEAgLTE3MDksNyArMTE2MCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRmxvYXRSb3Vu
ZGVkUmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKLSAgICBCbGVuZE1vZGUgbV9ibGVu
ZE1vZGU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMTcxNyw3ICsxMTY3LDYg
QEAgdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ewogICAgIGVuY29kZXIgPDwgbV9yZWN0OwogICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKLSAgICBl
bmNvZGVyIDw8IG1fYmxlbmRNb2RlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAt
MTczMywxMiArMTE4Miw3IEBAIHN0ZDo6b3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBGaWxsUm91
bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4g
YmxlbmRNb2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgIGlmICghYmxlbmRNb2Rl
KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICpyZWN0LCAq
Y29sb3IsICpibGVuZE1vZGUgfX07CisgICAgcmV0dXJuIHsgeyAqcmVjdCwgKmNvbG9yIH0gfTsK
IH0KIAogY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgewpAQCAtMTk2MSw3ICsxNDA1LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAg
IFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pOworICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogCiAgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KICAgICBNZWRpYVBsYXll
cklkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQpA
QCAtMjI1NiwxMyArMTcwMCwxMSBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZhcmlh
bnQKICAgICA8IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IKICAgICAsIEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIKICAgICAsIENsZWFyUmVjdAotICAgICwgQ2xlYXJTaGFkb3cKICAgICAsIENsaXAKICAg
ICAsIENsaXBPdXQKICAgICAsIENsaXBPdXRUb1BhdGgKICAgICAsIENsaXBQYXRoCiAgICAgLCBD
bGlwVG9JbWFnZUJ1ZmZlcgotICAgICwgQ29uY2F0ZW5hdGVDVE0KICAgICAsIERyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIKICAgICAsIERyYXdFbGxpcHNlCiAgICAgLCBEcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcgpAQCAtMjI3OCw3ICsxNzIwLDYgQEAgdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gc3Rk
Ojp2YXJpYW50CiAgICAgLCBEcmF3UmVjdAogICAgICwgRHJhd1N5c3RlbUltYWdlCiAgICAgLCBF
bmRUcmFuc3BhcmVuY3lMYXllcgotICAgICwgRmlsbENvbXBvc2l0ZWRSZWN0CiAgICAgLCBGaWxs
RWxsaXBzZQogICAgICwgRmlsbFBhdGgKICAgICAsIEZpbGxSZWN0CkBAIC0yMjg4LDIzICsxNzI5
LDE1IEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgICwgRmlsbFJv
dW5kZWRSZWN0CiAgICAgLCBGbHVzaENvbnRleHQKICAgICAsIFJlc3RvcmUKLSAgICAsIFJvdGF0
ZQogICAgICwgU2F2ZQotICAgICwgU2NhbGUKLSAgICAsIFNldENUTQogICAgICwgU2V0SW5saW5l
RmlsbENvbG9yCiAgICAgLCBTZXRJbmxpbmVTdHJva2VDb2xvcgotICAgICwgU2V0TGluZUNhcAot
ICAgICwgU2V0TGluZURhc2gKLSAgICAsIFNldExpbmVKb2luCi0gICAgLCBTZXRNaXRlckxpbWl0
CiAgICAgLCBTZXRTdGF0ZQogICAgICwgU2V0U3Ryb2tlVGhpY2tuZXNzCiAgICAgLCBTdHJva2VF
bGxpcHNlCiAgICAgLCBTdHJva2VMaW5lCiAgICAgLCBTdHJva2VQYXRoCiAgICAgLCBTdHJva2VS
ZWN0Ci0gICAgLCBUcmFuc2xhdGUKIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
ICwgRmlsbExpbmUKQEAgLTIzNDEsMjAgKzE3NzQsMTAgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51
bVRyYWl0czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGUsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTYXZlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UmVzdG9yZSwKLSAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0ZSwKLSAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNjYWxlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2V0Q1RNLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5hdGVD
VE0sCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29s
b3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VD
b2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNr
bmVzcywKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlLAotICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUNhcCwKLSAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNoLAotICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW4sCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q2xlYXJTaGFkb3csCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpD
bGlwLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dCwKICAgICBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyLApAQCAtMjM3
Niw3ICsxNzk5LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZpbGxSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxDb21w
b3NpdGVkUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3Vu
ZGVkUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlLAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVlZTQ0NzFkMzU0ZTc1MTUzMTI1MTg5
ZGZjYzk0MThhMzk0NTE0YTEuLjU2YWU0N2MxZmE1MWNhOGRiOGJjMzYyOTU4ZTI4NzI1MTA1MTM1
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTQyLDM1
MCArNDIsMTg2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3Qg
ewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGlu
aXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29u
c3RydWN0RHJhd0dseXBocykKLSAgICA6IG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBkZWNv
bnN0cnVjdERyYXdHbHlwaHMpCi17Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZCh7IHN0YXRlLCBp
bml0aWFsQ1RNLCBpbml0aWFsQ1RNLm1hcFJlY3QoaW5pdGlhbENsaXApIH0pOwotfQorUmVjb3Jk
ZXI6OlJlY29yZGVyKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdH
bHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDogR3JhcGhpY3NDb250ZXh0KGluaXRp
YWxDbGlwLCB7IH0sICBpbml0aWFsQ1RNKQorICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRo
aXMsIGRlY29uc3RydWN0RHJhd0dseXBocykKIAotUmVjb3JkZXI6On5SZWNvcmRlcigpCiB7Ci0g
ICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPT0gMSk7IC8vIElmIHRoaXMgZmlyZXMsIGl0
IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4KIH0KIAotc3RhdGljIGJvb2wgY29u
dGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFu
Z2VGbGFncykKLXsKLSAgICBzdGF0aWMgY29uc3RleHByIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzIGlubGluZVN0YXRlQ2hhbmdlRmxhZ3MgewotICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLAotICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsQ29sb3JDaGFuZ2UsCi0gICAgfTsKLQotICAgIGlmIChjaGFuZ2VGbGFncyAhPSAo
Y2hhbmdlRmxhZ3MgJiBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdzKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci50cnlH
ZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworUmVjb3JkZXI6On5SZWNv
cmRlcigpID0gZGVmYXVsdDsKIAotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxD
b2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCit2b2lkIFJlY29yZGVyOjpzYXZl
KCkKIHsKLSAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjaGFuZ2VzLCBj
aGFuZ2VGbGFncykpIHsKLSAgICAgICAgaWYgKGF1dG8gcGF0dGVybiA9IGNoYW5nZXMubV9zdGF0
ZS5zdHJva2VQYXR0ZXJuKQotICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+
dGlsZUltYWdlKCkpOwotICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gY2hhbmdlcy5tX3N0YXRl
LmZpbGxQYXR0ZXJuKQotICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGls
ZUltYWdlKCkpOwotICAgICAgICByZWNvcmRTZXRTdGF0ZShjaGFuZ2VzLm1fc3RhdGUsIGNoYW5n
ZUZsYWdzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAg
ICByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcigqY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9y
LnRyeUdldEFzU1JHQkFCeXRlcygpKTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgcmVj
b3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGNoYW5nZXMubV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwot
Ci0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoKmNoYW5nZXMu
bV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOworICAgIEdyYXBoaWNzQ29u
dGV4dDo6c2F2ZSgpOworICAgIHJlY29yZFNhdmUoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6YXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKQordm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgp
CiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IGludm9rZWQgaW4gYW4gYWQtaG9j
IG1hbm5lciB3aGVuIHJlY29yZGluZyBkcmF3aW5nIGl0ZW1zLiBXZSBzaG91bGQgY29uc2lkZXIg
ZWl0aGVyCi0gICAgLy8gc3BsaXR0aW5nIEdyYXBoaWNzQ29udGV4dCBzdGF0ZSBjaGFuZ2VzIGlu
dG8gaW5kaXZpZHVhbCBkaXNwbGF5IGxpc3QgaXRlbXMsIG9yIHJlZmFjdG9yaW5nIHRoZSBjb2Rl
IHN1Y2ggdGhhdAotICAgIC8vIHRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgaW52b2tlZCB3
aGVuIHJlY29yZGluZyBhIGRyYXdpbmcgaXRlbS4KLSAgICBhdXRvJiBzdGF0ZUNoYW5nZXMgPSBj
dXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZTsKLSAgICBhdXRvIGNoYW5nZXNGcm9tTGFzdFN0YXRl
ID0gc3RhdGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0YXRlKCkubGFzdERyYXdp
bmdTdGF0ZSk7Ci0gICAgaWYgKCFjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkKKyAgICBpZiAoIXN0YWNr
U2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxp
c3RzLCBzdHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZpbmcgc3RhdGUgIiA8PCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3Rh
dGUpKTsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oc3RhdGVDaGFuZ2VzLCBjaGFuZ2VzRnJv
bUxhc3RTdGF0ZSk7Ci0gICAgc3RhdGVDaGFuZ2VzLm1fY2hhbmdlRmxhZ3MgPSB7IH07Ci0gICAg
Y3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOwot
fQotCi1jb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OnN0YXRlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2UubV9zdGF0ZTsKLX0KLQot
dm9pZCBSZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsK
LSAgICBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7
Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAg
IHJlY29yZFNldExpbmVDYXAobGluZUNhcCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAg
IHJlY29yZFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIHJlY29yZFNldExp
bmVKb2luKGxpbmVKb2luKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9h
dCBtaXRlckxpbWl0KQotewotICAgIHJlY29yZFNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CisgICAgcmVjb3JkUmVzdG9yZSgpOwogfQog
Ci12b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRl
ciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFu
Z2VzKCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotCi0gICAg
Zm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXIuZWZmZWN0c09mVHlwZShGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFSW1hZ2UpKSB7Ci0gICAgICAgIGF1dG8mIGZlSW1hZ2UgPSBkb3duY2FzdDxGRUltYWdl
PihlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGZlSW1hZ2Uu
c291cmNlSW1hZ2UoKSkpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1
bHRzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
c291cmNlSW1hZ2UpIHsKLSAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIobnVs
bHB0ciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgIGlmICghc3RhdGUoKS5jaGFuZ2Vz
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlY29yZFJlc291cmNlVXNl
KCpzb3VyY2VJbWFnZSkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VC
dWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKLX0KIAotdm9pZCBS
ZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckds
eXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBtX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhz
KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5n
TW9kZSk7Ci19CisgICAgaWYgKHN0YXRlKCkuaGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSkgewor
ICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6RmlsbEJydXNoKSkKKyAgICAgICAgICAgIHJlY29yZFNldElubGluZUZpbGxD
b2xvcigqZmlsbENvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwogCi12b2lkIFJlY29yZGVy
OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5z
aWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpOwot
ICAgIHJlY29yZERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2Fs
QW5jaG9yLCBzbW9vdGhpbmdNb2RlKTsKLX0KKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygp
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkKKyAg
ICAgICAgICAgIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKCpzdHJva2VDb2xvcigpLnRyeUdl
dEFzU1JHQkFCeXRlcygpKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotCi0gICAgaWYgKCFyZWNv
cmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
KyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcykpCisgICAgICAgICAgICByZWNvcmRTZXRTdHJv
a2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5
KCk7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwotICAgIHJlY29yZERyYXdOYXRpdmVJ
bWFnZShpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdTeXN0ZW1J
bWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KQotewotICAgIHJlY29yZERyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGlu
YXRpb25SZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwotICAgIHJlY29yZERyYXdQYXR0
ZXJuKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBp
ZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgewotICAgICAgICBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpGaWxsQnJ1c2gpKSB7CisgICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBmaWxsUGF0
dGVybigpKQorICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdl
KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKSB7CisgICAgICAgIGlmIChh
dXRvIHBhdHRlcm4gPSBzdHJva2VQYXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRSZXNvdXJj
ZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7CiAgICAgfQogCi0gICAgcmVjb3JkRHJhd1BhdHRl
cm4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQot
Ci12b2lkIFJlY29yZGVyOjpzYXZlKCkKLXsKLSAgICByZWNvcmRTYXZlKCk7Ci0gICAgbV9zdGF0
ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsKLX0KLQot
dm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKCFtX3N0YXRlU3RhY2suc2l6ZSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAg
IHJlY29yZFJlc3RvcmUoKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCi17Ci0gICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOwotICAgIHJl
Y29yZFRyYW5zbGF0ZSh4LCB5KTsKKyAgICByZWNvcmRTZXRTdGF0ZShzdGF0ZSgpKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQorI2lmIFVTRShDRykK
K3ZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgY3VycmVudFN0YXRl
KCkucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICByZWNvcmRSb3RhdGUoYW5nbGVJblJhZGlh
bnMpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQXBwbHlTdHJva2VQYXR0
ZXJuKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
K3ZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGN1cnJlbnRTdGF0ZSgp
LnNjYWxlKHNpemUpOwotICAgIHJlY29yZFNjYWxlKHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpOwogfQorI2VuZGlmCiAKLXZvaWQg
UmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3Zv
aWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IpCiB7Ci0gICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVG
YWN0b3IpOwogCi0gICAgY3VycmVudFN0YXRlKCkuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
cmVjb3JkQ29uY2F0ZW5hdGVDVE0odHJhbnNmb3JtKTsKKyAgICAvLyBGSVhNRTogdGhpcyBjaGFu
Z2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQg
ZXh0ZW50cy4KKyAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPwor
ICAgIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogfQog
Ci12b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit2b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7
Ci0gICAgY3VycmVudFN0YXRlKCkuc2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgcmVjb3JkU2V0Q1RN
KHRyYW5zZm9ybSk7Ci19CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotQWZmaW5lVHJhbnNm
b3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKLX0KKyAgICBHcmFwaGlj
c0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgR3JhcGhpY3ND
b250ZXh0OjpzYXZlKCk7CiAKLXZvaWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OworICAgIHNldEFscGhhKG9wYWNpdHkpOwogICAgIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSk7Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgp
LmNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgbV9zdGF0ZVN0YWNr
LnJlbW92ZUxhc3QoKTsKLX0KKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi12b2lkIFJlY29y
ZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29y
ZERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci19CisgICAgR3JhcGhpY3NDb250ZXh0
OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgp
OwogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLX0KLQotdm9p
ZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3TGluZXNGb3JUZXh0KEZsb2F0UG9pbnQoKSwg
dG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxp
bmVzKTsKKyAgICByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi12b2lkIFJlY29y
ZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OwotICAgIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpOworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOwor
ICAgIHJlY29yZENsaXAocmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgm
IHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0VsbGlwc2UocmVjdCk7CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxl
KTsKKyAgICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZERyYXdQYXRoKHBhdGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgcmVjb3JkQ2xpcE91dChyZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgp
CiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRE
cmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlwT3V0VG9QYXRoKHBhdGgpOwogfQogCi12b2lk
IFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNv
cmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgs
IG9mZnNldCwgY29sb3IpOwotfQorICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZm
ZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VC
dWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSNpZiBQ
TEFURk9STShNQUMpCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBk
b3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKGltYWdl
QnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3Im
KQordm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3Jk
Q2xlYXJSZWN0KHJlY3QpOwogfQotI2VuZGlmCiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3QocmVj
dCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxsUmVjdFdpdGhD
b2xvcihyZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZWNv
cmRGaWxsUmVjdFdpdGhHcmFkaWVudChyZWN0LCBncmFkaWVudCk7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVjb3JkZXI6
OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAg
ICByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KHJlY3Qs
IGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsK
LSAgICByZWNvcmRGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSk7CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShy
ZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3Jk
ZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0
ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgcmVjb3JkRmlsbEVsbGlwc2UocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewogICAgICAgICBpZiAo
cGF0aC5oYXNJbmxpbmVEYXRhPExpbmVEYXRhPigpKQpAQCAtNDAyLDIxICsyMzgsMjEgQEAgdm9p
ZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICByZWNvcmRGaWxsUGF0
aChwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkU3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwog
fQogCi12b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgbGluZVdpZHRoKQordm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAg
ICByZWNvcmRTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVy
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewogICAgICAg
ICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPExpbmVEYXRhPigpKQpAQCAtNDMzLDE0OCArMjY5LDE2
OCBAQCB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVj
b3JkU3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFN0cm9rZUVsbGlwc2UocmVjdCk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3UmVjdChyZWN0LCBib3JkZXJU
aGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRDbGVhclJlY3QocmVjdCk7CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TGluZShwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNp
ZiBVU0UoQ0cpCi12b2lkIFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNv
cmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJu
KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3RWxsaXBzZShyZWN0
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVy
OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdGgocGF0aCk7CiB9Ci0jZW5kaWYKIAot
dm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVy
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRz
LmludGVyc2VjdChjdXJyZW50U3RhdGUoKS5jdG0ubWFwUmVjdChyZWN0KSk7Ci0gICAgcmVjb3Jk
Q2xpcChyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdGb2N1
c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRl
cjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJlY29yZENsaXBPdXQocmVjdCk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMo
cmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQorI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKIHsK
LSAgICByZWNvcmRDbGlwT3V0VG9QYXRoKHBhdGgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdp
bmRSdWxlKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKIHsKLSAgICBjdXJyZW50U3RhdGUo
KS5jbGlwQm91bmRzLmludGVyc2VjdChjdXJyZW50U3RhdGUoKS5jdG0ubWFwUmVjdChwYXRoLmZh
c3RCb3VuZGluZ1JlY3QoKSkpOwotICAgIHJlY29yZENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQorI2VuZGlmCiAKLUludFJlY3QgUmVjb3JkZXI6OmNs
aXBCb3VuZHMoKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICBpZiAoYXV0byBpbnZlcnNlID0gY3VycmVudFN0YXRlKCkuY3RtLmludmVyc2UoKSkKLSAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoaW52ZXJzZS0+bWFwUmVjdChjdXJyZW50U3RhdGUo
KS5jbGlwQm91bmRzKSk7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikp
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIC8vIElmIHRoZSBDVE0gaXMgbm90IGludmVydGlibGUsIHJldHVybiB0aGUgb3JpZ2luYWwg
cmVjdC4KLSAgICAvLyBUaGlzIG1hdGNoZXMgQ0dSZWN0QXBwbHlJbnZlcnNlQWZmaW5lVHJhbnNm
b3JtIGJlaGF2aW9yLgotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGN1cnJlbnRTdGF0ZSgp
LmNsaXBCb3VuZHMpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZl
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQog
ewotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKTsKLSAgICByZWNvcmRDbGlwVG9J
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QpOwotfQorICAgIGZvciAoYXV0byYgZWZm
ZWN0IDogZmlsdGVyLmVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkg
eworICAgICAgICBhdXRvJiBmZUltYWdlID0gZG93bmNhc3Q8RkVJbWFnZT4oZWZmZWN0LmdldCgp
KTsKKyAgICAgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShmZUltYWdlLnNvdXJjZUltYWdlKCkp
KSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVj
b3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxS
ZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkgY29uc3QKLXsKLSAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJp
bmdNZXRob2Q6OkRpc3BsYXlMaXN0KSk7Ci19CisgICAgaWYgKCFzb3VyY2VJbWFnZSkgeworICAg
ICAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgICAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihudWxscHRyLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIFJlY29yZGVyOjpwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bikKLXsKLSAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgaWYg
KCFyZWNvcmRSZXNvdXJjZVVzZSgqc291cmNlSW1hZ2UpKSB7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVj
dCwgZmlsdGVyLCByZXN1bHRzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBBU1NFUlQo
cGxheWVyLmlkZW50aWZpZXIoKSk7Ci0gICAgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKHBsYXll
ciwgZGVzdGluYXRpb24pOworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRE
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0
ZXIpOwogfQotI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICAvLyBXZSBtb2RpZnkgdGhlIHN0YXRlIGRp
cmVjdGx5IGhlcmUgaW5zdGVhZCBvZiBjYWxsaW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoKQot
ICAgIC8vIGJlY2F1c2UgdGhlIHJlY29yZGVkIGl0ZW0gd2lsbCBzY2FsZSgpIHdoZW4gcmVwbGF5
ZWQuCi0gICAgY3VycmVudFN0YXRlKCkuc2NhbGUoeyBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNl
U2NhbGVGYWN0b3IgfSk7CisgICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKTsKK30KIAotICAgIC8vIEZJWE1FOiB0aGlzIGNoYW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNo
IHdpbGwgaW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNhY2hlZCBleHRlbnRzLgotICAgIC8vIEFzc2Vy
dCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgZWFybHkgb24/Ci0gICAgcmVjb3JkQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Cit2b2lkIFJlY29yZGVyOjpkcmF3U3lzdGVt
SW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkKK3sKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdTeXN0
ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotRmxvYXRSZWN0IFJl
Y29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhp
Y3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCit2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgV1RGTG9nQWx3YXlzKCJHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0
aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0gICAgcmV0dXJuIHJlY3Q7CisgICAgcmVjb3Jk
UmVzb3VyY2VVc2UoaW1hZ2UpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3Jk
RHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0
LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwog
fQogCi1jb25zdCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlJiBSZWNvcmRlcjo6Y3VycmVudFN0YXRl
KCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZUJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSk7Ci0g
ICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVz
ZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihp
bWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLnJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotUmVjb3JkZXI6OkNvbnRleHRTdGF0
ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZWNv
cmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwot
ICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworICAgIGlmICghcGxheWVyLmlkZW50aWZp
ZXIoKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5
ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllci5pZGVudGlm
aWVyKCksIGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRpZgogCi1jb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IFJlY29yZGVyOjpjdG0oKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBy
ZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
bV9kcmF3R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBu
dW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogfQogCi12b2lkIFJlY29yZGVy
OjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBSZWNvcmRl
cjo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVu
c2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBjdG0udHJhbnNsYXRlKHgsIHkpOworICAgIHJl
Y29yZFJlc291cmNlVXNlKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIHJlY29yZERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywg
Y291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6
Q29udGV4dFN0YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit2b2lkIFJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBkb3VibGUgYW5nbGVJbkRlZ3JlZXMgPSByYWQyZGVn
KHN0YXRpY19jYXN0PGRvdWJsZT4oYW5nbGVJblJhZGlhbnMpKTsKLSAgICBjdG0ucm90YXRlKGFu
Z2xlSW5EZWdyZWVzKTsKLSAgICAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gcm90YXRpb247Ci0gICAg
cm90YXRpb24ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZERyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBw
cmludGluZywgZG91YmxlTGluZXMpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6
OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKIHsKLSAgICBjdG0uc2NhbGUoc2l6ZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBtYXRyaXgpCitSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlY29yZGVyOjpjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiBy
ZW5kZXJpbmdNZXRob2QpIGNvbnN0CiB7Ci0gICAgY3RtID0gbWF0cml4OworICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nTWV0aG9kLnZhbHVlX29yKFJlbmRl
cmluZ01ldGhvZDo6RGlzcGxheUxpc3QpKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0
YXRlOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCitGbG9hdFJlY3Qg
UmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFw
aGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKIHsKLSAgICBjdG0gKj0gbWF0cml4OworICAgIFdU
RkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90
IHlldCBjb21wYXRpYmxlIHdpdGggRGlzcGxheUxpc3Q6OlJlY29yZGVyLiIpOworICAgIHJldHVy
biByZWN0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggODQ1ZWMwMDc3MmVkMmM1NGExZTZjYjI2YjIxNTFk
YWJhYTZlYzA3NS4uYWUzNDM3OWJlNjdmMDVlMTA0MmY2YWRjNWFhYmY4OGMyNzBjMTczNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0yOSw3ICsyOSw2IEBACiAj
aW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRl
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlLmgiIC8v
IEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiSW5saW5lUGF0aERhdGEuaCIKICNpbmNs
dWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTUxLDcg
KzUwLDcgQEAgY2xhc3MgUmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRl
cik7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERy
YXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIFdFQkNP
UkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVj
dERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6
WWVzKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAgdmly
dHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CkBAIC02MSw0NyArNjAsMzUg
QEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTYXZlKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRSZXN0b3JlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
U2NhbGUoY29uc3QgRmxvYXRTaXplJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRD
b25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CisKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+KSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVKb2luKExpbmVKb2luKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
Y29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSAwOworCisjaWYgVVNF
KENHKQorICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisjZW5kaWYKKwor
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSAwOworCiAg
ICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
Q2xpcE91dFRvUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRD
bGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRE
cmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2Fs
QW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRE
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25z
dCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNS
aW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFRvSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmls
bFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBj
b25zdCBDb2xvciYsIEJsZW5kTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwog
I2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxs
TGluZShjb25zdCBMaW5lRGF0YSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEFy
Yyhjb25zdCBBcmNEYXRhJikgPSAwOwpAQCAtMTA5LDExICs5NiwxMCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURh
dGEmKSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbikgPSAwOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAw
OwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRT
dHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRT
dHJva2VBcmMoY29uc3QgQXJjRGF0YSYpID0gMDsKQEAgLTEyMSwxMTYgKzEwNyw4MSBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJl
emllckN1cnZlRGF0YSYpID0gMDsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJv
a2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRBcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJh
d1BhdGgoY29uc3QgUGF0aCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9j
dXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVt
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworI2lm
IEVOQUJMRShWSURFTykKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgPSAw
OwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZv
bnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwg
dW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3Ro
aW5nTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3Jk
UmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJl
c291cmNlVXNlKEltYWdlQnVmZmVyJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNv
dXJjZVVzZShjb25zdCBTb3VyY2VJbWFnZSYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3Jk
UmVzb3VyY2VVc2UoRm9udCYpID0gMDsKIAotICAgIHN0cnVjdCBDb250ZXh0U3RhdGUgewotICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotICAgICAgICBGbG9hdFJlY3QgY2xpcEJvdW5kczsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2U7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlIGxhc3REcmF3aW5nU3RhdGU7Ci0KLSAgICAgICAgQ29udGV4
dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgY2xpcCkKLSAgICAgICAgICAgIDog
Y3RtKHRyYW5zZm9ybSkKLSAgICAgICAgICAgICwgY2xpcEJvdW5kcyhjbGlwKQotICAgICAgICAg
ICAgLCBsYXN0RHJhd2luZ1N0YXRlKHN0YXRlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JTYXZlKCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgQ29udGV4dFN0YXRlIHN0YXRlKGxhc3REcmF3aW5nU3RhdGUsIGN0bSwgY2xpcEJvdW5k
cyk7Ci0gICAgICAgICAgICBzdGF0ZS5zdGF0ZUNoYW5nZSA9IHN0YXRlQ2hhbmdlOwotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlIGNs
b25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBh
dXRvIHN0YXRlID0gY2xvbmVGb3JTYXZlKCk7Ci0gICAgICAgICAgICBzdGF0ZS5sYXN0RHJhd2lu
Z1N0YXRlLmFscGhhID0gMTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOwotICAgICAgICB2b2lk
IHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7Ci0gICAgICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJik7Ci0gICAgICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpOwotICAgICAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB9
OwotCi0gICAgY29uc3QgVmVjdG9yPENvbnRleHRTdGF0ZSwgND4mIHN0YXRlU3RhY2soKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlU3RhY2s7IH0KLQotICAgIGNvbnN0IENvbnRleHRTdGF0ZSYgY3Vy
cmVudFN0YXRlKCkgY29uc3Q7Ci0gICAgQ29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKTsKLQog
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+LCBzdGQ6Om9wdGlvbmFs
PFJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IG92ZXJyaWRlOworICAgIAorCisgICAgdmlydHVhbCB2
b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKIAogcHJpdmF0ZToK
ICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2
ZSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICNpZiBVU0Uo
Q0cpCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQotICAgIGJv
b2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwogI2VuZGlmCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKIAotICAgIHZv
aWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZp
bmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGluZUNhcChMaW5l
Q2FwKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERh
c2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jikg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
JikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUGF0
aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
IAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVy
bigpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZp
bmFsOwotI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Rmls
dGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlw
aHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBv
aW50LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
cmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tl
U3R5bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKIAorICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CkBAIC0yNDEsNDAgKzE5MiwyMyBAQCBw
cml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29u
c3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZl
KCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCkgZmluYWw7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRl
RGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3Vs
dHMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lz
dGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVk
IGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGlj
c0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7CiAKLSAgICB2b2lkIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0
OwotCi0gICAgVmVjdG9yPENvbnRleHRTdGF0ZSwgND4gbV9zdGF0ZVN0YWNrOwogICAgIERyYXdH
bHlwaHNSZWNvcmRlciBtX2RyYXdHbHlwaHNSZWNvcmRlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCmluZGV4IDFmZGM2YmE1NmJmZGIyNjM2
ZWZiMzQ2MmFkYTJhOTkwZDMzODk5NDUuLjFmYjRkZDc5NWFlMTBhYThjY2NiY2RkODMxNGVlYTgw
ODZlOGRiNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBs
LmNwcApAQCAtNDIsMTggKzQyLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2Ug
RGlzcGxheUxpc3QgewogCi1SZWNvcmRlckltcGw6OlJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdH
bHlwaHMpCi0gICAgOiBSZWNvcmRlcihzdGF0ZSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRl
Y29uc3RydWN0RHJhd0dseXBocykKK1JlY29yZGVySW1wbDo6UmVjb3JkZXJJbXBsKERpc3BsYXlM
aXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0
RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBSZWNvcmRlcihpbml0aWFs
Q2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kaXNwbGF5
TGlzdChkaXNwbGF5TGlzdCkKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBz
dHJlYW0gPDwgIlxuUmVjb3JkaW5nIHdpdGggY2xpcCAiIDw8IGluaXRpYWxDbGlwKTsKIH0KIAot
UmVjb3JkZXJJbXBsOjp+UmVjb3JkZXJJbXBsKCkKLXsKLSAgICBBU1NFUlQoc3RhdGVTdGFjaygp
LnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5kaWNhdGVzIG1pc21hdGNoZWQg
c2F2ZS9yZXN0b3JlLgotfQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2F2ZSgpCiB7CiAg
ICAgYXBwZW5kPFNhdmU+KCk7CkBAIC02NCwzMSArNTksNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkUmVzdG9yZSgpCiAgICAgYXBwZW5kPFJlc3RvcmU+KCk7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBhcHBlbmQ8
VHJhbnNsYXRlPih4LCB5KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZShm
bG9hdCBhbmdsZSkKLXsKLSAgICBhcHBlbmQ8Um90YXRlPihhbmdsZSk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRTY2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIGFw
cGVuZDxTY2FsZT4oc2NhbGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIGFwcGVuZDxTZXRDVE0+
KHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBhcHBlbmQ8Q29uY2F0
ZW5hdGVDVE0+KHRyYW5zZm9ybSk7Ci19Ci0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRJ
bmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4gaW5saW5lQ29sb3IpCiB7CiAgICAgYXBwZW5k
PFNldElubGluZUZpbGxDb2xvcj4oaW5saW5lQ29sb3IpOwpAQCAtMTA0LDkyICs3NCwyNiBAQCB2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVz
cykKICAgICBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPih0aGlja25lc3MpOwogfQogCi12b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFn
cykKLXsKLSAgICBhcHBlbmQ8U2V0U3RhdGU+KHN0YXRlLCBjaGFuZ2VGbGFncyk7Ci19Ci0KLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAg
ICBhcHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0
KQotewotICAgIGFwcGVuZDxTZXRMaW5lRGFzaD4oYXJyYXksIGRhc2hPZmZzZXQpOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAg
ICBhcHBlbmQ8U2V0TGluZUpvaW4+KGpvaW4pOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBhcHBlbmQ8U2V0TWl0ZXJMaW1p
dD4obGltaXQpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJTaGFkb3coKQot
ewotICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBhcHBlbmQ8Q2xpcD4o
Y2xpcFJlY3QpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIGNsaXBSZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKIHsKLSAgICBhcHBlbmQ8Q2xpcE91dD4o
Y2xpcFJlY3QpOworICAgIGFwcGVuZDxTZXRTdGF0ZT4oc3RhdGUpOwogfQogCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKLXsKLSAgICBhcHBlbmQ8Q2xpcFRv
SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBk
ZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRv
UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRo
KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIHJ1bGUpCi17Ci0gICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCBydWxlKTsK
LX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChzb3VyY2VJbWFnZSkKLSAgICAgICAgaWRl
bnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKLSAg
ICBhcHBlbmQ8RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI+KFdURk1vdmUoaWRlbnRpZmllciksIHNv
dXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhz
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCi17Ci0g
ICAgYXBwZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2Nh
bEFuY2hvciwgbW9kZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19
Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCisjaWYgVVNFKENHKQordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kPERy
YXdOYXRpdmVJbWFnZT4oaW1hZ2VJZGVudGlmaWVyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKKyAgICBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpOwogfQogCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0
ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kPERyYXdTeXN0ZW1J
bWFnZT4oc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgYXBwZW5kPEFwcGx5Rmls
bFBhdHRlcm4+KCk7CiB9CisjZW5kaWYgLy8gVVNFKENHKQogCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRp
ZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlk
ZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7CisgICAgYXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9y
KTsKIH0KIAogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKQEAgLTIwMiw0NCArMTA2LDM0IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgYXBwZW5kPEVuZFRyYW5zcGFyZW5jeUxh
eWVyPigpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXBwZW5kPERyYXdSZWN0Pihy
ZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0g
ICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRp
b24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewot
ICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwg
dGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CisgICAgYXBwZW5kPENs
aXA+KGNsaXBSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSYgc3R5bGUpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFBhdGgoY29u
c3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKIHsKLSAgICBhcHBlbmQ8RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOworICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwg
cnVsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7Cisg
ICAgYXBwZW5kPENsaXBPdXQ+KGNsaXBSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
Q2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZDxEcmF3UGF0aD4o
cGF0aCk7CisgICAgYXBwZW5kPENsaXBPdXRUb1BhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgYXBwZW5kPERyYXdGb2N1c1Jp
bmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgYXBwZW5kPENsaXBUb0lt
YWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVz
dGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1Jp
bmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRD
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNS
aW5nUmVjdHM+KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgYXBwZW5kPENsZWFy
UmVjdD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yNTcsMjMgKzE1MSwyMiBAQCB2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFk
aWVudCYgZwogICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4ocmVjdCwgZ3JhZGllbnQp
OwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBhcHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0PihyZWN0LCBjb2xvciwgb3AsIG1vZGUpOwor
ICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBtb2RlKQordm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihyZWN0LCBjb2xvciwgbW9kZSk7CisgICAg
YXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkUmVjdCwgY29sb3Ip
OwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcik7CisgICAgYXBwZW5kPEZpbGxFbGxp
cHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGxpbmUpCiB7CiAgICAg
YXBwZW5kPEZpbGxMaW5lPihsaW5lKTsKQEAgLTI5Myw3ICsxODYsNiBAQCB2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYgY3VydmUp
CiB7CiAgICAgYXBwZW5kPEZpbGxCZXppZXJDdXJ2ZT4oY3VydmUpOwogfQotCiAjZW5kaWYgLy8g
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxs
UGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzAxLDI1ICsxOTMsMTcgQEAgdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgYXBwZW5kPEZpbGxQ
YXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhcHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwot
fQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kPFBhaW50RnJhbWVG
b3JNZWRpYT4ocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgYXBwZW5kPFN0cm9rZVJlY3Q+KHJl
Y3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IHdpZHRoKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCB3aWR0aCk7
CisgICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOwogfQogCiAjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCi0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VMaW5lKGNvbnN0
IExpbmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVuZDxTdHJva2VMaW5lPihsaW5lKTsKQEAgLTMz
OSw3ICsyMjMsNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUo
Y29uc3QgQmV6aWVyQ3VydmVEYXRhJiBjdXJ2ZSkKIHsKICAgICBhcHBlbmQ8U3Ryb2tlQmV6aWVy
Q3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
CiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpA
QCAtMzQ3LDMzICsyMzAsODQgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKICAgICBhcHBlbmQ8U3Ryb2tlUGF0aD4ocGF0aCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4o
cmVjdCk7CisgICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQog
Ci12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBhcHBlbmQ8Q2xlYXJSZWN0
PihyZWN0KTsKKyAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsKIH0KIAotI2lm
IFVTRShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5kPERyYXdFbGxpcHNlPihyZWN0KTsKK30KIAotdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8QXBw
bHlTdHJva2VQYXR0ZXJuPigpOworICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kPEFwcGx5
RmlsbFBhdHRlcm4+KCk7CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLSNlbmRpZiAvLyBVU0UoQ0cpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewor
ICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xv
cik7Cit9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRpdmVJ
bWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oc2NhbGVGYWN0b3IpOworICAgIGFw
cGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKK3sKKyAgICBhcHBlbmQ8RHJhd1N5c3RlbUltYWdlPihzeXN0ZW1JbWFn
ZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIu
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIEZpbHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkKKyAgICAgICAg
aWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsK
KyAgICBhcHBlbmQ8RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI+KFdURk1vdmUoaWRlbnRpZmllciks
IHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKK3sKKyAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+KGltYWdlSWRlbnRpZmllciwgZGVzdFJl
Y3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKwor
I2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24pCit7CisgICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4oaWRlbnRpZmll
ciwgZGVzdGluYXRpb24pOworfQorI2VuZGlmCisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQorewor
ICAgIGFwcGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9j
YWxBbmNob3IsIG1vZGUpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3sKKyAg
ICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2lu
dCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOworfQorCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3sKKyAg
ICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOwogfQogCiBi
b29sIFJlY29yZGVySW1wbDo6cmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUlt
YWdlKQpAQCAtNDE3LDIwICszNTEsMTYgQEAgc3RhdGljIGlubGluZSBmbG9hdCBzaGFkb3dQYWlu
dGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQogCiBGbG9hdFJlY3QgUmVjb3JkZXJJbXBsOjpl
eHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewotICAg
IEZsb2F0UmVjdCBib3VuZHMgPSByZWN0OwotICAgIGF1dG8mIHN0YXRlID0gY3VycmVudFN0YXRl
KCk7CisgICAgYXV0byBib3VuZHMgPSByZWN0OwogCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNl
dDsKLSAgICBmbG9hdCBzaGFkb3dSYWRpdXM7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAg
aWYgKGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7Ci0gICAgICAgIHNoYWRv
d0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7Ci0gICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRl
KHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOworICAgIGlmIChoYXNTaGFkb3co
KSkgeworICAgICAgICBhdXRvIHNoYWRvd0V4dGVudCA9IGJvdW5kczsKKyAgICAgICAgc2hhZG93
RXh0ZW50Lm1vdmUoZHJvcFNoYWRvdygpLm9mZnNldCk7CisgICAgICAgIHNoYWRvd0V4dGVudC5p
bmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KGRyb3BTaGFkb3coKS5ibHVyUmFkaXVzKSk7CiAg
ICAgICAgIGJvdW5kcy51bml0ZShzaGFkb3dFeHRlbnQpOwogICAgIH0KIAotICAgIHJldHVybiBp
bnRlcnNlY3Rpb24oc3RhdGUuY2xpcEJvdW5kcywgc3RhdGUuY3RtLm1hcFJlY3QoYm91bmRzKSk7
CisgICAgcmV0dXJuIGludGVyc2VjdGlvbihjbGlwQm91bmRzKCksIGdldENUTSgpLm1hcFJlY3Qo
Ym91bmRzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCmluZGV4IDY0MjI2NWYwOTgwMjJjZjJiMDVm
MTgwYzE3NGZhMDM0NjJmMmRkNDAuLjZkZTZhZWRmZmNiMTdkYjJkMDgxYjQyYzFkZTZiYzMyOWEz
OGJmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCkBA
IC0zNSw5ICszNSw4IEBAIGNsYXNzIFJlY29yZGVySW1wbCA6IHB1YmxpYyBSZWNvcmRlciB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVj
b3JkZXJJbXBsKTsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlckltcGwoRGlz
cGxheUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYg
aW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6
RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERy
YXdHbHlwaHM6Olllcyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXJJbXBs
KCk7Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmLCBjb25z
dCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0gPSB7IH0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJh
d0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CisgICAgCiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0K
IAogICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIGZpbmFsIHsgfQpAQCAtNDcsNDcg
KzQ2LDM1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRTYXZlKCkgZmluYWw7
CiAgICAgdm9pZCByZWNvcmRSZXN0b3JlKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRUcmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQg
YW5nbGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBm
aW5hbDsKKwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+
KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4
X3Q+KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldE1p
dGVyTGltaXQoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikg
ZmluYWw7CisKKyNpZiBVU0UoQ0cpCisgICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4o
KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyNlbmRp
ZgorCisgICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKICAgICB2b2lk
IHJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2Fs
QW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0
ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1Bh
dHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRFbmRUcmFuc3Bh
cmVuY3lMYXllcigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1Bh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgo
Y29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZENsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmls
bFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYs
IEJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CiAgICAgdm9pZCByZWNvcmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZv
aWQgcmVjb3JkRmlsbEFyYyhjb25zdCBBcmNEYXRhJikgZmluYWw7CkBAIC05NSwxMSArODIsMTAg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJD
dXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZv
ck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7
Ci0jZW5kaWYKLSAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAgICAgdm9pZCByZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJikgZmluYWw7CiAg
ICAgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3QgQXJjRGF0YSYpIGZpbmFsOwpAQCAtMTA3LDEz
ICs5MywyOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29u
c3QgQmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZFN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCByZWNvcmRBcHBseVN0cm9r
ZVBhdHRlcm4oKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5h
bDsKKworICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2
b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgcmVjb3Jk
RHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMo
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXIm
KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJ
bWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHJl
Y29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCByZWNvcmRBcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwg
Rm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERv
Y3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7CiAKICAgICBib29sIHJlY29yZFJlc291cmNl
VXNlKE5hdGl2ZUltYWdlJikgZmluYWw7CiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShJbWFn
ZUJ1ZmZlciYpIGZpbmFsOwpAQCAtMTM5LDYgKzE0MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZp
bmFsOworCiAgICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJl
Y3QmKSBjb25zdDsKIAogICAgIERpc3BsYXlMaXN0JiBtX2Rpc3BsYXlMaXN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCmluZGV4IDhmZjE5ZDAwMzU0Y2RiZWRlM2E1
YmExYWY3NThjZmYwMjNhMjVhMjIuLjY2ZmM5ZDg4MmE0ZDNmN2RlOGU4OTEyYTFmMzBhZjE5OGQw
MzUyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTk3
LDEwICs5NywxMCBAQCBpbmxpbmUgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyPiBhcHBseVNldFN0YXRlSXRlbShHcmFwaAogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgIH07CiAKLSAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQ
YXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tl
UGF0dGVybi5nZXQoKSkpCisgICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVy
blRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQog
ICAgICAgICByZXR1cm4gKmltYWdlSWRlbnRpZmllcjsKIAotICAgIGlmIChhdXRvIGltYWdlSWRl
bnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCku
bV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVy
ID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5w
YXR0ZXJuKCkpKQogICAgICAgICByZXR1cm4gKmltYWdlSWRlbnRpZmllcjsKIAogICAgIHNldFN0
YXRlSXRlbS5hcHBseShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRl
ckhhcmZCdXp6LmNwcAppbmRleCBkMDljMTM3M2VhOWFhYWY0YTE4NTEzNmVlODg1M2Q3ODhmYzQx
NzhkLi5kNzk3MzE0ZDI0OTA2NzY4YjhkNzU3YjdjNGRiY2U1Mzc4MWZhM2QyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVj
b3JkZXJIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCkBAIC0zMiwxNCArMzIsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlw
aHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMs
IERlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9u
Q29udGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCisg
ICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9CiAKIHZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBG
b250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBo
c0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9p
bnQsIHNtb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNB
bmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50
LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRl
cldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBo
c1JlY29yZGVyV2luLmNwcAppbmRleCA1ZDY2ZWI3MmFkMTNjMjRkYWMwOTVhOTQ1ZjYxNGE2ZjU1
MjIyNDkyLi5jODMxNDgwMjI3YjEwZjUxYzRkMzQ0ZWQ2OTVhMTNmNDA2Y2I2OGVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29y
ZGVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJh
d0dseXBoc1JlY29yZGVyV2luLmNwcApAQCAtMzIsMTQgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhp
Y3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNv
bnRleHQpCi0gICAgOiBtX293bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5
cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3Ry
dWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlv
bkNvbnRleHQob3duZXIpCiB7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2Rl
KQogewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9kZSk7CisgICAgbV9k
ZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9kZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggM2NmNzQ2MGM4MGUzYmUx
ZDViYTNmMGNlZDdjMTliMjVkZjI5YWJmMi4uNzg1ZTk0YmVjZjA3Y2Q0YTg0YzljMzRkOWNlY2M4
Mzg1N2UwNjk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTI5MiwxMiArMjkyLDEyIEBAIHZvaWQg
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiAgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCgyLCAyLCBzaXplLndpZHRoKCkgLSAzLCBzaXpl
LmhlaWdodCgpIC0gMyk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUp
OwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDMpOwotICAgIGNvbnRleHQuc2V0TGlu
ZURhc2gobV9kYXNoV2lkdGhzLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgbV9kYXNo
V2lkdGhzLCAwIH0pOwogICAgIG1fcGF0aC5hZGRSZWN0KGZyYW1lUmVjdCk7CiAgICAgbV9wYXRo
LmNsb3NlU3VicGF0aCgpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChtX3BhdGgpOwogCi0gICAg
Y29udGV4dC5zZXRMaW5lRGFzaChEYXNoQXJyYXkoKSwgMCk7CisgICAgY29udGV4dC5zZXRMaW5l
RGFzaCh7IHsgfSwgMCB9KTsKICAgICBtX3BhdGguY2xlYXIoKTsKICAgICBtX3BhdGgubW92ZVRv
KEZsb2F0UG9pbnQoMCwgYm94VG9wICsgYm94U2l6ZSkpOwogICAgIG1fcGF0aC5hZGRMaW5lVG8o
RmxvYXRQb2ludChzaXplLndpZHRoKCksIGJveFRvcCArIGJveFNpemUpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAppbmRleCAx
YjE4MmExZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0M2I3NjdkLi5lODBmMmVlODkxOTM5MTQ0
MThlODc4YmYwYTRhMjg0MGVlNjg5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBAIGJvb2wg
Q29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KEZyYW1l
VmlldyYgZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVo
YXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CiAgICAgZnJhbWVWaWV3LnNldFBhaW50
c0VudGlyZUNvbnRlbnRzKHRydWUpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjaGVja2Vy
Q29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRl
dGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjaGVja2Vy
Q29udGV4dChmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSwgTnVsbEdyYXBo
aWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVs
UGFpbnQpOwogICAgIGZyYW1lVmlldy5wYWludChjaGVja2VyQ29udGV4dCwgZnJhbWVWaWV3LnJl
bmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCkpOwogCiAgICAgZnJhbWVWaWV3LnNldFBhaW50c0Vu
dGlyZUNvbnRlbnRzKG9sZEVudGlyZUNvbnRlbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCmluZGV4IGM5YWIyMTc2MTQxZmE3YTMzOWEyMDk3
YjNhYmY5NzY1MDc4N2U0ZjEuLjRiZmY4ZDAwODM5MjUxNGNiZTYyY2E5NWQ0ZTc0M2ZjMTk3ZjAx
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0Jv
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNw
cApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIExlZ2FjeUVsbGlwc2lzQm94OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGJvb2wgc2V0
U2hhZG93ID0gZmFsc2U7CiAgICAgaWYgKGxpbmVTdHlsZS50ZXh0U2hhZG93KCkpIHsKICAgICAg
ICAgQ29sb3Igc2hhZG93Q29sb3IgPSBsaW5lU3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0
ZXIobGluZVN0eWxlLnRleHRTaGFkb3coKS0+Y29sb3IoKSk7Ci0gICAgICAgIGNvbnRleHQuc2V0
U2hhZG93KExheW91dFNpemUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgpLnZhbHVlKCksIGxp
bmVTdHlsZS50ZXh0U2hhZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxlLnRleHRTaGFkb3co
KS0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0LnNldERy
b3BTaGFkb3coeyBMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPngoKS52YWx1ZSgp
LCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVTdHlsZS50ZXh0U2hh
ZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAgICBzZXRTaGFk
b3cgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMjRjODJjOWQ2YmQ0M2Y3NGJhMDVhYjVhYzc2Nzkz
ZDc1ZDE1ZTU3Ny4uOGQ5N2QyNTcxZTI0NTNkZjE5MjhiZGU2Yzc3Yzc2MzE1ZmJjODgyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CkBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3Jv
dW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgYm94
U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KCk7CiAKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0
KGJveFNoYWRvdy0+eCgpLnZhbHVlKCksIGJveFNoYWRvdy0+eSgpLnZhbHVlKCkpOwotICAgIGNv
bnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKS52YWx1ZSgp
LCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpLCBi
b3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kg
OiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3co
eyBzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUuY29sb3JC
eUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93LT5pc1dl
YmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVz
TW9kZTo6RGVmYXVsdCB9KTsKIH0KIAogSW50ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNob29zZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCB2b2lkKiBsYXllciwgY29uc3QgTGF5b3V0U2l6ZSYg
c2l6ZSkKQEAgLTIwODcsNyArMjA4Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRy
YXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsCiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gbGluZURhc2ggPSBEYXNoQXJyYXk6OmZyb20o
ZGFzaExlbmd0aCwgZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRM
aW5lRGFzaChXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7CisgICAgICAgICAgICBncmFw
aGljc0NvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBi
b3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTI0NTYsNyAr
MjQ1Niw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9hdFBvaW50
IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhlbChzaGFk
b3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNlUGl4ZWwo
c2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAgICAgICBG
bG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4gLSBwaXhl
bFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAgY29udGV4
dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xv
ciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5
IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgICAgICBjb250ZXh0LnNldERy
b3BTaGFkb3coeyBzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9y
LCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kg
OiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwogCiAgICAgICAgICAgICBpZiAoaGFzQm9y
ZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0
IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0
aW1lCkBAIC0yNTU4LDcgKzI1NTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWlu
dEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAgICAg
ICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCiAgICAgICAgICAgICBhdXRvIHNu
YXBwZWRTaGFkb3dPZmZzZXQgPSByb3VuZFNpemVUb0RldmljZVBpeGVscyhzaGFkb3dPZmZzZXQs
IGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBw
ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJr
aXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01v
ZGU6OkRlZmF1bHQpOworICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc25hcHBl
ZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtp
dEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9k
ZTo6RGVmYXVsdCB9KTsKICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUocGl4ZWxTbmFwcGVkT3V0ZXJSZWN0LCBwaXhlbFNuYXBwZWRIb2xlUmVjdCwgZmlsbENvbG9y
KTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCmluZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2MjMyMWZlZWQ5YjY4NmMzY2QuLjhjZjk2
MWUwYmMyMzY0ZTk2MmNkYTg4MWY4NTllNGYzMWEzYzk4M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjI1MywxNCArMjI1MywxNCBAQCB2b2lkIFJlbmRl
ckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IExheWVyUAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAgIGJvb2wg
dXNlc0NvbXBvc2l0ZU9wZXJhdGlvbiA9IGhhc0JsZW5kTW9kZSgpICYmICEocmVuZGVyZXIoKS5p
c0xlZ2FjeVNWR1Jvb3QoKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJWaWV3TGF5
ZXIoKSk7CiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAgICAgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24o
KSwgYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsg
Y29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkgfSk7CiAjZW5kaWYKIAog
ICAgICAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIocmVuZGVyZXIoKS5vcGFjaXR5
KCkpOwogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgaWYgKHVzZXNDb21w
b3NpdGVPcGVyYXRpb24pCi0gICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlv
bihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAg
ICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0LmNvbXBvc2l0ZU9wZXJh
dGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICNlbmRpZgogCiAjaWZkZWYgUkVWRUFMX1RS
QU5TUEFSRU5DWV9MQVlFUlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKaW5kZXggYTg1MGUxMzc0YTEyNTgyMjBjZWZjOGZkN2EyYjczZjc2N2E3
NDNhYy4uY2UxZWE2ZmM1MDNlZDgxY2JkMGViMGE5ZGM3ZmYxOTBjOTQzMmRkZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTE4MzEs
NyArMTgzMSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lvbigp
CiAgICAgfTsKIAogICAgIGF1dG8gdXBkYXRlRXZlbnRSZWdpb25Gb3JMYXllciA9IFsmXShHcmFw
aGljc0xheWVyJiBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQg
bnVsbENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpOb25lKTsKKyAgICAgICAgYXV0byBkaXJ0eVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludChn
cmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NMYXllci5zaXplKCkp
OworICAgIAorICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KGRpcnR5UmVj
dCwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsK
ICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRBQkxFX1JF
R0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRpdGFibGVS
ZWdpb24oKSkKQEAgLTE4NTMsOCArMTg1NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVFdmVudFJlZ2lvbigpCiAgICAgICAgICAgICBldmVudFJlZ2lvbkNvbnRleHQudW5pdGUo
ZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoLWxheWVyT2Zmc2V0LCBncmFwaGljc0xheWVyLnNp
emUoKSkpLCByZW5kZXJlcigpLnN0eWxlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBk
aXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KGdyYXBoaWNz
TGF5ZXIub2Zmc2V0RnJvbVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNpemUoKSkpOwotICAg
ICAgICBwYWludEludG9MYXllcigmZ3JhcGhpY3NMYXllciwgbnVsbENvbnRleHQsIGRpcnR5UmVj
dCwgeyB9LCAmZXZlbnRSZWdpb25Db250ZXh0KTsKKyAgICAgICAgcGFpbnRJbnRvTGF5ZXIoJmdy
YXBoaWNzTGF5ZXIsIG51bGxDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVjdCksIHsg
fSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7CiAKICAgICAgICAgZXZlbnRSZWdpb24udHJhbnNsYXRl
KHRvSW50U2l6ZShsYXllck9mZnNldCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW0KaW5kZXggMzBjZDM0M2VhN2RmOTE2OGNjM2NkZTQ3ZGJlZjhmNzU5ZTg4
ZjczMS4uMjU2ZmM3NDk1NmRhMzM4NmE1NGQzNTJkZTExYjZmZjczNjY5YTFmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtNjA1LDcgKzYwNSw3IEBA
IHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3coY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0CiAgICAgY29uc3QgRmxvYXRTaXplIGlubmVyU2hhZG93
T2Zmc2V0IHsgMCwgNSB9OwogICAgIGNvbnN0ZXhwciBhdXRvIGlubmVyU2hhZG93Qmx1ciA9IDEw
LjBmOwogICAgIGF1dG8gaW5uZXJTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4geyAwLCAw
LCAwLCAwLjA0ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KGlubmVyU2hhZG93T2Zmc2V0LCBp
bm5lclNoYWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNo
YWRvdyh7IGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hhZG93Q29s
b3IgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAogICAgIFBh
dGggaW5uZXJTaGFkb3dQYXRoOwpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBQYWludElu
Zm8mIHBhaW4KICAgICAvLyBVc2UgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiwgYmVjYXVz
ZSBpdCBjYWxjdWxhdGVzIHRoZSBibHVyIHJhZGl1cyBpbiBjb250ZXh0IHNwYWNlLAogICAgIC8v
IHJhdGhlciB0aGFuIHNjcmVlbiBzcGFjZS4KICAgICBjb25zdGV4cHIgYXV0byBzaGFkb3dDb2xv
ciA9IENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYUJ5dGUoMjYpOwotICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXRTaGFkb3coRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yKTsKKyAgICBncmFw
aGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFkb3dDb2xv
ciB9KTsKIAogICAgIC8vIFRoZSBjaXJjbGUgbXVzdCBoYXZlIGFuIGFscGhhIGNoYW5uZWwgdmFs
dWUgb2YgMSBmb3IgdGhlIHNoYWRvdyBjb2xvciB0byBhcHBlYXIuCiAgICAgQ0dGbG9hdCBjaXJj
bGVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDAsIDEgfTsKQEAgLTIyNzMsNyArMjI3Myw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAKICAgICBib29sIGlzRW1wdHkgPSAhc3RhdGVz
LmNvbnRhaW5zQW55KHsgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpDaGVja2VkLCBDb250cm9sU3Rh
dGVzOjpTdGF0ZXM6OkluZGV0ZXJtaW5hdGUgfSk7CiAgICAgYXV0byBmaXJzdFNoYWRvd0NvbG9y
ID0gRGlzcGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIGlzRW1wdHkgPyAwLjA1ZiA6IDAuMWYgfTsK
LSAgICBjb250ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVy
LCBmaXJzdFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBpbm5lclNo
YWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yIH0pOwogICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVyU2hhZG93
UGF0aDsKQEAgLTIyOTAsNyArMjI5MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hl
Y2tib3hSYWRpb0lubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAgICAg
Y29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogCiAgICAgY29uc3RleHByIGF1dG8g
c2Vjb25kU2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMSwgMSwgMSwgMC41ZiB9Owot
ICAgIGNvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwgc2Vjb25kU2hhZG93
Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IDAsIDAgfSwg
MSwgc2Vjb25kU2hhZG93Q29sb3IgfSk7CiAKICAgICBjb250ZXh0LmZpbGxQYXRoKGlubmVyU2hh
ZG93UGF0aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0K
aW5kZXggMDEwZWNiYWVkODdhNzNhNDIwYWZiOTdlOGU4MGZlYTYzNzlmZWQzZS4uMTBkYzkwZTU3
ZTVhZTBmNDI1YTBkYWFhMzY0ZjgxNGU0NDk0OTkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjgxNiw3ICsyODE2LDcgQEAgc3RhdGljIHZvaWQg
cGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIoY29uc3QgUmVuZGVyQXR0YWNobWVudCYg
YXR0YWNobWVudCwKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHBsYWNlaG9sZGVyQm9yZGVy
Q29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQbGFjZWhv
bGRlckJvcmRlcldpZHRoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKERhc2hlZFN0cm9r
ZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7YXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVy
RGFzaExlbmd0aH0sIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IGF0dGFjaG1lbnRQ
bGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGggfSwgMCB9KTsKICAgICBjb250ZXh0LnN0cm9rZVBh
dGgoYm9yZGVyUGF0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHREZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXggNjc1NTY4YWZmNjExOGYwMTNiZDFkNGY1NWE2
YzM2NGZhOGFmMzhlOC4uODMwOWIyZjhkNGEzMWZhMDNiMWFiZjg0MzlkYTBmM2VmMTYyODQwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRl
ci5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFRleHREZWNvcmF0aW9uUGFpbnRlcjo6cGFp
bnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgYwogICAgICAg
ICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CiAgICAgICAgICAgICBp
ZiAobV9zaGFkb3dDb2xvckZpbHRlcikKICAgICAgICAgICAgICAgICBtX3NoYWRvd0NvbG9yRmls
dGVyLT50cmFuc2Zvcm1Db2xvcihzaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICBtX2NvbnRleHQu
c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQpLCBzaGFk
b3ctPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIG1fY29udGV4
dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd1gsIHNoYWRvd1kgLSBleHRyYU9mZnNl
dCksIHNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiAgICAgICAgICAg
ICBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCA4ODVkODI2ZWU5ZTc5NmY0YjVjNWI1ODMzZjcx
YTAyOGM0NTQxYTdhLi5mZTg4NjljMTllNWY4ZDQzYjdmYTE2ZTQwMWI0ZmJjNmRjZjdlZWZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTc0LDcgKzc0LDcg
QEAgU2hhZG93QXBwbGllcjo6U2hhZG93QXBwbGllcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywKICAgICB9CiAKICAgICBpZiAoIW1fYXZvaWREcmF3
aW5nU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRv
d1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0RHJvcFNo
YWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0p
OwogfQogCiBpbmxpbmUgYm9vbCBTaGFkb3dBcHBsaWVyOjppc0xhc3RTaGFkb3dJdGVyYXRpb24o
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5k
ZXggN2VkNTM3YzkyNzkzNzcwZjQ0ODhhZTI5ZGY0MDcyN2Q3ZWIxYTNhOS4uNmM3MzBlZjA3ZTQ4
YzdlY2Y4YzQwZTM3ZTAwMzQ1Y2ZhYjU2YzY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02OSw3ICs2OSw3IEBAIEZsb2F0UmVjdCBS
ZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVVcGRhdGVkU3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAog
c3RhdGljIHZvaWQgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQogewogICAgIGlmIChhdXRvIGdyYWRpZW50ID0gY29udGV4dC5zdHJva2VHcmFkaWVudCgpKQot
ICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqZ3JhZGllbnQsIGNvbnRleHQuc3RhdGUo
KS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxs
R3JhZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOwogICAg
IGVsc2UgaWYgKFBhdHRlcm4qIHBhdHRlcm4gPSBjb250ZXh0LnN0cm9rZVBhdHRlcm4oKSkKICAg
ICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqcGF0dGVybik7CiAgICAgZWxzZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXgg
Y2MzOGVjNzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4uYjY1ODY4ZDFiZDM0Yzkw
ZDRiYmZkZDQ3N2FkMmM3NDI4MmEwNTZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC01MDEsMTAgKzUwMSwxMiBAQCB2b2lk
IFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNhblNldExpbmVE
YXNoKQotICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGxlbmd0aENv
bnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKSAqIHNjYWxl
RmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGRhc2hB
cnJheSksIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9m
ZnNldCgpKSAqIHNjYWxlRmFjdG9yIH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb250
ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICB9CisKKyAgICBjb250ZXh0LmFw
cGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6c3R5bGVDaGFu
Z2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250
ZXh0LmNwcAppbmRleCAyZmI4ZjMzYTg3MGRmY2NlYjYyZTE0OTY1NmIxNDQzNzIyZWJlYTJkLi5m
NTc5ZTVhNzVmZTkxMGY2ZTViNThhOWFlZmI2ODM1ODk2MjIxMGU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTEx
NSwxMiArMTE1LDEyIEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVy
U1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUGFpCiAgICAgICAgIGlmIChvcGFj
aXR5IDwgMSB8fCBoYXNCbGVuZE1vZGUgfHwgaXNvbGF0ZU1hc2tGb3JCbGVuZGluZyB8fCBoYXNJ
c29sYXRpb24pIHsKIAogICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkKLSAgICAgICAgICAg
ICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BhaW50
SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5ibGVuZE1vZGUoKSk7
CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVNb2Rl
KHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgc3R5bGUuYmxl
bmRNb2RlKCkgfSk7CiAKICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9k
ZSkKLSAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVu
ZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5z
ZXRDb21wb3NpdGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRp
b24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAKICAgICAgICAgICAgIG1fcmVuZGVyaW5nRmxh
Z3MgfD0gRW5kT3BhY2l0eUxheWVyOwogICAgICAgICB9CkBAIC0yNzMsNyArMjczLDcgQEAgYm9v
bCBTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4mIGltYWdlQnVmZmVyKQogCiAgICAgLy8gSW52YWxpZGF0ZSBhbiBleGlzdGluZyBidWZmZXIg
aWYgdGhlIHNjYWxlIGlzIG5vdCBjb3JyZWN0LgogICAgIGlmIChpbWFnZUJ1ZmZlcikgewotICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5n
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250ZXh0KCku
Z2V0Q1RNKCk7CiAgICAgICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0JveCA9IGV4cGFuZGVk
SW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXplIGJ1ZmZlclNpemUo
c3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lkdGgoKSAqIHRyYW5z
Zm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0Jv
eC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKICAgICAgICAgaWYgKGJ1ZmZlclNp
emUgIT0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcAppbmRleCA0ZGQ3ZjgwZTM3Nzc5ODdkY2I3MGMxYTNjOGE4N2NkOGE0
ZmQ2ZmI5Li5jZDg4YWRmMDhkZGE4MDNiZmQ5M2Y4OTU3NzQwNzY4NmFjNGM1NDYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTI2OSwxNCArMjY5LDE0IEBA
IEltYWdlRHJhd1Jlc3VsdCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjCiAgICAgQVNTRVJUKHZpZXcpOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xp
cChlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpKTsKIAogICAgIGZsb2F0IGFscGhhID0gY29udGV4
dC5hbHBoYSgpOwogICAgIGJvb2wgY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5zcGFyZW5jeUxheWVy
ID0gb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpICE9IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyIHx8IG9wdGlvbnMuYmxlbmRNb2RlKCkgIT0gQmxlbmRNb2RlOjpOb3JtYWwgfHwgYWxw
aGEgPCAxOwogICAgIGlmIChjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJlbmN5TGF5ZXIpIHsK
ICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGFscGhhKTsKLSAgICAgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92
ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2Rl
KHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsIH0pOwog
ICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaG9ub3Igb3B0aW9ucy5vcmllbnRhdGlv
bigpLCBzaW5jZSBJbWFnZUJpdG1hcCdzIGZsaXBZIGhhbmRsaW5nIHJlbGllcyBvbiBpdC4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAwMQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCmluZGV4IDU0MzgxODJkZGU4NzYzZWJhZDM4ZjE5MmRmNzk1YWEwNjBi
NjUxYmIuLjhkYTM5MGY2ZGE3MGUzNzk1NTBhNTcyZTA5ZTA4NDExODljMmRkZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTc0LDMxICs3NCw2IEBAIHZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6
UmVzdG9yZSgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjp0cmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpUcmFu
c2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJvdGF0
ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpSb3RhdGUoYW5n
bGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNjYWxlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNjYWxlKHNj
YWxlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNl
dENUTShjdG0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjb25jYXRl
bmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBoYW5kbGVJdGVtKERp
c3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTShjdG0pKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpzZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElubGluZUZp
bGxDb2xvciYmIGl0ZW0pCiB7CiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsKQEAgLTEy
OCw0MCArMTAzLDE1IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0U3RhdGUo
RGlzcGxheUxpc3Q6OlNldFN0YXRlJiYgaXRlbSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fTsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlQ2hhbmdlKCkubV9z
dGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2Uo
aXRlbS5zdGF0ZSgpLnN0cm9rZUJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5z
dGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGhh
bmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgaGFuZGxlSXRlbShEaXNw
bGF5TGlzdDo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYgaXRlbSkK
LXsKLSAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIGhh
bmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0KLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsK
LSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0KGxpbWl0KSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewotICAgIGhh
bmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93KCkpOwotfQotCiB2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGhh
bmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsaXAocmVjdCkpOwpAQCAtMzcxLDE0ICszMjEsOSBAQCB2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aEdyYWRpZW50KERpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhHcgogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBvc2l0ZWRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0
OjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGhh
bmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwgYmxlbmRN
b2RlKSk7CisgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0KHJlY3Qs
IGNvbG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlci5oCmluZGV4IDNiYmFmNzY1ZDA1ZjQ0YWJmNGQ5NjFlNzY2Y2U2NTQ2OThlZGUyOTQu
LjgxODg5NjZhZmZhNzA5ZTZmZDBhMzFiZmNhNmMzZTcxODU2NWM1OGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXIuaApAQCAtNTksMjAgKzU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2F2
ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlKTsKLSAgICB2b2lkIHNjYWxlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgY29uY2F0ZW5hdGVDVE0oY29uc3Qg
V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBzZXRJbmxpbmVGaWxsQ29sb3Io
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmKTsKICAgICB2b2lkIHNl
dElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VD
b2xvciYmKTsKICAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CiAgICAgdm9pZCBz
ZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUmJik7Ci0gICAgdm9pZCBzZXRM
aW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApOwotICAgIHZvaWQgc2V0TGluZURhc2goV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oV2ViQ29y
ZTo6TGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0gICAgdm9pZCBj
bGVhclNoYWRvdygpOwogICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
ICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBj
bGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKQEAgLTk3LDggKzg3LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7
CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoR3JhZGllbnQoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50JiYpOwotICAgIHZvaWQgZmls
bENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7
Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKKyAgICB2b2lk
IGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpDb2xvciYpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
IHZvaWQgZmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KaW5kZXggMjgwMmZmZThmODM5N2MwZWQ0ZGYx
MjFhMDE3ZmU3ODEwOGZmNmMyMC4uNDE0YzMxYTEzMjBjMGIyZTc4NmJjOGQ5ZjY1OTgxMDJkODcw
ZjQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KQEAg
LTI1LDQ3ICsyNSwzNSBAQAogbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBO
b3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgU2F2ZSgpCiAgICAgUmVzdG9yZSgpCi0gICAgVHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgUm90YXRlKGZsb2F0IGFuZ2xlKQotICAgIFNj
YWxlKFdlYkNvcmU6OkZsb2F0U2l6ZSBzY2FsZSkKLSAgICBTZXRDVE0oV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtIGN0bSkKLSAgICBDb25jYXRlbmF0ZUNUTShXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0gY3RtKQorCiAgICAgU2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRJbmxpbmVGaWxsQ29sb3IgaXRlbSkKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3IgaXRlbSkKICAgICBTZXRTdHJva2VU
aGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIFNldFN0YXRlKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRTdGF0ZSBpdGVtKQotICAgIFNldExpbmVDYXAoZW51bTp1aW50OF90IFdlYkNvcmU6
OkxpbmVDYXAgbGluZUNhcCkKLSAgICBTZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TGluZURhc2ggaXRlbSkKLSAgICBTZXRMaW5lSm9pbihlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6
TGluZUpvaW4gbGluZUpvaW4pCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLSAgICBD
bGVhclNoYWRvdygpCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVybigpCisgICAg
QXBwbHlGaWxsUGF0dGVybigpCisjZW5kaWYKKyAgICBBcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlRmFjdG9yKQorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKKwogICAgIENsaXAoV2ViQ29yZTo6Rmxv
YXRSZWN0IHJlY3QpCisgICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVtOnVpbnQ4
X3QgV2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgQ2xpcE91dChXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCkKLSAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9h
dFJlY3QgZGVzdGluYXRpb25SZWN0KQogICAgIENsaXBPdXRUb1BhdGgoV2ViQ29yZTo6UGF0aCBw
YXRoKQotICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90IFdlYkNv
cmU6OldpbmRSdWxlIHdpbmRSdWxlKQotICAgIERyYXdHbHlwaHMoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdHbHlwaHMgaXRlbSkKLSAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9w
dGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNlSW1hZ2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRl
clJlZmVyZW5jZSBmaWx0ZXIpCi0gICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0
UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3Qg
V2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBEcmF3TmF0aXZlSW1h
Z2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwg
V2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0
LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRp
bmdPcHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd1N5c3RlbUltYWdlKFJlZjxXZWJDb3JlOjpTeXN0
ZW1JbWFnZT4gc3lzdGVtSW1hZ2UsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3Qp
Ci0gICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9h
dFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0sIFdlYkNv
cmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBzdHJ1Y3Qg
V2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotICAg
IERyYXdSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
Ci0gICAgRHJhd0xpbmUoV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDEsIFdlYkNvcmU6OkZsb2F0
UG9pbnQgcG9pbnQyKQotICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFdl
YkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUgc3R5bGUpCi0gICAgRHJhd0VsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0g
ICAgRHJhd1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIERyYXdGb2N1c1JpbmdQYXRoKFdl
YkNvcmU6OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29s
b3IgY29sb3IpCi0gICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJl
Y3Q+IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xv
cikKKyAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVz
dGluYXRpb25SZWN0KQorCisgICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQor
CiAgICAgRmlsbFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAgICAgRmlsbFJlY3RXaXRo
Q29sb3IoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogICAg
IEZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhH
cmFkaWVudCBpdGVtKQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpDb21wb3Np
dGVPcGVyYXRvciBvcCwgZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9kZSBibGVuZE1vZGUp
Ci0gICAgRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgcmVjdCwgV2Vi
Q29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVuZE1vZGUgYmxlbmRN
b2RlKQorICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJlY3Qs
IFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFdlYkNv
cmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJvdW5kZWRIb2xl
UmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBGaWxsRWxsaXBzZShXZWJDb3JlOjpG
bG9hdFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBGaWxsTGlu
ZShzdHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBGaWxsQXJjKHN0cnVjdCBXZWJD
b3JlOjpBcmNEYXRhIGRhdGEpCkBAIC03MywxMSArNjEsMTAgQEAgbWVzc2FnZXMgLT4gUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgRmlsbEJlemll
ckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRpZgogICAg
IEZpbGxQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBGaWxsRWxsaXBzZShXZWJDb3JlOjpG
bG9hdFJlY3QgcmVjdCkKLSAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLSAgICBUcmFuc2Zv
cm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Up
Ci0gICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCisKICAgICBTdHJva2VS
ZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisKKyAgICBTdHJv
a2VFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQogICAgIFN0cm9rZUxpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRhdGEpCiAg
ICAgU3Ryb2tlQXJjKHN0cnVjdCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC04NSwxMyArNzIs
MzEgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVk
IFN0cmVhbSB7CiAgICAgU3Ryb2tlQmV6aWVyQ3VydmUoc3RydWN0IFdlYkNvcmU6OkJlemllckN1
cnZlRGF0YSBkYXRhKQogI2VuZGlmCiAgICAgU3Ryb2tlUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgp
Ci0gICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDbGVhclJl
Y3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0jaWYgVVNFKENHKQotICAgIEFwcGx5U3Ryb2tl
UGF0dGVybigpCi0gICAgQXBwbHlGaWxsUGF0dGVybigpCisKKyAgICBEcmF3UmVjdChXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIERyYXdMaW5lKFdl
YkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MikKKwor
ICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIERyYXdQYXRoKFdl
YkNvcmU6OlBhdGggcGF0aCkKKworICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNvcmU6OlBhdGgg
cGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisg
ICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJlY3RzLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKworICAgIERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVj
dCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlcikKKyAgICBEcmF3
SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlQnVm
ZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCwgV2ViQ29y
ZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyBvcHRpb25zKQorICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVtSW1hZ2U+
IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQorICAgIERy
YXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUgaW1hZ2VTaXplLCBXZWJDb3JlOjpGbG9hdFJl
Y3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6
SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3UGF0dGVybihXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9h
dFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB0aWxlUmVjdCwgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwaGFzZSwgV2ViQ29y
ZTo6RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyBvcHRpb25zKQorI2lmIEVOQUJMRShWSURFTykKKyAgICBQYWludEZyYW1lRm9yTWVkaWEoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVj
dCBkZXN0aW5hdGlvbikKICNlbmRpZgotICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQg
c2NhbGVGYWN0b3IpCisKKyAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
R2x5cGhzIGl0ZW0pCisgICAgRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0xpbmVzRm9yVGV4dCBpdGVtKQorICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKKworICAgIENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQorICAgIFRyYW5zZm9y
bVRvQ29sb3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkK
ICAgICBGbHVzaENvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVy
IGlkZW50aWZpZXIpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5LmNwcAppbmRleCA4NTc3Y2JiZGU2ZDM5MDFkMzQ3MDc2MWVkMzBmNzlkOThlODJiOThkLi42
Y2ZiYWJjYTdiY2ZiZWRjNTk1NDgzZThlZWIxZDVhYjEyMDk2NmE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCkBAIC0zMiwzNiArMzIsMjEgQEAKICNp
bmNsdWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9NZWRpYVBsYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHkoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkmIHJlbmRlcmluZ0JhY2tlbmQsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNv
bnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogRGlzcGxheUxp
c3Q6OlJlY29yZGVyKHsgfSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJh
d0dseXBocykKKyAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcihpbml0aWFsQ2xpcCwgaW5pdGlh
bENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklk
ZW50aWZpZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpCiAgICAg
LCBtX2ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKQogICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kKHJl
bmRlcmluZ0JhY2tlbmQpCiB7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkpOwotfQotCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNl
KGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2Zvcm1Ub0Nv
bG9yU3BhY2UoY29sb3JTcGFjZSkpOwotfQotCiBSZW5kZXJpbmdNb2RlIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXIgPyBtX2ltYWdlQnVmZmVyLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkOwpAQCAtNzcsMzEgKzYyLDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc3RvcmUoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2xh
dGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkUm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OlJvdGF0ZShhbmdsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTY2FsZShzY2Fs
ZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldENUTSh0cmFuc2Zvcm0pKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENvbmNhdGVuYXRlQ1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNvbmNhdGVuYXRlQ1RNKHRyYW5zZm9ybSkpOwot
fQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0SW5saW5l
RmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldElubGluZUZpbGxDb2xvcihEaXNwbGF5TGlzdDo6
U2V0SW5saW5lRmlsbENvbG9yIHsgY29sb3IgfSkpOwpAQCAtMTE3LDkyICs3NywyNiBAQCB2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNz
KGZsb2F0IHRoaWNrbmVzcykKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpTZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IGZsYWdzKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OlNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7IHN0YXRlLCBmbGFncyB9KSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lQ2FwKExp
bmVDYXAgbGluZUNhcCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpTZXRMaW5lQ2FwKGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgYXJyYXks
IGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6U2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIHsgYXJyYXks
IGRhc2hPZmZzZXQgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUpvaW4obGluZUpvaW4pKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldE1pdGVy
TGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyU2hhZG93KCkpOwotfQotCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6Q2xpcChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0KHJlY3QpKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
blJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
Q2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KCksIGRlc3RpbmF0aW9uUmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0
aCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKK3ZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIq
IHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBm
aWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+
IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdlKQotICAgICAgICBpZGVudGlmaWVyID0g
c291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOwotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVu
Y2UoUmVmPEZpbHRlcj4geyBmaWx0ZXIgfSkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUgeyBzdGF0
ZSB9KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdHbHlwaHMo
RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgeyBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwg
bG9jYWxBbmNob3IsIG1vZGUgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0
aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CisjaWYgVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZEFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXpl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKIH0KIAotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0
ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RmlsbFBhdHRl
cm4oKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRy
YXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsK
IH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFnZUlk
ZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkKQEAgLTIxNSw0NCArMTA5LDM0IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQotewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIHdpZHRoKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZShwb2lu
dDEsIHBvaW50MikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRy
YXdMaW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBibG9ja0xvY2F0
aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5l
cyB9KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xp
cChyZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1
bGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsKIH0KIAot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RWxsaXBzZShyZWN0KSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChyZWN0KSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0
aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dFRvUGF0aChwYXRo
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zm
c2V0LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwg
Y29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpD
bGVhclJlY3QocmVjdCkpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjcwLDIzICsxNTQs
MjIgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0
V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoR3JhZGllbnQgeyByZWN0LCBncmFkaWVudCB9KSk7CiB9CiAKLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBtb2RlKSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5k
ZWRSZWN0KHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBtb2RlKQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRlZFJlY3Qocm91bmRlZFJlY3QsIGNvbG9y
LCBtb2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKSk7CiB9CiAK
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxFbGxpcHNlKHJlY3QpKTsKIH0K
IAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGRhdGEpCiB7CiAg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbExpbmUoZGF0
YSkpOwpAQCAtMzA2LDcgKzE4OSw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhCiB7CiAgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEJlemllckN1cnZl
KGRhdGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKQEAgLTMxNCwyMyArMTk2LDE3IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxQYXRoKHBhdGgpKTsKIH0KIAot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
IHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigp
LCBkZXN0aW5hdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OlN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlUmVjdChyZWN0
LCB3aWR0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OlN0cm9rZUVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
Ci0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VMaW5l
KGNvbnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OlN0cm9rZUxpbmUoZGF0YSkpOwpAQCAtMzUwLDcgKzIyNiw2IEBAIHZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2
ZShjb25zdCBCZXppZXJDdXJ2ZURhCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6U3Ryb2tlQmV6aWVyQ3VydmUoZGF0YSkpOwogfQotCiAjZW5kaWYgLy8g
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNTgsMzMgKzIz
Myw4NCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlN0cm9rZVBhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlRWxsaXBzZShyZWN0
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1Jl
Y3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyUmVjdChyZWN0KSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmUocG9p
bnQxLCBwb2ludDIpKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0VsbGlw
c2UocmVjdCkpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRo
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBs
eUZpbGxQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3
aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KSk7Cit9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBs
eURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1h
Z2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihzY2FsZUZhY3RvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkKKyAgICAgICAgaWRl
bnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6Rmls
dGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRl
bnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworfQorCit2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1N5c3RlbUltYWdl
KFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpKTsKK30KKwordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFnZUlkZW50
aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0
aW9ucykpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZp
ZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9yTWVkaWEo
aWRlbnRpZmllciwgZGVzdGluYXRpb24pKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwg
Rm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9u
dCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsKK30KKwor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmVzRm9yVGV4dChE
aXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUo
cG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzIH0pKTsKK30K
Kwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOwogfQog
CiBib29sIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2Uo
TmF0aXZlSW1hZ2UmIGltYWdlKQpAQCAtNDM0LDExICszNjAsNiBAQCBib29sIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoRm9udCYgZm9udCkKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZs
dXNoQ29udGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRl
eHQoaWRlbnRpZmllcikpOwotfQotCiBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29s
b3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6
Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAogewogICAg
IGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkgewpAQCAtNDY0LDYgKzM4NSwyMSBA
QCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y3Jl
YXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbgogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNy
ZWF0ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3BhY2UsIHJl
bmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KCkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3Jt
VG9Db2xvclNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JT
cGFjZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpU
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworfQorCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KEdyYXBoaWNzQ29udGV4dEZsdXNoSWRl
bnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkZsdXNoQ29udGV4dChpZGVudGlmaWVyKSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCmluZGV4IDliMzNhMDY3ZmQxNmJjY2YxNDA0
MmMxOTc0ZGQ2OTE5NDIyNjI0NjguLmYyYWQ4ZDBhYTQ1ODU4OWFlZTgxOTA3ZDljOTA4OTZkMzRi
NmY3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaApAQCAt
MzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTsKIAogY2xhc3MgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5IDogcHVi
bGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlciB7CisgICAgZnJpZW5kIGNsYXNzIFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKIHB1YmxpYzoKICAgICBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHkoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRl
Y29uc3RydWN0RHJhd0dseXBocyA9IFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIH5SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHkoKSA9IGRlZmF1bHQ7CkBAIC01MCw2MyArNTEsMzkgQEAgcHVibGljOgogICAgIHZvaWQgZmx1
c2hDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllcikgZmluYWw7
CiAKIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNlbmQoVCYm
IG1lc3NhZ2UpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2Vu
ZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsK
LSAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNzYWdl
KSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwotICAgIH0KLQotICAgIGZyaWVuZCBj
bGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7Ci0KICAgICBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgcmVjb3JkU2F2
ZSgpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkUm90
YXRlKGZsb2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVD
VE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKICAgICB2b2lkIHJl
Y29yZFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90PikgZmluYWw7CiAg
ICAgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90
PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5Jiwg
ZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihXZWJD
b3JlOjpMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmRTZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGZpbmFs
OworCisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmlu
YWw7CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKwor
ICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAg
dm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9pZCByZWNv
cmRDbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
Q2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBmaW5hbDsK
ICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKICAgICB2
b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRS
dWxlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNv
cmU6OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhj
b25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9udFNtb290aGluZ01v
ZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdl
QnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoV2Vi
Q29yZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lk
IHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERy
YXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdM
aW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBXZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGlu
ZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFdlYkNv
cmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3Jl
OjpDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBUb0ltYWdl
QnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBk
ZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RX
aXRoQ29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRN
b2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVu
ZE1vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOwogICAg
IHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZv
aWQgcmVjb3JkRmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBmaW5hbDsKICAgICB2
b2lkIHJlY29yZEZpbGxBcmMoY29uc3QgV2ViQ29yZTo6QXJjRGF0YSYpIGZpbmFsOwpAQCAtMTE0
LDkgKzkxLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29u
c3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJl
Y29yZEZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZEZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJv
a2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKworICAgIHZv
aWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBXZWJDb3JlOjpMaW5lRGF0YSYpIGZp
bmFsOwogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IFdlYkNvcmU6OkFyY0RhdGEmKSBm
aW5hbDsKQEAgLTEyNCwxMyArMTAyLDI4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRTdHJv
a2VCZXppZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNl
bmRpZgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0
dGVybigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwor
CisgICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBw
b2ludDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBXZWJD
b3JlOjpQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNv
bnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJD
b3JlOjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0lt
YWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVyJikgZmluYWw7CisgICAg
dm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShXZWJDb3JlOjpTeXN0ZW1JbWFn
ZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKKyAgICB2b2lk
IHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyNp
ZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgV2Vi
Q29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJD
b3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwogCiAgICAgYm9vbCBy
ZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpIGZpbmFsOwogICAgIGJvb2wg
cmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5hbDsKQEAgLTE0MSw2
ICsxMzQsMTggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBX
ZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJl
bmRlcmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1
ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6UmVuZGVyaW5nTWV0aG9kPikgY29uc3QgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHZvaWQgc2VuZChUJiYgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIGlmIChV
TkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBtX25lZWRzRmx1c2ggPSB0cnVlOworICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQtPnNl
bmRUb1N0cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmll
cik7CisgICAgfQorCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
KSBmaW5hbDsKKwogICAgIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBtX2Rl
c3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcjsKICAgICBXZWFrUHRyPFdlYkNvcmU6OkltYWdlQnVm
ZmVyPiBtX2ltYWdlQnVmZmVyOwogICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5PiBtX3JlbmRlcmluZ0JhY2tlbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggMWQ2NDNiNmI0Mjg4ZDA4ZTAzOGM0
NjI1ZDA1NDlkZTY4YWYyYWE3Ny4uMDc5OTNiMzgwZjFlYTdkMzQ5ZGQ3ZWJmYzE2MGM4MDRkYWQ0
M2UzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcApAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmRy
YXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNv
CiAKICAgICAvLyBEcmF3IHdoaXRlIGZyYW1lcyBhcm91bmQgdGhlIGhvbGVzLgogICAgIC8vIFdl
IGRvdWJsZSB0aGUgdGhpY2tuZXNzIGJlY2F1c2UgaGFsZiBvZiB0aGUgc3Ryb2tlIHdpbGwgYmUg
ZXJhc2VkIHdoZW4gd2UgY2xlYXIgdGhlIGhvbGVzLgotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRT
aGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVy
UmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3co
eyBGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRp
dXMsIHNoYWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihD
b2xvcjo6d2hpdGUpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9y
ZGVyV2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiB3aGl0ZUZyYW1lUGF0aHMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRS
YW5nZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCBmMTZmNzk2ZTA0N2U5OTE5NzJjMGVk
MWY0YWUxMTNjZTE2NTY1YzEwLi40OWUwMGJlMzM3ZWFmZWUxMjkzZWYwNzdhZGY2MTdjZGFlM2Q0
YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3Vu
ZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBA
QCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29yZTo6UGFn
ZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogCiAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBncmFwaGljc0Nv
bnRleHQuc2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dP
ZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXREcm9wU2hhZG93KHsgV2ViQ29yZTo6RmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNo
YWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAgICBncmFw
aGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRDb2xvcik7CiAgICAgZ3JhcGhpY3NDb250
ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JCb3JkZXJXaWR0aCAqIDIpOwogICAgIGZv
ciAoYXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhOGU5NjBkNzhkY2I4ZGE4Y2M0NDhmMjUyNzMz
ZWUzNmIwMzc0ZWUwLi40MzM2NzQ0NjcwNDdhZWUwOTM0NTZkYmY2MjU5MzE5ZjdhZmE3ZWIwIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMjItMDMtMTMgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+
CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUg
bGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcDoKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIyLTAzLTEwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVk
YXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbZ2l0LXdlYmtpdF0gU3VwcG9ydCBtdWx0aXBsZSBt
ZXRhZGF0YSBsb2NhdGlvbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRl
c3RzQ0cuY3BwCmluZGV4IDhlNDFjNWE3M2FlMzY4NGNlZGRmMWY5NGY5ZjE3MTg5NTM1MTRjOWYu
LmViZTY0NDg3MWUyOGY1MTljZDI2MTIwYjhhODI3ODg2YzAxOTAyYmYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2Nn
L0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcApAQCAtNTQsNyArNTQsNyBAQCBU
RVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgQmFzaWMpCiAgICAgR3JhcGhpY3ND
b250ZXh0Q0cgcHJpbWFyeUNvbnRleHQocHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAKICAgICBJ
bk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRh
cnlDb250ZXh0KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgs
IGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0
KGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0
KSk7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwg
c2Vjb25kYXJ5Q29udGV4dCk7CiAKQEAgLTkwLDEwICs5MCwxMCBAQCBURVNUKEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHRUZXN0cywgQmFzaWMpCiBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHRUZXN0cywgVGV4dCkKIHsKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IHByaW1hcnlEaXNwbGF5
TGlzdDsKLSAgICBSZWNvcmRlckltcGwgcHJpbWFyeUNvbnRleHQocHJpbWFyeURpc3BsYXlMaXN0
LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0p
OworICAgIFJlY29yZGVySW1wbCBwcmltYXJ5Q29udGV4dChwcmltYXJ5RGlzcGxheUxpc3QsIEZs
b2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEluTWVt
b3J5RGlzcGxheUxpc3Qgc2Vjb25kYXJ5RGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNl
Y29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAs
IGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNl
Y29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5RGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBjb250
ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtMjAxLDcgKzIw
MSw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCb3JkZXJzKQogICAg
IEdyYXBoaWNzQ29udGV4dENHIHByaW1hcnlDb250ZXh0KHByaW1hcnlDR0NvbnRleHQuZ2V0KCkp
OwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlcklt
cGwgc2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29u
dGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25k
YXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29u
dGV4dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFy
eUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC0yMjgsNyArMjI4LDcgQEAgVEVTVChC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIFRyYW5zZm9ybWVkQ2xpcCkKICAgICBHcmFw
aGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0ID0gcHJpbWFyeUNvbnRleHRDRzsKIAogICAgIElu
TWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFy
eUNvbnRleHRETChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApLCB7
IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIEZs
b2F0UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5
Q29udGV4dCA9IHNlY29uZGFyeUNvbnRleHRETDsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKQEAgLTI4NywxNSAr
Mjg3LDE1IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBBcHBseURldmlj
ZVNjYWxlRmFjdG9yKQogICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQgPSBwcmlt
YXJ5Q29udGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAg
ICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0
UmVjdCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNv
bnRleHRETChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgR3Jh
cGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5Q29udGV4dERMOwogCiAg
ICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFy
eUNvbnRleHQpOwogCiAgICAgY3R4LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoMik7CiAKLSAgICBh
dXRvIHByaW1hcnlDVE0gPSBwcmltYXJ5Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJ
bmNsdWRlRGV2aWNlU2NhbGU6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIGF1
dG8gc2Vjb25kYXJ5Q1RNID0gc2Vjb25kYXJ5Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpJbmNsdWRlRGV2aWNlU2NhbGU6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAg
IGF1dG8gcHJpbWFyeUNUTSA9IHByaW1hcnlDb250ZXh0LmdldENUTSgpOworICAgIGF1dG8gc2Vj
b25kYXJ5Q1RNID0gc2Vjb25kYXJ5Q29udGV4dC5nZXRDVE0oKTsKIAogICAgIEVYUEVDVF9FUShw
cmltYXJ5Q1RNLnhTY2FsZSgpLCBzZWNvbmRhcnlDVE0ueFNjYWxlKCkpOwogICAgIEVYUEVDVF9F
UShwcmltYXJ5Q1RNLnlTY2FsZSgpLCBzZWNvbmRhcnlDVE0ueVNjYWxlKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454613</attachid>
            <date>2022-03-14 13:09:03 -0700</date>
            <delta_ts>2022-03-14 15:28:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220314130902.patch</filename>
            <type>text/plain</type>
            <size>591276</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg2MDhiMzk4NGMxMWY5
ZDJhYzgyNGU4NDY0Nzk4ZDAxNDljMDMyNy4uMWI2NjU1NGE0NmE5ODYzODFhMmRkZDUyMjU5NmMx
OTg2MWNiZTBhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3NyBAQAorMjAyMi0wMy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjphcHBseUxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJv
a2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXlvdXRTdGlwcGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dEhhdGNoaW5nKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1
c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxh
eWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3Rp
bmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlk
VXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBo
c1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRlY29u
c3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRp
c3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEltYWdlOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkaWRBcHBs
eVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGVG
YWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVu
ZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9
PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9w
ZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3RhdGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VH
cmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnREZXRlY3RlZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVyZ2VTdGF0ZUNoYW5n
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJnZVN0YXRlRGlmZnMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmluZUNhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojps
aW5lRGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZUpvaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Om1pdGVyTGltaXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcG9zaXRlTW9kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU9wZXJhdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJsZW5kTW9kZU9wZXJhdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU1vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpkcm9wU2hhZG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNTaGFkb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphbHBoYSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRp
YWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRTbW9vdGhG
b250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3Vs
ZFNtb290aEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNr
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJhd0x1bWlu
YW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1c2VEYXJrQXBw
ZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVz
ZURhcmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBw
bHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmlzSW5UcmFuc3BhcmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2Nh
bGVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBw
b3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6Y29u
dGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXll
clNjb3BlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OmJlZ2luTGF5ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVyU2Nv
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFj
a0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjp+R3JhcGhp
Y3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpoYXNP
bmx5UHJpbWl0aXZlQ2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptZXJnZURpZmZzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjaGFuZ2VzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkaWRBcHBseVN0YXRlQ2hhbmdl
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Z2V0Q1RNIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRDVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmZpbGxCcnVzaCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsR3JhZGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpmaWxsUnVsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbFJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZUJydXNoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlR3Jh
ZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9r
ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9r
ZVRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpzdHJva2VTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OmxpbmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OmxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bGluZUpvaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptaXRlckxpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpjb21wb3NpdGVNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpkcm9wU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnRleHREcmF3
aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpzaG91bGRBbnRpYWxpYXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNob3VsZFNtb290aEZvbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNl
dFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkcmF3THVtaW5hbmNl
TWFzayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0
RHJhd0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
OjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJl
c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpU
cmFuc3BhcmVuY3lMYXllclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxh
eWVyU2NvcGU6OmJlZ2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5
ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVyU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVj
a2VyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9y
PDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZU1vZGU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlTW9kZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZU1vZGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGlu
ZVN0eWxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lRGFzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6aXNWaXNpYmxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmlzQmx1cnJlZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93OjpoYXNPdXRzZXRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05hbWVk
SW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZEltYWdlR2Vu
ZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFw
aGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6Ok51
bGxHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0Ry
YXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OlNoYWRvd0Js
dXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJydXNoOjpzcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
cnVzaDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnBh
dHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJj
ZUJydXNoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmNvbG9yIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6YnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnJ1c2g6OnNldEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpzZXRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjppc1ByaW1pdGl2
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJydXNoOjpCcnVzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJydXNoOjpCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJy
dXNoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmRlY29k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6VGV4dEJveEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6
b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpT
dGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6Z2V0Q1RNKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUpv
aW4pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnNldE1pdGVyTGltaXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRlQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Z2V0Q1RNIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2gpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRN
aXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpDR0NvbnRleHRTdGF0ZVNh
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6On5DR0NvbnRleHRT
dGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJuYWxQbGF0Zm9ybUNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBP
dXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldENHTGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xp
bmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTWl0ZXJMaW1pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRDR0xpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHU2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZUVsbGlwc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNhblVzZVNoYWRvd0JsdXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdElt
cGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBC
b3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6fkNHQ29udGV4dFN0
YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZl
cjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVy
OjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2
ZXI6OmRpZFNhdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJ
bWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UERG
RG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNv
bnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3
R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpiZWdpbkxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUludGVybmFsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OnNldEludGVybmFsRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkQmVnaW5MYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVuZExheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29y
ZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6cmVjb3JkRHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6ZHJhd05vbk9UU1ZHUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6ZHJhd09UU1ZHUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRl
cjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRy
YXdOYXRpdmVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6Y3Jl
YXRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVy
bmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnVwZGF0ZUZpbGxDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5
cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OnNoYWRvd0lzQ2xlYXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3
R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzaG93R2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzYWZlQ29weSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNpemVPZkl0ZW1J
bkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdpbmdJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpTZXRTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRp
YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRDVE06OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDb25jYXRlbmF0ZUNUTTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6YXBwbHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0
ZXJMaW1pdDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyU2hhZG93OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJv
dW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJl
Y3Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91
bmRlZFJlY3Q6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OnggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YW5nbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmFtb3VudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6dHJhbnNmb3JtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6
Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNvbmNhdGVuYXRlQ1RNOjp0cmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZUNoYW5nZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRM
aW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
Q2FwOjpsaW5lQ2FwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lRGFzaDo6U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoQXJyYXkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFz
aDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRMaW5lRGFzaDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpsaW5lSm9pbiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJM
aW1pdDo6bWl0ZXJMaW1pdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6cmVj
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENv
bXBvc2l0ZWRSZWN0Ojpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb21wb3NpdGVPcGVyYXRvciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRS
ZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2Fs
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YmxlbmRNb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OlJlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojpt
X2RyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpy
ZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlT
dGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjph
cHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXApOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9y
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp+UmVjb3JkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRl
Q2hhbmdlSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3RhdGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkaWRVcGRhdGVTdGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNl
dExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y29uY2F0Q1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Z2V0Q1RN
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmN0bSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0
ZTo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpz
ZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OkNvbnRleHRT
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OkNvbnRleHRTdGF0ZTo6Y2xvbmVGb3JTYXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjbG9uZUZvclRyYW5z
cGFyZW5jeUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6c3RhdGVTdGFjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OlJlY29yZGVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRT
ZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENs
aXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
Q2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUm91bmRlZFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEJlemllckN1cnZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tl
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRTdHJva2VCZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNS
aW5nUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVj
b3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlw
aHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
RHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjp+UmVjb3Jk
ZXJJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZENvbmNhdGVuYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVDYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZURh
c2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkU2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclNoYWRv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBs
OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6UmVjb3JkZXJJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0
ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6YXBwbHlTZXRT
dGF0ZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Ry
YXdHbHlwaHNSZWNvcmRlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2U6OmRyYXdCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENo
ZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVh
bGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5RWxs
aXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
OnVwZGF0ZUV2ZW50UmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGRJbm5l
clNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1Q
cmV2aWV3QmFkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hl
Y2tib3hSYWRpb0lubmVyU2hhZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRl
cik6CisgICAgICAgICogcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29y
YXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VT
dHJva2VTdHlsZVRvRmlsbCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tl
U3R5bGVUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJl
VG9SZW5kZXJTVkdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZHJhdyk6CisKIDIwMjItMDMtMTAgIE1p
Y2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2F0YWx5c3QgSmF2
YVNjcmlwdENvcmUsIFdlYkNvcmUsIFdlYktpdExlZ2FjeSwgYW5kIFdlYktpdCBzaG91bGRuJ3Qg
YmUgY29waWVkIHRvIHRoZSBTZWNvbmRhcnkgUGF0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3YTJkNWJhMzEyYzBi
YTA0YjRhODZkMDBlNTQ4NDczMDlhZTY1NjM5Li4wY2RlNTIyZGI4YTRlZjQ3OTNlYzBlNzkyNGQ2
ZjZmY2UzZGU3NDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDIyLTAzLTE0ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
R3JhcGhpY3NDb250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0
Zm9ybSBjb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzc3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldFN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJvdW5kZWRS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6dHJhbnNs
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpjb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lRGFzaCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNl
dExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBvc2l0ZWRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXIuaDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4pOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZENsaXApOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0VG9QYXRo
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRDbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUm91bmRlZFJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEJlemllckN1cnZlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRTdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd1BhdGgpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVj
dHMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd1N5c3RlbUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3R2x5cGhzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6Om1fcmVuZGVyaW5nQmFja2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkVHJhbnNsYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSb3Rh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENvbmNhdGVuYXRl
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lRGFzaCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyU2hhZG93
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpzZW5kKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KToKKwog
MjAyMi0wMy0xMCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAg
ICBDYXRhbHlzdCBKYXZhU2NyaXB0Q29yZSwgV2ViQ29yZSwgV2ViS2l0TGVnYWN5LCBhbmQgV2Vi
S2l0IHNob3VsZG4ndCBiZSBjb3BpZWQgdG8gdGhlIFNlY29uZGFyeSBQYXRoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CmluZGV4IDA3MmQ4OTlhMDdmYTU5OGEzOTdkZDNhYmMzM2UwZmY3ODQ4ZTc2Y2YuLmM1NjBkN2M0
ZGZhODQ5ZDM4MzQ5ZDk5OWVlZTZlNWQxNDBlZDQwNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ1
LDYgKzIwNDUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdl
RXh0cmFjdG9yLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5jcHAKQEAgLTIwODQsNiArMjA4NSw3IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1Jl
Z2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDZiOWRjMTk4NzkzMjc0ZjcwZGJkZmFhN2EwNzA0MzdhZGRiZTY5MTUuLmQ2NzkzMTRh
ODdjNWZmNjIwZDc1MmMzOGRkZjVmYzM3NzVkNjE2MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIzMzEsMTAgKzIzMzEsMTIg
QEAKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJCMzg4
RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFG
Q0IxNzAyN0JBQjNGRTAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRkNCMTZEMjdCQUIzREYwMEUwNjMx
QyAvKiBGcmFtZVJhdGVBbGlnbmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzIwMTc4M0IyN0Q1N0Y5RjAwOUJFQjFCIC8qIENHQ29udGV4dFN0
YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNF
QzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVy
dHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJB
OTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyogSW1hZ2VCaXRt
YXBCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBC
MjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyog
SW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250
ZXh0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNCMjc1
QzVGQTYwMEE5MTU2QSAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2
OTYzRDI3NUM2MTQ0MDBBOTE1NkEgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjE0QjlCNzI3NDQ1OEZBMDAzQkU2
REYgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0Njk2M0UyNzVDNjE2NzAwQTkxNTZBIC8qIEZpbHRlcklt
YWdlVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM0Miw2ICsyMzQ0
LDkgQEAKIAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0Yy
NUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2
aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVD
aGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyNTYwNzhFMjc5RDM0QjYwMDdEMkREMyAvKiBGRUltYWdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkY3RTc0RjI3OUNFREU4MDBE
ODJEMkQgLyogRkVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyNTgxODU0MjdDREE2OUEwMEMzRDk3RSAvKiBTb3VyY2VCcnVzaC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEYyN0NC
NDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5N0UgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEQy
N0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZDREUyMDI3NTk3MzUw
MDBBNDQ1QjIgLyogRmlsdGVyRWZmZWN0R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOTY2MUEyMjc1OTYwQTUwMEU3REY5QiAvKiBGaWx0
ZXJFZmZlY3RHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1
M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBO
YXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMzE3LDYgKzExMzIyLDgg
QEAKIAkJNzFGQ0IxNkQyN0JBQjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVSYXRlQWxpZ25lci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZDQjE2RjI3QkFCM0UwMDBFMDYzMUMgLyogRnJhbWVS
YXRlQWxpZ25lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFt
ZVJhdGVBbGlnbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgy
MkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0
ZVNhdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENHQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJ
dGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Qm94SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzIxMUI1RDYyNzY1MzY4MjAwNzZGRUY4IC8qIEZpbHRlclJlc3Vs
dHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVBy
b3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZH
VmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTMyNiw2ICsxMTMzMyw4IEBACiAJCTcyMkE4MTVD
MjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QW5pbWF0aW9uRnJhbWVSYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNDM1
RUY0MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0
ZXJJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjQzNUVGNTI3M0QwNzY3
MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1h
Z2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENTI3Qzg1RDAxMDBE
NUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3Jh
cGhpY3NDb250ZXh0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjQ2
MERENjI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJs
ZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWlu
TWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1
RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxl
bmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzODgsNiArMTEz
OTcsMTAgQEAKIAkJNzJBMTNBRDUyNzRERTU0RTAwRTJBODhFIC8qIFNvdXJjZUFscGhhU29mdHdh
cmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQTEzQUQ2Mjc0REU1NzgwMEUyQTg4RSAv
KiBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNv
dXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MkExM0FENzI3NERFNTc4MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBw
bGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwRDI3Q0EzMjhG
MDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQjM1MTBFMjdDQjQyRkQwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb3VyY2VCcnVzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
b3VyY2VCcnVzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3NDI3NEUy
MzMzMDAyOTNDMkYgLyogRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
RUJsZW5kU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
QjRFRjc1Mjc0RTIzMzQwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmlsdGVySW1hZ2VW
ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2VWZWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTI4MTY1LDE4ICsyODE3OCwxOCBAQAogCQkJCUFBMkE1QUJEMTZB
NDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXMuY3BwICovLAogCQkJCUFBMkE1QUJFMTZB
NDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXMuaCAqLywKIAkJCQlBQTJBNUFCRjE2QTQ4
NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmlkbCAqLywKLQkJCQlBQTJBNUFDMDE2QTQ4
NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzRXZlbnQuY3BwICovLAotCQkJCUFBMkE1QUMx
MTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNFdmVudC5oICovLAotCQkJCUFBMkE1
QUMyMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNFdmVudC5pZGwgKi8sCi0JCQkJ
MjlGODNFQzkyN0Q1OTRFNTAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0V2ZW50SW5pdC5oICov
LAotCQkJCTI5RjgzRUNCMjdENTk1MjYwMEUxRjBGRCAvKiBTcGVlY2hTeW50aGVzaXNFdmVudElu
aXQuaWRsICovLAogCQkJCTI5RjgzRUM2MjdEMzE5MjYwMEUxRjBGRCAvKiBTcGVlY2hTeW50aGVz
aXNFcnJvckNvZGUuaCAqLywKIAkJCQkyOUY4M0VDRTI3RDVGQTYzMDBFMUYwRkQgLyogU3BlZWNo
U3ludGhlc2lzRXJyb3JDb2RlLmlkbCAqLywKIAkJCQkyOUY4M0VDNDI3RDMxNUEyMDBFMUYwRkQg
LyogU3BlZWNoU3ludGhlc2lzRXJyb3JFdmVudC5jcHAgKi8sCiAJCQkJMjlGODNFQzMyN0QzMTVB
MjAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnQuaCAqLywKIAkJCQkyOUY4M0VD
NTI3RDMxNUI4MDBFMUYwRkQgLyogU3BlZWNoU3ludGhlc2lzRXJyb3JFdmVudC5pZGwgKi8sCi0J
CQkJMjlGODNFQ0YyN0Q2QzcyQTAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnRJ
bml0LmlkbCAqLywKIAkJCQkyOUY4M0VEMDI3RDZDODg1MDBFMUYwRkQgLyogU3BlZWNoU3ludGhl
c2lzRXJyb3JFdmVudEluaXQuaCAqLywKKwkJCQkyOUY4M0VDRjI3RDZDNzJBMDBFMUYwRkQgLyog
U3BlZWNoU3ludGhlc2lzRXJyb3JFdmVudEluaXQuaWRsICovLAorCQkJCUFBMkE1QUMwMTZBNDg1
RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNFdmVudC5jcHAgKi8sCisJCQkJQUEyQTVBQzEx
NkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc0V2ZW50LmggKi8sCisJCQkJQUEyQTVB
QzIxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc0V2ZW50LmlkbCAqLywKKwkJCQky
OUY4M0VDOTI3RDU5NEU1MDBFMUYwRkQgLyogU3BlZWNoU3ludGhlc2lzRXZlbnRJbml0LmggKi8s
CisJCQkJMjlGODNFQ0IyN0Q1OTUyNjAwRTFGMEZEIC8qIFNwZWVjaFN5bnRoZXNpc0V2ZW50SW5p
dC5pZGwgKi8sCiAJCQkJQUEyQTVBQzQxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZS5jcHAgKi8sCiAJCQkJQUEyQTVBQzUxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZS5oICovLAogCQkJCUFBMkE1QUMzMTZBNDg1RDUwMDk3NUEyNSAv
KiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaWRsICovLApAQCAtMjg4MDgsNiArMjg4MjEsNyBA
QAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBD
R0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8q
IENvbG9yQ0cuY3BwICovLAogCQkJCUJDQUZFREIzMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNw
YWNlQ0cuY3BwICovLAogCQkJCUJDQUZFREIyMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNl
Q0cuaCAqLywKQEAgLTI5MDQxLDYgKzI5MDU1LDkgQEAKIAkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAw
MjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8sCiAJCQkJN0JC
MzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3Iu
aCAqLywKIAkJCQk3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xT
dGF0ZS5oICovLAorCQkJCTcyNDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRl
eHRTdGF0ZS5jcHAgKi8sCisJCQkJNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNz
Q29udGV4dFN0YXRlLmggKi8sCisJCQkJNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5IC8q
IEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3Jh
cGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMjkxNDEsNiArMjkxNTgsNyBAQAogCQkJCUJDQTU1
OTEyMjYzREJENzkwMDdGMTlCMyAvKiBQaXhlbEZvcm1hdC5oICovLAogCQkJCUNERDA4QUJGMjc3
RTU0RjAwMEVBMzc1NSAvKiBQbGF0Zm9ybUF1ZGlvVHJhY2tDb25maWd1cmF0aW9uLmggKi8sCiAJ
CQkJQkMzRTYyNDIyNjU5NzkxNzAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oICovLAor
CQkJCTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5o
ICovLAogCQkJCTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8s
CiAJCQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAq
LywKIAkJCQk1NTA2NDBBRDI0MDc1NkRBMDBBQUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLywKQEAgLTI5MTY0LDYgKzI5MTgyLDggQEAKIAkJCQkwRjNERDQ0RDEyRjVFQTFC
MDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5
MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKIAkJCQkxQzREQjAyNDI3MzM5RTVFMDA3QjBBRDEgLyog
U2hvdWxkTG9jYWxpemVBeGlzTmFtZXMuaCAqLywKKwkJCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdB
RTAgLyogU291cmNlQnJ1c2guY3BwICovLAorCQkJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAv
KiBTb3VyY2VCcnVzaC5oICovLAogCQkJCTFERDEyN0FDMjU2RTNBODcwMEIyMjdENyAvKiBTb3Vy
Y2VCdWZmZXJQcml2YXRlLmNwcCAqLywKIAkJCQlDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyog
U291cmNlQnVmZmVyUHJpdmF0ZS5oICovLAogCQkJCUNEQzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAv
KiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi8sCkBAIC0yOTE3NSw2ICsyOTE5NSw3IEBA
CiAJCQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvci5oICovLAogCQkJCTk1RTlGNDQ0MjdDOUEzOUIwMDk0NTMzNyAvKiBTeXN0ZW1JbWFn
ZS5oICovLAogCQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCisJ
CQkJNzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovLAogCQkJ
CTM3NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLywKIAkJCQlBODI0QjQ2
NDBFMkVGMkVBMDA4MUE3QjcgLyogVGV4dFJ1bi5oICovLAogCQkJCUNEMUU3MzQ2MTY3QkM3OEUw
MDlBODg1RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAgKi8sCkBAIC0zMzQ0Nyw4ICsz
MzQ2OCw2IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQk2NTY1ODBGNDA5RDEyQjIwMDAw
RTYxRDcgLyogQ1NTUHJvcGVydHlOYW1lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjU2NTgxNTEw
OUQxMzA0MzAwMEU2MUQ3IC8qIENTU1ZhbHVlS2V5d29yZHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdDRDBFMkJGMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDZCOTUxOTUyMDdENjMzNDAwQTdEMkREIC8qIEFic3RyYWN0RE9NV2lu
ZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMzODczLDYgKzMzODkyLDcgQEAKIAkJCQlDREUzQUUx
MjI0QjQ5MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
RkE5MDRDQTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyogQ2VydGlmaWNhdGVTdW1tYXJ5Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MjAxNzgzQjI3RDU3RjlGMDA5QkVCMUIgLyogQ0dDb250ZXh0
U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2NTAwRjg4N0Mx
IC8qIENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNjlERDE1MDVG
MDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU3ODVEOTE1MjRCNEQxQ0EwMDE0REIyMSAvKiBDaGFubmVsQ291bnRNb2RlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM0MTk4LDYgKzM0MjE4LDcgQEAKIAkJCQlBODBFNkNGRjBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTUHJvcGVydHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRjA1RjgwMjUxMjQ0MkUw
MDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEz
MTcxMzQxRkJFNzhEQjAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTY1NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5h
bWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NT
UHJvcGVydHlQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk0OUM3NzA1MUQ2RTM5RUEwMEMw
REU0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk0
NkQzNzQ2MUQ2RDAxRDUwMDc3MDg0RiAvKiBDU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuaCBp
biBIZWFkZXJzICovLApAQCAtMzQyNDAsNiArMzQyNjEsNyBAQAogCQkJCTRCQUZEMEQ5MjE5MjFF
QTAwMEMwQUI2NCAvKiBDU1NVbnBhcnNlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBF
NkNFRTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
QkJDMjQ3MjM4MzU1MjYwMDZFQzM5RiAvKiBDU1NWYWx1ZUtleS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNjU2NTgxNTEwOUQxMzA0MzAwMEU2MUQ3IC8qIENTU1ZhbHVlS2V5d29yZHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MEU2Q0U5MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0OUJEOUZBMTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBv
b2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTk0NDRDQkU4MUQ4ODYxQzIwMDczQTA3NCAvKiBDU1NW
YXJpYWJsZURhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ3OTcsNiArMzQ4MTksOCBAQAogCQkJ
CTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8qIEdyYXBoaWNzQ29u
dGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBG
MCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzI0NjBERDcyN0M4NkRBRDAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5N0UgLyogR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFE
Njg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0Qz
MTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgw
QjBFMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTM0OTE0LDYgKzM0OTM4LDcgQEAKIAkJCQlBOENGRjdBNzBBMTU2OTc4MDAwQTQyMzQg
LyogSFRNTE1vZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0QjAwMTg5MjZFN0YyMUYw
MDZFQUFCRSAvKiBIVE1MTmFtZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOERGM0ZENDA5
N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTE5hbWVDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBOEQwNkIzOTBBMjY1RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODcxRDQ1QTBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTE9iamVjdEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4RUE3OUYxMEExOTE2REYwMEE4RUY1RiAvKiBIVE1MT0xpc3RFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODEzNjlERTA5NzM3NEY2MDBENzQ0NjMgLyogSFRN
TE9wdEdyb3VwRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTQ1OSw2ICszNTQ4NCw3IEBA
CiAJCQkJQkM2NDY0OTgxMUQ4MjM0OTAwNjQ1NUIwIC8qIEpTRE9NU3RyaW5nTWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Njk0NTYzRDEyMTREOTdDMDAwN0NCQUUgLyogSlNET01Ub2tlbkxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJFMzdFMDA2MTJEQkM1QTQwMEE2QjIzMyAvKiBKU0RPTVVS
TC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQwM0JBMEYwOUVCMThGOTAwNzk3QzdGIC8qIEpTRE9N
V2luZG93LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzY5MzI3NDBEN0UyOTM5MDBBRTQ0RDEgLyog
SlNET01XaW5kb3dCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTJGQkJCQzBERTI3Q0I2MDAw
MUQzODYgLyogSlNET01XaW5kb3dDdXN0b20uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2MENCRjM2
MUQ0QkNEMEUwMDkyRTg4RSAvKiBKU0RPTVdpbmRvd1Byb3BlcnRpZXMuaCBpbiBIZWFkZXJzICov
LApAQCAtMzU2ODMsNiArMzU3MDksNyBAQAogCQkJCUE5RDI0N0Y4MEQ3NTdFMzQwMEZERjk1OSAv
KiBKU05hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzdENTEwMjUxRUQ3NEI1ODAwREE0
Qzg3IC8qIEpTTmF2aWdhdG9yQ3JlZGVudGlhbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjg4
NkMwMUYzMjkyMzEwMEMxOTNFRiAvKiBKU05hdmlnYXRvclNlcnZpY2VXb3JrZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTE0REMwRDM4MDlGRUQwNzMwMDdCMDIzNSAvKiBKU05vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDOTQzOUMzMTE2Q0Y0OTQwMDQ4Qzc1MCAvKiBKU05vZGVDdXN0b20uaCBp
biBIZWFkZXJzICovLAogCQkJCTE0MTE1QjczMDlGODRDRDYwMENBNEZDMSAvKiBKU05vZGVGaWx0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNzUwRDhFMEE5MEU1MjEwMDBGRjIxNSAvKiBKU05v
ZGVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTg0NywxMiArMzU4NzQsNiBAQAogCQkJ
CUJDRTAxMzlCMEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFENzI2RkVFMTZEQTExQkMwMDNBNEU2RCAvKiBKU1N0eWxlU2hlZXRDdXN0b20uaCBp
biBIZWFkZXJzICovLAogCQkJCUE4NEVCRDgzMENCOEM5NzcwMDA3OTYwOSAvKiBKU1N0eWxlU2hl
ZXRMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEQwNkIzOTBBMjY1RENEMDA1RTcyMDMgLyog
SFRNTE5hbWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNDAzQkEwRjA5RUIxOEY5MDA3OTdDN0Yg
LyogSlNET01XaW5kb3cuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0REMwRDM4MDlGRUQwNzMwMDdC
MDIzNSAvKiBKU05vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTA4QzdBMkM3MTBEQzc0NjIwMDJE
MzY4QiAvKiBTVkdOYW1lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUExNDE0QjYxM0EwRjA1MDAw
MTk5OTZDIC8qIFdlYktpdEZvbnRGYW1pbHlOYW1lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0NE
NThERkIxRjk1NjVBNTAwMTEyNzkxIC8qIFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NzFGMjE4OTFEQTU3QzU0MDA1QzlFRkQgLyogSlNTdWJ0bGVDcnlwdG8uaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMDExMTA4MEFCNzc0MDUwMERCMEU2OCAvKiBKU1NWR0FFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERl
ZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzY3MDYsNiArMzY3MjcsNyBAQAogCQkJCUJD
QUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0
TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyog
UGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NTI3Q0RBODBFMDBD
M0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcy
NkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRDc3MDVDNzI1NTI3NkNEMDAxRDBDOTQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQUYyNDA3NTgyRDAwQUFFMDQ1IC8qIFBsYXRmb3JtSW1h
Z2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTM3MzI5LDYgKzM3MzUxLDcgQEAK
IAkJCQk0NkVGMTQyQTFGOTdCN0Q4MDBDMkE1MjQgLyogU2VydmljZVdvcmtlcldpbmRvd0NsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTAwOTlFNjQ5MjAwNTZFNTgxIC8qIFNldE5v
ZGVBdHRyaWJ1dGVDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCOERCREI0QzEzMEIwRjhB
MDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NE
NThERkIxRjk1NjVBNTAwMTEyNzkxIC8qIFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
Q0M5NzIyRTFGOTNFMzM2MDAwNEQ0Q0YgLyogU2V0dGluZ3NCYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MUJCQTg2NjI1N0UzNzNCMDBBQzdGNkQgLyogU0ZyYW1lVXRpbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGM0RENDUwMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM3Mzg1LDYgKzM3NDA4LDcgQEAKIAkJCQk1MTBENEEzODEwMzE2NUVFMDA0
OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1
c2guaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3Vy
Y2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTY1MTdBOUQwMUIwMDI3NEU0MiAv
KiBTb3VyY2VCdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYxMzUwOTI0QzlGQ0Ez
MDA0MzJFMUUgLyogU291cmNlQnVmZmVyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTM3NjU2
LDYgKzM3NjgwLDcgQEAKIAkJCQlCMjIyN0E0QjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTWV0YWRh
dGFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExRjJCMTBDRUYwQUJGMDA0NDJGNkEg
LyogU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBNEUw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR01QYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MDhDN0EyQzcxMERDNzQ2MjAwMkQzNjhCIC8qIFNWR05hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3Q0U1OEQ1MDFERDY5QTFFMDAxMjg1NTIgLyogU1ZHTnVtYmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyN0E1MTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTnVtYmVyTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjIyMjdBNTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhcnNlclV0aWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODEwMCw2ICszODEyNSw3IEBACiAJCQkJQTU4NEZFMzAx
ODY0Q0I4NDAwODQzQjEwIC8qIFdlYkluamVjdGVkU2NyaXB0TWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjQ4MjIzMTExRTM4NjlCODAwNjZGQzc5IC8qIFdlYkl0ZW1Qcm92aWRlclBhc3Rl
Ym9hcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVERkVCQUI3MTg1OTJCNkQwMEM3NUJFQiAvKiBX
ZWJLaXRBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTFBMTQxNEI2MTNBMEYwNTAw
MDE5OTk2QyAvKiBXZWJLaXRGb250RmFtaWx5TmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
MDYyMTQ1MURBNjM5QkEwMEE3RkIyNiAvKiBXZWJLaXRNZWRpYUtleU1lc3NhZ2VFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkQwNjIxNTExREE2M0E5RjAwQTdGQjI2IC8qIFdlYktpdE1lZGlh
S2V5TmVlZGVkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMDYyMTRFMURBNjNBOEUwMEE3
RkIyNiAvKiBXZWJLaXRNZWRpYUtleXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5j
cHAKaW5kZXggODU2YTNkZTUwNGRlYzBiYmZhOTBhYzE3ZGUzN2Y1MTVlMTRkOTIwNC4uOWQ5MzVh
NmZmMzIzMGYzZjQ2YTJlZjVkN2VhMTAwMTBhZTllMTBjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3Bw
CkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZyb21Q
YXRoKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdAogICAgICAgICAgICAg
RGFzaEFycmF5IGxpbmVEYXNoOwogICAgICAgICAgICAgbGluZURhc2guYXBwZW5kKGRhc2hMZW5n
dGgpOwogICAgICAgICAgICAgbGluZURhc2guYXBwZW5kKGdhcExlbmd0aCk7Ci0gICAgICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRMaW5lRGFzaChsaW5lRGFzaCwgZGFzaExlbmd0
aCk7CisgICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRMaW5lRGFzaCh7IFdU
Rk1vdmUobGluZURhc2gpLCBkYXNoTGVuZ3RoIH0pOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICAvLyBGSVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBwYXRoIGNhdXNlcyBpc3N1ZXMgd2l0
aCB0aWdodCBjb3JuZXJzOgpAQCAtMTI5NCw3ICsxMjk0LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9u
UGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQs
IFNoYWQKICAgICAgICAgYXV0byBzaGFkb3dSZWN0T3JpZ2luID0gZmlsbFJlY3QucmVjdCgpLmxv
Y2F0aW9uKCkgKyBzaGFkb3dPZmZzZXQ7CiAgICAgICAgIGF1dG8gYWRqdXN0ZWRTaGFkb3dPZmZz
ZXQgPSBzaGFkb3dSZWN0T3JpZ2luIC0gYWRqdXN0ZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24o
KTsKIAotICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coYWRqdXN0ZWRT
aGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93
LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dS
YWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwg
c2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIAogICAgICAgICBp
ZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1
ZSwgaXQgaXMgdW5uZWNlc3NhcnkgdG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNh
dmVzIHRpbWUKQEAgLTE0MDUsNyArMTQwNSw3IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6
OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAg
ICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnRyYW5zbGF0ZShleHRyYU9mZnNldCk7CiAg
ICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICBwYWludGluZ0Nv
bnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUo
KSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFk
aXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBh
aW50aW5nQ29udGV4dC5jb250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHNoYWRv
d1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0Qm94U2hhZG93
KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0
IH0pOwogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShzaGFkb3dDYXN0aW5nUmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAg
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCmluZGV4IGY0Yjk4
YmE2MmUxMTlhMDc3MTMxMmQzYjg4YzQ5MTkzNjgzNmVlMzcuLmVlNTA0ZjA4YzQ5ZmM4ZDViNWFl
ZDcwMmJlMjE3ZjFiMDZmZDRlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludElt
YWdlLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIEltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludElt
YWdlOjpkb0N1c3RvbVBhaW50KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvCiBJbWFn
ZURyYXdSZXN1bHQgQ3VzdG9tUGFpbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihkZXN0Q29udGV4dCk7Ci0gICAgZGVzdENvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0
aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgZGVzdENvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9w
dGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBk
ZXN0Q29udGV4dC5jbGlwKGRlc3RSZWN0KTsKICAgICBkZXN0Q29udGV4dC50cmFuc2xhdGUoZGVz
dFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNp
emUoKSkKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIEN1c3RvbVBhaW50SW1hZ2U6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdAogICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwogCiAgICAgLy8gRmFjdG9yIGluIHRo
ZSBkZXN0aW5hdGlvbiBjb250ZXh0J3Mgc2NhbGUgdG8gZ2VuZXJhdGUgYXQgdGhlIGJlc3QgcmVz
b2x1dGlvbgotICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0
LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwor
ICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENUTSgp
OwogICAgIGRvdWJsZSB4U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RNLnhTY2FsZSgpKTsKICAg
ICBkb3VibGUgeVNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS55U2NhbGUoKSk7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIGFkanVzdGVkUGF0dGVybkNUTSA9IHBhdHRlcm5UcmFuc2Zvcm07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwCmluZGV4IDBlNzgwNjNlM2E0MWNiYzY5MGYwZDBjY2I3ODgxMTdkZTY5
MzhhMDIuLmRiYzk1N2M1M2QwNGEzOTZlYWM2NGQ2N2ZlNmEyYjE3ZTQ0OGM2NjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwCkBAIC02OTcsNyArNjk3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjphcHBseUxpbmVEYXNoKCkgY29uc3QKICAgICBEYXNoQXJyYXkgY29udmVy
dGVkTGluZURhc2goc3RhdGUoKS5saW5lRGFzaC5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc3RhdGUoKS5saW5lRGFzaC5zaXplKCk7ICsraSkKICAgICAgICAgY29udmVydGVk
TGluZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50PihzdGF0ZSgpLmxpbmVE
YXNoW2ldKTsKLSAgICBjLT5zZXRMaW5lRGFzaChjb252ZXJ0ZWRMaW5lRGFzaCwgc3RhdGUoKS5s
aW5lRGFzaE9mZnNldCk7CisgICAgYy0+c2V0TGluZURhc2goeyBXVEZNb3ZlKGNvbnZlcnRlZExp
bmVEYXNoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRlKCkubGluZURhc2hPZmZzZXQpIH0pOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbEFscGhhKGRv
dWJsZSBhbHBoYSkKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmIG9wZQog
ICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQog
ICAgICAgICByZXR1cm47Ci0gICAgYy0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1v
ZGUpOworICAgIGMtPnNldENvbXBvc2l0ZU1vZGUoeyBvcCwgYmxlbmRNb2RlIH0pOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNjYWxlKGRvdWJsZSBzeCwgZG91Ymxl
IHN5KQpAQCAtMTE4Niw3ICsxMTg2LDcgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjppc1BvaW50SW5TdHJva2VJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBkb3UKICAgICAg
ICAgRGFzaEFycmF5IGNvbnZlcnRlZExpbmVEYXNoKGxpbmVEYXNoLnNpemUoKSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgICAg
ICBjb252ZXJ0ZWRMaW5lRGFzaFtpXSA9IHN0YXRpY19jYXN0PERhc2hBcnJheUVsZW1lbnQ+KGxp
bmVEYXNoW2ldKTsKLSAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChjb252ZXJ0ZWRMaW5lRGFz
aCwgc3RhdGUubGluZURhc2hPZmZzZXQpOworICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
V1RGTW92ZShjb252ZXJ0ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZS5saW5l
RGFzaE9mZnNldCkgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTEyMDUsNyArMTIwNSw3IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KGRvdWJsZSB4LCBkb3VibGUg
eSwgZG91YmxlIHdpZHRoLCBkCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAg
ICAgY29udGV4dC0+c2F2ZSgpOwogICAgICAgICBzYXZlZCA9IHRydWU7Ci0gICAgICAgIGNvbnRl
eHQtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgIGNvbnRleHQtPnNldERyb3BTaGFkb3co
eyBGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01v
ZGU6OkxlZ2FjeSB9KTsKICAgICB9CiAgICAgaWYgKHN0YXRlKCkuZ2xvYmFsQWxwaGEgIT0gMSkg
ewogICAgICAgICBpZiAoIXNhdmVkKSB7CkBAIC0xMzYzLDkgKzEzNjMsOSBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93KCkKICAgICBpZiAoc2hvdWxkRHJh
d1NoYWRvd3MoKSkgewogICAgICAgICBmbG9hdCB3aWR0aCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0
LndpZHRoKCk7CiAgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0Lmhl
aWdodCgpOwotICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwg
c3RhdGUoKS5zaGFkb3dCbHVyLCBzdGF0ZSgpLnNoYWRvd0NvbG9yLCBTaGFkb3dSYWRpdXNNb2Rl
OjpMZWdhY3kpOworICAgICAgICBjLT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHdpZHRoLCAt
aGVpZ2h0KSwgc3RhdGUoKS5zaGFkb3dCbHVyLCBzdGF0ZSgpLnNoYWRvd0NvbG9yLCBTaGFkb3dS
YWRpdXNNb2RlOjpMZWdhY3kgfSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGMtPnNldFNoYWRvdyhG
bG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSk7CisgICAgICAgIGMtPnNldERyb3BTaGFkb3coeyBGbG9hdFNpemUoKSwgMCwgQ29s
b3I6OnRyYW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSB9KTsKIH0KIAog
Ym9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzaG91bGREcmF3U2hhZG93cygpIGNv
bnN0CkBAIC0yNDMyLDE5ICsyNDMyLDE2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgZG91CiAKICAg
ICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQoMCwgMiAqIG1hc2tSZWN0LmhlaWdodCgpKTsKIAot
ICAgICAgICAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIGZsb2F0IHNo
YWRvd1JhZGl1czsKLSAgICAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgICAgICAgICAg
Yy0+Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0K
ICAgICAgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KG1hc2tSZWN0KTsKLSAgICAgICAgICAg
IHNoYWRvd1JlY3QuaW5mbGF0ZShzaGFkb3dSYWRpdXMgKiAxLjQpOwotICAgICAgICAgICAgc2hh
ZG93UmVjdC5tb3ZlKHNoYWRvd09mZnNldCAqIC0xKTsKKyAgICAgICAgICAgIGF1dG8gZHJvcFNo
YWRvdyA9IGMtPmRyb3BTaGFkb3coKTsKKworICAgICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRl
KGRyb3BTaGFkb3cuYmx1clJhZGl1cyAqIDEuNCk7CisgICAgICAgICAgICBzaGFkb3dSZWN0Lm1v
dmUoZHJvcFNoYWRvdy5vZmZzZXQgKiAtMSk7CiAgICAgICAgICAgICBjLT5jbGlwKHNoYWRvd1Jl
Y3QpOwogCi0gICAgICAgICAgICBzaGFkb3dPZmZzZXQgKz0gb2Zmc2V0OworICAgICAgICAgICAg
ZHJvcFNoYWRvdy5vZmZzZXQgKz0gb2Zmc2V0OwogCi0gICAgICAgICAgICBjLT5zZXRTaGFkb3co
c2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBTaGFkb3dSYWRpdXNNb2Rl
OjpMZWdhY3kpOworICAgICAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93KTsKIAog
ICAgICAgICAgICAgaWYgKGZpbGwpCiAgICAgICAgICAgICAgICAgYy0+c2V0RmlsbENvbG9yKENv
bG9yOjpibGFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eS5jcHAKaW5kZXggNGY2M2FkY2U5MzkxNmRiMjMyMGU5Njc4YWFiZmUwZjNjZDk5NzYyYi4uOWE4
MDNhNDA4ZDg4YzJmZjQ4ZGQzYmVhMDI5NTFiODc1ODA5OGUwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMTI0NCw3ICsxMjQ0LDcgQEAg
c3RhdGljIHZvaWQgZHJhd0xheW91dFN0aXBwbGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNh
dmVyKGNvbnRleHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEpOwogICAgIGNv
bnRleHQuc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGU6OkRhc2hlZFN0cm9rZSk7Ci0gICAgY29u
dGV4dC5zZXRMaW5lRGFzaCh7IDEsIGRlbnNpdHkgfSwgMSk7CisgICAgY29udGV4dC5zZXRMaW5l
RGFzaCh7IHsgMSwgZGVuc2l0eSB9LCAxIH0pOwogCiAgICAgZHJhd0xheW91dFBhdHRlcm4oY29u
dGV4dCwgcXVhZCwgZGVuc2l0eSwgRmxpcDo6Tm8pOwogfQpAQCAtMTI1NCw3ICsxMjU0LDcgQEAg
c3RhdGljIHZvaWQgZHJhd0xheW91dEhhdGNoaW5nKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRRdWFkJiBxdWFkLAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2
ZXIoY29udGV4dCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMC41KTsKICAgICBj
b250ZXh0LnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAgIGNv
bnRleHQuc2V0TGluZURhc2goeyAyLCAyIH0sIDIpOworICAgIGNvbnRleHQuc2V0TGluZURhc2go
eyB7IDIsIDIgfSwgMiB9KTsKIAogICAgIGNvbnN0ZXhwciBhdXRvIGRlZmF1bHRMYXlvdXRIYXRj
aFNwYWNpbmcgPSAxMjsKICAgICBkcmF3TGF5b3V0UGF0dGVybihjb250ZXh0LCBxdWFkLCBkZWZh
dWx0TGF5b3V0SGF0Y2hTcGFjaW5nLCBmbGlwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApp
bmRleCAzYjk5NTU4OWQxODU2ZjdjMzM3ZmEwMGQ0ZWRjNTJhYmJlOTM0MTE1Li5mNDk1ZjQ4ZTYz
Njk1ZjEwMjdjNTg2NzgxYzgwNjBmNTU3MWY4YWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCkBAIC00Mjk2LDcgKzQyOTYsNyBAQCB2b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQYWlu
dEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdAogICAgIGlm
IChuZWVkc0xheW91dCgpKQogICAgICAgICBsYXlvdXRDb250ZXh0KCkubGF5b3V0KCk7CiAKLSAg
ICBOdWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsK
KyAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoZnJhbWVSZWN0KCksIHBhaW50SW52YWxp
ZGF0aW9uUmVhc29ucyk7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpIHsKICAgICAgICAgLy8g
RklYTUU6IGNvbnN1bHQgcGFpbnRzRW50aXJlQ29udGVudHMoKS4KICAgICAgICAgcGFpbnRDb250
ZW50cyhjb250ZXh0LCB2aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxl
UmVjdCkpOwpAQCAtNDg0Nyw3ICs0ODQ3LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkanVzdFBhZ2VI
ZWlnaHREZXByZWNhdGVkKGZsb2F0ICpuZXdCb3R0b20sIGZsb2F0IG9sZFRvcCwgZmxvYXQKIAog
ICAgIH0KICAgICAvLyBVc2UgYSBjb250ZXh0IHdpdGggcGFpbnRpbmcgZGlzYWJsZWQuCi0gICAg
TnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52
YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0
KGZyYW1lUmVjdCgpLCBOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNv
bnM6Ok5vbmUpOwogICAgIHJlbmRlclZpZXctPnNldFRydW5jYXRlZEF0KHN0YXRpY19jYXN0PGlu
dD4oZmxvb3JmKG9sZEJvdHRvbSkpKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdCgwLCBzdGF0aWNf
Y2FzdDxpbnQ+KGZsb29yZihvbGRUb3ApKSwgcmVuZGVyVmlldy0+bGF5b3V0T3ZlcmZsb3dSZWN0
KCkubWF4WCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG9sZEJvdHRvbSAtIG9sZFRvcCkpKTsK
ICAgICByZW5kZXJWaWV3LT5zZXRQcmludFJlY3QoZGlydHlSZWN0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dC5jcHAKaW5kZXggOWZkMjVkODBhZDEyZGM5MWRkMTFmOTE1OThmYzZjOGVmYTRjYjJh
Mi4uMjg5NTc0YjljMWU0MGNkNzEyYjRlMmI2ZTllYjM0YjAxNzI5ZGZjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dC5jcHAKQEAgLTI5LDcgKzI5LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dChH
cmFwaGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0LCBHcmFwaGljc0NvbnRleHQmIHNlY29uZGFy
eUNvbnRleHQpCi0gICAgOiBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250ZXh0KQorICAgIDog
R3JhcGhpY3NDb250ZXh0KHByaW1hcnlDb250ZXh0LmNsaXBCb3VuZHMoKSwgeyB9LCBwcmltYXJ5
Q29udGV4dC5nZXRDVE0oKSkKKyAgICAsIG1fcHJpbWFyeUNvbnRleHQocHJpbWFyeUNvbnRleHQp
CiAgICAgLCBtX3NlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5Q29udGV4dCkKIHsKIH0KQEAgLTQ4
LDYgKzQ5LDMwIEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBtX3ByaW1hcnlDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogfQogCisjaWYgVVNFKENHKQorYm9vbCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Cit9CisKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzQ0FMYXllckNvbnRl
eHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXll
ckNvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlz
Q0FMYXllckNvbnRleHQpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQpCit7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29u
dGV4dCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlz
QWNjZWxlcmF0ZWRDb250ZXh0KTsKK30KKyNlbmRpZgorCitSZW5kZXJpbmdNb2RlIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaW1hcnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKK30KKwogdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzYXZlKCkKIHsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgbm90IHVzaW5n
IHRoZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0J3Mgc3RhdGUgc3RhY2sgYXQgYWxsLApAQCAt
NjQsMjIgKzg5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgp
CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdSZWN0KHJlY3QsIGJv
cmRlclRoaWNrbmVzcyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdSZWN0KHJlY3QsIGJv
cmRlclRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQb2ludCYgdG8pCi17Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci0gICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RWxs
aXBzZShyZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgbV9zZWNvbmRhcnlDb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKICNpZiBVU0Uo
Q0cpCkBAIC05NiwyMiArMTA5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
YXBwbHlGaWxsUGF0dGVybigpCiB9CiAjZW5kaWYKIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1fcHJpbWFyeUNvbnRl
eHQuZHJhd1BhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgp
OwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChwYXRoKTsKLSAgICBt
X3NlY29uZGFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikK
IHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseURl
dmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBAIC0xMjYsMjIyICsx
MjcsMTI2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwog
fQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZmFjdG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmYWN0b3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxl
RmFjdG9yKGZhY3Rvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmls
bFJlY3QocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmls
bFJlY3QocmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0
LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNv
bG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBj
b2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29s
b3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0
LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGVhclJl
Y3QocmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBtX3ByaW1h
cnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuc3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwotICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLSNpZiBVU0UoQ0cpCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBp
c0NBTGF5ZXJDb250ZXh0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29u
dGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0SXNDQUxh
eWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLX0KLQotYm9vbCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmlt
YXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVkQ29u
dGV4dCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlz
QWNjZWxlcmF0ZWRDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0SXNBY2NlbGVy
YXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOwotfQotI2VuZGlmCi0KLVJlbmRlcmlu
Z01vZGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotfQotCiB2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
eworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKICAgICBtX3ByaW1hcnlDb250ZXh0
LmNsaXAocmVjdCk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXAocmVjdCk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwotICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LmNsaXBPdXQocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXQocGF0aCk7Ci19
Ci0KIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0
aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwUGF0aChwYXRoLCB3
aW5kUnVsZSk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxl
KTsKIH0KIAotSW50UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5jbGlwQm91bmRzKCk7Ci19Ci0K
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZUNhcChsaW5lQ2FwKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZUNhcChsaW5lQ2FwKTsKKyAgICBtX3ByaW1h
cnlDb250ZXh0LmNsaXBPdXQocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXQo
cmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCk7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5jbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGlu
ZUpvaW4obGluZUpvaW4pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5lSm9pbihsaW5l
Sm9pbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcFRvSW1hZ2VC
dWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQordm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xl
YXJSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdO
YXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgc2Vs
ZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwgc2VsZlNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd05h
dGl2ZUltYWdlKG5hdGl2ZUltYWdlLCBzZWxmU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCk7CisgICAgbV9zZWNvbmRh
cnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGlu
YXRpb25SZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3RlbUltYWdlKHN5c3Rl
bUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3Qo
cmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBjb2xv
cik7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFk
aWVudCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5hdGl2ZUltYWdlLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdHRlcm4obmF0aXZlSW1hZ2UsIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgZ3JhZGllbnQpOworICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBncmFkaWVudCk7CiB9CiAKLUltYWdl
RHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3ByaW1hcnlD
b250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJj
ZSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZp
bGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxS
b3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRT
aXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICBtX3NlY29u
ZGFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRp
bGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1fcHJp
bWFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0
LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiBlbGxpcHNlKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3VGls
ZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVs
ZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGlsZWRJbWFn
ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1
bGUsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4dC5m
aWxsRWxsaXBzZShlbGxpcHNlKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbEVsbGlwc2Uo
ZWxsaXBzZSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQucGFpbnRG
cmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgbV9wcmltYXJ5
Q29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFBhdGgo
cGF0aCk7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCit2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zY2FsZShzY2FsZSk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNjYWxlKHNjYWxlKTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBtX3NlY29uZGFyeUNv
bnRleHQuc3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5yb3RhdGUoYW5nbGVJblJhZGlhbnMp
OwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAgIG1f
cHJpbWFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKKyAgICBtX3NlY29uZGFyeUNv
bnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJp
bWFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC50cmFu
c2xhdGUoeCwgeSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOworICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY29uY2F0
Q1RNKHRyYW5zZm9ybSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3Jk
ZXJUaGlja25lc3MpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3Jk
ZXJUaGlja25lc3MpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQ
b2ludCYgdG8pCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRDVE0odHJhbnNmb3JtKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7CisgICAgbV9wcmltYXJ5Q29u
dGV4dC5kcmF3TGluZShmcm9tLCB0byk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdMaW5l
KGZyb20sIHRvKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZURldmljZVNjYWxlKSBjb25zdAor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKGluY2x1ZGVE
ZXZpY2VTY2FsZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3ZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICByZXR1cm4g
bV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7
CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd1BhdGgocGF0aCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM3MCwyOSArMjc1LDU0
IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvCiB9CiAjZW5kaWYKIAotRmxvYXRTaXplIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRl
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBm
cm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhdXRvIHNpemUgPSBtX3ByaW1hcnlDb250ZXh0
LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZHJhd1RleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIHJl
dHVybiBzaXplOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
IGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBG
b250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZp
bHRlclJlc3VsdHMmIGZpbHRlclJlc3VsdHMpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3
R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9v
dGhpbmdNb2RlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291
cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOworICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0
LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RW1waGFzaXNNYXJrcyhjYXNj
YWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LmRyYXdFbXBoYXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsK
KyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdO
YXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5
c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3QmlkaVRleHQoY2FzY2Fk
ZSwgcnVuLCBwb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVt
SW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdTeXN0
ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihpbWFnZSwgZGVzdFJl
Y3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7
CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKwor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihp
bWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5wYWludEZyYW1lRm9y
TWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnBhaW50
RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
VklERU8pCisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQoreworICAg
IG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1H
bHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9u
dFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMs
IFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQpAQCAtNDA3LDE2ICszMzcsOSBAQCB2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LAogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKHJlY3QsIG1hcmtlclN0eWxlKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0KTsKLX0KLQotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0CiB7Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKKyAgICByZXR1
cm4gbV9wcmltYXJ5Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsKIH0KIAogdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKQEAgLTQyNSwxOCArMzQ4LDE2IEBA
IHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QKICAgICBtX3NlY29uZGFyeUNvbnRleHQuYWRkRGVzdGlu
YXRpb25BdFBvaW50KG5hbWUsIHBvaW50KTsKIH0KIAotYm9vbCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAordm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuc3Vw
cG9ydHNJbnRlcm5hbExpbmtzKCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlv
bkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldERlc3RpbmF0
aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgLy8gVGhpcyBjYWxscyB1cGRhdGVTdGF0ZSgpIGluc3Rl
YWQgb2YgZGlkVXBkYXRlU3RhdGUoKSBzbyB0aGF0IGNoYW5nZXMKLSAgICAvLyBhcmUgYWxzbyBh
cHBsaWVkIHRvIGVhY2ggY29udGV4dCdzIEdyYXBoaWNzQ29udGV4dFN0YXRlLCBzbyB0aGF0IGNv
ZGUKLSAgICAvLyBpbnRlcm5hbCB0byB0aGUgY2hpbGQgY29udGV4dHMgdGhhdCByZWFkcyBmcm9t
IHRoZSBzdGF0ZSBnZXRzIHRoZSByaWdodCB2YWx1ZXMuCi0gICAgbV9wcmltYXJ5Q29udGV4dC51
cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC51cGRhdGVT
dGF0ZShzdGF0ZSwgZmxhZ3MpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1
cmwsIHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVj
dCk7CiB9CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQpAQCAtNDQ2LDUgKzM2Nywx
MCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRlcHJlY2F0ZWRQcml2YXRlQ29udAogfQogI2VuZGlmCiAKK0Zsb2F0UmVjdCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gbV9wcmlt
YXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY1
OGIzNGM5MTQzNDJiNzM3NzcyN2MxMWE3M2I2ZDgyMThlMTU1NmYuLjdhMzdhMTEzZGQ4MTVlYjNi
OTU2MDc1MmQ5ZGM3MGViNWE4OTdjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgKQEAgLTQz
LDgzICs0Myw1NCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25z
dDsKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qg
ZmluYWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5h
bDsKKyNpZiBVU0UoQ0cpCisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWw7
CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwogCi0gICAgdm9pZCBk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5h
bDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOworI2VuZGlmCisg
ICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CiAKKyAgICB2b2lk
IHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5
U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQogICAgIHZvaWQgYXBwbHlTdHJva2VQ
YXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAjZW5k
aWYKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsOworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZp
bmFsOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZp
bmFsOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAotICAgIHZvaWQg
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwotCi0gICAgdXNpbmcg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0KLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgp
IGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBm
aW5hbDsKLSNlbmRpZgotCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
ZmluYWw7Ci0KICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9p
ZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmlu
YWw7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCiAgICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwog
Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZl
bk9kZCkgZmluYWw7Ci0KLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKLQot
ICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgc2V0
TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkg
ZmluYWw7Ci0KLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsK
LSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbDsKLSAg
ICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFs
OworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0jaWYgRU5B
QkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6
c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lk
IHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgdm9pZCB0cmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZp
bmFsOworICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JikgZmluYWw7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAg
IEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNs
dWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykg
ZmluYWw7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwogCisgICAgdm9pZCBkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBh
dGgmKSBmaW5hbDsKKyAgICAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTI3LDIzICs5OCwyNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29s
JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1
bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxv
cHQpIGZpbmFsOwotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lk
IGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0g
MCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpIGZpbmFsOwotICAg
IHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0g
Rm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWw7CisgICAgdm9pZCBk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7CisgICAgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJS
ZXN1bHRzJikgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFs
OworICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lmIEVOQUJMRShWSURF
TykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOworI2VuZGlmCiAKKyAgICB2b2lkIGRyYXdHbHlwaHMo
Y29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZv
bnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKLQogICAg
IHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3Qg
VVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAgICB2b2lkIHNldERlc3RpbmF0aW9u
Rm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAg
IHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxv
YXRQb2ludCYpIGZpbmFsOwotCiAgICAgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25z
dCBmaW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9y
UmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZv
aWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAot
ICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisgICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91
bmRBbGxTaWRlcykgZmluYWw7CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQogICAg
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0
KCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggYmI0ZGFjMDE5YzVi
OWUxM2IxMzdhZTY5NGU0YmY2YjI3NmJmY2MwZC4uMWMxYjk2ZWM1Yjk4M2NjNWYxOGQ2ZmYxZmQy
NTg1N2ZhOTQzYzQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcApAQCAtOTAsNyArOTAsNyBA
QCB2b2lkIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3Q3Jvc3NmYWRlKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKIEltYWdlRHJhd1Jlc3VsdCBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6
ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0
ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkg
fSk7CiAgICAgY29udGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRz
dFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6
ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0ds
eXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5
cGhzUmVjb3JkZXIuaAppbmRleCAyNWEzZDNmZTg3NzMzMWRkYTM5NTc4MDExYjZkODkwZjIxMmM3
MmU2Li4zYmNiNTA1YWYzYzI4MmY0MjIzMjVjZDdlMzAwNTM0ZmQ5Zjk5Y2I5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIu
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI2LDI0ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1
ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKICNp
bmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKLSNpZiBV
U0UoQ09SRV9URVhUKQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNp
bmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRl
IDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2Vsc2UKLSNpbmNsdWRlIDxwYWwvc3Bp
L2NmL0NvcmVUZXh0U1BJLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFw
aGljc1NQSS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQ
b2ludDsKQEAgLTYyLDc2ICs0OSwzMiBAQCBwdWJsaWM6CiAjaWYgVVNFKENPUkVfVEVYVCkgJiYg
IVBMQVRGT1JNKFdJTikKICAgICB2b2lkIGRyYXdOYXRpdmVUZXh0KENURm9udFJlZiwgQ0dGbG9h
dCBmb250U2l6ZSwgQ1RMaW5lUmVmLCBDR1JlY3QgbGluZVJlY3QpOwogCi0gICAgdm9pZCByZWNv
cmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBDR1JlY3QpOwot
ICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYp
OwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0
ZVJlZiwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBoW10sIGNvbnN0IENH
UG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCByZWNvcmREcmF3SW1h
Z2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIENHUmVjdCwgQ0dJbWFnZVJlZik7
CisgICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmKTsKKyAgICB2b2lkIHJlY29y
ZEVuZExheWVyKENHR1N0YXRlUmVmKTsKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoQ0dHU3Rh
dGVSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90
IGNvdW50KTsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZShDR0dTdGF0ZVJlZiwgQ0dSZWN0LCBD
R0ltYWdlUmVmKTsKICNlbmRpZgogCi0gICAgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3Ry
dWN0RHJhd0dseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzOyB9
Ci0KIHByaXZhdGU6Ci0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICBV
bmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRleHQoKTsKLSNlbmRp
ZgotCi0gICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBG
b250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5n
TW9kZSk7Ci0gICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7Ci0K
LSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYpOwotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYs
IEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7
CisgICAgdm9pZCBzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYsIEZvbnRTbW9vdGhpbmdNb2Rl
KTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7Cisg
ICAgdm9pZCByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBvcmlnaW5hbFN0YXRlKTsKIAotICAgIHZvaWQgdXBkYXRlRmlsbENvbG9yKGNvbnN0IENv
bG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRyKTsKLSAgICB2b2lk
IHVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0
dGVybiogPSBudWxscHRyKTsKLSAgICB2b2lkIHVwZGF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKTsKLSAgICBlbnVtIGNsYXNzIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIHsKLSAgICAgICAg
VW5zcGVjaWZpZWQsCi0gICAgICAgIFllcywKLSAgICAgICAgTm8KLSAgICB9OwotICAgIHZvaWQg
dXBkYXRlU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dC
bHVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsK
LQotI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAgdm9pZCB1cGRhdGVT
aGFkb3coQ0dTdHlsZVJlZik7Ci0jZW5kaWYKKyAgICB2b2lkIGRyYXdOb25PVFNWR1J1bihjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9u
dFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSk7CisgICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZv
bnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9vd25lcjsKKyAgICBH
cmFwaGljc0NvbnRleHQmIG1fZGVzdGluYXRpb25Db250ZXh0OwogICAgIERlY29uc3RydWN0RHJh
d0dseXBocyBtX2RlY29uc3RydWN0RHJhd0dseXBoczsKICAgICBEZXJpdmVGb250RnJvbUNvbnRl
eHQgbV9kZXJpdmVGb250RnJvbUNvbnRleHQ7CiAKLSNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExB
VEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJuYWxDb250
ZXh0OwotI2VuZGlmCi0KICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIg
fTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBGb250U21vb3RoaW5n
TW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBtX29yaWdpbmFsVGV4
dE1hdHJpeDsKIAotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIHN0cnVjdCBTdHlsZSB7Ci0g
ICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZ3Jh
ZGllbnQ7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bTsKLSAgICAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuOwotICAgICAgICB9OwotICAg
ICAgICBTdHlsZSBmaWxsU3R5bGU7Ci0gICAgICAgIFN0eWxlIHN0cm9rZVN0eWxlOwotCi0gICAg
ICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0KLSAgICAgICAgc3RydWN0IFNoYWRvd1N0YXRlIHsK
LSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAgICAgICAgICBmbG9hdCBibHVyIHsg
MCB9OwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBib29sIGlnbm9yZVRy
YW5zZm9ybXMgeyBmYWxzZSB9OwotICAgICAgICB9OwotICAgICAgICBTaGFkb3dTdGF0ZSBzaGFk
b3c7Ci0gICAgfTsKLSAgICBTdGF0ZSBtX29yaWdpbmFsU3RhdGU7Ci0gICAgU3RhdGUgbV9jdXJy
ZW50U3RhdGU7CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKKyAgICBVbmlx
dWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKKyNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg1MTgwYWQxMDlmZDgxOGU5YmIxNTg4Y2U5NjJh
YjQ2MzA4MTZhMDkuLjM2MTFiMTJjYTlhYjI5ZWI5MjFmMjMyNWUxZjk2ZDI5NTI1M2M3Y2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAK
QEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1bgogCiBzdGQ6OnVuaXF1
ZV9wdHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNw
bGF5TGlzdEZvclRleHRSdW4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvLCBDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAogewotICAg
IEFTU0VSVCghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpOworICAgIEFTU0VSVF9VTlVTRUQo
Y29udGV4dCwgIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICB1bnNpZ25lZCBkZXN0
aW5hdGlvbiA9IHRvLnZhbHVlX29yKHJ1bi5sZW5ndGgoKSk7CiAgICAgCiAgICAgLy8gRklYTUU6
IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRo
IGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCkBA
IC0yMTQsNyArMjE0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURp
c3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9y
eURpc3BsYXlMaXN0PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OkluTWVt
b3J5RGlzcGxheUxpc3Q+KCk7Ci0gICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRp
bmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZm
aW5lVHJhbnNmb3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhz
OjpObyk7CisgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRpbmdDb250ZXh0KCpk
aXNwbGF5TGlzdCwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBEcmF3R2x5cGhzUmVj
b3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pOwogICAgIAogICAgIEZsb2F0UG9pbnQg
c3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBoQnVmZmVyLmluaXRp
YWxBZHZhbmNlKCkpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5nQ29udGV4dCwgZ2x5
cGhCdWZmZXIsIHN0YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCmluZGV4
IDY0NTg0ZTVjZmUwMTE4ODJlZmFiMmUyM2MzYTU5NGUxNzgyZjI4OTAuLjJmODI3ZjYyNWY2NGI1
OWNhMWE2NjQ5NjA3MzBmMDNjMjNiYzM3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCkBAIC00Myw3ICs0Myw3IEBAIEdyYWRp
ZW50SW1hZ2U6On5HcmFkaWVudEltYWdlKCkgPSBkZWZhdWx0OwogSW1hZ2VEcmF3UmVzdWx0IEdy
YWRpZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkp
OworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9w
ZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENvbnRleHQuY2xpcChk
ZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkp
OwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCkBAIC02Miw3ICs2
Miw3IEBAIHZvaWQgR3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgbV9ncmFkaWVudC0+YWRqdXN0UGFy
YW1ldGVyc0ZvclRpbGVkRHJhd2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVkU3JjUmVjdCwgc3Bh
Y2luZyk7CiAKICAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBzY2Fs
ZSB0byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZmaW5lVHJhbnNmb3Jt
IGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVm
aW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250
ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhTY2FsZSA9IGZhYnMo
ZGVzdENvbnRleHRDVE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RD
b250ZXh0Q1RNLnlTY2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJu
Q1RNID0gcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDBiYjEzNTk3Y2VhNzM2OWRiYmM2
ZTE3MjdmMjZjOTJiOGZiNzUxNzYuLjk5NDJmYWU1YTQyZDg1MTM4MjMwOWU3MDlhZGFiMmVkMWM2
ZjY4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKIAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgotI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNp
bmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCkBAIC0zNiw0NzMgKzM1LDMwOSBAQAogI2luY2x1
ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIlN5c3RlbUltYWdlLmgiCi0jaW5jbHVkZSAi
VGV4dFJ1bi5oIgorI2luY2x1ZGUgIlRleHRCb3hJdGVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBUZXh0Qm94
SXRlcmF0b3IgewotcHVibGljOgotICAgIFRleHRCb3hJdGVyYXRvcigpCi0gICAgICAgIDogbV90
ZXh0UnVuKDApCi0gICAgICAgICwgbV9vZmZzZXQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgVGV4
dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkKLSAg
ICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0g
ICAgewotICAgIH0KLQotICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9Ci0gICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KLSAgICBib29sIGF0
RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRSdW4t
Pmxlbmd0aCgpOyB9Ci0gICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90ZXh0
UnVuKVttX29mZnNldF07IH0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1cnJl
bnQoKSk7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zm
c2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47Ci0gICAgfQotCi0gICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICFv
cGVyYXRvcj09KG90aGVyKTsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4
dFJ1bjsKLSAgICB1bnNpZ25lZCBtX29mZnNldDsKLX07Ci0KLSNkZWZpbmUgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoZmxhZywgcHJvcGVydHkpIFwKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZykgJiYgKG1fc3RhdGUucHJvcGVydHkg
IT0gc3RhdGUucHJvcGVydHkpKSBcCi0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6ZmxhZyk7Ci0KLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpCi0gICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAsIHNob3VsZFNtb290
aEZvbnRzKHRydWUpCi0gICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHModHJ1ZSkKLSAg
ICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotICAgICwgZHJhd0x1bWluYW5jZU1h
c2soZmFsc2UpCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlRmxhZ3Mm
IGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAgOiBt
X3N0YXRlKGluaXRpYWxDbGlwLCBjaGFuZ2VGbGFncywgaW5pdGlhbENUTSkKKyAgICAsIG1fbGFz
dEFwcGxpZWRTdGF0ZShpbml0aWFsQ2xpcCkKIHsKIH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6
On5HcmFwaGljc0NvbnRleHRTdGF0ZSgpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVm
YXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGlj
c0NvbnRleHRTdGF0ZSYmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRleHRTdGF0ZSYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0g
ZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3Bl
cmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpID0gZGVmYXVsdDsKLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCitHcmFw
aGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIGF1dG8gc3Ryb2tlRmxhZ3Mg
PSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShzdHJva2VGbGFn
cykpIHsKLSAgICAgICAgc3Ryb2tlQ29sb3IgPSBzdGF0ZS5zdHJva2VDb2xvcjsKLSAgICAgICAg
c3Ryb2tlR3JhZGllbnQgPSBzdGF0ZS5zdHJva2VHcmFkaWVudDsKLSAgICAgICAgc3Ryb2tlUGF0
dGVybiA9IHN0YXRlLnN0cm9rZVBhdHRlcm47Ci0gICAgfQotCi0gICAgYXV0byBmaWxsRmxhZ3Mg
PSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0
dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShmaWxsRmxhZ3MpKSB7Ci0g
ICAgICAgIGZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsKLSAgICAgICAgZmlsbEdyYWRpZW50
ID0gc3RhdGUuZmlsbEdyYWRpZW50OwotICAgICAgICBmaWxsUGF0dGVybiA9IHN0YXRlLmZpbGxQ
YXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFk
b3dPZmZzZXQ7Ci0gICAgICAgIHNoYWRvd0JsdXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwotICAgICAg
ICBzaGFkb3dDb2xvciA9IHN0YXRlLnNoYWRvd0NvbG9yOwotICAgICAgICBzaGFkb3dSYWRpdXNN
b2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAg
ICAgIHN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNrbmVzczsKLQotICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdl
KSkKLSAgICAgICAgdGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4dERyYXdpbmdNb2RlOwotCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNo
YW5nZSkpCi0gICAgICAgIHN0cm9rZVN0eWxlID0gc3RhdGUuc3Ryb2tlU3R5bGU7Ci0KLSAgICBp
ZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkK
LSAgICAgICAgZmlsbFJ1bGUgPSBzdGF0ZS5maWxsUnVsZTsKKyAgICBBU1NFUlQobV9zdGFjay5p
c0VtcHR5KCkpOworICAgIEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsKK30KIAot
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2Up
KQotICAgICAgICBhbHBoYSA9IHN0YXRlLmFscGhhOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNh
dmUoKQoreworICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUpOworfQogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNo
YW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkgewotICAgICAg
ICBjb21wb3NpdGVPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBi
bGVuZE1vZGUgPSBzdGF0ZS5ibGVuZE1vZGU7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZSgpCit7CisgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgIExPR19FUlJPUigi
RVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBzaG91bGRBbnRp
YWxpYXMgPSBzdGF0ZS5zaG91bGRBbnRpYWxpYXM7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAg
c2hvdWxkU21vb3RoRm9udHMgPSBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKKyAgICBtX3N0YXRl
ID0gbV9zdGFjay50YWtlTGFzdCgpOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAg
ICBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHM7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMgPSBzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICAvLyBNYWtlIHN1
cmUgd2UgZGVhbGxvY2F0ZSB0aGUgc3RhdGUgc3RhY2sgYnVmZmVyIHdoZW4gaXQgZ29lcyBlbXB0
eS4KKyAgICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkgYWdhaW4s
IGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHkuCisgICAgaWYgKG1fc3RhY2suaXNF
bXB0eSgpKQorICAgICAgICBtX3N0YWNrLmNsZWFyKCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAg
ICAgICAgZHJhd0x1bWluYW5jZU1hc2sgPSBzdGF0ZS5kcmF3THVtaW5hbmNlTWFzazsKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkaWRBcHBseVN0YXRlQ2hhbmdlcygpCit7CisgICAgbV9zdGF0ZS5k
aWRBcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fbGFzdEFwcGxpZWRTdGF0ZSA9IG1fc3RhdGU7
Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBpbWFnZUludGVycG9sYXRpb25R
dWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKK0Zsb2F0U2l6ZSBHcmFw
aGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgcmV0dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNj
YWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Cit9CisgICAgCitGbG9hdFNpemUgR3JhcGhpY3ND
b250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICBhdXRvIHRyYW5zZm9ybWVkRGVzdFJlY3QgPSB0cmFu
c2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7CisgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Qu
c2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7Cit9CiAKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQ
T1JUKQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFy
a0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICB1c2VEYXJrQXBwZWFyYW5jZSA9IHN0YXRlLnVz
ZURhcmtBcHBlYXJhbmNlOwotI2VuZGlmCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCkKK3sKKyAgICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsK
IH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkKIHsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFu
Z2VGbGFnczsKKyAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCk7CisgICAg
LS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7Cit9CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9Q
Uk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwgc3Ryb2tlR3JhZGllbnQpOwotICAgIENIRUNL
X0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBhdHRlcm5DaGFuZ2UsIHN0cm9rZVBhdHRlcm4p
OwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxHcmFkaWVudENoYW5nZSwgZmls
bEdyYWRpZW50KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsUGF0dGVybkNo
YW5nZSwgZmlsbFBhdHRlcm4pOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQoreworICAgIG1fc3RhdGUuY2xpcChyZWN0KTsKK30KIAotICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
Ci0gICAgICAgICYmIChtX3N0YXRlLnNoYWRvd09mZnNldCAhPSBzdGF0ZS5zaGFkb3dPZmZzZXQK
LSAgICAgICAgICAgIHx8IG1fc3RhdGUuc2hhZG93Qmx1ciAhPSBzdGF0ZS5zaGFkb3dCbHVyCi0g
ICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0NvbG9yICE9IHN0YXRlLnNoYWRvd0NvbG9yKSkK
LSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlKQoreworICAgIG1fc3RhdGUuY2xpcChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Cit9
CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VUaGlja25lc3NDaGFuZ2Us
IHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoVGV4dERy
YXdpbmdNb2RlQ2hhbmdlLCB0ZXh0RHJhd2luZ01vZGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKFN0cm9rZUNvbG9yQ2hhbmdlLCBzdHJva2VDb2xvcik7Ci0gICAgQ0hFQ0tfRk9S
X0NIQU5HRURfUFJPUEVSVFkoRmlsbENvbG9yQ2hhbmdlLCBmaWxsQ29sb3IpOwotICAgIENIRUNL
X0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVN0eWxlQ2hhbmdlLCBzdHJva2VTdHlsZSk7Ci0g
ICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbFJ1bGVDaGFuZ2UsIGZpbGxSdWxlKTsK
LSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShBbHBoYUNoYW5nZSwgYWxwaGEpOwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0KQoreworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3Qp
OworICAgIGNsaXBQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFp
bnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pCi0gICAgICAgICYmIChtX3N0
YXRlLmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3Rh
dGUuYmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9kZSkpIHsKLSAgICAgICAgY2hhbmdlRmxhZ3Mu
YWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwotICAg
ICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5n
ZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAg
ICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkQW50aWFsaWFzQ2hhbmdlLCBzaG91bGRB
bnRpYWxpYXMpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3VsZFNtb290aEZv
bnRzQ2hhbmdlLCBzaG91bGRTbW9vdGhGb250cyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJP
UEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFu
Y2VNYXNrKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKLQotI2lmIEhBVkUo
T1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoVXNl
RGFya0FwcGVhcmFuY2VDaGFuZ2UsIHVzZURhcmtBcHBlYXJhbmNlKTsKLSNlbmRpZgotCi0gICAg
cmV0dXJuIGNoYW5nZUZsYWdzOworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRS
ZWN0KHJlY3QpOworICAgIGNsaXBPdXQocGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fc3RhdGUubWVyZ2VD
aGFuZ2VzKHN0YXRlLCBmbGFncyk7Ci0KLSAgICBhdXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VHcmFkaWVudENoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5D
aGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoc3Ryb2tlRmxhZ3MpKQotICAgICAg
ICBtX2NoYW5nZUZsYWdzLnJlbW92ZShzdHJva2VGbGFncyk7Ci0KLSAgICBhdXRvIGZpbGxGbGFn
cyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQ
YXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGZpbGxGbGFncykpCi0g
ICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3ZlKGZpbGxGbGFncyk7Ci0KLSAgICBhdXRvIGNvbXBv
c2l0ZU9wZXJhdG9yRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfTsKLSAg
ICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoY29tcG9zaXRlT3BlcmF0b3JGbGFncykpCi0gICAgICAg
IG1fY2hhbmdlRmxhZ3MucmVtb3ZlKGNvbXBvc2l0ZU9wZXJhdG9yRmxhZ3MpOwotCi0gICAgbV9j
aGFuZ2VGbGFncy5hZGQoZmxhZ3MpOworICAgIGltYWdlQnVmZmVyLmNsaXBUb01hc2soKnRoaXMs
IGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50
Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VHcmFkaWVudCgqbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLQotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQ
YXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCptX3N0YXRl
LnN0cm9rZVBhdHRlcm4pOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0
RmlsbEdyYWRpZW50KCptX3N0YXRlLmZpbGxHcmFkaWVudCwgbV9zdGF0ZS5maWxsR3JhZGllbnRT
cGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEZp
bGxQYXR0ZXJuKCptX3N0YXRlLmZpbGxQYXR0ZXJuKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0No
YW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKLSAgICAgICAgY29udGV4
dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9z
dGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsKLQotICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25l
c3NDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0
cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5z
ZXRUZXh0RHJhd2luZ01vZGUobV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwotCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hh
bmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihtX3N0YXRlLnN0cm9rZUNvbG9y
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRl
LmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9r
ZVN0eWxlKG1fc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgY29u
dGV4dC5zZXRGaWxsUnVsZShtX3N0YXRlLmZpbGxSdWxlKTsKLQotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAg
IGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpCi0gICAgICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3Is
IG1fc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBjb250
ZXh0LnNldFNob3VsZEFudGlhbGlhcyhtX3N0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci0KLSAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21v
b3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFNob3VsZFNtb290aEZvbnRzKG1f
c3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5n
ZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKG1fc3Rh
dGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkp
Ci0gICAgICAgIGNvbnRleHQuc2V0RHJhd0x1bWluYW5jZU1hc2sobV9zdGF0ZS5kcmF3THVtaW5h
bmNlTWFzayk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIGNvbnRl
eHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkpOwotCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFu
Y2VDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFVzZURhcmtBcHBlYXJhbmNlKG1fc3RhdGUu
dXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlmCisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOworICAgIHNldENvbXBvc2l0ZU1vZGUo
eyBvcCwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBzZXRD
b21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3Jh
ZGllbnQpCiB7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjaGFuZ2UtZmxhZ3MiLCBtX2NoYW5nZUZs
YWdzLnRvUmF3KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsKLQot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtcGF0dGVy
biIsIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWdyYWRpZW50IiwgbV9zdGF0ZS5maWxsR3JhZGll
bnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJm
aWxsLXBhdHRlcm4iLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKTsKKyAgICBncmFkaWVudC5m
aWxsKCp0aGlzLCByZWN0KTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRvd0JsdXIpOwotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRlLnNoYWRvd09mZnNldCk7Ci0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWNvbG9yIiwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyIsIG1fc3Rh
dGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgaWYg
KCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xv
ciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CisgICAgICAgIAorICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBj
b21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICBzZXRDb21wb3NpdGVNb2RlKHsgcHJldmlvdXNPcGVy
YXRvciwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7Cisg
ICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOworfQogCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNr
bmVzc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXRoaWNrbmVzcyIs
IG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInRleHQtZHJhd2luZy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2lu
Z01vZGUudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoInN0cm9rZS1jb2xvciIsIG1fc3RhdGUuc3Ryb2tlQ29sb3IpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3RhdGUuZmlsbENvbG9y
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXN0
eWxlIiwgbV9zdGF0ZS5zdHJva2VTdHlsZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBQYXRo
IHBhdGg7CisgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJmaWxsLXJ1bGUiLCBtX3N0YXRlLmZpbGxSdWxlKTsKKyAgICBpZiAo
IXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVybygpKQorICAgICAgICBwYXRoLmFkZFJvdW5k
ZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7CisgICAgZWxzZQorICAgICAgICBwYXRoLmFkZFJlY3Qo
cm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoImFscGhhIiwgbV9zdGF0ZS5hbHBoYSk7CisgICAgV2luZFJ1bGUgb2xkRmlsbFJ1bGUg
PSBmaWxsUnVsZSgpOworICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOworICAg
IAorICAgIHNldEZpbGxSdWxlKFdpbmRSdWxlOjpFdmVuT2RkKTsKKyAgICBzZXRGaWxsQ29sb3Io
Y29sb3IpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY29tcG9zaXRlLW9wZXJhdG9yIiwgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvcik7CisgICAg
ZmlsbFBhdGgocGF0aCk7CisgICAgCisgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOworICAg
IHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIG1fc3RhdGUuYmxlbmRNb2RlKTsKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlw
c2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKKyAg
ICBmaWxsUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoInNob3VsZC1hbnRpYWxpYXMiLCBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyk7
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBzZShlbGxp
cHNlKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkK
LSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtc21vb3RoLWZvbnRzIiwgbV9zdGF0ZS5z
aG91bGRTbW9vdGhGb250cyk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IpCit7CisgICAgYXV0byBvbGRGaWxsQ29sb3IgPSBmaWxsQ29s
b3IoKTsKKyAgICBhdXRvIG9sZFN0cm9rZUNvbG9yID0gc3Ryb2tlQ29sb3IoKTsKIAotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3Vs
ZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsIG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKTsKKyAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOworICAgIHNldFN0cm9rZUNv
bG9yKHNoYWRvd0NvbG9yKTsKKyAgICBkcmF3RWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCksIHJl
Y3QueSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvd3MtaWdub3Jl
LXRyYW5zZm9ybXMiLCBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBzZXRG
aWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBzZXRTdHJva2VDb2xvcihlbGxpcHNlQ29sb3Ip
OworICAgIGRyYXdFbGxpcHNlKHJlY3QpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJkcmF3LWx1bWluYW5jZS1tYXNrIiwgbV9zdGF0ZS5kcmF3THVt
aW5hbmNlTWFzayk7CisgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7CisgICAgc2V0U3Ry
b2tlQ29sb3Iob2xkU3Ryb2tlQ29sb3IpOworfQogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInVz
ZS1kYXJrLWFwcGVhcmFuY2UiLCBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlKTsKLSNlbmRpZgor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAg
ZmlsbFBhdGgocGF0aCk7CisgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmIHN0YXRlQ2hhbmdlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgc3RhdGVD
aGFuZ2UuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFn
ZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0
KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAot
R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudCk7CisgICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5h
dGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdP
cHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YWNrLmFwcGVuZChtX3N0YXRlKTsK
KyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAg
aW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxv
YXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBh
aW50aW5nT3B0aW9ucykKIHsKLSAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlz
IGVtcHR5Iik7CisgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fc3RhdGUgPSBtX3N0YWNrLmxhc3QoKTsKLSAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKLQot
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZWFsbG9jYXRlIHRoZSBzdGF0ZSBzdGFjayBidWZmZXIgd2hl
biBpdCBnb2VzIGVtcHR5LgotICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5
IHNhdmUoKSBhZ2FpbiwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KLSAgICBp
ZiAobV9zdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhY2suY2xlYXIoKTsKKyAgICBhdXRv
IGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1h
Z2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1p
bmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09w
dGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5tZXJnZUNoYW5nZXMoc3RhdGUsIGZsYWdzKTsKLSAgICBk
aWRVcGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsK
KyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIGRlc3RpbmF0aW9u
LCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hh
ZG93Q29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKLSAgICBzYXZlKCk7Ci0KLSAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7
Ci0gICAgc2V0RmlsbENvbG9yKHNoYWRvd0NvbG9yKTsKLQotICAgIGRyYXdFbGxpcHNlKEZsb2F0
UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
KTsKLQotICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xvcik7Ci0gICAgc2V0RmlsbENvbG9y
KGVsbGlwc2VDb2xvcik7Ci0KLSAgICBkcmF3RWxsaXBzZShyZWN0KTsgIAotCi0gICAgcmVzdG9y
ZSgpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRlcnBvbGF0aW9u
UXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMs
IG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgSW1hZ2VCdWZmZXI6OmRyYXdD
b25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKIHsKLSAgICBtX3N0
YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51
bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2Up
OworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFn
ZVJlY3QsIHJlc3VsdHMpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAo
IWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBzY2FsZSh7IDEgLyBmaWx0ZXIu
ZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkg
fSk7CisgICAgZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgcmVzdWx0LT5hYnNvbHV0ZUlt
YWdlUmVjdCgpKTsKKyAgICBzY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hhZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlKQor
SW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9m
ZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwotICAgIG1fc3RhdGUuc2hhZG93
Q29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSByYWRpdXNNb2Rl
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpOworICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5h
dGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgp
KSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJTaGFkb3coKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUuc2hhZG93
T2Zmc2V0ID0gRmxvYXRTaXplKCk7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsKLSAgICBt
X3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKLSAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01v
ZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOworICAgIEZsb2F0UmVjdCBz
cmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmll
bnRhdGlvbigpKSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNy
Y1JlY3QsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6
OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJsdXIsIENvbG9yJiBjb2xvcikg
Y29uc3QKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBvZmZzZXQg
PSBtX3N0YXRlLnNoYWRvd09mZnNldDsKLSAgICBibHVyID0gbV9zdGF0ZS5zaGFkb3dCbHVyOwot
ICAgIGNvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKLQotICAgIHJldHVybiBoYXNTaGFkb3co
KTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxp
dHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Cisg
ICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2lu
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3Rh
dGUuZmlsbENvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRy
OwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOworICAgIElu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNT
Y29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1cm4g
aW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3Bh
Y2luZywgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0
ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwKKyAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVs
ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5z
dHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsK
LSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKTsKKyAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IElt
YWdlOjpTdHJldGNoVGlsZSkgeworICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCisgICAgICAg
IHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwor
ICAgIH0KKworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9u
UXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgp
KTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNl
LCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRv
cigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0
ZXJuPiYmIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5
c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
CiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGll
bnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4p
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
UGF0dGVybkNoYW5nZSk7CisgICAgc3lzdGVtSW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb25S
ZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxH
cmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVu
dFNwYWNlVHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdl
QnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0g
eyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKLSAg
ICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNw
YWNlVHJhbnNmb3JtOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRp
ZW50Q2hhbmdlKTsKKyAgICBpbWFnZS5kcmF3UGF0dGVybigqdGhpcywgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRp
ZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQor
I2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsK
LSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9
IFdURk1vdmUoZ3JhZGllbnQpOwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0gPSBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX3N0YXRlLmZpbGxQYXR0ZXJu
ID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKTsKLSAgICAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRl
cm4/CisgICAgcGxheWVyLnBsYXllclByaXZhdGUoKS0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRl
eHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
Z01vZGUpCiB7Ci0gICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CisgICAgRm9udENhc2Nh
ZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
cG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzQW5k
Q2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
Z01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApOwotICAg
IC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworICAgIGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiBG
bG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQg
ZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCkBAIC01MTEsMTEgKzM0Niw2IEBAIEZs
b2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1
biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
LXsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZh
bmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwotfQotCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvKQog
ewogICAgIGZvbnQuZHJhd0VtcGhhc2lzTWFya3MoKnRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZy
b20sIHRvKTsKQEAgLTU0OSw3ICszNzksNDUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdC
aWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAg
ICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwogICAgIH0KIAotICAgIGJpZGlSdW5zLmNs
ZWFyKCk7CisgICAgYmlkaVJ1bnMuY2xlYXIoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5bGUpCit7CisgICAgZHJhd0xpbmVz
Rm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJl
Y3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOworfQorCitG
bG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcpCit7CisgICAgQ29sb3IgZHVtbXlD
b2xvcjsKKyAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9y
VGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xvcik7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCit7CisgICAg
RmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7CisgICAgZmxvYXQgdGhpY2tuZXNz
ID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7CisgICAgaWYgKHByaW50aW5nKQorICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhp
Y2tuZXNzKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7Cisg
ICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5
IHNjYWxlcyBhcmUgZXF1YWwuCisgICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3Rk
OjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7Cisg
ICAgaWYgKHNjYWxlIDwgMS4wKSB7CisgICAgICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3Mg
YSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxpbmUgaGlnaCwKKyAgICAgICAgLy8g
d2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBU
byBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8gZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRv
IHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KKyAgICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA9IDAuNGY7CisgICAg
ICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6
IG1pbmltdW1VbmRlcmxpbmVBbHBoYTsKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeShzaGFkZSk7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBkZXZpY2VQ
b2ludCA9IHRyYW5zZm9ybS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIC8vIFZpc3Vh
bCBvdmVyZmxvdyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYu
IHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUg
Zm9yIHVuZGVybGluZSBkZWNvcmF0aW9uLgorICAgIEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0g
RmxvYXRQb2ludChyb3VuZGYoZGV2aWNlUG9pbnQueCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgp
KSk7CisgICAgaWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCkpCisgICAgICAg
IG9yaWdpbiA9IGludmVyc2UudmFsdWUoKS5tYXBQb2ludChkZXZpY2VPcmlnaW4pOworICAgIHJl
dHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3Mp
KTsKIH0KIAogc3RhdGljIEludFNpemUgc2NhbGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKQEAgLTYzOSwxODcgKzUwNyw5IEBA
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVBbGlnbmVkSW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRSZWN0JiByCiAgICAgcmV0dXJuIGNyZWF0ZVNjYWxlZEltYWdlQnVm
ZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUoKSwgcmVu
ZGVyaW5nTWV0aG9kKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFn
ZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KQotewotICAgIHN5c3RlbUltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7Ci19
Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShpbWFn
ZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdl
RHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCks
IGltYWdlLnNpemUoaW1hZ2VQYWludGluZ09wdGlvbnMub3JpZW50YXRpb24oKSkpOwotICAgIHJl
dHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzcmNSZWN0LCBpbWFnZVBhaW50aW5n
T3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAg
ICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JU
aGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0
dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQot
Ci1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRo
aXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRy
YXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9w
dGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKLSAgICBJ
bWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJl
dGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKLSAgICAgICAgLy8gSnVz
dCBkbyBhIHNjYWxlLgotICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKLSAgICB9Ci0KLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMu
aW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhp
cywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9w
dGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25z
KQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBp
bWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSks
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsK
LSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBp
bWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9u
cy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdD
b25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9h
dFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFp
bnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBh
dXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKLSAgICBkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwg
aW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFn
ZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIGlt
YWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKLSAgICBkcmF3Q29uc3VtaW5n
SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBp
bWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm47Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwotICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUo
aW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRl
ciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKLXsKLSAgICBhdXRvIHJlc3VsdCA9IGZpbHRlci5h
cHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCByZXN1bHRzKTsKLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSByZXN1
bHQtPmltYWdlQnVmZmVyKCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZp
bHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOwotICAgIGRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7Ci0gICAgc2NhbGUoZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4o
SW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlLmRyYXdQYXR0ZXJu
KCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFj
aW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBw
YXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAgIGNsaXBQYXRoKHBhdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7Ci0gICAgICAgIGNsaXBP
dXQocmVjdC5yZWN0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGF0aCBwYXRo
OwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcE91dChwYXRoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgaW1h
Z2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKLX0KLQotSW50UmVj
dCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkK
LXsKLSAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBDb21w
b3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0g
ICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotICAgIGZpbGxSZWN0KHJl
Y3QsIGNvbG9yKTsKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotewotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKSB7Ci0gICAgICAgIHNldENvbXBvc2l0ZU9w
ZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKLSAgICAgICAgZmlsbFJv
dW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlv
bihjb21wb3NpdGVPcGVyYXRpb24oKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZpbGxSZWN0KHJl
Y3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJlY3QocmVj
dCk7Ci0KLSAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVybygpKQotICAgICAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7Ci0gICAgZWxzZQotICAgICAg
ICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAgICBXaW5kUnVsZSBv
bGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7Ci0gICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENv
bG9yKCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHNl
dEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBmaWxsUGF0aChwYXRoKTsKLSAgICAKLSAgICBzZXRG
aWxsUnVsZShvbGRGaWxsUnVsZSk7Ci0gICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7Ci19
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAg
IG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247Ci0gICAgbV9z
dGF0ZS5ibGVuZE1vZGUgPSBibGVuZE1vZGU7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSk7Ci19CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2lu
dCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVu
U3R5bGUpCiB7CkBAIC04NTAsNzcgKzU0MCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1
c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyCiAg
ICAgfQogfQogCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0
Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRl
eHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIHJldHVybiBGbG9hdFNpemUo
dHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOwotfQotICAgIAotRmxvYXRT
aXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVs
eUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byB0cmFuc2Zvcm1lZERlc3RSZWN0ID0gdHJh
bnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0
LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBmaWxsUGF0aChwYXRoKTsKLSAgICBzdHJv
a2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1Bh
dGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRo
LmFkZEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2UpOwotICAg
IHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVu
ZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIGRyYXdMaW5lc0ZvclRleHQocmVj
dC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkg
fSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0eWxlKTsKLX0KLQotRmxvYXRSZWN0IEdy
YXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBib29sIHByaW50aW5nKQotewotICAgIENvbG9yIGR1bW15Q29sb3I7Ci0gICAg
cmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQocmVjdCwg
cHJpbnRpbmcsIGR1bW15Q29sb3IpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpj
b21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgYm9vbCBwcmludGluZywgQ29sb3ImIGNvbG9yKQotewotICAgIEZsb2F0UG9pbnQg
b3JpZ2luID0gcmVjdC5sb2NhdGlvbigpOwotICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4
KHJlY3QuaGVpZ2h0KCksIDAuNWYpOwotICAgIGlmIChwcmludGluZykKLSAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOwot
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6
OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIC8vIEp1c3QgY29tcHV0ZSBzY2Fs
ZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcgeCBhbmQgeSBzY2FsZXMgYXJlIGVxdWFsLgotICAg
IGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLmIoKSA/IHN0ZDo6aHlwb3QodHJhbnNmb3JtLmEoKSwg
dHJhbnNmb3JtLmIoKSkgOiB0cmFuc2Zvcm0uYSgpOwotICAgIGlmIChzY2FsZSA8IDEuMCkgewot
ICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRyYXdzIGEgbGluZSB0aGF0IGlzIGF0IGxlYXN0
IG9uZS1waXhlbCBsaW5lIGhpZ2gsCi0gICAgICAgIC8vIHdoaWNoIHRlbmRzIHRvIHZpc3VhbGx5
IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxlcy4gVG8gY291bnRlciB0aGlzCi0gICAgICAg
IC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGllZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9yIHdo
ZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMuCi0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBt
aW5pbXVtVW5kZXJsaW5lQWxwaGEgPSAwLjRmOwotICAgICAgICBmbG9hdCBzaGFkZSA9IHNjYWxl
ID4gbWluaW11bVVuZGVybGluZUFscGhhID8gc2NhbGUgOiBtaW5pbXVtVW5kZXJsaW5lQWxwaGE7
Ci0gICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hhZGUp
OwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFwUG9p
bnQocmVjdC5sb2NhdGlvbigpKTsKLSAgICAvLyBWaXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2NjdXIg
aGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRlY29y
YXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRlcmxpbmUgZGVjb3JhdGlv
bi4KLSAgICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRmKGRldmlj
ZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOwotICAgIGlmIChhdXRvIGludmVy
c2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQotICAgICAgICBvcmlnaW4gPSBpbnZlcnNlLnZhbHVl
KCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwg
RmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNz
Q29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tl
V2lkdGgpIGNvbnN0CiB7CiAgICAgZmxvYXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7
CkBAIC05NzIsMTUgKzU5MSw0IEBAIFZlY3RvcjxGbG9hdFBvaW50PiBHcmFwaGljc0NvbnRleHQ6
OmNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0dXJu
IHsgcG9pbnQxLCBwb2ludDIgfTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5w
YWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwotfQotI2VuZGlm
Ci0KLXZvaWQgTnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBmYjk1ZGQyNWIy
NzFkZWI5ZmE4NWZmMmQ5ZjFmNzQ3MTZhMDY2YmFlLi43ZjAzODg5MjA2MTEyYTBiYzFhNWFlNWFj
OWZiZWEwMzczY2UyNTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTMwLDQ5ICszMCwxOCBAQAogI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAj
aW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAotI2lm
IFVTRShDRykKLXR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDsKLSNlbGlmIFVTRShDQUlSTykKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dENhaXJvOwotfQotdHlwZWRlZiBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybyBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbHNlCi10eXBlZGVmIHZvaWQgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJESUJQ
aXhlbERhdGEuaCIKLXR5cGVkZWYgc3RydWN0IEhEQ19fKiBIREM7Ci0jaWYgIVVTRShDRykKLS8v
IFVJbnQ4IGlzIGRlZmluZWQgaW4gQ29yZUZvdW5kYXRpb24vQ0ZCYXNlLmgKLXR5cGVkZWYgdW5z
aWduZWQgY2hhciBVSW50ODsKLSNlbmRpZgotI2VuZGlmCi0KLS8vIFgxMSBoZWFkZXJzIGRlZmlu
ZSBhIGJ1bmNoIG9mIG1hY3JvcyB3aXRoIGNvbW1vbiB0ZXJtcywgaW50ZXJmZXJpbmcgd2l0aCBX
ZWJDb3JlIGFuZCBXVEYgZW51bSB2YWx1ZXMuCi0vLyBBcyBhIHdvcmthcm91bmQsIHdlIGV4cGxp
Y2l0bHkgdW5kZWYgdGhlbSBoZXJlLgotI2lmIGRlZmluZWQoTm9uZSkKLSN1bmRlZiBOb25lCi0j
ZW5kaWYKLSNpZiBkZWZpbmVkKEJlbG93KQotI3VuZGVmIEJlbG93Ci0jZW5kaWYKLSNpZiBkZWZp
bmVkKFN1Y2Nlc3MpCi0jdW5kZWYgU3VjY2VzcwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwpAQCAtODIsNyArNTEsNiBAQCBjbGFzcyBGbG9h
dFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBN
ZWRpYVBsYXllcjsKIGNsYXNzIFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0w7
CkBAIC05MSwxNzQgKzU5LDEyIEBAIGNsYXNzIFN5c3RlbUltYWdlOwogY2xhc3MgVGV4dFJ1bjsK
IGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCi1uYW1lc3BhY2UgRGlzcGxheUxpc3Qgewot
Y2xhc3MgUmVjb3JkZXI7Ci19Ci0KLWVudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhf
dCB7Ci0gICAgRmlsbCA9IDEgPDwgMCwKLSAgICBTdHJva2UgPSAxIDw8IDEsCi19OwotdXNpbmcg
VGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2RlPjsKLQotLy8g
TGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0
LWJveC1zaGFkb3cuCi0vLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhw
eC4KLWVudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgewotICAgIERlZmF1bHQsCi0g
ICAgTGVnYWN5Ci19OwotCi1lbnVtIFN0cm9rZVN0eWxlIHsKLSAgICBOb1N0cm9rZSwKLSAgICBT
b2xpZFN0cm9rZSwKLSAgICBEb3R0ZWRTdHJva2UsCi0gICAgRGFzaGVkU3Ryb2tlLAotICAgIERv
dWJsZVN0cm9rZSwKLSAgICBXYXZ5U3Ryb2tlLAotfTsKLQotc3RydWN0IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHsKLSAgICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKLSAgICAgICAgVGV4
dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKLSAgICAgICAgU3BlbGxp
bmcsCi0gICAgICAgIEdyYW1tYXIsCi0gICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQs
Ci0gICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcwotICAgIH0gbW9kZTsKLSAgICBib29sIHNo
b3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2UgfTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVj
b2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAg
ICBlbmNvZGVyIDw8IG1vZGU7Ci0gICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5j
ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8RG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7Ci0gICAgZGVjb2RlciA+
PiBtb2RlOwotICAgIGlmICghbW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgZGVj
b2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLSAgICBpZiAoIXNob3VsZFVzZURhcmtB
cHBlYXJhbmNlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7
ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfX07Ci19Ci0KLXN0cnVjdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGlj
c0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiYpOwotCi0gICAgZW51bSBDaGFuZ2UgOiB1aW50MzJfdCB7Ci0gICAgICAgIFN0
cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKLSAgICAgICAg
U3Ryb2tlUGF0dGVybkNoYW5nZSAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxLAotICAgICAg
ICBGaWxsR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDIsCi0gICAg
ICAgIEZpbGxQYXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywKLSAg
ICAgICAgU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCA0LAot
ICAgICAgICBTdHJva2VDb2xvckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDUs
Ci0gICAgICAgIFN0cm9rZVN0eWxlQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwg
NiwKLSAgICAgICAgRmlsbENvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCA3LAotICAgICAgICBGaWxsUnVsZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAx
IDw8IDgsCi0gICAgICAgIFNoYWRvd0NoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgOSwKLSAgICAgICAgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UgICAgICAgICAg
ID0gMSA8PCAxMCwKLSAgICAgICAgQWxwaGFDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMSA8PCAxMSwKLSAgICAgICAgQ29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlICAgICAgICAg
ICAgICAgID0gMSA8PCAxMiwKLSAgICAgICAgQmxlbmRNb2RlQ2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMSA8PCAxMywKLSAgICAgICAgVGV4dERyYXdpbmdNb2RlQ2hhbmdlICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAxNCwKLSAgICAgICAgU2hvdWxkQW50aWFsaWFzQ2hhbmdlICAg
ICAgICAgICAgICAgICAgID0gMSA8PCAxNSwKLSAgICAgICAgU2hvdWxkU21vb3RoRm9udHNDaGFu
Z2UgICAgICAgICAgICAgICAgID0gMSA8PCAxNiwKLSAgICAgICAgU2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzQ2hhbmdlICAgICAgID0gMSA8PCAxNywKLSAgICAgICAgRHJhd0x1bWluYW5jZU1h
c2tDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAxOCwKLSAgICAgICAgSW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZSAgICAgICAgID0gMSA8PCAxOSwKLSNpZiBIQVZFKE9TX0RBUktf
TU9ERV9TVVBQT1JUKQotICAgICAgICBVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSAgICAgICAgICAg
ICAgICAgPSAxIDw8IDIwLAotI2VuZGlmCi0gICAgfTsKLSAgICB1c2luZyBTdGF0ZUNoYW5nZUZs
YWdzID0gT3B0aW9uU2V0PENoYW5nZT47Ci0KLSAgICB2b2lkIG1lcmdlQ2hhbmdlcyhjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKTsKLQotICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQ7Ci0gICAgUmVmUHRy
PFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47Ci0gICAgCi0gICAgUmVmUHRyPEdyYWRpZW50PiBmaWxs
R3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+IGZpbGxQYXR0ZXJuOwotCi0gICAgRmxvYXRT
aXplIHNoYWRvd09mZnNldDsKLQotICAgIENvbG9yIHN0cm9rZUNvbG9yIHsgQ29sb3I6OmJsYWNr
IH07Ci0gICAgQ29sb3IgZmlsbENvbG9yIHsgQ29sb3I6OmJsYWNrIH07Ci0gICAgQ29sb3Igc2hh
ZG93Q29sb3I7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5z
Zm9ybTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0K
LSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgeyAwIH07Ci0gICAgZmxvYXQgc2hhZG93Qmx1ciB7
IDAgfTsKLSAgICBmbG9hdCBhbHBoYSB7IDEgfTsKLQotICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBXaW5kUnVsZSBmaWxsUnVsZSB7IFdpbmRSdWxlOjpO
b25aZXJvIH07Ci0KLSAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUgeyBU
ZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07Ci0gICAgQmxlbmRNb2Rl
IGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxp
dHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZh
dWx0IH07Ci0gICAgU2hhZG93UmFkaXVzTW9kZSBzaGFkb3dSYWRpdXNNb2RlIHsgU2hhZG93UmFk
aXVzTW9kZTo6RGVmYXVsdCB9OwotCi0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgOiAxOwotICAg
IGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwotICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzIDogMTsKLSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIDogMTsKLSAg
ICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDogMTsKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQ
T1JUKQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgOiAxOwotI2VuZGlmCi19OwotCi1zdHJ1
Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlKCkgPSBkZWZhdWx0OwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgLCBt
X2NoYW5nZUZsYWdzKGZsYWdzKQotICAgIHsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJikgY29uc3Q7Ci0KLSAgICB2b2lkIGFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGR1
bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBt
X3N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIG1fY2hh
bmdlRmxhZ3M7Ci19OwotCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKLQogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzogICAKKyAgICBmcmllbmQgY2xhc3MgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29u
dGV4dCgpID0gZGVmYXVsdDsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZUZsYWdzJiA9IHsgfSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFs
Q1RNID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQo
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpAQCAtMjcwLDI3MCArNzYsMjcwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBDb250ZXh0IFN0YXRlCisgICAgYm9vbCBjb250
ZW5mdWxQYWludERldGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50ZnVsUGFpbnREZXRl
Y3RlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVu
dGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9CisgICAgCisgICAgdmlydHVhbCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOyB9CiAKLSAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3Mp
IHsgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7IGRpZFVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9Ci0g
ICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VU
aGlja25lc3M7IH0KKyAgICAvLyBDb250ZXh0IFN0YXRlCiAKLSAgICB2b2lkIHNldFN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hh
bmdlKTsgfQotICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5zdHJva2VTdHlsZTsgfQorICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIG1lcmdlU3RhdGVDaGFuZ2Vz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikgeyBtX3N0YXRlLm1lcmdlQ2hhbmdl
cyhvdGhlcik7IH0KKyAgICB2b2lkIG1lcmdlU3RhdGVEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3RoZXIpIHsgbV9zdGF0ZS5tZXJnZURpZmZzKG90aGVyKTsgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0
IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7
IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5n
ZXRDVE0oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBjdG0pIHsgbV9zdGF0ZS5zZXRDVE0oY3RtLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAg
dm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pIHsgc2V0Q1RNKGdldENU
TSgpICogY3RtKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIHsgc2V0
Q1RNKGdldENUTSgpLnRyYW5zbGF0ZSh4LCB5KSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFBvaW50JiBwKSB7IHRyYW5zbGF0
ZShwLngoKSwgcC55KCkpOyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpIHsg
c2V0Q1RNKGdldENUTSgpLnNjYWxlKHN4LCBzeSkpOyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBz
KSB7IHNjYWxlKHMsIHMpOyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUp
IHsgc2NhbGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSB7IHNldENUTShnZXRDVE0oKS5yb3RhdGUocmFkMmRlZyhh
bmdsZUluUmFkaWFucykpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VQ
YXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CisgICAgY29uc3QgQ29s
b3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuY29sb3Io
KTsgfQorICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmZpbGxCcnVzaCgpLmdyYWRpZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBmaWxsUGF0dGVybigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkucGF0dGVybigpOyB9CisgICAgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBmaWxsU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNldEZpbGxDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9zdGF0ZS5zZXRGaWxsQ29sb3IoY29sb3IsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+
JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0p
IHsgbV9zdGF0ZS5zZXRGaWxsR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNm
b3JtKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNl
dEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtKTsgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwotICAgIEdyYWRpZW50KiBzdHJva2VHcmFkaWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCk7IH0KKyAgICBX
aW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGUoKTsgfQor
ICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9zdGF0ZS5zZXRGaWxs
UnVsZShmaWxsUnVsZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXRGaWxs
UnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IGRp
ZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5n
ZSk7IH0KLSAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmls
bFJ1bGU7IH0KKyAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsgfQorICAgIEdyYWRpZW50KiBzdHJva2VHcmFk
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5ncmFkaWVudCgpOyB9
CisgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ry
b2tlQnJ1c2goKS5wYXR0ZXJuKCk7IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9r
ZVNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnNw
YWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikgeyBtX3N0YXRlLnNldFN0cm9rZUNvbG9yKGNvbG9yLCBtX2xhc3RBcHBsaWVkU3RhdGUp
OyB9CisgICAgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBt
X3N0YXRlLnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBncmFkaWVudFNwYWNl
VHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBw
YXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5TcGFjZVRyYW5zZm9ybSA9IHsg
fSkgeyBtX3N0YXRlLnNldFN0cm9rZVBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgcGF0dGVyblNw
YWNlVHJhbnNmb3JtKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImKTsKLSAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsQ29sb3I7IH0KKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcygpOyB9CisgICAgdm9pZCBzZXRTdHJv
a2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3RhdGUuc2V0U3Ryb2tlVGhpY2tuZXNz
KHRoaWNrbmVzcywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7Ci0gICAgUGF0dGVybiogZmlsbFBh
dHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpOyB9CisgICAg
U3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0
eWxlKCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1f
c3RhdGUuc2V0U3Ryb2tlU3R5bGUoc3R5bGUsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9CisgICAgTGluZUNh
cCBpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVDYXAoKTsgfQorICAgIHZvaWQg
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsgbV9zdGF0ZS5zZXRMaW5lQ2FwKGxpbmVDYXAs
IG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0YXRlLnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IGRpZFVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5n
ZSk7IH0KLSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIGNvbnN0IExpbmVEYXNoIGxp
bmVEYXNoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5saW5lRGFzaCgpOyB9CisgICAgdm9pZCBz
ZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVEYXNoKSB7IG1fc3RhdGUuc2V0TGluZURhc2goV1RG
TW92ZShsaW5lRGFzaCksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hv
dWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3RhdGUuc2hvdWxkQW50aWFs
aWFzID0gc2hvdWxkQW50aWFsaWFzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxkQW50
aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXM7IH0KKyAgICBM
aW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubGluZUpvaW4oKTsgfQor
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pIHsgbV9zdGF0ZS5zZXRMaW5l
Sm9pbihsaW5lSm9pbiwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXRTaG91
bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU21v
b3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKTsgfQotICAgIGJvb2wg
c2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZv
bnRzOyB9CisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubWl0
ZXJMaW1pdCgpOyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpIHsg
bV9zdGF0ZS5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
IAotICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVhbnRpemF0aW9uIGJlY2F1
c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5nIGdseXBocy4KLSAgICAv
LyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBlbnN1cmUgYSBoaWdoLXF1
YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5z
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7
IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250czsgfQorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuY29tcG9zaXRlTW9kZSgpOyB9CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbjsg
fQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBjb21w
b3NpdGVNb2RlKCkuYmxlbmRNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVNb2RlKENvbXBv
c2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX3N0YXRlLnNldENvbXBvc2l0ZU1vZGUoY29tcG9z
aXRlTW9kZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbikgeyBzZXRDb21wb3NpdGVNb2RlKHsg
b3BlcmF0aW9uLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsgfQogCi0gICAgdm9pZCBzZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9zdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgZGlkVXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFu
Z2UpOyB9Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsgfQor
ICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmRyb3BTaGFkb3coKTsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93
JiBkcm9wU2hhZG93KSB7IG1fc3RhdGUuc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93LCBtX2xhc3RB
cHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBjbGVhclNoYWRvdygpIHsgc2V0RHJvcFNoYWRvdyh7
IH0pOyB9CiAKLSAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuYWxwaGEg
PSBhbHBoYTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFs
cGhhQ2hhbmdlKTsgfQotICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5h
bHBoYTsgfQorICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRyb3BT
aGFkb3coKS5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5pc0JsdXJyZWQoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93
KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmhhc091dHNldHMoKTsgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Is
IEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJh
dG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuYmxlbmRNb2RlOyB9CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmFscGhhKCk7IH0KKyAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fc3Rh
dGUuc2V0QWxwaGEoYWxwaGEsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0
RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLmRyYXdM
dW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7IH0KLSAgICBi
b29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5h
bmNlTWFzazsgfQorICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9u
UXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSB7IG1fc3RhdGUuc2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShpbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBtX2xhc3RBcHBsaWVk
U3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVG
bGFncyBtb2RlKSB7IG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSk7
IH0KLSAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZTsgfQorICAgIFRleHREcmF3aW5nTW9kZUZsYWdz
IHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2Rl
KCk7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0
ZXh0RHJhd2luZ01vZGUpIHsgbV9zdGF0ZS5zZXRUZXh0RHJhd2luZ01vZGUodGV4dERyYXdpbmdN
b2RlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIFNoYWRv
d1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgY2xlYXJTaGFkb3coKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGdldFNoYWRvdyhGbG9hdFNpemUmLCBmbG9hdCYsIENvbG9yJikgY29uc3Q7CisgICAgYm9vbCBz
aG91bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhcygp
OyB9CisgICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsg
bV9zdGF0ZS5zZXRTaG91bGRBbnRpYWxpYXMoc2hvdWxkQW50aWFsaWFzLCBtX2xhc3RBcHBsaWVk
U3RhdGUpOyB9CiAKLSAgICBib29sIGhhc1Zpc2libGVTaGFkb3coKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnNoYWRvd0NvbG9yLmlzVmlzaWJsZSgpOyB9Ci0gICAgYm9vbCBoYXNTaGFkb3coKSBj
b25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYgKG1fc3RhdGUuc2hhZG93Qmx1ciB8
fCBtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0Lmhl
aWdodCgpKTsgfQotICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhh
c1Zpc2libGVTaGFkb3coKSAmJiBtX3N0YXRlLnNoYWRvd0JsdXI7IH0KKyAgICBib29sIHNob3Vs
ZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cygp
OyB9CisgICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRz
KSB7IG1fc3RhdGUuc2V0U2hvdWxkU21vb3RoRm9udHMoc2hvdWxkU21vb3RoRm9udHMsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KIAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAg
dm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlKSB7IG1fc3Rh
dGUudXNlRGFya0FwcGVhcmFuY2UgPSB1c2VEYXJrQXBwZWFyYW5jZTsgZGlkVXBkYXRlU3RhdGUo
bV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKTsg
fQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVz
ZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1
YnBpeGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBv
ZiBhbGlnbmluZyBnbHlwaHMuCisgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2Fi
bGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgorICAg
IGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKTsgfQorICAgIHZvaWQgc2V0U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1f
c3RhdGUuc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAg
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoKTsgfQorICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0YXRlLnNldFNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBtX2xhc3RBcHBsaWVkU3Rh
dGUpOyB9CiAKLSAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIGJvb2wgZHJh
d0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNr
KCk7IH0KKyAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1h
c2spIHsgbV9zdGF0ZS5zZXREcmF3THVtaW5hbmNlTWFzayhkcmF3THVtaW5hbmNlTWFzaywgbV9s
YXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgLy8gQ2FsbGVkICphZnRlciogYW55IGNoYW5nZSB0
byBHcmFwaGljc0NvbnRleHRTdGF0ZTsgZ2VuZXJhbGx5IHVzZWQgdG8gcHJvcGFnYXRlIGNoYW5n
ZXMKLSAgICAvLyB0byB0aGUgcGxhdGZvcm0gY29udGV4dCdzIHN0YXRlLgotICAgIHZpcnR1YWwg
dm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7CisjaWYgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSgpOyB9CisgICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFy
YW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlKSB7IG1fc3RhdGUuc2V0VXNlRGFya0FwcGVhcmFu
Y2UodXNlRGFya0FwcGVhcmFuY2UsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyNlbmRpZgogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNhdmUoKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwotICAgIAorICAgIHZvaWQgZGlkQXBwbHlTdGF0ZUNo
YW5nZXMoKTsKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNr
LnNpemUoKTsgfQogCisgICAgdmlydHVhbCB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgPSAwOwog
I2lmIFVTRShDRykKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIHJlYWxseSBiZSBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0IG1ldGhvZHM/Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U3Ryb2tlUGF0
dGVybigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOworI2VuZGlmCiAKLSAgICAv
LyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRo
ZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ0FMYXllckNvbnRl
eHQoKSBjb25zdCA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9y
KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJh
d2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qp
IGNvbnN0OwogCi0gICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cg
Y29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQgb2ZmIHRoZSBjb250ZXh0Pwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSA9IDA7Ci0jZW5k
aWYKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3Ig
dG8gdGhlIGNvbnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCisgICAgLy8gYWN0
aW5nIGFzIGEgYmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgorICAg
IHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2Fs
ZShmYWN0b3IpOyB9CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KKyAgICAvLyBU
cmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICAvLyBQaXhlbCBTbmFwcGluZworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
OworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gc3VwcG9y
dHNUcmFuc3BhcmVuY3lMYXllcnMoKSAmJiBtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7IH0KIAot
ICAgIGVudW0gUm91bmRpbmdNb2RlIHsKLSAgICAgICAgUm91bmRBbGxTaWRlcywKLSAgICAgICAg
Um91bmRPcmlnaW5BbmREaW1lbnNpb25zCi0gICAgfTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5k
QWxsU2lkZXMpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5l
VG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBz
dHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworICAgIC8vIENsaXBwaW5nCiAKLSAgICAvLyBTaGFw
ZXMKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYs
IFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIC8vIFRoZXNl
IGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxpbmcuCi0gICAgLy8g
RklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGljaCBmaWxscyBwcm9wZXJseSBidXQgYWx3
YXlzIHN0cm9rZXMKLSAgICAvLyB1c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhl
IHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKLSAgICAvLyBzdHJva2UgY29sb3IpLgotICAg
IHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlj
a25lc3MgPSAxKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNv
bnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRo
JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdS
YWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3Is
IGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpOworCisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChtX3N0YXRlLmNsaXBCb3VuZHMoKSk7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRy
YXdQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICAvLyBTaGFwZXMKIAotICAgIHZpcnR1YWwgdm9pZCBm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgZmlsbEVsbGlwc2VBc1BhdGgo
ZWxsaXBzZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpIHsgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwog
CiAgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENv
bXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdmly
dHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IENvbG9yJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2Rl
ID0gQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIHZpcnR1YWwgdm9pZCBm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRo
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICAvLyBJbWFnZXMs
IFBhdHRlcm5zLCBhbmQgTWVkaWEKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKIAot
ICAgIEludFNpemUgY29tcGF0aWJsZUltYWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmKSBj
b25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8
UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgLy8gVGhlc2UgZHJh
dyBtZXRob2RzIHdpbGwgZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KKyAgICAvLyBGSVhN
RTogLi4uZXhjZXB0IGRyYXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMg
c3Ryb2tlcworICAgIC8vIHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVj
dCBib3JkZXJzIChvZiB0aGUgY29ycmVjdAorICAgIC8vIHN0cm9rZSBjb2xvcikuCiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZElt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
PSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
ZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgPSAw
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0
ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UmFp
c2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBj
b25zdCBDb2xvciYgc2hhZG93Q29sb3IpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlydHVh
bCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdS
ZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdl
IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgLy8g
Rm9jdXMgUmluZ3MKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJikgPSAwOworICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0
aGUgQ0cgaW1wbGVtZW50YXRpb24/IE9yIGVsc2V3aGVyZT8KKyNpZiBQTEFURk9STShNQUMpCisg
ICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zm
c2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9m
ZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOworI2VuZGlmCiAKKyAg
ICAvLyBJbWFnZXMKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1
ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmls
dGVyJiwgRmlsdGVyUmVzdWx0cyYpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRp
b246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJh
d0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdl
RHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAjaWYg
RU5BQkxFKFZJREVPKQogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKICNl
bmRpZgotCi0gICAgLy8gQ2xpcHBpbmcKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25z
dCBQYXRoJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBjbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UmVj
dCBjbGlwQm91bmRzKCkgY29uc3Q7Ci0KKyAgICAKICAgICAvLyBUZXh0CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2ln
bmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6
OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250
Tm90UmVhZHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzQW5k
Q2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jiwg
Rm9udFNtb290aGluZ01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBkcmF3VGV4
dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50Jiwg
dW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxs
b3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
dG8gPSBzdGQ6Om51bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENh
Y2hlRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQotICAgIHsKLSAgICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBu
dW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgfQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZs
b2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xp
bmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGlu
ZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7CiAgICAgdmlydHVhbCB2b2lk
IGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBm
YWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSA9IDA7CiAKLSAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCi0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKLSAgICBib29sIGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJuICht
X3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVy
cygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3Vu
ZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwogCi0gICAgLy8gRm9j
dXMgUmluZ3MKKyAgICAvLyBDb21wYXRpYmxlIEltYWdlQnVmZmVyCiAKLSAgICB2aXJ0dWFsIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpID0gMDsKLSAgICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxl
bWVudGF0aW9uPyBPciBlbHNld2hlcmU/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwg
dm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYg
bmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wm
IG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKLSNlbmRpZgorICAgIEludFNpemUgY29t
cGF0aWJsZUltYWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKIAotICAgIC8v
IFRyYW5zZm9ybXMKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0Owog
Ci0gICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsgcywgcyB9KTsgfQotICAgIHZpcnR1
YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJv
dGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwotICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsgfQotICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgdHJhbnNsYXRl
KHAueCgpLCBwLnkoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0
ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2Nh
bGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpu
dWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVk
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsg
MSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQs
IHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25l
ZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJp
bmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxs
b3B0KSBjb25zdDsKIAotICAgIGVudW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsKLSAgICB2aXJ0
dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJ
bmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0ID0gMDsKKyAgICAvLyBQaXhlbCBTbmFwcGluZwogCi0g
ICAgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRo
ZSBjb250ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgotICAgIC8vIGFjdGluZyBh
cyBhIGJhc2UtbGV2ZWwgY29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFj
dG9yKTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsK
KyAgICBlbnVtIFJvdW5kaW5nTW9kZSB7CisgICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAg
IFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucworICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qg
cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3Vu
ZEFsbFNpZGVzKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGlu
ZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQg
c3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKIAogICAgIC8vIExpbmtzCiAKKyAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVj
dCYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBT
dHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRkRGVzdGlu
YXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KIAotICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotCi0gICAgLy8gQ29udGVudGZ1bCBQYWludCBEZXRlY3Rpb24KKyNpZiBVU0UoQ0cpCisg
ICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdoYXQsIGFu
ZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2b2lkIHNl
dElzQ0FMYXllckNvbnRleHQoYm9vbCkgeyB9CisgICAgdmlydHVhbCBib29sIGlzQ0FMYXllckNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBzZXRDb250ZW50ZnVs
UGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAg
ICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRm
dWxQYWludERldGVjdGVkOyB9CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEgR3JhcGhpY3ND
b250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQgb2ZmIHRoZSBj
b250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSB7
IH0KKyNlbmRpZgogCiAgICAgLy8gRklYTUU6IE5vdGhpbmcgaW4gdGhpcyBzZWN0aW9uIGJlbG9u
Z3MgaGVyZSwgYW5kIHNob3VsZCBiZSBtb3ZlZCBlbHNld2hlcmUuCiAjaWYgT1MoV0lORE9XUykK
QEAgLTU0NiwxMCArMzUyLDcgQEAgcHVibGljOgogICAgIC8vIHB1dCBjb2RlIHNoYXJlZCBiZXR3
ZWVuIFdpbmRvd3MgQ0cgYW5kIFdpbmRvd3MgQ2Fpcm8gYmFja2VuZHMuCiAgICAgdmlydHVhbCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgotCi1wcml2YXRlOgotICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQorICAgIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29uc3Qg
RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVj
dCYpOwpAQCAtNTYxLDE5MSArMzY0LDE3IEBAIHByb3RlY3RlZDoKICAgICBmbG9hdCBkYXNoZWRM
aW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lk
dGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdDsKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2Vu
dGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVy
V2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29uc3Q7CiAKLSAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwotCiBwcml2YXRlOgorICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGUgbV9sYXN0QXBwbGllZFN0YXRlOwogICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRTdGF0
ZSwgMT4gbV9zdGFjazsKIAogICAgIHVuc2lnbmVkIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCB7
IDAgfTsKICAgICBib29sIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgeyBmYWxzZSB9OwogfTsK
IAotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRl
eHQuc2F2ZSgpOwotICAgIH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcigp
Ci0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29u
dGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAg
ICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQuc2F2ZSgp
OwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJl
c3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAg
ICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7
Ci0gICAgfQotICAgIAotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuICZtX2NvbnRleHQ7IH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29u
dGV4dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Ci19OwotCi1jbGFzcyBUcmFuc3BhcmVu
Y3lMYXllclNjb3BlIHsKLXB1YmxpYzoKLSAgICBUcmFuc3BhcmVuY3lMYXllclNjb3BlKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxwaGEsIGJvb2wgYmVnaW5MYXllciA9IHRydWUp
Ci0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9hbHBoYShhbHBoYSkK
LSAgICAgICAgLCBtX2JlZ2FuTGF5ZXIoYmVnaW5MYXllcikKLSAgICB7Ci0gICAgICAgIGlmIChi
ZWdpbkxheWVyKQotICAgICAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
bV9hbHBoYSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYmVnaW5MYXllcihmbG9hdCBhbHBoYSkK
LSAgICB7Ci0gICAgICAgIG1fYWxwaGEgPSBhbHBoYTsKLSAgICAgICAgbV9jb250ZXh0LmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7Ci0gICAgICAgIG1fYmVnYW5MYXllciA9IHRydWU7
Ci0gICAgfQotICAgIAotICAgIH5UcmFuc3BhcmVuY3lMYXllclNjb3BlKCkKLSAgICB7Ci0gICAg
ICAgIGlmIChtX2JlZ2FuTGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQuZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2Nv
bnRleHQ7Ci0gICAgZmxvYXQgbV9hbHBoYTsKLSAgICBib29sIG1fYmVnYW5MYXllcjsKLX07Ci0K
LWNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyIHsKLXB1YmxpYzoKLSAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9zdGFja1NpemUoY29u
dGV4dC5zdGFja1NpemUoKSkKLSAgICB7IH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250ZXh0U3Rh
dGVTdGFja0NoZWNrZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC5zdGFja1NpemUo
KSAhPSBtX3N0YWNrU2l6ZSkKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250
ZXh0ICVwIHN0YWNrIGNoYW5nZWQgYnkgJWQiLCAmbV9jb250ZXh0LCAoaW50KW1fY29udGV4dC5z
dGFja1NpemUoKSAtIChpbnQpbV9zdGFja1NpemUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBH
cmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKLX07
Ci0KLWNsYXNzIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0
eVRvVXNlKQotICAgICAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkKLSAg
ICAgICAgLCBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eShncmFwaGljc0NvbnRleHQuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQotICAgICAgICAsIG1faW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2VkKGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UgIT0gSW50ZXJwb2xhdGlvblF1YWxp
dHk6OkRlZmF1bHQgJiYgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gaW50ZXJwb2xh
dGlvblF1YWxpdHlUb1VzZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFs
aXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSk7Ci0gICAgfQotCi0gICAg
ZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBzdGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFsaXR5PiBpbnRl
cnBvbGF0aW9uUXVhbGl0eSkKLSAgICAgICAgOiBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIoZ3JhcGhpY3NDb250ZXh0LCBpbnRlcnBvbGF0aW9uUXVhbGl0eSA/IGludGVycG9sYXRpb25R
dWFsaXR5LnZhbHVlKCkgOiBncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICB+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkKLSAg
ICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
bV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBH
cmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0OwotICAgIEludGVycG9sYXRpb25RdWFs
aXR5IG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5OwotICAgIGJvb2wgbV9pbnRlcnBvbGF0
aW9uUXVhbGl0eUNoYW5nZWQ7Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLW5hbWVz
cGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVl
czwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKLSAgICBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9u
UGhyYXNlV2l0aEFsdGVybmF0aXZlcywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6TW9kZTo6U3BlbGxpbmcsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU6OkdyYW1tYXIsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
Ok1vZGU6OkF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlcwotICAgID47Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VHcmFkaWVudENoYW5nZSwKLSAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlUGF0dGVybkNo
YW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Rmls
bEdyYWRpZW50Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpGaWxsUGF0dGVybkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLAotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VDb2xvckNoYW5nZSwKLSAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGVDaGFu
Z2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxD
b2xvckNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6RmlsbFJ1bGVDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlNoYWRvd0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UsCi0gICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkFscGhhQ2hhbmdlLAotICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVPcGVyYXRp
b25DaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkJsZW5kTW9kZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UsCi0gICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzQ2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlLAotICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICAgICAgLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZUNo
YW5nZQotI2VuZGlmCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8
V2ViQ29yZTo6U3Ryb2tlU3R5bGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAot
ICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpOb1N0
cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6U29saWRTdHJva2UsCi0gICAgV2ViQ29y
ZTo6U3Ryb2tlU3R5bGU6OkRvdHRlZFN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6
RGFzaGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEb3VibGVTdHJva2UsCi0g
ICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OldhdnlTdHJva2UKLSAgICA+OwotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU+IHsKLSAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01v
ZGUsCi0gICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZTo6RmlsbCwKLSAgICAgICAgV2Vi
Q29yZTo6VGV4dERyYXdpbmdNb2RlOjpTdHJva2UKLSAgICA+OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFlZTJhMDRmNDE1M2E3YjQzMDgxN2I3M2EyNWExYmI2N2Y1NDll
YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRTdGF0ZS5jcHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0
IENoYW5nZUZsYWdzJiBjaGFuZ2VGbGFncywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFs
Q1RNKQorICAgIDogbV9jbGlwQm91bmRzKGluaXRpYWxDVE0ubWFwUmVjdChpbml0aWFsQ2xpcCkp
CisgICAgLCBtX2NoYW5nZUZsYWdzKGNoYW5nZUZsYWdzKQorICAgICwgbV9jdG0oaW5pdGlhbENU
TSkKK3sKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwQm91bmRzKCkg
Y29uc3QKK3sKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gbV9jdG0uaW52ZXJzZSgpKQorICAgICAg
ICByZXR1cm4gaW52ZXJzZS0+bWFwUmVjdChtX2NsaXBCb3VuZHMpOworCisgICAgLy8gSWYgdGhl
IENUTSBpcyBub3QgaW52ZXJ0aWJsZSwgcmV0dXJuIHRoZSBvcmlnaW5hbCByZWN0LgorICAgIC8v
IFRoaXMgbWF0Y2hlcyBDR1JlY3RBcHBseUludmVyc2VBZmZpbmVUcmFuc2Zvcm0gYmVoYXZpb3Iu
CisgICAgcmV0dXJuIG1fY2xpcEJvdW5kczsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6aGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ2hhbmdlRmxhZ3MgcHJpbWl0aXZlQ2hhbmdlRmxhZ3MgeyBDaGFuZ2U6OlN0cm9rZVRoaWNr
bmVzcywgQ2hhbmdlOjpTdHJva2VCcnVzaCwgQ2hhbmdlOjpGaWxsQnJ1c2ggfTsKKworICAgIGlm
IChtX2NoYW5nZUZsYWdzICE9IChtX2NoYW5nZUZsYWdzICYgcHJpbWl0aXZlQ2hhbmdlRmxhZ3Mp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhDaGFuZ2U6OlN0cm9rZUJydXNoKSAmJiAhbV9zdHJva2VCcnVzaC5pc1ByaW1pdGl2ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhD
aGFuZ2U6OkZpbGxCcnVzaCkgJiYgIW1fZmlsbEJydXNoLmlzUHJpbWl0aXZlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVy
KQoreworICAgIGF1dG8gbWVyZ2VDaGFuZ2UgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmIChvdGhlci5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9
IG90aGVyLipwcm9wZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgQVNTRVJUKG1fY2xpcEJvdW5kcyA9PSBvdGhlci5t
X2NsaXBCb3VuZHMpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpDVE0sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgbWVy
Z2VDaGFuZ2UoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6Rmls
bFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmls
bFJ1bGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVy
Z2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpOworICAgIG1lcmdlQ2hhbmdlKENoYW5n
ZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc3Ryb2tlU3R5bGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpMaW5lQ2FwLCAgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAg
ICBtZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2xpbmVKb2luKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisgICAg
bWVyZ2VDaGFuZ2UoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBtZXJnZUNoYW5nZShDaGFu
Z2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2Ryb3BTaGFkb3cpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpBbHBoYSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7CisgICAg
bWVyZ2VDaGFuZ2UoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBtZXJn
ZUNoYW5nZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFu
Z2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3Nob3VsZEFudGlhbGlhcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRTbW9v
dGhGb250cywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9v
dGhGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMsICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMs
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUo
T1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpVc2VEYXJrQXBw
ZWFyYW5jZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBw
ZWFyYW5jZSk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VE
aWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJn
ZURpZmYgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnBy
b3BlcnR5KSB7CisgICAgICAgIGlmICh0aGlzLT4qcHJvcGVydHkgIT0gb3RoZXIuKnByb3BlcnR5
KSB7CisgICAgICAgICAgICB0aGlzLT4qcHJvcGVydHkgPSBvdGhlci4qcHJvcGVydHk7CisgICAg
ICAgICAgICBtX2NoYW5nZUZsYWdzLmFkZChjaGFuZ2UpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIG1lcmdlRGlmZihDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworICAgIAorICAgIG1lcmdlRGlmZihDaGFuZ2U6OkZp
bGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxs
QnJ1c2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZURpZmYo
Q2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZVRoaWNrbmVz
cywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3Mp
OworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZURpZmYoQ2hh
bmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fbGluZUNhcCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAgICBtZXJnZURp
ZmYoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlRGlmZihDaGFuZ2U6Ok1pdGVyTGltaXQsICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KTsKKwor
ICAgIG1lcmdlRGlmZihDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdl
OjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
ZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpOworICAgIG1lcmdlRGlm
ZihDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBtZXJnZURpZmYoQ2hhbmdl
OjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
dGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZEFudGlhbGlh
cywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMp
OworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAgbWVyZ2VEaWZm
KENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VEaWZmKENoYW5n
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpEcmF3THVt
aW5hbmNlTWFzaywgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWlu
YW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgbWVyZ2VEaWZm
KENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCitUZXh0U3RyZWFtJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICBhdXRv
IGR1bXAgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnBy
b3BlcnR5LCBjb25zdCBTdHJpbmcmIG5hbWUpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eShuYW1lLCB0aGlz
LT4qcHJvcGVydHkpOworICAgIH07CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImNoYW5nZS1mbGFn
cyIsIG1fY2hhbmdlRmxhZ3MudG9SYXcoKSk7CisKKyAgICBkdW1wKENoYW5nZTo6Q1RNLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImN0bSIpOworCisgICAgZHVtcChDaGFuZ2U6OkZpbGxCcnVz
aCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNo
LCAgICAgICAgICAgICAgICAgICAgICJmaWxsLWJydXNoIik7CisgICAgZHVtcChDaGFuZ2U6OkZp
bGxSdWxlLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmls
bFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICJmaWxsLXJ1bGUiKTsKKworICAgIGR1bXAoQ2hh
bmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3N0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAic3Ryb2tlLWJydXNoIik7CisgICAg
ZHVtcChDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICJzdHJva2UtdGhpY2tu
ZXNzIik7CisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgICJz
dHJva2Utc3R5bGUiKTsKKworICAgIGR1bXAoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXAsICAgICAgICAgICAgICAg
ICAgICAgICAibGluZS1jYXAiKTsKKyAgICBkdW1wKENoYW5nZTo6TGluZURhc2gsICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCwgICAgICAgICAg
ICAgICAgICAgICAgImxpbmUtZGFzaCIpOworICAgIGR1bXAoQ2hhbmdlOjpMaW5lSm9pbiwgICAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luLCAgICAg
ICAgICAgICAgICAgICAgICAibGluZS1qb2luIik7CisgICAgZHVtcChDaGFuZ2U6Ok1pdGVyTGlt
aXQsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1p
dCwgICAgICAgICAgICAgICAgICAgICJtaXRlci1saW1pdCIpOworCisgICAgZHVtcChDaGFuZ2U6
OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
Y29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgICJjb21wb3NpdGUtbW9kZSIpOworICAgIGR1
bXAoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2Ryb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAiZHJvcC1zaGFkb3ciKTsK
KworICAgIGR1bXAoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2FscGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaGEi
KTsKKyAgICBkdW1wKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgImltYWdl
LWludGVycG9sYXRpb24tcXVhbGl0eSIpOworICAgIGR1bXAoQ2hhbmdlOjpUZXh0RHJhd2luZ01v
ZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9k
ZSwgICAgICAgICAgICAgICAidGV4dC1kcmF3aW5nLW1vZGUiKTsKKworICAgIGR1bXAoQ2hhbmdl
OjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICAic2hvdWxkLWFudGlhbGlhcyIpOworICAg
IGR1bXAoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAic2hvdWxkLXNtb290
aC1mb250cyIpOworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMs
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywg
ICAic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIik7CisgICAgZHVtcChDaGFuZ2U6OlNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICJzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIik7
CisgICAgZHVtcChDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgICJkcmF3LWx1
bWluYW5jZS1tYXNrIik7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBkdW1w
KENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgInVzZS1kYXJrLWFwcGVhcmFu
Y2UiKTsKKyNlbmRpZgorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQorewor
ICAgIHJldHVybiBzdGF0ZS5kdW1wKHRzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dFN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY5ODY3MzMyYjQwZjA1OWJhZmEzMGNkNjQ4ZTIyMTNm
ZGI2YTEzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmgKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5j
bHVkZSAiU291cmNlQnJ1c2guaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0Nv
bnRleHRTdGF0ZSB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDaGFuZ2UgOiB1aW50MzJfdCB7
CisgICAgICAgIENUTSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKKworICAgICAg
ICBGaWxsQnJ1c2ggICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIEZpbGxSdWxl
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwKKworICAgICAgICBTdHJva2VCcnVzaCAgICAg
ICAgICAgICAgICAgPSAxIDw8IDMsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzcyAgICAgICAgICAg
ICA9IDEgPDwgNCwKKyAgICAgICAgU3Ryb2tlU3R5bGUgICAgICAgICAgICAgICAgID0gMSA8PCA1
LAorCisgICAgICAgIExpbmVDYXAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNiwKKyAgICAg
ICAgTGluZURhc2ggICAgICAgICAgICAgICAgICAgID0gMSA8PCA3LAorICAgICAgICBMaW5lSm9p
biAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDgsCisgICAgICAgIE1pdGVyTGltaXQgICAgICAg
ICAgICAgICAgICA9IDEgPDwgOSwKKworICAgICAgICBDb21wb3NpdGVNb2RlICAgICAgICAgICAg
ICAgPSAxIDw8IDEwLAorICAgICAgICBEcm9wU2hhZG93ICAgICAgICAgICAgICAgICAgPSAxIDw8
IDExLAorCisgICAgICAgIEFscGhhICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTIsCisg
ICAgICAgIEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgICA9IDEgPDwgMTMsCisgICAgICAgIFRl
eHREcmF3aW5nTW9kZSAgICAgICAgICAgICA9IDEgPDwgMTQsCisKKyAgICAgICAgU2hvdWxkQW50
aWFsaWFzICAgICAgICAgICAgID0gMSA8PCAxNSwKKyAgICAgICAgU2hvdWxkU21vb3RoRm9udHMg
ICAgICAgICAgID0gMSA8PCAxNiwKKyAgICAgICAgU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
ID0gMSA8PCAxNywKKyAgICAgICAgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgICAgID0gMSA8PCAx
OCwKKyAgICAgICAgRHJhd0x1bWluYW5jZU1hc2sgICAgICAgICAgID0gMSA8PCAxOSwKKyNpZiBI
QVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgICAgICBVc2VEYXJrQXBwZWFyYW5jZSAgICAg
ICAgICAgPSAxIDw8IDIwLAorI2VuZGlmCisgICAgfTsKKyAgICB1c2luZyBDaGFuZ2VGbGFncyA9
IE9wdGlvblNldDxDaGFuZ2U+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBp
bml0aWFsQ2hhbmdlRmxhZ3MgPSB7IENoYW5nZTo6RmlsbEJydXNoLCBDaGFuZ2U6OlN0cm9rZUJy
dXNoLCBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcyB9OworCisgICAgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcEJvdW5kcywgY29u
c3QgQ2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0g
PSB7IH0pOworCisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNsaXBCb3VuZHMoKSBjb25z
dDsKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fY2xpcEJvdW5kcy5p
bnRlcnNlY3QobV9jdG0ubWFwUmVjdChyZWN0KSk7IH0KKworICAgIENoYW5nZUZsYWdzIGNoYW5n
ZXMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZUZsYWdzOyB9CisgICAgdm9pZCBkaWRBcHBseVN0
YXRlQ2hhbmdlcygpIHsgbV9jaGFuZ2VGbGFncyA9IHsgfTsgfQorCisgICAgQWZmaW5lVHJhbnNm
b3JtIGdldENUTSgpIGNvbnN0IHsgcmV0dXJuIG1fY3RtOyB9CisgICAgdm9pZCBzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0sIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0
QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6Q1RNLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fY3RtLCBjdG0sIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBjb25zdCBTb3Vy
Y2VCcnVzaCYgZmlsbEJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9maWxsQnJ1c2g7IH0KKyAgICB2
b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbEJydXNo
LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoLCB7IGNvbG9yIH0sIGxhc3RBcHBs
aWVkU3RhdGUpOyB9CisgICAgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdy
YWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fZmlsbEJy
dXNoLnNldEdyYWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hh
bmdlRmxhZ3MuYWRkKENoYW5nZTo6RmlsbEJydXNoKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRl
cm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSkgeyBtX2ZpbGxCcnVzaC5zZXRQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNl
VHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisKKyAg
ICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbFJ1bGU7IH0KKyAgICB2
b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlLCBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkZpbGxSdWxlLCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsIGZpbGxSdWxlLCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorCisgICAgY29uc3QgU291cmNlQnJ1c2gmIHN0cm9rZUJydXNoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJva2VCcnVzaDsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkg
eyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZUJydXNoLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc3Ryb2tlQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lk
IHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldEdyYWRpZW50KFdU
Rk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5n
ZTo6U3Ryb2tlQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJu
PiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9z
dHJva2VCcnVzaC5zZXRQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtKTsg
bV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKworICAgIGZsb2F0IHN0
cm9rZVRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlVGhpY2tuZXNzOyB9CisgICAg
dm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6
OlN0cm9rZVRoaWNrbmVzcywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVz
cywgc3Ryb2tlVGhpY2tuZXNzLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgU3Ryb2tlU3R5
bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZVN0eWxlOyB9CisgICAgdm9p
ZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTdHJv
a2VTdHlsZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlLCBzdHJva2VTdHls
ZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUNhcDsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3Bl
cnR5KENoYW5nZTo6TGluZUNhcCwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXAsIGxp
bmVDYXAsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBjb25zdCBMaW5lRGFzaCYgbGluZURh
c2goKSBjb25zdCB7IHJldHVybiBtX2xpbmVEYXNoOyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChM
aW5lRGFzaCYmIGxpbmVEYXNoLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVEYXNoLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZURhc2gsIFdURk1vdmUobGluZURhc2gpLCBsYXN0QXBwbGllZFN0YXRlKTsg
fQorCisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9
CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpMaW5l
Sm9pbiwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luLCBsaW5lSm9pbiwgbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KKworICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBt
X21pdGVyTGltaXQ7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVy
dHkoQ2hhbmdlOjpNaXRlckxpbWl0LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1p
dCwgbWl0ZXJMaW1pdCwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBDb21wb3NpdGVN
b2RlIGNvbXBvc2l0ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU1vZGU7IH0KKyAg
ICB2b2lkIHNldENvbXBvc2l0ZU1vZGUoQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2RlLCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShD
aGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVN
b2RlLCBjb21wb3NpdGVNb2RlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIGNvbnN0
IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX2Ryb3BTaGFkb3c7IH0K
KyAgICB2b2lkIHNldERyb3BTaGFkb3coY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdywgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHko
Q2hhbmdlOjpEcm9wU2hhZG93LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdywg
ZHJvcFNoYWRvdywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGZsb2F0IGFscGhhKCkgY29u
c3QgeyByZXR1cm4gbV9hbHBoYTsgfQorICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5
KENoYW5nZTo6QWxwaGEsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgYWxwaGEsIGxh
c3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHksICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5LCBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorICAgIAorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9CisgICAgdm9pZCBzZXRUZXh0RHJh
d2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlLCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6
OlRleHREcmF3aW5nTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9k
ZSwgdGV4dERyYXdpbmdNb2RlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgYm9vbCBzaG91
bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEFudGlhbGlhczsgfQorICAgIHZv
aWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlNo
b3VsZEFudGlhbGlhcywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcywg
c2hvdWxkQW50aWFsaWFzLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgYm9vbCBzaG91bGRT
bW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU21vb3RoRm9udHM7IH0KKyAgICB2
b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5n
ZTo6U2hvdWxkU21vb3RoRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9v
dGhGb250cywgc2hvdWxkU21vb3RoRm9udHMsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBi
b29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsIGxhc3RB
cHBsaWVkU3RhdGUpOyB9CisKKyAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29u
c3QgeyByZXR1cm4gbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIHZvaWQgc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hh
bmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3No
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmF3THVtaW5hbmNlTWFzazsgfQorICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1h
c2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxh
c3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrLCBkcmF3THVtaW5hbmNl
TWFzaywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlRGFy
a0FwcGVhcmFuY2U7IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRl
KSB7IHNldFByb3BlcnR5KENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgdXNlRGFya0FwcGVhcmFuY2UsIGxhc3RBcHBs
aWVkU3RhdGUpOyB9CisjZW5kaWYKKworICAgIGJvb2wgaGFzT25seVByaW1pdGl2ZUNoYW5nZXMo
KSBjb25zdDsKKyAgICB2b2lkIG1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgb3RoZXIpOworICAgIHZvaWQgbWVyZ2VEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgb3RoZXIpOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBkdW1wKFdURjo6VGV4dFN0cmVhbSYp
IGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZXRQcm9wZXJ0eShDaGFuZ2UgY2hh
bmdlLCBUIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHksIGNvbnN0IFQmIHZhbHVlLCBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLT4qcHJvcGVydHkgPT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IHZhbHVlOworICAgICAgICBtX2NoYW5nZUZsYWdzLnNl
dChjaGFuZ2UsIGxhc3RBcHBsaWVkU3RhdGUuKnByb3BlcnR5ICE9IHRoaXMtPipwcm9wZXJ0eSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldFByb3BlcnR5
KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgVCYmIHZh
bHVlLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkKKyAgICB7
CisgICAgICAgIGlmICh0aGlzLT4qcHJvcGVydHkgPT0gdmFsdWUpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IFdURk1vdmUodmFsdWUpOworICAgICAgICBt
X2NoYW5nZUZsYWdzLnNldChjaGFuZ2UsIGxhc3RBcHBsaWVkU3RhdGUuKnByb3BlcnR5ICE9IHRo
aXMtPipwcm9wZXJ0eSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IG1fY2xpcEJvdW5kczsKKwor
ICAgIENoYW5nZUZsYWdzIG1fY2hhbmdlRmxhZ3M7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9j
dG07CisKKyAgICBTb3VyY2VCcnVzaCBtX2ZpbGxCcnVzaCB7IENvbG9yOjpibGFjayB9OworICAg
IFdpbmRSdWxlIG1fZmlsbFJ1bGUgeyBXaW5kUnVsZTo6Tm9uWmVybyB9OworCisgICAgU291cmNl
QnJ1c2ggbV9zdHJva2VCcnVzaCB7IENvbG9yOjpibGFjayB9OworICAgIGZsb2F0IG1fc3Ryb2tl
VGhpY2tuZXNzIHsgMCB9OworICAgIFN0cm9rZVN0eWxlIG1fc3Ryb2tlU3R5bGUgeyBTb2xpZFN0
cm9rZSB9OworCisgICAgTGluZUNhcCBtX2xpbmVDYXAgeyBMaW5lQ2FwOjpCdXR0IH07CisgICAg
TGluZURhc2ggbV9saW5lRGFzaDsKKyAgICBMaW5lSm9pbiBtX2xpbmVKb2luIHsgTGluZUpvaW46
Ok1pdGVyIH07CisgICAgZmxvYXQgbV9taXRlckxpbWl0IHsgMCB9OworCisgICAgQ29tcG9zaXRl
TW9kZSBtX2NvbXBvc2l0ZU1vZGUgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgQmxl
bmRNb2RlOjpOb3JtYWwgfTsKKyAgICBEcm9wU2hhZG93IG1fZHJvcFNoYWRvdzsKKworICAgIGZs
b2F0IG1fYWxwaGEgeyAxIH07CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgfTsKKyAgICBU
ZXh0RHJhd2luZ01vZGVGbGFncyBtX3RleHREcmF3aW5nTW9kZSB7IFRleHREcmF3aW5nTW9kZTo6
RmlsbCB9OworCisgICAgYm9vbCBtX3Nob3VsZEFudGlhbGlhcyB7IHRydWUgfTsKKyAgICBib29s
IG1fc2hvdWxkU21vb3RoRm9udHMgeyB0cnVlIH07CisgICAgYm9vbCBtX3Nob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kcmF3THVtaW5hbmNlTWFzayB7IGZhbHNlIH07Cisj
aWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIG1fdXNlRGFya0FwcGVhcmFu
Y2UgeyBmYWxzZSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9p
ZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7
CisgICAgYXV0byBlbmNvZGUgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KGNoYW5nZSkpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHRoaXMtPipwcm9wZXJ0eTsKKyAgICB9
OworCisgICAgZW5jb2RlciA8PCBtX2NsaXBCb3VuZHM7CisKKyAgICBlbmNvZGVyIDw8IG1fY2hh
bmdlRmxhZ3M7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKTsKKworICAgIGVuY29kZShDaGFu
Z2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsQnJ1c2gpOworICAgIGVuY29kZShDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBl
bmNvZGUoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZVRo
aWNrbmVzcywgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VU
aGlja25lc3MpOworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBlbmNv
ZGUoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZUNhcCk7CisgICAgZW5jb2RlKENoYW5nZTo6TGluZURhc2gsICAgICAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAg
ICBlbmNvZGUoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIGVuY29kZShDaGFuZ2U6Ok1pdGVyTGlt
aXQsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxp
bWl0KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBlbmNvZGUo
Q2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpBbHBoYSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpOworICAg
IGVuY29kZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBlbmNvZGUo
Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIGVuY29kZShDaGFuZ2U6OlNob3VsZEFu
dGlhbGlhcywgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRB
bnRpYWxpYXMpOworICAgIGVuY29kZShDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAg
ZW5jb2RlKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgZW5jb2Rl
KENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpE
cmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
ZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAg
ZW5jb2RlKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4gR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGF1dG8g
ZGVjb2RlID0gWyZdKEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ2hhbmdlIGNoYW5nZSwg
YXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmICghc3Rh
dGUubV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAgICAgdXNpbmcgUHJvcGVydHlUeXBlID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVf
cmVmZXJlbmNlPGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4oKS4q
cHJvcGVydHkpPjo6dHlwZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxQcm9wZXJ0eVR5cGU+IHZh
bHVlOworICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN0YXRlLipwcm9wZXJ0eSA9ICp2YWx1
ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBjbGlwQm91bmRzOworICAgIGRlY29kZXIgPj4gY2xpcEJvdW5kczsKKyAgICBpZiAo
IWNsaXBCb3VuZHMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPENoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKKyAgICBkZWNvZGVyID4+IGNoYW5nZUZs
YWdzOworICAgIGlmICghY2hhbmdlRmxhZ3MpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZSgqY2xpcEJvdW5kcywgKmNoYW5nZUZs
YWdzKTsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNUTSwgICAgICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpGaWxsQnJ1
c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gp
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBD
aGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2ZpbGxSdWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICgh
ZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0
cm9rZVN0eWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVj
b2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2xpbmVDYXApKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpMaW5lSm9pbiwgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbikpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0
ZXJMaW1pdCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29k
ZShzdGF0ZSwgQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkFscGhh
LCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hh
bmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hv
dWxkQW50aWFsaWFzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRl
Y29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cykpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29k
ZShzdGF0ZSwgQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RHJhd0x1bWluYW5j
ZU1hc2ssICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1h
c2spKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6VXNlRGFya0FwcGVhcmFu
Y2UsICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2Up
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworI2VuZGlmCisKKyAgICByZXR1cm4gc3Rh
dGU7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNl
IFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Cisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCisgICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTSwKKworICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1c2gsCisgICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxSdWxlLAorCisgICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoLAorICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25l
c3MsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9r
ZVN0eWxlLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkxpbmVDYXAsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkxpbmVEYXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpMaW5lSm9pbiwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6TWl0ZXJMaW1pdCwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpDb21wb3NpdGVNb2RlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpEcm9wU2hhZG93LAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkFscGhhLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LAorICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsCisKKyAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFs
aWFzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91
bGRTbW9vdGhGb250cywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLAorICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywKKyAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1h
c2sKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgICAgICAsIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlCisjZW5kaWYKKyAg
ICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjcyMTMyODUyNjFlNjkwY2EzMDYwZDdlMDI2ZTUwZTUyZWVhNTkwZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAg
ICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZl
QW5kUmVzdG9yZSkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAg
ICAgICAgbV9jb250ZXh0LnNhdmUoKTsKKyAgICB9CisgICAgCisgICAgfkdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAg
ICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNhdmUo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKKyAgICAgICAgbV9j
b250ZXh0LnNhdmUoKTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7CisgICAgfQor
CisgICAgdm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0
b3JlKTsKKyAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgbV9zYXZlQW5kUmVz
dG9yZSA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQo
KSBjb25zdCB7IHJldHVybiAmbV9jb250ZXh0OyB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3ND
b250ZXh0JiBtX2NvbnRleHQ7CisgICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKworY2xh
c3MgVHJhbnNwYXJlbmN5TGF5ZXJTY29wZSB7CitwdWJsaWM6CisgICAgVHJhbnNwYXJlbmN5TGF5
ZXJTY29wZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IGFscGhhLCBib29sIGJlZ2lu
TGF5ZXIgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1f
YWxwaGEoYWxwaGEpCisgICAgICAgICwgbV9iZWdhbkxheWVyKGJlZ2luTGF5ZXIpCisgICAgewor
ICAgICAgICBpZiAoYmVnaW5MYXllcikKKyAgICAgICAgICAgIG1fY29udGV4dC5iZWdpblRyYW5z
cGFyZW5jeUxheWVyKG1fYWxwaGEpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJlZ2luTGF5ZXIo
ZmxvYXQgYWxwaGEpCisgICAgeworICAgICAgICBtX2FscGhhID0gYWxwaGE7CisgICAgICAgIG1f
Y29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1fYWxwaGEpOworICAgICAgICBtX2JlZ2Fu
TGF5ZXIgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICB+VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSgp
CisgICAgeworICAgICAgICBpZiAobV9iZWdhbkxheWVyKQorICAgICAgICAgICAgbV9jb250ZXh0
LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNz
Q29udGV4dCYgbV9jb250ZXh0OworICAgIGZsb2F0IG1fYWxwaGE7CisgICAgYm9vbCBtX2JlZ2Fu
TGF5ZXI7Cit9OworCitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlciB7Citw
dWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1f
c3RhY2tTaXplKGNvbnRleHQuc3RhY2tTaXplKCkpCisgICAgeyB9CisKKyAgICB+R3JhcGhpY3ND
b250ZXh0U3RhdGVTdGFja0NoZWNrZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC5z
dGFja1NpemUoKSAhPSBtX3N0YWNrU2l6ZSkKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiR3Jh
cGhpY3NDb250ZXh0ICVwIHN0YWNrIGNoYW5nZWQgYnkgJWQiLCAmbV9jb250ZXh0LCAoaW50KW1f
Y29udGV4dC5zdGFja1NpemUoKSAtIChpbnQpbV9zdGFja1NpemUpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICB1bnNpZ25lZCBtX3N0YWNr
U2l6ZTsKK307CisKK2NsYXNzIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0
aW9uUXVhbGl0eVRvVXNlKQorICAgICAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29u
dGV4dCkKKyAgICAgICAgLCBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eShncmFwaGljc0Nv
bnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQorICAgICAgICAsIG1faW50ZXJwb2xh
dGlvblF1YWxpdHlDaGFuZ2VkKGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UgIT0gSW50ZXJwb2xh
dGlvblF1YWxpdHk6OkRlZmF1bHQgJiYgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkgIT0g
aW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ludGVycG9s
YXRpb25RdWFsaXR5Q2hhbmdlZCkKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldElt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSk7CisgICAg
fQorCisgICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBzdGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFs
aXR5PiBpbnRlcnBvbGF0aW9uUXVhbGl0eSkKKyAgICAgICAgOiBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIoZ3JhcGhpY3NDb250ZXh0LCBpbnRlcnBvbGF0aW9uUXVhbGl0eSA/IGludGVy
cG9sYXRpb25RdWFsaXR5LnZhbHVlKCkgOiBncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKQorICAgIHsKKyAgICB9CisKKyAgICB+SW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hh
bmdlZCkKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkobV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0OworICAgIEludGVycG9s
YXRpb25RdWFsaXR5IG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5OworICAgIGJvb2wgbV9p
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5
cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
Y3BwCmluZGV4IDE1ZGYxZGZkYjZmM2ExNmFkNWVhZjY0NzI2MWZjZmM0YjdhOTNhYjQuLjA1NjAx
NzU4ZjE3NWEyNzg5OGE1NWIzYmQ0YTlkMGI4YjcyMDk2OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0xNjYsNiArMTY2
LDExIEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVDYXAgY2Fw
U3R5bGUpCiAgICAgcmV0dXJuIHRzOwogfQogCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBMaW5lRGFzaCkKK3sKKyAgICByZXR1cm4gdHM7Cit9CisKIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVKb2luIGpvaW5TdHlsZSkKIHsKICAgICBz
d2l0Y2ggKGpvaW5TdHlsZSkgewpAQCAtMTgyLDQgKzE4NywzMCBAQCBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBqb2luU3R5bGUpCiAgICAgcmV0dXJuIHRz
OwogfQogCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJbnRlcnBvbGF0
aW9uUXVhbGl0eSkKK3sKKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIFRleHREcmF3aW5nTW9kZSkKK3sKKyAgICByZXR1cm4gdHM7Cit9
CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU1vZGUg
Y29tcG9zaXRlTW9kZSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRp
b24iLCBjb21wb3NpdGVNb2RlLm9wZXJhdGlvbik7CisgICAgdHMuZHVtcFByb3BlcnR5KCJibGVu
ZC1tb2RlIiwgY29tcG9zaXRlTW9kZS5ibGVuZE1vZGUpOworICAgIHJldHVybiB0czsKK30KKwor
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJvcFNoYWRvdyYg
ZHJvcFNoYWRvdykKK3sKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBkcm9w
U2hhZG93Lm9mZnNldCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctYmx1ciIsIGRyb3BT
aGFkb3cuYmx1clJhZGl1cyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctY29sb3IiLCBk
cm9wU2hhZG93LmNvbG9yKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvd3MtdXNlLWxlZ2Fj
eS1yYWRpdXMiLCBkcm9wU2hhZG93LnJhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVn
YWN5KTsKKyAgICByZXR1cm4gdHM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAppbmRleCA0
ZDIwNGU5N2U1YzU0NGQ3NzZiZmE3ZjMwYWFjYzFiN2M0NjNlMGUwLi4zODMxYjIxODEzZTZkYjdl
MzI5MjliZDFlODhhNTg0OTMwMGI0OGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw5IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIKKyNpbmNs
dWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9F
bnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTczLDYgKzc2LDc5IEBA
IGVudW0gY2xhc3MgQmxlbmRNb2RlIDogdWludDhfdCB7CiAgICAgUGx1c0xpZ2h0ZXIKIH07CiAK
K3N0cnVjdCBDb21wb3NpdGVNb2RlIHsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBvcGVyYXRpb247
CisgICAgQmxlbmRNb2RlIGJsZW5kTW9kZTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
b21wb3NpdGVNb2RlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYXRpb24gPT0g
b3RoZXIub3BlcmF0aW9uICYmIGJsZW5kTW9kZSA9PSBvdGhlci5ibGVuZE1vZGU7CisgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxD
b21wb3NpdGVNb2RlPiBkZWNvZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgQ29tcG9zaXRlTW9kZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgZW5jb2RlciA8PCBvcGVyYXRpb247CisgICAgZW5jb2RlciA8PCBibGVuZE1vZGU7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU1v
ZGU+IENvbXBvc2l0ZU1vZGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6
b3B0aW9uYWw8Q29tcG9zaXRlT3BlcmF0b3I+IG9wZXJhdGlvbjsKKyAgICBkZWNvZGVyID4+IG9w
ZXJhdGlvbjsKKyAgICBpZiAoIW9wZXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7CisgICAgZGVjb2Rl
ciA+PiBibGVuZE1vZGU7CisgICAgaWYgKCFibGVuZE1vZGUpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICpvcGVyYXRpb24sICpibGVuZE1vZGUgfSB9Owor
fQorCitzdHJ1Y3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgeworICAgIGVudW0gY2xhc3MgTW9k
ZSA6IHVpbnQ4X3QgeworICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0
ZXJuYXRpdmVzLAorICAgICAgICBTcGVsbGluZywKKyAgICAgICAgR3JhbW1hciwKKyAgICAgICAg
QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKKyAgICAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVz
CisgICAgfSBtb2RlOworICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9
OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERv
Y3VtZW50TWFya2VyTGluZVN0eWxlPiBkZWNvZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbW9kZTsKKyAgICBlbmNvZGVy
IDw8IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
Pgorc3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8
TW9kZT4gbW9kZTsKKyAgICBkZWNvZGVyID4+IG1vZGU7CisgICAgaWYgKCFtb2RlKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRV
c2VEYXJrQXBwZWFyYW5jZTsKKyAgICBkZWNvZGVyID4+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNl
OworICAgIGlmICghc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFu
Y2UgfSB9OworfQorCiBlbnVtIGNsYXNzIEdyYWRpZW50U3ByZWFkTWV0aG9kIDogdWludDhfdCB7
CiAgICAgUGFkLAogICAgIFJlZmxlY3QsCkBAIC05Myw2ICsxNjksNDIgQEAgZW51bSBjbGFzcyBM
aW5lQ2FwIDogdWludDhfdCB7CiAgICAgU3F1YXJlCiB9OwogCitzdHJ1Y3QgTGluZURhc2ggewor
ICAgIERhc2hBcnJheSBkYXNoZXM7CisgICAgZmxvYXQgb2Zmc2V0OworICAgIAorICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxMaW5lRGFzaD4gZGVjb2Rl
KERlY29kZXImKTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZURhc2gm
IGEsIGNvbnN0IExpbmVEYXNoJiBiKQoreworICAgIHJldHVybiBhLmRhc2hlcyA9PSBiLmRhc2hl
cyAmJiBhLm9mZnNldCA9PSBiLm9mZnNldDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
K3ZvaWQgTGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgZGFzaGVzOworICAgIGVuY29kZXIgPDwgb2Zmc2V0OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxMaW5lRGFzaD4gTGluZURhc2g6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RGFzaEFycmF5PiBkYXNoZXM7
CisgICAgZGVjb2RlciA+PiBkYXNoZXM7CisgICAgaWYgKCFkYXNoZXMpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBvZmZzZXQ7CisgICAg
ZGVjb2RlciA+PiBvZmZzZXQ7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7IFdURk1vdmUoKmRhc2hlcyksICpvZmZzZXQgfSB9
OworfQorCiBlbnVtIGNsYXNzIExpbmVKb2luIDogdWludDhfdCB7CiAgICAgTWl0ZXIsCiAgICAg
Um91bmQsCkBAIC0xMDUsNiArMjE3LDc2IEBAIGVudW0gSG9yaXpvbnRhbEFsaWdubWVudCB7CiAg
ICAgQWxpZ25IQ2VudGVyCiB9OwogCisvLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVz
ZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8vIEl0IGhhcyBkaWZmZXJl
bnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2Rl
IDogYm9vbCB7CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisKK3N0cnVjdCBEcm9wU2hh
ZG93IHsKKyAgICBGbG9hdFNpemUgb2Zmc2V0OworICAgIGZsb2F0IGJsdXJSYWRpdXMgeyAwIH07
CisgICAgQ29sb3IgY29sb3I7CisgICAgU2hhZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlIHsgU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OworICAgIAorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29u
c3QgeyByZXR1cm4gY29sb3IuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGlzQmx1cnJlZCgpIGNv
bnN0IHsgcmV0dXJuIGlzVmlzaWJsZSgpICYmIGJsdXJSYWRpdXM7IH0KKyAgICBib29sIGhhc091
dHNldHMoKSBjb25zdCB7IHJldHVybiBpc0JsdXJyZWQoKSB8fCAoaXNWaXNpYmxlKCkgJiYgIW9m
ZnNldC5pc1plcm8oKSk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gZGVjb2RlKERlY29kZXImKTsKK307CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRHJvcFNoYWRvdyYgYSwgY29uc3QgRHJvcFNoYWRv
dyYgYikKK3sKKyAgICByZXR1cm4gYS5vZmZzZXQgPT0gYi5vZmZzZXQgJiYgYS5ibHVyUmFkaXVz
ID09IGIuYmx1clJhZGl1cyAmJiBhLmNvbG9yID09IGIuY29sb3IgJiYgYS5yYWRpdXNNb2RlID09
IGIucmFkaXVzTW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRHJvcFNo
YWRvdzo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBv
ZmZzZXQ7CisgICAgZW5jb2RlciA8PCBibHVyUmFkaXVzOworICAgIGVuY29kZXIgPDwgY29sb3I7
CisgICAgZW5jb2RlciA8PCByYWRpdXNNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
Pgorc3RkOjpvcHRpb25hbDxEcm9wU2hhZG93PiBEcm9wU2hhZG93OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gb2Zmc2V0OworICAgIGRl
Y29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYmx1clJhZGl1czsKKyAgICBkZWNv
ZGVyID4+IGJsdXJSYWRpdXM7CisgICAgaWYgKCFibHVyUmFkaXVzKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7CisgICAgZGVj
b2RlciA+PiBjb2xvcjsKKyAgICBpZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiByYWRpdXNNb2RlOwor
ICAgIGRlY29kZXIgPj4gcmFkaXVzTW9kZTsKKyAgICBpZiAoIXJhZGl1c01vZGUpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICpvZmZzZXQsICpibHVyUmFk
aXVzLCAqY29sb3IsICpyYWRpdXNNb2RlIH0gfTsKK30KKworZW51bSBTdHJva2VTdHlsZSB7Cisg
ICAgTm9TdHJva2UsCisgICAgU29saWRTdHJva2UsCisgICAgRG90dGVkU3Ryb2tlLAorICAgIERh
c2hlZFN0cm9rZSwKKyAgICBEb3VibGVTdHJva2UsCisgICAgV2F2eVN0cm9rZSwKK307CisKIGVu
dW0gVGV4dEJhc2VsaW5lIHsKICAgICBBbHBoYWJldGljVGV4dEJhc2VsaW5lLAogICAgIFRvcFRl
eHRCYXNlbGluZSwKQEAgLTEyMiwxNiArMzA0LDI4IEBAIGVudW0gVGV4dEFsaWduIHsKICAgICBS
aWdodFRleHRBbGlnbgogfTsKIAotU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShXZWJDb3Jl
OjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKLVN0cmluZyBibGVuZE1v
ZGVOYW1lKFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1ib29sIHBhcnNlQmxlbmRNb2RlKGNvbnN0IFN0
cmluZyYsIFdlYkNvcmU6OkJsZW5kTW9kZSYpOwotYm9vbCBwYXJzZUNvbXBvc2l0ZUFuZEJsZW5k
T3BlcmF0b3IoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3ImLCBXZWJD
b3JlOjpCbGVuZE1vZGUmKTsKK2VudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7
CisgICAgRmlsbCA9IDEgPDwgMCwKKyAgICBTdHJva2UgPSAxIDw8IDEsCit9OwogCi1XRUJDT1JF
X0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2Vi
Q29yZTo6QmxlbmRNb2RlKTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcik7Ci1XRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
V2luZFJ1bGUpOwordXNpbmcgVGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERy
YXdpbmdNb2RlPjsKKworU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlKTsKK1N0cmluZyBibGVuZE1vZGVOYW1lKEJsZW5kTW9kZSk7Citib29s
IHBhcnNlQmxlbmRNb2RlKGNvbnN0IFN0cmluZyYsIEJsZW5kTW9kZSYpOworYm9vbCBwYXJzZUNv
bXBvc2l0ZUFuZEJsZW5kT3BlcmF0b3IoY29uc3QgU3RyaW5nJiwgQ29tcG9zaXRlT3BlcmF0b3Im
LCBCbGVuZE1vZGUmKTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYsIEJsZW5kTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29tcG9zaXRlT3BlcmF0b3Ip
OworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0
cmVhbSYsIENvbXBvc2l0ZU1vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEludGVycG9sYXRpb25RdWFsaXR5KTsKIFdFQkNP
UkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBM
aW5lQ2FwKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBMaW5lRGFzaCk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUpvaW4pOworV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFRleHREcmF3aW5n
TW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgV2luZFJ1bGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERyb3BTaGFkb3cmKTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCkBAIC0yMTksNCArNDEzLDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6TGluZUpvaW4+IHsKICAgICA+OwogfTsKIAordGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4geworICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCisgICAgV2ViQ29y
ZTo6U3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xp
ZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAorICAgIFdl
YkNvcmU6OlN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5
bGU6OkRvdWJsZVN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQor
ICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHRE
cmF3aW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdl
YkNvcmU6OlRleHREcmF3aW5nTW9kZSwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2Rl
OjpGaWxsLAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQorICAgID47
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpNb2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKKyAgICBXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNl
V2l0aEFsdGVybmF0aXZlcywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
TW9kZTo6U3BlbGxpbmcsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1v
ZGU6OkdyYW1tYXIsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6
OkF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlcworICAgID47Cit9OworCiB9IC8v
IG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IDRlMDcxZjcyZjM1
YmU4YTU4ZmM0Y2Q1NzdhMTQ1NmRlMTc0NjY4MmMuLjQxYjA1MTFhOGY3OGExNzliMzA0Y2Y4OWQ0
MTAzZTM1ZGUzZTEyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcApAQCAtNDQsNyArNDQs
NyBAQCBJbWFnZURyYXdSZXN1bHQgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRgogewogI2lmIFVTRShORVdfVEhFTUUpIHx8IFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMu
Y29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5z
ZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJs
ZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRy
YW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBz
cmNSZWN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL051bGxHcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL051bGxHcmFwaGljc0NvbnRleHQuaAppbmRleCBiNjIzNjc4ODBlM2U1MzU0YjYxNzExMzQ3
YzlhMTFiNDIyNDY4ODVlLi5kNjdkM2VhMTE1ZDI0ZWZkOTA5ZTAzYWM5YWRlOTNhOGI0NzY0ZmM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhp
Y3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdy
YXBoaWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM4LDg3ICszOCw1NyBAQCBwdWJsaWM6CiAgICAgICAgIERldGVjdGlu
Z0NvbnRlbnRmdWxQYWludAogICAgIH07CiAKLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0KFBhaW50
SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQotICAgICAgICA6IG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zKHJlYXNvbnMpCisgICAgTnVsbEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwLCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgcmVhc29ucykKKyAgICAg
ICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENsaXApCisgICAgICAgICwgbV9wYWludEludmFs
aWRhdGlvblJlYXNvbnMocmVhc29ucykKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFVT
RShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9Ci0gICAg
Ym9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSNl
bmRpZgotCiAgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIGJvb2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpOb25lOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludElu
dmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsgfQogICAgIGJvb2wg
aW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlczsgfQogICAgIGJvb2wgZGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVs
UGFpbnQ7IH0KIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWwgeyB9
Ci0KLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBm
aW5hbCB7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3U3lz
dGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH07Ci0KLSAg
ICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9Ci0K
LSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KLQor
ICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQor
ICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbCB7IH07CiAjaWYgVVNFKENHKQogICAg
IHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBhcHBseUZpbGxQ
YXR0ZXJuKCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwg
eyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
PSAxKSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5h
bCB7IH0KLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFs
IHsgfQotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6
OkV2ZW5PZGQpIGZpbmFsIHsgfQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWwg
eyByZXR1cm4gcmVjdDsgfQotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wgPSBmYWxzZSwgU3Ryb2tl
U3R5bGUgPSBTb2xpZFN0cm9rZSkgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVD
YXApIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxv
YXQpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsIHsgfQot
ICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYp
IGZpbmFsIHsgfQotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIHRy
YW5zbGF0ZShmbG9hdCwgZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVk
ZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHsgfTsgfQotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
IHsgfQorICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWwgeyB9Cisg
ICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsIHsgfQorCiAgICAgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0
aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQogICAgIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNhdmUoKSBmaW5hbCB7
IH0KLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZHJhd1JhaXNlZEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpIGZpbmFs
IHsgfQorICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBj
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsg
fQogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+ID0gc3RkOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUp
IGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFs
IHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYs
IHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQpIGZp
bmFsIHsgfQotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWwg
eyB9CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICAKKyAgICB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7
IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IElt
YWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1
bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgZmluYWwgeyB9CiAKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVk
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KLSAg
ICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBJbWFnZTo6VGlsZVJ1bGUsIElt
YWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7
IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICB2b2lkIGRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYp
IGZpbmFsIHsgfQpAQCAtMTI3LDI4ICs5NywyNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENv
bG9yJikgZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotCi0g
ICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsg
fQotICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBm
aW5hbCB7IH0KLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIEdyYWRpZW50JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1v
ZGU6Ok5vcm1hbCkgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5v
cm1hbCkgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7
IH0KLQorICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29u
c3QgRmxvYXRSZWN0JiwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9CiAjaWYgRU5BQkxFKFZJREVPKQog
ICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JikgZmluYWwgeyB9CiAjZW5kaWYKIAorICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERh
c2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpIGZpbmFsIHsgfQorCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5h
bCB7IHJldHVybiByZWN0OyB9CisKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQogICAg
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLXByaXZhdGU6CiAg
ICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MmVmNGU0MDYxMTdjYzMxMWUxYjJkZjExZTlkNjYzOGM0ODc5
M2ZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KENHKQordXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBzdHJ1Y3QgQ0dDb250ZXh0Owor
I2VsaWYgVVNFKENBSVJPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250
ZXh0Q2Fpcm87Cit9Cit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENhaXJvOworI2Vsc2UKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
ID0gdm9pZDsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAppbmRleCBiYjEzOGI1Mjk3YTUyMWZiZjdkNjkzY2QxMTQxMDQ0MDBmY2Fi
YzRlLi45MDI0ZjVkMWFiZmNlMzgwODE4M2EzYjIzMWZiY2UwZmZiMmZmNDE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkxLDE3
ICsxOTEsMTcgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICB1cGRhdGVTaGFkb3dCbHVy
VmFsdWVzKCk7CiB9CiAKLVNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogbV9jb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAs
IG1fYmx1clJhZGl1cyhzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dCbHVyKQotICAgICwg
bV9vZmZzZXQoc3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyhzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK1NoYWRvd0JsdXI6OlNoYWRvd0Js
dXIoY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdywgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykKKyAgICA6IG1fY29sb3IoZHJvcFNoYWRvdy5jb2xvcikKKyAgICAsIG1fYmx1clJhZGl1
cyhkcm9wU2hhZG93LmJsdXJSYWRpdXMsIGRyb3BTaGFkb3cuYmx1clJhZGl1cykKKyAgICAsIG1f
b2Zmc2V0KGRyb3BTaGFkb3cub2Zmc2V0KQorICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyhzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gQ29yZSBH
cmFwaGljcyBpbmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxy
ZGFyOi8vcHJvYmxlbS84MTAzNDQyPiksCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUg
dGhpcyBidWdneSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0g
ICAgaWYgKHN0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5
KSB7Ci0gICAgICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0
ZS5zaGFkb3dCbHVyKTsKKyAgICBpZiAoZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSkgeworICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9M
ZWdhY3lSYWRpdXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVzKTsKICAgICAgICAgbV9ibHVyUmFkaXVz
ID0gRmxvYXRTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpOwogICAgIH0KICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCmluZGV4IDE0ZmQ4
M2VkZTFhMWJhY2YxNzdmMzMxZWNhZDFhNDMwMjkzZjYwM2EuLjQ1ZDBlNTgzMjljZGVlYWJmYjc4
YTRkNWU2N2FiOGQ4ODFhZTU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmgKQEAgLTM4LDggKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1zdHJ1Y3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNz
IEltYWdlQnVmZmVyOworc3RydWN0IERyb3BTaGFkb3c7CiAKIGNsYXNzIFNoYWRvd0JsdXIgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYWRvd0JsdXIpOwpAQCAtNTIsNyArNTMsNyBAQCBw
dWJsaWM6CiAKICAgICBTaGFkb3dCbHVyKCk7CiAgICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNp
emUmIHJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgYm9vbCBz
aGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKLSAgICBTaGFkb3dCbHVyKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAgU2hhZG93Qmx1cihjb25zdCBEcm9wU2hhZG93Jiwg
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hh
ZG93VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xv
ciYsIGJvb2wgaWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNmFjMTNm
ZDI1YzZmMGY4MDE1ODcyZmYxOWVkMjhhMWZhNTJiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHAKQEAgLTAsMCArMSw4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitTb3VyY2VCcnVzaDo6U291cmNlQnJ1c2goY29uc3QgQ29sb3ImIGNvbG9yLCBz
dGQ6Om9wdGlvbmFsPEJydXNoPiYmIGJydXNoKQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAs
IG1fYnJ1c2goV1RGTW92ZShicnVzaCkpCit7Cit9CisKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYg
U291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8QWZmaW5lVHJhbnNmb3JtPiBpZGVudGl0eTsKKyAgICByZXR1cm4gbV9icnVzaCA/
IG1fYnJ1c2gtPnNwYWNlVHJhbnNmb3JtIDogaWRlbnRpdHkuZ2V0KCk7Cit9CisKK0dyYWRpZW50
KiBTb3VyY2VCcnVzaDo6Z3JhZGllbnQoKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8qIGdyYWRpZW50ID0gc3RkOjpnZXRf
aWY8UmVmPEdyYWRpZW50Pj4oJm1fYnJ1c2gtPmJydXNoKSkKKyAgICAgICAgcmV0dXJuIGdyYWRp
ZW50LT5wdHIoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGF0dGVybiogU291cmNlQnJ1
c2g6OnBhdHRlcm4oKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgaWYgKGF1dG8qIHBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVy
bj4+KCZtX2JydXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBwYXR0ZXJuLT5wdHIoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQoUmVm
PEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNm
b3JtKQoreworICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9y
bSB9OworfQorCit2b2lkIFNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBh
dHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pCit7CisgICAgbV9i
cnVzaCA9IHsgV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKworV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTb3VyY2VCcnVzaCYg
YnJ1c2gpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGJydXNoLmNvbG9yKCkpOwor
CisgICAgaWYgKGF1dG8gZ3JhZGllbnQgPSBicnVzaC5ncmFkaWVudCgpKQorICAgICAgICB0cy5k
dW1wUHJvcGVydHkoImdyYWRpZW50IiwgZ3JhZGllbnQpOworCisgICAgaWYgKGF1dG8gcGF0dGVy
biA9IGJydXNoLnBhdHRlcm4oKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuIiwg
cGF0dGVybik7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNo
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNlMjhkMGMzNDFiNTJhM2U2MDU0ODU3M2M0YzZjOGVjM2VkYjhhYjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5o
CkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJH
cmFkaWVudC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBTb3VyY2VCcnVzaCB7CitwdWJsaWM6CisgICAgc3RydWN0IEJydXNoIHsKKyAgICAg
ICAgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4gYnJ1c2g7CisgICAg
ICAgIEFmZmluZVRyYW5zZm9ybSBzcGFjZVRyYW5zZm9ybTsKKworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEJydXNoPiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIH07CisKKyAgICBTb3VyY2VCcnVzaCgpID0gZGVmYXVsdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBTb3VyY2VCcnVzaChjb25zdCBDb2xvciYsIHN0ZDo6b3B0aW9uYWw8
QnJ1c2g+JiYgPSBzdGQ6Om51bGxvcHQpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3IgY29s
b3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CisKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEJydXNo
PiYgYnJ1c2goKSBjb25zdCB7IHJldHVybiBtX2JydXNoOyB9CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBHcmFkaWVudCogZ3JhZGllbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXR0ZXJu
KiBwYXR0ZXJuKCkgY29uc3Q7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5z
Zm9ybSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworICAgIHZvaWQgc2V0
UGF0dGVybihSZWY8UGF0dGVybj4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5z
Zm9ybSA9IHsgfSk7CisKKyAgICBib29sIGlzUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gIW1f
YnJ1c2ggJiYgbV9jb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKTsgfQorCisgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBkZWNvZGUo
RGVjb2RlciYpOworCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3IgeyBDb2xvcjo6YmxhY2sg
fTsKKyAgICBzdGQ6Om9wdGlvbmFsPEJydXNoPiBtX2JydXNoOworfTsKKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50PiwgUmVmPFBhdHRlcm4+
PiYgYSwgY29uc3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGIp
Cit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8
R3JhZGllbnQ+JiBhR3JhZGllbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBiR3JhZGllbnQg
PSBzdGQ6OmdldF9pZjxSZWY8R3JhZGllbnQ+PigmYikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGFHcmFkaWVudCA9PSAqYkdyYWRpZW50OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgYVBhdHRlcm4pIHsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBiUGF0dGVybiA9IHN0ZDo6Z2V0X2lmPFJlZjxQYXR0ZXJuPj4o
JmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhUGF0dGVybiA9PSAqYlBhdHRlcm47CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICApOworfQorCitpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYSwgY29uc3QgU291cmNlQnJ1
c2g6OkJydXNoJiBiKQoreworICAgIHJldHVybiBhLmJydXNoID09IGIuYnJ1c2ggJiYgYS5zcGFj
ZVRyYW5zZm9ybSA9PSBiLnNwYWNlVHJhbnNmb3JtOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFNvdXJjZUJydXNoJiBhLCBjb25zdCBTb3VyY2VCcnVzaCYgYikKK3sKKyAgICBy
ZXR1cm4gYS5jb2xvcigpID09IGIuY29sb3IoKSAmJiBhLmJydXNoKCkgPT0gYi5icnVzaCgpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBTb3VyY2VCcnVzaDo6QnJ1c2g6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgc3BhY2VU
cmFuc2Zvcm07CisgICAgV1RGOjpzd2l0Y2hPbihicnVzaCwKKyAgICAgICAgWyZdIChjb25zdCBS
ZWY8R3JhZGllbnQ+JiBncmFkaWVudCkgeworICAgICAgICAgICAgZW5jb2RlciA8PCB0cnVlIDw8
IGdyYWRpZW50LmdldCgpOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0
ZXJuPiYgcGF0dGVybikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBmYWxzZSA8PCBwYXR0ZXJu
LmdldCgpOworICAgICAgICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g6OkJydXNoPiBTb3VyY2VCcnVzaDo6QnJ1c2g6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8QWZmaW5lVHJh
bnNmb3JtPiBzcGFjZVRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHNwYWNlVHJhbnNmb3JtOwor
ICAgIGlmICghc3BhY2VUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGhhc0dyYWRpZW50OworICAgIGRlY29kZXIgPj4gaGFz
R3JhZGllbnQ7CisgICAgaWYgKCFoYXNHcmFkaWVudCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAKKyAgICBpZiAoKmhhc0dyYWRpZW50KSB7CisgICAgICAgIGF1dG8gZ3JhZGll
bnQgPSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoIWdyYWRpZW50KQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgeyBXVEZN
b3ZlKCpncmFkaWVudCksICpzcGFjZVRyYW5zZm9ybSB9IH07CisgICAgfQorCisgICAgYXV0byBw
YXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOworICAgIGlmICghcGF0dGVybikKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IFdURk1vdmUoKnBhdHRl
cm4pLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgor
dm9pZCBTb3VyY2VCcnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
ZW5jb2RlciA8PCBtX2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9icnVzaDsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g+IFNvdXJjZUJydXNo
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBj
b2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29sb3IpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8QnJ1
c2g+PiBicnVzaDsKKyAgICBkZWNvZGVyID4+IGJydXNoOworICAgIGlmICghYnJ1c2gpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU291cmNlQnJ1c2goKmNvbG9y
LCBXVEZNb3ZlKCpicnVzaCkpOworfQorCitXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgY29uc3QgU291cmNlQnJ1c2gmKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJv
eEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0Qm94SXRl
cmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBjZjY1YmEyYzEwZTg4ODhkZDQ5
ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGV4dEJveEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRleHRS
dW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0Qm94SXRlcmF0b3Igewor
cHVibGljOgorICAgIFRleHRCb3hJdGVyYXRvcigpCisgICAgICAgIDogbV90ZXh0UnVuKDApCisg
ICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAgVGV4dEJveEl0ZXJhdG9y
KGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBtX3Rl
eHRSdW4odGV4dFJ1bikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0K
KworICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAg
dm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3Qg
eyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRSdW4tPmxlbmd0aCgpOyB9
CisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90ZXh0UnVuKVttX29mZnNl
dF07IH0KKyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBhdEVu
ZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1cnJlbnQoKSk7IH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0ICYmIG1fdGV4
dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09KG90
aGVyKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4dFJ1bjsKKyAgICB1
bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwCmluZGV4IGNhMjVmYjNkOGE4MDFmMzAyZGZlZTFmYmI5ZTY2NTNmYTE2OWY5OGUuLjAwNjYz
OGEzZGMxMGNhZDI0MWRkYjQwMzQ2MDE1NTQxMTdiZWVkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAt
MTgzMyw3ICsxODMzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENo
YW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmEKICAgICAgICAgCiAgICAg
ICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwgc2l6ZSgpKTsKIAotICAg
ICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1fZGlzcGxheUxpc3QsIEdy
YXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7Cisg
ICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4dCgqbV9kaXNwbGF5TGlzdCwg
aW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAgICAgcGFpbnRHcmFwaGljc0xh
eWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSk7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1NmEyM2E1ZmRmYjEwYWZlY2Ey
Y2M5MmE3Mjc5NDU4MTAyZS4uOGFlMWI1ZmE5ZmVlNTMwODM1ZTdmNmEyNTcwN2M4NDM0MTc3MDUy
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC00NDYsMTcgKzQ0NiwxNiBAQCBzdGF0aWMgVmVj
dG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNh
bExpbmUsIGZsb2F0CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAKLXZvaWQgc2V0U3Ryb2tlVGhpY2tu
ZXNzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcykKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJvX3QqIGNyIHBsYXRmb3JtQ29u
dGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQogewotICAgIGNhaXJvX3NldF9saW5lX3dpZHRo
KHBsYXRmb3JtQ29udGV4dC5jcigpLCBzdHJva2VUaGlja25lc3MpOworICAgIGNhaXJvX3NldF9s
aW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIHNldFN0cm9rZVN0eWxl
KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiBjciwgU3Ryb2tlU3R5bGUgc3Ry
b2tlU3R5bGUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkYXNoUGF0dGVybltdID0geyA1
LjAsIDUuMCB9OwogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG90UGF0dGVybltdID0geyAxLjAs
IDEuMCB9OwogCi0gICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKICAgICBz
d2l0Y2ggKHN0cm9rZVN0eWxlKSB7CiAgICAgY2FzZSBOb1N0cm9rZToKICAgICAgICAgLy8gRklY
TUU6IGlzIGl0IHRoZSByaWdodCB3YXkgdG8gZW11bGF0ZSBOb1N0cm9rZT8KQEAgLTQ3NywyOSAr
NDc2LDI5IEBAIHZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRm
b3JtQ29udGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5CiAgICAgfQogfQogCi12b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUp
Cit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiBjciwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGNhaXJv
X3NldF9vcGVyYXRvcihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgdG9DYWlyb09wZXJhdG9yKGNvbXBv
c2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCB0
b0NhaXJvT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBibGVuZE1vZGUpKTsKIH0KIAotdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgYm9vbCBlbmFibGUpCit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190KiBjciwgYm9v
bCBlbmFibGUpCiB7CiAgICAgLy8gV2hlbiB0cnVlLCB1c2UgdGhlIGRlZmF1bHQgQ2Fpcm8gYmFj
a2VuZCBhbnRpYWxpYXMgbW9kZSAodXN1YWxseSB0aGlzCiAgICAgLy8gZW5hYmxlcyBzdGFuZGFy
ZCAnZ3JheXNjYWxlJyBhbnRpYWxpYXNpbmcpOyBmYWxzZSB0byBleHBsaWNpdGx5IGRpc2FibGUK
ICAgICAvLyBhbnRpYWxpYXNpbmcuCi0gICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhwbGF0Zm9ybUNv
bnRleHQuY3IoKSwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJ
QUxJQVNfTk9ORSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhjciwgZW5hYmxlID8gQ0FJUk9f
QU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CiB9CiAKLXZvaWQgc2V0
Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBzZXRDVE0oY2Fpcm9fdCogY3IsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IG1hdHJp
eCA9IHRvQ2Fpcm9NYXRyaXgodHJhbnNmb3JtKTsKLSAgICBjYWlyb19zZXRfbWF0cml4KHBsYXRm
b3JtQ29udGV4dC5jcigpLCAmbWF0cml4KTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNyLCAmbWF0
cml4KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHRDYWlybyYg
cGxhdGZvcm1Db250ZXh0KQorQWZmaW5lVHJhbnNmb3JtIGdldENUTShjYWlyb190KiBjcikKIHsK
ICAgICBjYWlyb19tYXRyaXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRyaXgocGxhdGZvcm1Db250
ZXh0LmNyKCksICZtKTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7CiAgICAgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybShtLnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngwLCBtLnkwKTsKIH0K
IApAQCAtNjIyLDcgKzYyMSw3IEBAIGJvb2wgU2hhZG93U3RhdGU6OmlzUmVxdWlyZWQoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBzZXRMaW5lQ2FwKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIExpbmVDYXAgbGluZUNhcCkKK3ZvaWQgc2V0TGluZUNhcChjYWlyb190KiBjciwgTGluZUNh
cCBsaW5lQ2FwKQogewogICAgIGNhaXJvX2xpbmVfY2FwX3QgY2Fpcm9DYXAgeyB9OwogICAgIHN3
aXRjaCAobGluZUNhcCkgewpAQCAtNjM2LDE4ICs2MzUsMTggQEAgdm9pZCBzZXRMaW5lQ2FwKEdy
YXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVDYXAgbGluZUNhcCkKICAg
ICAgICAgY2Fpcm9DYXAgPSBDQUlST19MSU5FX0NBUF9TUVVBUkU7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBjYWlyb19zZXRfbGluZV9jYXAocGxhdGZvcm1Db250ZXh0LmNyKCksIGNhaXJv
Q2FwKTsKKyAgICBjYWlyb19zZXRfbGluZV9jYXAoY3IsIGNhaXJvQ2FwKTsKIH0KIAotdm9pZCBz
ZXRMaW5lRGFzaChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgc2V0TGluZURhc2goY2Fp
cm9fdCogY3IsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewog
ICAgIGlmIChzdGQ6OmFsbF9vZihkYXNoZXMuYmVnaW4oKSwgZGFzaGVzLmVuZCgpLCBbXShhdXRv
JiBkYXNoKSB7IHJldHVybiAhZGFzaDsgfSkpCi0gICAgICAgIGNhaXJvX3NldF9kYXNoKHBsYXRm
b3JtQ29udGV4dC5jcigpLCAwLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fc2V0X2Rhc2goY3IsIDAs
IDAsIDApOwogICAgIGVsc2UKLSAgICAgICAgY2Fpcm9fc2V0X2Rhc2gocGxhdGZvcm1Db250ZXh0
LmNyKCksIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCksIGRhc2hPZmZzZXQpOworICAgICAg
ICBjYWlyb19zZXRfZGFzaChjciwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgZGFzaE9m
ZnNldCk7CiB9CiAKLXZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRm
b3JtQ29udGV4dCwgTGluZUpvaW4gbGluZUpvaW4pCit2b2lkIHNldExpbmVKb2luKGNhaXJvX3Qq
IGNyLCBMaW5lSm9pbiBsaW5lSm9pbikKIHsKICAgICBjYWlyb19saW5lX2pvaW5fdCBjYWlyb0pv
aW4geyB9OwogICAgIHN3aXRjaCAobGluZUpvaW4pIHsKQEAgLTY2MSwxMiArNjYwLDEyIEBAIHZv
aWQgc2V0TGluZUpvaW4oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGlu
ZUpvaW4gbGluZUpvaW4pCiAgICAgICAgIGNhaXJvSm9pbiA9IENBSVJPX0xJTkVfSk9JTl9CRVZF
TDsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3NldF9saW5lX2pvaW4ocGxhdGZv
cm1Db250ZXh0LmNyKCksIGNhaXJvSm9pbik7CisgICAgY2Fpcm9fc2V0X2xpbmVfam9pbihjciwg
Y2Fpcm9Kb2luKTsKIH0KIAotdm9pZCBzZXRNaXRlckxpbWl0KEdyYXBoaWNzQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IG1pdGVyTGltaXQpCit2b2lkIHNldE1pdGVyTGltaXQo
Y2Fpcm9fdCogY3IsIGZsb2F0IG1pdGVyTGltaXQpCiB7Ci0gICAgY2Fpcm9fc2V0X21pdGVyX2xp
bWl0KHBsYXRmb3JtQ29udGV4dC5jcigpLCBtaXRlckxpbWl0KTsKKyAgICBjYWlyb19zZXRfbWl0
ZXJfbGltaXQoY3IsIG1pdGVyTGltaXQpOwogfQogCiB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29u
dGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
RmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9P
cGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuaAppbmRleCA1NDk4NTYzY2U0OWMxNWUzNWQwODI1OWMyZDI2ZGM3YjE3Y2Vh
ODg1Li44N2VjYzIwNThkNGE3NWQzM2RkZDIxMmVkODg3N2U4ZDNhOGE3OGVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJh
dGlvbnMuaApAQCAtNTQsMTQgKzU0LDE0IEBAIG5hbWVzcGFjZSBDYWlybyB7CiAKIG5hbWVzcGFj
ZSBTdGF0ZSB7CiAKLXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKEdyYXBoaWNzQ29udGV4dENhaXJv
JiwgZmxvYXQpOwotdm9pZCBzZXRTdHJva2VTdHlsZShHcmFwaGljc0NvbnRleHRDYWlybyYsIFN0
cm9rZVN0eWxlKTsKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJvX3QqLCBmbG9hdCk7Cit2
b2lkIHNldFN0cm9rZVN0eWxlKGNhaXJvX3QqLCBTdHJva2VTdHlsZSk7CiAKLXZvaWQgc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgQ29tcG9zaXRlT3BlcmF0b3Is
IEJsZW5kTW9kZSk7Ci12b2lkIHNldFNob3VsZEFudGlhbGlhcyhHcmFwaGljc0NvbnRleHRDYWly
byYsIGJvb2wpOwordm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oY2Fpcm9fdCosIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwordm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoY2Fpcm9fdCos
IGJvb2wpOwogCi12b2lkIHNldENUTShHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOwotQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHRDYWly
byYpOwordm9pZCBzZXRDVE0oY2Fpcm9fdCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworQWZm
aW5lVHJhbnNmb3JtIGdldENUTShjYWlyb190Kik7CiAKIEludFJlY3QgZ2V0Q2xpcEJvdW5kcyhH
cmFwaGljc0NvbnRleHRDYWlybyYpOwogRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTEyNSwxMCArMTI1LDEw
IEBAIHN0cnVjdCBTaGFkb3dTdGF0ZSB7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgZ2xvYmFsQ29t
cG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciB9OwogfTsKIAot
dm9pZCBzZXRMaW5lQ2FwKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgTGluZUNhcCk7Ci12b2lkIHNl
dExpbmVEYXNoKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRGFzaEFycmF5JiwgZmxvYXQp
Owotdm9pZCBzZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYsIExpbmVKb2luKTsKLXZv
aWQgc2V0TWl0ZXJMaW1pdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGZsb2F0KTsKK3ZvaWQgc2V0
TGluZUNhcChjYWlyb190KiwgTGluZUNhcCk7Cit2b2lkIHNldExpbmVEYXNoKGNhaXJvX3QqLCBj
b25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7Cit2b2lkIHNldExpbmVKb2luKGNhaXJvX3QqLCBMaW5l
Sm9pbik7Cit2b2lkIHNldE1pdGVyTGltaXQoY2Fpcm9fdCosIGZsb2F0KTsKIAogdm9pZCBmaWxs
UmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZpbGxT
b3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwogdm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRl
eHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgY29uc3QgU2hhZG93U3Rh
dGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBjMzIzMDQ0NTM1MWIwM2Yy
YWE4NzM2YWVlMmJjZTc4YmM0MzYxZjQ5Li44NDBkMWQ0ZTBlMjU5ZTNjZjI4NjAzOTI0ZDkwYWYz
ZWFmYjVjOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC04NiwxMCArODYs
OSBAQCBib29sIEdyYXBoaWNzQ29udGV4dENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAogICAgIHJldHVybiB0cnVlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorUmVu
ZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTY2FsZSk7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0
ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6
aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAogR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdApAQCAtMTM0LDUzICsxMzMsMTEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJl
c3RvcmUoKQogICAgIGNhaXJvX3Jlc3RvcmUobV9jci5nZXQoKSk7CiB9CiAKLS8vIERyYXdzIGEg
ZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFwcGx5U3RhdGVDaGFuZ2VzKCkK
IHsKLSAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KCp0aGlzLCByZWN0LCBib3JkZXJUaGlja25l
c3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9y
KTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKGF1dG8gY2hhbmdlIDogc3RhdGUoKS5jaGFuZ2VzKCkpIHsKKyAgICAgICAgc3dpdGNoIChj
aGFuZ2UpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE06
CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENUTShtX2NyLmdldCgpLCBzdGF0ZSgpLmdl
dENUTSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9jci5nZXQoKSwgc3RkOjptYXgoc3RhdGUoKS5zdHJv
a2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlOgorICAgICAgICAgICAg
Q2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX2NyLmdldCgpLCBzdGF0ZSgpLnN0cm9rZVN0
eWxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVDYXAo
bV9jci5nZXQoKSwgc3RhdGUoKS5saW5lQ2FwKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjoKKyAgICAg
ICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihtX2NyLmdldCgpLCBzdGF0ZSgpLmxpbmVKb2luKCkp
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpMaW5lRGFzaDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lRGFzaChtX2Ny
LmdldCgpLCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0ZSgpLmxpbmVEYXNoKCkub2Zm
c2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRNaXRlckxp
bWl0KG1fY3IuZ2V0KCksIHN0YXRlKCkubWl0ZXJMaW1pdCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRl
TW9kZToKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1f
Y3IuZ2V0KCksIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9wLCBzdGF0ZSgpLmNvbXBvc2l0ZU1v
ZGUoKS5ibGVuZE1vZGUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAgICAgICAgaWYgKHN0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgICAgICAgICAgICAgLy8gTWVhbmlu
ZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNp
bmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAg
ICAgICBhdXRvIGRyb3BTaGFkb3cgPSB0aGlzLT5kcm9wU2hhZG93KCk7CisgICAgICAgICAgICAg
ICAgZHJvcFNoYWRvdy5vZmZzZXQgPSB7IGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCksIC1kcm9w
U2hhZG93Lm9mZnNldC5oZWlnaHQoKSB9OworICAgICAgICAgICAgICAgIHNldERyb3BTaGFkb3co
ZHJvcFNoYWRvdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fY3IuZ2V0KCksIHN0
YXRlKCkuc2hvdWxkQW50aWFsaWFzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZGlk
QXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCp0aGlz
LCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7
IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEs
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcigqdGhpcywgb3BhY2l0eSk7CiB9CiAKLS8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcg
Ym9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5j
eUxheWVyKCkKIHsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKLSAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAg
ICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMpOworfQogCi0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywgcG9pbnQxLCBw
b2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpjbGlwKHJlY3QpOworICAgIENhaXJvOjpjbGlwKCp0aGlzLCByZWN0KTsKIH0KIAotLy8gVGhp
cyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4g
bGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCp0aGlzLCByZWN0LCBzdGF0ZS5maWxs
Q29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxl
KTsKKyAgICBDYWlybzo6Y2xpcFBhdGgoKnRoaXMsIHBhdGgsIGNsaXBSdWxlKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpjbGlw
T3V0KCp0aGlzLCByZWN0KTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
LSAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMs
IHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAg
IGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChhdXRvIG5hdGl2
ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCisg
ICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywgbmF0aXZlSW1hZ2UtPnBsYXRm
b3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOworfQogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6U3Ry
b2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAg
IENhaXJvOjpjbGVhclJlY3QoKnRoaXMsIHJlY3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yMTYsMTIzICsyNzIs
MjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEMKICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbigqdGhpcywgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBS
dWxlKQotewotICAgIENhaXJvOjpjbGlwUGF0aCgqdGhpcywgcGF0aCwgY2xpcFJ1bGUpOwotfQot
Ci1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgaWYgKGF1
dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCp0aGlzLCBuYXRpdmVJbWFn
ZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotI2lmIFBMQVRGT1JNKFdQRSkg
fHwgUExBVEZPUk0oR1RLKQotICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0
aCwgY29sb3IpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9m
ZnNldCk7Ci0gICAgcmV0dXJuOwotI2Vsc2UKLSAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqdGhp
cywgcGF0aCwgd2lkdGgsIGNvbG9yKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JN
KEdUSykKLSAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7
Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAg
ICByZXR1cm47Ci0jZWxzZQotICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCp0aGlzLCByZWN0cywg
d2lkdGgsIGNvbG9yKTsKLSNlbmRpZgorICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3QoKnRoaXMs
IHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKKyAgICBpZiAoIWNvbG9yLmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KCp0aGlz
LCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBt
X3N0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKCp0aGlzLCByZWN0LCBzdHlsZSk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRD
YWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5n
TW9kZSByb3VuZGluZ01vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHJvdW5kaW5nTW9kZSk7Ci0g
ICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscygqdGhpcywgcmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KQotewotICAgIENhaXJvOjp0cmFuc2xhdGUoKnRoaXMsIHgsIHkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25l
c3NDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKCp0aGlz
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0
cm9rZVN0eWxlKCp0aGlzLCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRo
aXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdD
b250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhU
TUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYgc2hhZG93
T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbV9zdGF0ZS5zaGFkb3dP
ZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbigqdGhpcywgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJs
ZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxk
QW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlh
cygqdGhpcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewot
ICAgIENhaXJvOjpjb25jYXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
LXsKLSAgICBDYWlybzo6U3RhdGU6OnNldENUTSgqdGhpcywgdHJhbnNmb3JtKTsKLX0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFj
aXR5KTsKLSAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7
CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIEdyYXBoaWNzQ29u
dGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKnRoaXMpOwotfQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OwogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3QoKnRoaXMsIHJlY3QpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgs
IENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCkBAIC0zNDEsNTggKzMwMSw2OCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
bGluZVdpZHRoKQogICAgIENhaXJvOjpzdHJva2VSZWN0KCp0aGlzLCByZWN0LCBsaW5lV2lkdGgs
IENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAoKnRoaXMsIGxpbmVDYXApOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hl
cywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBDYWlybzo6c2V0TGluZURhc2goKnRoaXMsIGRh
c2hlcywgZGFzaE9mZnNldCk7Ci19CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2luKExpbmVKb2lu
IGxpbmVKb2luKQotewotICAgIENhaXJvOjpzZXRMaW5lSm9pbigqdGhpcywgbGluZUpvaW4pOwor
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6c3Ryb2tlUGF0aCgq
dGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRlckxpbWl0
KGZsb2F0IG1pdGVyKQorLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2Vk
IGJvcmRlci4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIENhaXJvOjpzZXRNaXRl
ckxpbWl0KCp0aGlzLCBtaXRlcik7CisgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7CisgICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywg
cmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxl
LCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNs
aXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKKy8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9y
ZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKIHsKLSAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcGF0aCk7Ci19CisgICAg
aWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCi17Ci0gICAgQ2Fpcm86
OnJvdGF0ZSgqdGhpcywgcmFkaWFucyk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OworICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNpemUpCisvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJh
dyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBDYWlybzo6
c2NhbGUoKnRoaXMsIHNpemUpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAg
ICBDYWlybzo6ZHJhd0VsbGlwc2UoKnRoaXMsIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUu
c3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0
aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKKyNpZiBQTEFURk9STShXUEUpIHx8
IFBMQVRGT1JNKEdUSykKKyAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHBhdGgs
IGNvbG9yKTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVOVVNFRF9QQVJBTShvZmZz
ZXQpOworICAgIHJldHVybjsKKyNlbHNlCisgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnRoaXMs
IHBhdGgsIHdpZHRoLCBjb2xvcik7CisjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3Qo
KnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOworI2lmIFBM
QVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQorICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1
cygqdGhpcywgcmVjdHMsIGNvbG9yKTsKKyAgICBVTlVTRURfUEFSQU0od2lkdGgpOworICAgIFVO
VVNFRF9QQVJBTShvZmZzZXQpOworICAgIHJldHVybjsKKyNlbHNlCisgICAgQ2Fpcm86OmRyYXdG
b2N1c1JpbmcoKnRoaXMsIHJlY3RzLCB3aWR0aCwgY29sb3IpOworI2VuZGlmCiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1h
Z2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fp
cm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3Qs
IENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cisg
ICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJ
bWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkBAIC00MDQsMTEgKzM3NCw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0CiAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCp0aGlzLCBuYXRpdmVJ
bWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIG5hdGl2ZUltYWdlLnNpemUoKSwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9CiAKLVJlbmRl
cmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAotewot
ICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNv
bnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQ7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQogewogICAg
IGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCkBAIC00MzgsOCArNDAzLDI3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICAgICAgZm9udFNtb290aGluZyk7CiB9CiAKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCit7CisgICAgaWYgKHdp
ZHRocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBDYWlybzo6ZHJhd0xpbmVzRm9y
VGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5k
ZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3sKKyAgICBDYWlybzo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUpOworfQorCitGbG9hdFJlY3QgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShyb3VuZGlu
Z01vZGUpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnRo
aXMsIHJlY3QpOworfQorCiBjYWlyb190KiBHcmFwaGljc0NvbnRleHRDYWlybzo6Y3IoKSBjb25z
dAogeworICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0Q2Fpcm8mPigqdGhpcykuYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKICAgICByZXR1cm4gbV9jci5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmgKaW5kZXggNTY0NjFjMTU5YTU4M2M4OWM2MWU4ZjAyZTRlMGJlZTdiMDU5MzJl
Zi4uNDYwNmRhZmZjYjkzY2FjMzRlMWM2MWRlNWE2YTVkZGE1MGNlZDA3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5oCkBAIC01MCw2MSArNTAsNTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8q
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzKTsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBm
aW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFs
OworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsK
LSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXll
cigpIGZpbmFsOworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKKyAgICB2b2lkIGNs
aXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgCisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0Owog
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVk
UmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CisKICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFs
OwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5n
TW9kZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
KSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwor
ICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICB2b2lkIGRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUpIGZpbmFsOworCiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0
LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAg
IHZvaWQgc2F2ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwotCi0gICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkg
ZmluYWw7Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKLSAgICB2b2lkIHNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIGZpbmFsOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJ
bmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkg
ZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKLSAg
ICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmlu
YWw7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAg
IEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICAKLSAgICBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGRyYXdH
bHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2ws
IFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCiAgICAg
RmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3ND
b250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTg1NmEwNDM5M2ZkMjRlOTYyOGY2ZmU5MzQ2OWVlYmVhNGFiYjU5OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRl
U2F2ZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDR0NvbnRleHRTdGF0ZVNhdmVyIHsKK3B1YmxpYzoKKyAg
ICBDR0NvbnRleHRTdGF0ZVNhdmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBib29sIHNhdmVBbmRS
ZXN0b3JlID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBt
X3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2
ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7
CisgICAgfQorICAgIAorICAgIH5DR0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAg
IGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShtX2NvbnRleHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNhdmUoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKKyAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShtX2NvbnRleHQpOworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKKyAgICB9CisK
KyAgICB2b2lkIHJlc3RvcmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3Rv
cmUpOworICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7CisgICAgICAg
IG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkaWRTYXZl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOworICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dDsKKyAgICBib29sIG1f
c2F2ZUFuZFJlc3RvcmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggMzI0NWM2MDA0MzE1NTJkNTEzYjc0ZWVi
YzA5ZjMxOGVlYzNkZDcyYS4uYmY4MGU2NGQxZmYzM2VjOTVjMjc2Nzk2YmEyYjk2ZmRiZjliYzQ0
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTE4NSwxNCArMTg1LDEzIEBAIHN0YXRpYyB2b2lkIHNldENHQmxlbmRNb2RlKENH
Q29udGV4dFJlZiBjb250ZXh0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlCiB9CiAK
IEdyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYgY2dDb250
ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChj
Z0NvbnRleHQpLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW5pdGlhbENoYW5nZUZsYWdzLCBDR0Nv
bnRleHRHZXRDVE0oY2dDb250ZXh0KSkKIHsKICAgICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZShjZ0NvbnRleHQpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3lu
YyB3aXRoIG91ciBzdGF0ZS4KLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCB7IEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5n
ZSB9KTsKLSAgICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb3JlSW50ZXJw
b2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1D
b250ZXh0KCkpKTsKKyAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvcmVJbnRlcnBv
bGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcm5hbFBs
YXRmb3JtQ29udGV4dCgpKSkpOwogfQogCiBHcmFwaGljc0NvbnRleHRDRzo6fkdyYXBoaWNzQ29u
dGV4dENHKCkKQEAgLTIwNiw2ICsyMDUsMTQgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6aGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIH0KIAogQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4
dENHOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIC8vIFNvbWUgY2FsbGVycyB0byB0
aGlzIG1ldGhvZCB1c2VzIHRoZSBwbGF0Zm9ybSBjb250ZXh0IG91dHNpZGUgdGhlIHNjb3BlCisg
ICAgLy8gb2YgdGhpcyBjbGFzcy4gQ29tbWl0IGFueSBjaGFuZ2VzIGJlZm9yZSByZXR1cm5pbmcg
dGhlIHBsYXRmb3JtIGNvbnRleHQuCisgICAgY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRDRyY+
KCp0aGlzKS5hcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJldHVybiBpbnRlcm5hbFBsYXRmb3Jt
Q29udGV4dCgpOworfQorCitDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6OmludGVybmFs
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9kYXRhLT5tX2NnQ29udGV4
dCk7CiAgICAgcmV0dXJuIG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCk7CkBAIC0zOTYsNyArNDAz
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5h
dGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0
UmVjdCk7CiAKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVy
YXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVNb2RlKHsgb3B0
aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogCiAgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgp
ICsgZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEs
IC0xKTsKQEAgLTU1NSwxMyArNTYyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuc3Ryb2tlUGF0dGVybikK
KyAgICBpZiAoIXN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9y
bSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250
ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUuc3Ryb2tlUGF0dGVy
bi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOworICAgIGF1dG8gcGxhdGZv
cm1QYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRv
QmFzZUNUTSk7CiAgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApA
QCAtNTc0LDEzICs1ODEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJva2VQ
YXR0ZXJuKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVybigpCiB7
Ci0gICAgaWYgKCFtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmICghZmlsbFBhdHRlcm4oKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJh
bnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRmb3Jt
UGF0dGVybiA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2Vy
VG9CYXNlQ1RNKTsKKyAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IGZpbGxQYXR0ZXJuKCktPmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0
dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01OTEsMTEgKzU5OCwxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBDR0NvbnRleHRTZXRGaWxsUGF0
dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5BbHBoYSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0aERyYXdpbmdNb2RlJiBtb2RlKQorc3RhdGljIGlu
bGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCiB7Ci0gICAgYm9vbCBzaG91bGRGaWxsID0g
c3RhdGUuZmlsbFBhdHRlcm4gfHwgc3RhdGUuZmlsbENvbG9yLmlzVmlzaWJsZSgpOwotICAgIGJv
b2wgc2hvdWxkU3Ryb2tlID0gc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCAoc3RhdGUuc3Ryb2tlU3R5
bGUgIT0gTm9TdHJva2UgJiYgc3RhdGUuc3Ryb2tlQ29sb3IuaXNWaXNpYmxlKCkpOwotICAgIGJv
b2wgdXNlRU9GaWxsID0gc3RhdGUuZmlsbFJ1bGUgPT0gV2luZFJ1bGU6OkV2ZW5PZGQ7CisgICAg
Ym9vbCBzaG91bGRGaWxsID0gY29udGV4dC5maWxsUGF0dGVybigpIHx8IGNvbnRleHQuZmlsbENv
bG9yKCkuaXNWaXNpYmxlKCk7CisgICAgYm9vbCBzaG91bGRTdHJva2UgPSBjb250ZXh0LnN0cm9r
ZVBhdHRlcm4oKSB8fCAoY29udGV4dC5zdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlICYmIGNvbnRl
eHQuc3Ryb2tlQ29sb3IoKS5pc1Zpc2libGUoKSk7CisgICAgYm9vbCB1c2VFT0ZpbGwgPSBjb250
ZXh0LmZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQ7CiAKICAgICBpZiAoc2hvdWxkRmls
bCkgewogICAgICAgICBpZiAoc2hvdWxkU3Ryb2tlKSB7CkBAIC02MjQsOSArNjMxLDggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCi0gICAg
aWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlm
IChmaWxsR3JhZGllbnQoKSB8fCBzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIC8vIFdlIGRv
bid0IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8gZmlsbCAmIHN0cm9rZSBhIHBhdGggdXNpbmcg
Z3JhZGllbnRzCiAgICAgICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCiAgICAg
ICAgIGZpbGxQYXRoKHBhdGgpOwpAQCAtNjM0LDEzICs2NDAsMTMgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkK
ICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIGlmIChzdGF0ZS5zdHJva2VQYXR0ZXJu
KQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigp
OwogCiAgICAgQ0dQYXRoRHJhd2luZ01vZGUgZHJhd2luZ01vZGU7Ci0gICAgaWYgKGNhbGN1bGF0
ZURyYXdpbmdNb2RlKHN0YXRlLCBkcmF3aW5nTW9kZSkpIHsKKyAgICBpZiAoY2FsY3VsYXRlRHJh
d2luZ01vZGUoKnRoaXMsIGRyYXdpbmdNb2RlKSkgewogI2lmIEhBVkUoQ0dfQ09OVEVYVF9EUkFX
X1BBVEhfRElSRUNUKQogICAgICAgICBDR0NvbnRleHREcmF3UGF0aERpcmVjdChjb250ZXh0LCBk
cmF3aW5nTW9kZSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CiAjZWxzZQpAQCAtNjU4
LDcgKzY2NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwog
Ci0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgp
KSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IHJl
Y3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXll
clNpemUgPSBnZXRDVE0oKS5tYXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTY3MCwzMyArNjc2LDMz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAg
ICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0obGF5ZXJDb250ZXh0LCAtcmVjdC54KCks
IC1yZWN0LnkoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgobGF5ZXJDb250ZXh0
KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBwYXRoLnBsYXRm
b3JtUGF0aCgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQs
IG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICAgICAgQ0dDb250
ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAg
ICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAg
ICAgICBDR0NvbnRleHRFT0NsaXAobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7CiAKLSAgICAgICAgICAg
IG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAg
ZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRl
eHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgICAg
ICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAg
ICAgICAgICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAg
ICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNw
YWNlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBm
aWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFdp
bmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRl
eHQpOwogCi0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMpOwor
ICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKKyAg
ICBpZiAoZmlsbFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogI2lmIEhB
VkUoQ0dfQ09OVEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgIENHQ29udGV4dERyYXdQYXRoRGly
ZWN0KGNvbnRleHQsIGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQgPyBrQ0dQYXRoRU9G
aWxsIDoga0NHUGF0aEZpbGwsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51bGxwdHIpOwpAQCAtNzE3
LDcgKzcyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChzdHJva2VHcmFk
aWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgRmxvYXRS
ZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIGZsb2F0IGxp
bmVXaWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtNzQyLDggKzc0OCw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgICAg
IENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAg
ICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxheWVyQ29udGV4
dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0gICAgICAgICAg
ICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFp
bnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNv
bnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGll
bnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgZmxvYXQgZGVzdGluYXRp
b25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAgICAgIGZsb2F0IGRl
c3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0aCk7CkBAIC03NTQsMTMgKzc2
MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1Q
YXRoKCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgo
Y29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICAg
ICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCgq
dGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgc3Ryb2tlU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludCgqdGhp
cyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0YXRl
LnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlT
dHJva2VQYXR0ZXJuKCk7CiAKICNpZiBVU0UoQ0dfQ09OVEVYVF9TVFJPS0VfTElORV9TRUdNRU5U
U19XSEVOX1NUUk9LSU5HX1BBVEgpCkBAIC03ODUsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5maWxs
R3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkpIHsKICAgICAgICAgQ0dDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBpZiAoaGFzU2hhZG93KCkp
IHsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXllclNpemUgPSBnZXRDVE0oKS5tYXBTaXplKHJl
Y3Quc2l6ZSgpKTsKQEAgLTc5OCwyNyArODA0LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgICAgIENHQ29udGV4dEFk
ZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5
ZXJDb250ZXh0KTsKIAotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4
dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0
YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29u
dGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAg
ICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogICAgICAgICAgICAg
Q0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxheWVyLmdldCgpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwg
cmVjdCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5m
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFk
aWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRl
eHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5w
YWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigpKQogICAgICAgICBh
cHBseUZpbGxQYXR0ZXJuKCk7CiAKICAgICBib29sIGRyYXdPd25TaGFkb3cgPSBjYW5Vc2VTaGFk
b3dCbHVyKCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRy
YXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4g
b2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0
Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNo
YWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFk
b3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4
dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAg
ICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9hdFJvdW5kZWRSZWN0KHJl
Y3QpKTsKICAgICB9CiAKQEAgLTgzNyw5ICs4NDMsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAg
ICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7
CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93
cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgp
LCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9y
KGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4
dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BT
aGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFk
b3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3QocmVjdCkpOwogICAgIH0K
IApAQCAtODUyLDcgKzg1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICBzZXRDR0Zp
bGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBv
bGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKQEAgLTg2NCw5ICs4NzAsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQs
IGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1
cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihw
bGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNl
dFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBT
aGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29u
dGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAg
ICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCByZWN0KTsKICAgICB9CiAK
QEAgLTg3NCw3ICs4ODAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJl
Y3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0CiAgICAgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpID0gcmVjdC5yYWRpaSgpOwogICAgIGJvb2wgZXF1
YWxXaWR0aHMgPSAocmFkaWkudG9wTGVmdCgpLndpZHRoKCkgPT0gcmFkaWkudG9wUmlnaHQoKS53
aWR0aCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCku
d2lkdGgoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSA9PSByYWRpaS5ib3R0b21SaWdo
dCgpLndpZHRoKCkpOwogICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gKHJhZGlpLnRvcExlZnQoKS5o
ZWlnaHQoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgJiYgcmFkaWkuYm90dG9tTGVm
dCgpLmhlaWdodCgpID09IHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgJiYgcmFkaWkudG9wUmln
aHQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgpKTsKLSAgICBib29s
IGhhc0N1c3RvbUZpbGwgPSBtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0
ZXJuOworICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IGZpbGxHcmFkaWVudCgpIHx8IGZpbGxQYXR0
ZXJuKCk7CiAgICAgaWYgKCFoYXNDdXN0b21GaWxsICYmIGVxdWFsV2lkdGhzICYmIGVxdWFsSGVp
Z2h0cyAmJiByYWRpaS50b3BMZWZ0KCkud2lkdGgoKSAqIDIgPT0gci53aWR0aCgpICYmIHJhZGlp
LnRvcExlZnQoKS5oZWlnaHQoKSAqIDIgPT0gci5oZWlnaHQoKSkKICAgICAgICAgQ0dDb250ZXh0
RmlsbEVsbGlwc2VJblJlY3QoY29udGV4dCwgcik7CiAgICAgZWxzZSB7CkBAIC05MTMsOSArOTE5
LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG8KICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cp
IHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0
U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAg
ICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAs
IDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAg
ICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd0luc2V0U2hhZG93KCp0aGlz
LCByZWN0LCByb3VuZGVkSG9sZVJlY3QpOwogICAgIH0KIApAQCAtOTMwLDYgKzkzNiw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXAoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsK
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKICAgICBt
X2RhdGEtPmNsaXAocmVjdCk7CiB9CkBAIC05NDAsMzEgKzk0NywzNSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAvLyB0byA8cmRh
cjovL3Byb2JsZW0vMTI1ODQ0OTI+LCBDR1JlY3RJbmZpbml0ZSBjYW4ndCBiZSB1c2VkIHdpdGgg
YW4gYWNjZWxlcmF0ZWQgY29udGV4dCB0aGF0CiAgICAgLy8gaGFzIGNlcnRhaW4gdHJhbnNmb3Jt
cyB0aGF0IGFyZW4ndCBqdXN0IGEgdHJhbnNsYXRpb24gb3IgYSBzY2FsZS4gQW5kIGR1ZSB0byA8
cmRhcjovL3Byb2JsZW0vMTQ2MzQ0NTM+CiAgICAgLy8gd2UgY2Fubm90IHVzZSBpdCBpbiBmb3Ig
YSBwcmludGluZyBjb250ZXh0IGVpdGhlci4KKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtID0gZ2V0Q1RN
KCk7Ci0gICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUocGxh
dGZvcm1Db250ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkg
PT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkp
KTsKLSAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0
SW5maW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkp
LCByZWN0IH07Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAg
ICBDR0NvbnRleHRBZGRSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdHMsIDIpOwotICAgIENH
Q29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgYm9vbCBjYW5Vc2VDR1JlY3RJ
bmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUoY29udGV4dCkgIT0ga0NHQ29udGV4dFR5cGVQREYg
JiYgKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIHx8ICgh
Y3RtLmIoKSAmJiAhY3RtLmMoKSkpOworICAgIENHUmVjdCByZWN0c1syXSA9IHsgY2FuVXNlQ0dS
ZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZpbml0ZSA6IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0Jv
eChjb250ZXh0KSwgcmVjdCB9OworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAg
ICBDR0NvbnRleHRBZGRSZWN0cyhjb250ZXh0LCByZWN0cywgMik7CisgICAgQ0dDb250ZXh0RU9D
bGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRD
bGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0
KTsKKyAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIENHQ29udGV4dEdldENsaXBCb3VuZGlu
Z0JveChjb250ZXh0KSk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgQ0dDb250
ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0gICAg
Q0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAgQ0dDb250ZXh0QWRk
UGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBDR0NvbnRleHRFT0NsaXAo
Y29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFBhdGgocGF0aCwgY2xpcFJ1bGUpOworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENHQ29udGV4
dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIENH
Q29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENHQ29udGV4dEFk
ZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOworICAgICAgICBD
R0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29u
dGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAKICAgICAgICAgaWYgKGNsaXBSdWxlID09IFdp
bmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwpA
QCAtOTc1LDExICs5ODYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICBtX2RhdGEtPmNsaXAocGF0aCk7
CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMoKSBjb25zdAotewot
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChw
bGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0Ojpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwpAQCAtMTAwMiwxNyArMTAwOCwxNCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgcmVzdG9y
ZSgpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRl
ZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHRmxvYXQmIHhPZmZzZXQsIENHRmxv
YXQmIHlPZmZzZXQpCitzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5l
ZWRlZChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYgeU9m
ZnNldCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCiAgICAg
VU5VU0VEX1BBUkFNKGNvbnRleHQpOwogICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0KTsKICAgICBV
TlVTRURfUEFSQU0oeU9mZnNldCk7CiAjZWxzZQotICAgIGlmIChjb250ZXh0LnJlbmRlcmluZ01v
ZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCkpKQorICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93
T2Zmc2V0cyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV29yayBhcm91bmQg
PHJkYXI6Ly9wcm9ibGVtLzU1MzkzODg+IGJ5IGVuc3VyaW5nIHRoYXQgdGhlIG9mZnNldHMgd2ls
bCBnZXQgdHJ1bmNhdGVkCkBAIC0xMDMwLDEwICsxMDMzLDU1IEBAIHN0YXRpYyB2b2lkIGFwcGx5
U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNldENHTGluZUNhcChDR0Nv
bnRleHRSZWYgY29udGV4dCwgTGluZUNhcCBjYXApCiB7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgc3dpdGNoIChjYXAp
IHsKKyAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6CisgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAo
Y29udGV4dCwga0NHTGluZUNhcEJ1dHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExpbmVD
YXA6OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVD
YXBSb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUNhcDo6U3F1YXJlOgorICAg
ICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBTcXVhcmUpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CiAKK3N0YXRpYyB2b2lkIHNldENHTGluZUpvaW4oQ0dDb250
ZXh0UmVmIGNvbnRleHQsIExpbmVKb2luIGpvaW4pCit7CisgICAgc3dpdGNoIChqb2luKSB7Cisg
ICAgY2FzZSBMaW5lSm9pbjo6TWl0ZXI6CisgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKGNv
bnRleHQsIGtDR0xpbmVKb2luTWl0ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExpbmVK
b2luOjpSb3VuZDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4dCwga0NHTGlu
ZUpvaW5Sb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUpvaW46OkJldmVsOgor
ICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pbkJldmVsKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXRDR01pdGVyTGltaXQo
Q0dDb250ZXh0UmVmIGNvbnRleHQsIGZsb2F0IGxpbWl0KQoreworICAgIENHQ29udGV4dFNldE1p
dGVyTGltaXQoY29udGV4dCwgbGltaXQpOworfQorCitzdGF0aWMgdm9pZCBzZXRDR0xpbmVEYXNo
KENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFz
aE9mZnNldCkKK3sKKyAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKKyAgICAgICAgZmxvYXQgbGVu
Z3RoID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tpXSk7
CisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChkYXNo
T2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOworICAgIH0KKyAgICBDR0NvbnRleHRTZXRMaW5lRGFz
aChjb250ZXh0LCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKK30K
Kworc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coQ0dDb250ZXh0UmVmIGNvbnRleHQsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIs
IGNvbnN0IENvbG9yJiBjb2xvciwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK3sKICAg
ICBpZiAob2Zmc2V0LmlzWmVybygpICYmICFibHVyKSB7CiAgICAgICAgIENHQ29udGV4dFNldFNo
YWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMTA0NSw3ICsxMDkzLDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICBDR0Zs
b2F0IHlPZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9hdCBibHVyUmFkaXVzID0g
Ymx1cjsKIAotICAgIGlmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkpIHsKKyAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAgICAgICAgIENHQWZm
aW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwog
CiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSAr
IHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTEwNjYsNyArMTExNCw4IEBA
IHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgLy8gRXh0cmVtZSAiYmx1ciIgdmFsdWVzIGNh
biBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcgdGltZXMsIHNvIGNs
YW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5hcnJvd1ByZWNpc2lv
blRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElm
TmVlZGVkKGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7CisgICAgaWYgKHJlbmRl
cmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIGFwcGx5U2hh
ZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOwog
CiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMgbWVhbnMgdGhhdCB0
aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBhbmQgd2Ugc2hvdWxk
IHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3IuCkBAIC0xMDc2LDQ0
ICsxMTI1LDgxIEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgICAgIENHQ29udGV4dFNl
dFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLCBi
bHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKS5nZXQoKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgYXV0byBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lk
dGgoY29udGV4dCwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCAwLmYpKTsKKyAgICBh
dXRvIGNvbnRleHQgPSBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAg
ICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29s
b3Ioc3RhdGUuc3Ryb2tlQ29sb3IpLmdldCgpKTsKKyAgICBmb3IgKGF1dG8gY2hhbmdlIDogc3Rh
dGUoKS5jaGFuZ2VzKCkpIHsKKyAgICAgICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE06CisgICAgICAgICAgICBDR0NvbnRl
eHRTZXRDVE0oY29udGV4dCwgc3RhdGUoKS5nZXRDVE0oKSk7CisgICAgICAgICAgICBicmVhazsK
IAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlKSkKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUuZmlsbENvbG9y
KTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1c2g6
CisgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZSgpLmZpbGxCcnVzaCgp
LmNvbG9yKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0
QWxwaGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgICAgIENHQ29udGV4dFNl
dExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZSgpLnN0cm9rZVRoaWNrbmVzcygpLCAw
LmYpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKLSAgICAgICAgc2V0Q0dCbGVuZE1vZGUo
Y29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2g6CisgICAg
ICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRD
R0NvbG9yKHN0YXRlKCkuc3Ryb2tlQnJ1c2goKS5jb2xvcigpKS5nZXQoKSk7CisgICAgICAgICAg
ICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdN
b2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSkpOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXA6CisgICAg
ICAgICAgICBzZXRDR0xpbmVDYXAoY29udGV4dCwgc3RhdGUoKS5saW5lQ2FwKCkpOworICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZEFu
dGlhbGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luOgorICAgICAgICAgICAgc2V0Q0dM
aW5lSm9pbihjb250ZXh0LCBzdGF0ZSgpLmxpbmVKb2luKCkpOworICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNt
b290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMo
Y29udGV4dCwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoOgorICAgICAgICAgICAgc2V0Q0dMaW5lRGFz
aChjb250ZXh0LCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0ZSgpLmxpbmVEYXNoKCku
b2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAg
ICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwgY2dJbnRlcnBv
bGF0aW9uUXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSk7CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoKKyAgICAgICAg
ICAgIHNldENHTWl0ZXJMaW1pdChjb250ZXh0LCBzdGF0ZSgpLm1pdGVyTGltaXQoKSk7CisgICAg
ICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93Q2hhbmdlKSkKLSAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMsIHN0YXRlLnNo
YWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKLX0K
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVNb2Rl
OgorICAgICAgICAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgc3RhdGUoKS5jb21wb3NpdGVN
b2RlKCkub3BlcmF0aW9uLCBzdGF0ZSgpLmNvbXBvc2l0ZU1vZGUoKS5ibGVuZE1vZGUpOworICAg
ICAgICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldE1pdGVyTGltaXQo
ZmxvYXQgbGltaXQpCi17Ci0gICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRl
eHQoKSwgbGltaXQpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkRyb3BTaGFkb3c6CisgICAgICAgICAgICBzZXRDR1NoYWRvdyhjb250ZXh0LCByZW5kZXJpbmdN
b2RlKCksIHN0YXRlKCkuZHJvcFNoYWRvdygpLm9mZnNldCwgc3RhdGUoKS5kcm9wU2hhZG93KCku
Ymx1clJhZGl1cywgc3RhdGUoKS5kcm9wU2hhZG93KCkuY29sb3IsIHN0YXRlKCkuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkFscGhhOgorICAgICAgICAgICAgQ0dDb250ZXh0
U2V0QWxwaGEoY29udGV4dCwgc3RhdGUoKS5hbHBoYSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eToKKyAgICAgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFs
aXR5KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUoKS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlOgorICAgICAgICAgICAg
Q0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0
YXRlKCkudGV4dERyYXdpbmdNb2RlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzOgorICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHN0YXRlKCkuc2hv
dWxkQW50aWFsaWFzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTbW9vdGhGb250czoKKyAgICAgICAgICAg
IENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRlKCkuc2hvdWxkU21v
b3RoRm9udHMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkaWRBcHBseVN0YXRlQ2hh
bmdlcygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByKQpAQCAtMTEyNSw3ICsxMjExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG1f
c3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICBpZiAoc3Ryb2tlR3JhZGllbnQoKSkgewogICAg
ICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRvdWJsZUxp
bmVXaWR0aCA9IGxpbmVXaWR0aCAqIDI7CiAgICAgICAgICAgICBmbG9hdCBhZGp1c3RlZFdpZHRo
ID0gY2VpbGYocmVjdC53aWR0aCgpICsgZG91YmxlTGluZVdpZHRoKTsKQEAgLTExMzUsNyArMTIy
MSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBhdXRvIGxheWVyID0gYWRvcHRD
RihDR0xheWVyQ3JlYXRlV2l0aENvbnRleHQoY29udGV4dCwgbGF5ZXJTaXplLCAwKSk7CiAKICAg
ICAgICAgICAgIENHQ29udGV4dFJlZiBsYXllckNvbnRleHQgPSBDR0xheWVyR2V0Q29udGV4dChs
YXllci5nZXQoKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IGxpbmVX
aWR0aDsKICAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChsYXllckNvbnRleHQsIGxp
bmVXaWR0aCk7CiAKICAgICAgICAgICAgIC8vIENvbXBlbnNhdGUgZm9yIHRoZSBsaW5lIHdpZHRo
LCBvdGhlcndpc2UgdGhlIGxheWVyJ3MgdG9wLWxlZnQgY29ybmVyIHdvdWxkIGJlCkBAIC0xMTQ5
LDggKzEyMzQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRk
UmVjdChsYXllckNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBh
dGhXaXRoU3Ryb2tlZFBhdGgobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENs
aXAobGF5ZXJDb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNv
bnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAg
ICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAg
ICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwog
CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkZXN0aW5hdGlvblggPSByb3VuZGYocmVjdC54KCkg
LSBsaW5lV2lkdGgpOwogICAgICAgICAgICAgY29uc3QgZmxvYXQgZGVzdGluYXRpb25ZID0gcm91
bmRmKHJlY3QueSgpIC0gbGluZVdpZHRoKTsKQEAgLTExNjEsMTMgKzEyNDYsMTMgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgcmVjdCk7
CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0
KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAgICAgICBDR0Nv
bnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNm
b3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KCp0aGlzKTsK
KyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBzdHJva2VTcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tl
UGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBseVN0cm9rZVBh
dHRlcm4oKTsKIAogICAgIC8vIFVzaW5nIENHQ29udGV4dEFkZFJlY3QgYW5kIENHQ29udGV4dFN0
cm9rZVBhdGggdG8gc3Ryb2tlIHJlY3QgcmF0aGVyIHRoYW4KQEAgLTExODIsOTQgKzEyNjcsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCi17Ci0g
ICAgc3dpdGNoIChjYXApIHsKLSAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6Ci0gICAgICAgIENHQ29u
dGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lQ2FwOjpSb3VuZDoKLSAgICAgICAgQ0dDb250ZXh0U2V0
TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFJvdW5kKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBMaW5lQ2FwOjpTcXVhcmU6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVD
YXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBTcXVhcmUpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKGNvbnN0IERh
c2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGlmIChkYXNoT2Zmc2V0
IDwgMCkgewotICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGxlbmd0aCArPSBzdGF0
aWNfY2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAg
ICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7Ci0gICAg
fQotICAgIENHQ29udGV4dFNldExpbmVEYXNoKHBsYXRmb3JtQ29udGV4dCgpLCBkYXNoT2Zmc2V0
LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBzd2l0Y2ggKGpvaW4pIHsK
LSAgICBjYXNlIExpbmVKb2luOjpNaXRlcjoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4o
cGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luTWl0ZXIpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIExpbmVKb2luOjpSb3VuZDoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxh
dGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luUm91bmQpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIExpbmVKb2luOjpCZXZlbDoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZv
cm1Db250ZXh0KCksIGtDR0xpbmVKb2luQmV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
LXsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsKLSAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwotICAgIG1fZGF0YS0+
bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgQ0dDb250
ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7Ci0gICAgbV9kYXRhLT5yb3Rh
dGUoYW5nbGUpOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJ
ZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1D
b250ZXh0KCksIHgsIHkpOwotICAgIG1fZGF0YS0+dHJhbnNsYXRlKHgsIHkpOwotICAgIG1fZGF0
YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dDb250ZXh0Q29uY2F0Q1RNKHBsYXRmb3JtQ29udGV4dCgp
LCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9k
YXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLXsKLSAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRy
YW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPm1f
dXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotQWZm
aW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxl
IGluY2x1ZGVTY2FsZSkgY29uc3QKLXsKLSAgICAvLyBUaGUgQ1RNIHVzdWFsbHkgaW5jbHVkZXMg
dGhlIGRldmljZVNjYWxlRmFjdG9yIGV4Y2VwdCBpbiBXZWJLaXQgMSB3aGVuIHRoZQotICAgIC8v
IGNvbnRlbnQgaXMgbm9uLWNvbXBvc2l0ZWQsIHNpbmNlIHRoZSBzY2FsZSBmYWN0b3IgaXMgaW50
ZWdyYXRlZCBhdCBhIGxvd2VyCi0gICAgLy8gbGV2ZWwuIFRvIGd1YXJhbnRlZSB0aGUgZGV2aWNl
U2NhbGUgaXMgaW5jbHVkZWQsIHdlIGNhbiB1c2UgdGhpcyBDRyBBUEkuCi0gICAgaWYgKGluY2x1
ZGVTY2FsZSA9PSBEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKQotICAgICAgICByZXR1cm4g
Q0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShwbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0KLSAgICByZXR1cm4gQ0dDb250ZXh0R2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpKTsK
LX0KLQogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsKICAgICAv
LyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFj
ZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCkBAIC0xMjgwLDcgKzEyNzcsOSBAQCBGbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBSb3VuZGluZwogICAgIGlmIChtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkpCiAgICAgICAgIHJldHVybiByb3VuZGVkSW50UmVjdChyZWN0KTsK
IAotICAgIENHQWZmaW5lVHJhbnNmb3JtIGRldmljZU1hdHJpeCA9IENHQ29udGV4dEdldFVzZXJT
cGFjZVRvRGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxhdGZvcm1Db250ZXh0KCkpOworICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBDR0FmZmluZVRyYW5z
Zm9ybSBkZXZpY2VNYXRyaXggPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJh
bnNmb3JtKGNvbnRleHQpOwogICAgIGlmIChDR0FmZmluZVRyYW5zZm9ybUlzSWRlbnRpdHkoZGV2
aWNlTWF0cml4KSkgewogICAgICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25v
d25Ub0JlSWRlbnRpdHkgPSB0cnVlOwogICAgICAgICByZXR1cm4gcm91bmRlZEludFJlY3QocmVj
dCk7CkBAIC0xMzE5LDYgKzEzMTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lcwogICAgIGlm
ICghd2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0
cm9rZUNvbG9yKCkpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRz
QW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoRmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUod2lk
dGhzLmxhc3QoKSwgdGhpY2tuZXNzKSksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsKQEAg
LTEzNjQsMTIgKzEzNjQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXMKICAgICB9CiAKICAg
ICBpZiAoZmlsbENvbG9ySXNOb3RFcXVhbFRvU3Ryb2tlQ29sb3IpCi0gICAgICAgIHNldENHRmls
bENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBsb2NhbFN0cm9rZUNvbG9yKTsKKyAgICAgICAgc2V0
Q0dGaWxsQ29sb3IoY29udGV4dCwgbG9jYWxTdHJva2VDb2xvcik7CiAKLSAgICBDR0NvbnRleHRG
aWxsUmVjdHMocGxhdGZvcm1Db250ZXh0KCksIGRhc2hCb3VuZHMuZGF0YSgpLCBkYXNoQm91bmRz
LnNpemUoKSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3RzKGNvbnRleHQsIGRhc2hCb3VuZHMuZGF0
YSgpLCBkYXNoQm91bmRzLnNpemUoKSk7CiAKICAgICBpZiAoZmlsbENvbG9ySXNOb3RFcXVhbFRv
U3Ryb2tlQ29sb3IpCi0gICAgICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBm
aWxsQ29sb3IoKSk7CisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGZpbGxDb2xvcigp
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwm
IGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkBAIC0xNDEyLDE3ICsxNDEyLDE4IEBA
IFJlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q0c6OnJlbmRlcmluZ01vZGUoKSBjb25zdAog
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvcikKIHsKICAgICBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CiAKICAgICAvLyBDb3JlR3JhcGhpY3MgZXhwZWN0cyB0aGUgYmFzZSBD
VE0gb2YgYSBIaURQSSBjb250ZXh0IHRvIGhhdmUgdGhlIHNjYWxlIGZhY3RvciBhcHBsaWVkIHRv
IGl0LgogICAgIC8vIEZhaWxpbmcgdG8gY2hhbmdlIHRoZSBiYXNlIGxldmVsIENUTSB3aWxsIGNh
dXNlIGNlcnRhaW4gQ0cgZmVhdHVyZXMsIHN1Y2ggYXMgZm9jdXMgcmluZ3MsCiAgICAgLy8gdG8g
ZHJhdyB3aXRoIGEgc2NhbGUgZmFjdG9yIG9mIDEgcmF0aGVyIHRoYW4gdGhlIGFjdHVhbCBzY2Fs
ZSBmYWN0b3IuCi0gICAgQ0dDb250ZXh0U2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgQ0dB
ZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgp
KSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgQ0dDb250ZXh0
U2V0QmFzZUNUTShjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJh
c2VDVE0oY29udGV4dCksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCiB7CiAgICAgLy8gQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3Qgb25seSBzdXBw
b3J0cyBzb2xpZCBjb2xvcnMuCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3Rh
dGUuZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkgfHwgZmlsbFBhdHRlcm4o
KSkgewogICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTE0MzQsNyArMTQzNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewogICAgIC8vIENH
Q29udGV4dFN0cm9rZUVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0cyBzb2xpZCBjb2xvcnMuCi0g
ICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7
CisgICAgaWYgKHN0cm9rZUdyYWRpZW50KCkgfHwgc3Ryb2tlUGF0dGVybigpKSB7CiAgICAgICAg
IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xNDY4LDkgKzE0NjksMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2kKIAogYm9vbCBHcmFw
aGljc0NvbnRleHRDRzo6Y2FuVXNlU2hhZG93Qmx1cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChy
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1
cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIHJl
dHVybiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYm
IGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKTsKIH0KIAot
fQogCi0jZW5kaWYKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5oCmluZGV4IDQ2OGE0NGJhYTg2ZWU1MjYxOWQyNTVmOTM5NDNhOTc1NWJhYzlm
YWIuLmY5OWMzZDliOWJkMjgyNTg2NWZkZjdlYTgwYjJhZjAwZTM0YjUyZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MTAsIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw1MyArMjUsMTMgQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpZiBVU0UoQ0cpCisKICNpbmNsdWRlICJDb2xvclNwYWNlQ0cuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DR0FmZmluZVRyYW5zZm9y
bSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZik7Ci0KLWNsYXNzIENHQ29udGV4dFN0YXRl
U2F2ZXIgewotcHVibGljOgotICAgIENHQ29udGV4dFN0YXRlU2F2ZXIoQ0dDb250ZXh0UmVmIGNv
bnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgICAgICA6IG1fY29udGV4dChj
b250ZXh0KQotICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0gICAg
ewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIENHQ29udGV4dFNh
dmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgfkNHQ29udGV4dFN0YXRlU2F2
ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c2F2ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAg
ICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
bV9jb250ZXh0KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOwotICAgIH0KLSAg
ICAKLSAgICBib29sIGRpZFNhdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2F2
ZUFuZFJlc3RvcmU7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBDR0NvbnRleHRSZWYgbV9j
b250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KIGNsYXNzIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiBwdWJs
aWM6CiAgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmKTsKQEAgLTg1LDY5ICs0NSw0
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsK
ICAgICBDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2
b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICB2b2lkIHNl
dElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7CisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0
KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9v
bCkgZmluYWw7CiAKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBm
aW5hbDsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAgICAgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5h
bDsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
IGZpbmFsOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAogICAgIHZv
aWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwogCi0gICAgdXNp
bmcgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0KLSAgICB2b2lkIHNldElzQ0FMYXllckNv
bnRleHQoYm9vbCkgZmluYWw7Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmlu
YWw7Ci0KLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwotICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCi0g
ICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLQogICAgIHZvaWQgY2xpcFBhdGgo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOworICAgIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwogCi0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7
CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lk
IHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2lu
KExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwor
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFs
OworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFs
OwogCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNp
emUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAg
dm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lk
IGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsK
LSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBmaW5hbDsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUlu
Y2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKKyAgICB2b2lk
IGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAK
LSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3Vu
ZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZp
bmFsOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jiwg
ZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwpAQCAtMTU2
LDE4ICs5NSwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRp
ZgogCi0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSBmaW5hbDsKIAorICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwg
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVj
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQg
YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2lu
dCYpIGZpbmFsOworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwogCiAgICAgYm9vbCBz
dXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVS
TCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBzZXREZXN0aW5hdGlvbkZv
clJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0
UG9pbnQmKSBmaW5hbDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5Vc2VTaGFkb3dCbHVyKCkgY29u
c3Q7CiAKQEAgLTE3NSw5ICsxMTcsMTYgQEAgcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7CiAj
ZW5kaWYKIAorICAgIENHQ29udGV4dFJlZiBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
OworCiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRh
IHsgbnVsbHB0ciB9OwogfTsKIAotfQorQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNU
TShDR0NvbnRleHRSZWYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNpbmNsdWRlICJD
R0NvbnRleHRTdGF0ZVNhdmVyLmgiCiAKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3Bw
CmluZGV4IGU2Y2UyZmI5NzI0N2E2Yjg2YzA5YjFhZDM2MTcwMWMyZWMzZTg2MjUuLmFmMDBhMDEz
MzQ3ZTBjZDg1YTMwYjg4NGViYzc5ZjMyZjFlMjMxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0x
MjcsNyArMTI3LDcgQEAgYm9vbCBQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRj
aChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2EKIAogICAgIC8vIE9sZCBhbmQg
bmV3IGNvbnRleHQgc2NhbGluZyBmYWN0b3JzIGhhdmUgdG8gbWF0Y2ggYXMgd2VsbC4KICAgICBB
ZmZpbmVUcmFuc2Zvcm06OkRlY29tcG9zZWRUeXBlIGRlY29tcG9zZWRUcmFuc2Zvcm07Ci0gICAg
Y29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNj
YWxlKS5kZWNvbXBvc2UoZGVjb21wb3NlZFRyYW5zZm9ybSk7CisgICAgY29udGV4dC5nZXRDVE0o
KS5kZWNvbXBvc2UoZGVjb21wb3NlZFRyYW5zZm9ybSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm06
OkRlY29tcG9zZWRUeXBlIGNhY2hlZERlY29tcG9zZWRUcmFuc2Zvcm07CiAgICAgbV9jYWNoZWRU
cmFuc2Zvcm0uZGVjb21wb3NlKGNhY2hlZERlY29tcG9zZWRUcmFuc2Zvcm0pOwpAQCAtMjU1LDcg
KzI1NSw3IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRl
ZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgdHJhbnNmb3JtQ29udGV4dEZv
clBhaW50aW5nKGJ1ZmZlckNvbnRleHQsIGRzdFJlY3QsIEZsb2F0UmVjdChtX2NhY2hlZEltYWdl
UmVjdC5sb2NhdGlvbigpLCBzcmNSZWN0LnNpemUoKSkpOwogICAgIGRyYXdQREZQYWdlKGJ1ZmZl
ckNvbnRleHQpOwogCi0gICAgbV9jYWNoZWRUcmFuc2Zvcm0gPSBjb250ZXh0LmdldENUTShHcmFw
aGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIG1fY2FjaGVk
VHJhbnNmb3JtID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBtX2NhY2hlZERlc3RpbmF0aW9uUmVj
dCA9IGRzdFJlY3Q7CiAgICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0gc3JjUmVjdDsKICAgICArK21f
Y2FjaGluZ0NvdW50Rm9yVGVzdGluZzsKQEAgLTM2Myw2ICszNjMsOCBAQCB2b2lkIFBERkRvY3Vt
ZW50SW1hZ2U6OmRyYXdQREZQYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIAogICAgIGNv
bnRleHQudHJhbnNsYXRlKC1tX2Nyb3BCb3gubG9jYXRpb24oKSk7CiAKKyAgICBjb250ZXh0LmFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisKICAgICAvLyBDR1BERiBwYWdlcyBhcmUgaW5kZXhlZCBmcm9t
IDEuCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgQ0dDb250ZXh0RHJhd1BERlBhZ2VXaXRoQW5u
b3RhdGlvbnMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBhZ2Uo
bV9kb2N1bWVudC5nZXQoKSwgMSksIG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKaW5kZXggZDY4OWE1MWE4OTEwMmE1MDkwNDU1OWI0
NDIyMzY5ZGUxNDcwMzMzNS4uZmRlZWY2YjM4ZDBjNWI1NTU2NzM3ZWI3ZjQ0YWYyZjJmYzlhNDQ0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENH
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3Bw
CkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICBHcmFwaGlj
c0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgc3Ryb2tlU3R5bGVBcHBs
aWVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBib29sIGhpdFN1Y2Nlc3MgPSBDR0NvbnRleHRQ
YXRoQ29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9rZSk7CisgICAgYm9v
bCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoZ3JhcGhpY3NDb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwga0NHUGF0aFN0cm9rZSk7CiAgICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIAogICAgIHJldHVybiBoaXRTdWNjZXNzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBo
c1JlY29yZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGVmYmMxZTQ5NTQ0
MWJlZGU3MzRlOTQ4ZGQyNmQzNzE0NDE2NTUzZTAuLmU5YjdhYzRkN2Y0Y2JmNzQxMjg5MzliZmE4
YzA0ZTc2NWEwZGJkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3Jl
VGV4dC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRHJhd0dseXBoc1JlY29yZGVyLmgiCiAKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZvbnQu
aCIKQEAgLTM1LDQ5ICszNCw0MSBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCiAjaW5j
bHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNp
ZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4K
LSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBDR0NvbnRleHREZWxlZ2F0
ZVJlZiBiZWdpbkxheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmlu
Z1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0ZEaWN0
aW9uYXJ5UmVmLCBDR0NvbnRleHREZWxlZ2F0ZVJlZikKK3N0YXRpYyBDR0NvbnRleHREZWxlZ2F0
ZVJlZiBiZWdpbkxheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmlu
Z1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCwgQ0ZEaWN0aW9uYXJ5UmVmLCBD
R0NvbnRleHREZWxlZ2F0ZVJlZikKIHsKICAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVy
ID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0
SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29yZEJlZ2luTGF5ZXIocnN0YXRlLCBn
c3RhdGUsIHJlY3QpOworICAgIHJlY29yZGVyLnJlY29yZEJlZ2luTGF5ZXIoZ3N0YXRlKTsKICAg
ICByZXR1cm4gZGVsZWdhdGU7CiB9CiAKLXN0YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJlZiBlbmRM
YXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiBy
c3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSkKK3N0YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJlZiBl
bmRMYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3Jk
ZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVH
ZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRW5kTGF5ZXIocnN0YXRlLCBn
c3RhdGUpOworICAgIHJlY29yZGVyLnJlY29yZEVuZExheWVyKGdzdGF0ZSk7CiAgICAgcmV0dXJu
IGRlbGVnYXRlOwogfQogCi1zdGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENHQ29udGV4dERlbGVn
YXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYg
Z3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSogdG0sIGNvbnN0IENHR2x5cGggZ2x5cGhz
W10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKK3N0YXRpYyBDR0Vy
cm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBj
b25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3Qg
Y291bnQpCiB7Ci0gICAgaWYgKENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSA+IDApIHsKLSAgICAg
ICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhz
UmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICAgICAg
cmVjb3JkZXIucmVjb3JkRHJhd0dseXBocyhyc3RhdGUsIGdzdGF0ZSwgdG0sIGdseXBocywgcG9z
aXRpb25zLCBjb3VudCk7Ci0gICAgfQorICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIg
PSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJ
bmZvKGRlbGVnYXRlKSk7CisgICAgcmVjb3JkZXIucmVjb3JkRHJhd0dseXBocyhnc3RhdGUsIGds
eXBocywgcG9zaXRpb25zLCBjb3VudCk7CiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0K
IAotc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRl
LCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3Qg
cmVjdCwgQ0dJbWFnZVJlZiBpbWFnZSkKK3N0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShDR0NvbnRl
eHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYg
Z3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJlZiBpbWFnZSkKIHsKICAgICBEcmF3R2x5cGhz
UmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENH
Q29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29yZERy
YXdJbWFnZShyc3RhdGUsIGdzdGF0ZSwgcmVjdCwgaW1hZ2UpOworICAgIHJlY29yZGVyLnJlY29y
ZERyYXdJbWFnZShnc3RhdGUsIHJlY3QsIGltYWdlKTsKICAgICByZXR1cm4ga0NHRXJyb3JTdWNj
ZXNzOwogfQogCi1VbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBEcmF3R2x5cGhzUmVjb3JkZXI6
OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCitzdGF0aWMgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4
dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIpCiB7
Ci0gICAgYXV0byBjb250ZXh0RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3Jl
YXRlKHRoaXMpKTsKKyAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0
RGVsZWdhdGVDcmVhdGUoJnJlY29yZGVyKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxs
YmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlQmVnaW5MYXllciwgcmVpbnRlcnByZXRfY2Fz
dDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmYmVnaW5MYXllcikpOwogICAgIENHQ29udGV4
dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZUVuZExheWVyLCBy
ZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZlbmRMYXllcikpOwog
ICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBk
ZURyYXdHbHlwaHMsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4o
JldlYkNvcmU6OmRyYXdHbHlwaHMpKTsKQEAgLTg2LDY3ICs3NywxNSBAQCBVbmlxdWVSZWY8R3Jh
cGhpY3NDb250ZXh0PiBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgp
CiAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0Q0c+KGNvbnRleHQuZ2V0
KCkpOwogfQogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGlj
c0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5
cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQgZGVyaXZlRm9udEZyb21Db250ZXh0KQotICAgIDog
bV9vd25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdy
YXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVjdERyYXdHbHlwaHMg
ZGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQgZGVyaXZlRm9udEZy
b21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQoZGVzdGluYXRpb25Db250ZXh0
KQogICAgICwgbV9kZWNvbnN0cnVjdERyYXdHbHlwaHMoZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQog
ICAgICwgbV9kZXJpdmVGb250RnJvbUNvbnRleHQoZGVyaXZlRm9udEZyb21Db250ZXh0KQotICAg
ICwgbV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50ZXJuYWxDb250ZXh0KCkpCisgICAgLCBtX2lu
dGVybmFsQ29udGV4dChjcmVhdGVJbnRlcm5hbENvbnRleHQoKnRoaXMpKQogewogfQogCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCi17Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxT
dHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5maWxsQ29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRl
LmZpbGxTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnQ7Ci0gICAgbV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0
YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxs
U3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5maWxsUGF0dGVybjsKLQotICAgIG1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5zdHJva2VDb2xvcjsKLSAg
ICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQgPSBjb250ZXh0U3RhdGUuc3Ry
b2tlR3JhZGllbnQ7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsK
LSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5z
dHJva2VQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5hbFN0YXRlLmN0bSA9IG1fb3duZXIuZ2V0Q1RN
KCk7IC8vIEZJWE1FOiBEZWFsIHdpdGggYmFzZSBDVE0uCi0KLSAgICBtX29yaWdpbmFsU3RhdGUu
c2hhZG93Lm9mZnNldCA9IGNvbnRleHRTdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgbV9vcmlnaW5h
bFN0YXRlLnNoYWRvdy5ibHVyID0gY29udGV4dFN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgbV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5jb2xvciA9IGNvbnRleHRTdGF0ZS5zaGFkb3dDb2xvcjsKLSAgICBt
X29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPSBjb250ZXh0U3RhdGUuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0KLSAgICBtX2N1cnJlbnRTdGF0ZSA9IG1fb3JpZ2luYWxT
dGF0ZTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCi17Ci0gICAgaWYg
KG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAgICAgICBtX2lu
dGVybmFsQ29udGV4dC0+c2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29s
b3IpOwotICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQpCi0g
ICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0
ZS5maWxsU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxT
dHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxQYXR0
ZXJuKCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAgIGlm
IChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAgICAgICBt
X2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0
eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3Jh
ZGllbnQpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudCgqbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tl
U3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VS
VChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7Ci0gICAgICAgIGlmIChtX29y
aWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1faW50ZXJuYWxD
b250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0
dGVybik7Ci0gICAgfQotCi0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldENUTShtX29yaWdpbmFs
U3RhdGUuY3RtKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOwotICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQs
IG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xv
ciwgY29udGV4dFN0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwotCi0gICAgbV9pbnRlcm5hbENvbnRl
eHQtPnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLX0K
LQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3Qg
Rm9udCYgZm9udCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYgZm9udCwgRm9udFNtb290
aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBBU1NFUlQoQ0dBZmZpbmVUcmFuc2Zvcm1J
c0lkZW50aXR5KENURm9udEdldE1hdHJpeChmb250LnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKSkp
OwogCkBAIC0xNTYsMTA0ICs5NSwzOCBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFy
ZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5nTQogICAgIG1f
b3JpZ2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4KGZvbnQpOwogICAg
IGlmIChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9u
OjpWZXJ0aWNhbCkKICAgICAgICAgbV9vcmlnaW5hbFRleHRNYXRyaXggPSBjb21wdXRlVmVydGlj
YWxUZXh0TWF0cml4KGZvbnQsIG1fb3JpZ2luYWxUZXh0TWF0cml4KTsKLQotICAgIGF1dG8mIGNv
bnRleHRTdGF0ZSA9IG1fb3duZXIuc3RhdGUoKTsKLSAgICBwb3B1bGF0ZUludGVybmFsU3RhdGUo
Y29udGV4dFN0YXRlKTsKLSAgICBwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb250ZXh0U3RhdGUp
OwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQo
KQorR3JhcGhpY3NDb250ZXh0U3RhdGUgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJu
YWxDb250ZXh0KCkKIHsKLSAgICB1cGRhdGVDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0gICAg
dXBkYXRlRmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IsIG1fb3JpZ2lu
YWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQuZ2V0KCksIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5
bGUucGF0dGVybi5nZXQoKSk7Ci0gICAgdXBkYXRlU3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0YXRl
LnN0cm9rZVN0eWxlLmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQu
Z2V0KCksIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuLmdldCgpKTsKLSAgICB1
cGRhdGVTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0
ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciwgbV9vcmlnaW5hbFN0
YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID8gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Olll
cyA6IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpObyk7CisgICAgYXV0byBvcmlnaW5hbFN0YXRl
ID0gbV9kZXN0aW5hdGlvbkNvbnRleHQuc3RhdGUoKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+
bWVyZ2VTdGF0ZURpZmZzKG9yaWdpbmFsU3RhdGUpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5h
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJldHVybiBvcmlnaW5hbFN0YXRlOwogfQogCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlRmlsbENvbG9yKGNvbnN0IENvbG9yJiBuZXdDb2xv
ciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJuKiBuZXdQYXR0ZXJuKQordm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIG9yaWdpbmFsU3RhdGUpCiB7Ci0gICAgLy8gVGhpcyBjaGVjayBsb29rcyB3
cm9uZyBidXQgaXQgYWN0dWFsbHkgaXNuJ3QsIGZvciBvdXIgbGltaXRlZCB1c2UuCi0gICAgLy8g
Q1Qgd2lsbCBvbmx5IGV2ZXIgc2V0IHRoaXMgdG8gYSBzb2xpZCBjb2xvciwgd2hpY2ggdGhpcyBp
cyB0aGUgY29ycmVjdCBjaGVjayBmb3IuCi0gICAgLy8gSW4gY29uY2x1ZGVJbnRlcm5hbENvbnRl
eHQoKSB3ZSBzZXQgaXQgYmFjayB0byB3aGF0IGl0IHdhcyBvcmlnaW5hbGx5LCB3aGljaCB0aGlz
IGNoZWNrIHdvcmtzIGNvcnJlY3RseSBmb3IgdG9vLgotICAgIGlmIChuZXdDb2xvciA9PSBtX2N1
cnJlbnRTdGF0ZS5maWxsU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLmZpbGxDb2xvciA9IG5ld0Nv
bG9yOwotICAgIGlmIChuZXdHcmFkaWVudCkKLSAgICAgICAgbmV3U3RhdGUuZmlsbEdyYWRpZW50
ID0gbmV3R3JhZGllbnQ7Ci0gICAgaWYgKG5ld1BhdHRlcm4pCi0gICAgICAgIG5ld1N0YXRlLmZp
bGxQYXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0
YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UgfSk7Ci0gICAgbV9j
dXJyZW50U3RhdGUuZmlsbFN0eWxlLmNvbG9yID0gbmV3Q29sb3I7CisgICAgbV9kZXN0aW5hdGlv
bkNvbnRleHQubWVyZ2VTdGF0ZURpZmZzKG9yaWdpbmFsU3RhdGUpOwogfQogCi12b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIG5ld0NvbG9yLCBH
cmFkaWVudCogbmV3R3JhZGllbnQsIFBhdHRlcm4qIG5ld1BhdHRlcm4pCit2b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6cmVjb3JkQmVnaW5MYXllcihDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7Ci0gICAg
Ly8gVGhpcyBjaGVjayBsb29rcyB3cm9uZyBidXQgaXQgYWN0dWFsbHkgaXNuJ3QsIGZvciBvdXIg
bGltaXRlZCB1c2UuCi0gICAgLy8gQ1Qgd2lsbCBvbmx5IGV2ZXIgc2V0IHRoaXMgdG8gYSBzb2xp
ZCBjb2xvciwgd2hpY2ggdGhpcyBpcyB0aGUgY29ycmVjdCBjaGVjayBmb3IuCi0gICAgLy8gSW4g
Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKSB3ZSBzZXQgaXQgYmFjayB0byB3aGF0IGl0IHdhcyBv
cmlnaW5hbGx5LCB3aGljaCB0aGlzIGNoZWNrIHdvcmtzIGNvcnJlY3RseSBmb3IgdG9vLgotICAg
IGlmIChuZXdDb2xvciA9PSBtX2N1cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3U3RhdGU7Ci0gICAgbmV3
U3RhdGUuc3Ryb2tlQ29sb3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3JhZGllbnQpCi0gICAg
ICAgIG5ld1N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbmV3R3JhZGllbnQ7Ci0gICAgaWYgKG5ld1Bh
dHRlcm4pCi0gICAgICAgIG5ld1N0YXRlLnN0cm9rZVBhdHRlcm4gPSBuZXdQYXR0ZXJuOwotICAg
IG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZUNvbG9yQ2hhbmdlIH0pOwotICAgIG1fY3VycmVudFN0YXRlLnN0cm9rZVN0eWxlLmNv
bG9yID0gbmV3Q29sb3I7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0
ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5iZWdpblRyYW5zcGFy
ZW5jeUxheWVyKENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSk7CiB9CiAKLXZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjp1cGRhdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pCit2b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIoQ0dHU3RhdGVSZWYgZ3N0YXRlKQogewot
ICAgIGlmIChjdG0gPT0gbV9jdXJyZW50U3RhdGUuY3RtKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX293bmVyLnNldENUTShjdG0pOwotICAgIG1fY3VycmVudFN0YXRlLmN0bSA9IGN0bTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwor
ICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKLXN0
YXRpYyBib29sIHNoYWRvd0lzQ2xlYXJlZChjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwg
ZmxvYXQgc2hhZG93Qmx1cikKLXsKLSAgICByZXR1cm4gc2hhZG93T2Zmc2V0ID09IEZsb2F0U2l6
ZSgpICYmICFzaGFkb3dCbHVyOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRl
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyLCBj
b25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKQotewotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMgaWYgbm9ib2R5IGhhcyBhbnkgc2hhZG93cy4KLSAgICBpZiAo
c2hhZG93SXNDbGVhcmVkKHNoYWRvd09mZnNldCwgc2hhZG93Qmx1cikgJiYgc2hhZG93SXNDbGVh
cmVkKG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fY3VycmVudFN0YXRlLnNoYWRvdy5i
bHVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3U3Rh
dGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mgc3RhdGVDaGFu
Z2VGbGFnczsKLQotICAgIGlmIChzaGFkb3dPZmZzZXQgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93
Lm9mZnNldCB8fCBzaGFkb3dCbHVyICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5ibHVyIHx8IHNo
YWRvd0NvbG9yICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5jb2xvcikgewotICAgICAgICBuZXdT
dGF0ZS5zaGFkb3dPZmZzZXQgPSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRv
d0JsdXIgPSBzaGFkb3dCbHVyOwotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dDb2xvciA9IHNoYWRv
d0NvbG9yOwotICAgICAgICBzdGF0ZUNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKTsKLSAgICB9Ci0gICAgaWYgKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
ICE9IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpVbnNwZWNpZmllZCAmJiAoc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMgPT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlllcykgIT0gbV9jdXJyZW50
U3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMgPSAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPT0gU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM6Olllcyk7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7Ci0gICAgfQot
ICAgIGlmIChzdGF0ZUNoYW5nZUZsYWdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0g
ICAgbV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICBtX2N1
cnJlbnRTdGF0ZS5zaGFkb3cuYmx1ciA9IHNoYWRvd0JsdXI7Ci0gICAgbV9jdXJyZW50U3RhdGUu
c2hhZG93LmNvbG9yID0gc2hhZG93Q29sb3I7Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93Lmln
bm9yZVRyYW5zZm9ybXMgPSAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPT0gU2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM6Olllcyk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVT
aGFkb3coQ0dTdHlsZVJlZiBzdHlsZSkKK3N0YXRpYyB2b2lkIHNldERyb3BTaGFkb3coR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIENHU3R5bGVSZWYgc3R5bGUpCiB7CiAgICAg
aWYgKENHU3R5bGVHZXRUeXBlKHN0eWxlKSAhPSBrQ0dTdHlsZVNoYWRvdykgewogICAgICAgICAv
LyBGSVhNRTogU3VwcG9ydCBtb3JlIGtpbmRzIG9mIENHU3R5bGVzLgotICAgICAgICB1cGRhdGVT
aGFkb3coezAsIDB9LCAwLCBDb2xvcigpLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6VW5zcGVj
aWZpZWQpOworICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjYxLDIwICsxMzQsOSBAQCB2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUpCiAgICAgYXV0byByYWQgPSBk
ZWcycmFkKHNoYWRvd1N0eWxlLmF6aW11dGggLSAxODApOwogICAgIGF1dG8gc2hhZG93T2Zmc2V0
ID0gRmxvYXRTaXplKHN0ZDo6Y29zKHJhZCksIHN0ZDo6c2luKHJhZCkpICogc2hhZG93U3R5bGUu
aGVpZ2h0OwogICAgIGF1dG8gc2hhZG93Q29sb3IgPSBDR1N0eWxlR2V0Q29sb3Ioc3R5bGUpOwot
ICAgIHVwZGF0ZVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1N0eWxlLnJhZGl1cywgQ29sb3I6
OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzaGFkb3dDb2xvciksIFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zOjpZZXMpOwotfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkQmVn
aW5MYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCkK
LXsKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIGF1dG8gYWxw
aGEgPSBDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSk7Ci0gICAgbV9vd25lci5iZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGFscGhhKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVu
ZExheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSkKLXsKLSAgICB1
cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIG1fb3duZXIuZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNo
YWRvd09mZnNldCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNoYWRvd1N0eWxlLnJhZGl1cyksIENvbG9y
OjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3IpIH0pOworICAgIGRlc3Rp
bmF0aW9uQ29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKIH0KIAogc3Rh
dGljIFZlY3RvcjxDR1NpemU+IGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMoY29uc3QgQ0dQ
b2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50LCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSYg
dGV4dE1hdHJpeCkKQEAgLTI5MCwxOCArMTUyLDE4IEBAIHN0YXRpYyBWZWN0b3I8Q0dTaXplPiBj
b21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNp
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25z
dCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9p
bnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpy
ZWNvcmREcmF3R2x5cGhzKENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dHbHlwaCBnbHlwaHNb
XSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQogewogICAgIEFTU0VS
VF9JTVBMSUVTKG1fZGVyaXZlRm9udEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29udGV4
dDo6Tm8sIG1fb3JpZ2luYWxGb250KTsKIAotICAgIGlmICghY291bnQpCisgICAgaWYgKCFjb3Vu
dCB8fCBDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkgPD0gMCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQ0dGb250UmVmIHVzZWRGb250ID0gQ0dHU3RhdGVHZXRGb250KGdzdGF0ZSk7CiAgICAgaWYg
KG1fZGVyaXZlRm9udEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29udGV4dDo6Tm8gJiYg
dXNlZEZvbnQgIT0gYWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KG1fb3JpZ2luYWxGb250
LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbnVsbHB0cikpLmdldCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIG1fZGVz
dGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CiAKICAgICAv
LyBXZSB3YW50IHRoZSByZXBsYXllcidzIENUTSBhbmQgdGV4dCBtYXRyaXggdG8gbWF0Y2ggdGhl
IGN1cnJlbnQgQ1RNIGFuZCB0ZXh0IG1hdHJpeC4KICAgICAvLyBUaGUgY3VycmVudCB0ZXh0IG1h
dHJpeCBpcyBhIGNvbmNhdGVuYXRpb24gb2Ygd2hhdGV2ZXIgV2ViS2l0IHNldHMgaXQgdG8gYW5k
IHdoYXRldmVyCkBAIC0zMjQsMTMgKzE4NiwxNiBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6
cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdAog
ICAgICAgICBpbnZlcnNlQ1RNRml4dXAgPSBpbnZlcnNlLnZhbHVlKCk7CiAgICAgZWxzZQogICAg
ICAgICBjdG1GaXh1cCA9IEFmZmluZVRyYW5zZm9ybSgpOwotICAgIG1fb3duZXIuY29uY2F0Q1RN
KGN0bUZpeHVwKTsKKworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmNvbmNhdENUTShjdG1GaXh1
cCk7CiAKICAgICBhdXRvIGZpbGxDb2xvciA9IENHR1N0YXRlR2V0RmlsbENvbG9yKGdzdGF0ZSk7
CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpjcmVhdGVBbmRQ
cmVzZXJ2ZUNvbG9yU3BhY2UoZmlsbENvbG9yKSk7CisKICAgICBhdXRvIHN0cm9rZUNvbG9yID0g
Q0dHU3RhdGVHZXRTdHJva2VDb2xvcihnc3RhdGUpOwotICAgIHVwZGF0ZUZpbGxDb2xvcihDb2xv
cjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikpOwotICAgIHVwZGF0ZVN0
cm9rZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc3Ryb2tlQ29sb3Ip
KTsKLSAgICB1cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKyAgICBtX2Rl
c3RpbmF0aW9uQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVD
b2xvclNwYWNlKHN0cm9rZUNvbG9yKSk7CisKKyAgICBzZXREcm9wU2hhZG93KG1fZGVzdGluYXRp
b25Db250ZXh0LCBDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOwogCiAgICAgYXV0byBmb250U2l6
ZSA9IENHR1N0YXRlR2V0Rm9udFNpemUoZ3N0YXRlKTsKICAgICBSZWYgZm9udCA9IG1fZGVyaXZl
Rm9udEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29udGV4dDo6Tm8gPyAqbV9vcmlnaW5h
bEZvbnQgOiBGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShhZG9wdENGKENURm9udENyZWF0
ZVdpdGhHcmFwaGljc0ZvbnQodXNlZEZvbnQsIGZvbnRTaXplLCBudWxscHRyLCBudWxscHRyKSks
IGZvbnRTaXplKSk7CkBAIC0zNDUsMzAgKzIxMCwzOCBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3Rh
dAogICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIzMjkxNz4gKGBEcmF3
R2x5cGhzUmVjb3JkZXJgIHNob3VsZCBiZSBhYmxlIHRvIHJlY29yZCtyZXBsYXkgdmVydGljYWwg
dGV4dCkKICAgICB9CiAKLSAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwg
Z2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9ucywgY291bnQsIHRl
eHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIHRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBd
KSwgbV9zbW9vdGhpbmdNb2RlKTsKLQotICAgIG1fb3duZXIuY29uY2F0Q1RNKGludmVyc2VDVE1G
aXh1cCk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChm
b250LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3Vu
dCwgdGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgdGV4dE1hdHJpeC5tYXBQb2ludChwb3NpdGlv
bnNbMF0pLCBtX3Ntb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmNvbmNh
dENUTShpbnZlcnNlQ1RNRml4dXApOwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVj
b3JkRHJhd0ltYWdlKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dS
ZWN0IHJlY3QsIENHSW1hZ2VSZWYgY2dJbWFnZSkKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpy
ZWNvcmREcmF3SW1hZ2UoQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJl
ZiBjZ0ltYWdlKQogewotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0g
ICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5h
dGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBzZXREcm9w
U2hhZG93KG1fZGVzdGluYXRpb25Db250ZXh0LCBDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOwog
CiAgICAgLy8gQ29yZSBHcmFwaGljcyBhc3N1bWVzIGEgInkgdXAiIGNvb3JkaW5hdGUgc3lzdGVt
LCBidXQgaW4gV2ViS2l0LCB3ZSB1c2UgYSAieS1kb3duIiBjb29yZGluYXRlIHN5c3RlbS4KICAg
ICAvLyBUaGlzIG1lYW5zIHRoYXQgV2ViS2l0J3MgZHJhd2luZyByb3V0aW5lcyAoR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UoKSkgaW50ZW50aW9uYWxseSBkcmF3IGltYWdlcyB1cHNpZGUtZG93
biBmcm9tIENvcmUgR3JhcGhpY3MncyBwb2ludCBvZiB2aWV3LgogICAgIC8vIChUaGVyZSdzIGEg
eS1mbGlwIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2UoKS4pCiAgICAgLy8gVGhlIHJlY3QgaGFzIHRoZSByaWdodCBib3VuZHMsIGJ1dCB3ZSBu
ZWVkIHRvIHRyYW5zZm9ybSBmcm9tIENHJ3MgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gV2ViS2l0J3Mg
YnkgcGVyZm9ybWluZyBvdXIgb3duIHktZmxpcCBzbyBpbWFnZXMgYXJlIGRyYXduIHRoZSByaWdo
dC1zaWRlLXVwLgogICAgIC8vIFdlIGRvIHRoaXMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdGhl
IHR3byBBUElzLCB3aGljaCBpcyByaWdodCBoZXJlLgotICAgIG1fb3duZXIudHJhbnNsYXRlKDAs
IHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSk7Ci0gICAgbV9vd25lci5zY2Fs
ZShGbG9hdFNpemUoMSwgLTEpKTsKLQorICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnRyYW5zbGF0
ZSgwLCByZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIAogICAgIGF1dG8gaW1h
Z2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAgIG1fb3duZXIuZHJhd05hdGl2
ZUltYWdlKCppbWFnZSwgaW1hZ2UtPnNpemUoKSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9hdFJlY3Qg
e3sgfSwgaW1hZ2UtPnNpemUoKX0sIEltYWdlUGFpbnRpbmdPcHRpb25zIHsgSW1hZ2VPcmllbnRh
dGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKLQorICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdO
YXRpdmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5zaXplKCksIEZsb2F0UmVjdChyZWN0KSwgRmxvYXRS
ZWN0IHsgeyB9LCBpbWFnZS0+c2l6ZSgpIH0sIEltYWdlUGFpbnRpbmdPcHRpb25zIHsgSW1hZ2VP
cmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKKyAgICAKICAgICAvLyBVbmRvIHRoZSBhYm92
ZSB5LWZsaXAgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4KLSAgICBtX293bmVyLnNjYWxlKEZsb2F0
U2l6ZSgxLCAtMSkpOwotICAgIG1fb3duZXIudHJhbnNsYXRlKDAsIC0ocmVjdC5zaXplLmhlaWdo
dCArIDIgKiByZWN0Lm9yaWdpbi55KSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUo
RmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRlKDAs
IC0ocmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KSk7Cit9CisKK3ZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAgc2V0SW50ZXJuYWxGb250KGZv
bnQsIHNtb290aGluZ01vZGUpOworICAgIAorICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9IHByZXBh
cmVJbnRlcm5hbENvbnRleHQoKTsKKyAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2ludGVy
bmFsQ29udGV4dCwgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50
LCBzbW9vdGhpbmdNb2RlKTsKKyAgICByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KG9yaWdpbmFs
U3RhdGUpOwogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQpAQCAtMzc5
LDI1ICsyNTIsMTkgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1bihjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKgogICAgICAgICBhdXRvIGJvdW5k
cyA9IGZvbnQuYm91bmRzRm9yR2x5cGgoZ2x5cGhzW2ldKTsKIAogICAgICAgICAvLyBDcmVhdGUg
YSBsb2NhbCBJbWFnZUJ1ZmZlciBiZWNhdXNlIGRlY29kaW5nIHRoZSBTVkcgZm9udHMgaGFzIHRv
IGhhcHBlbiBpbiBXZWJQcm9jZXNzLgotICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1f
b3duZXIuY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGJvdW5kcywgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIFJlbmRlcmluZ01ldGhvZDo6TG9jYWwpKSB7CisgICAgICAgIGlmIChhdXRv
IGltYWdlQnVmZmVyID0gbV9kZXN0aW5hdGlvbkNvbnRleHQuY3JlYXRlQWxpZ25lZEltYWdlQnVm
ZmVyKGJvdW5kcywgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFJlbmRlcmluZ01ldGhv
ZDo6TG9jYWwpKSB7CisgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CiAgICAgICAgICAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhpbWFnZUJ1
ZmZlci0+Y29udGV4dCgpLCBmb250LCBnbHlwaHMgKyBpLCBhZHZhbmNlcyArIGksIDEsIEZsb2F0
UG9pbnQoKSwgc21vb3RoaW5nTW9kZSk7CiAKICAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0aW5h
dGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcyk7CiAgICAgICAgICAgICBkZXN0aW5h
dGlvblJlY3QubW92ZUJ5KHBlblBvc2l0aW9uKTsKLSAgICAgICAgICAgIG1fb3duZXIuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICAgICAgICAgIG1f
ZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRlc3RpbmF0
aW9uUmVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBwZW5Qb3NpdGlvbi5tb3ZlKHNpemUoYWR2
YW5jZXNbaV0pKTsKICAgICB9CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3Tm9u
T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhz
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGlu
Z01vZGUpCi17Ci0gICAgcHJlcGFyZUludGVybmFsQ29udGV4dChmb250LCBzbW9vdGhpbmdNb2Rl
KTsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2ludGVybmFsQ29udGV4dCwgZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsK
LSAgICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOwotfQotCiB2b2lkIERyYXdHbHlwaHNSZWNv
cmRlcjo6ZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBz
dGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGF1dG8g
b3RzdmdHbHlwaHMgPSBmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBocyk7CkBA
IC00NDAsNyArMzA3LDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGlu
Z0ludG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiBmb24KIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGlmIChtX2RlY29uc3RydWN0RHJhd0dseXBocyA9
PSBEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKSB7Ci0gICAgICAgIG1fb3duZXIuZHJhd0dseXBo
c0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9p
bnQsIHNtb290aGluZ01vZGUpOworICAgICAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3R2x5
cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQ
b2ludCwgc21vb3RoaW5nTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ1Mywx
NSArMzIwLDE3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3TmF0aXZlVGV4dChDVEZv
bnRSZWYgZm9udCwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lCiB7CiAgICAgQVNTRVJUKG1fZGVj
b25zdHJ1Y3REcmF3R2x5cGhzID09IERlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKIAotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIobV9vd25lcik7CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzYXZlcihtX2Rlc3RpbmF0aW9uQ29udGV4dCk7CiAKLSAgICBtX293
bmVyLnRyYW5zbGF0ZShsaW5lUmVjdC5vcmlnaW4ueCwgbGluZVJlY3Qub3JpZ2luLnkgKyBsaW5l
UmVjdC5zaXplLmhlaWdodCk7Ci0gICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsK
KyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUobGluZVJlY3Qub3JpZ2luLngsIGxp
bmVSZWN0Lm9yaWdpbi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOworICAgIG1fZGVzdGluYXRp
b25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogCi0gICAgcHJlcGFyZUludGVybmFs
Q29udGV4dChGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShmb250LCBmb250U2l6ZSkpLCBG
b250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCk7CisgICAgc2V0SW50ZXJuYWxG
b250KEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGZvbnQsIGZvbnRTaXplKSksIEZvbnRT
bW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKKyAgICAKKyAgICBhdXRvIG9yaWdp
bmFsU3RhdGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U2V0VGV4
dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgMCwgMCk7CiAg
ICAgQ1RMaW5lRHJhdyhsaW5lLCBtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgcmVzdG9yZURlc3RpbmF0aW9u
Q29udGV4dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENh
c2NhZGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAppbmRleCA1MTFlMDliOTZjZWYwMzI1MDkwZTIz
YWY5MTRhZTM1ZjJhYjhlZDJlLi5lNTM0Y2M1NWFmMjZiN2ZiODI4MGU2M2I3ZGMyNWEzZDRhNDE2
Mzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4
dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcApAQCAtMTUyLDI1ICsxNTIs
MjcgQEAgc3RhdGljIHZvaWQgZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25zKFZl
Y3RvcjxDR1BvaW50LCAyNTY+JiBwb3NpdGlvbnMKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQm
IGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0
IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRleHRNYXRyaXgpCitzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWdu
ZWQgY291bnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4dE1hdHJpeCkKIHsKICAgICBpZiAo
IWNvdW50KQogICAgICAgICByZXR1cm47CiAKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0g
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBw
bGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOworCiAgICAgVmVjdG9yPENHUG9pbnQs
IDI1Nj4gcG9zaXRpb25zKGNvdW50KTsKICAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0aW9u
KCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewotICAgICAgICBTY29wZWRUZXh0TWF0
cml4IHNhdmVkTWF0cml4KGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9udCwgdGV4dE1hdHJp
eCksIGNvbnRleHQpOworICAgICAgICBTY29wZWRUZXh0TWF0cml4IHNhdmVkTWF0cml4KGNvbXB1
dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9udCwgdGV4dE1hdHJpeCksIGNnQ29udGV4dCk7CiAKICAg
ICAgICAgVmVjdG9yPENHU2l6ZSwgMjU2PiB0cmFuc2xhdGlvbnMoY291bnQpOwogICAgICAgICBD
VEZvbnRHZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhwbGF0Zm9ybURhdGEuY3RGb250
KCksIGdseXBocywgdHJhbnNsYXRpb25zLmRhdGEoKSwgY291bnQpOwogCiAgICAgICAgIGF1dG8g
YXNjZW50RGVsdGEgPSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNC
YXNlbGluZSkgLSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKTsKLSAgICAgICAgZmls
bFZlY3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgdHJh
bnNsYXRpb25zLmRhdGEoKSwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCwgYXNjZW50RGVsdGEpOwot
ICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBw
b3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7CisgICAgICAgIGZpbGxWZWN0b3JXaXRo
VmVydGljYWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNnQ29udGV4dCwgdHJhbnNsYXRpb25z
LmRhdGEoKSwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCwgYXNjZW50RGVsdGEpOworICAgICAgICBD
VEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMu
ZGF0YSgpLCBjb3VudCwgY2dDb250ZXh0KTsKICAgICB9IGVsc2UgewotICAgICAgICBmaWxsVmVj
dG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIGFkdmFu
Y2VzLCBjb3VudCwgcG9pbnQpOwotICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0
YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7Cisg
ICAgICAgIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywg
Y2dDb250ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKKyAgICAgICAgQ1RGb250RHJhd0ds
eXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291
bnQsIGNnQ29udGV4dCk7CiAgICAgfQogfQogCkBAIC0yNDIsMTAgKzI0NCw3IEBAIHZvaWQgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250
JiBmb250LCBjb25zdCBHCiAgICAgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShjb250ZXh0KTsKICAg
ICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkpOwog
Ci0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAg
IENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGNvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgIGF1dG8gZHJvcFNoYWRvdyA9IGNvbnRleHQu
ZHJvcFNoYWRvdygpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRDVE0gPSBjb250ZXh0
LmdldENUTSgpOwogICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKTsKQEAgLTI1OCwyOSArMjU3LDI5IEBAIHZvaWQgRm9udENhc2NhZGU6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBHCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250
ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dD
b2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0
bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGNvbnRl
eHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRleHQuaXNJ
blRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250ZXh0
LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBkcm9wU2hhZG93
LmNvbG9yLmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRvdy5ibHVyUmFkaXVzICYmICFwbGF0Zm9ybURh
dGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYm
ICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmIChoYXNTaW1wbGVTaGFk
b3cpIHsKICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQg
b2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFs
aWFzaW5nLgogICAgICAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9yIGZp
bGxDb2xvciA9IGNvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxD
b2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5h
bHBoYUFzRmxvYXQoKSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IGRyb3BTaGFk
b3cuY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9h
dCgpKTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAg
ICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgo
KTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9m
ZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zv
cm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBz
byBkb3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50Lnko
KSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKCkgPyAtMSA6IDEpOwotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9p
bnQoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0
WSA9IHBvaW50LnkoKSArIGRyb3BTaGFkb3cub2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisgICAgICAgIHNob3dHbHlwaHNXaXRo
QWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjb250
ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogICAgICAgICBp
ZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5j
ZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRvd1Rl
eHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRN
YXRyaXgpOworICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNo
YWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250LCBjb250
ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogICAgICAgICBj
b250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOwogICAgIH0KIAotICAgIHNob3dHbHlwaHNX
aXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVt
R2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBm
b250LCBjb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwog
CiAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2ludC55
KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1h
dHJpeCk7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54
KCkgKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBjb250ZXh0LCBnbHlw
aHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogCiAgICAgaWYgKGhhc1NpbXBs
ZVNoYWRvdykKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dC
bHVyLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyhkcm9wU2hh
ZG93KTsKIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChzaG91bGRTbW9vdGhG
b250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0LmNwcAppbmRleCAyZTJmNGY0ZjJjYjU1ZDM2NWU1YWUzOTkzMjVkMDVmMmMxNzM2MWZkLi5j
Y2Y0MGNlYTYyYjE2NzQzNjZkNzQ4NDE2MmIxYmM0ZTkzNzcwNzU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5jcHAKQEAgLTkwLDEwICs5MCw3IEBAIGJvb2wgRGlzcGxheUxpc3Q6OnNob3VsZER1
bXBGb3JGbGFncyhBc1RleHRGbGFncyBmbGFncywgSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICBp
ZiAoIShmbGFncyAmIEFzVGV4dEZsYWc6OkluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zKSkgewog
ICAgICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJdGVtID0gaXRlbS5nZXQ8U2V0U3RhdGU+KCk7
CiAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIG5vdywgb25seSBkcm9wIHRoZSBpdGVtIGlmIHRo
ZSBvbmx5IHN0YXRlLWNoYW5nZSBmbGFncyBhcmUgcGxhdGZvcm0tc3BlY2lmaWMuCi0gICAgICAg
ICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0
ZUNoYW5nZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3Rh
dGUoKS5jaGFuZ2VzKCkgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKQEAgLTIwMiwxNiArMTk5LDYgQEAgdm9pZCBEaXNwbGF5TGlz
dDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTYXZlPihp
dGVtLmdldDxTYXZlPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICBy
ZXR1cm4gYXBwZW5kPFJlc3RvcmU+KGl0ZW0uZ2V0PFJlc3RvcmU+KCkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxUcmFuc2xhdGU+KGl0ZW0u
Z2V0PFRyYW5zbGF0ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPFJvdGF0ZT4oaXRlbS5nZXQ8Um90YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTY2FsZT4oaXRlbS5nZXQ8U2NhbGU+
KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4g
YXBwZW5kPENvbmNhdGVuYXRlQ1RNPihpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldENUTT4oaXRl
bS5nZXQ8U2V0Q1RNPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6
CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtLmdldDxTZXRJ
bmxpbmVGaWxsQ29sb3I+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNv
bG9yOgpAQCAtMjIwLDE2ICsyMDcsNiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhh
bmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRl
bS5nZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdGF0ZT4oaXRlbS5nZXQ8U2V0U3RhdGU+KCkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8
U2V0TGluZUNhcD4oaXRlbS5nZXQ8U2V0TGluZUNhcD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZURhc2g+KGl0ZW0uZ2V0
PFNldExpbmVEYXNoPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lSm9pbj4oaXRlbS5nZXQ8U2V0TGluZUpvaW4+KCkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8
U2V0TWl0ZXJMaW1pdD4oaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8Q2xlYXJTaGFkb3c+KGl0
ZW0uZ2V0PENsZWFyU2hhZG93PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAg
ICByZXR1cm4gYXBwZW5kPENsaXA+KGl0ZW0uZ2V0PENsaXA+KCkpOwogICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBPdXQ6CkBAIC0yNzQsOCArMjUxLDYgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5k
KEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhDb2xv
cj4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aEdy
YWRpZW50PihpdGVtLmdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxDb21w
b3NpdGVkUmVjdD4oaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJvdW5k
ZWRSZWN0PihpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDBjMjUyMjY0YWY0MTY2NTYyMTc1MTYwNDEwNDJh
OGJkZDNiZmFiYjUuLmRlZmNlODRlZjM1ODdiZWEwNmQyMDdkYjViODAyYWE3YzgyNTY1MGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKQEAg
LTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0
IHsKIAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKLSAgICA6IG1fY29u
dGV4dChtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9
LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0pCisgICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlz
dCwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCmluZGV4IDQ1Nzc1NTE4OWJk
YWRkNzE5ZDI0NWE0ZTZkMmM4MWJkZGIxZjdkZjMuLjBkYjE1MDM5NjA0MDMyZjMzMDNmYmNiNjUy
MWU1M2U0ZTM0ZjkxOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZm
ZXIuY3BwCkBAIC01MiwyMSArNTIsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICBn
ZXQ8UmVzdG9yZT4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgZ2V0PFRyYW5zbGF0ZT4oKS5hcHBseShjb250
ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAg
ICAgZ2V0PFJvdGF0ZT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBnZXQ8U2NhbGU+KCkuYXBwbHkoY29udGV4dCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAg
ICAgICAgZ2V0PENvbmNhdGVuYXRlQ1RNPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBnZXQ8U2V0Q1RNPigpLmFw
cGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lRmlsbENvbG9yOgogICAgICAgICBnZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpLmFwcGx5KGNv
bnRleHQpOwogICAgICAgICByZXR1cm47CkBAIC03OSwyMSArNjQsNiBAQCB2b2lkIEl0ZW1IYW5k
bGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRTdGF0ZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBnZXQ8U2V0TGluZUNhcD4o
KS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVEYXNoOgotICAgICAgICBnZXQ8U2V0TGluZURhc2g+KCkuYXBwbHkoY29udGV4dCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAg
Z2V0PFNldExpbmVKb2luPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgZ2V0PFNldE1pdGVyTGltaXQ+
KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclNoYWRvdzoKLSAgICAgICAgZ2V0PENsZWFyU2hhZG93PigpLmFwcGx5KGNvbnRleHQpOwot
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgZ2V0PENs
aXA+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2MCw5ICsxMzAsNiBA
QCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAgZ2V0PEZpbGxSZWN0
V2l0aEdyYWRpZW50PigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBnZXQ8RmlsbENvbXBvc2l0
ZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLmFw
cGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CkBAIC0yNzAsOSArMjM3LDYgQEAgdm9pZCBJ
dGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICAg
ICAgZ2V0PERyYXdQYXRoPigpLn5EcmF3UGF0aCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBnZXQ8RmlsbENvbXBvc2l0
ZWRSZWN0PigpLn5GaWxsQ29tcG9zaXRlZFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAgICBnZXQ8RmlsbFBhdGg+KCkufkZpbGxQYXRo
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4OCw5ICsyNTIsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6
OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAg
Z2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5+RmlsbFJvdW5kZWRSZWN0KCk7CiAgICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0PFNldExpbmVE
YXNoPigpLn5TZXRMaW5lRGFzaCgpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0U3RhdGU6CiAgICAgICAgIGdldDxTZXRTdGF0ZT4oKS5+U2V0U3RhdGUoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzE0LDkgKzI3NSw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgp
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclJlY3Q+Ojp2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJTaGFkb3c+Ojp2YWx1
ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwPjo6dmFsdWUp
OwogICAgICAgICByZXR1cm47CkBAIC0zMjYsOSArMjg0LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpk
ZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xpcFRvSW1hZ2VC
dWZmZXI+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8Q29uY2F0ZW5hdGVDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgogICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC0zODcsMzMgKzM0MiwxNSBAQCB2
b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJlc3Rv
cmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJv
dGF0ZT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNh
dmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2Nh
bGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNl
dENUTT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZUZpbGxDb2xvcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8U2V0SW5saW5lRmlsbENvbG9yPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZVN0cm9rZUNv
bG9yPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZUNhcDoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8U2V0TGluZUNhcD46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVKb2luOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxTZXRMaW5lSm9pbj46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldE1pdGVyTGltaXQ+Ojp2YWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldFN0cm9r
ZVRoaWNrbmVzcz46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDM3LDkgKzM3NCw2IEBA
IHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGlu
ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
U3Ryb2tlTGluZT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6
OlRyYW5zbGF0ZToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8VHJhbnNsYXRlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgfQogfQog
CkBAIC01MDEsOCArNDM1LDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBp
dGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPERyYXdQYXR0ZXJuPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1BhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3UGF0aD4oaXRlbU9mZnNl
dCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMp
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAgICByZXR1cm4gY29weUludG88
RmlsbFBhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcjoKQEAgLTUxMyw4ICs0NDUsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5
KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAg
ICByZXR1cm4gY29weUludG88RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVy
biBjb3B5SW50bzxGaWxsUm91bmRlZFJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVE
YXNoPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAg
ICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRTdGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CkBAIC01MzEsMTYgKzQ2MSwxMiBAQCBib29sIEl0
ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0
aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88QmVnaW5UcmFuc3BhcmVuY3lMYXll
cj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKICAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPENsZWFyUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gY29weUludG88Q2xl
YXJTaGFkb3c+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgog
ICAgICAgICByZXR1cm4gY29weUludG88Q2xpcD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBPdXQ6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwT3V0Pihp
dGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwVG9JbWFnZUJ1ZmZlcj4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1
cm4gY29weUludG88Q29uY2F0ZW5hdGVDVE0+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgogICAgICAgICByZXR1cm4gY29w
eUludG88RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgpAQCAtNTczLDI0ICs0OTksMTIgQEAgYm9vbCBJ
dGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5h
dGlvbikgY29uc3QKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAg
IHJldHVybiBjb3B5SW50bzxSZXN0b3JlPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gY29weUludG88Um90YXRlPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPFNhdmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2Fs
ZToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNjYWxlPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0Q1RN
PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENv
bG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5saW5lRmlsbENvbG9yPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CiAg
ICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJldHVybiBj
b3B5SW50bzxTZXRMaW5lQ2FwPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRMaW5lSm9pbj4oaXRl
bU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAg
ICAgIHJldHVybiBjb3B5SW50bzxTZXRNaXRlckxpbWl0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgICAgICByZXR1cm4gY29w
eUludG88U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKQEAgLTYwNyw4ICs1MjEsNiBAQCBib29sIEl0ZW1IYW5k
bGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBj
b25zdAogICAgICAgICByZXR1cm4gY29weUludG88U3Ryb2tlUmVjdD4oaXRlbU9mZnNldCwgKnRo
aXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgICAgIHJldHVybiBjb3B5
SW50bzxTdHJva2VMaW5lPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gY29weUludG88VHJhbnNsYXRlPihpdGVtT2Zmc2V0
LCAqdGhpcyk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCA1NGVhMWM4NjgyYzA3NDQyZTJlODQxNGI3MzI4
YWEzMjQ4MDI1YTc1Li5iYTBkOTUxYzIyY2Y0OWNlNDE3ZTMzNTUzYjAwZTBhNWI4YWIyMDk1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCkBAIC0zOCwxNiArMzgs
NiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAg
ICAgIHJldHVybiBzaXplb2YoU2F2ZSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAg
ICAgICAgcmV0dXJuIHNpemVvZihSZXN0b3JlKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xh
dGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoVHJhbnNsYXRlKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoUm90YXRlKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihTY2FsZSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoQ29uY2F0ZW5hdGVD
VE0pOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihT
ZXRDVE0pOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAg
cmV0dXJuIHNpemVvZihTZXRJbmxpbmVGaWxsQ29sb3IpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZVN0cm9rZUNvbG9yOgpAQCAtNTYsMTYgKzQ2LDYgQEAgc3RhdGljIHNpemVfdCBzaXpl
T2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0
cm9rZVRoaWNrbmVzcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJl
dHVybiBzaXplb2YoU2V0U3RhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZUNhcCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZURhc2gpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVKb2lu
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFNldE1pdGVyTGltaXQpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKENsZWFyU2hhZG93KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
OgogICAgICAgICByZXR1cm4gc2l6ZW9mKENsaXApOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBP
dXQ6CkBAIC0xMTAsOCArOTAsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0
ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoRmlsbFJlY3RXaXRoQ29sb3IpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxSZWN0V2l0aEdyYWRpZW50KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29t
cG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoRmlsbENvbXBvc2l0ZWRSZWN0KTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVybiBzaXpl
b2YoRmlsbFJvdW5kZWRSZWN0KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZToKQEAgLTE4MiwyOCArMTYwLDE4IEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlw
ZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CiAgICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6
Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6
Rmx1c2hDb250ZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2NhbGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VD
b2xvcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVEYXNoOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgIGNhc2UgSXRlbVR5cGU6
OlRyYW5zbGF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSXRlbVR5cGU6OkJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgpAQCAt
MjIyLDcgKzE5MCw2IEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgogICAg
IGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKICNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsTGluZToK
QEAgLTI4OCwxMyArMjU1LDExIEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGlu
ZXNGb3JUZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZToKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZURhc2g6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3U3lzdGVt
SW1hZ2U6CkBAIC0zMDYsMTEgKzI3MSw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5
cGUpCiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBP
dXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcjoKQEAgLTMzMywxNSArMjk2LDkgQEAgYm9v
bCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZy
YW1lRm9yTWVkaWE6CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgIGNh
c2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgotICAgIGNhc2Ug
SXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
U3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0Ogog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICBjYXNlIEl0ZW1UeXBl
OjpTdHJva2VFbGxpcHNlOgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpAQCAtMzUxLDcg
KzMwOCw2IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAjZW5kaWYKICAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6
Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuaAppbmRleCBkNjgzYjJhY2Y3ODQ1Zjk5YzNjZDA5NWViOTExZTU0ZjFmOGNlMTEx
Li4xNjYwYjk4ZmRhNWVmMjdiM2Y3NWQyMmE1NzlhM2E5YWUzY2M3MGZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAgLTMxLDIwICszMSwxMCBAQCBuYW1lc3BhY2Ug
RGlzcGxheUxpc3QgewogZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIFNhdmUs
CiAgICAgUmVzdG9yZSwKLSAgICBUcmFuc2xhdGUsCi0gICAgUm90YXRlLAotICAgIFNjYWxlLAot
ICAgIENvbmNhdGVuYXRlQ1RNLAotICAgIFNldENUTSwKICAgICBTZXRJbmxpbmVGaWxsQ29sb3Is
CiAgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgU2V0U3Ryb2tlVGhpY2tuZXNzLAogICAg
IFNldFN0YXRlLAotICAgIFNldExpbmVDYXAsCi0gICAgU2V0TGluZURhc2gsCi0gICAgU2V0TGlu
ZUpvaW4sCi0gICAgU2V0TWl0ZXJMaW1pdCwKLSAgICBDbGVhclNoYWRvdywKICAgICBDbGlwLAog
ICAgIENsaXBPdXQsCiAgICAgQ2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC02Nyw3ICs1Nyw2IEBAIGVu
dW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGaWxsUmVjdCwKICAgICBGaWxsUmVj
dFdpdGhDb2xvciwKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudCwKLSAgICBGaWxsQ29tcG9zaXRl
ZFJlY3QsCiAgICAgRmlsbFJvdW5kZWRSZWN0LAogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
LAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuY3BwCmluZGV4IDIzZDBiYmNjNzFjMjgxYzUyYzM1YThjMjUyZGE5NmMwYWIxMmE5OGMu
LjM2ZmE2YTEyN2ZmMDc5M2NlZjIzMGVkZjdhNjQxZGRlMDJmZTM3NGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEaXNw
bGF5TGlzdFJlcGxheWVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZS5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKQEAgLTU0LDY3ICs1NSw2IEBAIHZvaWQgUmVzdG9yZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQogCi12b2lk
IFRyYW5zbGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAg
IGNvbnRleHQudHJhbnNsYXRlKG1feCwgbV95KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRlbSkKLXsKLSAgICB0
cy5kdW1wUHJvcGVydHkoIngiLCBpdGVtLngoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ5Iiwg
aXRlbS55KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFJvdGF0ZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQucm90YXRlKG1fYW5n
bGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUm90YXRlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5nbGUiLCBpdGVt
LmFuZ2xlKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNjYWxlOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zY2FsZShtX3NpemUp
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2NhbGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzaXplIiwgaXRlbS5hbW91
bnQoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0Q1RNOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRDVE0obV90cmFuc2Zv
cm0pOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU2V0Q1RNJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgic2V0LWN0bSIsIGl0
ZW0udHJhbnNmb3JtKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENvbmNhdGVuYXRl
Q1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4
dC5jb25jYXRDVE0obV90cmFuc2Zvcm0pOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29uY2F0ZW5hdGVDVE0mIGl0ZW0pCi17Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJjdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVybiB0
czsKLX0KLQogdm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihjb2xvcigpKTsKQEAg
LTE0OCw3NyArODgsMjIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNldFN0cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiAgICAgcmV0dXJuIHRzOwog
fQogCi1TZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICA6IG1f
c3RhdGVDaGFuZ2Uoc3RhdGUsIGZsYWdzKQotewotfQotCi1TZXRTdGF0ZTo6U2V0U3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQotICAgIDogbV9zdGF0
ZUNoYW5nZShzdGF0ZUNoYW5nZSkKK1NldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUpCisgICAgOiBtX3N0YXRlKHN0YXRlKQogewogfQogCiB2b2lkIFNl
dFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgbV9zdGF0ZUNo
YW5nZS5hcHBseShjb250ZXh0KTsKKyAgICBjb250ZXh0Lm1lcmdlU3RhdGVDaGFuZ2VzKG1fc3Rh
dGUpOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU2V0U3RhdGUmIHN0YXRlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRlLnN0
YXRlQ2hhbmdlKCk7CisgICAgdHMgPDwgaXRlbS5zdGF0ZSgpOwogICAgIHJldHVybiB0czsKIH0K
IAotdm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lQ2FwJiBsaW5l
Q2FwKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1jYXAiLCBsaW5lQ2FwLmxpbmVDYXAo
KSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVEYXNoOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaChtX2Rh
c2hBcnJheSwgbV9kYXNoT2Zmc2V0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFzaCkKLXsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImRhc2gtYXJyYXkiLCBsaW5lRGFzaC5kYXNoQXJyYXkoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJkYXNoLW9mZnNldCIsIGxpbmVEYXNoLmRhc2hPZmZzZXQoKSk7Ci0g
ICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVKb2luOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lSm9pbihtX2xpbmVKb2lu
KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFNldExpbmVKb2luJiBsaW5lSm9pbikKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUt
am9pbiIsIGxpbmVKb2luLmxpbmVKb2luKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBT
ZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1pdCk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRNaXRlckxpbWl0JiBt
aXRlckxpbWl0KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibWl0cmUtbGltaXQiLCBtaXRlckxp
bWl0Lm1pdGVyTGltaXQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENsZWFyU2hhZG93
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5j
bGVhclNoYWRvdygpOwotfQotCiB2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKQEAgLTY1NywzMCArNTQy
LDE1IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLXZvaWQg
RmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fb3AsIG1fYmxlbmRN
b2RlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHko
InJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0u
Y29sb3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0aW9uIiwgaXRl
bS5jb21wb3NpdGVPcGVyYXRvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUi
LCBpdGVtLmJsZW5kTW9kZSgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgRmlsbFJvdW5k
ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgY29u
dGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5kTW9kZSk7CisgICAg
Y29udGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yKTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVkUmVj
dCYgaXRlbSkKIHsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRSZWN0
KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRz
LmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwogICAgIHJldHVy
biB0czsKIH0KIApAQCAtNzY4LDggKzYzOCw4IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKIH0KIAogI2lmIEVO
QUJMRShWSURFTykKLVBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi0gICAgOiBtX2lk
ZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKK1BhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAg
LCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogewogfQpAQCAtMTAxMSwxOSArODgxLDEwIEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0
eXBlKQogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRzIDw8
ICJzYXZlIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogdHMgPDwgInJlc3Rv
cmUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHRzIDw8ICJ0cmFuc2xh
dGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHRzIDw8ICJyb3RhdGUiOyBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogdHMgPDwgInNjYWxlIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB0cyA8PCAic2V0LWN0bSI7IGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB0cyA8PCAiY29uY2F0ZW50YXRlLWN0bSI7IGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjogdHMgPDwgInNldC1p
bmxpbmUtZmlsbC1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0
cm9rZUNvbG9yOiB0cyA8PCAic2V0LWlubGluZS1zdHJva2UtY29sb3IiOyBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHRzIDw8ICJzZXQtc3Ryb2tlLXRoaWNr
bmVzcyI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB0cyA8PCAic2V0LXN0
YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogdHMgPDwgInNldC1s
aW5lLWNhcCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOiB0cyA8PCAi
c2V0LWxpbmUtZGFzaCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOiB0
cyA8PCAic2V0LWxpbmUtam9pbiI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQ6IHRzIDw8ICJzZXQtbWl0ZXItbGltaXQiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwOiB0cyA8PCAiY2xpcCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6
IHRzIDw8ICJjbGlwLW91dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdl
QnVmZmVyOiB0cyA8PCAiY2xpcC10by1pbWFnZS1idWZmZXIiOyBicmVhazsKQEAgLTEwNDYsNyAr
OTA3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0
ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHRzIDw8ICJmaWxsLXJl
Y3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjogdHMgPDwg
ImZpbGwtcmVjdC13aXRoLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQ6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1ncmFkaWVudCI7IGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogdHMgPDwgImZpbGwtY29tcG9z
aXRlZC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB0
cyA8PCAiZmlsbC1yb3VuZGVkLXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZTogdHMgPDwgImZpbGwtcmVjdC13aXRoLXJvdW5kZWQtaG9sZSI7
IGJyZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpAQCAtMTA3OCw3ICs5MzgsNiBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUg
dHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB0cyA8PCAiYXBwbHkt
ZmlsbC1wYXR0ZXJuIjsgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURl
dmljZVNjYWxlRmFjdG9yOiB0cyA8PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciI7IGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xlYXItc2hhZG93Ijsg
YnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0czsKIH0KQEAgLTEwODgsMjEgKzk0Nyw2IEBAIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAg
ICB0cyA8PCBpdGVtLnR5cGUoKTsKIAogICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFRyYW5zbGF0
ZT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAg
ICB0cyA8PCBpdGVtLmdldDxSb3RhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTY2FsZT4oKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICB0cyA8PCBpdGVtLmdl
dDxTZXRDVE0+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKTsKLSAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAg
ICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMTExNSwxOCArOTU5LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAg
ICB0cyA8PCBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZUNhcD4o
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVEYXNoPigpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGlu
ZUpvaW4+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGlt
aXQ6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCk7Ci0gICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENs
aXA+KCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE5Myw5ICsxMDI1LDYgQEAgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxs
UmVjdFdpdGhHcmFkaWVudD4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsQ29tcG9zaXRl
ZFJlY3Q+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVk
UmVjdDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpOwogICAgICAg
ICBicmVhazsKQEAgLTEyNzEsNyArMTEwMCw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0
cm9rZVBhdHRlcm46CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKICNlbmRp
ZgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggOTdj
YjVmYzhkMDRiYTg2NjJiNzJjN2RkZWViYzQ0MTU1YzI4MjViNy4uZTgxYmIzNDZjOWVmZWJlOTZh
NjUwZDc1NDVhODFmNjE2YjdkNmE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
CkBAIC04NSwxMDQgKzg1LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9OwogCi1jbGFzcyBUcmFuc2xhdGUgewotcHVi
bGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
VHJhbnNsYXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAg
ICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICAgICAgOiBtX3goeCkKLSAgICAgICAg
LCBtX3koeSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1f
eDsgfQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0g
ICAgZmxvYXQgbV94IHsgMCB9OwotICAgIGZsb2F0IG1feSB7IDAgfTsKLX07Ci0KLWNsYXNzIFJv
dGF0ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpSb3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxz
ZTsKLQotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9hbmdsZSB7IDAgfTsgLy8gSW4gcmFkaWFucy4K
LX07Ci0KLWNsYXNzIFNjYWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNjYWxlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi0gICAg
ICAgIDogbV9zaXplKHNpemUpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEZsb2F0U2l6ZSYg
YW1vdW50KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZsb2F0
U2l6ZSBtX3NpemU7Ci19OwotCi1jbGFzcyBTZXRDVE0gewotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0Q1RNOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKLX07Ci0KLWNsYXNzIENvbmNhdGVuYXRlQ1RNIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNvbmNh
dGVuYXRlQ1RNOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAg
ICBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICAg
ICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0K
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwotfTsKLQogY2xh
c3MgU2V0SW5saW5lRmlsbENvbG9yIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjsKQEAgLTI0Nywx
MCArMTQ5LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlQ2hhbmdlOyB9Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0
YXRlQ2hhbmdlKCkgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQorICAgIFdFQkNPUkVfRVhQT1JU
IGV4cGxpY2l0IFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsg
fQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNl
dFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMjU4LDQwNCArMTU4LDI2IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpOwogCiBwcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlJik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBtX3N0YXRlQ2hh
bmdlOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CiB9OwogCiB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgogdm9pZCBTZXRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiB7Ci0gICAgYXV0byBjaGFuZ2VGbGFncyA9IG1fc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFn
czsKLSAgICBlbmNvZGVyIDw8IGNoYW5nZUZsYWdzOwotCi0gICAgYXV0byYgc3RhdGUgPSBtX3N0
YXRlQ2hhbmdlLm1fc3RhdGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBBU1NFUlQo
c3RhdGUuc3Ryb2tlR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5zdHJva2VH
cmFkaWVudDsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5zdHJva2VQYXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuc3Ryb2tlUGF0dGVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmZpbGxH
cmFkaWVudCk7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLmZpbGxHcmFkaWVudDsKLSAgICB9
Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuZmlsbFBhdHRlcm4pOwot
ICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9Ci0KLSAgICBpZiAo
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkp
IHsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIGVuY29k
ZXIgPDwgc3RhdGUuc2hhZG93Qmx1cjsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dD
b2xvcjsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwotICAgIH0K
LQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VUaGlj
a25lc3M7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUudGV4
dERyYXdpbmdNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
c3Ryb2tlQ29sb3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuZmls
bENvbG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc3Ryb2tl
U3R5bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWxsUnVsZTsK
LQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29t
cG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jb21wb3Np
dGVPcGVyYXRvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5ibGVu
ZE1vZGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgZW5j
b2RlciA8PCBzdGF0ZS5hbHBoYTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS5zaG91bGRBbnRpYWxpYXM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAg
ICAgZW5jb2RlciA8PCBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKLQotICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICBlbmNvZGVyIDw8IG1fc3Rh
dGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBzdGQ6Om9wdGlvbmFsPFNldFN0YXRl
PiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgc3RkOjpvcHRpb25h
bDxHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncz4gY2hhbmdlRmxhZ3M7Ci0g
ICAgZGVjb2RlciA+PiBjaGFuZ2VGbGFnczsKLSAgICBpZiAoIWNoYW5nZUZsYWdzKQorICAgIHN0
ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IHN0YXRlOworICAgIGRlY29kZXIgPj4g
c3RhdGU7CisgICAgaWYgKCFzdGF0ZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgIHN0YXRlQ2hh
bmdlLm1fY2hhbmdlRmxhZ3MgPSAqY2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2Uu
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGll
bnRDaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVudDo6ZGVj
b2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIXN0cm9rZUdyYWRpZW50KQotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9r
ZUdyYWRpZW50ID0gV1RGTW92ZSgqc3Ryb2tlR3JhZGllbnQpOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0cm9rZVBhdHRlcm4gPSBQYXR0
ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghc3Ryb2tlUGF0dGVybikKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5zdHJva2VQYXR0ZXJuID0gV1RGTW92ZSgqc3Ryb2tlUGF0dGVybik7Ci0gICAgfQotCi0gICAg
aWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmaWxsR3JhZGllbnQgPSBH
cmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIWZpbGxHcmFkaWVudCkKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKCpmaWxsR3JhZGllbnQpOwotICAgIH0KLQotICAg
IGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmaWxsUGF0dGVybiA9IFBh
dHRlcm46OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFmaWxsUGF0dGVybikKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5maWxsUGF0dGVybiA9IFdURk1vdmUoKmZpbGxQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAo
c3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gc2hhZG93
T2Zmc2V0OwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd09mZnNldDsKLSAgICAgICAgaWYgKCFz
aGFkb3dPZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAg
IHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gKnNoYWRvd09mZnNldDsKLQotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzaGFkb3dCbHVyOwotICAgICAgICBkZWNvZGVyID4+
IHNoYWRvd0JsdXI7Ci0gICAgICAgIGlmICghc2hhZG93Qmx1cikKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dCbHVy
ID0gKnNoYWRvd0JsdXI7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc2hhZG93Q29s
b3I7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93Q29sb3I7Ci0gICAgICAgIGlmICghc2hhZG93
Q29sb3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7Ci0KLSAgICAgICAgc3Rk
OjpvcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiBzaGFkb3dSYWRpdXNNb2RlOwotICAgICAgICBk
ZWNvZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGlmICghc2hhZG93UmFkaXVzTW9k
ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFu
Z2UubV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gV1RGTW92ZSgqc2hhZG93UmFkaXVzTW9kZSk7
Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpIHsKLSAgICAgICAgc3Rk
OjpvcHRpb25hbDxmbG9hdD4gc3Ryb2tlVGhpY2tuZXNzOwotICAgICAgICBkZWNvZGVyID4+IHN0
cm9rZVRoaWNrbmVzczsKLSAgICAgICAgaWYgKCFzdHJva2VUaGlja25lc3MpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ry
b2tlVGhpY2tuZXNzID0gKnN0cm9rZVRoaWNrbmVzczsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVD
aGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERy
YXdpbmdNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPFRleHREcmF3aW5nTW9k
ZUZsYWdzPiB0ZXh0RHJhd2luZ01vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gdGV4dERyYXdpbmdN
b2RlOwotICAgICAgICBpZiAoIXRleHREcmF3aW5nTW9kZSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS50ZXh0RHJhd2luZ01v
ZGUgPSBXVEZNb3ZlKCp0ZXh0RHJhd2luZ01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNo
YW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VD
b2xvckNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc3Ryb2tlQ29sb3I7
Ci0gICAgICAgIGRlY29kZXIgPj4gc3Ryb2tlQ29sb3I7Ci0gICAgICAgIGlmICghc3Ryb2tlQ29s
b3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc3Ryb2tlQ29sb3IgPSAqc3Ryb2tlQ29sb3I7Ci0gICAgfQotCi0gICAgaWYg
KHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gZmlsbENv
bG9yOwotICAgICAgICBkZWNvZGVyID4+IGZpbGxDb2xvcjsKLSAgICAgICAgaWYgKCFmaWxsQ29s
b3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuZmlsbENvbG9yID0gKmZpbGxDb2xvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlU3R5bGVDaGFuZ2UpKSB7Ci0gICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOwotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cm9rZVN0eWxlKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VTdHls
ZSA9IHN0cm9rZVN0eWxlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpIHsKLSAg
ICAgICAgc3RkOjpvcHRpb25hbDxXaW5kUnVsZT4gZmlsbFJ1bGU7Ci0gICAgICAgIGRlY29kZXIg
Pj4gZmlsbFJ1bGU7Ci0gICAgICAgIGlmICghZmlsbFJ1bGUpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbFJ1bGUgPSAq
ZmlsbFJ1bGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpIHsK
LSAgICAgICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gY29tcG9zaXRlT3BlcmF0
b3I7Ci0gICAgICAgIGRlY29kZXIgPj4gY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgICAgIGlmICgh
Y29tcG9zaXRlT3BlcmF0b3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSAqY29tcG9zaXRl
T3BlcmF0b3I7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpIHsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiBi
bGVuZE1vZGU7Ci0gICAgICAgIGlmICghYmxlbmRNb2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmJsZW5kTW9kZSA9ICpi
bGVuZE1vZGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFu
Z2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1YWxpdHk+IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGRlY29kZXIgPj4gaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eTsKLSAgICAgICAgaWYgKCFpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSAqaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9u
YWw8ZmxvYXQ+IGFscGhhOwotICAgICAgICBkZWNvZGVyID4+IGFscGhhOwotICAgICAgICBpZiAo
IWFscGhhKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLmFscGhhID0gKmFscGhhOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNo
YW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRB
bnRpYWxpYXNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkQW50
aWFsaWFzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAgaWYg
KCFzaG91bGRBbnRpYWxpYXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gKnNob3VsZEFudGlh
bGlhczsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7Ci0gICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgICAgIGRlY29k
ZXIgPj4gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxkU21vb3RoRm9udHMp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdl
Lm1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSAqc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgfQot
Ci0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpIHsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgICAg
IGRlY29kZXIgPj4gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgICAgICBpZiAoIXNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMgPSAqc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxi
b29sPiBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dz
SWdub3JlVHJhbnNmb3JtczsKLSAgICAgICAgaWYgKCFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9ICpzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsKLSAgICB9Ci0KLSAgICByZXR1cm4geyB7IHN0YXRlQ2hhbmdlIH0gfTsKLX0KLQotY2xhc3Mg
U2V0TGluZUNhcCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICAgICAg
OiBtX2xpbmVDYXAobGluZUNhcCkKLSAgICB7Ci0gICAgfQotCi0gICAgTGluZUNhcCBsaW5lQ2Fw
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ2FwOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIExpbmVDYXAg
bV9saW5lQ2FwOwotfTsKLQotY2xhc3MgU2V0TGluZURhc2ggewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZURhc2g7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLSAgICAgICAg
OiBtX2Rhc2hBcnJheShkYXNoQXJyYXkpCi0gICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZz
ZXQpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkgY29u
c3QgeyByZXR1cm4gbV9kYXNoQXJyYXk7IH0KLSAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9kYXNoT2Zmc2V0OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwotCi1w
cml2YXRlOgotICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKLSAgICBmbG9hdCBtX2Rhc2hPZmZz
ZXQ7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRMaW5lRGFzaDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hBcnJh
eTsKLSAgICBlbmNvZGVyIDw8IG1fZGFzaE9mZnNldDsKKyAgICByZXR1cm4gU2V0U3RhdGUoKnN0
YXRlKTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8U2V0TGlu
ZURhc2g+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6
Om9wdGlvbmFsPERhc2hBcnJheT4gZGFzaEFycmF5OwotICAgIGRlY29kZXIgPj4gZGFzaEFycmF5
OwotICAgIGlmICghZGFzaEFycmF5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZGFzaE9mZnNldDsKLSAgICBkZWNvZGVyID4+IGRhc2hP
ZmZzZXQ7Ci0gICAgaWYgKCFkYXNoT2Zmc2V0KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIHt7ICpkYXNoQXJyYXksICpkYXNoT2Zmc2V0IH19OwotfQotCi1jbGFz
cyBTZXRMaW5lSm9pbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi0g
ICAgICAgIDogbV9saW5lSm9pbihsaW5lSm9pbikKLSAgICB7Ci0gICAgfQotCi0gICAgTGluZUpv
aW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgot
ICAgIExpbmVKb2luIG1fbGluZUpvaW47Ci19OwotCi1jbGFzcyBTZXRNaXRlckxpbWl0IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OlNldE1pdGVyTGltaXQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
LQotICAgIFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLSAgICAgICAgOiBtX21pdGVy
TGltaXQobWl0ZXJMaW1pdCkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgbWl0ZXJMaW1pdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBt
X21pdGVyTGltaXQ7Ci19OwotCi1jbGFzcyBDbGVhclNoYWRvdyB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLX07Ci0KIC8vIEZJWE1F
OiB0cmVhdCBhcyBkcmF3aW5nIGl0ZW0/CiBjbGFzcyBDbGlwIHsKIHB1YmxpYzoKQEAgLTE2MTIs
OTEgKzExMzQsMjAgQEAgc3RkOjpvcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFkaWVudD4gRmlsbFJl
Y3RXaXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICByZXR1cm4ge3sgKnJl
Y3QsIGdyYWRpZW50LT5nZXQoKSB9fTsKIH0KIAotY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OkZpbGxDb21wb3NpdGVkUmVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSB0cnVlOwotCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKLSAgICAgICAgOiBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQot
ICAgICAgICAsIG1fb3Aob3ApCi0gICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLSAg
ICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1f
b3A7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1v
ZGU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PEZpbGxDb21wb3NpdGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBG
bG9hdFJlY3QgbV9yZWN0OwotICAgIENvbG9yIG1fY29sb3I7Ci0gICAgQ29tcG9zaXRlT3BlcmF0
b3IgbV9vcDsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgotdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwgbV9j
b2xvcjsKLSAgICBlbmNvZGVyIDw8IG1fb3A7Ci0gICAgZW5jb2RlciA8PCBtX2JsZW5kTW9kZTsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8RmlsbENvbXBvc2l0
ZWRSZWN0PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsK
LSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6
Om9wdGlvbmFsPENvbG9yPiBjb2xvcjsKLSAgICBkZWNvZGVyID4+IGNvbG9yOwotICAgIGlmICgh
Y29sb3IpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFs
PENvbXBvc2l0ZU9wZXJhdG9yPiBvcDsKLSAgICBkZWNvZGVyID4+IG9wOwotICAgIGlmICghb3Ap
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEJsZW5k
TW9kZT4gYmxlbmRNb2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgIGlmICghYmxl
bmRNb2RlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICpy
ZWN0LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSB9fTsKLX0KLQogY2xhc3MgRmlsbFJvdW5kZWRS
ZWN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOwogCi0gICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBGaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0g
ICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQogICAgIHsKICAgICB9CiAKICAgICBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLSAg
ICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxsUm91
bmRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CkBAIC0xNzA5LDcgKzExNjAsNiBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEZsb2F0Um91bmRlZFJlY3QgbV9yZWN0OwogICAgIENvbG9yIG1fY29s
b3I7Ci0gICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KQEAgLTE3MTcsNyArMTE2Nyw2IEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fcmVjdDsKICAgICBl
bmNvZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX2JsZW5kTW9kZTsKIH0KIAogdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTE3MzMsMTIgKzExODIsNyBAQCBzdGQ6Om9wdGlvbmFs
PEZpbGxSb3VuZGVkUmVjdD4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAg
c3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVyID4+IGJsZW5k
TW9kZTsKLSAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqYmxlbmRNb2RlIH19OworICAgIHJldHVy
biB7IHsgKnJlY3QsICpjb2xvciB9IH07CiB9CiAKIGNsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlIHsKQEAgLTE5NjEsNyArMTQwNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAgICBQYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAog
ICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uOyB9CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2lkZW50aWZpZXI7IH0KQEAgLTIyNTYsMTMgKzE3MDAsMTEgQEAgdXNpbmcgRGlz
cGxheUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgPCBBcHBseURldmljZVNjYWxlRmFjdG9y
CiAgICAgLCBCZWdpblRyYW5zcGFyZW5jeUxheWVyCiAgICAgLCBDbGVhclJlY3QKLSAgICAsIENs
ZWFyU2hhZG93CiAgICAgLCBDbGlwCiAgICAgLCBDbGlwT3V0CiAgICAgLCBDbGlwT3V0VG9QYXRo
CiAgICAgLCBDbGlwUGF0aAogICAgICwgQ2xpcFRvSW1hZ2VCdWZmZXIKLSAgICAsIENvbmNhdGVu
YXRlQ1RNCiAgICAgLCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyCiAgICAgLCBEcmF3RWxsaXBz
ZQogICAgICwgRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIKQEAgLTIyNzgsNyArMTcyMCw2IEBAIHVz
aW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgICwgRHJhd1JlY3QKICAgICAs
IERyYXdTeXN0ZW1JbWFnZQogICAgICwgRW5kVHJhbnNwYXJlbmN5TGF5ZXIKLSAgICAsIEZpbGxD
b21wb3NpdGVkUmVjdAogICAgICwgRmlsbEVsbGlwc2UKICAgICAsIEZpbGxQYXRoCiAgICAgLCBG
aWxsUmVjdApAQCAtMjI4OCwyMyArMTcyOSwxNSBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBz
dGQ6OnZhcmlhbnQKICAgICAsIEZpbGxSb3VuZGVkUmVjdAogICAgICwgRmx1c2hDb250ZXh0CiAg
ICAgLCBSZXN0b3JlCi0gICAgLCBSb3RhdGUKICAgICAsIFNhdmUKLSAgICAsIFNjYWxlCi0gICAg
LCBTZXRDVE0KICAgICAsIFNldElubGluZUZpbGxDb2xvcgogICAgICwgU2V0SW5saW5lU3Ryb2tl
Q29sb3IKLSAgICAsIFNldExpbmVDYXAKLSAgICAsIFNldExpbmVEYXNoCi0gICAgLCBTZXRMaW5l
Sm9pbgotICAgICwgU2V0TWl0ZXJMaW1pdAogICAgICwgU2V0U3RhdGUKICAgICAsIFNldFN0cm9r
ZVRoaWNrbmVzcwogICAgICwgU3Ryb2tlRWxsaXBzZQogICAgICwgU3Ryb2tlTGluZQogICAgICwg
U3Ryb2tlUGF0aAogICAgICwgU3Ryb2tlUmVjdAotICAgICwgVHJhbnNsYXRlCiAKICNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICAsIEZpbGxMaW5lCkBAIC0yMzQxLDIwICsxNzc0LDEw
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlPiB7CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlLAogICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2F2ZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlJlc3RvcmUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpUcmFuc2xhdGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGUs
Ci0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTY2FsZSwKLSAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldENUTSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3MsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRTdGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlNldExpbmVDYXAsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5l
RGFzaCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVKb2luLAot
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCwKLSAgICBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyU2hhZG93LAogICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkNsaXBPdXQsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpD
bGlwVG9JbWFnZUJ1ZmZlciwKQEAgLTIzNzYsNyArMTc5OSw2IEBAIHRlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7CiAgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQsCi0gICAgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRl
eCBlZWU0NDcxZDM1NGU3NTE1MzEyNTE4OWRmY2M5NDE4YTM5NDUxNGExLi5hNTM1MDk5ODBhOTMx
NDA3ZTkxZTU0ZjlmOTIzMjVjZTVlNWQwNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCkBAIC00MiwzNTAgKzQyLDE4OSBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotUmVjb3JkZXI6OlJlY29yZGVyKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRl
Y29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBtX2RyYXdH
bHlwaHNSZWNvcmRlcigqdGhpcywgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotewotICAgIG1fc3Rh
dGVTdGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENUTS5tYXBSZWN0KGlu
aXRpYWxDbGlwKSB9KTsKLX0KK1JlY29yZGVyOjpSZWNvcmRlcihjb25zdCBGbG9hdFJlY3QmIGlu
aXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNS
ZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKKyAg
ICA6IEdyYXBoaWNzQ29udGV4dChpbml0aWFsQ2xpcCwgeyB9LCAgaW5pdGlhbENUTSkKKyAgICAs
IG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAKLVJl
Y29yZGVyOjp+UmVjb3JkZXIoKQogewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID09
IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBpdCBpbmRpY2F0ZXMgbWlzbWF0Y2hlZCBzYXZlL3Jlc3Rv
cmUuCiB9CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBpbmxpbmVTdGF0ZUNoYW5n
ZUZsYWdzIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0No
YW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLAot
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgIH07Ci0K
LSAgICBpZiAoY2hhbmdlRmxhZ3MgIT0gKGNoYW5nZUZsYWdzICYgaW5saW5lU3RhdGVDaGFuZ2VG
bGFncykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2Vz
Lm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKK1JlY29yZGVyOjp+UmVjb3JkZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBpZiAoY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkg
JiYgIWNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlY29yZGVy
OjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
IGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZs
YWdzKQordm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7Ci0gICAgaWYgKCFjb250YWluc09ubHlJbmxp
bmVTdGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7Ci0gICAgICAgIGlmIChhdXRv
IHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAgICAgICAgICAgIHJl
Y29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKLSAgICAgICAgaWYgKGF1dG8g
cGF0dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5maWxsUGF0dGVybikKLSAgICAgICAgICAgIHJlY29y
ZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKLSAgICAgICAgcmVjb3JkU2V0U3Rh
dGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoKmNo
YW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7Ci0KLSAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNr
bmVzc0NoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhjaGFuZ2VzLm1f
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0
SW5saW5lRmlsbENvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLnRyeUdldEFzU1JHQkFC
eXRlcygpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKKyAgICByZWNvcmRTYXZlKCk7
CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCkK
K3ZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQogewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGN1cnJl
bnRseSBpbnZva2VkIGluIGFuIGFkLWhvYyBtYW5uZXIgd2hlbiByZWNvcmRpbmcgZHJhd2luZyBp
dGVtcy4gV2Ugc2hvdWxkIGNvbnNpZGVyIGVpdGhlcgotICAgIC8vIHNwbGl0dGluZyBHcmFwaGlj
c0NvbnRleHQgc3RhdGUgY2hhbmdlcyBpbnRvIGluZGl2aWR1YWwgZGlzcGxheSBsaXN0IGl0ZW1z
LCBvciByZWZhY3RvcmluZyB0aGUgY29kZSBzdWNoIHRoYXQKLSAgICAvLyB0aGlzIG1ldGhvZCBp
cyBhdXRvbWF0aWNhbGx5IGludm9rZWQgd2hlbiByZWNvcmRpbmcgYSBkcmF3aW5nIGl0ZW0uCi0g
ICAgYXV0byYgc3RhdGVDaGFuZ2VzID0gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2U7Ci0gICAg
YXV0byBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0YXRl
KGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOwotICAgIGlmICghY2hhbmdlc0Zyb21M
YXN0U3RhdGUpCisgICAgaWYgKCFzdGFja1NpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
TE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJwcmUtZHJhd2luZywgc2F2
aW5nIHN0YXRlICIgPDwgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2VzLm1f
c3RhdGUsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKSk7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
KHN0YXRlQ2hhbmdlcywgY2hhbmdlc0Zyb21MYXN0U3RhdGUpOwotICAgIHN0YXRlQ2hhbmdlcy5t
X2NoYW5nZUZsYWdzID0geyB9OwotICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUg
PSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsKLX0KLQotY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IFJlY29yZGVyOjpzdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLnN0
YXRlQ2hhbmdlLm1fc3RhdGU7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRpZFVwZGF0ZVN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2Uu
YWNjdW11bGF0ZShzdGF0ZSwgZmxhZ3MpOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2Fw
KExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICByZWNvcmRTZXRMaW5lQ2FwKGxpbmVDYXApOwotfQot
Ci12b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwg
ZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICByZWNvcmRTZXRMaW5lRGFzaChkYXNoQXJyYXksIGRh
c2hPZmZzZXQpOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5l
Sm9pbikKLXsKLSAgICByZWNvcmRTZXRMaW5lSm9pbihsaW5lSm9pbik7Ci19Ci0KLXZvaWQgUmVj
b3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLXsKLSAgICByZWNvcmRTZXRN
aXRlckxpbWl0KG1pdGVyTGltaXQpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwor
ICAgIHJlY29yZFJlc3RvcmUoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCit2b2lk
IFJlY29yZGVyOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVj
dHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgewotICAgICAgICBhdXRvJiBm
ZUltYWdlID0gZG93bmNhc3Q8RkVJbWFnZT4oZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYgKCFy
ZWNvcmRSZXNvdXJjZVVzZShmZUltYWdlLnNvdXJjZUltYWdlKCkpKSB7Ci0gICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3Vy
Y2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXNvdXJjZUltYWdlKSB7Ci0gICAgICAgIHJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKG51bGxwdHIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsK
KyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZSgqc291cmNlSW1hZ2UpKSB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUlt
YWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJl
Y3QsIGZpbHRlcik7Ci19CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17Ci0gICAgbV9kcmF3
R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwotfQorICAgIGlmIChzdGF0ZSgpLmhhc09u
bHlQcmltaXRpdmVDaGFuZ2VzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCkpCisgICAgICAg
ICAgICByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoKmZpbGxDb2xvcigpLnRyeUdldEFzU1JHQkFC
eXRlcygpKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBs
b2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGNv
bnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKTsKLSAgICByZWNvcmREcmF3R2x5cGhzKGZvbnQsIGdseXBo
cywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSk7Ci19CisgICAg
ICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpTdHJva2VCcnVzaCkpCisgICAgICAgICAgICByZWNvcmRTZXRJbmxpbmVTdHJva2VD
b2xvcigqc3Ryb2tlQ29sb3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CiAKLXZvaWQgUmVjb3Jk
ZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcykpCisgICAgICAgICAgICByZWNv
cmRTZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwogCi0gICAgaWYgKCFyZWNv
cmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
KyAgICAgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKLSAgICByZWNvcmREcmF3TmF0aXZl
SW1hZ2UoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3U3lzdGVt
SW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkKLXsKLSAgICByZWNvcmREcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3Rp
bmF0aW9uUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKLSAgICByZWNvcmREcmF3UGF0
dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZv
aWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotCi0gICAg
aWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UGF0dGVybihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6RmlsbEJydXNoKSkgeworICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gZmlsbFBh
dHRlcm4oKSkKKyAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFn
ZSgpKTsKICAgICB9CiAKLSAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNhdmUo
KQotewotICAgIHJlY29yZFNhdmUoKTsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVT
dGFjay5sYXN0KCkuY2xvbmVGb3JTYXZlKCkpOwotfQotCi12b2lkIFJlY29yZGVyOjpyZXN0b3Jl
KCkKLXsKLSAgICBpZiAoIW1fc3RhdGVTdGFjay5zaXplKCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlQnJ1c2gpKSB7CisgICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBzdHJva2VQ
YXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1h
Z2UoKSk7CisgICAgfQogCi0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICByZWNv
cmRSZXN0b3JlKCk7CisgICAgcmVjb3JkU2V0U3RhdGUoc3RhdGUoKSk7CisgICAgZGlkQXBwbHlT
dGF0ZUNoYW5nZXMoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpCi17Ci0gICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOwotICAgIHJlY29y
ZFRyYW5zbGF0ZSh4LCB5KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xl
SW5SYWRpYW5zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVy
bigpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBy
ZWNvcmRSb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4o
KQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUpOwotICAgIHJlY29yZFNjYWxlKHNp
emUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQXBwbHlGaWxsUGF0dGVy
bigpOwogfQorI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7Ci0gICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50
aXR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgY3VycmVudFN0YXRlKCkuY29u
Y2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgcmVjb3JkQ29uY2F0ZW5hdGVDVE0odHJhbnNmb3JtKTsK
KyAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFs
aWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KKyAgICAvLyBBc3NlcnQgdGhhdCBpdCdz
IG9ubHkgY2FsbGVkIGVhcmx5IG9uPworICAgIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZGV2aWNlU2NhbGVGYWN0b3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuc2V0Q1RNKHRyYW5z
Zm9ybSk7Ci0gICAgcmVjb3JkU2V0Q1RNKHRyYW5zZm9ybSk7Ci19CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKIAotQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0
ZSgpLmN0bTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
b3BhY2l0eSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAKLXZvaWQgUmVjb3JkZXI6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBhcHBlbmRTdGF0
ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNldEFscGhhKG9wYWNpdHkpOwogICAgIHJl
Y29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgbV9zdGF0ZVN0YWNrLmFw
cGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxh
eWVyKCk7Ci0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7
Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotfQorICAg
IEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OnJlc3RvcmUoKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCi17Ci0g
ICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3TGlu
ZXNGb3JUZXh0KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdp
ZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKKyAgICByZWNvcmRFbmRUcmFuc3BhcmVuY3lM
YXllcigpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lk
IFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0
ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIocmVjdCwgc3R5bGUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIHJlY29yZENsaXAocmVjdCk7CiB9CiAKLXZvaWQg
UmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3Jk
ZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogewotICAg
IGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0VsbGlw
c2UocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAgICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5k
UnVsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2
b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdQYXRoKHBhdGgp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xpcE91dChyZWN0KTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpj
bGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zm
c2V0LCBjb2xvcik7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlwT3V0
VG9QYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAg
ICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdGb2N1
c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwotfQorICAgIGlmICghcmVj
b3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSNpZiBQTEFURk9STShNQUMpCi12b2lkIFJlY29yZGVyOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29y
ZENsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12
b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91
YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQordm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xlYXJSZWN0KHJlY3QpOwogfQotI2VuZGlmCiAKIHZv
aWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CiAgICAgcmVjb3JkRmlsbFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
ICAgICByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihyZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50
KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChyZWN0LCBncmFk
aWVudCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwg
Y29sb3IsIG9wLCBibGVuZE1vZGUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVj
b3JkRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Zmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVD
aGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsUm91bmRlZFJlY3QocmVjdCwg
Y29sb3IsIGJsZW5kTW9kZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJl
Y29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3Ip
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbEVsbGlwc2UocmVjdCk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGlu
ZURhdGEoKSkgewogICAgICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPExpbmVEYXRhPigpKQpA
QCAtNDAyLDIxICsyNDEsMjEgQEAgdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKICAgICByZWNvcmRGaWxsUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Zmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxFbGxpcHNl
KHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkU3Ryb2tlUmVjdChy
ZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBSZWNvcmRlcjo6c3Ry
b2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0
aCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJl
Y3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhh
c0lubGluZURhdGEoKSkgewogICAgICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPExpbmVEYXRh
PigpKQpAQCAtNDMzLDE0OCArMjcyLDE2OCBAQCB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkU3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotdm9pZCBS
ZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29y
ZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29y
ZFN0cm9rZUVsbGlwc2UocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNv
cmREcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVyOjpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0g
ICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRDbGVhclJl
Y3QocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TGluZShw
b2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0UoQ0cpCi12b2lkIFJlY29yZGVyOjphcHBseVN0
cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAg
cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICByZWNvcmREcmF3RWxsaXBzZShyZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6YXBwbHlGaWxs
UGF0dGVybigpCit2b2lkIFJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQXBwbHlG
aWxsUGF0dGVybigpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1Bh
dGgocGF0aCk7CiB9Ci0jZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBj
dXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChjdXJyZW50U3RhdGUoKS5jdG0ubWFw
UmVjdChyZWN0KSk7Ci0gICAgcmVjb3JkQ2xpcChyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIHJlY29yZENsaXBPdXQocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBy
ZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQorI2lmIFBMQVRGT1JN
KE1BQykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwg
Ym9vbCYsIGNvbnN0IENvbG9yJikKIHsKLSAgICByZWNvcmRDbGlwT3V0VG9QYXRoKHBhdGgpOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9y
JikKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChjdXJyZW50U3Rh
dGUoKS5jdG0ubWFwUmVjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSkpOwotICAgIHJlY29yZENs
aXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQorI2VuZGlm
CiAKLUludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAordm9pZCBSZWNvcmRlcjo6
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoYXV0byBpbnZlcnNlID0gY3VycmVudFN0YXRl
KCkuY3RtLmludmVyc2UoKSkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoaW52ZXJz
ZS0+bWFwUmVjdChjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzKSk7CisgICAgaWYgKCFyZWNvcmRS
ZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIC8vIElmIHRoZSBDVE0gaXMgbm90IGludmVydGli
bGUsIHJldHVybiB0aGUgb3JpZ2luYWwgcmVjdC4KLSAgICAvLyBUaGlzIG1hdGNoZXMgQ0dSZWN0
QXBwbHlJbnZlcnNlQWZmaW5lVHJhbnNmb3JtIGJlaGF2aW9yLgotICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBG
aWx0ZXJSZXN1bHRzJiByZXN1bHRzKQogewotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlQnVm
ZmVyKTsKLSAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3Qp
OwotfQorICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVjdHNPZlR5cGUoRmlsdGVy
RWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgeworICAgICAgICBhdXRvJiBmZUltYWdlID0gZG93bmNh
c3Q8RkVJbWFnZT4oZWZmZWN0LmdldCgpKTsKKyAgICAgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVz
ZShmZUltYWdlLnNvdXJjZUltYWdlKCkpKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZp
bHRlciwgcmVzdWx0cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAK
LVJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVy
aW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmlu
Z01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdNZXRob2Q6OkRpc3BsYXlMaXN0KSk7Ci19CisgICAg
aWYgKCFzb3VyY2VJbWFnZSkgeworICAgICAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgICAg
ICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihudWxscHRyLCBzb3VyY2VJbWFnZVJlY3Qs
IGZpbHRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12
b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoIXBsYXllci5pZGVudGlmaWVy
KCkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVy
LCBkZXN0aW5hdGlvbik7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZSgqc291cmNlSW1hZ2Up
KSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291
cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBBU1NFUlQocGxheWVyLmlkZW50aWZpZXIoKSk7Ci0gICAgcmVjb3Jk
UGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworCisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFn
ZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwogfQotI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lkIFJl
Y29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICAv
LyBXZSBtb2RpZnkgdGhlIHN0YXRlIGRpcmVjdGx5IGhlcmUgaW5zdGVhZCBvZiBjYWxsaW5nIEdy
YXBoaWNzQ29udGV4dDo6c2NhbGUoKQotICAgIC8vIGJlY2F1c2UgdGhlIHJlY29yZGVkIGl0ZW0g
d2lsbCBzY2FsZSgpIHdoZW4gcmVwbGF5ZWQuCi0gICAgY3VycmVudFN0YXRlKCkuc2NhbGUoeyBk
ZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IgfSk7CisgICAgcmVjb3JkUmVzb3Vy
Y2VVc2UoaW1hZ2UpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd05h
dGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFnZVNpemUs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KIAotICAgIC8vIEZJWE1FOiB0aGlzIGNo
YW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNhY2hl
ZCBleHRlbnRzLgotICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgZWFybHkgb24/
Ci0gICAgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Cit2
b2lkIFJlY29yZGVyOjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3sKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZERyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25S
ZWN0KTsKIH0KIAotRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCit2b2lkIFJl
Y29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBp
cyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0gICAg
cmV0dXJuIHJlY3Q7CisgICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOworICAgIGFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi1jb25zdCBSZWNvcmRlcjo6Q29udGV4dFN0YXRl
JiBSZWNvcmRlcjo6Y3VycmVudFN0YXRlKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0
ZXJuKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBBU1NFUlQo
bV9zdGF0ZVN0YWNrLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7Cisg
ICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQYXR0
ZXJuKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0K
IAotUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpCisjaWYg
RU5BQkxFKFZJREVPKQordm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgQVNTRVJU
KG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOwor
ICAgIGlmICghcGxheWVyLmlkZW50aWZpZXIoKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkUGFpbnRGcmFt
ZUZvck1lZGlhKHBsYXllci5pZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRpZgog
Ci1jb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAordm9pZCBSZWNv
cmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUg
c21vb3RoaW5nTW9kZSkKIHsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgbV9kcmF3R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBocyhm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01v
ZGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBs
b2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBjdG0u
dHJhbnNsYXRlKHgsIHkpOworICAgIHJlY29yZFJlc291cmNlVXNlKGNvbnN0X2Nhc3Q8Rm9udCY+
KGZvbnQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdHbHlwaHMo
Zm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2Rl
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGVJ
blJhZGlhbnMpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBkb3VibGUg
YW5nbGVJbkRlZ3JlZXMgPSByYWQyZGVnKHN0YXRpY19jYXN0PGRvdWJsZT4oYW5nbGVJblJhZGlh
bnMpKTsKLSAgICBjdG0ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKLSAgICAKLSAgICBBZmZpbmVU
cmFuc2Zvcm0gcm90YXRpb247Ci0gICAgcm90YXRpb24ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdMaW5lc0ZvclRleHQocG9p
bnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCi12b2lk
IFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBjdG0uc2NhbGUoc2l6
ZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRl
OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCitSZWZQdHI8SW1hZ2VCdWZm
ZXI+IFJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNw
YWNlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0CiB7Ci0gICAgY3Rt
ID0gbWF0cml4OworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVy
KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVy
aW5nTWV0aG9kLnZhbHVlX29yKFJlbmRlcmluZ01ldGhvZDo6RGlzcGxheUxpc3QpKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBtYXRyaXgpCitGbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKIHsKLSAg
ICBjdG0gKj0gbWF0cml4OworICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlzcGxheUxpc3Q6
OlJlY29yZGVyLiIpOworICAgIHJldHVybiByZWN0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNw
bGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggODQ1ZWMw
MDc3MmVkMmM1NGExZTZjYjI2YjIxNTFkYWJhYTZlYzA3NS4uYWUzNDM3OWJlNjdmMDVlMTA0MmY2
YWRjNWFhYmY4OGMyNzBjMTczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogI2lu
Y2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAi
SW5saW5lUGF0aERhdGEuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KQEAgLTUxLDcgKzUwLDcgQEAgY2xhc3MgUmVjb3JkZXIgOiBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
UmVjb3JkZXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGlu
aXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRl
Y29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3
R2x5cGhzOjpZZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0ds
eXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5SZWNvcmRlcigpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2so
KSA9IDA7CkBAIC02MSw0NyArNjAsMzUgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRTYXZlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRSZXN0b3Jl
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNS
R0JBPHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldElubGluZVN0cm9r
ZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0
cm9rZVRoaWNrbmVzcyhmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVDYXAoTGlu
ZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNo
QXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNl
dExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldE1pdGVy
TGltaXQoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJikgPSAwOworCisjaWYgVVNFKENHKQorICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBs
eVN0cm9rZVBhdHRlcm4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RmlsbFBh
dHRlcm4oKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRCZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXAoY29uc3Qg
RmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQ
YXRoJiwgV2luZFJ1bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91dChjb25z
dCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQs
IGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TmF0
aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFu
c3BhcmVuY3lMYXllcigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZENs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRG
aWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0
JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVk
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25zdCBBcmNEYXRhJikgPSAwOwpAQCAtMTA5LDEx
ICs5NiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxCZXppZXJD
dXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotI2lmIEVOQUJMRShWSURFTykK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgPSAwOwotI2VuZGlmCi0gICAgdmlydHVhbCB2
b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3QgQXJjRGF0YSYpID0gMDsKQEAg
LTEyMSwxMTYgKzEwNyw4MSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0
cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpID0gMDsKICNlbmRpZgogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotI2lm
IFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgPSAwOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbikgPSAwOwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHJlY29y
ZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQm
IGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKEltYWdlQnVmZmVyJikgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShjb25zdCBTb3VyY2VJbWFnZSYpID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoRm9udCYpID0gMDsKIAotICAgIHN0
cnVjdCBDb250ZXh0U3RhdGUgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotICAgICAg
ICBGbG9hdFJlY3QgY2xpcEJvdW5kczsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2Ugc3RhdGVDaGFuZ2U7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIGxhc3REcmF3aW5n
U3RhdGU7Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVj
dCYgY2xpcCkKLSAgICAgICAgICAgIDogY3RtKHRyYW5zZm9ybSkKLSAgICAgICAgICAgICwgY2xp
cEJvdW5kcyhjbGlwKQotICAgICAgICAgICAgLCBsYXN0RHJhd2luZ1N0YXRlKHN0YXRlKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JTYXZlKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQ29udGV4dFN0YXRlIHN0YXRlKGxhc3REcmF3
aW5nU3RhdGUsIGN0bSwgY2xpcEJvdW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5zdGF0ZUNoYW5n
ZSA9IHN0YXRlQ2hhbmdlOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICB9Ci0K
LSAgICAgICAgQ29udGV4dFN0YXRlIGNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHN0YXRlID0gY2xvbmVGb3JTYXZlKCk7Ci0gICAg
ICAgICAgICBzdGF0ZS5sYXN0RHJhd2luZ1N0YXRlLmFscGhhID0gMTsKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpOwotICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7Ci0g
ICAgICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgICAgIHZvaWQgY29uY2F0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgICAgICB2b2lkIHNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB9OwotCi0gICAgY29uc3QgVmVjdG9yPENvbnRleHRTdGF0
ZSwgND4mIHN0YXRlU3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlU3RhY2s7IH0KLQotICAg
IGNvbnN0IENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCkgY29uc3Q7Ci0gICAgQ29udGV4dFN0
YXRlJiBjdXJyZW50U3RhdGUoKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ01vZGU+LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IG92ZXJyaWRl
OworICAgIAorCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQpID0gMDsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAorICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVzdG9yZSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdGF0ZUNo
YW5nZXMoKSBmaW5hbDsKICNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0
KGJvb2wpIGZpbmFsIHsgfQotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29s
KSBmaW5hbCB7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFs
OwogI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KSBmaW5hbDsKIAotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUoKSBjb25zdCBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGlu
ZVdpZHRoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwotI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0
ZXJSZXN1bHRzJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5n
TW9kZSkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmlu
YWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50Jiwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQy
KSBmaW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0aChjb25zdCBQ
YXRoJikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7
CkBAIC0yNDEsNDAgKzE5MiwyMyBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZXN0b3JlKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY2Fs
ZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmlj
ZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBm
aW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Qg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAjaWYg
RU5BQkxFKFZJREVPKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5k
aWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBoc0FuZENh
Y2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFu
Y2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmlu
YWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7CiAK
LSAgICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwotCi0gICAgVmVjdG9yPENvbnRleHRTdGF0ZSwgND4g
bV9zdGF0ZVN0YWNrOwogICAgIERyYXdHbHlwaHNSZWNvcmRlciBtX2RyYXdHbHlwaHNSZWNvcmRl
cjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3Bw
CmluZGV4IDFmZGM2YmE1NmJmZGIyNjM2ZWZiMzQ2MmFkYTJhOTkwZDMzODk5NDUuLjFmYjRkZDc5
NWFlMTBhYThjY2NiY2RkODMxNGVlYTgwODZlOGRiNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcApAQCAtNDIsMTggKzQyLDEzIEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlckltcGw6OlJl
Y29yZGVySW1wbChEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJh
d0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBSZWNvcmRlcihzdGF0ZSwgaW5p
dGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKK1JlY29yZGVySW1w
bDo6UmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgRmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5
cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMp
CisgICAgOiBSZWNvcmRlcihpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3
R2x5cGhzKQogICAgICwgbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKIHsKICAgICBMT0dfV0lU
SF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVjb3JkaW5nIHdpdGggY2xpcCAi
IDw8IGluaXRpYWxDbGlwKTsKIH0KIAotUmVjb3JkZXJJbXBsOjp+UmVjb3JkZXJJbXBsKCkKLXsK
LSAgICBBU1NFUlQoc3RhdGVTdGFjaygpLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywg
aXQgaW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgotfQotCiB2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkU2F2ZSgpCiB7CiAgICAgYXBwZW5kPFNhdmU+KCk7CkBAIC02NCwzMSArNTks
NiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUmVzdG9yZSgpCiAgICAgYXBwZW5kPFJlc3Rv
cmU+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkKLXsKLSAgICBhcHBlbmQ8VHJhbnNsYXRlPih4LCB5KTsKLX0KLQotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBhcHBlbmQ8Um90YXRl
PihhbmdsZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTY2FsZShjb25zdCBGbG9h
dFNpemUmIHNjYWxlKQotewotICAgIGFwcGVuZDxTY2FsZT4oc2NhbGUpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQotewotICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKLXsKLSAgICBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KHRyYW5zZm9ybSk7Ci19Ci0KIHZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4gaW5s
aW5lQ29sb3IpCiB7CiAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oaW5saW5lQ29sb3Ip
OwpAQCAtMTA0LDkyICs3NCwyNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNz
Pih0aGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKLXsKLSAgICBhcHBlbmQ8U2V0U3RhdGU+KHN0YXRl
LCBjaGFuZ2VGbGFncyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lQ2Fw
KExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBhcHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7Ci19
Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkm
IGFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGFwcGVuZDxTZXRMaW5lRGFzaD4oYXJy
YXksIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUpv
aW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBhcHBlbmQ8U2V0TGluZUpvaW4+KGpvaW4pOwotfQot
Ci12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsK
LSAgICBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4obGltaXQpOwotfQotCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0K
LQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVj
dCkKLXsKLSAgICBhcHBlbmQ8Q2xpcD4oY2xpcFJlY3QpOwotfQotCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkK
IHsKLSAgICBhcHBlbmQ8Q2xpcE91dD4oY2xpcFJlY3QpOworICAgIGFwcGVuZDxTZXRTdGF0ZT4o
c3RhdGUpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKLXsKLSAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGFw
cGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCi17Ci0gICAgYXBwZW5k
PENsaXBQYXRoPihwYXRoLCBydWxlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChz
b3VyY2VJbWFnZSkKLSAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKTsKLSAgICBhcHBlbmQ8RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI+
KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKLX0KLQotdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRT
bW9vdGhpbmdNb2RlIG1vZGUpCi17Ci0gICAgYXBwZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBo
cywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZDxEcmF3SW1hZ2VC
dWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCisjaWYgVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0
dGVybigpCiB7Ci0gICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2VJZGVudGlmaWVyLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBhcHBlbmQ8QXBwbHlT
dHJva2VQYXR0ZXJuPigpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCiB7
Ci0gICAgYXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVj
dCk7CisgICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CiB9CisjZW5kaWYgLy8gVVNFKENH
KQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgYXBw
ZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgYXBwZW5kPEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKQEAgLTIwMiw0NCArMTA2LDM0
IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAg
YXBwZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17
Ci0gICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50
Mik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3Is
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcChjb25zdCBG
bG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihibG9j
a0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVMaW5lcyk7CisgICAgYXBwZW5kPENsaXA+KGNsaXBSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKIHsK
LSAgICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOworICAg
IGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIGFwcGVu
ZDxEcmF3RWxsaXBzZT4ocmVjdCk7CisgICAgYXBwZW5kPENsaXBPdXQ+KGNsaXBSZWN0KTsKIH0K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQog
ewotICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7CisgICAgYXBwZW5kPENsaXBPdXRUb1BhdGg+
KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7
Ci0gICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xv
cik7CisgICAgYXBwZW5kPENsaXBUb0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcik7CisgICAgYXBwZW5kPENsZWFyUmVjdD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yNTcsMjMgKzE1
MSwyMiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZwogICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhH
cmFkaWVudD4ocmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0Pihy
ZWN0LCBjb2xvciwgb3AsIG1vZGUpOworICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3Qs
IGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9k
ZSBtb2RlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0Pihy
ZWN0LCBjb2xvciwgbW9kZSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihy
ZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xv
cik7CisgICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbExpbmUoY29uc3Qg
TGluZURhdGEmIGxpbmUpCiB7CiAgICAgYXBwZW5kPEZpbGxMaW5lPihsaW5lKTsKQEAgLTI5Myw3
ICsxODYsNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0
IEJlemllckN1cnZlRGF0YSYgY3VydmUpCiB7CiAgICAgYXBwZW5kPEZpbGxCZXppZXJDdXJ2ZT4o
Y3VydmUpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzAxLDI1
ICsxOTMsMTcgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiAgICAgYXBwZW5kPEZpbGxQYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhcHBl
bmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7
Ci0gICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4ocGxheWVyLCBkZXN0aW5hdGlvbik7Cisg
ICAgYXBwZW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9Ci0jZW5kaWYg
Ly8gRU5BQkxFKFZJREVPKQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZDxT
dHJva2VSZWN0PihyZWN0LCB3aWR0aCk7CisgICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3Qp
OwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0KIHZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVuZDxT
dHJva2VMaW5lPihsaW5lKTsKQEAgLTMzOSw3ICsyMjMsNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJiBjdXJ2ZSkKIHsK
ICAgICBhcHBlbmQ8U3Ryb2tlQmV6aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzQ3LDMzICsyMzAsODQgQEAgdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBhcHBlbmQ8U3Ry
b2tlUGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAg
ICBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CisgICAgYXBwZW5kPERyYXdSZWN0PihyZWN0
LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikK
IHsKLSAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKKyAgICBhcHBlbmQ8RHJhd0xpbmU+KHBv
aW50MSwgcG9pbnQyKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5kPERyYXdF
bGxpcHNlPihyZWN0KTsKK30KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tl
UGF0dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKLSAgICBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpOworICAgIGFwcGVuZDxE
cmF3UGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQ
YXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7Ci0gICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CisgICAgYXBwZW5kPERyYXdG
b2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLSNlbmRpZiAv
LyBVU0UoQ0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJl
Y3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Cit9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cj4oc2NhbGVGYWN0b3IpOworICAgIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGltYWdlSWRlbnRp
ZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3sKKyAgICBhcHBlbmQ8RHJh
d1N5c3RlbUltYWdlPihzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXBwZW5kPERyYXdJ
bWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlm
IChzb3VyY2VJbWFnZSkKKyAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBhcHBlbmQ8RHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXI+KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKK30KKwor
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+
KGltYWdlSWRlbnRpZmllciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgYXBwZW5kPFBhaW50
RnJhbWVGb3JNZWRpYT4oaWRlbnRpZmllciwgZGVzdGluYXRpb24pOworfQorI2VuZGlmCisKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250
U21vb3RoaW5nTW9kZSBtb2RlKQoreworICAgIGFwcGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUpOworfQorCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcykKK3sKKyAgICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQ
b2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlTGluZXMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlJiBzdHlsZSkKK3sKKyAgICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cj4ocmVjdCwgc3R5bGUpOwogfQogCiBib29sIFJlY29yZGVySW1wbDo6cmVjb3JkUmVzb3VyY2VV
c2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlKQpAQCAtNDE3LDIwICszNTEsMTYgQEAgc3RhdGlj
IGlubGluZSBmbG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQogCiBG
bG9hdFJlY3QgUmVjb3JkZXJJbXBsOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KSBjb25zdAogewotICAgIEZsb2F0UmVjdCBib3VuZHMgPSByZWN0OwotICAgIGF1
dG8mIHN0YXRlID0gY3VycmVudFN0YXRlKCk7CisgICAgYXV0byBib3VuZHMgPSByZWN0OwogCi0g
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dSYWRpdXM7Ci0gICAg
Q29sb3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRv
d1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQg
PSBib3VuZHM7Ci0gICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7Ci0gICAg
ICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1
cykpOworICAgIGlmIChoYXNTaGFkb3coKSkgeworICAgICAgICBhdXRvIHNoYWRvd0V4dGVudCA9
IGJvdW5kczsKKyAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoZHJvcFNoYWRvdygpLm9mZnNldCk7
CisgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KGRyb3BT
aGFkb3coKS5ibHVyUmFkaXVzKSk7CiAgICAgICAgIGJvdW5kcy51bml0ZShzaGFkb3dFeHRlbnQp
OwogICAgIH0KIAotICAgIHJldHVybiBpbnRlcnNlY3Rpb24oc3RhdGUuY2xpcEJvdW5kcywgc3Rh
dGUuY3RtLm1hcFJlY3QoYm91bmRzKSk7CisgICAgcmV0dXJuIGludGVyc2VjdGlvbihjbGlwQm91
bmRzKCksIGdldENUTSgpLm1hcFJlY3QoYm91bmRzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERp
c3BsYXlMaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCmlu
ZGV4IDY0MjI2NWYwOTgwMjJjZjJiMDVmMTgwYzE3NGZhMDM0NjJmMmRkNDAuLjZkZTZhZWRmZmNi
MTdkYjJkMDgxYjQyYzFkZTZiYzMyOWEzOGJmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVySW1wbC5oCkBAIC0zNSw5ICszNSw4IEBAIGNsYXNzIFJlY29yZGVySW1w
bCA6IHB1YmxpYyBSZWNvcmRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXJJbXBsKTsKIHB1YmxpYzoKLSAgICBXRUJDT1JF
X0VYUE9SVCBSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBo
c1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+UmVjb3JkZXJJbXBsKCk7Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRl
ckltcGwoRGlzcGxheUxpc3QmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVj
b25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdH
bHlwaHM6Olllcyk7CisgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9k
aXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0KIAogICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFz
aygpIGZpbmFsIHsgfQpAQCAtNDcsNDcgKzQ2LDM1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dm9pZCByZWNvcmRTYXZlKCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRSZXN0b3JlKCkgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2Nh
bGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5l
RmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNldElubGlu
ZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNldFN0
cm9rZVRoaWNrbmVzcyhmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNo
T2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVKb2luKExpbmVKb2luKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkQ2xlYXJTaGFkb3coKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgZmluYWw7CisKKyNpZiBVU0UoQ0cpCisgICAgdm9pZCBy
ZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEFwcGx5Rmls
bFBhdHRlcm4oKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkgZmluYWw7CisKICAgICB2b2lkIHJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0aChj
b25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwg
V2luZFJ1bGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQs
IGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5n
UmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisK
KyAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKwogICAg
IHZvaWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgdm9pZCBy
ZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0
JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1v
ZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNv
cmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKwor
ICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRGaWxsTGluZShjb25zdCBM
aW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25zdCBBcmNEYXRhJikg
ZmluYWw7CkBAIC05NSwxMSArODIsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZEZpbGxC
ZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgogICAgIHZv
aWQgcmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAg
IHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKLSAgICB2b2lkIHJlY29yZFN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisK
KyAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRTdHJva2VMaW5lKGNv
bnN0IExpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3QgQXJj
RGF0YSYpIGZpbmFsOwpAQCAtMTA3LDEzICs5MywyOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVj
b3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5k
aWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cpCi0g
ICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIHJl
Y29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFs
OworICAgIAorICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNv
cmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAg
ICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3Rl
bUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lmIEVO
QUJMRShWSURFTykKKyAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
cklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2VuZGlm
Ci0gICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKwor
ICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7CiAK
ICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJikgZmluYWw7CiAgICAgYm9v
bCByZWNvcmRSZXNvdXJjZVVzZShJbWFnZUJ1ZmZlciYpIGZpbmFsOwpAQCAtMTM5LDYgKzE0MCw4
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJlY29yZEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCiAgICAgRmxvYXRSZWN0IGV4dGVudEZyb21M
b2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAogICAgIERpc3BsYXlMaXN0JiBt
X2Rpc3BsYXlMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCmlu
ZGV4IDhmZjE5ZDAwMzU0Y2RiZWRlM2E1YmExYWY3NThjZmYwMjNhMjVhMjIuLjY2ZmM5ZDg4MmE0
ZDNmN2RlOGU4OTEyYTFmMzBhZjE5OGQwMzUyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZXBsYXllci5jcHAKQEAgLTk3LDEwICs5NywxMCBAQCBpbmxpbmUgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBhcHBseVNldFN0YXRlSXRlbShH
cmFwaAogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH07CiAKLSAgICBpZiAoYXV0
byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0
ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKGF1dG8gaW1h
Z2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGUoKS5m
aWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm4gKmltYWdlSWRlbnRpZmllcjsK
IAotICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0
U3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSkpCisgICAg
aWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0
ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm4gKmltYWdl
SWRlbnRpZmllcjsKIAogICAgIHNldFN0YXRlSXRlbS5hcHBseShjb250ZXh0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNS
ZWNvcmRlckhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcAppbmRleCBkMDljMTM3M2VhOWFh
YWY0YTE4NTEzNmVlODg1M2Q3ODhmYzQxNzhkLi5kNzk3MzE0ZDI0OTA2NzY4YjhkNzU3YjdjNGRi
Y2U1Mzc4MWZhM2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1
enouY3BwCkBAIC0zMiwxNCArMzIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EcmF3
R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIG93bmVy
LCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1f
b3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFw
aGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBE
ZXJpdmVGb250RnJvbUNvbnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5h
dGlvbkNvbnRleHQpCiB7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQog
ewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcAppbmRleCA1ZDY2ZWI3MmFk
MTNjMjRkYWMwOTVhOTQ1ZjYxNGE2ZjU1MjIyNDkyLi5jODMxNDgwMjI3YjEwZjUxYzRkMzQ0ZWQ2
OTVhMTNmNDA2Y2I2OGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcApAQCAtMzIsMTQg
KzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRHJhd0dseXBoc1JlY29yZGVyOjpE
cmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3
R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293bmVyKG93bmVyKQorRHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250
ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQob3duZXIpCiB7CiB9CiAKIHZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENh
Y2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1f
c21vb3RoaW5nTW9kZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENh
Y2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1f
c21vb3RoaW5nTW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5j
cHAKaW5kZXggM2NmNzQ2MGM4MGUzYmUxZDViYTNmMGNlZDdjMTliMjVkZjI5YWJmMi4uNzg1ZTk0
YmVjZjA3Y2Q0YTg0YzljMzRkOWNlY2M4Mzg1N2UwNjk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAg
LTI5MiwxMiArMjkyLDEyIEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hl
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCgyLCAy
LCBzaXplLndpZHRoKCkgLSAzLCBzaXplLmhlaWdodCgpIC0gMyk7CiAgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNz
KDMpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoV2lkdGhzLCAwKTsKKyAgICBjb250
ZXh0LnNldExpbmVEYXNoKHsgbV9kYXNoV2lkdGhzLCAwIH0pOwogICAgIG1fcGF0aC5hZGRSZWN0
KGZyYW1lUmVjdCk7CiAgICAgbV9wYXRoLmNsb3NlU3VicGF0aCgpOwogICAgIGNvbnRleHQuc3Ry
b2tlUGF0aChtX3BhdGgpOwogCi0gICAgY29udGV4dC5zZXRMaW5lRGFzaChEYXNoQXJyYXkoKSwg
MCk7CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IHsgfSwgMCB9KTsKICAgICBtX3BhdGguY2xl
YXIoKTsKICAgICBtX3BhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwgYm94VG9wICsgYm94U2l6ZSkp
OwogICAgIG1fcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludChzaXplLndpZHRoKCksIGJveFRvcCAr
IGJveFNpemUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50
ZnVsUGFpbnRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVs
UGFpbnRDaGVja2VyLmNwcAppbmRleCAxYjE4MmExZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0
M2I3NjdkLi5lODBmMmVlODkxOTM5MTQ0MThlODc4YmYwYTRhMjg0MGVlNjg5ZDAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3Bw
CkBAIC0zOSw3ICszOSw3IEBAIGJvb2wgQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVz
Rm9yQ29udGVudGZ1bFBhaW50KEZyYW1lVmlldyYgZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5z
ZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7
CiAgICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKHRydWUpOwogCi0gICAgTnVs
bEdyYXBoaWNzQ29udGV4dCBjaGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVs
bEdyYXBoaWNzQ29udGV4dCBjaGVja2VyQ29udGV4dChmcmFtZVZpZXcucmVuZGVyVmlldygpLT5k
b2N1bWVudFJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOwogICAgIGZyYW1lVmlldy5wYWludChjaGVj
a2VyQ29udGV4dCwgZnJhbWVWaWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCkpOwogCiAg
ICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKG9sZEVudGlyZUNvbnRlbnRzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCmluZGV4
IGM5YWIyMTc2MTQxZmE3YTMzOWEyMDk3YjNhYmY5NzY1MDc4N2U0ZjEuLjRiZmY4ZDAwODM5MjUx
NGNiZTYyY2E5NWQ0ZTc0M2ZjMTk3ZjAxOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIExlZ2FjeUVs
bGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2ZmcwogICAgIGJvb2wgc2V0U2hhZG93ID0gZmFsc2U7CiAgICAgaWYgKGxpbmVTdHls
ZS50ZXh0U2hhZG93KCkpIHsKICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBsaW5lU3R5bGUu
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIobGluZVN0eWxlLnRleHRTaGFkb3coKS0+Y29sb3Io
KSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KExheW91dFNpemUobGluZVN0eWxlLnRleHRT
aGFkb3coKS0+eCgpLnZhbHVlKCksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnkoKS52YWx1ZSgp
KSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3Ip
OworICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBMYXlvdXRTaXplKGxpbmVTdHlsZS50
ZXh0U2hhZG93KCktPngoKS52YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFs
dWUoKSksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0Nv
bG9yIH0pOwogICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMjRjODJj
OWQ2YmQ0M2Y3NGJhMDVhYjVhYzc2NzkzZDc1ZDE1ZTU3Ny4uOGQ5N2QyNTcxZTI0NTNkZjE5Mjhi
ZGU2Yzc3Yzc2MzE1ZmJjODgyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIHZvaWQg
YXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgUmVuZGVyU3QKICAgICAgICAgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KCk7CiAKICAg
ICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0KGJveFNoYWRvdy0+eCgpLnZhbHVlKCksIGJveFNoYWRv
dy0+eSgpLnZhbHVlKCkpOwotICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgYm94
U2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRl
cihib3hTaGFkb3ctPmNvbG9yKCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBT
aGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAg
ICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVz
KCkudmFsdWUoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5j
b2xvcigpKSwgYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9k
ZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIH0KIAogSW50ZXJwb2xh
dGlvblF1YWxpdHkgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNob29zZUludGVycG9sYXRpb25RdWFs
aXR5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCB2b2lkKiBs
YXllciwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKQEAgLTIwODcsNyArMjA4Nyw3IEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0
JiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gbGlu
ZURhc2ggPSBEYXNoQXJyYXk6OmZyb20oZGFzaExlbmd0aCwgZ2FwTGVuZ3RoKTsKLSAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFzaChXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExl
bmd0aCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3Zl
KGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGln
aHQgY29ybmVyczoKQEAgLTI0NTYsNyArMjQ1Niw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVj
CiAgICAgICAgICAgICBGbG9hdFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50
KHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0
b3IpLCByb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxl
RmFjdG9yKSk7CiAgICAgICAgICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNu
YXBwZWRTaGFkb3dPcmlnaW4gLSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24o
KTsKIAotICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwg
c2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8g
U2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Cisg
ICAgICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzbmFwcGVkU2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBT
aGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwog
CiAgICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBI
b3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTU4LDcgKzI1NTgsNyBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8s
IGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0
OwogCiAgICAgICAgICAgICBhdXRvIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSByb3VuZFNpemVUb0Rl
dmljZVBpeGVscyhzaGFkb3dPZmZzZXQsIGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgICAg
IGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICAgICAgY29udGV4
dC5zZXREcm9wU2hhZG93KHsgc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKICAgICAgICAgICAgIGNvbnRl
eHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocGl4ZWxTbmFwcGVkT3V0ZXJSZWN0LCBwaXhlbFNu
YXBwZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2
MjMyMWZlZWQ5YjY4NmMzY2QuLjhjZjk2MWUwYmMyMzY0ZTk2MmNkYTg4MWY4NTllNGYzMWEzYzk4
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjI1Mywx
NCArMjI1MywxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUAogI2lmIEVOQUJMRShDU1NfQ09N
UE9TSVRJTkcpCiAgICAgICAgIGJvb2wgdXNlc0NvbXBvc2l0ZU9wZXJhdGlvbiA9IGhhc0JsZW5k
TW9kZSgpICYmICEocmVuZGVyZXIoKS5pc0xlZ2FjeVNWR1Jvb3QoKSAmJiBwYXJlbnQoKSAmJiBw
YXJlbnQoKS0+aXNSZW5kZXJWaWV3TGF5ZXIoKSk7CiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRl
T3BlcmF0aW9uKQotICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29u
dGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgY29u
dGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxl
bmRNb2RlKCkgfSk7CiAjZW5kaWYKIAogICAgICAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIocmVuZGVyZXIoKS5vcGFjaXR5KCkpOwogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElO
RykKICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVPcGVyYXRpb24pCi0gICAgICAgICAgICBjb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBC
bGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUo
eyBjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICNl
bmRpZgogCiAjaWZkZWYgUkVWRUFMX1RSQU5TUEFSRU5DWV9MQVlFUlMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggYTg1MGUxMzc0YTEy
NTgyMjBjZWZjOGZkN2EyYjczZjc2N2E3NDNhYy4uY2UxZWE2ZmM1MDNlZDgxY2JkMGViMGE5ZGM3
ZmYxOTBjOTQzMmRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKQEAgLTE4MzEsNyArMTgzMSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVFdmVudFJlZ2lvbigpCiAgICAgfTsKIAogICAgIGF1dG8gdXBkYXRlRXZlbnRS
ZWdpb25Gb3JMYXllciA9IFsmXShHcmFwaGljc0xheWVyJiBncmFwaGljc0xheWVyKSB7Ci0gICAg
ICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICAgICAgYXV0byBkaXJ0eVJlY3Qg
PSBGbG9hdFJlY3QoRmxvYXRQb2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigp
KSwgZ3JhcGhpY3NMYXllci5zaXplKCkpOworICAgIAorICAgICAgICBOdWxsR3JhcGhpY3NDb250
ZXh0IG51bGxDb250ZXh0KGRpcnR5UmVjdCwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZh
bGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247
CiAjaWYgRU5BQkxFKEVESVRBQkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFn
ZSgpLnNob3VsZEJ1aWxkRWRpdGFibGVSZWdpb24oKSkKQEAgLTE4NTMsOCArMTg1NSw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lvbigpCiAgICAgICAgICAgICBl
dmVudFJlZ2lvbkNvbnRleHQudW5pdGUoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoLWxheWVy
T2Zmc2V0LCBncmFwaGljc0xheWVyLnNpemUoKSkpLCByZW5kZXJlcigpLnN0eWxlKCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgYXV0byBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0
UmVjdChGbG9hdFBvaW50KGdyYXBoaWNzTGF5ZXIub2Zmc2V0RnJvbVJlbmRlcmVyKCkpLCBncmFw
aGljc0xheWVyLnNpemUoKSkpOwotICAgICAgICBwYWludEludG9MYXllcigmZ3JhcGhpY3NMYXll
ciwgbnVsbENvbnRleHQsIGRpcnR5UmVjdCwgeyB9LCAmZXZlbnRSZWdpb25Db250ZXh0KTsKKyAg
ICAgICAgcGFpbnRJbnRvTGF5ZXIoJmdyYXBoaWNzTGF5ZXIsIG51bGxDb250ZXh0LCBlbmNsb3Np
bmdJbnRSZWN0KGRpcnR5UmVjdCksIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7CiAKICAgICAg
ICAgZXZlbnRSZWdpb24udHJhbnNsYXRlKHRvSW50U2l6ZShsYXllck9mZnNldCkpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggMzBjZDM0M2VhN2Rm
OTE2OGNjM2NkZTQ3ZGJlZjhmNzU5ZTg4ZjczMS4uMjU2ZmM3NDk1NmRhMzM4NmE1NGQzNTJkZTEx
YjZmZjczNjY5YTFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQpAQCAtNjA1LDcgKzYwNSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZp
ZWxkSW5uZXJTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0CiAgICAgY29u
c3QgRmxvYXRTaXplIGlubmVyU2hhZG93T2Zmc2V0IHsgMCwgNSB9OwogICAgIGNvbnN0ZXhwciBh
dXRvIGlubmVyU2hhZG93Qmx1ciA9IDEwLjBmOwogICAgIGF1dG8gaW5uZXJTaGFkb3dDb2xvciA9
IERpc3BsYXlQMzxmbG9hdD4geyAwLCAwLCAwLCAwLjA0ZiB9OwotICAgIGNvbnRleHQuc2V0U2hh
ZG93KGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3Ip
OworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNo
YWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3IgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Io
Q29sb3I6OmJsYWNrKTsKIAogICAgIFBhdGggaW5uZXJTaGFkb3dQYXRoOwpAQCAtMjA4MCw3ICsy
MDgwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UoSW1h
Z2UmIGltYWdlLCBjb25zdCBQYWludEluZm8mIHBhaW4KICAgICAvLyBVc2UgdGhlIEdyYXBoaWNz
Q29udGV4dCBmdW5jdGlvbiwgYmVjYXVzZSBpdCBjYWxjdWxhdGVzIHRoZSBibHVyIHJhZGl1cyBp
biBjb250ZXh0IHNwYWNlLAogICAgIC8vIHJhdGhlciB0aGFuIHNjcmVlbiBzcGFjZS4KICAgICBj
b25zdGV4cHIgYXV0byBzaGFkb3dDb2xvciA9IENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYUJ5
dGUoMjYpOwotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplIHsgfSwgMTYs
IHNoYWRvd0NvbG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0
U2l6ZSB7IH0sIDE2LCBzaGFkb3dDb2xvciB9KTsKIAogICAgIC8vIFRoZSBjaXJjbGUgbXVzdCBo
YXZlIGFuIGFscGhhIGNoYW5uZWwgdmFsdWUgb2YgMSBmb3IgdGhlIHNoYWRvdyBjb2xvciB0byBh
cHBlYXIuCiAgICAgQ0dGbG9hdCBjaXJjbGVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDAs
IDEgfTsKQEAgLTIyNzMsNyArMjI3Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hl
Y2tib3hSYWRpb0lubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAKICAg
ICBib29sIGlzRW1wdHkgPSAhc3RhdGVzLmNvbnRhaW5zQW55KHsgQ29udHJvbFN0YXRlczo6U3Rh
dGVzOjpDaGVja2VkLCBDb250cm9sU3RhdGVzOjpTdGF0ZXM6OkluZGV0ZXJtaW5hdGUgfSk7CiAg
ICAgYXV0byBmaXJzdFNoYWRvd0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIGlz
RW1wdHkgPyAwLjA1ZiA6IDAuMWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRv
d09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0
LnNldERyb3BTaGFkb3coeyBpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJz
dFNoYWRvd0NvbG9yIH0pOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7
CiAKICAgICBQYXRoIGlubmVyU2hhZG93UGF0aDsKQEAgLTIyOTAsNyArMjI5MCw3IEBAIHZvaWQg
UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjCiAgICAgY29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgp
OwogCiAgICAgY29uc3RleHByIGF1dG8gc2Vjb25kU2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8Zmxv
YXQ+IHsgMSwgMSwgMSwgMC41ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7
IDAsIDAgfSwgMSwgc2Vjb25kU2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRv
dyh7IEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwgc2Vjb25kU2hhZG93Q29sb3IgfSk7CiAKICAgICBj
b250ZXh0LmZpbGxQYXRoKGlubmVyU2hhZG93UGF0aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5kZXggMDEwZWNiYWVkODdhNzNhNDIwYWZiOTdlOGU4
MGZlYTYzNzlmZWQzZS4uMTBkYzkwZTU3ZTVhZTBmNDI1YTBkYWFhMzY0ZjgxNGU0NDk0OTkwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjgxNiw3
ICsyODE2LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIo
Y29uc3QgUmVuZGVyQXR0YWNobWVudCYgYXR0YWNobWVudCwKICAgICBjb250ZXh0LnNldFN0cm9r
ZUNvbG9yKHBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcldpZHRoKTsKICAgICBjb250ZXh0LnNl
dFN0cm9rZVN0eWxlKERhc2hlZFN0cm9rZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7YXR0
YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyRGFzaExlbmd0aH0sIDApOworICAgIGNvbnRleHQuc2V0
TGluZURhc2goeyB7IGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGggfSwgMCB9
KTsKICAgICBjb250ZXh0LnN0cm9rZVBhdGgoYm9yZGVyUGF0aCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXggNjc1
NTY4YWZmNjExOGYwMTNiZDFkNGY1NWE2YzM2NGZhOGFmMzhlOC4uODMwOWIyZjhkNGEzMWZhMDNi
MWFiZjg0MzlkYTBmM2VmMTYyODQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFRl
eHREZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMoY29uc3QgVGV4
dFJ1biYgdGV4dFJ1biwgYwogICAgICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ct
PmNvbG9yKCk7CiAgICAgICAgICAgICBpZiAobV9zaGFkb3dDb2xvckZpbHRlcikKICAgICAgICAg
ICAgICAgICBtX3NoYWRvd0NvbG9yRmlsdGVyLT50cmFuc2Zvcm1Db2xvcihzaGFkb3dDb2xvcik7
Ci0gICAgICAgICAgICBtX2NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFk
b3dZIC0gZXh0cmFPZmZzZXQpLCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9y
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRv
d1gsIHNoYWRvd1kgLSBleHRyYU9mZnNldCksIHNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc2hh
ZG93Q29sb3IgfSk7CiAgICAgICAgICAgICBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKTsKICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCA4ODVk
ODI2ZWU5ZTc5NmY0YjVjNWI1ODMzZjcxYTAyOGM0NTQxYTdhLi5mZTg4NjljMTllNWY4ZDQzYjdm
YTE2ZTQwMWI0ZmJjNmRjZjdlZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRlci5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgU2hhZG93QXBwbGllcjo6U2hhZG93QXBwbGllcihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywKICAgICB9
CiAKICAgICBpZiAoIW1fYXZvaWREcmF3aW5nU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvcik7Cisg
ICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVz
LnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogfQogCiBpbmxpbmUgYm9vbCBTaGFkb3dBcHBsaWVy
Ojppc0xhc3RTaGFkb3dJdGVyYXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUGF0aC5jcHAKaW5kZXggN2VkNTM3YzkyNzkzNzcwZjQ0ODhhZTI5ZGY0MDcy
N2Q3ZWIxYTNhOS4uNmM3MzBlZjA3ZTQ4YzdlY2Y4YzQwZTM3ZTAwMzQ1Y2ZhYjU2YzY4YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02
OSw3ICs2OSw3IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVVcGRhdGVkU3Ry
b2tlQm91bmRpbmdCb3goKSBjb25zdAogc3RhdGljIHZvaWQgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChhdXRvIGdyYWRpZW50ID0gY29u
dGV4dC5zdHJva2VHcmFkaWVudCgpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgq
Z3JhZGllbnQsIGNvbnRleHQuc3RhdGUoKS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsK
KyAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0cm9r
ZVNwYWNlVHJhbnNmb3JtKCkpOwogICAgIGVsc2UgaWYgKFBhdHRlcm4qIHBhdHRlcm4gPSBjb250
ZXh0LnN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqcGF0
dGVybik7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggY2MzOGVjNzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNk
NTY1Yzg1OC4uYjY1ODY4ZDFiZDM0YzkwZDRiYmZkZDQ3N2FkMmM3NDI4MmEwNTZhZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBA
IC01MDEsMTAgKzUwMSwxMiBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5
bGVUb0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGNhblNldExpbmVEYXNoKQotICAgICAgICAgICAgY29udGV4dC5zZXRMaW5l
RGFzaChkYXNoQXJyYXksIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ry
b2tlRGFzaE9mZnNldCgpKSAqIHNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0
TGluZURhc2goeyBXVEZNb3ZlKGRhc2hBcnJheSksIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5n
dGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKSAqIHNjYWxlRmFjdG9yIH0pOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsK
ICAgICB9CisKKyAgICBjb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKIHZvaWQgU1ZH
UmVuZGVyU3VwcG9ydDo6c3R5bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAyZmI4ZjMzYTg3MGRmY2NlYjYy
ZTE0OTY1NmIxNDQzNzIyZWJlYTJkLi5mNTc5ZTVhNzVmZTkxMGY2ZTViNThhOWFlZmI2ODM1ODk2
MjIxMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
cmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyaW5nQ29udGV4dC5jcHAKQEAgLTExNSwxMiArMTE1LDEyIEBAIHZvaWQgU1ZHUmVuZGVyaW5n
Q29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgUGFpCiAgICAgICAgIGlmIChvcGFjaXR5IDwgMSB8fCBoYXNCbGVuZE1vZGUgfHwgaXNvbGF0
ZU1hc2tGb3JCbGVuZGluZyB8fCBoYXNJc29sYXRpb24pIHsKIAogICAgICAgICAgICAgaWYgKGhh
c0JsZW5kTW9kZSkKLSAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENv
bXBvc2l0ZU9wZXJhdGlvbihtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlv
bigpLCBzdHlsZS5ibGVuZE1vZGUoKSk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNv
bnRleHQoKS5zZXRDb21wb3NpdGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3Np
dGVPcGVyYXRpb24oKSwgc3R5bGUuYmxlbmRNb2RlKCkgfSk7CiAKICAgICAgICAgICAgIG1fcGFp
bnRJbmZvLT5jb250ZXh0KCkuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAg
ICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkKLSAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+
Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BhaW50SW5mby0+Y29udGV4dCgpLmNv
bXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgICAgICAgICAg
bV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVNb2RlKHsgbV9wYWludEluZm8tPmNv
bnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAKICAg
ICAgICAgICAgIG1fcmVuZGVyaW5nRmxhZ3MgfD0gRW5kT3BhY2l0eUxheWVyOwogICAgICAgICB9
CkBAIC0yNzMsNyArMjczLDcgQEAgYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3Jl
Z3JvdW5kKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQogCiAgICAgLy8gSW52YWxp
ZGF0ZSBhbiBleGlzdGluZyBidWZmZXIgaWYgdGhlIHNjYWxlIGlzIG5vdCBjb3JyZWN0LgogICAg
IGlmIChpbWFnZUJ1ZmZlcikgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
bV9wYWludEluZm8tPmNvbnRleHQoKS5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5
SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9
IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuZ2V0Q1RNKCk7CiAgICAgICAgIEludFNpemUgZXhwYW5k
ZWRCb3VuZGluZ0JveCA9IGV4cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpOwogICAg
ICAgICBJbnRTaXplIGJ1ZmZlclNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91
bmRpbmdCb3gud2lkdGgoKSAqIHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+
KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkp
KTsKICAgICAgICAgaWYgKGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCA0ZGQ3ZjgwZTM3
Nzc5ODdkY2I3MGMxYTNjOGE4N2NkOGE0ZmQ2ZmI5Li5jZDg4YWRmMDhkZGE4MDNiZmQ5M2Y4OTU3
NzQwNzY4NmFjNGM1NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHAKQEAgLTI2OSwxNCArMjY5LDE0IEBAIEltYWdlRHJhd1Jlc3VsdCBTVkdJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjCiAgICAgQVNT
RVJUKHZpZXcpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNv
bnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21w
b3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9k
ZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpKTsKIAog
ICAgIGZsb2F0IGFscGhhID0gY29udGV4dC5hbHBoYSgpOwogICAgIGJvb2wgY29tcG9zaXRpbmdS
ZXF1aXJlc1RyYW5zcGFyZW5jeUxheWVyID0gb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpICE9
IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIHx8IG9wdGlvbnMuYmxlbmRNb2RlKCkgIT0g
QmxlbmRNb2RlOjpOb3JtYWwgfHwgYWxwaGEgPCAxOwogICAgIGlmIChjb21wb3NpdGluZ1JlcXVp
cmVzVHJhbnNwYXJlbmN5TGF5ZXIpIHsKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5j
eUxheWVyKGFscGhhKTsKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIs
IEJsZW5kTW9kZTo6Tm9ybWFsIH0pOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
aG9ub3Igb3B0aW9ucy5vcmllbnRhdGlvbigpLCBzaW5jZSBJbWFnZUJpdG1hcCdzIGZsaXBZIGhh
bmRsaW5nIHJlbGllcyBvbiBpdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTAwMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDU0MzgxODJkZGU4
NzYzZWJhZDM4ZjE5MmRmNzk1YWEwNjBiNjUxYmIuLjhkYTM5MGY2ZGE3MGUzNzk1NTBhNTcyZTA5
ZTA4NDExODljMmRkZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTc0LDMx
ICs3NCw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAg
aGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6UmVzdG9yZSgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBoYW5k
bGVJdGVtKERpc3BsYXlMaXN0OjpUcmFuc2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBoYW5kbGVJdGVt
KERpc3BsYXlMaXN0OjpSb3RhdGUoYW5nbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIGhhbmRsZUl0
ZW0oRGlzcGxheUxpc3Q6OlNjYWxlKHNjYWxlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhh
bmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldENUTShjdG0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpjb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0
bSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTShjdG0pKTsK
LX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRJbmxpbmVGaWxsQ29sb3Io
RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmIGl0ZW0pCiB7CiAgICAgaGFuZGxlSXRl
bShXVEZNb3ZlKGl0ZW0pKTsKQEAgLTEyOCw0MCArMTAzLDE1IEBAIHZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6c2V0U3RhdGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlJiYgaXRlbSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfTsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFn
ZShpdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBp
ZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZSgpLnN0cm9rZUJydXNoKCkucGF0dGVy
bigpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0
ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZp
eFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAp
Ci17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2goRGlzcGxheUxp
c3Q6OlNldExpbmVEYXNoJiYgaXRlbSkKLXsKLSAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkp
OwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVK
b2luIGxpbmVKb2luKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVKb2lu
KGxpbmVKb2luKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TWl0
ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRN
aXRlckxpbWl0KGxpbWl0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
Y2xlYXJTaGFkb3coKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93
KCkpOwotfQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewogICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsaXAocmVjdCkp
OwpAQCAtMzcxLDE0ICszMjEsOSBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZp
bGxSZWN0V2l0aEdyYWRpZW50KERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcgogICAgIGhhbmRs
ZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6ZmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAg
ICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3Is
IG9wLCBibGVuZE1vZGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVk
UmVjdChyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSk7CisgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlz
dDo6RmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDNiYmFmNzY1ZDA1ZjQ0YWJm
NGQ5NjFlNzY2Y2U2NTQ2OThlZGUyOTQuLjgxODg5NjZhZmZhNzA5ZTZmZDBhMzFiZmNhNmMzZTcx
ODU2NWM1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtNTksMjAgKzU5LDEwIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2F2ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOwotICAgIHZv
aWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFu
Z2xlKTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2NhbGUpOwot
ICAgIHZvaWQgc2V0Q1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZv
aWQgY29uY2F0ZW5hdGVDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7CiAgICAg
dm9pZCBzZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZp
bGxDb2xvciYmKTsKICAgICB2b2lkIHNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvciYmKTsKICAgICB2b2lkIHNldFN0cm9rZVRoaWNr
bmVzcyhmbG9hdCk7CiAgICAgdm9pZCBzZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGUmJik7Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApOwotICAgIHZv
aWQgc2V0TGluZURhc2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYpOwotICAg
IHZvaWQgc2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCk7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpOwogICAgIHZvaWQgY2xpcChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KTsKQEAgLTk3LDggKzg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQg
ZmlsbFJlY3RXaXRoR3JhZGllbnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdy
YWRpZW50JiYpOwotICAgIHZvaWQgZmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0
b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29y
ZTo6QmxlbmRNb2RlKTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQgZmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGlu
ZURhdGEmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KaW5k
ZXggMjgwMmZmZThmODM5N2MwZWQ0ZGYxMjFhMDE3ZmU3ODEwOGZmNmMyMC4uNDE0YzMxYTEzMjBj
MGIyZTc4NmJjOGQ5ZjY1OTgxMDJkODcwZjQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIubWVzc2FnZXMuaW4KQEAgLTI1LDQ3ICsyNSwzNSBAQAogbWVzc2FnZXMgLT4gUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgU2F2ZSgp
CiAgICAgUmVzdG9yZSgpCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgUm90
YXRlKGZsb2F0IGFuZ2xlKQotICAgIFNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZSBzY2FsZSkKLSAg
ICBTZXRDVE0oV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bSkKLSAgICBDb25jYXRlbmF0ZUNU
TShXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3RtKQorCiAgICAgU2V0SW5saW5lRmlsbENvbG9y
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3IgaXRlbSkKICAgICBTZXRJ
bmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29s
b3IgaXRlbSkKICAgICBTZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIFNl
dFN0YXRlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZSBpdGVtKQotICAgIFNldExpbmVD
YXAoZW51bTp1aW50OF90IFdlYkNvcmU6OkxpbmVDYXAgbGluZUNhcCkKLSAgICBTZXRMaW5lRGFz
aChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2ggaXRlbSkKLSAgICBTZXRMaW5lSm9p
bihlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6TGluZUpvaW4gbGluZUpvaW4pCi0gICAgU2V0TWl0ZXJM
aW1pdChmbG9hdCBsaW1pdCkKLSAgICBDbGVhclNoYWRvdygpCisjaWYgVVNFKENHKQorICAgIEFw
cGx5U3Ryb2tlUGF0dGVybigpCisgICAgQXBwbHlGaWxsUGF0dGVybigpCisjZW5kaWYKKyAgICBB
cHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgQmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkK
KwogICAgIENsaXAoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisgICAgQ2xpcFBhdGgoV2ViQ29y
ZTo6UGF0aCBwYXRoLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1bGUpCiAg
ICAgQ2xpcE91dChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDbGlwVG9JbWFnZUJ1ZmZl
cihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQogICAgIENsaXBP
dXRUb1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGgg
cGF0aCwgZW51bTp1aW50OF90IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQotICAgIERyYXdH
bHlwaHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgaXRlbSkKLSAgICBEcmF3Rmls
dGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcj4gc291cmNlSW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291
cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIpCi0gICAgRHJhd0ltYWdl
QnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZs
b2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0
aW9ucykKLSAgICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2Vi
Q29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3Ry
dWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd1N5c3Rl
bUltYWdlKFJlZjxXZWJDb3JlOjpTeXN0ZW1JbWFnZT4gc3lzdGVtSW1hZ2UsIFdlYkNvcmU6OkZs
b2F0UmVjdCBkZXN0aW5hdGlvblJlY3QpCi0gICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0
IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm0sIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZs
b2F0U2l6ZSBzcGFjaW5nLCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0
aW9ucykKLSAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQotICAgIERyYXdSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi0gICAgRHJhd0xpbmUoV2ViQ29yZTo6RmxvYXRQb2lu
dCBwb2ludDEsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQyKQotICAgIERyYXdMaW5lc0ZvclRl
eHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKLSAgICBEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgRHJhd0VsbGlwc2UoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgRHJhd1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQot
ICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCi0gICAgRHJhd0ZvY3VzUmluZ1JlY3Rz
KFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKyAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQorCisgICAgQ2xlYXJSZWN0KFdl
YkNvcmU6OkZsb2F0UmVjdCByZWN0KQorCiAgICAgRmlsbFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0
IHJlY3QpCiAgICAgRmlsbFJlY3RXaXRoQ29sb3IoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdl
YkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudCBpdGVtKQotICAgIEZpbGxDb21wb3NpdGVk
UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06
dWludDhfdCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciBvcCwgZW51bTp1aW50OF90IFdlYkNv
cmU6OkJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZs
b2F0Um91bmRlZFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBX
ZWJDb3JlOjpCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpGbG9h
dFJvdW5kZWRSZWN0IHJvdW5kZWRIb2xlUmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAg
ICBGaWxsRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKICAgICBGaWxsTGluZShzdHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkK
ICAgICBGaWxsQXJjKHN0cnVjdCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC03MywxMSArNjEs
MTAgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVk
IFN0cmVhbSB7CiAgICAgRmlsbEJlemllckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2
ZURhdGEgZGF0YSkKICNlbmRpZgogICAgIEZpbGxQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAg
ICBGaWxsRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKLSAgICBUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRp
b25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6
Ok1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVz
dGluYXRpb24pCisKICAgICBTdHJva2VSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9h
dCBsaW5lV2lkdGgpCisKKyAgICBTdHJva2VFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0
KQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIFN0cm9rZUxpbmUoc3RydWN0IFdl
YkNvcmU6OkxpbmVEYXRhIGRhdGEpCiAgICAgU3Ryb2tlQXJjKHN0cnVjdCBXZWJDb3JlOjpBcmNE
YXRhIGRhdGEpCkBAIC04NSwxMyArNzIsMzEgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgU3Ryb2tlQmV6aWVyQ3VydmUo
c3RydWN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSBkYXRhKQogI2VuZGlmCiAgICAgU3Ryb2tl
UGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0gICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCkKLSAgICBDbGVhclJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0jaWYg
VVNFKENHKQotICAgIEFwcGx5U3Ryb2tlUGF0dGVybigpCi0gICAgQXBwbHlGaWxsUGF0dGVybigp
CisKKyAgICBEcmF3UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKQorICAgIERyYXdMaW5lKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3Jl
OjpGbG9hdFBvaW50IHBvaW50MikKKworICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0KQorICAgIERyYXdQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKKworICAgIERyYXdGb2N1
c1JpbmdQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
V2ViQ29yZTo6Q29sb3IgY29sb3IpCisgICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJD
b3JlOjpGbG9hdFJlY3Q+IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3Jl
OjpDb2xvciBjb2xvcikKKworICAgIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50
aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVm
ZXJlbmNlIGZpbHRlcikKKyAgICBEcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0
IGRlc3RpbmF0aW9uUmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJD
b3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQorICAgIERyYXdTeXN0ZW1JbWFnZShS
ZWY8V2ViQ29yZTo6U3lzdGVtSW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3Qg
ZGVzdGluYXRpb25SZWN0KQorICAgIERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUgaW1h
Z2VTaXplLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBz
cmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAg
ICBEcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVj
dCB0aWxlUmVjdCwgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6
RmxvYXRQb2ludCBwaGFzZSwgV2ViQ29yZTo6RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJD
b3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQorI2lmIEVOQUJMRShWSURFTykKKyAg
ICBQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50
aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvbikKICNlbmRpZgotICAgIEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCisKKyAgICBEcmF3R2x5cGhzKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCisgICAgRHJhd0xpbmVzRm9yVGV4
dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCBpdGVtKQorICAgIERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKworICAgIENvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKQorICAgIFRyYW5zZm9ybVRvQ29sb3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICBGbHVzaENvbnRleHQoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcAppbmRleCA4NTc3Y2JiZGU2ZDM5MDFkMzQ3
MDc2MWVkMzBmNzlkOThlODJiOThkLi42Y2ZiYWJjYTdiY2ZiZWRjNTk1NDgzZThlZWIxZDVhYjEy
MDk2NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3Bw
CkBAIC0zMiwzNiArMzIsMjEgQEAKICNpbmNsdWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lt
YWdlQnVmZmVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBsYXllci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVy
LCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmIHJlbmRlcmluZ0JhY2tlbmQsIGNvbnN0IEZs
b2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwg
RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3
R2x5cGhzKQotICAgIDogRGlzcGxheUxpc3Q6OlJlY29yZGVyKHsgfSwgaW5pdGlhbENsaXAsIGlu
aXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKKyAgICA6IERpc3BsYXlMaXN0OjpSZWNv
cmRlcihpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAg
ICwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCkpCiAgICAgLCBtX2ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKQogICAg
ICwgbV9yZW5kZXJpbmdCYWNrZW5kKHJlbmRlcmluZ0JhY2tlbmQpCiB7CiB9CiAKLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOwotfQotCiBSZW5k
ZXJpbmdNb2RlIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVuZGVyaW5nTW9kZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIgPyBtX2ltYWdlQnVmZmVyLT5yZW5k
ZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwpAQCAtNzcsMzEgKzYy
LDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc3RvcmUo
KQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJlc3RvcmUo
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFu
c2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpUcmFuc2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJvdGF0ZShhbmdsZSkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTY2FsZShzY2FsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNl
dENUTSh0cmFuc2Zvcm0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNvbmNh
dGVuYXRlQ1RNKHRyYW5zZm9ybSkpOwotfQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQog
ewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldElubGlu
ZUZpbGxDb2xvcihEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yIHsgY29sb3IgfSkpOwpA
QCAtMTE3LDkyICs3NywyNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdHJva2VUaGlja25lc3ModGhpY2tu
ZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRT
ZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7
IHN0YXRlLCBmbGFncyB9KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRMaW5lQ2FwKGxpbmVDYXApKTsKLX0K
LQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYgYXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZURhc2goRGlzcGxheUxp
c3Q6OlNldExpbmVEYXNoIHsgYXJyYXksIGRhc2hPZmZzZXQgfSkpOwotfQotCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4gbGlu
ZUpvaW4pCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
U2V0TGluZUpvaW4obGluZUpvaW4pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TWl0ZXJMaW1pdChsaW1pdCkp
OwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJT
aGFkb3coKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkNsZWFyU2hhZG93KCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpDbGlwT3V0KHJlY3QpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25z
dCBQYXRoJiBwYXRoKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
cnVsZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwotfQot
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdl
KQotICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcigpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdl
UmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UoUmVmPEZpbHRlcj4geyBmaWx0ZXIgfSkpKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNw
bGF5TGlzdDo6U2V0U3RhdGUgeyBzdGF0ZSB9KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250
U21vb3RoaW5nTW9kZSBtb2RlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdHbHlwaHMoRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgeyBmb250LCBn
bHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUgfSkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCisjaWYgVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGlt
YWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tl
UGF0dGVybigpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGlu
YXRpb25SZWN0KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6QXBwbHlGaWxsUGF0dGVybigpKTsKIH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAKLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBz
Y2FsZUZhY3RvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpEcmF3UGF0dGVybihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0
b3IpKTsKIH0KIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKQEAgLTIxNSw0NCArMTA5LDM0IEBA
IHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRFbmRUcmFuc3BhcmVu
Y3lMYXllcigpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdp
ZHRoKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRy
YXdSZWN0KHJlY3QsIHdpZHRoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpEcmF3TGluZShwb2ludDEsIHBvaW50MikpOwotfQotCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdM
aW5lc0ZvclRleHQgeyBibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0
aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyB9KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcChyZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHls
ZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQ
YXRoKHBhdGgsIHJ1bGUpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpE
cmF3RWxsaXBzZShyZWN0KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6Q2xpcE91dChyZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpE
cmF3UGF0aChwYXRoKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6Q2xpcE91dFRvUGF0aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNS
aW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsKIH0KIAot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdS
ZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdSZWN0
cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVhclJlY3QocmVjdCkpOwogfQogCiB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQpAQCAtMjcwLDIzICsxNTQsMjIgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYKICAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhH
cmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQgeyByZWN0LCBncmFkaWVu
dCB9KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRG
aWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsQ29tcG9zaXRlZFJlY3Qo
cmVjdCwgY29sb3IsIG9wLCBtb2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5kZWRSZWN0KHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQog
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIEJsZW5kTW9kZSBtb2RlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRl
ZFJlY3Qocm91bmRlZFJlY3QsIGNvbG9yLCBtb2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91
bmRlZFJlY3QsIGNvbG9yKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0
LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkZpbGxFbGxpcHNlKHJlY3QpKTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
CiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbExpbmUoY29u
c3QgTGluZURhdGEmIGRhdGEpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RmlsbExpbmUoZGF0YSkpOwpAQCAtMzA2LDcgKzE4OSw2IEBAIHZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3Qg
QmV6aWVyQ3VydmVEYXRhCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RmlsbEJlemllckN1cnZlKGRhdGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTMxNCwyMyArMTk2LDE3IEBAIHZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkZpbGxQYXRoKHBhdGgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JN
ZWRpYShwbGF5ZXIuaWRlbnRpZmllcigpLCBkZXN0aW5hdGlvbikpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhp
Y2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6U3Ryb2tlUmVjdChyZWN0LCB3aWR0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUxpbmUoZGF0YSkp
OwpAQCAtMzUwLDcgKzIyNiw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhCiB7CiAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlQmV6aWVyQ3VydmUo
ZGF0YSkpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCkBAIC0zNTgsMzMgKzIzMyw4NCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZVBhdGgocGF0aCkpOwog
fQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6U3Ryb2tlRWxsaXBzZShyZWN0KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6RHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAK
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkNsZWFyUmVjdChyZWN0KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKIH0KIAotI2lmIFVTRShDRykK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RHJhd0VsbGlwc2UocmVjdCkpOworfQogCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBw
YXRoKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFw
cGx5U3Ryb2tlUGF0dGVybigpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0
dGVybigpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpE
cmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogfQogCi0jZW5k
aWYgLy8gVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVj
dHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7Cit9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFj
dG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChz
b3VyY2VJbWFnZSkKKyAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBz
b3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVy
IH0pKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucykpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5h
dGlvblJlY3QpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZp
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpEcmF3UGF0dGVybihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucykpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpQYWludEZyYW1lRm9yTWVkaWEoaWRlbnRpZmllciwgZGVzdGluYXRpb24pKTsKK30KKyNl
bmRpZgorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2Fs
QW5jaG9yLCBtb2RlIH0pKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6RHJhd0xpbmVzRm9yVGV4dChEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IEZs
b2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRp
bmcsIGRvdWJsZUxpbmVzIH0pKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihyZWN0LCBzdHlsZSkpOwogfQogCiBib29sIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmIGltYWdlKQpAQCAtNDM0LDExICsz
NjAsNiBAQCBib29sIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3Vy
Y2VVc2UoRm9udCYgZm9udCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29udGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElk
ZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpGbHVzaENvbnRleHQoaWRlbnRpZmllcikpOwotfQotCiBSZWZQdHI8SW1h
Z2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
b2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVy
aW5nTWV0aG9kKSBjb25zdAogewogICAgIGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5k
KSkgewpAQCAtNDY0LDYgKzM4NSwyMSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6Y3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbgogICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxl
RmFjdG9yKCksIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZCk7CiB9
CiAKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkp
OworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0
KEdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZsdXNoQ29udGV4dChpZGVudGlm
aWVyKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCmlu
ZGV4IDliMzNhMDY3ZmQxNmJjY2YxNDA0MmMxOTc0ZGQ2OTE5NDIyNjI0NjguLmYyYWQ4ZDBhYTQ1
ODU4OWFlZTgxOTA3ZDljOTA4OTZkMzRiNmY3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHkuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIAogY2xhc3MgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ciB7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKIHB1Ymxp
YzoKICAgICBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXImLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBXZWJDb3Jl
OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IFdlYkNvcmU6OkRy
YXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIH5SZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkoKSA9IGRlZmF1bHQ7CkBAIC01MCw2MyArNTEsMzkg
QEAgcHVibGljOgogICAgIHZvaWQgZmx1c2hDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEZsdXNoSWRlbnRpZmllcikgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICB2b2lkIHNlbmQoVCYmIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBpZiAoVU5M
SUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsKLSAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5k
VG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIp
OwotICAgIH0KLQotICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7
Ci0KICAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5h
bDsKIAogICAgIHZvaWQgcmVjb3JkU2F2ZSgpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9y
ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkU2V0Q1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpT
UkdCQTx1aW50OF90PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xv
cihXZWJDb3JlOjpTUkdCQTx1aW50OF90PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJv
a2VUaGlja25lc3MoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2Fw
KFdlYkNvcmU6OkxpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29u
c3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRTZXRMaW5lSm9pbihXZWJDb3JlOjpMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hh
ZG93KCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZSYpIGZpbmFsOworCisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3Jk
QXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0
ZXJuKCkgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigp
IGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRDbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdl
YkNvcmU6OldpbmRSdWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZl
cihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGlu
YXRpb25SZWN0KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgV2Vi
Q29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29y
ZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29y
ZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSos
IHVuc2lnbmVkIGNvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwg
V2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0lt
YWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05h
dGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3U3lzdGVtSW1hZ2UoV2ViQ29yZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIHBvaW50MSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2NhbEFuY2hv
ciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAg
ICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9p
ZCByZWNvcmRDbGVhclJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisKICAg
ICB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0
V2l0aEdyYWRpZW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVP
cGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxS
b3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmls
bFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZp
bGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgV2ViQ29yZTo6
TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxBcmMoY29uc3QgV2ViQ29yZTo6
QXJjRGF0YSYpIGZpbmFsOwpAQCAtMTE0LDkgKzkxLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmlu
YWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6
Ok1lZGlhUGxheWVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25z
dCBXZWJDb3JlOjpMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNv
bnN0IFdlYkNvcmU6OkFyY0RhdGEmKSBmaW5hbDsKQEAgLTEyNCwxMyArMTAyLDI4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXpp
ZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChj
b25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2
b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBw
bHlGaWxsUGF0dGVybigpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3Jk
RHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmREcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIHJl
Y29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVj
b3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+Jiwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsK
KworICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFs
OworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VC
dWZmZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29y
ZTo6RmlsdGVyJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1J
bWFnZShXZWJDb3JlOjpTeXN0ZW1JbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dGluYXRpb25SZWN0KTsKKyAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQ
YWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQg
cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJl
Y29yZERyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6
OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRl
eHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2Vi
Q29yZTo6RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMp
IGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSYpIGZpbmFsOwogCiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpOYXRpdmVJ
bWFnZSYpIGZpbmFsOwogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6SW1hZ2VC
dWZmZXImKSBmaW5hbDsKQEAgLTE0MSw2ICsxMzQsMTggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogICAg
IFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JT
cGFjZSYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nTWV0aG9kPikgY29uc3QgZmlu
YWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2VuZChUJiYgbWVzc2Fn
ZSkKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX25lZWRzRmx1c2ggPSB0cnVlOworICAgICAg
ICBtX3JlbmRlcmluZ0JhY2tlbmQtPnNlbmRUb1N0cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rl
c3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgdm9pZCByZWNvcmRBcHBs
eURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKwogICAgIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcjsKICAgICBX
ZWFrUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwogICAgIFdlYWtQdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbmRlcmluZ0JhY2tlbmQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5k
ZXggMWQ2NDNiNmI0Mjg4ZDA4ZTAzOGM0NjI1ZDA1NDlkZTY4YWYyYWE3Ny4uMDc5OTNiMzgwZjFl
YTdkMzQ5ZGQ3ZWJmYzE2MGM4MDRkYWQ0M2UzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtNTM0LDcgKzUzNCw3IEBA
IHZvaWQgRmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvCiAKICAgICAvLyBEcmF3IHdoaXRlIGZyYW1lcyBhcm91
bmQgdGhlIGhvbGVzLgogICAgIC8vIFdlIGRvdWJsZSB0aGUgdGhpY2tuZXNzIGJlY2F1c2UgaGFs
ZiBvZiB0aGUgc3Ryb2tlIHdpbGwgYmUgZXJhc2VkIHdoZW4gd2UgY2xlYXIgdGhlIGhvbGVzLgot
ICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNo
YWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldERyb3BTaGFkb3coeyBGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93
T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOwogICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBh
dGggOiB3aGl0ZUZyYW1lUGF0aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRl
eCBmMTZmNzk2ZTA0N2U5OTE5NzJjMGVkMWY0YWUxMTNjZTE2NTY1YzEwLi40OWUwMGJlMzM3ZWFm
ZWUxMjkzZWYwNzdhZGY2MTdjZGFlM2Q0YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxl
ci5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxl
cjo6ZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogCiAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29u
dGV4dCk7CiAKLSAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6
ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93
Q29sb3IpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXREcm9wU2hhZG93KHsgV2ViQ29yZTo6Rmxv
YXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBz
aGFkb3dDb2xvciB9KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRD
b2xvcik7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JC
b3JkZXJXaWR0aCAqIDIpOwogICAgIGZvciAoYXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhOGU5
NjBkNzhkY2I4ZGE4Y2M0NDhmMjUyNzMzZWUzNmIwMzc0ZWUwLi5iYWExNTEzOGE2MTk5YWFiMWRh
MTVkOTZkYzBiYzAwZmJkNjUxMjQ4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDMtMTQgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGlj
c0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRU
ZXN0c0NHLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIyLTAzLTEw
ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbZ2l0LXdl
YmtpdF0gU3VwcG9ydCBtdWx0aXBsZSBtZXRhZGF0YSBsb2NhdGlvbnMKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCmluZGV4IDhlNDFjNWE3M2FlMzY4NGNl
ZGRmMWY5NGY5ZjE3MTg5NTM1MTRjOWYuLmViZTY0NDg3MWUyOGY1MTljZDI2MTIwYjhhODI3ODg2
YzAxOTAyYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9j
Zy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NH
LmNwcApAQCAtNTQsNyArNTQsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0
cywgQmFzaWMpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgcHJpbWFyeUNvbnRleHQocHJpbWFyeUNH
Q29udGV4dC5nZXQoKSk7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0Owot
ICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0
UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29y
ZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29u
dGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKQEAgLTkwLDEwICs5
MCwxMCBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgQmFzaWMpCiBURVNU
KEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgVGV4dCkKIHsKICAgICBJbk1lbW9yeURp
c3BsYXlMaXN0IHByaW1hcnlEaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgcHJpbWFyeUNv
bnRleHQocHJpbWFyeURpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lk
dGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBwcmltYXJ5Q29udGV4
dChwcmltYXJ5RGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRl
eHRIZWlnaHQpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3Qgc2Vjb25kYXJ5RGlzcGxheUxp
c3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5RGlzcGxheUxp
c3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsg
fSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5RGlzcGxheUxp
c3QsIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAg
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlD
b250ZXh0KTsKIApAQCAtMjAxLDcgKzIwMSw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dFRlc3RzLCBCb3JkZXJzKQogICAgIEdyYXBoaWNzQ29udGV4dENHIHByaW1hcnlDb250ZXh0
KHByaW1hcnlDR0NvbnRleHQuZ2V0KCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNw
bGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwg
eyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsK
KyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0
KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBA
IC0yMjgsNyArMjI4LDcgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIFRy
YW5zZm9ybWVkQ2xpcCkKICAgICBHcmFwaGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0ID0gcHJp
bWFyeUNvbnRleHRDRzsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0g
ICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRETChkaXNwbGF5TGlzdCwgeyB9LCBGbG9h
dFJlY3QoMCwgMCwgMTAwLCAxMDApLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlD
b250ZXh0REwoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIEdy
YXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5Q29udGV4dCA9IHNlY29uZGFyeUNvbnRleHRETDsKIAog
ICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRh
cnlDb250ZXh0KTsKQEAgLTI4NywxNSArMjg3LDE1IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dFRlc3RzLCBBcHBseURldmljZVNjYWxlRmFjdG9yKQogICAgIEdyYXBoaWNzQ29udGV4
dCYgcHJpbWFyeUNvbnRleHQgPSBwcmltYXJ5Q29udGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNw
bGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERM
KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAg
UmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRETChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAs
IDAsIDEwMCwgMTAwKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0g
c2Vjb25kYXJ5Q29udGV4dERMOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgo
cHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCiAgICAgY3R4LmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoMik7CiAKLSAgICBhdXRvIHByaW1hcnlDVE0gPSBwcmltYXJ5Q29udGV4dC5n
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGU6OkRlZmluaXRlbHlJbmNs
dWRlRGV2aWNlU2NhbGUpOwotICAgIGF1dG8gc2Vjb25kYXJ5Q1RNID0gc2Vjb25kYXJ5Q29udGV4
dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGU6OkRlZmluaXRlbHlJ
bmNsdWRlRGV2aWNlU2NhbGUpOworICAgIGF1dG8gcHJpbWFyeUNUTSA9IHByaW1hcnlDb250ZXh0
LmdldENUTSgpOworICAgIGF1dG8gc2Vjb25kYXJ5Q1RNID0gc2Vjb25kYXJ5Q29udGV4dC5nZXRD
VE0oKTsKIAogICAgIEVYUEVDVF9FUShwcmltYXJ5Q1RNLnhTY2FsZSgpLCBzZWNvbmRhcnlDVE0u
eFNjYWxlKCkpOwogICAgIEVYUEVDVF9FUShwcmltYXJ5Q1RNLnlTY2FsZSgpLCBzZWNvbmRhcnlD
VE0ueVNjYWxlKCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDBlZGZiYmI2Mjc3ZGI0ODQ1MzNiMTY3ZmNiNTI1MzljMjhm
NDkwZGMuLjI3OTc1NzA1ZjYxNjhjMTQxODUwYTQzNDI4NjVmMmVjNDA1MDJkMmUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAyMi0wMy0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxl
LmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3Vs
ZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2V4
dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5
bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXls
aXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0OgorCiAyMDIyLTAzLTEw
ICBNYXR0ZW8gRmxvcmVzICA8bWF0dGVvX2Zsb3Jlc0BhcHBsZS5jb20+CiAKICAgICAgICAgWyBp
T1MgTWFjIF0gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9zZXJ2aWNlLXdvcmtlcnMv
c2VydmljZS13b3JrZXIvcGFydGl0aW9uZWQtc2VydmljZS13b3JrZXItbWF0Y2hBbGwudGVudGF0
aXZlLmh0dHBzLmh0bWwgaXMgYSBmbGFreSB0ZXh0IGZhaWx1cmUgb24gYWxsIHF1ZXVlcwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ct
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CmluZGV4IDUxMWI3YzBjNTRkMzMyMTZiN2M2ZWFmMDQzYTc1YzE2
NzY2ZDA0MjcuLjY1MjZkOTMxODQ4ODhhZDBiNTMwN2I5MTViNmRhZDZhY2U4NmNhMGMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVz
LXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTEsMTcgKzEsMTMgQEAKIAotKHRyYW5zbGF0ZQotICAo
eCAwLjAwKQotICAoeSAwLjAwKSkKIChzYXZlKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdz
IDUxMikKLSAgKHNoYWRvdy1ibHVyIDEyLjAwKQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBo
ZWlnaHQ9MjApCi0gIChzaGFkb3ctY29sb3IgIzAwMDAwMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2Fj
eS1yYWRpdXMgMCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QKKyAgKGNoYW5nZS1mbGFncyAyMDQ4
KQorICAoZHJvcC1zaGFkb3cKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjAp
CisgICAgKHNoYWRvdy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ctY29sb3IgIzAwMDAwMCkKKyAg
ICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkpCisoZmlsbC1yZWN0LXdpdGgtY29sb3IK
ICAgKHJlY3QgYXQgKDUwLDUwKSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAwMEZGKQotICAo
Y29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBl
eHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQg
YXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhw
ZWN0ZWQudHh0CmluZGV4IDM4NmUzOTQxMTg1ZjA5YTNjNjhlYzZjMmFlODhkZjExYzcwYjBhNjku
LjZiZjIzMjJkMjNhMGY1MWMxZDllZTYwYTJjZjFkZTZjNGI2NDE4YTEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFu
c2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMSwyMSArMSwxNCBAQAogCi0odHJhbnNsYXRlCi0gICh4
IDAuMDApCi0gICh5IDIyLjAwKSkKLShjb25jYXRlbnRhdGUtY3RtCi0gIChjdG0ge209KCgwLjg3
LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwtMTguMzApfSkpCiAoc2F2ZSkKIChzZXQtc3Rh
dGUKLSAgKGNoYW5nZS1mbGFncyA1MTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRv
dy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93LWNvbG9yICMwMDAwMDApCi0g
IChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0Cisg
IChjaGFuZ2UtZmxhZ3MgMjA0OSkKKyAgKGN0bSB7bT0oKDAuODcsMC41MCkoLTAuNTAsMC44Nykp
IHQ9KDgxLjcwLDMuNzApfSkKKyAgKGRyb3Atc2hhZG93CisgICAgKHNoYWRvdy1vZmZzZXQgd2lk
dGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LWNv
bG9yICMwMDAwMDApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQorKGZpbGwt
cmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKLSAgKGNvbG9y
ICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQt
bW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCisg
IChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1
KQogKHJlc3RvcmUpCi0oc2V0LWN0bQotICAoc2V0LWN0bSB7bT0oKDEuMDAsMC4wMCkoMC4wMCwx
LjAwKSkgdD0oMC4wMCwyMi4wMCl9KSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5
bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGJjMTdiNTExNDk5Zjgy
NTZjOTkyOTBkYWU4NjE0ZDQ4OTRjYWY5Y2MuLjdhNjg0NmE2MzBmNjIwZDJlOTQwZTYwYzdkOWIz
OGQyNDY4NDgwZGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1k
aXNwYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xh
eWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSwxNSArMSwxMSBAQAogCi0odHJhbnNs
YXRlCi0gICh4IDAuMDApCi0gICh5IDAuMDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisoZmls
bC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQotICAoY29s
b3IgIzAwODAwMCkKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVu
ZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKKyAgKGNvbG9yICMw
MDgwMDApIGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAoc2V0LXN0YXRlCi0gIChjaGFu
Z2UtZmxhZ3MgMzI5NjApCi0gIChmaWxsLWNvbG9yICMwMDAwRkYpCisgIChjaGFuZ2UtZmxhZ3Mg
MzI4MDIpCisgIChmaWxsLWJydXNoCisgICAgKGNvbG9yICMwMDAwRkYpKQogICAoc3Ryb2tlLXN0
eWxlIDApCiAgIChzaG91bGQtYW50aWFsaWFzIDApKQogKGRyYXctcmVjdApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0
LWV4cGVjdGVkLnR4dAppbmRleCBiYjU5M2QyMGY2ZGE2NDg2MjkyZDM2YzAyMjBlMmE5ZDg3MmY4
MmI5Li5iODYwNDhjYzA4Yzk5MzdlZjAwNzgyZTcxMDg5Y2FjYmM5OWM1MzMyIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBl
ZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtMSwxNiArMSw4IEBACiByZWNvcmRlZDoKLSh0cmFuc2xh
dGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QKKyhmaWxs
LXJlY3Qtd2l0aC1jb2xvcgogICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKLSAgKGNv
bG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxl
bmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKKyAgKGNvbG9y
ICMwMDAwRkYpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKIAogcmVwbGF5ZWQ6CiAo
CiAgIChjbGlwIGF0ICg1MTIsMCkgc2l6ZSA1MTJ4MjAwKQotKHRyYW5zbGF0ZQotICAoeCAwLjAw
KQotICAoeSAwLjAwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454629</attachid>
            <date>2022-03-14 15:28:56 -0700</date>
            <delta_ts>2022-03-14 16:08:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220314152855.patch</filename>
            <type>text/plain</type>
            <size>588460</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uMzFiZGNkYWQzNjNkNGE2MTU0NWJmYWI2NWM0ZGY2
MTdjODk3NjhhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3NyBAQAorMjAyMi0wMy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjphcHBseUxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJv
a2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXlvdXRTdGlwcGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dEhhdGNoaW5nKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1
c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxh
eWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3Rp
bmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlk
VXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBo
c1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRlY29u
c3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRp
c3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEltYWdlOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkaWRBcHBs
eVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGVG
YWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVu
ZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9
PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9w
ZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3RhdGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VH
cmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnREZXRlY3RlZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVyZ2VTdGF0ZUNoYW5n
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJnZVN0YXRlRGlmZnMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmluZUNhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojps
aW5lRGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZUpvaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Om1pdGVyTGltaXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcG9zaXRlTW9kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU9wZXJhdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJsZW5kTW9kZU9wZXJhdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU1vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpkcm9wU2hhZG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNTaGFkb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphbHBoYSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRp
YWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRTbW9vdGhG
b250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3Vs
ZFNtb290aEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNr
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJhd0x1bWlu
YW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1c2VEYXJrQXBw
ZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVz
ZURhcmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBw
bHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmlzSW5UcmFuc3BhcmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2Nh
bGVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBw
b3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6Y29u
dGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXll
clNjb3BlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OmJlZ2luTGF5ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVyU2Nv
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFj
a0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjp+R3JhcGhp
Y3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpoYXNP
bmx5UHJpbWl0aXZlQ2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptZXJnZURpZmZzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjaGFuZ2VzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkaWRBcHBseVN0YXRlQ2hhbmdl
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Z2V0Q1RNIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRDVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmZpbGxCcnVzaCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsR3JhZGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpmaWxsUnVsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbFJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZUJydXNoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlR3Jh
ZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9r
ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9r
ZVRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpzdHJva2VTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OmxpbmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OmxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bGluZUpvaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptaXRlckxpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpjb21wb3NpdGVNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpkcm9wU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnRleHREcmF3
aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpzaG91bGRBbnRpYWxpYXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNob3VsZFNtb290aEZvbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNl
dFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkcmF3THVtaW5hbmNl
TWFzayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0
RHJhd0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
OjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJl
c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpU
cmFuc3BhcmVuY3lMYXllclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxh
eWVyU2NvcGU6OmJlZ2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5
ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVyU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVj
a2VyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9y
PDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZU1vZGU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlTW9kZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZU1vZGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGlu
ZVN0eWxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lRGFzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6aXNWaXNpYmxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmlzQmx1cnJlZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93OjpoYXNPdXRzZXRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05hbWVk
SW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZEltYWdlR2Vu
ZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFw
aGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6Ok51
bGxHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0Ry
YXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OlNoYWRvd0Js
dXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJydXNoOjpzcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
cnVzaDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnBh
dHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJj
ZUJydXNoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmNvbG9yIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6YnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnJ1c2g6OnNldEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpzZXRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjppc1ByaW1pdGl2
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJydXNoOjpCcnVzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJydXNoOjpCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJy
dXNoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmRlY29k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6VGV4dEJveEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6
b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpT
dGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6Z2V0Q1RNKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUpv
aW4pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnNldE1pdGVyTGltaXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRlQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Z2V0Q1RNIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2gpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRN
aXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpDR0NvbnRleHRTdGF0ZVNh
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6On5DR0NvbnRleHRT
dGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJuYWxQbGF0Zm9ybUNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBP
dXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldENHTGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xp
bmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTWl0ZXJMaW1pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRDR0xpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHU2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZUVsbGlwc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNhblVzZVNoYWRvd0JsdXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdElt
cGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBC
b3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6fkNHQ29udGV4dFN0
YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZl
cjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVy
OjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2
ZXI6OmRpZFNhdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJ
bWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UERG
RG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNv
bnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3
R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpiZWdpbkxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUludGVybmFsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OnNldEludGVybmFsRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkQmVnaW5MYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVuZExheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29y
ZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6cmVjb3JkRHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6ZHJhd05vbk9UU1ZHUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6ZHJhd09UU1ZHUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRl
cjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRy
YXdOYXRpdmVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6Y3Jl
YXRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVy
bmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnVwZGF0ZUZpbGxDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5
cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OnNoYWRvd0lzQ2xlYXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3
R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzaG93R2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzYWZlQ29weSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNpemVPZkl0ZW1J
bkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdpbmdJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpTZXRTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRp
YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRDVE06OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDb25jYXRlbmF0ZUNUTTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6YXBwbHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0
ZXJMaW1pdDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyU2hhZG93OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJv
dW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJl
Y3Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91
bmRlZFJlY3Q6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OnggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YW5nbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmFtb3VudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6dHJhbnNmb3JtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6
Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNvbmNhdGVuYXRlQ1RNOjp0cmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZUNoYW5nZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRM
aW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
Q2FwOjpsaW5lQ2FwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lRGFzaDo6U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoQXJyYXkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFz
aDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRMaW5lRGFzaDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpsaW5lSm9pbiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJM
aW1pdDo6bWl0ZXJMaW1pdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6cmVj
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENv
bXBvc2l0ZWRSZWN0Ojpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb21wb3NpdGVPcGVyYXRvciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRS
ZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2Fs
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YmxlbmRNb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OlJlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojpt
X2RyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpy
ZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlT
dGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjph
cHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXApOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9y
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp+UmVjb3JkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRl
Q2hhbmdlSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3RhdGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkaWRVcGRhdGVTdGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNl
dExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y29uY2F0Q1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Z2V0Q1RN
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmN0bSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0
ZTo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpz
ZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OkNvbnRleHRT
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OkNvbnRleHRTdGF0ZTo6Y2xvbmVGb3JTYXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjbG9uZUZvclRyYW5z
cGFyZW5jeUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6c3RhdGVTdGFjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OlJlY29yZGVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRT
ZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENs
aXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
Q2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUm91bmRlZFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEJlemllckN1cnZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tl
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRTdHJva2VCZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNS
aW5nUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVj
b3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlw
aHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
RHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjp+UmVjb3Jk
ZXJJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZENvbmNhdGVuYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVDYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZURh
c2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkU2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclNoYWRv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBs
OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6UmVjb3JkZXJJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0
ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6YXBwbHlTZXRT
dGF0ZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Ry
YXdHbHlwaHNSZWNvcmRlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2U6OmRyYXdCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENo
ZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVh
bGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5RWxs
aXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
OnVwZGF0ZUV2ZW50UmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGRJbm5l
clNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1Q
cmV2aWV3QmFkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hl
Y2tib3hSYWRpb0lubmVyU2hhZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRl
cik6CisgICAgICAgICogcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29y
YXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VT
dHJva2VTdHlsZVRvRmlsbCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tl
U3R5bGVUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJl
VG9SZW5kZXJTVkdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZHJhdyk6CisKIDIwMjItMDMtMTQgIEFu
dG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9k
ZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZDljYzNjNGZlNjllOGJjZTVlMDFjODlhZjRkMDdjNzVhYzgwYzNlNi4uMjNj
NjA3YTZmMjJkNTQyNmM4MjBjOTY1MmExNWM2MGQ2YmE1OWI5YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw4MyBAQAorMjAyMi0wMy0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4K
KworICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBs
YXppbHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVD
VE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OmZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJu
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRBcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0
aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xpcE91dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZp
bGxCZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3Vy
dmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3TGluZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNS
aW5nUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRl
cm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVz
aENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjptX3JlbmRlcmluZ0JhY2tlbmQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxp
bWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6c2VuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xs
ZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0
UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VD
b250cm9sbGVyOjpkcmF3UmVjdCk6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFv
dXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRv
ZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
NWM3YjczZWIyMDVlMDllYzI0NmUwMTFkMGE1MDJkY2Q0YzFkY2E1MC4uZWI3NmExODZkMzQ4ZDRi
MzY4OWYyMzRmM2RiZjYyODJhYWFkZTA1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNDUsNiArMjA0
NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRHTC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyVHJhbnNmb3JtLmNwcApAQCAtMjA4NCw2ICsyMDg1LDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ODI5NjJiYTA0ZTJmZmQ3ZmZhMGM2ZTYxZDljOWMyYzE3YTVmNjQ2Ny4uYjU1YzVjMWM0MmUzMjk1
NTcwZWQyNGM4NDBkYzNlNGYyZmQzMDJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjMzMSwxMCArMjMzMSwxMiBAQAogCQk3
MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0
MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5
QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUYwNUY3RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUZDQjE3MDI3
QkFCM0ZFMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQ0IxNkQyN0JBQjNERjAwRTA2MzFDIC8qIEZy
YW1lUmF0ZUFsaWduZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MjAxNzgzQjI3RDU3RjlGMDA5QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIwMTc4
M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBG
MTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0
MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyog
U1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyMUI0OTc0MjUxMkJBM0IwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tp
bmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUI0
OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBG
NUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBh
aW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyNDYwREQ3MjdDODZEQUQwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0NjBE
RDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0Njk2M0IyNzVDNUZBNjAw
QTkxNTZBIC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1M0ZCODMyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNEMjc1
QzYxNDQwMEE5MTU2QSAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMTRCOUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBG
aWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MjQ2OTYzRTI3NUM2MTY3MDBBOTE1NkEgLyogRmlsdGVySW1hZ2VWZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjRF
RjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMzQyLDYgKzIzNDQsOSBAQAog
CQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkx
RkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0
ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9i
c2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzI1NjA3OEUyNzlEMzRCNjAwN0QyREQzIC8qIEZFSW1hZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyRjdFNzRGMjc5Q0VERTgwMEQ4MkQyRCAv
KiBGRUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8qIFNvdXJjZUJydXNoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkIzNTEwRjI3Q0I0MkZFMDBE
MjdBRTAgLyogU291cmNlQnJ1c2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NTI3Q0RBODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNTgx
ODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkIzNTEwRDI3Q0EzMjhG
MDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkNERTIwMjc1OTczNTAwMEE0NDVC
MiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI5NjYxQTIyNzU5NjBBNTAwRTdERjlCIC8qIEZpbHRlckVmZmVj
dEdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMw
MDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUlt
YWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEz
MzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTEzMTgsNiArMTEzMjMsOCBAQAogCQk3
MUZDQjE2RDI3QkFCM0RGMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZVJhdGVBbGlnbmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRkNCMTZGMjdCQUIzRTAwMEUwNjMxQyAvKiBGcmFtZVJhdGVBbGln
bmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lUmF0ZUFs
aWduZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZGODUxODIyQTNGODFG
MDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ0dDb250ZXh0U3RhdGVTYXZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjA2RDQzNTI3REFERUNBMDA0MEZFQjIgLyogVGV4dEJveEl0ZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjExQjVENjI3NjUzNjgyMDA3NkZFRjggLyogRmlsdGVyUmVzdWx0cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVBy
b3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzI3LDYgKzExMzM0LDggQEAKIAkJNzIyQTgxNUMyMzhGRDUw
NTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRp
b25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0MzVFRjQyNzNE
MDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNDM1RUY1MjczRDA3NjcwMDA1RTdF
RSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJJbWFnZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAv
KiBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0Nv
bnRleHRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNDYwREQ2MjdD
ODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmFwaGljc0NvbnRleHRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRF
RDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5N
YXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8q
IEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1h
eC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM4OSw2ICsxMTM5OCwxMCBA
QAogCQk3MkExM0FENTI3NERFNTRFMDBFMkE4OEUgLyogU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxp
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBMTNBRDYyNzRERTU3ODAwRTJBODhFIC8qIFNvdXJj
ZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlR3Jh
cGhpY1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
QTEzQUQ3Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEMyN0M5RjkzRTAwRDI3QUUwIC8qIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBEMjdDQTMyOEYwMEQyN0FF
MCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUx
MEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNvdXJjZUJydXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEYy
N0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUJy
dXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjc0Mjc0RTIzMzMwMDI5
M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFQmxlbmRT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNEVGNzUy
NzRFMjMzNDAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyQjRFRjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZVZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjg4MTAsNiArMjg4MjMsNyBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2
NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJ
CQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3BwICovLAogCQkJCUJDQUZF
REIzMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cuY3BwICovLAogCQkJCUJDQUZFREIy
MjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cuaCAqLywKQEAgLTI5MDQzLDYgKzI5MDU3
LDkgQEAKIAkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdy
YXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAqLywKIAkJCQk3Qjk1Q0ZFOTI3NTRGRjZF
MDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICovLAorCQkJCTcyNDYwREQ1MjdD
ODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgKi8sCisJCQkJNzI0NjBE
RDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmggKi8sCisJCQkJNzJC
MzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLywK
IAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJ
CQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkw
RjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAt
MjkxNDMsNiArMjkxNjAsNyBAQAogCQkJCUJDQTU1OTEyMjYzREJENzkwMDdGMTlCMyAvKiBQaXhl
bEZvcm1hdC5oICovLAogCQkJCUNERDA4QUJGMjc3RTU0RjAwMEVBMzc1NSAvKiBQbGF0Zm9ybUF1
ZGlvVHJhY2tDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJQkMzRTYyNDIyNjU5NzkxNzAwNTQ4QUNE
IC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oICovLAorCQkJCTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FF
MCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovLAogCQkJCTcyNkQ1NkUxMjUzQUUwNDMw
MDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3
NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk1NTA2NDBBRDI0MDc1NkRBMDBB
QUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKQEAgLTI5MTY2LDYgKzI5
MTg0LDggQEAKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAg
Ki8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKIAkJ
CQkxQzREQjAyNDI3MzM5RTVFMDA3QjBBRDEgLyogU2hvdWxkTG9jYWxpemVBeGlzTmFtZXMuaCAq
LywKKwkJCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAgLyogU291cmNlQnJ1c2guY3BwICovLAor
CQkJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5oICovLAogCQkJCTFE
RDEyN0FDMjU2RTNBODcwMEIyMjdENyAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmNwcCAqLywKIAkJ
CQlDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5oICovLAog
CQkJCUNEQzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50
LmggKi8sCkBAIC0yOTE3Nyw2ICsyOTE5Nyw3IEBACiAJCQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5
MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oICovLAogCQkJCTk1RTlGNDQ0
MjdDOUEzOUIwMDk0NTMzNyAvKiBTeXN0ZW1JbWFnZS5oICovLAogCQkJCTNCQjZCODBGMjJBN0Qz
MTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCisJCQkJNzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIy
IC8qIFRleHRCb3hJdGVyYXRvci5oICovLAogCQkJCTM3NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAv
KiBUZXh0UnVuLmNwcCAqLywKIAkJCQlBODI0QjQ2NDBFMkVGMkVBMDA4MUE3QjcgLyogVGV4dFJ1
bi5oICovLAogCQkJCUNEMUU3MzQ2MTY3QkM3OEUwMDlBODg1RCAvKiBUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbi5jcHAgKi8sCkBAIC0zMzg3Myw2ICszMzg5NCw3IEBACiAJCQkJQ0RFM0FFMTIyNEI0
OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0
Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8qIENlcnRpZmljYXRlU3VtbWFyeS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5RjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRl
U2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZGRDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBD
aGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzY5REQxNTA1RjA3NjAw
MUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNzg1
RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5lbENvdW50TW9kZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNDc5OCw2ICszNDgyMCw4IEBACiAJCQkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8q
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Qjk1Q0ZFQjI3
NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjQ2MERENzI3Qzg2REFEMDBENUY5RjQg
LyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNTgxODU2MjdD
REFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJD
QS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBo
aWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzY3MDUsNiArMzY3MjksNyBAQAog
CQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3Jt
RXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5NTFENTRGNUZCMDBERDdD
NjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NTI3Q0RB
ODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRDc3MDVDNzI1NTI3NkNEMDAxRDBDOTQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQUYyNDA3NTgyRDAwQUFFMDQ1IC8qIFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTM3Mzg2LDYgKzM3NDEx
LDcgQEAKIAkJCQk1MTBENEEzODEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyog
U29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODRBODFGM0UwRkM3
REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1
NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1c2guaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
M0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNEM0E0OTY1MTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VCdWZmZXJMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDREYxMzUwOTI0QzlGQ0EzMDA0MzJFMUUgLyogU291cmNlQnVmZmVyUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDg1NmEzZGU1MDRk
ZWMwYmJmYTkwYWMxN2RlMzdmNTE1ZTE0ZDkyMDQuLjlkOTM1YTZmZjMyMzBmM2Y0NmEyZWY1ZDdl
YTEwMDEwYWU5ZTEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxh
eS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcApAQCAtMzcyLDcgKzM3Miw3IEBA
IHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aChQYWludGluZ0NvbnRleHQm
IHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICAgICAgICAgIERhc2hBcnJheSBsaW5lRGFzaDsK
ICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNoTGVuZ3RoKTsKICAgICAgICAgICAgIGxp
bmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hMZW5ndGgpOworICAgICAgICAgICAgcGFp
bnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFz
aExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9r
aW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAg
LTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hh
ZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8g
c2hhZG93UmVjdE9yaWdpbiA9IGZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpICsgc2hhZG93T2Zm
c2V0OwogICAgICAgICBhdXRvIGFkanVzdGVkU2hhZG93T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdp
biAtIGFkanVzdGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dS
YWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygp
ID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7
CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldERyb3BTaGFkb3coeyBhZGp1c3Rl
ZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFk
b3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRv
d1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykg
ewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5
IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xNDA1LDcg
KzE0MDUsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWlu
dGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQg
LT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBz
aGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNo
YWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4
dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hh
ZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9k
ZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKICAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1Jl
Y3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9DdXN0b21QYWludEltYWdlLmNwcAppbmRleCBmNGI5OGJhNjJlMTE5YTA3NzEzMTJkM2I4
OGM0OTE5MzY4MzZlZTM3Li5lZTUwNGYwOGM0OWZjOGQ1YjVhZWQ3MDJiZTIxN2YxYjA2ZmQ0ZTBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKQEAgLTE3NSw3ICsx
NzUsNyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludChH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjbwogSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBh
aW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwor
ICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJh
dG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENvbnRleHQuY2xpcChkZXN0
UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkpOwog
ICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCkBAIC0xOTIsNyArMTky
LDcgQEAgdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKIAogICAgIC8vIEZhY3RvciBpbiB0aGUgZGVzdGluYXRpb24gY29udGV4
dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29sdXRpb24KLSAgICBBZmZpbmVU
cmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
ZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oKTsKICAgICBkb3VibGUgeFNjYWxl
ID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7CiAgICAgZG91YmxlIHlTY2FsZSA9IGZh
YnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBhZGp1c3Rl
ZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRl
eCAwZTc4MDYzZTNhNDFjYmM2OTBmMGQwY2NiNzg4MTE3ZGU2OTM4YTAyLi5kYmM5NTdjNTNkMDRh
Mzk2ZWFjNjRkNjdmZTZhMmIxN2U0NDhjNjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAt
Njk3LDcgKzY5Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlM
aW5lRGFzaCgpIGNvbnN0CiAgICAgRGFzaEFycmF5IGNvbnZlcnRlZExpbmVEYXNoKHN0YXRlKCku
bGluZURhc2guc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlKCkubGlu
ZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbnZlcnRlZExpbmVEYXNoW2ldID0gc3RhdGlj
X2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4oc3RhdGUoKS5saW5lRGFzaFtpXSk7Ci0gICAgYy0+c2V0
TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRlKCkubGluZURhc2hPZmZzZXQpOworICAg
IGMtPnNldExpbmVEYXNoKHsgV1RGTW92ZShjb252ZXJ0ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0
PGZsb2F0PihzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KSB9KTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxBbHBoYShkb3VibGUgYWxwaGEpCkBAIC03Mjgs
NyArNzI4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxD
b21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBvcGUKICAgICBHcmFwaGljc0NvbnRleHQq
IGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwotICAg
IGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKKyAgICBjLT5zZXRDb21w
b3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKQEAgLTExODYsNyArMTE4
Niw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tl
SW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZG91CiAgICAgICAgIERhc2hBcnJheSBjb252ZXJ0
ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAgICAgICAgY29udmVydGVkTGluZURhc2hb
aV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50PihsaW5lRGFzaFtpXSk7Ci0gICAgICAg
IGNvbnRleHQuc2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zm
c2V0KTsKKyAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IFdURk1vdmUoY29udmVydGVkTGlu
ZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUubGluZURhc2hPZmZzZXQpIH0pOwogICAg
IH0pOwogfQogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmNsZWFyUmVjdChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB3aWR0aCwgZAog
ICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsK
ICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coRmxvYXRT
aXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOworICAgICAgICBjb250ZXh0LT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAsIENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiAgICAg
fQogICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZl
ZCkgewpAQCAtMTM2Myw5ICsxMzYzLDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAg
ICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICBm
bG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgYy0+
c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwg
c3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAg
Yy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hh
ZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0p
OwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9y
Ojp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBj
LT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjQzMiwxOSArMjQz
MiwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVj
a2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGRvdQogCiAgICAgICAgICAgICBGbG9hdFNpemUg
b2Zmc2V0KDAsIDIgKiBtYXNrUmVjdC5oZWlnaHQoKSk7CiAKLSAgICAgICAgICAgIEZsb2F0U2l6
ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7Ci0gICAgICAg
ICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICAgICAgICAgIGMtPmdldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotCiAgICAgICAgICAgICBGbG9hdFJl
Y3Qgc2hhZG93UmVjdChtYXNrUmVjdCk7Ci0gICAgICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUo
c2hhZG93UmFkaXVzICogMS40KTsKLSAgICAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzaGFkb3dP
ZmZzZXQgKiAtMSk7CisgICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cgPSBjLT5kcm9wU2hhZG93
KCk7CisKKyAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShkcm9wU2hhZG93LmJsdXJSYWRp
dXMgKiAxLjQpOworICAgICAgICAgICAgc2hhZG93UmVjdC5tb3ZlKGRyb3BTaGFkb3cub2Zmc2V0
ICogLTEpOwogICAgICAgICAgICAgYy0+Y2xpcChzaGFkb3dSZWN0KTsKIAotICAgICAgICAgICAg
c2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKKyAgICAgICAgICAgIGRyb3BTaGFkb3cub2Zmc2V0ICs9
IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93
UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAg
ICAgIGMtPnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICAgICAgICAgICAgIGlmIChmaWxs
KQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCmluZGV4IDRmNjNhZGNl
OTM5MTZkYjIzMjBlOTY3OGFhYmZlMGYzY2Q5OTc2MmIuLjlhODAzYTQwOGQ4OGMyZmY0OGRkM2Jl
YTAyOTUxYjg3NTgwOThlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5jcHAKQEAgLTEyNDQsNyArMTI0NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlv
dXRTdGlwcGxpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1
YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKICAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxl
KFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2goeyAx
LCBkZW5zaXR5IH0sIDEpOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IDEsIGRlbnNpdHkg
fSwgMSB9KTsKIAogICAgIGRyYXdMYXlvdXRQYXR0ZXJuKGNvbnRleHQsIHF1YWQsIGRlbnNpdHks
IEZsaXA6Ok5vKTsKIH0KQEAgLTEyNTQsNyArMTI1NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlv
dXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKGNvbnRleHQpOwogICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHls
ZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
MiwgMiB9LCAyKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyAyLCAyIH0sIDIgfSk7CiAK
ICAgICBjb25zdGV4cHIgYXV0byBkZWZhdWx0TGF5b3V0SGF0Y2hTcGFjaW5nID0gMTI7CiAgICAg
ZHJhd0xheW91dFBhdHRlcm4oY29udGV4dCwgcXVhZCwgZGVmYXVsdExheW91dEhhdGNoU3BhY2lu
ZywgZmxpcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYjU4OGY2ZmE0YTExZDc3
MGMzYzg0OTk5NjcyZDdkN2VmZjQzMmM0Zi4uOGExN2FlMzcwYWUzNmIwMGViYjdhOWIyZTA3NTUx
ODA2YmVkMTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNDMwMyw3ICs0MzAz
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdy
YXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXQKICAgICBpZiAobmVlZHNMYXlvdXQoKSkKICAg
ICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgTnVsbEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KGZyYW1lUmVjdCgpLCBwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAg
IGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50
c0VudGlyZUNvbnRlbnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJs
ZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ4NTQsNyAr
NDg1NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9h
dCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEg
Y29udGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgotICAgIE51bGxHcmFwaGljc0NvbnRleHQg
Y29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5v
bmUpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChmcmFtZVJlY3QoKSwgTnVsbEdy
YXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAgICByZW5k
ZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihvbGRCb3R0b20p
KSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob2xk
VG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nh
c3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3ApKSk7CiAgICAgcmVuZGVyVmlldy0+c2V0
UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDlm
ZDI1ZDgwYWQxMmRjOTFkZDExZjkxNTk4ZmM2YzhlZmE0Y2IyYTIuLjI4OTU3NGI5YzFlNDBjZDcx
MmI0ZTJiNmU5ZWIzNGIwMTcyOWRmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCkBA
IC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBwcmlt
YXJ5Q29udGV4dCwgR3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0KQotICAgIDogbV9w
cmltYXJ5Q29udGV4dChwcmltYXJ5Q29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChwcmlt
YXJ5Q29udGV4dC5jbGlwQm91bmRzKCksIHsgfSwgcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKCkpCisg
ICAgLCBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250ZXh0KQogICAgICwgbV9zZWNvbmRhcnlD
b250ZXh0KHNlY29uZGFyeUNvbnRleHQpCiB7CiB9CkBAIC00OCw2ICs0OSwzMCBAQCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250
ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KTsKIH0KIAorI2lmIFVTRShDRykKK2Jvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6aXND
QUxheWVyQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXND
QUxheWVyQ29udGV4dCgpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQoreworICAgIG1fcHJpbWFy
eUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKKyAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKK30K
Kwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7
Cit9CisjZW5kaWYKKworUmVuZGVyaW5nTW9kZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpy
ZW5kZXJpbmdNb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yZW5k
ZXJpbmdNb2RlKCk7Cit9CisKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgp
CiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG5vdCB1c2luZyB0aGUgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dCdzIHN0YXRlIHN0YWNrIGF0IGFsbCwKQEAgLTY0LDIyICs4OSwxMCBAQCB2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQogICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmIGZyb20sIGNvbnN0IEZsb2F0UG9pbnQmIHRvKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd0xpbmUoZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9t
LCB0byk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojph
cHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShy
ZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CisgICAgbV9w
cmltYXJ5Q29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5hcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCiAjaWYgVVNFKENHKQpAQCAtOTYsMjIgKzEwOSwx
MCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQog
fQogI2VuZGlmCiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZp
bGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5zdHJva2VQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRo
KHBhdGgpOworICAgIG1fcHJpbWFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0
b3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rv
cik7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KQpAQCAtMTI2LDIyMiArMTI3LDEyNiBAQCB2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBtX3NlY29u
ZGFyeUNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwotfQotCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotfQotCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBj
b2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChy
ZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotfQotCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VSZWN0
KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVj
dCwgbGluZVdpZHRoKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbEVsbGlw
c2UoZWxsaXBzZSk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VF
bGxpcHNlKGVsbGlwc2UpOwotfQotCi0jaWYgVVNFKENHKQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNDQUxheWVyQ29udGV4dCkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4
dCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVy
Q29udGV4dCk7Ci19Ci0KLWJvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVy
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVy
Q29udGV4dCgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlzQWNjZWxl
cmF0ZWRDb250ZXh0KTsKLX0KLSNlbmRpZgotCi1SZW5kZXJpbmdNb2RlIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaW1h
cnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLX0KLQogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmNsaXAocmVjdCk7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwKHJlY3QpOwogICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5jbGlwKHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuY2xpcE91dChyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChy
ZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwotfQotCiB2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRS
dWxlKQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwog
ICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcHJpbWFyeUNvbnRleHQuY2xpcEJvdW5kcygpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LnNldExpbmVDYXAobGluZUNhcCk7Ci0gICAgbV9zZWNvbmRhcnlDb250
ZXh0LnNldExpbmVDYXAobGluZUNhcCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJl
Y3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwogfQogCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRM
aW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5z
ZXRMaW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpOworICAgIG1fcHJpbWFyeUNvbnRleHQu
Y2xpcE91dChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKIH0K
IAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBs
aW5lSm9pbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVKb2luKGxpbmVKb2luKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZUpvaW4obGluZUpvaW4pOworICAgIG1fcHJpbWFy
eUNvbnRleHQuY2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7
CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBk
ZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LnNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LnNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGVhclJl
Y3QocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKIH0KIAot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3
TmF0aXZlSW1hZ2UobmF0aXZlSW1hZ2UsIHNlbGZTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFn
ZSwgc2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBtX3ByaW1hcnlD
b250ZXh0LmZpbGxSZWN0KHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChy
ZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1h
Z2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25S
ZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwogfQogCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5kcmF3UGF0dGVybihuYXRpdmVJbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5hdGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3ByaW1hcnlD
b250ZXh0LmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZmlsbFJlY3QocmVjdCwgZ3JhZGllbnQpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3QocmVjdCwg
Y29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3QocmVjdCwgY29s
b3IpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3ByaW1h
cnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxl
U2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUaWxl
ZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0
aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJl
Y3QsIGNvbG9yKTsKIH0KIAotSW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7
CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwogfQogCi0jaWYg
RU5BQkxFKFZJREVPKQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIs
IGRlc3RpbmF0aW9uKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlh
KHBsYXllciwgZGVzdGluYXRpb24pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0
aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOwogfQotI2VuZGlmIC8v
IEVOQUJMRShWSURFTykKIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNjYWxlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQog
ewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2NhbGUoc2NhbGUpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5zY2FsZShzY2FsZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3Qs
IGJvcmRlclRoaWNrbmVzcyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVj
dCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
Ojpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIG1f
cHJpbWFyeUNvbnRleHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9r
ZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2Uo
ZWxsaXBzZSk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnRyYW5zbGF0
ZSh4LCB5KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOworICAgIG1f
cHJpbWFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuY29uY2F0Q1RNKHRyYW5z
Zm9ybSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNvbmNhdENUTSh0cmFuc2Zvcm0pOworICAg
IG1fcHJpbWFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIGZyb20sIGNvbnN0IEZsb2F0UG9pbnQmIHRvKQogewotICAgIG1f
cHJpbWFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LnNldENUTSh0cmFuc2Zvcm0pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwg
dG8pOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CiB9CiAKLUFm
ZmluZVRyYW5zZm9ybSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURl
dmljZVNjYWxlIGluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJl
dHVybiBtX3ByaW1hcnlDb250ZXh0LmdldENUTShpbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LmRyYXdFbGxpcHNlKHJlY3QpOwogfQogCi1GbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5n
TW9kZSByb3VuZGluZ01vZGUpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91
bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZHJhd1BhdGgocGF0aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgp
OwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCkBAIC0zNzAsMjkgKzI3NSw1NCBAQCB2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBkbwogfQogI2VuZGlmCiAKLUZsb2F0U2l6ZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gdG8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgYXV0byBzaXplID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3VGV4dChjYXNjYWRlLCBy
dW4sIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUZXh0KGNh
c2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAgICByZXR1cm4gc2l6ZTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9u
dFNtb290aGluZ01vZGUpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiBmaWx0ZXJS
ZXN1bHRzKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVy
LCBmaWx0ZXJSZXN1bHRzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1
bHRzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJv
bSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoY2FzY2FkZSwgcnVuLCBtYXJrLCBwb2lu
dCwgZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RW1waGFzaXNNYXJrcyhj
YXNjYWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CisgICAgbV9wcmltYXJ5Q29udGV4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGlt
YWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2FzY2Fk
ZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udENhc2Nh
ZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFn
ZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAg
IG1fcHJpbWFyeUNvbnRleHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdCaWRpVGV4
dChjYXNjYWRlLCBydW4sIHBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOworICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJl
Y3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2Us
IGRlc3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIG1fcHJp
bWFyeUNvbnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
eworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBFTkFC
TEUoVklERU8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQor
eworICAgIG1fcHJpbWFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGlu
YXRpb24pOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVy
LCBkZXN0aW5hdGlvbik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCit2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRy
YXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNt
b290aGluZ01vZGUpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3R2x5cGhzKGZvbnQsIGds
eXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0K
IAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZSkKQEAgLTQwNywxNiArMzM3LDkgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKICAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBtYXJrZXJT
dHlsZSk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmIHVybCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorYm9vbCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0
c0ludGVybmFsTGlua3MoKSBjb25zdAogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0RGVzdGlu
YXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0
aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQu
c3VwcG9ydHNJbnRlcm5hbExpbmtzKCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCkBAIC00MjUsMTggKzM0OCwxNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFkZERlc3RpbmF0aW9uQXRQb2ludChuYW1lLCBw
b2ludCk7CiB9CiAKLWJvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRl
cm5hbExpbmtzKCkgY29uc3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVz
dGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnN1cHBvcnRzSW50ZXJuYWxMaW5rcygp
OworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3Qp
OworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVj
dCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlkVXBkYXRlU3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVybCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIC8vIFRoaXMgY2FsbHMgdXBkYXRlU3RhdGUoKSBpbnN0ZWFkIG9mIGRpZFVwZGF0ZVN0YXRl
KCkgc28gdGhhdCBjaGFuZ2VzCi0gICAgLy8gYXJlIGFsc28gYXBwbGllZCB0byBlYWNoIGNvbnRl
eHQncyBHcmFwaGljc0NvbnRleHRTdGF0ZSwgc28gdGhhdCBjb2RlCi0gICAgLy8gaW50ZXJuYWwg
dG8gdGhlIGNoaWxkIGNvbnRleHRzIHRoYXQgcmVhZHMgZnJvbSB0aGUgc3RhdGUgZ2V0cyB0aGUg
cmlnaHQgdmFsdWVzLgotICAgIG1fcHJpbWFyeUNvbnRleHQudXBkYXRlU3RhdGUoc3RhdGUsIGZs
YWdzKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQudXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsK
KyAgICBtX3ByaW1hcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0KTsKKyAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3QpOwogfQogCiAjaWYgT1MoV0lO
RE9XUykgJiYgIVVTRShDQUlSTykKQEAgLTQ0Niw1ICszNjcsMTAgQEAgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkZXByZWNhdGVkUHJp
dmF0ZUNvbnQKIH0KICNlbmRpZgogCitGbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9k
ZSByb3VuZGluZ01vZGUpCit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91bmRUb0Rl
dmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAppbmRleCBmNThiMzRjOTE0MzQyYjczNzc3Mjdj
MTFhNzNiNmQ4MjE4ZTE1NTZmLi43YTM3YTExM2RkODE1ZWIzYjk1NjA3NTJkOWRjNzBlYjVhODk3
YzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oCkBAIC00Myw4MyArNDMsNTQgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBz
YXZlKCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisjaWYgVVNFKENHKQorICAg
IGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQg
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2Vs
ZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKKyNlbmRpZgorICAgIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwogCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAg
dm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFs
OwogI2lmIFVTRShDRykKICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwogICAg
IHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCBkcmF3UGF0
aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmlu
YWw7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAogICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKICAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKLQotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3Q7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAg
dm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgp
IGZpbmFsOwotCi0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotCi0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29s
KSBmaW5hbDsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKLQotICAg
IHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7Ci0jZW5kaWYKLQotICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0
aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwogICAgIHZvaWQgY2xpcE91
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRo
JikgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKIAotICAgIHZvaWQgY2xpcFBhdGgo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwotCi0gICAg
SW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAo
TGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBm
bG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBm
aW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwotCi0gICAgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3U3lzdGVt
SW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIEltYWdlRHJhd1Jl
c3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFn
ZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRy
YXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7
Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lk
IHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pIGZpbmFsOwotI2VuZGlmCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYp
IGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2Nh
bGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJ
blJhZGlhbnMpIGZpbmFsOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZp
bmFsOworICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5h
bDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5h
bDsKIAotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwot
ICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQg
c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dCBmaW5hbDsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAg
ICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKSBmaW5hbDsKIAorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCiAg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2lmIFBMQVRGT1JNKE1B
QykKQEAgLTEyNywyMyArOTgsMjYgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAjZW5kaWYKIAotICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBmaW5hbDsKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdCaWRpVGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBh
aW50SWZGb250Tm90UmVhZHkpIGZpbmFsOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAg
IHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBm
aW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQ
YXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCBwYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBm
aW5hbDsKKyNlbmRpZgogCisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291
bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmlu
YWw7CiAgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7Ci0KICAgICB2b2lkIGRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZp
bmFsOwogCi0gICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOwotCi0gICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9u
QXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLQog
ICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50
JikgZmluYWw7CisgICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29u
c3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwog
CiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShDQUlSTykKICAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJh
dGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRl
R2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IGJiNGRhYzAxOWM1YjllMTNiMTM3YWU2OTRlNGJmNmIy
NzZiZmNjMGQuLjFjMWI5NmVjNWI5ODNjYzVmMThkNmZmMWZkMjU4NTdmYTk0M2M0MWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZS5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhd0Nyb3NzZmFkZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiBJbWFn
ZURyYXdSZXN1bHQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xp
cChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwog
ICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKaW5kZXgg
MjVhM2QzZmU4NzczMzFkZGEzOTU3ODAxMWI2ZDg5MGYyMTJjNzJlNi4uM2JjYjUwNWFmM2MyODJm
NDIyMzI1Y2Q3ZTMwMDUzNGZkOWY5OWNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyNCArMjYsMTEg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgi
CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCi0jaWYgVVNFKENPUkVfVEVYVCkKLSNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8Q29yZVRleHQvQ29y
ZVRleHQuaD4KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRl
eHRTUElXaW4uaD4KLSNlbHNlCi0jaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgot
I2VuZGlmCi0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNlbmRpZgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CkBAIC02Miw3NiArNDks
MzIgQEAgcHVibGljOgogI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCiAgICAg
dm9pZCBkcmF3TmF0aXZlVGV4dChDVEZvbnRSZWYsIENHRmxvYXQgZm9udFNpemUsIENUTGluZVJl
ZiwgQ0dSZWN0IGxpbmVSZWN0KTsKIAotICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0KTsKLSAgICB2b2lkIHJlY29yZEVuZExh
eWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmKTsKLSAgICB2b2lkIHJlY29yZERy
YXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIGNvbnN0IENHQWZmaW5l
VHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBz
aXplX3QgY291bnQpOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlKENHUmVuZGVyaW5nU3RhdGVS
ZWYsIENHR1N0YXRlUmVmLCBDR1JlY3QsIENHSW1hZ2VSZWYpOworICAgIHZvaWQgcmVjb3JkQmVn
aW5MYXllcihDR0dTdGF0ZVJlZik7CisgICAgdm9pZCByZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJl
Zik7CisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENHR1N0YXRlUmVmLCBjb25zdCBDR0dseXBo
W10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7CisgICAgdm9pZCBy
ZWNvcmREcmF3SW1hZ2UoQ0dHU3RhdGVSZWYsIENHUmVjdCwgQ0dJbWFnZVJlZik7CiAjZW5kaWYK
IAotICAgIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMoKSBjb25z
dCB7IHJldHVybiBtX2RlY29uc3RydWN0RHJhd0dseXBoczsgfQotCiBwcml2YXRlOgotI2lmIFVT
RShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29u
dGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgZHJhd0J5
U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwot
ICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJh
d05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwotCi0gICAgdm9pZCBwb3B1bGF0ZUlu
dGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHBvcHVs
YXRlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9p
ZCBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7
Ci0gICAgdm9pZCBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOworICAgIHZvaWQgc2V0SW50ZXJu
YWxGb250KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGUgcHJlcGFyZUludGVybmFsQ29udGV4dCgpOworICAgIHZvaWQgcmVzdG9yZURlc3Rp
bmF0aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSk7
CiAKLSAgICB2b2lkIHVwZGF0ZUZpbGxDb2xvcihjb25zdCBDb2xvciYsIEdyYWRpZW50KiA9IG51
bGxwdHIsIFBhdHRlcm4qID0gbnVsbHB0cik7Ci0gICAgdm9pZCB1cGRhdGVTdHJva2VDb2xvcihj
b25zdCBDb2xvciYsIEdyYWRpZW50KiA9IG51bGxwdHIsIFBhdHRlcm4qID0gbnVsbHB0cik7Ci0g
ICAgdm9pZCB1cGRhdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgZW51bSBjbGFz
cyBTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyB7Ci0gICAgICAgIFVuc3BlY2lmaWVkLAotICAgICAg
ICBZZXMsCi0gICAgICAgIE5vCi0gICAgfTsKLSAgICB2b2lkIHVwZGF0ZVNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNo
YWRvd0NvbG9yLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0KLSNpZiBVU0UoQ09SRV9URVhU
KSAmJiAhUExBVEZPUk0oV0lOKQotICAgIHZvaWQgdXBkYXRlU2hhZG93KENHU3R5bGVSZWYpOwot
I2VuZGlmCisgICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAg
ICB2b2lkIGRyYXdPVFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCos
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd0J5
U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHQmIG1fb3duZXI7CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2Rl
c3RpbmF0aW9uQ29udGV4dDsKICAgICBEZWNvbnN0cnVjdERyYXdHbHlwaHMgbV9kZWNvbnN0cnVj
dERyYXdHbHlwaHM7CiAgICAgRGVyaXZlRm9udEZyb21Db250ZXh0IG1fZGVyaXZlRm9udEZyb21D
b250ZXh0OwogCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICBVbmlx
dWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKLSNlbmRpZgotCiAgICAg
Y29uc3QgRm9udCogbV9vcmlnaW5hbEZvbnQgeyBudWxscHRyIH07CiAgICAgRm9udFNtb290aGlu
Z01vZGUgbV9zbW9vdGhpbmdNb2RlIHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcg
fTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7CiAKLSAgICBzdHJ1
Y3QgU3RhdGUgewotICAgICAgICBzdHJ1Y3QgU3R5bGUgewotICAgICAgICAgICAgQ29sb3IgY29s
b3I7Ci0gICAgICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OwotICAgICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgICAgICAgICBSZWZQ
dHI8UGF0dGVybj4gcGF0dGVybjsKLSAgICAgICAgfTsKLSAgICAgICAgU3R5bGUgZmlsbFN0eWxl
OwotICAgICAgICBTdHlsZSBzdHJva2VTdHlsZTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3RtOwotCi0gICAgICAgIHN0cnVjdCBTaGFkb3dTdGF0ZSB7Ci0gICAgICAgICAgICBGbG9hdFNp
emUgb2Zmc2V0OwotICAgICAgICAgICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICAgICAgICAgIENv
bG9yIGNvbG9yOwotICAgICAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsK
LSAgICAgICAgfTsKLSAgICAgICAgU2hhZG93U3RhdGUgc2hhZG93OwotICAgIH07Ci0gICAgU3Rh
dGUgbV9vcmlnaW5hbFN0YXRlOwotICAgIFN0YXRlIG1fY3VycmVudFN0YXRlOworI2lmIFVTRShD
T1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4
dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cAppbmRleCA4NTE4MGFkMTA5ZmQ4MThlOWJiMTU4OGNlOTYyYWI0NjMwODE2YTA5Li4zNjExYjEy
Y2E5YWIyOWViOTIxZjIzMjVlMWY5NmQyOTUyNTNjN2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAg
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4KIAogc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJ
bk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXh0UnVuKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9t
LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbikgY29uc3QKIHsKLSAgICBBU1NFUlQoIWNvbnRleHQucGFp
bnRpbmdEaXNhYmxlZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsICFjb250ZXh0LnBh
aW50aW5nRGlzYWJsZWQoKSk7CiAgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52YWx1ZV9v
cihydW4ubGVuZ3RoKCkpOwogICAgIAogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBw
YXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVy
ZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MApAQCAtMjE0LDcgKzIxNCw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2Nh
ZGU6OmRpc3BsYXlMaXN0Rm9yVGV4CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxh
eUxpc3QgPSBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwot
ICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxheUxp
c3QsIGNvbnRleHQuc3RhdGUoKSwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBEcmF3
R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pOworICAgIERpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGwgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxheUxpc3QsIEZsb2F0UmVj
dCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERy
YXdHbHlwaHM6Ok5vKTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQgPSB0b0Zsb2F0
UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpKSk7CiAgICAg
ZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBzdGFydFBvaW50
LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAppbmRleCA2NDU4NGU1Y2ZlMDExODgyZWZh
YjJlMjNjM2E1OTRlMTc4MmYyODkwLi4yZjgyN2Y2MjVmNjRiNTljYTFhNjY0OTYwNzMwZjAzYzIz
YmMzN2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudEltYWdlLmNwcApAQCAtNDMsNyArNDMsNyBAQCBHcmFkaWVudEltYWdlOjp+R3JhZGllbnRJ
bWFnZSgpID0gZGVmYXVsdDsKIEltYWdlRHJhd1Jlc3VsdCBHcmFkaWVudEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250
ZXh0KTsKLSAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29udGV4dC5z
ZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJs
ZW5kTW9kZSgpIH0pOwogICAgIGRlc3RDb250ZXh0LmNsaXAoZGVzdFJlY3QpOwogICAgIGRlc3RD
b250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZGVzdFJlY3Qu
c2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIEdyYWRpZW50
SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZAogICAgIG1fZ3JhZGllbnQtPmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdp
bmcoYWRqdXN0ZWRTaXplLCBhZGp1c3RlZFNyY1JlY3QsIHNwYWNpbmcpOwogCiAgICAgLy8gRmFj
dG9yIGluIHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0J3Mgc2NhbGUgdG8gZ2VuZXJhdGUgYXQgdGhl
IGJlc3QgcmVzb2x1dGlvbgotICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRl
c3RDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNl
U2NhbGUpOworICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0
LmdldENUTSgpOwogICAgIGRvdWJsZSB4U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RNLnhTY2Fs
ZSgpKTsKICAgICBkb3VibGUgeVNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS55U2NhbGUoKSk7
CiAgICAgQWZmaW5lVHJhbnNmb3JtIGFkanVzdGVkUGF0dGVybkNUTSA9IHBhdHRlcm5UcmFuc2Zv
cm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAppbmRleCAwYmIxMzU5N2NlYTczNjlkYmJjNmUxNzI3ZjI2YzkyYjhmYjc1MTc2
Li45OTQyZmFlNWE0MmQ4NTEzODIzMDllNzA5YWRhYjJlZDFjNmY2OGE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKICNpbmNsdWRl
ICJCaWRpUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZp
bHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVk
UmVjdC5oIgpAQCAtMzYsNDczICszNSwzMDkgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKLSNp
bmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIK
ICNpbmNsdWRlICJTeXN0ZW1JbWFnZS5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRl
ICJUZXh0Qm94SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGV4dEJveEl0ZXJhdG9yIHsKLXB1YmxpYzoK
LSAgICBUZXh0Qm94SXRlcmF0b3IoKQotICAgICAgICA6IG1fdGV4dFJ1bigwKQotICAgICAgICAs
IG1fb2Zmc2V0KDApCi0gICAgewotICAgIH0KLQotICAgIFRleHRCb3hJdGVyYXRvcihjb25zdCBU
ZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBvZmZzZXQpCi0gICAgICAgIDogbV90ZXh0UnVuKHRl
eHRSdW4pCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICB1
bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIHZvaWQgaW5j
cmVtZW50KCkgeyBtX29mZnNldCsrOyB9Ci0gICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3RleHRSdW4gfHwgbV9vZmZzZXQgPj0gbV90ZXh0UnVuLT5sZW5ndGgoKTsgfQotICAgIFVD
aGFyIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoKm1fdGV4dFJ1bilbbV9vZmZzZXRdOyB9Ci0g
ICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYXRFbmQoKSA/IFVf
T1RIRVJfTkVVVFJBTCA6IHVfY2hhckRpcmVjdGlvbihjdXJyZW50KCkpOyB9Ci0KLSAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldCAmJiBtX3RleHRSdW4gPT0g
b3RoZXIubV90ZXh0UnVuOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0
Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0K
LQotcHJpdmF0ZToKLSAgICBjb25zdCBUZXh0UnVuKiBtX3RleHRSdW47Ci0gICAgdW5zaWduZWQg
bV9vZmZzZXQ7Ci19OwotCi0jZGVmaW5lIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKGZsYWcs
IHByb3BlcnR5KSBcCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OmZsYWcpICYmIChtX3N0YXRlLnByb3BlcnR5ICE9IHN0YXRlLnByb3BlcnR5KSkg
XAotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OmZsYWcpOwot
Ci1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQotICAgIDogc2hv
dWxkQW50aWFsaWFzKHRydWUpCi0gICAgLCBzaG91bGRTbW9vdGhGb250cyh0cnVlKQotICAgICwg
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHRydWUpCi0gICAgLCBzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyhmYWxzZSkKLSAgICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQorR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZUZsYWdzJiBjaGFuZ2VGbGFncywgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQorICAgIDogbV9zdGF0ZShpbml0aWFsQ2xpcCwg
Y2hhbmdlRmxhZ3MsIGluaXRpYWxDVE0pCisgICAgLCBtX2xhc3RBcHBsaWVkU3RhdGUoaW5pdGlh
bENsaXApCiB7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjp+R3JhcGhpY3NDb250ZXh0U3Rh
dGUoKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRl
eHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJikgPSBk
ZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVy
YXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0Nv
bnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShHcmFwaGljc0NvbnRl
eHRTdGF0ZSYmKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdl
Q2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhp
Y3NDb250ZXh0KCkKIHsKLSAgICBhdXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFk
aWVudENoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UgfTsK
LSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoc3Ryb2tlRmxhZ3MpKSB7Ci0gICAgICAgIHN0cm9r
ZUNvbG9yID0gc3RhdGUuc3Ryb2tlQ29sb3I7Ci0gICAgICAgIHN0cm9rZUdyYWRpZW50ID0gc3Rh
dGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgICAgIHN0cm9rZVBhdHRlcm4gPSBzdGF0ZS5zdHJva2VQ
YXR0ZXJuOwotICAgIH0KLQotICAgIGF1dG8gZmlsbEZsYWdzID0geyBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50
Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UgfTsKLSAgICBp
ZiAoZmxhZ3MuY29udGFpbnNBbnkoZmlsbEZsYWdzKSkgewotICAgICAgICBmaWxsQ29sb3IgPSBz
dGF0ZS5maWxsQ29sb3I7Ci0gICAgICAgIGZpbGxHcmFkaWVudCA9IHN0YXRlLmZpbGxHcmFkaWVu
dDsKLSAgICAgICAgZmlsbFBhdHRlcm4gPSBzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkp
IHsKLSAgICAgICAgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICBz
aGFkb3dCbHVyID0gc3RhdGUuc2hhZG93Qmx1cjsKLSAgICAgICAgc2hhZG93Q29sb3IgPSBzdGF0
ZS5zaGFkb3dDb2xvcjsKLSAgICAgICAgc2hhZG93UmFkaXVzTW9kZSA9IHN0YXRlLnNoYWRvd1Jh
ZGl1c01vZGU7Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBzdHJva2VUaGlja25lc3Mg
PSBzdGF0ZS5zdHJva2VUaGlja25lc3M7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIHRleHREcmF3
aW5nTW9kZSA9IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChmbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBzdHJv
a2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGZpbGxSdWxlID0g
c3RhdGUuZmlsbFJ1bGU7CisgICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NF
UlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgYWxwaGEgPSBz
dGF0ZS5hbHBoYTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKK3sKKyAgICBtX3N0YWNr
LmFwcGVuZChtX3N0YXRlKTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpIHsKLSAgICAgICAgY29tcG9zaXRlT3BlcmF0b3Ig
PSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgYmxlbmRNb2RlID0gc3RhdGUuYmxl
bmRNb2RlOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQoreworICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxk
QW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gc3RhdGUuc2hvdWxk
QW50aWFsaWFzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0g
c3RhdGUuc2hvdWxkU21vb3RoRm9udHM7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2sudGFrZUxhc3Qo
KTsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzID0gc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtc0NoYW5nZSkpCi0gICAgICAgIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc3RhdGUuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhl
IHN0YXRlIHN0YWNrIGJ1ZmZlciB3aGVuIGl0IGdvZXMgZW1wdHkuCisgICAgLy8gQ2FudmFzIGVs
ZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8g
aW5saW5lIGNhcGFjaXR5LgorICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9z
dGFjay5jbGVhcigpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIGRyYXdMdW1pbmFuY2VN
YXNrID0gc3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGlk
QXBwbHlTdGF0ZUNoYW5nZXMoKQoreworICAgIG1fc3RhdGUuZGlkQXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICBtX2xhc3RBcHBsaWVkU3RhdGUgPSBtX3N0YXRlOworfQogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlKSkKLSAgICAgICAgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHk7CitGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZh
Y3RvcigpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgp
OworICAgIHJldHVybiBGbG9hdFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNj
YWxlKCkpOworfQorICAgIAorRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JG
b3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCkgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7
CisgICAgYXV0byB0cmFuc2Zvcm1lZERlc3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJl
Y3QpOworICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6
ZSgpOworfQogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkK
LSAgICAgICAgdXNlRGFya0FwcGVhcmFuY2UgPSBzdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsKLSNl
bmRpZgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
Cit7CisgICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFu
Z2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CisgICAgQVNTRVJU
KG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXll
ckNvdW50OworfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlR3JhZGll
bnRDaGFuZ2UsIHN0cm9rZUdyYWRpZW50KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VQYXR0ZXJuQ2hhbmdlLCBzdHJva2VQYXR0ZXJuKTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShGaWxsR3JhZGllbnRDaGFuZ2UsIGZpbGxHcmFkaWVudCk7Ci0gICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbFBhdHRlcm5DaGFuZ2UsIGZpbGxQYXR0ZXJuKTsK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAg
ICBtX3N0YXRlLmNsaXAocmVjdCk7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKQotICAgICAgICAmJiAobV9zdGF0
ZS5zaGFkb3dPZmZzZXQgIT0gc3RhdGUuc2hhZG93T2Zmc2V0Ci0gICAgICAgICAgICB8fCBtX3N0
YXRlLnNoYWRvd0JsdXIgIT0gc3RhdGUuc2hhZG93Qmx1cgotICAgICAgICAgICAgfHwgbV9zdGF0
ZS5zaGFkb3dDb2xvciAhPSBzdGF0ZS5zaGFkb3dDb2xvcikpCi0gICAgICAgIGNoYW5nZUZsYWdz
LmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSkKK3sKKyAgICBtX3N0
YXRlLmNsaXAocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpOworfQogCi0gICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwot
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4
dERyYXdpbmdNb2RlKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xv
ckNoYW5nZSwgc3Ryb2tlQ29sb3IpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBQYXRo
IHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwUGF0aChwYXRo
KTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkJsZW5kTW9kZUNoYW5nZSB9KQotICAgICAgICAmJiAobV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRv
ciAhPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciB8fCBtX3N0YXRlLmJsZW5kTW9kZSAhPSBzdGF0
ZS5ibGVuZE1vZGUpKSB7Ci0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKTsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRk
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpOwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQor
eworICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgeworICAgICAgICBjbGlwT3V0KHJlY3QucmVj
dCgpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BS
T1BFUlRZKFNob3VsZEFudGlhbGlhc0NoYW5nZSwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaG91bGRTbW9vdGhGb250c0NoYW5nZSwgc2hvdWxkU21v
b3RoRm9udHMpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250c0NoYW5nZSwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLSAgICBD
SEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwg
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZ
KERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlLCBkcmF3THVtaW5hbmNlTWFzayk7Ci0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSwgaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdl
LCB1c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBjaGFuZ2VGbGFnczsK
KyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlw
T3V0KHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVs
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3Mp
OwotCi0gICAgYXV0byBzdHJva2VGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZs
YWdzLmNvbnRhaW5zQW55KHN0cm9rZUZsYWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1v
dmUoc3Ryb2tlRmxhZ3MpOwotCi0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAg
IGlmIChmbGFncy5jb250YWluc0FueShmaWxsRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdz
LnJlbW92ZShmaWxsRmxhZ3MpOwotCi0gICAgYXV0byBjb21wb3NpdGVPcGVyYXRvckZsYWdzID0g
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
QW55KGNvbXBvc2l0ZU9wZXJhdG9yRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92
ZShjb21wb3NpdGVPcGVyYXRvckZsYWdzKTsKLQotICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGZsYWdz
KTsKKyAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3JhZGllbnQsIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpCi0gICAg
ICAgIGNvbnRleHQuc2V0U3Ryb2tlUGF0dGVybigqbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKTsKLQot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
R3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqbV9zdGF0
ZS5maWxsR3JhZGllbnQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQ
YXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqbV9zdGF0ZS5m
aWxsUGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBjb250
ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUu
c2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1f
c3RhdGUuc2hhZG93UmFkaXVzTW9kZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHRE
cmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKG1f
c3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IobV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IobV9zdGF0ZS5maWxsQ29sb3IpOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0
eWxlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9r
ZVN0eWxlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbFJ1bGUobV9z
dGF0ZS5maWxsUnVsZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEFscGhhKG1f
c3RhdGUuYWxwaGEpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnNBbnkoeyBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBtX3N0YXRlLmJsZW5kTW9kZSk7
Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxp
YXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAg
ICAgICAgY29udGV4dC5zZXRTaG91bGRTbW9vdGhGb250cyhtX3N0YXRlLnNob3VsZFNtb290aEZv
bnRzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0
LnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dERyYXdMdW1pbmFuY2VNYXNrKG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkobV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKLQotI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAg
Y29udGV4dC5zZXRVc2VEYXJrQXBwZWFyYW5jZShtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlKTsK
LSNlbmRpZgorICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3Np
dGVPcGVyYXRpb24oKTsKKyAgICBzZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsK
KyAgICBmaWxsUmVjdChyZWN0LCBjb2xvcik7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBy
ZXZpb3VzT3BlcmF0b3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgiY2hhbmdlLWZsYWdzIiwgbV9jaGFuZ2VGbGFncy50b1JhdygpKTsKLQotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VH
cmFkaWVudENoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWdyYWRpZW50
IiwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBtX3N0YXRlLnN0cm9rZVBh
dHRlcm4uZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZmlsbC1ncmFkaWVudCIsIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVy
bkNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1wYXR0ZXJuIiwgbV9zdGF0
ZS5maWxsUGF0dGVybi5nZXQoKSk7CisgICAgZ3JhZGllbnQuZmlsbCgqdGhpcywgcmVjdCk7Cit9
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKSkgewotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwg
bV9zdGF0ZS5zaGFkb3dCbHVyKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zm
c2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1jb2xvciIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoInNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUg
PT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkg
eworICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdGlv
bigpLCBibGVuZE1vZGUpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgICAgICAKKyAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
CisgICAgc2V0Q29tcG9zaXRlTW9kZSh7IHByZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSB9KTsK
KyAgICBmaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihwcmV2aW91c09wZXJhdG9yKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS10aGlja25lc3MiLCBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ0
ZXh0LWRyYXdpbmctbW9kZSIsIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlLnRvUmF3KCkpOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtY29sb3IiLCBt
X3N0YXRlLnN0cm9rZUNvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoImZpbGwtY29sb3IiLCBtX3N0YXRlLmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2Up
KQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tl
U3R5bGUpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRk
UmVjdChyZWN0KTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmls
bC1ydWxlIiwgbV9zdGF0ZS5maWxsUnVsZSk7CisgICAgaWYgKCFyb3VuZGVkSG9sZVJlY3QucmFk
aWkoKS5pc1plcm8oKSkKKyAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyb3VuZGVkSG9sZVJl
Y3QpOworICAgIGVsc2UKKyAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5kZWRIb2xlUmVjdC5yZWN0
KCkpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSIsIG1fc3Rh
dGUuYWxwaGEpOworICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxlID0gZmlsbFJ1bGUoKTsKKyAgICBD
b2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShX
aW5kUnVsZTo6RXZlbk9kZCk7CisgICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAotICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRv
ciIsIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpOworICAgIGZpbGxQYXRoKHBhdGgpOworICAg
IAorICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmls
bENvbG9yKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJs
ZW5kLW1vZGUiLCBtX3N0YXRlLmJsZW5kTW9kZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQoreworICAgIFBhdGggcGF0
aDsKKyAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cit9
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQt
YW50aWFsaWFzIiwgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQoreworICAg
IFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7CisgICAgc3Ryb2tlUGF0
aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic2hvdWxkLXNtb290aC1mb250cyIsIG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
KQoreworICAgIGF1dG8gb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CisgICAgYXV0byBvbGRT
dHJva2VDb2xvciA9IHN0cm9rZUNvbG9yKCk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtc3VicGl4ZWwtcXVhbnRpemUt
Zm9udHMiLCBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgc2V0Rmls
bENvbG9yKHNoYWRvd0NvbG9yKTsKKyAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7Cisg
ICAgZHJhd0VsbGlwc2UoRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSkpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIiwgbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisgICAgc2V0RmlsbENvbG9yKGVsbGlwc2VDb2xv
cik7CisgICAgc2V0U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBkcmF3RWxsaXBzZShy
ZWN0KTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
ZHJhdy1sdW1pbmFuY2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOworICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9yKG9sZFN0cm9rZUNv
bG9yKTsKK30KIAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNl
Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ1c2UtZGFyay1hcHBlYXJhbmNlIiwg
bV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGZpbGxQYXRoKHBhdGgpOworICAg
IHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBj
b25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIHN0YXRlQ2hhbmdlLmR1bXAodHMpOwotICAg
IHJldHVybiB0czsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5h
dGlvbiwgaW1hZ2UubG9naWNhbFNpemUoKSksIEZsb2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxT
aXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdy
YXBoaWNzQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIEFTU0VSVCht
X3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQp
OworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0s
IGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7CisgICAgSW50ZXJwb2xhdGlvblF1
YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBv
cHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGltYWdlLmRyYXcoKnRoaXMsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cmVzdG9yZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0g
ICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRVJST1Igdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOworICAgIGlmICgh
aW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlID0gbV9zdGFjay5s
YXN0KCk7Ci0gICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgd2Ug
ZGVhbGxvY2F0ZSB0aGUgc3RhdGUgc3RhY2sgYnVmZmVyIHdoZW4gaXQgZ29lcyBlbXB0eS4KLSAg
ICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkgYWdhaW4sIGJ1dCB0
aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHkuCi0gICAgaWYgKG1fc3RhY2suaXNFbXB0eSgp
KQotICAgICAgICBtX3N0YWNrLmNsZWFyKCk7CisgICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0g
aW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1v
dmUoaW1hZ2UpLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlTG9naWNhbFNpemUpLCBGbG9h
dFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFn
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3Rh
dGUubWVyZ2VDaGFuZ2VzKHN0YXRlLCBmbGFncyk7Ci0gICAgZGlkVXBkYXRlU3RhdGUoc3RhdGUs
IGZsYWdzKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBpbWFn
ZUxvZ2ljYWxTaXplID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgZHJhd0NvbnN1bWluZ0lt
YWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1h
Z2VMb2dpY2FsU2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc2F2ZSgp
OwotCi0gICAgc2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IpOwotICAgIHNldEZpbGxDb2xvcihz
aGFkb3dDb2xvcik7Ci0KLSAgICBkcmF3RWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCksIHJlY3Qu
eSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0KLSAgICBzZXRTdHJva2VD
b2xvcihlbGxpcHNlQ29sb3IpOwotICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IpOwotCi0g
ICAgZHJhd0VsbGlwc2UocmVjdCk7ICAKLQotICAgIHJlc3RvcmUoKTsKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGlu
dGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRp
b25RdWFsaXR5KCkpOworICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1h
Z2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIs
IEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNv
bG9yOwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUu
c3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKKyAgICBhdXRvIHJlc3VsdCA9
IGZpbHRlci5hcHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCByZXN1bHRzKTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSByZXN1bHQtPmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgo
KSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOworICAgIGRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7CisgICAgc2Nh
bGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYg
Y29sb3IsIFNoYWRvd1JhZGl1c01vZGUgcmFkaXVzTW9kZSkKK0ltYWdlRHJhd1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCiB7Ci0gICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdGF0ZS5z
aGFkb3dCbHVyID0gYmx1cjsKLSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsKLSAgICBkaWRVcGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKKyAgICByZXR1
cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSks
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKK0ltYWdlRHJh
d1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBh
aW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgp
OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IDA7Ci0gICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9
IENvbG9yKCk7Ci0gICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9k
ZTo6RGVmYXVsdDsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93Q2hhbmdlKTsKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCks
IGltYWdlLnNpemUoaW1hZ2VQYWludGluZ09wdGlvbnMub3JpZW50YXRpb24oKSkpOworICAgIHJl
dHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzcmNSZWN0LCBpbWFnZVBhaW50aW5n
T3B0aW9ucyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXpl
JiBvZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CitJbWFnZURyYXdSZXN1
bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQ7Ci0gICAgYmx1ciA9IG1fc3RhdGUuc2hhZG93Qmx1cjsKLSAgICBjb2xvciA9IG1fc3RhdGUu
c2hhZG93Q29sb3I7Ci0KLSAgICByZXR1cm4gaGFzU2hhZG93KCk7CisgICAgSW50ZXJwb2xhdGlv
blF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlz
LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5kcmF3
KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCitJbWFnZURyYXdSZXN1
bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxv
YXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9y
OwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLmZpbGxQ
YXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMu
aW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhp
cywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBw
YXR0ZXJuKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsCisgICAgSW1hZ2U6
OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07Ci0g
ICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQ
YXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSk7CisgICAgaWYgKGhSdWxl
ID09IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsK
KyAgICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgorICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGlt
YWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKKyAgICB9CisKKyAgICBJbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUo
KnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdl
LmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBo
UnVsZSwgdlJ1bGUsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fc3RhdGUuZmls
bENvbG9yID0geyB9OwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBt
X3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBkaWRVcGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpOworICAg
IHN5c3RlbUltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtID0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSk7CisgICAgaW1h
Z2UuZHJhd1BhdHRlcm4oKnRoaXMsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKKyNpZiBFTkFCTEUoVklERU8pCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29s
b3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsK
LSAgICBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm07Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENo
YW5nZSk7Ci0gICAgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHBsYXllci5wbGF5
ZXJQcml2YXRlKCktPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlv
bik7CiB9CisjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewotICAgICsrbV90
cmFuc3BhcmVuY3lMYXllckNvdW50OworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlz
LCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewotICAgIEFTU0VS
VChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsKLSAgICAtLW1fdHJhbnNwYXJlbmN5TGF5
ZXJDb3VudDsKKyAgICBkcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IHRvKQpAQCAtNTExLDExICszNDYsNiBAQCBGbG9hdFNpemUgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LAogICAgIHJldHVybiBmb250LmRyYXdUZXh0KCp0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCi17Ci0gICAgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9p
bnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdF
bXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25l
ZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKICAgICBmb250LmRyYXdFbXBo
YXNpc01hcmtzKCp0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CkBAIC01NDksNyAr
Mzc5LDQ1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgYmlkaVJ1biA9IGJpZGlS
dW4tPm5leHQoKTsKICAgICB9CiAKLSAgICBiaWRpUnVucy5jbGVhcigpOworICAgIGJpZGlSdW5z
LmNsZWFyKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMs
IFN0cm9rZVN0eWxlIHN0eWxlKQoreworICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlv
bigpLCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRp
bmcsIGRvdWJsZVVuZGVybGluZXMsIHN0eWxlKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29u
dGV4dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBib29sIHByaW50aW5nKQoreworICAgIENvbG9yIGR1bW15Q29sb3I7CisgICAgcmV0dXJuIGNv
bXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQocmVjdCwgcHJpbnRpbmcs
IGR1bW15Q29sb3IpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGlu
ZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Ym9vbCBwcmludGluZywgQ29sb3ImIGNvbG9yKQoreworICAgIEZsb2F0UG9pbnQgb3JpZ2luID0g
cmVjdC5sb2NhdGlvbigpOworICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHJlY3QuaGVp
Z2h0KCksIDAuNWYpOworICAgIGlmIChwcmludGluZykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOworCisgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIC8vIEp1c3QgY29tcHV0ZSBz
Y2FsZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcgeCBhbmQgeSBzY2FsZXMgYXJlIGVxdWFsLgor
ICAgIGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLmIoKSA/IHN0ZDo6aHlwb3QodHJhbnNmb3JtLmEo
KSwgdHJhbnNmb3JtLmIoKSkgOiB0cmFuc2Zvcm0uYSgpOworICAgIGlmIChzY2FsZSA8IDEuMCkg
eworICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRyYXdzIGEgbGluZSB0aGF0IGlzIGF0IGxl
YXN0IG9uZS1waXhlbCBsaW5lIGhpZ2gsCisgICAgICAgIC8vIHdoaWNoIHRlbmRzIHRvIHZpc3Vh
bGx5IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxlcy4gVG8gY291bnRlciB0aGlzCisgICAg
ICAgIC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGllZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9y
IHdoZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMuCisgICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPSAwLjRmOworICAgICAgICBmbG9hdCBzaGFkZSA9IHNj
YWxlID4gbWluaW11bVVuZGVybGluZUFscGhhID8gc2NhbGUgOiBtaW5pbXVtVW5kZXJsaW5lQWxw
aGE7CisgICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hh
ZGUpOworICAgIH0KKworICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFw
UG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICAvLyBWaXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2Nj
dXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRl
Y29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRlcmxpbmUgZGVjb3Jh
dGlvbi4KKyAgICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRmKGRl
dmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOworICAgIGlmIChhdXRvIGlu
dmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQorICAgICAgICBvcmlnaW4gPSBpbnZlcnNlLnZh
bHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdp
biwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9CiAKIHN0YXRpYyBJbnRT
aXplIHNjYWxlZEltYWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEZs
b2F0U2l6ZSYgc2NhbGUpCkBAIC02MzksMTg3ICs1MDcsOSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYgcgogICAgIHJldHVybiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBzY2FsZUZhY3Rv
cigpLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlKCksIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3Rl
bUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKLXsKLSAgICBzeXN0ZW1J
bWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi1JbWFnZURyYXdSZXN1bHQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQotewotICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5h
dGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgp
KSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17
Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKGltYWdlUGFp
bnRpbmdPcHRpb25zLm9yaWVudGF0aW9uKCkpKTsKLSAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdl
LCBkZXN0aW5hdGlvbiwgc3JjUmVjdCwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1JbWFn
ZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxp
dHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRp
b25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwotICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotSW1hZ2VE
cmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsCi0gICAgSW1hZ2U6OlRpbGVSdWxlIGhSdWxl
LCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUgJiYgdlJ1bGUgPT0g
SW1hZ2U6OlN0cmV0Y2hUaWxlKSB7Ci0gICAgICAgIC8vIEp1c3QgZG8gYSBzY2FsZS4KLSAgICAg
ICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7
Ci0gICAgfQotCi0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRp
b25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5
KCkpOwotICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJh
dG9yKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBkcmF3SW1hZ2VC
dWZmZXIoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2UubG9naWNhbFNpemUoKSks
IEZsb2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9u
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgZHJhd0ltYWdlQnVmZmVy
KGltYWdlLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSks
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xh
dGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxp
dHkoKSk7Ci0gICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9u
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIo
UmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAg
ICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpbWFnZUxvZ2ljYWxTaXpl
ID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCk7Ci0gICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdU
Rk1vdmUoaW1hZ2UpLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlTG9naWNhbFNpemUpLCBG
bG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0gaW1h
Z2UtPmxvZ2ljYWxTaXplKCk7Ci0gICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1vdmUo
aW1hZ2UpLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2FsU2l6ZSksIGlt
YWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25z
dW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0
eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAg
ICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJl
c3VsdHMpCi17Ci0gICAgYXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIHNv
dXJjZUltYWdlUmVjdCwgcmVzdWx0cyk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBhdXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZlcigpOwot
ICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjYWxlKHsgMSAv
IGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5o
ZWlnaHQoKSB9KTsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1bHQtPmFi
c29sdXRlSW1hZ2VSZWN0KCkpOwotICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZS5kcmF3UGF0dGVybigqdGhpcywgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChy
ZWN0KTsKLSAgICBjbGlwUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQotewotICAgIGlm
ICghcmVjdC5pc1JvdW5kZWQoKSkgewotICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJvdW5k
ZWRSZWN0KHJlY3QpOwotICAgIGNsaXBPdXQocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIGltYWdlQnVmZmVyLmNsaXBUb01hc2so
KnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gSW50UmVjdCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgZ3JhZGllbnQuZmls
bCgqdGhpcywgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwotICAgIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihvcCwgYmxlbmRNb2RlKTsKLSAgICBmaWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAgc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAocmVjdC5p
c1JvdW5kZWQoKSkgewotICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIGZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwg
Y29sb3IpOwotICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9u
KCkpOwotICAgIH0gZWxzZQotICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNv
bXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsK
LSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotCi0gICAgaWYgKCFyb3Vu
ZGVkSG9sZVJlY3QucmFkaWkoKS5pc1plcm8oKSkKLSAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVj
dChyb3VuZGVkSG9sZVJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5k
ZWRIb2xlUmVjdC5yZWN0KCkpOwogCi0gICAgV2luZFJ1bGUgb2xkRmlsbFJ1bGUgPSBmaWxsUnVs
ZSgpOwotICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwotICAgIAotICAgIHNl
dEZpbGxSdWxlKFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICBzZXRGaWxsQ29sb3IoY29sb3IpOwog
Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUp
OwotICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwotfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
ZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBtX3N0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uOwotICAgIG1fc3RhdGUuYmxlbmRNb2RlID0gYmxl
bmRNb2RlOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwotfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBw
MiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQogewpAQCAtODUwLDc3
ICs1NDAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFy
aWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAotRmxvYXRTaXpl
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKHRyYW5zZm9ybS54U2NhbGUoKSwg
dHJhbnNmb3JtLnlTY2FsZSgpKTsKLX0KLSAgICAKLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6
OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUp
OwotICAgIGF1dG8gdHJhbnNmb3JtZWREZXN0UmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KGRlc3RS
ZWN0KTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZWREZXN0UmVjdC5zaXplKCkgLyBzcmNSZWN0LnNp
emUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2Up
OwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
RWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBwYXRo
OwotICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHls
ZSBzdHlsZSkKLXsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5o
ZWlnaHQoKSwgRGFzaEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVV
bmRlcmxpbmVzLCBzdHlsZSk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1
dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmlu
dGluZykKLXsKLSAgICBDb2xvciBkdW1teUNvbG9yOwotICAgIHJldHVybiBjb21wdXRlTGluZUJv
dW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KHJlY3QsIHByaW50aW5nLCBkdW1teUNvbG9y
KTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRB
bnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRp
bmcsIENvbG9yJiBjb2xvcikKLXsKLSAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRp
b24oKTsKLSAgICBmbG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVm
KTsKLSAgICBpZiAocHJpbnRpbmcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBG
bG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKLQotICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURl
dmljZVNjYWxlKTsKLSAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFz
c3VtaW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KLSAgICBmbG9hdCBzY2FsZSA9IHRyYW5z
Zm9ybS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJh
bnNmb3JtLmEoKTsKLSAgICBpZiAoc2NhbGUgPCAxLjApIHsKLSAgICAgICAgLy8gVGhpcyBjb2Rl
IGFsd2F5cyBkcmF3cyBhIGxpbmUgdGhhdCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdo
LAotICAgICAgICAvLyB3aGljaCB0ZW5kcyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBz
bWFsbCBzY2FsZXMuIFRvIGNvdW50ZXIgdGhpcwotICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhh
IGlzIGFwcGxpZWQgdG8gdGhlIHVuZGVybGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwg
c2NhbGVzLgotICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhh
ID0gMC40ZjsKLSAgICAgICAgZmxvYXQgc2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVB
bHBoYSA/IHNjYWxlIDogbWluaW11bVVuZGVybGluZUFscGhhOwotICAgICAgICBjb2xvciA9IGNv
bG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KHNoYWRlKTsKLSAgICB9Ci0KLSAgICBGbG9h
dFBvaW50IGRldmljZVBvaW50ID0gdHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7
Ci0gICAgLy8gVmlzdWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFs
IHJvdW5kZi9jZWlsZi4gdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBv
dmVyZmxvdyB2YWx1ZSBmb3IgdW5kZXJsaW5lIGRlY29yYXRpb24uCi0gICAgRmxvYXRQb2ludCBk
ZXZpY2VPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihk
ZXZpY2VQb2ludC55KCkpKTsKLSAgICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVy
c2UoKSkKLSAgICAgICAgb3JpZ2luID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9y
aWdpbik7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRo
KCksIHRoaWNrbmVzcykpOwotfQotCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVD
b3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAg
IGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtOTcyLDE1ICs1OTEsNCBA
QCBWZWN0b3I8RmxvYXRQb2ludD4gR3JhcGhpY3NDb250ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0T2Zm
Q29ybmVycyhib29sIGlzVmVydGljYWxMaQogICAgIHJldHVybiB7IHBvaW50MSwgcG9pbnQyIH07
CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24pCi17Ci0gICAgcGxheWVyLnBsYXllclByaXZhdGUoKS0+cGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKLX0KLSNlbmRpZgotCi12b2lkIE51bGxHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpCi17Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZmI5NWRkMjViMjcxZGViOWZhODVmZjJkOWYxZjc0
NzE2YTA2NmJhZS4uN2YwMzg4OTIwNjExMmEwYmMxYTVhZTVhYzlmYmVhMDM3M2NlMjU3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkg
VG9yY2ggTW9iaWxlLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCw0OSArMzAsMTggQEAK
ICNpbmNsdWRlICJEZXN0aW5hdGlvbkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAj
aW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRp
b25zLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUu
aCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKLSNpZiBVU0UoQ0cpCi10eXBlZGVmIHN0
cnVjdCBDR0NvbnRleHQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZWxpZiBVU0UoQ0FJUk8p
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsKLX0KLXR5
cGVkZWYgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8gUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQ7Ci0jZWxzZQotdHlwZWRlZiB2b2lkIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiRElCUGl4ZWxEYXRhLmgiCi10eXBlZGVm
IHN0cnVjdCBIRENfXyogSERDOwotI2lmICFVU0UoQ0cpCi0vLyBVSW50OCBpcyBkZWZpbmVkIGlu
IENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUludDg7Ci0j
ZW5kaWYKLSNlbmRpZgotCi0vLyBYMTEgaGVhZGVycyBkZWZpbmUgYSBidW5jaCBvZiBtYWNyb3Mg
d2l0aCBjb21tb24gdGVybXMsIGludGVyZmVyaW5nIHdpdGggV2ViQ29yZSBhbmQgV1RGIGVudW0g
dmFsdWVzLgotLy8gQXMgYSB3b3JrYXJvdW5kLCB3ZSBleHBsaWNpdGx5IHVuZGVmIHRoZW0gaGVy
ZS4KLSNpZiBkZWZpbmVkKE5vbmUpCi0jdW5kZWYgTm9uZQotI2VuZGlmCi0jaWYgZGVmaW5lZChC
ZWxvdykKLSN1bmRlZiBCZWxvdwotI2VuZGlmCi0jaWYgZGVmaW5lZChTdWNjZXNzKQotI3VuZGVm
IFN1Y2Nlc3MKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRy
YW5zZm9ybTsKQEAgLTgyLDcgKzUxLDYgQEAgY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNz
IEdyYWRpZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogY2xhc3Mg
SW1hZ2VCdWZmZXI7Ci1jbGFzcyBJbnRSZWN0OwogY2xhc3MgTWVkaWFQbGF5ZXI7CiBjbGFzcyBS
b3VuZGVkUmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMOwpAQCAtOTEsMTc0ICs1OSwxMiBA
QCBjbGFzcyBTeXN0ZW1JbWFnZTsKIGNsYXNzIFRleHRSdW47CiBjbGFzcyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKIAotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIFJlY29yZGVyOwotfQot
Ci1lbnVtIGNsYXNzIFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgewotICAgIEZpbGwgPSAxIDw8
IDAsCi0gICAgU3Ryb2tlID0gMSA8PCAxLAotfTsKLXVzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdz
ID0gT3B0aW9uU2V0PFRleHREcmF3aW5nTW9kZT47Ci0KLS8vIExlZ2FjeSBzaGFkb3cgYmx1ciBy
YWRpdXMgaXMgdXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotLy8gSXQg
aGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi1lbnVtIGNsYXNzIFNoYWRv
d1JhZGl1c01vZGUgOiBib29sIHsKLSAgICBEZWZhdWx0LAotICAgIExlZ2FjeQotfTsKLQotZW51
bSBTdHJva2VTdHlsZSB7Ci0gICAgTm9TdHJva2UsCi0gICAgU29saWRTdHJva2UsCi0gICAgRG90
dGVkU3Ryb2tlLAotICAgIERhc2hlZFN0cm9rZSwKLSAgICBEb3VibGVTdHJva2UsCi0gICAgV2F2
eVN0cm9rZSwKLX07Ci0KLXN0cnVjdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSB7Ci0gICAgZW51
bSBjbGFzcyBNb2RlIDogdWludDhfdCB7Ci0gICAgICAgIFRleHRDaGVja2luZ0RpY3RhdGlvblBo
cmFzZVdpdGhBbHRlcm5hdGl2ZXMsCi0gICAgICAgIFNwZWxsaW5nLAotICAgICAgICBHcmFtbWFy
LAotICAgICAgICBBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAotICAgICAgICBEaWN0YXRpb25B
bHRlcm5hdGl2ZXMKLSAgICB9IG1vZGU7Ci0gICAgYm9vbCBzaG91bGRVc2VEYXJrQXBwZWFyYW5j
ZSB7IGZhbHNlIH07Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IGRlY29kZShEZWNvZGVyJik7Ci19Owot
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtb2RlOwot
ICAgIGVuY29kZXIgPDwgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1zdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3Rk
OjpvcHRpb25hbDxNb2RlPiBtb2RlOwotICAgIGRlY29kZXIgPj4gbW9kZTsKLSAgICBpZiAoIW1v
ZGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPGJv
b2w+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOwotICAgIGRlY29kZXIgPj4gc2hvdWxkVXNlRGFy
a0FwcGVhcmFuY2U7Ci0gICAgaWYgKCFzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqbW9kZSwgKnNob3VsZFVzZURh
cmtBcHBlYXJhbmNlIH19OwotfQotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U7
Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0
U3RhdGUoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhp
Y3NDb250ZXh0U3RhdGUmJik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKLQotICAg
IGVudW0gQ2hhbmdlIDogdWludDMyX3QgewotICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCi0gICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMSwKLSAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdl
ICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAotICAgICAgICBGaWxsUGF0dGVybkNoYW5n
ZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgICAgIFN0cm9rZVRoaWNrbmVz
c0NoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEgPDwgNCwKLSAgICAgICAgU3Ryb2tlQ29sb3JD
aGFuZ2UgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA1LAotICAgICAgICBTdHJva2VTdHls
ZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDYsCi0gICAgICAgIEZpbGxDb2xv
ckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNywKLSAgICAgICAgRmlsbFJ1
bGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA4LAotICAgICAgICBTaGFk
b3dDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDksCi0gICAgICAgIFNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlICAgICAgICAgICA9IDEgPDwgMTAsCi0gICAgICAg
IEFscGhhQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTEsCi0gICAg
ICAgIENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSAgICAgICAgICAgICAgICA9IDEgPDwgMTIsCi0g
ICAgICAgIEJsZW5kTW9kZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTMs
Ci0gICAgICAgIFRleHREcmF3aW5nTW9kZUNoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEgPDwg
MTQsCi0gICAgICAgIFNob3VsZEFudGlhbGlhc0NoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEg
PDwgMTUsCi0gICAgICAgIFNob3VsZFNtb290aEZvbnRzQ2hhbmdlICAgICAgICAgICAgICAgICA9
IDEgPDwgMTYsCi0gICAgICAgIFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSAgICAg
ICA9IDEgPDwgMTcsCi0gICAgICAgIERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlICAgICAgICAgICAg
ICAgICA9IDEgPDwgMTgsCi0gICAgICAgIEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2Ug
ICAgICAgICA9IDEgPDwgMTksCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICAg
ICAgVXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAyMCwKLSNl
bmRpZgotICAgIH07Ci0gICAgdXNpbmcgU3RhdGVDaGFuZ2VGbGFncyA9IE9wdGlvblNldDxDaGFu
Z2U+OwotCi0gICAgdm9pZCBtZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBSZWZQdHI8
R3JhZGllbnQ+IHN0cm9rZUdyYWRpZW50OwotICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0
ZXJuOwotICAgIAotICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50OwotICAgIFJlZlB0
cjxQYXR0ZXJuPiBmaWxsUGF0dGVybjsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0K
LSAgICBDb2xvciBzdHJva2VDb2xvciB7IENvbG9yOjpibGFjayB9OwotICAgIENvbG9yIGZpbGxD
b2xvciB7IENvbG9yOjpibGFjayB9OwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotCi0gICAgQWZm
aW5lVHJhbnNmb3JtIHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotCi0gICAgZmxvYXQgc3Ryb2tlVGhp
Y2tuZXNzIHsgMCB9OwotICAgIGZsb2F0IHNoYWRvd0JsdXIgeyAwIH07Ci0gICAgZmxvYXQgYWxw
aGEgeyAxIH07Ci0KLSAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSB7IFNvbGlkU3Ryb2tlIH07
Ci0gICAgV2luZFJ1bGUgZmlsbFJ1bGUgeyBXaW5kUnVsZTo6Tm9uWmVybyB9OwotCi0gICAgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdpbmdNb2RlOjpGaWxs
IH07Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlT3ZlciB9OwotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUgeyBCbGVuZE1v
ZGU6Ok5vcm1hbCB9OwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OwotICAgIFNoYWRvd1Jh
ZGl1c01vZGUgc2hhZG93UmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsK
LQotICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzIDogMTsKLSAgICBib29sIHNob3VsZFNtb290aEZv
bnRzIDogMTsKLSAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA6IDE7Ci0gICAg
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA6IDE7Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNl
TWFzayA6IDE7Ci0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBib29sIHVzZURh
cmtBcHBlYXJhbmNlIDogMTsKLSNlbmRpZgotfTsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlIHsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsK
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQot
ICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9jaGFuZ2VGbGFncyhmbGFncykK
LSAgICB7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgY2hhbmdlc0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0Owot
Ci0gICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYp
IGNvbnN0OwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBtX2NoYW5nZUZsYWdzOwotfTsKLQotV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlJik7Ci0KIGNsYXNzIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NDb250ZXh0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6ICAgCisgICAgZnJpZW5kIGNsYXNzIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1bHQ7Citw
dWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXAsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2VGbGFncyYg
PSB7IH0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI3MCwy
NzAgKzc2LDI3MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGludmFsaWRhdGluZ0ltYWdl
c1dpdGhBc3luY0RlY29kZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
Ci0gICAgLy8gQ29udGV4dCBTdGF0ZQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICB2b2lkIHNl
dENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0g
dHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCi0gICAgdm9p
ZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzID0gdGhpY2tuZXNzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKTsgfQotICAgIGZsb2F0IHN0cm9rZVRoaWNr
bmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOyB9CisgICAgLy8g
Q29udGV4dCBTdGF0ZQogCi0gICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHls
ZSkgeyBtX3N0YXRlLnN0cm9rZVN0eWxlID0gc3R5bGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7IH0KLSAgICBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlU3R5bGU7IH0K
KyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlOyB9CisgICAgdm9pZCBtZXJnZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3RoZXIpIHsgbV9zdGF0ZS5tZXJnZUNoYW5nZXMob3RoZXIpOyB9CisgICAgdm9p
ZCBtZXJnZVN0YXRlRGlmZnMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1f
c3RhdGUubWVyZ2VEaWZmcyhvdGhlcik7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUNvbG9yOyB9CisgICAgQWZmaW5lVHJhbnNm
b3JtIGdldENUTSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZ2V0Q1RNKCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKSB7IG1fc3RhdGUuc2V0
Q1RNKGN0bSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgY3RtKSB7IHNldENUTShnZXRDVE0oKSAqIGN0bSk7IH0KKyAgICB2
b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSB7IHNldENUTShnZXRDVE0oKS50cmFuc2xh
dGUoeCwgeSkpOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7
IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CisgICAgdm9pZCB0cmFu
c2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54KCksIHAueSgpKTsgfQor
ICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KSB7IHNldENUTShnZXRDVE0oKS5zY2Fs
ZShzeCwgc3kpKTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZShzLCBzKTsgfQor
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHNjYWxlKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFu
cykgeyBzZXRDVE0oZ2V0Q1RNKCkucm90YXRlKHJhZDJkZWcoYW5nbGVJblJhZGlhbnMpKSk7IH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4m
Jik7Ci0gICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
c3Ryb2tlUGF0dGVybi5nZXQoKTsgfQorICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmZpbGxCcnVzaCgpLmNvbG9yKCk7IH0KKyAgICBHcmFkaWVudCog
ZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5ncmFkaWVu
dCgpOyB9CisgICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmZpbGxCcnVzaCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmls
bFNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5zcGFj
ZVRyYW5zZm9ybSgpOyB9CisgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KSB7IG1fc3RhdGUuc2V0RmlsbENvbG9yKGNvbG9yLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9Cisg
ICAgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0RmlsbEdy
YWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IH0KKyAgICB2b2lkIHNl
dEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRGaWxsUGF0dGVybihXVEZNb3Zl
KHBhdHRlcm4pLCBzcGFjZVRyYW5zZm9ybSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
ID0geyB9KTsKLSAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpOyB9CisgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlKCk7IH0KKyAgICB2b2lkIHNldEZpbGxSdWxl
KFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuc2V0RmlsbFJ1bGUoZmlsbFJ1bGUsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1
bGUpIHsgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpOyB9Ci0gICAgV2luZFJ1bGUg
ZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOyB9CisgICAgY29uc3Qg
Q29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgp
LmNvbG9yKCk7IH0KKyAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnN0cm9rZUJydXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIHN0cm9r
ZVBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkucGF0dGVybigp
OyB9CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VTcGFjZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpOyB9Cisg
ICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9zdGF0ZS5zZXRT
dHJva2VDb2xvcihjb2xvciwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0U3Ry
b2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRTdHJva2VHcmFk
aWVudChXVEZNb3ZlKGdyYWRpZW50KSwgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7IH0KKyAgICB2
b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRTdHJv
a2VQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHBhdHRlcm5TcGFjZVRyYW5zZm9ybSk7IH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9y
OyB9CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHJva2VUaGlja25lc3MoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRo
aWNrbmVzcykgeyBtX3N0YXRlLnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MsIG1fbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbFBhdHRlcm4o
UmVmPFBhdHRlcm4+JiYpOwotICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKTsgfQorICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VTdHlsZSgpOyB9CisgICAgdm9pZCBz
ZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkgeyBtX3N0YXRlLnNldFN0cm9rZVN0eWxl
KHN0eWxlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
PSB7IH0pOwotICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmZpbGxHcmFkaWVudC5nZXQoKTsgfQorICAgIExpbmVDYXAgaW5lQ2FwKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5saW5lQ2FwKCk7IH0KKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKSB7IG1fc3RhdGUuc2V0TGluZUNhcChsaW5lQ2FwLCBtX2xhc3RBcHBsaWVkU3RhdGUp
OyB9CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM7IH0KKyAgICBjb25zdCBMaW5lRGFzaCBsaW5lRGFzaCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUubGluZURhc2goKTsgfQorICAgIHZvaWQgc2V0TGluZURhc2goTGluZURhc2gm
JiBsaW5lRGFzaCkgeyBtX3N0YXRlLnNldExpbmVEYXNoKFdURk1vdmUobGluZURhc2gpLCBtX2xh
c3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sIHNo
b3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlh
czsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFu
dGlhbGlhc0NoYW5nZSk7IH0KLSAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzOyB9CisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVKb2luKCk7IH0KKyAgICB2b2lkIHNldExpbmVKb2lu
KExpbmVKb2luIGxpbmVKb2luKSB7IG1fc3RhdGUuc2V0TGluZUpvaW4obGluZUpvaW4sIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBz
aG91bGRTbW9vdGhGb250cykgeyBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0gc2hvdWxkU21v
b3RoRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSk7IH0KLSAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250czsgfQorICAgIGZsb2F0IG1p
dGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLm1pdGVyTGltaXQoKTsgfQorICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KSB7IG1fc3RhdGUuc2V0TWl0ZXJMaW1p
dChtaXRlckxpbWl0LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICAvLyBOb3JtYWxseSBD
RyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBw
ZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCi0gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBo
YXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUg
Z2x5cGhzLgotICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOyBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKTsgfQotICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IH0KKyAgICBDb21wb3Np
dGVNb2RlIGNvbXBvc2l0ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU1v
ZGUoKTsgfQorICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGNvbXBvc2l0ZU1vZGUoKS5vcGVyYXRpb247IH0KKyAgICBCbGVuZE1vZGUgYmxl
bmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9k
ZTsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1v
ZGUpIHsgbV9zdGF0ZS5zZXRDb21wb3NpdGVNb2RlKGNvbXBvc2l0ZU1vZGUsIG1fbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvciBvcGVyYXRpb24pIHsgc2V0Q29tcG9zaXRlTW9kZSh7IG9wZXJhdGlvbiwgQmxlbmRNb2Rl
OjpOb3JtYWwgfSk7IH0KIAotICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSA9IHF1YWxpdHk7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQotICAgIEludGVycG9s
YXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAgICBjb25zdCBEcm9wU2hhZG93
JiBkcm9wU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcm9wU2hhZG93KCk7IH0KKyAg
ICB2b2lkIHNldERyb3BTaGFkb3coY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdykgeyBtX3N0
YXRlLnNldERyb3BTaGFkb3coZHJvcFNoYWRvdywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAg
IHZvaWQgY2xlYXJTaGFkb3coKSB7IHNldERyb3BTaGFkb3coeyB9KTsgfQogCi0gICAgdm9pZCBz
ZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IGRpZFVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0KLSAgICBm
bG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KKyAgICBib29sIGhh
c1Zpc2libGVTaGFkb3coKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93KCkuaXNWaXNpYmxlKCk7
IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93
KCkuaXNCbHVycmVkKCk7IH0KKyAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRy
b3BTaGFkb3coKS5oYXNPdXRzZXRzKCk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1v
ZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsgfQotICAgIEJsZW5kTW9k
ZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsg
fQorICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYSgpOyB9Cisg
ICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLnNldEFscGhhKGFscGhhLCBt
X2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJv
b2wgZHJhd0x1bWluYW5jZU1hc2spIHsgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdM
dW1pbmFuY2VNYXNrOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpOyB9Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNlTWFz
aygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7IH0KKyAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCk7IH0KKyAgICB2b2lkIHNldElt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSkgeyBtX3N0YXRlLnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9p
ZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRl
LnRleHREcmF3aW5nTW9kZSA9IG1vZGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOyB9Ci0gICAgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJh
d2luZ01vZGU7IH0KKyAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSgpOyB9CisgICAgdm9pZCBzZXRU
ZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKSB7IG1f
c3RhdGUuc2V0VGV4dERyYXdpbmdNb2RlKHRleHREcmF3aW5nTW9kZSwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93
UmFkaXVzTW9kZTo6RGVmYXVsdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNs
ZWFyU2hhZG93KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXpl
JiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMoKTsgfQorICAgIHZvaWQgc2V0U2hv
dWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3RhdGUuc2V0U2hvdWxkQW50
aWFsaWFzKHNob3VsZEFudGlhbGlhcywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgYm9v
bCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dDb2xvci5p
c1Zpc2libGUoKTsgfQotICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlz
aWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7IH0KLSAgICBib29s
IGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYg
bV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMoKTsgfQorICAgIHZvaWQgc2V0U2hv
dWxkU21vb3RoRm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykgeyBtX3N0YXRlLnNldFNob3Vs
ZFNtb290aEZvbnRzKHNob3VsZFNtb290aEZvbnRzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAK
LSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHZvaWQgc2V0VXNlRGFya0FwcGVh
cmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNl
ID0gdXNlRGFya0FwcGVhcmFuY2U7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSk7IH0KLSAgICBib29sIHVzZURhcmtB
cHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQot
I2VuZGlmCisgICAgLy8gTm9ybWFsbHkgQ0cgZW5hYmxlcyBzdWJwaXhlbC1xdWFudGl6YXRpb24g
YmVjYXVzZSBpdCBpbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgYWxpZ25pbmcgZ2x5cGhzLgor
ICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgaGF2ZSB0byBkaXNhYmxlIHRvIHRvIGVuc3VyZSBhIGhp
Z2gtcXVhbGl0eSBvdXRwdXQgb2YgdGhlIGdseXBocy4KKyAgICBib29sIHNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKCk7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhi
b29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykgeyBtX3N0YXRlLnNldFNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyhzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsIG1fbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIGJvb2wgc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCk7IH0KKyAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCB1
cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzaygpOyB9CisgICAgdm9pZCBzZXRE
cmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuc2V0RHJh
d0x1bWluYW5jZU1hc2soZHJhd0x1bWluYW5jZU1hc2ssIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
IAotICAgIC8vIENhbGxlZCAqYWZ0ZXIqIGFueSBjaGFuZ2UgdG8gR3JhcGhpY3NDb250ZXh0U3Rh
dGU7IGdlbmVyYWxseSB1c2VkIHRvIHByb3BhZ2F0ZSBjaGFuZ2VzCi0gICAgLy8gdG8gdGhlIHBs
YXRmb3JtIGNvbnRleHQncyBzdGF0ZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlU3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncykgPSAwOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgYm9v
bCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVh
cmFuY2UoKTsgfQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkgeyBtX3N0YXRlLnNldFVzZURhcmtBcHBlYXJhbmNlKHVzZURhcmtBcHBlYXJhbmNl
LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CisjZW5kaWYKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlc3Rv
cmUoKTsKLSAgICAKKyAgICB2b2lkIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgdW5zaWdu
ZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorICAgIHZp
cnR1YWwgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpID0gMDsKICNpZiBVU0UoQ0cpCiAgICAgLy8g
RklYTUU6IFNob3VsZCB0aGVzZSByZWFsbHkgYmUgcHVibGljIEdyYXBoaWNzQ29udGV4dCBtZXRo
b2RzPwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5
U3Ryb2tlUGF0dGVybigpID0gMDsKKyNlbmRpZgogCi0gICAgLy8gRklYTUU6IENhbiB3ZSBtYWtl
IHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdoYXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jv
c3MtcGxhdGZvcm0/Ci0gICAgdmlydHVhbCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKIAotICAgIC8vIEZJ
WE1FOiBDYW4gdGhpcyBiZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9yIHBhcmFtZXRl
cj8gT3IganVzdCBiZSByZWFkIG9mZiB0aGUgY29udGV4dD8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgPSAwOwotI2VuZGlmCisgICAgLy8gVGhpcyBmdW5j
dGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250ZXh0LCBtYWtp
bmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgorICAgIC8vIGFjdGluZyBhcyBhIGJhc2UtbGV2ZWwg
Y29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsgfQogCi0gICAg
dmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CisgICAgLy8gVHJhbnNwYXJlbmN5IExheWVycwog
Ci0gICAgLy8gUGl4ZWwgU25hcHBpbmcKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGlzSW5UcmFu
c3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJuIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJz
KCkgJiYgbV90cmFuc3BhcmVuY3lMYXllckNvdW50OyB9CiAKLSAgICBlbnVtIFJvdW5kaW5nTW9k
ZSB7Ci0gICAgICAgIFJvdW5kQWxsU2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5z
aW9ucwotICAgIH07Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZs
b2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0
eWxlKTsKKyAgICAvLyBDbGlwcGluZwogCi0gICAgLy8gU2hhcGVzCisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxl
OjpFdmVuT2RkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0Jik7CiAKLSAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBk
byBib3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgotICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJh
d1JlY3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCi0gICAgLy8g
dXNpbmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRo
ZSBjb3JyZWN0Ci0gICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93
Q29sb3IpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKKworICAg
IEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9z
dGF0ZS5jbGlwQm91bmRzKCkpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7
CisgICAgLy8gU2hhcGVzCiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9r
ZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpID0gMDsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRl
ZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFs
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImLCBCbGVuZE1vZGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgPSAwOwotCi0gICAgdmlydHVh
bCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE1p
dGVyTGltaXQoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUGF0
aChjb25zdCBQYXRoJikgPSAwOwogCi0gICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1lZGlh
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSA9IDA7CiAKLSAgICBJbnRTaXplIGNvbXBhdGli
bGVJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlv
bmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmlu
Z01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxS
ZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRo
b2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmlu
Z01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBz
dGQ6Om51bGxvcHQpIGNvbnN0OworICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJv
dGggc3Ryb2tpbmcgYW5kIGZpbGxpbmcuCisgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVj
dCgpLCB3aGljaCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKKyAgICAvLyB1c2lu
ZyBhIDEtcGl4ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNv
cnJlY3QKKyAgICAvLyBzdHJva2UgY29sb3IpLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9w
dCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXpl
JiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
ID0gMSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0Nv
bG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpcnR1YWwgZHJhd1BhdGgoY29uc3QgUGF0
aCYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0
aW9uOjpGcm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdS
ZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1h
Z2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIC8vIEZvY3VzIFJpbmdzCiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJj
ZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsK
KyAgICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9u
PyBPciBlbHNld2hlcmU/CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRy
YXcsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVk
cmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyNlbmRpZgogCisgICAgLy8gSW1hZ2VzCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9h
dFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1h
Z2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMm
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBk
cmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
SW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdl
RHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGls
ZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVk
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxl
UnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsK
IAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQ
YXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogI2lmIEVOQUJMRShWSURFTykKICAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAjZW5kaWYKLQotICAgIC8vIENsaXBw
aW5nCi0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdp
bmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
OwotCisgICAgCiAgICAgLy8gVGV4dAogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBGbG9h
dFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3Qg
RmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0
byA9IHN0ZDo6bnVsbG9wdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdH
bHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
U21vb3RoaW5nTW9kZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWdu
ZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICB7Ci0gICAgICAg
IGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9u
dFNtb290aGluZ01vZGUpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBj
b21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50
aW5nKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9h
dFJlY3QmLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0
eWxlID0gU29saWRTdHJva2UpOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0g
U29saWRTdHJva2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwogCi0g
ICAgLy8gVHJhbnNwYXJlbmN5IExheWVycwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgYm9vbCBpc0lu
VHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiAobV90cmFuc3BhcmVuY3lMYXllckNv
dW50ID4gMCkgJiYgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKTsgfQorICAgIFdFQkNPUkVf
RVhQT1JUIEZsb2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9h
dFJlY3QmLCBib29sIHByaW50aW5nKTsKIAotICAgIC8vIEZvY3VzIFJpbmdzCisgICAgLy8gQ29t
cGF0aWJsZSBJbWFnZUJ1ZmZlcgogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgLy8gRklY
TUU6IENhbiB3ZSBoaWRlIHRoZXNlIGluIHRoZSBDRyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdo
ZXJlPwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBD
b2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3Qg
Q29sb3ImKSA9IDA7Ci0jZW5kaWYKKyAgICBJbnRTaXplIGNvbXBhdGlibGVJbWFnZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CiAKLSAgICAvLyBUcmFuc2Zvcm1zCisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpv
cHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAgIHZvaWQgc2NhbGUoZmxv
YXQgcykgeyBzY2FsZSh7IHMsIHMgfSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJh
ZGlhbnMpID0gMDsKLSAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsg
dHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KLSAgICB2b2lkIHRyYW5z
bGF0ZShjb25zdCBGbG9hdFBvaW50JiBwKSB7IHRyYW5zbGF0ZShwLngoKSwgcC55KCkpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisgICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
c3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNv
bmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVs
bG9wdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAgICBl
bnVtIEluY2x1ZGVEZXZpY2VTY2FsZSB7IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUsIFBv
c3NpYmx5SW5jbHVkZURldmljZVNjYWxlIH07Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBj
b25zdCA9IDA7CisgICAgLy8gUGl4ZWwgU25hcHBpbmcKIAotICAgIC8vIFRoaXMgZnVuY3Rpb24g
YXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFraW5nIHRo
ZSBjb250ZXh0IGNhcGFibGUgb2YKLSAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVsIGNvbnRl
eHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KLSAgICBXRUJDT1JF
X0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAgZW51bSBSb3VuZGluZ01v
ZGUgeworICAgICAgICBSb3VuZEFsbFNpZGVzLAorICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVu
c2lvbnMKKyAgICB9OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgPSAwOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhG
bG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VT
dHlsZSk7CiAKICAgICAvLyBMaW5rcwogCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRS
ZWN0JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBT
dHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIC8vIENvbnRl
bnRmdWwgUGFpbnQgRGV0ZWN0aW9uCisjaWYgVVNFKENHKQorICAgIC8vIEZJWE1FOiBDYW4gd2Ug
bWFrZSB0aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0
IGNyb3NzLXBsYXRmb3JtPworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJv
b2wpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1f
Y29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBjb250ZW5mdWxQYWlu
dERldGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZDsgfQor
ICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9y
IHBhcmFtZXRlcj8gT3IganVzdCBiZSByZWFkIG9mZiB0aGUgY29udGV4dD8KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgeyB9CisjZW5kaWYKIAogICAgIC8v
IEZJWE1FOiBOb3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQg
YmUgbW92ZWQgZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCkBAIC01NDYsMTAgKzM1Miw3IEBA
IHB1YmxpYzoKICAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFuZCBX
aW5kb3dzIENhaXJvIGJhY2tlbmRzLgogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBudWxs
cHRyOyB9CiAjZW5kaWYKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNUcmFu
c3BhcmVuY3lMYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KKyAgICAKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZv
aWQgc3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTU2MSwxOTEgKzM2
NCwxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQ
YXR0ZXJuQW5kU3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0
aCkgY29uc3Q7CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3Ju
ZXJzKGJvb2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBv
aW50MSwgRmxvYXRQb2ludCBwb2ludDIpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGUgbV9zdGF0ZTsKLQogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNUcmFuc3Bh
cmVuY3lMYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZSBtX3N0YXRlOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fbGFzdEFwcGxpZWRT
dGF0ZTsKICAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGUsIDE+IG1fc3RhY2s7CiAKICAg
ICB1bnNpZ25lZCBtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgeyAwIH07CiAgICAgYm9vbCBtX2Nv
bnRlbnRmdWxQYWludERldGVjdGVkIHsgZmFsc2UgfTsKIH07CiAKLWNsYXNzIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBi
b29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAg
ICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKLSAgICB7Ci0gICAgICAgIGlmICht
X3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgbV9jb250ZXh0LnNhdmUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIoKQotICAgIHsKLSAgICAgICAgaWYg
KG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVB
bmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0LnNhdmUoKTsKLSAgICAgICAgbV9zYXZlQW5k
UmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUo
KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiAmbV9jb250ZXh0OyB9Ci0K
LXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Ci0gICAgYm9vbCBtX3Nh
dmVBbmRSZXN0b3JlOwotfTsKLQotY2xhc3MgVHJhbnNwYXJlbmN5TGF5ZXJTY29wZSB7Ci1wdWJs
aWM6Ci0gICAgVHJhbnNwYXJlbmN5TGF5ZXJTY29wZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGZsb2F0IGFscGhhLCBib29sIGJlZ2luTGF5ZXIgPSB0cnVlKQotICAgICAgICA6IG1fY29udGV4
dChjb250ZXh0KQotICAgICAgICAsIG1fYWxwaGEoYWxwaGEpCi0gICAgICAgICwgbV9iZWdhbkxh
eWVyKGJlZ2luTGF5ZXIpCi0gICAgewotICAgICAgICBpZiAoYmVnaW5MYXllcikKLSAgICAgICAg
ICAgIG1fY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1fYWxwaGEpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGJlZ2luTGF5ZXIoZmxvYXQgYWxwaGEpCi0gICAgewotICAgICAgICBtX2Fs
cGhhID0gYWxwaGE7Ci0gICAgICAgIG1fY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1f
YWxwaGEpOwotICAgICAgICBtX2JlZ2FuTGF5ZXIgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICB+
VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSgpCi0gICAgewotICAgICAgICBpZiAobV9iZWdhbkxheWVy
KQotICAgICAgICAgICAgbV9jb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIGZsb2F0IG1f
YWxwaGE7Ci0gICAgYm9vbCBtX2JlZ2FuTGF5ZXI7Ci19OwotCi1jbGFzcyBHcmFwaGljc0NvbnRl
eHRTdGF0ZVN0YWNrQ2hlY2tlciB7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
dGFja0NoZWNrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICA6IG1fY29udGV4
dChjb250ZXh0KQotICAgICAgICAsIG1fc3RhY2tTaXplKGNvbnRleHQuc3RhY2tTaXplKCkpCi0g
ICAgeyB9Ci0gICAgCi0gICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9zdGFja1NpemUpCi0g
ICAgICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBzdGFjayBjaGFuZ2Vk
IGJ5ICVkIiwgJm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXplKCkgLSAoaW50KW1f
c3RhY2tTaXplKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2Nv
bnRleHQ7Ci0gICAgdW5zaWduZWQgbV9zdGFja1NpemU7Ci19OwotCi1jbGFzcyBJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IEludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKLSAgICAgICAgOiBt
X2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCi0gICAgICAgICwgbV9jdXJyZW50SW50
ZXJwb2xhdGlvblF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSkKLSAgICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZChpbnRlcnBvbGF0
aW9uUXVhbGl0eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0ICYmIG1fY3Vy
cmVudEludGVycG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCi0g
ICAgewotICAgICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCi0gICAgICAg
ICAgICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGludGVy
cG9sYXRpb25RdWFsaXR5VG9Vc2UpOwotICAgIH0KLQotICAgIGV4cGxpY2l0IEludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgc3Rk
OjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkpCi0g
ICAgICAgIDogSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBoaWNzQ29udGV4dCwg
aW50ZXJwb2xhdGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52YWx1ZSgpIDogZ3Jh
cGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgfkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCi0gICAgewotICAgICAgICBp
ZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCi0gICAgICAgICAgICBtX2dyYXBoaWNz
Q29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVudEludGVycG9sYXRp
b25RdWFsaXR5KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2dy
YXBoaWNzQ29udGV4dDsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRlcnBv
bGF0aW9uUXVhbGl0eTsKLSAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkOwot
fTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
TW9kZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGUsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU6OlRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2
ZXMsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5n
LAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyLAot
ICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpBdXRvY29ycmVjdGlv
blJlcGxhY2VtZW50LAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
OjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlPiB7Ci0gICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVBhdHRlcm5DaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxHcmFkaWVudENoYW5nZSwKLSAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbFBhdHRlcm5D
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0
cm9rZVRoaWNrbmVzc0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlQ2hhbmdlLAotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQ29sb3JDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxSdWxlQ2hhbmdlLAot
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dDaGFu
Z2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLAotICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpCbGVuZE1vZGVDaGFuZ2UsCi0g
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlRleHREcmF3aW5n
TW9kZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZQotI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgICAgICwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UKLSNlbmRpZgotICAgID47
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlN0cm9rZVN0eWxl
PiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpTdHJva2VT
dHlsZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6Tm9TdHJva2UsCi0gICAgV2ViQ29yZTo6
U3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEb3R0
ZWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRhc2hlZFN0cm9rZSwKLSAgICBX
ZWJDb3JlOjpTdHJva2VTdHlsZTo6RG91YmxlU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0
eWxlOjpXYXZ5U3Ryb2tlCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZh
bHVlczwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlLAotICAgICAgICBXZWJDb3Jl
OjpUZXh0RHJhd2luZ01vZGU6OkZpbGwsCi0gICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9k
ZTo6U3Ryb2tlCi0gICAgPjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
YzllNTgxZGNjMjIwM2FkMjFhN2Y0OGYzNTc4MTRkZWZjM2NmZjA5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUu
Y3BwCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRTdGF0ZS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBDaGFuZ2VGbGFncyYgY2hhbmdl
RmxhZ3MsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fY2xpcEJv
dW5kcyhpbml0aWFsQ1RNLm1hcFJlY3QoaW5pdGlhbENsaXApKQorICAgICwgbV9jaGFuZ2VGbGFn
cyhjaGFuZ2VGbGFncykKKyAgICAsIG1fY3RtKGluaXRpYWxDVE0pCit7Cit9CisKK0Zsb2F0UmVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5kcygpIGNvbnN0Cit7CisgICAgaWYgKGF1
dG8gaW52ZXJzZSA9IG1fY3RtLmludmVyc2UoKSkKKyAgICAgICAgcmV0dXJuIGludmVyc2UtPm1h
cFJlY3QobV9jbGlwQm91bmRzKTsKKworICAgIC8vIElmIHRoZSBDVE0gaXMgbm90IGludmVydGli
bGUsIHJldHVybiB0aGUgb3JpZ2luYWwgcmVjdC4KKyAgICAvLyBUaGlzIG1hdGNoZXMgQ0dSZWN0
QXBwbHlJbnZlcnNlQWZmaW5lVHJhbnNmb3JtIGJlaGF2aW9yLgorICAgIHJldHVybiBtX2NsaXBC
b3VuZHM7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0U3RhdGU6Omhhc09ubHlQcmltaXRpdmVD
aGFuZ2VzKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIENoYW5nZUZsYWdzIHByaW1p
dGl2ZUNoYW5nZUZsYWdzIHsgQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsIENoYW5nZTo6U3Ryb2tl
QnJ1c2gsIENoYW5nZTo6RmlsbEJydXNoIH07CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAhPSAo
bV9jaGFuZ2VGbGFncyAmIHByaW1pdGl2ZUNoYW5nZUZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoQ2hhbmdlOjpTdHJva2VCcnVz
aCkgJiYgIW1fc3Ryb2tlQnJ1c2guaXNQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoQ2hhbmdlOjpGaWxsQnJ1c2gpICYm
ICFtX2ZpbGxCcnVzaC5pc1ByaW1pdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFu
Z2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikKK3sKKyAgICBhdXRvIG1lcmdl
Q2hhbmdlID0gWyZdKENoYW5nZSBjaGFuZ2UsIGF1dG8gR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipw
cm9wZXJ0eSkgeworICAgICAgICBpZiAob3RoZXIubV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFu
Z2UpKSB7CisgICAgICAgICAgICB0aGlzLT4qcHJvcGVydHkgPSBvdGhlci4qcHJvcGVydHk7Cisg
ICAgICAgICAgICBtX2NoYW5nZUZsYWdzLmFkZChjaGFuZ2UpOworICAgICAgICB9CisgICAgfTsK
KworICAgIEFTU0VSVChtX2NsaXBCb3VuZHMgPT0gb3RoZXIubV9jbGlwQm91bmRzKTsKKworICAg
IG1lcmdlQ2hhbmdlKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKTsKKworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6Rmls
bEJydXNoLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmls
bEJydXNoKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U3Ry
b2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ry
b2tlVGhpY2tuZXNzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKwor
ICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdl
OjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9saW5lRGFzaCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgbWVy
Z2VDaGFuZ2UoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KTsKKworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6
Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
Y29tcG9zaXRlTW9kZSk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKwor
ICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpUZXh0
RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0
RHJhd2luZ01vZGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMs
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMp
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMpOworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBtZXJnZUNo
YW5nZShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtZXJnZUNoYW5nZShD
aGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrKTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQorICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlRGlmZnMoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIG90aGVyKQoreworICAgIGF1dG8gbWVyZ2VEaWZmID0gWyZdKENoYW5nZSBj
aGFuZ2UsIGF1dG8gR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSkgeworICAgICAgICBp
ZiAodGhpcy0+KnByb3BlcnR5ICE9IG90aGVyLipwcm9wZXJ0eSkgeworICAgICAgICAgICAgdGhp
cy0+KnByb3BlcnR5ID0gb3RoZXIuKnByb3BlcnR5OworICAgICAgICAgICAgbV9jaGFuZ2VGbGFn
cy5hZGQoY2hhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBtZXJnZURpZmYoQ2hhbmdl
OjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
Y3RtKTsKKyAgICAKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoKTsKKyAgICBtZXJnZURp
ZmYoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fZmlsbFJ1bGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlQnJ1c2gs
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKTsK
KyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBtZXJnZURpZmYoQ2hh
bmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc3Ryb2tlU3R5bGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TGluZUNhcCwgICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXApOworICAgIG1l
cmdlRGlmZihDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lRGFzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TGluZUpvaW4s
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKTsK
KyAgICBtZXJnZURpZmYoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdl
OjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
Y29tcG9zaXRlTW9kZSk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpOworCisgICAg
bWVyZ2VEaWZmKENoYW5nZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2FscGhhKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5LCAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSk7CisK
KyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBtZXJnZURpZmYoQ2hh
bmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc2hvdWxkU21vb3RoRm9udHMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cywgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zLCAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNm
b3Jtcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrKTsKKyNpZiBIQVZF
KE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIG1lcmdlRGlmZihDaGFuZ2U6OlVzZURhcmtBcHBl
YXJhbmNlLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFy
YW5jZSk7CisjZW5kaWYKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIHN0YXRlQ2hhbmdlTmFtZShH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlIGNoYW5nZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3Qgc3RhdGVDaGFuZ2VOYW1lc1tdID0geworICAgICAgICAiY3RtIiwKKworICAg
ICAgICAiZmlsbC1icnVzaCIsCisgICAgICAgICJmaWxsLXJ1bGUiLAorCisgICAgICAgICJzdHJv
a2UtYnJ1c2giLAorICAgICAgICAic3Ryb2tlLXRoaWNrbmVzcyIsCisgICAgICAgICJzdHJva2Ut
c3R5bGUiLAorCisgICAgICAgICJsaW5lLWNhcCIsCisgICAgICAgICJsaW5lLWRhc2giLAorICAg
ICAgICAibGluZS1qb2luIiwKKyAgICAgICAgIm1pdGVyLWxpbWl0IiwKKworICAgICAgICAiY29t
cG9zaXRlLW1vZGUiLAorICAgICAgICAiZHJvcC1zaGFkb3ciLAorCisgICAgICAgICJhbHBoYSIs
CisgICAgICAgICJpbWFnZS1pbnRlcnBvbGF0aW9uLXF1YWxpdHkiLAorICAgICAgICAidGV4dC1k
cmF3aW5nLW1vZGUiLAorCisgICAgICAgICJzaG91bGQtYW50aWFsaWFzIiwKKyAgICAgICAgInNo
b3VsZC1zbW9vdGgtZm9udHMiLAorICAgICAgICAic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZv
bnRzIiwKKyAgICAgICAgInNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMiLAorICAgICAgICAiZHJh
dy1sdW1pbmFuY2UtbWFzayIKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgICAg
ICAsICJ1c2UtZGFyay1hcHBlYXJhbmNlIgorI2VuZGlmCisgICAgfTsKKworICAgIHVuc2lnbmVk
IG1hc2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhbmdlKTsKKyAgICBBU1NFUlQoISgobWFz
ayAtIDEpICYgbWFzaykpOworICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGxvZzIobWFzaykpOworICAgIHJldHVybiBzdGF0ZUNoYW5nZU5hbWVzW2luZGV4
XTsKK30KKworVGV4dFN0cmVhbSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmR1bXAoVGV4dFN0cmVh
bSYgdHMpIGNvbnN0Cit7CisgICAgYXV0byBkdW1wID0gWyZdKENoYW5nZSBjaGFuZ2UsIGF1dG8g
R3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgY29uc3QgU3RyaW5nJiBuYW1lKSB7Cisg
ICAgICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICB0
cy5kdW1wUHJvcGVydHkobmFtZSwgdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9OworCisgICAgdHMu
ZHVtcFByb3BlcnR5KCJjaGFuZ2UtZmxhZ3MiLCBtX2NoYW5nZUZsYWdzKTsKKworICAgIGR1bXAo
Q2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2N0bSwgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hh
bmdlOjpDVE0pKTsKKworICAgIGR1bXAoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCwgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpGaWxsQnJ1c2gpKTsKKyAgICBkdW1wKENoYW5n
ZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9maWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6
RmlsbFJ1bGUpKTsKKworICAgIGR1bXAoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoLCAgICAgICAgICAgICAg
ICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTdHJva2VCcnVzaCkpOworICAgIGR1bXAoQ2hh
bmdlOjpTdHJva2VUaGlja25lc3MsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3N0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdl
OjpTdHJva2VUaGlja25lc3MpKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSwgICAgICAg
ICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U3Ryb2tlU3R5bGUpKTsKKworICAg
IGR1bXAoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2xpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5h
bWUoQ2hhbmdlOjpMaW5lQ2FwKSk7CisgICAgZHVtcChDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gsICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkxpbmVEYXNoKSk7CisgICAgZHVt
cChDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShD
aGFuZ2U6OkxpbmVKb2luKSk7CisgICAgZHVtcChDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCwgICAgICAgICAg
ICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6Ok1pdGVyTGltaXQpKTsKKworICAgIGR1
bXAoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUo
Q2hhbmdlOjpDb21wb3NpdGVNb2RlKSk7CisgICAgZHVtcChDaGFuZ2U6OkRyb3BTaGFkb3csICAg
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdywgICAg
ICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkRyb3BTaGFkb3cpKTsKKwor
ICAgIGR1bXAoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2FscGhhLCAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5n
ZU5hbWUoQ2hhbmdlOjpBbHBoYSkpOworICAgIGR1bXAoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5LCAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHksICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KSk7CisgICAgZHVtcChDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAg
IHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSkpOworCisgICAgZHVtcChD
aGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFu
Z2U6OlNob3VsZEFudGlhbGlhcykpOworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250
cywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRz
LCAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cykp
OworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICBzdGF0ZUNo
YW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpKTsKKyAgICBkdW1w
KENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENo
YW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpKTsKKyAgICBkdW1wKENoYW5nZTo6RHJhd0x1
bWluYW5jZU1hc2ssICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVt
aW5hbmNlTWFzaywgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6RHJhd0x1bWlu
YW5jZU1hc2spKTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGR1bXAoQ2hh
bmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3VzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdl
OjpVc2VEYXJrQXBwZWFyYW5jZSkpOworI2VuZGlmCisgICAgcmV0dXJuIHRzOworfQorCitUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlIGNoYW5nZSkKK3sKKyAgICB0cyA8PCBzdGF0ZUNoYW5nZU5hbWUoY2hhbmdlKTsKKyAg
ICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gc3RhdGUu
ZHVtcCh0cyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ0ODllYjEyMjg2YmUzODlkOTM2OGEzOThiMjVkNmE1NDk5NzY0OTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRTdGF0ZS5oCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIlNvdXJjZUJydXNo
LmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGUgeworcHVi
bGljOgorICAgIGVudW0gY2xhc3MgQ2hhbmdlIDogdWludDMyX3QgeworICAgICAgICBDVE0gICAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCisKKyAgICAgICAgRmlsbEJydXNoICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAxLAorICAgICAgICBGaWxsUnVsZSAgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIsCisKKyAgICAgICAgU3Ryb2tlQnJ1c2ggICAgICAgICAgICAgICAgID0gMSA8
PCAzLAorICAgICAgICBTdHJva2VUaGlja25lc3MgICAgICAgICAgICAgPSAxIDw8IDQsCisgICAg
ICAgIFN0cm9rZVN0eWxlICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKKworICAgICAgICBMaW5l
Q2FwICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDYsCisgICAgICAgIExpbmVEYXNoICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgNywKKyAgICAgICAgTGluZUpvaW4gICAgICAgICAgICAgICAg
ICAgID0gMSA8PCA4LAorICAgICAgICBNaXRlckxpbWl0ICAgICAgICAgICAgICAgICAgPSAxIDw8
IDksCisKKyAgICAgICAgQ29tcG9zaXRlTW9kZSAgICAgICAgICAgICAgID0gMSA8PCAxMCwKKyAg
ICAgICAgRHJvcFNoYWRvdyAgICAgICAgICAgICAgICAgID0gMSA8PCAxMSwKKworICAgICAgICBB
bHBoYSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5ICAgPSAxIDw8IDEzLAorICAgICAgICBUZXh0RHJhd2luZ01vZGUgICAg
ICAgICAgICAgPSAxIDw8IDE0LAorCisgICAgICAgIFNob3VsZEFudGlhbGlhcyAgICAgICAgICAg
ICA9IDEgPDwgMTUsCisgICAgICAgIFNob3VsZFNtb290aEZvbnRzICAgICAgICAgICA9IDEgPDwg
MTYsCisgICAgICAgIFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IDEgPDwgMTcsCisgICAg
ICAgIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zICAgICA9IDEgPDwgMTgsCisgICAgICAgIERyYXdM
dW1pbmFuY2VNYXNrICAgICAgICAgICA9IDEgPDwgMTksCisjaWYgSEFWRShPU19EQVJLX01PREVf
U1VQUE9SVCkKKyAgICAgICAgVXNlRGFya0FwcGVhcmFuY2UgICAgICAgICAgID0gMSA8PCAyMCwK
KyNlbmRpZgorICAgIH07CisgICAgdXNpbmcgQ2hhbmdlRmxhZ3MgPSBPcHRpb25TZXQ8Q2hhbmdl
PjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgQ2hhbmdlRmxhZ3MgaW5pdGlhbENoYW5nZUZsYWdz
ID0geyBDaGFuZ2U6OkZpbGxCcnVzaCwgQ2hhbmdlOjpTdHJva2VCcnVzaCwgQ2hhbmdlOjpTdHJv
a2VUaGlja25lc3MgfTsKKworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRl
KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXBCb3VuZHMsIGNvbnN0IENoYW5nZUZsYWdzJiA9
IHsgfSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9KTsKKworICAgIFdF
QkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7CisgICAgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyBtX2NsaXBCb3VuZHMuaW50ZXJzZWN0KG1fY3RtLm1h
cFJlY3QocmVjdCkpOyB9CisKKyAgICBDaGFuZ2VGbGFncyBjaGFuZ2VzKCkgY29uc3QgeyByZXR1
cm4gbV9jaGFuZ2VGbGFnczsgfQorICAgIHZvaWQgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKSB7IG1f
Y2hhbmdlRmxhZ3MgPSB7IH07IH0KKworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25z
dCB7IHJldHVybiBtX2N0bTsgfQorICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgY3RtLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBz
ZXRQcm9wZXJ0eShDaGFuZ2U6OkNUTSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSwgY3Rt
LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgY29uc3QgU291cmNlQnJ1c2gmIGZpbGxCcnVz
aCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEJydXNoOyB9CisgICAgdm9pZCBzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkZpbGxCcnVzaCwgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ZpbGxCcnVzaCwgeyBjb2xvciB9LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAg
IHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX2ZpbGxCcnVzaC5zZXRHcmFkaWVudChX
VEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFu
Z2U6OkZpbGxCcnVzaCk7IH0KKyAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYm
IHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxs
QnJ1c2guc2V0UGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hh
bmdlRmxhZ3MuYWRkKENoYW5nZTo6RmlsbEJydXNoKTsgfQorCisgICAgV2luZFJ1bGUgZmlsbFJ1
bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxlOyB9CisgICAgdm9pZCBzZXRGaWxsUnVsZShX
aW5kUnVsZSBmaWxsUnVsZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVk
U3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpGaWxsUnVsZSwgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2ZpbGxSdWxlLCBmaWxsUnVsZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNv
bnN0IFNvdXJjZUJydXNoJiBzdHJva2VCcnVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQnJ1
c2g7IH0KKyAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hh
bmdlOjpTdHJva2VCcnVzaCwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoLCB7
IGNvbG9yIH0sIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBzZXRTdHJva2VHcmFkaWVu
dChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VU
cmFuc2Zvcm0pIHsgbV9zdHJva2VCcnVzaC5zZXRHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50KSwg
c3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsg
fQorICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1c2guc2V0UGF0
dGVybihXVEZNb3ZlKHBhdHRlcm4pLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxhZ3MuYWRk
KENoYW5nZTo6U3Ryb2tlQnJ1c2gpOyB9CisKKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBj
b25zdCB7IHJldHVybiBtX3N0cm9rZVRoaWNrbmVzczsgfQorICAgIHZvaWQgc2V0U3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTdHJva2VUaGlja25lc3Ms
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVz
cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJva2VTdHlsZTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUo
U3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0
QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlU3R5bGUsICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSwgc3Ryb2tlU3R5bGUsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisKKyAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7
IH0KKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwLCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVD
YXAsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwLCBsaW5lQ2FwLCBsYXN0QXBwbGll
ZFN0YXRlKTsgfQorCisgICAgY29uc3QgTGluZURhc2gmIGxpbmVEYXNoKCkgY29uc3QgeyByZXR1
cm4gbV9saW5lRGFzaDsgfQorICAgIHZvaWQgc2V0TGluZURhc2goTGluZURhc2gmJiBsaW5lRGFz
aCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJv
cGVydHkoQ2hhbmdlOjpMaW5lRGFzaCwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNo
LCBXVEZNb3ZlKGxpbmVEYXNoKSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIExpbmVKb2lu
IGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQorICAgIHZvaWQgc2V0TGlu
ZUpvaW4oTGluZUpvaW4gbGluZUpvaW4sIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0
QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZUpvaW4sICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lSm9pbiwgbGluZUpvaW4sIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisK
KyAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9Cisg
ICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TWl0ZXJM
aW1pdCwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQsIG1pdGVyTGltaXQsIGxh
c3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisgICAgQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3Np
dGVNb2RlKENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpDb21wb3NpdGVN
b2RlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY29tcG9zaXRlTW9kZSwgY29tcG9zaXRlTW9k
ZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBjb25zdCBEcm9wU2hhZG93JiBkcm9w
U2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9kcm9wU2hhZG93OyB9CisgICAgdm9pZCBzZXREcm9w
U2hhZG93KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3csIGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RHJvcFNoYWRv
dywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3csIGRyb3BTaGFkb3csIGxhc3RB
cHBsaWVkU3RhdGUpOyB9CisKKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxw
aGE7IH0KKyAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhLCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkFscGhhLCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEsIGFscGhhLCBsYXN0QXBwbGllZFN0YXRlKTsg
fQorICAgIAorICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAgICB2
b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RB
cHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwg
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAg
ICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBt
X3RleHREcmF3aW5nTW9kZTsgfQorICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3
aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUsIHRleHREcmF3aW5nTW9k
ZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29u
c3QgeyByZXR1cm4gbV9zaG91bGRBbnRpYWxpYXM7IH0KKyAgICB2b2lkIHNldFNob3VsZEFudGlh
bGlhcyhib29sIHNob3VsZEFudGlhbGlhcywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxh
c3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMsIHNob3VsZEFudGlhbGlhcywg
bGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZFNtb290aEZvbnRzOyB9CisgICAgdm9pZCBzZXRTaG91bGRTbW9v
dGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlNob3VsZFNtb290aEZv
bnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMsIHNob3VsZFNt
b290aEZvbnRzLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFz
dEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cywgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KKyAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNm
b3Jtcywgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAg
CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0x1bWlu
YW5jZU1hc2s7IH0KKyAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWlu
YW5jZU1hc2ssIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7
IHNldFByb3BlcnR5KENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ssICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzaywgZHJhd0x1bWluYW5jZU1hc2ssIGxhc3RBcHBsaWVk
U3RhdGUpOyB9CisKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgdXNl
RGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3VzZURhcmtBcHBlYXJhbmNlOyB9Cisg
ICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlLCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShD
aGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFy
a0FwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorI2Vu
ZGlmCisKKyAgICBib29sIGhhc09ubHlQcmltaXRpdmVDaGFuZ2VzKCkgY29uc3Q7CisgICAgdm9p
ZCBtZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKTsKKyAgICB2
b2lkIG1lcmdlRGlmZnMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKTsKKworICAg
IFdURjo6VGV4dFN0cmVhbSYgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRl
eHRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHZvaWQgc2V0UHJvcGVydHkoQ2hhbmdlIGNoYW5nZSwgVCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6KnByb3BlcnR5LCBjb25zdCBUJiB2YWx1ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpCisgICAgeworICAgICAgICBpZiAodGhpcy0+KnBy
b3BlcnR5ID09IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLT4qcHJv
cGVydHkgPSB2YWx1ZTsKKyAgICAgICAgbV9jaGFuZ2VGbGFncy5zZXQoY2hhbmdlLCBsYXN0QXBw
bGllZFN0YXRlLipwcm9wZXJ0eSAhPSB0aGlzLT4qcHJvcGVydHkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZXRQcm9wZXJ0eShDaGFuZ2UgY2hhbmdlLCBU
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHksIFQmJiB2YWx1ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpCisgICAgeworICAgICAgICBpZiAodGhp
cy0+KnByb3BlcnR5ID09IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlz
LT4qcHJvcGVydHkgPSBXVEZNb3ZlKHZhbHVlKTsKKyAgICAgICAgbV9jaGFuZ2VGbGFncy5zZXQo
Y2hhbmdlLCBsYXN0QXBwbGllZFN0YXRlLipwcm9wZXJ0eSAhPSB0aGlzLT4qcHJvcGVydHkpOwor
ICAgIH0KKworICAgIEZsb2F0UmVjdCBtX2NsaXBCb3VuZHM7CisKKyAgICBDaGFuZ2VGbGFncyBt
X2NoYW5nZUZsYWdzOworCisgICAgQWZmaW5lVHJhbnNmb3JtIG1fY3RtOworCisgICAgU291cmNl
QnJ1c2ggbV9maWxsQnJ1c2ggeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBXaW5kUnVsZSBtX2ZpbGxS
dWxlIHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKKworICAgIFNvdXJjZUJydXNoIG1fc3Ryb2tlQnJ1
c2ggeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBmbG9hdCBtX3N0cm9rZVRoaWNrbmVzcyB7IDAgfTsK
KyAgICBTdHJva2VTdHlsZSBtX3N0cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKKworICAgIExp
bmVDYXAgbV9saW5lQ2FwIHsgTGluZUNhcDo6QnV0dCB9OworICAgIExpbmVEYXNoIG1fbGluZURh
c2g7CisgICAgTGluZUpvaW4gbV9saW5lSm9pbiB7IExpbmVKb2luOjpNaXRlciB9OworICAgIGZs
b2F0IG1fbWl0ZXJMaW1pdCB7IDAgfTsKKworICAgIENvbXBvc2l0ZU1vZGUgbV9jb21wb3NpdGVN
b2RlIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsIH07
CisgICAgRHJvcFNoYWRvdyBtX2Ryb3BTaGFkb3c7CisKKyAgICBmbG9hdCBtX2FscGhhIHsgMSB9
OworICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7
IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgVGV4dERyYXdpbmdNb2RlRmxh
Z3MgbV90ZXh0RHJhd2luZ01vZGUgeyBUZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKKworICAgIGJv
b2wgbV9zaG91bGRBbnRpYWxpYXMgeyB0cnVlIH07CisgICAgYm9vbCBtX3Nob3VsZFNtb290aEZv
bnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgeyB0
cnVlIH07CisgICAgYm9vbCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fZHJhd0x1bWluYW5jZU1hc2sgeyBmYWxzZSB9OworI2lmIEhBVkUoT1NfREFSS19N
T0RFX1NVUFBPUlQpCisgICAgYm9vbCBtX3VzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2UgfTsKKyNl
bmRpZgorfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGF1dG8gZW5jb2Rl
ID0gWyZdKENoYW5nZSBjaGFuZ2UsIGF1dG8gR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0
eSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQorICAgICAg
ICAgICAgZW5jb2RlciA8PCB0aGlzLT4qcHJvcGVydHk7CisgICAgfTsKKworICAgIGVuY29kZXIg
PDwgbV9jbGlwQm91bmRzOworCisgICAgZW5jb2RlciA8PCBtX2NoYW5nZUZsYWdzOworCisgICAg
ZW5jb2RlKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2N0bSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpGaWxsQnJ1c2gsICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoKTsK
KyAgICBlbmNvZGUoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6U3Ry
b2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0
cm9rZUJydXNoKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBl
bmNvZGUoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6TGluZUNh
cCwgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVD
YXApOworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6
TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2xpbmVKb2luKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCk7CisKKyAgICBlbmNv
ZGUoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fY29tcG9zaXRlTW9kZSk7CisgICAgZW5jb2RlKENoYW5nZTo6RHJvcFNoYWRv
dywgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFk
b3cpOworCisgICAgZW5jb2RlKENoYW5nZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgZW5jb2RlKENoYW5nZTo6VGV4dERyYXdp
bmdNb2RlLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3
aW5nTW9kZSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBl
bmNvZGUoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMpOworICAgIGVuY29kZShDaGFuZ2U6OlNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9z
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIGVuY29kZShDaGFuZ2U6OlNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zLCAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dz
SWdub3JlVHJhbnNmb3Jtcyk7CisgICAgZW5jb2RlKENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ss
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNr
KTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGVuY29kZShDaGFuZ2U6OlVz
ZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91
c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
K3N0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBhdXRvIGRlY29kZSA9IFsmXShHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENoYW5nZSBjaGFuZ2UsIGF1dG8gR3JhcGhpY3NDb250
ZXh0U3RhdGU6Oipwcm9wZXJ0eSkgeworICAgICAgICBpZiAoIXN0YXRlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHVz
aW5nIFByb3BlcnR5VHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxkZWNsdHlw
ZShzdGQ6OmRlY2x2YWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+KCkuKnByb3BlcnR5KT46OnR5cGU7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8UHJvcGVydHlUeXBlPiB2YWx1ZTsKKyAgICAgICAgZGVj
b2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBzdGF0ZS4qcHJvcGVydHkgPSAqdmFsdWU7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH07CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gY2xpcEJvdW5k
czsKKyAgICBkZWNvZGVyID4+IGNsaXBCb3VuZHM7CisgICAgaWYgKCFjbGlwQm91bmRzKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDaGFuZ2VGbGFn
cz4gY2hhbmdlRmxhZ3M7CisgICAgZGVjb2RlciA+PiBjaGFuZ2VGbGFnczsKKyAgICBpZiAoIWNo
YW5nZUZsYWdzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGUgc3RhdGUoKmNsaXBCb3VuZHMsICpjaGFuZ2VGbGFncyk7CisKKyAgICBpZiAo
IWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpGaWxsUnVsZSwg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hh
bmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zdHJva2VCcnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFk
ZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSkpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdl
OjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9s
aW5lQ2FwKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShz
dGF0ZSwgQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9saW5lRGFzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY29t
cG9zaXRlTW9kZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGUoc3RhdGUsIENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSkpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSwgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGUoc3RhdGUsIENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcykpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
c2hvdWxkU21vb3RoRm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorCisgICAgcmV0dXJuIHN0YXRlOworfQorCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
KTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCisgICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTSwKKworICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1c2gsCisgICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxSdWxlLAorCisgICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoLAorICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3MsCisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxl
LAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVD
YXAsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVE
YXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5l
Sm9pbiwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0
ZXJMaW1pdCwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpDb21wb3NpdGVNb2RlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpEcm9wU2hhZG93LAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkFscGhhLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LAorICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsCisKKyAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzLAor
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTbW9v
dGhGb250cywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywKKyAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2sKKyNp
ZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgICAgICAsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlCisjZW5kaWYKKyAgICA+Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjcyMTMyODUyNjFlNjkwY2EzMDYwZDdlMDI2ZTUwZTUyZWVhNTkwZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVz
dG9yZSkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAg
bV9jb250ZXh0LnNhdmUoKTsKKyAgICB9CisgICAgCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAg
ICBtX2NvbnRleHQucmVzdG9yZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNhdmUoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKKyAgICAgICAgbV9jb250ZXh0
LnNhdmUoKTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7CisgICAgfQorCisgICAg
dm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsK
KyAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25z
dCB7IHJldHVybiAmbV9jb250ZXh0OyB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0
JiBtX2NvbnRleHQ7CisgICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKworY2xhc3MgVHJh
bnNwYXJlbmN5TGF5ZXJTY29wZSB7CitwdWJsaWM6CisgICAgVHJhbnNwYXJlbmN5TGF5ZXJTY29w
ZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IGFscGhhLCBib29sIGJlZ2luTGF5ZXIg
PSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fYWxwaGEo
YWxwaGEpCisgICAgICAgICwgbV9iZWdhbkxheWVyKGJlZ2luTGF5ZXIpCisgICAgeworICAgICAg
ICBpZiAoYmVnaW5MYXllcikKKyAgICAgICAgICAgIG1fY29udGV4dC5iZWdpblRyYW5zcGFyZW5j
eUxheWVyKG1fYWxwaGEpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJlZ2luTGF5ZXIoZmxvYXQg
YWxwaGEpCisgICAgeworICAgICAgICBtX2FscGhhID0gYWxwaGE7CisgICAgICAgIG1fY29udGV4
dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1fYWxwaGEpOworICAgICAgICBtX2JlZ2FuTGF5ZXIg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICB+VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSgpCisgICAg
eworICAgICAgICBpZiAobV9iZWdhbkxheWVyKQorICAgICAgICAgICAgbV9jb250ZXh0LmVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4
dCYgbV9jb250ZXh0OworICAgIGZsb2F0IG1fYWxwaGE7CisgICAgYm9vbCBtX2JlZ2FuTGF5ZXI7
Cit9OworCitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlciB7CitwdWJsaWM6
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc3RhY2tT
aXplKGNvbnRleHQuc3RhY2tTaXplKCkpCisgICAgeyB9CisKKyAgICB+R3JhcGhpY3NDb250ZXh0
U3RhdGVTdGFja0NoZWNrZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC5zdGFja1Np
emUoKSAhPSBtX3N0YWNrU2l6ZSkKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3ND
b250ZXh0ICVwIHN0YWNrIGNoYW5nZWQgYnkgJWQiLCAmbV9jb250ZXh0LCAoaW50KW1fY29udGV4
dC5zdGFja1NpemUoKSAtIChpbnQpbV9zdGFja1NpemUpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsK
K307CisKK2NsYXNzIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVh
bGl0eVRvVXNlKQorICAgICAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkK
KyAgICAgICAgLCBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eShncmFwaGljc0NvbnRleHQu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQorICAgICAgICAsIG1faW50ZXJwb2xhdGlvblF1
YWxpdHlDaGFuZ2VkKGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UgIT0gSW50ZXJwb2xhdGlvblF1
YWxpdHk6OkRlZmF1bHQgJiYgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gaW50ZXJw
b2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlZCkKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSk7CisgICAgfQorCisg
ICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBzdGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFsaXR5PiBp
bnRlcnBvbGF0aW9uUXVhbGl0eSkKKyAgICAgICAgOiBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIoZ3JhcGhpY3NDb250ZXh0LCBpbnRlcnBvbGF0aW9uUXVhbGl0eSA/IGludGVycG9sYXRp
b25RdWFsaXR5LnZhbHVlKCkgOiBncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKQorICAgIHsKKyAgICB9CisKKyAgICB+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkK
KyAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkobV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0OworICAgIEludGVycG9sYXRpb25R
dWFsaXR5IG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5OworICAgIGJvb2wgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCmlu
ZGV4IDE1ZGYxZGZkYjZmM2ExNmFkNWVhZjY0NzI2MWZjZmM0YjdhOTNhYjQuLjYyZjlmNDY0YzNk
NmQ5ZDVhMDljYTVhNGI3YmQ4YTEwMzYxNTkxYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0xMjYsMjcgKzEyNiw1MSBA
QCBTdHJpbmcgYmxlbmRNb2RlTmFtZShCbGVuZE1vZGUgYmxlbmRPcCkKICAgICByZXR1cm4gYmxl
bmRPcGVyYXRvck5hbWVzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihibGVuZE9wKSAtIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihCbGVuZE1vZGU6Ok5vcm1hbCldOwogfQogCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIHJldHVy
biB0cyA8PCBibGVuZE1vZGVOYW1lKGJsZW5kTW9kZSk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkKK3sKKyAg
ICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBjb21wb3NpdGVNb2RlLm9w
ZXJhdGlvbik7CisgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgY29tcG9zaXRlTW9k
ZS5ibGVuZE1vZGUpOworICAgIHJldHVybiB0czsKK30KKwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgcmV0dXJuIHRz
IDw8IGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShvcCwgQmxlbmRNb2RlOjpOb3JtYWwpOwogfQogCi1U
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJvcFNoYWRv
dyYgZHJvcFNoYWRvdykKIHsKLSAgICByZXR1cm4gdHMgPDwgYmxlbmRNb2RlTmFtZShibGVuZE1v
ZGUpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LW9mZnNldCIsIGRyb3BTaGFkb3cub2Zm
c2V0KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwgZHJvcFNoYWRvdy5ibHVy
UmFkaXVzKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1jb2xvciIsIGRyb3BTaGFkb3cu
Y29sb3IpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyIs
IGRyb3BTaGFkb3cucmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
V2luZFJ1bGUgcnVsZSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIElu
dGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KQogewotICAgIHN3aXRjaCAo
cnVsZSkgewotICAgIGNhc2UgV2luZFJ1bGU6Ok5vblplcm86Ci0gICAgICAgIHRzIDw8ICJOT04t
WkVSTyI7CisgICAgc3dpdGNoIChpbnRlcnBvbGF0aW9uUXVhbGl0eSkgeworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgIHRzIDw8ICJERUZBVUxUIjsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaW5kUnVsZTo6RXZlbk9kZDoKLSAgICAgICAgdHMgPDwg
IkVWRU4tT0REIjsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9s
YXRlOgorICAgICAgICB0cyA8PCAiRE8tTk9ULUlOVEVSUE9MQVRFIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgorICAgICAgICB0cyA8PCAiTE9X
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVt
OgorICAgICAgICB0cyA8PCAiTUVESVVNIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgdHMgPDwgIkhFSUdIIjsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotCiAgICAgcmV0dXJuIHRzOwogfQogCkBAIC0xNjYsNiArMTkwLDExIEBA
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVDYXAgY2FwU3R5bGUp
CiAgICAgcmV0dXJuIHRzOwogfQogCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBMaW5lRGFzaCkKK3sKKyAgICByZXR1cm4gdHM7Cit9CisKIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVKb2luIGpvaW5TdHlsZSkKIHsKICAgICBzd2l0Y2gg
KGpvaW5TdHlsZSkgewpAQCAtMTgyLDQgKzIxMSw1NiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBqb2luU3R5bGUpCiAgICAgcmV0dXJuIHRzOwogfQog
CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBTdHJva2VTdHlsZSBzdHJv
a2VTdHlsZSkKK3sKKyAgICBzd2l0Y2ggKHN0cm9rZVN0eWxlKSB7CisgICAgY2FzZSBTdHJva2VT
dHlsZTo6Tm9TdHJva2U6CisgICAgICAgIHRzIDw8ICJOTy1TVFJPS0UiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZToKKyAgICAgICAgdHMgPDwgIlNP
TElELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5bGU6OkRvdHRl
ZFN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRPVFRFRC1TVFJPS0UiOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2U6CisgICAgICAgIHRzIDw8ICJEQVNI
RUQtU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RG91Ymxl
U3Ryb2tlOgorICAgICAgICB0cyA8PCAiRE9VQkxFLVNUUk9LRSI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU3Ryb2tlU3R5bGU6OldhdnlTdHJva2U6CisgICAgICAgIHRzIDw8ICJXQVZZLVNU
Uk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFRleHREcmF3aW5nTW9kZSB0ZXh0RHJh
d2luZ01vZGUpCit7CisgICAgc3dpdGNoICh0ZXh0RHJhd2luZ01vZGUpIHsKKyAgICBjYXNlIFRl
eHREcmF3aW5nTW9kZTo6RmlsbDoKKyAgICAgICAgdHMgPDwgIkZJTEwiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRleHREcmF3aW5nTW9kZTo6U3Ryb2tlOgorICAgICAgICB0cyA8PCAiU1RS
T0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgV2luZFJ1bGUgcnVsZSkKK3sKKyAgICBz
d2l0Y2ggKHJ1bGUpIHsKKyAgICBjYXNlIFdpbmRSdWxlOjpOb25aZXJvOgorICAgICAgICB0cyA8
PCAiTk9OLVpFUk8iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdpbmRSdWxlOjpFdmVuT2Rk
OgorICAgICAgICB0cyA8PCAiRVZFTi1PREQiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAppbmRleCA0ZDIwNGU5N2U1
YzU0NGQ3NzZiZmE3ZjMwYWFjYzFiN2M0NjNlMGUwLi4wZjhiMmQwMjc1NWJmYWVjNjVkOTVjMDRm
MmM0NWI1MjQ5NGYyNjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw5IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIKKyNpbmNsdWRlICJGbG9h
dFNpemUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTczLDYgKzc2LDc5IEBAIGVudW0gY2xh
c3MgQmxlbmRNb2RlIDogdWludDhfdCB7CiAgICAgUGx1c0xpZ2h0ZXIKIH07CiAKK3N0cnVjdCBD
b21wb3NpdGVNb2RlIHsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBvcGVyYXRpb247CisgICAgQmxl
bmRNb2RlIGJsZW5kTW9kZTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb21wb3NpdGVN
b2RlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYXRpb24gPT0gb3RoZXIub3Bl
cmF0aW9uICYmIGJsZW5kTW9kZSA9PSBvdGhlci5ibGVuZE1vZGU7CisgICAgfQorICAgIAorICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVN
b2RlPiBkZWNvZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3Zv
aWQgQ29tcG9zaXRlTW9kZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
ZW5jb2RlciA8PCBvcGVyYXRpb247CisgICAgZW5jb2RlciA8PCBibGVuZE1vZGU7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU1vZGU+IENvbXBv
c2l0ZU1vZGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8
Q29tcG9zaXRlT3BlcmF0b3I+IG9wZXJhdGlvbjsKKyAgICBkZWNvZGVyID4+IG9wZXJhdGlvbjsK
KyAgICBpZiAoIW9wZXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7CisgICAgZGVjb2RlciA+PiBibGVu
ZE1vZGU7CisgICAgaWYgKCFibGVuZE1vZGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4geyB7ICpvcGVyYXRpb24sICpibGVuZE1vZGUgfSB9OworfQorCitzdHJ1
Y3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgeworICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4
X3QgeworICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVz
LAorICAgICAgICBTcGVsbGluZywKKyAgICAgICAgR3JhbW1hciwKKyAgICAgICAgQXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudCwKKyAgICAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCisgICAgfSBt
b2RlOworICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFy
a2VyTGluZVN0eWxlPiBkZWNvZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbW9kZTsKKyAgICBlbmNvZGVyIDw8IHNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpv
cHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9k
ZTsKKyAgICBkZWNvZGVyID4+IG1vZGU7CisgICAgaWYgKCFtb2RlKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRVc2VEYXJrQXBw
ZWFyYW5jZTsKKyAgICBkZWNvZGVyID4+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOworICAgIGlm
ICghc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4geyB7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfSB9Owor
fQorCiBlbnVtIGNsYXNzIEdyYWRpZW50U3ByZWFkTWV0aG9kIDogdWludDhfdCB7CiAgICAgUGFk
LAogICAgIFJlZmxlY3QsCkBAIC05Myw2ICsxNjksNDIgQEAgZW51bSBjbGFzcyBMaW5lQ2FwIDog
dWludDhfdCB7CiAgICAgU3F1YXJlCiB9OwogCitzdHJ1Y3QgTGluZURhc2ggeworICAgIERhc2hB
cnJheSBkYXNoZXM7CisgICAgZmxvYXQgb2Zmc2V0OworICAgIAorICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxMaW5lRGFzaD4gZGVjb2RlKERlY29kZXIm
KTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZURhc2gmIGEsIGNvbnN0
IExpbmVEYXNoJiBiKQoreworICAgIHJldHVybiBhLmRhc2hlcyA9PSBiLmRhc2hlcyAmJiBhLm9m
ZnNldCA9PSBiLm9mZnNldDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgTGlu
ZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
ZGFzaGVzOworICAgIGVuY29kZXIgPDwgb2Zmc2V0OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorc3RkOjpvcHRpb25hbDxMaW5lRGFzaD4gTGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RGFzaEFycmF5PiBkYXNoZXM7CisgICAgZGVj
b2RlciA+PiBkYXNoZXM7CisgICAgaWYgKCFkYXNoZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBvZmZzZXQ7CisgICAgZGVjb2RlciA+
PiBvZmZzZXQ7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4geyB7IFdURk1vdmUoKmRhc2hlcyksICpvZmZzZXQgfSB9OworfQorCiBl
bnVtIGNsYXNzIExpbmVKb2luIDogdWludDhfdCB7CiAgICAgTWl0ZXIsCiAgICAgUm91bmQsCkBA
IC0xMDUsNiArMjE3LDc2IEBAIGVudW0gSG9yaXpvbnRhbEFsaWdubWVudCB7CiAgICAgQWxpZ25I
Q2VudGVyCiB9OwogCisvLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNh
bnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRt
ZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7
CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisKK3N0cnVjdCBEcm9wU2hhZG93IHsKKyAg
ICBGbG9hdFNpemUgb2Zmc2V0OworICAgIGZsb2F0IGJsdXJSYWRpdXMgeyAwIH07CisgICAgQ29s
b3IgY29sb3I7CisgICAgU2hhZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVz
TW9kZTo6RGVmYXVsdCB9OworICAgIAorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1
cm4gY29sb3IuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGlzQmx1cnJlZCgpIGNvbnN0IHsgcmV0
dXJuIGlzVmlzaWJsZSgpICYmIGJsdXJSYWRpdXM7IH0KKyAgICBib29sIGhhc091dHNldHMoKSBj
b25zdCB7IHJldHVybiBpc0JsdXJyZWQoKSB8fCAoaXNWaXNpYmxlKCkgJiYgIW9mZnNldC5pc1pl
cm8oKSk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8RHJvcFNoYWRvdz4gZGVjb2RlKERlY29kZXImKTsKK307CisKK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgRHJvcFNoYWRvdyYgYSwgY29uc3QgRHJvcFNoYWRvdyYgYikKK3sK
KyAgICByZXR1cm4gYS5vZmZzZXQgPT0gYi5vZmZzZXQgJiYgYS5ibHVyUmFkaXVzID09IGIuYmx1
clJhZGl1cyAmJiBhLmNvbG9yID09IGIuY29sb3IgJiYgYS5yYWRpdXNNb2RlID09IGIucmFkaXVz
TW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRHJvcFNoYWRvdzo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBvZmZzZXQ7Cisg
ICAgZW5jb2RlciA8PCBibHVyUmFkaXVzOworICAgIGVuY29kZXIgPDwgY29sb3I7CisgICAgZW5j
b2RlciA8PCByYWRpdXNNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpv
cHRpb25hbDxEcm9wU2hhZG93PiBEcm9wU2hhZG93OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4g
b2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYmx1clJhZGl1czsKKyAgICBkZWNvZGVyID4+IGJs
dXJSYWRpdXM7CisgICAgaWYgKCFibHVyUmFkaXVzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7CisgICAgZGVjb2RlciA+PiBj
b2xvcjsKKyAgICBpZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3RkOjpvcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiByYWRpdXNNb2RlOworICAgIGRlY29k
ZXIgPj4gcmFkaXVzTW9kZTsKKyAgICBpZiAoIXJhZGl1c01vZGUpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICpvZmZzZXQsICpibHVyUmFkaXVzLCAqY29s
b3IsICpyYWRpdXNNb2RlIH0gfTsKK30KKworZW51bSBTdHJva2VTdHlsZSB7CisgICAgTm9TdHJv
a2UsCisgICAgU29saWRTdHJva2UsCisgICAgRG90dGVkU3Ryb2tlLAorICAgIERhc2hlZFN0cm9r
ZSwKKyAgICBEb3VibGVTdHJva2UsCisgICAgV2F2eVN0cm9rZSwKK307CisKIGVudW0gVGV4dEJh
c2VsaW5lIHsKICAgICBBbHBoYWJldGljVGV4dEJhc2VsaW5lLAogICAgIFRvcFRleHRCYXNlbGlu
ZSwKQEAgLTEyMiwxNiArMzA0LDI5IEBAIGVudW0gVGV4dEFsaWduIHsKICAgICBSaWdodFRleHRB
bGlnbgogfTsKIAotU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShXZWJDb3JlOjpDb21wb3Np
dGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKLVN0cmluZyBibGVuZE1vZGVOYW1lKFdl
YkNvcmU6OkJsZW5kTW9kZSk7Ci1ib29sIHBhcnNlQmxlbmRNb2RlKGNvbnN0IFN0cmluZyYsIFdl
YkNvcmU6OkJsZW5kTW9kZSYpOwotYm9vbCBwYXJzZUNvbXBvc2l0ZUFuZEJsZW5kT3BlcmF0b3Io
Y29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3ImLCBXZWJDb3JlOjpCbGVu
ZE1vZGUmKTsKK2VudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7CisgICAgRmls
bCA9IDEgPDwgMCwKKyAgICBTdHJva2UgPSAxIDw8IDEsCit9OwogCi1XRUJDT1JFX0VYUE9SVCBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Qmxl
bmRNb2RlKTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcik7Ci1XRUJDT1JFX0VYUE9S
VCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUp
OwordXNpbmcgVGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2Rl
PjsKKworU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlKTsKK1N0cmluZyBibGVuZE1vZGVOYW1lKEJsZW5kTW9kZSk7Citib29sIHBhcnNlQmxl
bmRNb2RlKGNvbnN0IFN0cmluZyYsIEJsZW5kTW9kZSYpOworYm9vbCBwYXJzZUNvbXBvc2l0ZUFu
ZEJsZW5kT3BlcmF0b3IoY29uc3QgU3RyaW5nJiwgQ29tcG9zaXRlT3BlcmF0b3ImLCBCbGVuZE1v
ZGUmKTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIEJsZW5kTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29tcG9zaXRlT3BlcmF0b3IpOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENv
bXBvc2l0ZU1vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERyb3BTaGFkb3cmKTsKK1dFQkNPUkVfRVhQT1JUIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBJbnRlcnBvbGF0aW9u
UXVhbGl0eSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgTGluZUNhcCk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZURhc2gpOwogV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVKb2luKTsK
K1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBTdHJva2VTdHlsZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgVGV4dERyYXdpbmdNb2RlKTsKK1dFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXaW5kUnVsZSk7
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApAQCAtMjE5LDQgKzQxNCwzNSBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkxpbmVKb2luPiB7CiAgICAgPjsKIH07CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6U3Ryb2tlU3R5bGU+IHsKKyAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlLAor
ICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpOb1N0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VT
dHlsZTo6U29saWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdHRlZFN0cm9r
ZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlLAorICAgIFdlYkNvcmU6
OlN0cm9rZVN0eWxlOjpEb3VibGVTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6Oldh
dnlTdHJva2UKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpUZXh0RHJhd2luZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAor
ICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGUsCisgICAgICAgIFdlYkNvcmU6OlRleHRE
cmF3aW5nTW9kZTo6RmlsbCwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpTdHJv
a2UKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGUsCisgICAg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlRleHRDaGVja2luZ0RpY3Rh
dGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5nLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGlu
ZVN0eWxlOjpNb2RlOjpHcmFtbWFyLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpNb2RlOjpBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAorICAgIFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMKKyAgICA+Owor
fTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcAppbmRleCA0
ZTA3MWY3MmYzNWJlOGE1OGZjNGNkNTc3YTE0NTZkZTE3NDY2ODJjLi40MWIwNTExYThmNzhhMTc5
YjMwNGNmODlkNDEwM2UzNWRlM2UxMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKQEAg
LTQ0LDcgKzQ0LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6
ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEYKIHsKICNpZiBVU0UoTkVXX1RI
RU1FKSB8fCBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlv
bihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwg
b3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAoZHN0UmVjdCk7CiAgICAg
Y29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZHN0UmVjdC5z
aXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggYjYyMzY3ODgwZTNlNTM1
NGI2MTcxMTM0N2M5YTExYjQyMjQ2ODg1ZS4uZDY3ZDNlYTExNWQyNGVmZDkwOWUwM2FjOWFkZTkz
YThiNDc2NGZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TnVsbEdyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL051bGxHcmFwaGljc0NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw4NyArMzgsNTcgQEAgcHVibGljOgogICAgICAg
ICBEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQKICAgICB9OwogCi0gICAgTnVsbEdyYXBoaWNzQ29u
dGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMgcmVhc29ucykKLSAgICAgICAgOiBtX3BhaW50
SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25zKQorICAgIE51bGxHcmFwaGljc0NvbnRleHQoY29u
c3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNv
bnMpCisgICAgICAgIDogR3JhcGhpY3NDb250ZXh0KGluaXRpYWxDbGlwKQorICAgICAgICAsIG1f
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKHJlYXNvbnMpCiAgICAgewogICAgIH0KIAogcHJpdmF0
ZToKLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFs
IHsgfQotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIHBlcmZvcm1pbmdQYWludEludmFsaWRhdGlvbigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zICE9IFBhaW50
SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQogICAgIGJvb2wgaW52YWxpZGF0aW5nQ29udHJv
bFRpbnRzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMg
PT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHM7IH0K
ICAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KICAgICBib29s
IGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50OyB9CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mp
IGZpbmFsIHsgfQotCi0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCkgZmluYWwgeyB9Ci0jZW5kaWYKLQotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KLQotICAgIHZv
aWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwg
eyB9OwotCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsIHsgfQotCi0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
eyB9OyB9Ci0KKyAgICB2b2lkIHNhdmUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJlc3RvcmUoKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWwgeyB9OwogI2lmIFVT
RShDRykKICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsIHsgfQogICAgIHZvaWQg
YXBwbHlGaWxsUGF0dGVybigpIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0
aCYpIGZpbmFsIHsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0ID0gMSkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRo
JikgZmluYWwgeyB9Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0K
LSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWwgeyB9Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9
IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbCB7IH0KLSAgICBGbG9hdFJlY3Qgcm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lk
ZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFs
c2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9Ci0g
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dCBmaW5hbCB7IHJldHVybiB7IH07IH0KLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZp
bmFsIHsgfQorICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbCB7IH0KKwogICAg
IHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbCB7IH0KICAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBzYXZl
KCkgZmluYWwgeyB9Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGRy
YXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgY29uc3QgQ29s
b3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbCB7IH0KIAotICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCkgZmluYWwgeyByZXR1cm4geyB9OyB9Cisg
ICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9v
dGhpbmdNb2RlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRp
ZW50JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpu
dWxsb3B0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgCisg
ICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbCB7IH0KIAot
ICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWwgeyB9CiAKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1h
Z2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsIHsgfQogCi0gICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3Ro
aW5nOyB9Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRp
bGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAgdm9p
ZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbCB7
IH0KICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29u
c3QgQ29sb3ImKSBmaW5hbCB7IH0KQEAgLTEyNywyOCArOTcsMjYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wm
LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBm
aW5hbDsKLQotICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2Rl
ID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxl
bmRNb2RlOjpOb3JtYWwpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
JikgZmluYWwgeyB9Ci0KKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6
ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0
dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQogI2lmIEVOQUJM
RShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQogI2VuZGlmCiAKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0
LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWwgeyB9Cisg
ICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxT
aWRlcykgZmluYWwgeyByZXR1cm4gcmVjdDsgfQorCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShD
QUlSTykKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi1w
cml2YXRlOgogICAgIGNvbnN0IFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBtX3BhaW50SW52YWxp
ZGF0aW9uUmVhc29ucyB7IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSB9OwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJlZjRlNDA2MTE3Y2MzMTFlMWIyZGYxMWU5
ZDY2MzhjNDg3OTNmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmgKQEAgLTAsMCArMSwzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gc3RydWN0IENH
Q29udGV4dDsKKyNlbGlmIFVTRShDQUlSTykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dENhaXJvOworfQordXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCA9IHZvaWQ7CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggYmIxMzhiNTI5N2E1MjFmYmY3ZDY5M2NkMTE0
MTA0NDAwZmNhYmM0ZS4uOTAyNGY1ZDFhYmZjZTM4MDgxODNhM2IyMzFmYmNlMGZmYjJmZjQxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAK
QEAgLTE5MSwxNyArMTkxLDE3IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRT
aXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDCiAgICAgdXBkYXRl
U2hhZG93Qmx1clZhbHVlcygpOwogfQogCi1TaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6IG1fY29sb3Ioc3RhdGUuc2hhZG93Q29s
b3IpCi0gICAgLCBtX2JsdXJSYWRpdXMoc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Qmx1
cikKLSAgICAsIG1fb2Zmc2V0KHN0YXRlLnNoYWRvd09mZnNldCkKLSAgICAsIG1fc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCitTaGFkb3dCbHVy
OjpTaGFkb3dCbHVyKGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3csIGJvb2wgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpCisgICAgOiBtX2NvbG9yKGRyb3BTaGFkb3cuY29sb3IpCisgICAgLCBt
X2JsdXJSYWRpdXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVzLCBkcm9wU2hhZG93LmJsdXJSYWRpdXMp
CisgICAgLCBtX29mZnNldChkcm9wU2hhZG93Lm9mZnNldCkKKyAgICAsIG1fc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCiB7CiAjaWYgVVNFKENHKQogICAg
IC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVz
ID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRv
IHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gt
c2hhZG93LgotICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01v
ZGU6OkxlZ2FjeSkgewotICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lS
YWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CisgICAgaWYgKGRyb3BTaGFkb3cucmFkaXVzTW9kZSA9
PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpIHsKKyAgICAgICAgZmxvYXQgc2hhZG93Qmx1ciA9
IHJhZGl1c1RvTGVnYWN5UmFkaXVzKGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CiAgICAgICAgIG1f
Ymx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaApp
bmRleCAxNGZkODNlZGUxYTFiYWNmMTc3ZjMzMWVjYWQxYTQzMDI5M2Y2MDNhLi40NWQwZTU4MzI5
Y2RlZWFiZmI3OGE0ZDVlNjdhYjhkODgxYWU1NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCkBAIC0zOCw4ICszOCw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
Owotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3Rh
dGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK3N0cnVjdCBEcm9wU2hhZG93OwogCiBjbGFzcyBTaGFk
b3dCbHVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFkb3dCbHVyKTsKQEAgLTUyLDcg
KzUzLDcgQEAgcHVibGljOgogCiAgICAgU2hhZG93Qmx1cigpOwogICAgIFNoYWRvd0JsdXIoY29u
c3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xv
ciYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7Ci0gICAgU2hhZG93Qmx1
cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIFNoYWRvd0JsdXIoY29uc3QgRHJv
cFNoYWRvdyYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAKICAgICB2
b2lkIHNldFNoYWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmICwg
Y29uc3QgQ29sb3ImLCBib29sIGlnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mYzZhYzEzZmQyNWM2ZjBmODAxNTg3MmZmMTllZDI4YTFmYTUyYmQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUJydXNoLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKGNvbnN0IENvbG9y
JiBjb2xvciwgc3RkOjpvcHRpb25hbDxCcnVzaD4mJiBicnVzaCkKKyAgICA6IG1fY29sb3IoY29s
b3IpCisgICAgLCBtX2JydXNoKFdURk1vdmUoYnJ1c2gpKQoreworfQorCitjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIFNvdXJjZUJydXNoOjpzcGFjZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEFmZmluZVRyYW5zZm9ybT4gaWRlbnRpdHk7CisgICAgcmV0dXJu
IG1fYnJ1c2ggPyBtX2JydXNoLT5zcGFjZVRyYW5zZm9ybSA6IGlkZW50aXR5LmdldCgpOworfQor
CitHcmFkaWVudCogU291cmNlQnJ1c2g6OmdyYWRpZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
YnJ1c2gpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvKiBncmFkaWVudCA9
IHN0ZDo6Z2V0X2lmPFJlZjxHcmFkaWVudD4+KCZtX2JydXNoLT5icnVzaCkpCisgICAgICAgIHJl
dHVybiBncmFkaWVudC0+cHRyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1BhdHRlcm4q
IFNvdXJjZUJydXNoOjpwYXR0ZXJuKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvKiBwYXR0ZXJuID0gc3RkOjpnZXRfaWY8
UmVmPFBhdHRlcm4+PigmbV9icnVzaC0+YnJ1c2gpKQorICAgICAgICByZXR1cm4gcGF0dGVybi0+
cHRyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgU291cmNlQnJ1c2g6OnNldEdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBz
cGFjZVRyYW5zZm9ybSkKK3sKKyAgICBtX2JydXNoID0geyBXVEZNb3ZlKGdyYWRpZW50KSwgc3Bh
Y2VUcmFuc2Zvcm0gfTsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0UGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQor
eworICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtIH07Cit9
CisKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU291
cmNlQnJ1c2gmIGJydXNoKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBicnVzaC5j
b2xvcigpKTsKKworICAgIGlmIChhdXRvIGdyYWRpZW50ID0gYnJ1c2guZ3JhZGllbnQoKSkKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJncmFkaWVudCIsIGdyYWRpZW50KTsKKworICAgIGlmIChh
dXRvIHBhdHRlcm4gPSBicnVzaC5wYXR0ZXJuKCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cGF0dGVybiIsIHBhdHRlcm4pOworCisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
b3VyY2VCcnVzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1
c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zZTI4ZDBjMzQxYjUyYTNlNjA1NDg1NzNjNGM2YzhlYzNlZGI4YWIz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnJ1c2guaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisj
aW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU291cmNlQnJ1c2ggeworcHVibGljOgorICAgIHN0cnVjdCBCcnVz
aCB7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0dGVybj4+IGJy
dXNoOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gc3BhY2VUcmFuc2Zvcm07CisKKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxC
cnVzaD4gZGVjb2RlKERlY29kZXImKTsKKyAgICB9OworCisgICAgU291cmNlQnJ1c2goKSA9IGRl
ZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgU291cmNlQnJ1c2goY29uc3QgQ29sb3ImLCBzdGQ6
Om9wdGlvbmFsPEJydXNoPiYmID0gc3RkOjpudWxsb3B0KTsKKworICAgIGNvbnN0IENvbG9yJiBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICB2b2lkIHNldENvbG9yKGNvbnN0
IENvbG9yIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQorCisgICAgY29uc3Qgc3RkOjpvcHRp
b25hbDxCcnVzaD4mIGJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9icnVzaDsgfQorCisgICAgV0VC
Q09SRV9FWFBPUlQgR3JhZGllbnQqIGdyYWRpZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgUGF0dGVybiogcGF0dGVybigpIGNvbnN0OworICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
c3BhY2VUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIHZvaWQgc2V0R3JhZGllbnQoUmVmPEdyYWRp
ZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KTsKKyAg
ICB2b2lkIHNldFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
c3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworCisgICAgYm9vbCBpc1ByaW1pdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuICFtX2JydXNoICYmIG1fY29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCk7IH0KKworICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTb3VyY2VCcnVz
aD4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBDb2xvciBtX2NvbG9yIHsgQ29s
b3I6OmJsYWNrIH07CisgICAgc3RkOjpvcHRpb25hbDxCcnVzaD4gbV9icnVzaDsKK307CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJl
ZjxQYXR0ZXJuPj4mIGEsIGNvbnN0IHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0
dGVybj4+JiBiKQoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGEsCisgICAgICAgIFsmXSAo
Y29uc3QgUmVmPEdyYWRpZW50PiYgYUdyYWRpZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byog
YkdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdyYWRpZW50Pj4oJmIpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBhR3JhZGllbnQgPT0gKmJHcmFkaWVudDsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8UGF0dGVybj4mIGFQYXR0
ZXJuKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYlBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8
UGF0dGVybj4+KCZiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYVBhdHRlcm4gPT0gKmJQYXR0
ZXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgKTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaDo6QnJ1c2gmIGEsIGNvbnN0
IFNvdXJjZUJydXNoOjpCcnVzaCYgYikKK3sKKyAgICByZXR1cm4gYS5icnVzaCA9PSBiLmJydXNo
ICYmIGEuc3BhY2VUcmFuc2Zvcm0gPT0gYi5zcGFjZVRyYW5zZm9ybTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaCYgYSwgY29uc3QgU291cmNlQnJ1c2gmIGIp
Cit7CisgICAgcmV0dXJuIGEuY29sb3IoKSA9PSBiLmNvbG9yKCkgJiYgYS5icnVzaCgpID09IGIu
YnJ1c2goKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KK3ZvaWQgU291cmNlQnJ1
c2g6OkJydXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IHNwYWNlVHJhbnNmb3JtOworICAgIFdURjo6c3dpdGNoT24oYnJ1c2gsCisgICAgICAgIFsm
XSAoY29uc3QgUmVmPEdyYWRpZW50PiYgZ3JhZGllbnQpIHsKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgdHJ1ZSA8PCBncmFkaWVudC5nZXQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25z
dCBSZWY8UGF0dGVybj4mIHBhdHRlcm4pIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgZmFsc2Ug
PDwgcGF0dGVybi5nZXQoKTsKKyAgICAgICAgfQorICAgICk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoOjpCcnVzaD4gU291cmNlQnJ1
c2g6OkJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFs
PEFmZmluZVRyYW5zZm9ybT4gc3BhY2VUcmFuc2Zvcm07CisgICAgZGVjb2RlciA+PiBzcGFjZVRy
YW5zZm9ybTsKKyAgICBpZiAoIXNwYWNlVHJhbnNmb3JtKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBoYXNHcmFkaWVudDsKKyAgICBkZWNv
ZGVyID4+IGhhc0dyYWRpZW50OworICAgIGlmICghaGFzR3JhZGllbnQpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgaWYgKCpoYXNHcmFkaWVudCkgeworICAgICAgICBh
dXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFn
cmFkaWVudCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVy
biB7IHsgV1RGTW92ZSgqZ3JhZGllbnQpLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworICAgIH0KKwor
ICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsKKyAgICBpZiAoIXBh
dHRlcm4pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyBXVEZN
b3ZlKCpwYXR0ZXJuKSwgKnNwYWNlVHJhbnNmb3JtIH0gfTsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KK3ZvaWQgU291cmNlQnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAoreworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1fYnJ1c2g7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBT
b3VyY2VCcnVzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25h
bDxDb2xvcj4gY29sb3I7CisgICAgZGVjb2RlciA+PiBjb2xvcjsKKyAgICBpZiAoIWNvbG9yKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9w
dGlvbmFsPEJydXNoPj4gYnJ1c2g7CisgICAgZGVjb2RlciA+PiBicnVzaDsKKyAgICBpZiAoIWJy
dXNoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIFNvdXJjZUJy
dXNoKCpjb2xvciwgV1RGTW92ZSgqYnJ1c2gpKTsKK30KKworV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFNvdXJjZUJydXNoJik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RleHRCb3hJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGV4dEJveEl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzdlNjhlMzhmMDIzN2IwMjIwY2Y2NWJhMmMx
MGU4ODg4ZGQ0OTg1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1RleHRCb3hJdGVyYXRvci5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZXh0UnVuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dEJveEl0
ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94SXRlcmF0b3IoKQorICAgICAgICA6IG1fdGV4
dFJ1bigwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKworICAgIFRleHRC
b3hJdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBvZmZzZXQpCisgICAg
ICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dDsgfQorICAgIHZvaWQgaW5jcmVtZW50KCkgeyBtX29mZnNldCsrOyB9CisgICAgYm9vbCBhdEVu
ZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHRSdW4gfHwgbV9vZmZzZXQgPj0gbV90ZXh0UnVuLT5s
ZW5ndGgoKTsgfQorICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoKm1fdGV4dFJ1
bilbbV9vZmZzZXRdOyB9CisgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gYXRFbmQoKSA/IFVfT1RIRVJfTkVVVFJBTCA6IHVfY2hhckRpcmVjdGlvbihjdXJyZW50
KCkpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNl
dCAmJiBtX3RleHRSdW4gPT0gb3RoZXIubV90ZXh0UnVuOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhb3Bl
cmF0b3I9PShvdGhlcik7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUZXh0UnVuKiBtX3RleHRS
dW47CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcAppbmRleCA3MjhkM2JlYTBhMTcyMzUwMTRmMGYxMmNmM2Q2ZDdkYTE5M2Mz
NWE1Li4xNWU4NDU1N2FjODFhNzY3YTAwNzQ2ZTMwMTYxNTM1NDRmMjE1NjdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAKQEAgLTE4MzQsNyArMTgzNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNp
dmVDb21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAg
ICAgIAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUo
KSk7CiAKLSAgICAgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCBjb250ZXh0KCptX2Rpc3Bs
YXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNm
b3JtKCkpOworICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1fZGlz
cGxheUxpc3QsIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CiAgICAgICAgIHBhaW50
R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNp
emUoKSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IDE1NTIzNTZhMjNhNWZk
ZmIxMGFmZWNhMmNjOTJhNzI3OTQ1ODEwMmUuLjhhZTFiNWZhOWZlZTUzMDgzNWU3ZjZhMjU3MDdj
ODQzNDE3NzA1MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtNDQ2LDE3ICs0NDYsMTYgQEAg
c3RhdGljIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhib29s
IGlzVmVydGljYWxMaW5lLCBmbG9hdAogCiBuYW1lc3BhY2UgU3RhdGUgewogCi12b2lkIHNldFN0
cm9rZVRoaWNrbmVzcyhHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBmbG9h
dCBzdHJva2VUaGlja25lc3MpCit2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhjYWlyb190KiBjciBw
bGF0Zm9ybUNvbnRleHQsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKIHsKLSAgICBjYWlyb19zZXRf
bGluZV93aWR0aChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBj
YWlyb19zZXRfbGluZV93aWR0aChjciwgc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBzZXRT
dHJva2VTdHlsZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSkKK3ZvaWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCogY3IsIFN0cm9r
ZVN0eWxlIHN0cm9rZVN0eWxlKQogewogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGFzaFBhdHRl
cm5bXSA9IHsgNS4wLCA1LjAgfTsKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRvdFBhdHRlcm5b
XSA9IHsgMS4wLCAxLjAgfTsKIAotICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNy
KCk7CiAgICAgc3dpdGNoIChzdHJva2VTdHlsZSkgewogICAgIGNhc2UgTm9TdHJva2U6CiAgICAg
ICAgIC8vIEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgd2F5IHRvIGVtdWxhdGUgTm9TdHJva2U/CkBA
IC00NzcsMjkgKzQ3NiwyOSBAQCB2b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eQogICAgIH0KIH0KIAot
dm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQordm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oY2Fpcm9fdCogY3IsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsK
LSAgICBjYWlyb19zZXRfb3BlcmF0b3IocGxhdGZvcm1Db250ZXh0LmNyKCksIHRvQ2Fpcm9PcGVy
YXRvcihjb21wb3NpdGVPcGVyYXRpb24sIGJsZW5kTW9kZSkpOworICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjciwgdG9DYWlyb09wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7
CiB9CiAKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0
Zm9ybUNvbnRleHQsIGJvb2wgZW5hYmxlKQordm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoY2Fpcm9f
dCogY3IsIGJvb2wgZW5hYmxlKQogewogICAgIC8vIFdoZW4gdHJ1ZSwgdXNlIHRoZSBkZWZhdWx0
IENhaXJvIGJhY2tlbmQgYW50aWFsaWFzIG1vZGUgKHVzdWFsbHkgdGhpcwogICAgIC8vIGVuYWJs
ZXMgc3RhbmRhcmQgJ2dyYXlzY2FsZScgYW50aWFsaWFzaW5nKTsgZmFsc2UgdG8gZXhwbGljaXRs
eSBkaXNhYmxlCiAgICAgLy8gYW50aWFsaWFzaW5nLgotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMo
cGxhdGZvcm1Db250ZXh0LmNyKCksIGVuYWJsZSA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDog
Q0FJUk9fQU5USUFMSUFTX05PTkUpOworICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY3IsIGVuYWJs
ZSA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05PTkUpOwogfQog
Ci12b2lkIHNldENUTShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqIGNyLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKICAgICBjb25zdCBjYWlyb19tYXRy
aXhfdCBtYXRyaXggPSB0b0NhaXJvTWF0cml4KHRyYW5zZm9ybSk7Ci0gICAgY2Fpcm9fc2V0X21h
dHJpeChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgJm1hdHJpeCk7CisgICAgY2Fpcm9fc2V0X21hdHJp
eChjciwgJm1hdHJpeCk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9f
dCogY3IpCiB7CiAgICAgY2Fpcm9fbWF0cml4X3QgbTsKLSAgICBjYWlyb19nZXRfbWF0cml4KHBs
YXRmb3JtQ29udGV4dC5jcigpLCAmbSk7CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwog
ICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0obS54eCwgbS55eCwgbS54eSwgbS55eSwgbS54MCwg
bS55MCk7CiB9CiAKQEAgLTYyMiw3ICs2MjEsNyBAQCBib29sIFNoYWRvd1N0YXRlOjppc1JlcXVp
cmVkKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpIGNvbnN0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxh
dGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxpbmVDYXApCit2b2lkIHNldExpbmVDYXAoY2Fpcm9fdCog
Y3IsIExpbmVDYXAgbGluZUNhcCkKIHsKICAgICBjYWlyb19saW5lX2NhcF90IGNhaXJvQ2FwIHsg
fTsKICAgICBzd2l0Y2ggKGxpbmVDYXApIHsKQEAgLTYzNiwxOCArNjM1LDE4IEBAIHZvaWQgc2V0
TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxp
bmVDYXApCiAgICAgICAgIGNhaXJvQ2FwID0gQ0FJUk9fTElORV9DQVBfU1FVQVJFOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xpbmVfY2FwKHBsYXRmb3JtQ29udGV4dC5j
cigpLCBjYWlyb0NhcCk7CisgICAgY2Fpcm9fc2V0X2xpbmVfY2FwKGNyLCBjYWlyb0NhcCk7CiB9
CiAKLXZvaWQgc2V0TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIHNldExp
bmVEYXNoKGNhaXJvX3QqIGNyLCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9m
ZnNldCkKIHsKICAgICBpZiAoc3RkOjphbGxfb2YoZGFzaGVzLmJlZ2luKCksIGRhc2hlcy5lbmQo
KSwgW10oYXV0byYgZGFzaCkgeyByZXR1cm4gIWRhc2g7IH0pKQotICAgICAgICBjYWlyb19zZXRf
ZGFzaChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgMCwgMCwgMCk7CisgICAgICAgIGNhaXJvX3NldF9k
YXNoKGNyLCAwLCAwLCAwKTsKICAgICBlbHNlCi0gICAgICAgIGNhaXJvX3NldF9kYXNoKHBsYXRm
b3JtQ29udGV4dC5jcigpLCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0
KTsKKyAgICAgICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXpl
KCksIGRhc2hPZmZzZXQpOwogfQogCi12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVKb2luIGxpbmVKb2luKQordm9pZCBzZXRMaW5lSm9p
bihjYWlyb190KiBjciwgTGluZUpvaW4gbGluZUpvaW4pCiB7CiAgICAgY2Fpcm9fbGluZV9qb2lu
X3QgY2Fpcm9Kb2luIHsgfTsKICAgICBzd2l0Y2ggKGxpbmVKb2luKSB7CkBAIC02NjEsMTIgKzY2
MCwxMiBAQCB2b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIExpbmVKb2luIGxpbmVKb2luKQogICAgICAgICBjYWlyb0pvaW4gPSBDQUlST19MSU5F
X0pPSU5fQkVWRUw7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYWlyb19zZXRfbGluZV9q
b2luKHBsYXRmb3JtQ29udGV4dC5jcigpLCBjYWlyb0pvaW4pOworICAgIGNhaXJvX3NldF9saW5l
X2pvaW4oY3IsIGNhaXJvSm9pbik7CiB9CiAKLXZvaWQgc2V0TWl0ZXJMaW1pdChHcmFwaGljc0Nv
bnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCBtaXRlckxpbWl0KQordm9pZCBzZXRN
aXRlckxpbWl0KGNhaXJvX3QqIGNyLCBmbG9hdCBtaXRlckxpbWl0KQogewotICAgIGNhaXJvX3Nl
dF9taXRlcl9saW1pdChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgbWl0ZXJMaW1pdCk7CisgICAgY2Fp
cm9fc2V0X21pdGVyX2xpbWl0KGNyLCBtaXRlckxpbWl0KTsKIH0KIAogdm9pZCBmaWxsUmVjdChH
cmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFk
b3dTdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKaW5kZXggNTQ5ODU2M2NlNDljMTVlMzVkMDgyNTljMmQy
NmRjN2IxN2NlYTg4NS4uODdlY2MyMDU4ZDRhNzVkMzNkZGQyMTJlZDg4NzdlOGQzYThhNzhlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9P
cGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmgKQEAgLTU0LDE0ICs1NCwxNCBAQCBuYW1lc3BhY2UgQ2Fpcm8gewog
CiBuYW1lc3BhY2UgU3RhdGUgewogCi12b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhHcmFwaGljc0Nv
bnRleHRDYWlybyYsIGZsb2F0KTsKLXZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mLCBTdHJva2VTdHlsZSk7Cit2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhjYWlyb190Kiwg
ZmxvYXQpOwordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiwgU3Ryb2tlU3R5bGUpOwogCi12
b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwotdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mLCBib29sKTsKK3ZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNhaXJvX3Qq
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKK3ZvaWQgc2V0U2hvdWxkQW50aWFsaWFz
KGNhaXJvX3QqLCBib29sKTsKIAotdm9pZCBzZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mKTsKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKTsKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCopOwogCiBJbnRSZWN0IGdldENs
aXBCb3VuZHMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mKTsKIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNl
UGl4ZWxzKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0Jik7CkBAIC0xMjUs
MTAgKzEyNSwxMCBAQCBzdHJ1Y3QgU2hhZG93U3RhdGUgewogICAgIENvbXBvc2l0ZU9wZXJhdG9y
IGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIg
fTsKIH07CiAKLXZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYsIExpbmVDYXAp
Owotdm9pZCBzZXRMaW5lRGFzaChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IERhc2hBcnJh
eSYsIGZsb2F0KTsKLXZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5l
Sm9pbik7Ci12b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBmbG9hdCk7
Cit2b2lkIHNldExpbmVDYXAoY2Fpcm9fdCosIExpbmVDYXApOwordm9pZCBzZXRMaW5lRGFzaChj
YWlyb190KiwgY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpOwordm9pZCBzZXRMaW5lSm9pbihjYWly
b190KiwgTGluZUpvaW4pOwordm9pZCBzZXRNaXRlckxpbWl0KGNhaXJvX3QqLCBmbG9hdCk7CiAK
IHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKIHZvaWQgZmlsbFJlY3QoR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0
IFNoYWRvd1N0YXRlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYzMyMzA0
NDUzNTFiMDNmMmFhODczNmFlZTJiY2U3OGJjNDM2MWY0OS4uODQwZDFkNGUwZTI1OWUzY2YyODYw
MzkyNGQ5MGFmM2VhZmI1YzhiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAt
ODYsMTAgKzg2LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250
ZXh0KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkg
Y29uc3QKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUo
KSBjb25zdAogewotICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU2NhbGUpOwotICAgIHJldHVybiBD
YWlybzo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBDYWly
bzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9
CiAKIEdyYXBoaWNzQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRDYWlybzo6cGxhdGZvcm1D
b250ZXh0KCkgY29uc3QKQEAgLTEzNCw1MyArMTMzLDExMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpyZXN0b3JlKCkKICAgICBjYWlyb19yZXN0b3JlKG1fY3IuZ2V0KCkpOwogfQogCi0v
LyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRl
Q2hhbmdlcygpCiB7Ci0gICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywgcmVjdCwgYm9y
ZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChhdXRvIGNoYW5nZSA6IHN0YXRlKCkuY2hhbmdlcygpKSB7CisgICAgICAg
IHN3aXRjaCAoY2hhbmdlKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6Q1RNOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0obV9jci5nZXQoKSwg
c3RhdGUoKS5nZXRDVE0oKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgICAg
IENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fY3IuZ2V0KCksIHN0ZDo6bWF4KHN0
YXRlKCkuc3Ryb2tlVGhpY2tuZXNzKCksIDAuZikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZToKKyAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9jci5nZXQoKSwgc3RhdGUo
KS5zdHJva2VTdHlsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcDoKKyAgICAgICAgICAgIENhaXJvOjpz
ZXRMaW5lQ2FwKG1fY3IuZ2V0KCksIHN0YXRlKCkubGluZUNhcCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpv
aW46CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZUpvaW4obV9jci5nZXQoKSwgc3RhdGUoKS5s
aW5lSm9pbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2g6CisgICAgICAgICAgICBDYWlybzo6c2V0TGlu
ZURhc2gobV9jci5nZXQoKSwgc3RhdGUoKS5saW5lRGFzaCgpLmRhc2hlcywgc3RhdGUoKS5saW5l
RGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQ6CisgICAgICAgICAgICBDYWlybzo6
c2V0TWl0ZXJMaW1pdChtX2NyLmdldCgpLCBzdGF0ZSgpLm1pdGVyTGltaXQoKSk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkNvbXBvc2l0ZU1vZGU6CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihtX2NyLmdldCgpLCBzdGF0ZSgpLmNvbXBvc2l0ZU1vZGUoKS5vcCwgc3RhdGUoKS5j
b21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdzoKKyAgICAgICAg
ICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgICAgICAgICAgICAg
IC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRo
IGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAgICAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhl
IGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCisg
ICAgICAgICAgICAgICAgYXV0byBkcm9wU2hhZG93ID0gdGhpcy0+ZHJvcFNoYWRvdygpOworICAg
ICAgICAgICAgICAgIGRyb3BTaGFkb3cub2Zmc2V0ID0geyBkcm9wU2hhZG93Lm9mZnNldC53aWR0
aCgpLCAtZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkgfTsKKyAgICAgICAgICAgICAgICBzZXRE
cm9wU2hhZG93KGRyb3BTaGFkb3cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRp
YWxpYXM6CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX2Ny
LmdldCgpLCBzdGF0ZSgpLnNob3VsZEFudGlhbGlhcygpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UGxhdGZvcm1J
bWFnZSgqdGhpcywgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwg
c3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0
YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgQ2Fpcm86OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoKnRoaXMsIG9wYWNpdHkpOwogfQogCi0vLyBUaGlzIGlzIG9ubHkgdXNl
ZCB0byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNob3VsZCBub3QgZHJhdyBzaGFkb3dzLgotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2Up
Ci0gICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxh
eWVyKCk7CisgICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCp0aGlzKTsKK30KIAotICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMs
IHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAgICBDYWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7CiB9
CiAKLS8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xl
cyB1c2VkIGluIGxpc3RzLgotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqdGhpcywgcmVjdCwg
c3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRo
LCBjbGlwUnVsZSk7CisgICAgQ2Fpcm86OmNsaXBQYXRoKCp0aGlzLCBwYXRoLCBjbGlwUnVsZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBD
YWlybzo6Y2xpcE91dCgqdGhpcywgcmVjdCk7Cit9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIENhaXJvOjpjbGlw
T3V0KCp0aGlzLCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCkKIHsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
YXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpKQorICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnRoaXMsIG5hdGl2ZUlt
YWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0KTsKK30KIAotICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6c3Ryb2tlUGF0aCgqdGhpcywgcGF0aCwg
Q2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBDYWlybzo6Y2xlYXJSZWN0KCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjE2
LDEyMyArMjcyLDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDCiAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9k
ZTo6Tm9ybWFsKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsaXAoKnRoaXMsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSBjbGlwUnVsZSkKLXsKLSAgICBDYWlybzo6Y2xpcFBhdGgoKnRoaXMsIHBhdGgsIGNsaXBS
dWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcygqcGxhdGZvcm1D
b250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQotewot
ICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywg
bmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSNpZiBQTEFU
Rk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKLSAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMo
KnRoaXMsIHBhdGgsIGNvbG9yKTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNF
RF9QQVJBTShvZmZzZXQpOwotICAgIHJldHVybjsKLSNlbHNlCi0gICAgQ2Fpcm86OmRyYXdGb2N1
c1JpbmcoKnRoaXMsIHBhdGgsIHdpZHRoLCBjb2xvcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0jaWYgUExBVEZPUk0oV1BFKSB8
fCBQTEFURk9STShHVEspCi0gICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCByZWN0
cywgY29sb3IpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9m
ZnNldCk7Ci0gICAgcmV0dXJuOwotI2Vsc2UKLSAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqdGhp
cywgcmVjdHMsIHdpZHRoLCBjb2xvcik7Ci0jZW5kaWYKKyAgICBDYWlybzo6ZmlsbFJvdW5kZWRS
ZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCisgICAgaWYgKCFj
b2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9y
VGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5k
ZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBDYWlybzo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQotewotICAgIFVOVVNFRF9QQVJBTShyb3VuZGlu
Z01vZGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnRo
aXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDYWlybzo6dHJhbnNsYXRlKCp0aGlzLCB4LCB5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcygqdGhpcywgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRTdHJva2VTdHlsZSgqdGhpcywgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBp
ZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5p
bmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNl
IENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1
dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG1fc3Rh
dGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5o
ZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9y
LCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91
bGRBbnRpYWxpYXMoKnRoaXMsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLXsKLSAgICBDYWlybzo6Y29uY2F0Q1RNKCp0aGlzLCB0cmFuc2Zvcm0pOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7
Ci19CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIob3BhY2l0eSk7Ci0gICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMs
IG9wYWNpdHkpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fp
cm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBH
cmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgQ2Fpcm86OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCp0aGlzKTsKLX0KKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xlYXJSZWN0KCp0aGlzLCByZWN0KTsK
KyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OmZpbGxQYXRoKCp0
aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQpAQCAtMzQxLDU4ICszMDEsNjggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwg
bGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVDYXAoTGlu
ZUNhcCBsaW5lQ2FwKQotewotICAgIENhaXJvOjpzZXRMaW5lQ2FwKCp0aGlzLCBsaW5lQ2FwKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNo
KCp0aGlzLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lSm9p
bihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBDYWlybzo6c2V0TGluZUpvaW4oKnRoaXMsIGxp
bmVKb2luKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0
cm9rZVBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0
TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKKy8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRo
IGEgc3Ryb2tlZCBib3JkZXIuCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBDYWly
bzo6c2V0TWl0ZXJMaW1pdCgqdGhpcywgbWl0ZXIpOworICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5
KCkpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZHJhd1Jl
Y3QoKnRoaXMsIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCisvLyBUaGlzIGlzIG9ubHkgdXNlZCB0
byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNob3VsZCBub3QgZHJhdyBzaGFkb3dzLgordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHBhdGgp
OwotfQorICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQorICAgICAgICByZXR1cm47
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdGF0ZShmbG9hdCByYWRpYW5zKQotewot
ICAgIENhaXJvOjpyb3RhdGUoKnRoaXMsIHJhZGlhbnMpOworICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMsIHBvaW50MSwgcG9pbnQyLCBz
dGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorLy8gVGhpcyBtZXRob2QgaXMgb25seSB1
c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgQ2Fpcm86OnNjYWxlKCp0aGlzLCBzaXplKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCp0aGlzLCByZWN0LCBzdGF0ZS5maWxsQ29s
b3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcmVjdCk7CisjaWYgUExBVEZP
Uk0oV1BFKSB8fCBQTEFURk9STShHVEspCisgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0
aGlzLCBwYXRoLCBjb2xvcik7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURf
UEFSQU0ob2Zmc2V0KTsKKyAgICByZXR1cm47CisjZWxzZQorICAgIENhaXJvOjpkcmF3Rm9jdXNS
aW5nKCp0aGlzLCBwYXRoLCB3aWR0aCwgY29sb3IpOworI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBDYWlybzo6ZmlsbFJv
dW5kZWRSZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkp
KTsKKyNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKKyAgICBUaGVtZUFkd2FpdGE6
OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRo
KTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICByZXR1cm47CisjZWxzZQorICAgIENh
aXJvOjpkcmF3Rm9jdXNSaW5nKCp0aGlzLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKKyNlbmRpZgog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIWNvbG9yLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwotICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRl
ZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqdGhpcywgbmF0aXZlSW1hZ2Uu
cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpAQCAtNDA0LDExICszNzQs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdAogICAgIENhaXJvOjpkcmF3UGF0dGVybigqdGhp
cywgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBuYXRpdmVJbWFnZS5zaXplKCks
IGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwog
fQogCi1SZW5kZXJpbmdNb2RlIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgq
cGxhdGZvcm1Db250ZXh0KCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
ZykKIHsKICAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQpAQCAtNDM4LDggKzQw
MywyNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIGZvbnRTbW9vdGhpbmcpOwog
fQogCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQorewor
ICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmRy
YXdMaW5lc0ZvclRleHQoKnRoaXMsIHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcs
IGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tlQ29sb3IpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit7CisgICAgQ2Fpcm86OmRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKnRoaXMsIHJlY3QsIHN0eWxlKTsKK30KKworRmxvYXRS
ZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocm91bmRpbmdNb2RlKTsKKyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKCp0aGlzLCByZWN0KTsKK30KKwogY2Fpcm9fdCogR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNyKCkgY29uc3QKIHsKKyAgICBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dENhaXJvJj4oKnRo
aXMpLmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmV0dXJuIG1fY3IuZ2V0KCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5oCmluZGV4IDU2NDYxYzE1OWE1ODNjODljNjFlOGYwMmU0ZTBi
ZWU3YjA1OTMyZWYuLjQ2MDZkYWZmY2I5M2NhYzM0ZTFjNjFkZTVhNmE1ZGRhNTBjZWQwNzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApAQCAtNTAsNjEgKzUwLDUwIEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogICAgIEdyYXBoaWNzQ29u
dGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZGlk
VXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3Rv
cmUoKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAKLSAgICB2
b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9p
bikgZmluYWw7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICB2b2lk
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7Cisg
ICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91
dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgY2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdDsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWw7Ci0gICAgdm9pZCBm
aWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsKICAgICB2b2lk
IGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworCiAgICAgdm9pZCBmaWxsUGF0aChjb25z
dCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAg
IHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBkcmF3
R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAg
dm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CiAgICAgdm9pZCBk
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7Ci0gICAg
dm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKKwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZs
b2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsK
LQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByb3Rh
dGUoZmxvYXQpIGZpbmFsOwotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7Ci0gICAg
dm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIGNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVu
Y3lMYXllcigpIGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwg
Y29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwogCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQg
Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3Qg
UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBm
aW5hbDsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAg
dm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBi
b29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5h
bDsKIAogICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE4NTZhMDQzOTNmZDI0ZTk2MjhmNmZlOTM0NjllZWJlYTRhYmI1OTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0Nv
bnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7Citw
dWJsaWM6CisgICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwgYm9v
bCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKKyAgICB7CisgICAgICAg
IGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSht
X2NvbnRleHQpOworICAgIH0KKyAgICAKKyAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCisgICAg
eworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4
dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7
CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nh
dmVBbmRSZXN0b3JlKTsKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQp
OworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJv
b2wgZGlkU2F2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9y
ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7Cisg
ICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDMyNDVjNjAwNDMxNTUy
ZDUxM2I3NGVlYmMwOWYzMThlZWMzZGQ3MmEuLmJmODBlNjRkMWZmMzNlYzk1YzI3Njc5NmJhMmI5
NmZkYmY5YmM0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0xODUsMTQgKzE4NSwxMyBAQCBzdGF0aWMgdm9pZCBzZXRDR0Js
ZW5kTW9kZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZQogfQogCiBHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRHZXRDbGlwQm91
bmRpbmdCb3goY2dDb250ZXh0KSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmluaXRpYWxDaGFuZ2VG
bGFncywgQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCkpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoY2dDb250ZXh0KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3Rh
cnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UgfSk7Ci0gICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0g
Y29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5
KHBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShj
b3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSkpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6On5H
cmFwaGljc0NvbnRleHRDRygpCkBAIC0yMDYsNiArMjA1LDE0IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB9CiAKIENHQ29udGV4dFJlZiBHcmFw
aGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICAvLyBTb21lIGNh
bGxlcnMgdG8gdGhpcyBtZXRob2QgdXNlcyB0aGUgcGxhdGZvcm0gY29udGV4dCBvdXRzaWRlIHRo
ZSBzY29wZQorICAgIC8vIG9mIHRoaXMgY2xhc3MuIENvbW1pdCBhbnkgY2hhbmdlcyBiZWZvcmUg
cmV0dXJuaW5nIHRoZSBwbGF0Zm9ybSBjb250ZXh0LgorICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3ND
b250ZXh0Q0cmPigqdGhpcykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1cm4gaW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQoKTsKK30KKworQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENH
OjppbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZGF0YS0+
bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwpAQCAt
Mzk2LDcgKzQwMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgQ0dDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29u
dGV4dCwgZGVzdFJlY3QpOwogCi0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRl
TW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9
KTsKIAogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBkZXN0UmVjdC54KCksIGRl
c3RSZWN0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShj
b250ZXh0LCAxLCAtMSk7CkBAIC01NTUsMTMgKzU2MiwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4pCisgICAgaWYgKCFzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNl
Q1RNKGNnQ29udGV4dCkpOwogCi0gICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4gPSBtX3N0YXRlLnN0
cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKKyAgICBh
dXRvIHBsYXRmb3JtUGF0dGVybiA9IHN0cm9rZVBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0
ZXJuKHVzZXJUb0Jhc2VDVE0pOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTU3NCwxMyArNTgxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFw
cGx5U3Ryb2tlUGF0dGVybigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBh
dHRlcm4oKQogewotICAgIGlmICghbV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoIWZpbGxQ
YXR0ZXJuKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9
IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCi0gICAgYXV0
byBwbGF0Zm9ybVBhdHRlcm4gPSBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4odXNlclRvQmFzZUNUTSk7CisgICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4gPSBmaWxsUGF0
dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CiAgICAgaWYgKCFw
bGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApAQCAtNTkxLDExICs1OTgsMTEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVybigpCiAgICAgQ0dDb250ZXh0
U2V0RmlsbFBhdHRlcm4oY2dDb250ZXh0LCBwbGF0Zm9ybVBhdHRlcm4uZ2V0KCksICZwYXR0ZXJu
QWxwaGEpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDR1BhdGhEcmF3aW5nTW9kZSYgbW9kZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIENHUGF0aERyYXdpbmdNb2RlJiBtb2RlKQogewotICAgIGJvb2wgc2hv
dWxkRmlsbCA9IHN0YXRlLmZpbGxQYXR0ZXJuIHx8IHN0YXRlLmZpbGxDb2xvci5pc1Zpc2libGUo
KTsKLSAgICBib29sIHNob3VsZFN0cm9rZSA9IHN0YXRlLnN0cm9rZVBhdHRlcm4gfHwgKHN0YXRl
LnN0cm9rZVN0eWxlICE9IE5vU3Ryb2tlICYmIHN0YXRlLnN0cm9rZUNvbG9yLmlzVmlzaWJsZSgp
KTsKLSAgICBib29sIHVzZUVPRmlsbCA9IHN0YXRlLmZpbGxSdWxlID09IFdpbmRSdWxlOjpFdmVu
T2RkOworICAgIGJvb2wgc2hvdWxkRmlsbCA9IGNvbnRleHQuZmlsbFBhdHRlcm4oKSB8fCBjb250
ZXh0LmZpbGxDb2xvcigpLmlzVmlzaWJsZSgpOworICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gY29u
dGV4dC5zdHJva2VQYXR0ZXJuKCkgfHwgKGNvbnRleHQuc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9r
ZSAmJiBjb250ZXh0LnN0cm9rZUNvbG9yKCkuaXNWaXNpYmxlKCkpOworICAgIGJvb2wgdXNlRU9G
aWxsID0gY29udGV4dC5maWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkOwogCiAgICAgaWYg
KHNob3VsZEZpbGwpIHsKICAgICAgICAgaWYgKHNob3VsZFN0cm9rZSkgewpAQCAtNjI0LDkgKzYz
MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7Ci0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKIAotICAgIGlmIChzdGF0ZS5maWxsR3JhZGllbnQgfHwgc3RhdGUuc3Ryb2tlR3JhZGllbnQp
IHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkgfHwgc3Ryb2tlR3JhZGllbnQoKSkgewogICAgICAg
ICAvLyBXZSBkb24ndCBoYXZlIGFueSBvcHRpbWl6ZWQgd2F5IHRvIGZpbGwgJiBzdHJva2UgYSBw
YXRoIHVzaW5nIGdyYWRpZW50cwogICAgICAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0
aGlzLgogICAgICAgICBmaWxsUGF0aChwYXRoKTsKQEAgLTYzNCwxMyArNjQwLDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKGZpbGxQ
YXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICBpZiAoc3RhdGUuc3Ry
b2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBseVN0cm9r
ZVBhdHRlcm4oKTsKIAogICAgIENHUGF0aERyYXdpbmdNb2RlIGRyYXdpbmdNb2RlOwotICAgIGlm
IChjYWxjdWxhdGVEcmF3aW5nTW9kZShzdGF0ZSwgZHJhd2luZ01vZGUpKSB7CisgICAgaWYgKGNh
bGN1bGF0ZURyYXdpbmdNb2RlKCp0aGlzLCBkcmF3aW5nTW9kZSkpIHsKICNpZiBIQVZFKENHX0NP
TlRFWFRfRFJBV19QQVRIX0RJUkVDVCkKICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGhEaXJlY3Qo
Y29udGV4dCwgZHJhd2luZ01vZGUsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51bGxwdHIpOwogI2Vs
c2UKQEAgLTY1OCw3ICs2NjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgeworICAgIGlmIChmaWxs
R3JhZGllbnQoKSkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIEZs
b2F0UmVjdCByZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CiAgICAgICAgICAgICBGbG9h
dFNpemUgbGF5ZXJTaXplID0gZ2V0Q1RNKCkubWFwU2l6ZShyZWN0LnNpemUoKSk7CkBAIC02NzAs
MzMgKzY3NiwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGxheWVyQ29udGV4dCwg
LXJlY3QueCgpLCAtcmVjdC55KCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGxh
eWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGxheWVyQ29udGV4dCwg
cGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5
ZXJDb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgp
KTsKIAogICAgICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQpCiAg
ICAgICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGxheWVyQ29udGV4dCk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNvbnRleHQpOwogCi0g
ICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAg
ICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogICAgICAgICAg
ICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxheWVyLmdldCgpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0
KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBh
dGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5maWxs
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0o
Y29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgICAgICAgICBpZiAoZmlsbFJ1
bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAgICAgICBDR0NvbnRleHRFT0Ns
aXAoY29udGV4dCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0
Q2xpcChjb250ZXh0KTsKIAotICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50
KCp0aGlzKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAg
ICAgIH0KIAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUuZmlsbFBh
dHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4o
KTsKICNpZiBIQVZFKENHX0NPTlRFWFRfRFJBV19QQVRIX0RJUkVDVCkKICAgICBDR0NvbnRleHRE
cmF3UGF0aERpcmVjdChjb250ZXh0LCBmaWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkID8g
a0NHUGF0aEVPRmlsbCA6IGtDR1BhdGhGaWxsLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCBudWxscHRy
KTsKQEAgLTcxNyw3ICs3MjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICBpZiAo
c3Ryb2tlR3JhZGllbnQoKSkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAg
ICAgIEZsb2F0UmVjdCByZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CiAgICAgICAgICAg
ICBmbG9hdCBsaW5lV2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKQEAgLTc0Miw4ICs3NDgsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAg
ICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGxheWVyQ29udGV4dCwgcGF0aC5wbGF0Zm9ybVBh
dGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChs
YXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNvbnRleHQpOwot
ICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRD
VE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0
cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAKICAgICAgICAgICAgIGZsb2F0
IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0LngoKSAtIGxpbmVXaWR0aCk7CiAgICAgICAgICAg
ICBmbG9hdCBkZXN0aW5hdGlvblkgPSByb3VuZGYocmVjdC55KCkgLSBsaW5lV2lkdGgpOwpAQCAt
NzU0LDEzICs3NjAsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRo
LnBsYXRmb3JtUGF0aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0
cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsK
LSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVu
dC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+
cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAg
ICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwogCiAjaWYgVVNFKENHX0NPTlRFWFRfU1RST0tFX0xJ
TkVfU0VHTUVOVFNfV0hFTl9TVFJPS0lOR19QQVRIKQpAQCAtNzg1LDcgKzc5MSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG1f
c3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgpKSB7CiAgICAgICAg
IENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICAgICAgaWYgKGhh
c1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFNpemUgbGF5ZXJTaXplID0gZ2V0Q1RNKCku
bWFwU2l6ZShyZWN0LnNpemUoKSk7CkBAIC03OTgsMjcgKzgwNCwyNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgICAgICBD
R0NvbnRleHRBZGRSZWN0KGxheWVyQ29udGV4dCwgcmVjdCk7CiAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGxheWVyQ29udGV4dCk7CiAKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShs
YXllckNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAg
ICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKICAg
ICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckluUmVjdChjb250ZXh0LCByZWN0LCBsYXllci5n
ZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0
KGNvbnRleHQsIHJlY3QpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0
ZS5maWxsR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNh
dENUTShjb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBmaWxsR3Jh
ZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkK
ICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogCiAgICAgYm9vbCBkcmF3T3duU2hhZG93ID0g
Y2FuVXNlU2hhZG93Qmx1cigpOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAg
ICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRo
Q29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBDR0Nv
bnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAg
ICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
KTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywgRmxvYXRSb3Vu
ZGVkUmVjdChyZWN0KSk7CiAgICAgfQogCkBAIC04MzcsOSArODQzLDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdP
d25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2Zm
IENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9y
bUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBj
b250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3Qp
KTsKICAgICB9CiAKQEAgLTg1Miw3ICs4NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAg
ICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAg
ICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CkBAIC04NjQsOSArODcwLDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAg
ICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dX
aXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBD
R0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAK
LSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFk
b3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywgcmVjdCk7
CiAgICAgfQogCkBAIC04NzQsNyArODgwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAg
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSA9IHJlY3QucmFkaWkoKTsKICAg
ICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExlZnQoKS53aWR0aCgpID09IHJhZGlpLnRv
cFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdodCgpLndpZHRoKCkgPT0gcmFkaWkuYm90
dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgPT0gcmFkaWku
Ym90dG9tUmlnaHQoKS53aWR0aCgpKTsKICAgICBib29sIGVxdWFsSGVpZ2h0cyA9IChyYWRpaS50
b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgpICYmIHJhZGlp
LmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50b3BSaWdodCgpLmhlaWdodCgpICYmIHJh
ZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS5oZWlnaHQoKSk7
Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gbV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0
ZS5maWxsUGF0dGVybjsKKyAgICBib29sIGhhc0N1c3RvbUZpbGwgPSBmaWxsR3JhZGllbnQoKSB8
fCBmaWxsUGF0dGVybigpOwogICAgIGlmICghaGFzQ3VzdG9tRmlsbCAmJiBlcXVhbFdpZHRocyAm
JiBlcXVhbEhlaWdodHMgJiYgcmFkaWkudG9wTGVmdCgpLndpZHRoKCkgKiAyID09IHIud2lkdGgo
KSAmJiByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKiAyID09IHIuaGVpZ2h0KCkpCiAgICAgICAg
IENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0KGNvbnRleHQsIHIpOwogICAgIGVsc2UgewpAQCAt
OTEzLDkgKzkxOSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvCiAgICAgQ0dDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3
T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywg
MCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1Np
emVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0
ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdJbnNldFNo
YWRvdygqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0KTsKICAgICB9CiAKQEAgLTkzMCw2ICs5
MzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsbwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNs
aXAocmVjdCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCk7CiAgICAgbV9kYXRhLT5jbGlwKHJlY3QpOwogfQpAQCAtOTQwLDMxICs5NDcsMzUgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
Ly8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUg
dXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8vIGhhcyBjZXJ0YWlu
IHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFu
ZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUzPgogICAgIC8vIHdlIGNhbm5vdCB1c2Ug
aXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRoZXIuCisgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0
bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRH
ZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVuZGVy
aW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYm
ICFjdG0uYygpKSk7Ci0gICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0
ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3Jt
Q29udGV4dCgpKSwgcmVjdCB9OwotICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdHMocGxhdGZvcm1Db250ZXh0KCksIHJlY3RzLCAy
KTsKLSAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOworICAgIGJvb2wgY2Fu
VXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKGNvbnRleHQpICE9IGtDR0NvbnRl
eHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsKKyAgICBDR1JlY3QgcmVjdHNbMl0gPSB7
IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0SW5maW5pdGUgOiBDR0NvbnRleHRHZXRDbGlw
Qm91bmRpbmdCb3goY29udGV4dCksIHJlY3QgfTsKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29u
dGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdHMoY29udGV4dCwgcmVjdHMsIDIpOworICAgIENH
Q29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xp
cE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9y
bUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgQ0dD
b250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRCZWdpblBh
dGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCBDR0NvbnRleHRHZXRD
bGlwQm91bmRpbmdCb3goY29udGV4dCkpOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCi0gICAg
ICAgIENHQ29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRo
KCkpOwotICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgICAgIENH
Q29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisgICAgQ0dDb250
ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0
aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKKwogICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdFplcm8pOwogICAgIGVsc2Ugewot
ICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBD
R0NvbnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsK
KyAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgICAgICBDR0NvbnRleHRB
ZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogCiAgICAgICAgIGlmIChjbGlw
UnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChj
b250ZXh0KTsKQEAgLTk3NSwxMSArOTg2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgbV9kYXRhLT5j
bGlwKHBhdGgpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpjbGlwQm91bmRzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChDR0NvbnRleHRHZXRDbGlwQm91
bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAgIEdyYXBoaWNz
Q29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKQEAgLTEwMDIsMTcgKzEw
MDgsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQog
ICAgIHJlc3RvcmUoKTsKIH0KIAotc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJv
dW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zm
c2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQorc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3Jr
YXJvdW5kSWZOZWVkZWQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHRmxvYXQmIHhPZmZzZXQsIENH
RmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0o
V0lOKQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKICAgICBVTlVTRURfUEFSQU0oeE9mZnNl
dCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAoY29udGV4dC5y
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cyhj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICBpZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29y
cmVjdFNoYWRvd09mZnNldHMoY29udGV4dCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdv
cmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81NTM5Mzg4PiBieSBlbnN1cmluZyB0aGF0IHRoZSBv
ZmZzZXRzIHdpbGwgZ2V0IHRydW5jYXRlZApAQCAtMTAzMCwxMCArMTAzMyw1NSBAQCBzdGF0aWMg
dm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgdm9pZCBzZXRDR0xp
bmVDYXAoQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVDYXAgY2FwKQogewotICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIHN3
aXRjaCAoY2FwKSB7CisgICAgY2FzZSBMaW5lQ2FwOjpCdXR0OgorICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBCdXR0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBMaW5lQ2FwOjpSb3VuZDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChjb250ZXh0
LCBrQ0dMaW5lQ2FwUm91bmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExpbmVDYXA6OlNx
dWFyZToKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChjb250ZXh0LCBrQ0dMaW5lQ2FwU3F1
YXJlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQogCitzdGF0aWMgdm9pZCBzZXRDR0xpbmVK
b2luKENHQ29udGV4dFJlZiBjb250ZXh0LCBMaW5lSm9pbiBqb2luKQoreworICAgIHN3aXRjaCAo
am9pbikgeworICAgIGNhc2UgTGluZUpvaW46Ok1pdGVyOgorICAgICAgICBDR0NvbnRleHRTZXRM
aW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pbk1pdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBMaW5lSm9pbjo6Um91bmQ6CisgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKGNvbnRl
eHQsIGtDR0xpbmVKb2luUm91bmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExpbmVKb2lu
OjpCZXZlbDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4dCwga0NHTGluZUpv
aW5CZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0Q0dN
aXRlckxpbWl0KENHQ29udGV4dFJlZiBjb250ZXh0LCBmbG9hdCBsaW1pdCkKK3sKKyAgICBDR0Nv
bnRleHRTZXRNaXRlckxpbWl0KGNvbnRleHQsIGxpbWl0KTsKK30KKworc3RhdGljIHZvaWQgc2V0
Q0dMaW5lRGFzaChDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMs
IGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CisgICAgICAg
IGZsb2F0IGxlbmd0aCA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgbGVuZ3RoICs9IHN0YXRpY19jYXN0PGZsb2F0Pihk
YXNoZXNbaV0pOworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICAgICAgZGFzaE9mZnNldCA9
IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsKKyAgICB9CisgICAgQ0dDb250ZXh0
U2V0TGluZURhc2goY29udGV4dCwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNp
emUoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHU2hhZG93KENHQ29udGV4dFJlZiBjb250ZXh0
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpCit7CiAgICAgaWYgKG9mZnNldC5pc1plcm8oKSAmJiAhYmx1cikgewogICAgICAgICBDR0Nv
bnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTEwNDUsNyArMTA5Myw3IEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUm
CiAgICAgQ0dGbG9hdCB5T2Zmc2V0ID0gb2Zmc2V0LmhlaWdodCgpOwogICAgIENHRmxvYXQgYmx1
clJhZGl1cyA9IGJsdXI7CiAKLSAgICBpZiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKSB7CisgICAgaWYgKCFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAg
ICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gZ2V0VXNlclRvQmFzZUNUTShj
b250ZXh0KTsKIAogICAgICAgICBDR0Zsb2F0IEEgPSB1c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9C
YXNlQ1RNLmEgKyB1c2VyVG9CYXNlQ1RNLmIgKiB1c2VyVG9CYXNlQ1RNLmI7CkBAIC0xMDY2LDcg
KzExMTQsOCBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJgogICAgIC8vIEV4dHJlbWUgImJsdXIi
IHZhbHVlcyBjYW4gbWFrZSB0ZXh0IGRyYXdpbmcgY3Jhc2ggb3IgdGFrZSBjcmF6eSBsb25nIHRp
bWVzLCBzbyBjbGFtcAogICAgIGJsdXJSYWRpdXMgPSBzdGQ6Om1pbihibHVyUmFkaXVzLCBuYXJy
b3dQcmVjaXNpb25Ub0NHRmxvYXQoMTAwMC4wKSk7CiAKLSAgICBhcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOworICAg
IGlmIChyZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQorICAgICAg
ICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb250ZXh0LCB4T2Zmc2V0LCB5
T2Zmc2V0KTsKIAogICAgIC8vIENoZWNrIGZvciBhbiBpbnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1l
YW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0IGZvciB0aGUgc2hhZG93CiAgICAgLy8gYW5k
IHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2UgdGhlIGRlZmF1bHQgc2hhZG93IGNvbG9yLgpA
QCAtMTA3Niw0NCArMTEyNSw4MSBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJgogICAgICAgICBD
R0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplTWFrZSh4T2Zmc2V0LCB5
T2Zmc2V0KSwgYmx1clJhZGl1cywgY2FjaGVkQ0dDb2xvcihjb2xvcikuZ2V0KCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZs
YWdzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdGF0ZUNoYW5nZXMoKQogewotICAg
IGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmICghc3RhdGUoKS5jaGFu
Z2VzKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0
U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgMC5m
KSk7CisgICAgYXV0byBjb250ZXh0ID0gaW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKTsKIAotICAg
IGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBj
YWNoZWRDR0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKS5nZXQoKSk7CisgICAgZm9yIChhdXRvIGNo
YW5nZSA6IHN0YXRlKCkuY2hhbmdlcygpKSB7CisgICAgICAgIHN3aXRjaCAoY2hhbmdlKSB7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q1RNOgorICAgICAgICAg
ICAgQ0dDb250ZXh0U2V0Q1RNKGNvbnRleHQsIHN0YXRlKCkuZ2V0Q1RNKCkpOworICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0YXRl
LmZpbGxDb2xvcik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
RmlsbEJydXNoOgorICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUoKS5m
aWxsQnJ1c2goKS5jb2xvcigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIENH
Q29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlLmFscGhhKTsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3M6CisgICAgICAgICAgICBD
R0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3RkOjptYXgoc3RhdGUoKS5zdHJva2VUaGlj
a25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250
YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpCi0gICAgICAgIHNldENH
QmxlbmRNb2RlKGNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1v
ZGUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJy
dXNoOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4
dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZSgpLnN0cm9rZUJydXNoKCkuY29sb3IoKSkuZ2V0KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldFRl
eHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9kZShzdGF0ZS50ZXh0RHJhd2lu
Z01vZGUpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5l
Q2FwOgorICAgICAgICAgICAgc2V0Q0dMaW5lQ2FwKGNvbnRleHQsIHN0YXRlKCkubGluZUNhcCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRT
ZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjoKKyAgICAgICAg
ICAgIHNldENHTGluZUpvaW4oY29udGV4dCwgc3RhdGUoKS5saW5lSm9pbigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNt
b290aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaDoKKyAgICAgICAgICAgIHNl
dENHTGluZURhc2goY29udGV4dCwgc3RhdGUoKS5saW5lRGFzaCgpLmRhc2hlcywgc3RhdGUoKS5s
aW5lRGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNo
YW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQs
IGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkp
OworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQ6
CisgICAgICAgICAgICBzZXRDR01pdGVyTGltaXQoY29udGV4dCwgc3RhdGUoKS5taXRlckxpbWl0
KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCi0gICAgICAgIHNldENHU2hhZG93KCp0aGlz
LCBzdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dD
b2xvcik7Ci19CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29t
cG9zaXRlTW9kZToKKyAgICAgICAgICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQsIHN0YXRlKCku
Y29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbiwgc3RhdGUoKS5jb21wb3NpdGVNb2RlKCkuYmxlbmRN
b2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRN
aXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQocGxh
dGZvcm1Db250ZXh0KCksIGxpbWl0KTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAgICAgICAgc2V0Q0dTaGFkb3coY29udGV4dCwg
cmVuZGVyaW5nTW9kZSgpLCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5vZmZzZXQsIHN0YXRlKCkuZHJv
cFNoYWRvdygpLmJsdXJSYWRpdXMsIHN0YXRlKCkuZHJvcFNoYWRvdygpLmNvbG9yLCBzdGF0ZSgp
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYToKKyAgICAgICAgICAg
IENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlKCkuYWxwaGEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Oklt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHk6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBv
bGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5KHN0YXRlKCkuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlRleHREcmF3aW5nTW9kZToKKyAg
ICAgICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3
aW5nTW9kZShzdGF0ZSgpLnRleHREcmF3aW5nTW9kZSgpKSk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlh
bGlhczoKKyAgICAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBz
dGF0ZSgpLnNob3VsZEFudGlhbGlhcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHM6Cisg
ICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250ZXh0LCBzdGF0ZSgp
LnNob3VsZFNtb290aEZvbnRzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZGlkQXBw
bHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTExMjUsNyArMTIxMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lk
dGgpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAot
ICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKHN0cm9rZUdyYWRpZW50
KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBjb25zdCBmbG9h
dCBkb3VibGVMaW5lV2lkdGggPSBsaW5lV2lkdGggKiAyOwogICAgICAgICAgICAgZmxvYXQgYWRq
dXN0ZWRXaWR0aCA9IGNlaWxmKHJlY3Qud2lkdGgoKSArIGRvdWJsZUxpbmVXaWR0aCk7CkBAIC0x
MTM1LDcgKzEyMjEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICAgICAgYXV0byBsYXll
ciA9IGFkb3B0Q0YoQ0dMYXllckNyZWF0ZVdpdGhDb250ZXh0KGNvbnRleHQsIGxheWVyU2l6ZSwg
MCkpOwogCiAgICAgICAgICAgICBDR0NvbnRleHRSZWYgbGF5ZXJDb250ZXh0ID0gQ0dMYXllckdl
dENvbnRleHQobGF5ZXIuZ2V0KCkpOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VUaGlja25l
c3MgPSBsaW5lV2lkdGg7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgobGF5ZXJD
b250ZXh0LCBsaW5lV2lkdGgpOwogCiAgICAgICAgICAgICAvLyBDb21wZW5zYXRlIGZvciB0aGUg
bGluZSB3aWR0aCwgb3RoZXJ3aXNlIHRoZSBsYXllcidzIHRvcC1sZWZ0IGNvcm5lciB3b3VsZCBi
ZQpAQCAtMTE0OSw4ICsxMjM0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIENH
Q29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENHQ29udGV4
dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBD
R0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRD
VE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwot
ICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsK
KyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIHN0cm9rZVNwYWNl
VHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJD
b250ZXh0KTsKIAogICAgICAgICAgICAgY29uc3QgZmxvYXQgZGVzdGluYXRpb25YID0gcm91bmRm
KHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0
aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0aCk7CkBAIC0xMTYxLDEzICsxMjQ2LDEz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRl
eHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBh
dGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAg
ICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRT
cGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWlu
dCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgc3Ryb2tl
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludCgq
dGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0
YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBw
bHlTdHJva2VQYXR0ZXJuKCk7CiAKICAgICAvLyBVc2luZyBDR0NvbnRleHRBZGRSZWN0IGFuZCBD
R0NvbnRleHRTdHJva2VQYXRoIHRvIHN0cm9rZSByZWN0IHJhdGhlciB0aGFuCkBAIC0xMTgyLDk0
ICsxMjY3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNv
bnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKExpbmVDYXAg
Y2FwKQotewotICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAgY2FzZSBMaW5lQ2FwOjpCdXR0OgotICAg
ICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwQnV0
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6Um91bmQ6Ci0gICAgICAgIENH
Q29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBSb3VuZCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6U3F1YXJlOgotICAgICAgICBDR0NvbnRl
eHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwU3F1YXJlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBpZiAo
ZGFzaE9mZnNldCA8IDApIHsKLSAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBsZW5n
dGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tpXSk7Ci0gICAgICAgIGlmIChsZW5ndGgp
Ci0gICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVu
Z3RoOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwg
ZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0gICAgc3dpdGNo
IChqb2luKSB7Ci0gICAgY2FzZSBMaW5lSm9pbjo6TWl0ZXI6Ci0gICAgICAgIENHQ29udGV4dFNl
dExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pbk1pdGVyKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6Ci0gICAgICAgIENHQ29udGV4dFNldExp
bmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pblJvdW5kKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVK
b2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pbkJldmVsKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzY2FsZShjb25zdCBGbG9hdFNp
emUmIHNpemUpCi17Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9kYXRhLT5zY2FsZShzaXplKTsKLSAg
ICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxz
ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKGZsb2F0IGFuZ2xlKQotewot
ICAgIENHQ29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgYW5nbGUpOwotICAgIG1f
ZGF0YS0+cm90YXRlKGFuZ2xlKTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKLSAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsK
LSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBm
YWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENHQ29udGV4dENvbmNhdENUTShwbGF0Zm9y
bUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0p
OwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9
IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dDb250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29u
dGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7
Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNKEluY2x1ZGVE
ZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIENUTSB1c3VhbGx5
IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0
aGUKLSAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFj
dG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgotICAgIC8vIGxldmVsLiBUbyBndWFyYW50ZWUg
dGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNlIHRoaXMgQ0cgQVBJLgotICAg
IGlmIChpbmNsdWRlU2NhbGUgPT0gRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkKLSAgICAg
ICAgcmV0dXJuIENHQ29udGV4dEdldFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxh
dGZvcm1Db250ZXh0KCkpOwotCi0gICAgcmV0dXJuIENHQ29udGV4dEdldENUTShwbGF0Zm9ybUNv
bnRleHQoKSk7Ci19Ci0KIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUp
CiB7CiAgICAgLy8gSXQgaXMgbm90IGVub3VnaCBqdXN0IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBk
ZXZpY2Ugc3BhY2UuIFRoZSByb3RhdGlvbiBwYXJ0IG9mIHRoZQpAQCAtMTI4MCw3ICsxMjc3LDkg
QEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmcKICAgICBpZiAobV9kYXRhLT5tX3VzZXJUb0Rldmlj
ZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5KQogICAgICAgICByZXR1cm4gcm91bmRlZEludFJl
Y3QocmVjdCk7CiAKLSAgICBDR0FmZmluZVRyYW5zZm9ybSBkZXZpY2VNYXRyaXggPSBDR0NvbnRl
eHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3JtKHBsYXRmb3JtQ29udGV4dCgpKTsK
KyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworCisgICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZp
Y2VTcGFjZVRyYW5zZm9ybShjb250ZXh0KTsKICAgICBpZiAoQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lk
ZW50aXR5KGRldmljZU1hdHJpeCkpIHsKICAgICAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRy
YW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHJvdW5kZWRJ
bnRSZWN0KHJlY3QpOwpAQCAtMTMxOSw2ICsxMzE4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tu
ZXMKICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3IgbG9jYWxTdHJv
a2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAogICAgIEZsb2F0UmVjdCBib3VuZHMgPSBjb21wdXRl
TGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEZsb2F0UmVjdChwb2ludCwgRmxv
YXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykpLCBwcmludGluZywgbG9jYWxTdHJva2VD
b2xvcik7CkBAIC0xMzY0LDEyICsxMzY0LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAg
ICAgfQogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1YWxUb1N0cm9rZUNvbG9yKQotICAgICAg
ICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgbG9jYWxTdHJva2VDb2xvcik7Cisg
ICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGxvY2FsU3Ryb2tlQ29sb3IpOwogCi0gICAg
Q0dDb250ZXh0RmlsbFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCBkYXNoQm91bmRzLmRhdGEoKSwg
ZGFzaEJvdW5kcy5zaXplKCkpOworICAgIENHQ29udGV4dEZpbGxSZWN0cyhjb250ZXh0LCBkYXNo
Qm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkpOwogCiAgICAgaWYgKGZpbGxDb2xvcklz
Tm90RXF1YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNv
bnRleHQoKSwgZmlsbENvbG9yKCkpOworICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBm
aWxsQ29sb3IoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldFVSTEZvclJlY3Qo
Y29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpAQCAtMTQxMiwxNyAr
MTQxMiwxOCBAQCBSZW5kZXJpbmdNb2RlIEdyYXBoaWNzQ29udGV4dENHOjpyZW5kZXJpbmdNb2Rl
KCkgY29uc3QKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURl
dmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgLy8gQ29yZUdyYXBoaWNzIGV4cGVjdHMg
dGhlIGJhc2UgQ1RNIG9mIGEgSGlEUEkgY29udGV4dCB0byBoYXZlIHRoZSBzY2FsZSBmYWN0b3Ig
YXBwbGllZCB0byBpdC4KICAgICAvLyBGYWlsaW5nIHRvIGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBD
VE0gd2lsbCBjYXVzZSBjZXJ0YWluIENHIGZlYXR1cmVzLCBzdWNoIGFzIGZvY3VzIHJpbmdzLAog
ICAgIC8vIHRvIGRyYXcgd2l0aCBhIHNjYWxlIGZhY3RvciBvZiAxIHJhdGhlciB0aGFuIHRoZSBh
Y3R1YWwgc2NhbGUgZmFjdG9yLgotICAgIENHQ29udGV4dFNldEJhc2VDVE0ocGxhdGZvcm1Db250
ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShwbGF0Zm9y
bUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAg
IENHQ29udGV4dFNldEJhc2VDVE0oY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0Nv
bnRleHRHZXRCYXNlQ1RNKGNvbnRleHQpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVG
YWN0b3IpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKQogewogICAgIC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0
IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgpIHx8IGZp
bGxQYXR0ZXJuKCkpIHsKICAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xNDM0LDcgKzE0MzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsK
ICAgICAvLyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQg
Y29sb3JzLgotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tl
UGF0dGVybikgeworICAgIGlmIChzdHJva2VHcmFkaWVudCgpIHx8IHN0cm9rZVBhdHRlcm4oKSkg
ewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTQ2OCw5ICsxNDY5LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFk
ZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pCiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0Q0c6OmNhblVzZVNoYWRvd0JsdXIoKSBjb25zdAogewotICAg
IHJldHVybiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
ICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsKKyAgICByZXR1cm4gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCk7CiB9CiAKLX0KIAotI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCA0NjhhNDRiYWE4NmVlNTI2MTlkMjU1ZjkzOTQz
YTk3NTViYWM5ZmFiLi5mOTljM2Q5YjliZDI4MjU4NjVmZGY3ZWE4MGIyYWYwMGUzNGI1MmRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDEwLCAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTMgKzI1LDEzIEBACiAKICNwcmFn
bWEgb25jZQogCisjaWYgVVNFKENHKQorCiAjaW5jbHVkZSAiQ29sb3JTcGFjZUNHLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0dBZmZp
bmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShDR0NvbnRleHRSZWYpOwotCi1jbGFzcyBDR0Nv
bnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAgICBDR0NvbnRleHRTdGF0ZVNhdmVyKENHQ29u
dGV4dFJlZiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKLSAgICAgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0
b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBD
R0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgfQotICAgIAotICAgIH5DR0NvbnRl
eHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAg
ICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3Jl
KTsKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOwotICAgICAgICBtX3Nh
dmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3RvcmUoKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRTYXZlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQ0dDb250
ZXh0UmVmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Ci19OwotCiBjbGFz
cyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRDRyA6IHB1YmxpYyBHcmFwaGljc0NvbnRl
eHQgewogcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFJlZik7CkBAIC04
NSw2OSArNDUsNDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29u
c3QgZmluYWw7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFs
OwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWw7Cisg
ICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgdm9p
ZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRD
b250ZXh0KGJvb2wpIGZpbmFsOwogCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCBy
ZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogICAg
IHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0
ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAg
dm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7
CiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsK
IAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7Ci0gICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBs
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQg
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQg
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwotCi0gICAgdm9pZCBmaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotCi0gICAgdm9pZCBzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgp
IGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBm
aW5hbDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CisgICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCiAgICAgdm9pZCBjbGlwKGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKLQotICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7Ci0KICAgICB2b2lk
IGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5h
bDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwog
Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCBz
ZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7
CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4
dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2
b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgdm9pZCB0cmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0g
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7
CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CisgICAgdm9pZCBkcmF3
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKQEAgLTE1NiwxOCArOTUsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CiAKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsK
ICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNv
bnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBzZXREZXN0aW5h
dGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
LSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKIAog
ICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lk
IGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIHZvaWQgc2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgc2V0RGVz
dGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuVXNlU2hhZG93
Qmx1cigpIGNvbnN0OwogCkBAIC0xNzUsOSArMTE3LDE2IEBAIHB1YmxpYzoKICAgICBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0
IGZpbmFsOwogI2VuZGlmCiAKKyAgICBDR0NvbnRleHRSZWYgaW50ZXJuYWxQbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKIH07CiAKLX0KK0NHQWZmaW5lVHJhbnNmb3JtIGdldFVz
ZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
aW5jbHVkZSAiQ0dDb250ZXh0U3RhdGVTYXZlci5oIgogCisjZW5kaWYgLy8gVVNFKENHKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmNwcAppbmRleCBlNmNlMmZiOTcyNDdhNmI4NmMwOWIxYWQzNjE3MDFjMmVjM2U4NjI1
Li5hZjAwYTAxMzM0N2UwY2Q4NWEzMGI4ODRlYmM3OWYzMmYxZTIzMTJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgUERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJh
bWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hCiAKICAgICAv
LyBPbGQgYW5kIG5ldyBjb250ZXh0IHNjYWxpbmcgZmFjdG9ycyBoYXZlIHRvIG1hdGNoIGFzIHdl
bGwuCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHJhbnNm
b3JtOwotICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1
ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zvcm0pOworICAgIGNvbnRl
eHQuZ2V0Q1RNKCkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zvcm0pOwogCiAgICAgQWZmaW5l
VHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBjYWNoZWREZWNvbXBvc2VkVHJhbnNmb3JtOwogICAg
IG1fY2FjaGVkVHJhbnNmb3JtLmRlY29tcG9zZShjYWNoZWREZWNvbXBvc2VkVHJhbnNmb3JtKTsK
QEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZElt
YWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgIHRyYW5zZm9y
bUNvbnRleHRGb3JQYWludGluZyhidWZmZXJDb250ZXh0LCBkc3RSZWN0LCBGbG9hdFJlY3QobV9j
YWNoZWRJbWFnZVJlY3QubG9jYXRpb24oKSwgc3JjUmVjdC5zaXplKCkpKTsKICAgICBkcmF3UERG
UGFnZShidWZmZXJDb250ZXh0KTsKIAotICAgIG1fY2FjaGVkVHJhbnNmb3JtID0gY29udGV4dC5n
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAg
ICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7CiAgICAgbV9jYWNoZWREZXN0
aW5hdGlvblJlY3QgPSBkc3RSZWN0OwogICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7
CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CkBAIC0zNjMsNiArMzYzLDggQEAgdm9p
ZCBQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtbV9jcm9wQm94LmxvY2F0aW9uKCkpOwogCisgICAg
Y29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgLy8gQ0dQREYgcGFnZXMgYXJlIGlu
ZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIENHQ29udGV4dERyYXdQREZQ
YWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIENHUERGRG9jdW1l
bnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4IGQ2ODlhNTFhODkxMDJh
NTA5MDQ1NTliNDQyMjM2OWRlMTQ3MDMzMzUuLmZkZWVmNmIzOGQwYzViNTU1NjczN2ViN2Y0NGFm
MmYyZmM5YTQ0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAg
ICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIHN0cm9r
ZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgYm9vbCBoaXRTdWNjZXNzID0g
Q0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9pbnQsIGtDR1BhdGhTdHJva2Up
OworICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhDb250YWluc1BvaW50KGdyYXBo
aWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIGtDR1BhdGhTdHJva2UpOwogICAg
IENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAKICAgICByZXR1cm4gaGl0U3VjY2Vz
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBl
ZmJjMWU0OTU0NDFiZWRlNzM0ZTk0OGRkMjZkMzcxNDQxNjU1M2UwLi5lOWI3YWM0ZDdmNGNiZjc0
MTI4OTM5YmZhOGMwNGU3NjVhMGRiZDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1Jl
Y29yZGVyQ29yZVRleHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogCi0jaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNs
dWRlICJGb250LmgiCkBAIC0zNSw0OSArMzQsNDEgQEAKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKLQogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0
U1BJV2luLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgQ0dDb250
ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwg
Q0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJl
Y3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCitzdGF0aWMgQ0dDb250
ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwg
Q0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QsIENGRGljdGlv
bmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVy
JiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHRE
ZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmRCZWdpbkxheWVy
KHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsKKyAgICByZWNvcmRlci5yZWNvcmRCZWdpbkxheWVyKGdz
dGF0ZSk7CiAgICAgcmV0dXJuIGRlbGVnYXRlOwogfQogCi1zdGF0aWMgQ0dDb250ZXh0RGVsZWdh
dGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5n
U3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCitzdGF0aWMgQ0dDb250ZXh0RGVs
ZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVy
aW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKICAgICBEcmF3R2x5cGhzUmVjb3Jk
ZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4
dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29yZEVuZExheWVy
KHJzdGF0ZSwgZ3N0YXRlKTsKKyAgICByZWNvcmRlci5yZWNvcmRFbmRMYXllcihnc3RhdGUpOwog
ICAgIHJldHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHRXJyb3IgZHJhd0dseXBocyhDR0Nv
bnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENH
R1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qIHRtLCBjb25zdCBDR0ds
eXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCitz
dGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBD
R1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHQWZmaW5lVHJh
bnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNb
XSwgc2l6ZV90IGNvdW50KQogewotICAgIGlmIChDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkgPiAw
KSB7Ci0gICAgICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8
RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7
Ci0gICAgICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlwaHMocnN0YXRlLCBnc3RhdGUsIHRtLCBn
bHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwotICAgIH0KKyAgICBEcmF3R2x5cGhzUmVjb3JkZXIm
IHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERl
bGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOworICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlwaHMo
Z3N0YXRlLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwogICAgIHJldHVybiBrQ0dFcnJvclN1
Y2Nlc3M7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShDR0NvbnRleHREZWxlZ2F0ZVJl
ZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0
ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2UpCitzdGF0aWMgQ0dFcnJvciBkcmF3SW1h
Z2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYsIENH
R1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2UpCiB7CiAgICAg
RHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVj
b3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRl
ci5yZWNvcmREcmF3SW1hZ2UocnN0YXRlLCBnc3RhdGUsIHJlY3QsIGltYWdlKTsKKyAgICByZWNv
cmRlci5yZWNvcmREcmF3SW1hZ2UoZ3N0YXRlLCByZWN0LCBpbWFnZSk7CiAgICAgcmV0dXJuIGtD
R0Vycm9yU3VjY2VzczsKIH0KIAotVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQorc3RhdGljIFVuaXF1ZVJlZjxHcmFw
aGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFsQ29udGV4dChEcmF3R2x5cGhzUmVjb3JkZXImIHJl
Y29yZGVyKQogewotICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHRE
ZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7CisgICAgYXV0byBjb250ZXh0RGVsZWdhdGUgPSBhZG9wdENG
KENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKCZyZWNvcmRlcikpOwogICAgIENHQ29udGV4dERlbGVn
YXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZUJlZ2luTGF5ZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmJlZ2luTGF5ZXIpKTsKICAg
ICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVF
bmRMYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmZW5k
TGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0
ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRl
Q2FsbGJhY2s+KCZXZWJDb3JlOjpkcmF3R2x5cGhzKSk7CkBAIC04Niw2NyArNzcsMTUgQEAgVW5p
cXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5h
bENvbnRleHQoKQogICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENHPihj
b250ZXh0LmdldCgpKTsKIH0KIAotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3Jk
ZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3Ry
dWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0IGRlcml2ZUZvbnRGcm9tQ29udGV4
dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNS
ZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1Y3RE
cmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0IGRl
cml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25Db250ZXh0KGRlc3RpbmF0
aW9uQ29udGV4dCkKICAgICAsIG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzKGRlY29uc3RydWN0RHJh
d0dseXBocykKICAgICAsIG1fZGVyaXZlRm9udEZyb21Db250ZXh0KGRlcml2ZUZvbnRGcm9tQ29u
dGV4dCkKLSAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4dCgpKQor
ICAgICwgbV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50ZXJuYWxDb250ZXh0KCp0aGlzKSkKIHsK
IH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQotewotICAgIG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUuY29sb3IgPSBjb250ZXh0U3RhdGUuZmlsbENvbG9yOwotICAgIG1fb3Jp
Z2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQgPSBjb250ZXh0U3RhdGUuZmlsbEdyYWRpZW50
OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9
IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUuZmlsbFBhdHRlcm47Ci0KLSAg
ICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IgPSBjb250ZXh0U3RhdGUuc3Ryb2tl
Q29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50ID0gY29udGV4
dFN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5n
cmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VU
cmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4gPSBjb250
ZXh0U3RhdGUuc3Ryb2tlUGF0dGVybjsKLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5jdG0gPSBtX293
bmVyLmdldENUTSgpOyAvLyBGSVhNRTogRGVhbCB3aXRoIGJhc2UgQ1RNLgotCi0gICAgbV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBjb250ZXh0U3RhdGUuc2hhZG93T2Zmc2V0OwotICAg
IG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciA9IGNvbnRleHRTdGF0ZS5zaGFkb3dCbHVyOwot
ICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IgPSBjb250ZXh0U3RhdGUuc2hhZG93Q29s
b3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gY29udGV4
dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotCi0gICAgbV9jdXJyZW50U3RhdGUgPSBt
X29yaWdpbmFsU3RhdGU7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUlu
dGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQot
ewotICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAg
ICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmls
bFN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdy
YWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbEdyYWRpZW50KCptX29y
aWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxl
LmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICAgICAgaWYgKG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5z
ZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICB9
Ci0KLSAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yLmlzVmFsaWQoKSkK
LSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0
ZS5zdHJva2VTdHlsZS5jb2xvcik7Ci0gICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlR3Jh
ZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVsc2UgewotICAg
ICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgICAg
ICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBt
X2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0o
bV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1z
KTsKLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsKLQotICAgIG1faW50
ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5n
TW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250KGNvbnN0IEZvbnQmIGZvbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgQVNTRVJUKENHQWZmaW5l
VHJhbnNmb3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRyaXgoZm9udC5wbGF0Zm9ybURhdGEoKS5j
dEZvbnQoKSkpKTsKIApAQCAtMTU2LDEwNCArOTUsMzggQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYgZm9udCwgRm9udFNtb290aGlu
Z00KICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVPdmVyYWxsVGV4dE1hdHJpeChm
b250KTsKICAgICBpZiAoZm9udC5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRP
cmllbnRhdGlvbjo6VmVydGljYWwpCiAgICAgICAgIG1fb3JpZ2luYWxUZXh0TWF0cml4ID0gY29t
cHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCBtX29yaWdpbmFsVGV4dE1hdHJpeCk7Ci0KLSAg
ICBhdXRvJiBjb250ZXh0U3RhdGUgPSBtX293bmVyLnN0YXRlKCk7Ci0gICAgcG9wdWxhdGVJbnRl
cm5hbFN0YXRlKGNvbnRleHRTdGF0ZSk7Ci0gICAgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29u
dGV4dFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmNvbmNsdWRlSW50ZXJu
YWxDb250ZXh0KCkKK0dyYXBoaWNzQ29udGV4dFN0YXRlIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJl
cGFyZUludGVybmFsQ29udGV4dCgpCiB7Ci0gICAgdXBkYXRlQ1RNKG1fb3JpZ2luYWxTdGF0ZS5j
dG0pOwotICAgIHVwZGF0ZUZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9y
LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LmdldCgpLCBtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0ZVN0cm9rZUNvbG9yKG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmdyYWRpZW50LmdldCgpLCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybi5nZXQo
KSk7Ci0gICAgdXBkYXRlU2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29y
aWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA/IFNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOjpZZXMgOiBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6Tm8pOworICAgIGF1dG8gb3Jp
Z2luYWxTdGF0ZSA9IG1fZGVzdGluYXRpb25Db250ZXh0LnN0YXRlKCk7CisgICAgbV9pbnRlcm5h
bENvbnRleHQtPm1lcmdlU3RhdGVEaWZmcyhvcmlnaW5hbFN0YXRlKTsKKyAgICBtX2ludGVybmFs
Q29udGV4dC0+YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1cm4gb3JpZ2luYWxTdGF0ZTsK
IH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcihjb25zdCBDb2xv
ciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVybikK
K3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKQogewotICAgIC8vIFRoaXMgY2hl
Y2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNl
LgotICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdo
aWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50
ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwg
d2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29s
b3IgPT0gbV9jdXJyZW50U3RhdGUuZmlsbFN0eWxlLmNvbG9yKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBuZXdTdGF0ZS5maWxsQ29s
b3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3JhZGllbnQpCi0gICAgICAgIG5ld1N0YXRlLmZp
bGxHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBu
ZXdTdGF0ZS5maWxsUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAgbV9vd25lci5kaWRVcGRhdGVT
dGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlIH0p
OwotICAgIG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworICAgIG1f
ZGVzdGluYXRpb25Db250ZXh0Lm1lcmdlU3RhdGVEaWZmcyhvcmlnaW5hbFN0YXRlKTsKIH0KIAot
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBu
ZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJuKiBuZXdQYXR0ZXJuKQordm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dHU3RhdGVSZWYgZ3N0YXRl
KQogewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0
LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlz
IHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgot
ICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hh
dCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9y
IHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29s
b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRl
OwotICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9yID0gbmV3Q29sb3I7Ci0gICAgaWYgKG5ld0dyYWRp
ZW50KQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAg
IGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VQYXR0ZXJuID0gbmV3UGF0
dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0YXRlLCB7IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zdHJv
a2VTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENU
TSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkpOwogfQogCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3Rt
KQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVuZExheWVyKENHR1N0YXRlUmVmIGdz
dGF0ZSkKIHsKLSAgICBpZiAoY3RtID09IG1fY3VycmVudFN0YXRlLmN0bSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9vd25lci5zZXRDVE0oY3RtKTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5jdG0g
PSBjdG07CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShn
c3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigp
OwogfQogCi1zdGF0aWMgYm9vbCBzaGFkb3dJc0NsZWFyZWQoY29uc3QgRmxvYXRTaXplJiBzaGFk
b3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIpCi17Ci0gICAgcmV0dXJuIHNoYWRvd09mZnNldCA9
PSBGbG9hdFNpemUoKSAmJiAhc2hhZG93Qmx1cjsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hh
ZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNv
bnNpZGVyIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGlmIG5vYm9keSBoYXMgYW55IHNoYWRvd3Mu
Ci0gICAgaWYgKHNoYWRvd0lzQ2xlYXJlZChzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIpICYmIHNo
YWRvd0lzQ2xlYXJlZChtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX2N1cnJlbnRTdGF0
ZS5zaGFkb3cuYmx1cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlIG5ld1N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IHN0YXRlQ2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc2hhZG93T2Zmc2V0ICE9IG1fY3VycmVudFN0
YXRlLnNoYWRvdy5vZmZzZXQgfHwgc2hhZG93Qmx1ciAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cu
Ymx1ciB8fCBzaGFkb3dDb2xvciAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuY29sb3IpIHsKLSAg
ICAgICAgbmV3U3RhdGUuc2hhZG93T2Zmc2V0ID0gc2hhZG93T2Zmc2V0OwotICAgICAgICBuZXdT
dGF0ZS5zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93Q29s
b3IgPSBzaGFkb3dDb2xvcjsKLSAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Ci0gICAgfQotICAgIGlmIChzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyAhPSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6VW5zcGVjaWZpZWQgJiYgKHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpICE9
IG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIG5ld1N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09
IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotICAgICAgICBzdGF0ZUNoYW5nZUZsYWdz
LmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2Up
OwotICAgIH0KLSAgICBpZiAoc3RhdGVDaGFuZ2VGbGFncy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0YXRlLCBzdGF0ZUNoYW5nZUZs
YWdzKTsKLQotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBzaGFkb3dPZmZzZXQ7
Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgPSBzaGFkb3dCbHVyOwotICAgIG1fY3Vy
cmVudFN0YXRlLnNoYWRvdy5jb2xvciA9IHNoYWRvd0NvbG9yOwotICAgIG1fY3VycmVudFN0YXRl
LnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUpCitzdGF0aWMgdm9pZCBzZXREcm9wU2hh
ZG93KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBDR1N0eWxlUmVmIHN0eWxl
KQogewogICAgIGlmIChDR1N0eWxlR2V0VHlwZShzdHlsZSkgIT0ga0NHU3R5bGVTaGFkb3cpIHsK
ICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBraW5kcyBvZiBDR1N0eWxlcy4KLSAgICAg
ICAgdXBkYXRlU2hhZG93KHswLCAwfSwgMCwgQ29sb3IoKSwgU2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM6OlVuc3BlY2lmaWVkKTsKKyAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmNsZWFyU2hhZG93
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2MSwyMCArMTM0LDkgQEAgdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmIHN0eWxlKQogICAgIGF1
dG8gcmFkID0gZGVnMnJhZChzaGFkb3dTdHlsZS5hemltdXRoIC0gMTgwKTsKICAgICBhdXRvIHNo
YWRvd09mZnNldCA9IEZsb2F0U2l6ZShzdGQ6OmNvcyhyYWQpLCBzdGQ6OnNpbihyYWQpKSAqIHNo
YWRvd1N0eWxlLmhlaWdodDsKICAgICBhdXRvIHNoYWRvd0NvbG9yID0gQ0dTdHlsZUdldENvbG9y
KHN0eWxlKTsKLSAgICB1cGRhdGVTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dTdHlsZS5yYWRp
dXMsIENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3IpLCBTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6
OnJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRl
LCBDR1JlY3QpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAg
ICBhdXRvIGFscGhhID0gQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpOwotICAgIG1fb3duZXIuYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpyZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUp
Ci17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICBtX293bmVy
LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgZGVzdGluYXRpb25Db250ZXh0LnNldERyb3BT
aGFkb3coeyBzaGFkb3dPZmZzZXQsIHN0YXRpY19jYXN0PGZsb2F0PihzaGFkb3dTdHlsZS5yYWRp
dXMpLCBDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHNoYWRvd0NvbG9yKSB9KTsK
KyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXModHJ1ZSk7
CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25z
KGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCwgY29uc3QgQ0dBZmZpbmVU
cmFuc2Zvcm0mIHRleHRNYXRyaXgpCkBAIC0yOTAsMTggKzE1MiwxOCBAQCBzdGF0aWMgVmVjdG9y
PENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhjb25zdCBDR1BvaW50IHBvc2l0
aW9uc1tdLCBzaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdz
dGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBj
b25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCit2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHR2x5
cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKIHsK
ICAgICBBU1NFUlRfSU1QTElFUyhtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250
RnJvbUNvbnRleHQ6Ok5vLCBtX29yaWdpbmFsRm9udCk7CiAKLSAgICBpZiAoIWNvdW50KQorICAg
IGlmICghY291bnQgfHwgQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpIDw9IDApCiAgICAgICAgIHJl
dHVybjsKIAogICAgIENHRm9udFJlZiB1c2VkRm9udCA9IENHR1N0YXRlR2V0Rm9udChnc3RhdGUp
OwogICAgIGlmIChtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRl
eHQ6Ok5vICYmIHVzZWRGb250ICE9IGFkb3B0Q0YoQ1RGb250Q29weUdyYXBoaWNzRm9udChtX29y
aWdpbmFsRm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG51bGxwdHIpKS5nZXQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsK
KyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkp
OwogCiAgICAgLy8gV2Ugd2FudCB0aGUgcmVwbGF5ZXIncyBDVE0gYW5kIHRleHQgbWF0cml4IHRv
IG1hdGNoIHRoZSBjdXJyZW50IENUTSBhbmQgdGV4dCBtYXRyaXguCiAgICAgLy8gVGhlIGN1cnJl
bnQgdGV4dCBtYXRyaXggaXMgYSBjb25jYXRlbmF0aW9uIG9mIHdoYXRldmVyIFdlYktpdCBzZXRz
IGl0IHRvIGFuZCB3aGF0ZXZlcgpAQCAtMzI0LDEzICsxODYsMTYgQEAgdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVS
ZWYgZ3N0YXQKICAgICAgICAgaW52ZXJzZUNUTUZpeHVwID0gaW52ZXJzZS52YWx1ZSgpOwogICAg
IGVsc2UKICAgICAgICAgY3RtRml4dXAgPSBBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICBtX293bmVy
LmNvbmNhdENUTShjdG1GaXh1cCk7CisKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jb25jYXRD
VE0oY3RtRml4dXApOwogCiAgICAgYXV0byBmaWxsQ29sb3IgPSBDR0dTdGF0ZUdldEZpbGxDb2xv
cihnc3RhdGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6
Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikpOworCiAgICAgYXV0byBzdHJv
a2VDb2xvciA9IENHR1N0YXRlR2V0U3Ryb2tlQ29sb3IoZ3N0YXRlKTsKLSAgICB1cGRhdGVGaWxs
Q29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShmaWxsQ29sb3IpKTsKLSAg
ICB1cGRhdGVTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHN0
cm9rZUNvbG9yKSk7Ci0gICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7
CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmNyZWF0ZUFu
ZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOworCisgICAgc2V0RHJvcFNoYWRvdyht
X2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKIAogICAgIGF1
dG8gZm9udFNpemUgPSBDR0dTdGF0ZUdldEZvbnRTaXplKGdzdGF0ZSk7CiAgICAgUmVmIGZvbnQg
PSBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vID8g
Km1fb3JpZ2luYWxGb250IDogRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoYWRvcHRDRihD
VEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KHVzZWRGb250LCBmb250U2l6ZSwgbnVsbHB0ciwg
bnVsbHB0cikpLCBmb250U2l6ZSkpOwpAQCAtMzQ1LDMwICsyMTAsMzggQEAgdm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3Rh
dGVSZWYgZ3N0YXQKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMzI5
MTc+IChgRHJhd0dseXBoc1JlY29yZGVyYCBzaG91bGQgYmUgYWJsZSB0byByZWNvcmQrcmVwbGF5
IHZlcnRpY2FsIHRleHQpCiAgICAgfQogCi0gICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVG
b250KGZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMs
IGNvdW50LCB0ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0TWF0cml4Lm1hcFBvaW50KHBv
c2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7Ci0KLSAgICBtX293bmVyLmNvbmNhdENUTShp
bnZlcnNlQ1RNRml4dXApOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRD
YWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0
aW9ucywgY291bnQsIHRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIHRleHRNYXRyaXgubWFwUG9p
bnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29u
dGV4dC5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBn
c3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNnSW1hZ2UpCit2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3Qs
IENHSW1hZ2VSZWYgY2dJbWFnZSkKIHsKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdz
dGF0ZSkpOwotICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Cisg
ICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVHZXRTdHlsZShn
c3RhdGUpKTsKIAogICAgIC8vIENvcmUgR3JhcGhpY3MgYXNzdW1lcyBhICJ5IHVwIiBjb29yZGlu
YXRlIHN5c3RlbSwgYnV0IGluIFdlYktpdCwgd2UgdXNlIGEgInktZG93biIgY29vcmRpbmF0ZSBz
eXN0ZW0uCiAgICAgLy8gVGhpcyBtZWFucyB0aGF0IFdlYktpdCdzIGRyYXdpbmcgcm91dGluZXMg
KEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkpIGludGVudGlvbmFsbHkgZHJhdyBpbWFnZXMg
dXBzaWRlLWRvd24gZnJvbSBDb3JlIEdyYXBoaWNzJ3MgcG9pbnQgb2Ygdmlldy4KICAgICAvLyAo
VGhlcmUncyBhIHktZmxpcCBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlKCkuKQogICAgIC8vIFRoZSByZWN0IGhhcyB0aGUgcmlnaHQgYm91bmRz
LCBidXQgd2UgbmVlZCB0byB0cmFuc2Zvcm0gZnJvbSBDRydzIGNvb3JkaW5hdGUgc3lzdGVtIHRv
IFdlYktpdCdzIGJ5IHBlcmZvcm1pbmcgb3VyIG93biB5LWZsaXAgc28gaW1hZ2VzIGFyZSBkcmF3
biB0aGUgcmlnaHQtc2lkZS11cC4KICAgICAvLyBXZSBkbyB0aGlzIGF0IHRoZSBib3VuZGFyeSBi
ZXR3ZWVuIHRoZSB0d28gQVBJcywgd2hpY2ggaXMgcmlnaHQgaGVyZS4KLSAgICBtX293bmVyLnRy
YW5zbGF0ZSgwLCByZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpOwotICAgIG1f
b3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0KKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4
dC50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICAKICAg
ICBhdXRvIGltYWdlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKTsKLSAgICBtX293bmVy
LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5zaXplKCksIEZsb2F0UmVjdChyZWN0KSwg
RmxvYXRSZWN0IHt7IH0sIGltYWdlLT5zaXplKCl9LCBJbWFnZVBhaW50aW5nT3B0aW9ucyB7IElt
YWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7Ci0KKyAgICBtX2Rlc3RpbmF0aW9uQ29u
dGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVj
dCksIEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2UtPnNpemUoKSB9LCBJbWFnZVBhaW50aW5nT3B0aW9u
cyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7CisgICAgCiAgICAgLy8gVW5k
byB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQuCi0gICAgbV9vd25lci5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCAtKHJlY3Qu
c2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworICAgIG1fZGVzdGluYXRpb25Db250
ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnRy
YW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworfQor
Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFy
dFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQoreworICAgIHNldEludGVy
bmFsRm9udChmb250LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAKKyAgICBhdXRvIG9yaWdpbmFsU3Rh
dGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgRm9udENhc2NhZGU6OmRyYXdHbHlw
aHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
c3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgcmVzdG9yZURlc3RpbmF0aW9uQ29udGV4
dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNW
R1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKQEAgLTM3OSwyNSArMjUyLDE5IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RT
VkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICAgICAg
YXV0byBib3VuZHMgPSBmb250LmJvdW5kc0ZvckdseXBoKGdseXBoc1tpXSk7CiAKICAgICAgICAg
Ly8gQ3JlYXRlIGEgbG9jYWwgSW1hZ2VCdWZmZXIgYmVjYXVzZSBkZWNvZGluZyB0aGUgU1ZHIGZv
bnRzIGhhcyB0byBoYXBwZW4gaW4gV2ViUHJvY2Vzcy4KLSAgICAgICAgaWYgKGF1dG8gaW1hZ2VC
dWZmZXIgPSBtX293bmVyLmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6OkxvY2FsKSkgeworICAgICAg
ICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fZGVzdGluYXRpb25Db250ZXh0LmNyZWF0ZUFsaWdu
ZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5k
ZXJpbmdNZXRob2Q6OkxvY2FsKSkgeworICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQo
KS5hcHBseVN0YXRlQ2hhbmdlcygpOwogICAgICAgICAgICAgRm9udENhc2NhZGU6OmRyYXdHbHlw
aHMoaW1hZ2VCdWZmZXItPmNvbnRleHQoKSwgZm9udCwgZ2x5cGhzICsgaSwgYWR2YW5jZXMgKyBp
LCAxLCBGbG9hdFBvaW50KCksIHNtb290aGluZ01vZGUpOwogCiAgICAgICAgICAgICBGbG9hdFJl
Y3QgZGVzdGluYXRpb25SZWN0ID0gZW5jbG9zaW5nSW50UmVjdChib3VuZHMpOwogICAgICAgICAg
ICAgZGVzdGluYXRpb25SZWN0Lm1vdmVCeShwZW5Qb3NpdGlvbik7Ci0gICAgICAgICAgICBtX293
bmVyLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAg
ICAgICAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBkZXN0aW5hdGlvblJlY3QpOwogICAgICAgICB9CiAKICAgICAgICAgcGVuUG9zaXRpb24ubW92
ZShzaXplKGFkdmFuY2VzW2ldKSk7CiAgICAgfQogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQotewotICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoZm9udCwgc21v
b3RoaW5nTW9kZSk7Ci0gICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRl
eHQsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3Ro
aW5nTW9kZSk7Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKLX0KLQogdm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGluZ0ludG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsK
ICAgICBhdXRvIG90c3ZnR2x5cGhzID0gZm9udC5maW5kT1RTVkdHbHlwaHMoZ2x5cGhzLCBudW1H
bHlwaHMpOwpAQCAtNDQwLDcgKzMwNyw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3
QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYgZm9uCiB2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9u
dFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBpZiAobV9kZWNvbnN0cnVjdERy
YXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpObykgewotICAgICAgICBtX293bmVy
LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAgICAgbV9kZXN0aW5hdGlvbkNvbnRl
eHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC00NTMsMTUgKzMyMCwxNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05hdGl2
ZVRleHQoQ1RGb250UmVmIGZvbnQsIENHRmxvYXQgZm9udFNpemUsIENUTGluZQogewogICAgIEFT
U0VSVChtX2RlY29uc3RydWN0RHJhd0dseXBocyA9PSBEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olll
cyk7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKG1fb3duZXIpOworICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIobV9kZXN0aW5hdGlvbkNvbnRleHQpOwog
Ci0gICAgbV9vd25lci50cmFuc2xhdGUobGluZVJlY3Qub3JpZ2luLngsIGxpbmVSZWN0Lm9yaWdp
bi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXpl
KDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRlKGxpbmVSZWN0Lm9y
aWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBt
X2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKIAotICAgIHByZXBh
cmVJbnRlcm5hbENvbnRleHQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9u
dFNpemUpKSwgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIHNl
dEludGVybmFsRm9udChGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShmb250LCBmb250U2l6
ZSkpLCBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCk7CisgICAgCisgICAg
YXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUludGVybmFsQ29udGV4dCgpOwogICAgIENHQ29u
dGV4dFNldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCks
IDAsIDApOwogICAgIENUTGluZURyYXcobGluZSwgbV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOworICAgIHJlc3RvcmVE
ZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNTExZTA5Yjk2Y2Vm
MDMyNTA5MGUyM2FmOTE0YWUzNWYyYWI4ZWQyZS4uZTUzNGNjNTVhZjI2YjdmYjgyODBlNjNiN2Rj
MjVhM2Q0YTQxNjM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTE1
MiwyNSArMTUyLDI3IEBAIHN0YXRpYyB2b2lkIGZpbGxWZWN0b3JXaXRoVmVydGljYWxHbHlwaFBv
c2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zCiAgICAgfQogfQogCi1zdGF0
aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5
cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0ZXh0TWF0cml4KQorc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCiB7
CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ0dDb250ZXh0UmVmIGNn
Q29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKwogICAgIFZlY3Rv
cjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7CiAgICAgaWYgKHBsYXRmb3JtRGF0YS5v
cmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAgU2Nv
cGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQs
IHRleHRNYXRyaXgpLCBjb250ZXh0KTsKKyAgICAgICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1h
dHJpeChjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIHRleHRNYXRyaXgpLCBjZ0NvbnRl
eHQpOwogCiAgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJhbnNsYXRpb25zKGNvdW50KTsK
ICAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMocGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGNvdW50KTsKIAogICAg
ICAgICBhdXRvIGFzY2VudERlbHRhID0gZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KElk
ZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7Ci0g
ICAgICAgIGZpbGxWZWN0b3JXaXRoVmVydGljYWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNv
bnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBjb3VudCwgcG9pbnQsIGFzY2Vu
dERlbHRhKTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCks
IGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAgICAgICBmaWxs
VmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjZ0NvbnRleHQsIHRy
YW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBjb3VudCwgcG9pbnQsIGFzY2VudERlbHRhKTsK
KyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywg
cG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNnQ29udGV4dCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjb250
ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhw
bGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNv
bnRleHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhw
b3NpdGlvbnMsIGNnQ29udGV4dCwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCk7CisgICAgICAgIENU
Rm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5k
YXRhKCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0KIH0KIApAQCAtMjQyLDEwICsyNDQsNyBA
QCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIHNldENHRm9udFJlbmRlcmluZ01vZGUoY29u
dGV4dCk7CiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEu
c2l6ZSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93
Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBjb250ZXh0LmdldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAgICBhdXRvIGRyb3BTaGFkb3cg
PSBjb250ZXh0LmRyb3BTaGFkb3coKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZXh0Q1RN
ID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9u
dC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CkBAIC0yNTgsMjkgKzI1NywyOSBAQCB2b2lkIEZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgRwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGJvb2wgaGFzU2ltcGxlU2hh
ZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwg
JiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICFwbGF0Zm9ybURhdGEu
aXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
KSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFj
b250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93
ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYg
ZHJvcFNoYWRvdy5jb2xvci5pc1ZhbGlkKCkgJiYgIWRyb3BTaGFkb3cuYmx1clJhZGl1cyAmJiAh
cGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFjb250ZXh0LnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxp
cHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoaGFz
U2ltcGxlU2hhZG93KSB7CiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZl
cyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBp
eGVsIGFudGlhbGlhc2luZy4KICAgICAgICAgY29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAg
ICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBz
aGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShm
aWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3Ig
PSBkcm9wU2hhZG93LmNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5h
bHBoYUFzRmxvYXQoKSk7CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxD
b2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zm
c2V0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgZHJv
cFNoYWRvdy5vZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3Jp
bmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBm
bGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkg
PSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAgICAgZmxvYXQg
c2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQoKSAqIChj
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOworICAgICAgICBzaG93
R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwg
Zm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsK
ICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgICAgICBzaG93R2x5cGhz
V2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxv
YXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRvd1RleHRZKSwg
Zm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsK
ICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKICAgICB9CiAKLSAgICBz
aG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0
TWF0cml4KTsKIAogICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICBzaG93R2x5
cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNl
dCwgcG9pbnQueSgpKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHRleHRNYXRyaXgpOworICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9p
bnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwgY29u
dGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKIAogICAgIGlm
IChoYXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNl
dCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0LnNldERyb3BTaGFk
b3coZHJvcFNoYWRvdyk7CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoc2hv
dWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggMmUyZjRmNGYyY2I1NWQzNjVlNWFlMzk5MzI1ZDA1ZjJj
MTczNjFmZC4uY2NmNDBjZWE2MmIxNjc0MzY2ZDc0ODQxNjJiMWJjNGU5Mzc3MDc1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC05MCwxMCArOTAsNyBAQCBib29sIERpc3BsYXlMaXN0
OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIEl0ZW1IYW5kbGUgaXRlbSkK
ICAgICAgICAgaWYgKCEoZmxhZ3MgJiBBc1RleHRGbGFnOjpJbmNsdWRlc1BsYXRmb3JtT3BlcmF0
aW9ucykpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHN0YXRlSXRlbSA9IGl0ZW0uZ2V0PFNl
dFN0YXRlPigpOwogICAgICAgICAgICAgLy8gRklYTUU6IGZvciBub3csIG9ubHkgZHJvcCB0aGUg
aXRlbSBpZiB0aGUgb25seSBzdGF0ZS1jaGFuZ2UgZmxhZ3MgYXJlIHBsYXRmb3JtLXNwZWNpZmlj
LgotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fY2hhbmdlRmxhZ3Mg
PT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5n
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChzdGF0
ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisgICAgICAgICAgICBpZiAoc3Rh
dGVJdGVtLnN0YXRlKCkuY2hhbmdlcygpID09IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yMDIsMTYgKzE5OSw2IEBAIHZvaWQg
RGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBl
bmQ8U2F2ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToK
ICAgICAgICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihpdGVtLmdldDxSZXN0b3JlPigpKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8VHJhbnNs
YXRlPihpdGVtLmdldDxUcmFuc2xhdGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToK
LSAgICAgICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0PFJvdGF0ZT4oKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2NhbGU+KGl0ZW0u
Z2V0PFNjYWxlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5nZXQ8Q29uY2F0ZW5hdGVDVE0+
KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxT
ZXRDVE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbENvbG9yOgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oaXRl
bS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVTdHJva2VDb2xvcjoKQEAgLTIyMCwxNiArMjA3LDYgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBw
ZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdHJva2VUaGlj
a25lc3M+KGl0ZW0uZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKSk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3RhdGU+KGl0ZW0uZ2V0PFNl
dFN0YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1
cm4gYXBwZW5kPFNldExpbmVDYXA+KGl0ZW0uZ2V0PFNldExpbmVDYXA+KCkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVEYXNo
PihpdGVtLmdldDxTZXRMaW5lRGFzaD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpv
aW46Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZUpvaW4+KGl0ZW0uZ2V0PFNldExpbmVK
b2luPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1
cm4gYXBwZW5kPFNldE1pdGVyTGltaXQ+KGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gYXBwZW5kPENsZWFy
U2hhZG93PihpdGVtLmdldDxDbGVhclNoYWRvdz4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwPihpdGVtLmdldDxDbGlwPigpKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMjc0LDggKzI1MSw2IEBAIHZvaWQgRGlzcGxheUxp
c3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJl
Y3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxs
UmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIGFwcGVu
ZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKSk7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1cm4gYXBwZW5k
PEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAppbmRleCAwYzI1MjI2NGFmNDE2NjU2MjE3
NTE2MDQxMDQyYThiZGQzYmZhYmI1Li5kZWZjZTg0ZWYzNTg3YmVhMDZkMjA3ZGI1YjgwMmFhN2M4
MjU2NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCi0g
ICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxv
YXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQorICAgIDogbV9jb250ZXh0KG1f
ZGlzcGxheUxpc3QsIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSkKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAppbmRleCA0
NTc3NTUxODliZGFkZDcxOWQyNDVhNGU2ZDJjODFiZGRiMWY3ZGYzLi4wZGIxNTAzOTYwNDAzMmYz
MzAzZmJjYjY1MjFlNTNlNGUzNGY5MThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmNwcApAQCAtNTIsMjEgKzUyLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToK
ICAgICAgICAgZ2V0PFJlc3RvcmU+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGdldDxUcmFuc2xhdGU+KCku
YXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6Ci0gICAgICAgIGdldDxSb3RhdGU+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgZ2V0PFNjYWxlPigpLmFwcGx5
KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5h
dGVDVE06Ci0gICAgICAgIGdldDxDb25jYXRlbmF0ZUNUTT4oKS5hcHBseShjb250ZXh0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgZ2V0PFNl
dENUTT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgZ2V0PFNldElubGluZUZpbGxDb2xvcj4o
KS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzksMjEgKzY0LDYgQEAgdm9p
ZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgZ2V0PFNl
dExpbmVDYXA+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0PFNldExpbmVEYXNoPigpLmFwcGx5KGNv
bnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46
Ci0gICAgICAgIGdldDxTZXRMaW5lSm9pbj4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIGdldDxTZXRN
aXRlckxpbWl0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGdldDxDbGVhclNoYWRvdz4oKS5hcHBseShj
b250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAg
ICAgIGdldDxDbGlwPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CkBAIC0xNjAs
OSArMTMwLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIGdl
dDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgZ2V0PEZp
bGxDb21wb3NpdGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgZ2V0PEZpbGxSb3VuZGVk
UmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjcwLDkgKzIzNyw2
IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Bh
dGg6CiAgICAgICAgIGdldDxEcmF3UGF0aD4oKS5+RHJhd1BhdGgoKTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgZ2V0PEZp
bGxDb21wb3NpdGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0ZWRSZWN0KCk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAgICAgZ2V0PEZpbGxQYXRoPigp
Ln5GaWxsUGF0aCgpOwogICAgICAgICByZXR1cm47CkBAIC0yODgsOSArMjUyLDYgQEAgdm9pZCBJ
dGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6
CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOwogICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIGdl
dDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBnZXQ8U2V0U3RhdGU+KCkuflNldFN0YXRl
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxNCw5ICsyNzUsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6
OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKICAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJSZWN0Pjo6dmFsdWUp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsZWFyU2hh
ZG93Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoK
ICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xp
cD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI2LDkgKzI4NCw2IEBAIHZvaWQgSXRl
bUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENs
aXBUb0ltYWdlQnVmZmVyPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPENvbmNhdGVuYXRlQ1RNPjo6dmFsdWUpOwotICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKICAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzg3LDMzICsz
NDIsMTUgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpS
ZXN0b3JlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxSZXN0b3JlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxSb3RhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTYXZlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxTYXZlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2NhbGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPFNjYWxlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0Q1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxTZXRDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxDb2xvcj46OnZhbHVlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgogICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxp
bmVTdHJva2VDb2xvcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRNaXRlckxpbWl0Pjo6dmFs
dWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tu
ZXNzOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQzNyw5
ICszNzQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUxpbmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFN0cm9rZUxpbmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwog
ICAgIH0KIH0KIApAQCAtNTAxLDggKzQzNSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHko
SXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAg
IHJldHVybiBjb3B5SW50bzxEcmF3UGF0dGVybj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICByZXR1cm4gY29weUludG88RHJhd1BhdGg+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJl
Y3Q6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW1PZmZz
ZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAgICAgcmV0dXJu
IGNvcHlJbnRvPEZpbGxQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoQ29sb3I6CkBAIC01MTMsOCArNDQ1LDYgQEAgYm9vbCBJdGVtSGFuZGxl
OjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29u
c3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVt
T2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAg
ICAgICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBjb3B5SW50
bzxTZXRMaW5lRGFzaD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0YXRlOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0U3RhdGU+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgpAQCAtNTMxLDE2ICs0NjEsMTIg
QEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRs
ZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clJlY3Q6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclJlY3Q+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPENsZWFyU2hhZG93PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXA+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgICAgICByZXR1cm4gY29weUludG88
Q2xpcE91dD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0lt
YWdlQnVmZmVyOgogICAgICAgICByZXR1cm4gY29weUludG88Q2xpcFRvSW1hZ2VCdWZmZXI+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPENvbmNhdGVuYXRlQ1RNPihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKICAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKQEAgLTU3MywyNCArNDk5LDEy
IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5k
bGUgZGVzdGluYXRpb24pIGNvbnN0CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3Jl
OgogICAgICAgICByZXR1cm4gY29weUludG88UmVzdG9yZT4oaXRlbU9mZnNldCwgKnRoaXMpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFJvdGF0
ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CiAgICAgICAg
IHJldHVybiBjb3B5SW50bzxTYXZlPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTY2FsZT4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPFNldENUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldElubGluZUZpbGxDb2xv
cj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9r
ZUNvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAg
ICByZXR1cm4gY29weUludG88U2V0TGluZUNhcD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGlu
ZUpvaW4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxp
bWl0OgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TWl0ZXJMaW1pdD4oaXRlbU9mZnNldCwg
KnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRlbU9mZnNldCwgKnRoaXMpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CkBAIC02MDcsOCArNTIxLDYgQEAgYm9v
bCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0
aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFN0cm9rZVJlY3Q+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgogICAgICAgICBy
ZXR1cm4gY29weUludG88U3Ryb2tlTGluZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFRyYW5zbGF0ZT4o
aXRlbU9mZnNldCwgKnRoaXMpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKaW5kZXggNTRlYTFjODY4MmMwNzQ0MmUy
ZTg0MTRiNzMyOGFhMzI0ODAyNWE3NS4uYmEwZDk1MWMyMmNmNDljZTQxN2UzMzU1M2IwMGUwYTVi
OGFiMjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcApAQCAt
MzgsMTYgKzM4LDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0
eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNhdmUpOwogICAgIGNhc2UgSXRlbVR5cGU6OlJl
c3RvcmU6CiAgICAgICAgIHJldHVybiBzaXplb2YoUmVzdG9yZSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFRyYW5zbGF0ZSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFJvdGF0ZSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2NhbGUpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKENv
bmNhdGVuYXRlQ1RNKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVy
biBzaXplb2YoU2V0Q1RNKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6
CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5lRmlsbENvbG9yKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTU2LDE2ICs0Niw2IEBAIHN0YXRpYyBz
aXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNp
emVvZihTZXRTdHJva2VUaGlja25lc3MpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgog
ICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0YXRlKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lQ2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVDYXApOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVEYXNoKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihT
ZXRMaW5lSm9pbik7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihTZXRNaXRlckxpbWl0KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKLSAgICAgICAgcmV0dXJuIHNpemVvZihDbGVhclNoYWRvdyk7CiAgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIHNpemVvZihDbGlwKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OgpAQCAtMTEwLDggKzkwLDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVt
SW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0V2l0
aENvbG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAg
ICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhHcmFkaWVudCk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxDb21wb3Np
dGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEZpbGxSb3VuZGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU6CkBAIC0xODIsMjggKzE2MCwxOCBAQCBib29sIGlzRHJhd2luZ0l0
ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKICNlbmRpZgotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZl
cjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBQYXRoOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgIGNhc2Ug
SXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAg
IGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgotICAgIGNh
c2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFy
UmVjdDoKQEAgLTIyMiw3ICsxOTAsNiBAQCBib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlw
ZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVs
bGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbExpbmU6CkBAIC0yODgsMTMgKzI1NSwxMSBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlw
ZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0xpbmVzRm9yVGV4dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFBhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0Ogot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1N5c3RlbUltYWdlOgpAQCAtMzA2LDExICsyNzEsOSBAQCBib29sIGlzSW5saW5lSXRlbShJ
dGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVu
Y3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgotICAg
IGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI6CkBAIC0zMzMsMTUgKzI5
Niw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlw
ZTo6UGFpbnRGcmFtZUZvck1lZGlhOgogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9y
ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
QEAgLTM1MSw3ICszMDgsNiBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogI2Vu
ZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VMaW5lOgotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5kZXggZDY4M2IyYWNmNzg0NWY5OWMzY2QwOTVlYjkxMWU1
NGYxZjhjZTExMS4uMTY2MGI5OGZkYTVlZjI3YjNmNzVkMjJhNTc5YTNhOWFlM2NjNzBmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCkBAIC0zMSwyMCArMzEsMTAgQEAg
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsK
ICAgICBTYXZlLAogICAgIFJlc3RvcmUsCi0gICAgVHJhbnNsYXRlLAotICAgIFJvdGF0ZSwKLSAg
ICBTY2FsZSwKLSAgICBDb25jYXRlbmF0ZUNUTSwKLSAgICBTZXRDVE0sCiAgICAgU2V0SW5saW5l
RmlsbENvbG9yLAogICAgIFNldElubGluZVN0cm9rZUNvbG9yLAogICAgIFNldFN0cm9rZVRoaWNr
bmVzcywKICAgICBTZXRTdGF0ZSwKLSAgICBTZXRMaW5lQ2FwLAotICAgIFNldExpbmVEYXNoLAot
ICAgIFNldExpbmVKb2luLAotICAgIFNldE1pdGVyTGltaXQsCi0gICAgQ2xlYXJTaGFkb3csCiAg
ICAgQ2xpcCwKICAgICBDbGlwT3V0LAogICAgIENsaXBUb0ltYWdlQnVmZmVyLApAQCAtNjcsNyAr
NTcsNiBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CiAgICAgRmlsbFJlY3QsCiAg
ICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJlY3RXaXRoR3JhZGllbnQsCi0gICAgRmls
bENvbXBvc2l0ZWRSZWN0LAogICAgIEZpbGxSb3VuZGVkUmVjdCwKICAgICBGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAyM2QwYmJjYzcxYzI4MWM1MmMzNWE4YzI1MmRhOTZj
MGFiMTJhOThjLi4zNmZhNmExMjdmZjA3OTNjZWYyMzBlZGY3YTY0MWRkZTAyZmUzNzRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC01NCw2NyArNTUsNiBAQCB2b2lkIFJlc3RvcmU6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBjb250ZXh0LnJlc3RvcmUoKTsK
IH0KIAotdm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0p
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkpOwotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgieSIsIGl0ZW0ueSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBSb3RhdGU6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnJv
dGF0ZShtX2FuZ2xlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImFu
Z2xlIiwgaXRlbS5hbmdsZSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTY2FsZTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2Nh
bGUobV9zaXplKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIs
IGl0ZW0uYW1vdW50KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldENUTTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0Q1RN
KG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNl
dC1jdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBD
b25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNhdGVuYXRlQ1RNJiBpdGVt
KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFuc2Zvcm0oKSk7Ci0KLSAg
ICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgU2V0SW5saW5lRmlsbENvbG9yOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoY29s
b3IoKSk7CkBAIC0xNDgsNzcgKzg4LDIyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdHJva2VUaGlja25lc3MmIHN0YXRlKQogICAgIHJl
dHVybiB0czsKIH0KIAotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
Ci0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0YXRlLCBmbGFncykKLXsKLX0KLQotU2V0U3RhdGU6OlNl
dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKLSAg
ICA6IG1fc3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2UpCitTZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQorICAgIDogbV9zdGF0ZShzdGF0ZSkKIHsKIH0K
IAogdm9pZCBTZXRTdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAg
IG1fc3RhdGVDaGFuZ2UuYXBwbHkoY29udGV4dCk7CisgICAgY29udGV4dC5tZXJnZVN0YXRlQ2hh
bmdlcyhtX3N0YXRlKTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0ZS5zdGF0ZUNoYW5nZSgpOworICAgIHRzIDw8IGl0ZW0uc3RhdGUoKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKLXZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXApOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGlu
ZUNhcCYgbGluZUNhcCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtY2FwIiwgbGluZUNh
cC5saW5lQ2FwKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRMaW5lRGFzaDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGlu
ZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gp
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5IiwgbGluZURhc2guZGFzaEFycmF5
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQiLCBsaW5lRGFzaC5kYXNoT2Zm
c2V0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUpvaW4o
bV9saW5lSm9pbik7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCi17Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJsaW5lLWpvaW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAotewotICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0
ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoIm1pdHJlLWxpbWl0
IiwgbWl0ZXJMaW1pdC5taXRlckxpbWl0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBD
bGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAg
IGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLX0KLQogdm9pZCBDbGlwOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7CkBAIC02
NTcsMzAgKzU0MiwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwog
fQogCi12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX29w
LCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCi17Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29s
b3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJh
dGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJi
bGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCiB2b2lk
IEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9ibGVuZE1v
ZGUpOworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvcik7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxs
Um91bmRlZFJlY3QmIGl0ZW0pCiB7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5y
b3VuZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigp
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9kZSgpKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTc2OCw4ICs2MzgsOCBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbEVsbGlwc2UmIGl0ZW0pCiB9
CiAKICNpZiBFTkFCTEUoVklERU8pCi1QYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQot
ICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkpCitQYWludEZyYW1lRm9yTWVk
aWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKKyAgICA6IG1faWRlbnRpZmllcihpZGVudGlm
aWVyKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKIHsKIH0KQEAgLTEwMTEsMTkg
Kzg4MSwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
SXRlbVR5cGUgdHlwZSkKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
YXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6IHRz
IDw8ICJyZXN0b3JlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOiB0cyA8
PCAidHJhbnNsYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOiB0cyA8PCAi
cm90YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6IHRzIDw8ICJzY2FsZSI7
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogdHMgPDwgInNldC1jdG0iOyBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMgPDwgImNvbmNhdGVudGF0
ZS1jdG0iOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6IHRz
IDw8ICJzZXQtaW5saW5lLWZpbGwtY29sb3IiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVTdHJva2VDb2xvcjogdHMgPDwgInNldC1pbmxpbmUtc3Ryb2tlLWNvbG9yIjsgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOiB0cyA8PCAic2V0LXN0
cm9rZS10aGlja25lc3MiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTogdHMg
PDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6IHRz
IDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFz
aDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0IjsgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwVG9JbWFnZUJ1ZmZlcjogdHMgPDwgImNsaXAtdG8taW1hZ2UtYnVmZmVyIjsgYnJlYWs7CkBA
IC0xMDQ2LDcgKzkwNyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB0cyA8
PCAiZmlsbC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29s
b3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQi
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHRzIDw8ICJm
aWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3Vu
ZGVkUmVjdDogdHMgPDwgImZpbGwtcm91bmRlZC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1yb3Vu
ZGVkLWhvbGUiOyBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKQEAgLTEwNzgs
NyArOTM4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjogdHMg
PDwgImFwcGx5LWZpbGwtcGF0dGVybiI7IGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlw
ZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogdHMgPDwgImFwcGx5LWRldmljZS1zY2FsZS1mYWN0
b3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogdHMgPDwgImNsZWFy
LXNoYWRvdyI7IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7CiB9CkBAIC0xMDg4LDIxICs5
NDcsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxl
IGl0ZW0pCiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgp
KSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICB0cyA8PCBpdGVtLmdl
dDxUcmFuc2xhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0
ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Um90YXRlPigpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2NhbGU+KCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q29uY2F0ZW5hdGVDVE0+
KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpOwogICAgICAg
ICBicmVhazsKQEAgLTExMTUsMTggKzk1OSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZToKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3RhdGU+KCk7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNl
dExpbmVDYXA+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVE
YXNoOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lRGFzaD4oKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PFNldExpbmVKb2luPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpOwot
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICB0cyA8PCBp
dGVtLmdldDxDbGlwPigpOwogICAgICAgICBicmVhazsKQEAgLTExOTMsOSArMTAyNSw2IEBAIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Rmls
bENvbXBvc2l0ZWRSZWN0PigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4o
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjcxLDcgKzExMDAsNiBAQCBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlw
ZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRl
cm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
CmluZGV4IDk3Y2I1ZmM4ZDA0YmE4NjYyYjcyYzdkZGVlYmM0NDE1NWMyODI1YjcuLmU4MWJiMzQ2
YzllZmViZTk2YTY1MGQ3NTQ1YTgxZjYxNmI3ZDZhOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaApAQCAtODUsMTA0ICs4NSw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogfTsKIAotY2xhc3MgVHJhbnNs
YXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OlRyYW5zbGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwotCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgICAgIDogbV94KHgp
Ci0gICAgICAgICwgbV95KHkpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IHgoKSBjb25zdCB7
IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1w
cml2YXRlOgotICAgIGZsb2F0IG1feCB7IDAgfTsKLSAgICBmbG9hdCBtX3kgeyAwIH07Ci19Owot
Ci1jbGFzcyBSb3RhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7Ci0KLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgICAgIDogbV9hbmds
ZShhbmdsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgYW5nbGUoKSBjb25zdCB7IHJldHVy
biBtX2FuZ2xlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fYW5nbGUgeyAwIH07IC8vIElu
IHJhZGlhbnMuCi19OwotCi1jbGFzcyBTY2FsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTY2FsZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2NhbGUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQotICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBG
bG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBGbG9hdFNpemUgbV9zaXplOwotfTsKLQotY2xhc3MgU2V0Q1RNIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldENUTTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAgICA6IG1fdHJhbnNmb3JtKHRy
YW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCi1jbGFzcyBDb25jYXRlbmF0ZUNUTSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpDb25jYXRlbmF0ZUNUTTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwotCi0gICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsK
LX07Ci0KIGNsYXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I7
CkBAIC0yNDcsMTAgKzE0OSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mp
OwotCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlJiBzdGF0ZUNoYW5nZSgpIHsgcmV0dXJuIG1fc3RhdGVDaGFuZ2U7IH0KKyAgICBXRUJD
T1JFX0VYUE9SVCBleHBsaWNpdCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYp
OworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKQEAgLTI1OCw0MDQgKzE1OCwyNiBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KTsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSYpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ug
bV9zdGF0ZUNoYW5nZTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwogfTsKIAog
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgU2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewotICAgIGF1dG8gY2hhbmdlRmxhZ3MgPSBtX3N0YXRlQ2hhbmdlLm1f
Y2hhbmdlRmxhZ3M7Ci0gICAgZW5jb2RlciA8PCBjaGFuZ2VGbGFnczsKLQotICAgIGF1dG8mIHN0
YXRlID0gbV9zdGF0ZUNoYW5nZS5tX3N0YXRlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRlLnN0cm9rZUdyYWRpZW50KTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3Rh
dGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBB
U1NFUlQoc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLnN0
cm9rZVBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChz
dGF0ZS5maWxsR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5maWxsR3JhZGll
bnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmZpbGxQ
YXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuZmlsbFBhdHRlcm47Ci0gICAgfQot
Ci0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93T2Zmc2V0OwotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZTsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLnN0cm9rZUNvbG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLmZpbGxDb2xvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0
YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
ZmlsbFJ1bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwg
c3RhdGUuYmxlbmRNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAg
ZW5jb2RlciA8PCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0gICAgaWYgKGNo
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYWxwaGE7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkQW50aWFsaWFzOwotCi0gICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5n
ZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHM7Ci0KLSAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgZW5jb2Rl
ciA8PCBtX3N0YXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3RkOjpvcHRpb25h
bDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIHN0
ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3M+IGNoYW5n
ZUZsYWdzOwotICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7Ci0gICAgaWYgKCFjaGFuZ2VGbGFn
cykKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBzdGF0ZTsKKyAgICBk
ZWNvZGVyID4+IHN0YXRlOworICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZTsKLSAg
ICBzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzID0gKmNoYW5nZUZsYWdzOwotCi0gICAgaWYgKHN0
YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0cm9rZUdyYWRpZW50ID0gR3Jh
ZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFzdHJva2VHcmFkaWVudCkKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoKnN0cm9rZUdyYWRpZW50KTsKLSAgICB9Ci0K
LSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgYXV0byBzdHJva2VQYXR0
ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIXN0cm9rZVBhdHRl
cm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUoKnN0cm9rZVBhdHRlcm4pOwotICAg
IH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gZmlsbEdy
YWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFmaWxsR3Jh
ZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZSgqZmlsbEdyYWRpZW50KTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gZmlsbFBh
dHRlcm4gPSBQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghZmlsbFBhdHRl
cm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKCpmaWxsUGF0dGVybik7Ci0gICAgfQot
Ci0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNp
emU+IHNoYWRvd09mZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dPZmZzZXQ7Ci0gICAg
ICAgIGlmICghc2hhZG93T2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd09mZnNldCA9ICpzaGFkb3dPZmZz
ZXQ7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2hhZG93Qmx1cjsKLSAgICAgICAg
ZGVjb2RlciA+PiBzaGFkb3dCbHVyOwotICAgICAgICBpZiAoIXNoYWRvd0JsdXIpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUu
c2hhZG93Qmx1ciA9ICpzaGFkb3dCbHVyOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+
IHNoYWRvd0NvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd0NvbG9yOwotICAgICAgICBp
ZiAoIXNoYWRvd0NvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
ICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0NvbG9yID0gKnNoYWRvd0NvbG9yOwotCi0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4gc2hhZG93UmFkaXVzTW9kZTsK
LSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dSYWRpdXNNb2RlOwotICAgICAgICBpZiAoIXNoYWRv
d1JhZGl1c01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAg
IHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFdURk1vdmUoKnNoYWRvd1Jh
ZGl1c01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKSB7Ci0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHN0cm9rZVRoaWNrbmVzczsKLSAgICAgICAgZGVj
b2RlciA+PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGlmICghc3Ryb2tlVGhpY2tuZXNzKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5t
X3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9ICpzdHJva2VUaGlja25lc3M7Ci0gICAgfQotCi0gICAg
aWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxUZXh0
RHJhd2luZ01vZGVGbGFncz4gdGV4dERyYXdpbmdNb2RlOwotICAgICAgICBkZWNvZGVyID4+IHRl
eHREcmF3aW5nTW9kZTsKLSAgICAgICAgaWYgKCF0ZXh0RHJhd2luZ01vZGUpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUudGV4
dERyYXdpbmdNb2RlID0gV1RGTW92ZSgqdGV4dERyYXdpbmdNb2RlKTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IHN0
cm9rZUNvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHN0cm9rZUNvbG9yOwotICAgICAgICBpZiAo
IXN0cm9rZUNvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAg
ICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZUNvbG9yID0gKnN0cm9rZUNvbG9yOwotICAgIH0K
LQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29s
b3I+IGZpbGxDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxsQ29sb3I7Ci0gICAgICAgIGlm
ICghZmlsbENvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAg
ICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxDb2xvciA9ICpmaWxsQ29sb3I7Ci0gICAgfQotCi0g
ICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkgewotICAgICAgICBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJva2VTdHlsZSkpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUu
c3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2Uu
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFu
Z2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8V2luZFJ1bGU+IGZpbGxSdWxlOwotICAgICAg
ICBkZWNvZGVyID4+IGZpbGxSdWxlOwotICAgICAgICBpZiAoIWZpbGxSdWxlKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZp
bGxSdWxlID0gKmZpbGxSdWxlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlT3BlcmF0b3I+IGNvbXBv
c2l0ZU9wZXJhdG9yOwotICAgICAgICBkZWNvZGVyID4+IGNvbXBvc2l0ZU9wZXJhdG9yOwotICAg
ICAgICBpZiAoIWNvbXBvc2l0ZU9wZXJhdG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yID0g
KmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpKSB7
Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0gICAgICAgIGRl
Y29kZXIgPj4gYmxlbmRNb2RlOwotICAgICAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5ibGVu
ZE1vZGUgPSAqYmxlbmRNb2RlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFs
aXR5PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgICAgICBkZWNvZGVyID4+IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGlmICghaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gKmltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgewotICAgICAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBhbHBoYTsKLSAgICAgICAgZGVjb2RlciA+PiBhbHBoYTsKLSAg
ICAgICAgaWYgKCFhbHBoYSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAg
ICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5hbHBoYSA9ICphbHBoYTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+
IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91bGRBbnRpYWxpYXM7Ci0g
ICAgICAgIGlmICghc2hvdWxkQW50aWFsaWFzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9ICpz
aG91bGRBbnRpYWxpYXM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZFNtb290aEZvbnRzOwotICAg
ICAgICBkZWNvZGVyID4+IHNob3VsZFNtb290aEZvbnRzOwotICAgICAgICBpZiAoIXNob3VsZFNt
b290aEZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBz
dGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0gKnNob3VsZFNtb290aEZvbnRz
OwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKSB7
Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
OwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICAg
ICAgaWYgKCFzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzID0gKnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICB9Ci0K
LSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6
b3B0aW9uYWw8Ym9vbD4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAgIGRlY29kZXIg
Pj4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAgIGlmICghc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSAqc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgeyBzdGF0ZUNoYW5nZSB9IH07Ci19
Ci0KLWNsYXNzIFNldExpbmVDYXAgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUNhcDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAp
Ci0gICAgICAgIDogbV9saW5lQ2FwKGxpbmVDYXApCi0gICAgewotICAgIH0KLQotICAgIExpbmVD
YXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBMaW5lQ2FwIG1fbGluZUNhcDsKLX07Ci0KLWNsYXNzIFNldExpbmVEYXNoIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExp
bmVEYXNoOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAg
U2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQp
Ci0gICAgICAgIDogbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAgICAgICAsIG1fZGFzaE9mZnNl
dChkYXNoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hB
cnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9Ci0gICAgZmxvYXQgZGFzaE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFzaD4gZGVjb2RlKERlY29k
ZXImKTsKLQotcHJpdmF0ZToKLSAgICBEYXNoQXJyYXkgbV9kYXNoQXJyYXk7Ci0gICAgZmxvYXQg
bV9kYXNoT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TGlu
ZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV9kYXNoQXJyYXk7Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hPZmZzZXQ7CisgICAgcmV0dXJuIFNl
dFN0YXRlKCpzdGF0ZSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1zdGQ6Om9wdGlv
bmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgc3RkOjpvcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJheTsKLSAgICBkZWNvZGVyID4+
IGRhc2hBcnJheTsKLSAgICBpZiAoIWRhc2hBcnJheSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGRhc2hPZmZzZXQ7Ci0gICAgZGVjb2Rl
ciA+PiBkYXNoT2Zmc2V0OwotICAgIGlmICghZGFzaE9mZnNldCkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqZGFzaEFycmF5LCAqZGFzaE9mZnNldCB9fTsK
LX0KLQotY2xhc3MgU2V0TGluZUpvaW4gewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUpvaW47Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExpbmVKb2luKExpbmVKb2luIGxp
bmVKb2luKQotICAgICAgICA6IG1fbGluZUpvaW4obGluZUpvaW4pCi0gICAgewotICAgIH0KLQot
ICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBMaW5lSm9pbiBtX2xpbmVKb2luOwotfTsKLQotY2xhc3MgU2V0TWl0ZXJM
aW1pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7Ci0KLSAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi0gICAgICAg
IDogbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IG1p
dGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7IH0KLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0g
ICAgZmxvYXQgbV9taXRlckxpbWl0OwotfTsKLQotY2xhc3MgQ2xlYXJTaGFkb3cgewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xl
YXJTaGFkb3c7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci19Owot
CiAvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2luZyBpdGVtPwogY2xhc3MgQ2xpcCB7CiBwdWJsaWM6
CkBAIC0xNjEyLDkxICsxMTM0LDIwIEBAIHN0ZDo6b3B0aW9uYWw8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlCiAgICAgcmV0
dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0KCkgfX07CiB9CiAKLWNsYXNzIEZpbGxDb21wb3Np
dGVkUmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKLQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi0gICAgICAgIDogbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9jb2xv
cihjb2xvcikKLSAgICAgICAgLCBtX29wKG9wKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5k
TW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2Nv
bG9yOyB9Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7
IHJldHVybiBtX29wOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxlbmRNb2RlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQotICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZh
dGU6Ci0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBtX2NvbG9yOwotICAgIENvbXBv
c2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOwotfTsKLQotdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNv
ZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX29wOwotICAgIGVuY29kZXIgPDwgbV9i
bGVuZE1vZGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1zdGQ6Om9wdGlvbmFsPEZp
bGxDb21wb3NpdGVkUmVjdD4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVy
ID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7Ci0gICAgZGVjb2RlciA+PiBjb2xvcjsK
LSAgICBpZiAoIWNvbG9yKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3Rk
OjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3A7Ci0gICAgZGVjb2RlciA+PiBvcDsKLSAg
ICBpZiAoIW9wKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRp
b25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKLSAg
ICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJl
dHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUgfX07Ci19Ci0KIGNsYXNzIEZp
bGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUp
CisgICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICAgICAgLCBtX2NvbG9y
KGNvbG9yKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKICAgICB7CiAgICAgfQog
CiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2Nv
bG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRN
b2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9u
YWw8RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMTcwOSw3ICsxMTYwLDYg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVjdDsKICAgICBD
b2xvciBtX2NvbG9yOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKIH07CiAKIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+CkBAIC0xNzE3LDcgKzExNjcsNiBAQCB2b2lkIEZpbGxSb3VuZGVkUmVj
dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX3Jl
Y3Q7CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAgIGVuY29kZXIgPDwgbV9ibGVuZE1vZGU7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0xNzMzLDEyICsxMTgyLDcgQEAgc3Rk
OjpvcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IEZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0gICAgZGVjb2Rl
ciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSB9fTsK
KyAgICByZXR1cm4geyB7ICpyZWN0LCAqY29sb3IgfSB9OwogfQogCiBjbGFzcyBGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSB7CkBAIC0xOTYxLDcgKzE0MDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgUGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CkBAIC0yMjU2LDEzICsxNzAwLDExIEBA
IHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgIDwgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcgogICAgICwgQmVnaW5UcmFuc3BhcmVuY3lMYXllcgogICAgICwgQ2xlYXJSZWN0
Ci0gICAgLCBDbGVhclNoYWRvdwogICAgICwgQ2xpcAogICAgICwgQ2xpcE91dAogICAgICwgQ2xp
cE91dFRvUGF0aAogICAgICwgQ2xpcFBhdGgKICAgICAsIENsaXBUb0ltYWdlQnVmZmVyCi0gICAg
LCBDb25jYXRlbmF0ZUNUTQogICAgICwgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcgogICAgICwg
RHJhd0VsbGlwc2UKICAgICAsIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyCkBAIC0yMjc4LDcgKzE3
MjAsNiBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZhcmlhbnQKICAgICAsIERyYXdS
ZWN0CiAgICAgLCBEcmF3U3lzdGVtSW1hZ2UKICAgICAsIEVuZFRyYW5zcGFyZW5jeUxheWVyCi0g
ICAgLCBGaWxsQ29tcG9zaXRlZFJlY3QKICAgICAsIEZpbGxFbGxpcHNlCiAgICAgLCBGaWxsUGF0
aAogICAgICwgRmlsbFJlY3QKQEAgLTIyODgsMjMgKzE3MjksMTUgQEAgdXNpbmcgRGlzcGxheUxp
c3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgLCBGaWxsUm91bmRlZFJlY3QKICAgICAsIEZsdXNo
Q29udGV4dAogICAgICwgUmVzdG9yZQotICAgICwgUm90YXRlCiAgICAgLCBTYXZlCi0gICAgLCBT
Y2FsZQotICAgICwgU2V0Q1RNCiAgICAgLCBTZXRJbmxpbmVGaWxsQ29sb3IKICAgICAsIFNldElu
bGluZVN0cm9rZUNvbG9yCi0gICAgLCBTZXRMaW5lQ2FwCi0gICAgLCBTZXRMaW5lRGFzaAotICAg
ICwgU2V0TGluZUpvaW4KLSAgICAsIFNldE1pdGVyTGltaXQKICAgICAsIFNldFN0YXRlCiAgICAg
LCBTZXRTdHJva2VUaGlja25lc3MKICAgICAsIFN0cm9rZUVsbGlwc2UKICAgICAsIFN0cm9rZUxp
bmUKICAgICAsIFN0cm9rZVBhdGgKICAgICAsIFN0cm9rZVJlY3QKLSAgICAsIFRyYW5zbGF0ZQog
CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgLCBGaWxsTGluZQpAQCAtMjM0MSwy
MCArMTc3NCwxMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNhdmUsCiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6VHJhbnNsYXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Um90YXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2NhbGUsCi0g
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRDVE0sCi0gICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSwKICAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvciwKICAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yLAogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzLAogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U2V0TGluZURhc2gsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRM
aW5lSm9pbiwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1pdGVyTGlt
aXQsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclNoYWRvdywKICAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXAsCiAgICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC0yMzc2LDcgKzE3OTksNiBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewog
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3QsCiAgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvciwKICAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50LAotICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0LAogICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0LAogICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCiAjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHAKaW5kZXggZWVlNDQ3MWQzNTRlNzUxNTMxMjUxODlkZmNjOTQxOGEzOTQ1MTRhMS4uYTUz
NTA5OTgwYTkzMTQwN2U5MWU1NGY5ZjkyMzI1Y2U1ZTVkMDVkYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNDIsMzUwICs0MiwxODkgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLVJlY29yZGVyOjpSZWNvcmRl
cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5p
dGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1Jl
Y29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAg
IDogbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3RydWN0RHJhd0dseXBocykKLXsK
LSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUsIGluaXRpYWxDVE0sIGluaXRpYWxDVE0u
bWFwUmVjdChpbml0aWFsQ2xpcCkgfSk7Ci19CitSZWNvcmRlcjo6UmVjb3JkZXIoY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdH
bHlwaHMpCisgICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENsaXAsIHsgfSwgIGluaXRpYWxD
VE0pCisgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZGVjb25zdHJ1Y3REcmF3R2x5
cGhzKQogCi1SZWNvcmRlcjo6flJlY29yZGVyKCkKIHsKLSAgICBBU1NFUlQobV9zdGF0ZVN0YWNr
LnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5kaWNhdGVzIG1pc21hdGNoZWQg
c2F2ZS9yZXN0b3JlLgogfQogCi1zdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNo
YW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQotewotICAgIHN0YXRp
YyBjb25zdGV4cHIgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgaW5saW5l
U3RhdGVDaGFuZ2VGbGFncyB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xv
ckNoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwK
LSAgICB9OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFuZ2VGbGFncyAmIGlubGluZVN0
YXRlQ2hhbmdlRmxhZ3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSAm
JiAhY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CitSZWNvcmRlcjo6flJlY29yZGVyKCkgPSBkZWZhdWx0OwogCi0g
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29s
b3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLnRyeUdldEFzU1JHQkFCeXRl
cygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBjaGFuZ2VGbGFncykKK3ZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewotICAgIGlmICghY29udGFp
bnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNoYW5nZXMsIGNoYW5nZUZsYWdzKSkgewotICAgICAg
ICBpZiAoYXV0byBwYXR0ZXJuID0gY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVBhdHRlcm4pCi0gICAg
ICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7Ci0gICAgICAg
IGlmIChhdXRvIHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuZmlsbFBhdHRlcm4pCi0gICAgICAg
ICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7Ci0gICAgICAgIHJl
Y29yZFNldFN0YXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldElubGluZVN0cm9r
ZUNvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkp
OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRTdHJva2VUaGlja25lc3Mo
Y2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAg
IHJlY29yZFNldElubGluZUZpbGxDb2xvcigqY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlH
ZXRBc1NSR0JBQnl0ZXMoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CisgICAgcmVj
b3JkU2F2ZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpCit2b2lkIFJlY29yZGVyOjpyZXN0b3JlKCkKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBpcyBjdXJyZW50bHkgaW52b2tlZCBpbiBhbiBhZC1ob2MgbWFubmVyIHdoZW4gcmVjb3JkaW5n
IGRyYXdpbmcgaXRlbXMuIFdlIHNob3VsZCBjb25zaWRlciBlaXRoZXIKLSAgICAvLyBzcGxpdHRp
bmcgR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5nZXMgaW50byBpbmRpdmlkdWFsIGRpc3BsYXkg
bGlzdCBpdGVtcywgb3IgcmVmYWN0b3JpbmcgdGhlIGNvZGUgc3VjaCB0aGF0Ci0gICAgLy8gdGhp
cyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBpbnZva2VkIHdoZW4gcmVjb3JkaW5nIGEgZHJhd2lu
ZyBpdGVtLgotICAgIGF1dG8mIHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hh
bmdlOwotICAgIGF1dG8gY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBzdGF0ZUNoYW5nZXMuY2hhbmdl
c0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlKTsKLSAgICBpZiAoIWNo
YW5nZXNGcm9tTGFzdFN0YXRlKQorICAgIGlmICghc3RhY2tTaXplKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJlLWRy
YXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRl
Q2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOwotICAgIGFwcGVuZFN0YXRl
Q2hhbmdlSXRlbShzdGF0ZUNoYW5nZXMsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKTsKLSAgICBzdGF0
ZUNoYW5nZXMubV9jaGFuZ2VGbGFncyA9IHsgfTsKLSAgICBjdXJyZW50U3RhdGUoKS5sYXN0RHJh
d2luZ1N0YXRlID0gc3RhdGVDaGFuZ2VzLm1fc3RhdGU7Ci19Ci0KLWNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBSZWNvcmRlcjo6c3RhdGUoKSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50
U3RhdGUoKS5zdGF0ZUNoYW5nZS5tX3N0YXRlOwotfQotCi12b2lkIFJlY29yZGVyOjpkaWRVcGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGN1cnJlbnRTdGF0ZSgpLnN0
YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgcmVjb3JkU2V0TGluZUNhcChsaW5l
Q2FwKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBk
YXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgcmVjb3JkU2V0TGluZURhc2goZGFz
aEFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZUpvaW4oTGlu
ZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgcmVjb3JkU2V0TGluZUpvaW4obGluZUpvaW4pOwotfQot
Ci12b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAg
cmVjb3JkU2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJl
c3RvcmUoKTsKKyAgICByZWNvcmRSZXN0b3JlKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1
bHRzKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMoKQogewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IGZp
bHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkpIHsKLSAgICAg
ICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQoKSk7Ci0gICAg
ICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3VyY2VJbWFnZSgpKSkgewotICAg
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJ
bWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFzb3VyY2VJbWFnZSkgewotICAgICAg
ICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihudWxscHRyLCBzb3VyY2VJbWFnZVJlY3Qs
IGZpbHRlcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoKnNvdXJjZUltYWdlKSkgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdl
LCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291
cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewot
ICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKLX0KKyAgICBpZiAoc3Rh
dGUoKS5oYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpKSB7CisgICAgICAgIGlmIChzdGF0ZSgpLmNo
YW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1c2gp
KQorICAgICAgICAgICAgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKCpmaWxsQ29sb3IoKS50cnlH
ZXRBc1NSR0JBQnl0ZXMoKSk7CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHNBbmRDYWNoZUZv
bnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNv
dXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7Ci0gICAgcmVjb3JkRHJhd0dseXBocyhm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUp
OwotfQorICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKQorICAgICAgICAgICAgcmVjb3JkU2V0SW5s
aW5lU3Ryb2tlQ29sb3IoKnN0cm9rZUNvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwogCi12
b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdl
SXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3MpKQorICAgICAg
ICAgICAgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKIAotICAg
IGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CisgICAgICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICByZWNvcmREcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUlt
YWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7Ci0gICAgcmVjb3Jk
RHJhd05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFn
ZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgcmVjb3JkRHJhd1N5c3RlbUltYWdlKHN5c3RlbUlt
YWdlLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7Ci0gICAgcmVj
b3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RS
ZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAg
ICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCkpIHsKKyAgICAgICAgaWYgKGF1dG8gcGF0dGVy
biA9IGZpbGxQYXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJu
LT50aWxlSW1hZ2UoKSk7CiAgICAgfQogCi0gICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2VCdWZm
ZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29y
ZGVyOjpzYXZlKCkKLXsKLSAgICByZWNvcmRTYXZlKCk7Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKCFtX3N0YXRlU3RhY2suc2l6ZSgpKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkgeworICAgICAgICBpZiAoYXV0byBwYXR0ZXJu
ID0gc3Ryb2tlUGF0dGVybigpKQorICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVy
bi0+dGlsZUltYWdlKCkpOworICAgIH0KIAotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7
Ci0gICAgcmVjb3JkUmVzdG9yZSgpOworICAgIHJlY29yZFNldFN0YXRlKHN0YXRlKCkpOworICAg
IGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KQotewotICAgIGN1cnJlbnRTdGF0ZSgpLnRyYW5zbGF0ZSh4LCB5KTsK
LSAgICByZWNvcmRUcmFuc2xhdGUoeCwgeSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucykKKyNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVyOjphcHBseVN0
cm9rZVBhdHRlcm4oKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnJvdGF0ZShhbmdsZUluUmFkaWFu
cyk7Ci0gICAgcmVjb3JkUm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpOwogfQogCi12b2lkIFJlY29y
ZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIFJlY29yZGVyOjphcHBseUZp
bGxQYXR0ZXJuKCkKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5zY2FsZShzaXplKTsKLSAgICByZWNv
cmRTY2FsZShzaXplKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEFwcGx5
RmlsbFBhdHRlcm4oKTsKIH0KKyNlbmRpZgogCi12b2lkIFJlY29yZGVyOjpjb25jYXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIFJlY29yZGVyOjphcHBseURldmlj
ZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgIGlmICh0cmFuc2Zv
cm0uaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NDb250ZXh0Ojph
cHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgIGN1cnJlbnRT
dGF0ZSgpLmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29yZENvbmNhdGVuYXRlQ1RNKHRy
YW5zZm9ybSk7CisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hpY2gg
d2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCisgICAgLy8gQXNzZXJ0
IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAgICByZWNvcmRBcHBseURldmljZVNj
YWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6c2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBSZWNvcmRlcjo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnNl
dENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29yZFNldENUTSh0cmFuc2Zvcm0pOwotfQorICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CiAKLUFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdAotewotICAgIHJldHVybiBj
dXJyZW50U3RhdGUoKS5jdG07Ci19CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKG9wYWNpdHkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwogCi12b2lk
IFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZXRBbHBoYShvcGFjaXR5
KTsKICAgICByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIG1fc3Rh
dGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclRyYW5zcGFyZW5jeUxh
eWVyKCkpOwogfQogCiB2b2lkIFJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0g
ICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRFbmRUcmFu
c3BhcmVuY3lMYXllcigpOwotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci19CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgYXBwZW5kU3RhdGVD
aGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3UmVjdChyZWN0LCBib3JkZXJU
aGlja25lc3MpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdMaW5lKHBvaW50MSwgcG9pbnQy
KTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0
eWxlKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkRHJhd0xpbmVzRm9yVGV4dChGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CisgICAgcmVjb3JkRW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQordm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAgICByZWNvcmRDbGlwKHJlY3QpOwog
fQogCi12b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVs
ZSkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29y
ZERyYXdFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAgcmVjb3JkQ2xpcFBhdGgo
cGF0aCwgd2luZFJ1bGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3
UGF0aChwYXRoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsaXBPdXQo
cmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBS
ZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwg
d2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVj
b3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNv
cmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLX0KKyAg
ICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3Qp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBSZWNv
cmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29s
b3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKK3ZvaWQgUmVjb3JkZXI6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsZWFyUmVjdChyZWN0KTsKIH0KLSNl
bmRpZgogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVy
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29sb3IpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50
JiBncmFkaWVudCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQo
cmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmlsbENvbXBvc2l0ZWRS
ZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29yZGVyOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmlsbFJvdW5kZWRS
ZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBj
b2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLSAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJl
Y3QsIGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxFbGxp
cHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBpZiAocGF0
aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YTxMaW5l
RGF0YT4oKSkKQEAgLTQwMiwyMSArMjQxLDIxIEBAIHZvaWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkRmlsbFBhdGgocGF0aCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6
OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
CiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRG
aWxsRWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZFN0
cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6c3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgUmVj
b3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkU3Ryb2tlUmVjdChyZWN0
LCBsaW5lV2lkdGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkU3Ryb2tl
RWxsaXBzZShyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBp
ZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0
YTxMaW5lRGF0YT4oKSkKQEAgLTQzMywxNDggKzI3MiwxNjggQEAgdm9pZCBSZWNvcmRlcjo6c3Ry
b2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHJlY29yZFN0cm9rZVBhdGgocGF0aCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
dm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsK
LSAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBS
ZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQyKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkQ2xlYXJSZWN0KHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3Jk
RHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwogfQogCi0jaWYgVVNFKENHKQotdm9pZCBSZWNvcmRl
cjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkRHJhd0VsbGlwc2UocmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6
OmFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJl
Y29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJl
Y29yZERyYXdQYXRoKHBhdGgpOwogfQotI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6OmNsaXAoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QoY3VycmVudFN0YXRl
KCkuY3RtLm1hcFJlY3QocmVjdCkpOwotICAgIHJlY29yZENsaXAocmVjdCk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICByZWNvcmRDbGlwT3V0KHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKKyNp
ZiBQTEFURk9STShNQUMpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
LCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAgcmVjb3JkQ2xpcE91dFRvUGF0
aChwYXRoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBj
b25zdCBDb2xvciYpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3Qo
Y3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpKTsKLSAg
ICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KKyNlbmRpZgogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91bmRzKCkgY29uc3QKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKGF1dG8gaW52ZXJzZSA9IGN1
cnJlbnRTdGF0ZSgpLmN0bS5pbnZlcnNlKCkpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGludmVyc2UtPm1hcFJlY3QoY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcykpOworICAgIGlm
ICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAvLyBJZiB0aGUgQ1RNIGlzIG5v
dCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlY3QuCi0gICAgLy8gVGhpcyBtYXRj
aGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9ybSBiZWhhdmlvci4KLSAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXIm
IGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKIHsKLSAgICByZWNvcmRSZXNvdXJjZVVz
ZShpbWFnZUJ1ZmZlcik7Ci0gICAgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIs
IGRlc3RSZWN0KTsKLX0KKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IGZpbHRlci5lZmZlY3RzT2ZU
eXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkpIHsKKyAgICAgICAgYXV0byYgZmVJbWFn
ZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQoKSk7CisgICAgICAgIGlmICghcmVjb3Jk
UmVzb3VyY2VVc2UoZmVJbWFnZS5zb3VyY2VJbWFnZSgpKSkgeworICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1h
Z2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01v
ZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiByZW5kZXJp
bmdNZXRob2QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2Rl
LCByZW5kZXJpbmdNZXRob2QudmFsdWVfb3IoUmVuZGVyaW5nTWV0aG9kOjpEaXNwbGF5TGlzdCkp
OwotfQorICAgIGlmICghc291cmNlSW1hZ2UpIHsKKyAgICAgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIobnVsbHB0ciwgc291cmNl
SW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0jaWYgRU5BQkxF
KFZJREVPKQotdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBw
bGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKCFwbGF5ZXIu
aWRlbnRpZmllcigpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1l
ZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoKnNv
dXJjZUltYWdlKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQVNTRVJUKHBsYXllci5pZGVudGlmaWVyKCkpOwot
ICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIo
c291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKIH0KLSNlbmRpZgogCi12b2lk
IFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
KQordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgLy8gV2UgbW9kaWZ5IHRoZSBzdGF0ZSBkaXJlY3RseSBoZXJlIGluc3RlYWQgb2Yg
Y2FsbGluZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKCkKLSAgICAvLyBiZWNhdXNlIHRoZSByZWNv
cmRlZCBpdGVtIHdpbGwgc2NhbGUoKSB3aGVuIHJlcGxheWVkLgotICAgIGN1cnJlbnRTdGF0ZSgp
LnNjYWxlKHsgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yIH0pOworICAgIHJl
Y29yZFJlc291cmNlVXNlKGltYWdlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJl
Y29yZERyYXdOYXRpdmVJbWFnZShpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CiAKLSAgICAvLyBGSVhN
RTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRhdGUgYWxsIG9m
IG91ciBjYWNoZWQgZXh0ZW50cy4KLSAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVk
IGVhcmx5IG9uPwotICAgIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVG
YWN0b3IpOwordm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0
ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRl
c3RpbmF0aW9uUmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2Rl
KQordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQogewotICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNl
UGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlzcGxheUxpc3Q6OlJlY29yZGVy
LiIpOwotICAgIHJldHVybiByZWN0OworICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdlLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotY29uc3QgUmVjb3JkZXI6OkNv
bnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpIGNvbnN0Cit2b2lkIFJlY29yZGVy
OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJldHVybiBtX3N0YXRlU3RhY2su
bGFzdCgpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNv
cmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwg
ZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0
aW9ucyk7CiB9CiAKLVJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpjdXJyZW50U3Rh
dGUoKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewot
ICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9zdGF0ZVN0YWNr
Lmxhc3QoKTsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29y
ZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigpLCBkZXN0aW5hdGlvbik7CiB9
CisjZW5kaWYKIAotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZWNvcmRlcjo6Y3RtKCkgY29uc3QK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1
bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9v
dGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0
bTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRy
YXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBz
bW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjp0cmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHNBbmRDYWNoZUZv
bnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7
Ci0gICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICByZWNvcmRSZXNvdXJjZVVzZShjb25zdF9j
YXN0PEZvbnQmPihmb250KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRE
cmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21v
b3RoaW5nTW9kZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKGZs
b2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0g
ICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzID0gcmFkMmRlZyhzdGF0aWNfY2FzdDxkb3VibGU+KGFu
Z2xlSW5SYWRpYW5zKSk7Ci0gICAgY3RtLnJvdGF0ZShhbmdsZUluRGVncmVlcyk7Ci0gICAgCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uOwotICAgIHJvdGF0aW9uLnJvdGF0ZShhbmdsZUlu
RGVncmVlcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TGluZXNG
b3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCit2b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgY3Rt
LnNjYWxlKHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNv
bnRleHRTdGF0ZTo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorUmVmUHRy
PEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2Rl
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAog
ewotICAgIGN0bSA9IG1hdHJpeDsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01v
ZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdNZXRob2Q6OkRpc3BsYXlMaXN0
KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgbWF0cml4KQorRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01v
ZGUpCiB7Ci0gICAgY3RtICo9IG1hdHJpeDsKKyAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29u
dGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIERp
c3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKKyAgICByZXR1cm4gcmVjdDsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmlu
ZGV4IDg0NWVjMDA3NzJlZDJjNTRhMWU2Y2IyNmIyMTUxZGFiYWE2ZWMwNzUuLmFlMzQzNzliZTY3
ZjA1ZTEwNDJmNmFkYzVhYWJmODhjMjcwYzE3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRl
bXMuaCIKICNpbmNsdWRlICJEcmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgog
I2luY2x1ZGUgIklubGluZVBhdGhEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MSw3ICs1MCw3IEBAIGNsYXNzIFJlY29yZGVy
IDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwogcHVibGljOgotICAgIFdFQkNP
UkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRHJhd0dseXBoc1Jl
Y29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBoczo6WWVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihjb25z
dCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBo
c1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkgPSAwOwpAQCAtNjEsNDcgKzYwLDM1IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2F2ZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkUmVzdG9yZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkUm90YXRlKGZsb2F0IGFu
Z2xlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldElubGluZUZp
bGxDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRJ
bmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRM
aW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRTZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRTZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZENsZWFy
U2hhZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpID0gMDsKKworI2lmIFVTRShDRykKKyAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRB
cHBseUZpbGxQYXR0ZXJuKCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
QmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRD
bGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENs
aXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0
aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdp
bmRSdWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRl
ciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQ
YXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29y
ZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hv
ciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0
IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNv
bnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOworCiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxs
Q29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxBcmMoY29uc3QgQXJjRGF0YSYpID0gMDsK
QEAgLTEwOSwxMSArOTYsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRG
aWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgPSAwOwogI2VuZGlmCiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSNpZiBFTkFC
TEUoVklERU8pCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0gMDsKLSNlbmRpZgotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRT
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0
YSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEm
KSA9IDA7CkBAIC0xMjEsMTE2ICsxMDcsODEgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSA9IDA7CiAj
ZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0
dGVybigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBGaWx0ZXImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRl
cm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0gMDsKICNlbmRpZgotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxl
JikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdl
JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShJbWFnZUJ1ZmZlciYp
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3QgU291cmNlSW1h
Z2UmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKEZvbnQmKSA9IDA7
CiAKLSAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0
bTsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHM7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBs
YXN0RHJhd2luZ1N0YXRlOwotCi0gICAgICAgIENvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25z
dCBGbG9hdFJlY3QmIGNsaXApCi0gICAgICAgICAgICA6IGN0bSh0cmFuc2Zvcm0pCi0gICAgICAg
ICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKLSAgICAgICAgICAgICwgbGFzdERyYXdpbmdTdGF0ZShz
dGF0ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlIGNsb25l
Rm9yU2F2ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbnRleHRTdGF0ZSBzdGF0
ZShsYXN0RHJhd2luZ1N0YXRlLCBjdG0sIGNsaXBCb3VuZHMpOwotICAgICAgICAgICAgc3RhdGUu
c3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZvclRyYW5zcGFyZW5jeUxheWVy
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBzdGF0ZSA9IGNsb25lRm9yU2F2
ZSgpOwotICAgICAgICAgICAgc3RhdGUubGFzdERyYXdpbmdTdGF0ZS5hbHBoYSA9IDE7Ci0gICAg
ICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJh
ZGlhbnMpOwotICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgICAgICB2
b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICAgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgfTsKLQotICAgIGNvbnN0IFZlY3RvcjxD
b250ZXh0U3RhdGUsIDQ+JiBzdGF0ZVN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZVN0YWNr
OyB9Ci0KLSAgICBjb25zdCBDb250ZXh0U3RhdGUmIGN1cnJlbnRTdGF0ZSgpIGNvbnN0OwotICAg
IENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCk7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdNb2RlPiwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+KSBjb25z
dCBvdmVycmlkZTsKKyAgICAKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0KSA9IDA7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBudWxscHRy
OyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENv
bnRleHQoYm9vbCkgZmluYWwgeyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9r
ZVBhdHRlcm4oKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRl
cm4oKSBmaW5hbDsKICNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlKCkgY29uc3QgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5P
ZGQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zm
c2V0KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVKb2luKExpbmVKb2lu
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVu
ZE1vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKLSNlbmRpZgorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmls
dGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChj
b25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBl
bGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikgZmluYWw7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1Bh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpIGZpbmFsOwpAQCAtMjQxLDQwICsxOTIsMjMgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUg
dGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5k
aWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6Oklu
Y2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5h
bDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXAoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQorICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oSW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwogI2lmIEVOQUJMRShWSURFTykKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZp
bmFsOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBocyhj
b25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2lu
dCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IHJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUp
IGZpbmFsOwogCi0gICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwot
ICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLQotICAgIFZlY3RvcjxDb250ZXh0
U3RhdGUsIDQ+IG1fc3RhdGVTdGFjazsKICAgICBEcmF3R2x5cGhzUmVjb3JkZXIgbV9kcmF3R2x5
cGhzUmVjb3JkZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXJJbXBsLmNwcAppbmRleCAxZmRjNmJhNTZiZmRiMjYzNmVmYjM0NjJhZGEyYTk5MGQzMzg5OTQ1
Li4xZmI0ZGQ3OTVhZTEwYWE4Y2NjYmNkZDgzMTRlZWE4MDg2ZThkYjY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKQEAgLTQyLDE4ICs0MiwxMyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotUmVjb3Jk
ZXJJbXBsOjpSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNv
bnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogUmVjb3JkZXIo
c3RhdGUsIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCitS
ZWNvcmRlckltcGw6OlJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0
IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENU
TSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3RE
cmF3R2x5cGhzKQorICAgIDogUmVjb3JkZXIoaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29u
c3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCiB7CiAg
ICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJcblJlY29yZGluZyB3
aXRoIGNsaXAgIiA8PCBpbml0aWFsQ2xpcCk7CiB9CiAKLVJlY29yZGVySW1wbDo6flJlY29yZGVy
SW1wbCgpCi17Ci0gICAgQVNTRVJUKHN0YXRlU3RhY2soKS5zaXplKCkgPT0gMSk7IC8vIElmIHRo
aXMgZmlyZXMsIGl0IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4KLX0KLQogdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZFNhdmUoKQogewogICAgIGFwcGVuZDxTYXZlPigpOwpAQCAt
NjQsMzEgKzU5LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFJlc3RvcmUoKQogICAgIGFw
cGVuZDxSZXN0b3JlPigpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkVHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgYXBwZW5kPFRyYW5zbGF0ZT4oeCwgeSk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgYXBw
ZW5kPFJvdGF0ZT4oYW5nbGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBhcHBlbmQ8U2NhbGU+KHNjYWxlKTsKLX0K
LQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLXsKLSAgICBhcHBlbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pOwotfQotCi12b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi17Ci0gICAgYXBwZW5kPENvbmNhdGVuYXRlQ1RNPih0cmFuc2Zvcm0pOwot
fQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JBPHVp
bnQ4X3Q+IGlubGluZUNvbG9yKQogewogICAgIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGlu
bGluZUNvbG9yKTsKQEAgLTEwNCw5MiArNzQsMjYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAgYXBwZW5kPFNldFN0cm9r
ZVRoaWNrbmVzcz4odGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNl
dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17Ci0gICAgYXBwZW5kPFNldFN0
YXRlPihzdGF0ZSwgY2hhbmdlRmxhZ3MpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgYXBwZW5kPFNldExpbmVDYXA+KGxp
bmVDYXApOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZURhc2goY29uc3Qg
RGFzaEFycmF5JiBhcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBhcHBlbmQ8U2V0TGlu
ZURhc2g+KGFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZFNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0gICAgYXBwZW5kPFNldExpbmVKb2luPihq
b2luKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQg
bGltaXQpCi17Ci0gICAgYXBwZW5kPFNldE1pdGVyTGltaXQ+KGxpbWl0KTsKLX0KLQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZENsZWFyU2hhZG93KCkKLXsKLSAgICBhcHBlbmQ8Q2xlYXJTaGFk
b3c+KCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVj
dCYgY2xpcFJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXA+KGNsaXBSZWN0KTsKLX0KLQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgYXBwZW5kPENsaXBPdXQ+KGNsaXBSZWN0KTsKKyAgICBhcHBlbmQ8
U2V0U3RhdGU+KHN0YXRlKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXBUb0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZl
ci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0aCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQotewot
ICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKLXsKLSAg
ICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsK
LSAgICBpZiAoc291cmNlSW1hZ2UpCi0gICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7Ci0gICAgYXBwZW5kPERyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7
Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5j
aG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewotICAgIGFwcGVuZDxEcmF3R2x5cGhzPihm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUpOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmQ8
RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBs
eVN0cm9rZVBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGltYWdlSWRl
bnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgYXBw
ZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBh
dHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3U3lzdGVtSW1hZ2U+KHN5c3RlbUltYWdlLCBkZXN0
aW5hdGlvblJlY3QpOworICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPigpOwogfQorI2VuZGlm
IC8vIFVTRShDRykKIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQog
ewotICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIGFwcGVuZDxB
cHBseURldmljZVNjYWxlRmFjdG9yPihzY2FsZUZhY3Rvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBAIC0yMDIs
NDQgKzEwNiwzNCBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKQogICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQotewotICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwgbGluZVdpZHRoKTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFwcGVuZDxEcmF3TGluZT4ocG9p
bnQxLCBwb2ludDIpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxv
Y2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENs
aXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0xpbmVzRm9y
VGV4dD4oYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmlu
dGluZywgZG91YmxlTGluZXMpOworICAgIGFwcGVuZDxDbGlwPihjbGlwUmVjdCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxl
IHJ1bGUpCiB7Ci0gICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0
eWxlKTsKKyAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBhdGgsIHJ1bGUpOwogfQogCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsK
LSAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOworICAgIGFwcGVuZDxDbGlwT3V0PihjbGlw
UmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOworICAgIGFwcGVuZDxDbGlw
T3V0VG9QYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1
c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9m
ZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIu
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgs
IG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOwogfQogCiB2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAt
MjU3LDIzICsxNTEsMjIgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aEdy
YWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGcKICAgICBhcHBlbmQ8Rmls
bFJlY3RXaXRoR3JhZGllbnQ+KHJlY3QsIGdyYWRpZW50KTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlKQordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kPEZpbGxDb21wb3Np
dGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBtb2RlKTsKKyAgICBhcHBlbmQ8RmlsbFJvdW5kZWRS
ZWN0PihyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kPEZpbGxSb3Vu
ZGVkUmVjdD4ocmVjdCwgY29sb3IsIG1vZGUpOworICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVk
UmVjdCwgY29sb3IpOworICAgIGFwcGVuZDxGaWxsRWxsaXBzZT4ocmVjdCk7CiB9CiAKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxM
aW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVuZDxGaWxsTGluZT4obGluZSk7
CkBAIC0yOTMsNyArMTg2LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxCZXppZXJD
dXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewogICAgIGFwcGVuZDxGaWxsQmV6
aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
QEAgLTMwMSwyNSArMTkzLDE3IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxGaWxsUGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykK
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
IHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKQogewotICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwgZGVzdGlu
YXRpb24pOworICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MpOwog
fQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgd2lkdGgpOworICAgIGFwcGVuZDxTdHJva2VFbGxp
cHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYgbGluZSkKIHsKICAg
ICBhcHBlbmQ8U3Ryb2tlTGluZT4obGluZSk7CkBAIC0zMzksNyArMjIzLDYgQEAgdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYg
Y3VydmUpCiB7CiAgICAgYXBwZW5kPFN0cm9rZUJlemllckN1cnZlPihjdXJ2ZSk7CiB9Ci0KICNl
bmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM0NywzMyArMjMwLDg0IEBAIHZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAg
YXBwZW5kPFN0cm9rZVBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25l
c3MpCiB7Ci0gICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOworICAgIGFwcGVuZDxEcmF3
UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kPENsZWFyUmVjdD4ocmVjdCk7CisgICAgYXBwZW5kPERy
YXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGFw
cGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7Cit9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRB
cHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKKyAg
ICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
QXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmlu
Z1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPigpOworICAgIGFw
cGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQog
Ci0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1Jp
bmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBhcHBlbmQ8RHJhd0ZvY3VzUmlu
Z1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOworfQogCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXBwZW5kPEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKKyAgICBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihp
bWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwor
fQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdl
JiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit7CisgICAg
YXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Cit9
CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGFw
cGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKK3sK
KyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmll
cjsKKyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFn
ZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgYXBwZW5kPERyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRl
cik7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXBwZW5kPERy
YXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRp
ZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQoreworICAgIGFw
cGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNl
bmRpZgorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFu
Y2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBhcHBlbmQ8RHJhd0dseXBocz4o
Zm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlKTsKK30KKwor
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgYXBwZW5kPERyYXdMaW5lc0ZvclRl
eHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywg
cHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgYXBwZW5kPERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKIH0KIAogYm9vbCBSZWNvcmRlckltcGw6OnJlY29y
ZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSkKQEAgLTQxNywyMCArMzUxLDE2
IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdFeHRlbnQoZmxvYXQgYmx1clJh
ZGl1cykKIAogRmxvYXRSZWN0IFJlY29yZGVySW1wbDo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgYm91bmRzID0gcmVj
dDsKLSAgICBhdXRvJiBzdGF0ZSA9IGN1cnJlbnRTdGF0ZSgpOworICAgIGF1dG8gYm91bmRzID0g
cmVjdDsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93UmFk
aXVzOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGlmIChnZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgewotICAgICAgICBGbG9hdFJlY3Qgc2hh
ZG93RXh0ZW50ID0gYm91bmRzOwotICAgICAgICBzaGFkb3dFeHRlbnQubW92ZShzaGFkb3dPZmZz
ZXQpOwotICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQYWludGluZ0V4dGVudChz
aGFkb3dSYWRpdXMpKTsKKyAgICBpZiAoaGFzU2hhZG93KCkpIHsKKyAgICAgICAgYXV0byBzaGFk
b3dFeHRlbnQgPSBib3VuZHM7CisgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKGRyb3BTaGFkb3co
KS5vZmZzZXQpOworICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQYWludGluZ0V4
dGVudChkcm9wU2hhZG93KCkuYmx1clJhZGl1cykpOwogICAgICAgICBib3VuZHMudW5pdGUoc2hh
ZG93RXh0ZW50KTsKICAgICB9CiAKLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHN0YXRlLmNsaXBC
b3VuZHMsIHN0YXRlLmN0bS5tYXBSZWN0KGJvdW5kcykpOworICAgIHJldHVybiBpbnRlcnNlY3Rp
b24oY2xpcEJvdW5kcygpLCBnZXRDVE0oKS5tYXBSZWN0KGJvdW5kcykpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaAppbmRleCA2NDIyNjVmMDk4MDIyY2YyYjA1ZjE4MGMxNzRmYTAzNDYyZjJkZDQwLi42
ZGU2YWVkZmZjYjE3ZGIyZDA4MWI0MmMxZGU2YmMzMjlhMzhiZjQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaApAQCAtMzUsOSArMzUsOCBAQCBjbGFzcyBS
ZWNvcmRlckltcGwgOiBwdWJsaWMgUmVjb3JkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVySW1wbCk7CiBwdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9
IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVySW1wbCgpOwotCisgICAgV0VCQ09SRV9FWFBP
UlQgUmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xp
cCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9LCBEcmF3R2x5cGhzUmVj
b3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIGNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKSBmaW5hbCB7IH0KQEAgLTQ3LDQ3ICs0NiwzNSBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHZvaWQgcmVjb3JkU2F2ZSgpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9y
ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ29uY2F0
ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKICAgICB2b2lkIHJlY29y
ZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgZmluYWw7CiAgICAgdm9pZCByZWNv
cmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PikgZmluYWw7CiAgICAgdm9pZCBy
ZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKExpbmVD
YXApIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5Jiwg
ZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihMaW5l
Sm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRTZXRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGZpbmFsOworCisjaWYgVVNFKENHKQor
ICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CisgICAgdm9pZCByZWNv
cmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgcmVjb3JkQmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRFbmRUcmFu
c3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRDbGlwKGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRS
dWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBP
dXRUb1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29u
c3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2
ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFu
Y2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJh
d0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
IGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsQ29tcG9z
aXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQgcmVjb3JkRmlsbExp
bmUoY29uc3QgTGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxBcmMoY29uc3Qg
QXJjRGF0YSYpIGZpbmFsOwpAQCAtOTUsMTEgKzgyLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5k
aWYKICAgICB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotI2lmIEVOQUJMRShW
SURFTykKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotI2VuZGlmCi0gICAgdm9pZCByZWNv
cmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
IGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQgcmVjb3JkU3Ry
b2tlTGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJj
KGNvbnN0IEFyY0RhdGEmKSBmaW5hbDsKQEAgLTEwNywxMyArOTMsMjggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpIGZp
bmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0jaWYg
VVNFKENHKQotICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7Cisg
ICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikgIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFBh
dGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0
IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgZmluYWw7CisgICAgdm9pZCByZWNv
cmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
ZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1J
bWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5h
bDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkg
ZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYp
IGZpbmFsOwogCiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJbWFnZSYpIGZpbmFs
OwogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1hZ2VCdWZmZXImKSBmaW5hbDsKQEAgLTEz
OSw2ICsxNDAsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCByZWNv
cmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKwogICAgIEZsb2F0UmVjdCBl
eHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKICAgICBEaXNw
bGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcAppbmRleCA4ZmYxOWQwMDM1NGNkYmVkZTNhNWJhMWFmNzU4Y2ZmMDIzYTI1YTIyLi42
NmZjOWQ4ODJhNGQzZjdkZThlODkxMmExZjMwYWYxOThkMDM1MjgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBs
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC05NywxMCArOTcsMTAgQEAgaW5saW5lIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gYXBwbHlTZXRT
dGF0ZUl0ZW0oR3JhcGgKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9OwogCi0g
ICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0
ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpKQorICAgIGlm
IChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVt
LnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0dXJuICppbWFnZUlk
ZW50aWZpZXI7CiAKLSAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGls
ZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uo
c2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0
dXJuICppbWFnZUlkZW50aWZpZXI7CiAKICAgICBzZXRTdGF0ZUl0ZW0uYXBwbHkoY29udGV4dCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9E
cmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKaW5kZXggZDA5
YzEzNzNlYTlhYWFmNGExODUxMzZlZTg4NTNkNzg4ZmM0MTc4ZC4uZDc5NzMxNGQyNDkwNjc2OGI4
ZDc1N2I3YzRkYmNlNTM3ODFmYTNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNv
cmRlckhhcmZCdXp6LmNwcApAQCAtMzIsMTQgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250
ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQp
Ci0gICAgOiBtX293bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVj
b3JkZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJh
d0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRl
eHQoZGVzdGluYXRpb25Db250ZXh0KQogewogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6
ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlw
aHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3Ro
aW5nTW9kZSkKIHsKLSAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBo
cywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKaW5kZXgg
NWQ2NmViNzJhZDEzYzI0ZGFjMDk1YTk0NWY2MTRhNmY1NTIyMjQ5Mi4uYzgzMTQ4MDIyN2IxMGY1
MWM0ZDM0NGVkNjk1YTEzZjQwNmNiNjhlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAK
QEAgLTMyLDE0ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURyYXdHbHlwaHNS
ZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgb3duZXIsIERlY29u
c3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQotICAgIDogbV9vd25lcihv
d25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZv
bnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25Db250ZXh0KG93bmVyKQogewogfQog
CiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2lu
dCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBtX293bmVyLmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFy
dFBvaW50LCBtX3Ntb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFy
dFBvaW50LCBtX3Ntb290aGluZ01vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVv
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UuY3BwCmluZGV4IDNjZjc0NjBjODBlM2JlMWQ1YmEzZjBjZWQ3YzE5YjI1ZGYyOWFi
ZjIuLjc4NWU5NGJlY2YwN2NkNGE4NGM5YzM0ZDljZWNjODM4NTdlMDY5OWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2UuY3BwCkBAIC0yOTIsMTIgKzI5MiwxMiBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNl
OjpkcmF3Qm94ZXMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIEZsb2F0UmVjdCBmcmFt
ZVJlY3QoMiwgMiwgc2l6ZS53aWR0aCgpIC0gMywgc2l6ZS5oZWlnaHQoKSAtIDMpOwogICAgIGNv
bnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKICAgICBjb250ZXh0LnNldFN0cm9r
ZVRoaWNrbmVzcygzKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaFdpZHRocywgMCk7
CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IG1fZGFzaFdpZHRocywgMCB9KTsKICAgICBtX3Bh
dGguYWRkUmVjdChmcmFtZVJlY3QpOwogICAgIG1fcGF0aC5jbG9zZVN1YnBhdGgoKTsKICAgICBj
b250ZXh0LnN0cm9rZVBhdGgobV9wYXRoKTsKIAotICAgIGNvbnRleHQuc2V0TGluZURhc2goRGFz
aEFycmF5KCksIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IH0sIDAgfSk7CiAgICAg
bV9wYXRoLmNsZWFyKCk7CiAgICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIGJveFRvcCAr
IGJveFNpemUpKTsKICAgICBtX3BhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoc2l6ZS53aWR0aCgp
LCBib3hUb3AgKyBib3hTaXplKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKaW5kZXggMWIxODJhMWQzNmI3Y2ZhYWEwYjE2OWQw
ZDhjODU0MzVmNDNiNzY3ZC4uZTgwZjJlZTg5MTkzOTE0NDE4ZTg3OGJmMGE0YTI4NDBlZTY4OWQw
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENo
ZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRD
aGVja2VyLmNwcApAQCAtMzksNyArMzksNyBAQCBib29sIENvbnRlbnRmdWxQYWludENoZWNrZXI6
OnF1YWxpZmllc0ZvckNvbnRlbnRmdWxQYWludChGcmFtZVZpZXcmIGZyYW1lVmlldykKICAgICBm
cmFtZVZpZXcuc2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRp
bmdMYXllcnMpOwogICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyh0cnVlKTsK
IAotICAgIE51bGxHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoTnVsbEdyYXBoaWNzQ29u
dGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQp
OworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoZnJhbWVWaWV3LnJlbmRl
clZpZXcoKS0+ZG9jdW1lbnRSZWN0KCksIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxp
ZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KTsKICAgICBmcmFtZVZpZXcu
cGFpbnQoY2hlY2tlckNvbnRleHQsIGZyYW1lVmlldy5yZW5kZXJWaWV3KCktPmRvY3VtZW50UmVj
dCgpKTsKIAogICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyhvbGRFbnRpcmVD
b250ZW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxs
aXBzaXNCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94
LmNwcAppbmRleCBjOWFiMjE3NjE0MWZhN2EzMzlhMjA5N2IzYWJmOTc2NTA3ODdlNGYxLi40YmZm
OGQwMDgzOTI1MTRjYmU2MmNhOTVkNGU3NDNmYzE5N2YwMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9p
ZCBMZWdhY3lFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnMKICAgICBib29sIHNldFNoYWRvdyA9IGZhbHNlOwogICAgIGlm
IChsaW5lU3R5bGUudGV4dFNoYWRvdygpKSB7CiAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0g
bGluZVN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGxpbmVTdHlsZS50ZXh0U2hhZG93
KCktPmNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhMYXlvdXRTaXplKGxpbmVT
dHlsZS50ZXh0U2hhZG93KCktPngoKS52YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55
KCkudmFsdWUoKSksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNo
YWRvd0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgTGF5b3V0U2l6ZShs
aW5lU3R5bGUudGV4dFNoYWRvdygpLT54KCkudmFsdWUoKSwgbGluZVN0eWxlLnRleHRTaGFkb3co
KS0+eSgpLnZhbHVlKCkpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT5yYWRpdXMoKS52YWx1ZSgp
LCBzaGFkb3dDb2xvciB9KTsKICAgICAgICAgc2V0U2hhZG93ID0gdHJ1ZTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmlu
ZGV4IDI0YzgyYzlkNmJkNDNmNzRiYTA1YWI1YWM3Njc5M2Q3NWQxNWU1NzcuLjhkOTdkMjU3MWUy
NDUzZGYxOTI4YmRlNmM3N2M3NjMxNWZiYzg4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNzA1LDcgKzcwNSw3IEBAIHN0
YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4
dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFkb3ctPngoKS52YWx1ZSgp
LCBib3hTaGFkb3ctPnkoKS52YWx1ZSgpKTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5n
Q29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93LT5pc1dlYmtpdEJveFNo
YWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVm
YXVsdCk7CisgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBib3hTaGFk
b3ctPnJhZGl1cygpLnZhbHVlKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJv
eFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiB9CiAK
IEludGVycG9sYXRpb25RdWFsaXR5IFJlbmRlckJveE1vZGVsT2JqZWN0OjpjaG9vc2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEltYWdlJiBpbWFnZSwgY29u
c3Qgdm9pZCogbGF5ZXIsIGNvbnN0IExheW91dFNpemUmIHNpemUpCkBAIC0yMDg3LDcgKzIwODcs
NyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBhdXRvIGxpbmVEYXNoID0gRGFzaEFycmF5Ojpmcm9tKGRhc2hMZW5ndGgsIGdhcExlbmd0aCk7
Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFz
aCksIGRhc2hMZW5ndGgpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNo
KHsgV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2VzIGlzc3Vl
cyB3aXRoIHRpZ2h0IGNvcm5lcnM6CkBAIC0yNDU2LDcgKzI0NTYsNyBAQCB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IExheW91dFJlYwogICAgICAgICAgICAgRmxvYXRQb2ludCBzbmFwcGVkU2hhZG93T3JpZ2luID0g
RmxvYXRQb2ludChyb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi54KCksIGRldmlj
ZVNjYWxlRmFjdG9yKSwgcm91bmRUb0RldmljZVBpeGVsKHNoYWRvd1JlY3RPcmlnaW4ueSgpLCBk
ZXZpY2VTY2FsZUZhY3RvcikpOwogICAgICAgICAgICAgRmxvYXRTaXplIHNuYXBwZWRTaGFkb3dP
ZmZzZXQgPSBzbmFwcGVkU2hhZG93T3JpZ2luIC0gcGl4ZWxTbmFwcGVkRmlsbFJlY3QucmVjdCgp
LmxvY2F0aW9uKCk7CiAKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFk
b3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hT
aGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRl
ZmF1bHQpOworICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc25hcHBlZFNoYWRv
d09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNo
YWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVm
YXVsdCB9KTsKIAogICAgICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlw
IGl0IG91dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMjU1OCw3ICsyNTU4LDcg
QEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBl
eHRyYU9mZnNldDsKIAogICAgICAgICAgICAgYXV0byBzbmFwcGVkU2hhZG93T2Zmc2V0ID0gcm91
bmRTaXplVG9EZXZpY2VQaXhlbHMoc2hhZG93T2Zmc2V0LCBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0g
ICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dS
YWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dS
YWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICAgICAg
ICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAgICAgICAg
ICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVj
dCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA4NTBiZGU0OGU0OTI4
ZTg2ZGMxNzZiNjIzMjFmZWVkOWI2ODZjM2NkLi44Y2Y5NjFlMGJjMjM2NGU5NjJjZGE4ODFmODU5
ZTRmMzFhM2M5ODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
QEAgLTIyNTMsMTQgKzIyNTMsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclAKICNpZiBFTkFC
TEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgICAgICBib29sIHVzZXNDb21wb3NpdGVPcGVyYXRpb24g
PSBoYXNCbGVuZE1vZGUoKSAmJiAhKHJlbmRlcmVyKCkuaXNMZWdhY3lTVkdSb290KCkgJiYgcGFy
ZW50KCkgJiYgcGFyZW50KCktPmlzUmVuZGVyVmlld0xheWVyKCkpOwogICAgICAgICBpZiAodXNl
c0NvbXBvc2l0ZU9wZXJhdGlvbikKLSAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpKTsKKyAgICAg
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IGNvbnRleHQuY29tcG9zaXRlT3BlcmF0
aW9uKCksIGJsZW5kTW9kZSgpIH0pOwogI2VuZGlmCiAKICAgICAgICAgY29udGV4dC5iZWdpblRy
YW5zcGFyZW5jeUxheWVyKHJlbmRlcmVyKCkub3BhY2l0eSgpKTsKIAogI2lmIEVOQUJMRShDU1Nf
Q09NUE9TSVRJTkcpCiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAg
ICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVy
YXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21w
b3NpdGVNb2RlKHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3Jt
YWwgfSk7CiAjZW5kaWYKIAogI2lmZGVmIFJFVkVBTF9UUkFOU1BBUkVOQ1lfTEFZRVJTCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDVm
OThiOTEyNGEzNDlhYzc1NTc5ZjcxMTM1ZWUwZjM4YWJiNGYxMmQuLjNlMmU2YmYxZGU1ZDU0ZWIz
OGQ5MjdhNTFmMDdjODkxMGFlNmMxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xODMxLDcgKzE4MzEsOSBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVw
ZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBbJl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXll
cikgewotICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KE51bGxHcmFwaGlj
c0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgICAgIGF1dG8g
ZGlydHlSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoZ3JhcGhpY3NMYXllci5vZmZzZXRGcm9t
UmVuZGVyZXIoKSksIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKTsKKyAgICAKKyAgICAgICAgTnVsbEdy
YXBoaWNzQ29udGV4dCBudWxsQ29udGV4dChkaXJ0eVJlY3QsIE51bGxHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgICAgIEV2ZW50UmVnaW9uIGV2
ZW50UmVnaW9uOwogI2lmIEVOQUJMRShFRElUQUJMRV9SRUdJT04pCiAgICAgICAgIGlmIChyZW5k
ZXJlcigpLnBhZ2UoKS5zaG91bGRCdWlsZEVkaXRhYmxlUmVnaW9uKCkpCkBAIC0xODUzLDggKzE4
NTUsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAg
ICAgICAgICAgZXZlbnRSZWdpb25Db250ZXh0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRS
ZWN0KC1sYXllck9mZnNldCwgZ3JhcGhpY3NMYXllci5zaXplKCkpKSwgcmVuZGVyZXIoKS5zdHls
ZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJl
cigpKSwgZ3JhcGhpY3NMYXllci5zaXplKCkpKTsKLSAgICAgICAgcGFpbnRJbnRvTGF5ZXIoJmdy
YXBoaWNzTGF5ZXIsIG51bGxDb250ZXh0LCBkaXJ0eVJlY3QsIHsgfSwgJmV2ZW50UmVnaW9uQ29u
dGV4dCk7CisgICAgICAgIHBhaW50SW50b0xheWVyKCZncmFwaGljc0xheWVyLCBudWxsQ29udGV4
dCwgZW5jbG9zaW5nSW50UmVjdChkaXJ0eVJlY3QpLCB7IH0sICZldmVudFJlZ2lvbkNvbnRleHQp
OwogCiAgICAgICAgIGV2ZW50UmVnaW9uLnRyYW5zbGF0ZSh0b0ludFNpemUobGF5ZXJPZmZzZXQp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDMw
Y2QzNDNlYTdkZjkxNjhjYzNjZGU0N2RiZWY4Zjc1OWU4OGY3MzEuLjI1NmZjNzQ5NTZkYTMzODZh
NTRkMzUyZGUxMWI2ZmY3MzY2OWExZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW0KQEAgLTYwNSw3ICs2MDUsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpw
YWludFRleHRGaWVsZElubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dAogICAgIGNvbnN0IEZsb2F0U2l6ZSBpbm5lclNoYWRvd09mZnNldCB7IDAsIDUgfTsKICAgICBj
b25zdGV4cHIgYXV0byBpbm5lclNoYWRvd0JsdXIgPSAxMC4wZjsKICAgICBhdXRvIGlubmVyU2hh
ZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMCwgMCwgMCwgMC4wNGYgfTsKLSAgICBjb250
ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBpbm5lclNo
YWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBpbm5lclNoYWRvd09mZnNl
dCwgaW5uZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRvd0NvbG9yIH0pOwogICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVyU2hhZG93UGF0aDsKQEAg
LTIwODAsNyArMjA4MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmll
d0JhZGdlKEltYWdlJiBpbWFnZSwgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgLy8gVXNlIHRo
ZSBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb24sIGJlY2F1c2UgaXQgY2FsY3VsYXRlcyB0aGUgYmx1
ciByYWRpdXMgaW4gY29udGV4dCBzcGFjZSwKICAgICAvLyByYXRoZXIgdGhhbiBzY3JlZW4gc3Bh
Y2UuCiAgICAgY29uc3RleHByIGF1dG8gc2hhZG93Q29sb3IgPSBDb2xvcjo6YmxhY2suY29sb3JX
aXRoQWxwaGFCeXRlKDI2KTsKLSAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6
ZSB7IH0sIDE2LCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFk
b3coeyBGbG9hdFNpemUgeyB9LCAxNiwgc2hhZG93Q29sb3IgfSk7CiAKICAgICAvLyBUaGUgY2ly
Y2xlIG11c3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIHZhbHVlIG9mIDEgZm9yIHRoZSBzaGFkb3cg
Y29sb3IgdG8gYXBwZWFyLgogICAgIENHRmxvYXQgY2lyY2xlQ29sb3JDb21wb25lbnRzWzRdID0g
eyAwLCAwLCAwLCAxIH07CkBAIC0yMjczLDcgKzIyNzMsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9T
OjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgYwogCiAgICAgYm9vbCBpc0VtcHR5ID0gIXN0YXRlcy5jb250YWluc0FueSh7IENvbnRyb2xT
dGF0ZXM6OlN0YXRlczo6Q2hlY2tlZCwgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpJbmRldGVybWlu
YXRlIH0pOwogICAgIGF1dG8gZmlyc3RTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4geyAw
LCAwLCAwLCBpc0VtcHR5ID8gMC4wNWYgOiAwLjFmIH07Ci0gICAgY29udGV4dC5zZXRTaGFkb3co
aW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgZmlyc3RTaGFkb3dDb2xvcik7Cisg
ICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgaW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93
Qmx1ciwgZmlyc3RTaGFkb3dDb2xvciB9KTsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xv
cjo6YmxhY2spOwogCiAgICAgUGF0aCBpbm5lclNoYWRvd1BhdGg7CkBAIC0yMjkwLDcgKzIyOTAs
NyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYwogICAgIGNvbnRleHQuZmlsbFBhdGgoaW5uZXJT
aGFkb3dQYXRoKTsKIAogICAgIGNvbnN0ZXhwciBhdXRvIHNlY29uZFNoYWRvd0NvbG9yID0gRGlz
cGxheVAzPGZsb2F0PiB7IDEsIDEsIDEsIDAuNWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhG
bG9hdFNpemUgeyAwLCAwIH0sIDEsIHNlY29uZFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNl
dERyb3BTaGFkb3coeyBGbG9hdFNpemUgeyAwLCAwIH0sIDEsIHNlY29uZFNoYWRvd0NvbG9yIH0p
OwogCiAgICAgY29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDAxMGVjYmFlZDg3YTczYTQy
MGFmYjk3ZThlODBmZWE2Mzc5ZmVkM2UuLjEwZGM5MGU1N2U1YWUwZjQyNWEwZGFhYTM2NGY4MTRl
NDQ5NDk5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0K
QEAgLTI4MTYsNyArMjgxNiw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFBsYWNlaG9s
ZGVyQm9yZGVyKGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQsCiAgICAgY29udGV4
dC5zZXRTdHJva2VDb2xvcihwbGFjZWhvbGRlckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNl
dFN0cm9rZVRoaWNrbmVzcyhhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJXaWR0aCk7CiAgICAg
Y29udGV4dC5zZXRTdHJva2VTdHlsZShEYXNoZWRTdHJva2UpOwotICAgIGNvbnRleHQuc2V0TGlu
ZURhc2goe2F0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGh9LCAwKTsKKyAgICBj
b250ZXh0LnNldExpbmVEYXNoKHsgeyBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNoTGVu
Z3RoIH0sIDAgfSk7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKGJvcmRlclBhdGgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3Bw
CmluZGV4IDY3NTU2OGFmZjYxMThmMDEzYmQxZDRmNTVhNmMzNjRmYThhZjM4ZTguLjgzMDliMmY4
ZDRhMzFmYTAzYjFhYmY4NDM5ZGEwZjNlZjE2Mjg0MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBAIC0yNzEsNyArMjcxLDcg
QEAgdm9pZCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25z
KGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGMKICAgICAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9y
ID0gc2hhZG93LT5jb2xvcigpOwogICAgICAgICAgICAgaWYgKG1fc2hhZG93Q29sb3JGaWx0ZXIp
CiAgICAgICAgICAgICAgICAgbV9zaGFkb3dDb2xvckZpbHRlci0+dHJhbnNmb3JtQ29sb3Ioc2hh
ZG93Q29sb3IpOwotICAgICAgICAgICAgbV9jb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hh
ZG93WCwgc2hhZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBz
aGFkb3dDb2xvcik7CisgICAgICAgICAgICBtX2NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0
U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQpLCBzaGFkb3ctPnJhZGl1cygpLnZh
bHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAgICAgICAgc2hhZG93ID0gc2hhZG93LT5uZXh0
KCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAK
aW5kZXggODg1ZDgyNmVlOWU3OTZmNGI1YzViNTgzM2Y3MWEwMjhjNDU0MWE3YS4uZmU4ODY5YzE5
ZTVmOGQ0M2I3ZmExNmU0MDFiNGZiYzZkY2Y3ZWVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dFBhaW50ZXIuY3BwCkBAIC03NCw3ICs3NCw3IEBAIFNoYWRvd0FwcGxpZXI6OlNoYWRv
d0FwcGxpZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3csCiAgICAgfQogCiAgICAgaWYgKCFtX2F2b2lkRHJhd2luZ1NoYWRvdykKLSAgICAgICAgY29u
dGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93
Q29sb3IpOworICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHNo
YWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsKIH0KIAogaW5saW5lIGJvb2wgU2hh
ZG93QXBwbGllcjo6aXNMYXN0U2hhZG93SXRlcmF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCmluZGV4IDdlZDUzN2M5Mjc5Mzc3MGY0NDg4
YWUyOWRmNDA3MjdkN2ViMWEzYTkuLjZjNzMwZWYwN2U0OGM3ZWNmOGM0MGUzN2UwMDM0NWNmYWI1
NmM2OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmNwcApAQCAtNjksNyArNjksNyBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRl
VXBkYXRlZFN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKIHN0YXRpYyB2b2lkIHVzZVN0cm9rZVN0
eWxlVG9GaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoYXV0byBncmFk
aWVudCA9IGNvbnRleHQuc3Ryb2tlR3JhZGllbnQoKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxs
R3JhZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0YXRlKCkuc3Ryb2tlR3JhZGllbnRTcGFjZVRy
YW5zZm9ybSk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KCpncmFkaWVudCwgY29u
dGV4dC5zdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKICAgICBlbHNlIGlmIChQYXR0ZXJuKiBwYXR0
ZXJuID0gY29udGV4dC5zdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGNvbnRleHQuc2V0RmlsbFBh
dHRlcm4oKnBhdHRlcm4pOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IGNjMzhlYzcwMzBlNjBjZTE3NTliMTMy
ODdkZTI1ZjczZDU2NWM4NTguLmI2NTg2OGQxYmQzNGM5MGQ0YmJmZGQ0NzdhZDJjNzQyODJhMDU2
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcApAQCAtNTAxLDEwICs1MDEsMTIgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjphcHBs
eVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChjYW5TZXRMaW5lRGFzaCkKLSAgICAgICAgICAgIGNvbnRl
eHQuc2V0TGluZURhc2goZGFzaEFycmF5LCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2
Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBj
b250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShkYXNoQXJyYXkpLCBsZW5ndGhDb250ZXh0LnZh
bHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZhY3RvciB9
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xp
ZFN0cm9rZSk7CiAgICAgfQorCisgICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOwogfQog
CiB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OnN0eWxlQ2hhbmdlZChSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMmZiOGYzM2E4
NzBkZmNjZWI2MmUxNDk2NTZiMTQ0MzcyMmViZWEyZC4uZjU3OWU1YTc1ZmU5MTBmNmU1YjU4YTlh
ZWZiNjgzNTg5NjIyMTBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xMTUsMTIgKzExNSwxMiBAQCB2b2lkIFNW
R1JlbmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIFBhaQogICAgICAgICBpZiAob3BhY2l0eSA8IDEgfHwgaGFzQmxlbmRNb2Rl
IHx8IGlzb2xhdGVNYXNrRm9yQmxlbmRpbmcgfHwgaGFzSXNvbGF0aW9uKSB7CiAKICAgICAgICAg
ICAgIGlmIChoYXNCbGVuZE1vZGUpCi0gICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRl
eHQoKS5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3Np
dGVPcGVyYXRpb24oKSwgc3R5bGUuYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgICAgIG1fcGFp
bnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJbmZvLT5jb250ZXh0
KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIHN0eWxlLmJsZW5kTW9kZSgpIH0pOwogCiAgICAgICAg
ICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0
eSk7CiAKICAgICAgICAgICAgIGlmIChoYXNCbGVuZE1vZGUpCi0gICAgICAgICAgICAgICAgbV9w
YWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9wYWludEluZm8tPmNv
bnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAg
ICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlTW9kZSh7IG1fcGFp
bnRJbmZvLT5jb250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFs
IH0pOwogCiAgICAgICAgICAgICBtX3JlbmRlcmluZ0ZsYWdzIHw9IEVuZE9wYWNpdHlMYXllcjsK
ICAgICAgICAgfQpAQCAtMjczLDcgKzI3Myw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6
YnVmZmVyRm9yZWdyb3VuZChSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikKIAogICAg
IC8vIEludmFsaWRhdGUgYW4gZXhpc3RpbmcgYnVmZmVyIGlmIHRoZSBzY2FsZSBpcyBub3QgY29y
cmVjdC4KICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRy
YW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTSgpOwogICAgICAgICBJbnRT
aXplIGV4cGFuZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6
ZSgpKTsKICAgICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChl
eHBhbmRlZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGlj
X2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFuc2Zvcm0u
eVNjYWxlKCkpKSk7CiAgICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5iYWNr
ZW5kU2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXgg
NGRkN2Y4MGUzNzc3OTg3ZGNiNzBjMWEzYzhhODdjZDhhNGZkNmZiOS4uY2Q4OGFkZjA4ZGRhODAz
YmZkOTNmODk1Nzc0MDc2ODZhYzRjNTQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2UuY3BwCkBAIC0yNjksMTQgKzI2OSwxNCBAQCBJbWFnZURyYXdSZXN1bHQgU1ZHSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
YwogICAgIEFTU0VSVCh2aWV3KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRp
b25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9u
cy5ibGVuZE1vZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RS
ZWN0KSk7CiAKICAgICBmbG9hdCBhbHBoYSA9IGNvbnRleHQuYWxwaGEoKTsKICAgICBib29sIGNv
bXBvc2l0aW5nUmVxdWlyZXNUcmFuc3BhcmVuY3lMYXllciA9IG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSAhPSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciB8fCBvcHRpb25zLmJsZW5k
TW9kZSgpICE9IEJsZW5kTW9kZTo6Tm9ybWFsIHx8IGFscGhhIDwgMTsKICAgICBpZiAoY29tcG9z
aXRpbmdSZXF1aXJlc1RyYW5zcGFyZW5jeUxheWVyKSB7CiAgICAgICAgIGNvbnRleHQuYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCk7
CisgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGhvbm9yIG9wdGlvbnMub3JpZW50YXRpb24oKSwgc2luY2UgSW1hZ2VCaXRtYXAn
cyBmbGlwWSBoYW5kbGluZyByZWxpZXMgb24gaXQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzEwMDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCA1
NDM4MTgyZGRlODc2M2ViYWQzOGYxOTJkZjc5NWFhMDYwYjY1MWJiLi44ZGEzOTBmNmRhNzBlMzc5
NTUwYTU3MmUwOWUwODQxMTg5YzJkZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CkBAIC03NCwzMSArNzQsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJlc3Rv
cmUoKQogICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17
Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAg
aGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6Um90YXRlKGFuZ2xlKSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAg
ICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTY2FsZShzY2FsZSkpOwotfQotCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkK
LXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRDVE0oY3RtKSk7Ci19Ci0KLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBjdG0pCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVD
VE0oY3RtKSk7Ci19Ci0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0SW5saW5l
RmlsbENvbG9yKERpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3ImJiBpdGVtKQogewogICAg
IGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CkBAIC0xMjgsNDAgKzEwMywxNSBAQCB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSYm
IGl0ZW0pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH07CiAKLSAgICBpZiAoIWZpeFBhdHRl
cm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQo
KSkpCisgICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGUoKS5zdHJva2VCcnVz
aCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZml4UGF0dGVyblRp
bGVJbWFnZShpdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSkpCisg
ICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0
ZXJuKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkp
OwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNh
cCBsaW5lQ2FwKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVDYXAobGlu
ZUNhcCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVEYXNo
KERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmIGl0ZW0pCi17Ci0gICAgaGFuZGxlSXRlbShXVEZN
b3ZlKGl0ZW0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5l
Sm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpT
ZXRMaW5lSm9pbihsaW5lSm9pbikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5
TGlzdDo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OmNsZWFyU2hhZG93KCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpD
bGVhclNoYWRvdygpKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpD
bGlwKHJlY3QpKTsKQEAgLTM3MSwxNCArMzIxLDkgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpmaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3IK
ICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0KHJl
Y3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOworICAgIGhhbmRsZUl0ZW0o
RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcikpOwogfQogCiB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCAzYmJhZjc2
NWQwNWY0NGFiZjRkOTYxZTc2NmNlNjU0Njk4ZWRlMjk0Li44MTg4OTY2YWZmYTcwOWU2ZmQwYTMx
YmZjYTZjM2U3MTg1NjVjNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTU5LDIw
ICs1OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUo
KTsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICB2b2lkIHJvdGF0
ZShmbG9hdCBhbmdsZSk7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
IHNjYWxlKTsKLSAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0m
KTsKLSAgICB2b2lkIGNvbmNhdGVuYXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSYpOwogICAgIHZvaWQgc2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRJbmxpbmVGaWxsQ29sb3ImJik7CiAgICAgdm9pZCBzZXRJbmxpbmVTdHJva2VDb2xvcihXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3ImJik7CiAgICAgdm9pZCBzZXRT
dHJva2VUaGlja25lc3MoZmxvYXQpOwogICAgIHZvaWQgc2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0YXRlJiYpOwotICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2Fw
KTsKLSAgICB2b2lkIHNldExpbmVEYXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFz
aCYmKTsKLSAgICB2b2lkIHNldExpbmVKb2luKFdlYkNvcmU6OkxpbmVKb2luKTsKLSAgICB2b2lk
IHNldE1pdGVyTGltaXQoZmxvYXQpOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKTsKICAgICB2b2lk
IGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uUmVjdCk7CkBAIC05Nyw4ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRo
Q29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsK
ICAgICB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
UmVjdFdpdGhHcmFkaWVudCYmKTsKLSAgICB2b2lkIGZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBv
c2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwotICAgIHZvaWQgZmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAgICAg
dm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsK
ICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIGZpbGxMaW5lKGNvbnN0IFdl
YkNvcmU6OkxpbmVEYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3Nh
Z2VzLmluCmluZGV4IDI4MDJmZmU4ZjgzOTdjMGVkNGRmMTIxYTAxN2ZlNzgxMDhmZjZjMjAuLjQx
NGMzMWExMzIwYzBiMmU3ODZiYzhkOWY2NTk4MTAyZDg3MGY0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCkBAIC0yNSw0NyArMjUsMzUgQEAKIG1lc3Nh
Z2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewog
ICAgIFNhdmUoKQogICAgIFJlc3RvcmUoKQotICAgIFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICBTY2FsZShXZWJDb3JlOjpGbG9hdFNpemUg
c2NhbGUpCi0gICAgU2V0Q1RNKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG0pCi0gICAgQ29u
Y2F0ZW5hdGVDVE0oV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bSkKKwogICAgIFNldElubGlu
ZUZpbGxDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yIGl0ZW0p
CiAgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZVN0cm9rZUNvbG9yIGl0ZW0pCiAgICAgU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVz
cykKICAgICBTZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUgaXRlbSkKLSAg
ICBTZXRMaW5lQ2FwKGVudW06dWludDhfdCBXZWJDb3JlOjpMaW5lQ2FwIGxpbmVDYXApCi0gICAg
U2V0TGluZURhc2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIGl0ZW0pCi0gICAg
U2V0TGluZUpvaW4oZW51bTp1aW50OF90IFdlYkNvcmU6OkxpbmVKb2luIGxpbmVKb2luKQotICAg
IFNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi0gICAgQ2xlYXJTaGFkb3coKQorI2lmIFVTRShD
RykKKyAgICBBcHBseVN0cm9rZVBhdHRlcm4oKQorICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorI2Vu
ZGlmCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKworICAg
IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICBFbmRUcmFuc3BhcmVu
Y3lMYXllcigpCisKICAgICBDbGlwKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIENsaXBQ
YXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90IFdlYkNvcmU6OldpbmRSdWxlIHdp
bmRSdWxlKQogICAgIENsaXBPdXQoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xpcFRv
SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkK
ICAgICBDbGlwT3V0VG9QYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBDbGlwUGF0aChXZWJD
b3JlOjpQYXRoIHBhdGgsIGVudW06dWludDhfdCBXZWJDb3JlOjpXaW5kUnVsZSB3aW5kUnVsZSkK
LSAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCi0g
ICAgRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXI+IHNvdXJjZUltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6Rmxv
YXRSZWN0IHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyKQotICAg
IERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBX
ZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdP
cHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFn
ZVNpemUsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNy
Y1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQotICAg
IERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVtSW1hZ2U+IHN5c3RlbUltYWdlLCBX
ZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQotICAgIERyYXdQYXR0ZXJuKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6
OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHRpbGVSZWN0LCBXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBoYXNlLCBX
ZWJDb3JlOjpGbG9hdFNpemUgc3BhY2luZywgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdP
cHRpb25zIG9wdGlvbnMpCi0gICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KQotICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLSAgICBEcmF3UmVjdChXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotICAgIERyYXdMaW5lKFdlYkNvcmU6
OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MikKLSAgICBEcmF3
TGluZXNGb3JUZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0IGl0ZW0p
Ci0gICAgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwg
c3RydWN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgIERyYXdF
bGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotICAgIERyYXdQYXRoKFdlYkNvcmU6OlBh
dGggcGF0aCkKLSAgICBEcmF3Rm9jdXNSaW5nUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQotICAgIERyYXdGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cywgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisgICAgQ2xpcFRvSW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKKworICAgIENs
ZWFyUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKwogICAgIEZpbGxSZWN0KFdlYkNvcmU6
OkZsb2F0UmVjdCByZWN0KQogICAgIEZpbGxSZWN0V2l0aENvbG9yKFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQgaXRlbSkKLSAgICBGaWxs
Q29tcG9zaXRlZFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNv
bG9yLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGVudW06dWlu
dDhfdCBXZWJDb3JlOjpCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIEZpbGxSb3VuZGVkUmVjdChX
ZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6QmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBGaWxsUm91bmRlZFJl
Y3QoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCByZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikK
ICAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdCByb3VuZGVkSG9sZVJlY3QsIFdlYkNvcmU6OkNvbG9yIGNv
bG9yKQorCisgICAgRmlsbEVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgRmlsbExpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVE
YXRhIGRhdGEpCiAgICAgRmlsbEFyYyhzdHJ1Y3QgV2ViQ29yZTo6QXJjRGF0YSBkYXRhKQpAQCAt
NzMsMTEgKzYxLDEwIEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90
UmVmQ291bnRlZCBTdHJlYW0gewogICAgIEZpbGxCZXppZXJDdXJ2ZShzdHJ1Y3QgV2ViQ29yZTo6
QmV6aWVyQ3VydmVEYXRhIGRhdGEpCiAjZW5kaWYKICAgICBGaWxsUGF0aChXZWJDb3JlOjpQYXRo
IHBhdGgpCi0gICAgRmlsbEVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ29u
dmVydFRvTHVtaW5hbmNlTWFzaygpCi0gICAgVHJhbnNmb3JtVG9Db2xvclNwYWNlKFdlYkNvcmU6
OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIFBhaW50RnJhbWVGb3JNZWRp
YShXZWJDb3JlOjpNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGRlc3RpbmF0aW9uKQorCiAgICAgU3Ryb2tlUmVjdChXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdCwgZmxvYXQgbGluZVdpZHRoKQorCisgICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBTdHJva2VMaW5l
KHN0cnVjdCBXZWJDb3JlOjpMaW5lRGF0YSBkYXRhKQogICAgIFN0cm9rZUFyYyhzdHJ1Y3QgV2Vi
Q29yZTo6QXJjRGF0YSBkYXRhKQpAQCAtODUsMTMgKzcyLDMxIEBAIG1lc3NhZ2VzIC0+IFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIFN0cm9rZUJl
emllckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRpZgog
ICAgIFN0cm9rZVBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIFN0cm9rZUVsbGlwc2UoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KQotI2lmIFVTRShDRykKLSAgICBBcHBseVN0cm9rZVBhdHRlcm4oKQotICAgIEFwcGx5Rmls
bFBhdHRlcm4oKQorCisgICAgRHJhd1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcykKKyAgICBEcmF3TGluZShXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50
MSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDIpCisKKyAgICBEcmF3RWxsaXBzZShXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCkKKyAgICBEcmF3UGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCisKKyAg
ICBEcmF3Rm9jdXNSaW5nUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorICAgIERyYXdGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNl
SW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6
OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIpCisgICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6
OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBz
dHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3U3lz
dGVtSW1hZ2UoUmVmPFdlYkNvcmU6OlN5c3RlbUltYWdlPiBzeXN0ZW1JbWFnZSwgV2ViQ29yZTo6
RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKKyAgICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6Rmxv
YXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpG
bG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9w
dGlvbnMpCisgICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3Jl
OjpGbG9hdFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0s
IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBz
dHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyNpZiBFTkFCTEUo
VklERU8pCisgICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRp
ZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCiAjZW5kaWYK
LSAgICBBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgRHJh
d0dseXBocyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocyBpdGVtKQorICAgIERyYXdM
aW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkK
KyAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBz
dHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisKKyAgICBDb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKKyAgICBUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6
RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgRmx1c2hDb250ZXh0KFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKaW5kZXggODU3N2NiYmRl
NmQzOTAxZDM0NzA3NjFlZDMwZjc5ZDk4ZTgyYjk4ZC4uNmNmYmFiY2E3YmNmYmVkYzU5NTQ4M2U4
ZWViMWQ1YWIxMjA5NjZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5LmNwcApAQCAtMzIsMzYgKzMyLDIxIEBACiAjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlz
cGxheUxpc3REcmF3aW5nQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJ
dGVtcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5ZXIuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KEltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlciwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiByZW5kZXJpbmdCYWNrZW5k
LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGlu
aXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29u
c3RydWN0RHJhd0dseXBocykKLSAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcih7IH0sIGluaXRp
YWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBEaXNwbGF5
TGlzdDo6UmVjb3JkZXIoaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0ds
eXBocykKICAgICAsIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVyLnJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKQogICAgICwgbV9pbWFnZUJ1ZmZlcihpbWFnZUJ1
ZmZlcikKICAgICAsIG1fcmVuZGVyaW5nQmFja2VuZChyZW5kZXJpbmdCYWNrZW5kKQogewogfQog
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNl
TWFzaygpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsK
LX0KLQogUmVuZGVyaW5nTW9kZSBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlbmRl
cmluZ01vZGUoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyID8gbV9pbWFnZUJ1
ZmZlci0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKQEAg
LTc3LDMxICs2Miw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRSZXN0b3JlKCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpSZXN0b3JlKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSb3RhdGUo
YW5nbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2NhbGUoc2NhbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpTZXRDVE0odHJhbnNmb3JtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpDb25jYXRlbmF0ZUNUTSh0cmFuc2Zvcm0pKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90
PiBjb2xvcikKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpTZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciB7IGNv
bG9yIH0pKTsKQEAgLTExNyw5MiArNzcsMjYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3Ryb2tlVGhpY2tu
ZXNzKHRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6
U2V0U3RhdGUgeyBzdGF0ZSwgZmxhZ3MgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUNhcChsaW5l
Q2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRT
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldExpbmVEYXNo
KERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCB7IGFycmF5LCBkYXNoT2Zmc2V0IH0pKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKExp
bmVKb2luIGxpbmVKb2luKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldE1pdGVyTGlt
aXQobGltaXQpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZENsZWFyU2hhZG93KCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpDbGVhclNoYWRvdygpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAocmVjdCkpOwotfQot
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6Q2xpcE91dChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdl
QnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXRU
b1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0VG9QYXRoKHBhdGgpKTsKLX0KLQotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIHJ1bGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1
bGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChz
b3VyY2VJbWFnZSkKLSAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBz
b3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVy
IH0pKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0
U3RhdGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlIHsgc3RhdGUgfSkpOwogfQogCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFu
Y2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
IHsgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRp
dmVJbWFnZShpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpB
cHBseVN0cm9rZVBhdHRlcm4oKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1h
Z2UsIGRlc3RpbmF0aW9uUmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkFwcGx5RmlsbFBhdHRlcm4oKSk7CiB9CisjZW5kaWYgLy8gVVNFKENHKQog
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4o
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseURldmljZVNjYWxlRmFjdG9y
KHNjYWxlRmFjdG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBAIC0yMTUsNDQg
KzEwOSwzNCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCB3aWR0aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpEcmF3UmVjdChyZWN0LCB3aWR0aCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFu
Y2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZXNGb3JUZXh0KERpc3BsYXlM
aXN0OjpEcmF3TGluZXNGb3JUZXh0IHsgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMgfSkpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAocmVjdCkpOwogfQogCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxl
JiBzdHlsZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
cmVjdCwgc3R5bGUpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpDbGlwUGF0aChwYXRoLCBydWxlKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0VsbGlwc2UocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXQocmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3Zv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd1BhdGgocGF0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0
aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
blJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwVG9JbWFnZUJ1ZmZlcihp
bWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9j
dXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xlYXJSZWN0KHJlY3QpKTsKIH0KIAog
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI3MCwyMyArMTU0LDIyIEBAIHZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9h
dFJlY3QmCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmls
bFJlY3RXaXRoR3JhZGllbnQoRGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50IHsgcmVj
dCwgZ3JhZGllbnQgfSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUpCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbENvbXBv
c2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgbW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSb3VuZGVkUmVjdChyb3VuZGVkUmVjdCwgY29s
b3IpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RmlsbFJvdW5kZWRSZWN0KHJvdW5kZWRSZWN0LCBjb2xvciwgbW9kZSkpOworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCBy
b3VuZGVkUmVjdCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZp
bGxMaW5lKGNvbnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxMaW5lKGRhdGEpKTsKQEAgLTMwNiw3ICsxODksNiBA
QCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEJlemllckN1
cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxCZXppZXJDdXJ2ZShkYXRhKSk7CiB9Ci0KICNlbmRpZiAv
LyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zMTQsMjMgKzE5
NiwxNyBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpGaWxsUGF0aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEVsbGlw
c2UocmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWlu
dEZyYW1lRm9yTWVkaWEocGxheWVyLmlkZW50aWZpZXIoKSwgZGVzdGluYXRpb24pKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VSZWN0KHJlY3Qs
IGJvcmRlclRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRo
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZVJlY3QocmVjdCwgd2lkdGgpKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VFbGxpcHNlKHJlY3QpKTsK
IH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYgZGF0YSkK
IHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VM
aW5lKGRhdGEpKTsKQEAgLTM1MCw3ICsyMjYsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYQog
ewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUJl
emllckN1cnZlKGRhdGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzU4LDMzICsyMzMsODQgQEAgdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
ICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VQYXRo
KHBhdGgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OlN0cm9rZUVsbGlwc2UocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVz
cykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpDbGVhclJlY3QocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKSk7CiB9CiAKLSNp
ZiBVU0UoQ0cpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdFbGxpcHNlKHJlY3QpKTsKK30KIAotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigp
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpBcHBseVN0cm9rZVBhdHRlcm4oKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29u
c3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFw
cGx5RmlsbFBhdHRlcm4oKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsK
IH0KIAotI2VuZGlmIC8vIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmlu
Z1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIo
aW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsK
KyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV1RGTW92ZShpZGVu
dGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZShSZWY8RmlsdGVy
PiB7IGZpbHRlciB9KSkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdOYXRpdmVJbWFnZShpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFn
ZSwgZGVzdGluYXRpb25SZWN0KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1h
Z2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJl
Y3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKK30KKworI2lmIEVOQUJM
RShWSURFTykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6UGFpbnRGcmFtZUZvck1lZGlhKGlkZW50aWZpZXIsIGRlc3RpbmF0aW9u
KSk7Cit9CisjZW5kaWYKKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUp
Cit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ds
eXBocyhEaXNwbGF5TGlzdDo6RHJhd0dseXBocyB7IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNv
dW50LCBsb2NhbEFuY2hvciwgbW9kZSB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0Zv
clRleHQgeyBGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0
aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQorewor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKIH0KIAogYm9vbCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBpbWFnZSkKQEAg
LTQzNCwxMSArMzYwLDYgQEAgYm9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFJlc291cmNlVXNlKEZvbnQmIGZvbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQoR3JhcGhpY3NDb250
ZXh0Rmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmx1c2hDb250ZXh0KGlkZW50aWZpZXIpKTsKLX0KLQog
UmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8
UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRo
b2Q+IHJlbmRlcmluZ01ldGhvZCkgY29uc3QKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVy
aW5nQmFja2VuZCkpIHsKQEAgLTQ2NCw2ICszODUsMjEgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihj
b24KICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihy
ZWN0LCBzY2FsZUZhY3RvcigpLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdN
ZXRob2QpOwogfQogCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6Q29udmVydFRvTHVtaW5hbmNlTWFzaygpKTsKK30KKwordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJD
b3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNv
bG9yU3BhY2UpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZs
dXNoQ29udGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRl
eHQoaWRlbnRpZmllcikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuaAppbmRleCA5YjMzYTA2N2ZkMTZiY2NmMTQwNDJjMTk3NGRkNjkxOTQyMjYyNDY4Li5m
MmFkOGQwYWE0NTg1ODlhZWU4MTkwN2Q5YzkwODk2ZDM0YjZmNzA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiAKIGNsYXNzIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXIgeworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI7CiBwdWJsaWM6CiAgICAgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KFdlYkNvcmU6
OkltYWdlQnVmZmVyJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JiwgV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsK
ICAgICB+UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KCkgPSBkZWZhdWx0OwpAQCAtNTAs
NjMgKzUxLDM5IEBAIHB1YmxpYzoKICAgICB2b2lkIGZsdXNoQ29udGV4dChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZW5kKFQmJiBtZXNzYWdlKQotICAgIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFtX3JlbmRlcmluZ0JhY2tlbmQpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIG1fbmVlZHNGbHVzaCA9IHRydWU7Ci0gICAgICAgIG1fcmVuZGVyaW5nQmFj
a2VuZC0+c2VuZFRvU3RyZWFtKFdURk1vdmUobWVzc2FnZSksIG1fZGVzdGluYXRpb25CdWZmZXJJ
ZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOwotCiAgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgZmluYWw7CiAKICAgICB2b2lkIHJlY29yZFNhdmUoKSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZFJlc3RvcmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRTY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZFNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybSYpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3Io
V2ViQ29yZTo6U1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5l
U3Ryb2tlQ29sb3IoV2ViQ29yZTo6U1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldFN0
YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
U2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExp
bmVEYXNoKGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRDbGVhclNoYWRvdygpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmKSBmaW5hbDsKKworI2lmIFVTRShDRykKKyAgICB2
b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQXBw
bHlGaWxsUGF0dGVybigpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIHJlY29yZEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdlYkNvcmU6
OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFRv
SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNv
bnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciosIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBXZWJDb3JlOjpGaWx0ZXImKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNv
bnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFdlYkNvcmU6OlN5c3RlbUltYWdlJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRCZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBv
aW50MikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
bG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRS
ZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
ZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1
ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsK
KworICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZp
bmFsOworCiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNv
cmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3Jl
OjpHcmFkaWVudCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6
Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSkgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lk
IHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworCisgICAgdm9p
ZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0
IFdlYkNvcmU6OkxpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0
IFdlYkNvcmU6OkFyY0RhdGEmKSBmaW5hbDsKQEAgLTExNCw5ICs5MSwxMCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IFdlYkNvcmU6OkJlemllckN1cnZl
RGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRGaWxsUGF0aChjb25zdCBXZWJD
b3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRp
YShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKwor
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBm
aW5hbDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZFN0cm9r
ZUxpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFN0
cm9rZUFyYyhjb25zdCBXZWJDb3JlOjpBcmNEYXRhJikgZmluYWw7CkBAIC0xMjQsMTMgKzEwMiwy
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgV2Vi
Q29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZFN0
cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ry
b2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZENsZWFyUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBVU0Uo
Q0cpCi0gICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd1Jl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2
b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwor
ICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOworCisg
ICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAg
ICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Rmxv
YXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
JikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFn
ZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlv
bnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNv
cmU6OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUlt
YWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmRE
cmF3U3lzdGVtSW1hZ2UoV2ViQ29yZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZv
aWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYK
LSAgICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisg
ICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJD
b3JlOjpHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgY291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9y
LCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3
TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUmKSBmaW5hbDsKIAogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29y
ZTo6TmF0aXZlSW1hZ2UmKSBmaW5hbDsKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKFdlYkNv
cmU6OkltYWdlQnVmZmVyJikgZmluYWw7CkBAIC0xNDEsNiArMTM0LDE4IEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xv
clNwYWNlJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdNZXRob2Q+KSBjb25zdCBm
aW5hbDsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFn
ZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ01ldGhvZD4p
IGNvbnN0IGZpbmFsOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNlbmQo
VCYmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFj
a2VuZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9uZWVkc0ZsdXNoID0gdHJ1
ZTsKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNz
YWdlKSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIHZvaWQg
cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKICAgICBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZp
ZXI7CiAgICAgV2Vha1B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKICAg
ICBXZWFrUHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW5kZXJpbmdCYWNrZW5k
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCmluZGV4IDFkNjQzYjZiNDI4OGQwOGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcuLjA3
OTkzYjM4MGYxZWE3ZDM0OWRkN2ViZmMxNjBjODA0ZGFkNDNlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTUzNCw3
ICs1MzQsNyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjbwogCiAgICAgLy8gRHJhdyB3aGl0ZSBm
cmFtZXMgYXJvdW5kIHRoZSBob2xlcy4KICAgICAvLyBXZSBkb3VibGUgdGhlIHRoaWNrbmVzcyBi
ZWNhdXNlIGhhbGYgb2YgdGhlIHN0cm9rZSB3aWxsIGJlIGVyYXNlZCB3aGVuIHdlIGNsZWFyIHRo
ZSBob2xlcy4KLSAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dP
ZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOwor
ICAgIGdyYXBoaWNzQ29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd09mZnNl
dFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAg
ICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKICAgICBncmFw
aGljc0NvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoICogMik7CiAgICAgZm9y
IChhdXRvJiBwYXRoIDogd2hpdGVGcmFtZVBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxl
ci5jcHAKaW5kZXggZjE2Zjc5NmUwNDdlOTkxOTcyYzBlZDFmNGFlMTEzY2UxNjU2NWMxMC4uNDll
MDBiZTMzN2VhZmVlMTI5M2VmMDc3YWRmNjE3Y2RhZTNkNGExOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5n
ZUNvbnRyb2xsZXIuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5n
ZUNvbnRyb2xsZXI6OmRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3Jh
cGgKIAogICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihn
cmFwaGljc0NvbnRleHQpOwogCi0gICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhXZWJDb3Jl
OjpGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRp
dXMsIHNoYWRvd0NvbG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IFdl
YkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1
clJhZGl1cywgc2hhZG93Q29sb3IgfSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNv
bG9yKGZvdW5kQ29sb3IpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
aW5kaWNhdG9yQm9yZGVyV2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiBmb3VuZEZy
YW1lUGF0aHMpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggZTk3YzIwYTRmZjViZTQxZDljMzIwNTdjNTA4MWNmZmM0YjgxYTRhNi4uMmFmODFjMmEx
ZmM1ZjY4YmEwNDBmM2QwMTRmNDIxN2Y0ZWIzNjFlMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAzLTE0ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vz
c10gR3JhcGhpY3NDb250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBw
bGF0Zm9ybSBjb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzc3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0VGVzdHNDRy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwog
MjAyMi0wMy0xNCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgW2dpdC13ZWJraXRdIEhhbmRsZSBjb21wYXJpbmcgVXNlciBhbmQgQ29udHJpYnV0b3IgdG8g
Tm9uZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Jp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5k
ZXggOGU0MWM1YTczYWUzNjg0Y2VkZGYxZjk0ZjlmMTcxODk1MzUxNGM5Zi4uZWJlNjQ0ODcxZTI4
ZjUxOWNkMjYxMjBiOGE4Mjc4ODZjMDE5MDJiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCkBAIC01NCw3ICs1NCw3IEBAIFRFU1QoQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCYXNpYykKICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmlt
YXJ5Q29udGV4dChwcmltYXJ5Q0dDb250ZXh0LmdldCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxh
eUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlz
cGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdo
dCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3Qs
IEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250
ZXh0KTsKIApAQCAtOTAsMTAgKzkwLDEwIEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dFRlc3RzLCBCYXNpYykKIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUZXh0
KQogewogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgcHJpbWFyeURpc3BsYXlMaXN0OwotICAgIFJl
Y29yZGVySW1wbCBwcmltYXJ5Q29udGV4dChwcmltYXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRS
ZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3Jk
ZXJJbXBsIHByaW1hcnlDb250ZXh0KHByaW1hcnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAs
IGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlz
dCBzZWNvbmRhcnlEaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4
dChzZWNvbmRhcnlEaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRo
LCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4
dChzZWNvbmRhcnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29u
dGV4dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFy
eUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAgVEVTVChC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJvcmRlcnMpCiAgICAgR3JhcGhpY3NDb250
ZXh0Q0cgcHJpbWFyeUNvbnRleHQocHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAKICAgICBJbk1l
bW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlD
b250ZXh0KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNv
bnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRp
c3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7
CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vj
b25kYXJ5Q29udGV4dCk7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHRUZXN0cywgVHJhbnNmb3JtZWRDbGlwKQogICAgIEdyYXBoaWNzQ29udGV4dCYg
cHJpbWFyeUNvbnRleHQgPSBwcmltYXJ5Q29udGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5
TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRp
c3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVj
b3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRETChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAs
IDEwMCwgMTAwKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vj
b25kYXJ5Q29udGV4dERMOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJp
bWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwpAQCAtMjg3LDE1ICsyODcsMTUgQEAgVEVT
VChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ip
CiAgICAgR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCA9IHByaW1hcnlDb250ZXh0Q0c7
CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1w
bCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIDEw
MCwgMTAwKSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3Bs
YXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBHcmFwaGljc0NvbnRleHQm
IHNlY29uZGFyeUNvbnRleHQgPSBzZWNvbmRhcnlDb250ZXh0REw7CiAKICAgICBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAK
ICAgICBjdHguYXBwbHlEZXZpY2VTY2FsZUZhY3RvcigyKTsKIAotICAgIGF1dG8gcHJpbWFyeUNU
TSA9IHByaW1hcnlDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VT
Y2FsZTo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byBzZWNvbmRhcnlD
VE0gPSBzZWNvbmRhcnlDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZp
Y2VTY2FsZTo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgYXV0byBwcmltYXJ5
Q1RNID0gcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKCk7CisgICAgYXV0byBzZWNvbmRhcnlDVE0gPSBz
ZWNvbmRhcnlDb250ZXh0LmdldENUTSgpOwogCiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueFNj
YWxlKCksIHNlY29uZGFyeUNUTS54U2NhbGUoKSk7CiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0u
eVNjYWxlKCksIHNlY29uZGFyeUNUTS55U2NhbGUoKSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTE3N2VkOTI5ODBkZDhk
NGJhNGJmM2FmM2QxNDEwNmE2MmZkNmI4Ny4uYzRmOTZjMWI4Yzg3MmNkOGE4MDU4ZDIxYzQ0YTZk
ZTdlMTIzMzlhNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAzLTE0ICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3JhcGhp
Y3NDb250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9ybSBj
b250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mzc3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3Rl
ZC50eHQ6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9k
ZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAppbmRleCA1MTFi
N2MwYzU0ZDMzMjE2YjdjNmVhZjA0M2E3NWMxNjc2NmQwNDI3Li5kYmY1NGIzZWEyMDRlMTkyNGJk
NDM1ZDUxNzM2ZGM3MzQ3NzAyY2ZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CkBAIC0xLDE3
ICsxLDEzIEBACiAKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCiAoc2F2ZSkK
IChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyA1MTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkK
LSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93LWNvbG9yICMw
MDAwMDApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQotKGZpbGwtY29tcG9zaXRl
ZC1yZWN0CisgIChjaGFuZ2UtZmxhZ3MgW2Ryb3Atc2hhZG93XSkKKyAgKGRyb3Atc2hhZG93Cisg
ICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3ctYmx1ciAx
Mi4wMCkKKyAgICAoc2hhZG93LWNvbG9yICMwMDAwMDApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2Fj
eS1yYWRpdXMgMCkpKQorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICg1MCw1MCkg
c2l6ZSAxMDB4MTAwKQotICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24g
c291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0Myw1MCkgc2l6
ZSAxMzR4MTM3KQorICAoY29sb3IgIzAwMDBGRikgZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4
MTM3KQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0
ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAppbmRleCAzODZl
Mzk0MTE4NWYwOWEzYzY4ZWM2YzJhZTg4ZGYxMWM3MGIwYTY5Li41Zjc4YjhjMzUwNWM5ZTgwMzk5
YmQ2MDVhOWJlOTU1YWIwOWI3MDVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQK
QEAgLTEsMjEgKzEsMTQgQEAKIAotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAyMi4wMCkp
Ci0oY29uY2F0ZW50YXRlLWN0bQotICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkg
dD0oODEuNzAsLTE4LjMwKX0pKQogKHNhdmUpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3Mg
NTEyKQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhl
aWdodD0yMCkKLSAgKHNoYWRvdy1jb2xvciAjMDAwMDAwKQotICAoc2hhZG93cy11c2UtbGVnYWN5
LXJhZGl1cyAwKSkKLShmaWxsLWNvbXBvc2l0ZWQtcmVjdAorICAoY2hhbmdlLWZsYWdzIFtjdG0s
IGRyb3Atc2hhZG93XSkKKyAgKGN0bSB7bT0oKDAuODcsMC41MCkoLTAuNTAsMC44NykpIHQ9KDgx
LjcwLDMuNzApfSkKKyAgKGRyb3Atc2hhZG93CisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAg
aGVpZ2h0PTIwKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LWNvbG9yICMw
MDAwMDApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQorKGZpbGwtcmVjdC13
aXRoLWNvbG9yCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKLSAgKGNvbG9yICMwMDAw
RkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBu
b3JtYWwpIGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCisgIChjb2xv
ciAjMDAwMEZGKSBleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogKHJl
c3RvcmUpCi0oc2V0LWN0bQotICAoc2V0LWN0bSB7bT0oKDEuMDAsMC4wMCkoMC4wMCwxLjAwKSkg
dD0oMC4wMCwyMi4wMCl9KSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9s
YXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
bGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGJjMTdiNTExNDk5ZjgyNTZjOTky
OTBkYWU4NjE0ZDQ4OTRjYWY5Y2MuLjU0NmRjNDkxMmY1MmQwM2E4OWFkOTA2ODU3MmIyOGVkYzgw
MzIyNTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXkt
bGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRp
c3BheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSwxNiArMSwxMiBAQAogCi0odHJhbnNsYXRlCi0g
ICh4IDAuMDApCi0gICh5IDAuMDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisoZmlsbC1yZWN0
LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQotICAoY29sb3IgIzAw
ODAwMCkKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2Rl
IG5vcm1hbCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKKyAgKGNvbG9yICMwMDgwMDAp
IGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxh
Z3MgMzI5NjApCi0gIChmaWxsLWNvbG9yICMwMDAwRkYpCi0gIChzdHJva2Utc3R5bGUgMCkKKyAg
KGNoYW5nZS1mbGFncyBbZmlsbC1icnVzaCwgc3Ryb2tlLXN0eWxlLCBzaG91bGQtYW50aWFsaWFz
XSkKKyAgKGZpbGwtYnJ1c2gKKyAgICAoY29sb3IgIzAwMDBGRikpCisgIChzdHJva2Utc3R5bGUg
Tk8tU1RST0tFKQogICAoc2hvdWxkLWFudGlhbGlhcyAwKSkKIChkcmF3LXJlY3QKICAgKHJlY3Qg
YXQgKDAsMCkgc2l6ZSAxMDR4MikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKaW5kZXggYmI1
OTNkMjBmNmRhNjQ4NjI5MmQzNmMwMjIwZTJhOWQ4NzJmODJiOS4uYjg2MDQ4Y2MwOGM5OTM3ZWYw
MDc4MmU3MTA4OWNhY2JjOTljNTMzMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKQEAg
LTEsMTYgKzEsOCBAQAogcmVjb3JkZWQ6Ci0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5IDAu
MDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJl
Y3QgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9z
aXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQg
YXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQgKDQx
MiwwKSBzaXplIDEwMHgxMDApCiAKIHJlcGxheWVkOgogKAogICAoY2xpcCBhdCAoNTEyLDApIHNp
emUgNTEyeDIwMCkKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCg==
</data>
<flag name="commit-queue"
          id="482346"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454631</attachid>
            <date>2022-03-14 15:34:56 -0700</date>
            <delta_ts>2022-03-14 22:13:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220314153454.patch</filename>
            <type>text/plain</type>
            <size>588660</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uMzFiZGNkYWQzNjNkNGE2MTU0NWJmYWI2NWM0ZGY2
MTdjODk3NjhhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3NyBAQAorMjAyMi0wMy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjphcHBseUxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJv
a2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXlvdXRTdGlwcGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dEhhdGNoaW5nKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1
c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxh
eWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3Rp
bmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlk
VXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBo
c1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRlY29u
c3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRp
c3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEltYWdlOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkaWRBcHBs
eVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGVG
YWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVu
ZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9
PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9w
ZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3RhdGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VH
cmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnREZXRlY3RlZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVyZ2VTdGF0ZUNoYW5n
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJnZVN0YXRlRGlmZnMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmluZUNhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojps
aW5lRGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZUpvaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Om1pdGVyTGltaXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcG9zaXRlTW9kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU9wZXJhdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJsZW5kTW9kZU9wZXJhdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU1vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpkcm9wU2hhZG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJvcFNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNTaGFkb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphbHBoYSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRp
YWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRTbW9vdGhG
b250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3Vs
ZFNtb290aEZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNr
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJhd0x1bWlu
YW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1c2VEYXJrQXBw
ZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVz
ZURhcmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBw
bHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmlzSW5UcmFuc3BhcmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2Nh
bGVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBw
b3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6Y29u
dGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXll
clNjb3BlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OmJlZ2luTGF5ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVyU2Nv
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFj
a0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjp+R3JhcGhp
Y3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpoYXNP
bmx5UHJpbWl0aXZlQ2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptZXJnZURpZmZzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjaGFuZ2VzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkaWRBcHBseVN0YXRlQ2hhbmdl
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Z2V0Q1RNIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRDVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmZpbGxCcnVzaCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsR3JhZGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpmaWxsUnVsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbFJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZUJydXNoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlR3Jh
ZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9r
ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9r
ZVRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpzdHJva2VTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OmxpbmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OmxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bGluZUpvaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptaXRlckxpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpjb21wb3NpdGVNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpkcm9wU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnRleHREcmF3
aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpzaG91bGRBbnRpYWxpYXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNob3VsZFNtb290aEZvbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNl
dFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkcmF3THVtaW5hbmNl
TWFzayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0
RHJhd0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
OjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJl
c3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpU
cmFuc3BhcmVuY3lMYXllclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxh
eWVyU2NvcGU6OmJlZ2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5
ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVyU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVj
a2VyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9y
PDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZU1vZGU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlTW9kZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZU1vZGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGlu
ZVN0eWxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpMaW5lRGFzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6aXNWaXNpYmxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmlzQmx1cnJlZCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93OjpoYXNPdXRzZXRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05hbWVk
SW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZEltYWdlR2Vu
ZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFw
aGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6Ok51
bGxHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0Ry
YXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OlNoYWRvd0Js
dXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJydXNoOjpzcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
cnVzaDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnBh
dHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJj
ZUJydXNoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmNvbG9yIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6YnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnJ1c2g6OnNldEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpzZXRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjppc1ByaW1pdGl2
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJydXNoOjpCcnVzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJydXNoOjpCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJy
dXNoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmRlY29k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6VGV4dEJveEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6
b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpT
dGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6Z2V0Q1RNKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUpv
aW4pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnNldE1pdGVyTGltaXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRlQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Z2V0Q1RNIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2gpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRN
aXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpDR0NvbnRleHRTdGF0ZVNh
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6On5DR0NvbnRleHRT
dGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJuYWxQbGF0Zm9ybUNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlRHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBP
dXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldENHTGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xp
bmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTWl0ZXJMaW1pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRDR0xpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHU2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZUVsbGlwc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNhblVzZVNoYWRvd0JsdXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdElt
cGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBC
b3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6fkNHQ29udGV4dFN0
YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZl
cjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVy
OjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2
ZXI6OmRpZFNhdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJ
bWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UERG
RG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNv
bnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3
R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpiZWdpbkxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUludGVybmFsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OnNldEludGVybmFsRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkQmVnaW5MYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVuZExheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29y
ZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6cmVjb3JkRHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6ZHJhd05vbk9UU1ZHUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6ZHJhd09UU1ZHUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRl
cjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRy
YXdOYXRpdmVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6Y3Jl
YXRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVy
bmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnVwZGF0ZUZpbGxDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5
cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OnNoYWRvd0lzQ2xlYXJlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3
R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzaG93R2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZm
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzYWZlQ29weSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNpemVPZkl0ZW1J
bkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdpbmdJdGVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpTZXRTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRp
YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRDVE06OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDb25jYXRlbmF0ZUNUTTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6YXBwbHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0
ZXJMaW1pdDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyU2hhZG93OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJv
dW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJl
Y3Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91
bmRlZFJlY3Q6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OnggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YW5nbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmFtb3VudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6dHJhbnNmb3JtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6
Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNvbmNhdGVuYXRlQ1RNOjp0cmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZUNoYW5nZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRM
aW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
Q2FwOjpsaW5lQ2FwIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lRGFzaDo6U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoQXJyYXkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkYXNoT2Zmc2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFz
aDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRMaW5lRGFzaDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpsaW5lSm9pbiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJM
aW1pdDo6bWl0ZXJMaW1pdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6cmVj
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENv
bXBvc2l0ZWRSZWN0Ojpjb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb21wb3NpdGVPcGVyYXRvciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRS
ZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2Fs
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YmxlbmRNb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OlJlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojpt
X2RyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpy
ZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlT
dGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjph
cHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXApOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9y
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp+UmVjb3JkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRl
Q2hhbmdlSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3RhdGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkaWRVcGRhdGVTdGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNl
dExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y29uY2F0Q1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Z2V0Q1RN
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmN0bSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0
ZTo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpz
ZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OkNvbnRleHRT
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OkNvbnRleHRTdGF0ZTo6Y2xvbmVGb3JTYXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjbG9uZUZvclRyYW5z
cGFyZW5jeUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6c3RhdGVTdGFjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OlJlY29yZGVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRT
ZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENs
aXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
Q2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUm91bmRlZFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEJlemllckN1cnZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tl
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRTdHJva2VCZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNS
aW5nUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVj
b3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlw
aHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
RHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjp+UmVjb3Jk
ZXJJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZENvbmNhdGVuYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVDYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZURh
c2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkU2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclNoYWRv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBs
OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6UmVjb3JkZXJJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0
ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6YXBwbHlTZXRT
dGF0ZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Ry
YXdHbHlwaHNSZWNvcmRlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2U6OmRyYXdCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENo
ZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVh
bGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5RWxs
aXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
OnVwZGF0ZUV2ZW50UmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGRJbm5l
clNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1Q
cmV2aWV3QmFkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hl
Y2tib3hSYWRpb0lubmVyU2hhZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRl
cik6CisgICAgICAgICogcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29y
YXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VT
dHJva2VTdHlsZVRvRmlsbCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tl
U3R5bGVUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJl
VG9SZW5kZXJTVkdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZHJhdyk6CisKIDIwMjItMDMtMTQgIEFu
dG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9k
ZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZDljYzNjNGZlNjllOGJjZTVlMDFjODlhZjRkMDdjNzVhYzgwYzNlNi4uMjNj
NjA3YTZmMjJkNTQyNmM4MjBjOTY1MmExNWM2MGQ2YmE1OWI5YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw4MyBAQAorMjAyMi0wMy0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4K
KworICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBs
YXppbHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVD
VE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OmZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJu
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRBcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0
aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xpcE91dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZp
bGxCZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3Vy
dmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3TGluZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNS
aW5nUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRl
cm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVz
aENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjptX3JlbmRlcmluZ0JhY2tlbmQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxp
bWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6c2VuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xs
ZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0
UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VD
b250cm9sbGVyOjpkcmF3UmVjdCk6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFv
dXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRv
ZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
NWM3YjczZWIyMDVlMDllYzI0NmUwMTFkMGE1MDJkY2Q0YzFkY2E1MC4uZWI3NmExODZkMzQ4ZDRi
MzY4OWYyMzRmM2RiZjYyODJhYWFkZTA1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIwNDUsNiArMjA0
NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRHTC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyVHJhbnNmb3JtLmNwcApAQCAtMjA4NCw2ICsyMDg1LDcgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ODI5NjJiYTA0ZTJmZmQ3ZmZhMGM2ZTYxZDljOWMyYzE3YTVmNjQ2Ny4uYjU1YzVjMWM0MmUzMjk1
NTcwZWQyNGM4NDBkYzNlNGYyZmQzMDJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjMzMSwxMCArMjMzMSwxMiBAQAogCQk3
MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0
MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5
QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUYwNUY3RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUZDQjE3MDI3
QkFCM0ZFMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQ0IxNkQyN0JBQjNERjAwRTA2MzFDIC8qIEZy
YW1lUmF0ZUFsaWduZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MjAxNzgzQjI3RDU3RjlGMDA5QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIwMTc4
M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBG
MTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0
MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyog
U1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyMUI0OTc0MjUxMkJBM0IwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tp
bmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUI0
OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBG
NUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBh
aW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyNDYwREQ3MjdDODZEQUQwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0NjBE
RDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0Njk2M0IyNzVDNUZBNjAw
QTkxNTZBIC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1M0ZCODMyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNEMjc1
QzYxNDQwMEE5MTU2QSAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMTRCOUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBG
aWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MjQ2OTYzRTI3NUM2MTY3MDBBOTE1NkEgLyogRmlsdGVySW1hZ2VWZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjRF
RjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMzQyLDYgKzIzNDQsOSBAQAog
CQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkx
RkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0
ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9i
c2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzI1NjA3OEUyNzlEMzRCNjAwN0QyREQzIC8qIEZFSW1hZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyRjdFNzRGMjc5Q0VERTgwMEQ4MkQyRCAv
KiBGRUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8qIFNvdXJjZUJydXNoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkIzNTEwRjI3Q0I0MkZFMDBE
MjdBRTAgLyogU291cmNlQnJ1c2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NTI3Q0RBODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNTgx
ODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkIzNTEwRDI3Q0EzMjhG
MDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkNERTIwMjc1OTczNTAwMEE0NDVC
MiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI5NjYxQTIyNzU5NjBBNTAwRTdERjlCIC8qIEZpbHRlckVmZmVj
dEdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMw
MDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUlt
YWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEz
MzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTEzMTgsNiArMTEzMjMsOCBAQAogCQk3
MUZDQjE2RDI3QkFCM0RGMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZVJhdGVBbGlnbmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRkNCMTZGMjdCQUIzRTAwMEUwNjMxQyAvKiBGcmFtZVJhdGVBbGln
bmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lUmF0ZUFs
aWduZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZGODUxODIyQTNGODFG
MDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ0dDb250ZXh0U3RhdGVTYXZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjA2RDQzNTI3REFERUNBMDA0MEZFQjIgLyogVGV4dEJveEl0ZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjExQjVENjI3NjUzNjgyMDA3NkZFRjggLyogRmlsdGVyUmVzdWx0cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVBy
b3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzI3LDYgKzExMzM0LDggQEAKIAkJNzIyQTgxNUMyMzhGRDUw
NTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRp
b25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0MzVFRjQyNzNE
MDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNDM1RUY1MjczRDA3NjcwMDA1RTdF
RSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJJbWFnZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAv
KiBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0Nv
bnRleHRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNDYwREQ2MjdD
ODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmFwaGljc0NvbnRleHRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRF
RDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5N
YXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8q
IEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1h
eC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM4OSw2ICsxMTM5OCwxMCBA
QAogCQk3MkExM0FENTI3NERFNTRFMDBFMkE4OEUgLyogU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxp
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBMTNBRDYyNzRERTU3ODAwRTJBODhFIC8qIFNvdXJj
ZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU291cmNlR3Jh
cGhpY1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
QTEzQUQ3Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEMyN0M5RjkzRTAwRDI3QUUwIC8qIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBEMjdDQTMyOEYwMEQyN0FF
MCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUx
MEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNvdXJjZUJydXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEYy
N0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUJy
dXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjc0Mjc0RTIzMzMwMDI5
M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFQmxlbmRT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNEVGNzUy
NzRFMjMzNDAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyQjRFRjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZVZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjg4MTAsNiArMjg4MjMsNyBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2
NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJ
CQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3BwICovLAogCQkJCUJDQUZF
REIzMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cuY3BwICovLAogCQkJCUJDQUZFREIy
MjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cuaCAqLywKQEAgLTI5MDQzLDYgKzI5MDU3
LDkgQEAKIAkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdy
YXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAqLywKIAkJCQk3Qjk1Q0ZFOTI3NTRGRjZF
MDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICovLAorCQkJCTcyNDYwREQ1MjdD
ODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgKi8sCisJCQkJNzI0NjBE
RDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmggKi8sCisJCQkJNzJC
MzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLywK
IAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJ
CQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkw
RjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAt
MjkxNDMsNiArMjkxNjAsNyBAQAogCQkJCUJDQTU1OTEyMjYzREJENzkwMDdGMTlCMyAvKiBQaXhl
bEZvcm1hdC5oICovLAogCQkJCUNERDA4QUJGMjc3RTU0RjAwMEVBMzc1NSAvKiBQbGF0Zm9ybUF1
ZGlvVHJhY2tDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJQkMzRTYyNDIyNjU5NzkxNzAwNTQ4QUNE
IC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oICovLAorCQkJCTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FF
MCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovLAogCQkJCTcyNkQ1NkUxMjUzQUUwNDMw
MDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3
NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk1NTA2NDBBRDI0MDc1NkRBMDBB
QUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKQEAgLTI5MTY2LDYgKzI5
MTg0LDggQEAKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAg
Ki8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKIAkJ
CQkxQzREQjAyNDI3MzM5RTVFMDA3QjBBRDEgLyogU2hvdWxkTG9jYWxpemVBeGlzTmFtZXMuaCAq
LywKKwkJCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAgLyogU291cmNlQnJ1c2guY3BwICovLAor
CQkJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5oICovLAogCQkJCTFE
RDEyN0FDMjU2RTNBODcwMEIyMjdENyAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmNwcCAqLywKIAkJ
CQlDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5oICovLAog
CQkJCUNEQzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50
LmggKi8sCkBAIC0yOTE3Nyw2ICsyOTE5Nyw3IEBACiAJCQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5
MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oICovLAogCQkJCTk1RTlGNDQ0
MjdDOUEzOUIwMDk0NTMzNyAvKiBTeXN0ZW1JbWFnZS5oICovLAogCQkJCTNCQjZCODBGMjJBN0Qz
MTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCisJCQkJNzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIy
IC8qIFRleHRCb3hJdGVyYXRvci5oICovLAogCQkJCTM3NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAv
KiBUZXh0UnVuLmNwcCAqLywKIAkJCQlBODI0QjQ2NDBFMkVGMkVBMDA4MUE3QjcgLyogVGV4dFJ1
bi5oICovLAogCQkJCUNEMUU3MzQ2MTY3QkM3OEUwMDlBODg1RCAvKiBUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbi5jcHAgKi8sCkBAIC0zMzg3Myw2ICszMzg5NCw3IEBACiAJCQkJQ0RFM0FFMTIyNEI0
OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0
Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8qIENlcnRpZmljYXRlU3VtbWFyeS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5RjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRl
U2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZGRDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBD
aGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzY5REQxNTA1RjA3NjAw
MUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNzg1
RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5lbENvdW50TW9kZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNDc5OCw2ICszNDgyMCw4IEBACiAJCQkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8q
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Qjk1Q0ZFQjI3
NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjQ2MERENzI3Qzg2REFEMDBENUY5RjQg
LyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNTgxODU2MjdD
REFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJD
QS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBo
aWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzY3MDUsNiArMzY3MjksNyBAQAog
CQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3Jt
RXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5NTFENTRGNUZCMDBERDdD
NjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NTI3Q0RB
ODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRDc3MDVDNzI1NTI3NkNEMDAxRDBDOTQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQUYyNDA3NTgyRDAwQUFFMDQ1IC8qIFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTM3Mzg2LDYgKzM3NDEx
LDcgQEAKIAkJCQk1MTBENEEzODEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyog
U29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODRBODFGM0UwRkM3
REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1
NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1c2guaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
M0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNEM0E0OTY1MTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VCdWZmZXJMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDREYxMzUwOTI0QzlGQ0EzMDA0MzJFMUUgLyogU291cmNlQnVmZmVyUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDg1NmEzZGU1MDRk
ZWMwYmJmYTkwYWMxN2RlMzdmNTE1ZTE0ZDkyMDQuLjlkOTM1YTZmZjMyMzBmM2Y0NmEyZWY1ZDdl
YTEwMDEwYWU5ZTEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxh
eS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcApAQCAtMzcyLDcgKzM3Miw3IEBA
IHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aChQYWludGluZ0NvbnRleHQm
IHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICAgICAgICAgIERhc2hBcnJheSBsaW5lRGFzaDsK
ICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNoTGVuZ3RoKTsKICAgICAgICAgICAgIGxp
bmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hMZW5ndGgpOworICAgICAgICAgICAgcGFp
bnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFz
aExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9r
aW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAg
LTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hh
ZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8g
c2hhZG93UmVjdE9yaWdpbiA9IGZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpICsgc2hhZG93T2Zm
c2V0OwogICAgICAgICBhdXRvIGFkanVzdGVkU2hhZG93T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdp
biAtIGFkanVzdGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dS
YWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygp
ID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7
CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldERyb3BTaGFkb3coeyBhZGp1c3Rl
ZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFk
b3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRv
d1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykg
ewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5
IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xNDA1LDcg
KzE0MDUsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWlu
dGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQg
LT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBz
aGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNo
YWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4
dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hh
ZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9k
ZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKICAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1Jl
Y3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9DdXN0b21QYWludEltYWdlLmNwcAppbmRleCBmNGI5OGJhNjJlMTE5YTA3NzEzMTJkM2I4
OGM0OTE5MzY4MzZlZTM3Li5lZTUwNGYwOGM0OWZjOGQ1YjVhZWQ3MDJiZTIxN2YxYjA2ZmQ0ZTBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKQEAgLTE3NSw3ICsx
NzUsNyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludChH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjbwogSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBh
aW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwor
ICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJh
dG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENvbnRleHQuY2xpcChkZXN0
UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkpOwog
ICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCkBAIC0xOTIsNyArMTky
LDcgQEAgdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKIAogICAgIC8vIEZhY3RvciBpbiB0aGUgZGVzdGluYXRpb24gY29udGV4
dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29sdXRpb24KLSAgICBBZmZpbmVU
cmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
ZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oKTsKICAgICBkb3VibGUgeFNjYWxl
ID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7CiAgICAgZG91YmxlIHlTY2FsZSA9IGZh
YnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBhZGp1c3Rl
ZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRl
eCAwZTc4MDYzZTNhNDFjYmM2OTBmMGQwY2NiNzg4MTE3ZGU2OTM4YTAyLi5kYmM5NTdjNTNkMDRh
Mzk2ZWFjNjRkNjdmZTZhMmIxN2U0NDhjNjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAt
Njk3LDcgKzY5Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlM
aW5lRGFzaCgpIGNvbnN0CiAgICAgRGFzaEFycmF5IGNvbnZlcnRlZExpbmVEYXNoKHN0YXRlKCku
bGluZURhc2guc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlKCkubGlu
ZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbnZlcnRlZExpbmVEYXNoW2ldID0gc3RhdGlj
X2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4oc3RhdGUoKS5saW5lRGFzaFtpXSk7Ci0gICAgYy0+c2V0
TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRlKCkubGluZURhc2hPZmZzZXQpOworICAg
IGMtPnNldExpbmVEYXNoKHsgV1RGTW92ZShjb252ZXJ0ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0
PGZsb2F0PihzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KSB9KTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxBbHBoYShkb3VibGUgYWxwaGEpCkBAIC03Mjgs
NyArNzI4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxD
b21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBvcGUKICAgICBHcmFwaGljc0NvbnRleHQq
IGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwotICAg
IGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKKyAgICBjLT5zZXRDb21w
b3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKQEAgLTExODYsNyArMTE4
Niw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tl
SW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZG91CiAgICAgICAgIERhc2hBcnJheSBjb252ZXJ0
ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAgICAgICAgY29udmVydGVkTGluZURhc2hb
aV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50PihsaW5lRGFzaFtpXSk7Ci0gICAgICAg
IGNvbnRleHQuc2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zm
c2V0KTsKKyAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IFdURk1vdmUoY29udmVydGVkTGlu
ZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUubGluZURhc2hPZmZzZXQpIH0pOwogICAg
IH0pOwogfQogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmNsZWFyUmVjdChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB3aWR0aCwgZAog
ICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsK
ICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coRmxvYXRT
aXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOworICAgICAgICBjb250ZXh0LT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAsIENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiAgICAg
fQogICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZl
ZCkgewpAQCAtMTM2Myw5ICsxMzYzLDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAg
ICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICBm
bG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgYy0+
c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwg
c3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAg
Yy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hh
ZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0p
OwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9y
Ojp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBj
LT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjQzMiwxOSArMjQz
MiwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVj
a2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGRvdQogCiAgICAgICAgICAgICBGbG9hdFNpemUg
b2Zmc2V0KDAsIDIgKiBtYXNrUmVjdC5oZWlnaHQoKSk7CiAKLSAgICAgICAgICAgIEZsb2F0U2l6
ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7Ci0gICAgICAg
ICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICAgICAgICAgIGMtPmdldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotCiAgICAgICAgICAgICBGbG9hdFJl
Y3Qgc2hhZG93UmVjdChtYXNrUmVjdCk7Ci0gICAgICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUo
c2hhZG93UmFkaXVzICogMS40KTsKLSAgICAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzaGFkb3dP
ZmZzZXQgKiAtMSk7CisgICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cgPSBjLT5kcm9wU2hhZG93
KCk7CisKKyAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShkcm9wU2hhZG93LmJsdXJSYWRp
dXMgKiAxLjQpOworICAgICAgICAgICAgc2hhZG93UmVjdC5tb3ZlKGRyb3BTaGFkb3cub2Zmc2V0
ICogLTEpOwogICAgICAgICAgICAgYy0+Y2xpcChzaGFkb3dSZWN0KTsKIAotICAgICAgICAgICAg
c2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKKyAgICAgICAgICAgIGRyb3BTaGFkb3cub2Zmc2V0ICs9
IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93
UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAg
ICAgIGMtPnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICAgICAgICAgICAgIGlmIChmaWxs
KQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCmluZGV4IDRmNjNhZGNl
OTM5MTZkYjIzMjBlOTY3OGFhYmZlMGYzY2Q5OTc2MmIuLjlhODAzYTQwOGQ4OGMyZmY0OGRkM2Jl
YTAyOTUxYjg3NTgwOThlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5jcHAKQEAgLTEyNDQsNyArMTI0NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlv
dXRTdGlwcGxpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1
YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKICAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxl
KFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2goeyAx
LCBkZW5zaXR5IH0sIDEpOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IDEsIGRlbnNpdHkg
fSwgMSB9KTsKIAogICAgIGRyYXdMYXlvdXRQYXR0ZXJuKGNvbnRleHQsIHF1YWQsIGRlbnNpdHks
IEZsaXA6Ok5vKTsKIH0KQEAgLTEyNTQsNyArMTI1NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlv
dXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKGNvbnRleHQpOwogICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHls
ZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
MiwgMiB9LCAyKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyAyLCAyIH0sIDIgfSk7CiAK
ICAgICBjb25zdGV4cHIgYXV0byBkZWZhdWx0TGF5b3V0SGF0Y2hTcGFjaW5nID0gMTI7CiAgICAg
ZHJhd0xheW91dFBhdHRlcm4oY29udGV4dCwgcXVhZCwgZGVmYXVsdExheW91dEhhdGNoU3BhY2lu
ZywgZmxpcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYjU4OGY2ZmE0YTExZDc3
MGMzYzg0OTk5NjcyZDdkN2VmZjQzMmM0Zi4uOGExN2FlMzcwYWUzNmIwMGViYjdhOWIyZTA3NTUx
ODA2YmVkMTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNDMwMyw3ICs0MzAz
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdy
YXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXQKICAgICBpZiAobmVlZHNMYXlvdXQoKSkKICAg
ICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgTnVsbEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KGZyYW1lUmVjdCgpLCBwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAg
IGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50
c0VudGlyZUNvbnRlbnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJs
ZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ4NTQsNyAr
NDg1NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9h
dCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEg
Y29udGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgotICAgIE51bGxHcmFwaGljc0NvbnRleHQg
Y29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5v
bmUpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChmcmFtZVJlY3QoKSwgTnVsbEdy
YXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAgICByZW5k
ZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2FzdDxpbnQ+KGZsb29yZihvbGRCb3R0b20p
KSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob2xk
VG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nh
c3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3ApKSk7CiAgICAgcmVuZGVyVmlldy0+c2V0
UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDlm
ZDI1ZDgwYWQxMmRjOTFkZDExZjkxNTk4ZmM2YzhlZmE0Y2IyYTIuLjI4OTU3NGI5YzFlNDBjZDcx
MmI0ZTJiNmU5ZWIzNGIwMTcyOWRmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCkBA
IC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBwcmlt
YXJ5Q29udGV4dCwgR3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0KQotICAgIDogbV9w
cmltYXJ5Q29udGV4dChwcmltYXJ5Q29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChwcmlt
YXJ5Q29udGV4dC5jbGlwQm91bmRzKCksIHsgfSwgcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKCkpCisg
ICAgLCBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250ZXh0KQogICAgICwgbV9zZWNvbmRhcnlD
b250ZXh0KHNlY29uZGFyeUNvbnRleHQpCiB7CiB9CkBAIC00OCw2ICs0OSwzMCBAQCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250
ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KTsKIH0KIAorI2lmIFVTRShDRykKK2Jvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6aXND
QUxheWVyQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXND
QUxheWVyQ29udGV4dCgpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQoreworICAgIG1fcHJpbWFy
eUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKKyAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKK30K
Kwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7
Cit9CisjZW5kaWYKKworUmVuZGVyaW5nTW9kZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpy
ZW5kZXJpbmdNb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yZW5k
ZXJpbmdNb2RlKCk7Cit9CisKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgp
CiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG5vdCB1c2luZyB0aGUgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dCdzIHN0YXRlIHN0YWNrIGF0IGFsbCwKQEAgLTY0LDIyICs4OSwxMCBAQCB2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQogICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmIGZyb20sIGNvbnN0IEZsb2F0UG9pbnQmIHRvKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd0xpbmUoZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9t
LCB0byk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojph
cHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShy
ZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CisgICAgbV9w
cmltYXJ5Q29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5hcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCiAjaWYgVVNFKENHKQpAQCAtOTYsMjIgKzEwOSwx
MCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQog
fQogI2VuZGlmCiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZp
bGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5zdHJva2VQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRo
KHBhdGgpOworICAgIG1fcHJpbWFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0
b3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rv
cik7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KQpAQCAtMTI2LDIyMiArMTI3LDEyNiBAQCB2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBtX3NlY29u
ZGFyeUNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwotfQotCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotfQotCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBj
b2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChy
ZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotfQotCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VSZWN0
KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVj
dCwgbGluZVdpZHRoKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbEVsbGlw
c2UoZWxsaXBzZSk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VF
bGxpcHNlKGVsbGlwc2UpOwotfQotCi0jaWYgVVNFKENHKQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNDQUxheWVyQ29udGV4dCkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4
dCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVy
Q29udGV4dCk7Ci19Ci0KLWJvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVy
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVy
Q29udGV4dCgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlzQWNjZWxl
cmF0ZWRDb250ZXh0KTsKLX0KLSNlbmRpZgotCi1SZW5kZXJpbmdNb2RlIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaW1h
cnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLX0KLQogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmNsaXAocmVjdCk7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwKHJlY3QpOwogICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5jbGlwKHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuY2xpcE91dChyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChy
ZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwotfQotCiB2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRS
dWxlKQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwog
ICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcHJpbWFyeUNvbnRleHQuY2xpcEJvdW5kcygpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LnNldExpbmVDYXAobGluZUNhcCk7Ci0gICAgbV9zZWNvbmRhcnlDb250
ZXh0LnNldExpbmVDYXAobGluZUNhcCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJl
Y3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwogfQogCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRM
aW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5z
ZXRMaW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpOworICAgIG1fcHJpbWFyeUNvbnRleHQu
Y2xpcE91dChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKIH0K
IAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBs
aW5lSm9pbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVKb2luKGxpbmVKb2luKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZUpvaW4obGluZUpvaW4pOworICAgIG1fcHJpbWFy
eUNvbnRleHQuY2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7
CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBk
ZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LnNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LnNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGVhclJl
Y3QocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKIH0KIAot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3
TmF0aXZlSW1hZ2UobmF0aXZlSW1hZ2UsIHNlbGZTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFn
ZSwgc2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBtX3ByaW1hcnlD
b250ZXh0LmZpbGxSZWN0KHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChy
ZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1h
Z2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25S
ZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwogfQogCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5kcmF3UGF0dGVybihuYXRpdmVJbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5hdGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3ByaW1hcnlD
b250ZXh0LmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZmlsbFJlY3QocmVjdCwgZ3JhZGllbnQpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3QocmVjdCwg
Y29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3QocmVjdCwgY29s
b3IpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3ByaW1h
cnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxl
U2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUaWxl
ZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0
aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJl
Y3QsIGNvbG9yKTsKIH0KIAotSW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7
CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwogfQogCi0jaWYg
RU5BQkxFKFZJREVPKQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIs
IGRlc3RpbmF0aW9uKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlh
KHBsYXllciwgZGVzdGluYXRpb24pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0
aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOwogfQotI2VuZGlmIC8v
IEVOQUJMRShWSURFTykKIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNjYWxlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQog
ewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2NhbGUoc2NhbGUpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5zY2FsZShzY2FsZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3Qs
IGJvcmRlclRoaWNrbmVzcyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVj
dCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
Ojpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIG1f
cHJpbWFyeUNvbnRleHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9r
ZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2Uo
ZWxsaXBzZSk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnRyYW5zbGF0
ZSh4LCB5KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOworICAgIG1f
cHJpbWFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuY29uY2F0Q1RNKHRyYW5z
Zm9ybSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNvbmNhdENUTSh0cmFuc2Zvcm0pOworICAg
IG1fcHJpbWFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIGZyb20sIGNvbnN0IEZsb2F0UG9pbnQmIHRvKQogewotICAgIG1f
cHJpbWFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LnNldENUTSh0cmFuc2Zvcm0pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwg
dG8pOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CiB9CiAKLUFm
ZmluZVRyYW5zZm9ybSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURl
dmljZVNjYWxlIGluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJl
dHVybiBtX3ByaW1hcnlDb250ZXh0LmdldENUTShpbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LmRyYXdFbGxpcHNlKHJlY3QpOwogfQogCi1GbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5n
TW9kZSByb3VuZGluZ01vZGUpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91
bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZHJhd1BhdGgocGF0aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgp
OwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCkBAIC0zNzAsMjkgKzI3NSw1NCBAQCB2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBkbwogfQogI2VuZGlmCiAKLUZsb2F0U2l6ZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gdG8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgYXV0byBzaXplID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3VGV4dChjYXNjYWRlLCBy
dW4sIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUZXh0KGNh
c2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAgICByZXR1cm4gc2l6ZTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9u
dFNtb290aGluZ01vZGUpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiBmaWx0ZXJS
ZXN1bHRzKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVy
LCBmaWx0ZXJSZXN1bHRzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1
bHRzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJv
bSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoY2FzY2FkZSwgcnVuLCBtYXJrLCBwb2lu
dCwgZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RW1waGFzaXNNYXJrcyhj
YXNjYWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CisgICAgbV9wcmltYXJ5Q29udGV4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGlt
YWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2FzY2Fk
ZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udENhc2Nh
ZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFn
ZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAg
IG1fcHJpbWFyeUNvbnRleHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdCaWRpVGV4
dChjYXNjYWRlLCBydW4sIHBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOworICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJl
Y3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2Us
IGRlc3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIG1fcHJp
bWFyeUNvbnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
eworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBFTkFC
TEUoVklERU8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQor
eworICAgIG1fcHJpbWFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGlu
YXRpb24pOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVy
LCBkZXN0aW5hdGlvbik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCit2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRy
YXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNt
b290aGluZ01vZGUpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3R2x5cGhzKGZvbnQsIGds
eXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0K
IAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZSkKQEAgLTQwNywxNiArMzM3LDkgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKICAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBtYXJrZXJT
dHlsZSk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmIHVybCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorYm9vbCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0
c0ludGVybmFsTGlua3MoKSBjb25zdAogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0RGVzdGlu
YXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0
aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQu
c3VwcG9ydHNJbnRlcm5hbExpbmtzKCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCkBAIC00MjUsMTggKzM0OCwxNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFkZERlc3RpbmF0aW9uQXRQb2ludChuYW1lLCBw
b2ludCk7CiB9CiAKLWJvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRl
cm5hbExpbmtzKCkgY29uc3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVz
dGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnN1cHBvcnRzSW50ZXJuYWxMaW5rcygp
OworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3Qp
OworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVj
dCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlkVXBkYXRlU3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVybCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIC8vIFRoaXMgY2FsbHMgdXBkYXRlU3RhdGUoKSBpbnN0ZWFkIG9mIGRpZFVwZGF0ZVN0YXRl
KCkgc28gdGhhdCBjaGFuZ2VzCi0gICAgLy8gYXJlIGFsc28gYXBwbGllZCB0byBlYWNoIGNvbnRl
eHQncyBHcmFwaGljc0NvbnRleHRTdGF0ZSwgc28gdGhhdCBjb2RlCi0gICAgLy8gaW50ZXJuYWwg
dG8gdGhlIGNoaWxkIGNvbnRleHRzIHRoYXQgcmVhZHMgZnJvbSB0aGUgc3RhdGUgZ2V0cyB0aGUg
cmlnaHQgdmFsdWVzLgotICAgIG1fcHJpbWFyeUNvbnRleHQudXBkYXRlU3RhdGUoc3RhdGUsIGZs
YWdzKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQudXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsK
KyAgICBtX3ByaW1hcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0KTsKKyAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3QpOwogfQogCiAjaWYgT1MoV0lO
RE9XUykgJiYgIVVTRShDQUlSTykKQEAgLTQ0Niw1ICszNjcsMTAgQEAgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkZXByZWNhdGVkUHJp
dmF0ZUNvbnQKIH0KICNlbmRpZgogCitGbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9k
ZSByb3VuZGluZ01vZGUpCit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91bmRUb0Rl
dmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAppbmRleCBmNThiMzRjOTE0MzQyYjczNzc3Mjdj
MTFhNzNiNmQ4MjE4ZTE1NTZmLi43YTM3YTExM2RkODE1ZWIzYjk1NjA3NTJkOWRjNzBlYjVhODk3
YzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oCkBAIC00Myw4MyArNDMsNTQgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBz
YXZlKCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisjaWYgVVNFKENHKQorICAg
IGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQg
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2Vs
ZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKKyNlbmRpZgorICAgIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwogCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAg
dm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFs
OwogI2lmIFVTRShDRykKICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwogICAg
IHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCBkcmF3UGF0
aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmlu
YWw7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAogICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKICAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKLQotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3Q7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAg
dm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgp
IGZpbmFsOwotCi0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotCi0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29s
KSBmaW5hbDsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKLQotICAg
IHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7Ci0jZW5kaWYKLQotICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0
aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwogICAgIHZvaWQgY2xpcE91
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRo
JikgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKIAotICAgIHZvaWQgY2xpcFBhdGgo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwotCi0gICAg
SW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAo
TGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBm
bG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBm
aW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwotCi0gICAgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3U3lzdGVt
SW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIEltYWdlRHJhd1Jl
c3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFn
ZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRy
YXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7
Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lk
IHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pIGZpbmFsOwotI2VuZGlmCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYp
IGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2Nh
bGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJ
blJhZGlhbnMpIGZpbmFsOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZp
bmFsOworICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5h
bDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5h
bDsKIAotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwot
ICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQg
c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dCBmaW5hbDsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAg
ICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKSBmaW5hbDsKIAorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCiAg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2lmIFBMQVRGT1JNKE1B
QykKQEAgLTEyNywyMyArOTgsMjYgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAjZW5kaWYKIAotICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBmaW5hbDsKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdCaWRpVGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBh
aW50SWZGb250Tm90UmVhZHkpIGZpbmFsOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAg
IHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBm
aW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQ
YXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCBwYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBm
aW5hbDsKKyNlbmRpZgogCisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291
bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmlu
YWw7CiAgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7Ci0KICAgICB2b2lkIGRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZp
bmFsOwogCi0gICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOwotCi0gICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9u
QXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLQog
ICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50
JikgZmluYWw7CisgICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29u
c3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwog
CiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShDQUlSTykKICAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJh
dGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRl
R2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IGJiNGRhYzAxOWM1YjllMTNiMTM3YWU2OTRlNGJmNmIy
NzZiZmNjMGQuLjFjMWI5NmVjNWI5ODNjYzVmMThkNmZmMWZkMjU4NTdmYTk0M2M0MWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZS5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhd0Nyb3NzZmFkZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiBJbWFn
ZURyYXdSZXN1bHQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xp
cChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwog
ICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKaW5kZXgg
MjVhM2QzZmU4NzczMzFkZGEzOTU3ODAxMWI2ZDg5MGYyMTJjNzJlNi4uM2JjYjUwNWFmM2MyODJm
NDIyMzI1Y2Q3ZTMwMDUzNGZkOWY5OWNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyNCArMjYsMTEg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgi
CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCi0jaWYgVVNFKENPUkVfVEVYVCkKLSNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8Q29yZVRleHQvQ29y
ZVRleHQuaD4KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRl
eHRTUElXaW4uaD4KLSNlbHNlCi0jaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgot
I2VuZGlmCi0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNlbmRpZgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CkBAIC02Miw3NiArNDks
MzIgQEAgcHVibGljOgogI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCiAgICAg
dm9pZCBkcmF3TmF0aXZlVGV4dChDVEZvbnRSZWYsIENHRmxvYXQgZm9udFNpemUsIENUTGluZVJl
ZiwgQ0dSZWN0IGxpbmVSZWN0KTsKIAotICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0KTsKLSAgICB2b2lkIHJlY29yZEVuZExh
eWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmKTsKLSAgICB2b2lkIHJlY29yZERy
YXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIGNvbnN0IENHQWZmaW5l
VHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBz
aXplX3QgY291bnQpOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlKENHUmVuZGVyaW5nU3RhdGVS
ZWYsIENHR1N0YXRlUmVmLCBDR1JlY3QsIENHSW1hZ2VSZWYpOworICAgIHZvaWQgcmVjb3JkQmVn
aW5MYXllcihDR0dTdGF0ZVJlZik7CisgICAgdm9pZCByZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJl
Zik7CisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENHR1N0YXRlUmVmLCBjb25zdCBDR0dseXBo
W10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7CisgICAgdm9pZCBy
ZWNvcmREcmF3SW1hZ2UoQ0dHU3RhdGVSZWYsIENHUmVjdCwgQ0dJbWFnZVJlZik7CiAjZW5kaWYK
IAotICAgIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMoKSBjb25z
dCB7IHJldHVybiBtX2RlY29uc3RydWN0RHJhd0dseXBoczsgfQotCiBwcml2YXRlOgotI2lmIFVT
RShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29u
dGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgZHJhd0J5
U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwot
ICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJh
d05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwotCi0gICAgdm9pZCBwb3B1bGF0ZUlu
dGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHBvcHVs
YXRlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9p
ZCBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7
Ci0gICAgdm9pZCBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOworICAgIHZvaWQgc2V0SW50ZXJu
YWxGb250KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGUgcHJlcGFyZUludGVybmFsQ29udGV4dCgpOworICAgIHZvaWQgcmVzdG9yZURlc3Rp
bmF0aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSk7
CiAKLSAgICB2b2lkIHVwZGF0ZUZpbGxDb2xvcihjb25zdCBDb2xvciYsIEdyYWRpZW50KiA9IG51
bGxwdHIsIFBhdHRlcm4qID0gbnVsbHB0cik7Ci0gICAgdm9pZCB1cGRhdGVTdHJva2VDb2xvcihj
b25zdCBDb2xvciYsIEdyYWRpZW50KiA9IG51bGxwdHIsIFBhdHRlcm4qID0gbnVsbHB0cik7Ci0g
ICAgdm9pZCB1cGRhdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgZW51bSBjbGFz
cyBTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyB7Ci0gICAgICAgIFVuc3BlY2lmaWVkLAotICAgICAg
ICBZZXMsCi0gICAgICAgIE5vCi0gICAgfTsKLSAgICB2b2lkIHVwZGF0ZVNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNo
YWRvd0NvbG9yLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0KLSNpZiBVU0UoQ09SRV9URVhU
KSAmJiAhUExBVEZPUk0oV0lOKQotICAgIHZvaWQgdXBkYXRlU2hhZG93KENHU3R5bGVSZWYpOwot
I2VuZGlmCisgICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAg
ICB2b2lkIGRyYXdPVFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCos
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd0J5
U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHQmIG1fb3duZXI7CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2Rl
c3RpbmF0aW9uQ29udGV4dDsKICAgICBEZWNvbnN0cnVjdERyYXdHbHlwaHMgbV9kZWNvbnN0cnVj
dERyYXdHbHlwaHM7CiAgICAgRGVyaXZlRm9udEZyb21Db250ZXh0IG1fZGVyaXZlRm9udEZyb21D
b250ZXh0OwogCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICBVbmlx
dWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKLSNlbmRpZgotCiAgICAg
Y29uc3QgRm9udCogbV9vcmlnaW5hbEZvbnQgeyBudWxscHRyIH07CiAgICAgRm9udFNtb290aGlu
Z01vZGUgbV9zbW9vdGhpbmdNb2RlIHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcg
fTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7CiAKLSAgICBzdHJ1
Y3QgU3RhdGUgewotICAgICAgICBzdHJ1Y3QgU3R5bGUgewotICAgICAgICAgICAgQ29sb3IgY29s
b3I7Ci0gICAgICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OwotICAgICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgICAgICAgICBSZWZQ
dHI8UGF0dGVybj4gcGF0dGVybjsKLSAgICAgICAgfTsKLSAgICAgICAgU3R5bGUgZmlsbFN0eWxl
OwotICAgICAgICBTdHlsZSBzdHJva2VTdHlsZTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3RtOwotCi0gICAgICAgIHN0cnVjdCBTaGFkb3dTdGF0ZSB7Ci0gICAgICAgICAgICBGbG9hdFNp
emUgb2Zmc2V0OwotICAgICAgICAgICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICAgICAgICAgIENv
bG9yIGNvbG9yOwotICAgICAgICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsK
LSAgICAgICAgfTsKLSAgICAgICAgU2hhZG93U3RhdGUgc2hhZG93OwotICAgIH07Ci0gICAgU3Rh
dGUgbV9vcmlnaW5hbFN0YXRlOwotICAgIFN0YXRlIG1fY3VycmVudFN0YXRlOworI2lmIFVTRShD
T1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4
dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cAppbmRleCA4NTE4MGFkMTA5ZmQ4MThlOWJiMTU4OGNlOTYyYWI0NjMwODE2YTA5Li4zNjExYjEy
Y2E5YWIyOWViOTIxZjIzMjVlMWY5NmQyOTUyNTNjN2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAg
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4KIAogc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJ
bk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXh0UnVuKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9t
LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbikgY29uc3QKIHsKLSAgICBBU1NFUlQoIWNvbnRleHQucGFp
bnRpbmdEaXNhYmxlZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsICFjb250ZXh0LnBh
aW50aW5nRGlzYWJsZWQoKSk7CiAgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52YWx1ZV9v
cihydW4ubGVuZ3RoKCkpOwogICAgIAogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBw
YXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVy
ZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MApAQCAtMjE0LDcgKzIxNCw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2Nh
ZGU6OmRpc3BsYXlMaXN0Rm9yVGV4CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxh
eUxpc3QgPSBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwot
ICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxheUxp
c3QsIGNvbnRleHQuc3RhdGUoKSwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBEcmF3
R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pOworICAgIERpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGwgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxheUxpc3QsIEZsb2F0UmVj
dCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERy
YXdHbHlwaHM6Ok5vKTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQgPSB0b0Zsb2F0
UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpKSk7CiAgICAg
ZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBzdGFydFBvaW50
LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAppbmRleCA2NDU4NGU1Y2ZlMDExODgyZWZh
YjJlMjNjM2E1OTRlMTc4MmYyODkwLi4yZjgyN2Y2MjVmNjRiNTljYTFhNjY0OTYwNzMwZjAzYzIz
YmMzN2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudEltYWdlLmNwcApAQCAtNDMsNyArNDMsNyBAQCBHcmFkaWVudEltYWdlOjp+R3JhZGllbnRJ
bWFnZSgpID0gZGVmYXVsdDsKIEltYWdlRHJhd1Jlc3VsdCBHcmFkaWVudEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250
ZXh0KTsKLSAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29udGV4dC5z
ZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJs
ZW5kTW9kZSgpIH0pOwogICAgIGRlc3RDb250ZXh0LmNsaXAoZGVzdFJlY3QpOwogICAgIGRlc3RD
b250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZGVzdFJlY3Qu
c2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIEdyYWRpZW50
SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZAogICAgIG1fZ3JhZGllbnQtPmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdp
bmcoYWRqdXN0ZWRTaXplLCBhZGp1c3RlZFNyY1JlY3QsIHNwYWNpbmcpOwogCiAgICAgLy8gRmFj
dG9yIGluIHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0J3Mgc2NhbGUgdG8gZ2VuZXJhdGUgYXQgdGhl
IGJlc3QgcmVzb2x1dGlvbgotICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRl
c3RDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNl
U2NhbGUpOworICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0
LmdldENUTSgpOwogICAgIGRvdWJsZSB4U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RNLnhTY2Fs
ZSgpKTsKICAgICBkb3VibGUgeVNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS55U2NhbGUoKSk7
CiAgICAgQWZmaW5lVHJhbnNmb3JtIGFkanVzdGVkUGF0dGVybkNUTSA9IHBhdHRlcm5UcmFuc2Zv
cm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAppbmRleCAwYmIxMzU5N2NlYTczNjlkYmJjNmUxNzI3ZjI2YzkyYjhmYjc1MTc2
Li45OTQyZmFlNWE0MmQ4NTEzODIzMDllNzA5YWRhYjJlZDFjNmY2OGE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKICNpbmNsdWRl
ICJCaWRpUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZp
bHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVk
UmVjdC5oIgpAQCAtMzYsNDczICszNSwzMDkgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKLSNp
bmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIK
ICNpbmNsdWRlICJTeXN0ZW1JbWFnZS5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRl
ICJUZXh0Qm94SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGV4dEJveEl0ZXJhdG9yIHsKLXB1YmxpYzoK
LSAgICBUZXh0Qm94SXRlcmF0b3IoKQotICAgICAgICA6IG1fdGV4dFJ1bigwKQotICAgICAgICAs
IG1fb2Zmc2V0KDApCi0gICAgewotICAgIH0KLQotICAgIFRleHRCb3hJdGVyYXRvcihjb25zdCBU
ZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBvZmZzZXQpCi0gICAgICAgIDogbV90ZXh0UnVuKHRl
eHRSdW4pCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICB1
bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIHZvaWQgaW5j
cmVtZW50KCkgeyBtX29mZnNldCsrOyB9Ci0gICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3RleHRSdW4gfHwgbV9vZmZzZXQgPj0gbV90ZXh0UnVuLT5sZW5ndGgoKTsgfQotICAgIFVD
aGFyIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoKm1fdGV4dFJ1bilbbV9vZmZzZXRdOyB9Ci0g
ICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYXRFbmQoKSA/IFVf
T1RIRVJfTkVVVFJBTCA6IHVfY2hhckRpcmVjdGlvbihjdXJyZW50KCkpOyB9Ci0KLSAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldCAmJiBtX3RleHRSdW4gPT0g
b3RoZXIubV90ZXh0UnVuOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0
Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0K
LQotcHJpdmF0ZToKLSAgICBjb25zdCBUZXh0UnVuKiBtX3RleHRSdW47Ci0gICAgdW5zaWduZWQg
bV9vZmZzZXQ7Ci19OwotCi0jZGVmaW5lIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKGZsYWcs
IHByb3BlcnR5KSBcCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OmZsYWcpICYmIChtX3N0YXRlLnByb3BlcnR5ICE9IHN0YXRlLnByb3BlcnR5KSkg
XAotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OmZsYWcpOwot
Ci1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQotICAgIDogc2hv
dWxkQW50aWFsaWFzKHRydWUpCi0gICAgLCBzaG91bGRTbW9vdGhGb250cyh0cnVlKQotICAgICwg
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHRydWUpCi0gICAgLCBzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyhmYWxzZSkKLSAgICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQorR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZUZsYWdzJiBjaGFuZ2VGbGFncywgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQorICAgIDogbV9zdGF0ZShpbml0aWFsQ2xpcCwg
Y2hhbmdlRmxhZ3MsIGluaXRpYWxDVE0pCisgICAgLCBtX2xhc3RBcHBsaWVkU3RhdGUoaW5pdGlh
bENsaXApCiB7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjp+R3JhcGhpY3NDb250ZXh0U3Rh
dGUoKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRl
eHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJikgPSBk
ZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVy
YXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0Nv
bnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShHcmFwaGljc0NvbnRl
eHRTdGF0ZSYmKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdl
Q2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhp
Y3NDb250ZXh0KCkKIHsKLSAgICBhdXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFk
aWVudENoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UgfTsK
LSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoc3Ryb2tlRmxhZ3MpKSB7Ci0gICAgICAgIHN0cm9r
ZUNvbG9yID0gc3RhdGUuc3Ryb2tlQ29sb3I7Ci0gICAgICAgIHN0cm9rZUdyYWRpZW50ID0gc3Rh
dGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgICAgIHN0cm9rZVBhdHRlcm4gPSBzdGF0ZS5zdHJva2VQ
YXR0ZXJuOwotICAgIH0KLQotICAgIGF1dG8gZmlsbEZsYWdzID0geyBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50
Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UgfTsKLSAgICBp
ZiAoZmxhZ3MuY29udGFpbnNBbnkoZmlsbEZsYWdzKSkgewotICAgICAgICBmaWxsQ29sb3IgPSBz
dGF0ZS5maWxsQ29sb3I7Ci0gICAgICAgIGZpbGxHcmFkaWVudCA9IHN0YXRlLmZpbGxHcmFkaWVu
dDsKLSAgICAgICAgZmlsbFBhdHRlcm4gPSBzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkp
IHsKLSAgICAgICAgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICBz
aGFkb3dCbHVyID0gc3RhdGUuc2hhZG93Qmx1cjsKLSAgICAgICAgc2hhZG93Q29sb3IgPSBzdGF0
ZS5zaGFkb3dDb2xvcjsKLSAgICAgICAgc2hhZG93UmFkaXVzTW9kZSA9IHN0YXRlLnNoYWRvd1Jh
ZGl1c01vZGU7Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBzdHJva2VUaGlja25lc3Mg
PSBzdGF0ZS5zdHJva2VUaGlja25lc3M7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIHRleHREcmF3
aW5nTW9kZSA9IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChmbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBzdHJv
a2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGZpbGxSdWxlID0g
c3RhdGUuZmlsbFJ1bGU7CisgICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NF
UlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgYWxwaGEgPSBz
dGF0ZS5hbHBoYTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKK3sKKyAgICBtX3N0YWNr
LmFwcGVuZChtX3N0YXRlKTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpIHsKLSAgICAgICAgY29tcG9zaXRlT3BlcmF0b3Ig
PSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgYmxlbmRNb2RlID0gc3RhdGUuYmxl
bmRNb2RlOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQoreworICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxk
QW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gc3RhdGUuc2hvdWxk
QW50aWFsaWFzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0g
c3RhdGUuc2hvdWxkU21vb3RoRm9udHM7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2sudGFrZUxhc3Qo
KTsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzID0gc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtc0NoYW5nZSkpCi0gICAgICAgIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc3RhdGUuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhl
IHN0YXRlIHN0YWNrIGJ1ZmZlciB3aGVuIGl0IGdvZXMgZW1wdHkuCisgICAgLy8gQ2FudmFzIGVs
ZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8g
aW5saW5lIGNhcGFjaXR5LgorICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9z
dGFjay5jbGVhcigpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIGRyYXdMdW1pbmFuY2VN
YXNrID0gc3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGlk
QXBwbHlTdGF0ZUNoYW5nZXMoKQoreworICAgIG1fc3RhdGUuZGlkQXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICBtX2xhc3RBcHBsaWVkU3RhdGUgPSBtX3N0YXRlOworfQogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlKSkKLSAgICAgICAgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHk7CitGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZh
Y3RvcigpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgp
OworICAgIHJldHVybiBGbG9hdFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNj
YWxlKCkpOworfQorICAgIAorRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JG
b3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCkgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7
CisgICAgYXV0byB0cmFuc2Zvcm1lZERlc3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJl
Y3QpOworICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6
ZSgpOworfQogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkK
LSAgICAgICAgdXNlRGFya0FwcGVhcmFuY2UgPSBzdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsKLSNl
bmRpZgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
Cit7CisgICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFu
Z2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CisgICAgQVNTRVJU
KG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXll
ckNvdW50OworfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlR3JhZGll
bnRDaGFuZ2UsIHN0cm9rZUdyYWRpZW50KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VQYXR0ZXJuQ2hhbmdlLCBzdHJva2VQYXR0ZXJuKTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShGaWxsR3JhZGllbnRDaGFuZ2UsIGZpbGxHcmFkaWVudCk7Ci0gICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbFBhdHRlcm5DaGFuZ2UsIGZpbGxQYXR0ZXJuKTsK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAg
ICBtX3N0YXRlLmNsaXAocmVjdCk7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKQotICAgICAgICAmJiAobV9zdGF0
ZS5zaGFkb3dPZmZzZXQgIT0gc3RhdGUuc2hhZG93T2Zmc2V0Ci0gICAgICAgICAgICB8fCBtX3N0
YXRlLnNoYWRvd0JsdXIgIT0gc3RhdGUuc2hhZG93Qmx1cgotICAgICAgICAgICAgfHwgbV9zdGF0
ZS5zaGFkb3dDb2xvciAhPSBzdGF0ZS5zaGFkb3dDb2xvcikpCi0gICAgICAgIGNoYW5nZUZsYWdz
LmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSkKK3sKKyAgICBtX3N0
YXRlLmNsaXAocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpOworfQogCi0gICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwot
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4
dERyYXdpbmdNb2RlKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xv
ckNoYW5nZSwgc3Ryb2tlQ29sb3IpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZp
bGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5H
RURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBQYXRo
IHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwUGF0aChwYXRo
KTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkJsZW5kTW9kZUNoYW5nZSB9KQotICAgICAgICAmJiAobV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRv
ciAhPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciB8fCBtX3N0YXRlLmJsZW5kTW9kZSAhPSBzdGF0
ZS5ibGVuZE1vZGUpKSB7Ci0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKTsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRk
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpOwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQor
eworICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgeworICAgICAgICBjbGlwT3V0KHJlY3QucmVj
dCgpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BS
T1BFUlRZKFNob3VsZEFudGlhbGlhc0NoYW5nZSwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaG91bGRTbW9vdGhGb250c0NoYW5nZSwgc2hvdWxkU21v
b3RoRm9udHMpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250c0NoYW5nZSwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLSAgICBD
SEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwg
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZ
KERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlLCBkcmF3THVtaW5hbmNlTWFzayk7Ci0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSwgaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdl
LCB1c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBjaGFuZ2VGbGFnczsK
KyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlw
T3V0KHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVs
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3Mp
OwotCi0gICAgYXV0byBzdHJva2VGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZs
YWdzLmNvbnRhaW5zQW55KHN0cm9rZUZsYWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1v
dmUoc3Ryb2tlRmxhZ3MpOwotCi0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAg
IGlmIChmbGFncy5jb250YWluc0FueShmaWxsRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdz
LnJlbW92ZShmaWxsRmxhZ3MpOwotCi0gICAgYXV0byBjb21wb3NpdGVPcGVyYXRvckZsYWdzID0g
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
QW55KGNvbXBvc2l0ZU9wZXJhdG9yRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92
ZShjb21wb3NpdGVPcGVyYXRvckZsYWdzKTsKLQotICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGZsYWdz
KTsKKyAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3JhZGllbnQsIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpCi0gICAg
ICAgIGNvbnRleHQuc2V0U3Ryb2tlUGF0dGVybigqbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKTsKLQot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
R3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqbV9zdGF0
ZS5maWxsR3JhZGllbnQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQ
YXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqbV9zdGF0ZS5m
aWxsUGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBjb250
ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUu
c2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1f
c3RhdGUuc2hhZG93UmFkaXVzTW9kZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHRE
cmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKG1f
c3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IobV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IobV9zdGF0ZS5maWxsQ29sb3IpOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0
eWxlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9r
ZVN0eWxlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbFJ1bGUobV9z
dGF0ZS5maWxsUnVsZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEFscGhhKG1f
c3RhdGUuYWxwaGEpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnNBbnkoeyBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBtX3N0YXRlLmJsZW5kTW9kZSk7
Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxp
YXMobV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAg
ICAgICAgY29udGV4dC5zZXRTaG91bGRTbW9vdGhGb250cyhtX3N0YXRlLnNob3VsZFNtb290aEZv
bnRzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0
LnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dERyYXdMdW1pbmFuY2VNYXNrKG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkobV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKLQotI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAg
Y29udGV4dC5zZXRVc2VEYXJrQXBwZWFyYW5jZShtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlKTsK
LSNlbmRpZgorICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3Np
dGVPcGVyYXRpb24oKTsKKyAgICBzZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsK
KyAgICBmaWxsUmVjdChyZWN0LCBjb2xvcik7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBy
ZXZpb3VzT3BlcmF0b3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgiY2hhbmdlLWZsYWdzIiwgbV9jaGFuZ2VGbGFncy50b1JhdygpKTsKLQotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VH
cmFkaWVudENoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWdyYWRpZW50
IiwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBtX3N0YXRlLnN0cm9rZVBh
dHRlcm4uZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZmlsbC1ncmFkaWVudCIsIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVy
bkNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1wYXR0ZXJuIiwgbV9zdGF0
ZS5maWxsUGF0dGVybi5nZXQoKSk7CisgICAgZ3JhZGllbnQuZmlsbCgqdGhpcywgcmVjdCk7Cit9
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKSkgewotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwg
bV9zdGF0ZS5zaGFkb3dCbHVyKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zm
c2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvdy1jb2xvciIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoInNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUg
PT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkg
eworICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdGlv
bigpLCBibGVuZE1vZGUpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgICAgICAKKyAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
CisgICAgc2V0Q29tcG9zaXRlTW9kZSh7IHByZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSB9KTsK
KyAgICBmaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihwcmV2aW91c09wZXJhdG9yKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS10aGlja25lc3MiLCBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ0
ZXh0LWRyYXdpbmctbW9kZSIsIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlLnRvUmF3KCkpOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtY29sb3IiLCBt
X3N0YXRlLnN0cm9rZUNvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoImZpbGwtY29sb3IiLCBtX3N0YXRlLmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2Up
KQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tl
U3R5bGUpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRk
UmVjdChyZWN0KTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmls
bC1ydWxlIiwgbV9zdGF0ZS5maWxsUnVsZSk7CisgICAgaWYgKCFyb3VuZGVkSG9sZVJlY3QucmFk
aWkoKS5pc1plcm8oKSkKKyAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyb3VuZGVkSG9sZVJl
Y3QpOworICAgIGVsc2UKKyAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5kZWRIb2xlUmVjdC5yZWN0
KCkpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSIsIG1fc3Rh
dGUuYWxwaGEpOworICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxlID0gZmlsbFJ1bGUoKTsKKyAgICBD
b2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShX
aW5kUnVsZTo6RXZlbk9kZCk7CisgICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAotICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRv
ciIsIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpOworICAgIGZpbGxQYXRoKHBhdGgpOworICAg
IAorICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmls
bENvbG9yKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJs
ZW5kLW1vZGUiLCBtX3N0YXRlLmJsZW5kTW9kZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQoreworICAgIFBhdGggcGF0
aDsKKyAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cit9
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQt
YW50aWFsaWFzIiwgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQoreworICAg
IFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7CisgICAgc3Ryb2tlUGF0
aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic2hvdWxkLXNtb290aC1mb250cyIsIG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
KQoreworICAgIGF1dG8gb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CisgICAgYXV0byBvbGRT
dHJva2VDb2xvciA9IHN0cm9rZUNvbG9yKCk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtc3VicGl4ZWwtcXVhbnRpemUt
Zm9udHMiLCBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgc2V0Rmls
bENvbG9yKHNoYWRvd0NvbG9yKTsKKyAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7Cisg
ICAgZHJhd0VsbGlwc2UoRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSkpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIiwgbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisgICAgc2V0RmlsbENvbG9yKGVsbGlwc2VDb2xv
cik7CisgICAgc2V0U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBkcmF3RWxsaXBzZShy
ZWN0KTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
ZHJhdy1sdW1pbmFuY2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOworICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9yKG9sZFN0cm9rZUNv
bG9yKTsKK30KIAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNl
Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ1c2UtZGFyay1hcHBlYXJhbmNlIiwg
bV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGZpbGxQYXRoKHBhdGgpOworICAg
IHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBj
b25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIHN0YXRlQ2hhbmdlLmR1bXAodHMpOwotICAg
IHJldHVybiB0czsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5h
dGlvbiwgaW1hZ2UubG9naWNhbFNpemUoKSksIEZsb2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxT
aXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdy
YXBoaWNzQ29udGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIEFTU0VSVCht
X3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQp
OworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0s
IGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7CisgICAgSW50ZXJwb2xhdGlvblF1
YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBv
cHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGltYWdlLmRyYXcoKnRoaXMsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cmVzdG9yZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0g
ICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRVJST1Igdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOworICAgIGlmICgh
aW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlID0gbV9zdGFjay5s
YXN0KCk7Ci0gICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgd2Ug
ZGVhbGxvY2F0ZSB0aGUgc3RhdGUgc3RhY2sgYnVmZmVyIHdoZW4gaXQgZ29lcyBlbXB0eS4KLSAg
ICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkgYWdhaW4sIGJ1dCB0
aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHkuCi0gICAgaWYgKG1fc3RhY2suaXNFbXB0eSgp
KQotICAgICAgICBtX3N0YWNrLmNsZWFyKCk7CisgICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0g
aW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1v
dmUoaW1hZ2UpLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlTG9naWNhbFNpemUpLCBGbG9h
dFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFn
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3Rh
dGUubWVyZ2VDaGFuZ2VzKHN0YXRlLCBmbGFncyk7Ci0gICAgZGlkVXBkYXRlU3RhdGUoc3RhdGUs
IGZsYWdzKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBpbWFn
ZUxvZ2ljYWxTaXplID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgZHJhd0NvbnN1bWluZ0lt
YWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1h
Z2VMb2dpY2FsU2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc2F2ZSgp
OwotCi0gICAgc2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IpOwotICAgIHNldEZpbGxDb2xvcihz
aGFkb3dDb2xvcik7Ci0KLSAgICBkcmF3RWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCksIHJlY3Qu
eSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0KLSAgICBzZXRTdHJva2VD
b2xvcihlbGxpcHNlQ29sb3IpOwotICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IpOwotCi0g
ICAgZHJhd0VsbGlwc2UocmVjdCk7ICAKLQotICAgIHJlc3RvcmUoKTsKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGlu
dGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRp
b25RdWFsaXR5KCkpOworICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1h
Z2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIs
IEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNv
bG9yOwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUu
c3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKKyAgICBhdXRvIHJlc3VsdCA9
IGZpbHRlci5hcHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCByZXN1bHRzKTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSByZXN1bHQtPmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgo
KSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOworICAgIGRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7CisgICAgc2Nh
bGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYg
Y29sb3IsIFNoYWRvd1JhZGl1c01vZGUgcmFkaXVzTW9kZSkKK0ltYWdlRHJhd1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCiB7Ci0gICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdGF0ZS5z
aGFkb3dCbHVyID0gYmx1cjsKLSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsKLSAgICBkaWRVcGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKKyAgICByZXR1
cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSks
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKK0ltYWdlRHJh
d1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBh
aW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgp
OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IDA7Ci0gICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9
IENvbG9yKCk7Ci0gICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9k
ZTo6RGVmYXVsdDsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93Q2hhbmdlKTsKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCks
IGltYWdlLnNpemUoaW1hZ2VQYWludGluZ09wdGlvbnMub3JpZW50YXRpb24oKSkpOworICAgIHJl
dHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzcmNSZWN0LCBpbWFnZVBhaW50aW5n
T3B0aW9ucyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXpl
JiBvZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CitJbWFnZURyYXdSZXN1
bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQ7Ci0gICAgYmx1ciA9IG1fc3RhdGUuc2hhZG93Qmx1cjsKLSAgICBjb2xvciA9IG1fc3RhdGUu
c2hhZG93Q29sb3I7Ci0KLSAgICByZXR1cm4gaGFzU2hhZG93KCk7CisgICAgSW50ZXJwb2xhdGlv
blF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlz
LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5kcmF3
KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCitJbWFnZURyYXdSZXN1
bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxv
YXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9y
OwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLmZpbGxQ
YXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMu
aW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhp
cywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBw
YXR0ZXJuKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsCisgICAgSW1hZ2U6
OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07Ci0g
ICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQ
YXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSk7CisgICAgaWYgKGhSdWxl
ID09IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsK
KyAgICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgorICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGlt
YWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKKyAgICB9CisKKyAgICBJbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUo
KnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdl
LmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBo
UnVsZSwgdlJ1bGUsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fc3RhdGUuZmls
bENvbG9yID0geyB9OwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBt
X3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBkaWRVcGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpOworICAg
IHN5c3RlbUltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtID0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSk7CisgICAgaW1h
Z2UuZHJhd1BhdHRlcm4oKnRoaXMsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKKyNpZiBFTkFCTEUoVklERU8pCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29s
b3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsK
LSAgICBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm07Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENo
YW5nZSk7Ci0gICAgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHBsYXllci5wbGF5
ZXJQcml2YXRlKCktPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlv
bik7CiB9CisjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewotICAgICsrbV90
cmFuc3BhcmVuY3lMYXllckNvdW50OworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlz
LCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewotICAgIEFTU0VS
VChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsKLSAgICAtLW1fdHJhbnNwYXJlbmN5TGF5
ZXJDb3VudDsKKyAgICBkcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IHRvKQpAQCAtNTExLDExICszNDYsNiBAQCBGbG9hdFNpemUgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LAogICAgIHJldHVybiBmb250LmRyYXdUZXh0KCp0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCi17Ci0gICAgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9p
bnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdF
bXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25l
ZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKICAgICBmb250LmRyYXdFbXBo
YXNpc01hcmtzKCp0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CkBAIC01NDksNyAr
Mzc5LDQ1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgYmlkaVJ1biA9IGJpZGlS
dW4tPm5leHQoKTsKICAgICB9CiAKLSAgICBiaWRpUnVucy5jbGVhcigpOworICAgIGJpZGlSdW5z
LmNsZWFyKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMs
IFN0cm9rZVN0eWxlIHN0eWxlKQoreworICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlv
bigpLCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRp
bmcsIGRvdWJsZVVuZGVybGluZXMsIHN0eWxlKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29u
dGV4dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBib29sIHByaW50aW5nKQoreworICAgIENvbG9yIGR1bW15Q29sb3I7CisgICAgcmV0dXJuIGNv
bXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQocmVjdCwgcHJpbnRpbmcs
IGR1bW15Q29sb3IpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGlu
ZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Ym9vbCBwcmludGluZywgQ29sb3ImIGNvbG9yKQoreworICAgIEZsb2F0UG9pbnQgb3JpZ2luID0g
cmVjdC5sb2NhdGlvbigpOworICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHJlY3QuaGVp
Z2h0KCksIDAuNWYpOworICAgIGlmIChwcmludGluZykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOworCisgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIC8vIEp1c3QgY29tcHV0ZSBz
Y2FsZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcgeCBhbmQgeSBzY2FsZXMgYXJlIGVxdWFsLgor
ICAgIGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLmIoKSA/IHN0ZDo6aHlwb3QodHJhbnNmb3JtLmEo
KSwgdHJhbnNmb3JtLmIoKSkgOiB0cmFuc2Zvcm0uYSgpOworICAgIGlmIChzY2FsZSA8IDEuMCkg
eworICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRyYXdzIGEgbGluZSB0aGF0IGlzIGF0IGxl
YXN0IG9uZS1waXhlbCBsaW5lIGhpZ2gsCisgICAgICAgIC8vIHdoaWNoIHRlbmRzIHRvIHZpc3Vh
bGx5IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxlcy4gVG8gY291bnRlciB0aGlzCisgICAg
ICAgIC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGllZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9y
IHdoZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMuCisgICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPSAwLjRmOworICAgICAgICBmbG9hdCBzaGFkZSA9IHNj
YWxlID4gbWluaW11bVVuZGVybGluZUFscGhhID8gc2NhbGUgOiBtaW5pbXVtVW5kZXJsaW5lQWxw
aGE7CisgICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hh
ZGUpOworICAgIH0KKworICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFw
UG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICAvLyBWaXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2Nj
dXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRl
Y29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRlcmxpbmUgZGVjb3Jh
dGlvbi4KKyAgICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRmKGRl
dmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOworICAgIGlmIChhdXRvIGlu
dmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQorICAgICAgICBvcmlnaW4gPSBpbnZlcnNlLnZh
bHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdp
biwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9CiAKIHN0YXRpYyBJbnRT
aXplIHNjYWxlZEltYWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEZs
b2F0U2l6ZSYgc2NhbGUpCkBAIC02MzksMTg3ICs1MDcsOSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYgcgogICAgIHJldHVybiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBzY2FsZUZhY3Rv
cigpLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlKCksIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3Rl
bUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKLXsKLSAgICBzeXN0ZW1J
bWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi1JbWFnZURyYXdSZXN1bHQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQotewotICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5h
dGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgp
KSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17
Ci0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKGltYWdlUGFp
bnRpbmdPcHRpb25zLm9yaWVudGF0aW9uKCkpKTsKLSAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdl
LCBkZXN0aW5hdGlvbiwgc3JjUmVjdCwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1JbWFn
ZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxp
dHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRp
b25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwotICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotSW1hZ2VE
cmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsCi0gICAgSW1hZ2U6OlRpbGVSdWxlIGhSdWxl
LCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUgJiYgdlJ1bGUgPT0g
SW1hZ2U6OlN0cmV0Y2hUaWxlKSB7Ci0gICAgICAgIC8vIEp1c3QgZG8gYSBzY2FsZS4KLSAgICAg
ICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7
Ci0gICAgfQotCi0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRp
b25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5
KCkpOwotICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJh
dG9yKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBkcmF3SW1hZ2VC
dWZmZXIoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2UubG9naWNhbFNpemUoKSks
IEZsb2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9u
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgZHJhd0ltYWdlQnVmZmVy
KGltYWdlLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSks
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xh
dGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxp
dHkoKSk7Ci0gICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9u
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIo
UmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAg
ICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpbWFnZUxvZ2ljYWxTaXpl
ID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCk7Ci0gICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdU
Rk1vdmUoaW1hZ2UpLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlTG9naWNhbFNpemUpLCBG
bG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0gaW1h
Z2UtPmxvZ2ljYWxTaXplKCk7Ci0gICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1vdmUo
aW1hZ2UpLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2FsU2l6ZSksIGlt
YWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25z
dW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0
eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAg
ICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJl
c3VsdHMpCi17Ci0gICAgYXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIHNv
dXJjZUltYWdlUmVjdCwgcmVzdWx0cyk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBhdXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZlcigpOwot
ICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjYWxlKHsgMSAv
IGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5o
ZWlnaHQoKSB9KTsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1bHQtPmFi
c29sdXRlSW1hZ2VSZWN0KCkpOwotICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZS5kcmF3UGF0dGVybigqdGhpcywgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChy
ZWN0KTsKLSAgICBjbGlwUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQotewotICAgIGlm
ICghcmVjdC5pc1JvdW5kZWQoKSkgewotICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJvdW5k
ZWRSZWN0KHJlY3QpOwotICAgIGNsaXBPdXQocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIGltYWdlQnVmZmVyLmNsaXBUb01hc2so
KnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gSW50UmVjdCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgZ3JhZGllbnQuZmls
bCgqdGhpcywgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwotICAgIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihvcCwgYmxlbmRNb2RlKTsKLSAgICBmaWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAgc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAocmVjdC5p
c1JvdW5kZWQoKSkgewotICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIGZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwg
Y29sb3IpOwotICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9u
KCkpOwotICAgIH0gZWxzZQotICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNv
bXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsK
LSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotCi0gICAgaWYgKCFyb3Vu
ZGVkSG9sZVJlY3QucmFkaWkoKS5pc1plcm8oKSkKLSAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVj
dChyb3VuZGVkSG9sZVJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5k
ZWRIb2xlUmVjdC5yZWN0KCkpOwogCi0gICAgV2luZFJ1bGUgb2xkRmlsbFJ1bGUgPSBmaWxsUnVs
ZSgpOwotICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwotICAgIAotICAgIHNl
dEZpbGxSdWxlKFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICBzZXRGaWxsQ29sb3IoY29sb3IpOwog
Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUp
OwotICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwotfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
ZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBtX3N0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uOwotICAgIG1fc3RhdGUuYmxlbmRNb2RlID0gYmxl
bmRNb2RlOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwotfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBw
MiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQogewpAQCAtODUwLDc3
ICs1NDAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFy
aWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAotRmxvYXRTaXpl
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKHRyYW5zZm9ybS54U2NhbGUoKSwg
dHJhbnNmb3JtLnlTY2FsZSgpKTsKLX0KLSAgICAKLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6
OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUp
OwotICAgIGF1dG8gdHJhbnNmb3JtZWREZXN0UmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KGRlc3RS
ZWN0KTsKLSAgICByZXR1cm4gdHJhbnNmb3JtZWREZXN0UmVjdC5zaXplKCkgLyBzcmNSZWN0LnNp
emUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2Up
OwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
RWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBwYXRo
OwotICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHls
ZSBzdHlsZSkKLXsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5o
ZWlnaHQoKSwgRGFzaEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVV
bmRlcmxpbmVzLCBzdHlsZSk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1
dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmlu
dGluZykKLXsKLSAgICBDb2xvciBkdW1teUNvbG9yOwotICAgIHJldHVybiBjb21wdXRlTGluZUJv
dW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KHJlY3QsIHByaW50aW5nLCBkdW1teUNvbG9y
KTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRB
bnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRp
bmcsIENvbG9yJiBjb2xvcikKLXsKLSAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRp
b24oKTsKLSAgICBmbG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVm
KTsKLSAgICBpZiAocHJpbnRpbmcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBG
bG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKLQotICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURl
dmljZVNjYWxlKTsKLSAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFz
c3VtaW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KLSAgICBmbG9hdCBzY2FsZSA9IHRyYW5z
Zm9ybS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJh
bnNmb3JtLmEoKTsKLSAgICBpZiAoc2NhbGUgPCAxLjApIHsKLSAgICAgICAgLy8gVGhpcyBjb2Rl
IGFsd2F5cyBkcmF3cyBhIGxpbmUgdGhhdCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdo
LAotICAgICAgICAvLyB3aGljaCB0ZW5kcyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBz
bWFsbCBzY2FsZXMuIFRvIGNvdW50ZXIgdGhpcwotICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhh
IGlzIGFwcGxpZWQgdG8gdGhlIHVuZGVybGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwg
c2NhbGVzLgotICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhh
ID0gMC40ZjsKLSAgICAgICAgZmxvYXQgc2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVB
bHBoYSA/IHNjYWxlIDogbWluaW11bVVuZGVybGluZUFscGhhOwotICAgICAgICBjb2xvciA9IGNv
bG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KHNoYWRlKTsKLSAgICB9Ci0KLSAgICBGbG9h
dFBvaW50IGRldmljZVBvaW50ID0gdHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7
Ci0gICAgLy8gVmlzdWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFs
IHJvdW5kZi9jZWlsZi4gdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBv
dmVyZmxvdyB2YWx1ZSBmb3IgdW5kZXJsaW5lIGRlY29yYXRpb24uCi0gICAgRmxvYXRQb2ludCBk
ZXZpY2VPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihk
ZXZpY2VQb2ludC55KCkpKTsKLSAgICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVy
c2UoKSkKLSAgICAgICAgb3JpZ2luID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9y
aWdpbik7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRo
KCksIHRoaWNrbmVzcykpOwotfQotCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVD
b3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAg
IGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtOTcyLDE1ICs1OTEsNCBA
QCBWZWN0b3I8RmxvYXRQb2ludD4gR3JhcGhpY3NDb250ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0T2Zm
Q29ybmVycyhib29sIGlzVmVydGljYWxMaQogICAgIHJldHVybiB7IHBvaW50MSwgcG9pbnQyIH07
CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24pCi17Ci0gICAgcGxheWVyLnBsYXllclByaXZhdGUoKS0+cGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKLX0KLSNlbmRpZgotCi12b2lkIE51bGxHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpCi17Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZmI5NWRkMjViMjcxZGViOWZhODVmZjJkOWYxZjc0
NzE2YTA2NmJhZS4uN2YwMzg4OTIwNjExMmEwYmMxYTVhZTVhYzlmYmVhMDM3M2NlMjU3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkg
VG9yY2ggTW9iaWxlLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCw0OSArMzAsMTggQEAK
ICNpbmNsdWRlICJEZXN0aW5hdGlvbkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAj
aW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRp
b25zLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUu
aCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKLSNpZiBVU0UoQ0cpCi10eXBlZGVmIHN0
cnVjdCBDR0NvbnRleHQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZWxpZiBVU0UoQ0FJUk8p
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsKLX0KLXR5
cGVkZWYgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8gUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQ7Ci0jZWxzZQotdHlwZWRlZiB2b2lkIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiRElCUGl4ZWxEYXRhLmgiCi10eXBlZGVm
IHN0cnVjdCBIRENfXyogSERDOwotI2lmICFVU0UoQ0cpCi0vLyBVSW50OCBpcyBkZWZpbmVkIGlu
IENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUludDg7Ci0j
ZW5kaWYKLSNlbmRpZgotCi0vLyBYMTEgaGVhZGVycyBkZWZpbmUgYSBidW5jaCBvZiBtYWNyb3Mg
d2l0aCBjb21tb24gdGVybXMsIGludGVyZmVyaW5nIHdpdGggV2ViQ29yZSBhbmQgV1RGIGVudW0g
dmFsdWVzLgotLy8gQXMgYSB3b3JrYXJvdW5kLCB3ZSBleHBsaWNpdGx5IHVuZGVmIHRoZW0gaGVy
ZS4KLSNpZiBkZWZpbmVkKE5vbmUpCi0jdW5kZWYgTm9uZQotI2VuZGlmCi0jaWYgZGVmaW5lZChC
ZWxvdykKLSN1bmRlZiBCZWxvdwotI2VuZGlmCi0jaWYgZGVmaW5lZChTdWNjZXNzKQotI3VuZGVm
IFN1Y2Nlc3MKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRy
YW5zZm9ybTsKQEAgLTgyLDcgKzUxLDYgQEAgY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNz
IEdyYWRpZW50OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogY2xhc3Mg
SW1hZ2VCdWZmZXI7Ci1jbGFzcyBJbnRSZWN0OwogY2xhc3MgTWVkaWFQbGF5ZXI7CiBjbGFzcyBS
b3VuZGVkUmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMOwpAQCAtOTEsMTc0ICs1OSwxMiBA
QCBjbGFzcyBTeXN0ZW1JbWFnZTsKIGNsYXNzIFRleHRSdW47CiBjbGFzcyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKIAotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIFJlY29yZGVyOwotfQot
Ci1lbnVtIGNsYXNzIFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgewotICAgIEZpbGwgPSAxIDw8
IDAsCi0gICAgU3Ryb2tlID0gMSA8PCAxLAotfTsKLXVzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdz
ID0gT3B0aW9uU2V0PFRleHREcmF3aW5nTW9kZT47Ci0KLS8vIExlZ2FjeSBzaGFkb3cgYmx1ciBy
YWRpdXMgaXMgdXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotLy8gSXQg
aGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi1lbnVtIGNsYXNzIFNoYWRv
d1JhZGl1c01vZGUgOiBib29sIHsKLSAgICBEZWZhdWx0LAotICAgIExlZ2FjeQotfTsKLQotZW51
bSBTdHJva2VTdHlsZSB7Ci0gICAgTm9TdHJva2UsCi0gICAgU29saWRTdHJva2UsCi0gICAgRG90
dGVkU3Ryb2tlLAotICAgIERhc2hlZFN0cm9rZSwKLSAgICBEb3VibGVTdHJva2UsCi0gICAgV2F2
eVN0cm9rZSwKLX07Ci0KLXN0cnVjdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSB7Ci0gICAgZW51
bSBjbGFzcyBNb2RlIDogdWludDhfdCB7Ci0gICAgICAgIFRleHRDaGVja2luZ0RpY3RhdGlvblBo
cmFzZVdpdGhBbHRlcm5hdGl2ZXMsCi0gICAgICAgIFNwZWxsaW5nLAotICAgICAgICBHcmFtbWFy
LAotICAgICAgICBBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAotICAgICAgICBEaWN0YXRpb25B
bHRlcm5hdGl2ZXMKLSAgICB9IG1vZGU7Ci0gICAgYm9vbCBzaG91bGRVc2VEYXJrQXBwZWFyYW5j
ZSB7IGZhbHNlIH07Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IGRlY29kZShEZWNvZGVyJik7Ci19Owot
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtb2RlOwot
ICAgIGVuY29kZXIgPDwgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1zdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3Rk
OjpvcHRpb25hbDxNb2RlPiBtb2RlOwotICAgIGRlY29kZXIgPj4gbW9kZTsKLSAgICBpZiAoIW1v
ZGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPGJv
b2w+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOwotICAgIGRlY29kZXIgPj4gc2hvdWxkVXNlRGFy
a0FwcGVhcmFuY2U7Ci0gICAgaWYgKCFzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqbW9kZSwgKnNob3VsZFVzZURh
cmtBcHBlYXJhbmNlIH19OwotfQotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U7
Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0
U3RhdGUoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhp
Y3NDb250ZXh0U3RhdGUmJik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKLQotICAg
IGVudW0gQ2hhbmdlIDogdWludDMyX3QgewotICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCi0gICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMSwKLSAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdl
ICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAotICAgICAgICBGaWxsUGF0dGVybkNoYW5n
ZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgICAgIFN0cm9rZVRoaWNrbmVz
c0NoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEgPDwgNCwKLSAgICAgICAgU3Ryb2tlQ29sb3JD
aGFuZ2UgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA1LAotICAgICAgICBTdHJva2VTdHls
ZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDYsCi0gICAgICAgIEZpbGxDb2xv
ckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNywKLSAgICAgICAgRmlsbFJ1
bGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA4LAotICAgICAgICBTaGFk
b3dDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDksCi0gICAgICAgIFNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlICAgICAgICAgICA9IDEgPDwgMTAsCi0gICAgICAg
IEFscGhhQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTEsCi0gICAg
ICAgIENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSAgICAgICAgICAgICAgICA9IDEgPDwgMTIsCi0g
ICAgICAgIEJsZW5kTW9kZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTMs
Ci0gICAgICAgIFRleHREcmF3aW5nTW9kZUNoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEgPDwg
MTQsCi0gICAgICAgIFNob3VsZEFudGlhbGlhc0NoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEg
PDwgMTUsCi0gICAgICAgIFNob3VsZFNtb290aEZvbnRzQ2hhbmdlICAgICAgICAgICAgICAgICA9
IDEgPDwgMTYsCi0gICAgICAgIFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSAgICAg
ICA9IDEgPDwgMTcsCi0gICAgICAgIERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlICAgICAgICAgICAg
ICAgICA9IDEgPDwgMTgsCi0gICAgICAgIEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2Ug
ICAgICAgICA9IDEgPDwgMTksCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICAg
ICAgVXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAyMCwKLSNl
bmRpZgotICAgIH07Ci0gICAgdXNpbmcgU3RhdGVDaGFuZ2VGbGFncyA9IE9wdGlvblNldDxDaGFu
Z2U+OwotCi0gICAgdm9pZCBtZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBSZWZQdHI8
R3JhZGllbnQ+IHN0cm9rZUdyYWRpZW50OwotICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0
ZXJuOwotICAgIAotICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50OwotICAgIFJlZlB0
cjxQYXR0ZXJuPiBmaWxsUGF0dGVybjsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0K
LSAgICBDb2xvciBzdHJva2VDb2xvciB7IENvbG9yOjpibGFjayB9OwotICAgIENvbG9yIGZpbGxD
b2xvciB7IENvbG9yOjpibGFjayB9OwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotCi0gICAgQWZm
aW5lVHJhbnNmb3JtIHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotCi0gICAgZmxvYXQgc3Ryb2tlVGhp
Y2tuZXNzIHsgMCB9OwotICAgIGZsb2F0IHNoYWRvd0JsdXIgeyAwIH07Ci0gICAgZmxvYXQgYWxw
aGEgeyAxIH07Ci0KLSAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSB7IFNvbGlkU3Ryb2tlIH07
Ci0gICAgV2luZFJ1bGUgZmlsbFJ1bGUgeyBXaW5kUnVsZTo6Tm9uWmVybyB9OwotCi0gICAgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdpbmdNb2RlOjpGaWxs
IH07Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlT3ZlciB9OwotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUgeyBCbGVuZE1v
ZGU6Ok5vcm1hbCB9OwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OwotICAgIFNoYWRvd1Jh
ZGl1c01vZGUgc2hhZG93UmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsK
LQotICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzIDogMTsKLSAgICBib29sIHNob3VsZFNtb290aEZv
bnRzIDogMTsKLSAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA6IDE7Ci0gICAg
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA6IDE7Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNl
TWFzayA6IDE7Ci0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBib29sIHVzZURh
cmtBcHBlYXJhbmNlIDogMTsKLSNlbmRpZgotfTsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlIHsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsK
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQot
ICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9jaGFuZ2VGbGFncyhmbGFncykK
LSAgICB7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgY2hhbmdlc0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0Owot
Ci0gICAgdm9pZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYp
IGNvbnN0OwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBtX2NoYW5nZUZsYWdzOwotfTsKLQotV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlJik7Ci0KIGNsYXNzIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NDb250ZXh0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6ICAgCisgICAgZnJpZW5kIGNsYXNzIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1bHQ7Citw
dWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXAsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2VGbGFncyYg
PSB7IH0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI3MCwy
NzAgKzc2LDI3MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGludmFsaWRhdGluZ0ltYWdl
c1dpdGhBc3luY0RlY29kZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
Ci0gICAgLy8gQ29udGV4dCBTdGF0ZQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICB2b2lkIHNl
dENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0g
dHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCi0gICAgdm9p
ZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzID0gdGhpY2tuZXNzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKTsgfQotICAgIGZsb2F0IHN0cm9rZVRoaWNr
bmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOyB9CisgICAgLy8g
Q29udGV4dCBTdGF0ZQogCi0gICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHls
ZSkgeyBtX3N0YXRlLnN0cm9rZVN0eWxlID0gc3R5bGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7IH0KLSAgICBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlU3R5bGU7IH0K
KyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlOyB9CisgICAgdm9pZCBtZXJnZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3RoZXIpIHsgbV9zdGF0ZS5tZXJnZUNoYW5nZXMob3RoZXIpOyB9CisgICAgdm9p
ZCBtZXJnZVN0YXRlRGlmZnMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1f
c3RhdGUubWVyZ2VEaWZmcyhvdGhlcik7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUNvbG9yOyB9CisgICAgQWZmaW5lVHJhbnNm
b3JtIGdldENUTSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZ2V0Q1RNKCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKSB7IG1fc3RhdGUuc2V0
Q1RNKGN0bSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgY3RtKSB7IHNldENUTShnZXRDVE0oKSAqIGN0bSk7IH0KKyAgICB2
b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSB7IHNldENUTShnZXRDVE0oKS50cmFuc2xh
dGUoeCwgeSkpOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7
IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CisgICAgdm9pZCB0cmFu
c2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54KCksIHAueSgpKTsgfQor
ICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KSB7IHNldENUTShnZXRDVE0oKS5zY2Fs
ZShzeCwgc3kpKTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZShzLCBzKTsgfQor
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHNjYWxlKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFu
cykgeyBzZXRDVE0oZ2V0Q1RNKCkucm90YXRlKHJhZDJkZWcoYW5nbGVJblJhZGlhbnMpKSk7IH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4m
Jik7Ci0gICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
c3Ryb2tlUGF0dGVybi5nZXQoKTsgfQorICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmZpbGxCcnVzaCgpLmNvbG9yKCk7IH0KKyAgICBHcmFkaWVudCog
ZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5ncmFkaWVu
dCgpOyB9CisgICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmZpbGxCcnVzaCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmls
bFNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5zcGFj
ZVRyYW5zZm9ybSgpOyB9CisgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KSB7IG1fc3RhdGUuc2V0RmlsbENvbG9yKGNvbG9yLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9Cisg
ICAgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0RmlsbEdy
YWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IH0KKyAgICB2b2lkIHNl
dEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRGaWxsUGF0dGVybihXVEZNb3Zl
KHBhdHRlcm4pLCBzcGFjZVRyYW5zZm9ybSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
ID0geyB9KTsKLSAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpOyB9CisgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlKCk7IH0KKyAgICB2b2lkIHNldEZpbGxSdWxl
KFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuc2V0RmlsbFJ1bGUoZmlsbFJ1bGUsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1
bGUpIHsgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpOyB9Ci0gICAgV2luZFJ1bGUg
ZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOyB9CisgICAgY29uc3Qg
Q29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgp
LmNvbG9yKCk7IH0KKyAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnN0cm9rZUJydXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIHN0cm9r
ZVBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkucGF0dGVybigp
OyB9CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VTcGFjZVRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpOyB9Cisg
ICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9zdGF0ZS5zZXRT
dHJva2VDb2xvcihjb2xvciwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0U3Ry
b2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRTdHJva2VHcmFk
aWVudChXVEZNb3ZlKGdyYWRpZW50KSwgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7IH0KKyAgICB2
b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRTdHJv
a2VQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHBhdHRlcm5TcGFjZVRyYW5zZm9ybSk7IH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9y
OyB9CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHJva2VUaGlja25lc3MoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRo
aWNrbmVzcykgeyBtX3N0YXRlLnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MsIG1fbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbFBhdHRlcm4o
UmVmPFBhdHRlcm4+JiYpOwotICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKTsgfQorICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VTdHlsZSgpOyB9CisgICAgdm9pZCBz
ZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkgeyBtX3N0YXRlLnNldFN0cm9rZVN0eWxl
KHN0eWxlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
PSB7IH0pOwotICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmZpbGxHcmFkaWVudC5nZXQoKTsgfQorICAgIExpbmVDYXAgaW5lQ2FwKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5saW5lQ2FwKCk7IH0KKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKSB7IG1fc3RhdGUuc2V0TGluZUNhcChsaW5lQ2FwLCBtX2xhc3RBcHBsaWVkU3RhdGUp
OyB9CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM7IH0KKyAgICBjb25zdCBMaW5lRGFzaCBsaW5lRGFzaCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUubGluZURhc2goKTsgfQorICAgIHZvaWQgc2V0TGluZURhc2goTGluZURhc2gm
JiBsaW5lRGFzaCkgeyBtX3N0YXRlLnNldExpbmVEYXNoKFdURk1vdmUobGluZURhc2gpLCBtX2xh
c3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sIHNo
b3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlh
czsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFu
dGlhbGlhc0NoYW5nZSk7IH0KLSAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzOyB9CisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVKb2luKCk7IH0KKyAgICB2b2lkIHNldExpbmVKb2lu
KExpbmVKb2luIGxpbmVKb2luKSB7IG1fc3RhdGUuc2V0TGluZUpvaW4obGluZUpvaW4sIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBz
aG91bGRTbW9vdGhGb250cykgeyBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0gc2hvdWxkU21v
b3RoRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSk7IH0KLSAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250czsgfQorICAgIGZsb2F0IG1p
dGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLm1pdGVyTGltaXQoKTsgfQorICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KSB7IG1fc3RhdGUuc2V0TWl0ZXJMaW1p
dChtaXRlckxpbWl0LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICAvLyBOb3JtYWxseSBD
RyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBw
ZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCi0gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBo
YXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUg
Z2x5cGhzLgotICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOyBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKTsgfQotICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IH0KKyAgICBDb21wb3Np
dGVNb2RlIGNvbXBvc2l0ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU1v
ZGUoKTsgfQorICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGNvbXBvc2l0ZU1vZGUoKS5vcGVyYXRpb247IH0KKyAgICBCbGVuZE1vZGUgYmxl
bmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9k
ZTsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1v
ZGUpIHsgbV9zdGF0ZS5zZXRDb21wb3NpdGVNb2RlKGNvbXBvc2l0ZU1vZGUsIG1fbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvciBvcGVyYXRpb24pIHsgc2V0Q29tcG9zaXRlTW9kZSh7IG9wZXJhdGlvbiwgQmxlbmRNb2Rl
OjpOb3JtYWwgfSk7IH0KIAotICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSA9IHF1YWxpdHk7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQotICAgIEludGVycG9s
YXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAgICBjb25zdCBEcm9wU2hhZG93
JiBkcm9wU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcm9wU2hhZG93KCk7IH0KKyAg
ICB2b2lkIHNldERyb3BTaGFkb3coY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdykgeyBtX3N0
YXRlLnNldERyb3BTaGFkb3coZHJvcFNoYWRvdywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAg
IHZvaWQgY2xlYXJTaGFkb3coKSB7IHNldERyb3BTaGFkb3coeyB9KTsgfQogCi0gICAgdm9pZCBz
ZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IGRpZFVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0KLSAgICBm
bG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KKyAgICBib29sIGhh
c1Zpc2libGVTaGFkb3coKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93KCkuaXNWaXNpYmxlKCk7
IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93
KCkuaXNCbHVycmVkKCk7IH0KKyAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRy
b3BTaGFkb3coKS5oYXNPdXRzZXRzKCk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1v
ZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsgfQotICAgIEJsZW5kTW9k
ZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsg
fQorICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYSgpOyB9Cisg
ICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLnNldEFscGhhKGFscGhhLCBt
X2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJv
b2wgZHJhd0x1bWluYW5jZU1hc2spIHsgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdM
dW1pbmFuY2VNYXNrOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpOyB9Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNlTWFz
aygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7IH0KKyAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCk7IH0KKyAgICB2b2lkIHNldElt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSkgeyBtX3N0YXRlLnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9p
ZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRl
LnRleHREcmF3aW5nTW9kZSA9IG1vZGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOyB9Ci0gICAgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJh
d2luZ01vZGU7IH0KKyAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSgpOyB9CisgICAgdm9pZCBzZXRU
ZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKSB7IG1f
c3RhdGUuc2V0VGV4dERyYXdpbmdNb2RlKHRleHREcmF3aW5nTW9kZSwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93
UmFkaXVzTW9kZTo6RGVmYXVsdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNs
ZWFyU2hhZG93KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXpl
JiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMoKTsgfQorICAgIHZvaWQgc2V0U2hv
dWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3RhdGUuc2V0U2hvdWxkQW50
aWFsaWFzKHNob3VsZEFudGlhbGlhcywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgYm9v
bCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dDb2xvci5p
c1Zpc2libGUoKTsgfQotICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlz
aWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7IH0KLSAgICBib29s
IGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYg
bV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMoKTsgfQorICAgIHZvaWQgc2V0U2hv
dWxkU21vb3RoRm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykgeyBtX3N0YXRlLnNldFNob3Vs
ZFNtb290aEZvbnRzKHNob3VsZFNtb290aEZvbnRzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAK
LSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHZvaWQgc2V0VXNlRGFya0FwcGVh
cmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNl
ID0gdXNlRGFya0FwcGVhcmFuY2U7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSk7IH0KLSAgICBib29sIHVzZURhcmtB
cHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQot
I2VuZGlmCisgICAgLy8gTm9ybWFsbHkgQ0cgZW5hYmxlcyBzdWJwaXhlbC1xdWFudGl6YXRpb24g
YmVjYXVzZSBpdCBpbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgYWxpZ25pbmcgZ2x5cGhzLgor
ICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgaGF2ZSB0byBkaXNhYmxlIHRvIHRvIGVuc3VyZSBhIGhp
Z2gtcXVhbGl0eSBvdXRwdXQgb2YgdGhlIGdseXBocy4KKyAgICBib29sIHNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKCk7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhi
b29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykgeyBtX3N0YXRlLnNldFNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyhzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsIG1fbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KIAotICAgIHZpcnR1YWwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIGJvb2wgc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCk7IH0KKyAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCB1
cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzaygpOyB9CisgICAgdm9pZCBzZXRE
cmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuc2V0RHJh
d0x1bWluYW5jZU1hc2soZHJhd0x1bWluYW5jZU1hc2ssIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
IAotICAgIC8vIENhbGxlZCAqYWZ0ZXIqIGFueSBjaGFuZ2UgdG8gR3JhcGhpY3NDb250ZXh0U3Rh
dGU7IGdlbmVyYWxseSB1c2VkIHRvIHByb3BhZ2F0ZSBjaGFuZ2VzCi0gICAgLy8gdG8gdGhlIHBs
YXRmb3JtIGNvbnRleHQncyBzdGF0ZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlU3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncykgPSAwOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgYm9v
bCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVh
cmFuY2UoKTsgfQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkgeyBtX3N0YXRlLnNldFVzZURhcmtBcHBlYXJhbmNlKHVzZURhcmtBcHBlYXJhbmNl
LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CisjZW5kaWYKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlc3Rv
cmUoKTsKLSAgICAKKyAgICB2b2lkIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgdW5zaWdu
ZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorICAgIHZp
cnR1YWwgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpID0gMDsKICNpZiBVU0UoQ0cpCiAgICAgLy8g
RklYTUU6IFNob3VsZCB0aGVzZSByZWFsbHkgYmUgcHVibGljIEdyYXBoaWNzQ29udGV4dCBtZXRo
b2RzPwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5
U3Ryb2tlUGF0dGVybigpID0gMDsKKyNlbmRpZgogCi0gICAgLy8gRklYTUU6IENhbiB3ZSBtYWtl
IHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdoYXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jv
c3MtcGxhdGZvcm0/Ci0gICAgdmlydHVhbCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKIAotICAgIC8vIEZJ
WE1FOiBDYW4gdGhpcyBiZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9yIHBhcmFtZXRl
cj8gT3IganVzdCBiZSByZWFkIG9mZiB0aGUgY29udGV4dD8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgPSAwOwotI2VuZGlmCisgICAgLy8gVGhpcyBmdW5j
dGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250ZXh0LCBtYWtp
bmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgorICAgIC8vIGFjdGluZyBhcyBhIGJhc2UtbGV2ZWwg
Y29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsgfQogCi0gICAg
dmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CisgICAgLy8gVHJhbnNwYXJlbmN5IExheWVycwog
Ci0gICAgLy8gUGl4ZWwgU25hcHBpbmcKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGlzSW5UcmFu
c3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJuIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJz
KCkgJiYgbV90cmFuc3BhcmVuY3lMYXllckNvdW50OyB9CiAKLSAgICBlbnVtIFJvdW5kaW5nTW9k
ZSB7Ci0gICAgICAgIFJvdW5kQWxsU2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5z
aW9ucwotICAgIH07Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZs
b2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0
eWxlKTsKKyAgICAvLyBDbGlwcGluZwogCi0gICAgLy8gU2hhcGVzCisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxl
OjpFdmVuT2RkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0Jik7CiAKLSAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBk
byBib3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgotICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJh
d1JlY3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCi0gICAgLy8g
dXNpbmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRo
ZSBjb3JyZWN0Ci0gICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93
Q29sb3IpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKKworICAg
IEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9z
dGF0ZS5jbGlwQm91bmRzKCkpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7
CisgICAgLy8gU2hhcGVzCiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9r
ZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpID0gMDsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRl
ZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFs
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImLCBCbGVuZE1vZGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgPSAwOwotCi0gICAgdmlydHVh
bCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE1p
dGVyTGltaXQoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUGF0
aChjb25zdCBQYXRoJikgPSAwOwogCi0gICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1lZGlh
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSA9IDA7CiAKLSAgICBJbnRTaXplIGNvbXBhdGli
bGVJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlv
bmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmlu
Z01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxS
ZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRo
b2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmlu
Z01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBz
dGQ6Om51bGxvcHQpIGNvbnN0OworICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJv
dGggc3Ryb2tpbmcgYW5kIGZpbGxpbmcuCisgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVj
dCgpLCB3aGljaCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKKyAgICAvLyB1c2lu
ZyBhIDEtcGl4ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNv
cnJlY3QKKyAgICAvLyBzdHJva2UgY29sb3IpLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9w
dCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXpl
JiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
ID0gMSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0Nv
bG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpcnR1YWwgZHJhd1BhdGgoY29uc3QgUGF0
aCYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0
aW9uOjpGcm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdS
ZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1h
Z2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIC8vIEZvY3VzIFJpbmdzCiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJj
ZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsK
KyAgICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9u
PyBPciBlbHNld2hlcmU/CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRy
YXcsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVk
cmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyNlbmRpZgogCisgICAgLy8gSW1hZ2VzCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9h
dFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1h
Z2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMm
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBk
cmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
SW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdl
RHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGls
ZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVk
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxl
UnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsK
IAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQ
YXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogI2lmIEVOQUJMRShWSURFTykKICAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAjZW5kaWYKLQotICAgIC8vIENsaXBw
aW5nCi0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdp
bmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
OwotCisgICAgCiAgICAgLy8gVGV4dAogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBGbG9h
dFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3Qg
RmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0
byA9IHN0ZDo6bnVsbG9wdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdH
bHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
U21vb3RoaW5nTW9kZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWdu
ZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICB7Ci0gICAgICAg
IGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9u
dFNtb290aGluZ01vZGUpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBj
b21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50
aW5nKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9h
dFJlY3QmLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0
eWxlID0gU29saWRTdHJva2UpOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0g
U29saWRTdHJva2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwogCi0g
ICAgLy8gVHJhbnNwYXJlbmN5IExheWVycwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgYm9vbCBpc0lu
VHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiAobV90cmFuc3BhcmVuY3lMYXllckNv
dW50ID4gMCkgJiYgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKTsgfQorICAgIFdFQkNPUkVf
RVhQT1JUIEZsb2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9h
dFJlY3QmLCBib29sIHByaW50aW5nKTsKIAotICAgIC8vIEZvY3VzIFJpbmdzCisgICAgLy8gQ29t
cGF0aWJsZSBJbWFnZUJ1ZmZlcgogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgLy8gRklY
TUU6IENhbiB3ZSBoaWRlIHRoZXNlIGluIHRoZSBDRyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdo
ZXJlPwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBD
b2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3Qg
Q29sb3ImKSA9IDA7Ci0jZW5kaWYKKyAgICBJbnRTaXplIGNvbXBhdGlibGVJbWFnZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CiAKLSAgICAvLyBUcmFuc2Zvcm1zCisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpv
cHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAgIHZvaWQgc2NhbGUoZmxv
YXQgcykgeyBzY2FsZSh7IHMsIHMgfSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJh
ZGlhbnMpID0gMDsKLSAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsg
dHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KLSAgICB2b2lkIHRyYW5z
bGF0ZShjb25zdCBGbG9hdFBvaW50JiBwKSB7IHRyYW5zbGF0ZShwLngoKSwgcC55KCkpOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CisgICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
c3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNv
bmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVs
bG9wdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAgICBl
bnVtIEluY2x1ZGVEZXZpY2VTY2FsZSB7IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUsIFBv
c3NpYmx5SW5jbHVkZURldmljZVNjYWxlIH07Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBj
b25zdCA9IDA7CisgICAgLy8gUGl4ZWwgU25hcHBpbmcKIAotICAgIC8vIFRoaXMgZnVuY3Rpb24g
YXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFraW5nIHRo
ZSBjb250ZXh0IGNhcGFibGUgb2YKLSAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVsIGNvbnRl
eHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KLSAgICBXRUJDT1JF
X0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAgZW51bSBSb3VuZGluZ01v
ZGUgeworICAgICAgICBSb3VuZEFsbFNpZGVzLAorICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVu
c2lvbnMKKyAgICB9OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgPSAwOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhG
bG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VT
dHlsZSk7CiAKICAgICAvLyBMaW5rcwogCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRS
ZWN0JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBT
dHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIC8vIENvbnRl
bnRmdWwgUGFpbnQgRGV0ZWN0aW9uCisjaWYgVVNFKENHKQorICAgIC8vIEZJWE1FOiBDYW4gd2Ug
bWFrZSB0aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0
IGNyb3NzLXBsYXRmb3JtPworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJv
b2wpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1f
Y29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBjb250ZW5mdWxQYWlu
dERldGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZDsgfQor
ICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9y
IHBhcmFtZXRlcj8gT3IganVzdCBiZSByZWFkIG9mZiB0aGUgY29udGV4dD8KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgeyB9CisjZW5kaWYKIAogICAgIC8v
IEZJWE1FOiBOb3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQg
YmUgbW92ZWQgZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCkBAIC01NDYsMTAgKzM1Miw3IEBA
IHB1YmxpYzoKICAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFuZCBX
aW5kb3dzIENhaXJvIGJhY2tlbmRzLgogICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBudWxs
cHRyOyB9CiAjZW5kaWYKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNUcmFu
c3BhcmVuY3lMYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KKyAgICAKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZv
aWQgc3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTU2MSwxOTEgKzM2
NCwxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQ
YXR0ZXJuQW5kU3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0
aCkgY29uc3Q7CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3Ju
ZXJzKGJvb2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBv
aW50MSwgRmxvYXRQb2ludCBwb2ludDIpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGUgbV9zdGF0ZTsKLQogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNUcmFuc3Bh
cmVuY3lMYXllcnMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZSBtX3N0YXRlOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fbGFzdEFwcGxpZWRT
dGF0ZTsKICAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGUsIDE+IG1fc3RhY2s7CiAKICAg
ICB1bnNpZ25lZCBtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgeyAwIH07CiAgICAgYm9vbCBtX2Nv
bnRlbnRmdWxQYWludERldGVjdGVkIHsgZmFsc2UgfTsKIH07CiAKLWNsYXNzIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBi
b29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAg
ICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKLSAgICB7Ci0gICAgICAgIGlmICht
X3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgbV9jb250ZXh0LnNhdmUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIoKQotICAgIHsKLSAgICAgICAgaWYg
KG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVB
bmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0LnNhdmUoKTsKLSAgICAgICAgbV9zYXZlQW5k
UmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUo
KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiAmbV9jb250ZXh0OyB9Ci0K
LXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Ci0gICAgYm9vbCBtX3Nh
dmVBbmRSZXN0b3JlOwotfTsKLQotY2xhc3MgVHJhbnNwYXJlbmN5TGF5ZXJTY29wZSB7Ci1wdWJs
aWM6Ci0gICAgVHJhbnNwYXJlbmN5TGF5ZXJTY29wZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGZsb2F0IGFscGhhLCBib29sIGJlZ2luTGF5ZXIgPSB0cnVlKQotICAgICAgICA6IG1fY29udGV4
dChjb250ZXh0KQotICAgICAgICAsIG1fYWxwaGEoYWxwaGEpCi0gICAgICAgICwgbV9iZWdhbkxh
eWVyKGJlZ2luTGF5ZXIpCi0gICAgewotICAgICAgICBpZiAoYmVnaW5MYXllcikKLSAgICAgICAg
ICAgIG1fY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1fYWxwaGEpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGJlZ2luTGF5ZXIoZmxvYXQgYWxwaGEpCi0gICAgewotICAgICAgICBtX2Fs
cGhhID0gYWxwaGE7Ci0gICAgICAgIG1fY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1f
YWxwaGEpOwotICAgICAgICBtX2JlZ2FuTGF5ZXIgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICB+
VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSgpCi0gICAgewotICAgICAgICBpZiAobV9iZWdhbkxheWVy
KQotICAgICAgICAgICAgbV9jb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIGZsb2F0IG1f
YWxwaGE7Ci0gICAgYm9vbCBtX2JlZ2FuTGF5ZXI7Ci19OwotCi1jbGFzcyBHcmFwaGljc0NvbnRl
eHRTdGF0ZVN0YWNrQ2hlY2tlciB7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
dGFja0NoZWNrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICA6IG1fY29udGV4
dChjb250ZXh0KQotICAgICAgICAsIG1fc3RhY2tTaXplKGNvbnRleHQuc3RhY2tTaXplKCkpCi0g
ICAgeyB9Ci0gICAgCi0gICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9zdGFja1NpemUpCi0g
ICAgICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBzdGFjayBjaGFuZ2Vk
IGJ5ICVkIiwgJm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXplKCkgLSAoaW50KW1f
c3RhY2tTaXplKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2Nv
bnRleHQ7Ci0gICAgdW5zaWduZWQgbV9zdGFja1NpemU7Ci19OwotCi1jbGFzcyBJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IEludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKLSAgICAgICAgOiBt
X2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCi0gICAgICAgICwgbV9jdXJyZW50SW50
ZXJwb2xhdGlvblF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSkKLSAgICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZChpbnRlcnBvbGF0
aW9uUXVhbGl0eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0ICYmIG1fY3Vy
cmVudEludGVycG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCi0g
ICAgewotICAgICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCi0gICAgICAg
ICAgICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGludGVy
cG9sYXRpb25RdWFsaXR5VG9Vc2UpOwotICAgIH0KLQotICAgIGV4cGxpY2l0IEludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgc3Rk
OjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkpCi0g
ICAgICAgIDogSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBoaWNzQ29udGV4dCwg
aW50ZXJwb2xhdGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52YWx1ZSgpIDogZ3Jh
cGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgfkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCi0gICAgewotICAgICAgICBp
ZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCi0gICAgICAgICAgICBtX2dyYXBoaWNz
Q29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVudEludGVycG9sYXRp
b25RdWFsaXR5KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2dy
YXBoaWNzQ29udGV4dDsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRlcnBv
bGF0aW9uUXVhbGl0eTsKLSAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkOwot
fTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
TW9kZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGUsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU6OlRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2
ZXMsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5n
LAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyLAot
ICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpBdXRvY29ycmVjdGlv
blJlcGxhY2VtZW50LAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
OjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlPiB7Ci0gICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVBhdHRlcm5DaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxHcmFkaWVudENoYW5nZSwKLSAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbFBhdHRlcm5D
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0
cm9rZVRoaWNrbmVzc0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlQ2hhbmdlLAotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQ29sb3JDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxSdWxlQ2hhbmdlLAot
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dDaGFu
Z2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLAotICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpCbGVuZE1vZGVDaGFuZ2UsCi0g
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlRleHREcmF3aW5n
TW9kZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZQotI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgICAgICwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UKLSNlbmRpZgotICAgID47
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlN0cm9rZVN0eWxl
PiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpTdHJva2VT
dHlsZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6Tm9TdHJva2UsCi0gICAgV2ViQ29yZTo6
U3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEb3R0
ZWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRhc2hlZFN0cm9rZSwKLSAgICBX
ZWJDb3JlOjpTdHJva2VTdHlsZTo6RG91YmxlU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0
eWxlOjpXYXZ5U3Ryb2tlCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZh
bHVlczwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlLAotICAgICAgICBXZWJDb3Jl
OjpUZXh0RHJhd2luZ01vZGU6OkZpbGwsCi0gICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9k
ZTo6U3Ryb2tlCi0gICAgPjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
YzllNTgxZGNjMjIwM2FkMjFhN2Y0OGYzNTc4MTRkZWZjM2NmZjA5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUu
Y3BwCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRTdGF0ZS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBDaGFuZ2VGbGFncyYgY2hhbmdl
RmxhZ3MsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fY2xpcEJv
dW5kcyhpbml0aWFsQ1RNLm1hcFJlY3QoaW5pdGlhbENsaXApKQorICAgICwgbV9jaGFuZ2VGbGFn
cyhjaGFuZ2VGbGFncykKKyAgICAsIG1fY3RtKGluaXRpYWxDVE0pCit7Cit9CisKK0Zsb2F0UmVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5kcygpIGNvbnN0Cit7CisgICAgaWYgKGF1
dG8gaW52ZXJzZSA9IG1fY3RtLmludmVyc2UoKSkKKyAgICAgICAgcmV0dXJuIGludmVyc2UtPm1h
cFJlY3QobV9jbGlwQm91bmRzKTsKKworICAgIC8vIElmIHRoZSBDVE0gaXMgbm90IGludmVydGli
bGUsIHJldHVybiB0aGUgb3JpZ2luYWwgcmVjdC4KKyAgICAvLyBUaGlzIG1hdGNoZXMgQ0dSZWN0
QXBwbHlJbnZlcnNlQWZmaW5lVHJhbnNmb3JtIGJlaGF2aW9yLgorICAgIHJldHVybiBtX2NsaXBC
b3VuZHM7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0U3RhdGU6Omhhc09ubHlQcmltaXRpdmVD
aGFuZ2VzKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIENoYW5nZUZsYWdzIHByaW1p
dGl2ZUNoYW5nZUZsYWdzIHsgQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsIENoYW5nZTo6U3Ryb2tl
QnJ1c2gsIENoYW5nZTo6RmlsbEJydXNoIH07CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncyAhPSAo
bV9jaGFuZ2VGbGFncyAmIHByaW1pdGl2ZUNoYW5nZUZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoQ2hhbmdlOjpTdHJva2VCcnVz
aCkgJiYgIW1fc3Ryb2tlQnJ1c2guaXNQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoQ2hhbmdlOjpGaWxsQnJ1c2gpICYm
ICFtX2ZpbGxCcnVzaC5pc1ByaW1pdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFu
Z2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikKK3sKKyAgICBhdXRvIG1lcmdl
Q2hhbmdlID0gWyZdKENoYW5nZSBjaGFuZ2UsIGF1dG8gR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipw
cm9wZXJ0eSkgeworICAgICAgICBpZiAob3RoZXIubV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFu
Z2UpKSB7CisgICAgICAgICAgICB0aGlzLT4qcHJvcGVydHkgPSBvdGhlci4qcHJvcGVydHk7Cisg
ICAgICAgICAgICBtX2NoYW5nZUZsYWdzLmFkZChjaGFuZ2UpOworICAgICAgICB9CisgICAgfTsK
KworICAgIEFTU0VSVChtX2NsaXBCb3VuZHMgPT0gb3RoZXIubV9jbGlwQm91bmRzKTsKKworICAg
IG1lcmdlQ2hhbmdlKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKTsKKworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6Rmls
bEJydXNoLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmls
bEJydXNoKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U3Ry
b2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ry
b2tlVGhpY2tuZXNzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKwor
ICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdl
OjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9saW5lRGFzaCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgbWVy
Z2VDaGFuZ2UoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KTsKKworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6
Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
Y29tcG9zaXRlTW9kZSk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKwor
ICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpUZXh0
RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0
RHJhd2luZ01vZGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMs
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMp
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMpOworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBtZXJnZUNo
YW5nZShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtZXJnZUNoYW5nZShD
aGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrKTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQorICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlRGlmZnMoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIG90aGVyKQoreworICAgIGF1dG8gbWVyZ2VEaWZmID0gWyZdKENoYW5nZSBj
aGFuZ2UsIGF1dG8gR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSkgeworICAgICAgICBp
ZiAodGhpcy0+KnByb3BlcnR5ICE9IG90aGVyLipwcm9wZXJ0eSkgeworICAgICAgICAgICAgdGhp
cy0+KnByb3BlcnR5ID0gb3RoZXIuKnByb3BlcnR5OworICAgICAgICAgICAgbV9jaGFuZ2VGbGFn
cy5hZGQoY2hhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBtZXJnZURpZmYoQ2hhbmdl
OjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
Y3RtKTsKKyAgICAKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoKTsKKyAgICBtZXJnZURp
ZmYoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fZmlsbFJ1bGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlQnJ1c2gs
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKTsK
KyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBtZXJnZURpZmYoQ2hh
bmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc3Ryb2tlU3R5bGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TGluZUNhcCwgICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXApOworICAgIG1l
cmdlRGlmZihDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lRGFzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TGluZUpvaW4s
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKTsK
KyAgICBtZXJnZURpZmYoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdl
OjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
Y29tcG9zaXRlTW9kZSk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpOworCisgICAg
bWVyZ2VEaWZmKENoYW5nZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2FscGhhKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5LCAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSk7CisK
KyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBtZXJnZURpZmYoQ2hh
bmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc2hvdWxkU21vb3RoRm9udHMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cywgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zLCAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNm
b3Jtcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrKTsKKyNpZiBIQVZF
KE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIG1lcmdlRGlmZihDaGFuZ2U6OlVzZURhcmtBcHBl
YXJhbmNlLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFy
YW5jZSk7CisjZW5kaWYKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIHN0YXRlQ2hhbmdlTmFtZShH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlIGNoYW5nZSkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3Qgc3RhdGVDaGFuZ2VOYW1lc1tdID0geworICAgICAgICAiY3RtIiwKKworICAg
ICAgICAiZmlsbC1icnVzaCIsCisgICAgICAgICJmaWxsLXJ1bGUiLAorCisgICAgICAgICJzdHJv
a2UtYnJ1c2giLAorICAgICAgICAic3Ryb2tlLXRoaWNrbmVzcyIsCisgICAgICAgICJzdHJva2Ut
c3R5bGUiLAorCisgICAgICAgICJsaW5lLWNhcCIsCisgICAgICAgICJsaW5lLWRhc2giLAorICAg
ICAgICAibGluZS1qb2luIiwKKyAgICAgICAgIm1pdGVyLWxpbWl0IiwKKworICAgICAgICAiY29t
cG9zaXRlLW1vZGUiLAorICAgICAgICAiZHJvcC1zaGFkb3ciLAorCisgICAgICAgICJhbHBoYSIs
CisgICAgICAgICJpbWFnZS1pbnRlcnBvbGF0aW9uLXF1YWxpdHkiLAorICAgICAgICAidGV4dC1k
cmF3aW5nLW1vZGUiLAorCisgICAgICAgICJzaG91bGQtYW50aWFsaWFzIiwKKyAgICAgICAgInNo
b3VsZC1zbW9vdGgtZm9udHMiLAorICAgICAgICAic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZv
bnRzIiwKKyAgICAgICAgInNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMiLAorICAgICAgICAiZHJh
dy1sdW1pbmFuY2UtbWFzayIKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgICAg
ICAsICJ1c2UtZGFyay1hcHBlYXJhbmNlIgorI2VuZGlmCisgICAgfTsKKworICAgIHVuc2lnbmVk
IG1hc2sgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhbmdlKTsKKyAgICBBU1NFUlQoISgobWFz
ayAtIDEpICYgbWFzaykpOworICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGxvZzIobWFzaykpOworICAgIHJldHVybiBzdGF0ZUNoYW5nZU5hbWVzW2luZGV4
XTsKK30KKworVGV4dFN0cmVhbSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmR1bXAoVGV4dFN0cmVh
bSYgdHMpIGNvbnN0Cit7CisgICAgYXV0byBkdW1wID0gWyZdKENoYW5nZSBjaGFuZ2UsIGF1dG8g
R3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgY29uc3QgU3RyaW5nJiBuYW1lKSB7Cisg
ICAgICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICB0
cy5kdW1wUHJvcGVydHkobmFtZSwgdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9OworCisgICAgdHMu
ZHVtcFByb3BlcnR5KCJjaGFuZ2UtZmxhZ3MiLCBtX2NoYW5nZUZsYWdzKTsKKworICAgIGR1bXAo
Q2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2N0bSwgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hh
bmdlOjpDVE0pKTsKKworICAgIGR1bXAoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCwgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpGaWxsQnJ1c2gpKTsKKyAgICBkdW1wKENoYW5n
ZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9maWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6
RmlsbFJ1bGUpKTsKKworICAgIGR1bXAoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoLCAgICAgICAgICAgICAg
ICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTdHJva2VCcnVzaCkpOworICAgIGR1bXAoQ2hh
bmdlOjpTdHJva2VUaGlja25lc3MsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3N0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdl
OjpTdHJva2VUaGlja25lc3MpKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSwgICAgICAg
ICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U3Ryb2tlU3R5bGUpKTsKKworICAg
IGR1bXAoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2xpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5h
bWUoQ2hhbmdlOjpMaW5lQ2FwKSk7CisgICAgZHVtcChDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gsICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkxpbmVEYXNoKSk7CisgICAgZHVt
cChDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShD
aGFuZ2U6OkxpbmVKb2luKSk7CisgICAgZHVtcChDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCwgICAgICAgICAg
ICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6Ok1pdGVyTGltaXQpKTsKKworICAgIGR1
bXAoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUo
Q2hhbmdlOjpDb21wb3NpdGVNb2RlKSk7CisgICAgZHVtcChDaGFuZ2U6OkRyb3BTaGFkb3csICAg
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdywgICAg
ICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkRyb3BTaGFkb3cpKTsKKwor
ICAgIGR1bXAoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2FscGhhLCAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5n
ZU5hbWUoQ2hhbmdlOjpBbHBoYSkpOworICAgIGR1bXAoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5LCAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHksICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KSk7CisgICAgZHVtcChDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAg
IHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSkpOworCisgICAgZHVtcChD
aGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFu
Z2U6OlNob3VsZEFudGlhbGlhcykpOworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250
cywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRz
LCAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cykp
OworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICBzdGF0ZUNo
YW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpKTsKKyAgICBkdW1w
KENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENo
YW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpKTsKKyAgICBkdW1wKENoYW5nZTo6RHJhd0x1
bWluYW5jZU1hc2ssICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVt
aW5hbmNlTWFzaywgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6RHJhd0x1bWlu
YW5jZU1hc2spKTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGR1bXAoQ2hh
bmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3VzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdl
OjpVc2VEYXJrQXBwZWFyYW5jZSkpOworI2VuZGlmCisgICAgcmV0dXJuIHRzOworfQorCitUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlIGNoYW5nZSkKK3sKKyAgICB0cyA8PCBzdGF0ZUNoYW5nZU5hbWUoY2hhbmdlKTsKKyAg
ICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gc3RhdGUu
ZHVtcCh0cyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ0ODllYjEyMjg2YmUzODlkOTM2OGEzOThiMjVkNmE1NDk5NzY0OTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRTdGF0ZS5oCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIlNvdXJjZUJydXNo
LmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGUgeworcHVi
bGljOgorICAgIGVudW0gY2xhc3MgQ2hhbmdlIDogdWludDMyX3QgeworICAgICAgICBDVE0gICAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCisKKyAgICAgICAgRmlsbEJydXNoICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAxLAorICAgICAgICBGaWxsUnVsZSAgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDIsCisKKyAgICAgICAgU3Ryb2tlQnJ1c2ggICAgICAgICAgICAgICAgID0gMSA8
PCAzLAorICAgICAgICBTdHJva2VUaGlja25lc3MgICAgICAgICAgICAgPSAxIDw8IDQsCisgICAg
ICAgIFN0cm9rZVN0eWxlICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKKworICAgICAgICBMaW5l
Q2FwICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDYsCisgICAgICAgIExpbmVEYXNoICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgNywKKyAgICAgICAgTGluZUpvaW4gICAgICAgICAgICAgICAg
ICAgID0gMSA8PCA4LAorICAgICAgICBNaXRlckxpbWl0ICAgICAgICAgICAgICAgICAgPSAxIDw8
IDksCisKKyAgICAgICAgQ29tcG9zaXRlTW9kZSAgICAgICAgICAgICAgID0gMSA8PCAxMCwKKyAg
ICAgICAgRHJvcFNoYWRvdyAgICAgICAgICAgICAgICAgID0gMSA8PCAxMSwKKworICAgICAgICBB
bHBoYSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEyLAorICAgICAgICBJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5ICAgPSAxIDw8IDEzLAorICAgICAgICBUZXh0RHJhd2luZ01vZGUgICAg
ICAgICAgICAgPSAxIDw8IDE0LAorCisgICAgICAgIFNob3VsZEFudGlhbGlhcyAgICAgICAgICAg
ICA9IDEgPDwgMTUsCisgICAgICAgIFNob3VsZFNtb290aEZvbnRzICAgICAgICAgICA9IDEgPDwg
MTYsCisgICAgICAgIFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IDEgPDwgMTcsCisgICAg
ICAgIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zICAgICA9IDEgPDwgMTgsCisgICAgICAgIERyYXdM
dW1pbmFuY2VNYXNrICAgICAgICAgICA9IDEgPDwgMTksCisjaWYgSEFWRShPU19EQVJLX01PREVf
U1VQUE9SVCkKKyAgICAgICAgVXNlRGFya0FwcGVhcmFuY2UgICAgICAgICAgID0gMSA8PCAyMCwK
KyNlbmRpZgorICAgIH07CisgICAgdXNpbmcgQ2hhbmdlRmxhZ3MgPSBPcHRpb25TZXQ8Q2hhbmdl
PjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgQ2hhbmdlRmxhZ3MgaW5pdGlhbENoYW5nZUZsYWdz
ID0geyBDaGFuZ2U6OkZpbGxCcnVzaCwgQ2hhbmdlOjpTdHJva2VCcnVzaCwgQ2hhbmdlOjpTdHJv
a2VUaGlja25lc3MgfTsKKworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRl
KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXBCb3VuZHMsIGNvbnN0IENoYW5nZUZsYWdzJiA9
IHsgfSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9KTsKKworICAgIFdF
QkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7CisgICAgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyBtX2NsaXBCb3VuZHMuaW50ZXJzZWN0KG1fY3RtLm1h
cFJlY3QocmVjdCkpOyB9CisKKyAgICBDaGFuZ2VGbGFncyBjaGFuZ2VzKCkgY29uc3QgeyByZXR1
cm4gbV9jaGFuZ2VGbGFnczsgfQorICAgIHZvaWQgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKSB7IG1f
Y2hhbmdlRmxhZ3MgPSB7IH07IH0KKworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25z
dCB7IHJldHVybiBtX2N0bTsgfQorICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgY3RtLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBz
ZXRQcm9wZXJ0eShDaGFuZ2U6OkNUTSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSwgY3Rt
LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgY29uc3QgU291cmNlQnJ1c2gmIGZpbGxCcnVz
aCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbEJydXNoOyB9CisgICAgdm9pZCBzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkZpbGxCcnVzaCwgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ZpbGxCcnVzaCwgeyBjb2xvciB9LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAg
IHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX2ZpbGxCcnVzaC5zZXRHcmFkaWVudChX
VEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFu
Z2U6OkZpbGxCcnVzaCk7IH0KKyAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYm
IHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxs
QnJ1c2guc2V0UGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hh
bmdlRmxhZ3MuYWRkKENoYW5nZTo6RmlsbEJydXNoKTsgfQorCisgICAgV2luZFJ1bGUgZmlsbFJ1
bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxlOyB9CisgICAgdm9pZCBzZXRGaWxsUnVsZShX
aW5kUnVsZSBmaWxsUnVsZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVk
U3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpGaWxsUnVsZSwgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2ZpbGxSdWxlLCBmaWxsUnVsZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNv
bnN0IFNvdXJjZUJydXNoJiBzdHJva2VCcnVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQnJ1
c2g7IH0KKyAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hh
bmdlOjpTdHJva2VCcnVzaCwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoLCB7
IGNvbG9yIH0sIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBzZXRTdHJva2VHcmFkaWVu
dChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VU
cmFuc2Zvcm0pIHsgbV9zdHJva2VCcnVzaC5zZXRHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50KSwg
c3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsg
fQorICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1c2guc2V0UGF0
dGVybihXVEZNb3ZlKHBhdHRlcm4pLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxhZ3MuYWRk
KENoYW5nZTo6U3Ryb2tlQnJ1c2gpOyB9CisKKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBj
b25zdCB7IHJldHVybiBtX3N0cm9rZVRoaWNrbmVzczsgfQorICAgIHZvaWQgc2V0U3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTdHJva2VUaGlja25lc3Ms
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MsIHN0cm9rZVRoaWNrbmVz
cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJva2VTdHlsZTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUo
U3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0
QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlU3R5bGUsICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSwgc3Ryb2tlU3R5bGUsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisKKyAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7
IH0KKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwLCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVD
YXAsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwLCBsaW5lQ2FwLCBsYXN0QXBwbGll
ZFN0YXRlKTsgfQorCisgICAgY29uc3QgTGluZURhc2gmIGxpbmVEYXNoKCkgY29uc3QgeyByZXR1
cm4gbV9saW5lRGFzaDsgfQorICAgIHZvaWQgc2V0TGluZURhc2goTGluZURhc2gmJiBsaW5lRGFz
aCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJv
cGVydHkoQ2hhbmdlOjpMaW5lRGFzaCwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNo
LCBXVEZNb3ZlKGxpbmVEYXNoKSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIExpbmVKb2lu
IGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQorICAgIHZvaWQgc2V0TGlu
ZUpvaW4oTGluZUpvaW4gbGluZUpvaW4sIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0
QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZUpvaW4sICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lSm9pbiwgbGluZUpvaW4sIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisK
KyAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9Cisg
ICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TWl0ZXJM
aW1pdCwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQsIG1pdGVyTGltaXQsIGxh
c3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisgICAgQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGVNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3Np
dGVNb2RlKENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpDb21wb3NpdGVN
b2RlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY29tcG9zaXRlTW9kZSwgY29tcG9zaXRlTW9k
ZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBjb25zdCBEcm9wU2hhZG93JiBkcm9w
U2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9kcm9wU2hhZG93OyB9CisgICAgdm9pZCBzZXREcm9w
U2hhZG93KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3csIGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RHJvcFNoYWRv
dywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3csIGRyb3BTaGFkb3csIGxhc3RB
cHBsaWVkU3RhdGUpOyB9CisKKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxw
aGE7IH0KKyAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhLCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkFscGhhLCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEsIGFscGhhLCBsYXN0QXBwbGllZFN0YXRlKTsg
fQorICAgIAorICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAgICB2
b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxhc3RB
cHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwg
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAg
ICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBt
X3RleHREcmF3aW5nTW9kZTsgfQorICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3
aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUsIHRleHREcmF3aW5nTW9k
ZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29u
c3QgeyByZXR1cm4gbV9zaG91bGRBbnRpYWxpYXM7IH0KKyAgICB2b2lkIHNldFNob3VsZEFudGlh
bGlhcyhib29sIHNob3VsZEFudGlhbGlhcywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGxh
c3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMsIHNob3VsZEFudGlhbGlhcywg
bGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZFNtb290aEZvbnRzOyB9CisgICAgdm9pZCBzZXRTaG91bGRTbW9v
dGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlNob3VsZFNtb290aEZv
bnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMsIHNob3VsZFNt
b290aEZvbnRzLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFz
dEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cywgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KKyAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNm
b3Jtcywgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAg
CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0x1bWlu
YW5jZU1hc2s7IH0KKyAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWlu
YW5jZU1hc2ssIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBsYXN0QXBwbGllZFN0YXRlKSB7
IHNldFByb3BlcnR5KENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ssICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzaywgZHJhd0x1bWluYW5jZU1hc2ssIGxhc3RBcHBsaWVk
U3RhdGUpOyB9CisKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgdXNl
RGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3VzZURhcmtBcHBlYXJhbmNlOyB9Cisg
ICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlLCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShD
aGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFy
a0FwcGVhcmFuY2UsIHVzZURhcmtBcHBlYXJhbmNlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorI2Vu
ZGlmCisKKyAgICBib29sIGhhc09ubHlQcmltaXRpdmVDaGFuZ2VzKCkgY29uc3Q7CisgICAgdm9p
ZCBtZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKTsKKyAgICB2
b2lkIG1lcmdlRGlmZnMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKTsKKworICAg
IFdURjo6VGV4dFN0cmVhbSYgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRl
eHRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHZvaWQgc2V0UHJvcGVydHkoQ2hhbmdlIGNoYW5nZSwgVCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6KnByb3BlcnR5LCBjb25zdCBUJiB2YWx1ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpCisgICAgeworICAgICAgICBpZiAodGhpcy0+KnBy
b3BlcnR5ID09IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLT4qcHJv
cGVydHkgPSB2YWx1ZTsKKyAgICAgICAgbV9jaGFuZ2VGbGFncy5zZXQoY2hhbmdlLCBsYXN0QXBw
bGllZFN0YXRlLipwcm9wZXJ0eSAhPSB0aGlzLT4qcHJvcGVydHkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZXRQcm9wZXJ0eShDaGFuZ2UgY2hhbmdlLCBU
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHksIFQmJiB2YWx1ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIGxhc3RBcHBsaWVkU3RhdGUpCisgICAgeworICAgICAgICBpZiAodGhp
cy0+KnByb3BlcnR5ID09IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlz
LT4qcHJvcGVydHkgPSBXVEZNb3ZlKHZhbHVlKTsKKyAgICAgICAgbV9jaGFuZ2VGbGFncy5zZXQo
Y2hhbmdlLCBsYXN0QXBwbGllZFN0YXRlLipwcm9wZXJ0eSAhPSB0aGlzLT4qcHJvcGVydHkpOwor
ICAgIH0KKworICAgIEZsb2F0UmVjdCBtX2NsaXBCb3VuZHM7CisKKyAgICBDaGFuZ2VGbGFncyBt
X2NoYW5nZUZsYWdzOworCisgICAgQWZmaW5lVHJhbnNmb3JtIG1fY3RtOworCisgICAgU291cmNl
QnJ1c2ggbV9maWxsQnJ1c2ggeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBXaW5kUnVsZSBtX2ZpbGxS
dWxlIHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKKworICAgIFNvdXJjZUJydXNoIG1fc3Ryb2tlQnJ1
c2ggeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBmbG9hdCBtX3N0cm9rZVRoaWNrbmVzcyB7IDAgfTsK
KyAgICBTdHJva2VTdHlsZSBtX3N0cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKKworICAgIExp
bmVDYXAgbV9saW5lQ2FwIHsgTGluZUNhcDo6QnV0dCB9OworICAgIExpbmVEYXNoIG1fbGluZURh
c2g7CisgICAgTGluZUpvaW4gbV9saW5lSm9pbiB7IExpbmVKb2luOjpNaXRlciB9OworICAgIGZs
b2F0IG1fbWl0ZXJMaW1pdCB7IDAgfTsKKworICAgIENvbXBvc2l0ZU1vZGUgbV9jb21wb3NpdGVN
b2RlIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsIH07
CisgICAgRHJvcFNoYWRvdyBtX2Ryb3BTaGFkb3c7CisKKyAgICBmbG9hdCBtX2FscGhhIHsgMSB9
OworICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7
IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgVGV4dERyYXdpbmdNb2RlRmxh
Z3MgbV90ZXh0RHJhd2luZ01vZGUgeyBUZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKKworICAgIGJv
b2wgbV9zaG91bGRBbnRpYWxpYXMgeyB0cnVlIH07CisgICAgYm9vbCBtX3Nob3VsZFNtb290aEZv
bnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgeyB0
cnVlIH07CisgICAgYm9vbCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fZHJhd0x1bWluYW5jZU1hc2sgeyBmYWxzZSB9OworI2lmIEhBVkUoT1NfREFSS19N
T0RFX1NVUFBPUlQpCisgICAgYm9vbCBtX3VzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2UgfTsKKyNl
bmRpZgorfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGF1dG8gZW5jb2Rl
ID0gWyZdKENoYW5nZSBjaGFuZ2UsIGF1dG8gR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0
eSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQorICAgICAg
ICAgICAgZW5jb2RlciA8PCB0aGlzLT4qcHJvcGVydHk7CisgICAgfTsKKworICAgIGVuY29kZXIg
PDwgbV9jbGlwQm91bmRzOworCisgICAgZW5jb2RlciA8PCBtX2NoYW5nZUZsYWdzOworCisgICAg
ZW5jb2RlKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2N0bSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpGaWxsQnJ1c2gsICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoKTsK
KyAgICBlbmNvZGUoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6U3Ry
b2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0
cm9rZUJydXNoKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBl
bmNvZGUoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6TGluZUNh
cCwgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVD
YXApOworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6
TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2xpbmVKb2luKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCk7CisKKyAgICBlbmNv
ZGUoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fY29tcG9zaXRlTW9kZSk7CisgICAgZW5jb2RlKENoYW5nZTo6RHJvcFNoYWRv
dywgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFk
b3cpOworCisgICAgZW5jb2RlKENoYW5nZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgZW5jb2RlKENoYW5nZTo6VGV4dERyYXdp
bmdNb2RlLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3
aW5nTW9kZSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBl
bmNvZGUoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMpOworICAgIGVuY29kZShDaGFuZ2U6OlNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9z
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIGVuY29kZShDaGFuZ2U6OlNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zLCAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dz
SWdub3JlVHJhbnNmb3Jtcyk7CisgICAgZW5jb2RlKENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ss
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNr
KTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGVuY29kZShDaGFuZ2U6OlVz
ZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91
c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
K3N0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBhdXRvIGRlY29kZSA9IFsmXShHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENoYW5nZSBjaGFuZ2UsIGF1dG8gR3JhcGhpY3NDb250
ZXh0U3RhdGU6Oipwcm9wZXJ0eSkgeworICAgICAgICBpZiAoIXN0YXRlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHVz
aW5nIFByb3BlcnR5VHlwZSA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxkZWNsdHlw
ZShzdGQ6OmRlY2x2YWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+KCkuKnByb3BlcnR5KT46OnR5cGU7
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8UHJvcGVydHlUeXBlPiB2YWx1ZTsKKyAgICAgICAgZGVj
b2RlciA+PiB2YWx1ZTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBzdGF0ZS4qcHJvcGVydHkgPSAqdmFsdWU7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH07CisKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gY2xpcEJvdW5k
czsKKyAgICBkZWNvZGVyID4+IGNsaXBCb3VuZHM7CisgICAgaWYgKCFjbGlwQm91bmRzKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDaGFuZ2VGbGFn
cz4gY2hhbmdlRmxhZ3M7CisgICAgZGVjb2RlciA+PiBjaGFuZ2VGbGFnczsKKyAgICBpZiAoIWNo
YW5nZUZsYWdzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGUgc3RhdGUoKmNsaXBCb3VuZHMsICpjaGFuZ2VGbGFncyk7CisKKyAgICBpZiAo
IWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpGaWxsUnVsZSwg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hh
bmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zdHJva2VCcnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFk
ZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSkpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdl
OjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9s
aW5lQ2FwKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShz
dGF0ZSwgQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9saW5lRGFzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY29t
cG9zaXRlTW9kZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGUoc3RhdGUsIENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSkpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSwgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGUoc3RhdGUsIENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcykpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
c2hvdWxkU21vb3RoRm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyNlbmRpZgorCisgICAgcmV0dXJuIHN0YXRlOworfQorCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
KTsKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCisgICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTSwKKworICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1c2gsCisgICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxSdWxlLAorCisgICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoLAorICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3MsCisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxl
LAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVD
YXAsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVE
YXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5l
Sm9pbiwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0
ZXJMaW1pdCwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpDb21wb3NpdGVNb2RlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpEcm9wU2hhZG93LAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkFscGhhLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LAorICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsCisKKyAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzLAor
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTbW9v
dGhGb250cywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywKKyAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2sKKyNp
ZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgICAgICAsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlCisjZW5kaWYKKyAgICA+Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjcyMTMyODUyNjFlNjkwY2EzMDYwZDdlMDI2ZTUwZTUyZWVhNTkwZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVz
dG9yZSkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAg
bV9jb250ZXh0LnNhdmUoKTsKKyAgICB9CisgICAgCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAg
ICBtX2NvbnRleHQucmVzdG9yZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNhdmUoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKKyAgICAgICAgbV9jb250ZXh0
LnNhdmUoKTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7CisgICAgfQorCisgICAg
dm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsK
KyAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25z
dCB7IHJldHVybiAmbV9jb250ZXh0OyB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0
JiBtX2NvbnRleHQ7CisgICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKworY2xhc3MgVHJh
bnNwYXJlbmN5TGF5ZXJTY29wZSB7CitwdWJsaWM6CisgICAgVHJhbnNwYXJlbmN5TGF5ZXJTY29w
ZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IGFscGhhLCBib29sIGJlZ2luTGF5ZXIg
PSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fYWxwaGEo
YWxwaGEpCisgICAgICAgICwgbV9iZWdhbkxheWVyKGJlZ2luTGF5ZXIpCisgICAgeworICAgICAg
ICBpZiAoYmVnaW5MYXllcikKKyAgICAgICAgICAgIG1fY29udGV4dC5iZWdpblRyYW5zcGFyZW5j
eUxheWVyKG1fYWxwaGEpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGJlZ2luTGF5ZXIoZmxvYXQg
YWxwaGEpCisgICAgeworICAgICAgICBtX2FscGhhID0gYWxwaGE7CisgICAgICAgIG1fY29udGV4
dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1fYWxwaGEpOworICAgICAgICBtX2JlZ2FuTGF5ZXIg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICB+VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSgpCisgICAg
eworICAgICAgICBpZiAobV9iZWdhbkxheWVyKQorICAgICAgICAgICAgbV9jb250ZXh0LmVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4
dCYgbV9jb250ZXh0OworICAgIGZsb2F0IG1fYWxwaGE7CisgICAgYm9vbCBtX2JlZ2FuTGF5ZXI7
Cit9OworCitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlciB7CitwdWJsaWM6
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc3RhY2tT
aXplKGNvbnRleHQuc3RhY2tTaXplKCkpCisgICAgeyB9CisKKyAgICB+R3JhcGhpY3NDb250ZXh0
U3RhdGVTdGFja0NoZWNrZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC5zdGFja1Np
emUoKSAhPSBtX3N0YWNrU2l6ZSkKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3ND
b250ZXh0ICVwIHN0YWNrIGNoYW5nZWQgYnkgJWQiLCAmbV9jb250ZXh0LCAoaW50KW1fY29udGV4
dC5zdGFja1NpemUoKSAtIChpbnQpbV9zdGFja1NpemUpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsK
K307CisKK2NsYXNzIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVh
bGl0eVRvVXNlKQorICAgICAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkK
KyAgICAgICAgLCBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eShncmFwaGljc0NvbnRleHQu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQorICAgICAgICAsIG1faW50ZXJwb2xhdGlvblF1
YWxpdHlDaGFuZ2VkKGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UgIT0gSW50ZXJwb2xhdGlvblF1
YWxpdHk6OkRlZmF1bHQgJiYgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gaW50ZXJw
b2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlZCkKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSk7CisgICAgfQorCisg
ICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBzdGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFsaXR5PiBp
bnRlcnBvbGF0aW9uUXVhbGl0eSkKKyAgICAgICAgOiBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIoZ3JhcGhpY3NDb250ZXh0LCBpbnRlcnBvbGF0aW9uUXVhbGl0eSA/IGludGVycG9sYXRp
b25RdWFsaXR5LnZhbHVlKCkgOiBncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKQorICAgIHsKKyAgICB9CisKKyAgICB+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkK
KyAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkobV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0OworICAgIEludGVycG9sYXRpb25R
dWFsaXR5IG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5OworICAgIGJvb2wgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCmlu
ZGV4IDE1ZGYxZGZkYjZmM2ExNmFkNWVhZjY0NzI2MWZjZmM0YjdhOTNhYjQuLjYyZjlmNDY0YzNk
NmQ5ZDVhMDljYTVhNGI3YmQ4YTEwMzYxNTkxYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0xMjYsMjcgKzEyNiw1MSBA
QCBTdHJpbmcgYmxlbmRNb2RlTmFtZShCbGVuZE1vZGUgYmxlbmRPcCkKICAgICByZXR1cm4gYmxl
bmRPcGVyYXRvck5hbWVzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihibGVuZE9wKSAtIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihCbGVuZE1vZGU6Ok5vcm1hbCldOwogfQogCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIHJldHVy
biB0cyA8PCBibGVuZE1vZGVOYW1lKGJsZW5kTW9kZSk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkKK3sKKyAg
ICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBjb21wb3NpdGVNb2RlLm9w
ZXJhdGlvbik7CisgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgY29tcG9zaXRlTW9k
ZS5ibGVuZE1vZGUpOworICAgIHJldHVybiB0czsKK30KKwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CiAgICAgcmV0dXJuIHRz
IDw8IGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShvcCwgQmxlbmRNb2RlOjpOb3JtYWwpOwogfQogCi1U
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJvcFNoYWRv
dyYgZHJvcFNoYWRvdykKIHsKLSAgICByZXR1cm4gdHMgPDwgYmxlbmRNb2RlTmFtZShibGVuZE1v
ZGUpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LW9mZnNldCIsIGRyb3BTaGFkb3cub2Zm
c2V0KTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwgZHJvcFNoYWRvdy5ibHVy
UmFkaXVzKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1jb2xvciIsIGRyb3BTaGFkb3cu
Y29sb3IpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyIs
IGRyb3BTaGFkb3cucmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
V2luZFJ1bGUgcnVsZSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIElu
dGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KQogewotICAgIHN3aXRjaCAo
cnVsZSkgewotICAgIGNhc2UgV2luZFJ1bGU6Ok5vblplcm86Ci0gICAgICAgIHRzIDw8ICJOT04t
WkVSTyI7CisgICAgc3dpdGNoIChpbnRlcnBvbGF0aW9uUXVhbGl0eSkgeworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgIHRzIDw8ICJERUZBVUxUIjsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaW5kUnVsZTo6RXZlbk9kZDoKLSAgICAgICAgdHMgPDwg
IkVWRU4tT0REIjsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9s
YXRlOgorICAgICAgICB0cyA8PCAiRE8tTk9ULUlOVEVSUE9MQVRFIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgorICAgICAgICB0cyA8PCAiTE9X
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVt
OgorICAgICAgICB0cyA8PCAiTUVESVVNIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgdHMgPDwgIkhFSUdIIjsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotCiAgICAgcmV0dXJuIHRzOwogfQogCkBAIC0xNjYsNiArMTkwLDExIEBA
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVDYXAgY2FwU3R5bGUp
CiAgICAgcmV0dXJuIHRzOwogfQogCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBMaW5lRGFzaCkKK3sKKyAgICByZXR1cm4gdHM7Cit9CisKIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVKb2luIGpvaW5TdHlsZSkKIHsKICAgICBzd2l0Y2gg
KGpvaW5TdHlsZSkgewpAQCAtMTgyLDQgKzIxMSw1NiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBqb2luU3R5bGUpCiAgICAgcmV0dXJuIHRzOwogfQog
CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBTdHJva2VTdHlsZSBzdHJv
a2VTdHlsZSkKK3sKKyAgICBzd2l0Y2ggKHN0cm9rZVN0eWxlKSB7CisgICAgY2FzZSBTdHJva2VT
dHlsZTo6Tm9TdHJva2U6CisgICAgICAgIHRzIDw8ICJOTy1TVFJPS0UiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZToKKyAgICAgICAgdHMgPDwgIlNP
TElELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5bGU6OkRvdHRl
ZFN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRPVFRFRC1TVFJPS0UiOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2U6CisgICAgICAgIHRzIDw8ICJEQVNI
RUQtU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RG91Ymxl
U3Ryb2tlOgorICAgICAgICB0cyA8PCAiRE9VQkxFLVNUUk9LRSI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU3Ryb2tlU3R5bGU6OldhdnlTdHJva2U6CisgICAgICAgIHRzIDw8ICJXQVZZLVNU
Uk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFRleHREcmF3aW5nTW9kZSB0ZXh0RHJh
d2luZ01vZGUpCit7CisgICAgc3dpdGNoICh0ZXh0RHJhd2luZ01vZGUpIHsKKyAgICBjYXNlIFRl
eHREcmF3aW5nTW9kZTo6RmlsbDoKKyAgICAgICAgdHMgPDwgIkZJTEwiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRleHREcmF3aW5nTW9kZTo6U3Ryb2tlOgorICAgICAgICB0cyA8PCAiU1RS
T0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgV2luZFJ1bGUgcnVsZSkKK3sKKyAgICBz
d2l0Y2ggKHJ1bGUpIHsKKyAgICBjYXNlIFdpbmRSdWxlOjpOb25aZXJvOgorICAgICAgICB0cyA8
PCAiTk9OLVpFUk8iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdpbmRSdWxlOjpFdmVuT2Rk
OgorICAgICAgICB0cyA8PCAiRVZFTi1PREQiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAppbmRleCA0ZDIwNGU5N2U1
YzU0NGQ3NzZiZmE3ZjMwYWFjYzFiN2M0NjNlMGUwLi4wZjhiMmQwMjc1NWJmYWVjNjVkOTVjMDRm
MmM0NWI1MjQ5NGYyNjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw5IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEYXNoQXJyYXkuaCIKKyNpbmNsdWRlICJGbG9h
dFNpemUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTczLDYgKzc2LDc5IEBAIGVudW0gY2xh
c3MgQmxlbmRNb2RlIDogdWludDhfdCB7CiAgICAgUGx1c0xpZ2h0ZXIKIH07CiAKK3N0cnVjdCBD
b21wb3NpdGVNb2RlIHsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBvcGVyYXRpb247CisgICAgQmxl
bmRNb2RlIGJsZW5kTW9kZTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb21wb3NpdGVN
b2RlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYXRpb24gPT0gb3RoZXIub3Bl
cmF0aW9uICYmIGJsZW5kTW9kZSA9PSBvdGhlci5ibGVuZE1vZGU7CisgICAgfQorICAgIAorICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVN
b2RlPiBkZWNvZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3Zv
aWQgQ29tcG9zaXRlTW9kZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
ZW5jb2RlciA8PCBvcGVyYXRpb247CisgICAgZW5jb2RlciA8PCBibGVuZE1vZGU7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU1vZGU+IENvbXBv
c2l0ZU1vZGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8
Q29tcG9zaXRlT3BlcmF0b3I+IG9wZXJhdGlvbjsKKyAgICBkZWNvZGVyID4+IG9wZXJhdGlvbjsK
KyAgICBpZiAoIW9wZXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7CisgICAgZGVjb2RlciA+PiBibGVu
ZE1vZGU7CisgICAgaWYgKCFibGVuZE1vZGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4geyB7ICpvcGVyYXRpb24sICpibGVuZE1vZGUgfSB9OworfQorCitzdHJ1
Y3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgeworICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4
X3QgeworICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVz
LAorICAgICAgICBTcGVsbGluZywKKyAgICAgICAgR3JhbW1hciwKKyAgICAgICAgQXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudCwKKyAgICAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCisgICAgfSBt
b2RlOworICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OworCisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFy
a2VyTGluZVN0eWxlPiBkZWNvZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbW9kZTsKKyAgICBlbmNvZGVyIDw8IHNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpv
cHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9k
ZTsKKyAgICBkZWNvZGVyID4+IG1vZGU7CisgICAgaWYgKCFtb2RlKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRVc2VEYXJrQXBw
ZWFyYW5jZTsKKyAgICBkZWNvZGVyID4+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOworICAgIGlm
ICghc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4geyB7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfSB9Owor
fQorCiBlbnVtIGNsYXNzIEdyYWRpZW50U3ByZWFkTWV0aG9kIDogdWludDhfdCB7CiAgICAgUGFk
LAogICAgIFJlZmxlY3QsCkBAIC05Myw2ICsxNjksNDIgQEAgZW51bSBjbGFzcyBMaW5lQ2FwIDog
dWludDhfdCB7CiAgICAgU3F1YXJlCiB9OwogCitzdHJ1Y3QgTGluZURhc2ggeworICAgIERhc2hB
cnJheSBkYXNoZXM7CisgICAgZmxvYXQgb2Zmc2V0OworICAgIAorICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxMaW5lRGFzaD4gZGVjb2RlKERlY29kZXIm
KTsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZURhc2gmIGEsIGNvbnN0
IExpbmVEYXNoJiBiKQoreworICAgIHJldHVybiBhLmRhc2hlcyA9PSBiLmRhc2hlcyAmJiBhLm9m
ZnNldCA9PSBiLm9mZnNldDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgTGlu
ZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
ZGFzaGVzOworICAgIGVuY29kZXIgPDwgb2Zmc2V0OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorc3RkOjpvcHRpb25hbDxMaW5lRGFzaD4gTGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RGFzaEFycmF5PiBkYXNoZXM7CisgICAgZGVj
b2RlciA+PiBkYXNoZXM7CisgICAgaWYgKCFkYXNoZXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBvZmZzZXQ7CisgICAgZGVjb2RlciA+
PiBvZmZzZXQ7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4geyB7IFdURk1vdmUoKmRhc2hlcyksICpvZmZzZXQgfSB9OworfQorCiBl
bnVtIGNsYXNzIExpbmVKb2luIDogdWludDhfdCB7CiAgICAgTWl0ZXIsCiAgICAgUm91bmQsCkBA
IC0xMDUsNiArMjE3LDc2IEBAIGVudW0gSG9yaXpvbnRhbEFsaWdubWVudCB7CiAgICAgQWxpZ25I
Q2VudGVyCiB9OwogCisvLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNh
bnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRt
ZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7
CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisKK3N0cnVjdCBEcm9wU2hhZG93IHsKKyAg
ICBGbG9hdFNpemUgb2Zmc2V0OworICAgIGZsb2F0IGJsdXJSYWRpdXMgeyAwIH07CisgICAgQ29s
b3IgY29sb3I7CisgICAgU2hhZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVz
TW9kZTo6RGVmYXVsdCB9OworICAgIAorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1
cm4gY29sb3IuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGlzQmx1cnJlZCgpIGNvbnN0IHsgcmV0
dXJuIGlzVmlzaWJsZSgpICYmIGJsdXJSYWRpdXM7IH0KKyAgICBib29sIGhhc091dHNldHMoKSBj
b25zdCB7IHJldHVybiBpc0JsdXJyZWQoKSB8fCAoaXNWaXNpYmxlKCkgJiYgIW9mZnNldC5pc1pl
cm8oKSk7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8RHJvcFNoYWRvdz4gZGVjb2RlKERlY29kZXImKTsKK307CisKK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgRHJvcFNoYWRvdyYgYSwgY29uc3QgRHJvcFNoYWRvdyYgYikKK3sK
KyAgICByZXR1cm4gYS5vZmZzZXQgPT0gYi5vZmZzZXQgJiYgYS5ibHVyUmFkaXVzID09IGIuYmx1
clJhZGl1cyAmJiBhLmNvbG9yID09IGIuY29sb3IgJiYgYS5yYWRpdXNNb2RlID09IGIucmFkaXVz
TW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRHJvcFNoYWRvdzo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBvZmZzZXQ7Cisg
ICAgZW5jb2RlciA8PCBibHVyUmFkaXVzOworICAgIGVuY29kZXIgPDwgY29sb3I7CisgICAgZW5j
b2RlciA8PCByYWRpdXNNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpv
cHRpb25hbDxEcm9wU2hhZG93PiBEcm9wU2hhZG93OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3sKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4g
b2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYmx1clJhZGl1czsKKyAgICBkZWNvZGVyID4+IGJs
dXJSYWRpdXM7CisgICAgaWYgKCFibHVyUmFkaXVzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7CisgICAgZGVjb2RlciA+PiBj
b2xvcjsKKyAgICBpZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgc3RkOjpvcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiByYWRpdXNNb2RlOworICAgIGRlY29k
ZXIgPj4gcmFkaXVzTW9kZTsKKyAgICBpZiAoIXJhZGl1c01vZGUpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB7ICpvZmZzZXQsICpibHVyUmFkaXVzLCAqY29s
b3IsICpyYWRpdXNNb2RlIH0gfTsKK30KKworZW51bSBTdHJva2VTdHlsZSB7CisgICAgTm9TdHJv
a2UsCisgICAgU29saWRTdHJva2UsCisgICAgRG90dGVkU3Ryb2tlLAorICAgIERhc2hlZFN0cm9r
ZSwKKyAgICBEb3VibGVTdHJva2UsCisgICAgV2F2eVN0cm9rZSwKK307CisKIGVudW0gVGV4dEJh
c2VsaW5lIHsKICAgICBBbHBoYWJldGljVGV4dEJhc2VsaW5lLAogICAgIFRvcFRleHRCYXNlbGlu
ZSwKQEAgLTEyMiwxNiArMzA0LDI5IEBAIGVudW0gVGV4dEFsaWduIHsKICAgICBSaWdodFRleHRB
bGlnbgogfTsKIAotU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShXZWJDb3JlOjpDb21wb3Np
dGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKLVN0cmluZyBibGVuZE1vZGVOYW1lKFdl
YkNvcmU6OkJsZW5kTW9kZSk7Ci1ib29sIHBhcnNlQmxlbmRNb2RlKGNvbnN0IFN0cmluZyYsIFdl
YkNvcmU6OkJsZW5kTW9kZSYpOwotYm9vbCBwYXJzZUNvbXBvc2l0ZUFuZEJsZW5kT3BlcmF0b3Io
Y29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3ImLCBXZWJDb3JlOjpCbGVu
ZE1vZGUmKTsKK2VudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7CisgICAgRmls
bCA9IDEgPDwgMCwKKyAgICBTdHJva2UgPSAxIDw8IDEsCit9OwogCi1XRUJDT1JFX0VYUE9SVCBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Qmxl
bmRNb2RlKTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcik7Ci1XRUJDT1JFX0VYUE9S
VCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUp
OwordXNpbmcgVGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2Rl
PjsKKworU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShDb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlKTsKK1N0cmluZyBibGVuZE1vZGVOYW1lKEJsZW5kTW9kZSk7Citib29sIHBhcnNlQmxl
bmRNb2RlKGNvbnN0IFN0cmluZyYsIEJsZW5kTW9kZSYpOworYm9vbCBwYXJzZUNvbXBvc2l0ZUFu
ZEJsZW5kT3BlcmF0b3IoY29uc3QgU3RyaW5nJiwgQ29tcG9zaXRlT3BlcmF0b3ImLCBCbGVuZE1v
ZGUmKTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIEJsZW5kTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29tcG9zaXRlT3BlcmF0b3IpOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENv
bXBvc2l0ZU1vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERyb3BTaGFkb3cmKTsKK1dFQkNPUkVfRVhQT1JUIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBJbnRlcnBvbGF0aW9u
UXVhbGl0eSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgTGluZUNhcCk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZURhc2gpOwogV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVKb2luKTsK
K1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBTdHJva2VTdHlsZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgVGV4dERyYXdpbmdNb2RlKTsKK1dFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXaW5kUnVsZSk7
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApAQCAtMjE5LDQgKzQxNCwzNSBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkxpbmVKb2luPiB7CiAgICAgPjsKIH07CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6U3Ryb2tlU3R5bGU+IHsKKyAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlLAor
ICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpOb1N0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VT
dHlsZTo6U29saWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdHRlZFN0cm9r
ZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlLAorICAgIFdlYkNvcmU6
OlN0cm9rZVN0eWxlOjpEb3VibGVTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6Oldh
dnlTdHJva2UKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpUZXh0RHJhd2luZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAor
ICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGUsCisgICAgICAgIFdlYkNvcmU6OlRleHRE
cmF3aW5nTW9kZTo6RmlsbCwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpTdHJv
a2UKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGUsCisgICAg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlRleHRDaGVja2luZ0RpY3Rh
dGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5nLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGlu
ZVN0eWxlOjpNb2RlOjpHcmFtbWFyLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpNb2RlOjpBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAorICAgIFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMKKyAgICA+Owor
fTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcAppbmRleCA0
ZTA3MWY3MmYzNWJlOGE1OGZjNGNkNTc3YTE0NTZkZTE3NDY2ODJjLi40MWIwNTExYThmNzhhMTc5
YjMwNGNmODlkNDEwM2UzNWRlM2UxMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKQEAg
LTQ0LDcgKzQ0LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6
ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEYKIHsKICNpZiBVU0UoTkVXX1RI
RU1FKSB8fCBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlv
bihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwg
b3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAoZHN0UmVjdCk7CiAgICAg
Y29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZHN0UmVjdC5z
aXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggYjYyMzY3ODgwZTNlNTM1
NGI2MTcxMTM0N2M5YTExYjQyMjQ2ODg1ZS4uZDY3ZDNlYTExNWQyNGVmZDkwOWUwM2FjOWFkZTkz
YThiNDc2NGZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TnVsbEdyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL051bGxHcmFwaGljc0NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIxLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw4NyArMzgsNTcgQEAgcHVibGljOgogICAgICAg
ICBEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQKICAgICB9OwogCi0gICAgTnVsbEdyYXBoaWNzQ29u
dGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMgcmVhc29ucykKLSAgICAgICAgOiBtX3BhaW50
SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25zKQorICAgIE51bGxHcmFwaGljc0NvbnRleHQoY29u
c3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNv
bnMpCisgICAgICAgIDogR3JhcGhpY3NDb250ZXh0KGluaXRpYWxDbGlwKQorICAgICAgICAsIG1f
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKHJlYXNvbnMpCiAgICAgewogICAgIH0KIAogcHJpdmF0
ZToKLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFs
IHsgfQotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIHBlcmZvcm1pbmdQYWludEludmFsaWRhdGlvbigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zICE9IFBhaW50
SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQogICAgIGJvb2wgaW52YWxpZGF0aW5nQ29udHJv
bFRpbnRzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMg
PT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHM7IH0K
ICAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KICAgICBib29s
IGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50OyB9CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mp
IGZpbmFsIHsgfQotCi0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCkgZmluYWwgeyB9Ci0jZW5kaWYKLQotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KLQotICAgIHZv
aWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwg
eyB9OwotCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsIHsgfQotCi0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
eyB9OyB9Ci0KKyAgICB2b2lkIHNhdmUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJlc3RvcmUoKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWwgeyB9OwogI2lmIFVT
RShDRykKICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsIHsgfQogICAgIHZvaWQg
YXBwbHlGaWxsUGF0dGVybigpIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0
aCYpIGZpbmFsIHsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0ID0gMSkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRo
JikgZmluYWwgeyB9Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0K
LSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWwgeyB9Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9
IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbCB7IH0KLSAgICBGbG9hdFJlY3Qgcm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lk
ZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFs
c2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9Ci0g
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dCBmaW5hbCB7IHJldHVybiB7IH07IH0KLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZp
bmFsIHsgfQorICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbCB7IH0KKwogICAg
IHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbCB7IH0KICAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBzYXZl
KCkgZmluYWwgeyB9Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGRy
YXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgY29uc3QgQ29s
b3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbCB7IH0KIAotICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCkgZmluYWwgeyByZXR1cm4geyB9OyB9Cisg
ICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9v
dGhpbmdNb2RlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRp
ZW50JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpu
dWxsb3B0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3Rv
bUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgCisg
ICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbCB7IH0KIAot
ICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWwgeyB9CiAKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1h
Z2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsIHsgfQogCi0gICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3Ro
aW5nOyB9Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRp
bGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAgdm9p
ZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbCB7
IH0KICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29u
c3QgQ29sb3ImKSBmaW5hbCB7IH0KQEAgLTEyNywyOCArOTcsMjYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wm
LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBm
aW5hbDsKLQotICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2Rl
ID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxl
bmRNb2RlOjpOb3JtYWwpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
JikgZmluYWwgeyB9Ci0KKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6
ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0
dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQogI2lmIEVOQUJM
RShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQogI2VuZGlmCiAKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0
LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWwgeyB9Cisg
ICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxT
aWRlcykgZmluYWwgeyByZXR1cm4gcmVjdDsgfQorCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShD
QUlSTykKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi1w
cml2YXRlOgogICAgIGNvbnN0IFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBtX3BhaW50SW52YWxp
ZGF0aW9uUmVhc29ucyB7IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSB9OwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJlZjRlNDA2MTE3Y2MzMTFlMWIyZGYxMWU5
ZDY2MzhjNDg3OTNmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmgKQEAgLTAsMCArMSwzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gc3RydWN0IENH
Q29udGV4dDsKKyNlbGlmIFVTRShDQUlSTykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dENhaXJvOworfQordXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCA9IHZvaWQ7CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggYmIxMzhiNTI5N2E1MjFmYmY3ZDY5M2NkMTE0
MTA0NDAwZmNhYmM0ZS4uOTAyNGY1ZDFhYmZjZTM4MDgxODNhM2IyMzFmYmNlMGZmYjJmZjQxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAK
QEAgLTE5MSwxNyArMTkxLDE3IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRT
aXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDCiAgICAgdXBkYXRl
U2hhZG93Qmx1clZhbHVlcygpOwogfQogCi1TaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6IG1fY29sb3Ioc3RhdGUuc2hhZG93Q29s
b3IpCi0gICAgLCBtX2JsdXJSYWRpdXMoc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Qmx1
cikKLSAgICAsIG1fb2Zmc2V0KHN0YXRlLnNoYWRvd09mZnNldCkKLSAgICAsIG1fc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCitTaGFkb3dCbHVy
OjpTaGFkb3dCbHVyKGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3csIGJvb2wgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpCisgICAgOiBtX2NvbG9yKGRyb3BTaGFkb3cuY29sb3IpCisgICAgLCBt
X2JsdXJSYWRpdXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVzLCBkcm9wU2hhZG93LmJsdXJSYWRpdXMp
CisgICAgLCBtX29mZnNldChkcm9wU2hhZG93Lm9mZnNldCkKKyAgICAsIG1fc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCiB7CiAjaWYgVVNFKENHKQogICAg
IC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVz
ID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRv
IHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gt
c2hhZG93LgotICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01v
ZGU6OkxlZ2FjeSkgewotICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lS
YWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CisgICAgaWYgKGRyb3BTaGFkb3cucmFkaXVzTW9kZSA9
PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpIHsKKyAgICAgICAgZmxvYXQgc2hhZG93Qmx1ciA9
IHJhZGl1c1RvTGVnYWN5UmFkaXVzKGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CiAgICAgICAgIG1f
Ymx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaApp
bmRleCAxNGZkODNlZGUxYTFiYWNmMTc3ZjMzMWVjYWQxYTQzMDI5M2Y2MDNhLi40NWQwZTU4MzI5
Y2RlZWFiZmI3OGE0ZDVlNjdhYjhkODgxYWU1NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCkBAIC0zOCw4ICszOCw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
Owotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3Rh
dGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK3N0cnVjdCBEcm9wU2hhZG93OwogCiBjbGFzcyBTaGFk
b3dCbHVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFkb3dCbHVyKTsKQEAgLTUyLDcg
KzUzLDcgQEAgcHVibGljOgogCiAgICAgU2hhZG93Qmx1cigpOwogICAgIFNoYWRvd0JsdXIoY29u
c3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xv
ciYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7Ci0gICAgU2hhZG93Qmx1
cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIFNoYWRvd0JsdXIoY29uc3QgRHJv
cFNoYWRvdyYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAKICAgICB2
b2lkIHNldFNoYWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmICwg
Y29uc3QgQ29sb3ImLCBib29sIGlnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mYzZhYzEzZmQyNWM2ZjBmODAxNTg3MmZmMTllZDI4YTFmYTUyYmQ3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUJydXNoLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKGNvbnN0IENvbG9y
JiBjb2xvciwgc3RkOjpvcHRpb25hbDxCcnVzaD4mJiBicnVzaCkKKyAgICA6IG1fY29sb3IoY29s
b3IpCisgICAgLCBtX2JydXNoKFdURk1vdmUoYnJ1c2gpKQoreworfQorCitjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIFNvdXJjZUJydXNoOjpzcGFjZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEFmZmluZVRyYW5zZm9ybT4gaWRlbnRpdHk7CisgICAgcmV0dXJu
IG1fYnJ1c2ggPyBtX2JydXNoLT5zcGFjZVRyYW5zZm9ybSA6IGlkZW50aXR5LmdldCgpOworfQor
CitHcmFkaWVudCogU291cmNlQnJ1c2g6OmdyYWRpZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
YnJ1c2gpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvKiBncmFkaWVudCA9
IHN0ZDo6Z2V0X2lmPFJlZjxHcmFkaWVudD4+KCZtX2JydXNoLT5icnVzaCkpCisgICAgICAgIHJl
dHVybiBncmFkaWVudC0+cHRyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1BhdHRlcm4q
IFNvdXJjZUJydXNoOjpwYXR0ZXJuKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvKiBwYXR0ZXJuID0gc3RkOjpnZXRfaWY8
UmVmPFBhdHRlcm4+PigmbV9icnVzaC0+YnJ1c2gpKQorICAgICAgICByZXR1cm4gcGF0dGVybi0+
cHRyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgU291cmNlQnJ1c2g6OnNldEdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBz
cGFjZVRyYW5zZm9ybSkKK3sKKyAgICBtX2JydXNoID0geyBXVEZNb3ZlKGdyYWRpZW50KSwgc3Bh
Y2VUcmFuc2Zvcm0gfTsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0UGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQor
eworICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtIH07Cit9
CisKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU291
cmNlQnJ1c2gmIGJydXNoKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBicnVzaC5j
b2xvcigpKTsKKworICAgIGlmIChhdXRvIGdyYWRpZW50ID0gYnJ1c2guZ3JhZGllbnQoKSkKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJncmFkaWVudCIsIGdyYWRpZW50KTsKKworICAgIGlmIChh
dXRvIHBhdHRlcm4gPSBicnVzaC5wYXR0ZXJuKCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cGF0dGVybiIsIHBhdHRlcm4pOworCisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
b3VyY2VCcnVzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1
c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zZTI4ZDBjMzQxYjUyYTNlNjA1NDg1NzNjNGM2YzhlYzNlZGI4YWIz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnJ1c2guaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisj
aW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU291cmNlQnJ1c2ggeworcHVibGljOgorICAgIHN0cnVjdCBCcnVz
aCB7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0dGVybj4+IGJy
dXNoOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gc3BhY2VUcmFuc2Zvcm07CisKKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxC
cnVzaD4gZGVjb2RlKERlY29kZXImKTsKKyAgICB9OworCisgICAgU291cmNlQnJ1c2goKSA9IGRl
ZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgU291cmNlQnJ1c2goY29uc3QgQ29sb3ImLCBzdGQ6
Om9wdGlvbmFsPEJydXNoPiYmID0gc3RkOjpudWxsb3B0KTsKKworICAgIGNvbnN0IENvbG9yJiBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICB2b2lkIHNldENvbG9yKGNvbnN0
IENvbG9yIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQorCisgICAgY29uc3Qgc3RkOjpvcHRp
b25hbDxCcnVzaD4mIGJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9icnVzaDsgfQorCisgICAgV0VC
Q09SRV9FWFBPUlQgR3JhZGllbnQqIGdyYWRpZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgUGF0dGVybiogcGF0dGVybigpIGNvbnN0OworICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
c3BhY2VUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIHZvaWQgc2V0R3JhZGllbnQoUmVmPEdyYWRp
ZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KTsKKyAg
ICB2b2lkIHNldFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
c3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworCisgICAgYm9vbCBpc1ByaW1pdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuICFtX2JydXNoICYmIG1fY29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCk7IH0KKworICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTb3VyY2VCcnVz
aD4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBDb2xvciBtX2NvbG9yIHsgQ29s
b3I6OmJsYWNrIH07CisgICAgc3RkOjpvcHRpb25hbDxCcnVzaD4gbV9icnVzaDsKK307CisKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJl
ZjxQYXR0ZXJuPj4mIGEsIGNvbnN0IHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0
dGVybj4+JiBiKQoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGEsCisgICAgICAgIFsmXSAo
Y29uc3QgUmVmPEdyYWRpZW50PiYgYUdyYWRpZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byog
YkdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdyYWRpZW50Pj4oJmIpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBhR3JhZGllbnQgPT0gKmJHcmFkaWVudDsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8UGF0dGVybj4mIGFQYXR0
ZXJuKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYlBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8
UGF0dGVybj4+KCZiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYVBhdHRlcm4gPT0gKmJQYXR0
ZXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgKTsKK30KKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaDo6QnJ1c2gmIGEsIGNvbnN0
IFNvdXJjZUJydXNoOjpCcnVzaCYgYikKK3sKKyAgICByZXR1cm4gYS5icnVzaCA9PSBiLmJydXNo
ICYmIGEuc3BhY2VUcmFuc2Zvcm0gPT0gYi5zcGFjZVRyYW5zZm9ybTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaCYgYSwgY29uc3QgU291cmNlQnJ1c2gmIGIp
Cit7CisgICAgcmV0dXJuIGEuY29sb3IoKSA9PSBiLmNvbG9yKCkgJiYgYS5icnVzaCgpID09IGIu
YnJ1c2goKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KK3ZvaWQgU291cmNlQnJ1
c2g6OkJydXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IHNwYWNlVHJhbnNmb3JtOworICAgIFdURjo6c3dpdGNoT24oYnJ1c2gsCisgICAgICAgIFsm
XSAoY29uc3QgUmVmPEdyYWRpZW50PiYgZ3JhZGllbnQpIHsKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgdHJ1ZSA8PCBncmFkaWVudC5nZXQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25z
dCBSZWY8UGF0dGVybj4mIHBhdHRlcm4pIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgZmFsc2Ug
PDwgcGF0dGVybi5nZXQoKTsKKyAgICAgICAgfQorICAgICk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoOjpCcnVzaD4gU291cmNlQnJ1
c2g6OkJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFs
PEFmZmluZVRyYW5zZm9ybT4gc3BhY2VUcmFuc2Zvcm07CisgICAgZGVjb2RlciA+PiBzcGFjZVRy
YW5zZm9ybTsKKyAgICBpZiAoIXNwYWNlVHJhbnNmb3JtKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBoYXNHcmFkaWVudDsKKyAgICBkZWNv
ZGVyID4+IGhhc0dyYWRpZW50OworICAgIGlmICghaGFzR3JhZGllbnQpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgaWYgKCpoYXNHcmFkaWVudCkgeworICAgICAgICBh
dXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFn
cmFkaWVudCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVy
biB7IHsgV1RGTW92ZSgqZ3JhZGllbnQpLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworICAgIH0KKwor
ICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsKKyAgICBpZiAoIXBh
dHRlcm4pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyBXVEZN
b3ZlKCpwYXR0ZXJuKSwgKnNwYWNlVHJhbnNmb3JtIH0gfTsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KK3ZvaWQgU291cmNlQnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAoreworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1fYnJ1c2g7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBT
b3VyY2VCcnVzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25h
bDxDb2xvcj4gY29sb3I7CisgICAgZGVjb2RlciA+PiBjb2xvcjsKKyAgICBpZiAoIWNvbG9yKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9w
dGlvbmFsPEJydXNoPj4gYnJ1c2g7CisgICAgZGVjb2RlciA+PiBicnVzaDsKKyAgICBpZiAoIWJy
dXNoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIFNvdXJjZUJy
dXNoKCpjb2xvciwgV1RGTW92ZSgqYnJ1c2gpKTsKK30KKworV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFNvdXJjZUJydXNoJik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RleHRCb3hJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGV4dEJveEl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzdlNjhlMzhmMDIzN2IwMjIwY2Y2NWJhMmMx
MGU4ODg4ZGQ0OTg1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1RleHRCb3hJdGVyYXRvci5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZXh0UnVuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dEJveEl0
ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94SXRlcmF0b3IoKQorICAgICAgICA6IG1fdGV4
dFJ1bigwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKworICAgIFRleHRC
b3hJdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBvZmZzZXQpCisgICAg
ICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dDsgfQorICAgIHZvaWQgaW5jcmVtZW50KCkgeyBtX29mZnNldCsrOyB9CisgICAgYm9vbCBhdEVu
ZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHRSdW4gfHwgbV9vZmZzZXQgPj0gbV90ZXh0UnVuLT5s
ZW5ndGgoKTsgfQorICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoKm1fdGV4dFJ1
bilbbV9vZmZzZXRdOyB9CisgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gYXRFbmQoKSA/IFVfT1RIRVJfTkVVVFJBTCA6IHVfY2hhckRpcmVjdGlvbihjdXJyZW50
KCkpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNl
dCAmJiBtX3RleHRSdW4gPT0gb3RoZXIubV90ZXh0UnVuOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhb3Bl
cmF0b3I9PShvdGhlcik7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUZXh0UnVuKiBtX3RleHRS
dW47CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcAppbmRleCA3MjhkM2JlYTBhMTcyMzUwMTRmMGYxMmNmM2Q2ZDdkYTE5M2Mz
NWE1Li4xNWU4NDU1N2FjODFhNzY3YTAwNzQ2ZTMwMTYxNTM1NDRmMjE1NjdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAKQEAgLTE4MzQsNyArMTgzNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNp
dmVDb21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAg
ICAgIAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUo
KSk7CiAKLSAgICAgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCBjb250ZXh0KCptX2Rpc3Bs
YXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNm
b3JtKCkpOworICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1fZGlz
cGxheUxpc3QsIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CiAgICAgICAgIHBhaW50
R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNp
emUoKSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IDE1NTIzNTZhMjNhNWZk
ZmIxMGFmZWNhMmNjOTJhNzI3OTQ1ODEwMmUuLjhhZTFiNWZhOWZlZTUzMDgzNWU3ZjZhMjU3MDdj
ODQzNDE3NzA1MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtNDQ2LDE3ICs0NDYsMTYgQEAg
c3RhdGljIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhib29s
IGlzVmVydGljYWxMaW5lLCBmbG9hdAogCiBuYW1lc3BhY2UgU3RhdGUgewogCi12b2lkIHNldFN0
cm9rZVRoaWNrbmVzcyhHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBmbG9h
dCBzdHJva2VUaGlja25lc3MpCit2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhjYWlyb190KiBjciBw
bGF0Zm9ybUNvbnRleHQsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKIHsKLSAgICBjYWlyb19zZXRf
bGluZV93aWR0aChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBj
YWlyb19zZXRfbGluZV93aWR0aChjciwgc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBzZXRT
dHJva2VTdHlsZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSkKK3ZvaWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCogY3IsIFN0cm9r
ZVN0eWxlIHN0cm9rZVN0eWxlKQogewogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGFzaFBhdHRl
cm5bXSA9IHsgNS4wLCA1LjAgfTsKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRvdFBhdHRlcm5b
XSA9IHsgMS4wLCAxLjAgfTsKIAotICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNy
KCk7CiAgICAgc3dpdGNoIChzdHJva2VTdHlsZSkgewogICAgIGNhc2UgTm9TdHJva2U6CiAgICAg
ICAgIC8vIEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgd2F5IHRvIGVtdWxhdGUgTm9TdHJva2U/CkBA
IC00NzcsMjkgKzQ3NiwyOSBAQCB2b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eQogICAgIH0KIH0KIAot
dm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQordm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oY2Fpcm9fdCogY3IsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsK
LSAgICBjYWlyb19zZXRfb3BlcmF0b3IocGxhdGZvcm1Db250ZXh0LmNyKCksIHRvQ2Fpcm9PcGVy
YXRvcihjb21wb3NpdGVPcGVyYXRpb24sIGJsZW5kTW9kZSkpOworICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjciwgdG9DYWlyb09wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7
CiB9CiAKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0
Zm9ybUNvbnRleHQsIGJvb2wgZW5hYmxlKQordm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoY2Fpcm9f
dCogY3IsIGJvb2wgZW5hYmxlKQogewogICAgIC8vIFdoZW4gdHJ1ZSwgdXNlIHRoZSBkZWZhdWx0
IENhaXJvIGJhY2tlbmQgYW50aWFsaWFzIG1vZGUgKHVzdWFsbHkgdGhpcwogICAgIC8vIGVuYWJs
ZXMgc3RhbmRhcmQgJ2dyYXlzY2FsZScgYW50aWFsaWFzaW5nKTsgZmFsc2UgdG8gZXhwbGljaXRs
eSBkaXNhYmxlCiAgICAgLy8gYW50aWFsaWFzaW5nLgotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMo
cGxhdGZvcm1Db250ZXh0LmNyKCksIGVuYWJsZSA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDog
Q0FJUk9fQU5USUFMSUFTX05PTkUpOworICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY3IsIGVuYWJs
ZSA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05PTkUpOwogfQog
Ci12b2lkIHNldENUTShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqIGNyLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKICAgICBjb25zdCBjYWlyb19tYXRy
aXhfdCBtYXRyaXggPSB0b0NhaXJvTWF0cml4KHRyYW5zZm9ybSk7Ci0gICAgY2Fpcm9fc2V0X21h
dHJpeChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgJm1hdHJpeCk7CisgICAgY2Fpcm9fc2V0X21hdHJp
eChjciwgJm1hdHJpeCk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9f
dCogY3IpCiB7CiAgICAgY2Fpcm9fbWF0cml4X3QgbTsKLSAgICBjYWlyb19nZXRfbWF0cml4KHBs
YXRmb3JtQ29udGV4dC5jcigpLCAmbSk7CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwog
ICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0obS54eCwgbS55eCwgbS54eSwgbS55eSwgbS54MCwg
bS55MCk7CiB9CiAKQEAgLTYyMiw3ICs2MjEsNyBAQCBib29sIFNoYWRvd1N0YXRlOjppc1JlcXVp
cmVkKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpIGNvbnN0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxh
dGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxpbmVDYXApCit2b2lkIHNldExpbmVDYXAoY2Fpcm9fdCog
Y3IsIExpbmVDYXAgbGluZUNhcCkKIHsKICAgICBjYWlyb19saW5lX2NhcF90IGNhaXJvQ2FwIHsg
fTsKICAgICBzd2l0Y2ggKGxpbmVDYXApIHsKQEAgLTYzNiwxOCArNjM1LDE4IEBAIHZvaWQgc2V0
TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxp
bmVDYXApCiAgICAgICAgIGNhaXJvQ2FwID0gQ0FJUk9fTElORV9DQVBfU1FVQVJFOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xpbmVfY2FwKHBsYXRmb3JtQ29udGV4dC5j
cigpLCBjYWlyb0NhcCk7CisgICAgY2Fpcm9fc2V0X2xpbmVfY2FwKGNyLCBjYWlyb0NhcCk7CiB9
CiAKLXZvaWQgc2V0TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIHNldExp
bmVEYXNoKGNhaXJvX3QqIGNyLCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9m
ZnNldCkKIHsKICAgICBpZiAoc3RkOjphbGxfb2YoZGFzaGVzLmJlZ2luKCksIGRhc2hlcy5lbmQo
KSwgW10oYXV0byYgZGFzaCkgeyByZXR1cm4gIWRhc2g7IH0pKQotICAgICAgICBjYWlyb19zZXRf
ZGFzaChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgMCwgMCwgMCk7CisgICAgICAgIGNhaXJvX3NldF9k
YXNoKGNyLCAwLCAwLCAwKTsKICAgICBlbHNlCi0gICAgICAgIGNhaXJvX3NldF9kYXNoKHBsYXRm
b3JtQ29udGV4dC5jcigpLCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0
KTsKKyAgICAgICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXpl
KCksIGRhc2hPZmZzZXQpOwogfQogCi12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVKb2luIGxpbmVKb2luKQordm9pZCBzZXRMaW5lSm9p
bihjYWlyb190KiBjciwgTGluZUpvaW4gbGluZUpvaW4pCiB7CiAgICAgY2Fpcm9fbGluZV9qb2lu
X3QgY2Fpcm9Kb2luIHsgfTsKICAgICBzd2l0Y2ggKGxpbmVKb2luKSB7CkBAIC02NjEsMTIgKzY2
MCwxMiBAQCB2b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIExpbmVKb2luIGxpbmVKb2luKQogICAgICAgICBjYWlyb0pvaW4gPSBDQUlST19MSU5F
X0pPSU5fQkVWRUw7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYWlyb19zZXRfbGluZV9q
b2luKHBsYXRmb3JtQ29udGV4dC5jcigpLCBjYWlyb0pvaW4pOworICAgIGNhaXJvX3NldF9saW5l
X2pvaW4oY3IsIGNhaXJvSm9pbik7CiB9CiAKLXZvaWQgc2V0TWl0ZXJMaW1pdChHcmFwaGljc0Nv
bnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCBtaXRlckxpbWl0KQordm9pZCBzZXRN
aXRlckxpbWl0KGNhaXJvX3QqIGNyLCBmbG9hdCBtaXRlckxpbWl0KQogewotICAgIGNhaXJvX3Nl
dF9taXRlcl9saW1pdChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgbWl0ZXJMaW1pdCk7CisgICAgY2Fp
cm9fc2V0X21pdGVyX2xpbWl0KGNyLCBtaXRlckxpbWl0KTsKIH0KIAogdm9pZCBmaWxsUmVjdChH
cmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFk
b3dTdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKaW5kZXggNTQ5ODU2M2NlNDljMTVlMzVkMDgyNTljMmQy
NmRjN2IxN2NlYTg4NS4uODdlY2MyMDU4ZDRhNzVkMzNkZGQyMTJlZDg4NzdlOGQzYThhNzhlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9P
cGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmgKQEAgLTU0LDE0ICs1NCwxNCBAQCBuYW1lc3BhY2UgQ2Fpcm8gewog
CiBuYW1lc3BhY2UgU3RhdGUgewogCi12b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhHcmFwaGljc0Nv
bnRleHRDYWlybyYsIGZsb2F0KTsKLXZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mLCBTdHJva2VTdHlsZSk7Cit2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhjYWlyb190Kiwg
ZmxvYXQpOwordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiwgU3Ryb2tlU3R5bGUpOwogCi12
b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwotdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mLCBib29sKTsKK3ZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNhaXJvX3Qq
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKK3ZvaWQgc2V0U2hvdWxkQW50aWFsaWFz
KGNhaXJvX3QqLCBib29sKTsKIAotdm9pZCBzZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mKTsKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKTsKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCopOwogCiBJbnRSZWN0IGdldENs
aXBCb3VuZHMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mKTsKIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNl
UGl4ZWxzKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0Jik7CkBAIC0xMjUs
MTAgKzEyNSwxMCBAQCBzdHJ1Y3QgU2hhZG93U3RhdGUgewogICAgIENvbXBvc2l0ZU9wZXJhdG9y
IGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIg
fTsKIH07CiAKLXZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYsIExpbmVDYXAp
Owotdm9pZCBzZXRMaW5lRGFzaChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IERhc2hBcnJh
eSYsIGZsb2F0KTsKLXZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5l
Sm9pbik7Ci12b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBmbG9hdCk7
Cit2b2lkIHNldExpbmVDYXAoY2Fpcm9fdCosIExpbmVDYXApOwordm9pZCBzZXRMaW5lRGFzaChj
YWlyb190KiwgY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpOwordm9pZCBzZXRMaW5lSm9pbihjYWly
b190KiwgTGluZUpvaW4pOwordm9pZCBzZXRNaXRlckxpbWl0KGNhaXJvX3QqLCBmbG9hdCk7CiAK
IHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKIHZvaWQgZmlsbFJlY3QoR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0
IFNoYWRvd1N0YXRlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYzMyMzA0
NDUzNTFiMDNmMmFhODczNmFlZTJiY2U3OGJjNDM2MWY0OS4uODQwZDFkNGUwZTI1OWUzY2YyODYw
MzkyNGQ5MGFmM2VhZmI1YzhiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAt
ODYsMTAgKzg2LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250
ZXh0KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkg
Y29uc3QKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUo
KSBjb25zdAogewotICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU2NhbGUpOwotICAgIHJldHVybiBD
YWlybzo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBDYWly
bzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9
CiAKIEdyYXBoaWNzQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRDYWlybzo6cGxhdGZvcm1D
b250ZXh0KCkgY29uc3QKQEAgLTEzNCw1MyArMTMzLDExMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpyZXN0b3JlKCkKICAgICBjYWlyb19yZXN0b3JlKG1fY3IuZ2V0KCkpOwogfQogCi0v
LyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRl
Q2hhbmdlcygpCiB7Ci0gICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywgcmVjdCwgYm9y
ZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChhdXRvIGNoYW5nZSA6IHN0YXRlKCkuY2hhbmdlcygpKSB7CisgICAgICAg
IHN3aXRjaCAoY2hhbmdlKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6Q1RNOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0obV9jci5nZXQoKSwg
c3RhdGUoKS5nZXRDVE0oKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgICAg
IENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fY3IuZ2V0KCksIHN0ZDo6bWF4KHN0
YXRlKCkuc3Ryb2tlVGhpY2tuZXNzKCksIDAuZikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZToKKyAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9jci5nZXQoKSwgc3RhdGUo
KS5zdHJva2VTdHlsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcDoKKyAgICAgICAgICAgIENhaXJvOjpz
ZXRMaW5lQ2FwKG1fY3IuZ2V0KCksIHN0YXRlKCkubGluZUNhcCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpv
aW46CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZUpvaW4obV9jci5nZXQoKSwgc3RhdGUoKS5s
aW5lSm9pbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2g6CisgICAgICAgICAgICBDYWlybzo6c2V0TGlu
ZURhc2gobV9jci5nZXQoKSwgc3RhdGUoKS5saW5lRGFzaCgpLmRhc2hlcywgc3RhdGUoKS5saW5l
RGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQ6CisgICAgICAgICAgICBDYWlybzo6
c2V0TWl0ZXJMaW1pdChtX2NyLmdldCgpLCBzdGF0ZSgpLm1pdGVyTGltaXQoKSk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkNvbXBvc2l0ZU1vZGU6CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihtX2NyLmdldCgpLCBzdGF0ZSgpLmNvbXBvc2l0ZU1vZGUoKS5vcCwgc3RhdGUoKS5j
b21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdzoKKyAgICAgICAg
ICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgICAgICAgICAgICAg
IC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRo
IGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAgICAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhl
IGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCisg
ICAgICAgICAgICAgICAgYXV0byBkcm9wU2hhZG93ID0gdGhpcy0+ZHJvcFNoYWRvdygpOworICAg
ICAgICAgICAgICAgIGRyb3BTaGFkb3cub2Zmc2V0ID0geyBkcm9wU2hhZG93Lm9mZnNldC53aWR0
aCgpLCAtZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkgfTsKKyAgICAgICAgICAgICAgICBzZXRE
cm9wU2hhZG93KGRyb3BTaGFkb3cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRp
YWxpYXM6CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX2Ny
LmdldCgpLCBzdGF0ZSgpLnNob3VsZEFudGlhbGlhcygpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UGxhdGZvcm1J
bWFnZSgqdGhpcywgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwg
c3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0
YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgQ2Fpcm86OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoKnRoaXMsIG9wYWNpdHkpOwogfQogCi0vLyBUaGlzIGlzIG9ubHkgdXNl
ZCB0byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNob3VsZCBub3QgZHJhdyBzaGFkb3dzLgotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2Up
Ci0gICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxh
eWVyKCk7CisgICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCp0aGlzKTsKK30KIAotICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMs
IHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAgICBDYWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7CiB9
CiAKLS8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xl
cyB1c2VkIGluIGxpc3RzLgotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqdGhpcywgcmVjdCwg
c3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRo
LCBjbGlwUnVsZSk7CisgICAgQ2Fpcm86OmNsaXBQYXRoKCp0aGlzLCBwYXRoLCBjbGlwUnVsZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBD
YWlybzo6Y2xpcE91dCgqdGhpcywgcmVjdCk7Cit9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIENhaXJvOjpjbGlw
T3V0KCp0aGlzLCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCkKIHsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
YXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpKQorICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnRoaXMsIG5hdGl2ZUlt
YWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0KTsKK30KIAotICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6c3Ryb2tlUGF0aCgqdGhpcywgcGF0aCwg
Q2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBDYWlybzo6Y2xlYXJSZWN0KCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjE2
LDEyMyArMjcyLDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDCiAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9k
ZTo6Tm9ybWFsKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsaXAoKnRoaXMsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSBjbGlwUnVsZSkKLXsKLSAgICBDYWlybzo6Y2xpcFBhdGgoKnRoaXMsIHBhdGgsIGNsaXBS
dWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcygqcGxhdGZvcm1D
b250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQotewot
ICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywg
bmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSNpZiBQTEFU
Rk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKLSAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMo
KnRoaXMsIHBhdGgsIGNvbG9yKTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNF
RF9QQVJBTShvZmZzZXQpOwotICAgIHJldHVybjsKLSNlbHNlCi0gICAgQ2Fpcm86OmRyYXdGb2N1
c1JpbmcoKnRoaXMsIHBhdGgsIHdpZHRoLCBjb2xvcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0jaWYgUExBVEZPUk0oV1BFKSB8
fCBQTEFURk9STShHVEspCi0gICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCByZWN0
cywgY29sb3IpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9m
ZnNldCk7Ci0gICAgcmV0dXJuOwotI2Vsc2UKLSAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqdGhp
cywgcmVjdHMsIHdpZHRoLCBjb2xvcik7Ci0jZW5kaWYKKyAgICBDYWlybzo6ZmlsbFJvdW5kZWRS
ZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCisgICAgaWYgKCFj
b2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9y
VGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5k
ZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBDYWlybzo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQotewotICAgIFVOVVNFRF9QQVJBTShyb3VuZGlu
Z01vZGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnRo
aXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDYWlybzo6dHJhbnNsYXRlKCp0aGlzLCB4LCB5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcygqdGhpcywgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRTdHJva2VTdHlsZSgqdGhpcywgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBp
ZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5p
bmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNl
IENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1
dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG1fc3Rh
dGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5o
ZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9y
LCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91
bGRBbnRpYWxpYXMoKnRoaXMsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLXsKLSAgICBDYWlybzo6Y29uY2F0Q1RNKCp0aGlzLCB0cmFuc2Zvcm0pOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7
Ci19CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIob3BhY2l0eSk7Ci0gICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMs
IG9wYWNpdHkpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fp
cm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBH
cmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgQ2Fpcm86OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCp0aGlzKTsKLX0KKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xlYXJSZWN0KCp0aGlzLCByZWN0KTsK
KyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OmZpbGxQYXRoKCp0
aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQpAQCAtMzQxLDU4ICszMDEsNjggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwg
bGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVDYXAoTGlu
ZUNhcCBsaW5lQ2FwKQotewotICAgIENhaXJvOjpzZXRMaW5lQ2FwKCp0aGlzLCBsaW5lQ2FwKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNo
KCp0aGlzLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lSm9p
bihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBDYWlybzo6c2V0TGluZUpvaW4oKnRoaXMsIGxp
bmVKb2luKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0
cm9rZVBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0
TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKKy8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRo
IGEgc3Ryb2tlZCBib3JkZXIuCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBDYWly
bzo6c2V0TWl0ZXJMaW1pdCgqdGhpcywgbWl0ZXIpOworICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5
KCkpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZHJhd1Jl
Y3QoKnRoaXMsIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCisvLyBUaGlzIGlzIG9ubHkgdXNlZCB0
byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNob3VsZCBub3QgZHJhdyBzaGFkb3dzLgordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHBhdGgp
OwotfQorICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQorICAgICAgICByZXR1cm47
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdGF0ZShmbG9hdCByYWRpYW5zKQotewot
ICAgIENhaXJvOjpyb3RhdGUoKnRoaXMsIHJhZGlhbnMpOworICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMsIHBvaW50MSwgcG9pbnQyLCBz
dGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorLy8gVGhpcyBtZXRob2QgaXMgb25seSB1
c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgQ2Fpcm86OnNjYWxlKCp0aGlzLCBzaXplKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCp0aGlzLCByZWN0LCBzdGF0ZS5maWxsQ29s
b3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcmVjdCk7CisjaWYgUExBVEZP
Uk0oV1BFKSB8fCBQTEFURk9STShHVEspCisgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0
aGlzLCBwYXRoLCBjb2xvcik7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURf
UEFSQU0ob2Zmc2V0KTsKKyAgICByZXR1cm47CisjZWxzZQorICAgIENhaXJvOjpkcmF3Rm9jdXNS
aW5nKCp0aGlzLCBwYXRoLCB3aWR0aCwgY29sb3IpOworI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBDYWlybzo6ZmlsbFJv
dW5kZWRSZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkp
KTsKKyNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKKyAgICBUaGVtZUFkd2FpdGE6
OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRo
KTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICByZXR1cm47CisjZWxzZQorICAgIENh
aXJvOjpkcmF3Rm9jdXNSaW5nKCp0aGlzLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKKyNlbmRpZgog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIWNvbG9yLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwotICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRl
ZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqdGhpcywgbmF0aXZlSW1hZ2Uu
cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpAQCAtNDA0LDExICszNzQs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdAogICAgIENhaXJvOjpkcmF3UGF0dGVybigqdGhp
cywgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBuYXRpdmVJbWFnZS5zaXplKCks
IGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwog
fQogCi1SZW5kZXJpbmdNb2RlIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgq
cGxhdGZvcm1Db250ZXh0KCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
ZykKIHsKICAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQpAQCAtNDM4LDggKzQw
MywyNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIGZvbnRTbW9vdGhpbmcpOwog
fQogCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQorewor
ICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmRy
YXdMaW5lc0ZvclRleHQoKnRoaXMsIHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcs
IGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tlQ29sb3IpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit7CisgICAgQ2Fpcm86OmRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKnRoaXMsIHJlY3QsIHN0eWxlKTsKK30KKworRmxvYXRS
ZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0ocm91bmRpbmdNb2RlKTsKKyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKCp0aGlzLCByZWN0KTsKK30KKwogY2Fpcm9fdCogR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNyKCkgY29uc3QKIHsKKyAgICBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dENhaXJvJj4oKnRo
aXMpLmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmV0dXJuIG1fY3IuZ2V0KCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5oCmluZGV4IDU2NDYxYzE1OWE1ODNjODljNjFlOGYwMmU0ZTBi
ZWU3YjA1OTMyZWYuLjQ2MDZkYWZmY2I5M2NhYzM0ZTFjNjFkZTVhNmE1ZGRhNTBjZWQwNzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApAQCAtNTAsNjEgKzUwLDUwIEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogICAgIEdyYXBoaWNzQ29u
dGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZGlk
VXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3Rv
cmUoKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAKLSAgICB2
b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9p
bikgZmluYWw7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICB2b2lk
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7Cisg
ICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91
dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgY2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdDsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWw7Ci0gICAgdm9pZCBm
aWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsKICAgICB2b2lk
IGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworCiAgICAgdm9pZCBmaWxsUGF0aChjb25z
dCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAg
IHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBkcmF3
R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAg
dm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CiAgICAgdm9pZCBk
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7Ci0gICAg
dm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKKwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZs
b2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsK
LQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByb3Rh
dGUoZmxvYXQpIGZpbmFsOwotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7Ci0gICAg
dm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIGNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVu
Y3lMYXllcigpIGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwg
Y29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwogCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQg
Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3Qg
UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBm
aW5hbDsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAg
dm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBi
b29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5h
bDsKIAogICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE4NTZhMDQzOTNmZDI0ZTk2MjhmNmZlOTM0NjllZWJlYTRhYmI1OTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0Nv
bnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7Citw
dWJsaWM6CisgICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwgYm9v
bCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKKyAgICB7CisgICAgICAg
IGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSht
X2NvbnRleHQpOworICAgIH0KKyAgICAKKyAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCisgICAg
eworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4
dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7
CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nh
dmVBbmRSZXN0b3JlKTsKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQp
OworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJv
b2wgZGlkU2F2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9y
ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7Cisg
ICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDMyNDVjNjAwNDMxNTUy
ZDUxM2I3NGVlYmMwOWYzMThlZWMzZGQ3MmEuLmJmODBlNjRkMWZmMzNlYzk1YzI3Njc5NmJhMmI5
NmZkYmY5YmM0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0xODUsMTQgKzE4NSwxMyBAQCBzdGF0aWMgdm9pZCBzZXRDR0Js
ZW5kTW9kZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZQogfQogCiBHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRHZXRDbGlwQm91
bmRpbmdCb3goY2dDb250ZXh0KSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmluaXRpYWxDaGFuZ2VG
bGFncywgQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCkpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoY2dDb250ZXh0KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3Rh
cnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UgfSk7Ci0gICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0g
Y29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5
KHBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShj
b3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSkpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6On5H
cmFwaGljc0NvbnRleHRDRygpCkBAIC0yMDYsNiArMjA1LDE0IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB9CiAKIENHQ29udGV4dFJlZiBHcmFw
aGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICAvLyBTb21lIGNh
bGxlcnMgdG8gdGhpcyBtZXRob2QgdXNlcyB0aGUgcGxhdGZvcm0gY29udGV4dCBvdXRzaWRlIHRo
ZSBzY29wZQorICAgIC8vIG9mIHRoaXMgY2xhc3MuIENvbW1pdCBhbnkgY2hhbmdlcyBiZWZvcmUg
cmV0dXJuaW5nIHRoZSBwbGF0Zm9ybSBjb250ZXh0LgorICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3ND
b250ZXh0Q0cmPigqdGhpcykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1cm4gaW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQoKTsKK30KKworQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENH
OjppbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZGF0YS0+
bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwpAQCAt
Mzk2LDcgKzQwMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgQ0dDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29u
dGV4dCwgZGVzdFJlY3QpOwogCi0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRl
TW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9
KTsKIAogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBkZXN0UmVjdC54KCksIGRl
c3RSZWN0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShj
b250ZXh0LCAxLCAtMSk7CkBAIC01NTUsMTMgKzU2MiwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4pCisgICAgaWYgKCFzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNl
Q1RNKGNnQ29udGV4dCkpOwogCi0gICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4gPSBtX3N0YXRlLnN0
cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKKyAgICBh
dXRvIHBsYXRmb3JtUGF0dGVybiA9IHN0cm9rZVBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0
ZXJuKHVzZXJUb0Jhc2VDVE0pOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTU3NCwxMyArNTgxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFw
cGx5U3Ryb2tlUGF0dGVybigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBh
dHRlcm4oKQogewotICAgIGlmICghbV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoIWZpbGxQ
YXR0ZXJuKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9
IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCi0gICAgYXV0
byBwbGF0Zm9ybVBhdHRlcm4gPSBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4odXNlclRvQmFzZUNUTSk7CisgICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4gPSBmaWxsUGF0
dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CiAgICAgaWYgKCFw
bGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApAQCAtNTkxLDExICs1OTgsMTEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVybigpCiAgICAgQ0dDb250ZXh0
U2V0RmlsbFBhdHRlcm4oY2dDb250ZXh0LCBwbGF0Zm9ybVBhdHRlcm4uZ2V0KCksICZwYXR0ZXJu
QWxwaGEpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDR1BhdGhEcmF3aW5nTW9kZSYgbW9kZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIENHUGF0aERyYXdpbmdNb2RlJiBtb2RlKQogewotICAgIGJvb2wgc2hv
dWxkRmlsbCA9IHN0YXRlLmZpbGxQYXR0ZXJuIHx8IHN0YXRlLmZpbGxDb2xvci5pc1Zpc2libGUo
KTsKLSAgICBib29sIHNob3VsZFN0cm9rZSA9IHN0YXRlLnN0cm9rZVBhdHRlcm4gfHwgKHN0YXRl
LnN0cm9rZVN0eWxlICE9IE5vU3Ryb2tlICYmIHN0YXRlLnN0cm9rZUNvbG9yLmlzVmlzaWJsZSgp
KTsKLSAgICBib29sIHVzZUVPRmlsbCA9IHN0YXRlLmZpbGxSdWxlID09IFdpbmRSdWxlOjpFdmVu
T2RkOworICAgIGJvb2wgc2hvdWxkRmlsbCA9IGNvbnRleHQuZmlsbFBhdHRlcm4oKSB8fCBjb250
ZXh0LmZpbGxDb2xvcigpLmlzVmlzaWJsZSgpOworICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gY29u
dGV4dC5zdHJva2VQYXR0ZXJuKCkgfHwgKGNvbnRleHQuc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9r
ZSAmJiBjb250ZXh0LnN0cm9rZUNvbG9yKCkuaXNWaXNpYmxlKCkpOworICAgIGJvb2wgdXNlRU9G
aWxsID0gY29udGV4dC5maWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkOwogCiAgICAgaWYg
KHNob3VsZEZpbGwpIHsKICAgICAgICAgaWYgKHNob3VsZFN0cm9rZSkgewpAQCAtNjI0LDkgKzYz
MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7Ci0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0
ZTsKIAotICAgIGlmIChzdGF0ZS5maWxsR3JhZGllbnQgfHwgc3RhdGUuc3Ryb2tlR3JhZGllbnQp
IHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkgfHwgc3Ryb2tlR3JhZGllbnQoKSkgewogICAgICAg
ICAvLyBXZSBkb24ndCBoYXZlIGFueSBvcHRpbWl6ZWQgd2F5IHRvIGZpbGwgJiBzdHJva2UgYSBw
YXRoIHVzaW5nIGdyYWRpZW50cwogICAgICAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0
aGlzLgogICAgICAgICBmaWxsUGF0aChwYXRoKTsKQEAgLTYzNCwxMyArNjQwLDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKGZpbGxQ
YXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICBpZiAoc3RhdGUuc3Ry
b2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBseVN0cm9r
ZVBhdHRlcm4oKTsKIAogICAgIENHUGF0aERyYXdpbmdNb2RlIGRyYXdpbmdNb2RlOwotICAgIGlm
IChjYWxjdWxhdGVEcmF3aW5nTW9kZShzdGF0ZSwgZHJhd2luZ01vZGUpKSB7CisgICAgaWYgKGNh
bGN1bGF0ZURyYXdpbmdNb2RlKCp0aGlzLCBkcmF3aW5nTW9kZSkpIHsKICNpZiBIQVZFKENHX0NP
TlRFWFRfRFJBV19QQVRIX0RJUkVDVCkKICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGhEaXJlY3Qo
Y29udGV4dCwgZHJhd2luZ01vZGUsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51bGxwdHIpOwogI2Vs
c2UKQEAgLTY1OCw3ICs2NjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgeworICAgIGlmIChmaWxs
R3JhZGllbnQoKSkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIEZs
b2F0UmVjdCByZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CiAgICAgICAgICAgICBGbG9h
dFNpemUgbGF5ZXJTaXplID0gZ2V0Q1RNKCkubWFwU2l6ZShyZWN0LnNpemUoKSk7CkBAIC02NzAs
MzMgKzY3NiwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGxheWVyQ29udGV4dCwg
LXJlY3QueCgpLCAtcmVjdC55KCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGxh
eWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGxheWVyQ29udGV4dCwg
cGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5
ZXJDb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgp
KTsKIAogICAgICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQpCiAg
ICAgICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGxheWVyQ29udGV4dCk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNvbnRleHQpOwogCi0g
ICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAg
ICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogICAgICAgICAg
ICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxheWVyLmdldCgpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0
KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBh
dGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5maWxs
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0o
Y29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgICAgICAgICBpZiAoZmlsbFJ1
bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAgICAgICBDR0NvbnRleHRFT0Ns
aXAoY29udGV4dCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0
Q2xpcChjb250ZXh0KTsKIAotICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50
KCp0aGlzKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAg
ICAgIH0KIAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUuZmlsbFBh
dHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4o
KTsKICNpZiBIQVZFKENHX0NPTlRFWFRfRFJBV19QQVRIX0RJUkVDVCkKICAgICBDR0NvbnRleHRE
cmF3UGF0aERpcmVjdChjb250ZXh0LCBmaWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkID8g
a0NHUGF0aEVPRmlsbCA6IGtDR1BhdGhGaWxsLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCBudWxscHRy
KTsKQEAgLTcxNyw3ICs3MjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICBpZiAo
c3Ryb2tlR3JhZGllbnQoKSkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAg
ICAgIEZsb2F0UmVjdCByZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CiAgICAgICAgICAg
ICBmbG9hdCBsaW5lV2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKQEAgLTc0Miw4ICs3NDgsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAg
ICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGxheWVyQ29udGV4dCwgcGF0aC5wbGF0Zm9ybVBh
dGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChs
YXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNvbnRleHQpOwot
ICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRD
VE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0
cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAKICAgICAgICAgICAgIGZsb2F0
IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0LngoKSAtIGxpbmVXaWR0aCk7CiAgICAgICAgICAg
ICBmbG9hdCBkZXN0aW5hdGlvblkgPSByb3VuZGYocmVjdC55KCkgLSBsaW5lV2lkdGgpOwpAQCAt
NzU0LDEzICs3NjAsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRo
LnBsYXRmb3JtUGF0aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0
cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsK
LSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVu
dC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+
cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAg
ICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwogCiAjaWYgVVNFKENHX0NPTlRFWFRfU1RST0tFX0xJ
TkVfU0VHTUVOVFNfV0hFTl9TVFJPS0lOR19QQVRIKQpAQCAtNzg1LDcgKzc5MSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG1f
c3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgpKSB7CiAgICAgICAg
IENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICAgICAgaWYgKGhh
c1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFNpemUgbGF5ZXJTaXplID0gZ2V0Q1RNKCku
bWFwU2l6ZShyZWN0LnNpemUoKSk7CkBAIC03OTgsMjcgKzgwNCwyNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgICAgICBD
R0NvbnRleHRBZGRSZWN0KGxheWVyQ29udGV4dCwgcmVjdCk7CiAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGxheWVyQ29udGV4dCk7CiAKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShs
YXllckNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAg
ICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKICAg
ICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckluUmVjdChjb250ZXh0LCByZWN0LCBsYXllci5n
ZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0
KGNvbnRleHQsIHJlY3QpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0
ZS5maWxsR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNh
dENUTShjb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBmaWxsR3Jh
ZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkK
ICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogCiAgICAgYm9vbCBkcmF3T3duU2hhZG93ID0g
Y2FuVXNlU2hhZG93Qmx1cigpOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAg
ICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRo
Q29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBDR0Nv
bnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAg
ICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
KTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywgRmxvYXRSb3Vu
ZGVkUmVjdChyZWN0KSk7CiAgICAgfQogCkBAIC04MzcsOSArODQzLDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdP
d25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2Zm
IENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9y
bUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBj
b250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3Qp
KTsKICAgICB9CiAKQEAgLTg1Miw3ICs4NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAg
ICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAg
ICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CkBAIC04NjQsOSArODcwLDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAg
ICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dX
aXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBD
R0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAK
LSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFk
b3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywgcmVjdCk7
CiAgICAgfQogCkBAIC04NzQsNyArODgwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAg
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSA9IHJlY3QucmFkaWkoKTsKICAg
ICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExlZnQoKS53aWR0aCgpID09IHJhZGlpLnRv
cFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdodCgpLndpZHRoKCkgPT0gcmFkaWkuYm90
dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgPT0gcmFkaWku
Ym90dG9tUmlnaHQoKS53aWR0aCgpKTsKICAgICBib29sIGVxdWFsSGVpZ2h0cyA9IChyYWRpaS50
b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgpICYmIHJhZGlp
LmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50b3BSaWdodCgpLmhlaWdodCgpICYmIHJh
ZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS5oZWlnaHQoKSk7
Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gbV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0
ZS5maWxsUGF0dGVybjsKKyAgICBib29sIGhhc0N1c3RvbUZpbGwgPSBmaWxsR3JhZGllbnQoKSB8
fCBmaWxsUGF0dGVybigpOwogICAgIGlmICghaGFzQ3VzdG9tRmlsbCAmJiBlcXVhbFdpZHRocyAm
JiBlcXVhbEhlaWdodHMgJiYgcmFkaWkudG9wTGVmdCgpLndpZHRoKCkgKiAyID09IHIud2lkdGgo
KSAmJiByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKiAyID09IHIuaGVpZ2h0KCkpCiAgICAgICAg
IENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0KGNvbnRleHQsIHIpOwogICAgIGVsc2UgewpAQCAt
OTEzLDkgKzkxOSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvCiAgICAgQ0dDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3
T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywg
MCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1Np
emVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0
ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdJbnNldFNo
YWRvdygqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0KTsKICAgICB9CiAKQEAgLTkzMCw2ICs5
MzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsbwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNs
aXAocmVjdCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCk7CiAgICAgbV9kYXRhLT5jbGlwKHJlY3QpOwogfQpAQCAtOTQwLDMxICs5NDcsMzUgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
Ly8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUg
dXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8vIGhhcyBjZXJ0YWlu
IHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFu
ZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUzPgogICAgIC8vIHdlIGNhbm5vdCB1c2Ug
aXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRoZXIuCisgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0
bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRH
ZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVuZGVy
aW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYm
ICFjdG0uYygpKSk7Ci0gICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0
ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3Jt
Q29udGV4dCgpKSwgcmVjdCB9OwotICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdHMocGxhdGZvcm1Db250ZXh0KCksIHJlY3RzLCAy
KTsKLSAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOworICAgIGJvb2wgY2Fu
VXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKGNvbnRleHQpICE9IGtDR0NvbnRl
eHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsKKyAgICBDR1JlY3QgcmVjdHNbMl0gPSB7
IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0SW5maW5pdGUgOiBDR0NvbnRleHRHZXRDbGlw
Qm91bmRpbmdCb3goY29udGV4dCksIHJlY3QgfTsKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29u
dGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdHMoY29udGV4dCwgcmVjdHMsIDIpOworICAgIENH
Q29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xp
cE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9y
bUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgQ0dD
b250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRCZWdpblBh
dGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCBDR0NvbnRleHRHZXRD
bGlwQm91bmRpbmdCb3goY29udGV4dCkpOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCi0gICAg
ICAgIENHQ29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRo
KCkpOwotICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgICAgIENH
Q29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisgICAgQ0dDb250
ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0
aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKKwogICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdFplcm8pOwogICAgIGVsc2Ugewot
ICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBD
R0NvbnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsK
KyAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgICAgICBDR0NvbnRleHRB
ZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogCiAgICAgICAgIGlmIChjbGlw
UnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChj
b250ZXh0KTsKQEAgLTk3NSwxMSArOTg2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgbV9kYXRhLT5j
bGlwKHBhdGgpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpjbGlwQm91bmRzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChDR0NvbnRleHRHZXRDbGlwQm91
bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAgIEdyYXBoaWNz
Q29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKQEAgLTEwMDIsMTcgKzEw
MDgsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQog
ICAgIHJlc3RvcmUoKTsKIH0KIAotc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJv
dW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zm
c2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQorc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3Jr
YXJvdW5kSWZOZWVkZWQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHRmxvYXQmIHhPZmZzZXQsIENH
RmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0o
V0lOKQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKICAgICBVTlVTRURfUEFSQU0oeE9mZnNl
dCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAoY29udGV4dC5y
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cyhj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICBpZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29y
cmVjdFNoYWRvd09mZnNldHMoY29udGV4dCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdv
cmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81NTM5Mzg4PiBieSBlbnN1cmluZyB0aGF0IHRoZSBv
ZmZzZXRzIHdpbGwgZ2V0IHRydW5jYXRlZApAQCAtMTAzMCwxMCArMTAzMyw1NSBAQCBzdGF0aWMg
dm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgdm9pZCBzZXRDR0xp
bmVDYXAoQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVDYXAgY2FwKQogewotICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIHN3
aXRjaCAoY2FwKSB7CisgICAgY2FzZSBMaW5lQ2FwOjpCdXR0OgorICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBCdXR0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBMaW5lQ2FwOjpSb3VuZDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChjb250ZXh0
LCBrQ0dMaW5lQ2FwUm91bmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExpbmVDYXA6OlNx
dWFyZToKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChjb250ZXh0LCBrQ0dMaW5lQ2FwU3F1
YXJlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQogCitzdGF0aWMgdm9pZCBzZXRDR0xpbmVK
b2luKENHQ29udGV4dFJlZiBjb250ZXh0LCBMaW5lSm9pbiBqb2luKQoreworICAgIHN3aXRjaCAo
am9pbikgeworICAgIGNhc2UgTGluZUpvaW46Ok1pdGVyOgorICAgICAgICBDR0NvbnRleHRTZXRM
aW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pbk1pdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBMaW5lSm9pbjo6Um91bmQ6CisgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKGNvbnRl
eHQsIGtDR0xpbmVKb2luUm91bmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExpbmVKb2lu
OjpCZXZlbDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4dCwga0NHTGluZUpv
aW5CZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0Q0dN
aXRlckxpbWl0KENHQ29udGV4dFJlZiBjb250ZXh0LCBmbG9hdCBsaW1pdCkKK3sKKyAgICBDR0Nv
bnRleHRTZXRNaXRlckxpbWl0KGNvbnRleHQsIGxpbWl0KTsKK30KKworc3RhdGljIHZvaWQgc2V0
Q0dMaW5lRGFzaChDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMs
IGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CisgICAgICAg
IGZsb2F0IGxlbmd0aCA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgbGVuZ3RoICs9IHN0YXRpY19jYXN0PGZsb2F0Pihk
YXNoZXNbaV0pOworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICAgICAgZGFzaE9mZnNldCA9
IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsKKyAgICB9CisgICAgQ0dDb250ZXh0
U2V0TGluZURhc2goY29udGV4dCwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNp
emUoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHU2hhZG93KENHQ29udGV4dFJlZiBjb250ZXh0
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpCit7CiAgICAgaWYgKG9mZnNldC5pc1plcm8oKSAmJiAhYmx1cikgewogICAgICAgICBDR0Nv
bnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTEwNDUsNyArMTA5Myw3IEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUm
CiAgICAgQ0dGbG9hdCB5T2Zmc2V0ID0gb2Zmc2V0LmhlaWdodCgpOwogICAgIENHRmxvYXQgYmx1
clJhZGl1cyA9IGJsdXI7CiAKLSAgICBpZiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKSB7CisgICAgaWYgKCFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewogICAg
ICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gZ2V0VXNlclRvQmFzZUNUTShj
b250ZXh0KTsKIAogICAgICAgICBDR0Zsb2F0IEEgPSB1c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9C
YXNlQ1RNLmEgKyB1c2VyVG9CYXNlQ1RNLmIgKiB1c2VyVG9CYXNlQ1RNLmI7CkBAIC0xMDY2LDcg
KzExMTQsOCBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJgogICAgIC8vIEV4dHJlbWUgImJsdXIi
IHZhbHVlcyBjYW4gbWFrZSB0ZXh0IGRyYXdpbmcgY3Jhc2ggb3IgdGFrZSBjcmF6eSBsb25nIHRp
bWVzLCBzbyBjbGFtcAogICAgIGJsdXJSYWRpdXMgPSBzdGQ6Om1pbihibHVyUmFkaXVzLCBuYXJy
b3dQcmVjaXNpb25Ub0NHRmxvYXQoMTAwMC4wKSk7CiAKLSAgICBhcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOworICAg
IGlmIChyZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQorICAgICAg
ICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb250ZXh0LCB4T2Zmc2V0LCB5
T2Zmc2V0KTsKIAogICAgIC8vIENoZWNrIGZvciBhbiBpbnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1l
YW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0IGZvciB0aGUgc2hhZG93CiAgICAgLy8gYW5k
IHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2UgdGhlIGRlZmF1bHQgc2hhZG93IGNvbG9yLgpA
QCAtMTA3Niw0NCArMTEyNSw4MSBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJgogICAgICAgICBD
R0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplTWFrZSh4T2Zmc2V0LCB5
T2Zmc2V0KSwgYmx1clJhZGl1cywgY2FjaGVkQ0dDb2xvcihjb2xvcikuZ2V0KCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZs
YWdzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdGF0ZUNoYW5nZXMoKQogewotICAg
IGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmICghc3RhdGUoKS5jaGFu
Z2VzKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0
U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgMC5m
KSk7CisgICAgYXV0byBjb250ZXh0ID0gaW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKTsKIAotICAg
IGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBj
YWNoZWRDR0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKS5nZXQoKSk7CisgICAgZm9yIChhdXRvIGNo
YW5nZSA6IHN0YXRlKCkuY2hhbmdlcygpKSB7CisgICAgICAgIHN3aXRjaCAoY2hhbmdlKSB7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q1RNOgorICAgICAgICAg
ICAgQ0dDb250ZXh0U2V0Q1RNKGNvbnRleHQsIHN0YXRlKCkuZ2V0Q1RNKCkpOworICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0YXRl
LmZpbGxDb2xvcik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
RmlsbEJydXNoOgorICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUoKS5m
aWxsQnJ1c2goKS5jb2xvcigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIENH
Q29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlLmFscGhhKTsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3M6CisgICAgICAgICAgICBD
R0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3RkOjptYXgoc3RhdGUoKS5zdHJva2VUaGlj
a25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250
YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpCi0gICAgICAgIHNldENH
QmxlbmRNb2RlKGNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1v
ZGUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJy
dXNoOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4
dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZSgpLnN0cm9rZUJydXNoKCkuY29sb3IoKSkuZ2V0KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldFRl
eHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9kZShzdGF0ZS50ZXh0RHJhd2lu
Z01vZGUpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5l
Q2FwOgorICAgICAgICAgICAgc2V0Q0dMaW5lQ2FwKGNvbnRleHQsIHN0YXRlKCkubGluZUNhcCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRT
ZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjoKKyAgICAgICAg
ICAgIHNldENHTGluZUpvaW4oY29udGV4dCwgc3RhdGUoKS5saW5lSm9pbigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNt
b290aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaDoKKyAgICAgICAgICAgIHNl
dENHTGluZURhc2goY29udGV4dCwgc3RhdGUoKS5saW5lRGFzaCgpLmRhc2hlcywgc3RhdGUoKS5s
aW5lRGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNo
YW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQs
IGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkp
OworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQ6
CisgICAgICAgICAgICBzZXRDR01pdGVyTGltaXQoY29udGV4dCwgc3RhdGUoKS5taXRlckxpbWl0
KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCi0gICAgICAgIHNldENHU2hhZG93KCp0aGlz
LCBzdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dD
b2xvcik7Ci19CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29t
cG9zaXRlTW9kZToKKyAgICAgICAgICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQsIHN0YXRlKCku
Y29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbiwgc3RhdGUoKS5jb21wb3NpdGVNb2RlKCkuYmxlbmRN
b2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRN
aXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQocGxh
dGZvcm1Db250ZXh0KCksIGxpbWl0KTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAgICAgICAgc2V0Q0dTaGFkb3coY29udGV4dCwg
cmVuZGVyaW5nTW9kZSgpLCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5vZmZzZXQsIHN0YXRlKCkuZHJv
cFNoYWRvdygpLmJsdXJSYWRpdXMsIHN0YXRlKCkuZHJvcFNoYWRvdygpLmNvbG9yLCBzdGF0ZSgp
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYToKKyAgICAgICAgICAg
IENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlKCkuYWxwaGEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Oklt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHk6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBv
bGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5KHN0YXRlKCkuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlRleHREcmF3aW5nTW9kZToKKyAg
ICAgICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3
aW5nTW9kZShzdGF0ZSgpLnRleHREcmF3aW5nTW9kZSgpKSk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlh
bGlhczoKKyAgICAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBz
dGF0ZSgpLnNob3VsZEFudGlhbGlhcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHM6Cisg
ICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250ZXh0LCBzdGF0ZSgp
LnNob3VsZFNtb290aEZvbnRzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZGlkQXBw
bHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTExMjUsNyArMTIxMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lk
dGgpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAot
ICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKHN0cm9rZUdyYWRpZW50
KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBjb25zdCBmbG9h
dCBkb3VibGVMaW5lV2lkdGggPSBsaW5lV2lkdGggKiAyOwogICAgICAgICAgICAgZmxvYXQgYWRq
dXN0ZWRXaWR0aCA9IGNlaWxmKHJlY3Qud2lkdGgoKSArIGRvdWJsZUxpbmVXaWR0aCk7CkBAIC0x
MTM1LDcgKzEyMjEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICAgICAgYXV0byBsYXll
ciA9IGFkb3B0Q0YoQ0dMYXllckNyZWF0ZVdpdGhDb250ZXh0KGNvbnRleHQsIGxheWVyU2l6ZSwg
MCkpOwogCiAgICAgICAgICAgICBDR0NvbnRleHRSZWYgbGF5ZXJDb250ZXh0ID0gQ0dMYXllckdl
dENvbnRleHQobGF5ZXIuZ2V0KCkpOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VUaGlja25l
c3MgPSBsaW5lV2lkdGg7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgobGF5ZXJD
b250ZXh0LCBsaW5lV2lkdGgpOwogCiAgICAgICAgICAgICAvLyBDb21wZW5zYXRlIGZvciB0aGUg
bGluZSB3aWR0aCwgb3RoZXJ3aXNlIHRoZSBsYXllcidzIHRvcC1sZWZ0IGNvcm5lciB3b3VsZCBi
ZQpAQCAtMTE0OSw4ICsxMjM0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIENH
Q29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENHQ29udGV4
dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBD
R0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRD
VE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwot
ICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsK
KyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIHN0cm9rZVNwYWNl
VHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJD
b250ZXh0KTsKIAogICAgICAgICAgICAgY29uc3QgZmxvYXQgZGVzdGluYXRpb25YID0gcm91bmRm
KHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0
aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0aCk7CkBAIC0xMTYxLDEzICsxMjQ2LDEz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRl
eHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBh
dGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAg
ICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRT
cGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWlu
dCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgc3Ryb2tl
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludCgq
dGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0
YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBw
bHlTdHJva2VQYXR0ZXJuKCk7CiAKICAgICAvLyBVc2luZyBDR0NvbnRleHRBZGRSZWN0IGFuZCBD
R0NvbnRleHRTdHJva2VQYXRoIHRvIHN0cm9rZSByZWN0IHJhdGhlciB0aGFuCkBAIC0xMTgyLDk0
ICsxMjY3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNv
bnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKExpbmVDYXAg
Y2FwKQotewotICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAgY2FzZSBMaW5lQ2FwOjpCdXR0OgotICAg
ICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwQnV0
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6Um91bmQ6Ci0gICAgICAgIENH
Q29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBSb3VuZCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6U3F1YXJlOgotICAgICAgICBDR0NvbnRl
eHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwU3F1YXJlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBpZiAo
ZGFzaE9mZnNldCA8IDApIHsKLSAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBsZW5n
dGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tpXSk7Ci0gICAgICAgIGlmIChsZW5ndGgp
Ci0gICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVu
Z3RoOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwg
ZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0gICAgc3dpdGNo
IChqb2luKSB7Ci0gICAgY2FzZSBMaW5lSm9pbjo6TWl0ZXI6Ci0gICAgICAgIENHQ29udGV4dFNl
dExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pbk1pdGVyKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6Ci0gICAgICAgIENHQ29udGV4dFNldExp
bmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pblJvdW5kKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVK
b2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pbkJldmVsKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzY2FsZShjb25zdCBGbG9hdFNp
emUmIHNpemUpCi17Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9kYXRhLT5zY2FsZShzaXplKTsKLSAg
ICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxz
ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKGZsb2F0IGFuZ2xlKQotewot
ICAgIENHQ29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgYW5nbGUpOwotICAgIG1f
ZGF0YS0+cm90YXRlKGFuZ2xlKTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKLSAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsK
LSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBm
YWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENHQ29udGV4dENvbmNhdENUTShwbGF0Zm9y
bUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0p
OwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9
IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dDb250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29u
dGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7
Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNKEluY2x1ZGVE
ZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIENUTSB1c3VhbGx5
IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0
aGUKLSAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFj
dG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgotICAgIC8vIGxldmVsLiBUbyBndWFyYW50ZWUg
dGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNlIHRoaXMgQ0cgQVBJLgotICAg
IGlmIChpbmNsdWRlU2NhbGUgPT0gRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkKLSAgICAg
ICAgcmV0dXJuIENHQ29udGV4dEdldFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxh
dGZvcm1Db250ZXh0KCkpOwotCi0gICAgcmV0dXJuIENHQ29udGV4dEdldENUTShwbGF0Zm9ybUNv
bnRleHQoKSk7Ci19Ci0KIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUp
CiB7CiAgICAgLy8gSXQgaXMgbm90IGVub3VnaCBqdXN0IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBk
ZXZpY2Ugc3BhY2UuIFRoZSByb3RhdGlvbiBwYXJ0IG9mIHRoZQpAQCAtMTI4MCw3ICsxMjc3LDkg
QEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmcKICAgICBpZiAobV9kYXRhLT5tX3VzZXJUb0Rldmlj
ZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5KQogICAgICAgICByZXR1cm4gcm91bmRlZEludFJl
Y3QocmVjdCk7CiAKLSAgICBDR0FmZmluZVRyYW5zZm9ybSBkZXZpY2VNYXRyaXggPSBDR0NvbnRl
eHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3JtKHBsYXRmb3JtQ29udGV4dCgpKTsK
KyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworCisgICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZp
Y2VTcGFjZVRyYW5zZm9ybShjb250ZXh0KTsKICAgICBpZiAoQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lk
ZW50aXR5KGRldmljZU1hdHJpeCkpIHsKICAgICAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRy
YW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHJvdW5kZWRJ
bnRSZWN0KHJlY3QpOwpAQCAtMTMxOSw2ICsxMzE4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tu
ZXMKICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3IgbG9jYWxTdHJv
a2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAogICAgIEZsb2F0UmVjdCBib3VuZHMgPSBjb21wdXRl
TGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEZsb2F0UmVjdChwb2ludCwgRmxv
YXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykpLCBwcmludGluZywgbG9jYWxTdHJva2VD
b2xvcik7CkBAIC0xMzY0LDEyICsxMzY0LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAg
ICAgfQogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1YWxUb1N0cm9rZUNvbG9yKQotICAgICAg
ICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgbG9jYWxTdHJva2VDb2xvcik7Cisg
ICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGxvY2FsU3Ryb2tlQ29sb3IpOwogCi0gICAg
Q0dDb250ZXh0RmlsbFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCBkYXNoQm91bmRzLmRhdGEoKSwg
ZGFzaEJvdW5kcy5zaXplKCkpOworICAgIENHQ29udGV4dEZpbGxSZWN0cyhjb250ZXh0LCBkYXNo
Qm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkpOwogCiAgICAgaWYgKGZpbGxDb2xvcklz
Tm90RXF1YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNv
bnRleHQoKSwgZmlsbENvbG9yKCkpOworICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBm
aWxsQ29sb3IoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldFVSTEZvclJlY3Qo
Y29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpAQCAtMTQxMiwxNyAr
MTQxMiwxOCBAQCBSZW5kZXJpbmdNb2RlIEdyYXBoaWNzQ29udGV4dENHOjpyZW5kZXJpbmdNb2Rl
KCkgY29uc3QKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURl
dmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgLy8gQ29yZUdyYXBoaWNzIGV4cGVjdHMg
dGhlIGJhc2UgQ1RNIG9mIGEgSGlEUEkgY29udGV4dCB0byBoYXZlIHRoZSBzY2FsZSBmYWN0b3Ig
YXBwbGllZCB0byBpdC4KICAgICAvLyBGYWlsaW5nIHRvIGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBD
VE0gd2lsbCBjYXVzZSBjZXJ0YWluIENHIGZlYXR1cmVzLCBzdWNoIGFzIGZvY3VzIHJpbmdzLAog
ICAgIC8vIHRvIGRyYXcgd2l0aCBhIHNjYWxlIGZhY3RvciBvZiAxIHJhdGhlciB0aGFuIHRoZSBh
Y3R1YWwgc2NhbGUgZmFjdG9yLgotICAgIENHQ29udGV4dFNldEJhc2VDVE0ocGxhdGZvcm1Db250
ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShwbGF0Zm9y
bUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAg
IENHQ29udGV4dFNldEJhc2VDVE0oY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0Nv
bnRleHRHZXRCYXNlQ1RNKGNvbnRleHQpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVG
YWN0b3IpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKQogewogICAgIC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0
IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgpIHx8IGZp
bGxQYXR0ZXJuKCkpIHsKICAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xNDM0LDcgKzE0MzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsK
ICAgICAvLyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQg
Y29sb3JzLgotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tl
UGF0dGVybikgeworICAgIGlmIChzdHJva2VHcmFkaWVudCgpIHx8IHN0cm9rZVBhdHRlcm4oKSkg
ewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTQ2OCw5ICsxNDY5LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFk
ZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pCiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0Q0c6OmNhblVzZVNoYWRvd0JsdXIoKSBjb25zdAogewotICAg
IHJldHVybiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
ICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsKKyAgICByZXR1cm4gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCk7CiB9CiAKLX0KIAotI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCA0NjhhNDRiYWE4NmVlNTI2MTlkMjU1ZjkzOTQz
YTk3NTViYWM5ZmFiLi5mOTljM2Q5YjliZDI4MjU4NjVmZGY3ZWE4MGIyYWYwMGUzNGI1MmRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDEwLCAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTMgKzI1LDEzIEBACiAKICNwcmFn
bWEgb25jZQogCisjaWYgVVNFKENHKQorCiAjaW5jbHVkZSAiQ29sb3JTcGFjZUNHLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0dBZmZp
bmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShDR0NvbnRleHRSZWYpOwotCi1jbGFzcyBDR0Nv
bnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAgICBDR0NvbnRleHRTdGF0ZVNhdmVyKENHQ29u
dGV4dFJlZiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKLSAgICAgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0
b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBD
R0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgfQotICAgIAotICAgIH5DR0NvbnRl
eHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAg
ICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3Jl
KTsKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOwotICAgICAgICBtX3Nh
dmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3RvcmUoKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRTYXZlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQ0dDb250
ZXh0UmVmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Ci19OwotCiBjbGFz
cyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRDRyA6IHB1YmxpYyBHcmFwaGljc0NvbnRl
eHQgewogcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFJlZik7CkBAIC04
NSw2OSArNDUsNDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29u
c3QgZmluYWw7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFs
OwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWw7Cisg
ICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgdm9p
ZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRD
b250ZXh0KGJvb2wpIGZpbmFsOwogCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCBy
ZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogICAg
IHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0
ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAg
dm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7
CiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsK
IAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7Ci0gICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBs
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQg
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQg
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwotCi0gICAgdm9pZCBmaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotCi0gICAgdm9pZCBzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgp
IGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBm
aW5hbDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CisgICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCiAgICAgdm9pZCBjbGlwKGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKLQotICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7Ci0KICAgICB2b2lk
IGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5h
bDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwog
Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCBz
ZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7
CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4
dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2
b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgdm9pZCB0cmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0g
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7
CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CisgICAgdm9pZCBkcmF3
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKQEAgLTE1NiwxOCArOTUsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CiAKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsK
ICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNv
bnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBzZXREZXN0aW5h
dGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
LSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKIAog
ICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lk
IGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIHZvaWQgc2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgc2V0RGVz
dGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuVXNlU2hhZG93
Qmx1cigpIGNvbnN0OwogCkBAIC0xNzUsOSArMTE3LDE2IEBAIHB1YmxpYzoKICAgICBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0
IGZpbmFsOwogI2VuZGlmCiAKKyAgICBDR0NvbnRleHRSZWYgaW50ZXJuYWxQbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKIH07CiAKLX0KK0NHQWZmaW5lVHJhbnNmb3JtIGdldFVz
ZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
aW5jbHVkZSAiQ0dDb250ZXh0U3RhdGVTYXZlci5oIgogCisjZW5kaWYgLy8gVVNFKENHKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmNwcAppbmRleCBlNmNlMmZiOTcyNDdhNmI4NmMwOWIxYWQzNjE3MDFjMmVjM2U4NjI1
Li5hZjAwYTAxMzM0N2UwY2Q4NWEzMGI4ODRlYmM3OWYzMmYxZTIzMTJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgUERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJh
bWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hCiAKICAgICAv
LyBPbGQgYW5kIG5ldyBjb250ZXh0IHNjYWxpbmcgZmFjdG9ycyBoYXZlIHRvIG1hdGNoIGFzIHdl
bGwuCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHJhbnNm
b3JtOwotICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1
ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zvcm0pOworICAgIGNvbnRl
eHQuZ2V0Q1RNKCkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zvcm0pOwogCiAgICAgQWZmaW5l
VHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBjYWNoZWREZWNvbXBvc2VkVHJhbnNmb3JtOwogICAg
IG1fY2FjaGVkVHJhbnNmb3JtLmRlY29tcG9zZShjYWNoZWREZWNvbXBvc2VkVHJhbnNmb3JtKTsK
QEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZElt
YWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgIHRyYW5zZm9y
bUNvbnRleHRGb3JQYWludGluZyhidWZmZXJDb250ZXh0LCBkc3RSZWN0LCBGbG9hdFJlY3QobV9j
YWNoZWRJbWFnZVJlY3QubG9jYXRpb24oKSwgc3JjUmVjdC5zaXplKCkpKTsKICAgICBkcmF3UERG
UGFnZShidWZmZXJDb250ZXh0KTsKIAotICAgIG1fY2FjaGVkVHJhbnNmb3JtID0gY29udGV4dC5n
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAg
ICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7CiAgICAgbV9jYWNoZWREZXN0
aW5hdGlvblJlY3QgPSBkc3RSZWN0OwogICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7
CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CkBAIC0zNjMsNiArMzYzLDggQEAgdm9p
ZCBQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtbV9jcm9wQm94LmxvY2F0aW9uKCkpOwogCisgICAg
Y29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgLy8gQ0dQREYgcGFnZXMgYXJlIGlu
ZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIENHQ29udGV4dERyYXdQREZQ
YWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIENHUERGRG9jdW1l
bnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4IGQ2ODlhNTFhODkxMDJh
NTA5MDQ1NTliNDQyMjM2OWRlMTQ3MDMzMzUuLmZkZWVmNmIzOGQwYzViNTU1NjczN2ViN2Y0NGFm
MmYyZmM5YTQ0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAg
ICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIHN0cm9r
ZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgYm9vbCBoaXRTdWNjZXNzID0g
Q0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9pbnQsIGtDR1BhdGhTdHJva2Up
OworICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhDb250YWluc1BvaW50KGdyYXBo
aWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIGtDR1BhdGhTdHJva2UpOwogICAg
IENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAKICAgICByZXR1cm4gaGl0U3VjY2Vz
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBl
ZmJjMWU0OTU0NDFiZWRlNzM0ZTk0OGRkMjZkMzcxNDQxNjU1M2UwLi5lOWI3YWM0ZDdmNGNiZjc0
MTI4OTM5YmZhOGMwNGU3NjVhMGRiZDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1Jl
Y29yZGVyQ29yZVRleHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogCi0jaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNs
dWRlICJGb250LmgiCkBAIC0zNSw0OSArMzQsNDEgQEAKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKLQogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0
U1BJV2luLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgQ0dDb250
ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwg
Q0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJl
Y3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCitzdGF0aWMgQ0dDb250
ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwg
Q0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QsIENGRGljdGlv
bmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVy
JiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHRE
ZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmRCZWdpbkxheWVy
KHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsKKyAgICByZWNvcmRlci5yZWNvcmRCZWdpbkxheWVyKGdz
dGF0ZSk7CiAgICAgcmV0dXJuIGRlbGVnYXRlOwogfQogCi1zdGF0aWMgQ0dDb250ZXh0RGVsZWdh
dGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5n
U3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCitzdGF0aWMgQ0dDb250ZXh0RGVs
ZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVy
aW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKICAgICBEcmF3R2x5cGhzUmVjb3Jk
ZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4
dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29yZEVuZExheWVy
KHJzdGF0ZSwgZ3N0YXRlKTsKKyAgICByZWNvcmRlci5yZWNvcmRFbmRMYXllcihnc3RhdGUpOwog
ICAgIHJldHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHRXJyb3IgZHJhd0dseXBocyhDR0Nv
bnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENH
R1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qIHRtLCBjb25zdCBDR0ds
eXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCitz
dGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBD
R1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHQWZmaW5lVHJh
bnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNb
XSwgc2l6ZV90IGNvdW50KQogewotICAgIGlmIChDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkgPiAw
KSB7Ci0gICAgICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8
RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7
Ci0gICAgICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlwaHMocnN0YXRlLCBnc3RhdGUsIHRtLCBn
bHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwotICAgIH0KKyAgICBEcmF3R2x5cGhzUmVjb3JkZXIm
IHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERl
bGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOworICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlwaHMo
Z3N0YXRlLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwogICAgIHJldHVybiBrQ0dFcnJvclN1
Y2Nlc3M7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShDR0NvbnRleHREZWxlZ2F0ZVJl
ZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0
ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2UpCitzdGF0aWMgQ0dFcnJvciBkcmF3SW1h
Z2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYsIENH
R1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2UpCiB7CiAgICAg
RHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVj
b3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRl
ci5yZWNvcmREcmF3SW1hZ2UocnN0YXRlLCBnc3RhdGUsIHJlY3QsIGltYWdlKTsKKyAgICByZWNv
cmRlci5yZWNvcmREcmF3SW1hZ2UoZ3N0YXRlLCByZWN0LCBpbWFnZSk7CiAgICAgcmV0dXJuIGtD
R0Vycm9yU3VjY2VzczsKIH0KIAotVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQorc3RhdGljIFVuaXF1ZVJlZjxHcmFw
aGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFsQ29udGV4dChEcmF3R2x5cGhzUmVjb3JkZXImIHJl
Y29yZGVyKQogewotICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHRE
ZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7CisgICAgYXV0byBjb250ZXh0RGVsZWdhdGUgPSBhZG9wdENG
KENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKCZyZWNvcmRlcikpOwogICAgIENHQ29udGV4dERlbGVn
YXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZUJlZ2luTGF5ZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmJlZ2luTGF5ZXIpKTsKICAg
ICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVF
bmRMYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmZW5k
TGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0
ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRl
Q2FsbGJhY2s+KCZXZWJDb3JlOjpkcmF3R2x5cGhzKSk7CkBAIC04Niw2NyArNzcsMTUgQEAgVW5p
cXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5h
bENvbnRleHQoKQogICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENHPihj
b250ZXh0LmdldCgpKTsKIH0KIAotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3Jk
ZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3Ry
dWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0IGRlcml2ZUZvbnRGcm9tQ29udGV4
dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNS
ZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1Y3RE
cmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0IGRl
cml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25Db250ZXh0KGRlc3RpbmF0
aW9uQ29udGV4dCkKICAgICAsIG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzKGRlY29uc3RydWN0RHJh
d0dseXBocykKICAgICAsIG1fZGVyaXZlRm9udEZyb21Db250ZXh0KGRlcml2ZUZvbnRGcm9tQ29u
dGV4dCkKLSAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4dCgpKQor
ICAgICwgbV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50ZXJuYWxDb250ZXh0KCp0aGlzKSkKIHsK
IH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQotewotICAgIG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUuY29sb3IgPSBjb250ZXh0U3RhdGUuZmlsbENvbG9yOwotICAgIG1fb3Jp
Z2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQgPSBjb250ZXh0U3RhdGUuZmlsbEdyYWRpZW50
OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9
IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUuZmlsbFBhdHRlcm47Ci0KLSAg
ICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IgPSBjb250ZXh0U3RhdGUuc3Ryb2tl
Q29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50ID0gY29udGV4
dFN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5n
cmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VU
cmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4gPSBjb250
ZXh0U3RhdGUuc3Ryb2tlUGF0dGVybjsKLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5jdG0gPSBtX293
bmVyLmdldENUTSgpOyAvLyBGSVhNRTogRGVhbCB3aXRoIGJhc2UgQ1RNLgotCi0gICAgbV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBjb250ZXh0U3RhdGUuc2hhZG93T2Zmc2V0OwotICAg
IG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciA9IGNvbnRleHRTdGF0ZS5zaGFkb3dCbHVyOwot
ICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IgPSBjb250ZXh0U3RhdGUuc2hhZG93Q29s
b3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gY29udGV4
dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotCi0gICAgbV9jdXJyZW50U3RhdGUgPSBt
X29yaWdpbmFsU3RhdGU7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUlu
dGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQot
ewotICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAg
ICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmls
bFN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdy
YWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbEdyYWRpZW50KCptX29y
aWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxl
LmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICAgICAgaWYgKG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5z
ZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICB9
Ci0KLSAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yLmlzVmFsaWQoKSkK
LSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0
ZS5zdHJva2VTdHlsZS5jb2xvcik7Ci0gICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlR3Jh
ZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVsc2UgewotICAg
ICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgICAg
ICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBt
X2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0o
bV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1z
KTsKLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsKLQotICAgIG1faW50
ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5n
TW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250KGNvbnN0IEZvbnQmIGZvbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgQVNTRVJUKENHQWZmaW5l
VHJhbnNmb3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRyaXgoZm9udC5wbGF0Zm9ybURhdGEoKS5j
dEZvbnQoKSkpKTsKIApAQCAtMTU2LDEwNCArOTUsMzggQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYgZm9udCwgRm9udFNtb290aGlu
Z00KICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVPdmVyYWxsVGV4dE1hdHJpeChm
b250KTsKICAgICBpZiAoZm9udC5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRP
cmllbnRhdGlvbjo6VmVydGljYWwpCiAgICAgICAgIG1fb3JpZ2luYWxUZXh0TWF0cml4ID0gY29t
cHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCBtX29yaWdpbmFsVGV4dE1hdHJpeCk7Ci0KLSAg
ICBhdXRvJiBjb250ZXh0U3RhdGUgPSBtX293bmVyLnN0YXRlKCk7Ci0gICAgcG9wdWxhdGVJbnRl
cm5hbFN0YXRlKGNvbnRleHRTdGF0ZSk7Ci0gICAgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29u
dGV4dFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmNvbmNsdWRlSW50ZXJu
YWxDb250ZXh0KCkKK0dyYXBoaWNzQ29udGV4dFN0YXRlIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJl
cGFyZUludGVybmFsQ29udGV4dCgpCiB7Ci0gICAgdXBkYXRlQ1RNKG1fb3JpZ2luYWxTdGF0ZS5j
dG0pOwotICAgIHVwZGF0ZUZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9y
LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LmdldCgpLCBtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0ZVN0cm9rZUNvbG9yKG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmdyYWRpZW50LmdldCgpLCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybi5nZXQo
KSk7Ci0gICAgdXBkYXRlU2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29y
aWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA/IFNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOjpZZXMgOiBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6Tm8pOworICAgIGF1dG8gb3Jp
Z2luYWxTdGF0ZSA9IG1fZGVzdGluYXRpb25Db250ZXh0LnN0YXRlKCk7CisgICAgbV9pbnRlcm5h
bENvbnRleHQtPm1lcmdlU3RhdGVEaWZmcyhvcmlnaW5hbFN0YXRlKTsKKyAgICBtX2ludGVybmFs
Q29udGV4dC0+YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1cm4gb3JpZ2luYWxTdGF0ZTsK
IH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcihjb25zdCBDb2xv
ciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVybikK
K3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKQogewotICAgIC8vIFRoaXMgY2hl
Y2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNl
LgotICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdo
aWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50
ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwg
d2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29s
b3IgPT0gbV9jdXJyZW50U3RhdGUuZmlsbFN0eWxlLmNvbG9yKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBuZXdTdGF0ZS5maWxsQ29s
b3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3JhZGllbnQpCi0gICAgICAgIG5ld1N0YXRlLmZp
bGxHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBu
ZXdTdGF0ZS5maWxsUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAgbV9vd25lci5kaWRVcGRhdGVT
dGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlIH0p
OwotICAgIG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworICAgIG1f
ZGVzdGluYXRpb25Db250ZXh0Lm1lcmdlU3RhdGVEaWZmcyhvcmlnaW5hbFN0YXRlKTsKIH0KIAot
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBu
ZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJuKiBuZXdQYXR0ZXJuKQordm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dHU3RhdGVSZWYgZ3N0YXRl
KQogewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0
LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlz
IHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgot
ICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hh
dCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9y
IHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29s
b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRl
OwotICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9yID0gbmV3Q29sb3I7Ci0gICAgaWYgKG5ld0dyYWRp
ZW50KQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAg
IGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VQYXR0ZXJuID0gbmV3UGF0
dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0YXRlLCB7IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zdHJv
a2VTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENU
TSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkpOwogfQogCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3Rt
KQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVuZExheWVyKENHR1N0YXRlUmVmIGdz
dGF0ZSkKIHsKLSAgICBpZiAoY3RtID09IG1fY3VycmVudFN0YXRlLmN0bSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9vd25lci5zZXRDVE0oY3RtKTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5jdG0g
PSBjdG07CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShn
c3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigp
OwogfQogCi1zdGF0aWMgYm9vbCBzaGFkb3dJc0NsZWFyZWQoY29uc3QgRmxvYXRTaXplJiBzaGFk
b3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIpCi17Ci0gICAgcmV0dXJuIHNoYWRvd09mZnNldCA9
PSBGbG9hdFNpemUoKSAmJiAhc2hhZG93Qmx1cjsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hh
ZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNv
bnNpZGVyIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGlmIG5vYm9keSBoYXMgYW55IHNoYWRvd3Mu
Ci0gICAgaWYgKHNoYWRvd0lzQ2xlYXJlZChzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIpICYmIHNo
YWRvd0lzQ2xlYXJlZChtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX2N1cnJlbnRTdGF0
ZS5zaGFkb3cuYmx1cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlIG5ld1N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IHN0YXRlQ2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc2hhZG93T2Zmc2V0ICE9IG1fY3VycmVudFN0
YXRlLnNoYWRvdy5vZmZzZXQgfHwgc2hhZG93Qmx1ciAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cu
Ymx1ciB8fCBzaGFkb3dDb2xvciAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuY29sb3IpIHsKLSAg
ICAgICAgbmV3U3RhdGUuc2hhZG93T2Zmc2V0ID0gc2hhZG93T2Zmc2V0OwotICAgICAgICBuZXdT
dGF0ZS5zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93Q29s
b3IgPSBzaGFkb3dDb2xvcjsKLSAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Ci0gICAgfQotICAgIGlmIChzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyAhPSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6VW5zcGVjaWZpZWQgJiYgKHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpICE9
IG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIG5ld1N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09
IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotICAgICAgICBzdGF0ZUNoYW5nZUZsYWdz
LmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2Up
OwotICAgIH0KLSAgICBpZiAoc3RhdGVDaGFuZ2VGbGFncy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0YXRlLCBzdGF0ZUNoYW5nZUZs
YWdzKTsKLQotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBzaGFkb3dPZmZzZXQ7
Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgPSBzaGFkb3dCbHVyOwotICAgIG1fY3Vy
cmVudFN0YXRlLnNoYWRvdy5jb2xvciA9IHNoYWRvd0NvbG9yOwotICAgIG1fY3VycmVudFN0YXRl
LnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUpCitzdGF0aWMgdm9pZCBzZXREcm9wU2hh
ZG93KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBDR1N0eWxlUmVmIHN0eWxl
KQogewogICAgIGlmIChDR1N0eWxlR2V0VHlwZShzdHlsZSkgIT0ga0NHU3R5bGVTaGFkb3cpIHsK
ICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBraW5kcyBvZiBDR1N0eWxlcy4KLSAgICAg
ICAgdXBkYXRlU2hhZG93KHswLCAwfSwgMCwgQ29sb3IoKSwgU2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM6OlVuc3BlY2lmaWVkKTsKKyAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmNsZWFyU2hhZG93
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2MSwyMCArMTM0LDkgQEAgdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmIHN0eWxlKQogICAgIGF1
dG8gcmFkID0gZGVnMnJhZChzaGFkb3dTdHlsZS5hemltdXRoIC0gMTgwKTsKICAgICBhdXRvIHNo
YWRvd09mZnNldCA9IEZsb2F0U2l6ZShzdGQ6OmNvcyhyYWQpLCBzdGQ6OnNpbihyYWQpKSAqIHNo
YWRvd1N0eWxlLmhlaWdodDsKICAgICBhdXRvIHNoYWRvd0NvbG9yID0gQ0dTdHlsZUdldENvbG9y
KHN0eWxlKTsKLSAgICB1cGRhdGVTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dTdHlsZS5yYWRp
dXMsIENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3IpLCBTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6
OnJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRl
LCBDR1JlY3QpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAg
ICBhdXRvIGFscGhhID0gQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpOwotICAgIG1fb3duZXIuYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpyZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUp
Ci17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICBtX293bmVy
LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgZGVzdGluYXRpb25Db250ZXh0LnNldERyb3BT
aGFkb3coeyBzaGFkb3dPZmZzZXQsIHN0YXRpY19jYXN0PGZsb2F0PihzaGFkb3dTdHlsZS5yYWRp
dXMpLCBDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHNoYWRvd0NvbG9yKSB9KTsK
KyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXModHJ1ZSk7
CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25z
KGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCwgY29uc3QgQ0dBZmZpbmVU
cmFuc2Zvcm0mIHRleHRNYXRyaXgpCkBAIC0yOTAsMTggKzE1MiwxOCBAQCBzdGF0aWMgVmVjdG9y
PENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhjb25zdCBDR1BvaW50IHBvc2l0
aW9uc1tdLCBzaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdz
dGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBj
b25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCit2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHR2x5
cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKIHsK
ICAgICBBU1NFUlRfSU1QTElFUyhtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250
RnJvbUNvbnRleHQ6Ok5vLCBtX29yaWdpbmFsRm9udCk7CiAKLSAgICBpZiAoIWNvdW50KQorICAg
IGlmICghY291bnQgfHwgQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpIDw9IDApCiAgICAgICAgIHJl
dHVybjsKIAogICAgIENHRm9udFJlZiB1c2VkRm9udCA9IENHR1N0YXRlR2V0Rm9udChnc3RhdGUp
OwogICAgIGlmIChtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRl
eHQ6Ok5vICYmIHVzZWRGb250ICE9IGFkb3B0Q0YoQ1RGb250Q29weUdyYXBoaWNzRm9udChtX29y
aWdpbmFsRm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG51bGxwdHIpKS5nZXQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsK
KyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkp
OwogCiAgICAgLy8gV2Ugd2FudCB0aGUgcmVwbGF5ZXIncyBDVE0gYW5kIHRleHQgbWF0cml4IHRv
IG1hdGNoIHRoZSBjdXJyZW50IENUTSBhbmQgdGV4dCBtYXRyaXguCiAgICAgLy8gVGhlIGN1cnJl
bnQgdGV4dCBtYXRyaXggaXMgYSBjb25jYXRlbmF0aW9uIG9mIHdoYXRldmVyIFdlYktpdCBzZXRz
IGl0IHRvIGFuZCB3aGF0ZXZlcgpAQCAtMzI0LDEzICsxODYsMTYgQEAgdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVS
ZWYgZ3N0YXQKICAgICAgICAgaW52ZXJzZUNUTUZpeHVwID0gaW52ZXJzZS52YWx1ZSgpOwogICAg
IGVsc2UKICAgICAgICAgY3RtRml4dXAgPSBBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICBtX293bmVy
LmNvbmNhdENUTShjdG1GaXh1cCk7CisKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jb25jYXRD
VE0oY3RtRml4dXApOwogCiAgICAgYXV0byBmaWxsQ29sb3IgPSBDR0dTdGF0ZUdldEZpbGxDb2xv
cihnc3RhdGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6
Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikpOworCiAgICAgYXV0byBzdHJv
a2VDb2xvciA9IENHR1N0YXRlR2V0U3Ryb2tlQ29sb3IoZ3N0YXRlKTsKLSAgICB1cGRhdGVGaWxs
Q29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShmaWxsQ29sb3IpKTsKLSAg
ICB1cGRhdGVTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHN0
cm9rZUNvbG9yKSk7Ci0gICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7
CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmNyZWF0ZUFu
ZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOworCisgICAgc2V0RHJvcFNoYWRvdyht
X2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKIAogICAgIGF1
dG8gZm9udFNpemUgPSBDR0dTdGF0ZUdldEZvbnRTaXplKGdzdGF0ZSk7CiAgICAgUmVmIGZvbnQg
PSBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vID8g
Km1fb3JpZ2luYWxGb250IDogRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoYWRvcHRDRihD
VEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KHVzZWRGb250LCBmb250U2l6ZSwgbnVsbHB0ciwg
bnVsbHB0cikpLCBmb250U2l6ZSkpOwpAQCAtMzQ1LDMwICsyMTAsMzggQEAgdm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3Rh
dGVSZWYgZ3N0YXQKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMzI5
MTc+IChgRHJhd0dseXBoc1JlY29yZGVyYCBzaG91bGQgYmUgYWJsZSB0byByZWNvcmQrcmVwbGF5
IHZlcnRpY2FsIHRleHQpCiAgICAgfQogCi0gICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVG
b250KGZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMs
IGNvdW50LCB0ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0TWF0cml4Lm1hcFBvaW50KHBv
c2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7Ci0KLSAgICBtX293bmVyLmNvbmNhdENUTShp
bnZlcnNlQ1RNRml4dXApOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRD
YWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0
aW9ucywgY291bnQsIHRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIHRleHRNYXRyaXgubWFwUG9p
bnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29u
dGV4dC5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBn
c3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNnSW1hZ2UpCit2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3Qs
IENHSW1hZ2VSZWYgY2dJbWFnZSkKIHsKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdz
dGF0ZSkpOwotICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Cisg
ICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVHZXRTdHlsZShn
c3RhdGUpKTsKIAogICAgIC8vIENvcmUgR3JhcGhpY3MgYXNzdW1lcyBhICJ5IHVwIiBjb29yZGlu
YXRlIHN5c3RlbSwgYnV0IGluIFdlYktpdCwgd2UgdXNlIGEgInktZG93biIgY29vcmRpbmF0ZSBz
eXN0ZW0uCiAgICAgLy8gVGhpcyBtZWFucyB0aGF0IFdlYktpdCdzIGRyYXdpbmcgcm91dGluZXMg
KEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkpIGludGVudGlvbmFsbHkgZHJhdyBpbWFnZXMg
dXBzaWRlLWRvd24gZnJvbSBDb3JlIEdyYXBoaWNzJ3MgcG9pbnQgb2Ygdmlldy4KICAgICAvLyAo
VGhlcmUncyBhIHktZmxpcCBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlKCkuKQogICAgIC8vIFRoZSByZWN0IGhhcyB0aGUgcmlnaHQgYm91bmRz
LCBidXQgd2UgbmVlZCB0byB0cmFuc2Zvcm0gZnJvbSBDRydzIGNvb3JkaW5hdGUgc3lzdGVtIHRv
IFdlYktpdCdzIGJ5IHBlcmZvcm1pbmcgb3VyIG93biB5LWZsaXAgc28gaW1hZ2VzIGFyZSBkcmF3
biB0aGUgcmlnaHQtc2lkZS11cC4KICAgICAvLyBXZSBkbyB0aGlzIGF0IHRoZSBib3VuZGFyeSBi
ZXR3ZWVuIHRoZSB0d28gQVBJcywgd2hpY2ggaXMgcmlnaHQgaGVyZS4KLSAgICBtX293bmVyLnRy
YW5zbGF0ZSgwLCByZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpOwotICAgIG1f
b3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0KKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4
dC50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICAKICAg
ICBhdXRvIGltYWdlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKTsKLSAgICBtX293bmVy
LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5zaXplKCksIEZsb2F0UmVjdChyZWN0KSwg
RmxvYXRSZWN0IHt7IH0sIGltYWdlLT5zaXplKCl9LCBJbWFnZVBhaW50aW5nT3B0aW9ucyB7IElt
YWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7Ci0KKyAgICBtX2Rlc3RpbmF0aW9uQ29u
dGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVj
dCksIEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2UtPnNpemUoKSB9LCBJbWFnZVBhaW50aW5nT3B0aW9u
cyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7CisgICAgCiAgICAgLy8gVW5k
byB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQuCi0gICAgbV9vd25lci5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCAtKHJlY3Qu
c2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworICAgIG1fZGVzdGluYXRpb25Db250
ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnRy
YW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworfQor
Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFy
dFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQoreworICAgIHNldEludGVy
bmFsRm9udChmb250LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAKKyAgICBhdXRvIG9yaWdpbmFsU3Rh
dGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgRm9udENhc2NhZGU6OmRyYXdHbHlw
aHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
c3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgcmVzdG9yZURlc3RpbmF0aW9uQ29udGV4
dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNW
R1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKQEAgLTM3OSwyNSArMjUyLDE5IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RT
VkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICAgICAg
YXV0byBib3VuZHMgPSBmb250LmJvdW5kc0ZvckdseXBoKGdseXBoc1tpXSk7CiAKICAgICAgICAg
Ly8gQ3JlYXRlIGEgbG9jYWwgSW1hZ2VCdWZmZXIgYmVjYXVzZSBkZWNvZGluZyB0aGUgU1ZHIGZv
bnRzIGhhcyB0byBoYXBwZW4gaW4gV2ViUHJvY2Vzcy4KLSAgICAgICAgaWYgKGF1dG8gaW1hZ2VC
dWZmZXIgPSBtX293bmVyLmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6OkxvY2FsKSkgeworICAgICAg
ICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fZGVzdGluYXRpb25Db250ZXh0LmNyZWF0ZUFsaWdu
ZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5k
ZXJpbmdNZXRob2Q6OkxvY2FsKSkgeworICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQo
KS5hcHBseVN0YXRlQ2hhbmdlcygpOwogICAgICAgICAgICAgRm9udENhc2NhZGU6OmRyYXdHbHlw
aHMoaW1hZ2VCdWZmZXItPmNvbnRleHQoKSwgZm9udCwgZ2x5cGhzICsgaSwgYWR2YW5jZXMgKyBp
LCAxLCBGbG9hdFBvaW50KCksIHNtb290aGluZ01vZGUpOwogCiAgICAgICAgICAgICBGbG9hdFJl
Y3QgZGVzdGluYXRpb25SZWN0ID0gZW5jbG9zaW5nSW50UmVjdChib3VuZHMpOwogICAgICAgICAg
ICAgZGVzdGluYXRpb25SZWN0Lm1vdmVCeShwZW5Qb3NpdGlvbik7Ci0gICAgICAgICAgICBtX293
bmVyLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAg
ICAgICAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBkZXN0aW5hdGlvblJlY3QpOwogICAgICAgICB9CiAKICAgICAgICAgcGVuUG9zaXRpb24ubW92
ZShzaXplKGFkdmFuY2VzW2ldKSk7CiAgICAgfQogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQotewotICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoZm9udCwgc21v
b3RoaW5nTW9kZSk7Ci0gICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRl
eHQsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3Ro
aW5nTW9kZSk7Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKLX0KLQogdm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGluZ0ludG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsK
ICAgICBhdXRvIG90c3ZnR2x5cGhzID0gZm9udC5maW5kT1RTVkdHbHlwaHMoZ2x5cGhzLCBudW1H
bHlwaHMpOwpAQCAtNDQwLDcgKzMwNyw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3
QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYgZm9uCiB2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9u
dFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBpZiAobV9kZWNvbnN0cnVjdERy
YXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpObykgewotICAgICAgICBtX293bmVy
LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAgICAgbV9kZXN0aW5hdGlvbkNvbnRl
eHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC00NTMsMTUgKzMyMCwxNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05hdGl2
ZVRleHQoQ1RGb250UmVmIGZvbnQsIENHRmxvYXQgZm9udFNpemUsIENUTGluZQogewogICAgIEFT
U0VSVChtX2RlY29uc3RydWN0RHJhd0dseXBocyA9PSBEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olll
cyk7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKG1fb3duZXIpOworICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIobV9kZXN0aW5hdGlvbkNvbnRleHQpOwog
Ci0gICAgbV9vd25lci50cmFuc2xhdGUobGluZVJlY3Qub3JpZ2luLngsIGxpbmVSZWN0Lm9yaWdp
bi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXpl
KDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRlKGxpbmVSZWN0Lm9y
aWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBt
X2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKIAotICAgIHByZXBh
cmVJbnRlcm5hbENvbnRleHQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9u
dFNpemUpKSwgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIHNl
dEludGVybmFsRm9udChGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShmb250LCBmb250U2l6
ZSkpLCBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCk7CisgICAgCisgICAg
YXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUludGVybmFsQ29udGV4dCgpOwogICAgIENHQ29u
dGV4dFNldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCks
IDAsIDApOwogICAgIENUTGluZURyYXcobGluZSwgbV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOworICAgIHJlc3RvcmVE
ZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNTExZTA5Yjk2Y2Vm
MDMyNTA5MGUyM2FmOTE0YWUzNWYyYWI4ZWQyZS4uZTUzNGNjNTVhZjI2YjdmYjgyODBlNjNiN2Rj
MjVhM2Q0YTQxNjM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTE1
MiwyNSArMTUyLDI3IEBAIHN0YXRpYyB2b2lkIGZpbGxWZWN0b3JXaXRoVmVydGljYWxHbHlwaFBv
c2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zCiAgICAgfQogfQogCi1zdGF0
aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5
cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0ZXh0TWF0cml4KQorc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCiB7
CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ0dDb250ZXh0UmVmIGNn
Q29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKwogICAgIFZlY3Rv
cjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7CiAgICAgaWYgKHBsYXRmb3JtRGF0YS5v
cmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAgU2Nv
cGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQs
IHRleHRNYXRyaXgpLCBjb250ZXh0KTsKKyAgICAgICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1h
dHJpeChjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIHRleHRNYXRyaXgpLCBjZ0NvbnRl
eHQpOwogCiAgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJhbnNsYXRpb25zKGNvdW50KTsK
ICAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMocGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGNvdW50KTsKIAogICAg
ICAgICBhdXRvIGFzY2VudERlbHRhID0gZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KElk
ZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCk7Ci0g
ICAgICAgIGZpbGxWZWN0b3JXaXRoVmVydGljYWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNv
bnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBjb3VudCwgcG9pbnQsIGFzY2Vu
dERlbHRhKTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCks
IGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAgICAgICBmaWxs
VmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjZ0NvbnRleHQsIHRy
YW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBjb3VudCwgcG9pbnQsIGFzY2VudERlbHRhKTsK
KyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywg
cG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNnQ29udGV4dCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjb250
ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhw
bGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNv
bnRleHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhw
b3NpdGlvbnMsIGNnQ29udGV4dCwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCk7CisgICAgICAgIENU
Rm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5k
YXRhKCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0KIH0KIApAQCAtMjQyLDEwICsyNDQsNyBA
QCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIHNldENHRm9udFJlbmRlcmluZ01vZGUoY29u
dGV4dCk7CiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEu
c2l6ZSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93
Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBjb250ZXh0LmdldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAgICBhdXRvIGRyb3BTaGFkb3cg
PSBjb250ZXh0LmRyb3BTaGFkb3coKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZXh0Q1RN
ID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9u
dC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CkBAIC0yNTgsMjkgKzI1NywyOSBAQCB2b2lkIEZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgRwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGJvb2wgaGFzU2ltcGxlU2hh
ZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwg
JiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICFwbGF0Zm9ybURhdGEu
aXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
KSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFj
b250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93
ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYg
ZHJvcFNoYWRvdy5jb2xvci5pc1ZhbGlkKCkgJiYgIWRyb3BTaGFkb3cuYmx1clJhZGl1cyAmJiAh
cGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFjb250ZXh0LnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxp
cHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoaGFz
U2ltcGxlU2hhZG93KSB7CiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZl
cyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBp
eGVsIGFudGlhbGlhc2luZy4KICAgICAgICAgY29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAg
ICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBz
aGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShm
aWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3Ig
PSBkcm9wU2hhZG93LmNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5h
bHBoYUFzRmxvYXQoKSk7CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxD
b2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zm
c2V0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgZHJv
cFNoYWRvdy5vZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3Jp
bmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBm
bGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkg
PSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAgICAgZmxvYXQg
c2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQoKSAqIChj
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOworICAgICAgICBzaG93
R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwg
Zm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsK
ICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgICAgICBzaG93R2x5cGhz
V2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxv
YXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRvd1RleHRZKSwg
Zm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsK
ICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKICAgICB9CiAKLSAgICBz
aG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0
TWF0cml4KTsKIAogICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICBzaG93R2x5
cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNl
dCwgcG9pbnQueSgpKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHRleHRNYXRyaXgpOworICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9p
bnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwgY29u
dGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKIAogICAgIGlm
IChoYXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNl
dCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0LnNldERyb3BTaGFk
b3coZHJvcFNoYWRvdyk7CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoc2hv
dWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggMmUyZjRmNGYyY2I1NWQzNjVlNWFlMzk5MzI1ZDA1ZjJj
MTczNjFmZC4uY2NmNDBjZWE2MmIxNjc0MzY2ZDc0ODQxNjJiMWJjNGU5Mzc3MDc1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC05MCwxMCArOTAsNyBAQCBib29sIERpc3BsYXlMaXN0
OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIEl0ZW1IYW5kbGUgaXRlbSkK
ICAgICAgICAgaWYgKCEoZmxhZ3MgJiBBc1RleHRGbGFnOjpJbmNsdWRlc1BsYXRmb3JtT3BlcmF0
aW9ucykpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHN0YXRlSXRlbSA9IGl0ZW0uZ2V0PFNl
dFN0YXRlPigpOwogICAgICAgICAgICAgLy8gRklYTUU6IGZvciBub3csIG9ubHkgZHJvcCB0aGUg
aXRlbSBpZiB0aGUgb25seSBzdGF0ZS1jaGFuZ2UgZmxhZ3MgYXJlIHBsYXRmb3JtLXNwZWNpZmlj
LgotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fY2hhbmdlRmxhZ3Mg
PT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5n
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChzdGF0
ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisgICAgICAgICAgICBpZiAoc3Rh
dGVJdGVtLnN0YXRlKCkuY2hhbmdlcygpID09IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yMDIsMTYgKzE5OSw2IEBAIHZvaWQg
RGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBl
bmQ8U2F2ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToK
ICAgICAgICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihpdGVtLmdldDxSZXN0b3JlPigpKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8VHJhbnNs
YXRlPihpdGVtLmdldDxUcmFuc2xhdGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToK
LSAgICAgICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0PFJvdGF0ZT4oKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2NhbGU+KGl0ZW0u
Z2V0PFNjYWxlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5nZXQ8Q29uY2F0ZW5hdGVDVE0+
KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxT
ZXRDVE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbENvbG9yOgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oaXRl
bS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVTdHJva2VDb2xvcjoKQEAgLTIyMCwxNiArMjA3LDYgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBw
ZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdHJva2VUaGlj
a25lc3M+KGl0ZW0uZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKSk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3RhdGU+KGl0ZW0uZ2V0PFNl
dFN0YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1
cm4gYXBwZW5kPFNldExpbmVDYXA+KGl0ZW0uZ2V0PFNldExpbmVDYXA+KCkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVEYXNo
PihpdGVtLmdldDxTZXRMaW5lRGFzaD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpv
aW46Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZUpvaW4+KGl0ZW0uZ2V0PFNldExpbmVK
b2luPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1
cm4gYXBwZW5kPFNldE1pdGVyTGltaXQ+KGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gYXBwZW5kPENsZWFy
U2hhZG93PihpdGVtLmdldDxDbGVhclNoYWRvdz4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwPihpdGVtLmdldDxDbGlwPigpKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMjc0LDggKzI1MSw2IEBAIHZvaWQgRGlzcGxheUxp
c3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJl
Y3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxs
UmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIGFwcGVu
ZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKSk7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1cm4gYXBwZW5k
PEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAppbmRleCAwYzI1MjI2NGFmNDE2NjU2MjE3
NTE2MDQxMDQyYThiZGQzYmZhYmI1Li5kZWZjZTg0ZWYzNTg3YmVhMDZkMjA3ZGI1YjgwMmFhN2M4
MjU2NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCi0g
ICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxv
YXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQorICAgIDogbV9jb250ZXh0KG1f
ZGlzcGxheUxpc3QsIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSkKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAppbmRleCA0
NTc3NTUxODliZGFkZDcxOWQyNDVhNGU2ZDJjODFiZGRiMWY3ZGYzLi4wZGIxNTAzOTYwNDAzMmYz
MzAzZmJjYjY1MjFlNTNlNGUzNGY5MThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmNwcApAQCAtNTIsMjEgKzUyLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToK
ICAgICAgICAgZ2V0PFJlc3RvcmU+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGdldDxUcmFuc2xhdGU+KCku
YXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6Ci0gICAgICAgIGdldDxSb3RhdGU+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgZ2V0PFNjYWxlPigpLmFwcGx5
KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5h
dGVDVE06Ci0gICAgICAgIGdldDxDb25jYXRlbmF0ZUNUTT4oKS5hcHBseShjb250ZXh0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgZ2V0PFNl
dENUTT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgZ2V0PFNldElubGluZUZpbGxDb2xvcj4o
KS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzksMjEgKzY0LDYgQEAgdm9p
ZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgZ2V0PFNl
dExpbmVDYXA+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0PFNldExpbmVEYXNoPigpLmFwcGx5KGNv
bnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46
Ci0gICAgICAgIGdldDxTZXRMaW5lSm9pbj4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIGdldDxTZXRN
aXRlckxpbWl0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGdldDxDbGVhclNoYWRvdz4oKS5hcHBseShj
b250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAg
ICAgIGdldDxDbGlwPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CkBAIC0xNjAs
OSArMTMwLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIGdl
dDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgZ2V0PEZp
bGxDb21wb3NpdGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgZ2V0PEZpbGxSb3VuZGVk
UmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjcwLDkgKzIzNyw2
IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Bh
dGg6CiAgICAgICAgIGdldDxEcmF3UGF0aD4oKS5+RHJhd1BhdGgoKTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgZ2V0PEZp
bGxDb21wb3NpdGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0ZWRSZWN0KCk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAgICAgZ2V0PEZpbGxQYXRoPigp
Ln5GaWxsUGF0aCgpOwogICAgICAgICByZXR1cm47CkBAIC0yODgsOSArMjUyLDYgQEAgdm9pZCBJ
dGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6
CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOwogICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIGdl
dDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBnZXQ8U2V0U3RhdGU+KCkuflNldFN0YXRl
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxNCw5ICsyNzUsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6
OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKICAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJSZWN0Pjo6dmFsdWUp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsZWFyU2hh
ZG93Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoK
ICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xp
cD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI2LDkgKzI4NCw2IEBAIHZvaWQgSXRl
bUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENs
aXBUb0ltYWdlQnVmZmVyPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPENvbmNhdGVuYXRlQ1RNPjo6dmFsdWUpOwotICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKICAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzg3LDMzICsz
NDIsMTUgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpS
ZXN0b3JlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxSZXN0b3JlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxSb3RhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTYXZlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxTYXZlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2NhbGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPFNjYWxlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0Q1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxTZXRDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxDb2xvcj46OnZhbHVlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgogICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxp
bmVTdHJva2VDb2xvcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRNaXRlckxpbWl0Pjo6dmFs
dWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tu
ZXNzOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTQzNyw5
ICszNzQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUxpbmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFN0cm9rZUxpbmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwog
ICAgIH0KIH0KIApAQCAtNTAxLDggKzQzNSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHko
SXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAg
IHJldHVybiBjb3B5SW50bzxEcmF3UGF0dGVybj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICByZXR1cm4gY29weUludG88RHJhd1BhdGg+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJl
Y3Q6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW1PZmZz
ZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAgICAgcmV0dXJu
IGNvcHlJbnRvPEZpbGxQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoQ29sb3I6CkBAIC01MTMsOCArNDQ1LDYgQEAgYm9vbCBJdGVtSGFuZGxl
OjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29u
c3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVt
T2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAg
ICAgICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBjb3B5SW50
bzxTZXRMaW5lRGFzaD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0YXRlOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0U3RhdGU+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgpAQCAtNTMxLDE2ICs0NjEsMTIg
QEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRs
ZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clJlY3Q6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclJlY3Q+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPENsZWFyU2hhZG93PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXA+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgICAgICByZXR1cm4gY29weUludG88
Q2xpcE91dD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0lt
YWdlQnVmZmVyOgogICAgICAgICByZXR1cm4gY29weUludG88Q2xpcFRvSW1hZ2VCdWZmZXI+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPENvbmNhdGVuYXRlQ1RNPihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKICAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKQEAgLTU3MywyNCArNDk5LDEy
IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5k
bGUgZGVzdGluYXRpb24pIGNvbnN0CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3Jl
OgogICAgICAgICByZXR1cm4gY29weUludG88UmVzdG9yZT4oaXRlbU9mZnNldCwgKnRoaXMpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFJvdGF0
ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CiAgICAgICAg
IHJldHVybiBjb3B5SW50bzxTYXZlPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTY2FsZT4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPFNldENUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldElubGluZUZpbGxDb2xv
cj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9r
ZUNvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAg
ICByZXR1cm4gY29weUludG88U2V0TGluZUNhcD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGlu
ZUpvaW4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxp
bWl0OgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TWl0ZXJMaW1pdD4oaXRlbU9mZnNldCwg
KnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRlbU9mZnNldCwgKnRoaXMpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CkBAIC02MDcsOCArNTIxLDYgQEAgYm9v
bCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0
aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFN0cm9rZVJlY3Q+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgogICAgICAgICBy
ZXR1cm4gY29weUludG88U3Ryb2tlTGluZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFRyYW5zbGF0ZT4o
aXRlbU9mZnNldCwgKnRoaXMpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKaW5kZXggNTRlYTFjODY4MmMwNzQ0MmUy
ZTg0MTRiNzMyOGFhMzI0ODAyNWE3NS4uYmEwZDk1MWMyMmNmNDljZTQxN2UzMzU1M2IwMGUwYTVi
OGFiMjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcApAQCAt
MzgsMTYgKzM4LDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0
eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNhdmUpOwogICAgIGNhc2UgSXRlbVR5cGU6OlJl
c3RvcmU6CiAgICAgICAgIHJldHVybiBzaXplb2YoUmVzdG9yZSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFRyYW5zbGF0ZSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFJvdGF0ZSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2NhbGUpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKENv
bmNhdGVuYXRlQ1RNKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVy
biBzaXplb2YoU2V0Q1RNKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6
CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5lRmlsbENvbG9yKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTU2LDE2ICs0Niw2IEBAIHN0YXRpYyBz
aXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNp
emVvZihTZXRTdHJva2VUaGlja25lc3MpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgog
ICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0YXRlKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lQ2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVDYXApOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVEYXNoKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihT
ZXRMaW5lSm9pbik7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihTZXRNaXRlckxpbWl0KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKLSAgICAgICAgcmV0dXJuIHNpemVvZihDbGVhclNoYWRvdyk7CiAgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIHNpemVvZihDbGlwKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OgpAQCAtMTEwLDggKzkwLDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVt
SW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0V2l0
aENvbG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAg
ICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhHcmFkaWVudCk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxDb21wb3Np
dGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEZpbGxSb3VuZGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU6CkBAIC0xODIsMjggKzE2MCwxOCBAQCBib29sIGlzRHJhd2luZ0l0
ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKICNlbmRpZgotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZl
cjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBQYXRoOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgIGNhc2Ug
SXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAg
IGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgotICAgIGNh
c2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFy
UmVjdDoKQEAgLTIyMiw3ICsxOTAsNiBAQCBib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlw
ZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVs
bGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbExpbmU6CkBAIC0yODgsMTMgKzI1NSwxMSBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlw
ZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0xpbmVzRm9yVGV4dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFBhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0Ogot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1N5c3RlbUltYWdlOgpAQCAtMzA2LDExICsyNzEsOSBAQCBib29sIGlzSW5saW5lSXRlbShJ
dGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVu
Y3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgotICAg
IGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI6CkBAIC0zMzMsMTUgKzI5
Niw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlw
ZTo6UGFpbnRGcmFtZUZvck1lZGlhOgogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9y
ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
QEAgLTM1MSw3ICszMDgsNiBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogI2Vu
ZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VMaW5lOgotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5kZXggZDY4M2IyYWNmNzg0NWY5OWMzY2QwOTVlYjkxMWU1
NGYxZjhjZTExMS4uMTY2MGI5OGZkYTVlZjI3YjNmNzVkMjJhNTc5YTNhOWFlM2NjNzBmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCkBAIC0zMSwyMCArMzEsMTAgQEAg
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsK
ICAgICBTYXZlLAogICAgIFJlc3RvcmUsCi0gICAgVHJhbnNsYXRlLAotICAgIFJvdGF0ZSwKLSAg
ICBTY2FsZSwKLSAgICBDb25jYXRlbmF0ZUNUTSwKLSAgICBTZXRDVE0sCiAgICAgU2V0SW5saW5l
RmlsbENvbG9yLAogICAgIFNldElubGluZVN0cm9rZUNvbG9yLAogICAgIFNldFN0cm9rZVRoaWNr
bmVzcywKICAgICBTZXRTdGF0ZSwKLSAgICBTZXRMaW5lQ2FwLAotICAgIFNldExpbmVEYXNoLAot
ICAgIFNldExpbmVKb2luLAotICAgIFNldE1pdGVyTGltaXQsCi0gICAgQ2xlYXJTaGFkb3csCiAg
ICAgQ2xpcCwKICAgICBDbGlwT3V0LAogICAgIENsaXBUb0ltYWdlQnVmZmVyLApAQCAtNjcsNyAr
NTcsNiBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CiAgICAgRmlsbFJlY3QsCiAg
ICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJlY3RXaXRoR3JhZGllbnQsCi0gICAgRmls
bENvbXBvc2l0ZWRSZWN0LAogICAgIEZpbGxSb3VuZGVkUmVjdCwKICAgICBGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAyM2QwYmJjYzcxYzI4MWM1MmMzNWE4YzI1MmRhOTZj
MGFiMTJhOThjLi4zNmZhNmExMjdmZjA3OTNjZWYyMzBlZGY3YTY0MWRkZTAyZmUzNzRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC01NCw2NyArNTUsNiBAQCB2b2lkIFJlc3RvcmU6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBjb250ZXh0LnJlc3RvcmUoKTsK
IH0KIAotdm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0p
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkpOwotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgieSIsIGl0ZW0ueSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBSb3RhdGU6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnJv
dGF0ZShtX2FuZ2xlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImFu
Z2xlIiwgaXRlbS5hbmdsZSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTY2FsZTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2Nh
bGUobV9zaXplKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIs
IGl0ZW0uYW1vdW50KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldENUTTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0Q1RN
KG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNl
dC1jdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBD
b25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNhdGVuYXRlQ1RNJiBpdGVt
KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFuc2Zvcm0oKSk7Ci0KLSAg
ICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgU2V0SW5saW5lRmlsbENvbG9yOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoY29s
b3IoKSk7CkBAIC0xNDgsNzcgKzg4LDIyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdHJva2VUaGlja25lc3MmIHN0YXRlKQogICAgIHJl
dHVybiB0czsKIH0KIAotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
Ci0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0YXRlLCBmbGFncykKLXsKLX0KLQotU2V0U3RhdGU6OlNl
dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKLSAg
ICA6IG1fc3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2UpCitTZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQorICAgIDogbV9zdGF0ZShzdGF0ZSkKIHsKIH0K
IAogdm9pZCBTZXRTdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAg
IG1fc3RhdGVDaGFuZ2UuYXBwbHkoY29udGV4dCk7CisgICAgY29udGV4dC5tZXJnZVN0YXRlQ2hh
bmdlcyhtX3N0YXRlKTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0ZS5zdGF0ZUNoYW5nZSgpOworICAgIHRzIDw8IGl0ZW0uc3RhdGUoKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKLXZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXApOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGlu
ZUNhcCYgbGluZUNhcCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtY2FwIiwgbGluZUNh
cC5saW5lQ2FwKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRMaW5lRGFzaDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGlu
ZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gp
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5IiwgbGluZURhc2guZGFzaEFycmF5
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQiLCBsaW5lRGFzaC5kYXNoT2Zm
c2V0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUpvaW4o
bV9saW5lSm9pbik7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCi17Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJsaW5lLWpvaW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAotewotICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0
ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoIm1pdHJlLWxpbWl0
IiwgbWl0ZXJMaW1pdC5taXRlckxpbWl0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBD
bGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAg
IGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLX0KLQogdm9pZCBDbGlwOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7CkBAIC02
NTcsMzAgKzU0MiwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwog
fQogCi12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX29w
LCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCi17Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29s
b3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJh
dGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJi
bGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCiB2b2lk
IEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9ibGVuZE1v
ZGUpOworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvcik7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxs
Um91bmRlZFJlY3QmIGl0ZW0pCiB7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5y
b3VuZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigp
KTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9kZSgpKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTc2OCw4ICs2MzgsOCBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbEVsbGlwc2UmIGl0ZW0pCiB9
CiAKICNpZiBFTkFCTEUoVklERU8pCi1QYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQot
ICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkpCitQYWludEZyYW1lRm9yTWVk
aWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKKyAgICA6IG1faWRlbnRpZmllcihpZGVudGlm
aWVyKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKIHsKIH0KQEAgLTEwMTEsMTkg
Kzg4MSwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
SXRlbVR5cGUgdHlwZSkKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
YXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6IHRz
IDw8ICJyZXN0b3JlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOiB0cyA8
PCAidHJhbnNsYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOiB0cyA8PCAi
cm90YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6IHRzIDw8ICJzY2FsZSI7
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogdHMgPDwgInNldC1jdG0iOyBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMgPDwgImNvbmNhdGVudGF0
ZS1jdG0iOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6IHRz
IDw8ICJzZXQtaW5saW5lLWZpbGwtY29sb3IiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVTdHJva2VDb2xvcjogdHMgPDwgInNldC1pbmxpbmUtc3Ryb2tlLWNvbG9yIjsgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOiB0cyA8PCAic2V0LXN0
cm9rZS10aGlja25lc3MiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTogdHMg
PDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6IHRz
IDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFz
aDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0IjsgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwVG9JbWFnZUJ1ZmZlcjogdHMgPDwgImNsaXAtdG8taW1hZ2UtYnVmZmVyIjsgYnJlYWs7CkBA
IC0xMDQ2LDcgKzkwNyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB0cyA8
PCAiZmlsbC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29s
b3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQi
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHRzIDw8ICJm
aWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3Vu
ZGVkUmVjdDogdHMgPDwgImZpbGwtcm91bmRlZC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1yb3Vu
ZGVkLWhvbGUiOyBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKQEAgLTEwNzgs
NyArOTM4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjogdHMg
PDwgImFwcGx5LWZpbGwtcGF0dGVybiI7IGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlw
ZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogdHMgPDwgImFwcGx5LWRldmljZS1zY2FsZS1mYWN0
b3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogdHMgPDwgImNsZWFy
LXNoYWRvdyI7IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7CiB9CkBAIC0xMDg4LDIxICs5
NDcsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxl
IGl0ZW0pCiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgp
KSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICB0cyA8PCBpdGVtLmdl
dDxUcmFuc2xhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0
ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Um90YXRlPigpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2NhbGU+KCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q29uY2F0ZW5hdGVDVE0+
KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpOwogICAgICAg
ICBicmVhazsKQEAgLTExMTUsMTggKzk1OSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZToKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3RhdGU+KCk7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNl
dExpbmVDYXA+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVE
YXNoOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lRGFzaD4oKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PFNldExpbmVKb2luPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpOwot
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICB0cyA8PCBp
dGVtLmdldDxDbGlwPigpOwogICAgICAgICBicmVhazsKQEAgLTExOTMsOSArMTAyNSw2IEBAIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Rmls
bENvbXBvc2l0ZWRSZWN0PigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4o
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjcxLDcgKzExMDAsNiBAQCBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlw
ZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRl
cm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
CmluZGV4IDk3Y2I1ZmM4ZDA0YmE4NjYyYjcyYzdkZGVlYmM0NDE1NWMyODI1YjcuLmU4MWJiMzQ2
YzllZmViZTk2YTY1MGQ3NTQ1YTgxZjYxNmI3ZDZhOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaApAQCAtODUsMTA0ICs4NSw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogfTsKIAotY2xhc3MgVHJhbnNs
YXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OlRyYW5zbGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwotCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgICAgIDogbV94KHgp
Ci0gICAgICAgICwgbV95KHkpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IHgoKSBjb25zdCB7
IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1w
cml2YXRlOgotICAgIGZsb2F0IG1feCB7IDAgfTsKLSAgICBmbG9hdCBtX3kgeyAwIH07Ci19Owot
Ci1jbGFzcyBSb3RhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7Ci0KLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgICAgIDogbV9hbmds
ZShhbmdsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgYW5nbGUoKSBjb25zdCB7IHJldHVy
biBtX2FuZ2xlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fYW5nbGUgeyAwIH07IC8vIElu
IHJhZGlhbnMuCi19OwotCi1jbGFzcyBTY2FsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTY2FsZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2NhbGUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQotICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBG
bG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBGbG9hdFNpemUgbV9zaXplOwotfTsKLQotY2xhc3MgU2V0Q1RNIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldENUTTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAgICA6IG1fdHJhbnNmb3JtKHRy
YW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCi1jbGFzcyBDb25jYXRlbmF0ZUNUTSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpDb25jYXRlbmF0ZUNUTTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwotCi0gICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsK
LX07Ci0KIGNsYXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I7
CkBAIC0yNDcsMTAgKzE0OSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mp
OwotCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlJiBzdGF0ZUNoYW5nZSgpIHsgcmV0dXJuIG1fc3RhdGVDaGFuZ2U7IH0KKyAgICBXRUJD
T1JFX0VYUE9SVCBleHBsaWNpdCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYp
OworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKQEAgLTI1OCw0MDQgKzE1OCwyNiBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KTsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSYpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ug
bV9zdGF0ZUNoYW5nZTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwogfTsKIAog
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgU2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewotICAgIGF1dG8gY2hhbmdlRmxhZ3MgPSBtX3N0YXRlQ2hhbmdlLm1f
Y2hhbmdlRmxhZ3M7Ci0gICAgZW5jb2RlciA8PCBjaGFuZ2VGbGFnczsKLQotICAgIGF1dG8mIHN0
YXRlID0gbV9zdGF0ZUNoYW5nZS5tX3N0YXRlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRlLnN0cm9rZUdyYWRpZW50KTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3Rh
dGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBB
U1NFUlQoc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLnN0
cm9rZVBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChz
dGF0ZS5maWxsR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5maWxsR3JhZGll
bnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmZpbGxQ
YXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuZmlsbFBhdHRlcm47Ci0gICAgfQot
Ci0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93T2Zmc2V0OwotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZTsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLnN0cm9rZUNvbG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLmZpbGxDb2xvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0
YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
ZmlsbFJ1bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwg
c3RhdGUuYmxlbmRNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAg
ZW5jb2RlciA8PCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0gICAgaWYgKGNo
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYWxwaGE7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkQW50aWFsaWFzOwotCi0gICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5n
ZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHM7Ci0KLSAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgZW5jb2Rl
ciA8PCBtX3N0YXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3RkOjpvcHRpb25h
bDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIHN0
ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3M+IGNoYW5n
ZUZsYWdzOwotICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7Ci0gICAgaWYgKCFjaGFuZ2VGbGFn
cykKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBzdGF0ZTsKKyAgICBk
ZWNvZGVyID4+IHN0YXRlOworICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZTsKLSAg
ICBzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzID0gKmNoYW5nZUZsYWdzOwotCi0gICAgaWYgKHN0
YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0cm9rZUdyYWRpZW50ID0gR3Jh
ZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFzdHJva2VHcmFkaWVudCkKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoKnN0cm9rZUdyYWRpZW50KTsKLSAgICB9Ci0K
LSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgYXV0byBzdHJva2VQYXR0
ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIXN0cm9rZVBhdHRl
cm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUoKnN0cm9rZVBhdHRlcm4pOwotICAg
IH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gZmlsbEdy
YWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFmaWxsR3Jh
ZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZSgqZmlsbEdyYWRpZW50KTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gZmlsbFBh
dHRlcm4gPSBQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghZmlsbFBhdHRl
cm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKCpmaWxsUGF0dGVybik7Ci0gICAgfQot
Ci0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNp
emU+IHNoYWRvd09mZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dPZmZzZXQ7Ci0gICAg
ICAgIGlmICghc2hhZG93T2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd09mZnNldCA9ICpzaGFkb3dPZmZz
ZXQ7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2hhZG93Qmx1cjsKLSAgICAgICAg
ZGVjb2RlciA+PiBzaGFkb3dCbHVyOwotICAgICAgICBpZiAoIXNoYWRvd0JsdXIpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUu
c2hhZG93Qmx1ciA9ICpzaGFkb3dCbHVyOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+
IHNoYWRvd0NvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd0NvbG9yOwotICAgICAgICBp
ZiAoIXNoYWRvd0NvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
ICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0NvbG9yID0gKnNoYWRvd0NvbG9yOwotCi0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4gc2hhZG93UmFkaXVzTW9kZTsK
LSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dSYWRpdXNNb2RlOwotICAgICAgICBpZiAoIXNoYWRv
d1JhZGl1c01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAg
IHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFdURk1vdmUoKnNoYWRvd1Jh
ZGl1c01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKSB7Ci0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHN0cm9rZVRoaWNrbmVzczsKLSAgICAgICAgZGVj
b2RlciA+PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGlmICghc3Ryb2tlVGhpY2tuZXNzKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5t
X3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9ICpzdHJva2VUaGlja25lc3M7Ci0gICAgfQotCi0gICAg
aWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxUZXh0
RHJhd2luZ01vZGVGbGFncz4gdGV4dERyYXdpbmdNb2RlOwotICAgICAgICBkZWNvZGVyID4+IHRl
eHREcmF3aW5nTW9kZTsKLSAgICAgICAgaWYgKCF0ZXh0RHJhd2luZ01vZGUpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUudGV4
dERyYXdpbmdNb2RlID0gV1RGTW92ZSgqdGV4dERyYXdpbmdNb2RlKTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IHN0
cm9rZUNvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHN0cm9rZUNvbG9yOwotICAgICAgICBpZiAo
IXN0cm9rZUNvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAg
ICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZUNvbG9yID0gKnN0cm9rZUNvbG9yOwotICAgIH0K
LQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29s
b3I+IGZpbGxDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxsQ29sb3I7Ci0gICAgICAgIGlm
ICghZmlsbENvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAg
ICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxDb2xvciA9ICpmaWxsQ29sb3I7Ci0gICAgfQotCi0g
ICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkgewotICAgICAgICBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJva2VTdHlsZSkpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUu
c3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2Uu
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFu
Z2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8V2luZFJ1bGU+IGZpbGxSdWxlOwotICAgICAg
ICBkZWNvZGVyID4+IGZpbGxSdWxlOwotICAgICAgICBpZiAoIWZpbGxSdWxlKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZp
bGxSdWxlID0gKmZpbGxSdWxlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlT3BlcmF0b3I+IGNvbXBv
c2l0ZU9wZXJhdG9yOwotICAgICAgICBkZWNvZGVyID4+IGNvbXBvc2l0ZU9wZXJhdG9yOwotICAg
ICAgICBpZiAoIWNvbXBvc2l0ZU9wZXJhdG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yID0g
KmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpKSB7
Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0gICAgICAgIGRl
Y29kZXIgPj4gYmxlbmRNb2RlOwotICAgICAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5ibGVu
ZE1vZGUgPSAqYmxlbmRNb2RlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFs
aXR5PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgICAgICBkZWNvZGVyID4+IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGlmICghaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gKmltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgewotICAgICAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBhbHBoYTsKLSAgICAgICAgZGVjb2RlciA+PiBhbHBoYTsKLSAg
ICAgICAgaWYgKCFhbHBoYSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAg
ICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5hbHBoYSA9ICphbHBoYTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+
IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91bGRBbnRpYWxpYXM7Ci0g
ICAgICAgIGlmICghc2hvdWxkQW50aWFsaWFzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9ICpz
aG91bGRBbnRpYWxpYXM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZFNtb290aEZvbnRzOwotICAg
ICAgICBkZWNvZGVyID4+IHNob3VsZFNtb290aEZvbnRzOwotICAgICAgICBpZiAoIXNob3VsZFNt
b290aEZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBz
dGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0gKnNob3VsZFNtb290aEZvbnRz
OwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKSB7
Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
OwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICAg
ICAgaWYgKCFzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzID0gKnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICB9Ci0K
LSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6
b3B0aW9uYWw8Ym9vbD4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAgIGRlY29kZXIg
Pj4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAgIGlmICghc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSAqc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgeyBzdGF0ZUNoYW5nZSB9IH07Ci19
Ci0KLWNsYXNzIFNldExpbmVDYXAgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUNhcDsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAp
Ci0gICAgICAgIDogbV9saW5lQ2FwKGxpbmVDYXApCi0gICAgewotICAgIH0KLQotICAgIExpbmVD
YXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBMaW5lQ2FwIG1fbGluZUNhcDsKLX07Ci0KLWNsYXNzIFNldExpbmVEYXNoIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExp
bmVEYXNoOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAg
U2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQp
Ci0gICAgICAgIDogbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAgICAgICAsIG1fZGFzaE9mZnNl
dChkYXNoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hB
cnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9Ci0gICAgZmxvYXQgZGFzaE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFzaD4gZGVjb2RlKERlY29k
ZXImKTsKLQotcHJpdmF0ZToKLSAgICBEYXNoQXJyYXkgbV9kYXNoQXJyYXk7Ci0gICAgZmxvYXQg
bV9kYXNoT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TGlu
ZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV9kYXNoQXJyYXk7Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hPZmZzZXQ7CisgICAgcmV0dXJuIFNl
dFN0YXRlKCpzdGF0ZSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1zdGQ6Om9wdGlv
bmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgc3RkOjpvcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJheTsKLSAgICBkZWNvZGVyID4+
IGRhc2hBcnJheTsKLSAgICBpZiAoIWRhc2hBcnJheSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGRhc2hPZmZzZXQ7Ci0gICAgZGVjb2Rl
ciA+PiBkYXNoT2Zmc2V0OwotICAgIGlmICghZGFzaE9mZnNldCkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqZGFzaEFycmF5LCAqZGFzaE9mZnNldCB9fTsK
LX0KLQotY2xhc3MgU2V0TGluZUpvaW4gewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUpvaW47Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExpbmVKb2luKExpbmVKb2luIGxp
bmVKb2luKQotICAgICAgICA6IG1fbGluZUpvaW4obGluZUpvaW4pCi0gICAgewotICAgIH0KLQot
ICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBMaW5lSm9pbiBtX2xpbmVKb2luOwotfTsKLQotY2xhc3MgU2V0TWl0ZXJM
aW1pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7Ci0KLSAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi0gICAgICAg
IDogbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IG1p
dGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7IH0KLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0g
ICAgZmxvYXQgbV9taXRlckxpbWl0OwotfTsKLQotY2xhc3MgQ2xlYXJTaGFkb3cgewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xl
YXJTaGFkb3c7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci19Owot
CiAvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2luZyBpdGVtPwogY2xhc3MgQ2xpcCB7CiBwdWJsaWM6
CkBAIC0xNjEyLDkxICsxMTM0LDIwIEBAIHN0ZDo6b3B0aW9uYWw8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlCiAgICAgcmV0
dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0KCkgfX07CiB9CiAKLWNsYXNzIEZpbGxDb21wb3Np
dGVkUmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKLQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi0gICAgICAgIDogbV9yZWN0KHJlY3QpCi0gICAgICAgICwgbV9jb2xv
cihjb2xvcikKLSAgICAgICAgLCBtX29wKG9wKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5k
TW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2Nv
bG9yOyB9Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7
IHJldHVybiBtX29wOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxlbmRNb2RlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQotICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZh
dGU6Ci0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBtX2NvbG9yOwotICAgIENvbXBv
c2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOwotfTsKLQotdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNv
ZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX29wOwotICAgIGVuY29kZXIgPDwgbV9i
bGVuZE1vZGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1zdGQ6Om9wdGlvbmFsPEZp
bGxDb21wb3NpdGVkUmVjdD4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVy
ID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7Ci0gICAgZGVjb2RlciA+PiBjb2xvcjsK
LSAgICBpZiAoIWNvbG9yKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3Rk
OjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3A7Ci0gICAgZGVjb2RlciA+PiBvcDsKLSAg
ICBpZiAoIW9wKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRp
b25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKLSAg
ICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJl
dHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUgfX07Ci19Ci0KIGNsYXNzIEZp
bGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUp
CisgICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICAgICAgLCBtX2NvbG9y
KGNvbG9yKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKICAgICB7CiAgICAgfQog
CiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2Nv
bG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRN
b2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9u
YWw8RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMTcwOSw3ICsxMTYwLDYg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVjdDsKICAgICBD
b2xvciBtX2NvbG9yOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKIH07CiAKIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+CkBAIC0xNzE3LDcgKzExNjcsNiBAQCB2b2lkIEZpbGxSb3VuZGVkUmVj
dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX3Jl
Y3Q7CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAgIGVuY29kZXIgPDwgbV9ibGVuZE1vZGU7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0xNzMzLDEyICsxMTgyLDcgQEAgc3Rk
OjpvcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IEZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0gICAgZGVjb2Rl
ciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSB9fTsK
KyAgICByZXR1cm4geyB7ICpyZWN0LCAqY29sb3IgfSB9OwogfQogCiBjbGFzcyBGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSB7CkBAIC0xOTYxLDcgKzE0MDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgUGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CkBAIC0yMjU2LDEzICsxNzAwLDExIEBA
IHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgIDwgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcgogICAgICwgQmVnaW5UcmFuc3BhcmVuY3lMYXllcgogICAgICwgQ2xlYXJSZWN0
Ci0gICAgLCBDbGVhclNoYWRvdwogICAgICwgQ2xpcAogICAgICwgQ2xpcE91dAogICAgICwgQ2xp
cE91dFRvUGF0aAogICAgICwgQ2xpcFBhdGgKICAgICAsIENsaXBUb0ltYWdlQnVmZmVyCi0gICAg
LCBDb25jYXRlbmF0ZUNUTQogICAgICwgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcgogICAgICwg
RHJhd0VsbGlwc2UKICAgICAsIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyCkBAIC0yMjc4LDcgKzE3
MjAsNiBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZhcmlhbnQKICAgICAsIERyYXdS
ZWN0CiAgICAgLCBEcmF3U3lzdGVtSW1hZ2UKICAgICAsIEVuZFRyYW5zcGFyZW5jeUxheWVyCi0g
ICAgLCBGaWxsQ29tcG9zaXRlZFJlY3QKICAgICAsIEZpbGxFbGxpcHNlCiAgICAgLCBGaWxsUGF0
aAogICAgICwgRmlsbFJlY3QKQEAgLTIyODgsMjMgKzE3MjksMTUgQEAgdXNpbmcgRGlzcGxheUxp
c3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgLCBGaWxsUm91bmRlZFJlY3QKICAgICAsIEZsdXNo
Q29udGV4dAogICAgICwgUmVzdG9yZQotICAgICwgUm90YXRlCiAgICAgLCBTYXZlCi0gICAgLCBT
Y2FsZQotICAgICwgU2V0Q1RNCiAgICAgLCBTZXRJbmxpbmVGaWxsQ29sb3IKICAgICAsIFNldElu
bGluZVN0cm9rZUNvbG9yCi0gICAgLCBTZXRMaW5lQ2FwCi0gICAgLCBTZXRMaW5lRGFzaAotICAg
ICwgU2V0TGluZUpvaW4KLSAgICAsIFNldE1pdGVyTGltaXQKICAgICAsIFNldFN0YXRlCiAgICAg
LCBTZXRTdHJva2VUaGlja25lc3MKICAgICAsIFN0cm9rZUVsbGlwc2UKICAgICAsIFN0cm9rZUxp
bmUKICAgICAsIFN0cm9rZVBhdGgKICAgICAsIFN0cm9rZVJlY3QKLSAgICAsIFRyYW5zbGF0ZQog
CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgLCBGaWxsTGluZQpAQCAtMjM0MSwy
MCArMTc3NCwxMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNhdmUsCiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6VHJhbnNsYXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Um90YXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2NhbGUsCi0g
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRDVE0sCi0gICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSwKICAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvciwKICAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yLAogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzLAogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U2V0TGluZURhc2gsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRM
aW5lSm9pbiwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1pdGVyTGlt
aXQsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclNoYWRvdywKICAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXAsCiAgICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC0yMzc2LDcgKzE3OTksNiBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewog
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3QsCiAgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvciwKICAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50LAotICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0LAogICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0LAogICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCiAjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHAKaW5kZXggZWVlNDQ3MWQzNTRlNzUxNTMxMjUxODlkZmNjOTQxOGEzOTQ1MTRhMS4uYTUz
NTA5OTgwYTkzMTQwN2U5MWU1NGY5ZjkyMzI1Y2U1ZTVkMDVkYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNDIsMzUwICs0MiwxODkgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLVJlY29yZGVyOjpSZWNvcmRl
cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5p
dGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1Jl
Y29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAg
IDogbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3RydWN0RHJhd0dseXBocykKLXsK
LSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUsIGluaXRpYWxDVE0sIGluaXRpYWxDVE0u
bWFwUmVjdChpbml0aWFsQ2xpcCkgfSk7Ci19CitSZWNvcmRlcjo6UmVjb3JkZXIoY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdH
bHlwaHMpCisgICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENsaXAsIHsgfSwgIGluaXRpYWxD
VE0pCisgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZGVjb25zdHJ1Y3REcmF3R2x5
cGhzKQogCi1SZWNvcmRlcjo6flJlY29yZGVyKCkKIHsKLSAgICBBU1NFUlQobV9zdGF0ZVN0YWNr
LnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5kaWNhdGVzIG1pc21hdGNoZWQg
c2F2ZS9yZXN0b3JlLgogfQogCi1zdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNo
YW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQotewotICAgIHN0YXRp
YyBjb25zdGV4cHIgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgaW5saW5l
U3RhdGVDaGFuZ2VGbGFncyB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xv
ckNoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwK
LSAgICB9OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFuZ2VGbGFncyAmIGlubGluZVN0
YXRlQ2hhbmdlRmxhZ3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSAm
JiAhY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CitSZWNvcmRlcjo6flJlY29yZGVyKCkgPSBkZWZhdWx0OwogCi0g
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29s
b3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLnRyeUdldEFzU1JHQkFCeXRl
cygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBjaGFuZ2VGbGFncykKK3ZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewotICAgIGlmICghY29udGFp
bnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNoYW5nZXMsIGNoYW5nZUZsYWdzKSkgewotICAgICAg
ICBpZiAoYXV0byBwYXR0ZXJuID0gY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVBhdHRlcm4pCi0gICAg
ICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7Ci0gICAgICAg
IGlmIChhdXRvIHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuZmlsbFBhdHRlcm4pCi0gICAgICAg
ICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7Ci0gICAgICAgIHJl
Y29yZFNldFN0YXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldElubGluZVN0cm9r
ZUNvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkp
OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRTdHJva2VUaGlja25lc3Mo
Y2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAg
IHJlY29yZFNldElubGluZUZpbGxDb2xvcigqY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlH
ZXRBc1NSR0JBQnl0ZXMoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CisgICAgcmVj
b3JkU2F2ZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpCit2b2lkIFJlY29yZGVyOjpyZXN0b3JlKCkKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBpcyBjdXJyZW50bHkgaW52b2tlZCBpbiBhbiBhZC1ob2MgbWFubmVyIHdoZW4gcmVjb3JkaW5n
IGRyYXdpbmcgaXRlbXMuIFdlIHNob3VsZCBjb25zaWRlciBlaXRoZXIKLSAgICAvLyBzcGxpdHRp
bmcgR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5nZXMgaW50byBpbmRpdmlkdWFsIGRpc3BsYXkg
bGlzdCBpdGVtcywgb3IgcmVmYWN0b3JpbmcgdGhlIGNvZGUgc3VjaCB0aGF0Ci0gICAgLy8gdGhp
cyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBpbnZva2VkIHdoZW4gcmVjb3JkaW5nIGEgZHJhd2lu
ZyBpdGVtLgotICAgIGF1dG8mIHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hh
bmdlOwotICAgIGF1dG8gY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBzdGF0ZUNoYW5nZXMuY2hhbmdl
c0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlKTsKLSAgICBpZiAoIWNo
YW5nZXNGcm9tTGFzdFN0YXRlKQorICAgIGlmICghc3RhY2tTaXplKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJlLWRy
YXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRl
Q2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOwotICAgIGFwcGVuZFN0YXRl
Q2hhbmdlSXRlbShzdGF0ZUNoYW5nZXMsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKTsKLSAgICBzdGF0
ZUNoYW5nZXMubV9jaGFuZ2VGbGFncyA9IHsgfTsKLSAgICBjdXJyZW50U3RhdGUoKS5sYXN0RHJh
d2luZ1N0YXRlID0gc3RhdGVDaGFuZ2VzLm1fc3RhdGU7Ci19Ci0KLWNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBSZWNvcmRlcjo6c3RhdGUoKSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50
U3RhdGUoKS5zdGF0ZUNoYW5nZS5tX3N0YXRlOwotfQotCi12b2lkIFJlY29yZGVyOjpkaWRVcGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGN1cnJlbnRTdGF0ZSgpLnN0
YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgcmVjb3JkU2V0TGluZUNhcChsaW5l
Q2FwKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBk
YXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgcmVjb3JkU2V0TGluZURhc2goZGFz
aEFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZUpvaW4oTGlu
ZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgcmVjb3JkU2V0TGluZUpvaW4obGluZUpvaW4pOwotfQot
Ci12b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAg
cmVjb3JkU2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJl
c3RvcmUoKTsKKyAgICByZWNvcmRSZXN0b3JlKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1
bHRzKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMoKQogewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IGZp
bHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkpIHsKLSAgICAg
ICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQoKSk7Ci0gICAg
ICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3VyY2VJbWFnZSgpKSkgewotICAg
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJ
bWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFzb3VyY2VJbWFnZSkgewotICAgICAg
ICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihudWxscHRyLCBzb3VyY2VJbWFnZVJlY3Qs
IGZpbHRlcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoKnNvdXJjZUltYWdlKSkgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdl
LCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291
cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewot
ICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKLX0KKyAgICBpZiAoc3Rh
dGUoKS5oYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpKSB7CisgICAgICAgIGlmIChzdGF0ZSgpLmNo
YW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1c2gp
KQorICAgICAgICAgICAgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKCpmaWxsQ29sb3IoKS50cnlH
ZXRBc1NSR0JBQnl0ZXMoKSk7CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHNBbmRDYWNoZUZv
bnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNv
dXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7Ci0gICAgcmVjb3JkRHJhd0dseXBocyhm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUp
OwotfQorICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKQorICAgICAgICAgICAgcmVjb3JkU2V0SW5s
aW5lU3Ryb2tlQ29sb3IoKnN0cm9rZUNvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwogCi12
b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdl
SXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3MpKQorICAgICAg
ICAgICAgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKIAotICAg
IGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CisgICAgICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICByZWNvcmREcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUlt
YWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7Ci0gICAgcmVjb3Jk
RHJhd05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFn
ZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgcmVjb3JkRHJhd1N5c3RlbUltYWdlKHN5c3RlbUlt
YWdlLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7Ci0gICAgcmVj
b3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RS
ZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAg
ICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCkpIHsKKyAgICAgICAgaWYgKGF1dG8gcGF0dGVy
biA9IGZpbGxQYXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJu
LT50aWxlSW1hZ2UoKSk7CiAgICAgfQogCi0gICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2VCdWZm
ZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29y
ZGVyOjpzYXZlKCkKLXsKLSAgICByZWNvcmRTYXZlKCk7Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKCFtX3N0YXRlU3RhY2suc2l6ZSgpKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkgeworICAgICAgICBpZiAoYXV0byBwYXR0ZXJu
ID0gc3Ryb2tlUGF0dGVybigpKQorICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVy
bi0+dGlsZUltYWdlKCkpOworICAgIH0KIAotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7
Ci0gICAgcmVjb3JkUmVzdG9yZSgpOworICAgIHJlY29yZFNldFN0YXRlKHN0YXRlKCkpOworICAg
IGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KQotewotICAgIGN1cnJlbnRTdGF0ZSgpLnRyYW5zbGF0ZSh4LCB5KTsK
LSAgICByZWNvcmRUcmFuc2xhdGUoeCwgeSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucykKKyNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVyOjphcHBseVN0
cm9rZVBhdHRlcm4oKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnJvdGF0ZShhbmdsZUluUmFkaWFu
cyk7Ci0gICAgcmVjb3JkUm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpOwogfQogCi12b2lkIFJlY29y
ZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIFJlY29yZGVyOjphcHBseUZp
bGxQYXR0ZXJuKCkKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5zY2FsZShzaXplKTsKLSAgICByZWNv
cmRTY2FsZShzaXplKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEFwcGx5
RmlsbFBhdHRlcm4oKTsKIH0KKyNlbmRpZgogCi12b2lkIFJlY29yZGVyOjpjb25jYXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIFJlY29yZGVyOjphcHBseURldmlj
ZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgIGlmICh0cmFuc2Zv
cm0uaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NDb250ZXh0Ojph
cHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgIGN1cnJlbnRT
dGF0ZSgpLmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29yZENvbmNhdGVuYXRlQ1RNKHRy
YW5zZm9ybSk7CisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hpY2gg
d2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCisgICAgLy8gQXNzZXJ0
IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAgICByZWNvcmRBcHBseURldmljZVNj
YWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6c2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBSZWNvcmRlcjo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnNl
dENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29yZFNldENUTSh0cmFuc2Zvcm0pOwotfQorICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CiAKLUFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdAotewotICAgIHJldHVybiBj
dXJyZW50U3RhdGUoKS5jdG07Ci19CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKG9wYWNpdHkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwogCi12b2lk
IFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZXRBbHBoYShvcGFjaXR5
KTsKICAgICByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIG1fc3Rh
dGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclRyYW5zcGFyZW5jeUxh
eWVyKCkpOwogfQogCiB2b2lkIFJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0g
ICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRFbmRUcmFu
c3BhcmVuY3lMYXllcigpOwotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci19CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgYXBwZW5kU3RhdGVD
aGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3UmVjdChyZWN0LCBib3JkZXJU
aGlja25lc3MpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdMaW5lKHBvaW50MSwgcG9pbnQy
KTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0
eWxlKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkRHJhd0xpbmVzRm9yVGV4dChGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CisgICAgcmVjb3JkRW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQordm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAgICByZWNvcmRDbGlwKHJlY3QpOwog
fQogCi12b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVs
ZSkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29y
ZERyYXdFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAgcmVjb3JkQ2xpcFBhdGgo
cGF0aCwgd2luZFJ1bGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3
UGF0aChwYXRoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsaXBPdXQo
cmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBS
ZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwg
d2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVj
b3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNv
cmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLX0KKyAg
ICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3Qp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBSZWNv
cmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29s
b3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKK3ZvaWQgUmVjb3JkZXI6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsZWFyUmVjdChyZWN0KTsKIH0KLSNl
bmRpZgogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVy
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29sb3IpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50
JiBncmFkaWVudCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQo
cmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmlsbENvbXBvc2l0ZWRS
ZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29yZGVyOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmlsbFJvdW5kZWRS
ZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBj
b2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLSAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJl
Y3QsIGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxFbGxp
cHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBpZiAocGF0
aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YTxMaW5l
RGF0YT4oKSkKQEAgLTQwMiwyMSArMjQxLDIxIEBAIHZvaWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkRmlsbFBhdGgocGF0aCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6
OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
CiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRG
aWxsRWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZFN0
cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6c3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgUmVj
b3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkU3Ryb2tlUmVjdChyZWN0
LCBsaW5lV2lkdGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkU3Ryb2tl
RWxsaXBzZShyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBp
ZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0
YTxMaW5lRGF0YT4oKSkKQEAgLTQzMywxNDggKzI3MiwxNjggQEAgdm9pZCBSZWNvcmRlcjo6c3Ry
b2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHJlY29yZFN0cm9rZVBhdGgocGF0aCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
dm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsK
LSAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBS
ZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQyKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkQ2xlYXJSZWN0KHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3Jk
RHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwogfQogCi0jaWYgVVNFKENHKQotdm9pZCBSZWNvcmRl
cjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkRHJhd0VsbGlwc2UocmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6
OmFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJl
Y29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJl
Y29yZERyYXdQYXRoKHBhdGgpOwogfQotI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6OmNsaXAoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QoY3VycmVudFN0YXRl
KCkuY3RtLm1hcFJlY3QocmVjdCkpOwotICAgIHJlY29yZENsaXAocmVjdCk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICByZWNvcmRDbGlwT3V0KHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKKyNp
ZiBQTEFURk9STShNQUMpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
LCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAgcmVjb3JkQ2xpcE91dFRvUGF0
aChwYXRoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBj
b25zdCBDb2xvciYpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3Qo
Y3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpKTsKLSAg
ICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KKyNlbmRpZgogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91bmRzKCkgY29uc3QKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKGF1dG8gaW52ZXJzZSA9IGN1
cnJlbnRTdGF0ZSgpLmN0bS5pbnZlcnNlKCkpCi0gICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGludmVyc2UtPm1hcFJlY3QoY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcykpOworICAgIGlm
ICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAvLyBJZiB0aGUgQ1RNIGlzIG5v
dCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlY3QuCi0gICAgLy8gVGhpcyBtYXRj
aGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9ybSBiZWhhdmlvci4KLSAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXIm
IGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKIHsKLSAgICByZWNvcmRSZXNvdXJjZVVz
ZShpbWFnZUJ1ZmZlcik7Ci0gICAgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIs
IGRlc3RSZWN0KTsKLX0KKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IGZpbHRlci5lZmZlY3RzT2ZU
eXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkpIHsKKyAgICAgICAgYXV0byYgZmVJbWFn
ZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQoKSk7CisgICAgICAgIGlmICghcmVjb3Jk
UmVzb3VyY2VVc2UoZmVJbWFnZS5zb3VyY2VJbWFnZSgpKSkgeworICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1h
Z2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01v
ZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiByZW5kZXJp
bmdNZXRob2QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2Rl
LCByZW5kZXJpbmdNZXRob2QudmFsdWVfb3IoUmVuZGVyaW5nTWV0aG9kOjpEaXNwbGF5TGlzdCkp
OwotfQorICAgIGlmICghc291cmNlSW1hZ2UpIHsKKyAgICAgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIobnVsbHB0ciwgc291cmNl
SW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0jaWYgRU5BQkxF
KFZJREVPKQotdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBw
bGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYgKCFwbGF5ZXIu
aWRlbnRpZmllcigpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1l
ZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoKnNv
dXJjZUltYWdlKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQVNTRVJUKHBsYXllci5pZGVudGlmaWVyKCkpOwot
ICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIo
c291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKIH0KLSNlbmRpZgogCi12b2lk
IFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
KQordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgLy8gV2UgbW9kaWZ5IHRoZSBzdGF0ZSBkaXJlY3RseSBoZXJlIGluc3RlYWQgb2Yg
Y2FsbGluZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKCkKLSAgICAvLyBiZWNhdXNlIHRoZSByZWNv
cmRlZCBpdGVtIHdpbGwgc2NhbGUoKSB3aGVuIHJlcGxheWVkLgotICAgIGN1cnJlbnRTdGF0ZSgp
LnNjYWxlKHsgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yIH0pOworICAgIHJl
Y29yZFJlc291cmNlVXNlKGltYWdlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJl
Y29yZERyYXdOYXRpdmVJbWFnZShpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CiAKLSAgICAvLyBGSVhN
RTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRhdGUgYWxsIG9m
IG91ciBjYWNoZWQgZXh0ZW50cy4KLSAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVk
IGVhcmx5IG9uPwotICAgIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVG
YWN0b3IpOwordm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0
ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRl
c3RpbmF0aW9uUmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2Rl
KQordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQogewotICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNl
UGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlzcGxheUxpc3Q6OlJlY29yZGVy
LiIpOwotICAgIHJldHVybiByZWN0OworICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdlLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotY29uc3QgUmVjb3JkZXI6OkNv
bnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpIGNvbnN0Cit2b2lkIFJlY29yZGVy
OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJldHVybiBtX3N0YXRlU3RhY2su
bGFzdCgpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNv
cmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwg
ZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0
aW9ucyk7CiB9CiAKLVJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpjdXJyZW50U3Rh
dGUoKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewot
ICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9zdGF0ZVN0YWNr
Lmxhc3QoKTsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29y
ZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigpLCBkZXN0aW5hdGlvbik7CiB9
CisjZW5kaWYKIAotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZWNvcmRlcjo6Y3RtKCkgY29uc3QK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1
bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9v
dGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0
bTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRy
YXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBz
bW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjp0cmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHNBbmRDYWNoZUZv
bnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7
Ci0gICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICByZWNvcmRSZXNvdXJjZVVzZShjb25zdF9j
YXN0PEZvbnQmPihmb250KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRE
cmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21v
b3RoaW5nTW9kZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKGZs
b2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0g
ICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzID0gcmFkMmRlZyhzdGF0aWNfY2FzdDxkb3VibGU+KGFu
Z2xlSW5SYWRpYW5zKSk7Ci0gICAgY3RtLnJvdGF0ZShhbmdsZUluRGVncmVlcyk7Ci0gICAgCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uOwotICAgIHJvdGF0aW9uLnJvdGF0ZShhbmdsZUlu
RGVncmVlcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TGluZXNG
b3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCit2b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgY3Rt
LnNjYWxlKHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNv
bnRleHRTdGF0ZTo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorUmVmUHRy
PEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2Rl
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAog
ewotICAgIGN0bSA9IG1hdHJpeDsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01v
ZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdNZXRob2Q6OkRpc3BsYXlMaXN0
KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgbWF0cml4KQorRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01v
ZGUpCiB7Ci0gICAgY3RtICo9IG1hdHJpeDsKKyAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29u
dGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIERp
c3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKKyAgICByZXR1cm4gcmVjdDsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmlu
ZGV4IDg0NWVjMDA3NzJlZDJjNTRhMWU2Y2IyNmIyMTUxZGFiYWE2ZWMwNzUuLmFlMzQzNzliZTY3
ZjA1ZTEwNDJmNmFkYzVhYWJmODhjMjcwYzE3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRl
bXMuaCIKICNpbmNsdWRlICJEcmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgog
I2luY2x1ZGUgIklubGluZVBhdGhEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MSw3ICs1MCw3IEBAIGNsYXNzIFJlY29yZGVy
IDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwogcHVibGljOgotICAgIFdFQkNP
UkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRHJhd0dseXBoc1Jl
Y29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBoczo6WWVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihjb25z
dCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBo
c1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkgPSAwOwpAQCAtNjEsNDcgKzYwLDM1IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2F2ZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkUmVzdG9yZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkUm90YXRlKGZsb2F0IGFu
Z2xlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldElubGluZUZp
bGxDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRJ
bmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRM
aW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRTZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRTZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZENsZWFy
U2hhZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpID0gMDsKKworI2lmIFVTRShDRykKKyAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRB
cHBseUZpbGxQYXR0ZXJuKCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
QmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRD
bGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENs
aXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0
aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdp
bmRSdWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRl
ciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQ
YXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29y
ZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hv
ciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0
IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNv
bnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOworCiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxs
Q29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxBcmMoY29uc3QgQXJjRGF0YSYpID0gMDsK
QEAgLTEwOSwxMSArOTYsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRG
aWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgPSAwOwogI2VuZGlmCiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSNpZiBFTkFC
TEUoVklERU8pCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0gMDsKLSNlbmRpZgotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRT
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0
YSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEm
KSA9IDA7CkBAIC0xMjEsMTE2ICsxMDcsODEgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSA9IDA7CiAj
ZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0
dGVybigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBGaWx0ZXImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRl
cm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0gMDsKICNlbmRpZgotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxl
JikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdl
JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShJbWFnZUJ1ZmZlciYp
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3QgU291cmNlSW1h
Z2UmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKEZvbnQmKSA9IDA7
CiAKLSAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0
bTsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHM7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBs
YXN0RHJhd2luZ1N0YXRlOwotCi0gICAgICAgIENvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25z
dCBGbG9hdFJlY3QmIGNsaXApCi0gICAgICAgICAgICA6IGN0bSh0cmFuc2Zvcm0pCi0gICAgICAg
ICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKLSAgICAgICAgICAgICwgbGFzdERyYXdpbmdTdGF0ZShz
dGF0ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlIGNsb25l
Rm9yU2F2ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbnRleHRTdGF0ZSBzdGF0
ZShsYXN0RHJhd2luZ1N0YXRlLCBjdG0sIGNsaXBCb3VuZHMpOwotICAgICAgICAgICAgc3RhdGUu
c3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZvclRyYW5zcGFyZW5jeUxheWVy
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBzdGF0ZSA9IGNsb25lRm9yU2F2
ZSgpOwotICAgICAgICAgICAgc3RhdGUubGFzdERyYXdpbmdTdGF0ZS5hbHBoYSA9IDE7Ci0gICAg
ICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJh
ZGlhbnMpOwotICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgICAgICB2
b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICAgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgfTsKLQotICAgIGNvbnN0IFZlY3RvcjxD
b250ZXh0U3RhdGUsIDQ+JiBzdGF0ZVN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZVN0YWNr
OyB9Ci0KLSAgICBjb25zdCBDb250ZXh0U3RhdGUmIGN1cnJlbnRTdGF0ZSgpIGNvbnN0OwotICAg
IENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCk7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdNb2RlPiwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+KSBjb25z
dCBvdmVycmlkZTsKKyAgICAKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0KSA9IDA7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBudWxscHRy
OyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENv
bnRleHQoYm9vbCkgZmluYWwgeyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9r
ZVBhdHRlcm4oKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRl
cm4oKSBmaW5hbDsKICNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlKCkgY29uc3QgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5P
ZGQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zm
c2V0KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVKb2luKExpbmVKb2lu
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVu
ZE1vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKLSNlbmRpZgorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmls
dGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChj
b25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBl
bGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikgZmluYWw7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1Bh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpIGZpbmFsOwpAQCAtMjQxLDQwICsxOTIsMjMgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUg
dGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5k
aWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6Oklu
Y2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5h
bDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXAoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQorICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oSW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwogI2lmIEVOQUJMRShWSURFTykKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZp
bmFsOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBocyhj
b25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2lu
dCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IHJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUp
IGZpbmFsOwogCi0gICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwot
ICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLQotICAgIFZlY3RvcjxDb250ZXh0
U3RhdGUsIDQ+IG1fc3RhdGVTdGFjazsKICAgICBEcmF3R2x5cGhzUmVjb3JkZXIgbV9kcmF3R2x5
cGhzUmVjb3JkZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXJJbXBsLmNwcAppbmRleCAxZmRjNmJhNTZiZmRiMjYzNmVmYjM0NjJhZGEyYTk5MGQzMzg5OTQ1
Li4xZmI0ZGQ3OTVhZTEwYWE4Y2NjYmNkZDgzMTRlZWE4MDg2ZThkYjY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKQEAgLTQyLDE4ICs0MiwxMyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotUmVjb3Jk
ZXJJbXBsOjpSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNv
bnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogUmVjb3JkZXIo
c3RhdGUsIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCitS
ZWNvcmRlckltcGw6OlJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0
IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENU
TSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3RE
cmF3R2x5cGhzKQorICAgIDogUmVjb3JkZXIoaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29u
c3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCiB7CiAg
ICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJcblJlY29yZGluZyB3
aXRoIGNsaXAgIiA8PCBpbml0aWFsQ2xpcCk7CiB9CiAKLVJlY29yZGVySW1wbDo6flJlY29yZGVy
SW1wbCgpCi17Ci0gICAgQVNTRVJUKHN0YXRlU3RhY2soKS5zaXplKCkgPT0gMSk7IC8vIElmIHRo
aXMgZmlyZXMsIGl0IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4KLX0KLQogdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZFNhdmUoKQogewogICAgIGFwcGVuZDxTYXZlPigpOwpAQCAt
NjQsMzEgKzU5LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFJlc3RvcmUoKQogICAgIGFw
cGVuZDxSZXN0b3JlPigpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkVHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgYXBwZW5kPFRyYW5zbGF0ZT4oeCwgeSk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgYXBw
ZW5kPFJvdGF0ZT4oYW5nbGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBhcHBlbmQ8U2NhbGU+KHNjYWxlKTsKLX0K
LQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLXsKLSAgICBhcHBlbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pOwotfQotCi12b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi17Ci0gICAgYXBwZW5kPENvbmNhdGVuYXRlQ1RNPih0cmFuc2Zvcm0pOwot
fQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JBPHVp
bnQ4X3Q+IGlubGluZUNvbG9yKQogewogICAgIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGlu
bGluZUNvbG9yKTsKQEAgLTEwNCw5MiArNzQsMjYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAgYXBwZW5kPFNldFN0cm9r
ZVRoaWNrbmVzcz4odGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNl
dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17Ci0gICAgYXBwZW5kPFNldFN0
YXRlPihzdGF0ZSwgY2hhbmdlRmxhZ3MpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgYXBwZW5kPFNldExpbmVDYXA+KGxp
bmVDYXApOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZURhc2goY29uc3Qg
RGFzaEFycmF5JiBhcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBhcHBlbmQ8U2V0TGlu
ZURhc2g+KGFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZFNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0gICAgYXBwZW5kPFNldExpbmVKb2luPihq
b2luKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQg
bGltaXQpCi17Ci0gICAgYXBwZW5kPFNldE1pdGVyTGltaXQ+KGxpbWl0KTsKLX0KLQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZENsZWFyU2hhZG93KCkKLXsKLSAgICBhcHBlbmQ8Q2xlYXJTaGFk
b3c+KCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVj
dCYgY2xpcFJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXA+KGNsaXBSZWN0KTsKLX0KLQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgYXBwZW5kPENsaXBPdXQ+KGNsaXBSZWN0KTsKKyAgICBhcHBlbmQ8
U2V0U3RhdGU+KHN0YXRlKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXBUb0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZl
ci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0aCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQotewot
ICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKLXsKLSAg
ICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsK
LSAgICBpZiAoc291cmNlSW1hZ2UpCi0gICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7Ci0gICAgYXBwZW5kPERyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7
Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5j
aG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewotICAgIGFwcGVuZDxEcmF3R2x5cGhzPihm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUpOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmQ8
RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBs
eVN0cm9rZVBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGltYWdlSWRl
bnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgYXBw
ZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBh
dHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3U3lzdGVtSW1hZ2U+KHN5c3RlbUltYWdlLCBkZXN0
aW5hdGlvblJlY3QpOworICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPigpOwogfQorI2VuZGlm
IC8vIFVTRShDRykKIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQog
ewotICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIGFwcGVuZDxB
cHBseURldmljZVNjYWxlRmFjdG9yPihzY2FsZUZhY3Rvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBAIC0yMDIs
NDQgKzEwNiwzNCBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKQogICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQotewotICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwgbGluZVdpZHRoKTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFwcGVuZDxEcmF3TGluZT4ocG9p
bnQxLCBwb2ludDIpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxv
Y2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENs
aXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0xpbmVzRm9y
VGV4dD4oYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmlu
dGluZywgZG91YmxlTGluZXMpOworICAgIGFwcGVuZDxDbGlwPihjbGlwUmVjdCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxl
IHJ1bGUpCiB7Ci0gICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0
eWxlKTsKKyAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBhdGgsIHJ1bGUpOwogfQogCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsK
LSAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOworICAgIGFwcGVuZDxDbGlwT3V0PihjbGlw
UmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOworICAgIGFwcGVuZDxDbGlw
T3V0VG9QYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1
c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9m
ZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIu
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgs
IG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOwogfQogCiB2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAt
MjU3LDIzICsxNTEsMjIgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aEdy
YWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGcKICAgICBhcHBlbmQ8Rmls
bFJlY3RXaXRoR3JhZGllbnQ+KHJlY3QsIGdyYWRpZW50KTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlKQordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kPEZpbGxDb21wb3Np
dGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBtb2RlKTsKKyAgICBhcHBlbmQ8RmlsbFJvdW5kZWRS
ZWN0PihyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kPEZpbGxSb3Vu
ZGVkUmVjdD4ocmVjdCwgY29sb3IsIG1vZGUpOworICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVk
UmVjdCwgY29sb3IpOworICAgIGFwcGVuZDxGaWxsRWxsaXBzZT4ocmVjdCk7CiB9CiAKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxM
aW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVuZDxGaWxsTGluZT4obGluZSk7
CkBAIC0yOTMsNyArMTg2LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxCZXppZXJD
dXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewogICAgIGFwcGVuZDxGaWxsQmV6
aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
QEAgLTMwMSwyNSArMTkzLDE3IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxGaWxsUGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykK
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
IHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKQogewotICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwgZGVzdGlu
YXRpb24pOworICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MpOwog
fQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgd2lkdGgpOworICAgIGFwcGVuZDxTdHJva2VFbGxp
cHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYgbGluZSkKIHsKICAg
ICBhcHBlbmQ8U3Ryb2tlTGluZT4obGluZSk7CkBAIC0zMzksNyArMjIzLDYgQEAgdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYg
Y3VydmUpCiB7CiAgICAgYXBwZW5kPFN0cm9rZUJlemllckN1cnZlPihjdXJ2ZSk7CiB9Ci0KICNl
bmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM0NywzMyArMjMwLDg0IEBAIHZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAg
YXBwZW5kPFN0cm9rZVBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25l
c3MpCiB7Ci0gICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOworICAgIGFwcGVuZDxEcmF3
UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kPENsZWFyUmVjdD4ocmVjdCk7CisgICAgYXBwZW5kPERy
YXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGFw
cGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7Cit9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRB
cHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKKyAg
ICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
QXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmlu
Z1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPigpOworICAgIGFw
cGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQog
Ci0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1Jp
bmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBhcHBlbmQ8RHJhd0ZvY3VzUmlu
Z1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOworfQogCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXBwZW5kPEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKKyAgICBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihp
bWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwor
fQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdl
JiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit7CisgICAg
YXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Cit9
CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGFw
cGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKK3sK
KyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmll
cjsKKyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFn
ZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgYXBwZW5kPERyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRl
cik7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXBwZW5kPERy
YXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRp
ZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQoreworICAgIGFw
cGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNl
bmRpZgorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFu
Y2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBhcHBlbmQ8RHJhd0dseXBocz4o
Zm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlKTsKK30KKwor
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgYXBwZW5kPERyYXdMaW5lc0ZvclRl
eHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywg
cHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgYXBwZW5kPERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKIH0KIAogYm9vbCBSZWNvcmRlckltcGw6OnJlY29y
ZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSkKQEAgLTQxNywyMCArMzUxLDE2
IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdFeHRlbnQoZmxvYXQgYmx1clJh
ZGl1cykKIAogRmxvYXRSZWN0IFJlY29yZGVySW1wbDo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgYm91bmRzID0gcmVj
dDsKLSAgICBhdXRvJiBzdGF0ZSA9IGN1cnJlbnRTdGF0ZSgpOworICAgIGF1dG8gYm91bmRzID0g
cmVjdDsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93UmFk
aXVzOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGlmIChnZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgewotICAgICAgICBGbG9hdFJlY3Qgc2hh
ZG93RXh0ZW50ID0gYm91bmRzOwotICAgICAgICBzaGFkb3dFeHRlbnQubW92ZShzaGFkb3dPZmZz
ZXQpOwotICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQYWludGluZ0V4dGVudChz
aGFkb3dSYWRpdXMpKTsKKyAgICBpZiAoaGFzU2hhZG93KCkpIHsKKyAgICAgICAgYXV0byBzaGFk
b3dFeHRlbnQgPSBib3VuZHM7CisgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKGRyb3BTaGFkb3co
KS5vZmZzZXQpOworICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQYWludGluZ0V4
dGVudChkcm9wU2hhZG93KCkuYmx1clJhZGl1cykpOwogICAgICAgICBib3VuZHMudW5pdGUoc2hh
ZG93RXh0ZW50KTsKICAgICB9CiAKLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHN0YXRlLmNsaXBC
b3VuZHMsIHN0YXRlLmN0bS5tYXBSZWN0KGJvdW5kcykpOworICAgIHJldHVybiBpbnRlcnNlY3Rp
b24oY2xpcEJvdW5kcygpLCBnZXRDVE0oKS5tYXBSZWN0KGJvdW5kcykpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuaAppbmRleCA2NDIyNjVmMDk4MDIyY2YyYjA1ZjE4MGMxNzRmYTAzNDYyZjJkZDQwLi42
ZGU2YWVkZmZjYjE3ZGIyZDA4MWI0MmMxZGU2YmMzMjlhMzhiZjQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaApAQCAtMzUsOSArMzUsOCBAQCBjbGFzcyBS
ZWNvcmRlckltcGwgOiBwdWJsaWMgUmVjb3JkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVySW1wbCk7CiBwdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9
IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVySW1wbCgpOwotCisgICAgV0VCQ09SRV9FWFBP
UlQgUmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xp
cCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9LCBEcmF3R2x5cGhzUmVj
b3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIGNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKSBmaW5hbCB7IH0KQEAgLTQ3LDQ3ICs0NiwzNSBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHZvaWQgcmVjb3JkU2F2ZSgpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9y
ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ29uY2F0
ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKICAgICB2b2lkIHJlY29y
ZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgZmluYWw7CiAgICAgdm9pZCByZWNv
cmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PikgZmluYWw7CiAgICAgdm9pZCBy
ZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKExpbmVD
YXApIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5Jiwg
ZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihMaW5l
Sm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRTZXRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGZpbmFsOworCisjaWYgVVNFKENHKQor
ICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CisgICAgdm9pZCByZWNv
cmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgcmVjb3JkQmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRFbmRUcmFu
c3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRDbGlwKGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRS
dWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBP
dXRUb1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29u
c3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2
ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFu
Y2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJh
d0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
IGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsQ29tcG9z
aXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQgcmVjb3JkRmlsbExp
bmUoY29uc3QgTGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxBcmMoY29uc3Qg
QXJjRGF0YSYpIGZpbmFsOwpAQCAtOTUsMTEgKzgyLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBy
ZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5k
aWYKICAgICB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotI2lmIEVOQUJMRShW
SURFTykKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotI2VuZGlmCi0gICAgdm9pZCByZWNv
cmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
IGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQgcmVjb3JkU3Ry
b2tlTGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJj
KGNvbnN0IEFyY0RhdGEmKSBmaW5hbDsKQEAgLTEwNywxMyArOTMsMjggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpIGZp
bmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0jaWYg
VVNFKENHKQotICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7Cisg
ICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikgIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFBh
dGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0
IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgZmluYWw7CisgICAgdm9pZCByZWNv
cmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
ZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1J
bWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5h
bDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkg
ZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYp
IGZpbmFsOwogCiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJbWFnZSYpIGZpbmFs
OwogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1hZ2VCdWZmZXImKSBmaW5hbDsKQEAgLTEz
OSw2ICsxNDAsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCByZWNv
cmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKwogICAgIEZsb2F0UmVjdCBl
eHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKICAgICBEaXNw
bGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcAppbmRleCA4ZmYxOWQwMDM1NGNkYmVkZTNhNWJhMWFmNzU4Y2ZmMDIzYTI1YTIyLi42
NmZjOWQ4ODJhNGQzZjdkZThlODkxMmExZjMwYWYxOThkMDM1MjgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBs
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC05NywxMCArOTcsMTAgQEAgaW5saW5lIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gYXBwbHlTZXRT
dGF0ZUl0ZW0oR3JhcGgKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9OwogCi0g
ICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0
ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpKQorICAgIGlm
IChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVt
LnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0dXJuICppbWFnZUlk
ZW50aWZpZXI7CiAKLSAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGls
ZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uo
c2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0
dXJuICppbWFnZUlkZW50aWZpZXI7CiAKICAgICBzZXRTdGF0ZUl0ZW0uYXBwbHkoY29udGV4dCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9E
cmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKaW5kZXggZDA5
YzEzNzNlYTlhYWFmNGExODUxMzZlZTg4NTNkNzg4ZmM0MTc4ZC4uZmNhZGVmMjM4ZTA5ZmUwMjgy
YWNlZWM5YTFmMjVmODczMzlkOWM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNv
cmRlckhhcmZCdXp6LmNwcApAQCAtMjksMTcgKzI5LDE4IEBACiAjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURyYXdHbHlw
aHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgb3duZXIsIERl
Y29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQotICAgIDogbV9vd25l
cihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNz
Q29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2
ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25Db250ZXh0KGRlc3RpbmF0aW9u
Q29udGV4dCkKIHsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0g
ICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMs
IG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgbV9kZXN0aW5hdGlv
bkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBu
dW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCmluZGV4IDVkNjZlYjcyYWQxM2My
NGRhYzA5NWE5NDVmNjE0YTZmNTUyMjI0OTIuLmJlZDEzZWM1OTg0NzU3Njc1ZGM5MjlmZWRiNTU3
MjRkNDdkYTBiMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCkBAIC0yOSwxNyArMjks
MTggQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIo
R3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250
RnJvbUNvbnRleHQpCi0gICAgOiBtX293bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpE
cmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERl
Y29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQorICAgIDogbV9kZXN0
aW5hdGlvbkNvbnRleHQob3duZXIpCiB7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhp
bmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9kZSk7Cisg
ICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9kZSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggM2NmNzQ2MGM4
MGUzYmUxZDViYTNmMGNlZDdjMTliMjVkZjI5YWJmMi4uNzg1ZTk0YmVjZjA3Y2Q0YTg0YzljMzRk
OWNlY2M4Mzg1N2UwNjk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTI5MiwxMiArMjkyLDEyIEBA
IHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCiAgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCgyLCAyLCBzaXplLndpZHRoKCkgLSAz
LCBzaXplLmhlaWdodCgpIC0gMyk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6
d2hpdGUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDMpOwotICAgIGNvbnRleHQu
c2V0TGluZURhc2gobV9kYXNoV2lkdGhzLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
bV9kYXNoV2lkdGhzLCAwIH0pOwogICAgIG1fcGF0aC5hZGRSZWN0KGZyYW1lUmVjdCk7CiAgICAg
bV9wYXRoLmNsb3NlU3VicGF0aCgpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChtX3BhdGgpOwog
Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaChEYXNoQXJyYXkoKSwgMCk7CisgICAgY29udGV4dC5z
ZXRMaW5lRGFzaCh7IHsgfSwgMCB9KTsKICAgICBtX3BhdGguY2xlYXIoKTsKICAgICBtX3BhdGgu
bW92ZVRvKEZsb2F0UG9pbnQoMCwgYm94VG9wICsgYm94U2l6ZSkpOwogICAgIG1fcGF0aC5hZGRM
aW5lVG8oRmxvYXRQb2ludChzaXplLndpZHRoKCksIGJveFRvcCArIGJveFNpemUpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApp
bmRleCAxYjE4MmExZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0M2I3NjdkLi5lODBmMmVlODkx
OTM5MTQ0MThlODc4YmYwYTRhMjg0MGVlNjg5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBA
IGJvb2wgQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50
KEZyYW1lVmlldyYgZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5zZXRQYWludEJlaGF2aW9yKFBh
aW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CiAgICAgZnJhbWVWaWV3LnNl
dFBhaW50c0VudGlyZUNvbnRlbnRzKHRydWUpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBj
aGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBj
aGVja2VyQ29udGV4dChmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSwgTnVs
bEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250
ZW50ZnVsUGFpbnQpOwogICAgIGZyYW1lVmlldy5wYWludChjaGVja2VyQ29udGV4dCwgZnJhbWVW
aWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCkpOwogCiAgICAgZnJhbWVWaWV3LnNldFBh
aW50c0VudGlyZUNvbnRlbnRzKG9sZEVudGlyZUNvbnRlbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCmluZGV4IGM5YWIyMTc2MTQxZmE3YTMz
OWEyMDk3YjNhYmY5NzY1MDc4N2U0ZjEuLjRiZmY4ZDAwODM5MjUxNGNiZTYyY2E5NWQ0ZTc0M2Zj
MTk3ZjAxOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxp
cHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lz
Qm94LmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIExlZ2FjeUVsbGlwc2lzQm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGJv
b2wgc2V0U2hhZG93ID0gZmFsc2U7CiAgICAgaWYgKGxpbmVTdHlsZS50ZXh0U2hhZG93KCkpIHsK
ICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBsaW5lU3R5bGUuY29sb3JCeUFwcGx5aW5nQ29s
b3JGaWx0ZXIobGluZVN0eWxlLnRleHRTaGFkb3coKS0+Y29sb3IoKSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KExheW91dFNpemUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgpLnZhbHVl
KCksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxlLnRleHRT
aGFkb3coKS0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0
LnNldERyb3BTaGFkb3coeyBMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPngoKS52
YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVTdHlsZS50
ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAgICBz
ZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMjRjODJjOWQ2YmQ0M2Y3NGJhMDVhYjVh
Yzc2NzkzZDc1ZDE1ZTU3Ny4uOGQ5N2QyNTcxZTI0NTNkZjE5MjhiZGU2Yzc3Yzc2MzE1ZmJjODgy
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCkBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JC
YWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3QKICAgICAg
ICAgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KCk7CiAKICAgICBGbG9hdFNpemUgc2hhZG93
T2Zmc2V0KGJveFNoYWRvdy0+eCgpLnZhbHVlKCksIGJveFNoYWRvdy0+eSgpLnZhbHVlKCkpOwot
ICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKS52
YWx1ZSgpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9y
KCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpM
ZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICBjb250ZXh0LnNldERyb3BT
aGFkb3coeyBzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUu
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93
LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93
UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIH0KIAogSW50ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmNob29zZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCB2b2lkKiBsYXllciwgY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKQEAgLTIwODcsNyArMjA4Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gbGluZURhc2ggPSBEYXNoQXJyYXk6
OmZyb20oZGFzaExlbmd0aCwgZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRMaW5lRGFzaChXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7CisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExl
bmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5n
IHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTI0
NTYsNyArMjQ1Niw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9h
dFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhl
bChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNl
UGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAg
ICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4g
LSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAg
Y29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgICAgICBjb250ZXh0
LnNldERyb3BTaGFkb3coeyBzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpM
ZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwogCiAgICAgICAgICAgICBpZiAo
aGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFx
dWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBz
YXZlcyB0aW1lCkBAIC0yNTU4LDcgKzI1NTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwog
ICAgICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCiAgICAgICAgICAgICBh
dXRvIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSByb3VuZFNpemVUb0RldmljZVBpeGVscyhzaGFkb3dP
ZmZzZXQsIGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93
KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+
aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1Jh
ZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsg
c25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5p
c1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFk
aXVzTW9kZTo6RGVmYXVsdCB9KTsKICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUocGl4ZWxTbmFwcGVkT3V0ZXJSZWN0LCBwaXhlbFNuYXBwZWRIb2xlUmVjdCwgZmls
bENvbG9yKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCmluZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2MjMyMWZlZWQ5YjY4NmMzY2Qu
LjhjZjk2MWUwYmMyMzY0ZTk2MmNkYTg4MWY4NTllNGYzMWEzYzk4M2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjI1MywxNCArMjI1MywxNCBAQCB2b2lk
IFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IExheWVyUAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAg
IGJvb2wgdXNlc0NvbXBvc2l0ZU9wZXJhdGlvbiA9IGhhc0JsZW5kTW9kZSgpICYmICEocmVuZGVy
ZXIoKS5pc0xlZ2FjeVNWR1Jvb3QoKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJW
aWV3TGF5ZXIoKSk7CiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAg
ICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVy
YXRpb24oKSwgYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVN
b2RlKHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkgfSk7CiAjZW5k
aWYKIAogICAgICAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIocmVuZGVyZXIoKS5v
cGFjaXR5KCkpOwogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgaWYgKHVz
ZXNDb21wb3NpdGVPcGVyYXRpb24pCi0gICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7
CisgICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0LmNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICNlbmRpZgogCiAjaWZkZWYgUkVW
RUFMX1RSQU5TUEFSRU5DWV9MQVlFUlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggNWY5OGI5MTI0YTM0OWFjNzU1NzlmNzExMzVlZTBm
MzhhYmI0ZjEyZC4uM2UyZTZiZjFkZTVkNTRlYjM4ZDkyN2E1MWYwN2M4OTEwYWU2YzFiZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAg
LTE4MzEsNyArMTgzMSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJl
Z2lvbigpCiAgICAgfTsKIAogICAgIGF1dG8gdXBkYXRlRXZlbnRSZWdpb25Gb3JMYXllciA9IFsm
XShHcmFwaGljc0xheWVyJiBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgbnVsbENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKKyAgICAgICAgYXV0byBkaXJ0eVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQ
b2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NMYXllci5z
aXplKCkpOworICAgIAorICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KGRp
cnR5UmVjdCwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpO
b25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRB
QkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRp
dGFibGVSZWdpb24oKSkKQEAgLTE4NTMsOCArMTg1NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVFdmVudFJlZ2lvbigpCiAgICAgICAgICAgICBldmVudFJlZ2lvbkNvbnRleHQu
dW5pdGUoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoLWxheWVyT2Zmc2V0LCBncmFwaGljc0xh
eWVyLnNpemUoKSkpLCByZW5kZXJlcigpLnN0eWxlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
YXV0byBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KGdy
YXBoaWNzTGF5ZXIub2Zmc2V0RnJvbVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNpemUoKSkp
OwotICAgICAgICBwYWludEludG9MYXllcigmZ3JhcGhpY3NMYXllciwgbnVsbENvbnRleHQsIGRp
cnR5UmVjdCwgeyB9LCAmZXZlbnRSZWdpb25Db250ZXh0KTsKKyAgICAgICAgcGFpbnRJbnRvTGF5
ZXIoJmdyYXBoaWNzTGF5ZXIsIG51bGxDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVj
dCksIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7CiAKICAgICAgICAgZXZlbnRSZWdpb24udHJh
bnNsYXRlKHRvSW50U2l6ZShsYXllck9mZnNldCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggMzBjZDM0M2VhN2RmOTE2OGNjM2NkZTQ3ZGJlZjhm
NzU5ZTg4ZjczMS4uMjU2ZmM3NDk1NmRhMzM4NmE1NGQzNTJkZTExYjZmZjczNjY5YTFmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtNjA1LDcgKzYw
NSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3coY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0CiAgICAgY29uc3QgRmxvYXRTaXplIGlubmVy
U2hhZG93T2Zmc2V0IHsgMCwgNSB9OwogICAgIGNvbnN0ZXhwciBhdXRvIGlubmVyU2hhZG93Qmx1
ciA9IDEwLjBmOwogICAgIGF1dG8gaW5uZXJTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4g
eyAwLCAwLCAwLCAwLjA0ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KGlubmVyU2hhZG93T2Zm
c2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hh
ZG93Q29sb3IgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAog
ICAgIFBhdGggaW5uZXJTaGFkb3dQYXRoOwpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBQ
YWludEluZm8mIHBhaW4KICAgICAvLyBVc2UgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiwg
YmVjYXVzZSBpdCBjYWxjdWxhdGVzIHRoZSBibHVyIHJhZGl1cyBpbiBjb250ZXh0IHNwYWNlLAog
ICAgIC8vIHJhdGhlciB0aGFuIHNjcmVlbiBzcGFjZS4KICAgICBjb25zdGV4cHIgYXV0byBzaGFk
b3dDb2xvciA9IENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYUJ5dGUoMjYpOwotICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yKTsKKyAg
ICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFk
b3dDb2xvciB9KTsKIAogICAgIC8vIFRoZSBjaXJjbGUgbXVzdCBoYXZlIGFuIGFscGhhIGNoYW5u
ZWwgdmFsdWUgb2YgMSBmb3IgdGhlIHNoYWRvdyBjb2xvciB0byBhcHBlYXIuCiAgICAgQ0dGbG9h
dCBjaXJjbGVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDAsIDEgfTsKQEAgLTIyNzMsNyAr
MjI3Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hh
ZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAKICAgICBib29sIGlzRW1wdHkgPSAh
c3RhdGVzLmNvbnRhaW5zQW55KHsgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpDaGVja2VkLCBDb250
cm9sU3RhdGVzOjpTdGF0ZXM6OkluZGV0ZXJtaW5hdGUgfSk7CiAgICAgYXV0byBmaXJzdFNoYWRv
d0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIGlzRW1wdHkgPyAwLjA1ZiA6IDAu
MWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFk
b3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBp
bm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yIH0pOwog
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVy
U2hhZG93UGF0aDsKQEAgLTIyOTAsNyArMjI5MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBh
aW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
CiAgICAgY29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogCiAgICAgY29uc3RleHBy
IGF1dG8gc2Vjb25kU2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMSwgMSwgMSwgMC41
ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwgc2Vjb25k
U2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IDAs
IDAgfSwgMSwgc2Vjb25kU2hhZG93Q29sb3IgfSk7CiAKICAgICBjb250ZXh0LmZpbGxQYXRoKGlu
bmVyU2hhZG93UGF0aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KaW5kZXggMDEwZWNiYWVkODdhNzNhNDIwYWZiOTdlOGU4MGZlYTYzNzlmZWQzZS4uMTBk
YzkwZTU3ZTVhZTBmNDI1YTBkYWFhMzY0ZjgxNGU0NDk0OTkwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjgxNiw3ICsyODE2LDcgQEAgc3RhdGlj
IHZvaWQgcGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIoY29uc3QgUmVuZGVyQXR0YWNo
bWVudCYgYXR0YWNobWVudCwKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHBsYWNlaG9sZGVy
Qm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQ
bGFjZWhvbGRlckJvcmRlcldpZHRoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKERhc2hl
ZFN0cm9rZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7YXR0YWNobWVudFBsYWNlaG9sZGVy
Qm9yZGVyRGFzaExlbmd0aH0sIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IGF0dGFj
aG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGggfSwgMCB9KTsKICAgICBjb250ZXh0LnN0
cm9rZVBhdGgoYm9yZGVyUGF0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXggNjc1NTY4YWZmNjExOGYwMTNiZDFk
NGY1NWE2YzM2NGZhOGFmMzhlOC4uODMwOWIyZjhkNGEzMWZhMDNiMWFiZjg0MzlkYTBmM2VmMTYy
ODQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9u
UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9u
UGFpbnRlci5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFRleHREZWNvcmF0aW9uUGFpbnRl
cjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgYwog
ICAgICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CiAgICAgICAg
ICAgICBpZiAobV9zaGFkb3dDb2xvckZpbHRlcikKICAgICAgICAgICAgICAgICBtX3NoYWRvd0Nv
bG9yRmlsdGVyLT50cmFuc2Zvcm1Db2xvcihzaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQp
LCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIG1f
Y29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd1gsIHNoYWRvd1kgLSBleHRy
YU9mZnNldCksIHNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiAgICAg
ICAgICAgICBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCA4ODVkODI2ZWU5ZTc5NmY0YjVjNWI1
ODMzZjcxYTAyOGM0NTQxYTdhLi5mZTg4NjljMTllNWY4ZDQzYjdmYTE2ZTQwMWI0ZmJjNmRjZjdl
ZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgU2hhZG93QXBwbGllcjo6U2hhZG93QXBwbGllcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywKICAgICB9CiAKICAgICBpZiAoIW1fYXZv
aWREcmF3aW5nU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvd0Nv
bG9yIH0pOwogfQogCiBpbmxpbmUgYm9vbCBTaGFkb3dBcHBsaWVyOjppc0xhc3RTaGFkb3dJdGVy
YXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAKaW5kZXggN2VkNTM3YzkyNzkzNzcwZjQ0ODhhZTI5ZGY0MDcyN2Q3ZWIxYTNhOS4uNmM3MzBl
ZjA3ZTQ4YzdlY2Y4YzQwZTM3ZTAwMzQ1Y2ZhYjU2YzY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02OSw3ICs2OSw3IEBAIEZsb2F0
UmVjdCBSZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVVcGRhdGVkU3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdAogc3RhdGljIHZvaWQgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQogewogICAgIGlmIChhdXRvIGdyYWRpZW50ID0gY29udGV4dC5zdHJva2VHcmFkaWVu
dCgpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqZ3JhZGllbnQsIGNvbnRleHQu
c3RhdGUoKS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgY29udGV4dC5z
ZXRGaWxsR3JhZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0cm9rZVNwYWNlVHJhbnNmb3JtKCkp
OwogICAgIGVsc2UgaWYgKFBhdHRlcm4qIHBhdHRlcm4gPSBjb250ZXh0LnN0cm9rZVBhdHRlcm4o
KSkKICAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqcGF0dGVybik7CiAgICAgZWxzZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
aW5kZXggY2MzOGVjNzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4uYjY1ODY4ZDFi
ZDM0YzkwZDRiYmZkZDQ3N2FkMmM3NDI4MmEwNTZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC01MDEsMTAgKzUwMSwxMiBA
QCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNhblNl
dExpbmVEYXNoKQotICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGxl
bmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKSAq
IHNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3Zl
KGRhc2hBcnJheSksIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tl
RGFzaE9mZnNldCgpKSAqIHNjYWxlRmFjdG9yIH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICB9CisKKyAgICBjb250
ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6c3R5
bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
cmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJp
bmdDb250ZXh0LmNwcAppbmRleCAyZmI4ZjMzYTg3MGRmY2NlYjYyZTE0OTY1NmIxNDQzNzIyZWJl
YTJkLi5mNTc5ZTVhNzVmZTkxMGY2ZTViNThhOWFlZmI2ODM1ODk2MjIxMGU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAK
QEAgLTExNSwxMiArMTE1LDEyIEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRv
UmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUGFpCiAgICAgICAgIGlm
IChvcGFjaXR5IDwgMSB8fCBoYXNCbGVuZE1vZGUgfHwgaXNvbGF0ZU1hc2tGb3JCbGVuZGluZyB8
fCBoYXNJc29sYXRpb24pIHsKIAogICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkKLSAgICAg
ICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJhdGlvbiht
X3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5ibGVuZE1v
ZGUoKSk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3Np
dGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgc3R5
bGUuYmxlbmRNb2RlKCkgfSk7CiAKICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCku
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgICAgICAgICAgaWYgKGhhc0Js
ZW5kTW9kZSkKLSAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigp
LCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRl
eHQoKS5zZXRDb21wb3NpdGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVP
cGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAKICAgICAgICAgICAgIG1fcmVuZGVy
aW5nRmxhZ3MgfD0gRW5kT3BhY2l0eUxheWVyOwogICAgICAgICB9CkBAIC0yNzMsNyArMjczLDcg
QEAgYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQogCiAgICAgLy8gSW52YWxpZGF0ZSBhbiBleGlzdGluZyBi
dWZmZXIgaWYgdGhlIHNjYWxlIGlzIG5vdCBjb3JyZWN0LgogICAgIGlmIChpbWFnZUJ1ZmZlcikg
ewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRl
eHQoKS5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250
ZXh0KCkuZ2V0Q1RNKCk7CiAgICAgICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0JveCA9IGV4
cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXplIGJ1ZmZl
clNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lkdGgoKSAq
IHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3Vu
ZGluZ0JveC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKICAgICAgICAgaWYgKGJ1
ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCA0ZGQ3ZjgwZTM3Nzc5ODdkY2I3MGMxYTNjOGE4
N2NkOGE0ZmQ2ZmI5Li5jZDg4YWRmMDhkZGE4MDNiZmQ5M2Y4OTU3NzQwNzY4NmFjNGM1NDYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTI2OSwxNCArMjY5
LDE0IEBAIEltYWdlRHJhd1Jlc3VsdCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjCiAgICAgQVNTRVJUKHZpZXcpOwogCiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0
aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRl
eHQuY2xpcChlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpKTsKIAogICAgIGZsb2F0IGFscGhhID0g
Y29udGV4dC5hbHBoYSgpOwogICAgIGJvb2wgY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5zcGFyZW5j
eUxheWVyID0gb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpICE9IENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyIHx8IG9wdGlvbnMuYmxlbmRNb2RlKCkgIT0gQmxlbmRNb2RlOjpOb3JtYWwg
fHwgYWxwaGEgPCAxOwogICAgIGlmIChjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJlbmN5TGF5
ZXIpIHsKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGFscGhhKTsKLSAg
ICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3Np
dGVNb2RlKHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFs
IH0pOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaG9ub3Igb3B0aW9ucy5vcmll
bnRhdGlvbigpLCBzaW5jZSBJbWFnZUJpdG1hcCdzIGZsaXBZIGhhbmRsaW5nIHJlbGllcyBvbiBp
dC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAwMQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDU0MzgxODJkZGU4NzYzZWJhZDM4ZjE5MmRmNzk1
YWEwNjBiNjUxYmIuLjhkYTM5MGY2ZGE3MGUzNzk1NTBhNTcyZTA5ZTA4NDExODljMmRkZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTc0LDMxICs3NCw2IEBAIHZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgaGFuZGxlSXRlbShEaXNwbGF5
TGlzdDo6UmVzdG9yZSgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0
OjpUcmFuc2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpSb3Rh
dGUoYW5nbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNj
YWxlKHNjYWxlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxp
c3Q6OlNldENUTShjdG0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpj
b25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBoYW5kbGVJ
dGVtKERpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTShjdG0pKTsKLX0KLQogdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpzZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxDb2xvciYmIGl0ZW0pCiB7CiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsK
QEAgLTEyOCw0MCArMTAzLDE1IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0
U3RhdGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlJiYgaXRlbSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfTsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlQ2hhbmdl
KCkubV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxl
SW1hZ2UoaXRlbS5zdGF0ZSgpLnN0cm9rZUJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFuZ2UoKS5t
X3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2Uo
aXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYg
aXRlbSkKLXsKLSAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwotfQotCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1p
dCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0KGxpbWl0KSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93KCkpOwotfQotCiB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewog
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsaXAocmVjdCkpOwpAQCAtMzcxLDE0ICszMjEs
OSBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aEdyYWRpZW50
KERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcgogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVt
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBvc2l0ZWRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwg
YmxlbmRNb2RlKSk7CisgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
KHJlY3QsIGNvbG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5oCmluZGV4IDNiYmFmNzY1ZDA1ZjQ0YWJmNGQ5NjFlNzY2Y2U2NTQ2OThl
ZGUyOTQuLjgxODg5NjZhZmZhNzA5ZTZmZDBhMzFiZmNhNmMzZTcxODU2NWM1OGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtNTksMjAgKzU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2F2ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlKTsKLSAgICB2b2lkIHNj
YWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgY29uY2F0ZW5hdGVDVE0o
Y29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBzZXRJbmxpbmVGaWxs
Q29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmKTsKICAgICB2
b2lkIHNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVT
dHJva2VDb2xvciYmKTsKICAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CiAgICAg
dm9pZCBzZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUmJik7Ci0gICAgdm9p
ZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApOwotICAgIHZvaWQgc2V0TGluZURhc2goV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYpOwotICAgIHZvaWQgc2V0TGluZUpvaW4o
V2ViQ29yZTo6TGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0gICAg
dm9pZCBjbGVhclNoYWRvdygpOwogICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAg
dm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKQEAgLTk3LDgg
Kzg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoR3JhZGll
bnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50JiYpOwotICAgIHZv
aWQgZmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5k
TW9kZSk7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogICAgIHZvaWQgZmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KaW5kZXggMjgwMmZmZThmODM5N2Mw
ZWQ0ZGYxMjFhMDE3ZmU3ODEwOGZmNmMyMC4uNDE0YzMxYTEzMjBjMGIyZTc4NmJjOGQ5ZjY1OTgx
MDJkODcwZjQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMu
aW4KQEAgLTI1LDQ3ICsyNSwzNSBAQAogbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgU2F2ZSgpCiAgICAgUmVzdG9yZSgpCi0g
ICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgUm90YXRlKGZsb2F0IGFuZ2xlKQot
ICAgIFNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZSBzY2FsZSkKLSAgICBTZXRDVE0oV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIGN0bSkKLSAgICBDb25jYXRlbmF0ZUNUTShXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gY3RtKQorCiAgICAgU2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVGaWxsQ29sb3IgaXRlbSkKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3IgaXRlbSkKICAgICBTZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIFNldFN0YXRlKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRTdGF0ZSBpdGVtKQotICAgIFNldExpbmVDYXAoZW51bTp1aW50OF90IFdl
YkNvcmU6OkxpbmVDYXAgbGluZUNhcCkKLSAgICBTZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZURhc2ggaXRlbSkKLSAgICBTZXRMaW5lSm9pbihlbnVtOnVpbnQ4X3QgV2Vi
Q29yZTo6TGluZUpvaW4gbGluZUpvaW4pCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkK
LSAgICBDbGVhclNoYWRvdygpCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVybigp
CisgICAgQXBwbHlGaWxsUGF0dGVybigpCisjZW5kaWYKKyAgICBBcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKKwogICAgIENsaXAoV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QpCisgICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgQ2xpcE91dChXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQogICAgIENsaXBPdXRUb1BhdGgoV2ViQ29yZTo6
UGF0aCBwYXRoKQotICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90
IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQotICAgIERyYXdHbHlwaHMoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHMgaXRlbSkKLSAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNl
SW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6
OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIpCi0gICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6
OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBz
dHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBEcmF3TmF0
aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRp
ZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRl
c3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdl
UGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd1N5c3RlbUltYWdlKFJlZjxXZWJDb3Jl
OjpTeXN0ZW1JbWFnZT4gc3lzdGVtSW1hZ2UsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlv
blJlY3QpCi0gICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3Jl
OjpGbG9hdFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0s
IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBz
dHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBCZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KQotICAgIERyYXdSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCi0gICAgRHJhd0xpbmUoV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDEsIFdlYkNvcmU6
OkZsb2F0UG9pbnQgcG9pbnQyKQotICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgRHJhd0VsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJl
Y3QpCi0gICAgRHJhd1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIERyYXdGb2N1c1JpbmdQ
YXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29y
ZTo6Q29sb3IgY29sb3IpCi0gICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpG
bG9hdFJlY3Q+IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xv
ciBjb2xvcikKKyAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJl
Y3QgZGVzdGluYXRpb25SZWN0KQorCisgICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KQorCiAgICAgRmlsbFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAgICAgRmlsbFJl
Y3RXaXRoQ29sb3IoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9y
KQogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhHcmFkaWVudCBpdGVtKQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpD
b21wb3NpdGVPcGVyYXRvciBvcCwgZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9kZSBibGVu
ZE1vZGUpCi0gICAgRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgcmVj
dCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVuZE1vZGUg
YmxlbmRNb2RlKQorICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0
IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJvdW5k
ZWRIb2xlUmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBGaWxsRWxsaXBzZShXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBG
aWxsTGluZShzdHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBGaWxsQXJjKHN0cnVj
dCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC03MywxMSArNjEsMTAgQEAgbWVzc2FnZXMgLT4g
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgRmls
bEJlemllckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRp
ZgogICAgIEZpbGxQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBGaWxsRWxsaXBzZShXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLSAgICBU
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9y
U3BhY2UpCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRp
ZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCisKICAgICBT
dHJva2VSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisKKyAg
ICBTdHJva2VFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogICAgIFN0cm9rZUxpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRh
dGEpCiAgICAgU3Ryb2tlQXJjKHN0cnVjdCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC04NSwx
MyArNzIsMzEgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZD
b3VudGVkIFN0cmVhbSB7CiAgICAgU3Ryb2tlQmV6aWVyQ3VydmUoc3RydWN0IFdlYkNvcmU6OkJl
emllckN1cnZlRGF0YSBkYXRhKQogI2VuZGlmCiAgICAgU3Ryb2tlUGF0aChXZWJDb3JlOjpQYXRo
IHBhdGgpCi0gICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBD
bGVhclJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0jaWYgVVNFKENHKQotICAgIEFwcGx5
U3Ryb2tlUGF0dGVybigpCi0gICAgQXBwbHlGaWxsUGF0dGVybigpCisKKyAgICBEcmF3UmVjdChX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIERyYXdM
aW5lKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50
MikKKworICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIERyYXdQ
YXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKKworICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNvcmU6
OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29s
b3IpCisgICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKwor
ICAgIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZs
b2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlcikKKyAg
ICBEcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCwg
V2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyBvcHRpb25zKQorICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVt
SW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQor
ICAgIERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUgaW1hZ2VTaXplLCBXZWJDb3JlOjpG
bG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3UGF0dGVybihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB0aWxlUmVjdCwgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwaGFzZSwg
V2ViQ29yZTo6RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyBvcHRpb25zKQorI2lmIEVOQUJMRShWSURFTykKKyAgICBQYWludEZyYW1lRm9yTWVk
aWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZs
b2F0UmVjdCBkZXN0aW5hdGlvbikKICNlbmRpZgotICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgc2NhbGVGYWN0b3IpCisKKyAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3R2x5cGhzIGl0ZW0pCisgICAgRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCBpdGVtKQorICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKKworICAgIENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQorICAgIFRy
YW5zZm9ybVRvQ29sb3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JT
cGFjZSkKICAgICBGbHVzaENvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5LmNwcAppbmRleCA4NTc3Y2JiZGU2ZDM5MDFkMzQ3MDc2MWVkMzBmNzlkOThlODJi
OThkLi42Y2ZiYWJjYTdiY2ZiZWRjNTk1NDgzZThlZWIxZDVhYjEyMDk2NmE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCkBAIC0zMiwzNiArMzIsMjEg
QEAKICNpbmNsdWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9NZWRpYVBsYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHkoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkmIHJlbmRlcmluZ0JhY2tlbmQsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVy
OjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogRGlz
cGxheUxpc3Q6OlJlY29yZGVyKHsgfSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3Ry
dWN0RHJhd0dseXBocykKKyAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcihpbml0aWFsQ2xpcCwg
aW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kZXN0aW5hdGlvbkJ1
ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkp
CiAgICAgLCBtX2ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKQogICAgICwgbV9yZW5kZXJpbmdCYWNr
ZW5kKHJlbmRlcmluZ0JhY2tlbmQpCiB7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xv
clNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2Zv
cm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOwotfQotCiBSZW5kZXJpbmdNb2RlIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXIgPyBtX2ltYWdlQnVmZmVyLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwpAQCAtNzcsMzEgKzYyLDYgQEAgdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc3RvcmUoKQogICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpU
cmFuc2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJvdGF0ZShhbmdsZSkpOwotfQotCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2Fs
ZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTY2Fs
ZShzY2FsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldENUTSh0cmFuc2Zvcm0pKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENvbmNhdGVu
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNvbmNhdGVuYXRlQ1RNKHRyYW5zZm9y
bSkpOwotfQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0
SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldElubGluZUZpbGxDb2xvcihEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yIHsgY29sb3IgfSkpOwpAQCAtMTE3LDkyICs3NywyNiBA
QCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzIGZsYWdzKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OlNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7IHN0YXRlLCBmbGFncyB9KSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5l
Q2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTZXRMaW5lQ2FwKGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYg
YXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIHsg
YXJyYXksIGRhc2hPZmZzZXQgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUpvaW4obGluZUpv
aW4pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNl
dE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyU2hhZG93KCkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6Q2xpcChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0KHJlY3QpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6Q2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1Bh
dGgocGF0aCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmls
dGVyJiBmaWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXI+IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdlKQotICAgICAgICBpZGVudGlm
aWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOwotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJS
ZWZlcmVuY2UoUmVmPEZpbHRlcj4geyBmaWx0ZXIgfSkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUg
eyBzdGF0ZSB9KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291
bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2Rl
KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdH
bHlwaHMoRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgeyBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBj
b3VudCwgbG9jYWxBbmNob3IsIG1vZGUgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZm
ZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCisjaWYgVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmllciwgaW1h
Z2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKIH0KIAot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFn
ZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5Rmls
bFBhdHRlcm4oKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVy
bigpKTsKIH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihp
bWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKQEAgLTIxNSw0NCArMTA5LDM0IEBAIHZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIHdpZHRo
KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGlu
ZShwb2ludDEsIHBvaW50MikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0
aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdMaW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBibG9j
a0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVMaW5lcyB9KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Q2xpcChyZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIHJ1bGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsK
IH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RWxsaXBzZShyZWN0KSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChy
ZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dFRvUGF0
aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9m
ZnNldCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpDbGVhclJlY3QocmVjdCkpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjcwLDIz
ICsxNTQsMjIgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZp
bGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYKICAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlz
dDo6RmlsbFJlY3RXaXRoR3JhZGllbnQgeyByZWN0LCBncmFkaWVudCB9KSk7CiB9CiAKLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBt
b2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmls
bFJvdW5kZWRSZWN0KHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBtb2Rl
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRlZFJlY3Qocm91bmRlZFJlY3Qs
IGNvbG9yLCBtb2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxFbGxpcHNlKHJlY3Qp
KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGRhdGEp
CiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbExp
bmUoZGF0YSkpOwpAQCAtMzA2LDcgKzE4OSw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhCiB7
CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEJlemll
ckN1cnZlKGRhdGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
CiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKQEAgLTMxNCwyMyArMTk2LDE3IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxQYXRoKHBhdGgpKTsK
IH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRp
ZmllcigpLCBkZXN0aW5hdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlUmVj
dChyZWN0LCB3aWR0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OlN0cm9rZUVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCi0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJv
a2VMaW5lKGNvbnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUxpbmUoZGF0YSkpOwpAQCAtMzUwLDcgKzIyNiw2
IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VCZXpp
ZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlQmV6aWVyQ3VydmUoZGF0YSkpOwogfQotCiAjZW5k
aWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNTgs
MzMgKzIzMyw4NCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZVBhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlRWxsaXBz
ZShyZWN0KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyUmVjdChyZWN0
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xp
bmUocG9pbnQxLCBwb2ludDIpKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d0VsbGlwc2UocmVjdCkpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigp
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0
aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRBcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChw
YXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0
cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQs
IGNvbG9yKSk7Cit9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihzY2FsZUZhY3RvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIEZpbHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkKKyAgICAg
ICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rmls
dGVyZWRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIElQ
Qzo6RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7Cit9CisKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGlt
YWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOwor
fQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpKTsKK30KKwor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFn
ZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucykpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklk
ZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9y
TWVkaWEoaWRlbnRpZmllciwgZGVzdGluYXRpb24pKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFu
Y2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
IHsgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsK
K30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmVzRm9y
VGV4dChEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IEZsb2F0UG9pbnQoKSwgdG9GbG9h
dFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzIH0p
KTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkp
OwogfQogCiBib29sIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3Vy
Y2VVc2UoTmF0aXZlSW1hZ2UmIGltYWdlKQpAQCAtNDM0LDExICszNjAsNiBAQCBib29sIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoRm9udCYgZm9udCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OmZsdXNoQ29udGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmll
cikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVz
aENvbnRleHQoaWRlbnRpZmllcikpOwotfQotCiBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2Rl
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAog
ewogICAgIGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkgewpAQCAtNDY0LDYgKzM4
NSwyMSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6Y3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbgogICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3Bh
Y2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJh
bnNmb3JtVG9Db2xvclNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworfQorCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KEdyYXBoaWNzQ29udGV4dEZs
dXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkZsdXNoQ29udGV4dChpZGVudGlmaWVyKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCmluZGV4IDliMzNhMDY3ZmQxNmJj
Y2YxNDA0MmMxOTc0ZGQ2OTE5NDIyNjI0NjguLmYyYWQ4ZDBhYTQ1ODU4OWFlZTgxOTA3ZDljOTA4
OTZkMzRiNmY3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHku
aApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTsKIAogY2xhc3MgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlciB7CisgICAgZnJpZW5kIGNs
YXNzIFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKIHB1YmxpYzoKICAgICBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHkoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBj
b25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6
RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIH5SZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHkoKSA9IGRlZmF1bHQ7CkBAIC01MCw2MyArNTEsMzkgQEAgcHVibGljOgogICAgIHZv
aWQgZmx1c2hDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllcikg
ZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNl
bmQoVCYmIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5n
QmFja2VuZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9uZWVkc0ZsdXNoID0g
dHJ1ZTsKLSAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZSht
ZXNzYWdlKSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwotICAgIH0KLQotICAgIGZy
aWVuZCBjbGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7Ci0KICAgICBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgcmVj
b3JkU2F2ZSgpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkUm90YXRlKGZsb2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ29uY2F0
ZW5hdGVDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKICAgICB2
b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90PikgZmlu
YWw7CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpTUkdCQTx1
aW50OF90PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXAp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFy
cmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lSm9p
bihXZWJDb3JlOjpMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0
KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7CisgICAg
dm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSYp
IGZpbmFsOworCisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJu
KCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5k
aWYKKworICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7
CisgICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9p
ZCByZWNvcmRDbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBm
aW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1
ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsK
ICAgICB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6
OldpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KFdlYkNvcmU6OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ds
eXBocyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9udFNtb290
aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6
OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6Oklt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1h
Z2UoV2ViQ29yZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAg
ICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYmxvY2tMb2NhdGlv
biwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3Rz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBU
b0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmls
bFJlY3RXaXRoQ29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6
QmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3Jl
OjpCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
ICAgIHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBmaW5hbDsK
ICAgICB2b2lkIHJlY29yZEZpbGxBcmMoY29uc3QgV2ViQ29yZTo6QXJjRGF0YSYpIGZpbmFsOwpA
QCAtMTE0LDkgKzkxLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3Vy
dmUoY29uc3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2
b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRTdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKwor
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQogICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBXZWJDb3JlOjpMaW5lRGF0
YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IFdlYkNvcmU6OkFyY0Rh
dGEmKSBmaW5hbDsKQEAgLTEyNCwxMyArMTAyLDI4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNv
cmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEmKSBmaW5h
bDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRo
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJlY29yZEFwcGx5U3Ry
b2tlUGF0dGVybigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZp
bmFsOworCisgICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUo
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBwb2ludDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25z
dCBXZWJDb3JlOjpQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQ
YXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1Jl
Y3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3Jk
RHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVyJikgZmluYWw7
CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlv
bnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShXZWJDb3JlOjpTeXN0
ZW1JbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKKyAg
ICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29u
c3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25z
dCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2Rl
KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwogCiAgICAg
Ym9vbCByZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpIGZpbmFsOwogICAg
IGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5hbDsKQEAg
LTE0MSw2ICsxMzQsMTggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBj
b25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6UmVuZGVyaW5nTWV0aG9kPikgY29uc3QgZmluYWw7CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2VuZChUJiYgbWVzc2FnZSkKKyAgICB7CisgICAgICAg
IGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBtX25lZWRzRmx1c2ggPSB0cnVlOworICAgICAgICBtX3JlbmRlcmluZ0JhY2tl
bmQtPnNlbmRUb1N0cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rlc3RpbmF0aW9uQnVmZmVySWRl
bnRpZmllcik7CisgICAgfQorCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KSBmaW5hbDsKKwogICAgIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcjsKICAgICBXZWFrUHRyPFdlYkNvcmU6Oklt
YWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwogICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5PiBtX3JlbmRlcmluZ0JhY2tlbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggMWQ2NDNiNmI0Mjg4ZDA4
ZTAzOGM0NjI1ZDA1NDlkZTY4YWYyYWE3Ny4uMDc5OTNiMzgwZjFlYTdkMzQ5ZGQ3ZWJmYzE2MGM4
MDRkYWQ0M2UzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0ZpbmRDb250cm9sbGVyLmNwcApAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgRmluZENvbnRyb2xs
ZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIGNvCiAKICAgICAvLyBEcmF3IHdoaXRlIGZyYW1lcyBhcm91bmQgdGhlIGhvbGVzLgogICAg
IC8vIFdlIGRvdWJsZSB0aGUgdGhpY2tuZXNzIGJlY2F1c2UgaGFsZiBvZiB0aGUgc3Ryb2tlIHdp
bGwgYmUgZXJhc2VkIHdoZW4gd2UgY2xlYXIgdGhlIGhvbGVzLgotICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFk
b3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BT
aGFkb3coeyBGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0Js
dXJSYWRpdXMsIHNoYWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VD
b2xvcihDb2xvcjo6d2hpdGUpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25l
c3MoYm9yZGVyV2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiB3aGl0ZUZyYW1lUGF0
aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3Vu
ZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCBmMTZmNzk2ZTA0N2U5OTE5
NzJjMGVkMWY0YWUxMTNjZTE2NTY1YzEwLi40OWUwMGJlMzM3ZWFmZWUxMjkzZWYwNzdhZGY2MTdj
ZGFlM2Q0YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0Nyw3ICsy
NDcsNyBAQCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29y
ZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogCiAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBncmFw
aGljc0NvbnRleHQuc2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBz
aGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBo
aWNzQ29udGV4dC5zZXREcm9wU2hhZG93KHsgV2ViQ29yZTo6RmxvYXRTaXplKHNoYWRvd09mZnNl
dFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAg
ICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRDb2xvcik7CiAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JCb3JkZXJXaWR0aCAqIDIpOwog
ICAgIGZvciAoYXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlOTdjMjBhNGZmNWJlNDFkOWMzMjA1
N2M1MDgxY2ZmYzRiODFhNGE2Li4yYWY4MWMyYTFmYzVmNjhiYTA0MGYzZDAxNGY0MjE3ZjRlYjM2
MWUyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMjItMDMtMTQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91
bGQgYmUgbGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcDoKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIyLTAzLTE0ICBKb25hdGhhbiBCZWRhcmQg
IDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbZ2l0LXdlYmtpdF0gSGFuZGxlIGNvbXBh
cmluZyBVc2VyIGFuZCBDb250cmlidXRvciB0byBOb25lCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3Rz
Q0cuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAppbmRleCA4ZTQxYzVhNzNhZTM2ODRjZWRkZjFmOTRm
OWYxNzE4OTUzNTE0YzlmLi5lYmU2NDQ4NzFlMjhmNTE5Y2QyNjEyMGI4YTgyNzg4NmMwMTkwMmJm
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKQEAg
LTU0LDcgKzU0LDcgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJhc2lj
KQogICAgIEdyYXBoaWNzQ29udGV4dENHIHByaW1hcnlDb250ZXh0KHByaW1hcnlDR0NvbnRleHQu
Z2V0KCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNv
cmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwg
MCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwg
c2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0
aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgo
cHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC05MCwxMCArOTAsMTAgQEAg
VEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJhc2ljKQogVEVTVChCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIFRleHQpCiB7CiAgICAgSW5NZW1vcnlEaXNwbGF5TGlz
dCBwcmltYXJ5RGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHByaW1hcnlDb250ZXh0KHBy
aW1hcnlEaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250
ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgcHJpbWFyeUNvbnRleHQocHJpbWFy
eURpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0
KSk7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IHNlY29uZGFyeURpc3BsYXlMaXN0OwotICAg
IFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeURpc3BsYXlMaXN0LCB7IH0s
IEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAg
IFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeURpc3BsYXlMaXN0LCBGbG9h
dFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7
CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0
cywgQm9yZGVycykKICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmltYXJ5Q29udGV4dChwcmltYXJ5
Q0dDb250ZXh0LmdldCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7
Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIHsgfSwgRmxv
YXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVj
b3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBj
b250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtMjI4LDcg
KzIyOCw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUcmFuc2Zvcm1l
ZENsaXApCiAgICAgR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCA9IHByaW1hcnlDb250
ZXh0Q0c7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29y
ZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAs
IDAsIDEwMCwgMTAwKSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERM
KGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBHcmFwaGljc0Nv
bnRleHQmIHNlY29uZGFyeUNvbnRleHQgPSBzZWNvbmRhcnlDb250ZXh0REw7CiAKICAgICBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4
dCk7CkBAIC0yODcsMTUgKzI4NywxNSBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRU
ZXN0cywgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKICAgICBHcmFwaGljc0NvbnRleHQmIHByaW1h
cnlDb250ZXh0ID0gcHJpbWFyeUNvbnRleHRDRzsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3Qg
ZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRETChkaXNwbGF5
TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApLCB7IH0pOworICAgIFJlY29yZGVy
SW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCAxMDAs
IDEwMCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5Q29udGV4dCA9IHNlY29uZGFy
eUNvbnRleHRETDsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlD
b250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIAogICAgIGN0eC5hcHBseURldmljZVNjYWxlRmFj
dG9yKDIpOwogCi0gICAgYXV0byBwcmltYXJ5Q1RNID0gcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlOjpEZWZpbml0ZWx5SW5jbHVkZURldmlj
ZVNjYWxlKTsKLSAgICBhdXRvIHNlY29uZGFyeUNUTSA9IHNlY29uZGFyeUNvbnRleHQuZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlOjpEZWZpbml0ZWx5SW5jbHVkZURl
dmljZVNjYWxlKTsKKyAgICBhdXRvIHByaW1hcnlDVE0gPSBwcmltYXJ5Q29udGV4dC5nZXRDVE0o
KTsKKyAgICBhdXRvIHNlY29uZGFyeUNUTSA9IHNlY29uZGFyeUNvbnRleHQuZ2V0Q1RNKCk7CiAK
ICAgICBFWFBFQ1RfRVEocHJpbWFyeUNUTS54U2NhbGUoKSwgc2Vjb25kYXJ5Q1RNLnhTY2FsZSgp
KTsKICAgICBFWFBFQ1RfRVEocHJpbWFyeUNUTS55U2NhbGUoKSwgc2Vjb25kYXJ5Q1RNLnlTY2Fs
ZSgpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA1MTc3ZWQ5Mjk4MGRkOGQ0YmE0YmYzYWYzZDE0MTA2YTYyZmQ2Yjg3Li5j
NGY5NmMxYjhjODcyY2Q4YTgwNThkMjFjNDRhNmRlN2UxMjMzOWE2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMjItMDMtMTQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6
aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRl
cy1zaGFkb3ctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5j
bHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2xh
eWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvcmVw
bGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMi0wMy0xNCAgQW50b2lu
ZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbbW9kZWxdIDxtb2RlbCBp
bnRlcmFjdGl2ZT4gZG9lc24ndCBhbGxvdyBtb2RlbCB0byBiZSByb3RhdGVkIG9uIGlPUwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ct
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CmluZGV4IDUxMWI3YzBjNTRkMzMyMTZiN2M2ZWFmMDQzYTc1YzE2
NzY2ZDA0MjcuLmRiZjU0YjNlYTIwNGUxOTI0YmQ0MzVkNTE3MzZkYzczNDc3MDJjZmYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVz
LXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTEsMTcgKzEsMTMgQEAKIAotKHRyYW5zbGF0ZQotICAo
eCAwLjAwKQotICAoeSAwLjAwKSkKIChzYXZlKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdz
IDUxMikKLSAgKHNoYWRvdy1ibHVyIDEyLjAwKQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBo
ZWlnaHQ9MjApCi0gIChzaGFkb3ctY29sb3IgIzAwMDAwMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2Fj
eS1yYWRpdXMgMCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QKKyAgKGNoYW5nZS1mbGFncyBbZHJv
cC1zaGFkb3ddKQorICAoZHJvcC1zaGFkb3cKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBo
ZWlnaHQ9MjApCisgICAgKHNoYWRvdy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ctY29sb3IgIzAw
MDAwMCkKKyAgICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkpCisoZmlsbC1yZWN0LXdp
dGgtY29sb3IKICAgKHJlY3QgYXQgKDUwLDUwKSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAw
MEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUg
bm9ybWFsKSBleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCisgIChjb2xvciAjMDAwMEZG
KSBleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5z
Zm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDM4NmUzOTQxMTg1ZjA5YTNjNjhlYzZjMmFlODhkZjEx
YzcwYjBhNjkuLjVmNzhiOGMzNTA1YzllODAzOTliZDYwNWE5YmU5NTVhYjA5YjcwNWUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jt
cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNs
dWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMSwyMSArMSwxNCBAQAogCi0odHJhbnNs
YXRlCi0gICh4IDAuMDApCi0gICh5IDIyLjAwKSkKLShjb25jYXRlbnRhdGUtY3RtCi0gIChjdG0g
e209KCgwLjg3LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwtMTguMzApfSkpCiAoc2F2ZSkK
IChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyA1MTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkK
LSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93LWNvbG9yICMw
MDAwMDApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQotKGZpbGwtY29tcG9zaXRl
ZC1yZWN0CisgIChjaGFuZ2UtZmxhZ3MgW2N0bSwgZHJvcC1zaGFkb3ddKQorICAoY3RtIHttPSgo
MC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAsMy43MCl9KQorICAoZHJvcC1zaGFkb3cK
KyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvdy1ibHVy
IDEyLjAwKQorICAgIChzaGFkb3ctY29sb3IgIzAwMDAwMCkKKyAgICAoc2hhZG93cy11c2UtbGVn
YWN5LXJhZGl1cyAwKSkpCisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDAsMCkg
c2l6ZSAxMDB4MTAwKQotICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24g
c291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg3LjE0LDAuMjAp
IHNpemUgMTg0LjU1eDE4NS42NSkKKyAgKGNvbG9yICMwMDAwRkYpIGV4dGVudCBhdCAoNy4xNCww
LjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAocmVzdG9yZSkKLShzZXQtY3RtCi0gIChzZXQtY3Rt
IHttPSgoMS4wMCwwLjAwKSgwLjAwLDEuMDApKSB0PSgwLjAwLDIyLjAwKX0pKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50
eHQKaW5kZXggYmMxN2I1MTE0OTlmODI1NmM5OTI5MGRhZTg2MTRkNDg5NGNhZjljYy4uNTQ2ZGM0
OTEyZjUyZDAzYTg5YWQ5MDY4NTcyYjI4ZWRjODAzMjI1MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0x
LDE2ICsxLDEyIEBACiAKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCi0oZmls
bC1jb21wb3NpdGVkLXJlY3QKKyhmaWxsLXJlY3Qtd2l0aC1jb2xvcgogICAocmVjdCBhdCAoMCww
KSBzaXplIDEwNHgxMDQpCi0gIChjb2xvciAjMDA4MDAwKQotICAoY29tcG9zaXRlLW9wZXJhdGlv
biBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDAsMCkgc2l6
ZSAxMDR4MTA0KQorICAoY29sb3IgIzAwODAwMCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEw
NCkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAzMjk2MCkKLSAgKGZpbGwtY29sb3IgIzAw
MDBGRikKLSAgKHN0cm9rZS1zdHlsZSAwKQorICAoY2hhbmdlLWZsYWdzIFtmaWxsLWJydXNoLCBz
dHJva2Utc3R5bGUsIHNob3VsZC1hbnRpYWxpYXNdKQorICAoZmlsbC1icnVzaAorICAgIChjb2xv
ciAjMDAwMEZGKSkKKyAgKHN0cm9rZS1zdHlsZSBOTy1TVFJPS0UpCiAgIChzaG91bGQtYW50aWFs
aWFzIDApKQogKGRyYXctcmVjdAogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgyKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBl
ZC1yZWN0LWV4cGVjdGVkLnR4dAppbmRleCBiYjU5M2QyMGY2ZGE2NDg2MjkyZDM2YzAyMjBlMmE5
ZDg3MmY4MmI5Li5iODYwNDhjYzA4Yzk5MzdlZjAwNzgyZTcxMDg5Y2FjYmM5OWM1MzMyIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAt
Y2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtMSwxNiArMSw4IEBACiByZWNvcmRlZDoKLSh0
cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QK
KyhmaWxsLXJlY3Qtd2l0aC1jb2xvcgogICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkK
LSAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQot
ICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKKyAg
KGNvbG9yICMwMDAwRkYpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKIAogcmVwbGF5
ZWQ6CiAoCiAgIChjbGlwIGF0ICg1MTIsMCkgc2l6ZSA1MTJ4MjAwKQotKHRyYW5zbGF0ZQotICAo
eCAwLjAwKQotICAoeSAwLjAwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454665</attachid>
            <date>2022-03-14 22:13:08 -0700</date>
            <delta_ts>2022-03-14 22:40:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220314221306.patch</filename>
            <type>text/plain</type>
            <size>655813</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uYTQ4MWZkZWNmZjQ3ZWUzY2E5Njc4OTgzOTE3YTYw
ODA0MzJjMDVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzMiBAQAorMjAyMi0wMy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjphcHBseUxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJv
a2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXlvdXRTdGlwcGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dEhhdGNoaW5nKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1
c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxh
eWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3Rp
bmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlk
VXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBo
c1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRlY29u
c3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRp
c3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEltYWdlOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkaWRBcHBs
eVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGVG
YWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVu
ZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9
PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9w
ZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3RhdGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VH
cmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnREZXRlY3RlZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVyZ2VTdGF0ZUNoYW5n
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJnZVN0YXRlRGlmZnMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmluZUNhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojps
aW5lRGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZUpvaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Om1pdGVyTGltaXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcG9zaXRlTW9kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU9wZXJhdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJsZW5kTW9kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU1vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpkcm9wU2hhZG93IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93T2Zmc2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93Qmx1ciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0NvbG9yIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRTbW9vdGhGb250cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNtb290aEZvbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJhd0x1bWluYW5jZU1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1c2VEYXJrQXBwZWFyYW5jZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVzZURhcmtBcHBlYXJh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzSW5UcmFuc3Bh
cmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNs
aXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGls
ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2NhbGVkSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFs
TGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJc0NB
TGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aXNDQUxh
eWVyQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmJsZW5kTW9kZU9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6
Y29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lM
YXllclNjb3BlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OmJlZ2luTGF5ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVy
U2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVT
dGFja0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjp+R3Jh
cGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxp
dHlNYWludGFpbmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlw
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpo
YXNPbmx5UHJpbWl0aXZlQ2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptZXJnZURpZmZzKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXRlQ2hhbmdl
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHVtcCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Y2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmdldENUTSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpmaWxsQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmlsbFJ1bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzdHJva2VCcnVzaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZUdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzdHJva2VUaGlja25lc3MgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlU3R5
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0
cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5l
Q2FwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRM
aW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5lRGFz
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGlu
ZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmxpbmVKb2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRMaW5l
Sm9pbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWl0ZXJMaW1p
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TWl0
ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y29tcG9z
aXRlTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2V0Q29tcG9zaXRlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6ZHJvcFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjp0ZXh0RHJhd2luZ01vZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFRleHREcmF3aW5nTW9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkQW50aWFs
aWFzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRT
aG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNob3VsZFNtb290aEZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRTaG91bGRTbW9vdGhGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHJhd0x1bWluYW5jZU1hc2sgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldERyYXdMdW1pbmFuY2VNYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjp1c2VEYXJrQXBwZWFy
YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0
VXNlRGFya0FwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpiZWdpbkxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6On5UcmFuc3Bh
cmVuY3lMYXllclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U3RhY2tDaGVja2VyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNzQ29u
dGV4dFN0YXRlU3RhY2tDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6fkludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVNb2RlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZU1vZGU6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6TGluZURh
c2g6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lRGFzaDo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmlzVmlzaWJsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc0JsdXJyZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJvcFNoYWRvdzo6aGFzT3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcm9w
U2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpOdWxsR3JhcGhpY3NDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFn
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJI
YXJmQnV6ei5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU291cmNlQnJ1c2guY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpTb3VyY2VCcnVzaCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c3BhY2VUcmFu
c2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmdyYWRpZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpwYXR0ZXJuIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCcnVzaDo6c2V0UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpjb2xvciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnJ1c2g6OmJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRH
cmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0UGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6aXNQcmltaXRpdmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6
QnJ1c2g6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6QnJ1
c2g6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpkZWNvZGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1RleHRCb3hJdGVyYXRvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6
ei5jcHAuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9mZnNldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmluY3JlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRCb3hJdGVyYXRvcjo6Y3VycmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0
ZXJhdG9yOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRl
OjpzZXRTdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpz
ZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFNob3Vs
ZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OmdldENUTSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6RmlsbFNvdXJjZTo6RmlsbFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWly
bzo6U3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OlNoYWRvd1N0YXRlOjpTaGFkb3dTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0
TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZURhc2gpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2Fpcm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkaWRVcGRhdGVTdGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y29u
Y2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENhaXJvOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0
ZVNhdmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0
U3RhdGVTYXZlcjo6Q0dDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyOjp+Q0dDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4
dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVT
YXZlcjo6ZGlkU2F2ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OkdyYXBoaWNzQ29udGV4dENHKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmludGVybmFsUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
Y3VsYXRlRHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5U2hhZG93T2Zm
c2V0V29ya2Fyb3VuZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZUNhcCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dENHTWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xpbmVEYXNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldENHU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OmNhblVzZVNoYWRvd0JsdXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFz
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGlu
ZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNj
YWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3Rh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5z
bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y29u
Y2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpz
ZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6Omdl
dENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6
OkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250
ZXh0U3RhdGVTYXZlcjo6fkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OmRpZFNhdmUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2ggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1h
Z2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkcmF3UERG
UGFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpiZWdpbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZExheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludGVybmFsQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnNldEludGVybmFsRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGlu
YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVj
b3JkQmVnaW5MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJl
Y29yZEVuZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERyb3BTaGFkb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJD
b3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9w
dWxhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0ds
eXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRl
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNoYWRvd0lzQ2xlYXJlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG93R2x5cGhzV2l0aEFkdmFuY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdp
bmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlOjpzYWZlQ29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OnNpemVPZkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0Ojppc0RyYXdpbmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
Ojppc0lubGluZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0YXRlOjpTZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0U3RhdGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVy
YXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1l
Rm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6VHJhbnNsYXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Um90YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6YXBwbHkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVKb2luOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0
ZWRSZWN0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0YXRlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0YXRlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OnggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3Rh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YW5n
bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxl
OjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6
OmFtb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldENUTTo6dHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjp0cmFuc2Zvcm0gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpz
dGF0ZUNoYW5nZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpsaW5lQ2FwIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6U2V0TGluZURhc2gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpk
YXNoQXJyYXkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVEYXNoOjpkYXNoT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGVjb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpv
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2lu
OjpsaW5lSm9pbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6bWl0ZXJMaW1pdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpG
aWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb2xvciBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0
Ojpjb21wb3NpdGVPcGVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Z2xv
YmFsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0
ZWRSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSb3VuZGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OlJlY29yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX2RyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpl
bmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
bGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBP
dXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9JbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFy
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ry
b2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9r
ZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJv
a2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpk
cmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp+UmVjb3Jk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25s
eUlubGluZVN0YXRlQ2hhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6c3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVKb2luKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmN1cnJlbnRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmN0bSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250
ZXh0U3RhdGU6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpDb250ZXh0U3RhdGU6OkNvbnRleHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y2xvbmVGb3JTYXZlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
Q29udGV4dFN0YXRlOjpjbG9uZUZvclRyYW5zcGFyZW5jeUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3RhdGVTdGFjayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OlJlY29yZGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4pOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxs
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEVsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
RmlsbEJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmREcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2
ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1Bh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OmV4dGVudEZyb21Mb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjp+UmVjb3JkZXJJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRS
b3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENvbmNhdGVuYXRlQ1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZFNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUpvaW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0
TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmRDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVySW1wbDo6UmVjb3JkZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6YXBwbHlTZXRTdGF0ZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnNhdmUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6cmVzdG9yZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjph
cHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXApOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpjbGVhclJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QpOgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoTmljb3Np
YTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoTmljb3Np
YTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAg
KE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRpZFVw
ZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQu
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjp0cmFuc2xhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNj
YWxlKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3
Qm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRmdWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNv
bnRlbnRmdWxQYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVu
dFJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9J
bm5lclNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpwYWludEJhY2tncm91bmREZWNvcmF0aW9ucyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXNlU3Ryb2tlU3R5bGVU
b0ZpbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZH
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJG
b3JlZ3JvdW5kKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRyYXcpOgorCiAyMDIyLTAzLTE0ICBBbnRvaW5lIFF1aW50
ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFttb2RlbF0gPG1vZGVsIGludGVyYWN0
aXZlPiBkb2Vzbid0IGFsbG93IG1vZGVsIHRvIGJlIHJvdGF0ZWQgb24gaU9TCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IGQ5Y2MzYzRmZTY5ZThiY2U1ZTAxYzg5YWY0ZDA3Yzc1YWM4MGMzZTYuLjIzYzYwN2E2ZjIyZDU0
MjZjODIwYzk2NTJhMTVjNjBkNmJhNTliOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIw
MjItMDMtMTQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAg
W0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6aWx5IGFwcGxp
ZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNvbmNhdGVuYXRlQ1RNKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZUNh
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsQ29tcG9z
aXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxs
UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFBhdGgpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXQp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQmV6aWVyQ3Vy
dmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd0xpbmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZy
YW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KToK
KyAgICAgICAgKFdlYktpdDo6bV9yZW5kZXJpbmdCYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZFJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVE
YXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnNlbmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpkcmF3UmVj
dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6
ZHJhd1JlY3QpOgorCiAyMDIyLTAzLTE0ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFttb2RlbF0gPG1vZGVsIGludGVyYWN0aXZlPiBkb2Vzbid0IGFsbG93
IG1vZGVsIHRvIGJlIHJvdGF0ZWQgb24gaU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDVjN2I3M2ViMjA1
ZTA5ZWMyNDZlMDExZDBhNTAyZGNkNGMxZGNhNTAuLmViNzZhMTg2ZDM0OGQ0YjM2ODlmMjM0ZjNk
YmY2MjgyYWFhZGUwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ1LDYgKzIwNDUsNyBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNvbnRl
bnRzRGlzcGxheURlbGVnYXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRy
YW5zZm9ybS5jcHAKQEAgLTIwODQsNiArMjA4NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUltYWdlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDgyOTYyYmEwNGUy
ZmZkN2ZmYTBjNmU2MWQ5YzljMmMxN2E1ZjY0NjcuLmI1NWM1YzFjNDJlMzI5NTU3MGVkMjRjODQw
ZGMzZTRmMmZkMzAyZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTIzMzEsMTAgKzIzMzEsMTIgQEAKIAkJNzFFRkNFREMyMDJC
MzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1h
dGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGMDVGN0Uy
NTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGQ0IxNzAyN0JBQjNGRTAwRTA2
MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcxRkNCMTZEMjdCQUIzREYwMEUwNjMxQyAvKiBGcmFtZVJhdGVBbGln
bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIwMTc4M0IyN0Q1N0Y5RjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMDE3ODNBMjdENTczQjIw
MDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNW
R1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBG
MTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5
T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0
MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIElt
YWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNDYwREQ2MjdDODVEMDEw
MEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNCMjc1QzVGQTYwMEE5MTU2QSAvKiBD
U1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRDI3NUM2MTQ0MDBBOTE1
NkEgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MjE0QjlCNzI3NDQ1OEZBMDAzQkU2REYgLyogRmlsdGVyRWZmZWN0
VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzI0Njk2M0UyNzVDNjE2NzAwQTkxNTZBIC8qIEZpbHRlckltYWdlVmVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkI0RUY3QzI3NEVFMzdG
MDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM0Miw2ICsyMzQ0LDkgQEAKIAkJNzI0RUU1NTAx
REM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rp
dml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNl
cnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0
RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNTYwNzhF
Mjc5RDM0QjYwMDdEMkREMyAvKiBGRUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkY3RTc0RjI3OUNFREU4MDBEODJEMkQgLyogRkVJbWFnZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNTgx
ODU0MjdDREE2OUEwMEMzRDk3RSAvKiBTb3VyY2VCcnVzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNv
dXJjZUJydXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkIzNTEw
QzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NjI3Q0RBRkQ1
MDBDM0Q5N0UgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8q
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZDREUyMDI3NTk3MzUwMDBBNDQ1QjIgLyogRmlsdGVy
RWZmZWN0R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyOTY2MUEyMjc1OTYwQTUwMEU3REY5QiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1
NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyog
UGxhdGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBOYXRpdmVJbWFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjYxRDgyMDlG
NDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMzE4LDYgKzExMzIzLDggQEAKIAkJNzFGQ0IxNkQyN0JB
QjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRnJhbWVSYXRlQWxpZ25lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUZDQjE2RjI3QkFCM0UwMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZVJhdGVBbGlnbmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8q
IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZp
Z2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
MDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENHQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXh0Qm94SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzIxMUI1RDYyNzY1MzY4MjAwNzZGRUY4IC8qIEZpbHRlclJlc3VsdHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVyUmVzdWx0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0
NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMTMyNyw2ICsxMTMzNCw4IEBACiAJCTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAv
KiBBbmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNDM1RUY0MjczRDA3NjcwMDA1RTdF
RSAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjQzNUVGNTI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVy
SW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3ND
b250ZXh0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENjI3Qzg1RDAxMDBENUY5
RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250
ZXh0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1
NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1p
bk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzODksNiArMTEzOTgsMTAgQEAKIAkJNzJBMTNB
RDUyNzRERTU0RTAwRTJBODhFIC8qIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyQTEzQUQ2Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFwaGljU29m
dHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkExM0FENzI3NERF
NTc4MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBFMjdDQjQyRkQw
MEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VCcnVz
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBGMjdDQjQyRkUwMEQy
N0FFMCAvKiBTb3VyY2VCcnVzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VCcnVzaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3NDI3NEUyMzMzMDAyOTNDMkYgLyogRkVC
bGVuZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUJsZW5kU29mdHdhcmVBcHBs
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjc1Mjc0RTIzMzQwMDI5
M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZF
QmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsdGVySW1hZ2VWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4ODEwLDYgKzI4ODIzLDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjAxNzgzQTI3
RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oICovLAogCQkJCTBGQ0YzMzIz
MEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMzI1OTY4RDBC
MDAzMEU2QUEgLyogQ29sb3JTcGFjZUNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMjI1OTY4RDBCMDAz
MEU2QUEgLyogQ29sb3JTcGFjZUNHLmggKi8sCkBAIC0yOTA0Myw2ICsyOTA1Nyw5IEBACiAJCQkJ
N0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCiAJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKKwkJCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5
RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwICovLAorCQkJCTcyNDYwREQ2MjdDODVEMDEw
MEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovLAorCQkJCTcyQjM1MTBEMjdDQTMy
OEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEY1ODBC
MDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBGNTgwQjBB
MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBCMEIwRjEy
QTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLywKQEAgLTI5MTQzLDYgKzI5
MTYwLDcgQEAKIAkJCQlCQ0E1NTkxMjI2M0RCRDc5MDA3RjE5QjMgLyogUGl4ZWxGb3JtYXQuaCAq
LywKIAkJCQlDREQwOEFCRjI3N0U1NEYwMDBFQTM3NTUgLyogUGxhdGZvcm1BdWRpb1RyYWNrQ29u
ZmlndXJhdGlvbi5oICovLAogCQkJCUJDM0U2MjQyMjY1OTc5MTcwMDU0OEFDRCAvKiBQbGF0Zm9y
bUNvbG9yU3BhY2UuaCAqLywKKwkJCQk3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyog
UGxhdGZvcm1JbWFnZS5oICovLAogCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJNTUwNjQwQUQyNDA3NTZEQTAwQUFFMDQ1IC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCkBAIC0yOTE2Niw2ICsyOTE4NCw4IEBACiAJ
CQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLAogCQkJCTBG
M0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8sCiAJCQkJMUM0REIwMjQy
NzMzOUU1RTAwN0IwQUQxIC8qIFNob3VsZExvY2FsaXplQXhpc05hbWVzLmggKi8sCisJCQkJNzJC
MzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmNwcCAqLywKKwkJCQk3MkIzNTEw
RjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLywKIAkJCQkxREQxMjdBQzI1NkUz
QTg3MDBCMjI3RDcgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgKi8sCiAJCQkJQ0Q2NDFFQjIx
ODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVB
QzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovLApAQCAt
MjkxNzcsNiArMjkxOTcsNyBAQAogCQkJCTA4NzU1OEM0MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJy
b2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCAqLywKIAkJCQk5NUU5RjQ0NDI3QzlBMzlCMDA5
NDUzMzcgLyogU3lzdGVtSW1hZ2UuaCAqLywKIAkJCQkzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkg
LyogVGFiU2l6ZS5oICovLAorCQkJCTcyMDZENDM1MjdEQURFQ0EwMDQwRkVCMiAvKiBUZXh0Qm94
SXRlcmF0b3IuaCAqLywKIAkJCQkzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5j
cHAgKi8sCiAJCQkJQTgyNEI0NjQwRTJFRjJFQTAwODFBN0I3IC8qIFRleHRSdW4uaCAqLywKIAkJ
CQlDRDFFNzM0NjE2N0JDNzhFMDA5QTg4NUQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3Bw
ICovLApAQCAtMzM4NzMsNiArMzM4OTQsNyBAQAogCQkJCUNERTNBRTEyMjRCNDkxNkEwMDEyOEU3
RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVGQTkwNENBMTc4RTYxRjUw
MDRDOEEyRCAvKiBDZXJ0aWZpY2F0ZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTkxQjhGMEI1
MjE5NTNENjUwMDBDMkIwMCAvKiBDZXJ0aWZpY2F0ZVN1bW1hcnkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyMDE3ODNCMjdENTdGOUYwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTM2RkQxNTE2Qzc4MjY1MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lv
bkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2OUREMTUwNUYwNzYwMDFCNzRBQyAvKiBD
aGFuZ2VWZXJzaW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTc4NUQ5MTUyNEI0RDFD
QTAwMTREQjIxIC8qIENoYW5uZWxDb3VudE1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ3OTgs
NiArMzQ4MjAsOCBAQAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2
MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2
NzA4MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzI0NjBERDcyN0M4NkRBRDAwRDVGOUY0IC8qIEdyYXBoaWNz
Q29udGV4dFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5
N0UgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTgwQjBFMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzA1LDYgKzM2NzI5LDcgQEAKIAkJCQlCQ0FBNDg3
MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jv
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRm
b3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdF
IC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjZENTZF
MjI1M0FFMjhEMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkQ3NzA1QzcyNTUyNzZDRDAwMUQwQzk0IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU1MDY0MEFGMjQwNzU4MkQwMEFBRTA0NSAvKiBQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzM4Niw2ICszNzQxMSw3IEBACiAJCQkJ
NTEwRDRBMzgxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVh
bUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjNFMEZDN0RGRjAwMDk1NTMw
MCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTQyN0NEQTY5QTAw
QzNEOTdFIC8qIFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2MjE3QTlE
MDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2
NTE3QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0RGMTM1MDkyNEM5RkNBMzAwNDMyRTFFIC8qIFNvdXJjZUJ1ZmZlclBhcnNlci5oIGluIEhl
YWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRleCA4NTZhM2RlNTA0ZGVjMGJiZmE5MGFj
MTdkZTM3ZjUxNWUxNGQ5MjA0Li45ZDkzNWE2ZmYzMjMwZjNmNDZhMmVmNWQ3ZWExMDAxMGFlOWUx
MGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVj
b3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lkIEJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGgoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0Nv
bnRleHQsIGNvbnN0CiAgICAgICAgICAgICBEYXNoQXJyYXkgbGluZURhc2g7CiAgICAgICAgICAg
ICBsaW5lRGFzaC5hcHBlbmQoZGFzaExlbmd0aCk7CiAgICAgICAgICAgICBsaW5lRGFzaC5hcHBl
bmQoZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExp
bmVEYXNoKGxpbmVEYXNoLCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9y
ZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6CkBAIC0xMjk0LDcgKzEy
OTQsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWludGlu
Z0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNoYWRvd1JlY3RP
cmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNldDsKICAgICAg
ICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4gLSBhZGp1c3Rl
ZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIHBhaW50aW5nQ29udGV4dC5j
b250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVl
KCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICBw
YWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgYWRqdXN0ZWRTaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0
Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0IH0pOwogCiAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAgICAgICAg
ICAgIC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0
IG91dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMTQwNSw3ICsxNDA1LDcgQEAg
dm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0
JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQu
dHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zm
c2V0OwogCi0gICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Vi
a2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNN
b2RlOjpEZWZhdWx0KTsKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0RHJvcFNo
YWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigp
LCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6
IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5j
b250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCByb3VuZGVk
SG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9t
UGFpbnRJbWFnZS5jcHAKaW5kZXggZjRiOThiYTYyZTExOWEwNzcxMzEyZDNiODhjNDkxOTM2ODM2
ZWUzNy4uZWU1MDRmMDhjNDlmYzhkNWI1YWVkNzAyYmUyMTdmMWIwNmZkNGUwZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgSW1h
Z2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdG9tUGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY28KIEltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRl
c3RDb250ZXh0KTsKLSAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29u
dGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGRlc3RDb250ZXh0LmNsaXAoZGVzdFJlY3QpOwogICAg
IGRlc3RDb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZGVz
dFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQg
Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0CiAgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7CiAKICAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBzY2FsZSB0
byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGRl
c3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0
Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhTY2FsZSA9IGZhYnMoZGVz
dENvbnRleHRDVE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RDb250
ZXh0Q1RNLnlTY2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJuQ1RN
ID0gcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggMGU3ODA2M2Uz
YTQxY2JjNjkwZjBkMGNjYjc4ODExN2RlNjkzOGEwMi4uZGJjOTU3YzUzZDA0YTM5NmVhYzY0ZDY3
ZmU2YTJiMTdlNDQ4YzY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTY5Nyw3ICs2OTcs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5TGluZURhc2goKSBj
b25zdAogICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChzdGF0ZSgpLmxpbmVEYXNoLnNp
emUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZSgpLmxpbmVEYXNoLnNpemUo
KTsgKytpKQogICAgICAgICBjb252ZXJ0ZWRMaW5lRGFzaFtpXSA9IHN0YXRpY19jYXN0PERhc2hB
cnJheUVsZW1lbnQ+KHN0YXRlKCkubGluZURhc2hbaV0pOwotICAgIGMtPnNldExpbmVEYXNoKGNv
bnZlcnRlZExpbmVEYXNoLCBzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICBjLT5zZXRMaW5l
RGFzaCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3Rh
dGUoKS5saW5lRGFzaE9mZnNldCkgfSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0R2xvYmFsQWxwaGEoZG91YmxlIGFscGhhKQpAQCAtNzI4LDcgKzcyOCw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xvYmFsQ29tcG9zaXRlT3Bl
cmF0aW9uKGNvbnN0IFN0cmluZyYgb3BlCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2lu
Z0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKLSAgICBjLT5zZXRDb21w
b3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7CisgICAgYy0+c2V0Q29tcG9zaXRlTW9kZSh7
IG9wLCBibGVuZE1vZGUgfSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCkBAIC0xMTg2LDcgKzExODYsNyBAQCBib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmlzUG9pbnRJblN0cm9rZUludGVybmFsKGNv
bnN0IFBhdGgmIHBhdGgsIGRvdQogICAgICAgICBEYXNoQXJyYXkgY29udmVydGVkTGluZURhc2go
bGluZURhc2guc2l6ZSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lRGFz
aC5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGNvbnZlcnRlZExpbmVEYXNoW2ldID0gc3RhdGlj
X2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4obGluZURhc2hbaV0pOwotICAgICAgICBjb250ZXh0LnNl
dExpbmVEYXNoKGNvbnZlcnRlZExpbmVEYXNoLCBzdGF0ZS5saW5lRGFzaE9mZnNldCk7CisgICAg
ICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGNvbnZlcnRlZExpbmVEYXNoKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHN0YXRlLmxpbmVEYXNoT2Zmc2V0KSB9KTsKICAgICB9KTsKIH0KIApA
QCAtMTIwNSw3ICsxMjA1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpj
bGVhclJlY3QoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGQKICAgICBpZiAoc2hv
dWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNh
dmVkID0gdHJ1ZTsKLSAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBD
b2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAg
ICAgY29udGV4dC0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0KICAgICBpZiAo
c3RhdGUoKS5nbG9iYWxBbHBoYSAhPSAxKSB7CiAgICAgICAgIGlmICghc2F2ZWQpIHsKQEAgLTEz
NjMsOSArMTM2Myw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlT
aGFkb3coKQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGZsb2F0IHdp
ZHRoID0gc3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0
ID0gc3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgICAgIGMtPnNldFNoYWRvdyhG
bG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hh
ZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgIGMtPnNldERyb3BT
aGFkb3coeyBGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0
YXRlKCkuc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSB9KTsKICAgICB9IGVs
c2UKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNo
YWRvdyh7IEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFk
aXVzTW9kZTo6TGVnYWN5IH0pOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QKQEAgLTI0MzIsMTkgKzI0MzIsMTYgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBkb3UKIAogICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldCgwLCAy
ICogbWFza1JlY3QuaGVpZ2h0KCkpOwogCi0gICAgICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zm
c2V0OwotICAgICAgICAgICAgZmxvYXQgc2hhZG93UmFkaXVzOwotICAgICAgICAgICAgQ29sb3Ig
c2hhZG93Q29sb3I7Ci0gICAgICAgICAgICBjLT5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLQogICAgICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1Jl
Y3QobWFza1JlY3QpOwotICAgICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHNoYWRvd1JhZGl1
cyAqIDEuNCk7Ci0gICAgICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc2hhZG93T2Zmc2V0ICogLTEp
OworICAgICAgICAgICAgYXV0byBkcm9wU2hhZG93ID0gYy0+ZHJvcFNoYWRvdygpOworCisgICAg
ICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoZHJvcFNoYWRvdy5ibHVyUmFkaXVzICogMS40KTsK
KyAgICAgICAgICAgIHNoYWRvd1JlY3QubW92ZShkcm9wU2hhZG93Lm9mZnNldCAqIC0xKTsKICAg
ICAgICAgICAgIGMtPmNsaXAoc2hhZG93UmVjdCk7CiAKLSAgICAgICAgICAgIHNoYWRvd09mZnNl
dCArPSBvZmZzZXQ7CisgICAgICAgICAgICBkcm9wU2hhZG93Lm9mZnNldCArPSBvZmZzZXQ7CiAK
LSAgICAgICAgICAgIGMtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgICAgICBjLT5zZXRE
cm9wU2hhZG93KGRyb3BTaGFkb3cpOwogCiAgICAgICAgICAgICBpZiAoZmlsbCkKICAgICAgICAg
ICAgICAgICBjLT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCA0ZjYzYWRjZTkzOTE2ZGIyMzIw
ZTk2NzhhYWJmZTBmM2NkOTk3NjJiLi45YTgwM2E0MDhkODhjMmZmNDhkZDNiZWEwMjk1MWI4NzU4
MDk4ZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0U3RpcHBsaW5n
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4dCk7CiAgICAgY29udGV4dC5zZXRT
dHJva2VUaGlja25lc3MoMSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHls
ZTo6RGFzaGVkU3Ryb2tlKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgMSwgZGVuc2l0eSB9
LCAxKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyAxLCBkZW5zaXR5IH0sIDEgfSk7CiAK
ICAgICBkcmF3TGF5b3V0UGF0dGVybihjb250ZXh0LCBxdWFkLCBkZW5zaXR5LCBGbGlwOjpObyk7
CiB9CkBAIC0xMjU0LDcgKzEyNTQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0SGF0Y2hpbmco
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0
cm9rZVRoaWNrbmVzcygwLjUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5
bGU6OkRhc2hlZFN0cm9rZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IDIsIDIgfSwgMik7
CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IHsgMiwgMiB9LCAyIH0pOwogCiAgICAgY29uc3Rl
eHByIGF1dG8gZGVmYXVsdExheW91dEhhdGNoU3BhY2luZyA9IDEyOwogICAgIGRyYXdMYXlvdXRQ
YXR0ZXJuKGNvbnRleHQsIHF1YWQsIGRlZmF1bHRMYXlvdXRIYXRjaFNwYWNpbmcsIGZsaXApOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGI1ODhmNmZhNGExMWQ3NzBjM2M4NDk5OTY3
MmQ3ZDdlZmY0MzJjNGYuLjhhMTdhZTM3MGFlMzZiMDBlYmI3YTliMmUwNzU1MTgwNmJlZDE2Njkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQzMDMsNyArNDMwMyw3IEBAIHZvaWQg
RnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIGxheW91
dENvbnRleHQoKS5sYXlvdXQoKTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChw
YWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4
dChmcmFtZVJlY3QoKSwgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxhdGZv
cm1XaWRnZXQoKSkgewogICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVDb250
ZW50cygpLgogICAgICAgICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50UmVj
dChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CkBAIC00ODU0LDcgKzQ4NTQsNyBAQCB2
b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0JvdHRv
bSwgZmxvYXQgb2xkVG9wLCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQgd2l0
aCBwYWludGluZyBkaXNhYmxlZC4KLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoTnVs
bEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBO
dWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoZnJhbWVSZWN0KCksIE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0
VHJ1bmNhdGVkQXQoc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob2xkQm90dG9tKSkpOwogICAgIElu
dFJlY3QgZGlydHlSZWN0KDAsIHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5k
ZXJWaWV3LT5sYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhYKCksIHN0YXRpY19jYXN0PGludD4oY2Vp
bGYob2xkQm90dG9tIC0gb2xkVG9wKSkpOwogICAgIHJlbmRlclZpZXctPnNldFByaW50UmVjdChk
aXJ0eVJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA5ZmQyNWQ4MGFkMTJk
YzkxZGQxMWY5MTU5OGZjNmM4ZWZhNGNiMmEyLi4yODk1NzRiOWMxZTQwY2Q3MTJiNGUyYjZlOWVi
MzRiMDE3MjlkZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjksNyArMjks
OCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQs
IEdyYXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5Q29udGV4dCkKLSAgICA6IG1fcHJpbWFyeUNvbnRl
eHQocHJpbWFyeUNvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHQocHJpbWFyeUNvbnRleHQu
Y2xpcEJvdW5kcygpLCB7IH0sIHByaW1hcnlDb250ZXh0LmdldENUTSgpKQorICAgICwgbV9wcmlt
YXJ5Q29udGV4dChwcmltYXJ5Q29udGV4dCkKICAgICAsIG1fc2Vjb25kYXJ5Q29udGV4dChzZWNv
bmRhcnlDb250ZXh0KQogewogfQpAQCAtNDgsNiArNDksMzAgQEAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiB9CiAKKyNp
ZiBVU0UoQ0cpCitib29sIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LmlzQ0FMYXllckNvbnRl
eHQoKTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJD
b250ZXh0KGJvb2wgaXNDQUxheWVyQ29udGV4dCkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LnNl
dElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Cit9CisKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOworfQorI2VuZGlm
CisKK1JlbmRlcmluZ01vZGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9k
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgp
OworfQorCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQogewogICAgIC8v
IEZJWE1FOiBDb25zaWRlciBub3QgdXNpbmcgdGhlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQn
cyBzdGF0ZSBzdGFjayBhdCBhbGwsCkBAIC02NCwyMiArODksMTAgQEAgdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICBtX3NlY29uZGFyeUNvbnRleHQucmVzdG9y
ZSgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBmcm9tLCBj
b25zdCBGbG9hdFBvaW50JiB0bykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdMaW5lKGZy
b20sIHRvKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZUNo
YW5nZXMoKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKIH0KIAogI2lmIFVTRShDRykKQEAgLTk2LDIyICsxMDksMTAgQEAgdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKIH0KICNlbmRpZgog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKLSAgICBtX3NlY29u
ZGFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LmZpbGxQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUGF0aChwYXRo
KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tl
UGF0aChwYXRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAg
ICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwogfQogCiB2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkKQEAgLTEyNiwyMjIgKzEyNywxMjYgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0
LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKLX0KLQotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZmlsbFJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZp
bGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
cmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
bGluZVdpZHRoKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBsaW5l
V2lkdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0
aCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbEVsbGlw
c2UoZWxsaXBzZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2Up
OwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlRWxs
aXBzZShlbGxpcHNlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxp
cHNlKTsKLX0KLQotI2lmIFVTRShDRykKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzQ0FMYXllckNvbnRleHQpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOwot
fQotCi1ib29sIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQoKSBj
b25zdAotewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LmlzQ0FMYXllckNvbnRleHQoKTsK
LX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOwotICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4
dCk7Ci19Ci0jZW5kaWYKLQotUmVuZGVyaW5nTW9kZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5y
ZW5kZXJpbmdNb2RlKCk7Ci19Ci0KIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xp
cChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJl
Y3QpOwogICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcChyZWN0KTsKICAgICBtX3NlY29uZGFyeUNv
bnRleHQuY2xpcChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNs
aXBPdXQocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXQocmVjdCk7Ci19Ci0K
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuY2xpcE91dChwYXRoKTsKLX0KLQogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKKyAg
ICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKICAgICBtX3ByaW1h
cnlDb250ZXh0LmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKICAgICBtX3NlY29uZGFyeUNvbnRl
eHQuY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogfQogCi1JbnRSZWN0IEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaW1hcnlD
b250ZXh0LmNsaXBCb3VuZHMoKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5zZXRMaW5lQ2FwKGxpbmVDYXApOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5l
Q2FwKGxpbmVDYXApOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxv
YXQgZGFzaE9mZnNldCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZURhc2goZGFz
aEFycmF5LCBkYXNoT2Zmc2V0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZURhc2go
ZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXQocGF0
aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXQocGF0aCk7CiB9CiAKLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5zZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LnNldExpbmVKb2luKGxpbmVKb2luKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNs
aXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25S
ZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0
KGZsb2F0IG1pdGVyTGltaXQpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRN
aXRlckxpbWl0KG1pdGVyTGltaXQpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRNaXRlckxp
bWl0KG1pdGVyTGltaXQpOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwor
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJ
bWFnZSwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd05hdGl2ZUltYWdl
KG5hdGl2ZUltYWdlLCBzZWxmU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobmF0aXZlSW1hZ2UsIHNlbGZTaXpl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxs
UmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCk7CiB9CiAK
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd1BhdHRlcm4obmF0aXZlSW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3UGF0dGVybihuYXRpdmVJbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxs
UmVjdChyZWN0LCBncmFkaWVudCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJl
Y3QsIGdyYWRpZW50KTsKIH0KIAotSW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ltYWdl
KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKIH0KIAot
SW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdl
KEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQ
b2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5k
cmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNp
bmcsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGlsZWRJbWFnZShpbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAg
IHJldHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7
CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGls
ZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtX3ByaW1hcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291
cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucyk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0
aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotI2lmIEVOQUJMRShWSURF
TykKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlv
bik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRl
c3RpbmF0aW9uKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5maWxsUGF0aChwYXRoKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pCiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzY2FsZSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBtX3By
aW1hcnlDb250ZXh0LnNjYWxlKHNjYWxlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2NhbGUo
c2NhbGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlj
a25lc3MpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGJvcmRlclRo
aWNrbmVzcyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZs
b2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnJvdGF0
ZShhbmdsZUluUmFkaWFucyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVs
bGlwc2UpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwog
fQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC50cmFuc2xhdGUoeCwgeSk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVBhdGgo
cGF0aCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKKyAgICBtX3ByaW1hcnlD
b250ZXh0LmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBmcm9tLCBjb25zdCBGbG9hdFBvaW50JiB0bykKIHsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LnNldENUTSh0cmFuc2Zvcm0pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRDVE0odHJh
bnNmb3JtKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOwogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBp
bmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gbV9wcmlt
YXJ5Q29udGV4dC5nZXRDVE0oaW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RWxsaXBz
ZShyZWN0KTsKIH0KIAotRmxvYXRSZWN0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRp
bmdNb2RlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJvdW5kVG9EZXZpY2VQ
aXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXRo
KHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKIH0KIAogdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQpAQCAtMzcwLDI5ICsyNzUsNTQgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG8KIH0K
ICNlbmRpZgogCi1GbG9hdFNpemUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQo
Y29uc3QgRm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRv
KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGF1
dG8gc2l6ZSA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwg
ZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGV4dChjYXNjYWRlLCBydW4s
IHBvaW50LCBmcm9tLCB0byk7Ci0gICAgcmV0dXJuIHNpemU7CisgICAgbV9wcmltYXJ5Q29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgZmlsdGVyUmVzdWx0cykKIHsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQs
IGZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgZmlsdGVyUmVz
dWx0cyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNv
dXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgZmlsdGVyUmVzdWx0cyk7CiB9CiAK
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHRvKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LmRyYXdFbXBoYXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRv
KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoY2FzY2FkZSwgcnVu
LCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd05hdGl2
ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LmRyYXdCaWRpVGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBjdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3QmlkaVRleHQoY2FzY2FkZSwg
cnVuLCBwb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlv
blJlY3QpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0
LmRyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1Bh
dHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX3By
aW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBtX3By
aW1hcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRp
b24pOworfQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUg
Zm9udFNtb290aGluZ01vZGUpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3R2x5cGhzKGZv
bnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2Rl
KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CiAKIHZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCkBAIC00
MDcsMTYgKzMzNyw5IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsCiAgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgbWFya2VyU3R5bGUpOwogfQog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJM
JiB1cmwsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNl
dFVSTEZvclJlY3QodXJsLCByZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0VVJMRm9y
UmVjdCh1cmwsIHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK2Jvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExp
bmtzKCkgY29uc3QKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVj
dChuYW1lLCByZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JS
ZWN0KG5hbWUsIHJlY3QpOworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnN1cHBvcnRzSW50
ZXJuYWxMaW5rcygpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFkZERl
c3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQpAQCAtNDI1LDE4ICszNDgsMTYgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAogICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5hZGREZXN0aW5hdGlvbkF0UG9pbnQobmFtZSwgcG9pbnQpOwogfQog
Ci1ib29sIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygp
IGNvbnN0Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9y
UmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKKyAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOwogfQogCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MgZmxhZ3MpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJl
Y3QoY29uc3QgVVJMJiB1cmwsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBUaGlz
IGNhbGxzIHVwZGF0ZVN0YXRlKCkgaW5zdGVhZCBvZiBkaWRVcGRhdGVTdGF0ZSgpIHNvIHRoYXQg
Y2hhbmdlcwotICAgIC8vIGFyZSBhbHNvIGFwcGxpZWQgdG8gZWFjaCBjb250ZXh0J3MgR3JhcGhp
Y3NDb250ZXh0U3RhdGUsIHNvIHRoYXQgY29kZQotICAgIC8vIGludGVybmFsIHRvIHRoZSBjaGls
ZCBjb250ZXh0cyB0aGF0IHJlYWRzIGZyb20gdGhlIHN0YXRlIGdldHMgdGhlIHJpZ2h0IHZhbHVl
cy4KLSAgICBtX3ByaW1hcnlDb250ZXh0LnVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LnVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0KTsKIH0KIAogI2lmIE9TKFdJTkRPV1MpICYmICFV
U0UoQ0FJUk8pCkBAIC00NDYsNSArMzY3LDEwIEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZFByaXZhdGVDb250CiB9
CiAjZW5kaWYKIAorRmxvYXRSZWN0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdN
b2RlKQoreworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJvdW5kVG9EZXZpY2VQaXhlbHMo
cmVjdCwgcm91bmRpbmdNb2RlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4YjM0YzkxNDM0MmI3Mzc3NzI3YzExYTczYjZkODIx
OGUxNTU2Zi4uN2EzN2ExMTNkZDgxNWViM2I5NTYwNzUyZDlkYzcwZWI1YTg5N2M1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQuaApAQCAtNDMsODMgKzQzLDU0IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgc2F2ZSgpIGZpbmFs
OwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworI2lmIFVTRShDRykKKyAgICBib29sIGlzQ0FM
YXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQo
Ym9vbCkgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCkgZmluYWw7CisjZW5kaWYKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUo
KSBjb25zdCBmaW5hbDsKIAorICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9y
ZSgpIGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICNpZiBVU0Uo
Q0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5
RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBhcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lM
YXllcigpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZh
Y3RvcikgZmluYWw7Ci0KLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0OwotICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLQot
ICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLSAg
ICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLQot
I2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7Ci0g
ICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKLQogICAgIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7Ci0KICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwor
ICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CiAKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKLQotICAgIEludFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZp
bmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKLQotICAgIHZvaWQgZHJhd05hdGl2ZUlt
YWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3Rl
bUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0lt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlv
bjo6RnJvbUltYWdlIH0pIGZpbmFsOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFn
ZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCBwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5h
bDsKLSNlbmRpZgorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogCi0g
ICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBm
aW5hbDsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKKyAgICB2
b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgdm9p
ZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCisgICAgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICB2
b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRl
RGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7Ci0K
LSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3Vu
ZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisgICAgdm9pZCBkcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50Mikg
ZmluYWw7CiAKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwor
ICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIAogICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNpZiBQTEFURk9STShNQUMpCkBAIC0xMjcs
MjMgKzk4LDI2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlm
CiAKLSAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290
aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxv
YXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IHN0ZDo6bnVsbG9wdCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdO
YXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lz
dGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisgICAg
dm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CisjZW5k
aWYKIAorICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwogICAgIHZv
aWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
U3Ryb2tlU3R5bGUpIGZpbmFsOwotCiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKIAotICAg
IHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
LQotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0KICAgICBib29sIHN1
cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwor
ICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBmaW5hbDsKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKIAogI2lmIE9TKFdJ
TkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZElt
YWdlLmNwcAppbmRleCBiYjRkYWMwMTljNWI5ZTEzYjEzN2FlNjk0ZTRiZjZiMjc2YmZjYzBkLi4x
YzFiOTZlYzViOTgzY2M1ZjE4ZDZmZjFmZDI1ODU3ZmE5NDNjNDFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVk
SW1hZ2UuY3BwCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6
OmRyYXdDcm9zc2ZhZGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogSW1hZ2VEcmF3UmVzdWx0
IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkp
OworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAoZHN0UmVjdCk7
CiAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZHN0
UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDI1YTNkM2ZlODc3
MzMxZGRhMzk1NzgwMTFiNmQ4OTBmMjEyYzcyZTYuLjNiY2I1MDVhZjNjMjgyZjQyMjMyNWNkN2Uz
MDA1MzRmZDlmOTljYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjQgKzI2LDExIEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRTdGF0ZS5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KIAotI2lmIFVTRShDT1JFX1RFWFQpCi0jaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0j
aWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+
Ci0jZWxzZQotI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29yZVRleHRTUEkuaD4KLSNlbmRpZgotI2lu
Y2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwpAQCAtNjIsNzYgKzQ5LDMyIEBAIHB1Ymxp
YzoKICNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQogICAgIHZvaWQgZHJhd05h
dGl2ZVRleHQoQ1RGb250UmVmLCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmVSZWYsIENHUmVjdCBs
aW5lUmVjdCk7CiAKLSAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiwgQ0dHU3RhdGVSZWYsIENHUmVjdCk7Ci0gICAgdm9pZCByZWNvcmRFbmRMYXllcihDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZik7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENH
UmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSos
IGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50
KTsKLSAgICB2b2lkIHJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0
ZVJlZiwgQ0dSZWN0LCBDR0ltYWdlUmVmKTsKKyAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dH
U3RhdGVSZWYpOworICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dHU3RhdGVSZWYpOworICAgIHZv
aWQgcmVjb3JkRHJhd0dseXBocyhDR0dTdGF0ZVJlZiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBD
R1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpOworICAgIHZvaWQgcmVjb3JkRHJhd0lt
YWdlKENHR1N0YXRlUmVmLCBDR1JlY3QsIENHSW1hZ2VSZWYpOwogI2VuZGlmCiAKLSAgICBEZWNv
bnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKCkgY29uc3QgeyByZXR1cm4g
bV9kZWNvbnN0cnVjdERyYXdHbHlwaHM7IH0KLQogcHJpdmF0ZToKLSNpZiBVU0UoQ09SRV9URVhU
KSAmJiAhUExBVEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0
ZUludGVybmFsQ29udGV4dCgpOwotI2VuZGlmCi0KLSAgICB2b2lkIGRyYXdCeVNwbGl0dGluZ0lu
dG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGRy
YXdPVFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
YW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGRyYXdOb25PVFNWR1J1
bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLQotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbFN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9pZCBwb3B1bGF0ZUludGVybmFs
Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIHZvaWQgcHJlcGFyZUlu
dGVybmFsQ29udGV4dChjb25zdCBGb250JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQg
Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKKyAgICB2b2lkIHNldEludGVybmFsRm9udChjb25z
dCBGb250JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHBy
ZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKKyAgICB2b2lkIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9yaWdpbmFsU3RhdGUpOwogCi0gICAgdm9p
ZCB1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0
ZXJuKiA9IG51bGxwdHIpOwotICAgIHZvaWQgdXBkYXRlU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3Im
LCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51bGxwdHIpOwotICAgIHZvaWQgdXBk
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIGVudW0gY2xhc3MgU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMgewotICAgICAgICBVbnNwZWNpZmllZCwKLSAgICAgICAgWWVzLAotICAg
ICAgICBObwotICAgIH07Ci0gICAgdm9pZCB1cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBz
aGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwg
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwotCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRG
T1JNKFdJTikKLSAgICB2b2lkIHVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmKTsKLSNlbmRpZgorICAg
IHZvaWQgZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3
T1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdCeVNwbGl0dGluZ0lu
dG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwogCi0gICAgR3JhcGhp
Y3NDb250ZXh0JiBtX293bmVyOworICAgIEdyYXBoaWNzQ29udGV4dCYgbV9kZXN0aW5hdGlvbkNv
bnRleHQ7CiAgICAgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhz
OwogICAgIERlcml2ZUZvbnRGcm9tQ29udGV4dCBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dDsKIAot
I2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAgVW5pcXVlUmVmPEdyYXBo
aWNzQ29udGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7Ci0jZW5kaWYKLQogICAgIGNvbnN0IEZvbnQq
IG1fb3JpZ2luYWxGb250IHsgbnVsbHB0ciB9OwogICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21v
b3RoaW5nTW9kZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nIH07CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OwogCi0gICAgc3RydWN0IFN0YXRlIHsK
LSAgICAgICAgc3RydWN0IFN0eWxlIHsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAg
ICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKLSAgICAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgICAgICAgICAgUmVmUHRyPFBhdHRlcm4+
IHBhdHRlcm47Ci0gICAgICAgIH07Ci0gICAgICAgIFN0eWxlIGZpbGxTdHlsZTsKLSAgICAgICAg
U3R5bGUgc3Ryb2tlU3R5bGU7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKLQotICAg
ICAgICBzdHJ1Y3QgU2hhZG93U3RhdGUgewotICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldDsK
LSAgICAgICAgICAgIGZsb2F0IGJsdXIgeyAwIH07Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsK
LSAgICAgICAgICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07Ci0gICAgICAgIH07
Ci0gICAgICAgIFNoYWRvd1N0YXRlIHNoYWRvdzsKLSAgICB9OwotICAgIFN0YXRlIG1fb3JpZ2lu
YWxTdGF0ZTsKLSAgICBTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKyNpZiBVU0UoQ09SRV9URVhUKSAm
JiAhUExBVEZPUk0oV0lOKQorICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJu
YWxDb250ZXh0OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODUx
ODBhZDEwOWZkODE4ZTliYjE1ODhjZTk2MmFiNDYzMDgxNmEwOS4uMzYxMWIxMmNhOWFiMjllYjky
MWYyMzI1ZTFmOTZkMjk1MjUzYzdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgRm9udENh
c2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuCiAKIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNw
bGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4dFJ1bihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFjb250ZXh0LnBhaW50aW5nRGlzYWJs
ZWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCAhY29udGV4dC5wYWludGluZ0Rpc2Fi
bGVkKCkpOwogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uID0gdG8udmFsdWVfb3IocnVuLmxlbmd0
aCgpKTsKICAgICAKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNwbGF5
TGlzdEZvclRleAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IGRpc3BsYXlMaXN0ID0gbWFr
ZVVuaXF1ZTxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4oKTsKLSAgICBEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBjb250ZXh0
LnN0YXRlKCksIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgRHJhd0dseXBoc1JlY29y
ZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKTsKKyAgICBEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoKSwgQWZmaW5l
VHJhbnNmb3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpO
byk7CiAgICAgCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gdG9GbG9hdFBvaW50KFdlYkNv
cmU6OnNpemUoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKSkpOwogICAgIGRyYXdHbHlwaEJ1
ZmZlcihyZWNvcmRpbmdDb250ZXh0LCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCwgY3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnRJbWFnZS5jcHAKaW5kZXggNjQ1ODRlNWNmZTAxMTg4MmVmYWIyZTIzYzNhNTk0
ZTE3ODJmMjg5MC4uMmY4MjdmNjI1ZjY0YjU5Y2ExYTY2NDk2MDczMGYwM2MyM2JjMzdhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5j
cHAKQEAgLTQzLDcgKzQzLDcgQEAgR3JhZGllbnRJbWFnZTo6fkdyYWRpZW50SW1hZ2UoKSA9IGRl
ZmF1bHQ7CiBJbWFnZURyYXdSZXN1bHQgR3JhZGllbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihkZXN0Q29udGV4dCk7Ci0gICAg
ZGVzdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgZGVzdENvbnRleHQuc2V0Q29tcG9zaXRl
TW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9
KTsKICAgICBkZXN0Q29udGV4dC5jbGlwKGRlc3RSZWN0KTsKICAgICBkZXN0Q29udGV4dC50cmFu
c2xhdGUoZGVzdFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBz
cmNSZWN0LnNpemUoKSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBHcmFkaWVudEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGQK
ICAgICBtX2dyYWRpZW50LT5hZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKGFkanVzdGVk
U2l6ZSwgYWRqdXN0ZWRTcmNSZWN0LCBzcGFjaW5nKTsKIAogICAgIC8vIEZhY3RvciBpbiB0aGUg
ZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29s
dXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5n
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oKTsK
ICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7CiAgICAg
ZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAK
aW5kZXggMGJiMTM1OTdjZWE3MzY5ZGJiYzZlMTcyN2YyNmM5MmI4ZmI3NTE3Ni4uNjA1NzYwOGE0
ZDYxMzdiMDU1MjdhZjZjMWQ3MTA5YmQwZDQ1YjdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcs
NiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQmlkaVJlc29s
dmVyLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKQEAg
LTM2LDQ3MyArMzUsMzA5IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiTnVs
bEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAi
U3lzdGVtSW1hZ2UuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiVGV4dEJveEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFRleHRCb3hJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVGV4dEJv
eEl0ZXJhdG9yKCkKLSAgICAgICAgOiBtX3RleHRSdW4oMCkKLSAgICAgICAgLCBtX29mZnNldCgw
KQotICAgIHsKLSAgICB9Ci0KLSAgICBUZXh0Qm94SXRlcmF0b3IoY29uc3QgVGV4dFJ1biogdGV4
dFJ1biwgdW5zaWduZWQgb2Zmc2V0KQotICAgICAgICA6IG1fdGV4dFJ1bih0ZXh0UnVuKQotICAg
ICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICB2b2lkIGluY3JlbWVudCgpIHsg
bV9vZmZzZXQrKzsgfQotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV90ZXh0UnVu
IHx8IG1fb2Zmc2V0ID49IG1fdGV4dFJ1bi0+bGVuZ3RoKCk7IH0KLSAgICBVQ2hhciBjdXJyZW50
KCkgY29uc3QgeyByZXR1cm4gKCptX3RleHRSdW4pW21fb2Zmc2V0XTsgfQotICAgIFVDaGFyRGly
ZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGF0RW5kKCkgPyBVX09USEVSX05FVVRS
QUwgOiB1X2NoYXJEaXJlY3Rpb24oY3VycmVudCgpKTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQgJiYgbV90ZXh0UnVuID09IG90aGVyLm1fdGV4
dFJ1bjsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGV4dEJveEl0ZXJhdG9y
JiBvdGhlcikgY29uc3QgeyByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgY29uc3QgVGV4dFJ1biogbV90ZXh0UnVuOwotICAgIHVuc2lnbmVkIG1fb2Zmc2V0Owot
fTsKLQotI2RlZmluZSBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkg
XAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpm
bGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKLSAgICAgICAg
Y2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKTsKLQotR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkKLSAgICA6IHNob3VsZEFudGlhbGlh
cyh0cnVlKQotICAgICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKLSAgICAsIHNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyh0cnVlKQotICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFs
c2UpCi0gICAgLCBkcmF3THVtaW5hbmNlTWFzayhmYWxzZSkKK0dyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2VGbGFncyYgY2hhbmdlRmxhZ3MsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fc3RhdGUoaW5pdGlhbENsaXAsIGNoYW5nZUZsYWdz
LCBpbml0aWFsQ1RNKQogewogfQogCi1HcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBoaWNzQ29u
dGV4dFN0YXRlKCkgPSBkZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OwotR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6b3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OwotR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVyYXRvcj0oR3JhcGhp
Y3NDb250ZXh0U3RhdGUmJikgPSBkZWZhdWx0OwotCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjptZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK0dyYXBoaWNzQ29udGV4dDo6
fkdyYXBoaWNzQ29udGV4dCgpCiB7Ci0gICAgYXV0byBzdHJva2VGbGFncyA9IHsgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0cm9rZUZsYWdzKSkgewotICAgICAg
ICBzdHJva2VDb2xvciA9IHN0YXRlLnN0cm9rZUNvbG9yOwotICAgICAgICBzdHJva2VHcmFkaWVu
dCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgICAgICBzdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbGxGbGFncyA9IHsgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxH
cmFkaWVudENoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlIH07
Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGZpbGxGbGFncykpIHsKLSAgICAgICAgZmlsbENv
bG9yID0gc3RhdGUuZmlsbENvbG9yOwotICAgICAgICBmaWxsR3JhZGllbnQgPSBzdGF0ZS5maWxs
R3JhZGllbnQ7Ci0gICAgICAgIGZpbGxQYXR0ZXJuID0gc3RhdGUuZmlsbFBhdHRlcm47Ci0gICAg
fQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dD
aGFuZ2UpKSB7Ci0gICAgICAgIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAg
ICAgICAgc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgICAgIHNoYWRvd0NvbG9y
ID0gc3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIHNoYWRvd1JhZGl1c01vZGUgPSBzdGF0ZS5z
aGFkb3dSYWRpdXNNb2RlOwotICAgIH0KLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgc3Ryb2tlVGhp
Y2tuZXNzID0gc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICB0
ZXh0RHJhd2luZ01vZGUgPSBzdGF0ZS50ZXh0RHJhd2luZ01vZGU7Ci0KLSAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAg
ICAgc3Ryb2tlU3R5bGUgPSBzdGF0ZS5zdHJva2VTdHlsZTsKLQotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKQotICAgICAgICBmaWxs
UnVsZSA9IHN0YXRlLmZpbGxSdWxlOworICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOworfQogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGFs
cGhhID0gc3RhdGUuYWxwaGE7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCit7CisgICAg
bV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnko
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKSB7Ci0gICAgICAgIGNvbXBvc2l0ZU9w
ZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgICAgIGJsZW5kTW9kZSA9IHN0
YXRlLmJsZW5kTW9kZTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKK3sKKyAgICBp
ZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHN0YXRl
LnNob3VsZEFudGlhbGlhczsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBzaG91bGRTbW9vdGhG
b250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOworICAgIG1fc3RhdGUgPSBtX3N0YWNrLnRh
a2VMYXN0KCk7CisgICAgbV9sYXN0QXBwbGllZFN0YXRlID0gc3RkOjpudWxsb3B0OwogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMg
PSBzdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0KLSAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdl
KSkKLSAgICAgICAgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtczsKKyAgICAvLyBNYWtlIHN1cmUgd2UgZGVhbGxvY2F0ZSB0aGUgc3RhdGUgc3Rh
Y2sgYnVmZmVyIHdoZW4gaXQgZ29lcyBlbXB0eS4KKyAgICAvLyBDYW52YXMgZWxlbWVudHMgd2ls
bCBpbW1lZGlhdGVseSBzYXZlKCkgYWdhaW4sIGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2Fw
YWNpdHkuCisgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICBtX3N0YWNrLmNsZWFy
KCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRy
YXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgZHJhd0x1bWluYW5jZU1hc2sgPSBzdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkaWRBcHBseVN0YXRl
Q2hhbmdlcygpCit7CisgICAgbV9zdGF0ZS5kaWRBcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1f
bGFzdEFwcGxpZWRTdGF0ZSA9IG1fc3RhdGU7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQot
ICAgICAgICBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eTsKK0Zsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yKCkgY29u
c3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgcmV0
dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Cit9
CisgICAgCitGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmco
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICBhdXRv
IHRyYW5zZm9ybWVkRGVzdFJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7CisgICAg
cmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7Cit9CiAK
LSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChmbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICB1
c2VEYXJrQXBwZWFyYW5jZSA9IHN0YXRlLnVzZURhcmtBcHBlYXJhbmNlOwotI2VuZGlmCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKK3sKKyAgICAr
K21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKSBjb25zdAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFnczsKKyAgICBBU1NFUlQobV90cmFuc3Bh
cmVuY3lMYXllckNvdW50ID4gMCk7CisgICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7Cit9
CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwg
c3Ryb2tlR3JhZGllbnQpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBh
dHRlcm5DaGFuZ2UsIHN0cm9rZVBhdHRlcm4pOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BF
UlRZKEZpbGxHcmFkaWVudENoYW5nZSwgZmlsbEdyYWRpZW50KTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShGaWxsUGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fc3RhdGUu
Y2xpcChyZWN0KTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpCi0gICAgICAgICYmIChtX3N0YXRlLnNoYWRvd09m
ZnNldCAhPSBzdGF0ZS5zaGFkb3dPZmZzZXQKLSAgICAgICAgICAgIHx8IG1fc3RhdGUuc2hhZG93
Qmx1ciAhPSBzdGF0ZS5zaGFkb3dCbHVyCi0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0Nv
bG9yICE9IHN0YXRlLnNoYWRvd0NvbG9yKSkKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlKQoreworICAgIG1fc3RhdGUuY2xpcChw
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Cit9CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9Q
RVJUWShTdHJva2VUaGlja25lc3NDaGFuZ2UsIHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoVGV4dERyYXdpbmdNb2RlQ2hhbmdlLCB0ZXh0RHJhd2luZ01v
ZGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZUNvbG9yQ2hhbmdlLCBz
dHJva2VDb2xvcik7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbENvbG9yQ2hh
bmdlLCBmaWxsQ29sb3IpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVN0
eWxlQ2hhbmdlLCBzdHJva2VTdHlsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
RmlsbFJ1bGVDaGFuZ2UsIGZpbGxSdWxlKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShBbHBoYUNoYW5nZSwgYWxwaGEpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIFBhdGggcGF0aDsKKyAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOworICAgIGNsaXBQYXRoKHBhdGgpOworfQogCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2Rl
Q2hhbmdlIH0pCi0gICAgICAgICYmIChtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUuYmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9k
ZSkpIHsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21w
b3NpdGVPcGVyYXRpb25DaGFuZ2UpOwotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hv
dWxkQW50aWFsaWFzQ2hhbmdlLCBzaG91bGRBbnRpYWxpYXMpOwotICAgIENIRUNLX0ZPUl9DSEFO
R0VEX1BST1BFUlRZKFNob3VsZFNtb290aEZvbnRzQ2hhbmdlLCBzaG91bGRTbW9vdGhGb250cyk7
Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKLQotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoVXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UsIHVzZURhcmtB
cHBlYXJhbmNlKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGNoYW5nZUZsYWdzOworICAgIFBhdGgg
cGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOworICAgIGNsaXBPdXQocGF0aCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KQogewotICAgIG1fc3RhdGUubWVyZ2VDaGFuZ2VzKHN0YXRlLCBmbGFncyk7Ci0KLSAgICBh
dXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnNBbnkoc3Ryb2tlRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShzdHJva2VG
bGFncyk7Ci0KLSAgICBhdXRvIGZpbGxGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zQW55KGZpbGxGbGFncykpCi0gICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3ZlKGZp
bGxGbGFncyk7Ci0KLSAgICBhdXRvIGNvbXBvc2l0ZU9wZXJhdG9yRmxhZ3MgPSB7IEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoY29tcG9z
aXRlT3BlcmF0b3JGbGFncykpCi0gICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3ZlKGNvbXBvc2l0
ZU9wZXJhdG9yRmxhZ3MpOwotCi0gICAgbV9jaGFuZ2VGbGFncy5hZGQoZmxhZ3MpOworICAgIGlt
YWdlQnVmZmVyLmNsaXBUb01hc2soKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRT
dHJva2VHcmFkaWVudCgqbV9zdGF0ZS5zdHJva2VHcmFkaWVudCwgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29udGV4
dC5zZXRTdHJva2VQYXR0ZXJuKCptX3N0YXRlLnN0cm9rZVBhdHRlcm4pOwotCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENo
YW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KCptX3N0YXRlLmZpbGxHcmFk
aWVudCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxQYXR0ZXJuKCptX3N0YXRlLmZpbGxQYXR0ZXJu
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hh
ZG93Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZz
ZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2Rl
Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUobV9zdGF0ZS50ZXh0
RHJhd2luZ01vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihtX3N0YXRlLnN0cm9rZUNvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBj
b250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2Up
KQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKG1fc3RhdGUuc3Ryb2tlU3R5bGUpOwot
Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsUnVsZShtX3N0YXRlLmZpbGxS
dWxlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBo
YSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UgfSkpCi0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRp
YWxpYXNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhtX3N0YXRl
LnNob3VsZEFudGlhbGlhcyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBjb250
ZXh0LnNldFNob3VsZFNtb290aEZvbnRzKG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzKG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RHJhd0x1bWlu
YW5jZU1hc2sobV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayk7Ci0KLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eShtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotCi0jaWYgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dFVzZURhcmtBcHBlYXJhbmNlKG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlmCisg
ICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlv
bigpOworICAgIHNldENvbXBvc2l0ZU1vZGUoeyBvcCwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxS
ZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVy
YXRvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4dFN0
cmVhbSYgdHMpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJjaGFuZ2UtZmxhZ3MiLCBtX2NoYW5nZUZsYWdzLnRvUmF3KCkpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50LmdldCgpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJzdHJva2UtcGF0dGVybiIsIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQo
KSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWdy
YWRpZW50IiwgbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkK
LSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRlLmZpbGxQYXR0
ZXJuLmdldCgpKTsKKyAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKK30KIAotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpKSB7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNo
YWRvd0JsdXIpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0
YXRlLnNoYWRvd09mZnNldCk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWNvbG9y
IiwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93
cy11c2UtbGVnYWN5LXJhZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dS
YWRpdXNNb2RlOjpMZWdhY3kpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCit7CisgICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAg
IGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5k
TW9kZSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgICAgIAorICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICBzZXRD
b21wb3NpdGVNb2RlKHsgcHJldmlvdXNPcGVyYXRvciwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxS
b3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZp
b3VzT3BlcmF0b3IpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic3Ryb2tlLXRoaWNrbmVzcyIsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0
RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRleHQtZHJhd2lu
Zy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1jb2xvciIsIG1fc3RhdGUuc3Ry
b2tlQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmls
bC1jb2xvciIsIG1fc3RhdGUuZmlsbENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXN0eWxlIiwgbV9zdGF0ZS5zdHJva2VTdHlsZSk7Cit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSZWN0KHJlY3Qp
OwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXJ1bGUiLCBt
X3N0YXRlLmZpbGxSdWxlKTsKKyAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVy
bygpKQorICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7CisgICAg
ZWxzZQorICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAg
ICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFD
aGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIiwgbV9zdGF0ZS5hbHBoYSk7
CisgICAgV2luZFJ1bGUgb2xkRmlsbFJ1bGUgPSBmaWxsUnVsZSgpOworICAgIENvbG9yIG9sZEZp
bGxDb2xvciA9IGZpbGxDb2xvcigpOworICAgIAorICAgIHNldEZpbGxSdWxlKFdpbmRSdWxlOjpF
dmVuT2RkKTsKKyAgICBzZXRGaWxsQ29sb3IoY29sb3IpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5n
ZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdG9yIiwgbV9zdGF0
ZS5jb21wb3NpdGVPcGVyYXRvcik7CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgCisgICAgc2V0
RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOworICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwor
fQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkJsZW5kTW9kZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIs
IG1fc3RhdGUuYmxlbmRNb2RlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZUFz
UGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBh
dGguYWRkRWxsaXBzZShlbGxpcHNlKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKK30KIAotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRp
YWxpYXNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1hbnRpYWxpYXMi
LCBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
RWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRo
OworICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwor
fQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91
bGQtc21vb3RoLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Cit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCit7CisgICAg
YXV0byBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKKyAgICBhdXRvIG9sZFN0cm9rZUNvbG9y
ID0gc3Ryb2tlQ29sb3IoKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsIG1f
c3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBzZXRGaWxsQ29sb3Ioc2hh
ZG93Q29sb3IpOworICAgIHNldFN0cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKKyAgICBkcmF3RWxs
aXBzZShGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKSk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoInNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMiLCBtX3N0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKTsKKyAgICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBz
ZXRTdHJva2VDb2xvcihlbGxpcHNlQ29sb3IpOworICAgIGRyYXdFbGxpcHNlKHJlY3QpOwogCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdM
dW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJkcmF3LWx1bWlu
YW5jZS1tYXNrIiwgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayk7CisgICAgc2V0RmlsbENvbG9y
KG9sZEZpbGxDb2xvcik7CisgICAgc2V0U3Ryb2tlQ29sb3Iob2xkU3Ryb2tlQ29sb3IpOworfQog
Ci0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQot
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoInVzZS1kYXJrLWFwcGVhcmFuY2UiLCBtX3N0YXRlLnVz
ZURhcmtBcHBlYXJhbmNlKTsKLSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgc3Ryb2tlUGF0
aChwYXRoKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0
UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCiB7Ci0gICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRz
OworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFn
ZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGlt
YWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250
ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNF
bXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7CisgICAgZHJh
d0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9n
aWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNhdmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICBtX3N0YWNrLmFwcGVuZChtX3N0YXRlKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50
ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24s
IHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBpZiAobV9z
dGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgaWYgKCFpbWFnZSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RhdGUgPSBtX3N0YWNrLmxhc3QoKTsKLSAg
ICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZWFsbG9jYXRl
IHRoZSBzdGF0ZSBzdGFjayBidWZmZXIgd2hlbiBpdCBnb2VzIGVtcHR5LgotICAgIC8vIENhbnZh
cyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2FpbiwgYnV0IHRoYXQgZ29lcyBp
bnRvIGlubGluZSBjYXBhY2l0eS4KLSAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCi0gICAgICAg
IG1fc3RhY2suY2xlYXIoKTsKKyAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9n
aWNhbFNpemUoKTsKKyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSks
IEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0s
IGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5tZXJnZUNo
YW5nZXMoc3RhdGUsIGZsYWdzKTsKLSAgICBkaWRVcGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOwor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGltYWdlTG9naWNhbFNp
emUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIo
V1RGTW92ZShpbWFnZSksIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxT
aXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxs
aXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzYXZlKCk7Ci0KLSAgICBz
ZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7Ci0gICAgc2V0RmlsbENvbG9yKHNoYWRvd0NvbG9y
KTsKLQotICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIHNldFN0cm9rZUNvbG9yKGVsbGlw
c2VDb2xvcik7Ci0gICAgc2V0RmlsbENvbG9yKGVsbGlwc2VDb2xvcik7Ci0KLSAgICBkcmF3RWxs
aXBzZShyZWN0KTsgIAotCi0gICAgcmVzdG9yZSgpOworICAgIGlmICghaW1hZ2UpCisgICAgICAg
IHJldHVybjsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlv
blF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHko
KSk7CisgICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVz
dWx0cyYgcmVzdWx0cykKIHsKLSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7Ci0gICAg
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0
ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyLmFw
cGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMpOworICAgIGlmICghcmVz
dWx0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHJlc3Vs
dC0+aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBzY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmls
dGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7CisgICAgZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlciwgcmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKKyAgICBzY2FsZShmaWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29u
c3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hh
ZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAg
ICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIg
PSBibHVyOwotICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnNo
YWRvd1JhZGl1c01vZGUgPSByYWRpdXNNb2RlOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOworICAgIHJldHVybiBkcmF3SW1h
Z2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQorSW1hZ2VEcmF3UmVzdWx0IEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRp
b25zKQogewotICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7Ci0gICAgbV9z
dGF0ZS5zaGFkb3dCbHVyID0gMDsKLSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsK
LSAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6
ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlvbigpKSk7CisgICAgcmV0dXJuIGRyYXdJ
bWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3QsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsK
IH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwg
ZmxvYXQmIGJsdXIsIENvbG9yJiBjb2xvcikgY29uc3QKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBvZmZzZXQgPSBtX3N0YXRlLnNoYWRvd09mZnNldDsKLSAgICBi
bHVyID0gbV9zdGF0ZS5zaGFkb3dCbHVyOwotICAgIGNvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xv
cjsKLQotICAgIHJldHVybiBoYXNTaGFkb3coKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMu
aW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0gY29sb3I7Ci0gICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBu
dWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsQ29sb3JDaGFuZ2UpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5h
dGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCitJ
bWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKKyAgICBJbWFnZTo6VGlsZVJ1bGUg
aFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBX
VEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKTsKKyAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6
OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgeworICAgICAgICAv
LyBKdXN0IGRvIGEgc2NhbGUuCisgICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOworICAgIH0KKworICAgIEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0
aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVk
KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVs
ZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7
IH07Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuZmls
bFBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgc3lzdGVtSW1h
Z2UuZHJhdygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3RhdGUuc3Ry
b2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsKKyAgICBpbWFnZS5kcmF3UGF0
dGVybigqdGhpcywgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZp
bGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsK
LSAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwotICAgIG1fc3Rh
dGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bTsKLSAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKTsKLSAg
ICAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRlcm4/CisgICAgcGxheWVyLnBsYXllclByaXZhdGUo
KS0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKIH0KKyNl
bmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgKyttX3RyYW5zcGFyZW5j
eUxheWVyQ291bnQ7CisgICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGds
eXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fdHJhbnNw
YXJlbmN5TGF5ZXJDb3VudCA+IDApOwotICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50Owor
ICAgIGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwg
Zm9udFNtb290aGluZ01vZGUpOwogfQogCiBGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3
VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
dG8pCkBAIC01MTEsMTEgKzM0Niw2IEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdU
ZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgcmV0
dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLXsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBo
cygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNt
b290aGluZ01vZGUpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFy
a3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRv
bVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvKQogewogICAgIGZvbnQuZHJhd0VtcGhhc2lzTWFya3Mo
KnRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKQEAgLTU0OSw3ICszNzksNDUgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgp
OwogICAgIH0KIAotICAgIGJpZGlSdW5zLmNsZWFyKCk7CisgICAgYmlkaVJ1bnMuY2xlYXIoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5
bGUgc3R5bGUpCit7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3Qu
aGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91Ymxl
VW5kZXJsaW5lcywgc3R5bGUpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21w
dXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJp
bnRpbmcpCit7CisgICAgQ29sb3IgZHVtbXlDb2xvcjsKKyAgICByZXR1cm4gY29tcHV0ZUxpbmVC
b3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xv
cik7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5k
QW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50
aW5nLCBDb2xvciYgY29sb3IpCit7CisgICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0
aW9uKCk7CisgICAgZmxvYXQgdGhpY2tuZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41
Zik7CisgICAgaWYgKHByaW50aW5nKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwg
RmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHgg
ZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCisgICAgZmxvYXQg
c2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zv
cm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7CisgICAgaWYgKHNjYWxlIDwgMS4wKSB7CisgICAgICAg
IC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25lLXBp
eGVsIGxpbmUgaGlnaCwKKyAgICAgICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3Zlcndo
ZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8gZWZm
ZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0ZXh0
IGlzIGF0IHNtYWxsIHNjYWxlcy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1V
bmRlcmxpbmVBbHBoYSA9IDAuNGY7CisgICAgICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBtaW5p
bXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1VbmRlcmxpbmVBbHBoYTsKKyAgICAg
ICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShzaGFkZSk7CisgICAg
fQorCisgICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRyYW5zZm9ybS5tYXBQb2ludChyZWN0
LmxvY2F0aW9uKCkpOworICAgIC8vIFZpc3VhbCBvdmVyZmxvdyBtaWdodCBvY2N1ciBoZXJlIGR1
ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMg
YWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVybGluZSBkZWNvcmF0aW9uLgorICAg
IEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2ludChyb3VuZGYoZGV2aWNlUG9pbnQu
eCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7CisgICAgaWYgKGF1dG8gaW52ZXJzZSA9IHRy
YW5zZm9ybS5pbnZlcnNlKCkpCisgICAgICAgIG9yaWdpbiA9IGludmVyc2UudmFsdWUoKS5tYXBQ
b2ludChkZXZpY2VPcmlnaW4pOworICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNp
emUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKIH0KIAogc3RhdGljIEludFNpemUgc2NhbGVk
SW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
Y2FsZSkKQEAgLTYzOSwxODcgKzUwNyw5IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0OjpjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByCiAgICAg
cmV0dXJuIGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUoKSwgcmVuZGVyaW5nTWV0aG9kKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIHN5c3RlbUltYWdlLmRyYXco
KnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17
Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFn
ZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBGbG9h
dFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoaW1hZ2VQYWludGluZ09wdGlv
bnMub3JpZW50YXRpb24oKSkpOwotICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0
aW9uLCBzcmNSZWN0LCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJw
b2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xh
dGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxp
dHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNp
emUmIHRpbGVTY2FsZUZhY3RvciwKLSAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpU
aWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0g
ICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3Ry
ZXRjaFRpbGUpIHsKLSAgICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgotICAgICAgICByZXR1cm4g
ZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICB9Ci0K
LSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAg
cmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNj
YWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFn
ZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0
KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRl
c3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0
eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAg
ICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1h
Z2UpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+
bG9naWNhbFNpemUoKTsKLSAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFn
ZSksIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7
IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNh
bFNpemUoKTsKLSAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIGRl
c3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGlu
Z09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdl
QnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgSW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Nj
b3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKLXsK
LSAgICBhdXRvIHJlc3VsdCA9IGZpbHRlci5hcHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VS
ZWN0LCByZXN1bHRzKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSByZXN1bHQtPmltYWdlQnVmZmVyKCk7Ci0gICAgaWYgKCFp
bWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZp
bHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0p
OwotICAgIGRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFn
ZVJlY3QoKSk7Ci0gICAgc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0
KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAg
IGNsaXBQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0Lmlz
Um91bmRlZCgpKSB7Ci0gICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVj
dCk7Ci0gICAgY2xpcE91dChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVz
dGluYXRpb25SZWN0KTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMo
KSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRSZWN0
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBncmFkaWVudC5maWxsKCp0aGlzLCBy
ZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKLXsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9y
ID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBi
bGVuZE1vZGUpOwotICAgIGZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICBzZXRDb21wb3NpdGVP
cGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChyZWN0LmlzUm91bmRlZCgp
KSB7Ci0gICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSwg
YmxlbmRNb2RlKTsKLSAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0g
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFBhdGgg
cGF0aDsKLSAgICBwYXRoLmFkZFJlY3QocmVjdCk7Ci0KLSAgICBpZiAoIXJvdW5kZWRIb2xlUmVj
dC5yYWRpaSgpLmlzWmVybygpKQotICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRI
b2xlUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0
LnJlY3QoKSk7CiAKLSAgICBXaW5kUnVsZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7Ci0gICAg
Q29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUo
V2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBmaWxs
UGF0aChwYXRoKTsKLSAgICAKLSAgICBzZXRGaWxsUnVsZShvbGRGaWxsUnVsZSk7Ci0gICAgc2V0
RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7Ci19CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSBj
b21wb3NpdGVPcGVyYXRpb247Ci0gICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVuZE1vZGU7Ci0g
ICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0
ZU9wZXJhdGlvbkNoYW5nZSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5l
VG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBz
dHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBAIC04NTAsNzcgKzU0MCw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQ
b2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyCiAgICAgfQogfQogCi1GbG9hdFNpemUgR3JhcGhpY3ND
b250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2Nh
bGUpOwotICAgIHJldHVybiBGbG9hdFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0u
eVNjYWxlKCkpOwotfQotICAgIAotRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0
b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0
byB0cmFuc2Zvcm1lZERlc3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOwotICAg
IHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAg
ICBmaWxsUGF0aChwYXRoKTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQot
ewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgZmls
bFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQ
YXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0
aC5hZGRFbGxpcHNlKGVsbGlwc2UpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQot
ewotICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCBE
YXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMs
IHN0eWxlKTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGlu
ZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQotewot
ICAgIENvbG9yIGR1bW15Q29sb3I7Ci0gICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50
aWFsaWFzaW5nTW9kZUZvclRleHQocmVjdCwgcHJpbnRpbmcsIGR1bW15Q29sb3IpOwotfQotCi1G
bG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2lu
Z01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgQ29sb3Im
IGNvbG9yKQotewotICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gcmVjdC5sb2NhdGlvbigpOwotICAg
IGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIDAuNWYpOwotICAgIGlm
IChwcmludGluZykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShy
ZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUp
OwotICAgIC8vIEp1c3QgY29tcHV0ZSBzY2FsZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcgeCBh
bmQgeSBzY2FsZXMgYXJlIGVxdWFsLgotICAgIGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLmIoKSA/
IHN0ZDo6aHlwb3QodHJhbnNmb3JtLmEoKSwgdHJhbnNmb3JtLmIoKSkgOiB0cmFuc2Zvcm0uYSgp
OwotICAgIGlmIChzY2FsZSA8IDEuMCkgewotICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRy
YXdzIGEgbGluZSB0aGF0IGlzIGF0IGxlYXN0IG9uZS1waXhlbCBsaW5lIGhpZ2gsCi0gICAgICAg
IC8vIHdoaWNoIHRlbmRzIHRvIHZpc3VhbGx5IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxl
cy4gVG8gY291bnRlciB0aGlzCi0gICAgICAgIC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGll
ZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9yIHdoZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMuCi0g
ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPSAwLjRmOwot
ICAgICAgICBmbG9hdCBzaGFkZSA9IHNjYWxlID4gbWluaW11bVVuZGVybGluZUFscGhhID8gc2Nh
bGUgOiBtaW5pbXVtVW5kZXJsaW5lQWxwaGE7Ci0gICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hhZGUpOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgZGV2
aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFwUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKLSAgICAvLyBW
aXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2NjdXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2Nl
aWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZh
bHVlIGZvciB1bmRlcmxpbmUgZGVjb3JhdGlvbi4KLSAgICBGbG9hdFBvaW50IGRldmljZU9yaWdp
biA9IEZsb2F0UG9pbnQocm91bmRmKGRldmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50
LnkoKSkpOwotICAgIGlmIChhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQotICAg
ICAgICBvcmlnaW4gPSBpbnZlcnNlLnZhbHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tu
ZXNzKSk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRo
Rm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxvYXQgdGhp
Y2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC05NzIsMTUgKzU5MSw0IEBAIFZlY3RvcjxG
bG9hdFBvaW50PiBHcmFwaGljc0NvbnRleHQ6OmNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJv
b2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0dXJuIHsgcG9pbnQxLCBwb2ludDIgfTsKIH0KIAotI2lm
IEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAg
ICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhp
cywgZGVzdGluYXRpb24pOwotfQotI2VuZGlmCi0KLXZvaWQgTnVsbEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsK
LX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAppbmRleCBmYjk1ZGQyNWIyNzFkZWI5ZmE4NWZmMmQ5ZjFmNzQ3MTZhMDY2YmFl
Li5hMzNkOWQxYjgwN2QxM2FhZjM0ZTMzMDY0MGZmZjZhYjYxMWQ0OWFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2Jp
bGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMwLDQ5ICszMCwxOCBAQAogI2luY2x1ZGUg
IkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAotI2lmIFVTRShDRykKLXR5cGVkZWYgc3RydWN0IENHQ29u
dGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbGlmIFVTRShDQUlSTykKLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOwotfQotdHlwZWRlZiBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbHNl
Ci10eXBlZGVmIHZvaWQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKFdJTikKLSNpbmNsdWRlICJESUJQaXhlbERhdGEuaCIKLXR5cGVkZWYgc3RydWN0IEhE
Q19fKiBIREM7Ci0jaWYgIVVTRShDRykKLS8vIFVJbnQ4IGlzIGRlZmluZWQgaW4gQ29yZUZvdW5k
YXRpb24vQ0ZCYXNlLmgKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBVSW50ODsKLSNlbmRpZgotI2Vu
ZGlmCi0KLS8vIFgxMSBoZWFkZXJzIGRlZmluZSBhIGJ1bmNoIG9mIG1hY3JvcyB3aXRoIGNvbW1v
biB0ZXJtcywgaW50ZXJmZXJpbmcgd2l0aCBXZWJDb3JlIGFuZCBXVEYgZW51bSB2YWx1ZXMuCi0v
LyBBcyBhIHdvcmthcm91bmQsIHdlIGV4cGxpY2l0bHkgdW5kZWYgdGhlbSBoZXJlLgotI2lmIGRl
ZmluZWQoTm9uZSkKLSN1bmRlZiBOb25lCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEJlbG93KQotI3Vu
ZGVmIEJlbG93Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKFN1Y2Nlc3MpCi0jdW5kZWYgU3VjY2Vzcwot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwpA
QCAtODIsNyArNTEsNiBAQCBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZl
cjsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBNZWRpYVBsYXllcjsKIGNsYXNzIFJvdW5kZWRSZWN0
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0w7CkBAIC05MSwxNzQgKzU5LDEyIEBAIGNsYXNzIFN5
c3RlbUltYWdlOwogY2xhc3MgVGV4dFJ1bjsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4Owog
Ci1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotY2xhc3MgUmVjb3JkZXI7Ci19Ci0KLWVudW0gY2xh
c3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7Ci0gICAgRmlsbCA9IDEgPDwgMCwKLSAgICBT
dHJva2UgPSAxIDw8IDEsCi19OwotdXNpbmcgVGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25T
ZXQ8VGV4dERyYXdpbmdNb2RlPjsKLQotLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1
c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0vLyBJdCBoYXMgZGlmZmVy
ZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KLWVudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9k
ZSA6IGJvb2wgewotICAgIERlZmF1bHQsCi0gICAgTGVnYWN5Ci19OwotCi1lbnVtIFN0cm9rZVN0
eWxlIHsKLSAgICBOb1N0cm9rZSwKLSAgICBTb2xpZFN0cm9rZSwKLSAgICBEb3R0ZWRTdHJva2Us
Ci0gICAgRGFzaGVkU3Ryb2tlLAotICAgIERvdWJsZVN0cm9rZSwKLSAgICBXYXZ5U3Ryb2tlLAot
fTsKLQotc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKLSAgICBlbnVtIGNsYXNzIE1v
ZGUgOiB1aW50OF90IHsKLSAgICAgICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFs
dGVybmF0aXZlcywKLSAgICAgICAgU3BlbGxpbmcsCi0gICAgICAgIEdyYW1tYXIsCi0gICAgICAg
IEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCi0gICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZl
cwotICAgIH0gbW9kZTsKLSAgICBib29sIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2Ug
fTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxE
b2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1vZGU7Ci0gICAgZW5jb2Rl
ciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLXN0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFs
PE1vZGU+IG1vZGU7Ci0gICAgZGVjb2RlciA+PiBtb2RlOwotICAgIGlmICghbW9kZSkKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxk
VXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5j
ZTsKLSAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFu
Y2UgfX07Ci19Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTsKLQotc3RydWN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOwot
Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRT
dGF0ZSYmKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0gICAgZW51bSBDaGFu
Z2UgOiB1aW50MzJfdCB7Ci0gICAgICAgIFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMCwKLSAgICAgICAgU3Ryb2tlUGF0dGVybkNoYW5nZSAgICAgICAgICAg
ICAgICAgICAgID0gMSA8PCAxLAotICAgICAgICBGaWxsR3JhZGllbnRDaGFuZ2UgICAgICAgICAg
ICAgICAgICAgICAgPSAxIDw8IDIsCi0gICAgICAgIEZpbGxQYXR0ZXJuQ2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgMywKLSAgICAgICAgU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlICAg
ICAgICAgICAgICAgICAgID0gMSA8PCA0LAotICAgICAgICBTdHJva2VDb2xvckNoYW5nZSAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDUsCi0gICAgICAgIFN0cm9rZVN0eWxlQ2hhbmdlICAg
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNiwKLSAgICAgICAgRmlsbENvbG9yQ2hhbmdlICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA3LAotICAgICAgICBGaWxsUnVsZUNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDgsCi0gICAgICAgIFNoYWRvd0NoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOSwKLSAgICAgICAgU2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXNDaGFuZ2UgICAgICAgICAgID0gMSA8PCAxMCwKLSAgICAgICAgQWxwaGFDaGFu
Z2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxMSwKLSAgICAgICAgQ29tcG9z
aXRlT3BlcmF0aW9uQ2hhbmdlICAgICAgICAgICAgICAgID0gMSA8PCAxMiwKLSAgICAgICAgQmxl
bmRNb2RlQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxMywKLSAgICAgICAg
VGV4dERyYXdpbmdNb2RlQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNCwKLSAgICAg
ICAgU2hvdWxkQW50aWFsaWFzQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNSwKLSAg
ICAgICAgU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAxNiwK
LSAgICAgICAgU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlICAgICAgID0gMSA8PCAx
NywKLSAgICAgICAgRHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8
PCAxOCwKLSAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSAgICAgICAgID0g
MSA8PCAxOSwKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgICAgICBVc2VEYXJr
QXBwZWFyYW5jZUNoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDIwLAotI2VuZGlmCi0gICAg
fTsKLSAgICB1c2luZyBTdGF0ZUNoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47Ci0KLSAg
ICB2b2lkIG1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIFJlZlB0cjxHcmFkaWVudD4g
c3Ryb2tlR3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47Ci0gICAg
Ci0gICAgUmVmUHRyPEdyYWRpZW50PiBmaWxsR3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+
IGZpbGxQYXR0ZXJuOwotCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLQotICAgIENvbG9y
IHN0cm9rZUNvbG9yIHsgQ29sb3I6OmJsYWNrIH07Ci0gICAgQ29sb3IgZmlsbENvbG9yIHsgQ29s
b3I6OmJsYWNrIH07Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0KLSAgICBBZmZpbmVUcmFuc2Zv
cm0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZmls
bEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgeyAw
IH07Ci0gICAgZmxvYXQgc2hhZG93Qmx1ciB7IDAgfTsKLSAgICBmbG9hdCBhbHBoYSB7IDEgfTsK
LQotICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBXaW5k
UnVsZSBmaWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07Ci0KLSAgICBUZXh0RHJhd2luZ01v
ZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUgeyBUZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKLSAgICBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VPdmVyIH07Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFs
IH07Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7
IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07Ci0gICAgU2hhZG93UmFkaXVzTW9kZSBz
aGFkb3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwotCi0gICAgYm9v
bCBzaG91bGRBbnRpYWxpYXMgOiAxOwotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwot
ICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKLSAgICBib29sIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zIDogMTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDogMTsK
LSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFu
Y2UgOiAxOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ug
ewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKCkgPSBkZWZhdWx0OwotICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgICAgIDog
bV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgLCBtX2NoYW5nZUZsYWdzKGZsYWdzKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2Vz
RnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgY29uc3Q7Ci0KLSAgICB2b2lk
IGFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7Ci0K
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIG1fY2hhbmdlRmxhZ3M7Ci19OwotCi1XVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmKTsKLQogY2xhc3MgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzogICAKKyAgICBmcmllbmQgY2xhc3MgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKK3B1YmxpYzoKKyAg
ICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZUZsYWdzJiA9IHsgfSwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMjcwLDI3MCArNzYsMjcz
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5j
RGVjb2RlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGRldGVj
dGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBD
b250ZXh0IFN0YXRlCisgICAgYm9vbCBjb250ZW5mdWxQYWludERldGVjdGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudGZ1
bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9Cisg
ICAgCisgICAgdmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKLSAgICB2b2lkIHNldFN0cm9r
ZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0
aGlja25lc3M7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VUaGlja25lc3NDaGFuZ2UpOyB9Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KKyAgICAvLyBDb250ZXh0IFN0
YXRlCiAKLSAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3Rh
dGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKTsgfQotICAgIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VTdHlsZTsgfQorICAgIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
KyAgICB2b2lkIG1lcmdlU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBv
dGhlcikgeyBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhvdGhlcik7IH0KKyAgICB2b2lkIG1lcmdlU3Rh
dGVEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpIHsgbV9zdGF0ZS5tZXJn
ZURpZmZzKG90aGVyKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VDb2xv
cihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RN
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5nZXRDVE0oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pIHsgbV9zdGF0ZS5zZXRDVE0oY3RtLCBt
X2xhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBjdG0pIHsgc2V0Q1RNKGdldENUTSgpICogY3RtKTsgfQorICAgIHZvaWQgdHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpIHsgc2V0Q1RNKGdldENUTSgpLnRyYW5zbGF0ZSh4LCB5KSk7
IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNsYXRl
KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25z
dCBGbG9hdFBvaW50JiBwKSB7IHRyYW5zbGF0ZShwLngoKSwgcC55KCkpOyB9CisgICAgdm9pZCBz
Y2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpIHsgc2V0Q1RNKGdldENUTSgpLnNjYWxlKHN4LCBzeSkp
OyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHMsIHMpOyB9CisgICAgdm9pZCBz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgc2NhbGUoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsgfQorICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSB7IHNldENU
TShnZXRDVE0oKS5yb3RhdGUocmFkMmRlZyhhbmdsZUluUmFkaWFucykpKTsgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQ
YXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0
ZXJuLmdldCgpOyB9CisgICAgY29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuZmlsbEJydXNoKCkuY29sb3IoKTsgfQorICAgIEdyYWRpZW50KiBmaWxsR3JhZGll
bnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxCcnVzaCgpLmdyYWRpZW50KCk7IH0KKyAg
ICBQYXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNo
KCkucGF0dGVybigpOyB9CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsU3BhY2VUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3Jt
KCk7IH0KKyAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9zdGF0
ZS5zZXRGaWxsQ29sb3IoY29sb3IsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNl
dEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRGaWxsR3JhZGllbnQoV1RG
TW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRl
cm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybiks
IHNwYWNlVHJhbnNmb3JtKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VH
cmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwot
ICAgIEdyYWRpZW50KiBzdHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ry
b2tlR3JhZGllbnQuZ2V0KCk7IH0KKyAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuZmlsbFJ1bGUoKTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUg
ZmlsbFJ1bGUpIHsgbV9zdGF0ZS5zZXRGaWxsUnVsZShmaWxsUnVsZSwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0
YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KLSAgICBXaW5kUnVsZSBmaWxsUnVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KKyAgICBjb25zdCBDb2xvciYgc3Ry
b2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsg
fQorICAgIEdyYWRpZW50KiBzdHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
c3Ryb2tlQnJ1c2goKS5ncmFkaWVudCgpOyB9CisgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5wYXR0ZXJuKCk7IH0KKyAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNl
dFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldFN0cm9rZUNvbG9y
KGNvbG9yLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBzZXRTdHJva2VHcmFkaWVu
dChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldFN0cm9rZUdyYWRpZW50KFdURk1v
dmUoZ3JhZGllbnQpLCBncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0U3Ry
b2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5TcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldFN0cm9rZVBhdHRlcm4o
V1RGTW92ZShwYXR0ZXJuKSwgcGF0dGVyblNwYWNlVHJhbnNmb3JtKTsgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBjb25zdCBDb2xv
ciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQ29sb3I7IH0KKyAgICBm
bG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcygpOyB9CisgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7
IG1fc3RhdGUuc2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcywgbV9sYXN0QXBwbGllZFN0YXRl
KTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJik7Ci0gICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpOyB9CisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0eWxlKCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc2V0U3Ryb2tlU3R5bGUoc3R5bGUsIG1f
bGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0g
ICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdy
YWRpZW50LmdldCgpOyB9CisgICAgTGluZUNhcCBpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmxpbmVDYXAoKTsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsg
bV9zdGF0ZS5zZXRMaW5lQ2FwKGxpbmVDYXAsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAg
IHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykgeyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KLSAgICBib29sIHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsgfQorICAgIGNvbnN0IExpbmVEYXNoIGxpbmVEYXNoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5saW5lRGFzaCgpOyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVEYXNo
KSB7IG1fc3RhdGUuc2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFs
aWFzKSB7IG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyBkaWRVcGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hh
bmdlKTsgfQotICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zaG91bGRBbnRpYWxpYXM7IH0KKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUubGluZUpvaW4oKTsgfQorICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4g
bGluZUpvaW4pIHsgbV9zdGF0ZS5zZXRMaW5lSm9pbihsaW5lSm9pbiwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290
aEZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290
aEZvbnRzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzOyB9CisgICAgZmxvYXQgbWl0ZXJMaW1pdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubWl0ZXJMaW1pdCgpOyB9CisgICAgdm9pZCBzZXRNaXRl
ckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpIHsgbV9zdGF0ZS5zZXRNaXRlckxpbWl0KG1pdGVyTGlt
aXQsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMg
c3VicGl4ZWwtcXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNl
IG9mIGFsaWduaW5nIGdseXBocy4KLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlz
YWJsZSB0byB0byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0g
ICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBz
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9Ci0g
ICAgYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsgfQorICAgIENvbXBvc2l0ZU1vZGUgY29t
cG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlTW9kZSgpOyB9Cisg
ICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
Y29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBj
b25zdCB7IHJldHVybiBjb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlOyB9CisgICAgdm9pZCBzZXRD
b21wb3NpdGVNb2RlKENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX3N0YXRlLnNldENv
bXBvc2l0ZU1vZGUoY29tcG9zaXRlTW9kZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZv
aWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbikgeyBz
ZXRDb21wb3NpdGVNb2RlKHsgb3BlcmF0aW9uLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsgfQogCi0g
ICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5
IHF1YWxpdHkpIHsgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2UpOyB9Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eTsgfQorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmRyb3BTaGFkb3coKTsgfQorICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93KCkub2Zmc2V0OyB9CisgICAgZmxvYXQg
c2hhZG93Qmx1cigpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5ibHVyUmFkaXVzOyB9Cisg
ICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygp
LmNvbG9yOyB9CisgICAgdm9pZCBzZXREcm9wU2hhZG93KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BT
aGFkb3cpIHsgbV9zdGF0ZS5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3csIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KKyAgICB2b2lkIGNsZWFyU2hhZG93KCkgeyBzZXREcm9wU2hhZG93KHsgfSk7IH0K
IAotICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhh
OyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFu
Z2UpOyB9Ci0gICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9
CisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygp
LmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1
cm4gZHJvcFNoYWRvdygpLmlzQmx1cnJlZCgpOyB9CisgICAgYm9vbCBoYXNTaGFkb3coKSBjb25z
dCB7IHJldHVybiBkcm9wU2hhZG93KCkuaGFzT3V0c2V0cygpOyB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0K
LSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5ibGVuZE1vZGU7IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
YWxwaGEoKTsgfQorICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5zZXRB
bHBoYShhbHBoYSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXREcmF3THVt
aW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuZHJhd0x1bWluYW5j
ZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFzazsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsgfQotICAgIGJvb2wgZHJh
d0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNr
OyB9CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOyB9Cisg
ICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5
IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpIHsgbV9zdGF0ZS5zZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7
IH0KIAotICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1v
ZGUpIHsgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsgfQotICAg
IFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUudGV4dERyYXdpbmdNb2RlOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERy
YXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUoKTsgfQor
ICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3
aW5nTW9kZSkgeyBtX3N0YXRlLnNldFRleHREcmF3aW5nTW9kZSh0ZXh0RHJhd2luZ01vZGUsIG1f
bGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgU2hhZG93UmFkaXVz
TW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBjbGVhclNoYWRvdygpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hh
ZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25zdDsKKyAgICBib29sIHNob3VsZEFu
dGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKCk7IH0KKyAg
ICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRl
LnNldFNob3VsZEFudGlhbGlhcyhzaG91bGRBbnRpYWxpYXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7
IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
c2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsg
cmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3Rh
dGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkp
OyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJs
ZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAgIGJvb2wgc2hvdWxkU21vb3Ro
Rm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKCk7IH0KKyAg
ICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9z
dGF0ZS5zZXRTaG91bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cywgbV9sYXN0QXBwbGll
ZFN0YXRlKTsgfQogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNl
dFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VE
YXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9Ci0gICAg
Ym9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0Fw
cGVhcmFuY2U7IH0KLSNlbmRpZgorICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwt
cXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWdu
aW5nIGdseXBocy4KKyAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0
byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCisgICAgYm9vbCBz
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5z
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcygpOyB9CisgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhi
b29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUuc2V0U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
IAotICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgYm9vbCBkcmF3THVtaW5h
bmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2soKTsgfQor
ICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBt
X3N0YXRlLnNldERyYXdMdW1pbmFuY2VNYXNrKGRyYXdMdW1pbmFuY2VNYXNrLCBtX2xhc3RBcHBs
aWVkU3RhdGUpOyB9CiAKLSAgICAvLyBDYWxsZWQgKmFmdGVyKiBhbnkgY2hhbmdlIHRvIEdyYXBo
aWNzQ29udGV4dFN0YXRlOyBnZW5lcmFsbHkgdXNlZCB0byBwcm9wYWdhdGUgY2hhbmdlcwotICAg
IC8vIHRvIHRoZSBwbGF0Zm9ybSBjb250ZXh0J3Mgc3RhdGUuCi0gICAgdmlydHVhbCB2b2lkIGRp
ZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpID0gMDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQ
T1JUKQorICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnVzZURhcmtBcHBlYXJhbmNlKCk7IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS5zZXRVc2VEYXJrQXBwZWFyYW5jZSh1c2VE
YXJrQXBwZWFyYW5jZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorI2VuZGlmCiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCByZXN0b3JlKCk7Ci0gICAgCisgICAgdm9pZCBkaWRBcHBseVN0YXRlQ2hhbmdlcygp
OwogICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgp
OyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSA9IDA7CiAjaWYgVVNF
KENHKQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFwaGlj
c0NvbnRleHQgbWV0aG9kcz8KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7CisjZW5kaWYKIAotICAgIC8vIEZJWE1F
OiBDYW4gd2UgbWFrZSB0aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZl
IGl0IGV4aXN0IGNyb3NzLXBsYXRmb3JtPwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJD
b250ZXh0KGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNv
bnN0ID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7
CiAKLSAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRDRyBjb25zdHJ1
Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/Ci0gICAgdmly
dHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpID0gMDsKLSNlbmRpZgorICAg
IC8vIFRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUg
Y29udGV4dCwgbWFraW5nIHRoZSBjb250ZXh0IGNhcGFibGUgb2YKKyAgICAvLyBhY3RpbmcgYXMg
YSBiYXNlLWxldmVsIGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rv
cik7IH0KIAotICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorICAgIC8vIFRyYW5zcGFy
ZW5jeSBMYXllcnMKIAotICAgIC8vIFBpeGVsIFNuYXBwaW5nCisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAg
Ym9vbCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpICYmIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsgfQogCi0gICAgZW51
bSBSb3VuZGluZ01vZGUgewotICAgICAgICBSb3VuZEFsbFNpZGVzLAotICAgICAgICBSb3VuZE9y
aWdpbkFuZERpbWVuc2lvbnMKLSAgICB9OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRl
cykgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVs
Qm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdp
ZHRoLCBTdHJva2VTdHlsZSk7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIC8vIFNoYXBlcworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1
bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogCi0gICAgLy8gVGhlc2UgZHJhdyBt
ZXRob2RzIHdpbGwgZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KLSAgICAvLyBGSVhNRTog
Li4uZXhjZXB0IGRyYXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ry
b2tlcwotICAgIC8vIHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBi
b3JkZXJzIChvZiB0aGUgY29ycmVjdAotICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdmlydHVh
bCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9
IDEpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCk7CisKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCB7IHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KG1fc3RhdGUuY2xpcEJvdW5kcygpKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGZp
bGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29u
c3QgUGF0aCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgo
Y29uc3QgUGF0aCYpOworICAgIC8vIFNoYXBlcwogCi0gICAgdmlydHVhbCB2b2lkIGZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNl
KTsgfQotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxs
aXBzZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3Jh
ZGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVu
ZE1vZGU6Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOwogCi0gICAgdmly
dHVhbCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsK
LQotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKIAotICAgIC8vIEltYWdlcywgUGF0dGVy
bnMsIGFuZCBNZWRpYQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOwogCi0gICAgSW50
U2l6ZSBjb21wYXRpYmxlSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0Owot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKLQotICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8
UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJp
bmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICAvLyBUaGVzZSBkcmF3IG1ldGhv
ZHMgd2lsbCBkbyBib3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgorICAgIC8vIEZJWE1FOiAuLi5l
eGNlcHQgZHJhd1JlY3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2Vz
CisgICAgLy8gdXNpbmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRl
cnMgKG9mIHRoZSBjb3JyZWN0CisgICAgLy8gc3Ryb2tlIGNvbG9yKS4KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4g
PSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikg
PSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNv
bnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcyA9IDEpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdl
JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSYWlzZWRFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENv
bG9yJiBzaGFkb3dDb2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aXJ0dWFsIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBk
cmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
SW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICAvLyBGb2N1cyBS
aW5ncwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBj
b25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6
VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImKSA9IDA7CisgICAgLy8gRklYTUU6IENhbiB3ZSBoaWRlIHRoZXNlIGluIHRoZSBDRyBp
bXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJv
b2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBi
b29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisjZW5kaWYKIAorICAgIC8vIElt
YWdlcwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQ
dHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VC
dWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBG
aWx0ZXJSZXN1bHRzJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRp
b24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJv
bUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworCisgICAgV0VC
Q09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVz
dWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9y
LCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICNpZiBFTkFCTEUo
VklERU8pCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogI2VuZGlmCi0K
LSAgICAvLyBDbGlwcGluZwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0
JikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgm
KSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSA9IDA7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNsaXBC
b3VuZHMoKSBjb25zdDsKLQorICAgIAogICAgIC8vIFRleHQKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9t
Rm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFk
eSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZv
bnQoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21v
b3RoaW5nTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25l
ZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0
ZDo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3QmlkaVRleHQoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNj
YWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5KTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCi0g
ICAgewotICAgICAgICBkcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0
JiwgYm9vbCBwcmludGluZyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZvclRl
eHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZh
bHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBT
dHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpID0gMDsKIAotICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwot
ICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJhbnNw
YXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7IH0K
KyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRl
eHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7CiAKLSAgICAvLyBGb2N1cyBSaW5n
cworICAgIC8vIENvbXBhdGlibGUgSW1hZ2VCdWZmZXIKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAw
OwotICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50YXRp
b24/IE9yIGVsc2V3aGVyZT8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1Jl
ZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNS
ZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotI2VuZGlmCisgICAgSW50U2l6ZSBjb21wYXRpYmxl
SW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwogCi0gICAgLy8gVHJhbnNm
b3JtcworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAx
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAgICB2
b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUoeyBzLCBzIH0pOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZs
b2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKSB7IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9Ci0g
ICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54KCks
IHAueSgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkg
PSAwOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVk
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsg
MSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQs
IHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0s
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpv
cHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAgIHZp
cnR1YWwgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhv
ZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVm
UHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNv
bnN0OwogCi0gICAgZW51bSBJbmNsdWRlRGV2aWNlU2NhbGUgeyBEZWZpbml0ZWx5SW5jbHVkZURl
dmljZVNjYWxlLCBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSB9OwotICAgIHZpcnR1YWwgQWZm
aW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVE
ZXZpY2VTY2FsZSkgY29uc3QgPSAwOworICAgIC8vIFBpeGVsIFNuYXBwaW5nCiAKLSAgICAvLyBU
aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNvbnRl
eHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCi0gICAgLy8gYWN0aW5nIGFzIGEgYmFz
ZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIHZpcnR1YWwgdm9p
ZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3IpOyB9
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OworICAgIGVu
dW0gUm91bmRpbmdNb2RlIHsKKyAgICAgICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRP
cmlnaW5BbmREaW1lbnNpb25zCisgICAgfTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lk
ZXMpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhl
bEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VX
aWR0aCwgU3Ryb2tlU3R5bGUpOwogCiAgICAgLy8gTGlua3MKIAorICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgdmly
dHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGREZXN0aW5hdGlvbkF0
UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIHsgfQogCi0gICAgdmlydHVh
bCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgICAvLyBDb250ZW50ZnVsIFBhaW50IERldGVjdGlvbgorI2lmIFVTRShDRykKKyAgICAvLyBG
SVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRoZW4g
aGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWludERl
dGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQotICAgIGJvb2wg
Y29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50
RGV0ZWN0ZWQ7IH0KKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRD
RyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/
CisgICAgdmlydHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIHsgfQorI2Vu
ZGlmCiAKICAgICAvLyBGSVhNRTogTm90aGluZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBoZXJl
LCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVsc2V3aGVyZS4KICNpZiBPUyhXSU5ET1dTKQpAQCAtNTQ2
LDEwICszNTUsNyBAQCBwdWJsaWM6CiAgICAgLy8gcHV0IGNvZGUgc2hhcmVkIGJldHdlZW4gV2lu
ZG93cyBDRyBhbmQgV2luZG93cyBDYWlybyBiYWNrZW5kcy4KICAgICB2aXJ0dWFsIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29s
IHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCisg
ICAgCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7CkBA
IC01NjEsMTkxICszNjcsMTcgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IGRhc2hlZExpbmVQYXR0
ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCwgZmxv
YXQgc3Ryb2tlV2lkdGgpIGNvbnN0OwogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJMaW5l
QW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0aCwg
RmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKSBjb25zdDsKIAotICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7Ci0KIHByaXZhdGU6CisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNz
Q29udGV4dFN0YXRlPiBtX2xhc3RBcHBsaWVkU3RhdGU7CiAgICAgVmVjdG9yPEdyYXBoaWNzQ29u
dGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCiAgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXll
ckNvdW50IHsgMCB9OwogICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNl
IH07CiB9OwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0g
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJl
c3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAg
IG1fY29udGV4dC5zYXZlKCk7Ci0gICAgfQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAg
ICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29udGV4
dC5zYXZlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQotICAg
IHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7
Ci0gICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUg
PSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4
dCYgbV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KLWNsYXNzIFRy
YW5zcGFyZW5jeUxheWVyU2NvcGUgewotcHVibGljOgotICAgIFRyYW5zcGFyZW5jeUxheWVyU2Nv
cGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxheWVy
ID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX2FscGhh
KGFscGhhKQotICAgICAgICAsIG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQotICAgIHsKLSAgICAg
ICAgaWYgKGJlZ2luTGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihtX2FscGhhKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0
IGFscGhhKQotICAgIHsKLSAgICAgICAgbV9hbHBoYSA9IGFscGhhOwotICAgICAgICBtX2NvbnRl
eHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKLSAgICAgICAgbV9iZWdhbkxheWVy
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQotICAg
IHsKLSAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKLSAgICAgICAgICAgIG1fY29udGV4dC5lbmRU
cmFuc3BhcmVuY3lMYXllcigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRl
eHQmIG1fY29udGV4dDsKLSAgICBmbG9hdCBtX2FscGhhOwotICAgIGJvb2wgbV9iZWdhbkxheWVy
OwotfTsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgewotcHVibGlj
OgotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3N0YWNr
U2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQotICAgIHsgfQotICAgIAotICAgIH5HcmFwaGljc0Nv
bnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0LnN0
YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFw
aGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBieSAlZCIsICZtX2NvbnRleHQsIChpbnQpbV9j
b250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0YWNrU2l6ZSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1fc3RhY2tT
aXplOwotfTsKLQotY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRp
b25RdWFsaXR5VG9Vc2UpCi0gICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250
ZXh0KQotICAgICAgICAsIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KGdyYXBoaWNzQ29u
dGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAgICAgICwgbV9pbnRlcnBvbGF0
aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSAhPSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBp
bnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJwb2xh
dGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKTsKLSAgICB9
Ci0KLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1YWxp
dHk+IGludGVycG9sYXRpb25RdWFsaXR5KQotICAgICAgICA6IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGludGVycG9sYXRpb25RdWFsaXR5ID8gaW50ZXJw
b2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KCkpCi0gICAgewotICAgIH0KLQotICAgIH5JbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFu
Z2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7Ci0gICAgSW50ZXJwb2xh
dGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgYm9vbCBtX2lu
dGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBF
bnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlLAot
ICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdE
aWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxp
bmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKLSAgICBXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAg
PjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0g
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCi0gICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUdyYWRpZW50Q2hhbmdl
LAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VQ
YXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpGaWxsR3JhZGllbnRDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OkZpbGxQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUNvbG9yQ2hhbmdl
LAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VT
dHlsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpGaWxsUnVsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwKLSAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGFDaGFuZ2Us
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0
ZU9wZXJhdGlvbkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6QmxlbmRNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhc0NoYW5nZSwKLSAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3Ro
Rm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UsCi0g
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2UKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAg
ICAgICAsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtBcHBl
YXJhbmNlQ2hhbmdlCi0jZW5kaWYKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51
bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8Ci0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5
bGU6Ok5vU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwKLSAg
ICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9r
ZVN0eWxlOjpEYXNoZWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJsZVN0
cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQotICAgID47Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZT4g
ewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6OlRleHRE
cmF3aW5nTW9kZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAotICAg
ICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQotICAgID47Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXVEYKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM5ZTU4MWRjYzIyMDNhZDIxYTdmNDhmMzU3ODE0
ZGVmYzNjZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKKworI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xp
cCwgY29uc3QgQ2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGluaXRpYWxDVE0pCisgICAgOiBtX2NsaXBCb3VuZHMoaW5pdGlhbENUTS5tYXBSZWN0KGluaXRp
YWxDbGlwKSkKKyAgICAsIG1fY2hhbmdlRmxhZ3MoY2hhbmdlRmxhZ3MpCisgICAgLCBtX2N0bShp
bml0aWFsQ1RNKQoreworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXBC
b3VuZHMoKSBjb25zdAoreworICAgIGlmIChhdXRvIGludmVyc2UgPSBtX2N0bS5pbnZlcnNlKCkp
CisgICAgICAgIHJldHVybiBpbnZlcnNlLT5tYXBSZWN0KG1fY2xpcEJvdW5kcyk7CisKKyAgICAv
LyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlY3Qu
CisgICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9ybSBi
ZWhhdmlvci4KKyAgICByZXR1cm4gbV9jbGlwQm91bmRzOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0Cit7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBwcmltaXRpdmVDaGFuZ2VGbGFncyB7IENoYW5nZTo6U3Ry
b2tlVGhpY2tuZXNzLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6OkZpbGxCcnVzaCB9Owor
CisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgIT0gKG1fY2hhbmdlRmxhZ3MgJiBwcmltaXRpdmVDaGFu
Z2VGbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKENoYW5nZTo6U3Ryb2tlQnJ1c2gpICYmICFtX3N0cm9rZUJydXNoLmlzUHJpbWl0
aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKENoYW5nZTo6RmlsbEJydXNoKSAmJiAhbV9maWxsQnJ1c2guaXNQcmltaXRpdmUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZUNoYW5nZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBh
dXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG90aGVy
Lm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkgeworICAgICAgICAgICAgdGhpcy0+KnBy
b3BlcnR5ID0gb3RoZXIuKnByb3BlcnR5OworICAgICAgICAgICAgbV9jaGFuZ2VGbGFncy5hZGQo
Y2hhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBBU1NFUlQobV9jbGlwQm91bmRzID09
IG90aGVyLm1fY2xpcEJvdW5kcyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNUTSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisK
KyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hh
bmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKTsK
KyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VDaGFu
Z2UoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVD
YXAsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVD
YXApOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlQ2hhbmdl
KENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TWl0ZXJMaW1pdCwg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCk7
CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkFscGhh
LCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhh
KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOwor
ICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNo
b3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3No
b3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cywgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJh
bnNmb3JtcywgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJh
bnNmb3Jtcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7Cisj
aWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlVz
ZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Vz
ZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjptZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikKK3sKKyAgICBh
dXRvIG1lcmdlRGlmZiA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSAhPSBvdGhlci4q
cHJvcGVydHkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9wZXJ0
eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisgICAgCisgICAgbWVyZ2VEaWZmKENo
YW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAgIG1l
cmdlRGlmZihDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tl
VGhpY2tuZXNzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRo
aWNrbmVzcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lRGFzaCwgICAg
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAg
IG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TWl0ZXJM
aW1pdCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGlt
aXQpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdlRGlm
ZihDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkFscGhhLCAgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7CisgICAg
bWVyZ2VEaWZmKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdlRGlm
ZihDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxk
QW50aWFsaWFzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFu
dGlhbGlhcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBt
ZXJnZURpZmYoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBtZXJnZURp
ZmYoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6
OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9k
cmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBt
ZXJnZURpZmYoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBzdGF0ZUNoYW5nZU5hbWUoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSBj
aGFuZ2UpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHN0YXRlQ2hhbmdlTmFtZXNb
XSA9IHsKKyAgICAgICAgImN0bSIsCisKKyAgICAgICAgImZpbGwtYnJ1c2giLAorICAgICAgICAi
ZmlsbC1ydWxlIiwKKworICAgICAgICAic3Ryb2tlLWJydXNoIiwKKyAgICAgICAgInN0cm9rZS10
aGlja25lc3MiLAorICAgICAgICAic3Ryb2tlLXN0eWxlIiwKKworICAgICAgICAibGluZS1jYXAi
LAorICAgICAgICAibGluZS1kYXNoIiwKKyAgICAgICAgImxpbmUtam9pbiIsCisgICAgICAgICJt
aXRlci1saW1pdCIsCisKKyAgICAgICAgImNvbXBvc2l0ZS1tb2RlIiwKKyAgICAgICAgImRyb3At
c2hhZG93IiwKKworICAgICAgICAiYWxwaGEiLAorICAgICAgICAiaW1hZ2UtaW50ZXJwb2xhdGlv
bi1xdWFsaXR5IiwKKyAgICAgICAgInRleHQtZHJhd2luZy1tb2RlIiwKKworICAgICAgICAic2hv
dWxkLWFudGlhbGlhcyIsCisgICAgICAgICJzaG91bGQtc21vb3RoLWZvbnRzIiwKKyAgICAgICAg
InNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsCisgICAgICAgICJzaGFkb3dzLWlnbm9y
ZS10cmFuc2Zvcm1zIiwKKyAgICAgICAgImRyYXctbHVtaW5hbmNlLW1hc2siCisjaWYgSEFWRShP
U19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAgICAgLCAidXNlLWRhcmstYXBwZWFyYW5jZSIKKyNl
bmRpZgorICAgIH07CisKKyAgICB1bnNpZ25lZCBtYXNrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNoYW5nZSk7CisgICAgQVNTRVJUKCEoKG1hc2sgLSAxKSAmIG1hc2spKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2cyKG1hc2spKTsKKyAgICBy
ZXR1cm4gc3RhdGVDaGFuZ2VOYW1lc1tpbmRleF07Cit9CisKK1RleHRTdHJlYW0mIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGF1dG8gZHVt
cCA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVy
dHksIGNvbnN0IFN0cmluZyYgbmFtZSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhjaGFuZ2UpKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KG5hbWUsIHRoaXMtPipw
cm9wZXJ0eSk7CisgICAgfTsKKworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdlLWZsYWdzIiwg
bV9jaGFuZ2VGbGFncyk7CisKKyAgICBkdW1wKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q1RNKSk7CisKKyAgICBkdW1wKENoYW5n
ZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9maWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6
RmlsbEJydXNoKSk7CisgICAgZHVtcChDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkZpbGxSdWxlKSk7CisKKyAgICBkdW1wKENoYW5n
ZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6
U3Ryb2tlQnJ1c2gpKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MsICAgICAgICAg
ICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgZHVt
cChDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShD
aGFuZ2U6OlN0cm9rZVN0eWxlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6TGluZUNhcCwgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwLCAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUNhcCkpOworICAgIGR1
bXAoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2xpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUo
Q2hhbmdlOjpMaW5lRGFzaCkpOworICAgIGR1bXAoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luLCAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpMaW5lSm9pbikpOworICAgIGR1bXAo
Q2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX21pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hh
bmdlOjpNaXRlckxpbWl0KSk7CisKKyAgICBkdW1wKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCAgICAg
ICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q29tcG9zaXRlTW9kZSkpOworICAg
IGR1bXAoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2Ryb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5h
bWUoQ2hhbmdlOjpEcm9wU2hhZG93KSk7CisKKyAgICBkdW1wKENoYW5nZTo6QWxwaGEsICAgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6QWxwaGEpKTsKKyAgICBk
dW1wKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgc3RhdGVDaGFuZ2VOYW1l
KENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAgIGR1bXAoQ2hhbmdlOjpU
ZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Rl
eHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpUZXh0
RHJhd2luZ01vZGUpKTsKKworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcywgICAgICAg
ICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMpKTsKKyAgICBk
dW1wKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1l
KENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMpKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzLCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMsICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKSk7CisgICAgZHVtcChDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zLCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMsICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KSk7CisgICAgZHVtcChDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgIHN0YXRl
Q2hhbmdlTmFtZShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrKSk7CisjaWYgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKKyAgICBkdW1wKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgICAgICAg
ICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UpKTsKKyNlbmRp
ZgorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSBjaGFuZ2UpCit7CisgICAgdHMgPDwg
c3RhdGVDaGFuZ2VOYW1lKGNoYW5nZSk7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUpCit7CisgICAgcmV0dXJuIHN0YXRlLmR1bXAodHMpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmU0Y2VhM2MyZDU4Yzg3YjQ5MjM4
NDc1ZTQ2OGI1ZGZkNWVlM2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApAQCAtMCwwICsxLDM4MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VCcnVzaC5oIgorI2luY2x1ZGUgIldpbmRSdWxlLmgiCisj
aW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENoYW5nZSA6
IHVpbnQzMl90IHsKKyAgICAgICAgQ1RNICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAw
LAorCisgICAgICAgIEZpbGxCcnVzaCAgICAgICAgICAgICAgICAgICA9IDEgPDwgMSwKKyAgICAg
ICAgRmlsbFJ1bGUgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAorCisgICAgICAgIFN0cm9r
ZUJydXNoICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICAgICAgU3Ryb2tlVGhpY2tuZXNz
ICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAgICBTdHJva2VTdHlsZSAgICAgICAgICAgICAg
ICAgPSAxIDw8IDUsCisKKyAgICAgICAgTGluZUNhcCAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCA2LAorICAgICAgICBMaW5lRGFzaCAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisgICAg
ICAgIExpbmVKb2luICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgTWl0ZXJM
aW1pdCAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorCisgICAgICAgIENvbXBvc2l0ZU1vZGUg
ICAgICAgICAgICAgICA9IDEgPDwgMTAsCisgICAgICAgIERyb3BTaGFkb3cgICAgICAgICAgICAg
ICAgICA9IDEgPDwgMTEsCisKKyAgICAgICAgQWxwaGEgICAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCAxMiwKKyAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSAgID0gMSA8PCAxMywK
KyAgICAgICAgVGV4dERyYXdpbmdNb2RlICAgICAgICAgICAgID0gMSA8PCAxNCwKKworICAgICAg
ICBTaG91bGRBbnRpYWxpYXMgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAgICAgICBTaG91bGRT
bW9vdGhGb250cyAgICAgICAgICAgPSAxIDw8IDE2LAorICAgICAgICBTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMgPSAxIDw8IDE3LAorICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAg
ICAgPSAxIDw8IDE4LAorICAgICAgICBEcmF3THVtaW5hbmNlTWFzayAgICAgICAgICAgPSAxIDw8
IDE5LAorI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgIFVzZURhcmtBcHBl
YXJhbmNlICAgICAgICAgICA9IDEgPDwgMjAsCisjZW5kaWYKKyAgICB9OworICAgIHVzaW5nIENo
YW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIENo
YW5nZUZsYWdzIGluaXRpYWxDaGFuZ2VGbGFncyA9IHsgQ2hhbmdlOjpGaWxsQnJ1c2gsIENoYW5n
ZTo6U3Ryb2tlQnJ1c2gsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzIH07CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlw
Qm91bmRzLCBjb25zdCBDaGFuZ2VGbGFncyYgPSB7IH0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
aW5pdGlhbENUTSA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY2xpcEJv
dW5kcygpIGNvbnN0OworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsgbV9j
bGlwQm91bmRzLmludGVyc2VjdChtX2N0bS5tYXBSZWN0KHJlY3QpKTsgfQorCisgICAgQ2hhbmdl
RmxhZ3MgY2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlRmxhZ3M7IH0KKyAgICB2b2lk
IGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCkgeyBtX2NoYW5nZUZsYWdzID0geyB9OyB9CisKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9jdG07IH0KKyAgICB2b2lk
IHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSwgY29uc3Qgc3RkOjpvcHRpb25hbDxH
cmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hh
bmdlOjpDVE0sICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sIGN0bSwgbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KKworICAgIGNvbnN0IFNvdXJjZUJydXNoJiBmaWxsQnJ1c2goKSBjb25zdCB7IHJl
dHVybiBtX2ZpbGxCcnVzaDsgfQorICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvciwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBs
aWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpGaWxsQnJ1c2gsICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9maWxsQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAg
ICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxsQnJ1c2guc2V0R3JhZGllbnQo
V1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hh
bmdlOjpGaWxsQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4m
JiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fZmls
bEJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyBtX2No
YW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVzaCk7IH0KKworICAgIFdpbmRSdWxlIGZpbGxS
dWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1bGUo
V2luZFJ1bGUgZmlsbFJ1bGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3Rh
dGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbFJ1bGUsICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSwgZmlsbFJ1bGUsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisKKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1c2goKSBjb25zdCB7IHJl
dHVybiBtX3N0cm9rZUJydXNoOyB9CisgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0
QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlQnJ1c2gsICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgeyBjb2xvciB9LCBsYXN0QXBwbGllZFN0YXRl
KTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1c2gu
c2V0R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VG
bGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBhdHRl
cm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3Bh
Y2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsgfQor
CisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VUaGlj
a25lc3M7IH0KKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25l
c3MsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGll
ZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MsIGxhc3RBcHBs
aWVkU3RhdGUpOyB9CisKKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3Ryb2tlU3R5bGU7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxl
IHN0cm9rZVN0eWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYg
bGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsIHN0cm9rZVN0eWxlLCBsYXN0QXBwbGll
ZFN0YXRlKTsgfQorCisgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9saW5l
Q2FwOyB9CisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCwgY29uc3Qgc3RkOjpv
cHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJv
cGVydHkoQ2hhbmdlOjpMaW5lQ2FwLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCwg
bGluZUNhcCwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IExpbmVEYXNoJiBsaW5l
RGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZURhc2g7IH0KKyAgICB2b2lkIHNldExpbmVEYXNo
KExpbmVEYXNoJiYgbGluZURhc2gsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZURhc2gs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCwgV1RGTW92ZShsaW5lRGFzaCksIGxh
c3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZUpvaW47IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2lu
LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRT
dGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVKb2luLCAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fbGluZUpvaW4sIGxpbmVKb2luLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgZmxv
YXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQorICAgIHZvaWQg
c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBo
aWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6
Ok1pdGVyTGltaXQsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCBtaXRlckxp
bWl0LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9z
aXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlTW9kZTsgfQorICAgIHZvaWQgc2V0
Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3Bl
cnR5KENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBv
c2l0ZU1vZGUsIGNvbXBvc2l0ZU1vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisgICAg
Y29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcFNoYWRv
dzsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93
LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRT
dGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkRyb3BTaGFkb3csICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9kcm9wU2hhZG93LCBkcm9wU2hhZG93LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisg
ICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2FscGhhOyB9CisgICAgdm9pZCBzZXRB
bHBoYShmbG9hdCBhbHBoYSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpBbHBoYSwgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2FscGhhLCBhbHBoYSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAg
ICAKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkg
Y29uc3QgeyByZXR1cm4gbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisgICAgdm9pZCBz
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3Rh
dGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHksIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIGxhc3RBcHBsaWVkU3RhdGUpOyB9
CisgICAgCisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9k
ZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5
KENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERy
YXdpbmdNb2RlLCB0ZXh0RHJhd2luZ01vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBi
b29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQW50aWFsaWFzOyB9
CisgICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMsIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7
IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc2hvdWxkQW50aWFsaWFzLCBzaG91bGRBbnRpYWxpYXMsIGxhc3RBcHBsaWVkU3RhdGUp
OyB9CisKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRTbW9vdGhGb250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBzaG91
bGRTbW9vdGhGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4m
IGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250
cywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzLCBzaG91bGRTbW9v
dGhGb250cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRl
eHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25zdCB7
IHJldHVybiBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CisgICAgdm9pZCBzZXRTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQ
cm9wZXJ0eShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2so
KSBjb25zdCB7IHJldHVybiBtX2RyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgdm9pZCBzZXREcmF3
THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrLCBjb25zdCBzdGQ6Om9wdGlvbmFs
PEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShD
aGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1
bWluYW5jZU1hc2ssIGRyYXdMdW1pbmFuY2VNYXNrLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisj
aWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNl
KCkgY29uc3QgeyByZXR1cm4gbV91c2VEYXJrQXBwZWFyYW5jZTsgfQorICAgIHZvaWQgc2V0VXNl
RGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSwgY29uc3Qgc3RkOjpvcHRpb25h
bDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHko
Q2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURh
cmtBcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyNl
bmRpZgorCisgICAgYm9vbCBoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0OworICAgIHZv
aWQgbWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7CisgICAg
dm9pZCBtZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7CisKKyAg
ICBXVEY6OlRleHRTdHJlYW0mIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250
ZXh0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICB2b2lkIHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhpY3ND
b250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgY29uc3QgVCYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdGhpcy0+KnByb3BlcnR5ID0gdmFsdWU7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Muc2V0
KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJvcGVy
dHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHZvaWQgc2V0UHJvcGVydHkoQ2hhbmdlIGNoYW5nZSwgVCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6KnByb3BlcnR5LCBUJiYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3ND
b250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMt
Pipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy0+
KnByb3BlcnR5ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Muc2V0KGNo
YW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJvcGVydHkg
IT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgbV9jbGlwQm91bmRz
OworCisgICAgQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKKworICAgIEFmZmluZVRyYW5zZm9y
bSBtX2N0bTsKKworICAgIFNvdXJjZUJydXNoIG1fZmlsbEJydXNoIHsgQ29sb3I6OmJsYWNrIH07
CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07CisKKyAgICBT
b3VyY2VCcnVzaCBtX3N0cm9rZUJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgZmxvYXQgbV9z
dHJva2VUaGlja25lc3MgeyAwIH07CisgICAgU3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZSB7IFNv
bGlkU3Ryb2tlIH07CisKKyAgICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1dHQgfTsK
KyAgICBMaW5lRGFzaCBtX2xpbmVEYXNoOworICAgIExpbmVKb2luIG1fbGluZUpvaW4geyBMaW5l
Sm9pbjo6TWl0ZXIgfTsKKyAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAwIH07CisKKyAgICBDb21w
b3NpdGVNb2RlIG1fY29tcG9zaXRlTW9kZSB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVy
LCBCbGVuZE1vZGU6Ok5vcm1hbCB9OworICAgIERyb3BTaGFkb3cgbV9kcm9wU2hhZG93OworCisg
ICAgZmxvYXQgbV9hbHBoYSB7IDEgfTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9Owor
ICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdpbmdN
b2RlOjpGaWxsIH07CisKKyAgICBib29sIG1fc2hvdWxkQW50aWFsaWFzIHsgdHJ1ZSB9OworICAg
IGJvb2wgbV9zaG91bGRTbW9vdGhGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RyYXdMdW1pbmFuY2VNYXNrIHsgZmFsc2Ug
fTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgbV91c2VEYXJrQXBw
ZWFyYW5jZSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBhdXRvIGVuY29kZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdGhpcy0+KnByb3BlcnR5Owor
ICAgIH07CisKKyAgICBlbmNvZGVyIDw8IG1fY2xpcEJvdW5kczsKKworICAgIGVuY29kZXIgPDwg
bV9jaGFuZ2VGbGFnczsKKworICAgIGVuY29kZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgZW5jb2Rl
KENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6RmlsbFJ1bGUsICAgICAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKwor
ICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ry
b2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0
cm9rZVRoaWNrbmVzcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAg
IGVuY29kZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lRGFzaCwg
ICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gp
OworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgZW5jb2RlKENoYW5nZTo6TWl0
ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21p
dGVyTGltaXQpOworCisgICAgZW5jb2RlKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIGVu
Y29kZShDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkFscGhhLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7
CisgICAgZW5jb2RlKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIGVu
Y29kZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6U2hv
dWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3No
b3VsZEFudGlhbGlhcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsK
KyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBl
bmNvZGUoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIGVuY29kZShDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkK
KyAgICBlbmNvZGUoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3Rl
bXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
YXV0byBkZWNvZGUgPSBbJl0oR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDaGFuZ2UgY2hh
bmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYg
KCFzdGF0ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgICAgICB1c2luZyBQcm9wZXJ0eVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJl
bW92ZV9yZWZlcmVuY2U8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PigpLipwcm9wZXJ0eSk+Ojp0eXBlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFByb3BlcnR5VHlw
ZT4gdmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RhdGUuKnByb3BlcnR5ID0g
KnZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGNsaXBCb3VuZHM7CisgICAgZGVjb2RlciA+PiBjbGlwQm91bmRzOworICAg
IGlmICghY2xpcEJvdW5kcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0
ZDo6b3B0aW9uYWw8Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOworICAgIGRlY29kZXIgPj4gY2hh
bmdlRmxhZ3M7CisgICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlKCpjbGlwQm91bmRzLCAqY2hh
bmdlRmxhZ3MpOworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6Q1RNLCAgICAgICAg
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkZp
bGxCcnVzaCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxC
cnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3Rh
dGUsIENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fZmlsbFJ1bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVz
cywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcykp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENo
YW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc3Ryb2tlU3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYg
KCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVKb2lu
LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hh
bmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9taXRlckxpbWl0KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICgh
ZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxw
aGEpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRl
LCBDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hh
bmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zaG91bGRBbnRpYWxpYXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICgh
ZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcmF3THVt
aW5hbmNlTWFzaywgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5h
bmNlTWFzaykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjaWYgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpVc2VEYXJrQXBw
ZWFyYW5jZSwgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFy
YW5jZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKKworICAgIHJldHVy
biBzdGF0ZTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZSk7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKKyAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE0s
CisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJy
dXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxs
UnVsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpT
dHJva2VCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U3Ryb2tlVGhpY2tuZXNzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4sCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQsCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSwKKyAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdywKKworICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYSwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERy
YXdpbmdNb2RlLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlNob3VsZEFudGlhbGlhcywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywKKyAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkRyYXdMdW1pbmFuY2VNYXNrCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAg
ICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBwZWFy
YW5jZQorI2VuZGlmCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3MjEzMjg1MjYxZTY5MGNhMzA2MGQ3ZTAyNmU1MGU1
MmVlYTU5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3Rv
cmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc2F2
ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAgICBpZiAobV9zYXZlQW5k
UmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgfQorICAgIAorICAg
IH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVB
bmRSZXN0b3JlKQorICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9y
ZSk7CisgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUg
PSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBBU1NF
UlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7CisgICAg
ICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQorCitwcml2YXRl
OgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIGJvb2wgbV9zYXZlQW5kUmVz
dG9yZTsKK307CisKK2NsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgeworcHVibGljOgorICAg
IFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBh
bHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4
dCkKKyAgICAgICAgLCBtX2FscGhhKGFscGhhKQorICAgICAgICAsIG1fYmVnYW5MYXllcihiZWdp
bkxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKGJlZ2luTGF5ZXIpCisgICAgICAgICAgICBtX2Nv
bnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQorICAgIHsKKyAgICAgICAgbV9hbHBoYSA9IGFs
cGhhOworICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsK
KyAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgflRyYW5zcGFy
ZW5jeUxheWVyU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKKyAgICAg
ICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBmbG9hdCBtX2FscGhhOwor
ICAgIGJvb2wgbV9iZWdhbkxheWVyOworfTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVT
dGFja0NoZWNrZXIgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVj
a2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4
dCkKKyAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQorICAgIHsgfQor
CisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKCkKKyAgICB7CisgICAgICAg
IGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9zdGFja1NpemUpCisgICAgICAgICAgICBX
VEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBzdGFjayBjaGFuZ2VkIGJ5ICVkIiwgJm1f
Y29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXplKCkgLSAoaW50KW1fc3RhY2tTaXplKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CisgICAg
dW5zaWduZWQgbV9zdGFja1NpemU7Cit9OworCitjbGFzcyBJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW50ZXJwb2xhdGlvblF1
YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICAgICAgOiBtX2dyYXBoaWNzQ29u
dGV4dChncmFwaGljc0NvbnRleHQpCisgICAgICAgICwgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1
YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICAg
ICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZChpbnRlcnBvbGF0aW9uUXVhbGl0eVRv
VXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0ICYmIG1fY3VycmVudEludGVycG9s
YXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgeworICAgICAg
ICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBo
aWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGludGVycG9sYXRpb25RdWFs
aXR5VG9Vc2UpOworICAgIH0KKworICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgc3RkOjpvcHRpb25hbDxJ
bnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkpCisgICAgICAgIDogSW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBoaWNzQ29udGV4dCwgaW50ZXJwb2xhdGlv
blF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52YWx1ZSgpIDogZ3JhcGhpY3NDb250ZXh0
LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICB7CisgICAgfQorCisgICAgfkludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCisgICAgeworICAgICAgICBpZiAobV9pbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4
dDsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0
eTsKKyAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCAxNWRmMWRmZGI2ZjNhMTZhZDVlYWY2NDcyNjFmY2Zj
NGI3YTkzYWI0Li42MmY5ZjQ2NGMzZDZkOWQ1YTA5Y2E1YTRiN2JkOGExMDM2MTU5MWM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNw
cApAQCAtMTI2LDI3ICsxMjYsNTEgQEAgU3RyaW5nIGJsZW5kTW9kZU5hbWUoQmxlbmRNb2RlIGJs
ZW5kT3ApCiAgICAgcmV0dXJuIGJsZW5kT3BlcmF0b3JOYW1lc1tzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oYmxlbmRPcCkgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQmxlbmRNb2RlOjpOb3JtYWwpXTsK
IH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKK3sKKyAgICByZXR1cm4gdHMgPDwgYmxlbmRNb2RlTmFtZShibGVuZE1vZGUpOwor
fQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVNb2Rl
IGNvbXBvc2l0ZU1vZGUpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0
aW9uIiwgY29tcG9zaXRlTW9kZS5vcGVyYXRpb24pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxl
bmQtbW9kZSIsIGNvbXBvc2l0ZU1vZGUuYmxlbmRNb2RlKTsKKyAgICByZXR1cm4gdHM7Cit9CisK
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQogewogICAgIHJldHVybiB0cyA8PCBjb21wb3NpdGVPcGVyYXRvck5hbWUob3AsIEJsZW5k
TW9kZTo6Tm9ybWFsKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpCiB7Ci0gICAgcmV0dXJuIHRzIDw8
IGJsZW5kTW9kZU5hbWUoYmxlbmRNb2RlKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1v
ZmZzZXQiLCBkcm9wU2hhZG93Lm9mZnNldCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ct
Ymx1ciIsIGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFk
b3ctY29sb3IiLCBkcm9wU2hhZG93LmNvbG9yKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRv
d3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBkcm9wU2hhZG93LnJhZGl1c01vZGUgPT0gU2hhZG93UmFk
aXVzTW9kZTo6TGVnYWN5KTsKKyAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdpbmRSdWxlIHJ1bGUpCitUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVh
bGl0eSkKIHsKLSAgICBzd2l0Y2ggKHJ1bGUpIHsKLSAgICBjYXNlIFdpbmRSdWxlOjpOb25aZXJv
OgotICAgICAgICB0cyA8PCAiTk9OLVpFUk8iOworICAgIHN3aXRjaCAoaW50ZXJwb2xhdGlvblF1
YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAgICAg
ICB0cyA8PCAiREVGQVVMVCI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2luZFJ1bGU6OkV2
ZW5PZGQ6Ci0gICAgICAgIHRzIDw8ICJFVkVOLU9ERCI7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9u
UXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgdHMgPDwgIkRPLU5PVC1JTlRFUlBP
TEFURSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6Okxv
dzoKKyAgICAgICAgdHMgPDwgIkxPVyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJw
b2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgdHMgPDwgIk1FRElVTSI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAgIHRz
IDw8ICJIRUlHSCI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQogICAgIHJldHVybiB0czsKIH0K
IApAQCAtMTY2LDYgKzE5MCwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBMaW5lQ2FwIGNhcFN0eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZURhc2gpCit7CisgICAgcmV0dXJuIHRzOwor
fQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBqb2lu
U3R5bGUpCiB7CiAgICAgc3dpdGNoIChqb2luU3R5bGUpIHsKQEAgLTE4Miw0ICsyMTEsNTYgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gam9pblN0eWxl
KQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit7CisgICAgc3dpdGNoIChzdHJva2VTdHls
ZSkgeworICAgIGNhc2UgU3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlOgorICAgICAgICB0cyA8PCAiTk8t
U1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6U29saWRTdHJv
a2U6CisgICAgICAgIHRzIDw8ICJTT0xJRC1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2U6CisgICAgICAgIHRzIDw8ICJET1RURUQtU1RS
T0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tl
OgorICAgICAgICB0cyA8PCAiREFTSEVELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgU3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRPVUJMRS1TVFJP
S0UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tlOgor
ICAgICAgICB0cyA8PCAiV0FWWS1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBU
ZXh0RHJhd2luZ01vZGUgdGV4dERyYXdpbmdNb2RlKQoreworICAgIHN3aXRjaCAodGV4dERyYXdp
bmdNb2RlKSB7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OkZpbGw6CisgICAgICAgIHRzIDw8
ICJGSUxMIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OlN0cm9r
ZToKKyAgICAgICAgdHMgPDwgIlNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdp
bmRSdWxlIHJ1bGUpCit7CisgICAgc3dpdGNoIChydWxlKSB7CisgICAgY2FzZSBXaW5kUnVsZTo6
Tm9uWmVybzoKKyAgICAgICAgdHMgPDwgIk5PTi1aRVJPIjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXaW5kUnVsZTo6RXZlbk9kZDoKKyAgICAgICAgdHMgPDwgIkVWRU4tT0REIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5
cGVzLmgKaW5kZXggNGQyMDRlOTdlNWM1NDRkNzc2YmZhN2YzMGFhY2MxYjdjNDYzZTBlMC4uMGY4
YjJkMDI3NTViZmFlYzY1ZDk1YzA0ZjJjNDViNTI0OTRmMjYzNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUsOSBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGFzaEFy
cmF5LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIKICNp
bmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC03
Myw2ICs3Niw3OSBAQCBlbnVtIGNsYXNzIEJsZW5kTW9kZSA6IHVpbnQ4X3QgewogICAgIFBsdXNM
aWdodGVyCiB9OwogCitzdHJ1Y3QgQ29tcG9zaXRlTW9kZSB7CisgICAgQ29tcG9zaXRlT3BlcmF0
b3Igb3BlcmF0aW9uOworICAgIEJsZW5kTW9kZSBibGVuZE1vZGU7CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ29tcG9zaXRlTW9kZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4g
b3BlcmF0aW9uID09IG90aGVyLm9wZXJhdGlvbiAmJiBibGVuZE1vZGUgPT0gb3RoZXIuYmxlbmRN
b2RlOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENvbXBvc2l0ZU1vZGU6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgb3BlcmF0aW9uOworICAgIGVuY29kZXIg
PDwgYmxlbmRNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25h
bDxDb21wb3NpdGVNb2RlPiBDb21wb3NpdGVNb2RlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBvcGVyYXRpb247CisgICAg
ZGVjb2RlciA+PiBvcGVyYXRpb247CisgICAgaWYgKCFvcGVyYXRpb24pCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRNb2Rl
OworICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOworICAgIGlmICghYmxlbmRNb2RlKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb3BlcmF0aW9uLCAqYmxl
bmRNb2RlIH0gfTsKK30KKworc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAgICBl
bnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgVGV4dENoZWNraW5nRGljdGF0aW9u
UGhyYXNlV2l0aEFsdGVybmF0aXZlcywKKyAgICAgICAgU3BlbGxpbmcsCisgICAgICAgIEdyYW1t
YXIsCisgICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgICAgIERpY3RhdGlv
bkFsdGVybmF0aXZlcworICAgIH0gbW9kZTsKKyAgICBib29sIHNob3VsZFVzZURhcmtBcHBlYXJh
bmNlIHsgZmFsc2UgfTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsKK307
CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0eWxl
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1vZGU7
CisgICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBz
dGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlmICgh
bW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8
Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRVc2VE
YXJrQXBwZWFyYW5jZTsKKyAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqbW9kZSwgKnNob3VsZFVz
ZURhcmtBcHBlYXJhbmNlIH0gfTsKK30KKwogZW51bSBjbGFzcyBHcmFkaWVudFNwcmVhZE1ldGhv
ZCA6IHVpbnQ4X3QgewogICAgIFBhZCwKICAgICBSZWZsZWN0LApAQCAtOTMsNiArMTY5LDQyIEBA
IGVudW0gY2xhc3MgTGluZUNhcCA6IHVpbnQ4X3QgewogICAgIFNxdWFyZQogfTsKIAorc3RydWN0
IExpbmVEYXNoIHsKKyAgICBEYXNoQXJyYXkgZGFzaGVzOworICAgIGZsb2F0IG9mZnNldDsKKyAg
ICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGlu
ZURhc2g+IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IExpbmVEYXNoJiBhLCBjb25zdCBMaW5lRGFzaCYgYikKK3sKKyAgICByZXR1cm4gYS5kYXNo
ZXMgPT0gYi5kYXNoZXMgJiYgYS5vZmZzZXQgPT0gYi5vZmZzZXQ7Cit9CisKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Cit2b2lkIExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IGRhc2hlczsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGluZURhc2g+IExpbmVE
YXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERhc2hB
cnJheT4gZGFzaGVzOworICAgIGRlY29kZXIgPj4gZGFzaGVzOworICAgIGlmICghZGFzaGVzKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4g
b2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpkYXNoZXMp
LCAqb2Zmc2V0IH0gfTsKK30KKwogZW51bSBjbGFzcyBMaW5lSm9pbiA6IHVpbnQ4X3QgewogICAg
IE1pdGVyLAogICAgIFJvdW5kLApAQCAtMTA1LDYgKzIxNyw3NiBAQCBlbnVtIEhvcml6b250YWxB
bGlnbm1lbnQgewogICAgIEFsaWduSENlbnRlcgogfTsKIAorLy8gTGVnYWN5IHNoYWRvdyBibHVy
IHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisvLyBJ
dCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xhc3MgU2hh
ZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9OworCitz
dHJ1Y3QgRHJvcFNoYWRvdyB7CisgICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICBmbG9hdCBibHVy
UmFkaXVzIHsgMCB9OworICAgIENvbG9yIGNvbG9yOworICAgIFNoYWRvd1JhZGl1c01vZGUgcmFk
aXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKKyAgICAKKyAgICBib29sIGlz
VmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBp
c0JsdXJyZWQoKSBjb25zdCB7IHJldHVybiBpc1Zpc2libGUoKSAmJiBibHVyUmFkaXVzOyB9Cisg
ICAgYm9vbCBoYXNPdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gaXNCbHVycmVkKCkgfHwgKGlzVmlz
aWJsZSgpICYmICFvZmZzZXQuaXNaZXJvKCkpOyB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IGRlY29kZShEZWNvZGVy
Jik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERyb3BTaGFkb3cmIGEsIGNv
bnN0IERyb3BTaGFkb3cmIGIpCit7CisgICAgcmV0dXJuIGEub2Zmc2V0ID09IGIub2Zmc2V0ICYm
IGEuYmx1clJhZGl1cyA9PSBiLmJsdXJSYWRpdXMgJiYgYS5jb2xvciA9PSBiLmNvbG9yICYmIGEu
cmFkaXVzTW9kZSA9PSBiLnJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIERyb3BTaGFkb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXIgPDwgb2Zmc2V0OworICAgIGVuY29kZXIgPDwgYmx1clJhZGl1czsKKyAgICBlbmNv
ZGVyIDw8IGNvbG9yOworICAgIGVuY29kZXIgPDwgcmFkaXVzTW9kZTsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gRHJvcFNoYWRvdzo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IG9m
ZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJsdXJSYWRp
dXM7CisgICAgZGVjb2RlciA+PiBibHVyUmFkaXVzOworICAgIGlmICghYmx1clJhZGl1cykKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGNv
bG9yOworICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4g
cmFkaXVzTW9kZTsKKyAgICBkZWNvZGVyID4+IHJhZGl1c01vZGU7CisgICAgaWYgKCFyYWRpdXNN
b2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb2Zm
c2V0LCAqYmx1clJhZGl1cywgKmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07Cit9CisKK2VudW0gU3Ry
b2tlU3R5bGUgeworICAgIE5vU3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tlLAorICAgIERvdHRlZFN0
cm9rZSwKKyAgICBEYXNoZWRTdHJva2UsCisgICAgRG91YmxlU3Ryb2tlLAorICAgIFdhdnlTdHJv
a2UsCit9OworCiBlbnVtIFRleHRCYXNlbGluZSB7CiAgICAgQWxwaGFiZXRpY1RleHRCYXNlbGlu
ZSwKICAgICBUb3BUZXh0QmFzZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwyOSBAQCBlbnVtIFRleHRB
bGlnbiB7CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLVN0cmluZyBjb21wb3NpdGVPcGVyYXRv
ck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1T
dHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwotYm9vbCBwYXJzZUJsZW5k
TW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKLWJvb2wgcGFyc2VDb21w
b3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9w
ZXJhdG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CitlbnVtIGNsYXNzIFRleHREcmF3aW5nTW9k
ZSA6IHVpbnQ4X3QgeworICAgIEZpbGwgPSAxIDw8IDAsCisgICAgU3Ryb2tlID0gMSA8PCAxLAor
fTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3Bl
cmF0b3IpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKK3VzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0gT3B0
aW9uU2V0PFRleHREcmF3aW5nTW9kZT47CisKK1N0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUo
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CitTdHJpbmcgYmxlbmRNb2RlTmFtZShCbGVu
ZE1vZGUpOworYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBCbGVuZE1vZGUmKTsK
K2Jvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENvbXBv
c2l0ZU9wZXJhdG9yJiwgQmxlbmRNb2RlJik7CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBCbGVuZE1vZGUpOworV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBDb21wb3NpdGVNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEcm9wU2hhZG93
Jik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOworV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVE
YXNoKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBMaW5lSm9pbik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgU3Ryb2tlU3R5bGUpOworV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFRleHREcmF3aW5n
TW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKQEAgLTIx
OSw0ICs0MTQsMzUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpMaW5l
Sm9pbj4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OlN0cm9rZVN0eWxlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBX
ZWJDb3JlOjpTdHJva2VTdHlsZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6Tm9TdHJva2Us
CisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0
cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRhc2hl
ZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG91YmxlU3Ryb2tlLAorICAgIFdl
YkNvcmU6OlN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlPiB7CisgICAgdXNpbmcg
dmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlLAor
ICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OkZpbGwsCisgICAgICAgIFdlYkNvcmU6
OlRleHREcmF3aW5nTW9kZTo6U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsKKyAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpNb2RlLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpN
b2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAorICAgIFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKKyAgICBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKKyAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVu
dCwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9u
QWx0ZXJuYXRpdmVzCisgICAgPjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZElt
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VHZW5l
cmF0ZWRJbWFnZS5jcHAKaW5kZXggNGUwNzFmNzJmMzViZThhNThmYzRjZDU3N2ExNDU2ZGUxNzQ2
NjgyYy4uNDFiMDUxMWE4Zjc4YTE3OWIzMDRjZjg5ZDQxMDNlMzVkZTNlMTI1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZElt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdl
R2VuZXJhdGVkSW1hZ2UuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBOYW1l
ZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGCiB7CiAjaWYgVVNFKE5FV19USEVNRSkgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25z
LmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4
dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QubG9jYXRpb24o
KSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5o
CmluZGV4IGI2MjM2Nzg4MGUzZTUzNTRiNjE3MTEzNDdjOWExMWI0MjI0Njg4NWUuLmQ2N2QzZWEx
MTVkMjRlZmQ5MDllMDNhYzlhZGU5M2E4YjQ3NjRmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsODcgKzM4
LDU3IEBAIHB1YmxpYzoKICAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CiAgICAgfTsK
IAotICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNv
bnMpCi0gICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAgICBO
dWxsR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIFBhaW50SW52
YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQorICAgICAgICA6IEdyYXBoaWNzQ29udGV4dChpbml0
aWFsQ2xpcCkKKyAgICAgICAgLCBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25zKQog
ICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0KICAgICBib29sIHBhaW50aW5n
RGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBwZXJmb3Jt
aW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxp
ZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KICAgICBi
b29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxp
ZGF0aW5nQ29udHJvbFRpbnRzOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5
bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNv
bnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5
bmNEZWNvZGVzOyB9CiAgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRh
dGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQogCi0gICAgdm9pZCBkaWRV
cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KLQotI2lmIFVTRShDRykKLSAgICB2b2lk
IHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQotI2VuZGlmCi0KLSAgICB2
b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfTsKLQotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KLQotICAgIEludFJlY3QgY2xpcEJvdW5kcygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotCisgICAgdm9pZCBzYXZlKCkgZmluYWwgeyB9
CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdl
cygpIGZpbmFsIHsgfTsKICNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4o
KSBmaW5hbCB7IH0KICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgdm9pZCBk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQotICAgIHZvaWQg
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0K
LSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAgIHZv
aWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tlUGF0aChj
b25zdCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwUGF0aChj
b25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9Ci0gICAg
RmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3Vu
ZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9Ci0gICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFy
cmF5JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBmaW5h
bCB7IH0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWwgeyB9Ci0gICAgdm9pZCBz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBz
ZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZs
b2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQot
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWwgeyB9Ci0gICAgdm9pZCByb3Rh
dGUoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmlu
YWwgeyB9Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwg
eyB9Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwgeyB9Ci0g
ICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUlu
Y2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgdm9pZCBj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkgZmluYWwgeyB9CisKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwg
eyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6
RXZlbk9kZCkgZmluYWwgeyB9CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsIHsgfQotICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgcmVzdG9yZSgpIGZp
bmFsIHsgfQotCi0gICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0KGNv
bnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBGbG9hdFNpemUgZHJhd1Rl
eHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQpIGZp
bmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0
IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRy
YXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEF0b21TdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3Qmlk
aVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0
aCYpIGZpbmFsIHsgfQorICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsIHsgfQorICAg
IHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQogCi0gICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdl
IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0K
IAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGls
ZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6
RGlkTm90aGluZzsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAKICAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQs
IGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CkBAIC0xMjcsMjggKzk3
LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KICNlbmRpZgog
Ci0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsIHsgfQotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1
ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0KLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0Um91bmRl
ZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLQot
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7IH0K
LSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KLQot
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KLSAgICB2b2lk
IGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotCisgICAgdm9pZCBkcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBGaWx0ZXImLCBG
aWx0ZXJSZXN1bHRzJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJh
d1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Cisg
ICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFs
IHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSBmaW5hbCB7IH0KICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KICNlbmRpZgogCisg
ICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ry
b2tlU3R5bGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisKKyAg
ICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJv
dW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KKwogI2lm
IE9TKFdJTkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBu
dWxscHRyOyB9CiAjZW5kaWYKIAotcHJpdmF0ZToKICAgICBjb25zdCBQYWludEludmFsaWRhdGlv
blJlYXNvbnMgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgeyBQYWludEludmFsaWRhdGlvblJl
YXNvbnM6Ok5vbmUgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlMDFm
ZDM5NDY0MzM5ZDJkNGQ1NGJhOTM2NGM1OTQ1Y2ZhZDdkNWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5o
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiRElC
UGl4ZWxEYXRhLmgiCit0eXBlZGVmIHN0cnVjdCBIRENfXyogSERDOworI2lmICFVU0UoQ0cpCisv
LyBVSW50OCBpcyBkZWZpbmVkIGluIENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oCit0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgVUludDg7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFKENHKQordXNpbmcg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBzdHJ1Y3QgQ0dDb250ZXh0OworI2VsaWYgVVNFKENB
SVJPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87Cit9
Cit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOworI2Vsc2UKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gdm9pZDsKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNw
cAppbmRleCBiYjEzOGI1Mjk3YTUyMWZiZjdkNjkzY2QxMTQxMDQ0MDBmY2FiYzRlLi45MDI0ZjVk
MWFiZmNlMzgwODE4M2EzYjIzMWZiY2UwZmZiMmZmNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkxLDE3ICsxOTEsMTcgQEAg
U2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3QgRmxv
YXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICB1cGRhdGVTaGFkb3dCbHVyVmFsdWVzKCk7CiB9
CiAKLVNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlKQotICAgIDogbV9jb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIG1fYmx1clJhZGl1
cyhzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dCbHVyKQotICAgICwgbV9vZmZzZXQoc3Rh
dGUuc2hhZG93T2Zmc2V0KQotICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRHJv
cFNoYWRvdyYgZHJvcFNoYWRvdywgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKKyAgICA6
IG1fY29sb3IoZHJvcFNoYWRvdy5jb2xvcikKKyAgICAsIG1fYmx1clJhZGl1cyhkcm9wU2hhZG93
LmJsdXJSYWRpdXMsIGRyb3BTaGFkb3cuYmx1clJhZGl1cykKKyAgICAsIG1fb2Zmc2V0KGRyb3BT
aGFkb3cub2Zmc2V0KQorICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gQ29yZSBHcmFwaGljcyBpbmNv
cnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJvYmxl
bS84MTAzNDQyPiksCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdneSBi
ZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgaWYgKHN0YXRl
LnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KSB7Ci0gICAgICAg
IGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0ZS5zaGFkb3dCbHVy
KTsKKyAgICBpZiAoZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSkgeworICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMo
ZHJvcFNoYWRvdy5ibHVyUmFkaXVzKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRTaXpl
KHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCmluZGV4IDE0ZmQ4M2VkZTFhMWJhY2Yx
NzdmMzMxZWNhZDFhNDMwMjkzZjYwM2EuLjQ1ZDBlNTgzMjljZGVlYWJmYjc4YTRkNWU2N2FiOGQ4
ODFhZTU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmgKQEAgLTM4LDggKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZp
bmVUcmFuc2Zvcm07CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1zdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0U3RhdGU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIEltYWdlQnVmZmVy
Oworc3RydWN0IERyb3BTaGFkb3c7CiAKIGNsYXNzIFNoYWRvd0JsdXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFNoYWRvd0JsdXIpOwpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAg
ICBTaGFkb3dCbHVyKCk7CiAgICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgYm9vbCBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyA9IGZhbHNlKTsKLSAgICBTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJik7CisgICAgU2hhZG93Qmx1cihjb25zdCBEcm9wU2hhZG93JiwgYm9vbCBzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93VmFsdWVzKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIGJvb2wgaWdu
b3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNmFjMTNmZDI1YzZmMGY4MDE1
ODcyZmYxOWVkMjhhMWZhNTJiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitT
b3VyY2VCcnVzaDo6U291cmNlQnJ1c2goY29uc3QgQ29sb3ImIGNvbG9yLCBzdGQ6Om9wdGlvbmFs
PEJydXNoPiYmIGJydXNoKQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAsIG1fYnJ1c2goV1RG
TW92ZShicnVzaCkpCit7Cit9CisKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgU291cmNlQnJ1c2g6
OnNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QWZm
aW5lVHJhbnNmb3JtPiBpZGVudGl0eTsKKyAgICByZXR1cm4gbV9icnVzaCA/IG1fYnJ1c2gtPnNw
YWNlVHJhbnNmb3JtIDogaWRlbnRpdHkuZ2V0KCk7Cit9CisKK0dyYWRpZW50KiBTb3VyY2VCcnVz
aDo6Z3JhZGllbnQoKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgaWYgKGF1dG8qIGdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdyYWRp
ZW50Pj4oJm1fYnJ1c2gtPmJydXNoKSkKKyAgICAgICAgcmV0dXJuIGdyYWRpZW50LT5wdHIoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGF0dGVybiogU291cmNlQnJ1c2g6OnBhdHRlcm4o
KSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaWYgKGF1dG8qIHBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZtX2JydXNo
LT5icnVzaCkpCisgICAgICAgIHJldHVybiBwYXR0ZXJuLT5wdHIoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQoUmVmPEdyYWRpZW50PiYm
IGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQoreworICAg
IG1fYnJ1c2ggPSB7IFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSB9OworfQorCit2
b2lkIFNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pCit7CisgICAgbV9icnVzaCA9IHsgV1RG
TW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKworV1RGOjpUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTb3VyY2VCcnVzaCYgYnJ1c2gpCit7Cisg
ICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGJydXNoLmNvbG9yKCkpOworCisgICAgaWYgKGF1
dG8gZ3JhZGllbnQgPSBicnVzaC5ncmFkaWVudCgpKQorICAgICAgICB0cy5kdW1wUHJvcGVydHko
ImdyYWRpZW50IiwgZ3JhZGllbnQpOworCisgICAgaWYgKGF1dG8gcGF0dGVybiA9IGJydXNoLnBh
dHRlcm4oKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuIiwgcGF0dGVybik7CisK
KyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlMjhk
MGMzNDFiNTJhM2U2MDU0ODU3M2M0YzZjOGVjM2VkYjhhYjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCkBAIC0wLDAgKzEs
MTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgor
I2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTb3Vy
Y2VCcnVzaCB7CitwdWJsaWM6CisgICAgc3RydWN0IEJydXNoIHsKKyAgICAgICAgc3RkOjp2YXJp
YW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4gYnJ1c2g7CisgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBzcGFjZVRyYW5zZm9ybTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEJydXNoPiBkZWNvZGUoRGVjb2RlciYp
OworICAgIH07CisKKyAgICBTb3VyY2VCcnVzaCgpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBTb3VyY2VCcnVzaChjb25zdCBDb2xvciYsIHN0ZDo6b3B0aW9uYWw8QnJ1c2g+JiYgPSBz
dGQ6Om51bGxvcHQpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3IgY29sb3IpIHsgbV9jb2xv
ciA9IGNvbG9yOyB9CisKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYgYnJ1c2goKSBj
b25zdCB7IHJldHVybiBtX2JydXNoOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFkaWVudCog
Z3JhZGllbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXR0ZXJuKiBwYXR0ZXJuKCkg
Y29uc3Q7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSgpIGNvbnN0
OworCisgICAgdm9pZCBzZXRHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworICAgIHZvaWQgc2V0UGF0dGVybihSZWY8
UGF0dGVybj4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsgfSk7
CisKKyAgICBib29sIGlzUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gIW1fYnJ1c2ggJiYgbV9j
b2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBkZWNvZGUoRGVjb2RlciYpOwor
Citwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBzdGQ6
Om9wdGlvbmFsPEJydXNoPiBtX2JydXNoOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50PiwgUmVmPFBhdHRlcm4+PiYgYSwgY29uc3Qg
c3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGIpCit7CisgICAgcmV0
dXJuIFdURjo6c3dpdGNoT24oYSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+JiBh
R3JhZGllbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBiR3JhZGllbnQgPSBzdGQ6OmdldF9p
ZjxSZWY8R3JhZGllbnQ+PigmYikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFHcmFkaWVudCA9
PSAqYkdyYWRpZW50OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9LAorICAg
ICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgYVBhdHRlcm4pIHsKKyAgICAgICAgICAgIGlm
IChhdXRvKiBiUGF0dGVybiA9IHN0ZDo6Z2V0X2lmPFJlZjxQYXR0ZXJuPj4oJmIpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBhUGF0dGVybiA9PSAqYlBhdHRlcm47CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICApOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYSwgY29uc3QgU291cmNlQnJ1c2g6OkJydXNoJiBi
KQoreworICAgIHJldHVybiBhLmJydXNoID09IGIuYnJ1c2ggJiYgYS5zcGFjZVRyYW5zZm9ybSA9
PSBiLnNwYWNlVHJhbnNmb3JtOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNv
dXJjZUJydXNoJiBhLCBjb25zdCBTb3VyY2VCcnVzaCYgYikKK3sKKyAgICByZXR1cm4gYS5jb2xv
cigpID09IGIuY29sb3IoKSAmJiBhLmJydXNoKCkgPT0gYi5icnVzaCgpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBTb3VyY2VCcnVzaDo6QnJ1c2g6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgc3BhY2VUcmFuc2Zvcm07Cisg
ICAgV1RGOjpzd2l0Y2hPbihicnVzaCwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+
JiBncmFkaWVudCkgeworICAgICAgICAgICAgZW5jb2RlciA8PCB0cnVlIDw8IGdyYWRpZW50Lmdl
dCgpOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgcGF0dGVy
bikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBmYWxzZSA8PCBwYXR0ZXJuLmdldCgpOworICAg
ICAgICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KK3N0ZDo6b3B0
aW9uYWw8U291cmNlQnJ1c2g6OkJydXNoPiBTb3VyY2VCcnVzaDo6QnJ1c2g6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBzcGFj
ZVRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHNwYWNlVHJhbnNmb3JtOworICAgIGlmICghc3Bh
Y2VUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPGJvb2w+IGhhc0dyYWRpZW50OworICAgIGRlY29kZXIgPj4gaGFzR3JhZGllbnQ7Cisg
ICAgaWYgKCFoYXNHcmFkaWVudCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAK
KyAgICBpZiAoKmhhc0dyYWRpZW50KSB7CisgICAgICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVu
dDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoIWdyYWRpZW50KQorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpncmFkaWVu
dCksICpzcGFjZVRyYW5zZm9ybSB9IH07CisgICAgfQorCisgICAgYXV0byBwYXR0ZXJuID0gUGF0
dGVybjo6ZGVjb2RlKGRlY29kZXIpOworICAgIGlmICghcGF0dGVybikKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IFdURk1vdmUoKnBhdHRlcm4pLCAqc3BhY2VU
cmFuc2Zvcm0gfSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBTb3VyY2VC
cnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBt
X2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9icnVzaDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g+IFNvdXJjZUJydXNoOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBk
ZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29sb3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8QnJ1c2g+PiBicnVzaDsK
KyAgICBkZWNvZGVyID4+IGJydXNoOworICAgIGlmICghYnJ1c2gpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU291cmNlQnJ1c2goKmNvbG9yLCBXVEZNb3ZlKCpi
cnVzaCkpOworfQorCitXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFt
JiwgY29uc3QgU291cmNlQnJ1c2gmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0Qm94SXRlcmF0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBjZjY1YmEyYzEwZTg4ODhkZDQ5ODU0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJh
dG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRleHRSdW4uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0Qm94SXRlcmF0b3IgeworcHVibGljOgorICAg
IFRleHRCb3hJdGVyYXRvcigpCisgICAgICAgIDogbV90ZXh0UnVuKDApCisgICAgICAgICwgbV9v
ZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRS
dW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1
bikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKworICAgIHVuc2ln
bmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgdm9pZCBpbmNyZW1l
bnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1f
dGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRSdW4tPmxlbmd0aCgpOyB9CisgICAgVUNoYXIg
Y3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90ZXh0UnVuKVttX29mZnNldF07IH0KKyAgICBV
Q2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhF
Ul9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1cnJlbnQoKSk7IH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhl
ci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJ
dGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQorCitw
cml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4dFJ1bjsKKyAgICB1bnNpZ25lZCBtX29m
ZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDcy
OGQzYmVhMGExNzIzNTAxNGYwZjEyY2YzZDZkN2RhMTkzYzM1YTUuLjE1ZTg0NTU3YWM4MWE3Njdh
MDA3NDZlMzAxNjE1MzU0NGYyMTU2N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtMTgzNCw3ICsxODM0
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0
U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmEKICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVj
dCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwgc2l6ZSgpKTsKIAotICAgICAgICBEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4
dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAgIERpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4dCgqbV9kaXNwbGF5TGlzdCwgaW5pdGlhbENsaXAs
IEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAgICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMo
Y29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
T3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1NmEyM2E1ZmRmYjEwYWZlY2EyY2M5MmE3Mjc5NDU4
MTAyZS4uNjAxMWU5MTNlZjZlN2Q0NTJmMWI2NWYxZDlhZGExNzMxODgyYTZhOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09w
ZXJhdGlvbnMuY3BwCkBAIC00NDYsMTcgKzQ0NiwxNiBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UG9p
bnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0
CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAKLXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKEdyYXBoaWNz
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3Zv
aWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJvX3QqIGNyIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQg
c3Ryb2tlVGhpY2tuZXNzKQogewotICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKHBsYXRmb3JtQ29u
dGV4dC5jcigpLCBzdHJva2VUaGlja25lc3MpOworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNy
LCBzdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29u
dGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9p
ZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiBjciwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7
CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkYXNoUGF0dGVybltdID0geyA1LjAsIDUuMCB9Owog
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG90UGF0dGVybltdID0geyAxLjAsIDEuMCB9OwogCi0g
ICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKICAgICBzd2l0Y2ggKHN0cm9r
ZVN0eWxlKSB7CiAgICAgY2FzZSBOb1N0cm9rZToKICAgICAgICAgLy8gRklYTUU6IGlzIGl0IHRo
ZSByaWdodCB3YXkgdG8gZW11bGF0ZSBOb1N0cm9rZT8KQEAgLTQ3NywyOSArNDc2LDI5IEBAIHZv
aWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
U3Ryb2tlU3R5bGUgc3Ryb2tlU3R5CiAgICAgfQogfQogCi12b2lkIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiBjciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGNhaXJvX3NldF9vcGVyYXRv
cihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgdG9DYWlyb09wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlv
biwgYmxlbmRNb2RlKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCB0b0NhaXJvT3BlcmF0
b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBibGVuZE1vZGUpKTsKIH0KIAotdm9pZCBzZXRTaG91bGRB
bnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgYm9vbCBlbmFi
bGUpCit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190KiBjciwgYm9vbCBlbmFibGUpCiB7
CiAgICAgLy8gV2hlbiB0cnVlLCB1c2UgdGhlIGRlZmF1bHQgQ2Fpcm8gYmFja2VuZCBhbnRpYWxp
YXMgbW9kZSAodXN1YWxseSB0aGlzCiAgICAgLy8gZW5hYmxlcyBzdGFuZGFyZCAnZ3JheXNjYWxl
JyBhbnRpYWxpYXNpbmcpOyBmYWxzZSB0byBleHBsaWNpdGx5IGRpc2FibGUKICAgICAvLyBhbnRp
YWxpYXNpbmcuCi0gICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQuY3IoKSwg
ZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7
CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhjciwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RF
RkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CiB9CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNz
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQordm9pZCBzZXRDVE0oY2Fpcm9fdCogY3IsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQogewogICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IG1hdHJpeCA9IHRvQ2Fpcm9N
YXRyaXgodHJhbnNmb3JtKTsKLSAgICBjYWlyb19zZXRfbWF0cml4KHBsYXRmb3JtQ29udGV4dC5j
cigpLCAmbWF0cml4KTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNyLCAmbWF0cml4KTsKIH0KIAot
QWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250
ZXh0KQorQWZmaW5lVHJhbnNmb3JtIGdldENUTShjYWlyb190KiBjcikKIHsKICAgICBjYWlyb19t
YXRyaXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRyaXgocGxhdGZvcm1Db250ZXh0LmNyKCksICZt
KTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7CiAgICAgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybShtLnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngwLCBtLnkwKTsKIH0KIApAQCAtNTU2LDQ1
ICs1NTUsNDUgQEAgYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dChHcmFwaGljc0NvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0KQogfSAvLyBuYW1lc3BhY2UgU3RhdGUKIAogRmlsbFNvdXJjZTo6
RmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCi0gICAgOiBnbG9i
YWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGZpbGxSdWxlKHN0YXRlLmZpbGxSdWxlKQorICAg
IDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEoKSkKKyAgICAsIGZpbGxSdWxlKHN0YXRlLmZpbGxS
dWxlKCkpCiB7Ci0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAgIHBhdHRlcm4u
b2JqZWN0ID0gYWRvcHRSZWYoc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgIGlmIChhdXRvIGZpbGxQYXR0ZXJuID0gc3RhdGUu
ZmlsbEJydXNoKCkucGF0dGVybigpKSB7CisgICAgICAgIHBhdHRlcm4ub2JqZWN0ID0gYWRvcHRS
ZWYoZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkp
OwogCi0gICAgICAgIGF1dG8mIHBhdHRlcm5JbWFnZSA9IHN0YXRlLmZpbGxQYXR0ZXJuLT50aWxl
SW1hZ2UoKTsKKyAgICAgICAgYXV0byYgcGF0dGVybkltYWdlID0gZmlsbFBhdHRlcm4tPnRpbGVJ
bWFnZSgpOwogICAgICAgICBwYXR0ZXJuLnNpemUgPSBwYXR0ZXJuSW1hZ2Uuc2l6ZSgpOwotICAg
ICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9IHN0YXRlLmZpbGxQYXR0ZXJuLT5wYXR0ZXJuU3BhY2VU
cmFuc2Zvcm0oKTsKLSAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gc3RhdGUuZmlsbFBhdHRlcm4t
PnJlcGVhdFgoKTsKLSAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gc3RhdGUuZmlsbFBhdHRlcm4t
PnJlcGVhdFkoKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCkgewotICAgICAg
ICBncmFkaWVudC5iYXNlID0gc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEsIHN0
YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgaWYgKHN0YXRlLmFscGhh
ICE9IDEpCi0gICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gc3RhdGUuZmlsbEdy
YWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSk7CisgICAgICAgIHBhdHRlcm4udHJhbnNmb3JtID0gZmlsbFBhdHRlcm4tPnBh
dHRlcm5TcGFjZVRyYW5zZm9ybSgpOworICAgICAgICBwYXR0ZXJuLnJlcGVhdFggPSBmaWxsUGF0
dGVybi0+cmVwZWF0WCgpOworICAgICAgICBwYXR0ZXJuLnJlcGVhdFkgPSBmaWxsUGF0dGVybi0+
cmVwZWF0WSgpOworICAgIH0gZWxzZSBpZiAoYXV0byBmaWxsR3JhZGllbnQgPSBzdGF0ZS5maWxs
QnJ1c2goKS5ncmFkaWVudCgpKSB7CisgICAgICAgIGdyYWRpZW50LmJhc2UgPSBmaWxsR3JhZGll
bnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3RhdGUuZmlsbEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKSk7
CisgICAgICAgIGlmIChzdGF0ZS5hbHBoYSgpICE9IDEpCisgICAgICAgICAgICBncmFkaWVudC5h
bHBoYUFkanVzdGVkID0gZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhKCks
IHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCkpOwogICAgIH0gZWxzZQotICAgICAg
ICBjb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsKKyAgICAgICAgY29sb3IgPSBzdGF0ZS5maWxsQnJ1
c2goKS5jb2xvcigpOwogfQogCiBTdHJva2VTb3VyY2U6OlN0cm9rZVNvdXJjZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgOiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkK
IHsKLSAgICBpZiAoc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAgICAgICAgcGF0dGVybiA9IGFkb3B0
UmVmKHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFu
c2Zvcm0oKSkpOwotICAgIGVsc2UgaWYgKHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7Ci0gICAgICAg
IGdyYWRpZW50LmJhc2UgPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigxLCBz
dGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICBpZiAoYXV0byBzdHJva2VQ
YXR0ZXJuID0gc3RhdGUuc3Ryb2tlQnJ1c2goKS5wYXR0ZXJuKCkpCisgICAgICAgIHBhdHRlcm4g
PSBhZG9wdFJlZihzdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJh
bnNmb3JtKCkpKTsKKyAgICBlbHNlIGlmIChhdXRvIHN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ry
b2tlQnJ1c2goKS5ncmFkaWVudCgpKSB7CisgICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdHJva2VH
cmFkaWVudC0+Y3JlYXRlUGF0dGVybigxLCBzdGF0ZS5zdHJva2VCcnVzaCgpLnNwYWNlVHJhbnNm
b3JtKCkpOwogICAgICAgICBpZiAoc3RhdGUuYWxwaGEgIT0gMSkKLSAgICAgICAgICAgIGdyYWRp
ZW50LmFscGhhQWRqdXN0ZWQgPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihz
dGF0ZS5hbHBoYSwgc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAg
ICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRl
cm4oc3RhdGUuYWxwaGEoKSwgc3RhdGUuc3Ryb2tlQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHJva2VDb2xvcjsKKyAgICAgICAg
Y29sb3IgPSBzdGF0ZS5zdHJva2VCcnVzaCgpLmNvbG9yKCk7CiB9CiAKIFNoYWRvd1N0YXRlOjpT
aGFkb3dTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCi0gICAgOiBvZmZz
ZXQoc3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgYmx1cihzdGF0ZS5zaGFkb3dCbHVyKQotICAg
ICwgY29sb3Ioc3RhdGUuc2hhZG93Q29sb3IpCi0gICAgLCBpZ25vcmVUcmFuc2Zvcm1zKHN0YXRl
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAgICwgZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEp
Ci0gICAgLCBnbG9iYWxDb21wb3NpdGVPcGVyYXRvcihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcikK
KyAgICA6IG9mZnNldChzdGF0ZS5kcm9wU2hhZG93KCkub2Zmc2V0KQorICAgICwgYmx1cihzdGF0
ZS5kcm9wU2hhZG93KCkuYmx1clJhZGl1cykKKyAgICAsIGNvbG9yKHN0YXRlLmRyb3BTaGFkb3co
KS5jb2xvcikKKyAgICAsIGlnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSkKKyAgICAsIGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkpCisgICAgLCBnbG9iYWxD
b21wb3NpdGVPcGVyYXRvcihzdGF0ZS5jb21wb3NpdGVNb2RlKCkub3BlcmF0aW9uKQogewogfQog
CkBAIC02MjIsNyArNjIxLDcgQEAgYm9vbCBTaGFkb3dTdGF0ZTo6aXNSZXF1aXJlZChHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KSBjb25zdAogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgTGluZUNhcCBsaW5lQ2FwKQordm9pZCBzZXRMaW5lQ2FwKGNhaXJvX3QqIGNyLCBMaW5lQ2Fw
IGxpbmVDYXApCiB7CiAgICAgY2Fpcm9fbGluZV9jYXBfdCBjYWlyb0NhcCB7IH07CiAgICAgc3dp
dGNoIChsaW5lQ2FwKSB7CkBAIC02MzYsMTggKzYzNSwxOCBAQCB2b2lkIHNldExpbmVDYXAoR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQogICAg
ICAgICBjYWlyb0NhcCA9IENBSVJPX0xJTkVfQ0FQX1NRVUFSRTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIGNhaXJvX3NldF9saW5lX2NhcChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fpcm9D
YXApOworICAgIGNhaXJvX3NldF9saW5lX2NhcChjciwgY2Fpcm9DYXApOwogfQogCi12b2lkIHNl
dExpbmVEYXNoKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IERh
c2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBzZXRMaW5lRGFzaChjYWly
b190KiBjciwgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7CiAg
ICAgaWYgKHN0ZDo6YWxsX29mKGRhc2hlcy5iZWdpbigpLCBkYXNoZXMuZW5kKCksIFtdKGF1dG8m
IGRhc2gpIHsgcmV0dXJuICFkYXNoOyB9KSkKLSAgICAgICAgY2Fpcm9fc2V0X2Rhc2gocGxhdGZv
cm1Db250ZXh0LmNyKCksIDAsIDAsIDApOworICAgICAgICBjYWlyb19zZXRfZGFzaChjciwgMCwg
MCwgMCk7CiAgICAgZWxzZQotICAgICAgICBjYWlyb19zZXRfZGFzaChwbGF0Zm9ybUNvbnRleHQu
Y3IoKSwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7CisgICAgICAg
IGNhaXJvX3NldF9kYXNoKGNyLCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zm
c2V0KTsKIH0KIAotdm9pZCBzZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCog
Y3IsIExpbmVKb2luIGxpbmVKb2luKQogewogICAgIGNhaXJvX2xpbmVfam9pbl90IGNhaXJvSm9p
biB7IH07CiAgICAgc3dpdGNoIChsaW5lSm9pbikgewpAQCAtNjYxLDEyICs2NjAsMTIgQEAgdm9p
ZCBzZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5l
Sm9pbiBsaW5lSm9pbikKICAgICAgICAgY2Fpcm9Kb2luID0gQ0FJUk9fTElORV9KT0lOX0JFVkVM
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xpbmVfam9pbihwbGF0Zm9y
bUNvbnRleHQuY3IoKSwgY2Fpcm9Kb2luKTsKKyAgICBjYWlyb19zZXRfbGluZV9qb2luKGNyLCBj
YWlyb0pvaW4pOwogfQogCi12b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgc2V0TWl0ZXJMaW1pdChj
YWlyb190KiBjciwgZmxvYXQgbWl0ZXJMaW1pdCkKIHsKLSAgICBjYWlyb19zZXRfbWl0ZXJfbGlt
aXQocGxhdGZvcm1Db250ZXh0LmNyKCksIG1pdGVyTGltaXQpOworICAgIGNhaXJvX3NldF9taXRl
cl9saW1pdChjciwgbWl0ZXJMaW1pdCk7CiB9CiAKIHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
aWxsU291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09w
ZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
T3BlcmF0aW9ucy5oCmluZGV4IDU0OTg1NjNjZTQ5YzE1ZTM1ZDA4MjU5YzJkMjZkYzdiMTdjZWE4
ODUuLjg3ZWNjMjA1OGQ0YTc1ZDMzZGRkMjEyZWQ4ODc3ZThkM2E4YTc4ZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0
aW9ucy5oCkBAIC01NCwxNCArNTQsMTQgQEAgbmFtZXNwYWNlIENhaXJvIHsKIAogbmFtZXNwYWNl
IFN0YXRlIHsKIAotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
LCBmbG9hdCk7Ci12b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgU3Ry
b2tlU3R5bGUpOwordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCosIGZsb2F0KTsKK3Zv
aWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCosIFN0cm9rZVN0eWxlKTsKIAotdm9pZCBzZXRDb21w
b3NpdGVPcGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJv
JiwgYm9vbCk7Cit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSk7Cit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190Kiwg
Ym9vbCk7CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJv
Jik7Cit2b2lkIHNldENUTShjYWlyb190KiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CitBZmZp
bmVUcmFuc2Zvcm0gZ2V0Q1RNKGNhaXJvX3QqKTsKIAogSW50UmVjdCBnZXRDbGlwQm91bmRzKEdy
YXBoaWNzQ29udGV4dENhaXJvJik7CiBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhHcmFw
aGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtMTI1LDEwICsxMjUsMTAg
QEAgc3RydWN0IFNoYWRvd1N0YXRlIHsKICAgICBDb21wb3NpdGVPcGVyYXRvciBnbG9iYWxDb21w
b3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07CiB9OwogCi12
b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5lQ2FwKTsKLXZvaWQgc2V0
TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7
Ci12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgTGluZUpvaW4pOwotdm9p
ZCBzZXRNaXRlckxpbWl0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgZmxvYXQpOwordm9pZCBzZXRM
aW5lQ2FwKGNhaXJvX3QqLCBMaW5lQ2FwKTsKK3ZvaWQgc2V0TGluZURhc2goY2Fpcm9fdCosIGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0KTsKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCosIExpbmVK
b2luKTsKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiwgZmxvYXQpOwogCiB2b2lkIGZpbGxS
ZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmlsbFNv
dXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7CiB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4
dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGMzMjMwNDQ1MzUxYjAzZjJh
YTg3MzZhZWUyYmNlNzhiYzQzNjFmNDkuLmMxYmExY2E1M2MwYmVhODBhYWEwYzI1NDRlMTYzMmU1
NTViOWZmMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KQEAgLTY4LDcgKzY4LDggQEAg
cHVibGljOgogfTsKIAogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJv
KFJlZlB0cjxjYWlyb190PiYmIGNvbnRleHQpCi0gICAgOiBtX2NyKFdURk1vdmUoY29udGV4dCkp
CisgICAgOiBHcmFwaGljc0NvbnRleHQoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkKKyAgICAs
IG1fY3IoV1RGTW92ZShjb250ZXh0KSkKIHsKICAgICBtX2NhaXJvU3RhdGVTdGFjay5hcHBlbmQo
Q2Fpcm9TdGF0ZSgpKTsKICAgICBtX2NhaXJvU3RhdGUgPSAmbV9jYWlyb1N0YXRlU3RhY2subGFz
dCgpOwpAQCAtODYsMTAgKzg3LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dENhaXJvOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1
ZGVTY2FsZSkgY29uc3QKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRl
cmluZ01vZGUoKSBjb25zdAogewotICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU2NhbGUpOwotICAg
IHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJl
dHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQo
KSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQ7CiB9CiAKIEdyYXBoaWNzQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRDYWlybzo6
cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKQEAgLTEzNCw1MyArMTM0LDExMCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpyZXN0b3JlKCkKICAgICBjYWlyb19yZXN0b3JlKG1fY3IuZ2V0KCkp
OwogfQogCi0vLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVy
Lgotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjph
cHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywg
cmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxl
LCBzdGF0ZS5zdHJva2VDb2xvcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvIGNoYW5nZSA6IHN0YXRlKCkuY2hhbmdlcygpKSB7
CisgICAgICAgIHN3aXRjaCAoY2hhbmdlKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6Q1RNOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0obV9j
ci5nZXQoKSwgc3RhdGUoKS5nZXRDVE0oKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczoKKyAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fY3IuZ2V0KCksIHN0
ZDo6bWF4KHN0YXRlKCkuc3Ryb2tlVGhpY2tuZXNzKCksIDAuZikpOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VT
dHlsZToKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9jci5nZXQo
KSwgc3RhdGUoKS5zdHJva2VTdHlsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcDoKKyAgICAgICAgICAg
IENhaXJvOjpzZXRMaW5lQ2FwKG1fY3IuZ2V0KCksIHN0YXRlKCkubGluZUNhcCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6TGluZUpvaW46CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZUpvaW4obV9jci5nZXQoKSwg
c3RhdGUoKS5saW5lSm9pbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2g6CisgICAgICAgICAgICBDYWly
bzo6c2V0TGluZURhc2gobV9jci5nZXQoKSwgc3RhdGUoKS5saW5lRGFzaCgpLmRhc2hlcywgc3Rh
dGUoKS5saW5lRGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQ6CisgICAgICAgICAg
ICBDYWlybzo6c2V0TWl0ZXJMaW1pdChtX2NyLmdldCgpLCBzdGF0ZSgpLm1pdGVyTGltaXQoKSk7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGU6CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbihtX2NyLmdldCgpLCBzdGF0ZSgpLmNvbXBvc2l0ZU1vZGUoKS5vcCwg
c3RhdGUoKS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdzoK
KyAgICAgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CisgICAg
ICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3Nv
Y2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAgICAgLy8g
V2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0
ZSBZIGF4aXMKKyAgICAgICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cgPSB0aGlzLT5kcm9wU2hh
ZG93KCk7CisgICAgICAgICAgICAgICAgZHJvcFNoYWRvdy5vZmZzZXQgPSB7IGRyb3BTaGFkb3cu
b2Zmc2V0LndpZHRoKCksIC1kcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQoKSB9OworICAgICAgICAg
ICAgICAgIHNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50
aWFsaWFzKG1fY3IuZ2V0KCksIHN0YXRlKCkuc2hvdWxkQW50aWFsaWFzKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFn
ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRy
YXdQbGF0Zm9ybUltYWdlKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCks
IGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIEdy
YXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBDYWly
bzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7CiB9CiAKLS8vIFRoaXMg
aXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRv
d3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9
PSBOb1N0cm9rZSkKLSAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMp
OworfQogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3
TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJv
a2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIENhaXJvOjpjbGlwKCp0aGlz
LCByZWN0KTsKIH0KIAotLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxp
dHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCp0
aGlzLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJv
a2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKKyAgICBDYWlybzo6Y2xpcFBhdGgoKnRoaXMsIHBhdGgs
IGNsaXBSdWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKK30KIAotICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgsIENh
aXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAg
Q2Fpcm86OmNsaXBPdXQoKnRoaXMsIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhp
cywgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOworfQogCi0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VQYXRoKCp0
aGlzLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQoreworICAgIENhaXJvOjpjbGVhclJlY3QoKnRoaXMsIHJlY3QpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCkBAIC0xOTYsOCArMjUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBh
dXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBh
dHRlcm4oMS4wLCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgaWYgKCFwYXR0ZXJuKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTIwOCwxMzEgKzI2NCwzNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVu
dCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3I7CisgICAgYXV0byBwcmV2aW91c0NvbXBvc2l0ZU1vZGUgPSBjb21w
b3NpdGVNb2RlKCk7CiAKICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigq
dGhpcywgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0
KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHByZXZpb3VzT3BlcmF0b3Is
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xp
cChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsaXAoKnRoaXMsIHJlY3Qp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKLXsKLSAgICBDYWlybzo6Y2xpcFBhdGgoKnRoaXMsIHBh
dGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJv
dW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcygq
cGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQotewotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZl
cigqdGhpcywgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
IHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsK
LSNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKLSAgICBUaGVtZUFkd2FpdGE6OnBh
aW50Rm9jdXMoKnRoaXMsIHBhdGgsIGNvbG9yKTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwot
ICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIHJldHVybjsKLSNlbHNlCi0gICAgQ2Fpcm86
OmRyYXdGb2N1c1JpbmcoKnRoaXMsIHBhdGgsIHdpZHRoLCBjb2xvcik7Ci0jZW5kaWYKKyAgICBD
YWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUoKSkpOworICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCp0aGlzLCBw
cmV2aW91c0NvbXBvc2l0ZU1vZGUub3BlcmF0aW9uLCBwcmV2aW91c0NvbXBvc2l0ZU1vZGUuYmxl
bmRNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0jaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCi0gICAgVGhlbWVBZHdhaXRh
OjpwYWludEZvY3VzKCp0aGlzLCByZWN0cywgY29sb3IpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0
aCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgcmV0dXJuOwotI2Vsc2UKLSAgICBD
YWlybzo6ZHJhd0ZvY3VzUmluZygqdGhpcywgcmVjdHMsIHdpZHRoLCBjb2xvcik7Ci0jZW5kaWYK
KyAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxp
bmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHdpZHRo
cy5pc0VtcHR5KCkpCisgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lk
dGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsK
LSAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUp
OwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQotewot
ICAgIFVOVVNFRF9QQVJBTShyb3VuZGluZ01vZGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnRoaXMsIHJlY3QpOwotfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDYWlybzo6dHJh
bnNsYXRlKCp0aGlzLCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlk
VXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAgICBDYWly
bzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcygqdGhpcywgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
KTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNo
YW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZSgqdGhpcywgc3RhdGUu
c3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
YWRvd0NoYW5nZSkgewotICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
IHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMg
YXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8g
V2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0
ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09m
ZnNldDsKLSAgICAgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQu
d2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNo
YW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMs
IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAg
ICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnRoaXMsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6Y29uY2F0Q1RNKCp0
aGlzLCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0YXRlOjpz
ZXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgQ2Fpcm86OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMsIG9wYWNpdHkpOworICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJl
Y3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxh
eWVyKCk7Ci0gICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCp0aGlzKTsKLX0KKyAgICBp
ZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6
Y2xlYXJSZWN0KCp0aGlzLCByZWN0KTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CisgICAgQ2Fpcm86OmZpbGxQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQpAQCAtMzQxLDU4ICszMDAsNjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBDYWlybzo6
c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIENhaXJvOjpzZXRM
aW5lQ2FwKCp0aGlzLCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7
Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNoKCp0aGlzLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQor
ICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBDYWly
bzo6c2V0TGluZUpvaW4oKnRoaXMsIGxpbmVKb2luKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpTdHJv
a2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKKy8vIERyYXdz
IGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykKIHsKLSAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdCgqdGhpcywgbWl0ZXIpOwor
ICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOworICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywg
cmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tl
Q29sb3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3Qg
UGF0aCYgcGF0aCkKKy8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ug
c2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikK
IHsKLSAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcGF0aCk7Ci19CisgICAgaWYgKHN0cm9rZVN0
eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCi17Ci0gICAgQ2Fpcm86OnJvdGF0ZSgqdGhp
cywgcmFkaWFucyk7CisgICAgQ2Fpcm86OmRyYXdMaW5lKCp0aGlzLCBwb2ludDEsIHBvaW50Miwg
c3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHNob3VsZEFu
dGlhbGlhcygpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2NhbGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplKQorLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhl
IGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgQ2Fpcm86OnNjYWxl
KCp0aGlzLCBzaXplKTsKKyAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnRoaXMsIHJlY3QsIGZpbGxD
b2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHJlY3QpOworI2lmIFBMQVRGT1JNKFdQRSkg
fHwgUExBVEZPUk0oR1RLKQorICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0
aCwgY29sb3IpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKG9m
ZnNldCk7CisgICAgcmV0dXJuOworI2Vsc2UKKyAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqdGhp
cywgcGF0aCwgd2lkdGgsIGNvbG9yKTsKKyNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQ2Fpcm86OmZpbGxSb3VuZGVkUmVj
dCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CisjaWYg
UExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCisgICAgVGhlbWVBZHdhaXRhOjpwYWludEZv
Y3VzKCp0aGlzLCByZWN0cywgY29sb3IpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgcmV0dXJuOworI2Vsc2UKKyAgICBDYWlybzo6ZHJh
d0ZvY3VzUmluZygqdGhpcywgcmVjdHMsIHdpZHRoLCBjb2xvcik7CisjZW5kaWYKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJ
bWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBD
YWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
KyAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnRoaXMsIG5hdGl2ZUltYWdlLnBsYXRmb3Jt
SW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKQEAgLTQwNCwxMSArMzcwLDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUlt
YWdlLCBjb25zdCBGbG9hdFJlY3QKICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnRoaXMsIG5hdGl2
ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgbmF0aXZlSW1hZ2Uuc2l6ZSgpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAotUmVu
ZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3Jt
Q29udGV4dCgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZDsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0dseXBo
cyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7CiAg
ICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTQzNCwxMiArMzk1LDMxIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKnRoaXMsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBo
cywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAg
IHRleHREcmF3aW5nTW9kZSgpLCBzdHJva2VUaGlja25lc3MoKSwgc2hhZG93T2Zmc2V0KCksIHNo
YWRvd0NvbG9yKCksCiAgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQoreworICAgIGlmICh3aWR0aHMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnRo
aXMsIHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMs
IHN0cm9rZUNvbG9yKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCit7CisgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
KnRoaXMsIHJlY3QsIHN0eWxlKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJv
Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2Rl
IHJvdW5kaW5nTW9kZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocm91bmRpbmdNb2RlKTsKKyAgICBy
ZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCp0aGlzLCByZWN0KTsKK30K
KwogY2Fpcm9fdCogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNyKCkgY29uc3QKIHsKKyAgICBjb25z
dF9jYXN0PEdyYXBoaWNzQ29udGV4dENhaXJvJj4oKnRoaXMpLmFwcGx5U3RhdGVDaGFuZ2VzKCk7
CiAgICAgcmV0dXJuIG1fY3IuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCmlu
ZGV4IDU2NDYxYzE1OWE1ODNjODljNjFlOGYwMmU0ZTBiZWU3YjA1OTMyZWYuLjMyZDE4ZGE2MDIy
YzUyOWRiOGNjMDU5OTZmNWRkZGVjZmFiYjc2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
aApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICogQ29weXJp
Z2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDYxICs1MSw1MCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICAgICBHcmFwaGljc0NvbnRleHRD
YWlybyogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNv
bnN0IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkg
ZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogCi0gICAgdm9pZCBz
ZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFz
aEFycmF5JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZp
bmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOworICAgIHZv
aWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29u
c3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3Q7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOwotICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJik7CiAgICAgdm9pZCBmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKwogICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkg
ZmluYWw7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lk
IGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9v
dGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQpIGZpbmFsOwogCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwogICAgIHZvaWQgZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lk
IGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOwotICAgIHZvaWQg
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSkgZmluYWw7CisKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwog
Ci0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWw7Ci0KLSAg
ICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcm90YXRlKGZs
b2F0KSBmaW5hbDsKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQg
c2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgZmluYWw7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRl
eHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJ
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
IAotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgm
KSBmaW5hbDsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7
Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIAot
ICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQg
ZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYs
IEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwg
Ym9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAK
ICAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFw
aGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xODU2YTA0MzkzZmQyNGU5NjI4ZjZmZTkzNDY5ZWViZWE0YWJiNTk4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0
U3RhdGVTYXZlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENHQ29udGV4dFN0YXRlU2F2ZXIgeworcHVibGlj
OgorICAgIENHQ29udGV4dFN0YXRlU2F2ZXIoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgc2F2
ZUFuZFJlc3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAg
ICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAgICBpZiAo
bV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUobV9jb250
ZXh0KTsKKyAgICB9CisgICAgCisgICAgfkNHQ29udGV4dFN0YXRlU2F2ZXIoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBDR0NvbnRleHRSZXN0b3Jl
R1N0YXRlKG1fY29udGV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2F2ZSgpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAgICBDR0NvbnRleHRTYXZl
R1N0YXRlKG1fY29udGV4dCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOworICAg
IH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9zYXZlQW5k
UmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0KTsKKyAg
ICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGRp
ZFNhdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2F2ZUFuZFJlc3RvcmU7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBDR0NvbnRleHRSZWYgbV9jb250ZXh0OworICAgIGJv
b2wgbV9zYXZlQW5kUmVzdG9yZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCAzMjQ1YzYwMDQzMTU1MmQ1MTNi
NzRlZWJjMDlmMzE4ZWVjM2RkNzJhLi43ZWZjNzJjOWU3ZDI4YWUyNmQwMTZlMDZjYjcxODhiYTY4
MDhjNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMTg1LDE0ICsxODUsMTMgQEAgc3RhdGljIHZvaWQgc2V0Q0dCbGVuZE1v
ZGUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUK
IH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFJlZiBj
Z0NvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHQoQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5n
Qm94KGNnQ29udGV4dCksIEdyYXBoaWNzQ29udGV4dFN0YXRlOjppbml0aWFsQ2hhbmdlRmxhZ3Ms
IENHQ29udGV4dEdldENUTShjZ0NvbnRleHQpKQogewogICAgIGlmICghY2dDb250ZXh0KQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKGNnQ29udGV4dCk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBp
biBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIHsgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlIH0pOwotICAgIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvcmVJ
bnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0
Zm9ybUNvbnRleHQoKSkpOworICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29yZUlu
dGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KGludGVy
bmFsUGxhdGZvcm1Db250ZXh0KCkpKSk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dENHOjp+R3JhcGhp
Y3NDb250ZXh0Q0coKQpAQCAtMjA2LDYgKzIwNSwxNCBAQCBib29sIEdyYXBoaWNzQ29udGV4dENH
OjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogfQogCiBDR0NvbnRleHRSZWYgR3JhcGhpY3ND
b250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgLy8gU29tZSBjYWxsZXJz
IHRvIHRoaXMgbWV0aG9kIHVzZXMgdGhlIHBsYXRmb3JtIGNvbnRleHQgb3V0c2lkZSB0aGUgc2Nv
cGUKKyAgICAvLyBvZiB0aGlzIGNsYXNzLiBDb21taXQgYW55IGNoYW5nZXMgYmVmb3JlIHJldHVy
bmluZyB0aGUgcGxhdGZvcm0gY29udGV4dC4KKyAgICBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4
dENHJj4oKnRoaXMpLmFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmV0dXJuIGludGVybmFsUGxh
dGZvcm1Db250ZXh0KCk7Cit9CisKK0NHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRDRzo6aW50
ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewogICAgIEFTU0VSVChtX2RhdGEtPm1fY2dD
b250ZXh0KTsKICAgICByZXR1cm4gbV9kYXRhLT5tX2NnQ29udGV4dC5nZXQoKTsKQEAgLTMzOCw3
ICszNDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpegogI2VuZGlmCiAKICAgICBhdXRvIG9s
ZENvbXBvc2l0ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0gICAgYXV0byBvbGRC
bGVuZE1vZGUgPSBibGVuZE1vZGVPcGVyYXRpb24oKTsKKyAgICBhdXRvIG9sZEJsZW5kTW9kZSA9
IGJsZW5kTW9kZSgpOwogICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQsIG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiAKICAgICAvLyBNYWtlIHRoZSBv
cmlnaW4gYmUgYXQgYWRqdXN0ZWREZXN0UmVjdC5sb2NhdGlvbigpCkBAIC0zOTYsNyArNDAzLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2
ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0UmVj
dCk7CiAKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRv
cigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogCiAgICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpICsg
ZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0x
KTsKQEAgLTU1NSwxMyArNTYyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBw
bHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuc3Ryb2tlUGF0dGVybikKKyAg
ICBpZiAoIXN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1
c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0
KSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUuc3Ryb2tlUGF0dGVybi0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOworICAgIGF1dG8gcGxhdGZvcm1Q
YXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFz
ZUNUTSk7CiAgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApAQCAt
NTc0LDEzICs1ODEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJva2VQYXR0
ZXJuKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0g
ICAgaWYgKCFtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmICghZmlsbFBhdHRlcm4oKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNm
b3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtUGF0
dGVybiA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9C
YXNlQ1RNKTsKKyAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IGZpbGxQYXR0ZXJuKCktPmNyZWF0
ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVy
bikKICAgICAgICAgcmV0dXJuOwogCkBAIC01OTEsMTEgKzU5OCwxMSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBDR0NvbnRleHRTZXRGaWxsUGF0dGVy
bihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5BbHBoYSk7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0aERyYXdpbmdNb2RlJiBtb2RlKQorc3RhdGljIGlubGlu
ZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCiB7Ci0gICAgYm9vbCBzaG91bGRGaWxsID0gc3Rh
dGUuZmlsbFBhdHRlcm4gfHwgc3RhdGUuZmlsbENvbG9yLmlzVmlzaWJsZSgpOwotICAgIGJvb2wg
c2hvdWxkU3Ryb2tlID0gc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCAoc3RhdGUuc3Ryb2tlU3R5bGUg
IT0gTm9TdHJva2UgJiYgc3RhdGUuc3Ryb2tlQ29sb3IuaXNWaXNpYmxlKCkpOwotICAgIGJvb2wg
dXNlRU9GaWxsID0gc3RhdGUuZmlsbFJ1bGUgPT0gV2luZFJ1bGU6OkV2ZW5PZGQ7CisgICAgYm9v
bCBzaG91bGRGaWxsID0gY29udGV4dC5maWxsUGF0dGVybigpIHx8IGNvbnRleHQuZmlsbENvbG9y
KCkuaXNWaXNpYmxlKCk7CisgICAgYm9vbCBzaG91bGRTdHJva2UgPSBjb250ZXh0LnN0cm9rZVBh
dHRlcm4oKSB8fCAoY29udGV4dC5zdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlICYmIGNvbnRleHQu
c3Ryb2tlQ29sb3IoKS5pc1Zpc2libGUoKSk7CisgICAgYm9vbCB1c2VFT0ZpbGwgPSBjb250ZXh0
LmZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQ7CiAKICAgICBpZiAoc2hvdWxkRmlsbCkg
ewogICAgICAgICBpZiAoc2hvdWxkU3Ryb2tlKSB7CkBAIC02MjQsOSArNjMxLDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAg
ICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCi0gICAgaWYg
KHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChm
aWxsR3JhZGllbnQoKSB8fCBzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIC8vIFdlIGRvbid0
IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8gZmlsbCAmIHN0cm9rZSBhIHBhdGggdXNpbmcgZ3Jh
ZGllbnRzCiAgICAgICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCiAgICAgICAg
IGZpbGxQYXRoKHBhdGgpOwpAQCAtNjM0LDEzICs2NDAsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkKICAg
ICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIGlmIChzdGF0ZS5zdHJva2VQYXR0ZXJuKQor
ICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwog
CiAgICAgQ0dQYXRoRHJhd2luZ01vZGUgZHJhd2luZ01vZGU7Ci0gICAgaWYgKGNhbGN1bGF0ZURy
YXdpbmdNb2RlKHN0YXRlLCBkcmF3aW5nTW9kZSkpIHsKKyAgICBpZiAoY2FsY3VsYXRlRHJhd2lu
Z01vZGUoKnRoaXMsIGRyYXdpbmdNb2RlKSkgewogI2lmIEhBVkUoQ0dfQ09OVEVYVF9EUkFXX1BB
VEhfRElSRUNUKQogICAgICAgICBDR0NvbnRleHREcmF3UGF0aERpcmVjdChjb250ZXh0LCBkcmF3
aW5nTW9kZSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CiAjZWxzZQpAQCAtNjU4LDcg
KzY2NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0g
ICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgpKSB7
CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3Qg
PSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXllclNp
emUgPSBnZXRDVE0oKS5tYXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTY3MCwzMyArNjc2LDMzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAg
ICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0obGF5ZXJDb250ZXh0LCAtcmVjdC54KCksIC1y
ZWN0LnkoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgobGF5ZXJDb250ZXh0KTsK
ICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBwYXRoLnBsYXRmb3Jt
UGF0aCgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIG1f
c3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICAgICAgQ0dDb250ZXh0
Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgICAg
ICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAgICAg
ICBDR0NvbnRleHRFT0NsaXAobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7CiAKLSAgICAgICAgICAgIG1f
c3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAgZmls
bEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRE
cmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgICAgICAg
ICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAgICAg
ICAgICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNl
VHJhbnNmb3JtKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBmaWxs
U3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFdpbmRS
dWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQp
OwogCi0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAg
ICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICBp
ZiAoZmlsbFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogI2lmIEhBVkUo
Q0dfQ09OVEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgIENHQ29udGV4dERyYXdQYXRoRGlyZWN0
KGNvbnRleHQsIGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQgPyBrQ0dQYXRoRU9GaWxs
IDoga0NHUGF0aEZpbGwsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51bGxwdHIpOwpAQCAtNzE3LDcg
KzcyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAK
LSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChzdHJva2VHcmFkaWVu
dCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0
IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIGZsb2F0IGxpbmVX
aWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtNzQyLDggKzc0OCw4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgICAgIENH
Q29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAgICAg
ICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxheWVyQ29udGV4dCk7
CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0gICAgICAgICAgICBD
R0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQo
bGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRl
eHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQo
KS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgZmxvYXQgZGVzdGluYXRpb25Y
ID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAgICAgIGZsb2F0IGRlc3Rp
bmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0aCk7CkBAIC03NTQsMTMgKzc2MCwx
MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRo
KCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29u
dGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAgICAgICAg
Q0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRy
YW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCgqdGhp
cyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgc3Ryb2tlU3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLnN0
cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJv
a2VQYXR0ZXJuKCk7CiAKICNpZiBVU0UoQ0dfQ09OVEVYVF9TVFJPS0VfTElORV9TRUdNRU5UU19X
SEVOX1NUUk9LSU5HX1BBVEgpCkBAIC03ODUsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsR3Jh
ZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkpIHsKICAgICAgICAgQ0dDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsK
ICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXllclNpemUgPSBnZXRDVE0oKS5tYXBTaXplKHJlY3Qu
c2l6ZSgpKTsKQEAgLTc5OCwyNyArODA0LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJl
Y3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJD
b250ZXh0KTsKIAotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwg
bV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRl
LmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4
dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAg
ICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dD
b250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxheWVyLmdldCgpKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcmVj
dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5maWxs
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVu
dC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWlu
dCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICht
X3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigpKQogICAgICAgICBhcHBs
eUZpbGxQYXR0ZXJuKCk7CiAKICAgICBib29sIGRyYXdPd25TaGFkb3cgPSBjYW5Vc2VTaGFkb3dC
bHVyKCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdP
d25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2Zm
IENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9y
bUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBj
b250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3Qp
KTsKICAgICB9CiAKQEAgLTgzNyw5ICs4NDMsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBD
R0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAg
ICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4K
LSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBD
R1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNv
bnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFk
b3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cu
ZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3QocmVjdCkpOwogICAgIH0KIApA
QCAtODUyLDcgKzg1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxD
b2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRG
aWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKQEAgLTg2NCw5ICs4NzAsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRy
YXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4g
b2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0
Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNo
YWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFk
b3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4
dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAg
ICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCByZWN0KTsKICAgICB9CiAKQEAg
LTg3NCw3ICs4ODAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJ
bXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0CiAgICAgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpID0gcmVjdC5yYWRpaSgpOwogICAgIGJvb2wgZXF1YWxX
aWR0aHMgPSAocmFkaWkudG9wTGVmdCgpLndpZHRoKCkgPT0gcmFkaWkudG9wUmlnaHQoKS53aWR0
aCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCkud2lk
dGgoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSA9PSByYWRpaS5ib3R0b21SaWdodCgp
LndpZHRoKCkpOwogICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gKHJhZGlpLnRvcExlZnQoKS5oZWln
aHQoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgJiYgcmFkaWkuYm90dG9tTGVmdCgp
LmhlaWdodCgpID09IHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgJiYgcmFkaWkudG9wUmlnaHQo
KS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgpKTsKLSAgICBib29sIGhh
c0N1c3RvbUZpbGwgPSBtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJu
OworICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IGZpbGxHcmFkaWVudCgpIHx8IGZpbGxQYXR0ZXJu
KCk7CiAgICAgaWYgKCFoYXNDdXN0b21GaWxsICYmIGVxdWFsV2lkdGhzICYmIGVxdWFsSGVpZ2h0
cyAmJiByYWRpaS50b3BMZWZ0KCkud2lkdGgoKSAqIDIgPT0gci53aWR0aCgpICYmIHJhZGlpLnRv
cExlZnQoKS5oZWlnaHQoKSAqIDIgPT0gci5oZWlnaHQoKSkKICAgICAgICAgQ0dDb250ZXh0Rmls
bEVsbGlwc2VJblJlY3QoY29udGV4dCwgcik7CiAgICAgZWxzZSB7CkBAIC05MTMsOSArOTE5LDkg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG8KICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsK
ICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hh
ZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAg
ICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDAp
OwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAg
U2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd0luc2V0U2hhZG93KCp0aGlzLCBy
ZWN0LCByb3VuZGVkSG9sZVJlY3QpOwogICAgIH0KIApAQCAtOTMwLDYgKzkzNiw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKICAgICBtX2Rh
dGEtPmNsaXAocmVjdCk7CiB9CkBAIC05NDAsMzEgKzk0NywzNSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAvLyB0byA8cmRhcjov
L3Byb2JsZW0vMTI1ODQ0OTI+LCBDR1JlY3RJbmZpbml0ZSBjYW4ndCBiZSB1c2VkIHdpdGggYW4g
YWNjZWxlcmF0ZWQgY29udGV4dCB0aGF0CiAgICAgLy8gaGFzIGNlcnRhaW4gdHJhbnNmb3JtcyB0
aGF0IGFyZW4ndCBqdXN0IGEgdHJhbnNsYXRpb24gb3IgYSBzY2FsZS4gQW5kIGR1ZSB0byA8cmRh
cjovL3Byb2JsZW0vMTQ2MzQ0NTM+CiAgICAgLy8gd2UgY2Fubm90IHVzZSBpdCBpbiBmb3IgYSBw
cmludGluZyBjb250ZXh0IGVpdGhlci4KKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtID0gZ2V0Q1RNKCk7
Ci0gICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUocGxhdGZv
cm1Db250ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkgPT0g
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsK
LSAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0SW5m
aW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpLCBy
ZWN0IH07Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBD
R0NvbnRleHRBZGRSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdHMsIDIpOwotICAgIENHQ29u
dGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZp
bml0ZSA9IENHQ29udGV4dEdldFR5cGUoY29udGV4dCkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYg
KHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIHx8ICghY3Rt
LmIoKSAmJiAhY3RtLmMoKSkpOworICAgIENHUmVjdCByZWN0c1syXSA9IHsgY2FuVXNlQ0dSZWN0
SW5maW5pdGUgPyBDR1JlY3RJbmZpbml0ZSA6IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChj
b250ZXh0KSwgcmVjdCB9OworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBD
R0NvbnRleHRBZGRSZWN0cyhjb250ZXh0LCByZWN0cywgMik7CisgICAgQ0dDb250ZXh0RU9DbGlw
KGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IFBh
dGgmIHBhdGgpCiB7Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRDbGlw
Qm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsK
KyAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0Jv
eChjb250ZXh0KSk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgQ0dDb250ZXh0
QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0gICAgQ0dD
b250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAgQ0dDb250ZXh0QWRkUGF0
aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBDR0NvbnRleHRFT0NsaXAoY29u
dGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKGNvbnN0IFBhdGgm
IHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgocGF0aCwgY2xpcFJ1bGUpOworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENHQ29udGV4dENs
aXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIENHQ29u
dGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENHQ29udGV4dEFkZFBh
dGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOworICAgICAgICBDR0Nv
bnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4
dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAKICAgICAgICAgaWYgKGNsaXBSdWxlID09IFdpbmRS
dWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwpAQCAt
OTc1LDExICs5ODYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICBtX2RhdGEtPmNsaXAocGF0aCk7CiB9
CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0
Zm9ybUNvbnRleHQoKSkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwpAQCAtMTAwMiwxNyArMTAwOCwxNCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgcmVzdG9yZSgp
OwogfQogCi1zdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHRmxvYXQmIHhPZmZzZXQsIENHRmxvYXQm
IHlPZmZzZXQpCitzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRl
ZChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYgeU9mZnNl
dCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCiAgICAgVU5V
U0VEX1BBUkFNKGNvbnRleHQpOwogICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0KTsKICAgICBVTlVT
RURfUEFSQU0oeU9mZnNldCk7CiAjZWxzZQotICAgIGlmIChjb250ZXh0LnJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCkpKQorICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zm
c2V0cyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV29yayBhcm91bmQgPHJk
YXI6Ly9wcm9ibGVtLzU1MzkzODg+IGJ5IGVuc3VyaW5nIHRoYXQgdGhlIG9mZnNldHMgd2lsbCBn
ZXQgdHJ1bmNhdGVkCkBAIC0xMDMwLDEwICsxMDMzLDU1IEBAIHN0YXRpYyB2b2lkIGFwcGx5U2hh
ZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJs
dXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNldENHTGluZUNhcChDR0NvbnRl
eHRSZWYgY29udGV4dCwgTGluZUNhcCBjYXApCiB7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgc3dpdGNoIChjYXApIHsK
KyAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6CisgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAoY29u
dGV4dCwga0NHTGluZUNhcEJ1dHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExpbmVDYXA6
OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBS
b3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUNhcDo6U3F1YXJlOgorICAgICAg
ICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBTcXVhcmUpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CiAKK3N0YXRpYyB2b2lkIHNldENHTGluZUpvaW4oQ0dDb250ZXh0
UmVmIGNvbnRleHQsIExpbmVKb2luIGpvaW4pCit7CisgICAgc3dpdGNoIChqb2luKSB7CisgICAg
Y2FzZSBMaW5lSm9pbjo6TWl0ZXI6CisgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKGNvbnRl
eHQsIGtDR0xpbmVKb2luTWl0ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExpbmVKb2lu
OjpSb3VuZDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4dCwga0NHTGluZUpv
aW5Sb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUpvaW46OkJldmVsOgorICAg
ICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pbkJldmVsKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXRDR01pdGVyTGltaXQoQ0dD
b250ZXh0UmVmIGNvbnRleHQsIGZsb2F0IGxpbWl0KQoreworICAgIENHQ29udGV4dFNldE1pdGVy
TGltaXQoY29udGV4dCwgbGltaXQpOworfQorCitzdGF0aWMgdm9pZCBzZXRDR0xpbmVEYXNoKENH
Q29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9m
ZnNldCkKK3sKKyAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKKyAgICAgICAgZmxvYXQgbGVuZ3Ro
ID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tpXSk7Cisg
ICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChkYXNoT2Zm
c2V0LCBsZW5ndGgpICsgbGVuZ3RoOworICAgIH0KKyAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChj
b250ZXh0LCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKK30KKwor
c3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coQ0dDb250ZXh0UmVmIGNvbnRleHQsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNv
bnN0IENvbG9yJiBjb2xvciwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK3sKICAgICBp
ZiAob2Zmc2V0LmlzWmVybygpICYmICFibHVyKSB7CiAgICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTA0NSw3ICsxMDkzLDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICBDR0Zsb2F0
IHlPZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9hdCBibHVyUmFkaXVzID0gYmx1
cjsKIAotICAgIGlmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkp
IHsKKyAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAgICAgICAgIENHQWZmaW5l
VHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogCiAg
ICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSArIHVz
ZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTEwNjYsNyArMTExNCw4IEBAIHN0
YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgLy8gRXh0cmVtZSAiYmx1ciIgdmFsdWVzIGNhbiBt
YWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcgdGltZXMsIHNvIGNsYW1w
CiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5hcnJvd1ByZWNpc2lvblRv
Q0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVl
ZGVkKGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7CisgICAgaWYgKHJlbmRlcmlu
Z01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIGFwcGx5U2hhZG93
T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOwogCiAg
ICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMgbWVhbnMgdGhhdCB0aGUg
Y29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBhbmQgd2Ugc2hvdWxkIHRo
ZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3IuCkBAIC0xMDc2LDQ0ICsx
MTI1LDgxIEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgICAgIENHQ29udGV4dFNldFNo
YWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLCBibHVy
UmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKS5nZXQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgYXV0byBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkKKyAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgo
Y29udGV4dCwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCAwLmYpKTsKKyAgICBhdXRv
IGNvbnRleHQgPSBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAg
IENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3Io
c3RhdGUuc3Ryb2tlQ29sb3IpLmdldCgpKTsKKyAgICBmb3IgKGF1dG8gY2hhbmdlIDogc3RhdGUo
KS5jaGFuZ2VzKCkpIHsKKyAgICAgICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE06CisgICAgICAgICAgICBDR0NvbnRleHRT
ZXRDVE0oY29udGV4dCwgc3RhdGUoKS5nZXRDVE0oKSk7CisgICAgICAgICAgICBicmVhazsKIAot
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hh
bmdlKSkKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUuZmlsbENvbG9yKTsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1c2g6Cisg
ICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZSgpLmZpbGxCcnVzaCgpLmNv
bG9yKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0QWxw
aGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgICAgIENHQ29udGV4dFNldExp
bmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZSgpLnN0cm9rZVRoaWNrbmVzcygpLCAwLmYp
KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKLSAgICAgICAgc2V0Q0dCbGVuZE1vZGUoY29u
dGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2g6CisgICAgICAg
ICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0Nv
bG9yKHN0YXRlKCkuc3Ryb2tlQnJ1c2goKS5jb2xvcigpKS5nZXQoKSk7CisgICAgICAgICAgICBi
cmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4
dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2Rl
KGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSkpOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXA6CisgICAgICAg
ICAgICBzZXRDR0xpbmVDYXAoY29udGV4dCwgc3RhdGUoKS5saW5lQ2FwKCkpOworICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlh
bGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luOgorICAgICAgICAgICAgc2V0Q0dMaW5l
Sm9pbihjb250ZXh0LCBzdGF0ZSgpLmxpbmVKb2luKCkpOworICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290
aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY29u
dGV4dCwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoOgorICAgICAgICAgICAgc2V0Q0dMaW5lRGFzaChj
b250ZXh0LCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0ZSgpLmxpbmVEYXNoKCkub2Zm
c2V0KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAg
ICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwgY2dJbnRlcnBvbGF0
aW9uUXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSk7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoKKyAgICAgICAgICAg
IHNldENHTWl0ZXJMaW1pdChjb250ZXh0LCBzdGF0ZSgpLm1pdGVyTGltaXQoKSk7CisgICAgICAg
ICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKSkKLSAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMsIHN0YXRlLnNoYWRv
d09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKLX0KKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVNb2RlOgor
ICAgICAgICAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgc3RhdGUoKS5jb21wb3NpdGVNb2Rl
KCkub3BlcmF0aW9uLCBzdGF0ZSgpLmNvbXBvc2l0ZU1vZGUoKS5ibGVuZE1vZGUpOworICAgICAg
ICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldE1pdGVyTGltaXQoZmxv
YXQgbGltaXQpCi17Ci0gICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRleHQo
KSwgbGltaXQpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRy
b3BTaGFkb3c6CisgICAgICAgICAgICBzZXRDR1NoYWRvdyhjb250ZXh0LCByZW5kZXJpbmdNb2Rl
KCksIHN0YXRlKCkuZHJvcFNoYWRvdygpLm9mZnNldCwgc3RhdGUoKS5kcm9wU2hhZG93KCkuYmx1
clJhZGl1cywgc3RhdGUoKS5kcm9wU2hhZG93KCkuY29sb3IsIHN0YXRlKCkuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkFscGhhOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0
QWxwaGEoY29udGV4dCwgc3RhdGUoKS5hbHBoYSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eToKKyAgICAgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5
KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUoKS5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlOgorICAgICAgICAgICAgQ0dD
b250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRl
KCkudGV4dERyYXdpbmdNb2RlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzOgorICAgICAg
ICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHN0YXRlKCkuc2hvdWxk
QW50aWFsaWFzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTbW9vdGhGb250czoKKyAgICAgICAgICAgIENH
Q29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRlKCkuc2hvdWxkU21vb3Ro
Rm9udHMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkaWRBcHBseVN0YXRlQ2hhbmdl
cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByKQpAQCAtMTEyNSw3ICsxMjExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG1fc3Rh
dGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICBpZiAoc3Ryb2tlR3JhZGllbnQoKSkgewogICAgICAg
ICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRvdWJsZUxpbmVX
aWR0aCA9IGxpbmVXaWR0aCAqIDI7CiAgICAgICAgICAgICBmbG9hdCBhZGp1c3RlZFdpZHRoID0g
Y2VpbGYocmVjdC53aWR0aCgpICsgZG91YmxlTGluZVdpZHRoKTsKQEAgLTExMzUsNyArMTIyMSw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBhdXRvIGxheWVyID0gYWRvcHRDRihD
R0xheWVyQ3JlYXRlV2l0aENvbnRleHQoY29udGV4dCwgbGF5ZXJTaXplLCAwKSk7CiAKICAgICAg
ICAgICAgIENHQ29udGV4dFJlZiBsYXllckNvbnRleHQgPSBDR0xheWVyR2V0Q29udGV4dChsYXll
ci5nZXQoKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IGxpbmVXaWR0
aDsKICAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChsYXllckNvbnRleHQsIGxpbmVX
aWR0aCk7CiAKICAgICAgICAgICAgIC8vIENvbXBlbnNhdGUgZm9yIHRoZSBsaW5lIHdpZHRoLCBv
dGhlcndpc2UgdGhlIGxheWVyJ3MgdG9wLWxlZnQgY29ybmVyIHdvdWxkIGJlCkBAIC0xMTQ5LDgg
KzEyMzQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUmVj
dChsYXllckNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhX
aXRoU3Ryb2tlZFBhdGgobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAo
bGF5ZXJDb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRl
eHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBt
X3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAg
Q0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7
CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogCiAg
ICAgICAgICAgICBjb25zdCBmbG9hdCBkZXN0aW5hdGlvblggPSByb3VuZGYocmVjdC54KCkgLSBs
aW5lV2lkdGgpOwogICAgICAgICAgICAgY29uc3QgZmxvYXQgZGVzdGluYXRpb25ZID0gcm91bmRm
KHJlY3QueSgpIC0gbGluZVdpZHRoKTsKQEAgLTExNjEsMTMgKzEyNDYsMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgcmVjdCk7CiAg
ICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsK
ICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAgICAgICBDR0NvbnRl
eHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3Jt
KTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKKyAg
ICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlUGF0
dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBseVN0cm9rZVBhdHRl
cm4oKTsKIAogICAgIC8vIFVzaW5nIENHQ29udGV4dEFkZFJlY3QgYW5kIENHQ29udGV4dFN0cm9r
ZVBhdGggdG8gc3Ryb2tlIHJlY3QgcmF0aGVyIHRoYW4KQEAgLTExODIsOTQgKzEyNjcsNiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbGluZVdpZHRoKQogICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCi17Ci0gICAg
c3dpdGNoIChjYXApIHsKLSAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6Ci0gICAgICAgIENHQ29udGV4
dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBMaW5lQ2FwOjpSb3VuZDoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFJvdW5kKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBMaW5lQ2FwOjpTcXVhcmU6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVDYXAo
cGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBTcXVhcmUpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGlmIChkYXNoT2Zmc2V0IDwg
MCkgewotICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGxlbmd0aCArPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgICAg
IGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7Ci0gICAgfQot
ICAgIENHQ29udGV4dFNldExpbmVEYXNoKHBsYXRmb3JtQ29udGV4dCgpLCBkYXNoT2Zmc2V0LCBk
YXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBzd2l0Y2ggKGpvaW4pIHsKLSAg
ICBjYXNlIExpbmVKb2luOjpNaXRlcjoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxh
dGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luTWl0ZXIpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIExpbmVKb2luOjpSb3VuZDoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZv
cm1Db250ZXh0KCksIGtDR0xpbmVKb2luUm91bmQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IExpbmVKb2luOjpCZXZlbDoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZvcm1D
b250ZXh0KCksIGtDR0xpbmVKb2luQmV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsK
LSAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKLSAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwotICAgIG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgQ0dDb250ZXh0
Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7Ci0gICAgbV9kYXRhLT5yb3RhdGUo
YW5nbGUpOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVu
dGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250
ZXh0KCksIHgsIHkpOwotICAgIG1fZGF0YS0+dHJhbnNsYXRlKHgsIHkpOwotICAgIG1fZGF0YS0+
bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCi17Ci0gICAgQ0dDb250ZXh0Q29uY2F0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0
cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRh
LT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKLXsKLSAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5z
Zm9ybSk7Ci0gICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPm1fdXNl
clRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotQWZmaW5l
VHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGlu
Y2x1ZGVTY2FsZSkgY29uc3QKLXsKLSAgICAvLyBUaGUgQ1RNIHVzdWFsbHkgaW5jbHVkZXMgdGhl
IGRldmljZVNjYWxlRmFjdG9yIGV4Y2VwdCBpbiBXZWJLaXQgMSB3aGVuIHRoZQotICAgIC8vIGNv
bnRlbnQgaXMgbm9uLWNvbXBvc2l0ZWQsIHNpbmNlIHRoZSBzY2FsZSBmYWN0b3IgaXMgaW50ZWdy
YXRlZCBhdCBhIGxvd2VyCi0gICAgLy8gbGV2ZWwuIFRvIGd1YXJhbnRlZSB0aGUgZGV2aWNlU2Nh
bGUgaXMgaW5jbHVkZWQsIHdlIGNhbiB1c2UgdGhpcyBDRyBBUEkuCi0gICAgaWYgKGluY2x1ZGVT
Y2FsZSA9PSBEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKQotICAgICAgICByZXR1cm4gQ0dD
b250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShwbGF0Zm9ybUNvbnRleHQo
KSk7Ci0KLSAgICByZXR1cm4gQ0dDb250ZXh0R2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpKTsKLX0K
LQogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsKICAgICAvLyBJ
dCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFjZS4g
VGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCkBAIC0xMjgwLDcgKzEyNzcsOSBAQCBGbG9hdFJlY3Qg
R3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBSb3VuZGluZwogICAgIGlmIChtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25v
d25Ub0JlSWRlbnRpdHkpCiAgICAgICAgIHJldHVybiByb3VuZGVkSW50UmVjdChyZWN0KTsKIAot
ICAgIENHQWZmaW5lVHJhbnNmb3JtIGRldmljZU1hdHJpeCA9IENHQ29udGV4dEdldFVzZXJTcGFj
ZVRvRGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxhdGZvcm1Db250ZXh0KCkpOworICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBDR0FmZmluZVRyYW5zZm9y
bSBkZXZpY2VNYXRyaXggPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNm
b3JtKGNvbnRleHQpOwogICAgIGlmIChDR0FmZmluZVRyYW5zZm9ybUlzSWRlbnRpdHkoZGV2aWNl
TWF0cml4KSkgewogICAgICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25U
b0JlSWRlbnRpdHkgPSB0cnVlOwogICAgICAgICByZXR1cm4gcm91bmRlZEludFJlY3QocmVjdCk7
CkBAIC0xMzE5LDYgKzEzMTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lcwogICAgIGlmICgh
d2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0cm9r
ZUNvbG9yKCkpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5k
QW50aWFsaWFzaW5nTW9kZUZvclRleHQoRmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUod2lkdGhz
Lmxhc3QoKSwgdGhpY2tuZXNzKSksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsKQEAgLTEz
NjQsMTIgKzEzNjQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXMKICAgICB9CiAKICAgICBp
ZiAoZmlsbENvbG9ySXNOb3RFcXVhbFRvU3Ryb2tlQ29sb3IpCi0gICAgICAgIHNldENHRmlsbENv
bG9yKHBsYXRmb3JtQ29udGV4dCgpLCBsb2NhbFN0cm9rZUNvbG9yKTsKKyAgICAgICAgc2V0Q0dG
aWxsQ29sb3IoY29udGV4dCwgbG9jYWxTdHJva2VDb2xvcik7CiAKLSAgICBDR0NvbnRleHRGaWxs
UmVjdHMocGxhdGZvcm1Db250ZXh0KCksIGRhc2hCb3VuZHMuZGF0YSgpLCBkYXNoQm91bmRzLnNp
emUoKSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3RzKGNvbnRleHQsIGRhc2hCb3VuZHMuZGF0YSgp
LCBkYXNoQm91bmRzLnNpemUoKSk7CiAKICAgICBpZiAoZmlsbENvbG9ySXNOb3RFcXVhbFRvU3Ry
b2tlQ29sb3IpCi0gICAgICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBmaWxs
Q29sb3IoKSk7CisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGZpbGxDb2xvcigpKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxp
bmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkBAIC0xNDEyLDE3ICsxNDEyLDE4IEBAIFJl
bmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q0c6OnJlbmRlcmluZ01vZGUoKSBjb25zdAogdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvcikKIHsKICAgICBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKICAgICAvLyBDb3JlR3JhcGhpY3MgZXhwZWN0cyB0aGUgYmFzZSBDVE0g
b2YgYSBIaURQSSBjb250ZXh0IHRvIGhhdmUgdGhlIHNjYWxlIGZhY3RvciBhcHBsaWVkIHRvIGl0
LgogICAgIC8vIEZhaWxpbmcgdG8gY2hhbmdlIHRoZSBiYXNlIGxldmVsIENUTSB3aWxsIGNhdXNl
IGNlcnRhaW4gQ0cgZmVhdHVyZXMsIHN1Y2ggYXMgZm9jdXMgcmluZ3MsCiAgICAgLy8gdG8gZHJh
dyB3aXRoIGEgc2NhbGUgZmFjdG9yIG9mIDEgcmF0aGVyIHRoYW4gdGhlIGFjdHVhbCBzY2FsZSBm
YWN0b3IuCi0gICAgQ0dDb250ZXh0U2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgQ0dBZmZp
bmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgpKSwg
ZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgQ0dDb250ZXh0U2V0
QmFzZUNUTShjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJhc2VD
VE0oY29udGV4dCksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpCiB7CiAgICAgLy8gQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0
cyBzb2xpZCBjb2xvcnMuCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUu
ZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkgfHwgZmlsbFBhdHRlcm4oKSkg
ewogICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTE0MzQsNyArMTQzNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewogICAgIC8vIENHQ29u
dGV4dFN0cm9rZUVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0cyBzb2xpZCBjb2xvcnMuCi0gICAg
aWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Cisg
ICAgaWYgKHN0cm9rZUdyYWRpZW50KCkgfHwgc3Ryb2tlUGF0dGVybigpKSB7CiAgICAgICAgIHN0
cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
NDY4LDkgKzE0NjksMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRpb25B
dFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2kKIAogYm9vbCBHcmFwaGlj
c0NvbnRleHRDRzo6Y2FuVXNlU2hhZG93Qmx1cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChyZW5k
ZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJl
ZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIHJldHVy
biAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhh
c0JsdXJyZWRTaGFkb3coKSAmJiAhc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKTsKIH0KIAotfQog
Ci0jZW5kaWYKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oCmluZGV4IDQ2OGE0NGJhYTg2ZWU1MjYxOWQyNTVmOTM5NDNhOTc1NWJhYzlmYWIu
LmY5OWMzZDliOWJkMjgyNTg2NWZkZjdlYTgwYjJhZjAwZTM0YjUyZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTAs
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNSw1MyArMjUsMTMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
ZiBVU0UoQ0cpCisKICNpbmNsdWRlICJDb2xvclNwYWNlQ0cuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DR0FmZmluZVRyYW5zZm9ybSBn
ZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZik7Ci0KLWNsYXNzIENHQ29udGV4dFN0YXRlU2F2
ZXIgewotcHVibGljOgotICAgIENHQ29udGV4dFN0YXRlU2F2ZXIoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgICAgICA6IG1fY29udGV4dChjb250
ZXh0KQotICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0gICAgewot
ICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUobV9jb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgfkNHQ29udGV4dFN0YXRlU2F2ZXIo
KQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2F2
ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBD
R0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUg
PSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUobV9j
b250ZXh0KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOwotICAgIH0KLSAgICAK
LSAgICBib29sIGRpZFNhdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2F2ZUFu
ZFJlc3RvcmU7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBDR0NvbnRleHRSZWYgbV9jb250
ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KIGNsYXNzIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiBwdWJsaWM6
CiAgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmKTsKQEAgLTg1LDY5ICs0NSw0OCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICAg
ICBDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lk
IHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICB2b2lkIHNldElz
Q0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7CisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkg
Y29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkg
ZmluYWw7CiAKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5h
bDsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAgICAgdm9pZCBhcHBseVN0
cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsK
LSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZp
bmFsOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZp
bmFsOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAogICAgIHZvaWQg
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwogCi0gICAgdXNpbmcg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0KLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRl
eHQoYm9vbCkgZmluYWw7Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWw7
Ci0KLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwotICAgIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgZmluYWw7CiAKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCi0gICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLQogICAgIHZvaWQgY2xpcFBhdGgoY29u
c3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOworICAgIHZvaWQg
Y2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOwogCi0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Cisg
ICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIHNl
dExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNo
QXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2luKExp
bmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwog
Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9p
ZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOwogCi0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKLSAg
ICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcm90YXRlKGZs
b2F0IGFuZ2xlSW5SYWRpYW5zKSBmaW5hbDsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAg
QWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAKLSAg
ICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGlu
Z01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFs
OwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwpAQCAtMTU2LDE4
ICs5NSwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgog
Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KSBmaW5hbDsKIAorICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwogICAgIHZvaWQgZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgYWRk
RGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwogCiAgICAgYm9vbCBzdXBw
b3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBkYXRlU3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncykgZmluYWw7CisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9p
bnQmKSBmaW5hbDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5Vc2VTaGFkb3dCbHVyKCkgY29uc3Q7
CiAKQEAgLTE3NSw5ICsxMTcsMTYgQEAgcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7CiAjZW5k
aWYKIAorICAgIENHQ29udGV4dFJlZiBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9kYXRhIHsg
bnVsbHB0ciB9OwogfTsKIAotfQorQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShD
R0NvbnRleHRSZWYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNpbmNsdWRlICJDR0Nv
bnRleHRTdGF0ZVNhdmVyLmgiCiAKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmlu
ZGV4IGU2Y2UyZmI5NzI0N2E2Yjg2YzA5YjFhZDM2MTcwMWMyZWMzZTg2MjUuLmFmMDBhMDEzMzQ3
ZTBjZDg1YTMwYjg4NGViYzc5ZjMyZjFlMjMxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0xMjcs
NyArMTI3LDcgQEAgYm9vbCBQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2EKIAogICAgIC8vIE9sZCBhbmQgbmV3
IGNvbnRleHQgc2NhbGluZyBmYWN0b3JzIGhhdmUgdG8gbWF0Y2ggYXMgd2VsbC4KICAgICBBZmZp
bmVUcmFuc2Zvcm06OkRlY29tcG9zZWRUeXBlIGRlY29tcG9zZWRUcmFuc2Zvcm07Ci0gICAgY29u
dGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KS5kZWNvbXBvc2UoZGVjb21wb3NlZFRyYW5zZm9ybSk7CisgICAgY29udGV4dC5nZXRDVE0oKS5k
ZWNvbXBvc2UoZGVjb21wb3NlZFRyYW5zZm9ybSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm06OkRl
Y29tcG9zZWRUeXBlIGNhY2hlZERlY29tcG9zZWRUcmFuc2Zvcm07CiAgICAgbV9jYWNoZWRUcmFu
c2Zvcm0uZGVjb21wb3NlKGNhY2hlZERlY29tcG9zZWRUcmFuc2Zvcm0pOwpAQCAtMjU1LDcgKzI1
NSw3IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgdHJhbnNmb3JtQ29udGV4dEZvclBh
aW50aW5nKGJ1ZmZlckNvbnRleHQsIGRzdFJlY3QsIEZsb2F0UmVjdChtX2NhY2hlZEltYWdlUmVj
dC5sb2NhdGlvbigpLCBzcmNSZWN0LnNpemUoKSkpOwogICAgIGRyYXdQREZQYWdlKGJ1ZmZlckNv
bnRleHQpOwogCi0gICAgbV9jYWNoZWRUcmFuc2Zvcm0gPSBjb250ZXh0LmdldENUTShHcmFwaGlj
c0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIG1fY2FjaGVkVHJh
bnNmb3JtID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBtX2NhY2hlZERlc3RpbmF0aW9uUmVjdCA9
IGRzdFJlY3Q7CiAgICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0gc3JjUmVjdDsKICAgICArK21fY2Fj
aGluZ0NvdW50Rm9yVGVzdGluZzsKQEAgLTM2Myw2ICszNjMsOCBAQCB2b2lkIFBERkRvY3VtZW50
SW1hZ2U6OmRyYXdQREZQYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIAogICAgIGNvbnRl
eHQudHJhbnNsYXRlKC1tX2Nyb3BCb3gubG9jYXRpb24oKSk7CiAKKyAgICBjb250ZXh0LmFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisKICAgICAvLyBDR1BERiBwYWdlcyBhcmUgaW5kZXhlZCBmcm9tIDEu
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgQ0dDb250ZXh0RHJhd1BERlBhZ2VXaXRoQW5ub3Rh
dGlvbnMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBhZ2UobV9k
b2N1bWVudC5nZXQoKSwgMSksIG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKaW5kZXggZDY4OWE1MWE4OTEwMmE1MDkwNDU1OWI0NDIy
MzY5ZGUxNDcwMzMzNS4uZmRlZWY2YjM4ZDBjNWI1NTU2NzM3ZWI3ZjQ0YWYyZjJmYzlhNDQ0OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCkBA
IC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICBHcmFwaGljc0Nv
bnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgc3Ryb2tlU3R5bGVBcHBsaWVy
KGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBib29sIGhpdFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRo
Q29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9rZSk7CisgICAgYm9vbCBo
aXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoZ3JhcGhpY3NDb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLCBwb2ludCwga0NHUGF0aFN0cm9rZSk7CiAgICAgQ0dDb250ZXh0UmVz
dG9yZUdTdGF0ZShjb250ZXh0KTsKIAogICAgIHJldHVybiBoaXRTdWNjZXNzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1Jl
Y29yZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGVmYmMxZTQ5NTQ0MWJl
ZGU3MzRlOTQ4ZGQyNmQzNzE0NDE2NTUzZTAuLmU5YjdhYzRkN2Y0Y2JmNzQxMjg5MzliZmE4YzA0
ZTc2NWEwZGJkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4
dC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RHJhd0dseXBoc1JlY29yZGVyLmgiCiAKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1
ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZvbnQuaCIK
QEAgLTM1LDQ5ICszNCw0MSBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCiAjaW5jbHVk
ZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiBQ
TEFURk9STShXSU4pCi0jaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KLSNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJl
ZiBiZWdpbkxheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0
YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0ZEaWN0aW9u
YXJ5UmVmLCBDR0NvbnRleHREZWxlZ2F0ZVJlZikKK3N0YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJl
ZiBiZWdpbkxheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0
YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCwgQ0ZEaWN0aW9uYXJ5UmVmLCBDR0Nv
bnRleHREZWxlZ2F0ZVJlZikKIHsKICAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0g
KnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5m
byhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29yZEJlZ2luTGF5ZXIocnN0YXRlLCBnc3Rh
dGUsIHJlY3QpOworICAgIHJlY29yZGVyLnJlY29yZEJlZ2luTGF5ZXIoZ3N0YXRlKTsKICAgICBy
ZXR1cm4gZGVsZWdhdGU7CiB9CiAKLXN0YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJlZiBlbmRMYXll
cihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3Rh
dGUsIENHR1N0YXRlUmVmIGdzdGF0ZSkKK3N0YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJlZiBlbmRM
YXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYgZ3N0YXRlKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIg
PSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJ
bmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRW5kTGF5ZXIocnN0YXRlLCBnc3Rh
dGUpOworICAgIHJlY29yZGVyLnJlY29yZEVuZExheWVyKGdzdGF0ZSk7CiAgICAgcmV0dXJuIGRl
bGVnYXRlOwogfQogCi1zdGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENHQ29udGV4dERlbGVnYXRl
UmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0
YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSogdG0sIGNvbnN0IENHR2x5cGggZ2x5cGhzW10s
IGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKK3N0YXRpYyBDR0Vycm9y
IGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3Rh
dGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25z
dCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291
bnQpCiB7Ci0gICAgaWYgKENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSA+IDApIHsKLSAgICAgICAg
RHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVj
b3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICAgICAgcmVj
b3JkZXIucmVjb3JkRHJhd0dseXBocyhyc3RhdGUsIGdzdGF0ZSwgdG0sIGdseXBocywgcG9zaXRp
b25zLCBjb3VudCk7Ci0gICAgfQorICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAq
c3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZv
KGRlbGVnYXRlKSk7CisgICAgcmVjb3JkZXIucmVjb3JkRHJhd0dseXBocyhnc3RhdGUsIGdseXBo
cywgcG9zaXRpb25zLCBjb3VudCk7CiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAot
c3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBD
R1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVj
dCwgQ0dJbWFnZVJlZiBpbWFnZSkKK3N0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShDR0NvbnRleHRE
ZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0
YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJlZiBpbWFnZSkKIHsKICAgICBEcmF3R2x5cGhzUmVj
b3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29u
dGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29yZERyYXdJ
bWFnZShyc3RhdGUsIGdzdGF0ZSwgcmVjdCwgaW1hZ2UpOworICAgIHJlY29yZGVyLnJlY29yZERy
YXdJbWFnZShnc3RhdGUsIHJlY3QsIGltYWdlKTsKICAgICByZXR1cm4ga0NHRXJyb3JTdWNjZXNz
OwogfQogCi1VbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBEcmF3R2x5cGhzUmVjb3JkZXI6OmNy
ZWF0ZUludGVybmFsQ29udGV4dCgpCitzdGF0aWMgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4g
Y3JlYXRlSW50ZXJuYWxDb250ZXh0KERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIpCiB7Ci0g
ICAgYXV0byBjb250ZXh0RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRl
KHRoaXMpKTsKKyAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVs
ZWdhdGVDcmVhdGUoJnJlY29yZGVyKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFj
ayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlQmVnaW5MYXllciwgcmVpbnRlcnByZXRfY2FzdDxD
R0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmYmVnaW5MYXllcikpOwogICAgIENHQ29udGV4dERl
bGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZUVuZExheWVyLCByZWlu
dGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZlbmRMYXllcikpOwogICAg
IENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURy
YXdHbHlwaHMsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJldl
YkNvcmU6OmRyYXdHbHlwaHMpKTsKQEAgLTg2LDY3ICs3NywxNSBAQCBVbmlxdWVSZWY8R3JhcGhp
Y3NDb250ZXh0PiBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCiAg
ICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0Q0c+KGNvbnRleHQuZ2V0KCkp
OwogfQogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0Nv
bnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhz
LCBEZXJpdmVGb250RnJvbUNvbnRleHQgZGVyaXZlRm9udEZyb21Db250ZXh0KQotICAgIDogbV9v
d25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBo
aWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVj
b25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQgZGVyaXZlRm9udEZyb21D
b250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQoZGVzdGluYXRpb25Db250ZXh0KQog
ICAgICwgbV9kZWNvbnN0cnVjdERyYXdHbHlwaHMoZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAg
ICwgbV9kZXJpdmVGb250RnJvbUNvbnRleHQoZGVyaXZlRm9udEZyb21Db250ZXh0KQotICAgICwg
bV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50ZXJuYWxDb250ZXh0KCkpCisgICAgLCBtX2ludGVy
bmFsQ29udGV4dChjcmVhdGVJbnRlcm5hbENvbnRleHQoKnRoaXMpKQogewogfQogCi12b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCi17Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5maWxsQ29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnQ7Ci0gICAgbV9vcmln
aW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0YXRl
LmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5
bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5maWxsUGF0dGVybjsKLQotICAgIG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5zdHJva2VDb2xvcjsKLSAgICBt
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQgPSBjb250ZXh0U3RhdGUuc3Ryb2tl
R3JhZGllbnQ7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAg
ICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5zdHJv
a2VQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5hbFN0YXRlLmN0bSA9IG1fb3duZXIuZ2V0Q1RNKCk7
IC8vIEZJWE1FOiBEZWFsIHdpdGggYmFzZSBDVE0uCi0KLSAgICBtX29yaWdpbmFsU3RhdGUuc2hh
ZG93Lm9mZnNldCA9IGNvbnRleHRTdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgbV9vcmlnaW5hbFN0
YXRlLnNoYWRvdy5ibHVyID0gY29udGV4dFN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgbV9vcmlnaW5h
bFN0YXRlLnNoYWRvdy5jb2xvciA9IGNvbnRleHRTdGF0ZS5zaGFkb3dDb2xvcjsKLSAgICBtX29y
aWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPSBjb250ZXh0U3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXM7Ci0KLSAgICBtX2N1cnJlbnRTdGF0ZSA9IG1fb3JpZ2luYWxTdGF0
ZTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxDb250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCi17Ci0gICAgaWYgKG1f
b3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAgICAgICBtX2ludGVy
bmFsQ29udGV4dC0+c2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3Ip
OwotICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQpCi0gICAg
ICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5m
aWxsU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxQYXR0ZXJu
KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAgIGlmICht
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAgICAgICBtX2lu
dGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGll
bnQpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudCgqbV9vcmln
aW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5
bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCht
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7Ci0gICAgICAgIGlmIChtX29yaWdp
bmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1faW50ZXJuYWxDb250
ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVy
bik7Ci0gICAgfQotCi0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldENUTShtX29yaWdpbmFsU3Rh
dGUuY3RtKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOwotICAgIG1faW50
ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciwg
Y29udGV4dFN0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwotCi0gICAgbV9pbnRlcm5hbENvbnRleHQt
PnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLX0KLQot
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9u
dCYgZm9udCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYgZm9udCwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBBU1NFUlQoQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lk
ZW50aXR5KENURm9udEdldE1hdHJpeChmb250LnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKSkpOwog
CkBAIC0xNTYsMTA0ICs5NSwzOCBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUlu
dGVybmFsQ29udGV4dChjb25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5nTQogICAgIG1fb3Jp
Z2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4KGZvbnQpOwogICAgIGlm
IChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpW
ZXJ0aWNhbCkKICAgICAgICAgbV9vcmlnaW5hbFRleHRNYXRyaXggPSBjb21wdXRlVmVydGljYWxU
ZXh0TWF0cml4KGZvbnQsIG1fb3JpZ2luYWxUZXh0TWF0cml4KTsKLQotICAgIGF1dG8mIGNvbnRl
eHRTdGF0ZSA9IG1fb3duZXIuc3RhdGUoKTsKLSAgICBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29u
dGV4dFN0YXRlKTsKLSAgICBwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb250ZXh0U3RhdGUpOwog
fQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKQor
R3JhcGhpY3NDb250ZXh0U3RhdGUgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KCkKIHsKLSAgICB1cGRhdGVDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0gICAgdXBk
YXRlRmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IsIG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQuZ2V0KCksIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUu
cGF0dGVybi5nZXQoKSk7Ci0gICAgdXBkYXRlU3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0YXRlLnN0
cm9rZVN0eWxlLmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQuZ2V0
KCksIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuLmdldCgpKTsKLSAgICB1cGRh
dGVTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciwgbV9vcmlnaW5hbFN0YXRl
LnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID8gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlllcyA6
IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpObyk7CisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0g
bV9kZXN0aW5hdGlvbkNvbnRleHQuc3RhdGUoKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+bWVy
Z2VTdGF0ZURpZmZzKG9yaWdpbmFsU3RhdGUpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5hcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJldHVybiBvcmlnaW5hbFN0YXRlOwogfQogCi12b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlRmlsbENvbG9yKGNvbnN0IENvbG9yJiBuZXdDb2xvciwg
R3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJuKiBuZXdQYXR0ZXJuKQordm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIG9yaWdpbmFsU3RhdGUpCiB7Ci0gICAgLy8gVGhpcyBjaGVjayBsb29rcyB3cm9u
ZyBidXQgaXQgYWN0dWFsbHkgaXNuJ3QsIGZvciBvdXIgbGltaXRlZCB1c2UuCi0gICAgLy8gQ1Qg
d2lsbCBvbmx5IGV2ZXIgc2V0IHRoaXMgdG8gYSBzb2xpZCBjb2xvciwgd2hpY2ggdGhpcyBpcyB0
aGUgY29ycmVjdCBjaGVjayBmb3IuCi0gICAgLy8gSW4gY29uY2x1ZGVJbnRlcm5hbENvbnRleHQo
KSB3ZSBzZXQgaXQgYmFjayB0byB3aGF0IGl0IHdhcyBvcmlnaW5hbGx5LCB3aGljaCB0aGlzIGNo
ZWNrIHdvcmtzIGNvcnJlY3RseSBmb3IgdG9vLgotICAgIGlmIChuZXdDb2xvciA9PSBtX2N1cnJl
bnRTdGF0ZS5maWxsU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLmZpbGxDb2xvciA9IG5ld0NvbG9y
OwotICAgIGlmIChuZXdHcmFkaWVudCkKLSAgICAgICAgbmV3U3RhdGUuZmlsbEdyYWRpZW50ID0g
bmV3R3JhZGllbnQ7Ci0gICAgaWYgKG5ld1BhdHRlcm4pCi0gICAgICAgIG5ld1N0YXRlLmZpbGxQ
YXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0YXRl
LCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UgfSk7Ci0gICAgbV9jdXJy
ZW50U3RhdGUuZmlsbFN0eWxlLmNvbG9yID0gbmV3Q29sb3I7CisgICAgbV9kZXN0aW5hdGlvbkNv
bnRleHQubWVyZ2VTdGF0ZURpZmZzKG9yaWdpbmFsU3RhdGUpOwogfQogCi12b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIG5ld0NvbG9yLCBHcmFk
aWVudCogbmV3R3JhZGllbnQsIFBhdHRlcm4qIG5ld1BhdHRlcm4pCit2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6cmVjb3JkQmVnaW5MYXllcihDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7Ci0gICAgLy8g
VGhpcyBjaGVjayBsb29rcyB3cm9uZyBidXQgaXQgYWN0dWFsbHkgaXNuJ3QsIGZvciBvdXIgbGlt
aXRlZCB1c2UuCi0gICAgLy8gQ1Qgd2lsbCBvbmx5IGV2ZXIgc2V0IHRoaXMgdG8gYSBzb2xpZCBj
b2xvciwgd2hpY2ggdGhpcyBpcyB0aGUgY29ycmVjdCBjaGVjayBmb3IuCi0gICAgLy8gSW4gY29u
Y2x1ZGVJbnRlcm5hbENvbnRleHQoKSB3ZSBzZXQgaXQgYmFjayB0byB3aGF0IGl0IHdhcyBvcmln
aW5hbGx5LCB3aGljaCB0aGlzIGNoZWNrIHdvcmtzIGNvcnJlY3RseSBmb3IgdG9vLgotICAgIGlm
IChuZXdDb2xvciA9PSBtX2N1cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3U3RhdGU7Ci0gICAgbmV3U3Rh
dGUuc3Ryb2tlQ29sb3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3JhZGllbnQpCi0gICAgICAg
IG5ld1N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbmV3R3JhZGllbnQ7Ci0gICAgaWYgKG5ld1BhdHRl
cm4pCi0gICAgICAgIG5ld1N0YXRlLnN0cm9rZVBhdHRlcm4gPSBuZXdQYXR0ZXJuOwotICAgIG1f
b3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlIH0pOwotICAgIG1fY3VycmVudFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9y
ID0gbmV3Q29sb3I7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdl
dENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5iZWdpblRyYW5zcGFyZW5j
eUxheWVyKENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjp1cGRhdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pCit2b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIoQ0dHU3RhdGVSZWYgZ3N0YXRlKQogewotICAg
IGlmIChjdG0gPT0gbV9jdXJyZW50U3RhdGUuY3RtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X293bmVyLnNldENUTShjdG0pOwotICAgIG1fY3VycmVudFN0YXRlLmN0bSA9IGN0bTsKKyAgICBt
X2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKLXN0YXRp
YyBib29sIHNoYWRvd0lzQ2xlYXJlZChjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxv
YXQgc2hhZG93Qmx1cikKLXsKLSAgICByZXR1cm4gc2hhZG93T2Zmc2V0ID09IEZsb2F0U2l6ZSgp
ICYmICFzaGFkb3dCbHVyOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyLCBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKQotewotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMgaWYgbm9ib2R5IGhhcyBhbnkgc2hhZG93cy4KLSAgICBpZiAoc2hh
ZG93SXNDbGVhcmVkKHNoYWRvd09mZnNldCwgc2hhZG93Qmx1cikgJiYgc2hhZG93SXNDbGVhcmVk
KG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fY3VycmVudFN0YXRlLnNoYWRvdy5ibHVy
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3U3RhdGU7
Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mgc3RhdGVDaGFuZ2VG
bGFnczsKLQotICAgIGlmIChzaGFkb3dPZmZzZXQgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93Lm9m
ZnNldCB8fCBzaGFkb3dCbHVyICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5ibHVyIHx8IHNoYWRv
d0NvbG9yICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5jb2xvcikgewotICAgICAgICBuZXdTdGF0
ZS5zaGFkb3dPZmZzZXQgPSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd0Js
dXIgPSBzaGFkb3dCbHVyOwotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dDb2xvciA9IHNoYWRvd0Nv
bG9yOwotICAgICAgICBzdGF0ZUNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKTsKLSAgICB9Ci0gICAgaWYgKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zICE9
IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpVbnNwZWNpZmllZCAmJiAoc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMgPT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlllcykgIT0gbV9jdXJyZW50U3Rh
dGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMgPSAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPT0gU2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM6Olllcyk7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7Ci0gICAgfQotICAg
IGlmIChzdGF0ZUNoYW5nZUZsYWdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
b3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAg
bV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICBtX2N1cnJl
bnRTdGF0ZS5zaGFkb3cuYmx1ciA9IHNoYWRvd0JsdXI7Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hh
ZG93LmNvbG9yID0gc2hhZG93Q29sb3I7Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93Lmlnbm9y
ZVRyYW5zZm9ybXMgPSAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPT0gU2hhZG93c0lnbm9yZVRy
YW5zZm9ybXM6Olllcyk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFk
b3coQ0dTdHlsZVJlZiBzdHlsZSkKK3N0YXRpYyB2b2lkIHNldERyb3BTaGFkb3coR3JhcGhpY3ND
b250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIENHU3R5bGVSZWYgc3R5bGUpCiB7CiAgICAgaWYg
KENHU3R5bGVHZXRUeXBlKHN0eWxlKSAhPSBrQ0dTdHlsZVNoYWRvdykgewogICAgICAgICAvLyBG
SVhNRTogU3VwcG9ydCBtb3JlIGtpbmRzIG9mIENHU3R5bGVzLgotICAgICAgICB1cGRhdGVTaGFk
b3coezAsIDB9LCAwLCBDb2xvcigpLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6VW5zcGVjaWZp
ZWQpOworICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMjYxLDIwICsxMzQsOSBAQCB2b2lkIERyYXdHbHlwaHNSZWNv
cmRlcjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUpCiAgICAgYXV0byByYWQgPSBkZWcy
cmFkKHNoYWRvd1N0eWxlLmF6aW11dGggLSAxODApOwogICAgIGF1dG8gc2hhZG93T2Zmc2V0ID0g
RmxvYXRTaXplKHN0ZDo6Y29zKHJhZCksIHN0ZDo6c2luKHJhZCkpICogc2hhZG93U3R5bGUuaGVp
Z2h0OwogICAgIGF1dG8gc2hhZG93Q29sb3IgPSBDR1N0eWxlR2V0Q29sb3Ioc3R5bGUpOwotICAg
IHVwZGF0ZVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1N0eWxlLnJhZGl1cywgQ29sb3I6OmNy
ZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzaGFkb3dDb2xvciksIFNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOjpZZXMpOwotfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkQmVnaW5M
YXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCkKLXsK
LSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIGF1dG8gYWxwaGEg
PSBDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSk7Ci0gICAgbV9vd25lci5iZWdpblRyYW5zcGFyZW5j
eUxheWVyKGFscGhhKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVuZExh
eWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSkKLXsKLSAgICB1cGRh
dGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIG1fb3duZXIuZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNoYWRv
d09mZnNldCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNoYWRvd1N0eWxlLnJhZGl1cyksIENvbG9yOjpj
cmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3IpIH0pOworICAgIGRlc3RpbmF0
aW9uQ29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKIH0KIAogc3RhdGlj
IFZlY3RvcjxDR1NpemU+IGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMoY29uc3QgQ0dQb2lu
dCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50LCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSYgdGV4
dE1hdHJpeCkKQEAgLTI5MCwxOCArMTUyLDE4IEBAIHN0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21w
dXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERy
YXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBD
R0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQg
cG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNv
cmREcmF3R2x5cGhzKENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwg
Y29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQogewogICAgIEFTU0VSVF9J
TVBMSUVTKG1fZGVyaXZlRm9udEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29udGV4dDo6
Tm8sIG1fb3JpZ2luYWxGb250KTsKIAotICAgIGlmICghY291bnQpCisgICAgaWYgKCFjb3VudCB8
fCBDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkgPD0gMCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Q0dGb250UmVmIHVzZWRGb250ID0gQ0dHU3RhdGVHZXRGb250KGdzdGF0ZSk7CiAgICAgaWYgKG1f
ZGVyaXZlRm9udEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29udGV4dDo6Tm8gJiYgdXNl
ZEZvbnQgIT0gYWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KG1fb3JpZ2luYWxGb250LT5w
bGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbnVsbHB0cikpLmdldCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CiAKICAgICAvLyBX
ZSB3YW50IHRoZSByZXBsYXllcidzIENUTSBhbmQgdGV4dCBtYXRyaXggdG8gbWF0Y2ggdGhlIGN1
cnJlbnQgQ1RNIGFuZCB0ZXh0IG1hdHJpeC4KICAgICAvLyBUaGUgY3VycmVudCB0ZXh0IG1hdHJp
eCBpcyBhIGNvbmNhdGVuYXRpb24gb2Ygd2hhdGV2ZXIgV2ViS2l0IHNldHMgaXQgdG8gYW5kIHdo
YXRldmVyCkBAIC0zMjQsMTMgKzE4NiwxNiBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVj
b3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdAogICAg
ICAgICBpbnZlcnNlQ1RNRml4dXAgPSBpbnZlcnNlLnZhbHVlKCk7CiAgICAgZWxzZQogICAgICAg
ICBjdG1GaXh1cCA9IEFmZmluZVRyYW5zZm9ybSgpOwotICAgIG1fb3duZXIuY29uY2F0Q1RNKGN0
bUZpeHVwKTsKKworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmNvbmNhdENUTShjdG1GaXh1cCk7
CiAKICAgICBhdXRvIGZpbGxDb2xvciA9IENHR1N0YXRlR2V0RmlsbENvbG9yKGdzdGF0ZSk7Cisg
ICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVz
ZXJ2ZUNvbG9yU3BhY2UoZmlsbENvbG9yKSk7CisKICAgICBhdXRvIHN0cm9rZUNvbG9yID0gQ0dH
U3RhdGVHZXRTdHJva2VDb2xvcihnc3RhdGUpOwotICAgIHVwZGF0ZUZpbGxDb2xvcihDb2xvcjo6
Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikpOwotICAgIHVwZGF0ZVN0cm9r
ZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc3Ryb2tlQ29sb3IpKTsK
LSAgICB1cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKyAgICBtX2Rlc3Rp
bmF0aW9uQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xv
clNwYWNlKHN0cm9rZUNvbG9yKSk7CisKKyAgICBzZXREcm9wU2hhZG93KG1fZGVzdGluYXRpb25D
b250ZXh0LCBDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOwogCiAgICAgYXV0byBmb250U2l6ZSA9
IENHR1N0YXRlR2V0Rm9udFNpemUoZ3N0YXRlKTsKICAgICBSZWYgZm9udCA9IG1fZGVyaXZlRm9u
dEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29udGV4dDo6Tm8gPyAqbV9vcmlnaW5hbEZv
bnQgOiBGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShhZG9wdENGKENURm9udENyZWF0ZVdp
dGhHcmFwaGljc0ZvbnQodXNlZEZvbnQsIGZvbnRTaXplLCBudWxscHRyLCBudWxscHRyKSksIGZv
bnRTaXplKSk7CkBAIC0zNDUsMzAgKzIxMCwzOCBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6
cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdAog
ICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIzMjkxNz4gKGBEcmF3R2x5
cGhzUmVjb3JkZXJgIHNob3VsZCBiZSBhYmxlIHRvIHJlY29yZCtyZXBsYXkgdmVydGljYWwgdGV4
dCkKICAgICB9CiAKLSAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5
cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9ucywgY291bnQsIHRleHRN
YXRyaXgpLmRhdGEoKSwgY291bnQsIHRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwg
bV9zbW9vdGhpbmdNb2RlKTsKLQotICAgIG1fb3duZXIuY29uY2F0Q1RNKGludmVyc2VDVE1GaXh1
cCk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250
LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3VudCwg
dGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgdGV4dE1hdHJpeC5tYXBQb2ludChwb3NpdGlvbnNb
MF0pLCBtX3Ntb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmNvbmNhdENU
TShpbnZlcnNlQ1RNRml4dXApOwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3Jk
RHJhd0ltYWdlKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0
IHJlY3QsIENHSW1hZ2VSZWYgY2dJbWFnZSkKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNv
cmREcmF3SW1hZ2UoQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJlZiBj
Z0ltYWdlKQogewotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAg
dXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlv
bkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBzZXREcm9wU2hh
ZG93KG1fZGVzdGluYXRpb25Db250ZXh0LCBDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOwogCiAg
ICAgLy8gQ29yZSBHcmFwaGljcyBhc3N1bWVzIGEgInkgdXAiIGNvb3JkaW5hdGUgc3lzdGVtLCBi
dXQgaW4gV2ViS2l0LCB3ZSB1c2UgYSAieS1kb3duIiBjb29yZGluYXRlIHN5c3RlbS4KICAgICAv
LyBUaGlzIG1lYW5zIHRoYXQgV2ViS2l0J3MgZHJhd2luZyByb3V0aW5lcyAoR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2UoKSkgaW50ZW50aW9uYWxseSBkcmF3IGltYWdlcyB1cHNpZGUtZG93biBm
cm9tIENvcmUgR3JhcGhpY3MncyBwb2ludCBvZiB2aWV3LgogICAgIC8vIChUaGVyZSdzIGEgeS1m
bGlwIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoKS4pCiAgICAgLy8gVGhlIHJlY3QgaGFzIHRoZSByaWdodCBib3VuZHMsIGJ1dCB3ZSBuZWVk
IHRvIHRyYW5zZm9ybSBmcm9tIENHJ3MgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gV2ViS2l0J3MgYnkg
cGVyZm9ybWluZyBvdXIgb3duIHktZmxpcCBzbyBpbWFnZXMgYXJlIGRyYXduIHRoZSByaWdodC1z
aWRlLXVwLgogICAgIC8vIFdlIGRvIHRoaXMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdGhlIHR3
byBBUElzLCB3aGljaCBpcyByaWdodCBoZXJlLgotICAgIG1fb3duZXIudHJhbnNsYXRlKDAsIHJl
Y3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSk7Ci0gICAgbV9vd25lci5zY2FsZShG
bG9hdFNpemUoMSwgLTEpKTsKLQorICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZSgw
LCByZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpOworICAgIG1fZGVzdGluYXRp
b25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIAogICAgIGF1dG8gaW1hZ2Ug
PSBOYXRpdmVJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAgIG1fb3duZXIuZHJhd05hdGl2ZUlt
YWdlKCppbWFnZSwgaW1hZ2UtPnNpemUoKSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9hdFJlY3Qge3sg
fSwgaW1hZ2UtPnNpemUoKX0sIEltYWdlUGFpbnRpbmdPcHRpb25zIHsgSW1hZ2VPcmllbnRhdGlv
bjo6T3JpZ2luVG9wTGVmdCB9KTsKLQorICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdOYXRp
dmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5zaXplKCksIEZsb2F0UmVjdChyZWN0KSwgRmxvYXRSZWN0
IHsgeyB9LCBpbWFnZS0+c2l6ZSgpIH0sIEltYWdlUGFpbnRpbmdPcHRpb25zIHsgSW1hZ2VPcmll
bnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKKyAgICAKICAgICAvLyBVbmRvIHRoZSBhYm92ZSB5
LWZsaXAgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4KLSAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6
ZSgxLCAtMSkpOwotICAgIG1fb3duZXIudHJhbnNsYXRlKDAsIC0ocmVjdC5zaXplLmhlaWdodCAr
IDIgKiByZWN0Lm9yaWdpbi55KSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoRmxv
YXRTaXplKDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRlKDAsIC0o
cmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KSk7Cit9CisKK3ZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAgc2V0SW50ZXJuYWxGb250KGZvbnQs
IHNtb290aGluZ01vZGUpOworICAgIAorICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9IHByZXBhcmVJ
bnRlcm5hbENvbnRleHQoKTsKKyAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2ludGVybmFs
Q29udGV4dCwgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBz
bW9vdGhpbmdNb2RlKTsKKyAgICByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KG9yaWdpbmFsU3Rh
dGUpOwogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQpAQCAtMzc5LDI1
ICsyNTIsMTkgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1bihjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKgogICAgICAgICBhdXRvIGJvdW5kcyA9
IGZvbnQuYm91bmRzRm9yR2x5cGgoZ2x5cGhzW2ldKTsKIAogICAgICAgICAvLyBDcmVhdGUgYSBs
b2NhbCBJbWFnZUJ1ZmZlciBiZWNhdXNlIGRlY29kaW5nIHRoZSBTVkcgZm9udHMgaGFzIHRvIGhh
cHBlbiBpbiBXZWJQcm9jZXNzLgotICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fb3du
ZXIuY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGJvdW5kcywgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIFJlbmRlcmluZ01ldGhvZDo6TG9jYWwpKSB7CisgICAgICAgIGlmIChhdXRvIGlt
YWdlQnVmZmVyID0gbV9kZXN0aW5hdGlvbkNvbnRleHQuY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVy
KGJvdW5kcywgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFJlbmRlcmluZ01ldGhvZDo6
TG9jYWwpKSB7CisgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmFwcGx5U3RhdGVD
aGFuZ2VzKCk7CiAgICAgICAgICAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhpbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpLCBmb250LCBnbHlwaHMgKyBpLCBhZHZhbmNlcyArIGksIDEsIEZsb2F0UG9p
bnQoKSwgc21vb3RoaW5nTW9kZSk7CiAKICAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlv
blJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcyk7CiAgICAgICAgICAgICBkZXN0aW5hdGlv
blJlY3QubW92ZUJ5KHBlblBvc2l0aW9uKTsKLSAgICAgICAgICAgIG1fb3duZXIuZHJhd0ltYWdl
QnVmZmVyKCppbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICAgICAgICAgIG1fZGVz
dGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9u
UmVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBwZW5Qb3NpdGlvbi5tb3ZlKHNpemUoYWR2YW5j
ZXNbaV0pKTsKICAgICB9CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RT
VkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01v
ZGUpCi17Ci0gICAgcHJlcGFyZUludGVybmFsQ29udGV4dChmb250LCBzbW9vdGhpbmdNb2RlKTsK
LSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2ludGVybmFsQ29udGV4dCwgZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKLSAg
ICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOwotfQotCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6ZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFy
dFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGF1dG8gb3Rz
dmdHbHlwaHMgPSBmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBocyk7CkBAIC00
NDAsNyArMzA3LDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGluZ0lu
dG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiBmb24KIHZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGlmIChtX2RlY29uc3RydWN0RHJhd0dseXBocyA9PSBE
ZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKSB7Ci0gICAgICAgIG1fb3duZXIuZHJhd0dseXBoc0Fu
ZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQs
IHNtb290aGluZ01vZGUpOworICAgICAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3R2x5cGhz
QW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2lu
dCwgc21vb3RoaW5nTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ1MywxNSAr
MzIwLDE3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3TmF0aXZlVGV4dChDVEZvbnRS
ZWYgZm9udCwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lCiB7CiAgICAgQVNTRVJUKG1fZGVjb25z
dHJ1Y3REcmF3R2x5cGhzID09IERlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIobV9vd25lcik7CisgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzYXZlcihtX2Rlc3RpbmF0aW9uQ29udGV4dCk7CiAKLSAgICBtX293bmVy
LnRyYW5zbGF0ZShsaW5lUmVjdC5vcmlnaW4ueCwgbGluZVJlY3Qub3JpZ2luLnkgKyBsaW5lUmVj
dC5zaXplLmhlaWdodCk7Ci0gICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUobGluZVJlY3Qub3JpZ2luLngsIGxpbmVS
ZWN0Lm9yaWdpbi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOworICAgIG1fZGVzdGluYXRpb25D
b250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogCi0gICAgcHJlcGFyZUludGVybmFsQ29u
dGV4dChGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShmb250LCBmb250U2l6ZSkpLCBGb250
U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCk7CisgICAgc2V0SW50ZXJuYWxGb250
KEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGZvbnQsIGZvbnRTaXplKSksIEZvbnRTbW9v
dGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKKyAgICAKKyAgICBhdXRvIG9yaWdpbmFs
U3RhdGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U2V0VGV4dFBv
c2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgMCwgMCk7CiAgICAg
Q1RMaW5lRHJhdyhsaW5lLCBtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwot
ICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgcmVzdG9yZURlc3RpbmF0aW9uQ29u
dGV4dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4
dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAppbmRleCA1MTFlMDliOTZjZWYwMzI1MDkwZTIzYWY5
MTRhZTM1ZjJhYjhlZDJlLi5lNTM0Y2M1NWFmMjZiN2ZiODI4MGU2M2I3ZGMyNWEzZDRhNDE2Mzc5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9G
b250Q2FzY2FkZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcApAQCAtMTUyLDI1ICsxNTIsMjcg
QEAgc3RhdGljIHZvaWQgZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25zKFZlY3Rv
cjxDR1BvaW50LCAyNTY+JiBwb3NpdGlvbnMKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZv
bnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENH
U2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRl
eHRNYXRyaXgpCitzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQg
Y291bnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4dE1hdHJpeCkKIHsKICAgICBpZiAoIWNv
dW50KQogICAgICAgICByZXR1cm47CiAKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0
Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOworCiAgICAgVmVjdG9yPENHUG9pbnQsIDI1
Nj4gcG9zaXRpb25zKGNvdW50KTsKICAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkg
PT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewotICAgICAgICBTY29wZWRUZXh0TWF0cml4
IHNhdmVkTWF0cml4KGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9udCwgdGV4dE1hdHJpeCks
IGNvbnRleHQpOworICAgICAgICBTY29wZWRUZXh0TWF0cml4IHNhdmVkTWF0cml4KGNvbXB1dGVW
ZXJ0aWNhbFRleHRNYXRyaXgoZm9udCwgdGV4dE1hdHJpeCksIGNnQ29udGV4dCk7CiAKICAgICAg
ICAgVmVjdG9yPENHU2l6ZSwgMjU2PiB0cmFuc2xhdGlvbnMoY291bnQpOwogICAgICAgICBDVEZv
bnRHZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCks
IGdseXBocywgdHJhbnNsYXRpb25zLmRhdGEoKSwgY291bnQpOwogCiAgICAgICAgIGF1dG8gYXNj
ZW50RGVsdGEgPSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNCYXNl
bGluZSkgLSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKTsKLSAgICAgICAgZmlsbFZl
Y3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgdHJhbnNs
YXRpb25zLmRhdGEoKSwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCwgYXNjZW50RGVsdGEpOwotICAg
ICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3Np
dGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7CisgICAgICAgIGZpbGxWZWN0b3JXaXRoVmVy
dGljYWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNnQ29udGV4dCwgdHJhbnNsYXRpb25zLmRh
dGEoKSwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCwgYXNjZW50RGVsdGEpOworICAgICAgICBDVEZv
bnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0
YSgpLCBjb3VudCwgY2dDb250ZXh0KTsKICAgICB9IGVsc2UgewotICAgICAgICBmaWxsVmVjdG9y
V2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIGFkdmFuY2Vz
LCBjb3VudCwgcG9pbnQpOwotICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5j
dEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7CisgICAg
ICAgIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY2dD
b250ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKKyAgICAgICAgQ1RGb250RHJhd0dseXBo
cyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQs
IGNnQ29udGV4dCk7CiAgICAgfQogfQogCkBAIC0yNDIsMTAgKzI0NCw3IEBAIHZvaWQgRm9udENh
c2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBm
b250LCBjb25zdCBHCiAgICAgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShjb250ZXh0KTsKICAgICBD
R0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkpOwogCi0g
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgIENv
bG9yIHNoYWRvd0NvbG9yOwotICAgIGNvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgIGF1dG8gZHJvcFNoYWRvdyA9IGNvbnRleHQuZHJv
cFNoYWRvdygpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRDVE0gPSBjb250ZXh0Lmdl
dENUTSgpOwogICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0Jv
bGRPZmZzZXQoKTsKQEAgLTI1OCwyOSArMjU3LDI5IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBH
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250ZXh0
LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xv
ci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFw
Rm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGNvbnRleHRD
VE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRleHQuaXNJblRy
YW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250ZXh0LnRl
eHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBkcm9wU2hhZG93LmNv
bG9yLmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRvdy5ibHVyUmFkaXVzICYmICFwbGF0Zm9ybURhdGEu
aXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
KSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFj
b250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cp
IHsKICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2Yg
cmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFz
aW5nLgogICAgICAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9yIGZpbGxD
b2xvciA9IGNvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xv
ciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBo
YUFzRmxvYXQoKSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IGRyb3BTaGFkb3cu
Y29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgp
KTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAg
ICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsK
KyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNl
dC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1z
LCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBk
b3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSAr
IHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgPyAtMSA6IDEpOwotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQo
c2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9
IHBvaW50LnkoKSArIGRyb3BTaGFkb3cub2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjb250ZXh0
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogICAgICAgICBpZiAo
c3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMo
RmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRvd1RleHRZ
KSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRy
aXgpOworICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRv
d1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250LCBjb250ZXh0
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOwogICAgIH0KIAotICAgIHNob3dHbHlwaHNXaXRo
QWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCB0ZXh0TWF0cml4KTsKKyAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250
LCBjb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogCiAg
ICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5j
ZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2ludC55KCkp
LCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJp
eCk7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkg
KyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBjb250ZXh0LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogCiAgICAgaWYgKGhhc1NpbXBsZVNo
YWRvdykKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVy
LCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93
KTsKIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChzaG91bGRTbW9vdGhGb250
cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
LmNwcAppbmRleCAyZTJmNGY0ZjJjYjU1ZDM2NWU1YWUzOTkzMjVkMDVmMmMxNzM2MWZkLi5jY2Y0
MGNlYTYyYjE2NzQzNjZkNzQ4NDE2MmIxYmM0ZTkzNzcwNzU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5jcHAKQEAgLTkwLDEwICs5MCw3IEBAIGJvb2wgRGlzcGxheUxpc3Q6OnNob3VsZER1bXBG
b3JGbGFncyhBc1RleHRGbGFncyBmbGFncywgSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICBpZiAo
IShmbGFncyAmIEFzVGV4dEZsYWc6OkluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zKSkgewogICAg
ICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJdGVtID0gaXRlbS5nZXQ8U2V0U3RhdGU+KCk7CiAg
ICAgICAgICAgICAvLyBGSVhNRTogZm9yIG5vdywgb25seSBkcm9wIHRoZSBpdGVtIGlmIHRoZSBv
bmx5IHN0YXRlLWNoYW5nZSBmbGFncyBhcmUgcGxhdGZvcm0tc3BlY2lmaWMuCi0gICAgICAgICAg
ICBpZiAoc3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZUNo
YW5nZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGUo
KS5jaGFuZ2VzKCkgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKQEAgLTIwMiwxNiArMTk5LDYgQEAgdm9pZCBEaXNwbGF5TGlzdDo6
YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTYXZlPihpdGVt
LmdldDxTYXZlPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICByZXR1
cm4gYXBwZW5kPFJlc3RvcmU+KGl0ZW0uZ2V0PFJlc3RvcmU+KCkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxUcmFuc2xhdGU+KGl0ZW0uZ2V0
PFRyYW5zbGF0ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1
cm4gYXBwZW5kPFJvdGF0ZT4oaXRlbS5nZXQ8Um90YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTY2FsZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTY2FsZT4oaXRlbS5nZXQ8U2NhbGU+KCkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4gYXBw
ZW5kPENvbmNhdGVuYXRlQ1RNPihpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldENUTT4oaXRlbS5n
ZXQ8U2V0Q1RNPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAg
ICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtLmdldDxTZXRJbmxp
bmVGaWxsQ29sb3I+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
OgpAQCAtMjIwLDE2ICsyMDcsNiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRs
ZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRlbS5n
ZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToK
ICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdGF0ZT4oaXRlbS5nZXQ8U2V0U3RhdGU+KCkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0
TGluZUNhcD4oaXRlbS5nZXQ8U2V0TGluZUNhcD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZURhc2g+KGl0ZW0uZ2V0PFNl
dExpbmVEYXNoPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAg
cmV0dXJuIGFwcGVuZDxTZXRMaW5lSm9pbj4oaXRlbS5nZXQ8U2V0TGluZUpvaW4+KCkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0
TWl0ZXJMaW1pdD4oaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8Q2xlYXJTaGFkb3c+KGl0ZW0u
Z2V0PENsZWFyU2hhZG93PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICBy
ZXR1cm4gYXBwZW5kPENsaXA+KGl0ZW0uZ2V0PENsaXA+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBPdXQ6CkBAIC0yNzQsOCArMjUxLDYgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0
ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhDb2xvcj4o
aXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OgogICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRp
ZW50PihpdGVtLmdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxDb21wb3Np
dGVkUmVjdD4oaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJvdW5kZWRS
ZWN0PihpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDBjMjUyMjY0YWY0MTY2NTYyMTc1MTYwNDEwNDJhOGJk
ZDNiZmFiYjUuLmRlZmNlODRlZjM1ODdiZWEwNmQyMDdkYjViODAyYWE3YzgyNTY1MGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKQEAgLTM0
LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsK
IAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKLSAgICA6IG1fY29udGV4
dChtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBs
b2dpY2FsU2l6ZSksIGluaXRpYWxDVE0pCisgICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwg
RmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQogewogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCmluZGV4IDQ1Nzc1NTE4OWJkYWRk
NzE5ZDI0NWE0ZTZkMmM4MWJkZGIxZjdkZjMuLjBkYjE1MDM5NjA0MDMyZjMzMDNmYmNiNjUyMWU1
M2U0ZTM0ZjkxOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIu
Y3BwCkBAIC01MiwyMSArNTIsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICBnZXQ8
UmVzdG9yZT4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRl
bVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgZ2V0PFRyYW5zbGF0ZT4oKS5hcHBseShjb250ZXh0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAg
Z2V0PFJvdGF0ZT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBnZXQ8U2NhbGU+KCkuYXBwbHkoY29udGV4dCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAg
ICAgZ2V0PENvbmNhdGVuYXRlQ1RNPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBnZXQ8U2V0Q1RNPigpLmFwcGx5
KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbENvbG9yOgogICAgICAgICBnZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpLmFwcGx5KGNvbnRl
eHQpOwogICAgICAgICByZXR1cm47CkBAIC03OSwyMSArNjQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dGF0ZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBnZXQ8U2V0TGluZUNhcD4oKS5h
cHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVEYXNoOgotICAgICAgICBnZXQ8U2V0TGluZURhc2g+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgZ2V0
PFNldExpbmVKb2luPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgZ2V0PFNldE1pdGVyTGltaXQ+KCku
YXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clNoYWRvdzoKLSAgICAgICAgZ2V0PENsZWFyU2hhZG93PigpLmFwcGx5KGNvbnRleHQpOwotICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgZ2V0PENsaXA+
KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2MCw5ICsxMzAsNiBAQCB2
b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAgZ2V0PEZpbGxSZWN0V2l0
aEdyYWRpZW50PigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRS
ZWN0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLmFwcGx5
KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CkBAIC0yNzAsOSArMjM3LDYgQEAgdm9pZCBJdGVt
SGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICAgICAg
Z2V0PERyYXdQYXRoPigpLn5EcmF3UGF0aCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRS
ZWN0PigpLn5GaWxsQ29tcG9zaXRlZFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAgICBnZXQ8RmlsbFBhdGg+KCkufkZpbGxQYXRoKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTI4OCw5ICsyNTIsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRl
c3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgZ2V0
PEZpbGxSb3VuZGVkUmVjdD4oKS5+RmlsbFJvdW5kZWRSZWN0KCk7CiAgICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0PFNldExpbmVEYXNo
PigpLn5TZXRMaW5lRGFzaCgpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6CiAgICAgICAgIGdldDxTZXRTdGF0ZT4oKS5+U2V0U3RhdGUoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMzE0LDkgKzI3NSw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclJlY3Q+Ojp2YWx1ZSk7CiAgICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJTaGFkb3c+Ojp2YWx1ZSk7
Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwPjo6dmFsdWUpOwog
ICAgICAgICByZXR1cm47CkBAIC0zMjYsOSArMjg0LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0
cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xpcFRvSW1hZ2VCdWZm
ZXI+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRl
bmF0ZUNUTToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8Q29uY2F0ZW5hdGVDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgogICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC0zODcsMzMgKzM0MiwxNSBAQCB2b2lk
IEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJlc3RvcmU+
Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJvdGF0
ZT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CiAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNhdmU+
Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2NhbGU+
Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldENU
TT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZUZpbGxDb2xvcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8U2V0SW5saW5lRmlsbENvbG9yPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CiAgICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZVN0cm9rZUNvbG9y
Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
U2V0TGluZUNhcD46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVKb2luOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRMaW5lSm9pbj46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldE1pdGVyTGltaXQ+Ojp2YWx1ZSk7Ci0gICAgICAg
IHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CiAgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldFN0cm9rZVRo
aWNrbmVzcz46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDM3LDkgKzM3NCw2IEBAIHZv
aWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToK
ICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U3Ry
b2tlTGluZT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlRy
YW5zbGF0ZToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8VHJhbnNsYXRlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgfQogfQogCkBA
IC01MDEsOCArNDM1LDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVt
VHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPERyYXdQYXR0ZXJuPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1BhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3UGF0aD4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAgICByZXR1cm4gY29weUludG88Rmls
bFBhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhDb2xvcjoKQEAgLTUxMyw4ICs0NDUsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0
ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICBy
ZXR1cm4gY29weUludG88RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVybiBj
b3B5SW50bzxGaWxsUm91bmRlZFJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVEYXNo
PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAg
ICAgIHJldHVybiBjb3B5SW50bzxTZXRTdGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CkBAIC01MzEsMTYgKzQ2MSwxMiBAQCBib29sIEl0ZW1I
YW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9u
KSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4o
aXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPENsZWFyUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gY29weUludG88Q2xlYXJT
aGFkb3c+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAg
ICAgICByZXR1cm4gY29weUludG88Q2xpcD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBPdXQ6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwT3V0PihpdGVt
T2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6CiAg
ICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwVG9JbWFnZUJ1ZmZlcj4oaXRlbU9mZnNldCwgKnRo
aXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4g
Y29weUludG88Q29uY2F0ZW5hdGVDVE0+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgogICAgICAgICByZXR1cm4gY29weUlu
dG88RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgpAQCAtNTczLDI0ICs0OTksMTIgQEAgYm9vbCBJdGVt
SGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlv
bikgY29uc3QKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJl
dHVybiBjb3B5SW50bzxSZXN0b3JlPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gY29weUludG88Um90YXRlPihpdGVtT2Zmc2V0
LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKICAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPFNhdmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToK
LSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNjYWxlPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0Q1RNPihp
dGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9y
OgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5saW5lRmlsbENvbG9yPihpdGVtT2Zmc2V0
LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CiAgICAg
ICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbU9mZnNldCwgKnRo
aXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJldHVybiBjb3B5
SW50bzxTZXRMaW5lQ2FwPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRMaW5lSm9pbj4oaXRlbU9m
ZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAg
IHJldHVybiBjb3B5SW50bzxTZXRNaXRlckxpbWl0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgICAgICByZXR1cm4gY29weUlu
dG88U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlRWxsaXBzZToKQEAgLTYwNyw4ICs1MjEsNiBAQCBib29sIEl0ZW1IYW5kbGU6
OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25z
dAogICAgICAgICByZXR1cm4gY29weUludG88U3Ryb2tlUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMp
OwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgICAgIHJldHVybiBjb3B5SW50
bzxTdHJva2VMaW5lPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJh
bnNsYXRlOgotICAgICAgICByZXR1cm4gY29weUludG88VHJhbnNsYXRlPihpdGVtT2Zmc2V0LCAq
dGhpcyk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCA1NGVhMWM4NjgyYzA3NDQyZTJlODQxNGI3MzI4YWEz
MjQ4MDI1YTc1Li5iYTBkOTUxYzIyY2Y0OWNlNDE3ZTMzNTUzYjAwZTBhNWI4YWIyMDk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCkBAIC0zOCwxNiArMzgsNiBA
QCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAg
IHJldHVybiBzaXplb2YoU2F2ZSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAg
ICAgcmV0dXJuIHNpemVvZihSZXN0b3JlKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoVHJhbnNsYXRlKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpS
b3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoUm90YXRlKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihTY2FsZSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoQ29uY2F0ZW5hdGVDVE0p
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRD
VE0pOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0
dXJuIHNpemVvZihTZXRJbmxpbmVGaWxsQ29sb3IpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZVN0cm9rZUNvbG9yOgpAQCAtNTYsMTYgKzQ2LDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJ
dGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0cm9r
ZVRoaWNrbmVzcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVy
biBzaXplb2YoU2V0U3RhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoU2V0TGluZUNhcCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZURhc2gpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVKb2luKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gc2l6ZW9m
KFNldE1pdGVyTGltaXQpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKENsZWFyU2hhZG93KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgog
ICAgICAgICByZXR1cm4gc2l6ZW9mKENsaXApOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6
CkBAIC0xMTAsOCArOTAsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1U
eXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoRmlsbFJlY3RXaXRoQ29sb3IpOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICByZXR1cm4gc2l6
ZW9mKEZpbGxSZWN0V2l0aEdyYWRpZW50KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoRmlsbENvbXBvc2l0ZWRSZWN0KTsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVybiBzaXplb2Yo
RmlsbFJvdW5kZWRSZWN0KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZToKQEAgLTE4MiwyOCArMTYwLDE4IEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0
eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CiAgICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6Q2xl
YXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmx1
c2hDb250ZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2NhbGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZUZpbGxDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xv
cjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVEYXNoOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgIGNhc2UgSXRl
bVR5cGU6OlNldE1pdGVyTGltaXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgIGNhc2UgSXRlbVR5cGU6OlRy
YW5zbGF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgpAQCAtMjIy
LDcgKzE5MCw2IEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgogICAgIGNh
c2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxDb21wb3NpdGVkUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsTGluZToKQEAg
LTI4OCwxMyArMjU1LDExIEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNG
b3JUZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhHcmFkaWVudDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZToKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZURhc2g6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3U3lzdGVtSW1h
Z2U6CkBAIC0zMDYsMTEgKzI3MSw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUp
CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgogICAg
IGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRv
dzoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKICAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcjoKQEAgLTMzMywxNSArMjk2LDkgQEAgYm9vbCBp
c0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1l
Rm9yTWVkaWE6CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgotICAgIGNhc2UgSXRl
bVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VFbGxpcHNlOgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpAQCAtMzUxLDcgKzMw
OCw2IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAjZW5kaWYKICAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bVR5cGUuaAppbmRleCBkNjgzYjJhY2Y3ODQ1Zjk5YzNjZDA5NWViOTExZTU0ZjFmOGNlMTExLi4x
NjYwYjk4ZmRhNWVmMjdiM2Y3NWQyMmE1NzlhM2E5YWUzY2M3MGZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAgLTMxLDIwICszMSwxMCBAQCBuYW1lc3BhY2UgRGlz
cGxheUxpc3QgewogZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIFNhdmUsCiAg
ICAgUmVzdG9yZSwKLSAgICBUcmFuc2xhdGUsCi0gICAgUm90YXRlLAotICAgIFNjYWxlLAotICAg
IENvbmNhdGVuYXRlQ1RNLAotICAgIFNldENUTSwKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IsCiAg
ICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgU2V0U3Ryb2tlVGhpY2tuZXNzLAogICAgIFNl
dFN0YXRlLAotICAgIFNldExpbmVDYXAsCi0gICAgU2V0TGluZURhc2gsCi0gICAgU2V0TGluZUpv
aW4sCi0gICAgU2V0TWl0ZXJMaW1pdCwKLSAgICBDbGVhclNoYWRvdywKICAgICBDbGlwLAogICAg
IENsaXBPdXQsCiAgICAgQ2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC02Nyw3ICs1Nyw2IEBAIGVudW0g
Y2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGaWxsUmVjdCwKICAgICBGaWxsUmVjdFdp
dGhDb2xvciwKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudCwKLSAgICBGaWxsQ29tcG9zaXRlZFJl
Y3QsCiAgICAgRmlsbFJvdW5kZWRSZWN0LAogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAog
I2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuY3BwCmluZGV4IDIzZDBiYmNjNzFjMjgxYzUyYzM1YThjMjUyZGE5NmMwYWIxMmE5OGMuLjM2
ZmE2YTEyN2ZmMDc5M2NlZjIzMGVkZjdhNjQxZGRlMDJmZTM3NGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEaXNwbGF5
TGlzdFJlcGxheWVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZS5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKQEAgLTU0LDY3ICs1NSw2IEBAIHZvaWQgUmVzdG9yZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQogCi12b2lkIFRy
YW5zbGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNv
bnRleHQudHJhbnNsYXRlKG1feCwgbV95KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRlbSkKLXsKLSAgICB0cy5k
dW1wUHJvcGVydHkoIngiLCBpdGVtLngoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ5IiwgaXRl
bS55KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFJvdGF0ZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQucm90YXRlKG1fYW5nbGUp
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgUm90YXRlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5nbGUiLCBpdGVtLmFu
Z2xlKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNjYWxlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zY2FsZShtX3NpemUpOwot
fQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
U2NhbGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzaXplIiwgaXRlbS5hbW91bnQo
KSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0Q1RNOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRDVE0obV90cmFuc2Zvcm0p
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2V0Q1RNJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgic2V0LWN0bSIsIGl0ZW0u
dHJhbnNmb3JtKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENvbmNhdGVuYXRlQ1RN
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5j
b25jYXRDVE0obV90cmFuc2Zvcm0pOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29uY2F0ZW5hdGVDVE0mIGl0ZW0pCi17Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJjdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVybiB0czsK
LX0KLQogdm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihjb2xvcigpKTsKQEAgLTE0
OCw3NyArODgsMjIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNldFN0cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1TZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICA6IG1fc3Rh
dGVDaGFuZ2Uoc3RhdGUsIGZsYWdzKQotewotfQotCi1TZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQotICAgIDogbV9zdGF0ZUNo
YW5nZShzdGF0ZUNoYW5nZSkKK1NldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUpCisgICAgOiBtX3N0YXRlKHN0YXRlKQogewogfQogCiB2b2lkIFNldFN0
YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgbV9zdGF0ZUNoYW5n
ZS5hcHBseShjb250ZXh0KTsKKyAgICBjb250ZXh0Lm1lcmdlU3RhdGVDaGFuZ2VzKG1fc3RhdGUp
OwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2V0U3RhdGUmIHN0YXRlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRlLnN0YXRl
Q2hhbmdlKCk7CisgICAgdHMgPDwgaXRlbS5zdGF0ZSgpOwogICAgIHJldHVybiB0czsKIH0KIAot
dm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17
Ci0gICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lQ2FwJiBsaW5lQ2Fw
KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1jYXAiLCBsaW5lQ2FwLmxpbmVDYXAoKSk7
Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVEYXNoOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaChtX2Rhc2hB
cnJheSwgbV9kYXNoT2Zmc2V0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFzaCkKLXsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImRhc2gtYXJyYXkiLCBsaW5lRGFzaC5kYXNoQXJyYXkoKSk7Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJkYXNoLW9mZnNldCIsIGxpbmVEYXNoLmRhc2hPZmZzZXQoKSk7Ci0gICAg
cmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVKb2luOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lSm9pbihtX2xpbmVKb2luKTsK
LX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFNldExpbmVKb2luJiBsaW5lSm9pbikKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtam9p
biIsIGxpbmVKb2luLmxpbmVKb2luKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRN
aXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAg
Y29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1pdCk7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRNaXRlckxpbWl0JiBtaXRl
ckxpbWl0KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibWl0cmUtbGltaXQiLCBtaXRlckxpbWl0
Lm1pdGVyTGltaXQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENsZWFyU2hhZG93Ojph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5jbGVh
clNoYWRvdygpOwotfQotCiB2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKQEAgLTY1NywzMCArNTQyLDE1
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBG
aWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLXZvaWQgRmls
bENvbXBvc2l0ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17
Ci0gICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fb3AsIG1fYmxlbmRNb2Rl
KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEZpbGxDb21wb3NpdGVkUmVjdCYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInJl
Y3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29s
b3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0aW9uIiwgaXRlbS5j
b21wb3NpdGVPcGVyYXRvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBp
dGVtLmJsZW5kTW9kZSgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgRmlsbFJvdW5kZWRS
ZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgY29udGV4
dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5kTW9kZSk7CisgICAgY29u
dGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yKTsKIH0KIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVkUmVjdCYg
aXRlbSkKIHsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRSZWN0KCkp
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwogICAgIHJldHVybiB0
czsKIH0KIApAQCAtNzY4LDggKzYzOCw4IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKIH0KIAogI2lmIEVOQUJM
RShWSURFTykKLVBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi0gICAgOiBtX2lkZW50
aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKK1BhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBt
X2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogewogfQpAQCAtMTAxMSwxOSArODgxLDEwIEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBl
KQogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRzIDw8ICJz
YXZlIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogdHMgPDwgInJlc3RvcmUi
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHRzIDw8ICJ0cmFuc2xhdGUi
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHRzIDw8ICJyb3RhdGUiOyBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogdHMgPDwgInNjYWxlIjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB0cyA8PCAic2V0LWN0bSI7IGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB0cyA8PCAiY29uY2F0ZW50YXRlLWN0bSI7IGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjogdHMgPDwgInNldC1pbmxp
bmUtZmlsbC1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9r
ZUNvbG9yOiB0cyA8PCAic2V0LWlubGluZS1zdHJva2UtY29sb3IiOyBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHRzIDw8ICJzZXQtc3Ryb2tlLXRoaWNrbmVz
cyI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB0cyA8PCAic2V0LXN0YXRl
IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogdHMgPDwgInNldC1saW5l
LWNhcCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOiB0cyA8PCAic2V0
LWxpbmUtZGFzaCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOiB0cyA8
PCAic2V0LWxpbmUtam9pbiI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGlt
aXQ6IHRzIDw8ICJzZXQtbWl0ZXItbGltaXQiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwOiB0cyA8PCAiY2xpcCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6IHRz
IDw8ICJjbGlwLW91dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVm
ZmVyOiB0cyA8PCAiY2xpcC10by1pbWFnZS1idWZmZXIiOyBicmVhazsKQEAgLTEwNDYsNyArOTA3
LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1U
eXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHRzIDw8ICJmaWxsLXJlY3Qi
OyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjogdHMgPDwgImZp
bGwtcmVjdC13aXRoLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoR3JhZGllbnQ6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1ncmFkaWVudCI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogdHMgPDwgImZpbGwtY29tcG9zaXRl
ZC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB0cyA8
PCAiZmlsbC1yb3VuZGVkLXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZTogdHMgPDwgImZpbGwtcmVjdC13aXRoLXJvdW5kZWQtaG9sZSI7IGJy
ZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpAQCAtMTA3OCw3ICs5MzgsNiBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlw
ZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB0cyA8PCAiYXBwbHktZmls
bC1wYXR0ZXJuIjsgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmlj
ZVNjYWxlRmFjdG9yOiB0cyA8PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciI7IGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xlYXItc2hhZG93IjsgYnJl
YWs7CiAgICAgfQogICAgIHJldHVybiB0czsKIH0KQEAgLTEwODgsMjEgKzk0Nyw2IEBAIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICB0
cyA8PCBpdGVtLnR5cGUoKTsKIAogICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFRyYW5zbGF0ZT4o
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICB0
cyA8PCBpdGVtLmdldDxSb3RhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTY2FsZT4oKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxT
ZXRDVE0+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRl
Q1RNOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKTsKLSAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICB0
cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCk7CiAgICAgICAgIGJyZWFrOwpAQCAt
MTExNSwxOCArOTU5LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
SXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICB0
cyA8PCBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZUNhcD4oKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVEYXNoPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZUpv
aW4+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6
Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCk7Ci0gICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXA+
KCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE5Myw5ICsxMDI1LDYgQEAgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUmVj
dFdpdGhHcmFkaWVudD4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bENvbXBvc2l0ZWRSZWN0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVj
dDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpOwogICAgICAgICBi
cmVhazsKQEAgLTEyNzEsNyArMTEwMCw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9r
ZVBhdHRlcm46CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKICNlbmRpZgot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggOTdjYjVm
YzhkMDRiYTg2NjJiNzJjN2RkZWViYzQ0MTU1YzI4MjViNy4uZTgxYmIzNDZjOWVmZWJlOTZhNjUw
ZDc1NDVhODFmNjE2YjdkNmE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBA
IC04NSwxMDQgKzg1LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9OwogCi1jbGFzcyBUcmFuc2xhdGUgewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6VHJh
bnNsYXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBU
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICAgICAgOiBtX3goeCkKLSAgICAgICAgLCBt
X3koeSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsg
fQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
ZmxvYXQgbV94IHsgMCB9OwotICAgIGZsb2F0IG1feSB7IDAgfTsKLX07Ci0KLWNsYXNzIFJvdGF0
ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpSb3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
LQotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0K
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9hbmdsZSB7IDAgfTsgLy8gSW4gcmFkaWFucy4KLX07
Ci0KLWNsYXNzIFNjYWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNjYWxlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7Ci0KLSAgICBTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi0gICAgICAg
IDogbV9zaXplKHNpemUpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEZsb2F0U2l6ZSYgYW1v
dW50KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZsb2F0U2l6
ZSBtX3NpemU7Ci19OwotCi1jbGFzcyBTZXRDVE0gewotcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0Q1RNOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotICAg
IHsKLSAgICB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmluZVRyYW5zZm9y
bSBtX3RyYW5zZm9ybTsKLX07Ci0KLWNsYXNzIENvbmNhdGVuYXRlQ1RNIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBD
b25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICAgICAg
OiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwotfTsKLQogY2xhc3Mg
U2V0SW5saW5lRmlsbENvbG9yIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjsKQEAgLTI0NywxMCAr
MTQ5LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlQ2hhbmdlOyB9Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRl
Q2hhbmdlKCkgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIGV4
cGxpY2l0IFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQog
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNldFN0
YXRlPiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMjU4LDQwNCArMTU4LDI2IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpOwogCiBwcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlJik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBtX3N0YXRlQ2hhbmdl
OworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgogdm9pZCBTZXRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB7Ci0gICAgYXV0byBjaGFuZ2VGbGFncyA9IG1fc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFnczsK
LSAgICBlbmNvZGVyIDw8IGNoYW5nZUZsYWdzOwotCi0gICAgYXV0byYgc3RhdGUgPSBtX3N0YXRl
Q2hhbmdlLm1fc3RhdGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3Rh
dGUuc3Ryb2tlR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5zdHJva2VHcmFk
aWVudDsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5z
dHJva2VQYXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuc3Ryb2tlUGF0dGVybjsK
LSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmZpbGxHcmFk
aWVudCk7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLmZpbGxHcmFkaWVudDsKLSAgICB9Ci0K
LSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQ
YXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuZmlsbFBhdHRlcm4pOwotICAg
ICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9Ci0KLSAgICBpZiAoY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsK
LSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIGVuY29kZXIg
PDwgc3RhdGUuc2hhZG93Qmx1cjsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dDb2xv
cjsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwotICAgIH0KLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
VGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VUaGlja25l
c3M7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUudGV4dERy
YXdpbmdNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc3Ry
b2tlQ29sb3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuZmlsbENv
bG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc3Ryb2tlU3R5
bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWxsUnVsZTsKLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9z
aXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jb21wb3NpdGVP
cGVyYXRvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5ibGVuZE1v
ZGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS5hbHBoYTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5zaG91bGRBbnRpYWxpYXM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAg
ZW5jb2RlciA8PCBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKLQotICAgIGlmIChjaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICBlbmNvZGVyIDw8IG1fc3RhdGU7
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBzdGQ6Om9wdGlvbmFsPFNldFN0YXRlPiBT
ZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgc3RkOjpvcHRpb25hbDxH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncz4gY2hhbmdlRmxhZ3M7Ci0gICAg
ZGVjb2RlciA+PiBjaGFuZ2VGbGFnczsKLSAgICBpZiAoIWNoYW5nZUZsYWdzKQorICAgIHN0ZDo6
b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IHN0YXRlOworICAgIGRlY29kZXIgPj4gc3Rh
dGU7CisgICAgaWYgKCFzdGF0ZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgIHN0YXRlQ2hhbmdl
Lm1fY2hhbmdlRmxhZ3MgPSAqY2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRD
aGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVudDo6ZGVjb2Rl
KGRlY29kZXIpOwotICAgICAgICBpZiAoIXN0cm9rZUdyYWRpZW50KQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZUdy
YWRpZW50ID0gV1RGTW92ZSgqc3Ryb2tlR3JhZGllbnQpOwotICAgIH0KLQotICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0cm9rZVBhdHRlcm4gPSBQYXR0ZXJu
OjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghc3Ryb2tlUGF0dGVybikKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5z
dHJva2VQYXR0ZXJuID0gV1RGTW92ZSgqc3Ryb2tlUGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYg
KHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmaWxsR3JhZGllbnQgPSBHcmFk
aWVudDo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIWZpbGxHcmFkaWVudCkKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKCpmaWxsR3JhZGllbnQpOwotICAgIH0KLQotICAgIGlm
IChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmaWxsUGF0dGVybiA9IFBhdHRl
cm46OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFmaWxsUGF0dGVybikKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5m
aWxsUGF0dGVybiA9IFdURk1vdmUoKmZpbGxQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hh
ZG93Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gc2hhZG93T2Zm
c2V0OwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd09mZnNldDsKLSAgICAgICAgaWYgKCFzaGFk
b3dPZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gKnNoYWRvd09mZnNldDsKLQotICAgICAg
ICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzaGFkb3dCbHVyOwotICAgICAgICBkZWNvZGVyID4+IHNo
YWRvd0JsdXI7Ci0gICAgICAgIGlmICghc2hhZG93Qmx1cikKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dCbHVyID0g
KnNoYWRvd0JsdXI7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc2hhZG93Q29sb3I7
Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93Q29sb3I7Ci0gICAgICAgIGlmICghc2hhZG93Q29s
b3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7Ci0KLSAgICAgICAgc3RkOjpv
cHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiBzaGFkb3dSYWRpdXNNb2RlOwotICAgICAgICBkZWNv
ZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGlmICghc2hhZG93UmFkaXVzTW9kZSkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gV1RGTW92ZSgqc2hhZG93UmFkaXVzTW9kZSk7Ci0g
ICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpv
cHRpb25hbDxmbG9hdD4gc3Ryb2tlVGhpY2tuZXNzOwotICAgICAgICBkZWNvZGVyID4+IHN0cm9r
ZVRoaWNrbmVzczsKLSAgICAgICAgaWYgKCFzdHJva2VUaGlja25lc3MpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzID0gKnN0cm9rZVRoaWNrbmVzczsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFu
Z2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdp
bmdNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPFRleHREcmF3aW5nTW9kZUZs
YWdzPiB0ZXh0RHJhd2luZ01vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gdGV4dERyYXdpbmdNb2Rl
OwotICAgICAgICBpZiAoIXRleHREcmF3aW5nTW9kZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUg
PSBXVEZNb3ZlKCp0ZXh0RHJhd2luZ01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xv
ckNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc3Ryb2tlQ29sb3I7Ci0g
ICAgICAgIGRlY29kZXIgPj4gc3Ryb2tlQ29sb3I7Ci0gICAgICAgIGlmICghc3Ryb2tlQ29sb3Ip
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdl
Lm1fc3RhdGUuc3Ryb2tlQ29sb3IgPSAqc3Ryb2tlQ29sb3I7Ci0gICAgfQotCi0gICAgaWYgKHN0
YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gZmlsbENvbG9y
OwotICAgICAgICBkZWNvZGVyID4+IGZpbGxDb2xvcjsKLSAgICAgICAgaWYgKCFmaWxsQ29sb3Ip
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdl
Lm1fc3RhdGUuZmlsbENvbG9yID0gKmZpbGxDb2xvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVD
aGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
U3R5bGVDaGFuZ2UpKSB7Ci0gICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cm9rZVN0eWxlKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VTdHlsZSA9
IHN0cm9rZVN0eWxlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpIHsKLSAgICAg
ICAgc3RkOjpvcHRpb25hbDxXaW5kUnVsZT4gZmlsbFJ1bGU7Ci0gICAgICAgIGRlY29kZXIgPj4g
ZmlsbFJ1bGU7Ci0gICAgICAgIGlmICghZmlsbFJ1bGUpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbFJ1bGUgPSAqZmls
bFJ1bGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpIHsKLSAg
ICAgICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gY29tcG9zaXRlT3BlcmF0b3I7
Ci0gICAgICAgIGRlY29kZXIgPj4gY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgICAgIGlmICghY29t
cG9zaXRlT3BlcmF0b3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSAqY29tcG9zaXRlT3Bl
cmF0b3I7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpIHsKLSAgICAgICAgc3Rk
OjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiBibGVu
ZE1vZGU7Ci0gICAgICAgIGlmICghYmxlbmRNb2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmJsZW5kTW9kZSA9ICpibGVu
ZE1vZGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2Up
KSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1YWxpdHk+IGltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGRlY29kZXIgPj4gaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eTsKLSAgICAgICAgaWYgKCFpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRl
LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSAqaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsK
LSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8
ZmxvYXQ+IGFscGhhOwotICAgICAgICBkZWNvZGVyID4+IGFscGhhOwotICAgICAgICBpZiAoIWFs
cGhhKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNo
YW5nZS5tX3N0YXRlLmFscGhhID0gKmFscGhhOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRp
YWxpYXNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkQW50aWFs
aWFzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAgaWYgKCFz
aG91bGRBbnRpYWxpYXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gKnNob3VsZEFudGlhbGlh
czsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7Ci0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgICAgIGRlY29kZXIg
Pj4gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxkU21vb3RoRm9udHMpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1f
c3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSAqc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgfQotCi0g
ICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpIHsKLSAgICAgICAgc3Rk
OjpvcHRpb25hbDxib29sPiBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgICAgIGRl
Y29kZXIgPj4gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgICAgICBpZiAoIXNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMgPSAqc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgIH0KLQotICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxib29s
PiBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtczsKLSAgICAgICAgaWYgKCFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9ICpzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsK
LSAgICB9Ci0KLSAgICByZXR1cm4geyB7IHN0YXRlQ2hhbmdlIH0gfTsKLX0KLQotY2xhc3MgU2V0
TGluZUNhcCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICAgICAgOiBt
X2xpbmVDYXAobGluZUNhcCkKLSAgICB7Ci0gICAgfQotCi0gICAgTGluZUNhcCBsaW5lQ2FwKCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lQ2FwOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIExpbmVDYXAgbV9s
aW5lQ2FwOwotfTsKLQotY2xhc3MgU2V0TGluZURhc2ggewotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZURhc2g7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLSAgICAgICAgOiBt
X2Rhc2hBcnJheShkYXNoQXJyYXkpCi0gICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZzZXQp
Ci0gICAgewotICAgIH0KLQotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkgY29uc3Qg
eyByZXR1cm4gbV9kYXNoQXJyYXk7IH0KLSAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXNoT2Zmc2V0OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2
YXRlOgotICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKLSAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7
Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRMaW5lRGFzaDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hBcnJheTsK
LSAgICBlbmNvZGVyIDw8IG1fZGFzaE9mZnNldDsKKyAgICByZXR1cm4gU2V0U3RhdGUoKnN0YXRl
KTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8U2V0TGluZURh
c2g+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9w
dGlvbmFsPERhc2hBcnJheT4gZGFzaEFycmF5OwotICAgIGRlY29kZXIgPj4gZGFzaEFycmF5Owot
ICAgIGlmICghZGFzaEFycmF5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gZGFzaE9mZnNldDsKLSAgICBkZWNvZGVyID4+IGRhc2hPZmZz
ZXQ7Ci0gICAgaWYgKCFkYXNoT2Zmc2V0KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgcmV0dXJuIHt7ICpkYXNoQXJyYXksICpkYXNoT2Zmc2V0IH19OwotfQotCi1jbGFzcyBT
ZXRMaW5lSm9pbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi0gICAg
ICAgIDogbV9saW5lSm9pbihsaW5lSm9pbikKLSAgICB7Ci0gICAgfQotCi0gICAgTGluZUpvaW4g
bGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IExpbmVKb2luIG1fbGluZUpvaW47Ci19OwotCi1jbGFzcyBTZXRNaXRlckxpbWl0IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNl
dE1pdGVyTGltaXQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQot
ICAgIFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLSAgICAgICAgOiBtX21pdGVyTGlt
aXQobWl0ZXJMaW1pdCkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBtX21p
dGVyTGltaXQ7Ci19OwotCi1jbGFzcyBDbGVhclNoYWRvdyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLX07Ci0KIC8vIEZJWE1FOiB0
cmVhdCBhcyBkcmF3aW5nIGl0ZW0/CiBjbGFzcyBDbGlwIHsKIHB1YmxpYzoKQEAgLTE2MTIsOTEg
KzExMzQsMjAgQEAgc3RkOjpvcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFkaWVudD4gRmlsbFJlY3RX
aXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICByZXR1cm4ge3sgKnJlY3Qs
IGdyYWRpZW50LT5nZXQoKSB9fTsKIH0KIAotY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0
cnVlOwotCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKLSAgICAgICAgOiBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAg
ICAgICAsIG1fb3Aob3ApCi0gICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQot
ICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLSAgICBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3A7
IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gc3RkOjpudWxsb3B0OyB9Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZp
bGxDb21wb3NpdGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBGbG9h
dFJlY3QgbV9yZWN0OwotICAgIENvbG9yIG1fY29sb3I7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
bV9vcDsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwgbV9jb2xv
cjsKLSAgICBlbmNvZGVyIDw8IG1fb3A7Ci0gICAgZW5jb2RlciA8PCBtX2JsZW5kTW9kZTsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8RmlsbENvbXBvc2l0ZWRS
ZWN0PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAg
ICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBjb2xvcjsKLSAgICBkZWNvZGVyID4+IGNvbG9yOwotICAgIGlmICghY29s
b3IpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPENv
bXBvc2l0ZU9wZXJhdG9yPiBvcDsKLSAgICBkZWNvZGVyID4+IG9wOwotICAgIGlmICghb3ApCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9k
ZT4gYmxlbmRNb2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgIGlmICghYmxlbmRN
b2RlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICpyZWN0
LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSB9fTsKLX0KLQogY2xhc3MgRmlsbFJvdW5kZWRSZWN0
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkZpbGxSb3VuZGVkUmVjdDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSB0cnVlOwogCi0gICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBGaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAg
ICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQogICAgIHsKICAgICB9CiAKICAgICBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQog
ICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KLSAgICBC
bGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KIAogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxsUm91bmRl
ZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CkBAIC0xNzA5LDcgKzExNjAsNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEZsb2F0Um91bmRlZFJlY3QgbV9yZWN0OwogICAgIENvbG9yIG1fY29sb3I7
Ci0gICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KQEAgLTE3MTcsNyArMTE2Nyw2IEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fcmVjdDsKICAgICBlbmNv
ZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX2JsZW5kTW9kZTsKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTE3MzMsMTIgKzExODIsNyBAQCBzdGQ6Om9wdGlvbmFsPEZp
bGxSb3VuZGVkUmVjdD4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
ICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgc3Rk
OjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVyID4+IGJsZW5kTW9k
ZTsKLSAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqYmxlbmRNb2RlIH19OworICAgIHJldHVybiB7
IHsgKnJlY3QsICpjb2xvciB9IH07CiB9CiAKIGNsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
IHsKQEAgLTE5NjEsNyArMTQwNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKLSAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAogICAg
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uOyB9CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0KQEAgLTIyNTYsMTMgKzE3MDAsMTEgQEAgdXNpbmcgRGlzcGxh
eUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgPCBBcHBseURldmljZVNjYWxlRmFjdG9yCiAg
ICAgLCBCZWdpblRyYW5zcGFyZW5jeUxheWVyCiAgICAgLCBDbGVhclJlY3QKLSAgICAsIENsZWFy
U2hhZG93CiAgICAgLCBDbGlwCiAgICAgLCBDbGlwT3V0CiAgICAgLCBDbGlwT3V0VG9QYXRoCiAg
ICAgLCBDbGlwUGF0aAogICAgICwgQ2xpcFRvSW1hZ2VCdWZmZXIKLSAgICAsIENvbmNhdGVuYXRl
Q1RNCiAgICAgLCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyCiAgICAgLCBEcmF3RWxsaXBzZQog
ICAgICwgRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIKQEAgLTIyNzgsNyArMTcyMCw2IEBAIHVzaW5n
IERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgICwgRHJhd1JlY3QKICAgICAsIERy
YXdTeXN0ZW1JbWFnZQogICAgICwgRW5kVHJhbnNwYXJlbmN5TGF5ZXIKLSAgICAsIEZpbGxDb21w
b3NpdGVkUmVjdAogICAgICwgRmlsbEVsbGlwc2UKICAgICAsIEZpbGxQYXRoCiAgICAgLCBGaWxs
UmVjdApAQCAtMjI4OCwyMyArMTcyOSwxNSBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6
OnZhcmlhbnQKICAgICAsIEZpbGxSb3VuZGVkUmVjdAogICAgICwgRmx1c2hDb250ZXh0CiAgICAg
LCBSZXN0b3JlCi0gICAgLCBSb3RhdGUKICAgICAsIFNhdmUKLSAgICAsIFNjYWxlCi0gICAgLCBT
ZXRDVE0KICAgICAsIFNldElubGluZUZpbGxDb2xvcgogICAgICwgU2V0SW5saW5lU3Ryb2tlQ29s
b3IKLSAgICAsIFNldExpbmVDYXAKLSAgICAsIFNldExpbmVEYXNoCi0gICAgLCBTZXRMaW5lSm9p
bgotICAgICwgU2V0TWl0ZXJMaW1pdAogICAgICwgU2V0U3RhdGUKICAgICAsIFNldFN0cm9rZVRo
aWNrbmVzcwogICAgICwgU3Ryb2tlRWxsaXBzZQogICAgICwgU3Ryb2tlTGluZQogICAgICwgU3Ry
b2tlUGF0aAogICAgICwgU3Ryb2tlUmVjdAotICAgICwgVHJhbnNsYXRlCiAKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKICAgICAsIEZpbGxMaW5lCkBAIC0yMzQxLDIwICsxNzc0LDEwIEBA
IHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlPiB7CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlLAogICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2F2ZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlJlc3RvcmUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpU
cmFuc2xhdGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGUsCi0g
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTY2FsZSwKLSAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldENUTSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbENvbG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3MsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTZXRTdGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNl
dExpbmVDYXAsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFz
aCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVKb2luLAotICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCwKLSAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyU2hhZG93LAogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkNsaXBPdXQsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlw
VG9JbWFnZUJ1ZmZlciwKQEAgLTIzNzYsNyArMTc5OSw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVu
dW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7CiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCBl
ZWU0NDcxZDM1NGU3NTE1MzEyNTE4OWRmY2M5NDE4YTM5NDUxNGExLi5hNTM1MDk5ODBhOTMxNDA3
ZTkxZTU0ZjlmOTIzMjVjZTVlNWQwNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwCkBAIC00MiwzNTAgKzQyLDE4OSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotUmVjb3JkZXI6OlJlY29yZGVyKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBtX2RyYXdHbHlw
aHNSZWNvcmRlcigqdGhpcywgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotewotICAgIG1fc3RhdGVT
dGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENUTS5tYXBSZWN0KGluaXRp
YWxDbGlwKSB9KTsKLX0KK1JlY29yZGVyOjpSZWNvcmRlcihjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNv
cmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKKyAgICA6
IEdyYXBoaWNzQ29udGV4dChpbml0aWFsQ2xpcCwgeyB9LCAgaW5pdGlhbENUTSkKKyAgICAsIG1f
ZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAKLVJlY29y
ZGVyOjp+UmVjb3JkZXIoKQogewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID09IDEp
OyAvLyBJZiB0aGlzIGZpcmVzLCBpdCBpbmRpY2F0ZXMgbWlzbWF0Y2hlZCBzYXZlL3Jlc3RvcmUu
CiB9CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBpbmxpbmVTdGF0ZUNoYW5nZUZs
YWdzIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5n
ZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLAotICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgIH07Ci0KLSAg
ICBpZiAoY2hhbmdlRmxhZ3MgIT0gKGNoYW5nZUZsYWdzICYgaW5saW5lU3RhdGVDaGFuZ2VGbGFn
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1f
c3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKK1JlY29yZGVyOjp+UmVjb3JkZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkgJiYg
IWNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlY29yZGVyOjph
cHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNo
YW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdz
KQordm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7Ci0gICAgaWYgKCFjb250YWluc09ubHlJbmxpbmVT
dGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7Ci0gICAgICAgIGlmIChhdXRvIHBh
dHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAgICAgICAgICAgIHJlY29y
ZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKLSAgICAgICAgaWYgKGF1dG8gcGF0
dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5maWxsUGF0dGVybikKLSAgICAgICAgICAgIHJlY29yZFJl
c291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKLSAgICAgICAgcmVjb3JkU2V0U3RhdGUo
Y2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoKmNoYW5n
ZXMubV9zdGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7Ci0KLSAgICBpZiAo
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhjaGFuZ2VzLm1fc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0SW5s
aW5lRmlsbENvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLnRyeUdldEFzU1JHQkFCeXRl
cygpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKKyAgICByZWNvcmRTYXZlKCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCkKK3Zv
aWQgUmVjb3JkZXI6OnJlc3RvcmUoKQogewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGN1cnJlbnRs
eSBpbnZva2VkIGluIGFuIGFkLWhvYyBtYW5uZXIgd2hlbiByZWNvcmRpbmcgZHJhd2luZyBpdGVt
cy4gV2Ugc2hvdWxkIGNvbnNpZGVyIGVpdGhlcgotICAgIC8vIHNwbGl0dGluZyBHcmFwaGljc0Nv
bnRleHQgc3RhdGUgY2hhbmdlcyBpbnRvIGluZGl2aWR1YWwgZGlzcGxheSBsaXN0IGl0ZW1zLCBv
ciByZWZhY3RvcmluZyB0aGUgY29kZSBzdWNoIHRoYXQKLSAgICAvLyB0aGlzIG1ldGhvZCBpcyBh
dXRvbWF0aWNhbGx5IGludm9rZWQgd2hlbiByZWNvcmRpbmcgYSBkcmF3aW5nIGl0ZW0uCi0gICAg
YXV0byYgc3RhdGVDaGFuZ2VzID0gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2U7Ci0gICAgYXV0
byBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0YXRlKGN1
cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOwotICAgIGlmICghY2hhbmdlc0Zyb21MYXN0
U3RhdGUpCisgICAgaWYgKCFzdGFja1NpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9H
X1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJwcmUtZHJhd2luZywgc2F2aW5n
IHN0YXRlICIgPDwgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2VzLm1fc3Rh
dGUsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKSk7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKHN0
YXRlQ2hhbmdlcywgY2hhbmdlc0Zyb21MYXN0U3RhdGUpOwotICAgIHN0YXRlQ2hhbmdlcy5tX2No
YW5nZUZsYWdzID0geyB9OwotICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUgPSBz
dGF0ZUNoYW5nZXMubV9zdGF0ZTsKLX0KLQotY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIFJl
Y29yZGVyOjpzdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLnN0YXRl
Q2hhbmdlLm1fc3RhdGU7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2UuYWNj
dW11bGF0ZShzdGF0ZSwgZmxhZ3MpOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExp
bmVDYXAgbGluZUNhcCkKLXsKLSAgICByZWNvcmRTZXRMaW5lQ2FwKGxpbmVDYXApOwotfQotCi12
b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxv
YXQgZGFzaE9mZnNldCkKLXsKLSAgICByZWNvcmRTZXRMaW5lRGFzaChkYXNoQXJyYXksIGRhc2hP
ZmZzZXQpOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9p
bikKLXsKLSAgICByZWNvcmRTZXRMaW5lSm9pbihsaW5lSm9pbik7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLXsKLSAgICByZWNvcmRTZXRNaXRl
ckxpbWl0KG1pdGVyTGltaXQpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOworICAg
IHJlY29yZFJlc3RvcmUoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCit2b2lkIFJl
Y29yZGVyOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVjdHNP
ZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgewotICAgICAgICBhdXRvJiBmZUlt
YWdlID0gZG93bmNhc3Q8RkVJbWFnZT4oZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYgKCFyZWNv
cmRSZXNvdXJjZVVzZShmZUltYWdlLnNvdXJjZUltYWdlKCkpKSB7Ci0gICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJ
bWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoIXNvdXJjZUltYWdlKSB7Ci0gICAgICAgIHJlY29yZERyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyKG51bGxwdHIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKKyAg
ICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFyZWNvcmRSZXNvdXJjZVVzZSgqc291cmNlSW1hZ2UpKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdl
UmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3Qs
IGZpbHRlcik7Ci19CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0
UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17Ci0gICAgbV9kcmF3R2x5
cGhzUmVjb3JkZXIuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMs
IHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwotfQorICAgIGlmIChzdGF0ZSgpLmhhc09ubHlQ
cmltaXRpdmVDaGFuZ2VzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCkpCisgICAgICAgICAg
ICByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoKmZpbGxDb2xvcigpLnRyeUdldEFzU1JHQkFCeXRl
cygpKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2Nh
bEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGNvbnN0
X2Nhc3Q8Rm9udCY+KGZvbnQpKTsKLSAgICByZWNvcmREcmF3R2x5cGhzKGZvbnQsIGdseXBocywg
YWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSk7Ci19CisgICAgICAg
IGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpTdHJva2VCcnVzaCkpCisgICAgICAgICAgICByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xv
cigqc3Ryb2tlQ29sb3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CiAKLXZvaWQgUmVjb3JkZXI6
OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKTsKKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcykpCisgICAgICAgICAgICByZWNvcmRT
ZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwogCi0gICAgaWYgKCFyZWNvcmRS
ZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAg
ICAgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OwotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKLSAgICByZWNvcmREcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3U3lzdGVtSW1h
Z2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkKLXsKLSAgICByZWNvcmREcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0
aW9uUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKLSAgICByZWNvcmREcmF3UGF0dGVy
bihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZvaWQg
UmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotCi0gICAgaWYg
KCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0OjpkcmF3UGF0dGVybihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6RmlsbEJydXNoKSkgeworICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gZmlsbFBhdHRl
cm4oKSkKKyAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgp
KTsKICAgICB9CiAKLSAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNhdmUoKQot
ewotICAgIHJlY29yZFNhdmUoKTsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVTdGFj
ay5sYXN0KCkuY2xvbmVGb3JTYXZlKCkpOwotfQotCi12b2lkIFJlY29yZGVyOjpyZXN0b3JlKCkK
LXsKLSAgICBpZiAoIW1fc3RhdGVTdGFjay5zaXplKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBp
ZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U3Ryb2tlQnJ1c2gpKSB7CisgICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBzdHJva2VQYXR0
ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2Uo
KSk7CisgICAgfQogCi0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICByZWNvcmRS
ZXN0b3JlKCk7CisgICAgcmVjb3JkU2V0U3RhdGUoc3RhdGUoKSk7CisgICAgZGlkQXBwbHlTdGF0
ZUNoYW5nZXMoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCi17Ci0gICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOwotICAgIHJlY29yZFRy
YW5zbGF0ZSh4LCB5KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5S
YWRpYW5zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigp
CiB7Ci0gICAgY3VycmVudFN0YXRlKCkucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICByZWNv
cmRSb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQog
ewotICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUpOwotICAgIHJlY29yZFNjYWxlKHNpemUp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigp
OwogfQorI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7Ci0gICAgaWYgKHRyYW5zZm9ybS5pc0lkZW50aXR5
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgY3VycmVudFN0YXRlKCkuY29uY2F0
Q1RNKHRyYW5zZm9ybSk7Ci0gICAgcmVjb3JkQ29uY2F0ZW5hdGVDVE0odHJhbnNmb3JtKTsKKyAg
ICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRh
dGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KKyAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9u
bHkgY2FsbGVkIGVhcmx5IG9uPworICAgIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2
aWNlU2NhbGVGYWN0b3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuc2V0Q1RNKHRyYW5zZm9y
bSk7Ci0gICAgcmVjb3JkU2V0Q1RNKHRyYW5zZm9ybSk7Ci19CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKIAotQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgp
LmN0bTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAKLXZvaWQgUmVjb3JkZXI6OmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNldEFscGhhKG9wYWNpdHkpOwogICAgIHJlY29y
ZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBhcHBlbmRTdGF0
ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7Ci0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci19
Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotfQorICAgIEdy
YXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmUoKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCi17Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3TGluZXNG
b3JUZXh0KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRo
cywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKKyAgICByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXll
cigpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIFJl
Y29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIocmVjdCwgc3R5bGUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgR3JhcGhpY3ND
b250ZXh0OjpjbGlwKHJlY3QpOworICAgIHJlY29yZENsaXAocmVjdCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6
OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogewotICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0VsbGlwc2Uo
cmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAgICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVs
ZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lk
IFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdQYXRoKHBhdGgpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xpcE91dChyZWN0KTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcik7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlwT3V0VG9Q
YXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdGb2N1c1Jp
bmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwotfQorICAgIGlmICghcmVjb3Jk
UmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLSNpZiBQTEFURk9STShNQUMpCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENs
aXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lk
IFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91Ymxl
LCBib29sJiwgY29uc3QgQ29sb3ImKQordm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xlYXJSZWN0KHJlY3QpOwogfQotI2VuZGlmCiAKIHZvaWQg
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAg
ICAgcmVjb3JkRmlsbFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAg
ICByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihyZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQog
ewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChyZWN0LCBncmFkaWVu
dCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29s
b3IsIG9wLCBibGVuZE1vZGUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3Jk
RmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsUm91bmRlZFJlY3QocmVjdCwgY29s
b3IsIGJsZW5kTW9kZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29y
ZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbEVsbGlwc2UocmVjdCk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURh
dGEoKSkgewogICAgICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPExpbmVEYXRhPigpKQpAQCAt
NDAyLDIxICsyNDEsMjEgQEAgdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKICAgICByZWNvcmRGaWxsUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxFbGxpcHNlKHJl
Y3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkU3Ryb2tlUmVjdChyZWN0
LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBSZWNvcmRlcjo6c3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3Qp
OwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lu
bGluZURhdGEoKSkgewogICAgICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPExpbmVEYXRhPigp
KQpAQCAtNDMzLDE0OCArMjcyLDE2OCBAQCB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkU3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNv
cmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVy
OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykK
IHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFN0
cm9rZUVsbGlwc2UocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRE
cmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRDbGVhclJlY3Qo
cmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TGluZShwb2lu
dDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0UoQ0cpCi12b2lkIFJlY29yZGVyOjphcHBseVN0cm9r
ZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBy
ZWNvcmREcmF3RWxsaXBzZShyZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6YXBwbHlGaWxsUGF0
dGVybigpCit2b2lkIFJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAg
IGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQXBwbHlGaWxs
UGF0dGVybigpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdGgo
cGF0aCk7CiB9Ci0jZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBjdXJy
ZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChjdXJyZW50U3RhdGUoKS5jdG0ubWFwUmVj
dChyZWN0KSk7Ci0gICAgcmVjb3JkQ2xpcChyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0
cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAg
IHJlY29yZENsaXBPdXQocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNv
cmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQorI2lmIFBMQVRGT1JNKE1B
QykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9v
bCYsIGNvbnN0IENvbG9yJikKIHsKLSAgICByZWNvcmRDbGlwT3V0VG9QYXRoKHBhdGgpOworICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikK
IHsKLSAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChjdXJyZW50U3RhdGUo
KS5jdG0ubWFwUmVjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSkpOwotICAgIHJlY29yZENsaXBQ
YXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQorI2VuZGlmCiAK
LUludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoYXV0byBpbnZlcnNlID0gY3VycmVudFN0YXRlKCku
Y3RtLmludmVyc2UoKSkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoaW52ZXJzZS0+
bWFwUmVjdChjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzKSk7CisgICAgaWYgKCFyZWNvcmRSZXNv
dXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotICAgIC8vIElmIHRoZSBDVE0gaXMgbm90IGludmVydGlibGUs
IHJldHVybiB0aGUgb3JpZ2luYWwgcmVjdC4KLSAgICAvLyBUaGlzIG1hdGNoZXMgQ0dSZWN0QXBw
bHlJbnZlcnNlQWZmaW5lVHJhbnNmb3JtIGJlaGF2aW9yLgotICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0
ZXJSZXN1bHRzJiByZXN1bHRzKQogewotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVy
KTsKLSAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QpOwot
fQorICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVjdHNPZlR5cGUoRmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRUltYWdlKSkgeworICAgICAgICBhdXRvJiBmZUltYWdlID0gZG93bmNhc3Q8
RkVJbWFnZT4oZWZmZWN0LmdldCgpKTsKKyAgICAgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShm
ZUltYWdlLnNvdXJjZUltYWdlKCkpKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRl
ciwgcmVzdWx0cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKLVJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gUmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5n
TW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkgY29u
c3QKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01l
dGhvZC52YWx1ZV9vcihSZW5kZXJpbmdNZXRob2Q6OkRpc3BsYXlMaXN0KSk7Ci19CisgICAgaWYg
KCFzb3VyY2VJbWFnZSkgeworICAgICAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgICAgICBy
ZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihudWxscHRyLCBzb3VyY2VJbWFnZVJlY3QsIGZp
bHRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lk
IFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkp
IHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBk
ZXN0aW5hdGlvbik7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZSgqc291cmNlSW1hZ2UpKSB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNl
SW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBBU1NFUlQocGxheWVyLmlkZW50aWZpZXIoKSk7Ci0gICAgcmVjb3JkUGFp
bnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworCisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwg
c291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwogfQotI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6OmFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lkIFJlY29y
ZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICAvLyBX
ZSBtb2RpZnkgdGhlIHN0YXRlIGRpcmVjdGx5IGhlcmUgaW5zdGVhZCBvZiBjYWxsaW5nIEdyYXBo
aWNzQ29udGV4dDo6c2NhbGUoKQotICAgIC8vIGJlY2F1c2UgdGhlIHJlY29yZGVkIGl0ZW0gd2ls
bCBzY2FsZSgpIHdoZW4gcmVwbGF5ZWQuCi0gICAgY3VycmVudFN0YXRlKCkuc2NhbGUoeyBkZXZp
Y2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IgfSk7CisgICAgcmVjb3JkUmVzb3VyY2VV
c2UoaW1hZ2UpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd05hdGl2
ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KIAotICAgIC8vIEZJWE1FOiB0aGlzIGNoYW5n
ZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNhY2hlZCBl
eHRlbnRzLgotICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgZWFybHkgb24/Ci0g
ICAgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Cit2b2lk
IFJlY29yZGVyOjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3sKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZERyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0
KTsKIH0KIAotRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCit2b2lkIFJlY29y
ZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
V1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBu
b3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0gICAgcmV0
dXJuIHJlY3Q7CisgICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi1jb25zdCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlJiBS
ZWNvcmRlcjo6Y3VycmVudFN0YXRlKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJu
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBBU1NFUlQobV9z
dGF0ZVN0YWNrLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAg
aWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UGF0dGVybihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQYXR0ZXJu
KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAot
UmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpCisjaWYgRU5B
QkxFKFZJREVPKQordm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
JiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgQVNTRVJUKG1f
c3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworICAg
IGlmICghcGxheWVyLmlkZW50aWZpZXIoKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnBh
aW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkUGFpbnRGcmFtZUZv
ck1lZGlhKHBsYXllci5pZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRpZgogCi1j
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAordm9pZCBSZWNvcmRl
cjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21v
b3RoaW5nTW9kZSkKIHsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgbV9kcmF3R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBocyhmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUp
OwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2Nh
bEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBjdG0udHJh
bnNsYXRlKHgsIHkpOworICAgIHJlY29yZFJlc291cmNlVXNlKGNvbnN0X2Nhc3Q8Rm9udCY+KGZv
bnQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdHbHlwaHMoZm9u
dCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJh
ZGlhbnMpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBkb3VibGUgYW5n
bGVJbkRlZ3JlZXMgPSByYWQyZGVnKHN0YXRpY19jYXN0PGRvdWJsZT4oYW5nbGVJblJhZGlhbnMp
KTsKLSAgICBjdG0ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKLSAgICAKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gcm90YXRpb247Ci0gICAgcm90YXRpb24ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdMaW5lc0ZvclRleHQocG9pbnQs
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCi12b2lkIFJl
Y29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBjdG0uc2NhbGUoc2l6ZSk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKHJlY3QsIHN0eWxlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCitSZWZQdHI8SW1hZ2VCdWZmZXI+
IFJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nTWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0CiB7Ci0gICAgY3RtID0g
bWF0cml4OworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5n
TWV0aG9kLnZhbHVlX29yKFJlbmRlcmluZ01ldGhvZDo6RGlzcGxheUxpc3QpKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBtYXRyaXgpCitGbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKIHsKLSAgICBj
dG0gKj0gbWF0cml4OworICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRv
RGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlzcGxheUxpc3Q6OlJl
Y29yZGVyLiIpOworICAgIHJldHVybiByZWN0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5
TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggODQ1ZWMwMDc3
MmVkMmM1NGExZTZjYjI2YjIxNTFkYWJhYTZlYzA3NS4uYWUzNDM3OWJlNjdmMDVlMTA0MmY2YWRj
NWFhYmY4OGMyNzBjMTczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
CkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogI2luY2x1
ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiSW5s
aW5lUGF0aERhdGEuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KQEAgLTUxLDcgKzUwLDcgQEAgY2xhc3MgUmVjb3JkZXIgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVj
b3JkZXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5
cGhzOjpZZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEZsb2F0UmVjdCYg
aW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBo
c1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRl
Y29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5S
ZWNvcmRlcigpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9
IDA7CkBAIC02MSw0NyArNjAsMzUgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRTYXZlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRSZXN0b3JlKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JB
PHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldElubGluZVN0cm9rZUNv
bG9yKFNSR0JBPHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0cm9r
ZVRoaWNrbmVzcyhmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVDYXAoTGluZUNh
cCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExp
bmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldE1pdGVyTGlt
aXQoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJikgPSAwOworCisjaWYgVVNFKENHKQorICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseVN0
cm9rZVBhdHRlcm4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRl
cm4oKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXAoY29uc3QgRmxv
YXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91dChjb25zdCBG
bG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TmF0aXZl
SW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFuc3Bh
cmVuY3lMYXllcigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZUxpbmVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxs
UmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0Jiwg
R3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25zdCBBcmNEYXRhJikgPSAwOwpAQCAtMTA5LDExICs5
NiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxCZXppZXJDdXJ2
ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgPSAwOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lk
IHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3QgQXJjRGF0YSYpID0gMDsKQEAgLTEy
MSwxMTYgKzEwNyw4MSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9r
ZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpID0gMDsKICNlbmRpZgogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotI2lmIFVT
RShDRykKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRE
cmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgPSAwOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbikgPSAwOwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxv
Y2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSA9IDA7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmKSA9IDA7CiAgICAg
dmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKEltYWdlQnVmZmVyJikgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShjb25zdCBTb3VyY2VJbWFnZSYpID0gMDsKICAg
ICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoRm9udCYpID0gMDsKIAotICAgIHN0cnVj
dCBDb250ZXh0U3RhdGUgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotICAgICAgICBG
bG9hdFJlY3QgY2xpcEJvdW5kczsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ug
c3RhdGVDaGFuZ2U7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIGxhc3REcmF3aW5nU3Rh
dGU7Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYg
Y2xpcCkKLSAgICAgICAgICAgIDogY3RtKHRyYW5zZm9ybSkKLSAgICAgICAgICAgICwgY2xpcEJv
dW5kcyhjbGlwKQotICAgICAgICAgICAgLCBsYXN0RHJhd2luZ1N0YXRlKHN0YXRlKQotICAgICAg
ICB7Ci0gICAgICAgIH0KLQotICAgICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JTYXZlKCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgQ29udGV4dFN0YXRlIHN0YXRlKGxhc3REcmF3aW5n
U3RhdGUsIGN0bSwgY2xpcEJvdW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5zdGF0ZUNoYW5nZSA9
IHN0YXRlQ2hhbmdlOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQ29udGV4dFN0YXRlIGNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBhdXRvIHN0YXRlID0gY2xvbmVGb3JTYXZlKCk7Ci0gICAgICAg
ICAgICBzdGF0ZS5sYXN0RHJhd2luZ1N0YXRlLmFscGhhID0gMTsKLSAgICAgICAgICAgIHJldHVy
biBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpOwotICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7Ci0gICAg
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgICAgIHZvaWQgY29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgICAgICB2b2lkIHNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKLSAgICB9OwotCi0gICAgY29uc3QgVmVjdG9yPENvbnRleHRTdGF0ZSwg
ND4mIHN0YXRlU3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlU3RhY2s7IH0KLQotICAgIGNv
bnN0IENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCkgY29uc3Q7Ci0gICAgQ29udGV4dFN0YXRl
JiBjdXJyZW50U3RhdGUoKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmlu
Z01vZGU+LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IG92ZXJyaWRlOwor
ICAgIAorCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpID0gMDsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAorICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVzdG9yZSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdGF0ZUNoYW5n
ZXMoKSBmaW5hbDsKICNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJv
b2wpIGZpbmFsIHsgfQotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBm
aW5hbCB7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwog
I2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0KSBmaW5hbDsKIAotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUo
KSBjb25zdCBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRV
cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNs
aXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdp
ZHRoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwotI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJS
ZXN1bHRzJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWdu
ZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9k
ZSkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBm
aW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRo
JikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CkBA
IC0yNDEsNDAgKzE5MiwyMyBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBi
b29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZXN0b3JlKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJvdGF0ZShmbG9h
dCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY2FsZShj
b25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5h
bDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAjaWYgRU5B
QkxFKFZJREVPKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGlu
Z01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBoc0FuZENhY2hl
Rm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tl
U3R5bGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25z
dCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7CiAKLSAg
ICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwotCi0gICAgVmVjdG9yPENvbnRleHRTdGF0ZSwgND4gbV9z
dGF0ZVN0YWNrOwogICAgIERyYXdHbHlwaHNSZWNvcmRlciBtX2RyYXdHbHlwaHNSZWNvcmRlcjsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCmlu
ZGV4IDFmZGM2YmE1NmJmZGIyNjM2ZWZiMzQ2MmFkYTJhOTkwZDMzODk5NDUuLjFmYjRkZDc5NWFl
MTBhYThjY2NiY2RkODMxNGVlYTgwODZlOGRiNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcApAQCAtNDIsMTggKzQyLDEzIEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlckltcGw6OlJlY29y
ZGVySW1wbChEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0ds
eXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBSZWNvcmRlcihzdGF0ZSwgaW5pdGlh
bENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKK1JlY29yZGVySW1wbDo6
UmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgRmxvYXRSZWN0JiBp
bml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisg
ICAgOiBSZWNvcmRlcihpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5
cGhzKQogICAgICwgbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKIHsKICAgICBMT0dfV0lUSF9T
VFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVjb3JkaW5nIHdpdGggY2xpcCAiIDw8
IGluaXRpYWxDbGlwKTsKIH0KIAotUmVjb3JkZXJJbXBsOjp+UmVjb3JkZXJJbXBsKCkKLXsKLSAg
ICBBU1NFUlQoc3RhdGVTdGFjaygpLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQg
aW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgotfQotCiB2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkU2F2ZSgpCiB7CiAgICAgYXBwZW5kPFNhdmU+KCk7CkBAIC02NCwzMSArNTksNiBA
QCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUmVzdG9yZSgpCiAgICAgYXBwZW5kPFJlc3RvcmU+
KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKLXsKLSAgICBhcHBlbmQ8VHJhbnNsYXRlPih4LCB5KTsKLX0KLQotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBhcHBlbmQ8Um90YXRlPihh
bmdsZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTY2FsZShjb25zdCBGbG9hdFNp
emUmIHNjYWxlKQotewotICAgIGFwcGVuZDxTY2FsZT4oc2NhbGUpOwotfQotCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQot
ewotICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
LXsKLSAgICBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KHRyYW5zZm9ybSk7Ci19Ci0KIHZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4gaW5saW5l
Q29sb3IpCiB7CiAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oaW5saW5lQ29sb3IpOwpA
QCAtMTA0LDkyICs3NCwyNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPih0
aGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKLXsKLSAgICBhcHBlbmQ8U2V0U3RhdGU+KHN0YXRlLCBj
aGFuZ2VGbGFncyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lQ2FwKExp
bmVDYXAgbGluZUNhcCkKLXsKLSAgICBhcHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGFy
cmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGFwcGVuZDxTZXRMaW5lRGFzaD4oYXJyYXks
IGRhc2hPZmZzZXQpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUpvaW4o
TGluZUpvaW4gam9pbikKLXsKLSAgICBhcHBlbmQ8U2V0TGluZUpvaW4+KGpvaW4pOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAg
ICBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4obGltaXQpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkK
LXsKLSAgICBhcHBlbmQ8Q2xpcD4oY2xpcFJlY3QpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQordm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKIHsK
LSAgICBhcHBlbmQ8Q2xpcE91dD4oY2xpcFJlY3QpOworICAgIGFwcGVuZDxTZXRTdGF0ZT4oc3Rh
dGUpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkK
LXsKLSAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGFwcGVu
ZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCi17Ci0gICAgYXBwZW5kPENs
aXBQYXRoPihwYXRoLCBydWxlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChzb3Vy
Y2VJbWFnZSkKLSAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKTsKLSAgICBhcHBlbmQ8RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI+KFdU
Rk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKLX0KLQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9v
dGhpbmdNb2RlIG1vZGUpCi17Ci0gICAgYXBwZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBocywg
YWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZm
ZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0
aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CisjaWYgVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVy
bigpCiB7Ci0gICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2VJZGVudGlmaWVyLCBpbWFn
ZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBhcHBlbmQ8QXBwbHlTdHJv
a2VQYXR0ZXJuPigpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUlt
YWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
blJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCiB7Ci0g
ICAgYXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7
CisgICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CiB9CisjZW5kaWYgLy8gVVNFKENHKQog
Ci12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgYXBwZW5k
PERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgYXBwZW5kPEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKQEAgLTIwMiw0NCArMTA2LDM0IEBA
IHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgYXBw
ZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0g
ICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7
Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcChjb25zdCBGbG9h
dFJlY3QmIGNsaXBSZWN0KQogewotICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihibG9ja0xv
Y2F0aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVM
aW5lcyk7CisgICAgYXBwZW5kPENsaXA+KGNsaXBSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKIHsKLSAg
ICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOworICAgIGFw
cGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIGFwcGVuZDxE
cmF3RWxsaXBzZT4ocmVjdCk7CisgICAgYXBwZW5kPENsaXBPdXQ+KGNsaXBSZWN0KTsKIH0KIAot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7CisgICAgYXBwZW5kPENsaXBPdXRUb1BhdGg+KHBh
dGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29u
c3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0g
ICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7
CisgICAgYXBwZW5kPENsaXBUb0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xv
cik7CisgICAgYXBwZW5kPENsZWFyUmVjdD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yNTcsMjMgKzE1MSwy
MiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZwogICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFk
aWVudD4ocmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmls
bENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0PihyZWN0
LCBjb2xvciwgb3AsIG1vZGUpOworICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3QsIGNv
bG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBt
b2RlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihyZWN0
LCBjb2xvciwgbW9kZSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0
LCByb3VuZGVkUmVjdCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBh
cHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcik7
CisgICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGlu
ZURhdGEmIGxpbmUpCiB7CiAgICAgYXBwZW5kPEZpbGxMaW5lPihsaW5lKTsKQEAgLTI5Myw3ICsx
ODYsNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJl
emllckN1cnZlRGF0YSYgY3VydmUpCiB7CiAgICAgYXBwZW5kPEZpbGxCZXppZXJDdXJ2ZT4oY3Vy
dmUpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzAxLDI1ICsx
OTMsMTcgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiAgICAgYXBwZW5kPEZpbGxQYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhcHBlbmQ8
RmlsbEVsbGlwc2U+KHJlY3QpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0g
ICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4ocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAg
YXBwZW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9Ci0jZW5kaWYgLy8g
RU5BQkxFKFZJREVPKQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZDxTdHJv
a2VSZWN0PihyZWN0LCB3aWR0aCk7CisgICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOwog
fQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0KIHZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVuZDxTdHJv
a2VMaW5lPihsaW5lKTsKQEAgLTMzOSw3ICsyMjMsNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJiBjdXJ2ZSkKIHsKICAg
ICBhcHBlbmQ8U3Ryb2tlQmV6aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzQ3LDMzICsyMzAsODQgQEAgdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBhcHBlbmQ8U3Ryb2tl
UGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBh
cHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CisgICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBi
b3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsK
LSAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKKyAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50
MSwgcG9pbnQyKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5kPERyYXdFbGxp
cHNlPihyZWN0KTsKK30KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0
dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpOworICAgIGFwcGVuZDxEcmF3
UGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0
ZXJuKCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CisgICAgYXBwZW5kPERyYXdGb2N1
c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLSNlbmRpZiAvLyBV
U0UoQ0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQoreworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJlY3Rz
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Cit9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRB
cHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1h
Z2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4o
c2NhbGVGYWN0b3IpOworICAgIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGltYWdlSWRlbnRpZmll
ciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3sKKyAgICBhcHBlbmQ8RHJhd1N5
c3RlbUltYWdlPihzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXBwZW5kPERyYXdJbWFn
ZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChz
b3VyY2VJbWFnZSkKKyAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBhcHBlbmQ8RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI+
KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKK30KKwordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+KGlt
YWdlSWRlbnRpZmllciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFj
aW5nLCBvcHRpb25zKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgYXBwZW5kPFBhaW50RnJh
bWVGb3JNZWRpYT4oaWRlbnRpZmllciwgZGVzdGluYXRpb24pOworfQorI2VuZGlmCisKK3ZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSBtb2RlKQoreworICAgIGFwcGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaHMs
IGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUpOworfQorCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykKK3sKKyAgICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2lu
dCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91
YmxlTGluZXMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlJiBzdHlsZSkKK3sKKyAgICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4o
cmVjdCwgc3R5bGUpOwogfQogCiBib29sIFJlY29yZGVySW1wbDo6cmVjb3JkUmVzb3VyY2VVc2Uo
TmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlKQpAQCAtNDE3LDIwICszNTEsMTYgQEAgc3RhdGljIGlu
bGluZSBmbG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQogCiBGbG9h
dFJlY3QgUmVjb3JkZXJJbXBsOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0
JiByZWN0KSBjb25zdAogewotICAgIEZsb2F0UmVjdCBib3VuZHMgPSByZWN0OwotICAgIGF1dG8m
IHN0YXRlID0gY3VycmVudFN0YXRlKCk7CisgICAgYXV0byBib3VuZHMgPSByZWN0OwogCi0gICAg
RmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dSYWRpdXM7Ci0gICAgQ29s
b3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cywgc2hhZG93Q29sb3IpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBi
b3VuZHM7Ci0gICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7Ci0gICAgICAg
IHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykp
OworICAgIGlmIChoYXNTaGFkb3coKSkgeworICAgICAgICBhdXRvIHNoYWRvd0V4dGVudCA9IGJv
dW5kczsKKyAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoZHJvcFNoYWRvdygpLm9mZnNldCk7Cisg
ICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KGRyb3BTaGFk
b3coKS5ibHVyUmFkaXVzKSk7CiAgICAgICAgIGJvdW5kcy51bml0ZShzaGFkb3dFeHRlbnQpOwog
ICAgIH0KIAotICAgIHJldHVybiBpbnRlcnNlY3Rpb24oc3RhdGUuY2xpcEJvdW5kcywgc3RhdGUu
Y3RtLm1hcFJlY3QoYm91bmRzKSk7CisgICAgcmV0dXJuIGludGVyc2VjdGlvbihjbGlwQm91bmRz
KCksIGdldENUTSgpLm1hcFJlY3QoYm91bmRzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3Bs
YXlMaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCmluZGV4
IDY0MjI2NWYwOTgwMjJjZjJiMDVmMTgwYzE3NGZhMDM0NjJmMmRkNDAuLjZkZTZhZWRmZmNiMTdk
YjJkMDgxYjQyYzFkZTZiYzMyOWEzOGJmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVySW1wbC5oCkBAIC0zNSw5ICszNSw4IEBAIGNsYXNzIFJlY29yZGVySW1wbCA6
IHB1YmxpYyBSZWNvcmRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXJJbXBsKTsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1Jl
Y29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+UmVjb3JkZXJJbXBsKCk7Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcklt
cGwoRGlzcGxheUxpc3QmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlw
aHM6Olllcyk7CisgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9kaXNw
bGF5TGlzdC5pc0VtcHR5KCk7IH0KIAogICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygp
IGZpbmFsIHsgfQpAQCAtNDcsNDcgKzQ2LDM1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9p
ZCByZWNvcmRTYXZlKCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRSZXN0b3JlKCkgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2NhbGUo
Y29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lRmls
bENvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNldElubGluZVN0
cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNldFN0cm9r
ZVRoaWNrbmVzcyhmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zm
c2V0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkQ2xlYXJTaGFkb3coKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJikgZmluYWw7CisKKyNpZiBVU0UoQ0cpCisgICAgdm9pZCByZWNv
cmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEFwcGx5RmlsbFBh
dHRlcm4oKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVy
KCkgZmluYWw7CisKICAgICB2b2lkIHJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisgICAgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0aChjb25z
dCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVj
dHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisKKyAg
ICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKwogICAgIHZv
aWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgdm9pZCByZWNv
cmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0Jiwg
R3JhZGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmRG
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRGaWxsTGluZShjb25zdCBMaW5l
RGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25zdCBBcmNEYXRhJikgZmlu
YWw7CkBAIC05NSwxMSArODIsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZEZpbGxCZXpp
ZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQg
cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZv
aWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKLSAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisKKyAg
ICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRTdHJva2VMaW5lKGNvbnN0
IExpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3QgQXJjRGF0
YSYpIGZpbmFsOwpAQCAtMTA3LDEzICs5MywyOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3Jk
U3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYK
ICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cpCi0gICAg
dm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEFw
cGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwor
ICAgIAorICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCByZWNv
cmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRE
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2
b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1h
Z2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lmIEVOQUJM
RShWSURFTykKKyAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2VuZGlmCi0g
ICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9h
dFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7CiAKICAg
ICBib29sIHJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJikgZmluYWw7CiAgICAgYm9vbCBy
ZWNvcmRSZXNvdXJjZVVzZShJbWFnZUJ1ZmZlciYpIGZpbmFsOwpAQCAtMTM5LDYgKzE0MCw4IEBA
IHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJlY29yZEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCiAgICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2Nh
bEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAogICAgIERpc3BsYXlMaXN0JiBtX2Rp
c3BsYXlMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCmluZGV4
IDhmZjE5ZDAwMzU0Y2RiZWRlM2E1YmExYWY3NThjZmYwMjNhMjVhMjIuLjY2ZmM5ZDg4MmE0ZDNm
N2RlOGU4OTEyYTFmMzBhZjE5OGQwMzUyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZXBsYXllci5jcHAKQEAgLTk3LDEwICs5NywxMCBAQCBpbmxpbmUgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBhcHBseVNldFN0YXRlSXRlbShHcmFw
aAogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH07CiAKLSAgICBpZiAoYXV0byBp
bWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZUNo
YW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKGF1dG8gaW1hZ2VJ
ZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGUoKS5maWxs
QnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm4gKmltYWdlSWRlbnRpZmllcjsKIAot
ICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3Rh
dGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSkpCisgICAgaWYg
KGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0u
c3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm4gKmltYWdlSWRl
bnRpZmllcjsKIAogICAgIHNldFN0YXRlSXRlbS5hcHBseShjb250ZXh0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNv
cmRlckhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcAppbmRleCBkMDljMTM3M2VhOWFhYWY0
YTE4NTEzNmVlODg1M2Q3ODhmYzQxNzhkLi5mY2FkZWYyMzhlMDlmZTAyODJhY2VlYzlhMWYyNWY4
NzMzOWQ5YzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enou
Y3BwCkBAIC0yOSwxNyArMjksMTggQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRHJhd0dseXBoc1JlY29yZGVyOjpE
cmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3
R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293bmVyKG93bmVyKQorRHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250
ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQoZGVzdGluYXRpb25Db250ZXh0KQogewog
fQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQ
b2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBtX293bmVyLmRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBz
dGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3
R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3Rh
cnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8v
Tmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5j
cHAKaW5kZXggOTExNDZkZmM2ZmQ4NGRmOGUyOTU0ZjAzNzdkMDA2NmE3NzIzM2NjOS4uZmViNTg3
ODczZTQwMTcwZGFlMzY2NGI1NGI5ZDY1NWM3NmM4MmEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTc3LDE0ICs3OCw3NSBAQCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2YQogfQogCiBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJlY29yZGVyKFBhaW50aW5nT3Bl
cmF0aW9ucyYgY29tbWFuZExpc3QpCi0gICAgOiBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQor
ICAgIDogR3JhcGhpY3NDb250ZXh0KEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkpCisgICAgLCBt
X2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQogewotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7
IH0sIHsgfSwgRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSB9KTsKIH0KIAotdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQor
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzYXZlKCkKK3sKKyAgICBzdHJ1Y3QgU2F2ZSBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4geworICAgICAgICB2aXJ0
dWFsIH5TYXZlKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnNhdmUoKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJTYXZlPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
R3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2F2ZT4o
KSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cmVzdG9yZSgpCit7CisgICAg
c3RydWN0IFJlc3RvcmUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+
IHsKKyAgICAgICAgdmlydHVhbCB+UmVzdG9yZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5yZXN0b3JlKCk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRl
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiUmVzdG9yZTw+XG4iOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGlmICghc3RhY2tTaXplKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOworICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPFJlc3RvcmU+KCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFw
cGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSB7CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTSkpIHsKKyAgICAgICAgc3Ry
dWN0IFNldENUTSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEFmZmlu
ZVRyYW5zZm9ybT4geworICAgICAgICAgICAgdmlydHVhbCB+U2V0Q1RNKCkgPSBkZWZhdWx0Owor
CisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxh
eWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTTw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9
OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldENUTT4oZ2V0Q1RNKCkpKTsKKyAg
ICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSkgewogICAgICAgICBzdHJ1Y3QgU3Ryb2tl
VGhpY2tuZXNzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
ZmxvYXQ+IHsKICAgICAgICAgICAgIHZpcnR1YWwgflN0cm9rZVRoaWNrbmVzc0NoYW5nZSgpID0g
ZGVmYXVsdDsKIApAQCAtOTUsMTQgKzE1NywxNCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgRwog
CiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VUaGlja25lc3ND
aGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczw+XG4iOwogICAgICAgICAgICAgfQog
ICAgICAgICB9OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVRoaWNrbmVz
c0NoYW5nZT4oc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPFN0cm9rZVRoaWNrbmVzc0NoYW5nZT4oc3Ryb2tlVGhpY2tuZXNzKCkpKTsKICAgICB9
CiAKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFu
Z2UpIHsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGUpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VTdHls
ZUNoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFN0cm9rZVN0
eWxlPiB7CiAgICAgICAgICAgICB2aXJ0dWFsIH5TdHJva2VTdHlsZUNoYW5nZSgpID0gZGVmYXVs
dDsKIApAQCAtMTEzLDE0ICsxNzUsODYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEcKIAogICAg
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU3Ryb2tlU3R5bGVDaGFuZ2U8Plxu
IjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlN0cm9rZVN0eWxlPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisK
KyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0cm9rZVN0
eWxlKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcCkpIHsKKyAgICAgICAgc3RydWN0IFNl
dExpbmVDYXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lQ2Fw
PiB7CisgICAgICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OworCisgICAg
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2Fw
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkxpbmVDYXA8PlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKwor
ICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lQ2FwPihsaW5lQ2FwKCkpKTsKKyAg
ICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6TGluZURhc2gpKSB7CisgICAgICAgIHN0cnVjdCBTZXRMaW5lRGFzaCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPERhc2hBcnJheSwgZmxvYXQ+
IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldExpbmVEYXNoKCkgPSBkZWZhdWx0OworCisgICAg
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lRGFz
aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2g8PlxuIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lRGFzaD4obGlu
ZURhc2goKS5kYXNoZXMsIGxpbmVEYXNoKCkub2Zmc2V0KSk7CisgICAgfQorCisgICAgaWYgKHN0
YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Okxp
bmVKb2luKSkgeworICAgICAgICBzdHJ1Y3QgU2V0TGluZUpvaW4gZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lSm9pbj4geworICAgICAgICAgICAgdmlydHVhbCB+
U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVKb2luKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luPD5c
biI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUo
KS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJM
aW1pdCkpIHsKKyAgICAgICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICAgICAgdmlydHVhbCB+U2V0
TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50
aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0
PD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0YXRlLnN0cm9rZVN0eWxlKSk7CisgICAgICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVyTGltaXQ+KG1pdGVyTGltaXQoKSkpOwogICAg
IH0KIAotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UpIHsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSkpIHsKICAgICAgICAgc3RydWN0
IENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+IHsKICAgICAgICAgICAgIHZp
cnR1YWwgfkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSgpID0gZGVmYXVsdDsKIApAQCAtMTMxLDE0
ICsyNjUsMTQgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEcKIAogICAgICAgICAgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiQ29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlPD5cbiI7CisgICAg
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpDb21wb3NpdGVNb2RlPD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlPihzdGF0ZS5j
b21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CisgICAgICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZT4oY29tcG9zaXRlTW9kZSgpLm9wZXJh
dGlvbiwgY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZSkpOwogICAgIH0KLQotICAgIGlmIChmbGFn
cyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpIHsKKyAgICAK
KyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzKSkgewogICAgICAgICBzdHJ1Y3QgU2hvdWxkQW50aWFs
aWFzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Ym9vbD4g
ewogICAgICAgICAgICAgdmlydHVhbCB+U2hvdWxkQW50aWFsaWFzQ2hhbmdlKCkgPSBkZWZhdWx0
OwogCkBAIC0xNDksODggKzI4MywxODQgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEcKIAogICAg
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2hvdWxkQW50aWFsaWFzQ2hhbmdl
PD5cbiI7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXM8PlxuIjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfTsKIAotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTaG91bGRBbnRpYWxpYXNDaGFu
Z2U+KHN0YXRlLnNob3VsZEFudGlhbGlhcykpOworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTaG91bGRBbnRpYWxpYXNDaGFuZ2U+KHNob3VsZEFudGlhbGlhcygpKSk7CiAgICAgfQorCisg
ICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit7CisgICAgc3RydWN0
IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxmbG9hdD4geworICAgICAgICB2aXJ0dWFsIH5CZWdpblRyYW5zcGFyZW5jeUxheWVy
KCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJl
cGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4o
KSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQmVnaW5UcmFuc3Bh
cmVuY3lMYXllcjw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4o
b3BhY2l0eSkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkKK3sKKyAgICBzdHJ1Y3QgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmlydHVhbCB+RW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJFbmRUcmFu
c3BhcmVuY3lMYXllcjw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXll
cigpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpKTsK
K30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBzdHJ1Y3QgQ2xpcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwKCkgPSBkZWZhdWx0
OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiQ2xpcDw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcD4ocmVjdCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxl
KQoreworICAgIHN0cnVjdCBDbGlwUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPFBhdGgsIFdpbmRSdWxlPiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXBQYXRoKCkg
PSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxh
eSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpjbGlw
UGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwUGF0aDw+XG4iOworICAg
ICAgICB9CisgICAgfTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBHcmFwaGlj
c0NvbnRleHQ6OmNsaXAocGF0aCwgd2luZFJ1bGUpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PENsaXBQYXRoPihwYXRoLCBjbGlwUnVsZSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQordm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzdHJ1Y3QgU2V0
TGluZUNhcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPExpbmVDYXA+
IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZUNhcCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3Qg
Q2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVj
dD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwT3V0KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIlNldExpbmVDYXA8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVu
dCA8PCAiQ2xpcE91dDw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXApKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+KHJlY3QpKTsKIH0KIAotdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hl
cywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHN0cnVjdCBTZXRMaW5lRGFzaCBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPERhc2hBcnJheSwgZmxvYXQ+IHsKLSAgICAg
ICAgdmlydHVhbCB+U2V0TGluZURhc2goKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IENsaXBPdXQg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoPiB7CisgICAgICAg
IHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAg
ICAgICAgICAgQ2Fpcm86OnNldExpbmVEYXNoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmNsaXBPdXQoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJTZXRMaW5lRGFzaDw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJDbGlwT3V0PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8U2V0TGluZURhc2g+KGRhc2hlcywgZGFzaE9mZnNldCkpOworICAgIGFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocGF0aCkpOwog
fQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxp
bmVKb2luKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIHN0
cnVjdCBTZXRMaW5lSm9pbiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PExpbmVKb2luPiB7Ci0gICAgICAgIHZpcnR1YWwgflNldExpbmVKb2luKCkgPSBkZWZhdWx0Owor
ICAgIHN0cnVjdCBDbGlwVG9JbWFnZUJ1ZmZlciBmaW5hbDogUGFpbnRpbmdPcGVyYXRpb24sIE9w
ZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdD4geworICAgICAg
ICB2aXJ0dWFsIH5DbGlwVG9JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAg
ICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c2V0TGluZUpvaW4oY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZl
cihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRMaW5lSm9pbjw+XG4i
OworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwVG9JbWFnZUJ1ZmZlcjw+XG4iOwog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVKb2lu
PihsaW5lSm9pbikpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBpZiAoYXV0byBu
YXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
KQorICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4obmF0aXZl
SW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5TZXRNaXRlckxpbWl0KCkgPSBkZWZh
dWx0OworICAgIHN0cnVjdCBDbGVhclJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xlYXJSZWN0KCkgPSBk
ZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRNaXRl
ckxpbWl0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAg
ICBDYWlybzo6Y2xlYXJSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7
CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRl
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2V0TWl0ZXJMaW1pdDw+
XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGVhclJlY3Q8PlxuIjsKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRNaXRlckxpbWl0Piht
aXRlckxpbWl0KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxDbGVhclJlY3Q+KHJlY3QpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yNDksNiArNDc5LDggQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxG
aWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKSk7CiB9CkBAIC0yNjksNiArNTAxLDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUoKSkpKTsKIH0KIApAQCAtMjkxLDM1ICs1MjUsMzMgQEAgdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50
JiBncmFkaWVudCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRp
ZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkp
KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBmaWxsU3BhY2VUcmFu
c2Zvcm0oKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgc3RydWN0
IEZpbGxSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRS
ZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0
YXRlLCBDb21wb3NpdGVPcGVyYXRvcj4gewogICAgICAgICB2aXJ0dWFsIH5GaWxsUmVjdCgpID0g
ZGVmYXVsdDsKLQogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBhdXRvJiBwbGF0Zm9y
bUNvbnRleHQgPSBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKTsKLQogICAgICAgICAgICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBhcmc8Mj4o
KSwgYXJnPDM+KCkpOwogICAgICAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4
dCwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8ND4oKSk7CiAgICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzw1PigpLCBCbGVu
ZE1vZGU6Ok5vcm1hbCk7CiAgICAgICAgIH0KLQogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
RmlsbFJlY3Q8PlxuIjsKICAgICAgICAgfQogICAgIH07Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNv
bG9yLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcikpOworICAgIAorICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBj
b21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSks
IGNvbXBvc2l0ZU9wZXJhdGlvbigpKSk7CiB9Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIHN0cnVjdCBGaWxsUm91
bmRlZFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJv
dW5kZWRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgQ2Fpcm86OlNo
YWRvd1N0YXRlPiB7CiAgICAgICAgIHZpcnR1YWwgfkZpbGxSb3VuZGVkUmVjdCgpID0gZGVmYXVs
dDsKQEAgLTM0NSw4ICs1NzcsOSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB9
CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+KHJvdW5kZWRSZWN0LCBjb2xvciwgc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxG
aWxsUm91bmRlZFJlY3Q+KHJvdW5kZWRSZWN0LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCks
IGJsZW5kTW9kZSgpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQpAQCAtMzY1LDMzICs1OTgsMTIgQEAgdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnMKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAg
ICAgVU5VU0VEX1BBUkFNKGNvbG9yKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUoKSkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHN0cnVjdCBGaWxsUGF0aCBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpGaWxsU291cmNlLCBDYWly
bzo6U2hhZG93U3RhdGU+IHsKLSAgICAgICAgdmlydHVhbCB+RmlsbFBhdGgoKSA9IGRlZmF1bHQ7
Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXll
cikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmZpbGxQYXRoKGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJGaWxsUGF0aDw+XG4iOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxQYXRoPihwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpKTsKLX0KLQogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgc3RydWN0IEZpbGxFbGxp
cHNlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBD
YWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CkBAIC00MTAsNTEgKzYyMiw1
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIHN0cnVjdCBTdHJva2VSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8RmxvYXRSZWN0LCBmbG9hdCwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRv
d1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgflN0cm9rZVJlY3QoKSA9IGRlZmF1bHQ7CisgICAg
c3RydWN0IEZpbGxQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
UGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2
aXJ0dWFsIH5GaWxsUGF0aCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAg
ICAgICAgICBDYWlybzo6c3Ryb2tlUmVjdChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCkpOworICAgICAgICAgICAgQ2Fpcm86
OmZpbGxQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCks
IGFyZzwyPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJv
a2VSZWN0PD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxQYXRoPD5cbiI7
CiAgICAgICAgIH0KICAgICB9OwogCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJlY3Qs
IGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwgQ2Fp
cm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAK
LXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRo
KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIHN0cnVjdCBTdHJva2VQYXRoIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86OlN0cm9rZVNv
dXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgflN0cm9rZVBhdGgo
KSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IFN0cm9rZVJlY3QgZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIGZsb2F0LCBDYWlybzo6U3Ryb2tlU291cmNl
LCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICAgICAgdmlydHVhbCB+U3Ryb2tlUmVjdCgpID0g
ZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c3Ryb2tl
UGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8
Mj4oKSk7CisgICAgICAgICAgICBDYWlybzo6c3Ryb2tlUmVjdChjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAg
ICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVBhdGg8PlxuIjsKKyAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiU3Ryb2tlUmVjdDw+XG4iOwogICAgICAgICB9CiAgICAg
fTsKIAotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CiAKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKKyAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uo
c3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC00
NzksMTA3ICs2OTcsMjkgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJv
a2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3RydWN0IENsZWFyUmVjdCBmaW5h
bCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4gewotICAgICAg
ICB2aXJ0dWFsIH5DbGVhclJlY3QoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewot
ICAgICAgICAgICAgQ2Fpcm86OmNsZWFyUmVjdChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
YXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRz
KSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsZWFy
UmVjdDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PENsZWFyUmVjdD4ocmVjdCkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhz
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5n
KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiB7Ci0gICAgc3RydWN0IERyYXdHbHlwaHMgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fp
cm86OlNoYWRvd1N0YXRlLCBGbG9hdFBvaW50LCBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4s
IGZsb2F0LCBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4sIGZsb2F0LCBUZXh0RHJhd2luZ01vZGVGbGFn
cywgZmxvYXQsIEZsb2F0U2l6ZSwgQ29sb3IsIEZvbnRTbW9vdGhpbmdNb2RlPiB7Ci0gICAgICAg
IHZpcnR1YWwgfkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IFN0cm9rZVBhdGgg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBDYWlybzo6U3Ry
b2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICAgICAgdmlydHVhbCB+U3Ryb2tl
UGF0aCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWly
bzo6ZHJhd0dseXBocyhjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwx
PigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLmdldCgpLAotICAgICAgICAgICAgICAg
IGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCksIGFyZzw4PigpLCBhcmc8OT4oKSwgYXJnPDEw
PigpLCBhcmc8MTE+KCksIGFyZzwxMj4oKSk7CisgICAgICAgICAgICBDYWlybzo6c3Ryb2tlUGF0
aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4o
KSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJy
aWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0dseXBoczw+
XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VQYXRoPD5cbiI7CiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKKyAg
ICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8geE9mZnNl
dCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVt
R2x5cGhzKTsKLSAgICB7Ci0gICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICAgICAg
Y2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OwotICAgICAg
ICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNv
dXJjZShzdGF0ZSksCi0gICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LAot
ICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5wbGF0Zm9ybURhdGEoKS5z
Y2FsZWRGb250KCkpLAotICAgICAgICBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgV1RGTW92
ZShjYWlyb0dseXBocyksIHhPZmZzZXQsIHN0YXRlLnRleHREcmF3aW5nTW9kZSwKLSAgICAgICAg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0Nv
bG9yLCBmb250U21vb3RoaW5nKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQotewotICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQuCi19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgc3RydWN0IERy
YXdOYXRpdmVJbWFnZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwgSW1hZ2VQYWludGlu
Z09wdGlvbnMsIGZsb2F0LCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAgICAgICAgdmlydHVhbCB+
RHJhd05hdGl2ZUltYWdlKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0Pigp
LCBhcmc8NT4oKSk7Ci0gICAgICAgIH0KKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0gICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAg
ICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TmF0aXZlSW1hZ2U8PlxuIjsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKICAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUltYWdl
PihuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBJbWFnZVBh
aW50aW5nT3B0aW9ucyhvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSwg
c3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKLX0KLQotdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0gICAgc3RydWN0IERyYXdQYXR0ZXJuIGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEludFNpemUs
IEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFuc2Zvcm0sIEZsb2F0UG9pbnQsIEltYWdl
UGFpbnRpbmdPcHRpb25zPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdQYXR0ZXJuKCkgPSBkZWZh
dWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpkcmF3UGF0dGVy
bihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBh
cmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSwgYXJnPDY+KCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAg
ICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdQYXR0ZXJuPD5cbiI7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgVU5VU0VEX1BBUkFNKHNwYWNpbmcpOwotICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPERyYXdQYXR0ZXJuPihuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCksIG5h
dGl2ZUltYWdlLnNpemUoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgb3B0aW9ucykpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVBhdGg+KHBh
dGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCkBAIC01OTgsOCArNzM4LDggQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1JlY3Q+
KHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHls
ZSwgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MsIGZpbGxD
b2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCkBAIC02MjEsNTAgKzc2MSw4IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50CiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBz
dGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRp
YWxpYXMpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9r
ZVN0eWxlKQotewotICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERhc2hBcnJheSwgYm9v
bCwgYm9vbCwgQ29sb3I+IHsKLSAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpID0g
ZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd0xp
bmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigp
LCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xpbmVzRm9yVGV4dDw+XG4iOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKLX0KLQotdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi17Ci0gICAgc3RydWN0
IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxGbG9hdFJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlPiB7Ci0gICAgICAg
IHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICAg
ICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJp
ZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcjw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKSk7CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBw
b2ludDIsIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBz
aG91bGRBbnRpYWxpYXMoKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTY4MywxMSArNzgxLDExIEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVjdCwgc3RhdGUuZmls
bENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcykpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBz
dHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0o
R1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0aCwgY29sb3IpOwpA
QCAtNzA3LDEyICs4MDUsMTIgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdAogICAgICAgICB9CiAg
ICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RHJhd0ZvY3VzUmluZz4ocGF0aCwgd2lkdGgsIGNvbG9yKSk7CiAjZW5kaWYKLSAgICBVTlVT
RURfUEFSQU0ob2Zmc2V0KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAjaWYgUExBVEZPUk0oV1BFKSB8
fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCByZWN0
cywgY29sb3IpOwpAQCAtNzMyLDM2OCArODMwLDE0NiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9h
dAogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0ZvY3VzUmluZz4ocmVjdHMsIHdpZHRoLCBjb2xvcikpOwog
I2VuZGlmCi0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c2F2ZSgpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKLSAgICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPD4gewotICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBkZWZhdWx0OwotCi0gICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnNh
dmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3Zl
cnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTYXZlPD5cbiI7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7Ci0KLSAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTYXZlPigpKTsKLQotICAgIG1fc3RhdGVTdGFjay5hcHBl
bmQobV9zdGF0ZVN0YWNrLmxhc3QoKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6cmVzdG9yZSgpCi17Ci0gICAgc3RydWN0IFJlc3RvcmUgZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKLSAgICAgICAgdmlydHVhbCB+UmVzdG9yZSgpID0gZGVm
YXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKS5yZXN0b3JlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVu
dCA8PCAiUmVzdG9yZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmICghc3RhY2tT
aXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgp
OwotCi0gICAgaWYgKG1fc3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJlc3RvcmU+KCkpOwotCi0gICAgbV9zdGF0ZVN0YWNr
LnJlbW92ZUxhc3QoKTsKLSAgICBpZiAobV9zdGF0ZVN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAg
bV9zdGF0ZVN0YWNrLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgc3RydWN0IFRyYW5zbGF0ZSBmaW5h
bCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0LCBmbG9hdD4gewotICAg
ICAgICB2aXJ0dWFsIH5UcmFuc2xhdGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgQ2Fpcm86OnRyYW5zbGF0ZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCksIGFyZzwxPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJUcmFuc2xhdGU8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxUcmFuc2xhdGU+KHgsIHkpKTsKLQotICAgIHsKLSAgICAgICAgYXV0byYg
c3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZS5jdG0udHJhbnNsYXRl
KHgsIHkpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0OwotICAgICAgICB0LnRyYW5zbGF0
ZSgteCwgLXkpOwotICAgICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gdCAqIHN0YXRlLmN0bUludmVy
c2U7Ci0gICAgfQorICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlv
bnMpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmds
ZUluUmFkaWFucykKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzdHJ1Y3QgUm90YXRlIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+Um90
YXRlKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1hZ2UgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgRmxv
YXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zLCBmbG9hdCwgQ2Fpcm86OlNo
YWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpID0gZGVmYXVs
dDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxh
eWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6cm90YXRlKGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZHJh
d1BsYXRmb3JtSW1hZ2UoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgp
LCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAg
ICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlJvdGF0ZTw+XG4iOworICAgICAg
ICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TmF0aXZlSW1hZ2U8PlxuIjsKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxSb3RhdGU+KGFuZ2xlSW5SYWRpYW5z
KSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsK
LSAgICAgICAgc3RhdGUuY3RtLnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0KLSAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIHQ7Ci0gICAgICAgIHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICAg
ICAgc3RhdGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0KKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdOYXRpdmVJ
bWFnZT4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgSW1h
Z2VQYWludGluZ09wdGlvbnMob3B0aW9ucywgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSwg
YWxwaGEoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQogewotICAgIHN0cnVjdCBTY2FsZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPEZsb2F0U2l6ZT4gewotICAgICAgICB2aXJ0dWFsIH5TY2FsZSgpID0gZGVmYXVs
dDsKKyAgICBzdHJ1Y3QgRHJhd1BhdHRlcm4gZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgSW50U2l6ZSwgRmxvYXRSZWN0LCBG
bG9hdFJlY3QsIEFmZmluZVRyYW5zZm9ybSwgRmxvYXRQb2ludCwgSW1hZ2VQYWludGluZ09wdGlv
bnM+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd1BhdHRlcm4oKSA9IGRlZmF1bHQ7CiAKICAgICAg
ICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJp
ZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNjYWxlKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oY29u
dGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSwgYXJnPDI+
KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCksIGFyZzw2PigpKTsKICAgICAgICAgfQog
CiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewot
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTY2FsZTw+XG4iOworICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJEcmF3UGF0dGVybjw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPFNjYWxlPihzaXplKSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1
dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGUuY3RtLnNjYWxl
KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IHQ7Ci0gICAgICAgIHQuc2NhbGUoMSAvIHNpemUud2lkdGgoKSwgMSAvIHNpemUuaGVpZ2h0KCkp
OwotICAgICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gdCAqIHN0YXRlLmN0bUludmVyc2U7Ci0gICAg
fQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJh
d1BhdHRlcm4+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgbmF0aXZlSW1hZ2Uuc2l6ZSgp
LCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKSk7
CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgc3RydWN0IENvbmNhdENUTSBmaW5h
bCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4gewot
ICAgICAgICB2aXJ0dWFsIH5Db25jYXRDVE0oKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBl
eGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAg
ICAgewotICAgICAgICAgICAgQ2Fpcm86OmNvbmNhdENUTShjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwg
IkNvbmNhdENUTTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGF1dG8gaW52ZXJzZSA9
IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgaWYgKCFpbnZlcnNlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDb25jYXRDVE0+KHRyYW5zZm9ybSkpOwotCi0g
ICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIHN0YXRlLmN0bSAqPSB0
cmFuc2Zvcm07Ci0gICAgc3RhdGUuY3RtSW52ZXJzZSA9IGludmVyc2UudmFsdWUoKSAqIHN0YXRl
LmN0bUludmVyc2U7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICBHcmFwaGlj
c0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0KKyNl
bmRpZgogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7
Ci0gICAgc3RydWN0IFNldENUTSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEFmZmluZVRyYW5zZm9ybT4gewotICAgICAgICB2aXJ0dWFsIH5TZXRDVE0oKSA9IGRlZmF1
bHQ7CisgICAgc3RydWN0IERyYXdHbHlwaHMgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86
OlNoYWRvd1N0YXRlLCBGbG9hdFBvaW50LCBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4sIGZs
b2F0LCBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4sIGZsb2F0LCBUZXh0RHJhd2luZ01vZGVGbGFncywg
ZmxvYXQsIEZsb2F0U2l6ZSwgQ29sb3IsIEZvbnRTbW9vdGhpbmdNb2RlPiB7CisgICAgICAgIHZp
cnR1YWwgfkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAg
ICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0oY29udGV4dEZvclJlcGxheShyZXBsYXllciks
IGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3R2x5cGhzKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJn
PDQ+KCkuZ2V0KCksCisgICAgICAgICAgICAgICAgYXJnPDU+KCksIGFyZzw2PigpLCBhcmc8Nz4o
KSwgYXJnPDg+KCksIGFyZzw5PigpLCBhcmc8MTA+KCksIGFyZzwxMT4oKSwgYXJnPDEyPigpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRDVE08PlxuIjsKKyAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0dseXBoczw+XG4iOwogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgaWYg
KCFpbnZlcnNlKQorICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldENUTT4odHJhbnNmb3JtKSk7
Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgc3RhdGUuY3Rt
ID0gdHJhbnNmb3JtOwotICAgIHN0YXRlLmN0bUludmVyc2UgPSBpbnZlcnNlLnZhbHVlKCk7Ci19
Ci0KLUFmZmluZVRyYW5zZm9ybSBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpnZXRDVE0oR3JhcGhp
Y3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3Rh
dGVTdGFjay5sYXN0KCkuY3RtOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBzdHJ1Y3QgQmVnaW5U
cmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJCZWdpblRyYW5zcGFyZW5jeUxh
eWVyPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4ob3BhY2l0eSkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBzdHJ1Y3QgRW5kVHJh
bnNwYXJlbmN5TGF5ZXIgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+
IHsKLSAgICAgICAgdmlydHVhbCB+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0K
LSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxh
eWVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJFbmRUcmFuc3BhcmVuY3lMYXllcjw+XG4iOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpKTsKLX0KLQot
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBzdHJ1Y3QgQ2xpcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEZsb2F0UmVjdD4gewotICAgICAgICB2aXJ0dWFsIH5DbGlwKCkgPSBkZWZhdWx0OwotCi0g
ICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92
ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlwKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiQ2xpcDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPENsaXA+KHJlY3QpKTsKLQorICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsK
KyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKICAgICB7
Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAgc3Rh
dGUuY2xpcEJvdW5kcy5pbnRlcnNlY3Qoc3RhdGUuY3RtLm1hcFJlY3QocmVjdCkpOwotICAgIH0K
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4gewotICAgICAgICB2aXJ0dWFsIH5DbGlwT3V0KCkg
PSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxh
eSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlw
T3V0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOworICAgICAgICBhdXRvIHlP
ZmZzZXQgPSBwb2ludC55KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyArK2kpIHsKKyAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlwaHNbaV0sIHhP
ZmZzZXQsIHlPZmZzZXQgfTsKKyAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0ud2lk
dGgoKTsKICAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlw
T3V0PihyZWN0KSk7Ci19CisgICAgfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNs
aXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGg+IHsKLSAgICAgICAgdmlydHVhbCB+
Q2xpcE91dCgpID0gZGVmYXVsdDsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0gICAgICAg
IHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVu
dCA8PCAiQ2xpcE91dDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPENsaXBPdXQ+KHBhdGgpKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fpcm86OkZpbGxTb3Vy
Y2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKKyAgICAgICAgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCisgICAgICAgIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9u
dF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCisgICAgICAgIGZvbnQuc3lu
dGhldGljQm9sZE9mZnNldCgpLCBXVEZNb3ZlKGNhaXJvR2x5cGhzKSwgeE9mZnNldCwgdGV4dERy
YXdpbmdNb2RlKCksCisgICAgICAgIHN0cm9rZVRoaWNrbmVzcygpLCBzaGFkb3dPZmZzZXQoKSwg
c2hhZG93Q29sb3IoKSwgZm9udFNtb290aGluZykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQor
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQogewotICAg
IHN0cnVjdCBDbGlwUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PFBhdGgsIFdpbmRSdWxlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBQYXRoKCkgPSBkZWZhdWx0
OworICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERhc2hBcnJheSwgYm9vbCwgYm9vbCwg
Q29sb3I+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpID0gZGVmYXVsdDsK
IAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVy
KSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcFBhdGgoY29udGV4
dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICBD
YWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFBhdGg8PlxuIjsKKyAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xpbmVzRm9yVGV4dDw+XG4iOwogICAgICAg
ICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBQYXRoPihwYXRoLCBj
bGlwUnVsZSkpOwotCi0gICAgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5s
YXN0KCk7Ci0gICAgICAgIHN0YXRlLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHN0YXRlLmN0bS5tYXBS
ZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKSk7Ci0gICAgfQotfQorICAgIGlmICh3aWR0aHMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLUludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3Rh
Y2subGFzdCgpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0YXRlLmN0bUludmVyc2Uu
bWFwUmVjdChzdGF0ZS5jbGlwQm91bmRzKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2ludCwgdGhpY2tuZXNz
LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHJva2VDb2xvcigpKSk7CiB9
CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIHN0cnVjdCBDbGlw
VG9JbWFnZUJ1ZmZlciBmaW5hbDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdD4gewotICAgICAgICB2aXJ0dWFsIH5DbGlw
VG9JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVj
dCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAg
ICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dEZvclJlcGxheShyZXBsYXll
ciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCks
IGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlw
VG9JbWFnZUJ1ZmZlcjw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwot
ICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIG5hdGl2ZUlt
YWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpCi0gICAgICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPENsaXBUb0ltYWdlQnVmZmVyPihuYXRpdmVJbWFnZS0+cGxhdGZvcm1J
bWFnZSgpLCBkZXN0UmVjdCkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCi17CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihyZWN0
LCBzdHlsZSkpOwogfQogCiBGbG9hdFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cm91bmRU
b0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91
bmRpbmdNb2RlKQpAQCAtMTEwNiwxMiArOTgyLDQgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjphcHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50aW5nT3BlcmF0aW9uPiYmIGNvbW1hbmQK
ICAgICBtX2NvbW1hbmRMaXN0LmFwcGVuZChXVEZNb3ZlKGNvbW1hbmQpKTsKIH0KIAotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1l
ZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17
Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLSAgICBHcmFwaGljc0NvbnRleHQ6OnBh
aW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLX0KLSNlbmRpZgotCiB9IC8v
IG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWly
b09wZXJhdGlvblJlY29yZGVyLmgKaW5kZXggODNjNmQyN2Q2ZWEzNmM3OWJlYmQ3ODI1Zjk5Yjdj
NDM5MDhlZTU0Yi4uYzY1YzU3N2MyOTI5OWFjZWQ1ZDViZTdkYzhjNzYwMzcwMjM5YTk3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIu
aApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJp
Z2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNzggKzQyLDU5IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOworICAgIHZvaWQgc2F2ZSgpIG92ZXJy
aWRlOworICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHlTdGF0ZUNo
YW5nZXMoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwor
CisgICAgdm9pZCBjbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAg
IHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBv
dmVycmlkZTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsK
KyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldExpbmVDYXAoV2Vi
Q29yZTo6TGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBXZWJD
b3JlOjpEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihX
ZWJDb3JlOjpMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
KSBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKIAogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6R3JhZGllbnQmKSBvdmVycmlkZTsKICAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IFdlYkNvcmU6OkZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVu
ZE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAg
IHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJp
ZGU7CisKICAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92
ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgm
KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNv
bnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
LCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZv
aWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6TmF0aXZlSW1hZ2UmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxv
YXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdM
aW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgV2ViQ29yZTo6U3Ryb2tlU3R5
bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3Zl
cnJpZGU7CisKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgm
LCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQs
IGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBzYXZl
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHRy
YW5zbGF0ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFu
Z2xlSW5SYWRpYW5zKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSBnZXRDVE0oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBv
dmVycmlkZTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y2xpcE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwUGF0
aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwotICAg
IFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQg
Y2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6Ok5h
dGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKFdlYkNvcmU6
Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6
OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZv
aWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3
R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckds
eXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViQ29yZTo6Rm9udFNtb290aGluZ01v
ZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBi
b29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKIAogICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJik7CiAgICAgUGFpbnRp
bmdPcGVyYXRpb25zJiBtX2NvbW1hbmRMaXN0OwotCi0gICAgc3RydWN0IFN0YXRlIHsKLSAgICAg
ICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bTsKLSAgICAgICAgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtIGN0bUludmVyc2U7Ci0gICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjbGlwQm91
bmRzOwotICAgIH07Ci0gICAgVmVjdG9yPFN0YXRlLCAzMj4gbV9zdGF0ZVN0YWNrOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcAppbmRleCA1
ZDY2ZWI3MmFkMTNjMjRkYWMwOTVhOTQ1ZjYxNGE2ZjU1MjIyNDkyLi5iZWQxM2VjNTk4NDc1NzY3
NWRjOTI5ZmVkYjU1NzI0ZDQ3ZGEwYjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcApA
QCAtMjksMTcgKzI5LDE4IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZv
bnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0ds
eXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJhd0dseXBo
cywgRGVyaXZlRm9udEZyb21Db250ZXh0KQotICAgIDogbV9vd25lcihvd25lcikKK0RyYXdHbHlw
aHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRp
b25Db250ZXh0LCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkK
KyAgICA6IG1fZGVzdGluYXRpb25Db250ZXh0KG93bmVyKQogewogfQogCiB2b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZv
bnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBtX3Ntb290
aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZv
bnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBtX3Ntb290
aGluZ01vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCmluZGV4IGMxOWU3NDE1
NTdjMzA4Yzk0MWU0ZWY3MTVlM2RiNDY1OTRkMTg1YjYuLjJjZDc4NjVlY2E4MjllYjQ1NzgwZTlm
YjBlNzI0N2EzNzEyYmNjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCkBAIC0xNzYsMjUgKzE3NiwyMiBAQCB2b2lkIEZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBGb250JiBmb250LAogICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZv
cm1EYXRhLnNpemUoKSk7CiAgICAgRm9udENhc2NhZGU6OnNldENHQ29udGV4dEZvbnRSZW5kZXJp
bmdTdHlsZShjZ0NvbnRleHQsIGZvbnQucGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCksIGZh
bHNlLCBmb250LnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFk
b3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsK
LSAgICBncmFwaGljc0NvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwg
c2hhZG93Q29sb3IpOworICAgIGF1dG8gZHJvcFNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC5kcm9w
U2hhZG93KCk7CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC50
ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3Iu
aXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRy
YW5zbGF0aW9uT3JGbGlwcGVkKCkpOworICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhp
Y3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBk
cm9wU2hhZG93LmNvbG9yLmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRvdy5ibHVyUmFkaXVzICYmICgh
Z3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250
ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwogICAgIGlm
IChoYXNTaW1wbGVTaGFkb3cpIHsKICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vy
c2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcg
c3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFk
b3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xv
cigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAgICBD
b2xvciBzaGFkb3dGaWxsQ29sb3IgPSBkcm9wU2hhZG93LmNvbG9yLmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAgZmxvYXQgc2hhZG93
VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAgICAgICAgZmxvYXQg
c2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNldC53aWR0aCgpOwogICAg
ICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVu
J3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZl
LgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5o
ZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0x
IDogMSk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgZHJvcFNoYWRv
dy5vZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKCkgPyAtMSA6IDEpOwogICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250
ZXh0LCBzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpOwogICAgICAgICBDR0NvbnRleHRTaG93R2x5
cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzKTsK
ICAgICAgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKSB7Ci0gICAgICAgICAgICBD
R0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBwb2ludC54KCkgKyBzaGFkb3dPZmZz
ZXQud2lkdGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyBzaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9u
KGNnQ29udGV4dCwgcG9pbnQueCgpICsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKSArIGZvbnQu
c3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9mZnNldC5oZWln
aHQoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29u
dGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzKTsKICAgICAgICAgfQogICAgICAgICBn
cmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CkBAIC0yMDgsNyArMjA1LDcg
QEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgRm9udCYgZm9udCwKICAgICB9CiAKICAgICBpZiAoaGFzU2ltcGxlU2hh
ZG93KQotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNo
YWRvdyhkcm9wU2hhZG93KTsKIAogICAgIEZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nU3R5
bGUoY2dDb250ZXh0LCBvbGRGb250U21vb3RoaW5nU3R5bGUpOwogICAgIENHQ29udGV4dFNldFRl
eHRNYXRyaXgoY2dDb250ZXh0LCBzYXZlZE1hdHJpeCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDNj
Zjc0NjBjODBlM2JlMWQ1YmEzZjBjZWQ3YzE5YjI1ZGYyOWFiZjIuLjc4NWU5NGJlY2YwN2NkNGE4
NGM5YzM0ZDljZWNjODM4NTdlMDY5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC0yOTIsMTIgKzI5
MiwxMiBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3Qm94ZXMoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQogICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QoMiwgMiwgc2l6ZS53aWR0
aCgpIC0gMywgc2l6ZS5oZWlnaHQoKSAtIDMpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Io
Q29sb3I6OndoaXRlKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygzKTsKLSAgICBj
b250ZXh0LnNldExpbmVEYXNoKG1fZGFzaFdpZHRocywgMCk7CisgICAgY29udGV4dC5zZXRMaW5l
RGFzaCh7IG1fZGFzaFdpZHRocywgMCB9KTsKICAgICBtX3BhdGguYWRkUmVjdChmcmFtZVJlY3Qp
OwogICAgIG1fcGF0aC5jbG9zZVN1YnBhdGgoKTsKICAgICBjb250ZXh0LnN0cm9rZVBhdGgobV9w
YXRoKTsKIAotICAgIGNvbnRleHQuc2V0TGluZURhc2goRGFzaEFycmF5KCksIDApOworICAgIGNv
bnRleHQuc2V0TGluZURhc2goeyB7IH0sIDAgfSk7CiAgICAgbV9wYXRoLmNsZWFyKCk7CiAgICAg
bV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIGJveFRvcCArIGJveFNpemUpKTsKICAgICBtX3Bh
dGguYWRkTGluZVRvKEZsb2F0UG9pbnQoc2l6ZS53aWR0aCgpLCBib3hUb3AgKyBib3hTaXplKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hl
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tl
ci5jcHAKaW5kZXggMWIxODJhMWQzNmI3Y2ZhYWEwYjE2OWQwZDhjODU0MzVmNDNiNzY3ZC4uZTgw
ZjJlZTg5MTkzOTE0NDE4ZTg3OGJmMGE0YTI4NDBlZTY4OWQwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApAQCAtMzksNyAr
MzksNyBAQCBib29sIENvbnRlbnRmdWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNvbnRlbnRm
dWxQYWludChGcmFtZVZpZXcmIGZyYW1lVmlldykKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRCZWhh
dmlvcihQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwogICAgIGZyYW1l
Vmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyh0cnVlKTsKIAotICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY2hlY2tlckNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOworICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY2hlY2tlckNvbnRleHQoZnJhbWVWaWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0
KCksIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0
aW5nQ29udGVudGZ1bFBhaW50KTsKICAgICBmcmFtZVZpZXcucGFpbnQoY2hlY2tlckNvbnRleHQs
IGZyYW1lVmlldy5yZW5kZXJWaWV3KCktPmRvY3VtZW50UmVjdCgpKTsKIAogICAgIGZyYW1lVmll
dy5zZXRQYWludHNFbnRpcmVDb250ZW50cyhvbGRFbnRpcmVDb250ZW50cyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcAppbmRleCBjOWFiMjE3NjE0
MWZhN2EzMzlhMjA5N2IzYWJmOTc2NTA3ODdlNGYxLi40YmZmOGQwMDgzOTI1MTRjYmU2MmNhOTVk
NGU3NDNmYzE5N2YwMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVn
YWN5RWxsaXBzaXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lF
bGxpcHNpc0JveC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBMZWdhY3lFbGxpcHNpc0JveDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnMK
ICAgICBib29sIHNldFNoYWRvdyA9IGZhbHNlOwogICAgIGlmIChsaW5lU3R5bGUudGV4dFNoYWRv
dygpKSB7CiAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0gbGluZVN0eWxlLmNvbG9yQnlBcHBs
eWluZ0NvbG9yRmlsdGVyKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPmNvbG9yKCkpOwotICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPngo
KS52YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVTdHls
ZS50ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAg
Y29udGV4dC5zZXREcm9wU2hhZG93KHsgTGF5b3V0U2l6ZShsaW5lU3R5bGUudGV4dFNoYWRvdygp
LT54KCkudmFsdWUoKSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+eSgpLnZhbHVlKCkpLCBsaW5l
U3R5bGUudGV4dFNoYWRvdygpLT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsKICAg
ICAgICAgc2V0U2hhZG93ID0gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDI0YzgyYzlkNmJkNDNmNzRi
YTA1YWI1YWM3Njc5M2Q3NWQxNWU1NzcuLjhkOTdkMjU3MWUyNDUzZGYxOTI4YmRlNmM3N2M3NjMx
NWZiYzg4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcApAQCAtNzA1LDcgKzcwNSw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hh
ZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0
CiAgICAgICAgIGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXpl
IHNoYWRvd09mZnNldChib3hTaGFkb3ctPngoKS52YWx1ZSgpLCBib3hTaGFkb3ctPnkoKS52YWx1
ZSgpKTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFk
aXVzKCkudmFsdWUoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93
LT5jb2xvcigpKSwgYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgY29udGV4dC5z
ZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLnZhbHVlKCks
IHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJv
eFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6
IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiB9CiAKIEludGVycG9sYXRpb25RdWFsaXR5
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0eShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIEltYWdlJiBpbWFnZSwgY29uc3Qgdm9pZCogbGF5ZXIsIGNvbnN0
IExheW91dFNpemUmIHNpemUpCkBAIC0yMDg3LDcgKzIwODcsNyBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhdXRvIGxpbmVEYXNoID0gRGFz
aEFycmF5Ojpmcm9tKGRhc2hMZW5ndGgsIGdhcExlbmd0aCk7Ci0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGgpOworICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShsaW5lRGFzaCks
IGRhc2hMZW5ndGggfSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBz
dHJva2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6
CkBAIC0yNDU2LDcgKzI0NTYsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJv
eFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAgICAgICAg
ICAgRmxvYXRQb2ludCBzbmFwcGVkU2hhZG93T3JpZ2luID0gRmxvYXRQb2ludChyb3VuZFRvRGV2
aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi54KCksIGRldmljZVNjYWxlRmFjdG9yKSwgcm91bmRU
b0RldmljZVBpeGVsKHNoYWRvd1JlY3RPcmlnaW4ueSgpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwog
ICAgICAgICAgICAgRmxvYXRTaXplIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSBzbmFwcGVkU2hhZG93
T3JpZ2luIC0gcGl4ZWxTbmFwcGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAg
ICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1
c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICAgICAg
Y29udGV4dC5zZXREcm9wU2hhZG93KHsgc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVz
LCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIAogICAgICAgICAg
ICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBib3gg
aXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93ZXZlciwgZG9p
bmcgc28gc2F2ZXMgdGltZQpAQCAtMjU1OCw3ICsyNTU4LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlv
dXRSZWMKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAogICAgICAg
ICAgICAgYXV0byBzbmFwcGVkU2hhZG93T2Zmc2V0ID0gcm91bmRTaXplVG9EZXZpY2VQaXhlbHMo
c2hhZG93T2Zmc2V0LCBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgICAgICBjb250ZXh0LnNl
dFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBz
aGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBT
aGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0RHJvcFNo
YWRvdyh7IHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNo
YWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNo
YWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJl
Y3QsIGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAppbmRleCA4NTBiZGU0OGU0OTI4ZTg2ZGMxNzZiNjIzMjFmZWVkOWI2
ODZjM2NkLi44Y2Y5NjFlMGJjMjM2NGU5NjJjZGE4ODFmODU5ZTRmMzFhM2M5ODNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTIyNTMsMTQgKzIyNTMsMTQg
QEAgdm9pZCBSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcnMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclAKICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQog
ICAgICAgICBib29sIHVzZXNDb21wb3NpdGVPcGVyYXRpb24gPSBoYXNCbGVuZE1vZGUoKSAmJiAh
KHJlbmRlcmVyKCkuaXNMZWdhY3lTVkdSb290KCkgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPmlz
UmVuZGVyVmlld0xheWVyKCkpOwogICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZU9wZXJhdGlvbikK
LSAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnRleHQuY29tcG9z
aXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0Q29t
cG9zaXRlTW9kZSh7IGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpIH0p
OwogI2VuZGlmCiAKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKHJlbmRl
cmVyKCkub3BhY2l0eSgpKTsKIAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAg
IGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAgICAgICAgY29udGV4dC5zZXRDb21w
b3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpO
b3JtYWwpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgY29udGV4dC5j
b21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAjZW5kaWYKIAogI2lm
ZGVmIFJFVkVBTF9UUkFOU1BBUkVOQ1lfTEFZRVJTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDVmOThiOTEyNGEzNDlhYzc1NTc5Zjcx
MTM1ZWUwZjM4YWJiNGYxMmQuLjNlMmU2YmYxZGU1ZDU0ZWIzOGQ5MjdhNTFmMDdjODkxMGFlNmMx
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCkBAIC0xODMxLDcgKzE4MzEsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
RXZlbnRSZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5
ZXIgPSBbJl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBOdWxsR3Jh
cGhpY3NDb250ZXh0IG51bGxDb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxp
ZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgICAgIGF1dG8gZGlydHlSZWN0ID0gRmxvYXRSZWN0
KEZsb2F0UG9pbnQoZ3JhcGhpY3NMYXllci5vZmZzZXRGcm9tUmVuZGVyZXIoKSksIGdyYXBoaWNz
TGF5ZXIuc2l6ZSgpKTsKKyAgICAKKyAgICAgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBudWxsQ29u
dGV4dChkaXJ0eVJlY3QsIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVh
c29uczo6Tm9uZSk7CiAgICAgICAgIEV2ZW50UmVnaW9uIGV2ZW50UmVnaW9uOwogI2lmIEVOQUJM
RShFRElUQUJMRV9SRUdJT04pCiAgICAgICAgIGlmIChyZW5kZXJlcigpLnBhZ2UoKS5zaG91bGRC
dWlsZEVkaXRhYmxlUmVnaW9uKCkpCkBAIC0xODUzLDggKzE4NTUsNyBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgICAgICAgICAgZXZlbnRSZWdpb25D
b250ZXh0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KC1sYXllck9mZnNldCwgZ3Jh
cGhpY3NMYXllci5zaXplKCkpKSwgcmVuZGVyZXIoKS5zdHlsZSgpKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGF1dG8gZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoRmxvYXRQ
b2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NMYXllci5z
aXplKCkpKTsKLSAgICAgICAgcGFpbnRJbnRvTGF5ZXIoJmdyYXBoaWNzTGF5ZXIsIG51bGxDb250
ZXh0LCBkaXJ0eVJlY3QsIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7CisgICAgICAgIHBhaW50
SW50b0xheWVyKCZncmFwaGljc0xheWVyLCBudWxsQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChk
aXJ0eVJlY3QpLCB7IH0sICZldmVudFJlZ2lvbkNvbnRleHQpOwogCiAgICAgICAgIGV2ZW50UmVn
aW9uLnRyYW5zbGF0ZSh0b0ludFNpemUobGF5ZXJPZmZzZXQpKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDMwY2QzNDNlYTdkZjkxNjhjYzNjZGU0
N2RiZWY4Zjc1OWU4OGY3MzEuLjI1NmZjNzQ5NTZkYTMzODZhNTRkMzUyZGUxMWI2ZmY3MzY2OWEx
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTYw
NSw3ICs2MDUsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludFRleHRGaWVsZElubmVyU2hh
ZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdAogICAgIGNvbnN0IEZsb2F0U2l6
ZSBpbm5lclNoYWRvd09mZnNldCB7IDAsIDUgfTsKICAgICBjb25zdGV4cHIgYXV0byBpbm5lclNo
YWRvd0JsdXIgPSAxMC4wZjsKICAgICBhdXRvIGlubmVyU2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8
ZmxvYXQ+IHsgMCwgMCwgMCwgMC4wNGYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhpbm5lclNo
YWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRvd0NvbG9yKTsKKyAgICBjb250
ZXh0LnNldERyb3BTaGFkb3coeyBpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBp
bm5lclNoYWRvd0NvbG9yIH0pOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFj
ayk7CiAKICAgICBQYXRoIGlubmVyU2hhZG93UGF0aDsKQEAgLTIwODAsNyArMjA4MCw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKEltYWdlJiBpbWFnZSwg
Y29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgLy8gVXNlIHRoZSBHcmFwaGljc0NvbnRleHQgZnVu
Y3Rpb24sIGJlY2F1c2UgaXQgY2FsY3VsYXRlcyB0aGUgYmx1ciByYWRpdXMgaW4gY29udGV4dCBz
cGFjZSwKICAgICAvLyByYXRoZXIgdGhhbiBzY3JlZW4gc3BhY2UuCiAgICAgY29uc3RleHByIGF1
dG8gc2hhZG93Q29sb3IgPSBDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxwaGFCeXRlKDI2KTsKLSAg
ICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFkb3dDb2xv
cik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3coeyBGbG9hdFNpemUgeyB9LCAx
Niwgc2hhZG93Q29sb3IgfSk7CiAKICAgICAvLyBUaGUgY2lyY2xlIG11c3QgaGF2ZSBhbiBhbHBo
YSBjaGFubmVsIHZhbHVlIG9mIDEgZm9yIHRoZSBzaGFkb3cgY29sb3IgdG8gYXBwZWFyLgogICAg
IENHRmxvYXQgY2lyY2xlQ29sb3JDb21wb25lbnRzWzRdID0geyAwLCAwLCAwLCAxIH07CkBAIC0y
MjczLDcgKzIyNzMsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9J
bm5lclNoYWRvdyhjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYwogCiAgICAgYm9vbCBpc0Vt
cHR5ID0gIXN0YXRlcy5jb250YWluc0FueSh7IENvbnRyb2xTdGF0ZXM6OlN0YXRlczo6Q2hlY2tl
ZCwgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpJbmRldGVybWluYXRlIH0pOwogICAgIGF1dG8gZmly
c3RTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4geyAwLCAwLCAwLCBpc0VtcHR5ID8gMC4w
NWYgOiAwLjFmIH07Ci0gICAgY29udGV4dC5zZXRTaGFkb3coaW5uZXJTaGFkb3dPZmZzZXQsIGlu
bmVyU2hhZG93Qmx1ciwgZmlyc3RTaGFkb3dDb2xvcik7CisgICAgY29udGV4dC5zZXREcm9wU2hh
ZG93KHsgaW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgZmlyc3RTaGFkb3dDb2xv
ciB9KTsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0
aCBpbm5lclNoYWRvd1BhdGg7CkBAIC0yMjkwLDcgKzIyOTAsNyBAQCB2b2lkIFJlbmRlclRoZW1l
SU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgYwogICAgIGNvbnRleHQuZmlsbFBhdGgoaW5uZXJTaGFkb3dQYXRoKTsKIAogICAgIGNv
bnN0ZXhwciBhdXRvIHNlY29uZFNoYWRvd0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDEsIDEs
IDEsIDAuNWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUgeyAwLCAwIH0sIDEs
IHNlY29uZFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBGbG9hdFNp
emUgeyAwLCAwIH0sIDEsIHNlY29uZFNoYWRvd0NvbG9yIH0pOwogCiAgICAgY29udGV4dC5maWxs
UGF0aChpbm5lclNoYWRvd1BhdGgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCmluZGV4IDAxMGVjYmFlZDg3YTczYTQyMGFmYjk3ZThlODBmZWE2Mzc5ZmVk
M2UuLjEwZGM5MGU1N2U1YWUwZjQyNWEwZGFhYTM2NGY4MTRlNDQ5NDk5MDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI4MTYsNyArMjgxNiw3IEBA
IHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyKGNvbnN0IFJlbmRl
ckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQsCiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihwbGFj
ZWhvbGRlckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhhdHRh
Y2htZW50UGxhY2Vob2xkZXJCb3JkZXJXaWR0aCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHls
ZShEYXNoZWRTdHJva2UpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2goe2F0dGFjaG1lbnRQbGFj
ZWhvbGRlckJvcmRlckRhc2hMZW5ndGh9LCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
eyBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNoTGVuZ3RoIH0sIDAgfSk7CiAgICAgY29u
dGV4dC5zdHJva2VQYXRoKGJvcmRlclBhdGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDY3NTU2OGFmZjYxMThm
MDEzYmQxZDRmNTVhNmMzNjRmYThhZjM4ZTguLjgzMDliMmY4ZDRhMzFmYTAzYjFhYmY4NDM5ZGEw
ZjNlZjE2Mjg0MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVj
b3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVj
b3JhdGlvblBhaW50ZXIuY3BwCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBUZXh0RGVjb3JhdGlv
blBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKGNvbnN0IFRleHRSdW4mIHRleHRS
dW4sIGMKICAgICAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5jb2xvcigpOwog
ICAgICAgICAgICAgaWYgKG1fc2hhZG93Q29sb3JGaWx0ZXIpCiAgICAgICAgICAgICAgICAgbV9z
aGFkb3dDb2xvckZpbHRlci0+dHJhbnNmb3JtQ29sb3Ioc2hhZG93Q29sb3IpOwotICAgICAgICAg
ICAgbV9jb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93WCwgc2hhZG93WSAtIGV4dHJh
T2Zmc2V0KSwgc2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAg
ICAgICBtX2NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZ
IC0gZXh0cmFPZmZzZXQpLCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0p
OwogICAgICAgICAgICAgc2hhZG93ID0gc2hhZG93LT5uZXh0KCk7CiAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKaW5kZXggODg1ZDgyNmVlOWU3OTZm
NGI1YzViNTgzM2Y3MWEwMjhjNDU0MWE3YS4uZmU4ODY5YzE5ZTVmOGQ0M2I3ZmExNmU0MDFiNGZi
YzZkY2Y3ZWVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWlu
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCkBA
IC03NCw3ICs3NCw3IEBAIFNoYWRvd0FwcGxpZXI6OlNoYWRvd0FwcGxpZXIoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csCiAgICAgfQogCiAgICAgaWYg
KCFtX2F2b2lkRHJhd2luZ1NoYWRvdykKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250
ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBz
aGFkb3dDb2xvciB9KTsKIH0KIAogaW5saW5lIGJvb2wgU2hhZG93QXBwbGllcjo6aXNMYXN0U2hh
ZG93SXRlcmF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguY3BwCmluZGV4IDdlZDUzN2M5Mjc5Mzc3MGY0NDg4YWUyOWRmNDA3MjdkN2ViMWEzYTku
LjZjNzMwZWYwN2U0OGM3ZWNmOGM0MGUzN2UwMDM0NWNmYWI1NmM2OGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtNjksNyArNjksNyBA
QCBGbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlVXBkYXRlZFN0cm9rZUJvdW5kaW5n
Qm94KCkgY29uc3QKIHN0YXRpYyB2b2lkIHVzZVN0cm9rZVN0eWxlVG9GaWxsKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoYXV0byBncmFkaWVudCA9IGNvbnRleHQuc3Ryb2tl
R3JhZGllbnQoKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoKmdyYWRpZW50LCBj
b250ZXh0LnN0YXRlKCkuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIGNv
bnRleHQuc2V0RmlsbEdyYWRpZW50KCpncmFkaWVudCwgY29udGV4dC5zdHJva2VTcGFjZVRyYW5z
Zm9ybSgpKTsKICAgICBlbHNlIGlmIChQYXR0ZXJuKiBwYXR0ZXJuID0gY29udGV4dC5zdHJva2VQ
YXR0ZXJuKCkpCiAgICAgICAgIGNvbnRleHQuc2V0RmlsbFBhdHRlcm4oKnBhdHRlcm4pOwogICAg
IGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBv
cnQuY3BwCmluZGV4IGNjMzhlYzcwMzBlNjBjZTE3NTliMTMyODdkZTI1ZjczZDU2NWM4NTguLmI2
NTg2OGQxYmQzNGM5MGQ0YmJmZGQ0NzdhZDJjNzQyODJhMDU2YWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtNTAxLDEwICs1
MDEsMTIgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChjYW5TZXRMaW5lRGFzaCkKLSAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goZGFzaEFy
cmF5LCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZz
ZXQoKSkgKiBzY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
V1RGTW92ZShkYXNoQXJyYXkpLCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxl
LnN0cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZhY3RvciB9KTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAgfQorCisg
ICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCiB2b2lkIFNWR1JlbmRlclN1cHBv
cnQ6OnN0eWxlQ2hhbmdlZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMmZiOGYzM2E4NzBkZmNjZWI2MmUxNDk2NTZiMTQ0
MzcyMmViZWEyZC4uZjU3OWU1YTc1ZmU5MTBmNmU1YjU4YTlhZWZiNjgzNTg5NjIyMTBlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRl
eHQuY3BwCkBAIC0xMTUsMTIgKzExNSwxMiBAQCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnBy
ZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFBhaQogICAg
ICAgICBpZiAob3BhY2l0eSA8IDEgfHwgaGFzQmxlbmRNb2RlIHx8IGlzb2xhdGVNYXNrRm9yQmxl
bmRpbmcgfHwgaGFzSXNvbGF0aW9uKSB7CiAKICAgICAgICAgICAgIGlmIChoYXNCbGVuZE1vZGUp
Ci0gICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVPcGVy
YXRpb24obV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgc3R5bGUu
YmxlbmRNb2RlKCkpOworICAgICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0
Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9u
KCksIHN0eWxlLmJsZW5kTW9kZSgpIH0pOwogCiAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29u
dGV4dCgpLmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAKICAgICAgICAgICAgIGlm
IChoYXNCbGVuZE1vZGUpCi0gICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5z
ZXRDb21wb3NpdGVPcGVyYXRpb24obV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVy
YXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAgICAgICAgICAgIG1fcGFpbnRJbmZv
LT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY29t
cG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsIH0pOwogCiAgICAgICAgICAgICBt
X3JlbmRlcmluZ0ZsYWdzIHw9IEVuZE9wYWNpdHlMYXllcjsKICAgICAgICAgfQpAQCAtMjczLDcg
KzI3Myw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZChSZWZQ
dHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikKIAogICAgIC8vIEludmFsaWRhdGUgYW4gZXhp
c3RpbmcgYnVmZmVyIGlmIHRoZSBzY2FsZSBpcyBub3QgY29ycmVjdC4KICAgICBpZiAoaW1hZ2VC
dWZmZXIpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZv
LT5jb250ZXh0KCkuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZp
Y2VTY2FsZSk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5m
by0+Y29udGV4dCgpLmdldENUTSgpOwogICAgICAgICBJbnRTaXplIGV4cGFuZGVkQm91bmRpbmdC
b3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgSW50U2l6
ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94Lndp
ZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFu
ZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxlKCkpKSk7CiAgICAgICAg
IGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggNGRkN2Y4MGUzNzc3OTg3ZGNiNzBj
MWEzYzhhODdjZDhhNGZkNmZiOS4uY2Q4OGFkZjA4ZGRhODAzYmZkOTNmODk1Nzc0MDc2ODZhYzRj
NTQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0yNjks
MTQgKzI2OSwxNCBAQCBJbWFnZURyYXdSZXN1bHQgU1ZHSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlYwogICAgIEFTU0VSVCh2aWV3KTsK
IAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAg
ICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9y
KCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7
IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAg
ICBjb250ZXh0LmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSk7CiAKICAgICBmbG9hdCBh
bHBoYSA9IGNvbnRleHQuYWxwaGEoKTsKICAgICBib29sIGNvbXBvc2l0aW5nUmVxdWlyZXNUcmFu
c3BhcmVuY3lMYXllciA9IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSAhPSBDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlT3ZlciB8fCBvcHRpb25zLmJsZW5kTW9kZSgpICE9IEJsZW5kTW9kZTo6
Tm9ybWFsIHx8IGFscGhhIDwgMTsKICAgICBpZiAoY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5zcGFy
ZW5jeUxheWVyKSB7CiAgICAgICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBo
YSk7Ci0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJh
dG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlTW9kZSh7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6
Ok5vcm1hbCB9KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhvbm9yIG9wdGlv
bnMub3JpZW50YXRpb24oKSwgc2luY2UgSW1hZ2VCaXRtYXAncyBmbGlwWSBoYW5kbGluZyByZWxp
ZXMgb24gaXQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEwMDEK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCA1NDM4MTgyZGRlODc2M2ViYWQzOGYx
OTJkZjc5NWFhMDYwYjY1MWJiLi44ZGEzOTBmNmRhNzBlMzc5NTUwYTU3MmUwOWUwODQxMTg5YzJk
ZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC03NCwzMSArNzQsNiBAQCB2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJlc3RvcmUoKQogICAgIGhhbmRsZUl0ZW0o
RGlzcGxheUxpc3Q6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNw
bGF5TGlzdDo6VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlz
dDo6Um90YXRlKGFuZ2xlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlM
aXN0OjpTY2FsZShzY2FsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBoYW5kbGVJdGVtKERp
c3BsYXlMaXN0OjpTZXRDVE0oY3RtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6Y29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pCi17Ci0gICAg
aGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE0oY3RtKSk7Ci19Ci0KIHZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0SW5saW5lRmlsbENvbG9yKERpc3BsYXlMaXN0
OjpTZXRJbmxpbmVGaWxsQ29sb3ImJiBpdGVtKQogewogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShp
dGVtKSk7CkBAIC0xMjgsNDAgKzEwMywxNSBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OnNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSYmIGl0ZW0pCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH07CiAKLSAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5zdGF0
ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKCFmaXhQYXR0
ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGUoKS5zdHJva2VCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlQ2hh
bmdlKCkubV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKCFmaXhQYXR0ZXJuVGls
ZUltYWdlKGl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1
cm47CiAKICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwogfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIGhh
bmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVDYXAobGluZUNhcCkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVEYXNoKERpc3BsYXlMaXN0OjpTZXRMaW5l
RGFzaCYmIGl0ZW0pCi17Ci0gICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9p
bikKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbihsaW5lSm9pbikp
OwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxv
YXQgbGltaXQpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdChs
aW1pdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsZWFyU2hhZG93
KCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDbGVhclNoYWRvdygpKTsKLX0KLQog
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKICAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDbGlwKHJlY3QpKTsKQEAgLTM3MSwx
NCArMzIxLDkgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUmVjdFdpdGhH
cmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3IKICAgICBoYW5kbGVJdGVtKFdURk1v
dmUoaXRlbSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxDb21w
b3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRN
b2RlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3QocmVjdCwg
Y29sb3IsIGJsZW5kTW9kZSkpOworICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3Vu
ZGVkUmVjdChyZWN0LCBjb2xvcikpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCAzYmJhZjc2NWQwNWY0NGFiZjRkOTYxZTc2NmNl
NjU0Njk4ZWRlMjk0Li44MTg4OTY2YWZmYTcwOWU2ZmQwYTMxYmZjYTZjM2U3MTg1NjVjNThlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTU5LDIwICs1OSwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUoKTsKLSAgICB2b2lkIHRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZSk7Ci0gICAg
dm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNjYWxlKTsKLSAgICB2b2lkIHNl
dENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2b2lkIGNvbmNhdGVu
YXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwogICAgIHZvaWQgc2V0SW5s
aW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3ImJik7
CiAgICAgdm9pZCBzZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
SW5saW5lU3Ryb2tlQ29sb3ImJik7CiAgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQp
OwogICAgIHZvaWQgc2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlJiYpOwot
ICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVE
YXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmKTsKLSAgICB2b2lkIHNldExp
bmVKb2luKFdlYkNvcmU6OkxpbmVKb2luKTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQp
OwotICAgIHZvaWQgY2xlYXJTaGFkb3coKTsKICAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
OwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CkBA
IC05Nyw4ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0
aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudCYmKTsK
LSAgICB2b2lkIGZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3Jl
OjpCbGVuZE1vZGUpOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9k
ZSk7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKICAgICB2b2lkIGZpbGxMaW5lKGNvbnN0IFdlYkNvcmU6OkxpbmVEYXRhJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCmluZGV4IDI4MDJmZmU4
ZjgzOTdjMGVkNGRmMTIxYTAxN2ZlNzgxMDhmZjZjMjAuLjQxNGMzMWExMzIwYzBiMmU3ODZiYzhk
OWY2NTk4MTAyZDg3MGY0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1l
c3NhZ2VzLmluCkBAIC0yNSw0NyArMjUsMzUgQEAKIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIFNhdmUoKQogICAgIFJlc3Rv
cmUoKQotICAgIFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgIFJvdGF0ZShmbG9hdCBh
bmdsZSkKLSAgICBTY2FsZShXZWJDb3JlOjpGbG9hdFNpemUgc2NhbGUpCi0gICAgU2V0Q1RNKFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG0pCi0gICAgQ29uY2F0ZW5hdGVDVE0oV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIGN0bSkKKwogICAgIFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yIGl0ZW0pCiAgICAgU2V0SW5saW5lU3Ryb2tl
Q29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yIGl0ZW0pCiAg
ICAgU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBTZXRTdGF0ZShXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUgaXRlbSkKLSAgICBTZXRMaW5lQ2FwKGVudW06dWlu
dDhfdCBXZWJDb3JlOjpMaW5lQ2FwIGxpbmVDYXApCi0gICAgU2V0TGluZURhc2goV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIGl0ZW0pCi0gICAgU2V0TGluZUpvaW4oZW51bTp1aW50
OF90IFdlYkNvcmU6OkxpbmVKb2luIGxpbmVKb2luKQotICAgIFNldE1pdGVyTGltaXQoZmxvYXQg
bGltaXQpCi0gICAgQ2xlYXJTaGFkb3coKQorI2lmIFVTRShDRykKKyAgICBBcHBseVN0cm9rZVBh
dHRlcm4oKQorICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorI2VuZGlmCisgICAgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKworICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICBFbmRUcmFuc3BhcmVuY3lMYXllcigpCisKICAgICBDbGlw
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0
aCwgZW51bTp1aW50OF90IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQogICAgIENsaXBPdXQo
V2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
V2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKICAgICBDbGlwT3V0VG9QYXRoKFdl
YkNvcmU6OlBhdGggcGF0aCkKLSAgICBDbGlwUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGVudW06
dWludDhfdCBXZWJDb3JlOjpXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICBEcmF3R2x5cGhzKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCi0gICAgRHJhd0ZpbHRlcmVkSW1hZ2VC
dWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+
IHNvdXJjZUltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IHNvdXJjZUltYWdlUmVj
dCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyKQotICAgIERyYXdJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBX
ZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3Jj
UmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAg
RHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFnZVNpemUsIFdlYkNvcmU6OkZsb2F0
UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3Jl
OjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8
V2ViQ29yZTo6U3lzdGVtSW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVz
dGluYXRpb25SZWN0KQotICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwg
V2ViQ29yZTo6RmxvYXRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBoYXNlLCBXZWJDb3JlOjpGbG9hdFNpemUgc3Bh
Y2luZywgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAg
QmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotICAgIEVuZFRyYW5zcGFyZW5j
eUxheWVyKCkKLSAgICBEcmF3UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKQotICAgIERyYXdMaW5lKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBX
ZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MikKLSAgICBEcmF3TGluZXNGb3JUZXh0KFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0IGl0ZW0pCi0gICAgRHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgc3RydWN0IFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0KQotICAgIERyYXdQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBEcmF3Rm9j
dXNSaW5nUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IFdlYkNvcmU6OkNvbG9yIGNvbG9yKQotICAgIERyYXdGb2N1c1JpbmdSZWN0cyhWZWN0b3I8V2Vi
Q29yZTo6RmxvYXRSZWN0PiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29y
ZTo6Q29sb3IgY29sb3IpCisgICAgQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6
RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKKworICAgIENsZWFyUmVjdChXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCkKKwogICAgIEZpbGxSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogICAg
IEZpbGxSZWN0V2l0aENvbG9yKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpDb2xv
ciBjb2xvcikKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJlY3RXaXRoR3JhZGllbnQgaXRlbSkKLSAgICBGaWxsQ29tcG9zaXRlZFJlY3QoV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBlbnVtOnVpbnQ4X3QgV2Vi
Q29yZTo6Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVuZE1v
ZGUgYmxlbmRNb2RlKQotICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5kZWRS
ZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6Qmxl
bmRNb2RlIGJsZW5kTW9kZSkKKyAgICBGaWxsUm91bmRlZFJlY3QoV2ViQ29yZTo6RmxvYXRSb3Vu
ZGVkUmVjdCByZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVj
dCByb3VuZGVkSG9sZVJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorCisgICAgRmlsbEVsbGlw
c2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CiAgICAgRmlsbExpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRhdGEpCiAgICAgRmlsbEFy
YyhzdHJ1Y3QgV2ViQ29yZTo6QXJjRGF0YSBkYXRhKQpAQCAtNzMsMTEgKzYxLDEwIEBAIG1lc3Nh
Z2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewog
ICAgIEZpbGxCZXppZXJDdXJ2ZShzdHJ1Y3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhIGRhdGEp
CiAjZW5kaWYKICAgICBGaWxsUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0gICAgRmlsbEVsbGlw
c2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ29udmVydFRvTHVtaW5hbmNlTWFzaygp
Ci0gICAgVHJhbnNmb3JtVG9Db2xvclNwYWNlKFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFj
ZSBjb2xvclNwYWNlKQotICAgIFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXll
cklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uKQor
CiAgICAgU3Ryb2tlUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQorCisgICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKICNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBTdHJva2VMaW5lKHN0cnVjdCBXZWJDb3JlOjpMaW5l
RGF0YSBkYXRhKQogICAgIFN0cm9rZUFyYyhzdHJ1Y3QgV2ViQ29yZTo6QXJjRGF0YSBkYXRhKQpA
QCAtODUsMTMgKzcyLDMxIEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIg
Tm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIFN0cm9rZUJlemllckN1cnZlKHN0cnVjdCBXZWJD
b3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRpZgogICAgIFN0cm9rZVBhdGgoV2ViQ29y
ZTo6UGF0aCBwYXRoKQotICAgIFN0cm9rZUVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3Qp
Ci0gICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotI2lmIFVTRShDRykKLSAg
ICBBcHBseVN0cm9rZVBhdHRlcm4oKQotICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorCisgICAgRHJh
d1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAg
ICBEcmF3TGluZShXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MSwgV2ViQ29yZTo6RmxvYXRQb2lu
dCBwb2ludDIpCisKKyAgICBEcmF3RWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKyAg
ICBEcmF3UGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCisKKyAgICBEcmF3Rm9jdXNSaW5nUGF0aChX
ZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNv
bG9yIGNvbG9yKQorICAgIERyYXdGb2N1c1JpbmdSZWN0cyhWZWN0b3I8V2ViQ29yZTo6RmxvYXRS
ZWN0PiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29s
b3IpCisKKyAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNlSW1hZ2VJZGVudGlmaWVyLCBXZWJD
b3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0
ZXIpCisgICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlv
blJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQ
YWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3U3lzdGVtSW1hZ2UoUmVmPFdlYkNvcmU6
OlN5c3RlbUltYWdlPiBzeXN0ZW1JbWFnZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9u
UmVjdCkKKyAgICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2Vi
Q29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3Ry
dWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCisgICAgRHJhd1BhdHRl
cm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwg
V2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3QgdGlsZVJlY3Qs
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0sIFdlYkNvcmU6OkZsb2F0UG9pbnQg
cGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQ
YWludGluZ09wdGlvbnMgb3B0aW9ucykKKyNpZiBFTkFCTEUoVklERU8pCisgICAgUGFpbnRGcmFt
ZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJD
b3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCiAjZW5kaWYKLSAgICBBcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgRHJhd0dseXBocyhXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0dseXBocyBpdGVtKQorICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKKyAgICBEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisKKyAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkK
KyAgICBUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNl
IGNvbG9yU3BhY2UpCiAgICAgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZs
dXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eS5jcHAKaW5kZXggODU3N2NiYmRlNmQzOTAxZDM0NzA3NjFlZDMwZjc5
ZDk4ZTgyYjk4ZC4uNmNmYmFiY2E3YmNmYmVkYzU5NTQ4M2U4ZWViMWQ1YWIxMjA5NjZhOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcApAQCAtMzIsMzYg
KzMyLDIxIEBACiAjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlck1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5JiByZW5kZXJpbmdCYWNrZW5kLCBjb25zdCBGbG9hdFJlY3QmIGlu
aXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNS
ZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKLSAg
ICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcih7IH0sIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBk
ZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBEaXNwbGF5TGlzdDo6UmVjb3JkZXIoaW5pdGlh
bENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGVzdGlu
YXRpb25CdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpKQogICAgICwgbV9pbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikKICAgICAsIG1fcmVuZGVy
aW5nQmFja2VuZChyZW5kZXJpbmdCYWNrZW5kKQogewogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q29udmVydFRvTHVtaW5hbmNlTWFz
aygpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9y
bVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9y
U3BhY2UpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKLX0KLQogUmVuZGVyaW5nTW9kZSBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVyID8gbV9pbWFnZUJ1ZmZlci0+cmVuZGVyaW5nTW9kZSgp
IDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKQEAgLTc3LDMxICs2Miw2IEBAIHZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSZXN0b3JlKCkKICAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSZXN0b3JlKCkpOwogfQogCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkVHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSb3RhdGUoYW5nbGUpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgc2NhbGUpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6U2NhbGUoc2NhbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRDVE0odHJhbnNm
b3JtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRD
b25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb25jYXRlbmF0ZUNUTSh0
cmFuc2Zvcm0pKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKICAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRJbmxpbmVGaWxsQ29sb3Io
RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciB7IGNvbG9yIH0pKTsKQEAgLTExNyw5MiAr
NzcsMjYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldFN0
cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcykpOwogfQog
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUgeyBzdGF0ZSwgZmxh
Z3MgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNo
QXJyYXkmIGFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldExpbmVEYXNoKERpc3BsYXlMaXN0OjpTZXRMaW5l
RGFzaCB7IGFycmF5LCBkYXNoT2Zmc2V0IH0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldExpbmVKb2lu
KGxpbmVKb2luKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldE1pdGVyTGltaXQobGltaXQpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyU2hhZG93KCkKLXsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVhclNoYWRv
dygpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENs
aXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAocmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChy
ZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRD
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0
aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlw
T3V0VG9QYXRoKHBhdGgpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsKLX0KLQotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIEZpbHRlciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChzb3VyY2VJbWFnZSkKLSAgICAgICAg
aWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RmlsdGVy
ZWRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6
RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3RhdGUoRGlzcGxheUxpc3Q6OlNl
dFN0YXRlIHsgc3RhdGUgfSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUgbW9kZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9udCwgZ2x5cGhzLCBhZHZh
bmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ltYWdlQnVmZmVyKGlt
YWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucykpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJbWFnZShpbWFnZUlkZW50aWZp
ZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseVN0cm9rZVBhdHRlcm4oKSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3U3lz
dGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRB
cHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpEcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCkp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5Rmls
bFBhdHRlcm4oKSk7CiB9CisjZW5kaWYgLy8gVVNFKENHKQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3Ip
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1Bh
dHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKSk7CiB9CiAK
IHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBAIC0yMTUsNDQgKzEwOSwzNCBAQCB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQog
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UmVjdChyZWN0
LCB3aWR0aCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxv
Y2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpEcmF3TGluZXNGb3JUZXh0KERpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0
IHsgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlTGluZXMgfSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkNsaXAocmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSBydWxlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwUGF0aChwYXRoLCBy
dWxlKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0VsbGlwc2Uo
cmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNs
aXBPdXQocmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdGgocGF0
aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBP
dXRUb1BhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1BhdGgocGF0
aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdp
ZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6Q2xlYXJSZWN0KHJlY3QpKTsKIH0KIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAg
LTI3MCwyMyArMTU0LDIyIEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmCiAgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJlY3RXaXRoR3JhZGllbnQoRGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50IHsgcmVjdCwgZ3JhZGllbnQgfSkpOwogfQog
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbENvbXBvc2l0
ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9y
LCBvcCwgbW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkZpbGxSb3VuZGVkUmVjdChyb3VuZGVkUmVjdCwgY29sb3IpKTsKIH0KIAotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1v
ZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5kZWRSZWN0KHJvdW5k
ZWRSZWN0LCBjb2xvciwgbW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBj
b2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsRWxsaXBz
ZShyZWN0KSk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRh
JiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkZpbGxMaW5lKGRhdGEpKTsKQEAgLTMwNiw3ICsxODksNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZl
RGF0YQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZp
bGxCZXppZXJDdXJ2ZShkYXRhKSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zMTQsMjMgKzE5NiwxNyBAQCB2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
ICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUGF0aChw
YXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRG
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEVsbGlwc2UocmVjdCkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9yTWVkaWEocGxheWVy
LmlkZW50aWZpZXIoKSwgZGVzdGluYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwog
fQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0
cm9rZVJlY3QocmVjdCwgd2lkdGgpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTdHJva2VFbGxpcHNlKHJlY3QpKTsKIH0KIAogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYgZGF0YSkKIHsKICAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VMaW5lKGRhdGEpKTsKQEAgLTM1MCw3
ICsyMjYsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ry
b2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYQogewogICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUJlemllckN1cnZlKGRhdGEpKTsKIH0K
LQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpA
QCAtMzU4LDMzICsyMzMsODQgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VQYXRoKHBhdGgpKTsKIH0KIAotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9r
ZUVsbGlwc2UocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVhclJl
Y3QocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKSk7CiB9CiAKLSNpZiBVU0UoQ0cpCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdFbGxpcHNlKHJlY3QpKTsKK30KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseVN0cm9rZVBh
dHRlcm4oKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd1BhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RmlsbFBhdHRlcm4oKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmlu
Z1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKIH0KIAotI2VuZGlmIC8vIFVTRShD
RykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNS
aW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcikpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RGV2
aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Cit9CisK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAoc291cmNlSW1hZ2Up
CisgICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VS
ZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZShSZWY8RmlsdGVyPiB7IGZpbHRlciB9KSkpOworfQor
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2ZUlt
YWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJ
bWFnZShpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7
Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0
dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdHRl
cm4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24p
Cit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6UGFpbnRG
cmFtZUZvck1lZGlhKGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKSk7Cit9CisjZW5kaWYKKwordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYg
bG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCit7CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNwbGF5TGlzdDo6RHJh
d0dseXBocyB7IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9k
ZSB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdM
aW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBGbG9hdFBvaW50KCks
IHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVM
aW5lcyB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwg
c3R5bGUpKTsKIH0KIAogYm9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBpbWFnZSkKQEAgLTQzNCwxMSArMzYwLDYgQEAgYm9v
bCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKEZvbnQm
IGZvbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpmbHVzaENvbnRleHQoR3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGlk
ZW50aWZpZXIpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Rmx1c2hDb250ZXh0KGlkZW50aWZpZXIpKTsKLX0KLQogUmVmUHRyPEltYWdlQnVmZmVyPiBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVy
aW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkg
Y29uc3QKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpIHsKQEAgLTQ2
NCw2ICszODUsMjEgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb24KICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0OjpjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBzY2FsZUZhY3RvcigpLCBj
b2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QpOwogfQogCit2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q29udmVydFRv
THVtaW5hbmNlTWFzaygpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKK30KKwordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29udGV4dChHcmFwaGljc0Nv
bnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRleHQoaWRlbnRpZmllcikpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaAppbmRleCA5YjMzYTA2
N2ZkMTZiY2NmMTQwNDJjMTk3NGRkNjkxOTQyMjYyNDY4Li5mMmFkOGQwYWE0NTg1ODlhZWU4MTkw
N2Q5YzkwODk2ZDM0YjZmNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiAKIGNsYXNzIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXIgeworICAgIGZy
aWVuZCBjbGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7CiBwdWJsaWM6CiAgICAgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKICAgICB+UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5KCkgPSBkZWZhdWx0OwpAQCAtNTAsNjMgKzUxLDM5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGZsdXNoQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50
aWZpZXIpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
dm9pZCBzZW5kKFQmJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3Jl
bmRlcmluZ0JhY2tlbmQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbmVlZHNG
bHVzaCA9IHRydWU7Ci0gICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+c2VuZFRvU3RyZWFtKFdU
Rk1vdmUobWVzc2FnZSksIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKLSAgICB9Ci0K
LSAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOwotCiAgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CiAKICAgICB2
b2lkIHJlY29yZFNhdmUoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFJlc3RvcmUoKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTY2Fs
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldENU
TShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZENvbmNhdGVuYXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwor
CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6U1JHQkE8dWludDhf
dD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoV2ViQ29yZTo6
U1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNz
KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUNhcChXZWJDb3JlOjpM
aW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0IFdlYkNvcmU6
OkRhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0
TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TWl0
ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclNoYWRvdygpIGZpbmFs
OworICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGUmKSBmaW5hbDsKKworI2lmIFVTRShDRykKKyAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tl
UGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFs
OworI2VuZGlmCisKKyAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
IGZpbmFsOworICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKwog
ICAgIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5k
UnVsZSkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6
SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBX
ZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
c291cmNlSW1hZ2VSZWN0LCBXZWJDb3JlOjpGaWx0ZXImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZERyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBj
b3VudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZv
bnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1N5
c3RlbUltYWdlKFdlYkNvcmU6OlN5c3RlbUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGJsb2Nr
TG9jYXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0
aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNS
aW5nUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1Jp
bmdSZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisgICAgdm9pZCByZWNv
cmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkQ2xl
YXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworCiAgICAgdm9pZCByZWNv
cmRGaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVu
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdl
YkNvcmU6OkJsZW5kTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwg
V2ViQ29yZTo6QmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKICAgICB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IFdlYkNvcmU6OkxpbmVEYXRhJikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IFdlYkNvcmU6OkFyY0RhdGEmKSBm
aW5hbDsKQEAgLTExNCw5ICs5MSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkRmlsbEJl
emllckN1cnZlKGNvbnN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlm
CiAgICAgdm9pZCByZWNvcmRGaWxsUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXll
ciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgZmlu
YWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tl
RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3QgV2ViQ29yZTo6
TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25zdCBXZWJDb3Jl
OjpBcmNEYXRhJikgZmluYWw7CkBAIC0xMjQsMTMgKzEwMiwyOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgcmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRh
JikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgV2ViQ29y
ZTo6UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCByZWNvcmRB
cHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRl
cm4oKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERy
YXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1Bh
dGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3Rm9j
dXNSaW5nUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1
c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisKKyAgICB2b2lk
IHJlY29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lk
IHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyKiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIFdlYkNvcmU6OkZpbHRlciYp
IGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoV2ViQ29y
ZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCk7CisgICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZv
ck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIHJlY29yZEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3R2x5
cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJDb3JlOjpGb250U21vb3Ro
aW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKKyAg
ICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsK
IAogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmKSBmaW5h
bDsKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6OkltYWdlQnVmZmVyJikgZmlu
YWw7CkBAIC0xNDEsNiArMTM0LDE4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6Oklt
YWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpSZW5kZXJpbmdNZXRob2Q+KSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8V2Vi
Q29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6
Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNlbmQoVCYmIG1lc3NhZ2UpCisgICAgewor
ICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsKKyAgICAgICAgbV9yZW5kZXJp
bmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwgbV9kZXN0aW5hdGlvbkJ1
ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCkgZmluYWw7CisKICAgICBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXI7CiAgICAgV2Vha1B0cjxXZWJD
b3JlOjpJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKICAgICBXZWFrUHRyPFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eT4gbV9yZW5kZXJpbmdCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IDFkNjQzYjZi
NDI4OGQwOGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcuLjA3OTkzYjM4MGYxZWE3ZDM0OWRkN2Vi
ZmMxNjBjODA0ZGFkNDNlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEZpbmRD
b250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjbwogCiAgICAgLy8gRHJhdyB3aGl0ZSBmcmFtZXMgYXJvdW5kIHRoZSBob2xl
cy4KICAgICAvLyBXZSBkb3VibGUgdGhlIHRoaWNrbmVzcyBiZWNhdXNlIGhhbGYgb2YgdGhlIHN0
cm9rZSB3aWxsIGJlIGVyYXNlZCB3aGVuIHdlIGNsZWFyIHRoZSBob2xlcy4KLSAgICBncmFwaGlj
c0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZ
KSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBz
aGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKGJvcmRlcldpZHRoICogMik7CiAgICAgZm9yIChhdXRvJiBwYXRoIDogd2hpdGVG
cmFtZVBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKaW5kZXggZjE2Zjc5NmUw
NDdlOTkxOTcyYzBlZDFmNGFlMTEzY2UxNjU2NWMxMC4uNDllMDBiZTMzN2VhZmVlMTI5M2VmMDc3
YWRmNjE3Y2RhZTNkNGExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCkBAIC0y
NDcsNyArMjQ3LDcgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0
KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGgKIAogICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCi0g
ICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhXZWJDb3JlOjpGbG9hdFNpemUoc2hhZG93T2Zm
c2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAg
ICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFk
b3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3Ig
fSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKGZvdW5kQ29sb3IpOwogICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoaW5kaWNhdG9yQm9yZGVyV2lkdGgg
KiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiBmb3VuZEZyYW1lUGF0aHMpCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTk3YzIwYTRmZjViZTQx
ZDljMzIwNTdjNTA4MWNmZmM0YjgxYTRhNi4uMmFmODFjMmExZmM1ZjY4YmEwNDBmM2QwMTRmNDIx
N2Y0ZWIzNjFlMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAzLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
aWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3JhcGhpY3NDb250ZXh0U3Rh
dGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9ybSBjb250ZXh0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MjgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMi0wMy0xNCAgSm9uYXRoYW4g
QmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2dpdC13ZWJraXRdIEhhbmRs
ZSBjb21wYXJpbmcgVXNlciBhbmQgQ29udHJpYnV0b3IgdG8gTm9uZQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHRUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5kZXggOGU0MWM1YTczYWUzNjg0Y2Vk
ZGYxZjk0ZjlmMTcxODk1MzUxNGM5Zi4uZWJlNjQ0ODcxZTI4ZjUxOWNkMjYxMjBiOGE4Mjc4ODZj
MDE5MDJiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2Nn
L0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cu
Y3BwCkBAIC01NCw3ICs1NCw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3Rz
LCBCYXNpYykKICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmltYXJ5Q29udGV4dChwcmltYXJ5Q0dD
b250ZXh0LmdldCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0g
ICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRS
ZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3Jk
ZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBjb250
ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtOTAsMTAgKzkw
LDEwIEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCYXNpYykKIFRFU1Qo
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUZXh0KQogewogICAgIEluTWVtb3J5RGlz
cGxheUxpc3QgcHJpbWFyeURpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBwcmltYXJ5Q29u
dGV4dChwcmltYXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0
aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHByaW1hcnlDb250ZXh0
KHByaW1hcnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4
dEhlaWdodCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBzZWNvbmRhcnlEaXNwbGF5TGlz
dDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlEaXNwbGF5TGlz
dCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9
KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlEaXNwbGF5TGlz
dCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNv
bnRleHQpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0VGVzdHMsIEJvcmRlcnMpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgcHJpbWFyeUNvbnRleHQo
cHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3Bs
YXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCB7
IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOwor
ICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCBGbG9hdFJlY3Qo
MCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKQEAg
LTIyOCw3ICsyMjgsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgVHJh
bnNmb3JtZWRDbGlwKQogICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQgPSBwcmlt
YXJ5Q29udGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAg
ICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0
UmVjdCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNv
bnRleHRETChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgR3Jh
cGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5Q29udGV4dERMOwogCiAg
ICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFy
eUNvbnRleHQpOwpAQCAtMjg3LDE1ICsyODcsMTUgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0VGVzdHMsIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgR3JhcGhpY3NDb250ZXh0
JiBwcmltYXJ5Q29udGV4dCA9IHByaW1hcnlDb250ZXh0Q0c7CiAKICAgICBJbk1lbW9yeURpc3Bs
YXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwo
ZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgeyB9KTsKKyAgICBS
ZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwg
MCwgMTAwLCAxMDApKTsKICAgICBHcmFwaGljc0NvbnRleHQmIHNlY29uZGFyeUNvbnRleHQgPSBz
ZWNvbmRhcnlDb250ZXh0REw7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChw
cmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKICAgICBjdHguYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcigyKTsKIAotICAgIGF1dG8gcHJpbWFyeUNUTSA9IHByaW1hcnlDb250ZXh0Lmdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVseUluY2x1
ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlDb250ZXh0
LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgYXV0byBwcmltYXJ5Q1RNID0gcHJpbWFyeUNvbnRleHQu
Z2V0Q1RNKCk7CisgICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlDb250ZXh0LmdldENU
TSgpOwogCiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueFNjYWxlKCksIHNlY29uZGFyeUNUTS54
U2NhbGUoKSk7CiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueVNjYWxlKCksIHNlY29uZGFyeUNU
TS55U2NhbGUoKSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTE3N2VkOTI5ODBkZDhkNGJhNGJmM2FmM2QxNDEwNmE2MmZk
NmI4Ny4uYzRmOTZjMWI4Yzg3MmNkOGE4MDU4ZDIxYzQ0YTZkZTdlMTIzMzlhNiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDIyLTAzLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUu
Y29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3JhcGhpY3NDb250ZXh0U3RhdGUgc2hvdWxk
IGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9ybSBjb250ZXh0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQt
aW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0
ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXls
aXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxp
c3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQ6CisKIDIwMjItMDMtMTQg
IEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8
bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBp
T1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMt
c2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5j
bHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAppbmRleCA1MTFiN2MwYzU0ZDMzMjE2YjdjNmVhZjA0
M2E3NWMxNjc2NmQwNDI3Li5kYmY1NGIzZWEyMDRlMTkyNGJkNDM1ZDUxNzM2ZGM3MzQ3NzAyY2Zm
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNo
YWRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1p
bmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CkBAIC0xLDE3ICsxLDEzIEBACiAKLSh0cmFuc2xh
dGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCiAoc2F2ZSkKIChzZXQtc3RhdGUKLSAgKGNoYW5n
ZS1mbGFncyA1MTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lk
dGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93LWNvbG9yICMwMDAwMDApCi0gIChzaGFkb3dzLXVz
ZS1sZWdhY3ktcmFkaXVzIDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisgIChjaGFuZ2UtZmxh
Z3MgW2Ryb3Atc2hhZG93XSkKKyAgKGRyb3Atc2hhZG93CisgICAgKHNoYWRvdy1vZmZzZXQgd2lk
dGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LWNv
bG9yICMwMDAwMDApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQorKGZpbGwt
cmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQotICAoY29s
b3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVu
ZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQorICAoY29sb3Ig
IzAwMDBGRikgZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogKHJlc3RvcmUpCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9y
bXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRl
cy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAppbmRleCAzODZlMzk0MTE4NWYwOWEzYzY4ZWM2YzJh
ZTg4ZGYxMWM3MGIwYTY5Li41Zjc4YjhjMzUwNWM5ZTgwMzk5YmQ2MDVhOWJlOTU1YWIwOWI3MDVl
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRy
YW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRl
bnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKQEAgLTEsMjEgKzEsMTQgQEAKIAot
KHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50YXRlLWN0bQot
ICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAsLTE4LjMwKX0pKQog
KHNhdmUpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgNTEyKQotICAoc2hhZG93LWJsdXIg
MTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvdy1j
b2xvciAjMDAwMDAwKQotICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkKLShmaWxsLWNv
bXBvc2l0ZWQtcmVjdAorICAoY2hhbmdlLWZsYWdzIFtjdG0sIGRyb3Atc2hhZG93XSkKKyAgKGN0
bSB7bT0oKDAuODcsMC41MCkoLTAuNTAsMC44NykpIHQ9KDgxLjcwLDMuNzApfSkKKyAgKGRyb3At
c2hhZG93CisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFk
b3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LWNvbG9yICMwMDAwMDApCisgICAgKHNoYWRvd3Mt
dXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0
ICgwLDApIHNpemUgMTAweDEwMCkKLSAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3Bl
cmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNy4x
NCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQg
KDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogKHJlc3RvcmUpCi0oc2V0LWN0bQotICAo
c2V0LWN0bSB7bT0oKDEuMDAsMC4wMCkoMC4wMCwxLjAwKSkgdD0oMC4wMCwyMi4wMCl9KSkKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhw
ZWN0ZWQudHh0CmluZGV4IGJjMTdiNTExNDk5ZjgyNTZjOTkyOTBkYWU4NjE0ZDQ4OTRjYWY5Y2Mu
LjU0NmRjNDkxMmY1MmQwM2E4OWFkOTA2ODU3MmIyOGVkYzgwMzIyNTMgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4
dApAQCAtMSwxNiArMSwxMiBAQAogCi0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5IDAuMDAp
KQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3Qg
YXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQotICAoY29sb3IgIzAwODAwMCkKLSAgKGNvbXBvc2l0ZS1v
cGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICgw
LDApIHNpemUgMTA0eDEwNCkKKyAgKGNvbG9yICMwMDgwMDApIGV4dGVudCBhdCAoMCwwKSBzaXpl
IDEwNHgxMDQpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMzI5NjApCi0gIChmaWxsLWNv
bG9yICMwMDAwRkYpCi0gIChzdHJva2Utc3R5bGUgMCkKKyAgKGNoYW5nZS1mbGFncyBbZmlsbC1i
cnVzaCwgc3Ryb2tlLXN0eWxlLCBzaG91bGQtYW50aWFsaWFzXSkKKyAgKGZpbGwtYnJ1c2gKKyAg
ICAoY29sb3IgIzAwMDBGRikpCisgIChzdHJva2Utc3R5bGUgTk8tU1RST0tFKQogICAoc2hvdWxk
LWFudGlhbGlhcyAwKSkKIChkcmF3LXJlY3QKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MikK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVk
LXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lw
LWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKaW5kZXggYmI1OTNkMjBmNmRhNjQ4NjI5MmQzNmMw
MjIwZTJhOWQ4NzJmODJiOS4uYjg2MDQ4Y2MwOGM5OTM3ZWYwMDc4MmU3MTA4OWNhY2JjOTljNTMz
MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBw
ZWQtcmVjdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxh
eS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKQEAgLTEsMTYgKzEsOCBAQAogcmVjb3Jk
ZWQ6Ci0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5IDAuMDApKQotKGZpbGwtY29tcG9zaXRl
ZC1yZWN0CisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDQxMiwwKSBzaXplIDEw
MHgxMDApCi0gIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Ut
b3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgx
MDApCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAK
IHJlcGxheWVkOgogKAogICAoY2xpcCBhdCAoNTEyLDApIHNpemUgNTEyeDIwMCkKLSh0cmFuc2xh
dGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCg==
</data>
<flag name="commit-queue"
          id="482386"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454666</attachid>
            <date>2022-03-14 22:29:17 -0700</date>
            <delta_ts>2022-03-15 13:10:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220314222915.patch</filename>
            <type>text/plain</type>
            <size>657046</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uYTQ4MWZkZWNmZjQ3ZWUzY2E5Njc4OTgzOTE3YTYw
ODA0MzJjMDVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzMiBAQAorMjAyMi0wMy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjphcHBseUxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJv
a2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXlvdXRTdGlwcGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dEhhdGNoaW5nKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1
c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxh
eWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3Rp
bmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlk
VXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBo
c1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRlY29u
c3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRp
c3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEltYWdlOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkaWRBcHBs
eVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGVG
YWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVu
ZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9
PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9w
ZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3RhdGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VH
cmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnREZXRlY3RlZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVyZ2VTdGF0ZUNoYW5n
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJnZVN0YXRlRGlmZnMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmluZUNhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojps
aW5lRGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZUpvaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Om1pdGVyTGltaXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcG9zaXRlTW9kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU9wZXJhdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJsZW5kTW9kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU1vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpkcm9wU2hhZG93IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93T2Zmc2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93Qmx1ciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0NvbG9yIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRTbW9vdGhGb250cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNtb290aEZvbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJhd0x1bWluYW5jZU1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1c2VEYXJrQXBwZWFyYW5jZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVzZURhcmtBcHBlYXJh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzSW5UcmFuc3Bh
cmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNs
aXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGls
ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2NhbGVkSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFs
TGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJc0NB
TGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aXNDQUxh
eWVyQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmJsZW5kTW9kZU9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6
Y29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lM
YXllclNjb3BlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OmJlZ2luTGF5ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVy
U2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVT
dGFja0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjp+R3Jh
cGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxp
dHlNYWludGFpbmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlw
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpo
YXNPbmx5UHJpbWl0aXZlQ2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptZXJnZURpZmZzKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXRlQ2hhbmdl
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHVtcCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Y2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmdldENUTSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpmaWxsQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmlsbFJ1bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzdHJva2VCcnVzaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZUdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzdHJva2VUaGlja25lc3MgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlU3R5
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0
cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5l
Q2FwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRM
aW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5lRGFz
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGlu
ZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmxpbmVKb2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRMaW5l
Sm9pbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWl0ZXJMaW1p
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TWl0
ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y29tcG9z
aXRlTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2V0Q29tcG9zaXRlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6ZHJvcFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjp0ZXh0RHJhd2luZ01vZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFRleHREcmF3aW5nTW9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkQW50aWFs
aWFzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRT
aG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNob3VsZFNtb290aEZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRTaG91bGRTbW9vdGhGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHJhd0x1bWluYW5jZU1hc2sgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldERyYXdMdW1pbmFuY2VNYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjp1c2VEYXJrQXBwZWFy
YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0
VXNlRGFya0FwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpiZWdpbkxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6On5UcmFuc3Bh
cmVuY3lMYXllclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U3RhY2tDaGVja2VyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNzQ29u
dGV4dFN0YXRlU3RhY2tDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6fkludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVNb2RlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZU1vZGU6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6TGluZURh
c2g6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lRGFzaDo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmlzVmlzaWJsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc0JsdXJyZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJvcFNoYWRvdzo6aGFzT3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcm9w
U2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpOdWxsR3JhcGhpY3NDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFn
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJI
YXJmQnV6ei5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU291cmNlQnJ1c2guY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpTb3VyY2VCcnVzaCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c3BhY2VUcmFu
c2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmdyYWRpZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpwYXR0ZXJuIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCcnVzaDo6c2V0UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpjb2xvciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnJ1c2g6OmJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRH
cmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0UGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6aXNQcmltaXRpdmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6
QnJ1c2g6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6QnJ1
c2g6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpkZWNvZGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1RleHRCb3hJdGVyYXRvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6
ei5jcHAuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9mZnNldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmluY3JlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRCb3hJdGVyYXRvcjo6Y3VycmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0
ZXJhdG9yOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRl
OjpzZXRTdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpz
ZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFNob3Vs
ZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OmdldENUTSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6RmlsbFNvdXJjZTo6RmlsbFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWly
bzo6U3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OlNoYWRvd1N0YXRlOjpTaGFkb3dTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0
TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZURhc2gpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2Fpcm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkaWRVcGRhdGVTdGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y29u
Y2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENhaXJvOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0
ZVNhdmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0
U3RhdGVTYXZlcjo6Q0dDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyOjp+Q0dDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4
dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVT
YXZlcjo6ZGlkU2F2ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OkdyYXBoaWNzQ29udGV4dENHKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmludGVybmFsUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
Y3VsYXRlRHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5U2hhZG93T2Zm
c2V0V29ya2Fyb3VuZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZUNhcCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dENHTWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xpbmVEYXNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldENHU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OmNhblVzZVNoYWRvd0JsdXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFz
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGlu
ZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNj
YWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3Rh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5z
bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y29u
Y2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpz
ZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6Omdl
dENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6
OkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250
ZXh0U3RhdGVTYXZlcjo6fkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OmRpZFNhdmUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2ggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1h
Z2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkcmF3UERG
UGFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpiZWdpbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZExheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludGVybmFsQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnNldEludGVybmFsRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGlu
YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVj
b3JkQmVnaW5MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJl
Y29yZEVuZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERyb3BTaGFkb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJD
b3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9w
dWxhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0ds
eXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRl
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNoYWRvd0lzQ2xlYXJlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG93R2x5cGhzV2l0aEFkdmFuY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdp
bmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlOjpzYWZlQ29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OnNpemVPZkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0Ojppc0RyYXdpbmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
Ojppc0lubGluZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0YXRlOjpTZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0U3RhdGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVy
YXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1l
Rm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6VHJhbnNsYXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Um90YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6YXBwbHkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVKb2luOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0
ZWRSZWN0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0YXRlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0YXRlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OnggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3Rh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YW5n
bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxl
OjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6
OmFtb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldENUTTo6dHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjp0cmFuc2Zvcm0gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpz
dGF0ZUNoYW5nZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpsaW5lQ2FwIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6U2V0TGluZURhc2gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpk
YXNoQXJyYXkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVEYXNoOjpkYXNoT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGVjb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpv
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2lu
OjpsaW5lSm9pbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6bWl0ZXJMaW1pdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpG
aWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb2xvciBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0
Ojpjb21wb3NpdGVPcGVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Z2xv
YmFsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0
ZWRSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSb3VuZGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OlJlY29yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX2RyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpl
bmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
bGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBP
dXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9JbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFy
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ry
b2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9r
ZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJv
a2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpk
cmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp+UmVjb3Jk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25s
eUlubGluZVN0YXRlQ2hhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6c3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVKb2luKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmN1cnJlbnRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmN0bSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250
ZXh0U3RhdGU6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpDb250ZXh0U3RhdGU6OkNvbnRleHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y2xvbmVGb3JTYXZlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
Q29udGV4dFN0YXRlOjpjbG9uZUZvclRyYW5zcGFyZW5jeUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3RhdGVTdGFjayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OlJlY29yZGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4pOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxs
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEVsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
RmlsbEJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmREcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2
ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1Bh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OmV4dGVudEZyb21Mb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjp+UmVjb3JkZXJJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRS
b3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENvbmNhdGVuYXRlQ1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZFNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUpvaW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0
TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmRDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVySW1wbDo6UmVjb3JkZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6YXBwbHlTZXRTdGF0ZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnNhdmUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6cmVzdG9yZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjph
cHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXApOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpjbGVhclJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QpOgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoTmljb3Np
YTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoTmljb3Np
YTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAg
KE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRpZFVw
ZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQu
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjp0cmFuc2xhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNj
YWxlKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3
Qm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRmdWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNv
bnRlbnRmdWxQYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVu
dFJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9J
bm5lclNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpwYWludEJhY2tncm91bmREZWNvcmF0aW9ucyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXNlU3Ryb2tlU3R5bGVU
b0ZpbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZH
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJG
b3JlZ3JvdW5kKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRyYXcpOgorCiAyMDIyLTAzLTE0ICBBbnRvaW5lIFF1aW50
ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFttb2RlbF0gPG1vZGVsIGludGVyYWN0
aXZlPiBkb2Vzbid0IGFsbG93IG1vZGVsIHRvIGJlIHJvdGF0ZWQgb24gaU9TCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IGQ5Y2MzYzRmZTY5ZThiY2U1ZTAxYzg5YWY0ZDA3Yzc1YWM4MGMzZTYuLjIzYzYwN2E2ZjIyZDU0
MjZjODIwYzk2NTJhMTVjNjBkNmJhNTliOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIw
MjItMDMtMTQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAg
W0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6aWx5IGFwcGxp
ZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNvbmNhdGVuYXRlQ1RNKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZUNh
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsQ29tcG9z
aXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxs
UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFBhdGgpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXQp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQmV6aWVyQ3Vy
dmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd0xpbmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZy
YW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KToK
KyAgICAgICAgKFdlYktpdDo6bV9yZW5kZXJpbmdCYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZFJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVE
YXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnNlbmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpkcmF3UmVj
dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6
ZHJhd1JlY3QpOgorCiAyMDIyLTAzLTE0ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFttb2RlbF0gPG1vZGVsIGludGVyYWN0aXZlPiBkb2Vzbid0IGFsbG93
IG1vZGVsIHRvIGJlIHJvdGF0ZWQgb24gaU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDVjN2I3M2ViMjA1
ZTA5ZWMyNDZlMDExZDBhNTAyZGNkNGMxZGNhNTAuLmViNzZhMTg2ZDM0OGQ0YjM2ODlmMjM0ZjNk
YmY2MjgyYWFhZGUwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ1LDYgKzIwNDUsNyBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNvbnRl
bnRzRGlzcGxheURlbGVnYXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRy
YW5zZm9ybS5jcHAKQEAgLTIwODQsNiArMjA4NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUltYWdlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDgyOTYyYmEwNGUy
ZmZkN2ZmYTBjNmU2MWQ5YzljMmMxN2E1ZjY0NjcuLmI1NWM1YzFjNDJlMzI5NTU3MGVkMjRjODQw
ZGMzZTRmMmZkMzAyZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTIzMzEsMTAgKzIzMzEsMTIgQEAKIAkJNzFFRkNFREMyMDJC
MzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1h
dGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGMDVGN0Uy
NTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGQ0IxNzAyN0JBQjNGRTAwRTA2
MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcxRkNCMTZEMjdCQUIzREYwMEUwNjMxQyAvKiBGcmFtZVJhdGVBbGln
bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIwMTc4M0IyN0Q1N0Y5RjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMDE3ODNBMjdENTczQjIw
MDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNW
R1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBG
MTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5
T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0
MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIElt
YWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNDYwREQ2MjdDODVEMDEw
MEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNCMjc1QzVGQTYwMEE5MTU2QSAvKiBD
U1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRDI3NUM2MTQ0MDBBOTE1
NkEgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MjE0QjlCNzI3NDQ1OEZBMDAzQkU2REYgLyogRmlsdGVyRWZmZWN0
VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzI0Njk2M0UyNzVDNjE2NzAwQTkxNTZBIC8qIEZpbHRlckltYWdlVmVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkI0RUY3QzI3NEVFMzdG
MDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM0Miw2ICsyMzQ0LDkgQEAKIAkJNzI0RUU1NTAx
REM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rp
dml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNl
cnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0
RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNTYwNzhF
Mjc5RDM0QjYwMDdEMkREMyAvKiBGRUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkY3RTc0RjI3OUNFREU4MDBEODJEMkQgLyogRkVJbWFnZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNTgx
ODU0MjdDREE2OUEwMEMzRDk3RSAvKiBTb3VyY2VCcnVzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNv
dXJjZUJydXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkIzNTEw
QzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NjI3Q0RBRkQ1
MDBDM0Q5N0UgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8q
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZDREUyMDI3NTk3MzUwMDBBNDQ1QjIgLyogRmlsdGVy
RWZmZWN0R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyOTY2MUEyMjc1OTYwQTUwMEU3REY5QiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1
NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyog
UGxhdGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBOYXRpdmVJbWFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjYxRDgyMDlG
NDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMzE4LDYgKzExMzIzLDggQEAKIAkJNzFGQ0IxNkQyN0JB
QjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRnJhbWVSYXRlQWxpZ25lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUZDQjE2RjI3QkFCM0UwMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZVJhdGVBbGlnbmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8q
IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZp
Z2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
MDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENHQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXh0Qm94SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzIxMUI1RDYyNzY1MzY4MjAwNzZGRUY4IC8qIEZpbHRlclJlc3VsdHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVyUmVzdWx0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0
NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMTMyNyw2ICsxMTMzNCw4IEBACiAJCTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAv
KiBBbmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNDM1RUY0MjczRDA3NjcwMDA1RTdF
RSAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjQzNUVGNTI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVy
SW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3ND
b250ZXh0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENjI3Qzg1RDAxMDBENUY5
RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250
ZXh0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1
NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1p
bk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzODksNiArMTEzOTgsMTAgQEAKIAkJNzJBMTNB
RDUyNzRERTU0RTAwRTJBODhFIC8qIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyQTEzQUQ2Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFwaGljU29m
dHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkExM0FENzI3NERF
NTc4MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBFMjdDQjQyRkQw
MEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VCcnVz
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBGMjdDQjQyRkUwMEQy
N0FFMCAvKiBTb3VyY2VCcnVzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VCcnVzaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3NDI3NEUyMzMzMDAyOTNDMkYgLyogRkVC
bGVuZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUJsZW5kU29mdHdhcmVBcHBs
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjc1Mjc0RTIzMzQwMDI5
M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZF
QmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsdGVySW1hZ2VWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4ODEwLDYgKzI4ODIzLDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjAxNzgzQTI3
RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oICovLAogCQkJCTBGQ0YzMzIz
MEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMzI1OTY4RDBC
MDAzMEU2QUEgLyogQ29sb3JTcGFjZUNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMjI1OTY4RDBCMDAz
MEU2QUEgLyogQ29sb3JTcGFjZUNHLmggKi8sCkBAIC0yOTA0Myw2ICsyOTA1Nyw5IEBACiAJCQkJ
N0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCiAJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKKwkJCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5
RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwICovLAorCQkJCTcyNDYwREQ2MjdDODVEMDEw
MEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovLAorCQkJCTcyQjM1MTBEMjdDQTMy
OEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEY1ODBC
MDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBGNTgwQjBB
MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBCMEIwRjEy
QTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLywKQEAgLTI5MTQzLDYgKzI5
MTYwLDcgQEAKIAkJCQlCQ0E1NTkxMjI2M0RCRDc5MDA3RjE5QjMgLyogUGl4ZWxGb3JtYXQuaCAq
LywKIAkJCQlDREQwOEFCRjI3N0U1NEYwMDBFQTM3NTUgLyogUGxhdGZvcm1BdWRpb1RyYWNrQ29u
ZmlndXJhdGlvbi5oICovLAogCQkJCUJDM0U2MjQyMjY1OTc5MTcwMDU0OEFDRCAvKiBQbGF0Zm9y
bUNvbG9yU3BhY2UuaCAqLywKKwkJCQk3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyog
UGxhdGZvcm1JbWFnZS5oICovLAogCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJNTUwNjQwQUQyNDA3NTZEQTAwQUFFMDQ1IC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCkBAIC0yOTE2Niw2ICsyOTE4NCw4IEBACiAJ
CQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLAogCQkJCTBG
M0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8sCiAJCQkJMUM0REIwMjQy
NzMzOUU1RTAwN0IwQUQxIC8qIFNob3VsZExvY2FsaXplQXhpc05hbWVzLmggKi8sCisJCQkJNzJC
MzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmNwcCAqLywKKwkJCQk3MkIzNTEw
RjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLywKIAkJCQkxREQxMjdBQzI1NkUz
QTg3MDBCMjI3RDcgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgKi8sCiAJCQkJQ0Q2NDFFQjIx
ODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVB
QzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovLApAQCAt
MjkxNzcsNiArMjkxOTcsNyBAQAogCQkJCTA4NzU1OEM0MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJy
b2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCAqLywKIAkJCQk5NUU5RjQ0NDI3QzlBMzlCMDA5
NDUzMzcgLyogU3lzdGVtSW1hZ2UuaCAqLywKIAkJCQkzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkg
LyogVGFiU2l6ZS5oICovLAorCQkJCTcyMDZENDM1MjdEQURFQ0EwMDQwRkVCMiAvKiBUZXh0Qm94
SXRlcmF0b3IuaCAqLywKIAkJCQkzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5j
cHAgKi8sCiAJCQkJQTgyNEI0NjQwRTJFRjJFQTAwODFBN0I3IC8qIFRleHRSdW4uaCAqLywKIAkJ
CQlDRDFFNzM0NjE2N0JDNzhFMDA5QTg4NUQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3Bw
ICovLApAQCAtMzM4NzMsNiArMzM4OTQsNyBAQAogCQkJCUNERTNBRTEyMjRCNDkxNkEwMDEyOEU3
RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVGQTkwNENBMTc4RTYxRjUw
MDRDOEEyRCAvKiBDZXJ0aWZpY2F0ZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTkxQjhGMEI1
MjE5NTNENjUwMDBDMkIwMCAvKiBDZXJ0aWZpY2F0ZVN1bW1hcnkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyMDE3ODNCMjdENTdGOUYwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTM2RkQxNTE2Qzc4MjY1MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lv
bkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2OUREMTUwNUYwNzYwMDFCNzRBQyAvKiBD
aGFuZ2VWZXJzaW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTc4NUQ5MTUyNEI0RDFD
QTAwMTREQjIxIC8qIENoYW5uZWxDb3VudE1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ3OTgs
NiArMzQ4MjAsOCBAQAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2
MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2
NzA4MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzI0NjBERDcyN0M4NkRBRDAwRDVGOUY0IC8qIEdyYXBoaWNz
Q29udGV4dFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5
N0UgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTgwQjBFMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzA1LDYgKzM2NzI5LDcgQEAKIAkJCQlCQ0FBNDg3
MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jv
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRm
b3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdF
IC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjZENTZF
MjI1M0FFMjhEMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkQ3NzA1QzcyNTUyNzZDRDAwMUQwQzk0IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU1MDY0MEFGMjQwNzU4MkQwMEFBRTA0NSAvKiBQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzM4Niw2ICszNzQxMSw3IEBACiAJCQkJ
NTEwRDRBMzgxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVh
bUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjNFMEZDN0RGRjAwMDk1NTMw
MCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTQyN0NEQTY5QTAw
QzNEOTdFIC8qIFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2MjE3QTlE
MDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2
NTE3QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0RGMTM1MDkyNEM5RkNBMzAwNDMyRTFFIC8qIFNvdXJjZUJ1ZmZlclBhcnNlci5oIGluIEhl
YWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRleCA4NTZhM2RlNTA0ZGVjMGJiZmE5MGFj
MTdkZTM3ZjUxNWUxNGQ5MjA0Li45ZDkzNWE2ZmYzMjMwZjNmNDZhMmVmNWQ3ZWExMDAxMGFlOWUx
MGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVj
b3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lkIEJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGgoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0Nv
bnRleHQsIGNvbnN0CiAgICAgICAgICAgICBEYXNoQXJyYXkgbGluZURhc2g7CiAgICAgICAgICAg
ICBsaW5lRGFzaC5hcHBlbmQoZGFzaExlbmd0aCk7CiAgICAgICAgICAgICBsaW5lRGFzaC5hcHBl
bmQoZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExp
bmVEYXNoKGxpbmVEYXNoLCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9y
ZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6CkBAIC0xMjk0LDcgKzEy
OTQsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWludGlu
Z0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNoYWRvd1JlY3RP
cmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNldDsKICAgICAg
ICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4gLSBhZGp1c3Rl
ZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIHBhaW50aW5nQ29udGV4dC5j
b250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVl
KCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICBw
YWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgYWRqdXN0ZWRTaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0
Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0IH0pOwogCiAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAgICAgICAg
ICAgIC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0
IG91dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMTQwNSw3ICsxNDA1LDcgQEAg
dm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0
JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQu
dHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zm
c2V0OwogCi0gICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Vi
a2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNN
b2RlOjpEZWZhdWx0KTsKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0RHJvcFNo
YWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigp
LCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6
IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5j
b250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCByb3VuZGVk
SG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9t
UGFpbnRJbWFnZS5jcHAKaW5kZXggZjRiOThiYTYyZTExOWEwNzcxMzEyZDNiODhjNDkxOTM2ODM2
ZWUzNy4uZWU1MDRmMDhjNDlmYzhkNWI1YWVkNzAyYmUyMTdmMWIwNmZkNGUwZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgSW1h
Z2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdG9tUGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY28KIEltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRl
c3RDb250ZXh0KTsKLSAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29u
dGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGRlc3RDb250ZXh0LmNsaXAoZGVzdFJlY3QpOwogICAg
IGRlc3RDb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZGVz
dFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQg
Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0CiAgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7CiAKICAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBzY2FsZSB0
byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGRl
c3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0
Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhTY2FsZSA9IGZhYnMoZGVz
dENvbnRleHRDVE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RDb250
ZXh0Q1RNLnlTY2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJuQ1RN
ID0gcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggMGU3ODA2M2Uz
YTQxY2JjNjkwZjBkMGNjYjc4ODExN2RlNjkzOGEwMi4uZGJjOTU3YzUzZDA0YTM5NmVhYzY0ZDY3
ZmU2YTJiMTdlNDQ4YzY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTY5Nyw3ICs2OTcs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5TGluZURhc2goKSBj
b25zdAogICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChzdGF0ZSgpLmxpbmVEYXNoLnNp
emUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZSgpLmxpbmVEYXNoLnNpemUo
KTsgKytpKQogICAgICAgICBjb252ZXJ0ZWRMaW5lRGFzaFtpXSA9IHN0YXRpY19jYXN0PERhc2hB
cnJheUVsZW1lbnQ+KHN0YXRlKCkubGluZURhc2hbaV0pOwotICAgIGMtPnNldExpbmVEYXNoKGNv
bnZlcnRlZExpbmVEYXNoLCBzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICBjLT5zZXRMaW5l
RGFzaCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3Rh
dGUoKS5saW5lRGFzaE9mZnNldCkgfSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0R2xvYmFsQWxwaGEoZG91YmxlIGFscGhhKQpAQCAtNzI4LDcgKzcyOCw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xvYmFsQ29tcG9zaXRlT3Bl
cmF0aW9uKGNvbnN0IFN0cmluZyYgb3BlCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2lu
Z0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKLSAgICBjLT5zZXRDb21w
b3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7CisgICAgYy0+c2V0Q29tcG9zaXRlTW9kZSh7
IG9wLCBibGVuZE1vZGUgfSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCkBAIC0xMTg2LDcgKzExODYsNyBAQCBib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmlzUG9pbnRJblN0cm9rZUludGVybmFsKGNv
bnN0IFBhdGgmIHBhdGgsIGRvdQogICAgICAgICBEYXNoQXJyYXkgY29udmVydGVkTGluZURhc2go
bGluZURhc2guc2l6ZSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lRGFz
aC5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGNvbnZlcnRlZExpbmVEYXNoW2ldID0gc3RhdGlj
X2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4obGluZURhc2hbaV0pOwotICAgICAgICBjb250ZXh0LnNl
dExpbmVEYXNoKGNvbnZlcnRlZExpbmVEYXNoLCBzdGF0ZS5saW5lRGFzaE9mZnNldCk7CisgICAg
ICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGNvbnZlcnRlZExpbmVEYXNoKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHN0YXRlLmxpbmVEYXNoT2Zmc2V0KSB9KTsKICAgICB9KTsKIH0KIApA
QCAtMTIwNSw3ICsxMjA1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpj
bGVhclJlY3QoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGQKICAgICBpZiAoc2hv
dWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNh
dmVkID0gdHJ1ZTsKLSAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBD
b2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAg
ICAgY29udGV4dC0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0KICAgICBpZiAo
c3RhdGUoKS5nbG9iYWxBbHBoYSAhPSAxKSB7CiAgICAgICAgIGlmICghc2F2ZWQpIHsKQEAgLTEz
NjMsOSArMTM2Myw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlT
aGFkb3coKQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGZsb2F0IHdp
ZHRoID0gc3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0
ID0gc3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgICAgIGMtPnNldFNoYWRvdyhG
bG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hh
ZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgIGMtPnNldERyb3BT
aGFkb3coeyBGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0
YXRlKCkuc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSB9KTsKICAgICB9IGVs
c2UKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNo
YWRvdyh7IEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFk
aXVzTW9kZTo6TGVnYWN5IH0pOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QKQEAgLTI0MzIsMTkgKzI0MzIsMTYgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBkb3UKIAogICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldCgwLCAy
ICogbWFza1JlY3QuaGVpZ2h0KCkpOwogCi0gICAgICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zm
c2V0OwotICAgICAgICAgICAgZmxvYXQgc2hhZG93UmFkaXVzOwotICAgICAgICAgICAgQ29sb3Ig
c2hhZG93Q29sb3I7Ci0gICAgICAgICAgICBjLT5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLQogICAgICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1Jl
Y3QobWFza1JlY3QpOwotICAgICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHNoYWRvd1JhZGl1
cyAqIDEuNCk7Ci0gICAgICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc2hhZG93T2Zmc2V0ICogLTEp
OworICAgICAgICAgICAgYXV0byBkcm9wU2hhZG93ID0gYy0+ZHJvcFNoYWRvdygpOworCisgICAg
ICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoZHJvcFNoYWRvdy5ibHVyUmFkaXVzICogMS40KTsK
KyAgICAgICAgICAgIHNoYWRvd1JlY3QubW92ZShkcm9wU2hhZG93Lm9mZnNldCAqIC0xKTsKICAg
ICAgICAgICAgIGMtPmNsaXAoc2hhZG93UmVjdCk7CiAKLSAgICAgICAgICAgIHNoYWRvd09mZnNl
dCArPSBvZmZzZXQ7CisgICAgICAgICAgICBkcm9wU2hhZG93Lm9mZnNldCArPSBvZmZzZXQ7CiAK
LSAgICAgICAgICAgIGMtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgICAgICBjLT5zZXRE
cm9wU2hhZG93KGRyb3BTaGFkb3cpOwogCiAgICAgICAgICAgICBpZiAoZmlsbCkKICAgICAgICAg
ICAgICAgICBjLT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCA0ZjYzYWRjZTkzOTE2ZGIyMzIw
ZTk2NzhhYWJmZTBmM2NkOTk3NjJiLi45YTgwM2E0MDhkODhjMmZmNDhkZDNiZWEwMjk1MWI4NzU4
MDk4ZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0U3RpcHBsaW5n
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4dCk7CiAgICAgY29udGV4dC5zZXRT
dHJva2VUaGlja25lc3MoMSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHls
ZTo6RGFzaGVkU3Ryb2tlKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgMSwgZGVuc2l0eSB9
LCAxKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyAxLCBkZW5zaXR5IH0sIDEgfSk7CiAK
ICAgICBkcmF3TGF5b3V0UGF0dGVybihjb250ZXh0LCBxdWFkLCBkZW5zaXR5LCBGbGlwOjpObyk7
CiB9CkBAIC0xMjU0LDcgKzEyNTQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0SGF0Y2hpbmco
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0
cm9rZVRoaWNrbmVzcygwLjUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5
bGU6OkRhc2hlZFN0cm9rZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IDIsIDIgfSwgMik7
CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IHsgMiwgMiB9LCAyIH0pOwogCiAgICAgY29uc3Rl
eHByIGF1dG8gZGVmYXVsdExheW91dEhhdGNoU3BhY2luZyA9IDEyOwogICAgIGRyYXdMYXlvdXRQ
YXR0ZXJuKGNvbnRleHQsIHF1YWQsIGRlZmF1bHRMYXlvdXRIYXRjaFNwYWNpbmcsIGZsaXApOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGI1ODhmNmZhNGExMWQ3NzBjM2M4NDk5OTY3
MmQ3ZDdlZmY0MzJjNGYuLjhhMTdhZTM3MGFlMzZiMDBlYmI3YTliMmUwNzU1MTgwNmJlZDE2Njkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQzMDMsNyArNDMwMyw3IEBAIHZvaWQg
RnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIGxheW91
dENvbnRleHQoKS5sYXlvdXQoKTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChw
YWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4
dChmcmFtZVJlY3QoKSwgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxhdGZv
cm1XaWRnZXQoKSkgewogICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVDb250
ZW50cygpLgogICAgICAgICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50UmVj
dChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CkBAIC00ODU0LDcgKzQ4NTQsNyBAQCB2
b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0JvdHRv
bSwgZmxvYXQgb2xkVG9wLCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQgd2l0
aCBwYWludGluZyBkaXNhYmxlZC4KLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoTnVs
bEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBO
dWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoZnJhbWVSZWN0KCksIE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0
VHJ1bmNhdGVkQXQoc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob2xkQm90dG9tKSkpOwogICAgIElu
dFJlY3QgZGlydHlSZWN0KDAsIHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5k
ZXJWaWV3LT5sYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhYKCksIHN0YXRpY19jYXN0PGludD4oY2Vp
bGYob2xkQm90dG9tIC0gb2xkVG9wKSkpOwogICAgIHJlbmRlclZpZXctPnNldFByaW50UmVjdChk
aXJ0eVJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA5ZmQyNWQ4MGFkMTJk
YzkxZGQxMWY5MTU5OGZjNmM4ZWZhNGNiMmEyLi4yODk1NzRiOWMxZTQwY2Q3MTJiNGUyYjZlOWVi
MzRiMDE3MjlkZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjksNyArMjks
OCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQs
IEdyYXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5Q29udGV4dCkKLSAgICA6IG1fcHJpbWFyeUNvbnRl
eHQocHJpbWFyeUNvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHQocHJpbWFyeUNvbnRleHQu
Y2xpcEJvdW5kcygpLCB7IH0sIHByaW1hcnlDb250ZXh0LmdldENUTSgpKQorICAgICwgbV9wcmlt
YXJ5Q29udGV4dChwcmltYXJ5Q29udGV4dCkKICAgICAsIG1fc2Vjb25kYXJ5Q29udGV4dChzZWNv
bmRhcnlDb250ZXh0KQogewogfQpAQCAtNDgsNiArNDksMzAgQEAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiB9CiAKKyNp
ZiBVU0UoQ0cpCitib29sIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LmlzQ0FMYXllckNvbnRl
eHQoKTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJD
b250ZXh0KGJvb2wgaXNDQUxheWVyQ29udGV4dCkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LnNl
dElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Cit9CisKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOworfQorI2VuZGlm
CisKK1JlbmRlcmluZ01vZGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9k
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgp
OworfQorCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQogewogICAgIC8v
IEZJWE1FOiBDb25zaWRlciBub3QgdXNpbmcgdGhlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQn
cyBzdGF0ZSBzdGFjayBhdCBhbGwsCkBAIC02NCwyMiArODksMTAgQEAgdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICBtX3NlY29uZGFyeUNvbnRleHQucmVzdG9y
ZSgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBmcm9tLCBj
b25zdCBGbG9hdFBvaW50JiB0bykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdMaW5lKGZy
b20sIHRvKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZUNo
YW5nZXMoKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKIH0KIAogI2lmIFVTRShDRykKQEAgLTk2LDIyICsxMDksMTAgQEAgdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKIH0KICNlbmRpZgog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKLSAgICBtX3NlY29u
ZGFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LmZpbGxQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUGF0aChwYXRo
KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tl
UGF0aChwYXRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAg
ICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwogfQogCiB2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkKQEAgLTEyNiwyMjIgKzEyNywxMjYgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0
LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKLX0KLQotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZmlsbFJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZp
bGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
cmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
bGluZVdpZHRoKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBsaW5l
V2lkdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0
aCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbEVsbGlw
c2UoZWxsaXBzZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2Up
OwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlRWxs
aXBzZShlbGxpcHNlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxp
cHNlKTsKLX0KLQotI2lmIFVTRShDRykKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzQ0FMYXllckNvbnRleHQpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOwot
fQotCi1ib29sIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQoKSBj
b25zdAotewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LmlzQ0FMYXllckNvbnRleHQoKTsK
LX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOwotICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4
dCk7Ci19Ci0jZW5kaWYKLQotUmVuZGVyaW5nTW9kZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5y
ZW5kZXJpbmdNb2RlKCk7Ci19Ci0KIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xp
cChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJl
Y3QpOwogICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcChyZWN0KTsKICAgICBtX3NlY29uZGFyeUNv
bnRleHQuY2xpcChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNs
aXBPdXQocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXQocmVjdCk7Ci19Ci0K
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuY2xpcE91dChwYXRoKTsKLX0KLQogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKKyAg
ICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKICAgICBtX3ByaW1h
cnlDb250ZXh0LmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKICAgICBtX3NlY29uZGFyeUNvbnRl
eHQuY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogfQogCi1JbnRSZWN0IEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaW1hcnlD
b250ZXh0LmNsaXBCb3VuZHMoKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5zZXRMaW5lQ2FwKGxpbmVDYXApOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5l
Q2FwKGxpbmVDYXApOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxv
YXQgZGFzaE9mZnNldCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZURhc2goZGFz
aEFycmF5LCBkYXNoT2Zmc2V0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZURhc2go
ZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXQocGF0
aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXQocGF0aCk7CiB9CiAKLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5zZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LnNldExpbmVKb2luKGxpbmVKb2luKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNs
aXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25S
ZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0
KGZsb2F0IG1pdGVyTGltaXQpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRN
aXRlckxpbWl0KG1pdGVyTGltaXQpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRNaXRlckxp
bWl0KG1pdGVyTGltaXQpOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwor
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJ
bWFnZSwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd05hdGl2ZUltYWdl
KG5hdGl2ZUltYWdlLCBzZWxmU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobmF0aXZlSW1hZ2UsIHNlbGZTaXpl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxs
UmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCk7CiB9CiAK
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd1BhdHRlcm4obmF0aXZlSW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3UGF0dGVybihuYXRpdmVJbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxs
UmVjdChyZWN0LCBncmFkaWVudCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJl
Y3QsIGdyYWRpZW50KTsKIH0KIAotSW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ltYWdl
KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKIH0KIAot
SW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdl
KEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQ
b2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5k
cmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNp
bmcsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGlsZWRJbWFnZShpbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAg
IHJldHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7
CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGls
ZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtX3ByaW1hcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291
cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucyk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0
aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotI2lmIEVOQUJMRShWSURF
TykKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlv
bik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRl
c3RpbmF0aW9uKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5maWxsUGF0aChwYXRoKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pCiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzY2FsZSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBtX3By
aW1hcnlDb250ZXh0LnNjYWxlKHNjYWxlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2NhbGUo
c2NhbGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlj
a25lc3MpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGJvcmRlclRo
aWNrbmVzcyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZs
b2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnJvdGF0
ZShhbmdsZUluUmFkaWFucyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVs
bGlwc2UpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwog
fQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC50cmFuc2xhdGUoeCwgeSk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVBhdGgo
cGF0aCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKKyAgICBtX3ByaW1hcnlD
b250ZXh0LmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBmcm9tLCBjb25zdCBGbG9hdFBvaW50JiB0bykKIHsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LnNldENUTSh0cmFuc2Zvcm0pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRDVE0odHJh
bnNmb3JtKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOwogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBp
bmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gbV9wcmlt
YXJ5Q29udGV4dC5nZXRDVE0oaW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RWxsaXBz
ZShyZWN0KTsKIH0KIAotRmxvYXRSZWN0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRp
bmdNb2RlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJvdW5kVG9EZXZpY2VQ
aXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXRo
KHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKIH0KIAogdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQpAQCAtMzcwLDI5ICsyNzUsNTQgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG8KIH0K
ICNlbmRpZgogCi1GbG9hdFNpemUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQo
Y29uc3QgRm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRv
KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGF1
dG8gc2l6ZSA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwg
ZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGV4dChjYXNjYWRlLCBydW4s
IHBvaW50LCBmcm9tLCB0byk7Ci0gICAgcmV0dXJuIHNpemU7CisgICAgbV9wcmltYXJ5Q29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgZmlsdGVyUmVzdWx0cykKIHsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQs
IGZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgZmlsdGVyUmVz
dWx0cyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNv
dXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgZmlsdGVyUmVzdWx0cyk7CiB9CiAK
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHRvKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LmRyYXdFbXBoYXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRv
KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoY2FzY2FkZSwgcnVu
LCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd05hdGl2
ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LmRyYXdCaWRpVGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBjdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3QmlkaVRleHQoY2FzY2FkZSwg
cnVuLCBwb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlv
blJlY3QpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0
LmRyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1Bh
dHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX3By
aW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBtX3By
aW1hcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRp
b24pOworfQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUg
Zm9udFNtb290aGluZ01vZGUpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3R2x5cGhzKGZv
bnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2Rl
KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CiAKIHZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCkBAIC00
MDcsMTYgKzMzNyw5IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsCiAgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgbWFya2VyU3R5bGUpOwogfQog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJM
JiB1cmwsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNl
dFVSTEZvclJlY3QodXJsLCByZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0VVJMRm9y
UmVjdCh1cmwsIHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK2Jvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExp
bmtzKCkgY29uc3QKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVj
dChuYW1lLCByZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JS
ZWN0KG5hbWUsIHJlY3QpOworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnN1cHBvcnRzSW50
ZXJuYWxMaW5rcygpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFkZERl
c3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQpAQCAtNDI1LDE4ICszNDgsMTYgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAogICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5hZGREZXN0aW5hdGlvbkF0UG9pbnQobmFtZSwgcG9pbnQpOwogfQog
Ci1ib29sIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygp
IGNvbnN0Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9y
UmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKKyAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOwogfQogCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MgZmxhZ3MpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJl
Y3QoY29uc3QgVVJMJiB1cmwsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBUaGlz
IGNhbGxzIHVwZGF0ZVN0YXRlKCkgaW5zdGVhZCBvZiBkaWRVcGRhdGVTdGF0ZSgpIHNvIHRoYXQg
Y2hhbmdlcwotICAgIC8vIGFyZSBhbHNvIGFwcGxpZWQgdG8gZWFjaCBjb250ZXh0J3MgR3JhcGhp
Y3NDb250ZXh0U3RhdGUsIHNvIHRoYXQgY29kZQotICAgIC8vIGludGVybmFsIHRvIHRoZSBjaGls
ZCBjb250ZXh0cyB0aGF0IHJlYWRzIGZyb20gdGhlIHN0YXRlIGdldHMgdGhlIHJpZ2h0IHZhbHVl
cy4KLSAgICBtX3ByaW1hcnlDb250ZXh0LnVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LnVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0KTsKIH0KIAogI2lmIE9TKFdJTkRPV1MpICYmICFV
U0UoQ0FJUk8pCkBAIC00NDYsNSArMzY3LDEwIEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZFByaXZhdGVDb250CiB9
CiAjZW5kaWYKIAorRmxvYXRSZWN0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdN
b2RlKQoreworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJvdW5kVG9EZXZpY2VQaXhlbHMo
cmVjdCwgcm91bmRpbmdNb2RlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4YjM0YzkxNDM0MmI3Mzc3NzI3YzExYTczYjZkODIx
OGUxNTU2Zi4uN2EzN2ExMTNkZDgxNWViM2I5NTYwNzUyZDlkYzcwZWI1YTg5N2M1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQuaApAQCAtNDMsODMgKzQzLDU0IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgc2F2ZSgpIGZpbmFs
OwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworI2lmIFVTRShDRykKKyAgICBib29sIGlzQ0FM
YXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQo
Ym9vbCkgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCkgZmluYWw7CisjZW5kaWYKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUo
KSBjb25zdCBmaW5hbDsKIAorICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9y
ZSgpIGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICNpZiBVU0Uo
Q0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5
RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBhcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lM
YXllcigpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZh
Y3RvcikgZmluYWw7Ci0KLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0OwotICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLQot
ICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLSAg
ICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLQot
I2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7Ci0g
ICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKLQogICAgIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7Ci0KICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwor
ICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CiAKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKLQotICAgIEludFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZp
bmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKLQotICAgIHZvaWQgZHJhd05hdGl2ZUlt
YWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3Rl
bUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0lt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlv
bjo6RnJvbUltYWdlIH0pIGZpbmFsOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFn
ZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCBwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5h
bDsKLSNlbmRpZgorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogCi0g
ICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBm
aW5hbDsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKKyAgICB2
b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgdm9p
ZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCisgICAgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICB2
b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRl
RGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7Ci0K
LSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3Vu
ZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisgICAgdm9pZCBkcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50Mikg
ZmluYWw7CiAKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwor
ICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIAogICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNpZiBQTEFURk9STShNQUMpCkBAIC0xMjcs
MjMgKzk4LDI2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlm
CiAKLSAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290
aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxv
YXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IHN0ZDo6bnVsbG9wdCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdO
YXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lz
dGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisgICAg
dm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CisjZW5k
aWYKIAorICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwogICAgIHZv
aWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
U3Ryb2tlU3R5bGUpIGZpbmFsOwotCiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKIAotICAg
IHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
LQotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0KICAgICBib29sIHN1
cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwor
ICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBmaW5hbDsKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKIAogI2lmIE9TKFdJ
TkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZElt
YWdlLmNwcAppbmRleCBiYjRkYWMwMTljNWI5ZTEzYjEzN2FlNjk0ZTRiZjZiMjc2YmZjYzBkLi4x
YzFiOTZlYzViOTgzY2M1ZjE4ZDZmZjFmZDI1ODU3ZmE5NDNjNDFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVk
SW1hZ2UuY3BwCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6
OmRyYXdDcm9zc2ZhZGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogSW1hZ2VEcmF3UmVzdWx0
IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkp
OworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAoZHN0UmVjdCk7
CiAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZHN0
UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDI1YTNkM2ZlODc3
MzMxZGRhMzk1NzgwMTFiNmQ4OTBmMjEyYzcyZTYuLjNiY2I1MDVhZjNjMjgyZjQyMjMyNWNkN2Uz
MDA1MzRmZDlmOTljYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjQgKzI2LDExIEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRTdGF0ZS5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KIAotI2lmIFVTRShDT1JFX1RFWFQpCi0jaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0j
aWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+
Ci0jZWxzZQotI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29yZVRleHRTUEkuaD4KLSNlbmRpZgotI2lu
Y2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwpAQCAtNjIsNzYgKzQ5LDMyIEBAIHB1Ymxp
YzoKICNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQogICAgIHZvaWQgZHJhd05h
dGl2ZVRleHQoQ1RGb250UmVmLCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmVSZWYsIENHUmVjdCBs
aW5lUmVjdCk7CiAKLSAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiwgQ0dHU3RhdGVSZWYsIENHUmVjdCk7Ci0gICAgdm9pZCByZWNvcmRFbmRMYXllcihDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZik7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENH
UmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSos
IGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50
KTsKLSAgICB2b2lkIHJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0
ZVJlZiwgQ0dSZWN0LCBDR0ltYWdlUmVmKTsKKyAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dH
U3RhdGVSZWYpOworICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dHU3RhdGVSZWYpOworICAgIHZv
aWQgcmVjb3JkRHJhd0dseXBocyhDR0dTdGF0ZVJlZiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBD
R1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpOworICAgIHZvaWQgcmVjb3JkRHJhd0lt
YWdlKENHR1N0YXRlUmVmLCBDR1JlY3QsIENHSW1hZ2VSZWYpOwogI2VuZGlmCiAKLSAgICBEZWNv
bnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKCkgY29uc3QgeyByZXR1cm4g
bV9kZWNvbnN0cnVjdERyYXdHbHlwaHM7IH0KLQogcHJpdmF0ZToKLSNpZiBVU0UoQ09SRV9URVhU
KSAmJiAhUExBVEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0
ZUludGVybmFsQ29udGV4dCgpOwotI2VuZGlmCi0KLSAgICB2b2lkIGRyYXdCeVNwbGl0dGluZ0lu
dG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGRy
YXdPVFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
YW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGRyYXdOb25PVFNWR1J1
bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLQotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbFN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9pZCBwb3B1bGF0ZUludGVybmFs
Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIHZvaWQgcHJlcGFyZUlu
dGVybmFsQ29udGV4dChjb25zdCBGb250JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQg
Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKKyAgICB2b2lkIHNldEludGVybmFsRm9udChjb25z
dCBGb250JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHBy
ZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKKyAgICB2b2lkIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9yaWdpbmFsU3RhdGUpOwogCi0gICAgdm9p
ZCB1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0
ZXJuKiA9IG51bGxwdHIpOwotICAgIHZvaWQgdXBkYXRlU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3Im
LCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51bGxwdHIpOwotICAgIHZvaWQgdXBk
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIGVudW0gY2xhc3MgU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMgewotICAgICAgICBVbnNwZWNpZmllZCwKLSAgICAgICAgWWVzLAotICAg
ICAgICBObwotICAgIH07Ci0gICAgdm9pZCB1cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBz
aGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwg
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwotCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRG
T1JNKFdJTikKLSAgICB2b2lkIHVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmKTsKLSNlbmRpZgorICAg
IHZvaWQgZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3
T1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdCeVNwbGl0dGluZ0lu
dG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwogCi0gICAgR3JhcGhp
Y3NDb250ZXh0JiBtX293bmVyOworICAgIEdyYXBoaWNzQ29udGV4dCYgbV9kZXN0aW5hdGlvbkNv
bnRleHQ7CiAgICAgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhz
OwogICAgIERlcml2ZUZvbnRGcm9tQ29udGV4dCBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dDsKIAot
I2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAgVW5pcXVlUmVmPEdyYXBo
aWNzQ29udGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7Ci0jZW5kaWYKLQogICAgIGNvbnN0IEZvbnQq
IG1fb3JpZ2luYWxGb250IHsgbnVsbHB0ciB9OwogICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21v
b3RoaW5nTW9kZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nIH07CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OwogCi0gICAgc3RydWN0IFN0YXRlIHsK
LSAgICAgICAgc3RydWN0IFN0eWxlIHsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAg
ICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKLSAgICAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgICAgICAgICAgUmVmUHRyPFBhdHRlcm4+
IHBhdHRlcm47Ci0gICAgICAgIH07Ci0gICAgICAgIFN0eWxlIGZpbGxTdHlsZTsKLSAgICAgICAg
U3R5bGUgc3Ryb2tlU3R5bGU7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKLQotICAg
ICAgICBzdHJ1Y3QgU2hhZG93U3RhdGUgewotICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldDsK
LSAgICAgICAgICAgIGZsb2F0IGJsdXIgeyAwIH07Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsK
LSAgICAgICAgICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07Ci0gICAgICAgIH07
Ci0gICAgICAgIFNoYWRvd1N0YXRlIHNoYWRvdzsKLSAgICB9OwotICAgIFN0YXRlIG1fb3JpZ2lu
YWxTdGF0ZTsKLSAgICBTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKyNpZiBVU0UoQ09SRV9URVhUKSAm
JiAhUExBVEZPUk0oV0lOKQorICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJu
YWxDb250ZXh0OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODUx
ODBhZDEwOWZkODE4ZTliYjE1ODhjZTk2MmFiNDYzMDgxNmEwOS4uMzYxMWIxMmNhOWFiMjllYjky
MWYyMzI1ZTFmOTZkMjk1MjUzYzdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgRm9udENh
c2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuCiAKIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNw
bGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4dFJ1bihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFjb250ZXh0LnBhaW50aW5nRGlzYWJs
ZWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCAhY29udGV4dC5wYWludGluZ0Rpc2Fi
bGVkKCkpOwogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uID0gdG8udmFsdWVfb3IocnVuLmxlbmd0
aCgpKTsKICAgICAKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNwbGF5
TGlzdEZvclRleAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IGRpc3BsYXlMaXN0ID0gbWFr
ZVVuaXF1ZTxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4oKTsKLSAgICBEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBjb250ZXh0
LnN0YXRlKCksIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgRHJhd0dseXBoc1JlY29y
ZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKTsKKyAgICBEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoKSwgQWZmaW5l
VHJhbnNmb3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpO
byk7CiAgICAgCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gdG9GbG9hdFBvaW50KFdlYkNv
cmU6OnNpemUoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKSkpOwogICAgIGRyYXdHbHlwaEJ1
ZmZlcihyZWNvcmRpbmdDb250ZXh0LCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCwgY3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnRJbWFnZS5jcHAKaW5kZXggNjQ1ODRlNWNmZTAxMTg4MmVmYWIyZTIzYzNhNTk0
ZTE3ODJmMjg5MC4uMmY4MjdmNjI1ZjY0YjU5Y2ExYTY2NDk2MDczMGYwM2MyM2JjMzdhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5j
cHAKQEAgLTQzLDcgKzQzLDcgQEAgR3JhZGllbnRJbWFnZTo6fkdyYWRpZW50SW1hZ2UoKSA9IGRl
ZmF1bHQ7CiBJbWFnZURyYXdSZXN1bHQgR3JhZGllbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihkZXN0Q29udGV4dCk7Ci0gICAg
ZGVzdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgZGVzdENvbnRleHQuc2V0Q29tcG9zaXRl
TW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9
KTsKICAgICBkZXN0Q29udGV4dC5jbGlwKGRlc3RSZWN0KTsKICAgICBkZXN0Q29udGV4dC50cmFu
c2xhdGUoZGVzdFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBz
cmNSZWN0LnNpemUoKSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBHcmFkaWVudEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGQK
ICAgICBtX2dyYWRpZW50LT5hZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKGFkanVzdGVk
U2l6ZSwgYWRqdXN0ZWRTcmNSZWN0LCBzcGFjaW5nKTsKIAogICAgIC8vIEZhY3RvciBpbiB0aGUg
ZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29s
dXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5n
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oKTsK
ICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7CiAgICAg
ZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAK
aW5kZXggMGJiMTM1OTdjZWE3MzY5ZGJiYzZlMTcyN2YyNmM5MmI4ZmI3NTE3Ni4uNjA1NzYwOGE0
ZDYxMzdiMDU1MjdhZjZjMWQ3MTA5YmQwZDQ1YjdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcs
NiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQmlkaVJlc29s
dmVyLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKQEAg
LTM2LDQ3MyArMzUsMzA5IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiTnVs
bEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAi
U3lzdGVtSW1hZ2UuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiVGV4dEJveEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFRleHRCb3hJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVGV4dEJv
eEl0ZXJhdG9yKCkKLSAgICAgICAgOiBtX3RleHRSdW4oMCkKLSAgICAgICAgLCBtX29mZnNldCgw
KQotICAgIHsKLSAgICB9Ci0KLSAgICBUZXh0Qm94SXRlcmF0b3IoY29uc3QgVGV4dFJ1biogdGV4
dFJ1biwgdW5zaWduZWQgb2Zmc2V0KQotICAgICAgICA6IG1fdGV4dFJ1bih0ZXh0UnVuKQotICAg
ICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICB2b2lkIGluY3JlbWVudCgpIHsg
bV9vZmZzZXQrKzsgfQotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV90ZXh0UnVu
IHx8IG1fb2Zmc2V0ID49IG1fdGV4dFJ1bi0+bGVuZ3RoKCk7IH0KLSAgICBVQ2hhciBjdXJyZW50
KCkgY29uc3QgeyByZXR1cm4gKCptX3RleHRSdW4pW21fb2Zmc2V0XTsgfQotICAgIFVDaGFyRGly
ZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGF0RW5kKCkgPyBVX09USEVSX05FVVRS
QUwgOiB1X2NoYXJEaXJlY3Rpb24oY3VycmVudCgpKTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQgJiYgbV90ZXh0UnVuID09IG90aGVyLm1fdGV4
dFJ1bjsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGV4dEJveEl0ZXJhdG9y
JiBvdGhlcikgY29uc3QgeyByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgY29uc3QgVGV4dFJ1biogbV90ZXh0UnVuOwotICAgIHVuc2lnbmVkIG1fb2Zmc2V0Owot
fTsKLQotI2RlZmluZSBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkg
XAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpm
bGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKLSAgICAgICAg
Y2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKTsKLQotR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkKLSAgICA6IHNob3VsZEFudGlhbGlh
cyh0cnVlKQotICAgICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKLSAgICAsIHNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyh0cnVlKQotICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFs
c2UpCi0gICAgLCBkcmF3THVtaW5hbmNlTWFzayhmYWxzZSkKK0dyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2VGbGFncyYgY2hhbmdlRmxhZ3MsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fc3RhdGUoaW5pdGlhbENsaXAsIGNoYW5nZUZsYWdz
LCBpbml0aWFsQ1RNKQogewogfQogCi1HcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBoaWNzQ29u
dGV4dFN0YXRlKCkgPSBkZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OwotR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6b3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OwotR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVyYXRvcj0oR3JhcGhp
Y3NDb250ZXh0U3RhdGUmJikgPSBkZWZhdWx0OwotCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjptZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK0dyYXBoaWNzQ29udGV4dDo6
fkdyYXBoaWNzQ29udGV4dCgpCiB7Ci0gICAgYXV0byBzdHJva2VGbGFncyA9IHsgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0cm9rZUZsYWdzKSkgewotICAgICAg
ICBzdHJva2VDb2xvciA9IHN0YXRlLnN0cm9rZUNvbG9yOwotICAgICAgICBzdHJva2VHcmFkaWVu
dCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgICAgICBzdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbGxGbGFncyA9IHsgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxH
cmFkaWVudENoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlIH07
Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGZpbGxGbGFncykpIHsKLSAgICAgICAgZmlsbENv
bG9yID0gc3RhdGUuZmlsbENvbG9yOwotICAgICAgICBmaWxsR3JhZGllbnQgPSBzdGF0ZS5maWxs
R3JhZGllbnQ7Ci0gICAgICAgIGZpbGxQYXR0ZXJuID0gc3RhdGUuZmlsbFBhdHRlcm47Ci0gICAg
fQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dD
aGFuZ2UpKSB7Ci0gICAgICAgIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAg
ICAgICAgc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgICAgIHNoYWRvd0NvbG9y
ID0gc3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIHNoYWRvd1JhZGl1c01vZGUgPSBzdGF0ZS5z
aGFkb3dSYWRpdXNNb2RlOwotICAgIH0KLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgc3Ryb2tlVGhp
Y2tuZXNzID0gc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICB0
ZXh0RHJhd2luZ01vZGUgPSBzdGF0ZS50ZXh0RHJhd2luZ01vZGU7Ci0KLSAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAg
ICAgc3Ryb2tlU3R5bGUgPSBzdGF0ZS5zdHJva2VTdHlsZTsKLQotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKQotICAgICAgICBmaWxs
UnVsZSA9IHN0YXRlLmZpbGxSdWxlOworICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOworfQogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGFs
cGhhID0gc3RhdGUuYWxwaGE7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCit7CisgICAg
bV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnko
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKSB7Ci0gICAgICAgIGNvbXBvc2l0ZU9w
ZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgICAgIGJsZW5kTW9kZSA9IHN0
YXRlLmJsZW5kTW9kZTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKK3sKKyAgICBp
ZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHN0YXRl
LnNob3VsZEFudGlhbGlhczsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBzaG91bGRTbW9vdGhG
b250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOworICAgIG1fc3RhdGUgPSBtX3N0YWNrLnRh
a2VMYXN0KCk7CisgICAgbV9sYXN0QXBwbGllZFN0YXRlID0gc3RkOjpudWxsb3B0OwogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMg
PSBzdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0KLSAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdl
KSkKLSAgICAgICAgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtczsKKyAgICAvLyBNYWtlIHN1cmUgd2UgZGVhbGxvY2F0ZSB0aGUgc3RhdGUgc3Rh
Y2sgYnVmZmVyIHdoZW4gaXQgZ29lcyBlbXB0eS4KKyAgICAvLyBDYW52YXMgZWxlbWVudHMgd2ls
bCBpbW1lZGlhdGVseSBzYXZlKCkgYWdhaW4sIGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2Fw
YWNpdHkuCisgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICBtX3N0YWNrLmNsZWFy
KCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRy
YXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgZHJhd0x1bWluYW5jZU1hc2sgPSBzdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkaWRBcHBseVN0YXRl
Q2hhbmdlcygpCit7CisgICAgbV9zdGF0ZS5kaWRBcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1f
bGFzdEFwcGxpZWRTdGF0ZSA9IG1fc3RhdGU7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQot
ICAgICAgICBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eTsKK0Zsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yKCkgY29u
c3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgcmV0
dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Cit9
CisgICAgCitGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmco
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICBhdXRv
IHRyYW5zZm9ybWVkRGVzdFJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7CisgICAg
cmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7Cit9CiAK
LSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChmbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICB1
c2VEYXJrQXBwZWFyYW5jZSA9IHN0YXRlLnVzZURhcmtBcHBlYXJhbmNlOwotI2VuZGlmCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKK3sKKyAgICAr
K21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKSBjb25zdAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFnczsKKyAgICBBU1NFUlQobV90cmFuc3Bh
cmVuY3lMYXllckNvdW50ID4gMCk7CisgICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7Cit9
CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwg
c3Ryb2tlR3JhZGllbnQpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBh
dHRlcm5DaGFuZ2UsIHN0cm9rZVBhdHRlcm4pOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BF
UlRZKEZpbGxHcmFkaWVudENoYW5nZSwgZmlsbEdyYWRpZW50KTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShGaWxsUGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fc3RhdGUu
Y2xpcChyZWN0KTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpCi0gICAgICAgICYmIChtX3N0YXRlLnNoYWRvd09m
ZnNldCAhPSBzdGF0ZS5zaGFkb3dPZmZzZXQKLSAgICAgICAgICAgIHx8IG1fc3RhdGUuc2hhZG93
Qmx1ciAhPSBzdGF0ZS5zaGFkb3dCbHVyCi0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0Nv
bG9yICE9IHN0YXRlLnNoYWRvd0NvbG9yKSkKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlKQoreworICAgIG1fc3RhdGUuY2xpcChw
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Cit9CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9Q
RVJUWShTdHJva2VUaGlja25lc3NDaGFuZ2UsIHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoVGV4dERyYXdpbmdNb2RlQ2hhbmdlLCB0ZXh0RHJhd2luZ01v
ZGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZUNvbG9yQ2hhbmdlLCBz
dHJva2VDb2xvcik7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbENvbG9yQ2hh
bmdlLCBmaWxsQ29sb3IpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVN0
eWxlQ2hhbmdlLCBzdHJva2VTdHlsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
RmlsbFJ1bGVDaGFuZ2UsIGZpbGxSdWxlKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShBbHBoYUNoYW5nZSwgYWxwaGEpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIFBhdGggcGF0aDsKKyAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOworICAgIGNsaXBQYXRoKHBhdGgpOworfQogCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2Rl
Q2hhbmdlIH0pCi0gICAgICAgICYmIChtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUuYmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9k
ZSkpIHsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21w
b3NpdGVPcGVyYXRpb25DaGFuZ2UpOwotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hv
dWxkQW50aWFsaWFzQ2hhbmdlLCBzaG91bGRBbnRpYWxpYXMpOwotICAgIENIRUNLX0ZPUl9DSEFO
R0VEX1BST1BFUlRZKFNob3VsZFNtb290aEZvbnRzQ2hhbmdlLCBzaG91bGRTbW9vdGhGb250cyk7
Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKLQotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoVXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UsIHVzZURhcmtB
cHBlYXJhbmNlKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGNoYW5nZUZsYWdzOworICAgIFBhdGgg
cGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOworICAgIGNsaXBPdXQocGF0aCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KQogewotICAgIG1fc3RhdGUubWVyZ2VDaGFuZ2VzKHN0YXRlLCBmbGFncyk7Ci0KLSAgICBh
dXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnNBbnkoc3Ryb2tlRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShzdHJva2VG
bGFncyk7Ci0KLSAgICBhdXRvIGZpbGxGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zQW55KGZpbGxGbGFncykpCi0gICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3ZlKGZp
bGxGbGFncyk7Ci0KLSAgICBhdXRvIGNvbXBvc2l0ZU9wZXJhdG9yRmxhZ3MgPSB7IEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoY29tcG9z
aXRlT3BlcmF0b3JGbGFncykpCi0gICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3ZlKGNvbXBvc2l0
ZU9wZXJhdG9yRmxhZ3MpOwotCi0gICAgbV9jaGFuZ2VGbGFncy5hZGQoZmxhZ3MpOworICAgIGlt
YWdlQnVmZmVyLmNsaXBUb01hc2soKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRT
dHJva2VHcmFkaWVudCgqbV9zdGF0ZS5zdHJva2VHcmFkaWVudCwgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29udGV4
dC5zZXRTdHJva2VQYXR0ZXJuKCptX3N0YXRlLnN0cm9rZVBhdHRlcm4pOwotCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENo
YW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KCptX3N0YXRlLmZpbGxHcmFk
aWVudCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxQYXR0ZXJuKCptX3N0YXRlLmZpbGxQYXR0ZXJu
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hh
ZG93Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZz
ZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2Rl
Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUobV9zdGF0ZS50ZXh0
RHJhd2luZ01vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihtX3N0YXRlLnN0cm9rZUNvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBj
b250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2Up
KQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKG1fc3RhdGUuc3Ryb2tlU3R5bGUpOwot
Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsUnVsZShtX3N0YXRlLmZpbGxS
dWxlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBo
YSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UgfSkpCi0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRp
YWxpYXNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhtX3N0YXRl
LnNob3VsZEFudGlhbGlhcyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBjb250
ZXh0LnNldFNob3VsZFNtb290aEZvbnRzKG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzKG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RHJhd0x1bWlu
YW5jZU1hc2sobV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayk7Ci0KLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eShtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotCi0jaWYgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dFVzZURhcmtBcHBlYXJhbmNlKG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlmCisg
ICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlv
bigpOworICAgIHNldENvbXBvc2l0ZU1vZGUoeyBvcCwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxS
ZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVy
YXRvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4dFN0
cmVhbSYgdHMpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJjaGFuZ2UtZmxhZ3MiLCBtX2NoYW5nZUZsYWdzLnRvUmF3KCkpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50LmdldCgpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJzdHJva2UtcGF0dGVybiIsIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQo
KSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWdy
YWRpZW50IiwgbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkK
LSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRlLmZpbGxQYXR0
ZXJuLmdldCgpKTsKKyAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKK30KIAotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpKSB7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNo
YWRvd0JsdXIpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0
YXRlLnNoYWRvd09mZnNldCk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWNvbG9y
IiwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93
cy11c2UtbGVnYWN5LXJhZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dS
YWRpdXNNb2RlOjpMZWdhY3kpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCit7CisgICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAg
IGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5k
TW9kZSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgICAgIAorICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICBzZXRD
b21wb3NpdGVNb2RlKHsgcHJldmlvdXNPcGVyYXRvciwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxS
b3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZp
b3VzT3BlcmF0b3IpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic3Ryb2tlLXRoaWNrbmVzcyIsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0
RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRleHQtZHJhd2lu
Zy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1jb2xvciIsIG1fc3RhdGUuc3Ry
b2tlQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmls
bC1jb2xvciIsIG1fc3RhdGUuZmlsbENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXN0eWxlIiwgbV9zdGF0ZS5zdHJva2VTdHlsZSk7Cit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSZWN0KHJlY3Qp
OwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXJ1bGUiLCBt
X3N0YXRlLmZpbGxSdWxlKTsKKyAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVy
bygpKQorICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7CisgICAg
ZWxzZQorICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAg
ICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFD
aGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIiwgbV9zdGF0ZS5hbHBoYSk7
CisgICAgV2luZFJ1bGUgb2xkRmlsbFJ1bGUgPSBmaWxsUnVsZSgpOworICAgIENvbG9yIG9sZEZp
bGxDb2xvciA9IGZpbGxDb2xvcigpOworICAgIAorICAgIHNldEZpbGxSdWxlKFdpbmRSdWxlOjpF
dmVuT2RkKTsKKyAgICBzZXRGaWxsQ29sb3IoY29sb3IpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5n
ZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdG9yIiwgbV9zdGF0
ZS5jb21wb3NpdGVPcGVyYXRvcik7CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgCisgICAgc2V0
RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOworICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwor
fQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkJsZW5kTW9kZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIs
IG1fc3RhdGUuYmxlbmRNb2RlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZUFz
UGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBh
dGguYWRkRWxsaXBzZShlbGxpcHNlKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKK30KIAotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRp
YWxpYXNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1hbnRpYWxpYXMi
LCBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
RWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRo
OworICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwor
fQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91
bGQtc21vb3RoLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Cit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCit7CisgICAg
YXV0byBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKKyAgICBhdXRvIG9sZFN0cm9rZUNvbG9y
ID0gc3Ryb2tlQ29sb3IoKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsIG1f
c3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBzZXRGaWxsQ29sb3Ioc2hh
ZG93Q29sb3IpOworICAgIHNldFN0cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKKyAgICBkcmF3RWxs
aXBzZShGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKSk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoInNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMiLCBtX3N0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKTsKKyAgICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBz
ZXRTdHJva2VDb2xvcihlbGxpcHNlQ29sb3IpOworICAgIGRyYXdFbGxpcHNlKHJlY3QpOwogCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdM
dW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJkcmF3LWx1bWlu
YW5jZS1tYXNrIiwgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayk7CisgICAgc2V0RmlsbENvbG9y
KG9sZEZpbGxDb2xvcik7CisgICAgc2V0U3Ryb2tlQ29sb3Iob2xkU3Ryb2tlQ29sb3IpOworfQog
Ci0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQot
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoInVzZS1kYXJrLWFwcGVhcmFuY2UiLCBtX3N0YXRlLnVz
ZURhcmtBcHBlYXJhbmNlKTsKLSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgc3Ryb2tlUGF0
aChwYXRoKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0
UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCiB7Ci0gICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRz
OworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFn
ZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGlt
YWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250
ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNF
bXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7CisgICAgZHJh
d0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9n
aWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNhdmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICBtX3N0YWNrLmFwcGVuZChtX3N0YXRlKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50
ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24s
IHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBpZiAobV9z
dGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgaWYgKCFpbWFnZSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RhdGUgPSBtX3N0YWNrLmxhc3QoKTsKLSAg
ICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZWFsbG9jYXRl
IHRoZSBzdGF0ZSBzdGFjayBidWZmZXIgd2hlbiBpdCBnb2VzIGVtcHR5LgotICAgIC8vIENhbnZh
cyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2FpbiwgYnV0IHRoYXQgZ29lcyBp
bnRvIGlubGluZSBjYXBhY2l0eS4KLSAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCi0gICAgICAg
IG1fc3RhY2suY2xlYXIoKTsKKyAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9n
aWNhbFNpemUoKTsKKyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSks
IEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0s
IGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5tZXJnZUNo
YW5nZXMoc3RhdGUsIGZsYWdzKTsKLSAgICBkaWRVcGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOwor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGltYWdlTG9naWNhbFNp
emUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIo
V1RGTW92ZShpbWFnZSksIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxT
aXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxs
aXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzYXZlKCk7Ci0KLSAgICBz
ZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7Ci0gICAgc2V0RmlsbENvbG9yKHNoYWRvd0NvbG9y
KTsKLQotICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIHNldFN0cm9rZUNvbG9yKGVsbGlw
c2VDb2xvcik7Ci0gICAgc2V0RmlsbENvbG9yKGVsbGlwc2VDb2xvcik7Ci0KLSAgICBkcmF3RWxs
aXBzZShyZWN0KTsgIAotCi0gICAgcmVzdG9yZSgpOworICAgIGlmICghaW1hZ2UpCisgICAgICAg
IHJldHVybjsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlv
blF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHko
KSk7CisgICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVz
dWx0cyYgcmVzdWx0cykKIHsKLSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7Ci0gICAg
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0
ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyLmFw
cGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMpOworICAgIGlmICghcmVz
dWx0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHJlc3Vs
dC0+aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBzY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmls
dGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7CisgICAgZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlciwgcmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKKyAgICBzY2FsZShmaWx0ZXIu
ZmlsdGVyU2NhbGUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29u
c3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hh
ZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAg
ICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIg
PSBibHVyOwotICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnNo
YWRvd1JhZGl1c01vZGUgPSByYWRpdXNNb2RlOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOworICAgIHJldHVybiBkcmF3SW1h
Z2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQorSW1hZ2VEcmF3UmVzdWx0IEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRp
b25zKQogewotICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7Ci0gICAgbV9z
dGF0ZS5zaGFkb3dCbHVyID0gMDsKLSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsK
LSAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6
ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlvbigpKSk7CisgICAgcmV0dXJuIGRyYXdJ
bWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3QsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsK
IH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwg
ZmxvYXQmIGJsdXIsIENvbG9yJiBjb2xvcikgY29uc3QKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBvZmZzZXQgPSBtX3N0YXRlLnNoYWRvd09mZnNldDsKLSAgICBi
bHVyID0gbV9zdGF0ZS5zaGFkb3dCbHVyOwotICAgIGNvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xv
cjsKLQotICAgIHJldHVybiBoYXNTaGFkb3coKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMu
aW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0gY29sb3I7Ci0gICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBu
dWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsQ29sb3JDaGFuZ2UpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5h
dGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCitJ
bWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKKyAgICBJbWFnZTo6VGlsZVJ1bGUg
aFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBX
VEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKTsKKyAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6
OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgeworICAgICAgICAv
LyBKdXN0IGRvIGEgc2NhbGUuCisgICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOworICAgIH0KKworICAgIEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0
aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVk
KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVs
ZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7
IH07Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuZmls
bFBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgc3lzdGVtSW1h
Z2UuZHJhdygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3RhdGUuc3Ry
b2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsKKyAgICBpbWFnZS5kcmF3UGF0
dGVybigqdGhpcywgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZp
bGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsK
LSAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwotICAgIG1fc3Rh
dGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bTsKLSAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKTsKLSAg
ICAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRlcm4/CisgICAgcGxheWVyLnBsYXllclByaXZhdGUo
KS0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKIH0KKyNl
bmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgKyttX3RyYW5zcGFyZW5j
eUxheWVyQ291bnQ7CisgICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGds
eXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fdHJhbnNw
YXJlbmN5TGF5ZXJDb3VudCA+IDApOwotICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50Owor
ICAgIGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwg
Zm9udFNtb290aGluZ01vZGUpOwogfQogCiBGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3
VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
dG8pCkBAIC01MTEsMTEgKzM0Niw2IEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdU
ZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgcmV0
dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLXsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBo
cygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNt
b290aGluZ01vZGUpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFy
a3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRv
bVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvKQogewogICAgIGZvbnQuZHJhd0VtcGhhc2lzTWFya3Mo
KnRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKQEAgLTU0OSw3ICszNzksNDUgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgp
OwogICAgIH0KIAotICAgIGJpZGlSdW5zLmNsZWFyKCk7CisgICAgYmlkaVJ1bnMuY2xlYXIoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5
bGUgc3R5bGUpCit7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3Qu
aGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91Ymxl
VW5kZXJsaW5lcywgc3R5bGUpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21w
dXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJp
bnRpbmcpCit7CisgICAgQ29sb3IgZHVtbXlDb2xvcjsKKyAgICByZXR1cm4gY29tcHV0ZUxpbmVC
b3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xv
cik7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5k
QW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50
aW5nLCBDb2xvciYgY29sb3IpCit7CisgICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0
aW9uKCk7CisgICAgZmxvYXQgdGhpY2tuZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41
Zik7CisgICAgaWYgKHByaW50aW5nKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwg
RmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHgg
ZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCisgICAgZmxvYXQg
c2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zv
cm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7CisgICAgaWYgKHNjYWxlIDwgMS4wKSB7CisgICAgICAg
IC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25lLXBp
eGVsIGxpbmUgaGlnaCwKKyAgICAgICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3Zlcndo
ZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8gZWZm
ZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0ZXh0
IGlzIGF0IHNtYWxsIHNjYWxlcy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1V
bmRlcmxpbmVBbHBoYSA9IDAuNGY7CisgICAgICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBtaW5p
bXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1VbmRlcmxpbmVBbHBoYTsKKyAgICAg
ICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShzaGFkZSk7CisgICAg
fQorCisgICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRyYW5zZm9ybS5tYXBQb2ludChyZWN0
LmxvY2F0aW9uKCkpOworICAgIC8vIFZpc3VhbCBvdmVyZmxvdyBtaWdodCBvY2N1ciBoZXJlIGR1
ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMg
YWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVybGluZSBkZWNvcmF0aW9uLgorICAg
IEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2ludChyb3VuZGYoZGV2aWNlUG9pbnQu
eCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7CisgICAgaWYgKGF1dG8gaW52ZXJzZSA9IHRy
YW5zZm9ybS5pbnZlcnNlKCkpCisgICAgICAgIG9yaWdpbiA9IGludmVyc2UudmFsdWUoKS5tYXBQ
b2ludChkZXZpY2VPcmlnaW4pOworICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNp
emUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKIH0KIAogc3RhdGljIEludFNpemUgc2NhbGVk
SW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
Y2FsZSkKQEAgLTYzOSwxODcgKzUwNyw5IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3ND
b250ZXh0OjpjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByCiAgICAg
cmV0dXJuIGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUoKSwgcmVuZGVyaW5nTWV0aG9kKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIHN5c3RlbUltYWdlLmRyYXco
KnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17
Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFn
ZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBGbG9h
dFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoaW1hZ2VQYWludGluZ09wdGlv
bnMub3JpZW50YXRpb24oKSkpOwotICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0
aW9uLCBzcmNSZWN0LCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJw
b2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xh
dGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxp
dHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNp
emUmIHRpbGVTY2FsZUZhY3RvciwKLSAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpU
aWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0g
ICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3Ry
ZXRjaFRpbGUpIHsKLSAgICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgotICAgICAgICByZXR1cm4g
ZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICB9Ci0K
LSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAg
cmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNj
YWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFn
ZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0
KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRl
c3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0
eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAg
ICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1h
Z2UpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+
bG9naWNhbFNpemUoKTsKLSAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFn
ZSksIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7
IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNh
bFNpemUoKTsKLSAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIGRl
c3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGlu
Z09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdl
QnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgSW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Nj
b3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKLXsK
LSAgICBhdXRvIHJlc3VsdCA9IGZpbHRlci5hcHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VS
ZWN0LCByZXN1bHRzKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSByZXN1bHQtPmltYWdlQnVmZmVyKCk7Ci0gICAgaWYgKCFp
bWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZp
bHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0p
OwotICAgIGRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFn
ZVJlY3QoKSk7Ci0gICAgc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0
KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAg
IGNsaXBQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0Lmlz
Um91bmRlZCgpKSB7Ci0gICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVj
dCk7Ci0gICAgY2xpcE91dChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVz
dGluYXRpb25SZWN0KTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMo
KSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRSZWN0
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBncmFkaWVudC5maWxsKCp0aGlzLCBy
ZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKLXsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9y
ID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBi
bGVuZE1vZGUpOwotICAgIGZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICBzZXRDb21wb3NpdGVP
cGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChyZWN0LmlzUm91bmRlZCgp
KSB7Ci0gICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSwg
YmxlbmRNb2RlKTsKLSAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0g
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFBhdGgg
cGF0aDsKLSAgICBwYXRoLmFkZFJlY3QocmVjdCk7Ci0KLSAgICBpZiAoIXJvdW5kZWRIb2xlUmVj
dC5yYWRpaSgpLmlzWmVybygpKQotICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRI
b2xlUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0
LnJlY3QoKSk7CiAKLSAgICBXaW5kUnVsZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7Ci0gICAg
Q29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUo
V2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBmaWxs
UGF0aChwYXRoKTsKLSAgICAKLSAgICBzZXRGaWxsUnVsZShvbGRGaWxsUnVsZSk7Ci0gICAgc2V0
RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7Ci19CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSBj
b21wb3NpdGVPcGVyYXRpb247Ci0gICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVuZE1vZGU7Ci0g
ICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0
ZU9wZXJhdGlvbkNoYW5nZSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5l
VG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBz
dHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBAIC04NTAsNzcgKzU0MCw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQ
b2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyCiAgICAgfQogfQogCi1GbG9hdFNpemUgR3JhcGhpY3ND
b250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2Nh
bGUpOwotICAgIHJldHVybiBGbG9hdFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0u
eVNjYWxlKCkpOwotfQotICAgIAotRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0
b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0
byB0cmFuc2Zvcm1lZERlc3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOwotICAg
IHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAg
ICBmaWxsUGF0aChwYXRoKTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQot
ewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgZmls
bFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQ
YXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0
aC5hZGRFbGxpcHNlKGVsbGlwc2UpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQot
ewotICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCBE
YXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMs
IHN0eWxlKTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGlu
ZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQotewot
ICAgIENvbG9yIGR1bW15Q29sb3I7Ci0gICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50
aWFsaWFzaW5nTW9kZUZvclRleHQocmVjdCwgcHJpbnRpbmcsIGR1bW15Q29sb3IpOwotfQotCi1G
bG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2lu
Z01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgQ29sb3Im
IGNvbG9yKQotewotICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gcmVjdC5sb2NhdGlvbigpOwotICAg
IGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIDAuNWYpOwotICAgIGlm
IChwcmludGluZykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShy
ZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUp
OwotICAgIC8vIEp1c3QgY29tcHV0ZSBzY2FsZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcgeCBh
bmQgeSBzY2FsZXMgYXJlIGVxdWFsLgotICAgIGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLmIoKSA/
IHN0ZDo6aHlwb3QodHJhbnNmb3JtLmEoKSwgdHJhbnNmb3JtLmIoKSkgOiB0cmFuc2Zvcm0uYSgp
OwotICAgIGlmIChzY2FsZSA8IDEuMCkgewotICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRy
YXdzIGEgbGluZSB0aGF0IGlzIGF0IGxlYXN0IG9uZS1waXhlbCBsaW5lIGhpZ2gsCi0gICAgICAg
IC8vIHdoaWNoIHRlbmRzIHRvIHZpc3VhbGx5IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxl
cy4gVG8gY291bnRlciB0aGlzCi0gICAgICAgIC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGll
ZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9yIHdoZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMuCi0g
ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPSAwLjRmOwot
ICAgICAgICBmbG9hdCBzaGFkZSA9IHNjYWxlID4gbWluaW11bVVuZGVybGluZUFscGhhID8gc2Nh
bGUgOiBtaW5pbXVtVW5kZXJsaW5lQWxwaGE7Ci0gICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hhZGUpOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgZGV2
aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFwUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKLSAgICAvLyBW
aXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2NjdXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2Nl
aWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZh
bHVlIGZvciB1bmRlcmxpbmUgZGVjb3JhdGlvbi4KLSAgICBGbG9hdFBvaW50IGRldmljZU9yaWdp
biA9IEZsb2F0UG9pbnQocm91bmRmKGRldmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50
LnkoKSkpOwotICAgIGlmIChhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQotICAg
ICAgICBvcmlnaW4gPSBpbnZlcnNlLnZhbHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tu
ZXNzKSk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRo
Rm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxvYXQgdGhp
Y2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC05NzIsMTUgKzU5MSw0IEBAIFZlY3RvcjxG
bG9hdFBvaW50PiBHcmFwaGljc0NvbnRleHQ6OmNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJv
b2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0dXJuIHsgcG9pbnQxLCBwb2ludDIgfTsKIH0KIAotI2lm
IEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAg
ICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhp
cywgZGVzdGluYXRpb24pOwotfQotI2VuZGlmCi0KLXZvaWQgTnVsbEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsK
LX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAppbmRleCBmYjk1ZGQyNWIyNzFkZWI5ZmE4NWZmMmQ5ZjFmNzQ3MTZhMDY2YmFl
Li5iZTQ0NTY2Mjk5NzY1OTZkNjkyNGQ4OWI5MWY0NTc0NjBmY2ZjMWI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2Jp
bGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMwLDQ5ICszMCwxOCBAQAogI2luY2x1ZGUg
IkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAotI2lmIFVTRShDRykKLXR5cGVkZWYgc3RydWN0IENHQ29u
dGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbGlmIFVTRShDQUlSTykKLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOwotfQotdHlwZWRlZiBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbHNl
Ci10eXBlZGVmIHZvaWQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKFdJTikKLSNpbmNsdWRlICJESUJQaXhlbERhdGEuaCIKLXR5cGVkZWYgc3RydWN0IEhE
Q19fKiBIREM7Ci0jaWYgIVVTRShDRykKLS8vIFVJbnQ4IGlzIGRlZmluZWQgaW4gQ29yZUZvdW5k
YXRpb24vQ0ZCYXNlLmgKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBVSW50ODsKLSNlbmRpZgotI2Vu
ZGlmCi0KLS8vIFgxMSBoZWFkZXJzIGRlZmluZSBhIGJ1bmNoIG9mIG1hY3JvcyB3aXRoIGNvbW1v
biB0ZXJtcywgaW50ZXJmZXJpbmcgd2l0aCBXZWJDb3JlIGFuZCBXVEYgZW51bSB2YWx1ZXMuCi0v
LyBBcyBhIHdvcmthcm91bmQsIHdlIGV4cGxpY2l0bHkgdW5kZWYgdGhlbSBoZXJlLgotI2lmIGRl
ZmluZWQoTm9uZSkKLSN1bmRlZiBOb25lCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEJlbG93KQotI3Vu
ZGVmIEJlbG93Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKFN1Y2Nlc3MpCi0jdW5kZWYgU3VjY2Vzcwot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwpA
QCAtODIsNyArNTEsNiBAQCBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZl
cjsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBNZWRpYVBsYXllcjsKIGNsYXNzIFJvdW5kZWRSZWN0
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0w7CkBAIC05MSwxNzQgKzU5LDEyIEBAIGNsYXNzIFN5
c3RlbUltYWdlOwogY2xhc3MgVGV4dFJ1bjsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4Owog
Ci1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotY2xhc3MgUmVjb3JkZXI7Ci19Ci0KLWVudW0gY2xh
c3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7Ci0gICAgRmlsbCA9IDEgPDwgMCwKLSAgICBT
dHJva2UgPSAxIDw8IDEsCi19OwotdXNpbmcgVGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25T
ZXQ8VGV4dERyYXdpbmdNb2RlPjsKLQotLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1
c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0vLyBJdCBoYXMgZGlmZmVy
ZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KLWVudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9k
ZSA6IGJvb2wgewotICAgIERlZmF1bHQsCi0gICAgTGVnYWN5Ci19OwotCi1lbnVtIFN0cm9rZVN0
eWxlIHsKLSAgICBOb1N0cm9rZSwKLSAgICBTb2xpZFN0cm9rZSwKLSAgICBEb3R0ZWRTdHJva2Us
Ci0gICAgRGFzaGVkU3Ryb2tlLAotICAgIERvdWJsZVN0cm9rZSwKLSAgICBXYXZ5U3Ryb2tlLAot
fTsKLQotc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKLSAgICBlbnVtIGNsYXNzIE1v
ZGUgOiB1aW50OF90IHsKLSAgICAgICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFs
dGVybmF0aXZlcywKLSAgICAgICAgU3BlbGxpbmcsCi0gICAgICAgIEdyYW1tYXIsCi0gICAgICAg
IEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCi0gICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZl
cwotICAgIH0gbW9kZTsKLSAgICBib29sIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2Ug
fTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxE
b2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1vZGU7Ci0gICAgZW5jb2Rl
ciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLXN0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFs
PE1vZGU+IG1vZGU7Ci0gICAgZGVjb2RlciA+PiBtb2RlOwotICAgIGlmICghbW9kZSkKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxk
VXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5j
ZTsKLSAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFu
Y2UgfX07Ci19Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTsKLQotc3RydWN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOwot
Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRT
dGF0ZSYmKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0gICAgZW51bSBDaGFu
Z2UgOiB1aW50MzJfdCB7Ci0gICAgICAgIFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMCwKLSAgICAgICAgU3Ryb2tlUGF0dGVybkNoYW5nZSAgICAgICAgICAg
ICAgICAgICAgID0gMSA8PCAxLAotICAgICAgICBGaWxsR3JhZGllbnRDaGFuZ2UgICAgICAgICAg
ICAgICAgICAgICAgPSAxIDw8IDIsCi0gICAgICAgIEZpbGxQYXR0ZXJuQ2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgMywKLSAgICAgICAgU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlICAg
ICAgICAgICAgICAgICAgID0gMSA8PCA0LAotICAgICAgICBTdHJva2VDb2xvckNoYW5nZSAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDUsCi0gICAgICAgIFN0cm9rZVN0eWxlQ2hhbmdlICAg
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNiwKLSAgICAgICAgRmlsbENvbG9yQ2hhbmdlICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA3LAotICAgICAgICBGaWxsUnVsZUNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDgsCi0gICAgICAgIFNoYWRvd0NoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOSwKLSAgICAgICAgU2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXNDaGFuZ2UgICAgICAgICAgID0gMSA8PCAxMCwKLSAgICAgICAgQWxwaGFDaGFu
Z2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxMSwKLSAgICAgICAgQ29tcG9z
aXRlT3BlcmF0aW9uQ2hhbmdlICAgICAgICAgICAgICAgID0gMSA8PCAxMiwKLSAgICAgICAgQmxl
bmRNb2RlQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxMywKLSAgICAgICAg
VGV4dERyYXdpbmdNb2RlQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNCwKLSAgICAg
ICAgU2hvdWxkQW50aWFsaWFzQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNSwKLSAg
ICAgICAgU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAxNiwK
LSAgICAgICAgU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlICAgICAgID0gMSA8PCAx
NywKLSAgICAgICAgRHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8
PCAxOCwKLSAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSAgICAgICAgID0g
MSA8PCAxOSwKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgICAgICBVc2VEYXJr
QXBwZWFyYW5jZUNoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDIwLAotI2VuZGlmCi0gICAg
fTsKLSAgICB1c2luZyBTdGF0ZUNoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47Ci0KLSAg
ICB2b2lkIG1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIFJlZlB0cjxHcmFkaWVudD4g
c3Ryb2tlR3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47Ci0gICAg
Ci0gICAgUmVmUHRyPEdyYWRpZW50PiBmaWxsR3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+
IGZpbGxQYXR0ZXJuOwotCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLQotICAgIENvbG9y
IHN0cm9rZUNvbG9yIHsgQ29sb3I6OmJsYWNrIH07Ci0gICAgQ29sb3IgZmlsbENvbG9yIHsgQ29s
b3I6OmJsYWNrIH07Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0KLSAgICBBZmZpbmVUcmFuc2Zv
cm0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZmls
bEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgeyAw
IH07Ci0gICAgZmxvYXQgc2hhZG93Qmx1ciB7IDAgfTsKLSAgICBmbG9hdCBhbHBoYSB7IDEgfTsK
LQotICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBXaW5k
UnVsZSBmaWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07Ci0KLSAgICBUZXh0RHJhd2luZ01v
ZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUgeyBUZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKLSAgICBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VPdmVyIH07Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFs
IH07Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7
IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07Ci0gICAgU2hhZG93UmFkaXVzTW9kZSBz
aGFkb3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwotCi0gICAgYm9v
bCBzaG91bGRBbnRpYWxpYXMgOiAxOwotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwot
ICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKLSAgICBib29sIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zIDogMTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDogMTsK
LSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFu
Y2UgOiAxOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ug
ewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKCkgPSBkZWZhdWx0OwotICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgICAgIDog
bV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgLCBtX2NoYW5nZUZsYWdzKGZsYWdzKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2Vz
RnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgY29uc3Q7Ci0KLSAgICB2b2lk
IGFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7Ci0K
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIG1fY2hhbmdlRmxhZ3M7Ci19OwotCi1XVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmKTsKLQogY2xhc3MgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzogICAKKyAgICBmcmllbmQgY2xhc3MgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKK3B1YmxpYzoKKyAg
ICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZUZsYWdzJiA9IHsgfSwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMjcwLDI3MCArNzYsMjcz
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5j
RGVjb2RlcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGRldGVj
dGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBD
b250ZXh0IFN0YXRlCisgICAgYm9vbCBjb250ZW5mdWxQYWludERldGVjdGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudGZ1
bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9Cisg
ICAgCisgICAgdmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKLSAgICB2b2lkIHNldFN0cm9r
ZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0
aGlja25lc3M7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VUaGlja25lc3NDaGFuZ2UpOyB9Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KKyAgICAvLyBDb250ZXh0IFN0
YXRlCiAKLSAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3Rh
dGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKTsgfQotICAgIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VTdHlsZTsgfQorICAgIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
KyAgICB2b2lkIG1lcmdlU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBv
dGhlcikgeyBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhvdGhlcik7IH0KKyAgICB2b2lkIG1lcmdlU3Rh
dGVEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpIHsgbV9zdGF0ZS5tZXJn
ZURpZmZzKG90aGVyKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VDb2xv
cihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RN
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5nZXRDVE0oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pIHsgbV9zdGF0ZS5zZXRDVE0oY3RtLCBt
X2xhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBjdG0pIHsgc2V0Q1RNKGdldENUTSgpICogY3RtKTsgfQorICAgIHZvaWQgdHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpIHsgc2V0Q1RNKGdldENUTSgpLnRyYW5zbGF0ZSh4LCB5KSk7
IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNsYXRl
KHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25z
dCBGbG9hdFBvaW50JiBwKSB7IHRyYW5zbGF0ZShwLngoKSwgcC55KCkpOyB9CisgICAgdm9pZCBz
Y2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpIHsgc2V0Q1RNKGdldENUTSgpLnNjYWxlKHN4LCBzeSkp
OyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHMsIHMpOyB9CisgICAgdm9pZCBz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgc2NhbGUoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsgfQorICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSB7IHNldENU
TShnZXRDVE0oKS5yb3RhdGUocmFkMmRlZyhhbmdsZUluUmFkaWFucykpKTsgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQ
YXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0
ZXJuLmdldCgpOyB9CisgICAgY29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuZmlsbEJydXNoKCkuY29sb3IoKTsgfQorICAgIEdyYWRpZW50KiBmaWxsR3JhZGll
bnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxCcnVzaCgpLmdyYWRpZW50KCk7IH0KKyAg
ICBQYXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNo
KCkucGF0dGVybigpOyB9CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsU3BhY2VUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3Jt
KCk7IH0KKyAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9zdGF0
ZS5zZXRGaWxsQ29sb3IoY29sb3IsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNl
dEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRGaWxsR3JhZGllbnQoV1RG
TW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRl
cm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybiks
IHNwYWNlVHJhbnNmb3JtKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VH
cmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwot
ICAgIEdyYWRpZW50KiBzdHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ry
b2tlR3JhZGllbnQuZ2V0KCk7IH0KKyAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuZmlsbFJ1bGUoKTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUg
ZmlsbFJ1bGUpIHsgbV9zdGF0ZS5zZXRGaWxsUnVsZShmaWxsUnVsZSwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0
YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KLSAgICBXaW5kUnVsZSBmaWxsUnVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KKyAgICBjb25zdCBDb2xvciYgc3Ry
b2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsg
fQorICAgIEdyYWRpZW50KiBzdHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
c3Ryb2tlQnJ1c2goKS5ncmFkaWVudCgpOyB9CisgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5wYXR0ZXJuKCk7IH0KKyAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNl
dFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldFN0cm9rZUNvbG9y
KGNvbG9yLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBzZXRTdHJva2VHcmFkaWVu
dChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldFN0cm9rZUdyYWRpZW50KFdURk1v
dmUoZ3JhZGllbnQpLCBncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0U3Ry
b2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5TcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldFN0cm9rZVBhdHRlcm4o
V1RGTW92ZShwYXR0ZXJuKSwgcGF0dGVyblNwYWNlVHJhbnNmb3JtKTsgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBjb25zdCBDb2xv
ciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQ29sb3I7IH0KKyAgICBm
bG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcygpOyB9CisgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7
IG1fc3RhdGUuc2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcywgbV9sYXN0QXBwbGllZFN0YXRl
KTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJik7Ci0gICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpOyB9CisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0eWxlKCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc2V0U3Ryb2tlU3R5bGUoc3R5bGUsIG1f
bGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0g
ICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdy
YWRpZW50LmdldCgpOyB9CisgICAgTGluZUNhcCBpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmxpbmVDYXAoKTsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsg
bV9zdGF0ZS5zZXRMaW5lQ2FwKGxpbmVDYXAsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAg
IHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykgeyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KLSAgICBib29sIHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsgfQorICAgIGNvbnN0IExpbmVEYXNoIGxpbmVEYXNoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5saW5lRGFzaCgpOyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVEYXNo
KSB7IG1fc3RhdGUuc2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFs
aWFzKSB7IG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyBkaWRVcGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hh
bmdlKTsgfQotICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zaG91bGRBbnRpYWxpYXM7IH0KKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUubGluZUpvaW4oKTsgfQorICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4g
bGluZUpvaW4pIHsgbV9zdGF0ZS5zZXRMaW5lSm9pbihsaW5lSm9pbiwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290
aEZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290
aEZvbnRzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzOyB9CisgICAgZmxvYXQgbWl0ZXJMaW1pdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubWl0ZXJMaW1pdCgpOyB9CisgICAgdm9pZCBzZXRNaXRl
ckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpIHsgbV9zdGF0ZS5zZXRNaXRlckxpbWl0KG1pdGVyTGlt
aXQsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMg
c3VicGl4ZWwtcXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNl
IG9mIGFsaWduaW5nIGdseXBocy4KLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlz
YWJsZSB0byB0byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0g
ICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBz
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9Ci0g
ICAgYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsgfQorICAgIENvbXBvc2l0ZU1vZGUgY29t
cG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlTW9kZSgpOyB9Cisg
ICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
Y29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBj
b25zdCB7IHJldHVybiBjb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlOyB9CisgICAgdm9pZCBzZXRD
b21wb3NpdGVNb2RlKENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX3N0YXRlLnNldENv
bXBvc2l0ZU1vZGUoY29tcG9zaXRlTW9kZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZv
aWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbikgeyBz
ZXRDb21wb3NpdGVNb2RlKHsgb3BlcmF0aW9uLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsgfQogCi0g
ICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5
IHF1YWxpdHkpIHsgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2UpOyB9Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eTsgfQorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmRyb3BTaGFkb3coKTsgfQorICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93KCkub2Zmc2V0OyB9CisgICAgZmxvYXQg
c2hhZG93Qmx1cigpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5ibHVyUmFkaXVzOyB9Cisg
ICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygp
LmNvbG9yOyB9CisgICAgdm9pZCBzZXREcm9wU2hhZG93KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BT
aGFkb3cpIHsgbV9zdGF0ZS5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3csIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KKyAgICB2b2lkIGNsZWFyU2hhZG93KCkgeyBzZXREcm9wU2hhZG93KHsgfSk7IH0K
IAotICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhh
OyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFu
Z2UpOyB9Ci0gICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9
CisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygp
LmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1
cm4gZHJvcFNoYWRvdygpLmlzQmx1cnJlZCgpOyB9CisgICAgYm9vbCBoYXNTaGFkb3coKSBjb25z
dCB7IHJldHVybiBkcm9wU2hhZG93KCkuaGFzT3V0c2V0cygpOyB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0K
LSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5ibGVuZE1vZGU7IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
YWxwaGEoKTsgfQorICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5zZXRB
bHBoYShhbHBoYSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXREcmF3THVt
aW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuZHJhd0x1bWluYW5j
ZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFzazsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsgfQotICAgIGJvb2wgZHJh
d0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNr
OyB9CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOyB9Cisg
ICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5
IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpIHsgbV9zdGF0ZS5zZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7
IH0KIAotICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1v
ZGUpIHsgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsgfQotICAg
IFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUudGV4dERyYXdpbmdNb2RlOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERy
YXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUoKTsgfQor
ICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3
aW5nTW9kZSkgeyBtX3N0YXRlLnNldFRleHREcmF3aW5nTW9kZSh0ZXh0RHJhd2luZ01vZGUsIG1f
bGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgU2hhZG93UmFkaXVz
TW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBjbGVhclNoYWRvdygpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hh
ZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25zdDsKKyAgICBib29sIHNob3VsZEFu
dGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKCk7IH0KKyAg
ICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRl
LnNldFNob3VsZEFudGlhbGlhcyhzaG91bGRBbnRpYWxpYXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7
IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
c2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsg
cmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3Rh
dGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkp
OyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJs
ZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAgIGJvb2wgc2hvdWxkU21vb3Ro
Rm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKCk7IH0KKyAg
ICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9z
dGF0ZS5zZXRTaG91bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cywgbV9sYXN0QXBwbGll
ZFN0YXRlKTsgfQogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNl
dFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VE
YXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9Ci0gICAg
Ym9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0Fw
cGVhcmFuY2U7IH0KLSNlbmRpZgorICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwt
cXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWdu
aW5nIGdseXBocy4KKyAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0
byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCisgICAgYm9vbCBz
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5z
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcygpOyB9CisgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhi
b29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUuc2V0U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
IAotICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgYm9vbCBkcmF3THVtaW5h
bmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2soKTsgfQor
ICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBt
X3N0YXRlLnNldERyYXdMdW1pbmFuY2VNYXNrKGRyYXdMdW1pbmFuY2VNYXNrLCBtX2xhc3RBcHBs
aWVkU3RhdGUpOyB9CiAKLSAgICAvLyBDYWxsZWQgKmFmdGVyKiBhbnkgY2hhbmdlIHRvIEdyYXBo
aWNzQ29udGV4dFN0YXRlOyBnZW5lcmFsbHkgdXNlZCB0byBwcm9wYWdhdGUgY2hhbmdlcwotICAg
IC8vIHRvIHRoZSBwbGF0Zm9ybSBjb250ZXh0J3Mgc3RhdGUuCi0gICAgdmlydHVhbCB2b2lkIGRp
ZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpID0gMDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQ
T1JUKQorICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnVzZURhcmtBcHBlYXJhbmNlKCk7IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS5zZXRVc2VEYXJrQXBwZWFyYW5jZSh1c2VE
YXJrQXBwZWFyYW5jZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorI2VuZGlmCiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCByZXN0b3JlKCk7Ci0gICAgCisgICAgdm9pZCBkaWRBcHBseVN0YXRlQ2hhbmdlcygp
OwogICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgp
OyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSA9IDA7CiAjaWYgVVNF
KENHKQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFwaGlj
c0NvbnRleHQgbWV0aG9kcz8KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7CisjZW5kaWYKIAotICAgIC8vIEZJWE1F
OiBDYW4gd2UgbWFrZSB0aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZl
IGl0IGV4aXN0IGNyb3NzLXBsYXRmb3JtPwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJD
b250ZXh0KGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNv
bnN0ID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7
CiAKLSAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRDRyBjb25zdHJ1
Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/Ci0gICAgdmly
dHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpID0gMDsKLSNlbmRpZgorICAg
IC8vIFRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUg
Y29udGV4dCwgbWFraW5nIHRoZSBjb250ZXh0IGNhcGFibGUgb2YKKyAgICAvLyBhY3RpbmcgYXMg
YSBiYXNlLWxldmVsIGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rv
cik7IH0KIAotICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorICAgIC8vIFRyYW5zcGFy
ZW5jeSBMYXllcnMKIAotICAgIC8vIFBpeGVsIFNuYXBwaW5nCisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAg
Ym9vbCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpICYmIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsgfQogCi0gICAgZW51
bSBSb3VuZGluZ01vZGUgewotICAgICAgICBSb3VuZEFsbFNpZGVzLAotICAgICAgICBSb3VuZE9y
aWdpbkFuZERpbWVuc2lvbnMKLSAgICB9OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRl
cykgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVs
Qm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdp
ZHRoLCBTdHJva2VTdHlsZSk7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIC8vIFNoYXBlcworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1
bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogCi0gICAgLy8gVGhlc2UgZHJhdyBt
ZXRob2RzIHdpbGwgZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KLSAgICAvLyBGSVhNRTog
Li4uZXhjZXB0IGRyYXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ry
b2tlcwotICAgIC8vIHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBi
b3JkZXJzIChvZiB0aGUgY29ycmVjdAotICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdmlydHVh
bCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9
IDEpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CisgICAgSW50UmVjdCBj
bGlwQm91bmRzKCkgY29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX3N0YXRlLmNsaXBC
b3VuZHMoKSk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpIHsgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgc3Ryb2tlRWxs
aXBzZUFzUGF0aChlbGxpcHNlKTsgfQorICAgIC8vIFNoYXBlcworCisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3Jh
ZGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVu
ZE1vZGU6Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOwogCi0gICAgdmly
dHVhbCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsK
LQotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0KLSAgICAvLyBJbWFnZXMsIFBhdHRl
cm5zLCBhbmQgTWVkaWEKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICBJ
bnRTaXplIGNvbXBhdGlibGVJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4g
PSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdl
QnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBG
bG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
PSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
b2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3Rk
OjpudWxsb3B0KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6
ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0g
c3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxv
cHQpIGNvbnN0OworICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tp
bmcgYW5kIGZpbGxpbmcuCisgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGlj
aCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKKyAgICAvLyB1c2luZyBhIDEtcGl4
ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKKyAg
ICAvLyBzdHJva2UgY29sb3IpLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFs
aWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVu
ZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlwc2VBc1Bh
dGgoZWxsaXBzZSk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUlt
YWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNl
Q29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB2aXJ0dWFsIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIElt
YWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpG
cm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFn
ZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsK
KyAgICAvLyBGb2N1cyBSaW5ncwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURy
YXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGls
ZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRp
bGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgLy8gRklYTUU6IENhbiB3ZSBoaWRlIHRo
ZXNlIGluIHRoZSBDRyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91Ymxl
IHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJs
ZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisjZW5k
aWYKIAorICAgIC8vIEltYWdlcwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWlu
Z0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4s
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZl
cihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQ
b2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VP
cmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jl
c3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdl
IH0pOwogCisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYg
c291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNl
bGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24pOwogI2VuZGlmCi0KLSAgICAvLyBDbGlwcGluZwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBj
bGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotCi0gICAgdmlydHVhbCB2
b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlw
T3V0KGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNs
aXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSA9
IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKLQorICAgIAogICAgIC8vIFRleHQKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0g
MCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpu
dWxsb3B0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFp
bnRJZkZvbnROb3RSZWFkeSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hl
Rm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2Rl
KQotICAgIHsKLSAgICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1H
bHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIFdF
QkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9t
ID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQo
Y29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKICAgICB2aXJ0
dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAotICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3Bh
cmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyBy
ZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJl
bmN5TGF5ZXJzKCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVy
bGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7CiAKLSAg
ICAvLyBGb2N1cyBSaW5ncworICAgIC8vIENvbXBhdGlibGUgSW1hZ2VCdWZmZXIKIAotICAgIHZp
cnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJikgPSAwOwotICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUg
Q0cgaW1wbGVtZW50YXRpb24/IE9yIGVsc2V3aGVyZT8KLSNpZiBQTEFURk9STShNQUMpCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNl
dCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotI2VuZGlmCisgICAgSW50
U2l6ZSBjb21wYXRpYmxlSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0Owog
Ci0gICAgLy8gVHJhbnNmb3JtcworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPElt
YWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUgPSAxLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6
Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUoeyBzLCBzIH0pOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdm9pZCB0cmFuc2xh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOyB9Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkgeyB0
cmFuc2xhdGUocC54KCksIHAueSgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRT
aXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4g
PSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVs
bG9wdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNj
YWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6
bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBj
b25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
PSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFs
PFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBz
dGQ6Om51bGxvcHQpIGNvbnN0OwogCi0gICAgZW51bSBJbmNsdWRlRGV2aWNlU2NhbGUgeyBEZWZp
bml0ZWx5SW5jbHVkZURldmljZVNjYWxlLCBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSB9Owot
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQ
b3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgPSAwOworICAgIC8vIFBpeGVsIFNuYXBw
aW5nCiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0
b3IgdG8gdGhlIGNvbnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCi0gICAgLy8g
YWN0aW5nIGFzIGEgYmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50Lgot
ICAgIHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBz
Y2FsZShmYWN0b3IpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9y
KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJh
d2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qp
IGNvbnN0OworICAgIGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAgICAgUm91bmRBbGxTaWRlcywK
KyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAgfTsKKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9k
ZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBh
ZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAy
LCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwogCiAgICAgLy8gTGlua3MKIAorICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3Qg
RmxvYXRSZWN0JikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIHsg
fQogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBDb250ZW50ZnVsIFBhaW50IERldGVjdGlvbgorI2lmIFVT
RShDRykKKyAgICAvLyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEg
d2hhdCwgYW5kIHRoZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXND
QUxheWVyQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldENv
bnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1
ZTsgfQotICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBH
cmFwaGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBv
ZmYgdGhlIGNvbnRleHQ/CisgICAgdmlydHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0
KGJvb2wpIHsgfQorI2VuZGlmCiAKICAgICAvLyBGSVhNRTogTm90aGluZyBpbiB0aGlzIHNlY3Rp
b24gYmVsb25ncyBoZXJlLCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVsc2V3aGVyZS4KICNpZiBPUyhX
SU5ET1dTKQpAQCAtNTQ2LDEwICszNTUsNyBAQCBwdWJsaWM6CiAgICAgLy8gcHV0IGNvZGUgc2hh
cmVkIGJldHdlZW4gV2luZG93cyBDRyBhbmQgV2luZG93cyBDYWlybyBiYWNrZW5kcy4KICAgICB2
aXJ0dWFsIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVD
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCi0KLXByaXZhdGU6Ci0g
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQotCisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0
aChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3Qg
RmxvYXRSZWN0Jik7CkBAIC01NjEsMTkxICszNjcsMTcgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0
IGRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBh
dHRlcm5XaWR0aCwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OwogICAgIFZlY3RvcjxGbG9hdFBv
aW50PiBjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9h
dCBjb3JuZXJXaWR0aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKSBjb25z
dDsKIAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7Ci0KIHByaXZhdGU6CisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6Om9w
dGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBtX2xhc3RBcHBsaWVkU3RhdGU7CiAgICAgVmVj
dG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCiAgICAgdW5zaWduZWQgbV90
cmFuc3BhcmVuY3lMYXllckNvdW50IHsgMCB9OwogICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnRE
ZXRlY3RlZCB7IGZhbHNlIH07CiB9OwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVz
dG9yZSA9IHRydWUpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2F2ZUFuZFJl
c3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9y
ZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgfQotICAgIAotICAgIH5HcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0
b3JlKQotICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzYXZlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0g
ICAgICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVl
OwotICAgIH0KLQotICAgIHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9z
YXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1f
c2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQotCi1wcml2YXRlOgotICAg
IEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsK
LX07Ci0KLWNsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgewotcHVibGljOgotICAgIFRyYW5z
cGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwg
Ym9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAg
ICAgICAgLCBtX2FscGhhKGFscGhhKQotICAgICAgICAsIG1fYmVnYW5MYXllcihiZWdpbkxheWVy
KQotICAgIHsKLSAgICAgICAgaWYgKGJlZ2luTGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQu
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBi
ZWdpbkxheWVyKGZsb2F0IGFscGhhKQotICAgIHsKLSAgICAgICAgbV9hbHBoYSA9IGFscGhhOwot
ICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKLSAgICAg
ICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgflRyYW5zcGFyZW5jeUxh
eWVyU2NvcGUoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKLSAgICAgICAgICAg
IG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICBmbG9hdCBtX2FscGhhOwotICAgIGJv
b2wgbV9iZWdhbkxheWVyOwotfTsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0No
ZWNrZXIgewotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAg
ICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQotICAgIHsgfQotICAgIAot
ICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCi0gICAgewotICAgICAgICBp
ZiAobV9jb250ZXh0LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQotICAgICAgICAgICAgV1RG
TG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBieSAlZCIsICZtX2Nv
bnRleHQsIChpbnQpbV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0YWNrU2l6ZSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIHVu
c2lnbmVkIG1fc3RhY2tTaXplOwotfTsKLQotY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWlu
dGFpbmVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFs
aXR5IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCi0gICAgICAgIDogbV9ncmFwaGljc0NvbnRl
eHQoZ3JhcGhpY3NDb250ZXh0KQotICAgICAgICAsIG1fY3VycmVudEludGVycG9sYXRpb25RdWFs
aXR5KGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAgICAg
ICwgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1Vz
ZSAhPSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0
aW9uUXVhbGl0eSAhPSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgIHsKLSAgICAgICAg
aWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGlj
c0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0
eVRvVXNlKTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50
ZXJwb2xhdGlvblF1YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5KQotICAgICAgICA6IEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGludGVycG9sYXRpb25R
dWFsaXR5ID8gaW50ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBoaWNzQ29udGV4dC5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAgewotICAgIH0KLQotICAgIH5JbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJwb2xh
dGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7
Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7
Ci0gICAgYm9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKLX07Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVu
dW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsKLSAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGlu
ZVN0eWxlOjpNb2RlLAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
OjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAotICAgIFdlYkNv
cmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKLSAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKLSAgICBXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwK
LSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0
ZXJuYXRpdmVzCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZT4gewotICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9r
ZUdyYWRpZW50Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsR3JhZGllbnRDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxQYXR0ZXJuQ2hhbmdlLAotICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3ND
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0
cm9rZUNvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpTdHJva2VTdHlsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsUnVsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93Q2hhbmdlLAotICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtc0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6QWxwaGFDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QmxlbmRNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UsCi0g
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlh
bGlhc0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwKLSAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJhd0x1bWluYW5j
ZU1hc2tDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UKLSNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQotICAgICAgICAsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlCi0jZW5kaWYKLSAgICA+OwotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4gewotICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCi0gICAgV2Vi
Q29yZTo6U3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpT
b2xpZFN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAotICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tl
U3R5bGU6OkRvdWJsZVN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9r
ZQotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRl
eHREcmF3aW5nTW9kZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAg
IFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdN
b2RlOjpGaWxsLAotICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQotICAg
ID47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM5ZTU4MWRjYzIyMDNh
ZDIxYTdmNDhmMzU3ODE0ZGVmYzNjZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcApAQCAtMCwwICsx
LDI0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQ2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2NsaXBCb3VuZHMoaW5pdGlhbENU
TS5tYXBSZWN0KGluaXRpYWxDbGlwKSkKKyAgICAsIG1fY2hhbmdlRmxhZ3MoY2hhbmdlRmxhZ3Mp
CisgICAgLCBtX2N0bShpbml0aWFsQ1RNKQoreworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OmNsaXBCb3VuZHMoKSBjb25zdAoreworICAgIGlmIChhdXRvIGludmVyc2UgPSBt
X2N0bS5pbnZlcnNlKCkpCisgICAgICAgIHJldHVybiBpbnZlcnNlLT5tYXBSZWN0KG1fY2xpcEJv
dW5kcyk7CisKKyAgICAvLyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhl
IG9yaWdpbmFsIHJlY3QuCisgICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFm
ZmluZVRyYW5zZm9ybSBiZWhhdmlvci4KKyAgICByZXR1cm4gbV9jbGlwQm91bmRzOworfQorCiti
b29sIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0
Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBwcmltaXRpdmVDaGFuZ2VGbGFn
cyB7IENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6
OkZpbGxCcnVzaCB9OworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgIT0gKG1fY2hhbmdlRmxhZ3Mg
JiBwcmltaXRpdmVDaGFuZ2VGbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKENoYW5nZTo6U3Ryb2tlQnJ1c2gpICYmICFtX3N0cm9r
ZUJydXNoLmlzUHJpbWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKENoYW5nZTo6RmlsbEJydXNoKSAmJiAhbV9maWxsQnJ1c2gu
aXNQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyhjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZUNoYW5nZSA9IFsmXShD
aGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAg
ICAgICAgaWYgKG90aGVyLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkgeworICAgICAg
ICAgICAgdGhpcy0+KnByb3BlcnR5ID0gb3RoZXIuKnByb3BlcnR5OworICAgICAgICAgICAgbV9j
aGFuZ2VGbGFncy5hZGQoY2hhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBBU1NFUlQo
bV9jbGlwQm91bmRzID09IG90aGVyLm1fY2xpcEJvdW5kcyk7CisKKyAgICBtZXJnZUNoYW5nZShD
aGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2N0bSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAg
bWVyZ2VDaGFuZ2UoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3N0cm9rZUJydXNoKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7
CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZUNoYW5n
ZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2xpbmVDYXApOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZURhc2gsICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOwor
ICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlQ2hhbmdlKENoYW5n
ZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fbWl0ZXJMaW1pdCk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUs
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUp
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZUNoYW5n
ZShDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2FscGhhKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsK
KworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBtZXJnZUNo
YW5nZShDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpT
aGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9z
aGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpEcmF3THVt
aW5hbmNlTWFzaywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVt
aW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBtZXJnZUNo
YW5nZShDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjptZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBv
dGhlcikKK3sKKyAgICBhdXRvIG1lcmdlRGlmZiA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHRoaXMtPipwcm9w
ZXJ0eSAhPSBvdGhlci4qcHJvcGVydHkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9
IG90aGVyLipwcm9wZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q1RNLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisgICAgCisg
ICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Rmls
bFJ1bGUsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxS
dWxlKTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VEaWZm
KENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlU3R5
bGUsICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxl
KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdl
OjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
bGluZURhc2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgbWVyZ2VEaWZm
KENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX21pdGVyTGltaXQpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q29tcG9zaXRlTW9k
ZSwgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUp
OworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIG1lcmdlRGlmZihDaGFu
Z2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9hbHBoYSk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSwgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgbWVyZ2VEaWZm
KENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkU21v
b3RoRm9udHMsICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290
aEZvbnRzKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMsICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1l
cmdlRGlmZihDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVf
U1VQUE9SVCkKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlm
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBzdGF0ZUNoYW5nZU5hbWUoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZSBjaGFuZ2UpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHN0
YXRlQ2hhbmdlTmFtZXNbXSA9IHsKKyAgICAgICAgImN0bSIsCisKKyAgICAgICAgImZpbGwtYnJ1
c2giLAorICAgICAgICAiZmlsbC1ydWxlIiwKKworICAgICAgICAic3Ryb2tlLWJydXNoIiwKKyAg
ICAgICAgInN0cm9rZS10aGlja25lc3MiLAorICAgICAgICAic3Ryb2tlLXN0eWxlIiwKKworICAg
ICAgICAibGluZS1jYXAiLAorICAgICAgICAibGluZS1kYXNoIiwKKyAgICAgICAgImxpbmUtam9p
biIsCisgICAgICAgICJtaXRlci1saW1pdCIsCisKKyAgICAgICAgImNvbXBvc2l0ZS1tb2RlIiwK
KyAgICAgICAgImRyb3Atc2hhZG93IiwKKworICAgICAgICAiYWxwaGEiLAorICAgICAgICAiaW1h
Z2UtaW50ZXJwb2xhdGlvbi1xdWFsaXR5IiwKKyAgICAgICAgInRleHQtZHJhd2luZy1tb2RlIiwK
KworICAgICAgICAic2hvdWxkLWFudGlhbGlhcyIsCisgICAgICAgICJzaG91bGQtc21vb3RoLWZv
bnRzIiwKKyAgICAgICAgInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsCisgICAgICAg
ICJzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIiwKKyAgICAgICAgImRyYXctbHVtaW5hbmNlLW1h
c2siCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAgICAgLCAidXNlLWRhcmst
YXBwZWFyYW5jZSIKKyNlbmRpZgorICAgIH07CisKKyAgICB1bnNpZ25lZCBtYXNrID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNoYW5nZSk7CisgICAgQVNTRVJUKCEoKG1hc2sgLSAxKSAmIG1hc2sp
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2cy
KG1hc2spKTsKKyAgICByZXR1cm4gc3RhdGVDaGFuZ2VOYW1lc1tpbmRleF07Cit9CisKK1RleHRT
dHJlYW0mIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAor
eworICAgIGF1dG8gZHVtcCA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjoqcHJvcGVydHksIGNvbnN0IFN0cmluZyYgbmFtZSkgeworICAgICAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5
KG5hbWUsIHRoaXMtPipwcm9wZXJ0eSk7CisgICAgfTsKKworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y2hhbmdlLWZsYWdzIiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBkdW1wKENoYW5nZTo6Q1RNLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q1RNKSk7CisK
KyAgICBkdW1wKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFu
Z2VOYW1lKENoYW5nZTo6RmlsbEJydXNoKSk7CisgICAgZHVtcChDaGFuZ2U6OkZpbGxSdWxlLCAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkZpbGxSdWxlKSk7CisK
KyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFu
Z2VOYW1lKENoYW5nZTo6U3Ryb2tlQnJ1c2gpKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlVGhp
Y2tuZXNzLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlj
a25lc3MsICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U3Ryb2tlVGhpY2tu
ZXNzKSk7CisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgIHN0
YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlN0cm9rZVN0eWxlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6
TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9s
aW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGlu
ZUNhcCkpOworICAgIGR1bXAoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpMaW5lRGFzaCkpOworICAgIGR1bXAoQ2hhbmdlOjpMaW5l
Sm9pbiwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVK
b2luLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpMaW5lSm9p
bikpOworICAgIGR1bXAoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICBzdGF0
ZUNoYW5nZU5hbWUoQ2hhbmdlOjpNaXRlckxpbWl0KSk7CisKKyAgICBkdW1wKENoYW5nZTo6Q29t
cG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21w
b3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q29tcG9z
aXRlTW9kZSkpOworICAgIGR1bXAoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3csICAgICAgICAgICAgICAgICAg
ICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpEcm9wU2hhZG93KSk7CisKKyAgICBkdW1wKENoYW5n
ZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9hbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6
QWxwaGEpKTsKKyAgICBkdW1wKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAg
c3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAg
IGR1bXAoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5h
bWUoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUpKTsKKworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRB
bnRpYWxpYXMsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFu
dGlhbGlhcywgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRBbnRp
YWxpYXMpKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAg
c3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMpKTsKKyAgICBkdW1wKENo
YW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSk7CisgICAgZHVtcChDaGFuZ2U6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKSk7CisgICAgZHVtcChDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2ssICAg
ICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrKSk7Cisj
aWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBkdW1wKENoYW5nZTo6VXNlRGFya0Fw
cGVhcmFuY2UsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBw
ZWFyYW5jZSwgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6VXNlRGFya0FwcGVh
cmFuY2UpKTsKKyNlbmRpZgorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSBjaGFuZ2Up
Cit7CisgICAgdHMgPDwgc3RhdGVDaGFuZ2VOYW1lKGNoYW5nZSk7CisgICAgcmV0dXJuIHRzOwor
fQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIHN0YXRlLmR1bXAodHMpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmU0Y2Vh
M2MyZDU4Yzg3YjQ5MjM4NDc1ZTQ2OGI1ZGZkNWVlM2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApAQCAt
MCwwICsxLDM4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VCcnVzaC5oIgorI2luY2x1ZGUg
IldpbmRSdWxlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVt
IGNsYXNzIENoYW5nZSA6IHVpbnQzMl90IHsKKyAgICAgICAgQ1RNICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMSA8PCAwLAorCisgICAgICAgIEZpbGxCcnVzaCAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMSwKKyAgICAgICAgRmlsbFJ1bGUgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAor
CisgICAgICAgIFN0cm9rZUJydXNoICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICAgICAg
U3Ryb2tlVGhpY2tuZXNzICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAgICBTdHJva2VTdHls
ZSAgICAgICAgICAgICAgICAgPSAxIDw8IDUsCisKKyAgICAgICAgTGluZUNhcCAgICAgICAgICAg
ICAgICAgICAgID0gMSA8PCA2LAorICAgICAgICBMaW5lRGFzaCAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDcsCisgICAgICAgIExpbmVKb2luICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwK
KyAgICAgICAgTWl0ZXJMaW1pdCAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorCisgICAgICAg
IENvbXBvc2l0ZU1vZGUgICAgICAgICAgICAgICA9IDEgPDwgMTAsCisgICAgICAgIERyb3BTaGFk
b3cgICAgICAgICAgICAgICAgICA9IDEgPDwgMTEsCisKKyAgICAgICAgQWxwaGEgICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAxMiwKKyAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSAgID0gMSA8PCAxMywKKyAgICAgICAgVGV4dERyYXdpbmdNb2RlICAgICAgICAgICAgID0gMSA8
PCAxNCwKKworICAgICAgICBTaG91bGRBbnRpYWxpYXMgICAgICAgICAgICAgPSAxIDw8IDE1LAor
ICAgICAgICBTaG91bGRTbW9vdGhGb250cyAgICAgICAgICAgPSAxIDw8IDE2LAorICAgICAgICBT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSAxIDw8IDE3LAorICAgICAgICBTaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyAgICAgPSAxIDw8IDE4LAorICAgICAgICBEcmF3THVtaW5hbmNlTWFzayAg
ICAgICAgICAgPSAxIDw8IDE5LAorI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAg
ICAgIFVzZURhcmtBcHBlYXJhbmNlICAgICAgICAgICA9IDEgPDwgMjAsCisjZW5kaWYKKyAgICB9
OworICAgIHVzaW5nIENoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47CisKKyAgICBzdGF0
aWMgY29uc3RleHByIENoYW5nZUZsYWdzIGluaXRpYWxDaGFuZ2VGbGFncyA9IHsgQ2hhbmdlOjpG
aWxsQnJ1c2gsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzIH07
CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwQm91bmRzLCBjb25zdCBDaGFuZ2VGbGFncyYgPSB7IH0sIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBG
bG9hdFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpIHsgbV9jbGlwQm91bmRzLmludGVyc2VjdChtX2N0bS5tYXBSZWN0KHJlY3QpKTsg
fQorCisgICAgQ2hhbmdlRmxhZ3MgY2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlRmxh
Z3M7IH0KKyAgICB2b2lkIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCkgeyBtX2NoYW5nZUZsYWdzID0g
eyB9OyB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9j
dG07IH0KKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSwgY29uc3Qg
c3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsg
c2V0UHJvcGVydHkoQ2hhbmdlOjpDVE0sICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sIGN0
bSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IFNvdXJjZUJydXNoJiBmaWxsQnJ1
c2goKSBjb25zdCB7IHJldHVybiBtX2ZpbGxCcnVzaDsgfQorICAgIHZvaWQgc2V0RmlsbENvbG9y
KGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRT
dGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpGaWxsQnJ1c2gs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3Jh
ZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxsQnJ1
c2guc2V0R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFu
Z2VGbGFncy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVy
bihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJh
bnNmb3JtKSB7IG1fZmlsbEJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VU
cmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVzaCk7IH0KKworICAg
IFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorICAgIHZv
aWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3Jh
cGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5n
ZTo6RmlsbFJ1bGUsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSwgZmlsbFJ1bGUs
IGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1
c2goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJydXNoOyB9CisgICAgdm9pZCBzZXRTdHJva2VD
b2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250
ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tl
QnJ1c2gsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgeyBjb2xvciB9LCBs
YXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRp
ZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7
IG1fc3Ryb2tlQnJ1c2guc2V0R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNm
b3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKyAgICB2b2lk
IHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldFBhdHRlcm4oV1RGTW92
ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0
cm9rZUJydXNoKTsgfQorCisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJva2VUaGlja25lc3M7IH0KKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9h
dCBzdHJva2VUaGlja25lc3MsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3Rh
dGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlVGhpY2tu
ZXNzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlj
a25lc3MsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlU3R5bGU7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNz
Q29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0
cm9rZVN0eWxlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsIHN0cm9rZVN0
eWxlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQ2FwOyB9CisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNh
cCwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVk
U3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpMaW5lQ2FwLCAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fbGluZUNhcCwgbGluZUNhcCwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0
IExpbmVEYXNoJiBsaW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZURhc2g7IH0KKyAgICB2
b2lkIHNldExpbmVEYXNoKExpbmVEYXNoJiYgbGluZURhc2gsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENo
YW5nZTo6TGluZURhc2gsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCwgV1RGTW92
ZShsaW5lRGFzaCksIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBMaW5lSm9pbiBsaW5lSm9p
bigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExp
bmVKb2luIGxpbmVKb2luLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVKb2luLCAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4sIGxpbmVKb2luLCBsYXN0QXBwbGllZFN0YXRl
KTsgfQorCisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1p
dDsgfQorICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0LCBjb25zdCBzdGQ6
Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQ
cm9wZXJ0eShDaGFuZ2U6Ok1pdGVyTGltaXQsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRl
ckxpbWl0LCBtaXRlckxpbWl0LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIENvbXBv
c2l0ZU1vZGUgY29tcG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlTW9kZTsg
fQorICAgIHZvaWQgc2V0Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUs
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0
YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUsIGNvbXBvc2l0ZU1vZGUsIGxhc3RBcHBsaWVkU3RhdGUp
OyB9CisgICAgCisgICAgY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdygpIGNvbnN0IHsgcmV0
dXJuIG1fZHJvcFNoYWRvdzsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hh
ZG93JiBkcm9wU2hhZG93LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkRyb3BTaGFkb3csICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93LCBkcm9wU2hhZG93LCBsYXN0QXBwbGll
ZFN0YXRlKTsgfQorCisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2FscGhhOyB9
CisgICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFw
aGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdl
OjpBbHBoYSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhLCBhbHBoYSwgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
OyB9CisgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25R
dWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3Jh
cGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5n
ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2lt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIGxhc3RB
cHBsaWVkU3RhdGUpOyB9CisgICAgCisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKyAgICB2b2lkIHNl
dFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRl
KSB7IHNldFByb3BlcnR5KENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlLCB0ZXh0RHJhd2luZ01vZGUsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisKKyAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
dWxkQW50aWFsaWFzOyB9CisgICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRB
bnRpYWxpYXMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0
QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzLCBzaG91bGRBbnRpYWxpYXMsIGxh
c3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRTbW9vdGhGb250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU21vb3Ro
Rm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGlj
c0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpT
aG91bGRTbW9vdGhGb250cywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZv
bnRzLCBzaG91bGRTbW9vdGhGb250cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wg
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyhib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgY29uc3Qgc3RkOjpvcHRpb25h
bDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHko
Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CisgICAg
dm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIGJvb2wgZHJh
d0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBtX2RyYXdMdW1pbmFuY2VNYXNrOyB9Cisg
ICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkg
eyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2ssIGRyYXdMdW1pbmFuY2VNYXNrLCBsYXN0QXBwbGll
ZFN0YXRlKTsgfQorCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVz
ZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV91c2VEYXJrQXBwZWFyYW5jZTsgfQor
ICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSwgY29u
c3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUp
IHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSwgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKyNlbmRpZgorCisgICAgYm9vbCBoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygp
IGNvbnN0OworICAgIHZvaWQgbWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBvdGhlcik7CisgICAgdm9pZCBtZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBvdGhlcik7CisKKyAgICBXVEY6OlRleHRTdHJlYW0mIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikg
Y29uc3Q7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9u
YWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldFByb3BlcnR5KENoYW5nZSBjaGFu
Z2UsIFQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgY29uc3QgVCYgdmFsdWUsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRl
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gdmFsdWU7CisgICAgICAgIG1f
Y2hhbmdlRmxhZ3Muc2V0KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGll
ZFN0YXRlKS4qcHJvcGVydHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2V0UHJvcGVydHkoQ2hhbmdlIGNoYW5nZSwgVCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5LCBUJiYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIG1fY2hh
bmdlRmxhZ3Muc2V0KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0
YXRlKS4qcHJvcGVydHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICBGbG9hdFJl
Y3QgbV9jbGlwQm91bmRzOworCisgICAgQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKKworICAg
IEFmZmluZVRyYW5zZm9ybSBtX2N0bTsKKworICAgIFNvdXJjZUJydXNoIG1fZmlsbEJydXNoIHsg
Q29sb3I6OmJsYWNrIH07CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZSB7IFdpbmRSdWxlOjpOb25a
ZXJvIH07CisKKyAgICBTb3VyY2VCcnVzaCBtX3N0cm9rZUJydXNoIHsgQ29sb3I6OmJsYWNrIH07
CisgICAgZmxvYXQgbV9zdHJva2VUaGlja25lc3MgeyAwIH07CisgICAgU3Ryb2tlU3R5bGUgbV9z
dHJva2VTdHlsZSB7IFNvbGlkU3Ryb2tlIH07CisKKyAgICBMaW5lQ2FwIG1fbGluZUNhcCB7IExp
bmVDYXA6OkJ1dHQgfTsKKyAgICBMaW5lRGFzaCBtX2xpbmVEYXNoOworICAgIExpbmVKb2luIG1f
bGluZUpvaW4geyBMaW5lSm9pbjo6TWl0ZXIgfTsKKyAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAw
IH07CisKKyAgICBDb21wb3NpdGVNb2RlIG1fY29tcG9zaXRlTW9kZSB7IENvbXBvc2l0ZU9wZXJh
dG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9OworICAgIERyb3BTaGFkb3cgbV9k
cm9wU2hhZG93OworCisgICAgZmxvYXQgbV9hbHBoYSB7IDEgfTsKKyAgICBJbnRlcnBvbGF0aW9u
UXVhbGl0eSBtX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0
eTo6RGVmYXVsdCB9OworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2Rl
IHsgVGV4dERyYXdpbmdNb2RlOjpGaWxsIH07CisKKyAgICBib29sIG1fc2hvdWxkQW50aWFsaWFz
IHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaG91bGRTbW9vdGhGb250cyB7IHRydWUgfTsKKyAgICBi
b29sIG1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RyYXdMdW1pbmFu
Y2VNYXNrIHsgZmFsc2UgfTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJv
b2wgbV91c2VEYXJrQXBwZWFyYW5jZSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBhdXRvIGVuY29kZSA9IFsmXShDaGFuZ2UgY2hhbmdl
LCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdGhp
cy0+KnByb3BlcnR5OworICAgIH07CisKKyAgICBlbmNvZGVyIDw8IG1fY2xpcEJvdW5kczsKKwor
ICAgIGVuY29kZXIgPDwgbV9jaGFuZ2VGbGFnczsKKworICAgIGVuY29kZShDaGFuZ2U6OkNUTSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0p
OworCisgICAgZW5jb2RlKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6
RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2ZpbGxSdWxlKTsKKworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgZW5j
b2RlKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tl
U3R5bGUsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9r
ZVN0eWxlKTsKKworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBlbmNvZGUoQ2hh
bmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fbGluZURhc2gpOworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgZW5j
b2RlKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisgICAgZW5jb2RlKENoYW5nZTo6Q29tcG9zaXRl
TW9kZSwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0
ZU1vZGUpOworICAgIGVuY29kZShDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIGVuY29kZShD
aGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9hbHBoYSk7CisgICAgZW5jb2RlKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSwgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkpOworICAgIGVuY29kZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgZW5j
b2RlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxk
U21vb3RoRm9udHMsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3Vs
ZFNtb290aEZvbnRzKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMsICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwor
ICAgIGVuY29kZShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKKyAgICBlbmNvZGUoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOwor
I2VuZGlmCit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEdyYXBo
aWNzQ29udGV4dFN0YXRlPiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgYXV0byBkZWNvZGUgPSBbJl0oR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkp
IHsKKyAgICAgICAgaWYgKCFzdGF0ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICB1c2luZyBQcm9wZXJ0eVR5cGUgPSB0
eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPEdyYXBo
aWNzQ29udGV4dFN0YXRlPigpLipwcm9wZXJ0eSk+Ojp0eXBlOworICAgICAgICBzdGQ6Om9wdGlv
bmFsPFByb3BlcnR5VHlwZT4gdmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAg
ICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3Rh
dGUuKnByb3BlcnR5ID0gKnZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGNsaXBCb3VuZHM7CisgICAgZGVjb2RlciA+PiBj
bGlwQm91bmRzOworICAgIGlmICghY2xpcEJvdW5kcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOworICAg
IGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7CisgICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlKCpj
bGlwQm91bmRzLCAqY2hhbmdlRmxhZ3MpOworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
Y3RtKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0
YXRlLCBDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ZpbGxCcnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0
cm9rZVRoaWNrbmVzcykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFk
ZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUNhcCwgICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZURh
c2gsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gp
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBD
aGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2xpbmVKb2luKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRl
Y29kZShzdGF0ZSwgQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRy
b3BTaGFkb3csICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BT
aGFkb3cpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUo
c3RhdGUsIENoYW5nZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fYWxwaGEpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlRl
eHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHRE
cmF3aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRl
Y29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRz
LCAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hh
bmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zLCAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9kcmF3THVtaW5hbmNlTWFzaykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisj
aWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hh
bmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV91c2VEYXJrQXBwZWFyYW5jZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5k
aWYKKworICAgIHJldHVybiBzdGF0ZTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSk7CitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKKyAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpDVE0sCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6RmlsbEJydXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpGaWxsUnVsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLAorICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZSwKKworICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwLAorICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaCwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4sCisgICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQsCisKKyAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSwKKyAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdywK
KworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYSwK
KyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsCisgICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrCisjaWYgSEFWRShPU19EQVJLX01PREVf
U1VQUE9SVCkKKyAgICAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpVc2VEYXJrQXBwZWFyYW5jZQorI2VuZGlmCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3MjEzMjg1MjYxZTY5MGNh
MzA2MGQ3ZTAyNmU1MGU1MmVlYTU5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCAr
MSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJv
b2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQor
ICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAg
ICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7Cisg
ICAgfQorICAgIAorICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUo
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgICAgIG1f
c2F2ZUFuZFJlc3RvcmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAg
eworICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5y
ZXN0b3JlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29udGV4
dDsgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIGJv
b2wgbV9zYXZlQW5kUmVzdG9yZTsKK307CisKK2NsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUg
eworcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKKyAgICAgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX2FscGhhKGFscGhhKQorICAgICAgICAsIG1f
YmVnYW5MYXllcihiZWdpbkxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKGJlZ2luTGF5ZXIpCisg
ICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQorICAgIHsKKyAgICAg
ICAgbV9hbHBoYSA9IGFscGhhOworICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihtX2FscGhhKTsKKyAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYmVn
YW5MYXllcikKKyAgICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBm
bG9hdCBtX2FscGhhOworICAgIGJvb2wgbV9iZWdhbkxheWVyOworfTsKKworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6
ZSgpKQorICAgIHsgfQorCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKCkK
KyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9zdGFja1NpemUp
CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBzdGFjayBjaGFu
Z2VkIGJ5ICVkIiwgJm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXplKCkgLSAoaW50
KW1fc3RhY2tTaXplKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBt
X2NvbnRleHQ7CisgICAgdW5zaWduZWQgbV9zdGFja1NpemU7Cit9OworCitjbGFzcyBJbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
SW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICAgICAg
OiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgICAgICwgbV9jdXJyZW50
SW50ZXJwb2xhdGlvblF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkoKSkKKyAgICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZChpbnRlcnBv
bGF0aW9uUXVhbGl0eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0ICYmIG1f
Y3VycmVudEludGVycG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2Up
CisgICAgeworICAgICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAg
ICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGlu
dGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpOworICAgIH0KKworICAgIGV4cGxpY2l0IEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
c3RkOjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkp
CisgICAgICAgIDogSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBoaWNzQ29udGV4
dCwgaW50ZXJwb2xhdGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52YWx1ZSgpIDog
Z3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICB7CisgICAg
fQorCisgICAgfkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCisgICAgeworICAgICAg
ICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBo
aWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVudEludGVycG9s
YXRpb25RdWFsaXR5KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBt
X2dyYXBoaWNzQ29udGV4dDsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRl
cnBvbGF0aW9uUXVhbGl0eTsKKyAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2Vk
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCAxNWRmMWRmZGI2ZjNhMTZh
ZDVlYWY2NDcyNjFmY2ZjNGI3YTkzYWI0Li42MmY5ZjQ2NGMzZDZkOWQ1YTA5Y2E1YTRiN2JkOGEx
MDM2MTU5MWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmNwcApAQCAtMTI2LDI3ICsxMjYsNTEgQEAgU3RyaW5nIGJsZW5kTW9kZU5h
bWUoQmxlbmRNb2RlIGJsZW5kT3ApCiAgICAgcmV0dXJuIGJsZW5kT3BlcmF0b3JOYW1lc1tzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYmxlbmRPcCkgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQmxlbmRN
b2RlOjpOb3JtYWwpXTsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICByZXR1cm4gdHMgPDwgYmxlbmRNb2RlTmFt
ZShibGVuZE1vZGUpOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJj
b21wb3NpdGUtb3BlcmF0aW9uIiwgY29tcG9zaXRlTW9kZS5vcGVyYXRpb24pOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGNvbXBvc2l0ZU1vZGUuYmxlbmRNb2RlKTsKKyAgICBy
ZXR1cm4gdHM7Cit9CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIHJldHVybiB0cyA8PCBjb21wb3NpdGVPcGVyYXRv
ck5hbWUob3AsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpCiB7Ci0g
ICAgcmV0dXJuIHRzIDw8IGJsZW5kTW9kZU5hbWUoYmxlbmRNb2RlKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoInNoYWRvdy1vZmZzZXQiLCBkcm9wU2hhZG93Lm9mZnNldCk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJzaGFkb3ctYmx1ciIsIGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJzaGFkb3ctY29sb3IiLCBkcm9wU2hhZG93LmNvbG9yKTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoInNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBkcm9wU2hhZG93LnJhZGl1c01v
ZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICByZXR1cm4gdHM7CiB9CiAKLVRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdpbmRSdWxlIHJ1bGUpCitUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBp
bnRlcnBvbGF0aW9uUXVhbGl0eSkKIHsKLSAgICBzd2l0Y2ggKHJ1bGUpIHsKLSAgICBjYXNlIFdp
bmRSdWxlOjpOb25aZXJvOgotICAgICAgICB0cyA8PCAiTk9OLVpFUk8iOworICAgIHN3aXRjaCAo
aW50ZXJwb2xhdGlvblF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpE
ZWZhdWx0OgorICAgICAgICB0cyA8PCAiREVGQVVMVCI7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgV2luZFJ1bGU6OkV2ZW5PZGQ6Ci0gICAgICAgIHRzIDw8ICJFVkVOLU9ERCI7CisgICAgY2Fz
ZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgdHMgPDwg
IkRPLU5PVC1JTlRFUlBPTEFURSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xh
dGlvblF1YWxpdHk6OkxvdzoKKyAgICAgICAgdHMgPDwgIkxPVyI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgdHMgPDwgIk1F
RElVTSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6Okhp
Z2g6CisgICAgICAgIHRzIDw8ICJIRUlHSCI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQogICAg
IHJldHVybiB0czsKIH0KIApAQCAtMTY2LDYgKzE5MCwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lQ2FwIGNhcFN0eWxlKQogICAgIHJldHVybiB0czsKIH0K
IAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZURhc2gpCit7Cisg
ICAgcmV0dXJuIHRzOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBMaW5lSm9pbiBqb2luU3R5bGUpCiB7CiAgICAgc3dpdGNoIChqb2luU3R5bGUpIHsKQEAgLTE4
Miw0ICsyMTEsNTYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGlu
ZUpvaW4gam9pblN0eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit7CisgICAgc3dp
dGNoIChzdHJva2VTdHlsZSkgeworICAgIGNhc2UgU3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlOgorICAg
ICAgICB0cyA8PCAiTk8tU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VT
dHlsZTo6U29saWRTdHJva2U6CisgICAgICAgIHRzIDw8ICJTT0xJRC1TVFJPS0UiOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2U6CisgICAgICAgIHRz
IDw8ICJET1RURUQtU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHls
ZTo6RGFzaGVkU3Ryb2tlOgorICAgICAgICB0cyA8PCAiREFTSEVELVNUUk9LRSI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZToKKyAgICAgICAgdHMg
PDwgIkRPVUJMRS1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0eWxl
OjpXYXZ5U3Ryb2tlOgorICAgICAgICB0cyA8PCAiV0FWWS1TVFJPS0UiOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBUZXh0RHJhd2luZ01vZGUgdGV4dERyYXdpbmdNb2RlKQoreworICAgIHN3
aXRjaCAodGV4dERyYXdpbmdNb2RlKSB7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OkZpbGw6
CisgICAgICAgIHRzIDw8ICJGSUxMIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0RHJh
d2luZ01vZGU6OlN0cm9rZToKKyAgICAgICAgdHMgPDwgIlNUUk9LRSI7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIFdpbmRSdWxlIHJ1bGUpCit7CisgICAgc3dpdGNoIChydWxlKSB7CisgICAg
Y2FzZSBXaW5kUnVsZTo6Tm9uWmVybzoKKyAgICAgICAgdHMgPDwgIk5PTi1aRVJPIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXaW5kUnVsZTo6RXZlbk9kZDoKKyAgICAgICAgdHMgPDwgIkVW
RU4tT0REIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmgKaW5kZXggNGQyMDRlOTdlNWM1NDRkNzc2YmZhN2YzMGFhY2Mx
YjdjNDYzZTBlMC4uMGY4YjJkMDI3NTViZmFlYzY1ZDk1YzA0ZjJjNDViNTI0OTRmMjYzNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApA
QCAtMjUsNiArMjUsOSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbG9yLmgiCisj
aW5jbHVkZSAiRGFzaEFycmF5LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAi
V2luZFJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CkBAIC03Myw2ICs3Niw3OSBAQCBlbnVtIGNsYXNzIEJsZW5kTW9kZSA6IHVpbnQ4
X3QgewogICAgIFBsdXNMaWdodGVyCiB9OwogCitzdHJ1Y3QgQ29tcG9zaXRlTW9kZSB7CisgICAg
Q29tcG9zaXRlT3BlcmF0b3Igb3BlcmF0aW9uOworICAgIEJsZW5kTW9kZSBibGVuZE1vZGU7CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29tcG9zaXRlTW9kZSYgb3RoZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uID09IG90aGVyLm9wZXJhdGlvbiAmJiBibGVuZE1vZGUg
PT0gb3RoZXIuYmxlbmRNb2RlOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gZGVjb2RlKERlY29kZXIm
KTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENvbXBvc2l0ZU1vZGU6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgb3BlcmF0aW9u
OworICAgIGVuY29kZXIgPDwgYmxlbmRNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
Pgorc3RkOjpvcHRpb25hbDxDb21wb3NpdGVNb2RlPiBDb21wb3NpdGVNb2RlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBv
cGVyYXRpb247CisgICAgZGVjb2RlciA+PiBvcGVyYXRpb247CisgICAgaWYgKCFvcGVyYXRpb24p
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJsZW5k
TW9kZT4gYmxlbmRNb2RlOworICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOworICAgIGlmICghYmxl
bmRNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAq
b3BlcmF0aW9uLCAqYmxlbmRNb2RlIH0gfTsKK30KKworc3RydWN0IERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlIHsKKyAgICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgVGV4dENo
ZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKKyAgICAgICAgU3BlbGxpbmcs
CisgICAgICAgIEdyYW1tYXIsCisgICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisg
ICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcworICAgIH0gbW9kZTsKKyAgICBib29sIHNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2UgfTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2Rl
KERlY29kZXImKTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERvY3VtZW50
TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IG1vZGU7CisgICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBt
b2RlOworICAgIGlmICghbW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7CisgICAgZGVjb2Rl
ciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKKyAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBl
YXJhbmNlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAq
bW9kZSwgKnNob3VsZFVzZURhcmtBcHBlYXJhbmNlIH0gfTsKK30KKwogZW51bSBjbGFzcyBHcmFk
aWVudFNwcmVhZE1ldGhvZCA6IHVpbnQ4X3QgewogICAgIFBhZCwKICAgICBSZWZsZWN0LApAQCAt
OTMsNiArMTY5LDQyIEBAIGVudW0gY2xhc3MgTGluZUNhcCA6IHVpbnQ4X3QgewogICAgIFNxdWFy
ZQogfTsKIAorc3RydWN0IExpbmVEYXNoIHsKKyAgICBEYXNoQXJyYXkgZGFzaGVzOworICAgIGZs
b2F0IG9mZnNldDsKKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IExpbmVEYXNoJiBhLCBjb25zdCBMaW5lRGFzaCYgYikKK3sKKyAg
ICByZXR1cm4gYS5kYXNoZXMgPT0gYi5kYXNoZXMgJiYgYS5vZmZzZXQgPT0gYi5vZmZzZXQ7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIExpbmVEYXNoOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGRhc2hlczsKKyAgICBlbmNvZGVy
IDw8IG9mZnNldDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8
TGluZURhc2g+IExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6
Om9wdGlvbmFsPERhc2hBcnJheT4gZGFzaGVzOworICAgIGRlY29kZXIgPj4gZGFzaGVzOworICAg
IGlmICghZGFzaGVzKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpv
cHRpb25hbDxmbG9hdD4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICgh
b2Zmc2V0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyBX
VEZNb3ZlKCpkYXNoZXMpLCAqb2Zmc2V0IH0gfTsKK30KKwogZW51bSBjbGFzcyBMaW5lSm9pbiA6
IHVpbnQ4X3QgewogICAgIE1pdGVyLAogICAgIFJvdW5kLApAQCAtMTA1LDYgKzIxNyw3NiBAQCBl
bnVtIEhvcml6b250YWxBbGlnbm1lbnQgewogICAgIEFsaWduSENlbnRlcgogfTsKIAorLy8gTGVn
YWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJv
eC1zaGFkb3cuCisvLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4K
K2VudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAg
TGVnYWN5Cit9OworCitzdHJ1Y3QgRHJvcFNoYWRvdyB7CisgICAgRmxvYXRTaXplIG9mZnNldDsK
KyAgICBmbG9hdCBibHVyUmFkaXVzIHsgMCB9OworICAgIENvbG9yIGNvbG9yOworICAgIFNoYWRv
d1JhZGl1c01vZGUgcmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKKyAg
ICAKKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgp
OyB9CisgICAgYm9vbCBpc0JsdXJyZWQoKSBjb25zdCB7IHJldHVybiBpc1Zpc2libGUoKSAmJiBi
bHVyUmFkaXVzOyB9CisgICAgYm9vbCBoYXNPdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gaXNCbHVy
cmVkKCkgfHwgKGlzVmlzaWJsZSgpICYmICFvZmZzZXQuaXNaZXJvKCkpOyB9CisgICAgCisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+
IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERy
b3BTaGFkb3cmIGEsIGNvbnN0IERyb3BTaGFkb3cmIGIpCit7CisgICAgcmV0dXJuIGEub2Zmc2V0
ID09IGIub2Zmc2V0ICYmIGEuYmx1clJhZGl1cyA9PSBiLmJsdXJSYWRpdXMgJiYgYS5jb2xvciA9
PSBiLmNvbG9yICYmIGEucmFkaXVzTW9kZSA9PSBiLnJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIERyb3BTaGFkb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIGVuY29kZXIgPDwgb2Zmc2V0OworICAgIGVuY29kZXIgPDwgYmx1clJh
ZGl1czsKKyAgICBlbmNvZGVyIDw8IGNvbG9yOworICAgIGVuY29kZXIgPDwgcmFkaXVzTW9kZTsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4g
RHJvcFNoYWRvdzo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25h
bDxGbG9hdFNpemU+IG9mZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9m
ZnNldCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8
ZmxvYXQ+IGJsdXJSYWRpdXM7CisgICAgZGVjb2RlciA+PiBibHVyUmFkaXVzOworICAgIGlmICgh
Ymx1clJhZGl1cykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0
aW9uYWw8Q29sb3I+IGNvbG9yOworICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xv
cikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2hh
ZG93UmFkaXVzTW9kZT4gcmFkaXVzTW9kZTsKKyAgICBkZWNvZGVyID4+IHJhZGl1c01vZGU7Cisg
ICAgaWYgKCFyYWRpdXNNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
cmV0dXJuIHsgeyAqb2Zmc2V0LCAqYmx1clJhZGl1cywgKmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07
Cit9CisKK2VudW0gU3Ryb2tlU3R5bGUgeworICAgIE5vU3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tl
LAorICAgIERvdHRlZFN0cm9rZSwKKyAgICBEYXNoZWRTdHJva2UsCisgICAgRG91YmxlU3Ryb2tl
LAorICAgIFdhdnlTdHJva2UsCit9OworCiBlbnVtIFRleHRCYXNlbGluZSB7CiAgICAgQWxwaGFi
ZXRpY1RleHRCYXNlbGluZSwKICAgICBUb3BUZXh0QmFzZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwy
OSBAQCBlbnVtIFRleHRBbGlnbiB7CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLVN0cmluZyBj
b21wb3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6
OkJsZW5kTW9kZSk7Ci1TdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwot
Ym9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsK
LWJvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNv
cmU6OkNvbXBvc2l0ZU9wZXJhdG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CitlbnVtIGNsYXNz
IFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgeworICAgIEZpbGwgPSAxIDw8IDAsCisgICAgU3Ry
b2tlID0gMSA8PCAxLAorfTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VY
UE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29y
ZTo6Q29tcG9zaXRlT3BlcmF0b3IpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKK3VzaW5nIFRleHREcmF3aW5n
TW9kZUZsYWdzID0gT3B0aW9uU2V0PFRleHREcmF3aW5nTW9kZT47CisKK1N0cmluZyBjb21wb3Np
dGVPcGVyYXRvck5hbWUoQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CitTdHJpbmcgYmxl
bmRNb2RlTmFtZShCbGVuZE1vZGUpOworYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcm
LCBCbGVuZE1vZGUmKTsKK2Jvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0
IFN0cmluZyYsIENvbXBvc2l0ZU9wZXJhdG9yJiwgQmxlbmRNb2RlJik7CisKK1dFQkNPUkVfRVhQ
T1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBCbGVuZE1v
ZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDb21wb3NpdGVNb2RlKTsKK1dFQkNP
UkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBj
b25zdCBEcm9wU2hhZG93Jik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVD
YXApOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIExpbmVEYXNoKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7CitXRUJDT1JFX0VYUE9SVCBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgU3Ryb2tlU3R5bGUpOwor
V0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIFRleHREcmF3aW5nTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKQEAgLTIxOSw0ICs0MTQsMzUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpMaW5lSm9pbj4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPFdlYkNvcmU6OlN0cm9rZVN0eWxlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51
bVZhbHVlczwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZSwKKyAgICBXZWJDb3JlOjpTdHJva2VT
dHlsZTo6Tm9TdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAor
ICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ry
b2tlU3R5bGU6OkRhc2hlZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG91Ymxl
U3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tlCisgICAgPjsKK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dERyYXdpbmdNb2Rl
PiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6VGV4
dERyYXdpbmdNb2RlLAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OkZpbGwsCisg
ICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZTo6U3Ryb2tlCisgICAgPjsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVs
bGluZywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1h
ciwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudCwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCisgICAgPjsKK307CisKIH0gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJ
bWFnZUdlbmVyYXRlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggNGUwNzFmNzJmMzViZThhNThmYzRj
ZDU3N2ExNDU2ZGUxNzQ2NjgyYy4uNDFiMDUxMWE4Zjc4YTE3OWIzMDRjZjg5ZDQxMDNlMzVkZTNl
MTI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJ
bWFnZUdlbmVyYXRlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEltYWdl
RHJhd1Jlc3VsdCBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGCiB7CiAjaWYgVVNFKE5FV19USEVNRSkgfHwgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0
ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkg
fSk7CiAgICAgY29udGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRz
dFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6
ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdy
YXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdy
YXBoaWNzQ29udGV4dC5oCmluZGV4IGI2MjM2Nzg4MGUzZTUzNTRiNjE3MTEzNDdjOWExMWI0MjI0
Njg4NWUuLmQ2N2QzZWExMTVkMjRlZmQ5MDllMDNhYzlhZGU5M2E4YjQ3NjRmYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250
ZXh0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzgsODcgKzM4LDU3IEBAIHB1YmxpYzoKICAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1
bFBhaW50CiAgICAgfTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zIHJlYXNvbnMpCi0gICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMo
cmVhc29ucykKKyAgICBOdWxsR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQorICAgICAgICA6IEdyYXBo
aWNzQ29udGV4dChpbml0aWFsQ2xpcCkKKyAgICAgICAgLCBtX3BhaW50SW52YWxpZGF0aW9uUmVh
c29ucyhyZWFzb25zKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAg
IHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FM
YXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0KICAg
ICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6
Ok5vbmU7IH0KICAgICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9u
UmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRp
bmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludElu
dmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRp
bmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9CiAgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVs
UGFpbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9
PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQog
Ci0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KLQotI2lmIFVT
RShDRykKLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQot
I2VuZGlmCi0KLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShT
eXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfTsKLQotICAgIHZvaWQgZHJh
d1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KLQotICAgIEludFJl
Y3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotCisgICAgdm9pZCBz
YXZlKCkgZmluYWwgeyB9CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9CisgICAgdm9pZCBh
cHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsIHsgfTsKICNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0KICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBm
aW5hbCB7IH0KLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KICNlbmRp
ZgogCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFs
IHsgfQotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsIHsgfQotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJ
bXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAg
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAg
dm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkg
ZmluYWwgeyB9Ci0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiBy
ZWN0OyB9Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNv
bGlkU3Ryb2tlKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWwg
eyB9Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWwg
eyB9Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWwgeyB9Ci0gICAgdm9pZCBz
ZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0
aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWwgeyB9
Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0LCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JikgZmluYWwgeyB9Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2Nh
bGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9
OyB9Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAg
dm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWwgeyB9CisKICAgICB2b2lkIGNsaXAoY29uc3QgRmxv
YXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1
bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQotICAgIHZv
aWQgcmVzdG9yZSgpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBG
bG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBz
dGQ6Om51bGxvcHQpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIHZvaWQgY2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwg
dW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQorICAg
IHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9
CiAKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQg
PSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCkgZmluYWwgeyB9Ci0g
ICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
PSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBmaW5hbCB7IH0KKyAgICB2
b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmls
bFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUp
IGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bCB7IH0KKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQogCi0gICAg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRh
dGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90
aGluZzsgfQorICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFs
IHsgfQorICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBmaW5hbCB7IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQotICAgIEltYWdlRHJh
d1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVS
dWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmlu
YWwgeyB9CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9
CkBAIC0xMjcsMjggKzk3LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5h
bCB7IH0KICNlbmRpZgogCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0KLSAgICB2b2lkIGNs
aXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9p
ZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQot
ICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGll
bnQmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFs
KSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5h
bCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotCisgICAg
dm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAg
IHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJl
Y3QmLCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsg
fQorICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBw
YWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7
IH0KICNlbmRpZgogCisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0
IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFycmF5Jiwg
Ym9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkg
ZmluYWwgeyB9CisKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsIHsgcmV0dXJu
IHJlY3Q7IH0KKwogI2lmIE9TKFdJTkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAotcHJpdmF0ZToKICAgICBjb25zdCBQ
YWludEludmFsaWRhdGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgeyBQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdlMDFmZDM5NDY0MzM5ZDJkNGQ1NGJhOTM2NGM1OTQ1Y2ZhZDdkNWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShXSU4p
CisjaW5jbHVkZSAiRElCUGl4ZWxEYXRhLmgiCit0eXBlZGVmIHN0cnVjdCBIRENfXyogSERDOwor
I2lmICFVU0UoQ0cpCisvLyBVSW50OCBpcyBkZWZpbmVkIGluIENvcmVGb3VuZGF0aW9uL0NGQmFz
ZS5oCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUludDg7CisjZW5kaWYKKyNlbmRpZgorCisjaWYg
VVNFKENHKQordXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBzdHJ1Y3QgQ0dDb250ZXh0
OworI2VsaWYgVVNFKENBSVJPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3ND
b250ZXh0Q2Fpcm87Cit9Cit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENhaXJvOworI2Vsc2UKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0ID0gdm9pZDsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcAppbmRleCBiYjEzOGI1Mjk3YTUyMWZiZjdkNjkzY2QxMTQxMDQ0MDBm
Y2FiYzRlLi45MDI0ZjVkMWFiZmNlMzgwODE4M2EzYjIzMWZiY2UwZmZiMmZmNDE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkx
LDE3ICsxOTEsMTcgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJh
ZGl1cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICB1cGRhdGVTaGFkb3dC
bHVyVmFsdWVzKCk7CiB9CiAKLVNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogbV9jb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAg
ICAsIG1fYmx1clJhZGl1cyhzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dCbHVyKQotICAg
ICwgbV9vZmZzZXQoc3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgbV9zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyhzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK1NoYWRvd0JsdXI6OlNoYWRv
d0JsdXIoY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdywgYm9vbCBzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcykKKyAgICA6IG1fY29sb3IoZHJvcFNoYWRvdy5jb2xvcikKKyAgICAsIG1fYmx1clJh
ZGl1cyhkcm9wU2hhZG93LmJsdXJSYWRpdXMsIGRyb3BTaGFkb3cuYmx1clJhZGl1cykKKyAgICAs
IG1fb2Zmc2V0KGRyb3BTaGFkb3cub2Zmc2V0KQorICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyhzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gQ29y
ZSBHcmFwaGljcyBpbmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHgg
KDxyZGFyOi8vcHJvYmxlbS84MTAzNDQyPiksCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2Vy
dmUgdGhpcyBidWdneSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cu
Ci0gICAgaWYgKHN0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVn
YWN5KSB7Ci0gICAgICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhz
dGF0ZS5zaGFkb3dCbHVyKTsKKyAgICBpZiAoZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSkgeworICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVz
VG9MZWdhY3lSYWRpdXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVzKTsKICAgICAgICAgbV9ibHVyUmFk
aXVzID0gRmxvYXRTaXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpOwogICAgIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCmluZGV4IDE0
ZmQ4M2VkZTFhMWJhY2YxNzdmMzMxZWNhZDFhNDMwMjkzZjYwM2EuLjQ1ZDBlNTgzMjljZGVlYWJm
Yjc4YTRkNWU2N2FiOGQ4ODFhZTU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmgKQEAgLTM4LDggKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1zdHJ1
Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNs
YXNzIEltYWdlQnVmZmVyOworc3RydWN0IERyb3BTaGFkb3c7CiAKIGNsYXNzIFNoYWRvd0JsdXIg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYWRvd0JsdXIpOwpAQCAtNTIsNyArNTMsNyBA
QCBwdWJsaWM6CiAKICAgICBTaGFkb3dCbHVyKCk7CiAgICAgU2hhZG93Qmx1cihjb25zdCBGbG9h
dFNpemUmIHJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgYm9v
bCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKLSAgICBTaGFkb3dCbHVyKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAgU2hhZG93Qmx1cihjb25zdCBEcm9wU2hhZG93
JiwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0
U2hhZG93VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBD
b2xvciYsIGJvb2wgaWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNmFj
MTNmZDI1YzZmMGY4MDE1ODcyZmYxOWVkMjhhMWZhNTJiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHAKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitTb3VyY2VCcnVzaDo6U291cmNlQnJ1c2goY29uc3QgQ29sb3ImIGNvbG9y
LCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYmIGJydXNoKQorICAgIDogbV9jb2xvcihjb2xvcikKKyAg
ICAsIG1fYnJ1c2goV1RGTW92ZShicnVzaCkpCit7Cit9CisKK2NvbnN0IEFmZmluZVRyYW5zZm9y
bSYgU291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8QWZmaW5lVHJhbnNmb3JtPiBpZGVudGl0eTsKKyAgICByZXR1cm4gbV9icnVz
aCA/IG1fYnJ1c2gtPnNwYWNlVHJhbnNmb3JtIDogaWRlbnRpdHkuZ2V0KCk7Cit9CisKK0dyYWRp
ZW50KiBTb3VyY2VCcnVzaDo6Z3JhZGllbnQoKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8qIGdyYWRpZW50ID0gc3RkOjpn
ZXRfaWY8UmVmPEdyYWRpZW50Pj4oJm1fYnJ1c2gtPmJydXNoKSkKKyAgICAgICAgcmV0dXJuIGdy
YWRpZW50LT5wdHIoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGF0dGVybiogU291cmNl
QnJ1c2g6OnBhdHRlcm4oKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8qIHBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0
dGVybj4+KCZtX2JydXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBwYXR0ZXJuLT5wdHIoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQo
UmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJh
bnNmb3JtKQoreworICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5z
Zm9ybSB9OworfQorCit2b2lkIFNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYm
IHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pCit7CisgICAg
bV9icnVzaCA9IHsgV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKworV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTb3VyY2VCcnVz
aCYgYnJ1c2gpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGJydXNoLmNvbG9yKCkp
OworCisgICAgaWYgKGF1dG8gZ3JhZGllbnQgPSBicnVzaC5ncmFkaWVudCgpKQorICAgICAgICB0
cy5kdW1wUHJvcGVydHkoImdyYWRpZW50IiwgZ3JhZGllbnQpOworCisgICAgaWYgKGF1dG8gcGF0
dGVybiA9IGJydXNoLnBhdHRlcm4oKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJu
IiwgcGF0dGVybik7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJy
dXNoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjNlMjhkMGMzNDFiNTJhM2U2MDU0ODU3M2M0YzZjOGVjM2VkYjhhYjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVz
aC5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJHcmFkaWVudC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTb3VyY2VCcnVzaCB7CitwdWJsaWM6CisgICAgc3RydWN0IEJydXNoIHsKKyAg
ICAgICAgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4gYnJ1c2g7Cisg
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBzcGFjZVRyYW5zZm9ybTsKKworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEJydXNoPiBk
ZWNvZGUoRGVjb2RlciYpOworICAgIH07CisKKyAgICBTb3VyY2VCcnVzaCgpID0gZGVmYXVsdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCBTb3VyY2VCcnVzaChjb25zdCBDb2xvciYsIHN0ZDo6b3B0aW9u
YWw8QnJ1c2g+JiYgPSBzdGQ6Om51bGxvcHQpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3Ig
Y29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CisKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEJy
dXNoPiYgYnJ1c2goKSBjb25zdCB7IHJldHVybiBtX2JydXNoOyB9CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBHcmFkaWVudCogZ3JhZGllbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXR0
ZXJuKiBwYXR0ZXJuKCkgY29uc3Q7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworICAgIHZvaWQg
c2V0UGF0dGVybihSZWY8UGF0dGVybj4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSA9IHsgfSk7CisKKyAgICBib29sIGlzUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4g
IW1fYnJ1c2ggJiYgbV9jb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKTsgfQorCisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBkZWNv
ZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3IgeyBDb2xvcjo6Ymxh
Y2sgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPEJydXNoPiBtX2JydXNoOworfTsKKworaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50PiwgUmVmPFBhdHRl
cm4+PiYgYSwgY29uc3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4m
IGIpCit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYSwKKyAgICAgICAgWyZdIChjb25zdCBS
ZWY8R3JhZGllbnQ+JiBhR3JhZGllbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBiR3JhZGll
bnQgPSBzdGQ6OmdldF9pZjxSZWY8R3JhZGllbnQ+PigmYikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGFHcmFkaWVudCA9PSAqYkdyYWRpZW50OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgYVBhdHRlcm4pIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBiUGF0dGVybiA9IHN0ZDo6Z2V0X2lmPFJlZjxQYXR0ZXJu
Pj4oJmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhUGF0dGVybiA9PSAqYlBhdHRlcm47Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICApOworfQorCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYSwgY29uc3QgU291cmNl
QnJ1c2g6OkJydXNoJiBiKQoreworICAgIHJldHVybiBhLmJydXNoID09IGIuYnJ1c2ggJiYgYS5z
cGFjZVRyYW5zZm9ybSA9PSBiLnNwYWNlVHJhbnNmb3JtOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFNvdXJjZUJydXNoJiBhLCBjb25zdCBTb3VyY2VCcnVzaCYgYikKK3sKKyAg
ICByZXR1cm4gYS5jb2xvcigpID09IGIuY29sb3IoKSAmJiBhLmJydXNoKCkgPT0gYi5icnVzaCgp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBTb3VyY2VCcnVzaDo6QnJ1
c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgc3Bh
Y2VUcmFuc2Zvcm07CisgICAgV1RGOjpzd2l0Y2hPbihicnVzaCwKKyAgICAgICAgWyZdIChjb25z
dCBSZWY8R3JhZGllbnQ+JiBncmFkaWVudCkgeworICAgICAgICAgICAgZW5jb2RlciA8PCB0cnVl
IDw8IGdyYWRpZW50LmdldCgpOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQ
YXR0ZXJuPiYgcGF0dGVybikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBmYWxzZSA8PCBwYXR0
ZXJuLmdldCgpOworICAgICAgICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVj
b2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g6OkJydXNoPiBTb3VyY2VCcnVzaDo6QnJ1
c2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8QWZmaW5l
VHJhbnNmb3JtPiBzcGFjZVRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHNwYWNlVHJhbnNmb3Jt
OworICAgIGlmICghc3BhY2VUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGhhc0dyYWRpZW50OworICAgIGRlY29kZXIgPj4g
aGFzR3JhZGllbnQ7CisgICAgaWYgKCFoYXNHcmFkaWVudCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICAKKyAgICBpZiAoKmhhc0dyYWRpZW50KSB7CisgICAgICAgIGF1dG8gZ3Jh
ZGllbnQgPSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoIWdyYWRpZW50
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgeyBX
VEZNb3ZlKCpncmFkaWVudCksICpzcGFjZVRyYW5zZm9ybSB9IH07CisgICAgfQorCisgICAgYXV0
byBwYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOworICAgIGlmICghcGF0dGVybikK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IFdURk1vdmUoKnBh
dHRlcm4pLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgordm9pZCBTb3VyY2VCcnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBtX2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9icnVzaDsKK30KKwordGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g+IFNvdXJjZUJy
dXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9y
PiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29sb3IpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8
QnJ1c2g+PiBicnVzaDsKKyAgICBkZWNvZGVyID4+IGJydXNoOworICAgIGlmICghYnJ1c2gpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU291cmNlQnJ1c2goKmNv
bG9yLCBXVEZNb3ZlKCpicnVzaCkpOworfQorCitXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgU291cmNlQnJ1c2gmKTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dEJveEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0Qm94
SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBjZjY1YmEyYzEwZTg4ODhk
ZDQ5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVGV4dEJveEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
eHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0Qm94SXRlcmF0b3Ig
eworcHVibGljOgorICAgIFRleHRCb3hJdGVyYXRvcigpCisgICAgICAgIDogbV90ZXh0UnVuKDAp
CisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAgVGV4dEJveEl0ZXJh
dG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBt
X3RleHRSdW4odGV4dFJ1bikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAg
IH0KKworICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Cisg
ICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBib29sIGF0RW5kKCkgY29u
c3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRSdW4tPmxlbmd0aCgp
OyB9CisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90ZXh0UnVuKVttX29m
ZnNldF07IH0KKyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBh
dEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1cnJlbnQoKSk7IH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0ICYmIG1f
dGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09
KG90aGVyKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4dFJ1bjsKKyAg
ICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuY3BwCmluZGV4IDcyOGQzYmVhMGExNzIzNTAxNGYwZjEyY2YzZDZkN2RhMTkzYzM1YTUuLjE1
ZTg0NTU3YWM4MWE3NjdhMDA3NDZlMzAxNjE1MzU0NGYyMTU2N2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApA
QCAtMTgzNCw3ICsxODM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1p
dENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmEKICAgICAgICAgCiAg
ICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwgc2l6ZSgpKTsKIAot
ICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1fZGlzcGxheUxpc3Qs
IEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7
CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4dCgqbV9kaXNwbGF5TGlz
dCwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAgICAgcGFpbnRHcmFwaGlj
c0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSk7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1NmEyM2E1ZmRmYjEwYWZl
Y2EyY2M5MmE3Mjc5NDU4MTAyZS4uNjAxMWU5MTNlZjZlN2Q0NTJmMWI2NWYxZDlhZGExNzMxODgy
YTZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC00NDYsMTcgKzQ0NiwxNiBAQCBzdGF0aWMg
VmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0
aWNhbExpbmUsIGZsb2F0CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAKLXZvaWQgc2V0U3Ryb2tlVGhp
Y2tuZXNzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IHN0cm9r
ZVRoaWNrbmVzcykKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJvX3QqIGNyIHBsYXRmb3Jt
Q29udGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQogewotICAgIGNhaXJvX3NldF9saW5lX3dp
ZHRoKHBsYXRmb3JtQ29udGV4dC5jcigpLCBzdHJva2VUaGlja25lc3MpOworICAgIGNhaXJvX3Nl
dF9saW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIHNldFN0cm9rZVN0
eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlKQordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiBjciwgU3Ryb2tlU3R5bGUg
c3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkYXNoUGF0dGVybltdID0g
eyA1LjAsIDUuMCB9OwogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG90UGF0dGVybltdID0geyAx
LjAsIDEuMCB9OwogCi0gICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKICAg
ICBzd2l0Y2ggKHN0cm9rZVN0eWxlKSB7CiAgICAgY2FzZSBOb1N0cm9rZToKICAgICAgICAgLy8g
RklYTUU6IGlzIGl0IHRoZSByaWdodCB3YXkgdG8gZW11bGF0ZSBOb1N0cm9rZT8KQEAgLTQ3Nywy
OSArNDc2LDI5IEBAIHZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBs
YXRmb3JtQ29udGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5CiAgICAgfQogfQogCi12b2lkIHNl
dENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0
LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiBjciwgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGNh
aXJvX3NldF9vcGVyYXRvcihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgdG9DYWlyb09wZXJhdG9yKGNv
bXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LCB0b0NhaXJvT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBibGVuZE1vZGUpKTsKIH0KIAot
dm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCwgYm9vbCBlbmFibGUpCit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190KiBjciwg
Ym9vbCBlbmFibGUpCiB7CiAgICAgLy8gV2hlbiB0cnVlLCB1c2UgdGhlIGRlZmF1bHQgQ2Fpcm8g
YmFja2VuZCBhbnRpYWxpYXMgbW9kZSAodXN1YWxseSB0aGlzCiAgICAgLy8gZW5hYmxlcyBzdGFu
ZGFyZCAnZ3JheXNjYWxlJyBhbnRpYWxpYXNpbmcpOyBmYWxzZSB0byBleHBsaWNpdGx5IGRpc2Fi
bGUKICAgICAvLyBhbnRpYWxpYXNpbmcuCi0gICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhwbGF0Zm9y
bUNvbnRleHQuY3IoKSwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19B
TlRJQUxJQVNfTk9ORSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhjciwgZW5hYmxlID8gQ0FJ
Uk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CiB9CiAKLXZvaWQg
c2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBzZXRDVE0oY2Fpcm9fdCogY3IsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IG1h
dHJpeCA9IHRvQ2Fpcm9NYXRyaXgodHJhbnNmb3JtKTsKLSAgICBjYWlyb19zZXRfbWF0cml4KHBs
YXRmb3JtQ29udGV4dC5jcigpLCAmbWF0cml4KTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNyLCAm
bWF0cml4KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0KQorQWZmaW5lVHJhbnNmb3JtIGdldENUTShjYWlyb190KiBjcikK
IHsKICAgICBjYWlyb19tYXRyaXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRyaXgocGxhdGZvcm1D
b250ZXh0LmNyKCksICZtKTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7CiAgICAgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybShtLnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngwLCBtLnkwKTsK
IH0KIApAQCAtNTU2LDQ1ICs1NTUsNDUgQEAgYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dChHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQogfSAvLyBuYW1lc3BhY2UgU3RhdGUK
IAogRmlsbFNvdXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUpCi0gICAgOiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGZpbGxSdWxlKHN0YXRl
LmZpbGxSdWxlKQorICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEoKSkKKyAgICAsIGZpbGxS
dWxlKHN0YXRlLmZpbGxSdWxlKCkpCiB7Ci0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0g
ICAgICAgIHBhdHRlcm4ub2JqZWN0ID0gYWRvcHRSZWYoc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0
ZVBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgIGlmIChhdXRvIGZpbGxQ
YXR0ZXJuID0gc3RhdGUuZmlsbEJydXNoKCkucGF0dGVybigpKSB7CisgICAgICAgIHBhdHRlcm4u
b2JqZWN0ID0gYWRvcHRSZWYoZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihBZmZp
bmVUcmFuc2Zvcm0oKSkpOwogCi0gICAgICAgIGF1dG8mIHBhdHRlcm5JbWFnZSA9IHN0YXRlLmZp
bGxQYXR0ZXJuLT50aWxlSW1hZ2UoKTsKKyAgICAgICAgYXV0byYgcGF0dGVybkltYWdlID0gZmls
bFBhdHRlcm4tPnRpbGVJbWFnZSgpOwogICAgICAgICBwYXR0ZXJuLnNpemUgPSBwYXR0ZXJuSW1h
Z2Uuc2l6ZSgpOwotICAgICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9IHN0YXRlLmZpbGxQYXR0ZXJu
LT5wYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKTsKLSAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gc3Rh
dGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKTsKLSAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gc3Rh
dGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFk
aWVudCkgewotICAgICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVh
dGVQYXR0ZXJuKDEsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAg
aWYgKHN0YXRlLmFscGhhICE9IDEpCi0gICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVk
ID0gc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhLCBzdGF0ZS5m
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIHBhdHRlcm4udHJhbnNmb3JtID0g
ZmlsbFBhdHRlcm4tPnBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpOworICAgICAgICBwYXR0ZXJuLnJl
cGVhdFggPSBmaWxsUGF0dGVybi0+cmVwZWF0WCgpOworICAgICAgICBwYXR0ZXJuLnJlcGVhdFkg
PSBmaWxsUGF0dGVybi0+cmVwZWF0WSgpOworICAgIH0gZWxzZSBpZiAoYXV0byBmaWxsR3JhZGll
bnQgPSBzdGF0ZS5maWxsQnJ1c2goKS5ncmFkaWVudCgpKSB7CisgICAgICAgIGdyYWRpZW50LmJh
c2UgPSBmaWxsR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3RhdGUuZmlsbEJydXNoKCkuc3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIGlmIChzdGF0ZS5hbHBoYSgpICE9IDEpCisgICAgICAg
ICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJu
KHN0YXRlLmFscGhhKCksIHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCkpOwogICAg
IH0gZWxzZQotICAgICAgICBjb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsKKyAgICAgICAgY29sb3Ig
PSBzdGF0ZS5maWxsQnJ1c2goKS5jb2xvcigpOwogfQogCiBTdHJva2VTb3VyY2U6OlN0cm9rZVNv
dXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgOiBnbG9iYWxBbHBo
YShzdGF0ZS5hbHBoYSkKIHsKLSAgICBpZiAoc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAgICAgICAg
cGF0dGVybiA9IGFkb3B0UmVmKHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotICAgIGVsc2UgaWYgKHN0YXRlLnN0cm9rZUdyYWRp
ZW50KSB7Ci0gICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3Jl
YXRlUGF0dGVybigxLCBzdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICBp
ZiAoYXV0byBzdHJva2VQYXR0ZXJuID0gc3RhdGUuc3Ryb2tlQnJ1c2goKS5wYXR0ZXJuKCkpCisg
ICAgICAgIHBhdHRlcm4gPSBhZG9wdFJlZihzdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpKTsKKyAgICBlbHNlIGlmIChhdXRvIHN0cm9rZUdyYWRp
ZW50ID0gc3RhdGUuc3Ryb2tlQnJ1c2goKS5ncmFkaWVudCgpKSB7CisgICAgICAgIGdyYWRpZW50
LmJhc2UgPSBzdHJva2VHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigxLCBzdGF0ZS5zdHJva2VCcnVz
aCgpLnNwYWNlVHJhbnNmb3JtKCkpOwogICAgICAgICBpZiAoc3RhdGUuYWxwaGEgIT0gMSkKLSAg
ICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+
Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSwgc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSk7CisgICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gc3Ryb2tlR3JhZGll
bnQtPmNyZWF0ZVBhdHRlcm4oc3RhdGUuYWxwaGEoKSwgc3RhdGUuc3Ryb2tlQnJ1c2goKS5zcGFj
ZVRyYW5zZm9ybSgpKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHJva2VD
b2xvcjsKKyAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHJva2VCcnVzaCgpLmNvbG9yKCk7CiB9CiAK
IFNoYWRvd1N0YXRlOjpTaGFkb3dTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUpCi0gICAgOiBvZmZzZXQoc3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgYmx1cihzdGF0ZS5z
aGFkb3dCbHVyKQotICAgICwgY29sb3Ioc3RhdGUuc2hhZG93Q29sb3IpCi0gICAgLCBpZ25vcmVU
cmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAgICwgZ2xvYmFsQWxw
aGEoc3RhdGUuYWxwaGEpCi0gICAgLCBnbG9iYWxDb21wb3NpdGVPcGVyYXRvcihzdGF0ZS5jb21w
b3NpdGVPcGVyYXRvcikKKyAgICA6IG9mZnNldChzdGF0ZS5kcm9wU2hhZG93KCkub2Zmc2V0KQor
ICAgICwgYmx1cihzdGF0ZS5kcm9wU2hhZG93KCkuYmx1clJhZGl1cykKKyAgICAsIGNvbG9yKHN0
YXRlLmRyb3BTaGFkb3coKS5jb2xvcikKKyAgICAsIGlnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoKSkKKyAgICAsIGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkp
CisgICAgLCBnbG9iYWxDb21wb3NpdGVPcGVyYXRvcihzdGF0ZS5jb21wb3NpdGVNb2RlKCkub3Bl
cmF0aW9uKQogewogfQogCkBAIC02MjIsNyArNjIxLDcgQEAgYm9vbCBTaGFkb3dTdGF0ZTo6aXNS
ZXF1aXJlZChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KSBjb25zdAogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQordm9pZCBzZXRMaW5lQ2FwKGNhaXJv
X3QqIGNyLCBMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAgY2Fpcm9fbGluZV9jYXBfdCBjYWlyb0Nh
cCB7IH07CiAgICAgc3dpdGNoIChsaW5lQ2FwKSB7CkBAIC02MzYsMTggKzYzNSwxOCBAQCB2b2lk
IHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUNh
cCBsaW5lQ2FwKQogICAgICAgICBjYWlyb0NhcCA9IENBSVJPX0xJTkVfQ0FQX1NRVUFSRTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3NldF9saW5lX2NhcChwbGF0Zm9ybUNvbnRl
eHQuY3IoKSwgY2Fpcm9DYXApOworICAgIGNhaXJvX3NldF9saW5lX2NhcChjciwgY2Fpcm9DYXAp
OwogfQogCi12b2lkIHNldExpbmVEYXNoKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBz
ZXRMaW5lRGFzaChjYWlyb190KiBjciwgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRh
c2hPZmZzZXQpCiB7CiAgICAgaWYgKHN0ZDo6YWxsX29mKGRhc2hlcy5iZWdpbigpLCBkYXNoZXMu
ZW5kKCksIFtdKGF1dG8mIGRhc2gpIHsgcmV0dXJuICFkYXNoOyB9KSkKLSAgICAgICAgY2Fpcm9f
c2V0X2Rhc2gocGxhdGZvcm1Db250ZXh0LmNyKCksIDAsIDAsIDApOworICAgICAgICBjYWlyb19z
ZXRfZGFzaChjciwgMCwgMCwgMCk7CiAgICAgZWxzZQotICAgICAgICBjYWlyb19zZXRfZGFzaChw
bGF0Zm9ybUNvbnRleHQuY3IoKSwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgZGFzaE9m
ZnNldCk7CisgICAgICAgIGNhaXJvX3NldF9kYXNoKGNyLCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMu
c2l6ZSgpLCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBzZXRMaW5lSm9pbihHcmFwaGljc0NvbnRl
eHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgc2V0TGlu
ZUpvaW4oY2Fpcm9fdCogY3IsIExpbmVKb2luIGxpbmVKb2luKQogewogICAgIGNhaXJvX2xpbmVf
am9pbl90IGNhaXJvSm9pbiB7IH07CiAgICAgc3dpdGNoIChsaW5lSm9pbikgewpAQCAtNjYxLDEy
ICs2NjAsMTIgQEAgdm9pZCBzZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikKICAgICAgICAgY2Fpcm9Kb2luID0gQ0FJUk9f
TElORV9KT0lOX0JFVkVMOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xp
bmVfam9pbihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fpcm9Kb2luKTsKKyAgICBjYWlyb19zZXRf
bGluZV9qb2luKGNyLCBjYWlyb0pvaW4pOwogfQogCi12b2lkIHNldE1pdGVyTGltaXQoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQg
c2V0TWl0ZXJMaW1pdChjYWlyb190KiBjciwgZmxvYXQgbWl0ZXJMaW1pdCkKIHsKLSAgICBjYWly
b19zZXRfbWl0ZXJfbGltaXQocGxhdGZvcm1Db250ZXh0LmNyKCksIG1pdGVyTGltaXQpOworICAg
IGNhaXJvX3NldF9taXRlcl9saW1pdChjciwgbWl0ZXJMaW1pdCk7CiB9CiAKIHZvaWQgZmlsbFJl
Y3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYg
c2hhZG93U3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCmluZGV4IDU0OTg1NjNjZTQ5YzE1ZTM1ZDA4MjU5
YzJkMjZkYzdiMTdjZWE4ODUuLjg3ZWNjMjA1OGQ0YTc1ZDMzZGRkMjEyZWQ4ODc3ZThkM2E4YTc4
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvT3BlcmF0aW9ucy5oCkBAIC01NCwxNCArNTQsMTQgQEAgbmFtZXNwYWNlIENhaXJv
IHsKIAogbmFtZXNwYWNlIFN0YXRlIHsKIAotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mLCBmbG9hdCk7Ci12b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29u
dGV4dENhaXJvJiwgU3Ryb2tlU3R5bGUpOwordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9f
dCosIGZsb2F0KTsKK3ZvaWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCosIFN0cm9rZVN0eWxlKTsK
IAotdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKEdyYXBo
aWNzQ29udGV4dENhaXJvJiwgYm9vbCk7Cit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWly
b190KiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7Cit2b2lkIHNldFNob3VsZEFudGlh
bGlhcyhjYWlyb190KiwgYm9vbCk7CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJv
JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBo
aWNzQ29udGV4dENhaXJvJik7Cit2b2lkIHNldENUTShjYWlyb190KiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJik7CitBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKGNhaXJvX3QqKTsKIAogSW50UmVjdCBn
ZXRDbGlwQm91bmRzKEdyYXBoaWNzQ29udGV4dENhaXJvJik7CiBGbG9hdFJlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAt
MTI1LDEwICsxMjUsMTAgQEAgc3RydWN0IFNoYWRvd1N0YXRlIHsKICAgICBDb21wb3NpdGVPcGVy
YXRvciBnbG9iYWxDb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyIH07CiB9OwogCi12b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5l
Q2FwKTsKLXZvaWQgc2V0TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBEYXNo
QXJyYXkmLCBmbG9hdCk7Ci12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiwg
TGluZUpvaW4pOwotdm9pZCBzZXRNaXRlckxpbWl0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgZmxv
YXQpOwordm9pZCBzZXRMaW5lQ2FwKGNhaXJvX3QqLCBMaW5lQ2FwKTsKK3ZvaWQgc2V0TGluZURh
c2goY2Fpcm9fdCosIGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KTsKK3ZvaWQgc2V0TGluZUpvaW4o
Y2Fpcm9fdCosIExpbmVKb2luKTsKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiwgZmxvYXQp
OwogCiB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7CiB2b2lkIGZpbGxSZWN0
KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBj
b25zdCBTaGFkb3dTdGF0ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGMz
MjMwNDQ1MzUxYjAzZjJhYTg3MzZhZWUyYmNlNzhiYzQzNjFmNDkuLmMxYmExY2E1M2MwYmVhODBh
YWEwYzI1NDRlMTYzMmU1NTViOWZmMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KQEAg
LTY4LDcgKzY4LDggQEAgcHVibGljOgogfTsKIAogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBo
aWNzQ29udGV4dENhaXJvKFJlZlB0cjxjYWlyb190PiYmIGNvbnRleHQpCi0gICAgOiBtX2NyKFdU
Rk1vdmUoY29udGV4dCkpCisgICAgOiBHcmFwaGljc0NvbnRleHQoRmxvYXRSZWN0OjppbmZpbml0
ZVJlY3QoKSkKKyAgICAsIG1fY3IoV1RGTW92ZShjb250ZXh0KSkKIHsKICAgICBtX2NhaXJvU3Rh
dGVTdGFjay5hcHBlbmQoQ2Fpcm9TdGF0ZSgpKTsKICAgICBtX2NhaXJvU3RhdGUgPSAmbV9jYWly
b1N0YXRlU3RhY2subGFzdCgpOwpAQCAtODYsMTAgKzg3LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENhaXJvOjpnZXRDVE0oSW5jbHVkZURl
dmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIFVOVVNFRF9QQVJBTShpbmNs
dWRlU2NhbGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250
ZXh0KCkpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpw
bGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKIEdyYXBoaWNzQ29udGV4dENhaXJvKiBHcmFwaGlj
c0NvbnRleHRDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKQEAgLTEzNCw1MyArMTM0LDEx
MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZXN0b3JlKCkKICAgICBjYWlyb19yZXN0
b3JlKG1fY3IuZ2V0KCkpOwogfQogCi0vLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBh
IHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgQVNTRVJUKCFyZWN0Lmlz
RW1wdHkoKSk7Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpk
cmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CisgICAgaWYgKCFzdGF0ZSgpLmNo
YW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvIGNoYW5nZSA6IHN0YXRl
KCkuY2hhbmdlcygpKSB7CisgICAgICAgIHN3aXRjaCAoY2hhbmdlKSB7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q1RNOgorICAgICAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRDVE0obV9jci5nZXQoKSwgc3RhdGUoKS5nZXRDVE0oKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9r
ZVRoaWNrbmVzczoKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNz
KG1fY3IuZ2V0KCksIHN0ZDo6bWF4KHN0YXRlKCkuc3Ryb2tlVGhpY2tuZXNzKCksIDAuZikpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpTdHJva2VTdHlsZToKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tl
U3R5bGUobV9jci5nZXQoKSwgc3RhdGUoKS5zdHJva2VTdHlsZSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNh
cDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKG1fY3IuZ2V0KCksIHN0YXRlKCkubGlu
ZUNhcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW46CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZUpv
aW4obV9jci5nZXQoKSwgc3RhdGUoKS5saW5lSm9pbigpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2g6Cisg
ICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2gobV9jci5nZXQoKSwgc3RhdGUoKS5saW5lRGFz
aCgpLmRhc2hlcywgc3RhdGUoKS5saW5lRGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGlt
aXQ6CisgICAgICAgICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChtX2NyLmdldCgpLCBzdGF0ZSgp
Lm1pdGVyTGltaXQoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGU6CisgICAgICAgICAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX2NyLmdldCgpLCBzdGF0ZSgpLmNvbXBv
c2l0ZU1vZGUoKS5vcCwgc3RhdGUoKS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpKSB7CisgICAgICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3Mg
Y29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAg
ICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52
YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cg
PSB0aGlzLT5kcm9wU2hhZG93KCk7CisgICAgICAgICAgICAgICAgZHJvcFNoYWRvdy5vZmZzZXQg
PSB7IGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCksIC1kcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQo
KSB9OworICAgICAgICAgICAgICAgIHNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENhaXJvOjpTdGF0
ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fY3IuZ2V0KCksIHN0YXRlKCkuc2hvdWxkQW50aWFsaWFz
KCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUlt
YWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9y
bUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFj
aXR5KTsKKyAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7
CiB9CiAKLS8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxk
IG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAo
c3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKLSAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNz
Q29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBDYWlybzo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKnRoaXMpOworfQogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwot
ICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91
bGRBbnRpYWxpYXMpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIENh
aXJvOjpjbGlwKCp0aGlzLCByZWN0KTsKIH0KIAotLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2Vk
IHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBj
bGlwUnVsZSkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86
OmRyYXdFbGxpcHNlKCp0aGlzLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKKyAgICBDYWlybzo6Y2xpcFBh
dGgoKnRoaXMsIHBhdGgsIGNsaXBSdWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKK30K
IAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgo
KnRoaXMsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgm
IHBhdGgpCit7CisgICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHBhdGgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpjbGlwVG9J
bWFnZUJ1ZmZlcigqdGhpcywgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVz
dFJlY3QpOworfQogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJv
OjpzdHJva2VQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIENhaXJvOjpjbGVhclJlY3QoKnRo
aXMsIHJlY3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0xOTYsOCArMjUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwg
c3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGF1dG8gcGF0dGVybiA9IGdy
YWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgaWYg
KCFwYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTIwOCwxMzEgKzI2NCwzNCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09w
ZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7CisgICAgYXV0byBwcmV2aW91c0NvbXBv
c2l0ZU1vZGUgPSBjb21wb3NpdGVNb2RlKCk7CiAKICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbigqdGhpcywgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAg
Q2Fpcm86OmZpbGxSZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHBy
ZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNs
aXAoKnRoaXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0
aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKLXsKLSAgICBDYWlybzo6Y2xp
cFBhdGgoKnRoaXMsIHBhdGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6
Z2V0Q2xpcEJvdW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0KQotewotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVy
LmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJvOjpj
bGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQo
KSwgZGVzdFJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKLXsKLSNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKLSAgICBU
aGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHBhdGgsIGNvbG9yKTsKLSAgICBVTlVTRURf
UEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIHJldHVybjsKLSNl
bHNlCi0gICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnRoaXMsIHBhdGgsIHdpZHRoLCBjb2xvcik7
Ci0jZW5kaWYKKyAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUoKSkpOworICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKCp0aGlzLCBwcmV2aW91c0NvbXBvc2l0ZU1vZGUub3BlcmF0aW9uLCBwcmV2aW91c0Nv
bXBvc2l0ZU1vZGUuYmxlbmRNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0jaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCi0g
ICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCByZWN0cywgY29sb3IpOwotICAgIFVO
VVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgcmV0dXJu
OwotI2Vsc2UKLSAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqdGhpcywgcmVjdHMsIHdpZHRoLCBj
b2xvcik7Ci0jZW5kaWYKKyAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KCp0aGlzLCByZWN0LCBj
b2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCisgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQs
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5z
dHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKLXsKLSAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigqdGhp
cywgcmVjdCwgc3R5bGUpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJv
dW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91
bmRpbmdNb2RlKQotewotICAgIFVOVVNFRF9QQVJBTShyb3VuZGluZ01vZGUpOwotICAgIHJldHVy
biBDYWlybzo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnRoaXMsIHJlY3QpOwotfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsK
LSAgICBDYWlybzo6dHJhbnNsYXRlKCp0aGlzLCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
KQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcygqdGhpcywgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHls
ZSgqdGhpcywgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBo
aWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAot
ICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52
YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9
IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0g
eyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVP
cGVyYXRpb24oKnRoaXMsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUp
OwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlh
c0NoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnRoaXMs
IHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWly
bzo6Y29uY2F0Q1RNKCp0aGlzLCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAg
Q2Fpcm86OlN0YXRlOjpzZXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsK
LSAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0g
ICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMsIG9wYWNpdHkpOworICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoKnRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBHcmFwaGljc0NvbnRleHQ6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCp0
aGlzKTsKLX0KKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBDYWlybzo6Y2xlYXJSZWN0KCp0aGlzLCByZWN0KTsKKyAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OmZpbGxQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6
RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbGluZVdpZHRoKQpAQCAtMzQxLDU4ICszMDAsNjUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCkKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwgbGluZVdpZHRoLCBDYWlybzo6
U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewot
ICAgIENhaXJvOjpzZXRMaW5lQ2FwKCp0aGlzLCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0
IGRhc2hPZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNoKCp0aGlzLCBkYXNoZXMsIGRh
c2hPZmZzZXQpOwotfQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9p
bikKLXsKLSAgICBDYWlybzo6c2V0TGluZUpvaW4oKnRoaXMsIGxpbmVKb2luKTsKKyAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnRoaXMsIHBh
dGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBt
aXRlcikKKy8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIu
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdCgq
dGhpcywgbWl0ZXIpOworICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOworICAgIENhaXJvOjpk
cmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBmaWxsQ29sb3IoKSwgc3Ryb2tl
U3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKKy8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcg
Ym9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikKIHsKLSAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcGF0aCk7Ci19Cisg
ICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCi17Ci0gICAgQ2Fp
cm86OnJvdGF0ZSgqdGhpcywgcmFkaWFucyk7CisgICAgQ2Fpcm86OmRyYXdMaW5lKCp0aGlzLCBw
b2ludDEsIHBvaW50Miwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tu
ZXNzKCksIHNob3VsZEFudGlhbGlhcygpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorLy8gVGhpcyBtZXRob2QgaXMgb25seSB1
c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgQ2Fpcm86OnNjYWxlKCp0aGlzLCBzaXplKTsKKyAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnRo
aXMsIHJlY3QsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpLCBzdHJv
a2VUaGlja25lc3MoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHJlY3QpOworI2lm
IFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQorICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRG
b2N1cygqdGhpcywgcGF0aCwgY29sb3IpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgcmV0dXJuOworI2Vsc2UKKyAgICBDYWlybzo6ZHJh
d0ZvY3VzUmluZygqdGhpcywgcGF0aCwgd2lkdGgsIGNvbG9yKTsKKyNlbmRpZgogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQ2Fpcm86
OmZpbGxSb3VuZGVkUmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSgpKSk7CisjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCisgICAgVGhlbWVB
ZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCByZWN0cywgY29sb3IpOworICAgIFVOVVNFRF9QQVJB
TSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CisgICAgcmV0dXJuOworI2Vsc2UK
KyAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqdGhpcywgcmVjdHMsIHdpZHRoLCBjb2xvcik7Cisj
ZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFjb2xv
ci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJlY3Qs
IHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKKyAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnRoaXMsIG5hdGl2
ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9u
cywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKQEAgLTQwNCwx
MSArMzcwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QKICAgICBDYWlybzo6ZHJhd1BhdHRl
cm4oKnRoaXMsIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgbmF0aXZlSW1hZ2Uu
c2l6ZSgpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRp
b25zKTsKIH0KIAotUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5n
TW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENv
bnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDog
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmcpCiB7CiAgICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTQz
NCwxMiArMzk1LDMxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKnRoaXMsIENhaXJvOjpGaWxs
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCiAgICAgICAgIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zm
c2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2Rl
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93
Q29sb3IsCisgICAgICAgIHRleHREcmF3aW5nTW9kZSgpLCBzdHJva2VUaGlja25lc3MoKSwgc2hh
ZG93T2Zmc2V0KCksIHNoYWRvd0NvbG9yKCksCiAgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQoreworICAg
IGlmICh3aWR0aHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmRyYXdM
aW5lc0ZvclRleHQoKnRoaXMsIHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRv
dWJsZVVuZGVybGluZXMsIHN0cm9rZUNvbG9yKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit7CisgICAgQ2Fpcm86OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoKnRoaXMsIHJlY3QsIHN0eWxlKTsKK30KKworRmxvYXRSZWN0IEdyYXBo
aWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocm91bmRp
bmdNb2RlKTsKKyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCp0
aGlzLCByZWN0KTsKK30KKwogY2Fpcm9fdCogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNyKCkgY29u
c3QKIHsKKyAgICBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dENhaXJvJj4oKnRoaXMpLmFwcGx5
U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmV0dXJuIG1fY3IuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5oCmluZGV4IDU2NDYxYzE1OWE1ODNjODljNjFlOGYwMmU0ZTBiZWU3YjA1OTMy
ZWYuLjMyZDE4ZGE2MDIyYzUyOWRiOGNjMDU5OTZmNWRkZGVjZmFiYjc2MTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEg
Uy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDYxICs1MSw1MCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICAgICBH
cmFwaGljc0NvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAg
ICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAg
dm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFs
OwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpv
aW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7
CisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lk
IGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUp
IGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lk
IGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3Q7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWw7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZp
bmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBD
b21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsOwot
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9p
ZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJik7
CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKwogICAgIHZvaWQgZmls
bFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAg
IHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwogCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQg
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwog
ICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBm
aW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZp
bmFsOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisKICAgICB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYpIGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3Jl
KCkgZmluYWw7Ci0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIGZpbmFsOwotICAg
IHZvaWQgcm90YXRlKGZsb2F0KSBmaW5hbDsKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNj
YWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCBj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENU
TShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7Ci0KLSAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKIAotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
LSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlw
T3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBX
aW5kUnVsZSkgZmluYWw7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0g
ICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSkgZmluYWw7CiAKICAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRl
U2F2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0
YXRlU2F2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODU2YTA0MzkzZmQyNGU5NjI4ZjZmZTkzNDY5ZWViZWE0
YWJiNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKENHKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENHQ29udGV4dFN0YXRl
U2F2ZXIgeworcHVibGljOgorICAgIENHQ29udGV4dFN0YXRlU2F2ZXIoQ0dDb250ZXh0UmVmIGNv
bnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChj
b250ZXh0KQorICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAg
eworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFNh
dmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgfkNHQ29udGV4dFN0YXRlU2F2
ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2F2ZSgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAg
ICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBB
U1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
bV9jb250ZXh0KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBib29sIGRpZFNhdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2F2
ZUFuZFJlc3RvcmU7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBDR0NvbnRleHRSZWYgbV9j
b250ZXh0OworICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCAzMjQ1
YzYwMDQzMTU1MmQ1MTNiNzRlZWJjMDlmMzE4ZWVjM2RkNzJhLi43ZWZjNzJjOWU3ZDI4YWUyNmQw
MTZlMDZjYjcxODhiYTY4MDhjNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTg1LDE0ICsxODUsMTMgQEAgc3RhdGljIHZv
aWQgc2V0Q0dCbGVuZE1vZGUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBCbGVuZE1vZGUKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENH
KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHQoQ0dDb250ZXh0
R2V0Q2xpcEJvdW5kaW5nQm94KGNnQ29udGV4dCksIEdyYXBoaWNzQ29udGV4dFN0YXRlOjppbml0
aWFsQ2hhbmdlRmxhZ3MsIENHQ29udGV4dEdldENUTShjZ0NvbnRleHQpKQogewogICAgIGlmICgh
Y2dDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBj
b250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgIGRpZFVwZGF0ZVN0YXRl
KG1fc3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlIH0pOwotICAgIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSA9IGNvcmVJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0
aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoY29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRp
b25RdWFsaXR5KGludGVybmFsUGxhdGZvcm1Db250ZXh0KCkpKSk7CiB9CiAKIEdyYXBoaWNzQ29u
dGV4dENHOjp+R3JhcGhpY3NDb250ZXh0Q0coKQpAQCAtMjA2LDYgKzIwNSwxNCBAQCBib29sIEdy
YXBoaWNzQ29udGV4dENHOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogfQogCiBDR0NvbnRl
eHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAg
Ly8gU29tZSBjYWxsZXJzIHRvIHRoaXMgbWV0aG9kIHVzZXMgdGhlIHBsYXRmb3JtIGNvbnRleHQg
b3V0c2lkZSB0aGUgc2NvcGUKKyAgICAvLyBvZiB0aGlzIGNsYXNzLiBDb21taXQgYW55IGNoYW5n
ZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcGxhdGZvcm0gY29udGV4dC4KKyAgICBjb25zdF9jYXN0
PEdyYXBoaWNzQ29udGV4dENHJj4oKnRoaXMpLmFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmV0
dXJuIGludGVybmFsUGxhdGZvcm1Db250ZXh0KCk7Cit9CisKK0NHQ29udGV4dFJlZiBHcmFwaGlj
c0NvbnRleHRDRzo6aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewogICAgIEFTU0VS
VChtX2RhdGEtPm1fY2dDb250ZXh0KTsKICAgICByZXR1cm4gbV9kYXRhLT5tX2NnQ29udGV4dC5n
ZXQoKTsKQEAgLTMzOCw3ICszNDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpegogI2VuZGlm
CiAKICAgICBhdXRvIG9sZENvbXBvc2l0ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
Ci0gICAgYXV0byBvbGRCbGVuZE1vZGUgPSBibGVuZE1vZGVPcGVyYXRpb24oKTsKKyAgICBhdXRv
IG9sZEJsZW5kTW9kZSA9IGJsZW5kTW9kZSgpOwogICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQs
IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiAKICAg
ICAvLyBNYWtlIHRoZSBvcmlnaW4gYmUgYXQgYWRqdXN0ZWREZXN0UmVjdC5sb2NhdGlvbigpCkBA
IC0zOTYsNyArNDAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKICAgICBDR0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChj
b250ZXh0LCBkZXN0UmVjdCk7CiAKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3Np
dGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgp
IH0pOwogCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGRlc3RSZWN0LngoKSwg
ZGVzdFJlY3QueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RN
KGNvbnRleHQsIDEsIC0xKTsKQEAgLTU1NSwxMyArNTYyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuc3Ry
b2tlUGF0dGVybikKKyAgICBpZiAoIXN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFm
ZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jh
c2VDVE0oY2dDb250ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUu
c3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOworICAg
IGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4odXNlclRvQmFzZUNUTSk7CiAgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAgICAg
IHJldHVybjsKIApAQCAtNTc0LDEzICs1ODEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
YXBwbHlTdHJva2VQYXR0ZXJuKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxs
UGF0dGVybigpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmICghZmls
bFBhdHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RN
ID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKLSAgICBh
dXRvIHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3Jt
UGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKKyAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IGZpbGxQ
YXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKICAgICBpZiAo
IXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01OTEsMTEgKzU5OCwxMSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBDR0NvbnRl
eHRTZXRGaWxsUGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRl
cm5BbHBoYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0aERyYXdpbmdNb2RlJiBtb2Rl
KQorc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCiB7Ci0gICAgYm9vbCBz
aG91bGRGaWxsID0gc3RhdGUuZmlsbFBhdHRlcm4gfHwgc3RhdGUuZmlsbENvbG9yLmlzVmlzaWJs
ZSgpOwotICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCAoc3Rh
dGUuc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UgJiYgc3RhdGUuc3Ryb2tlQ29sb3IuaXNWaXNpYmxl
KCkpOwotICAgIGJvb2wgdXNlRU9GaWxsID0gc3RhdGUuZmlsbFJ1bGUgPT0gV2luZFJ1bGU6OkV2
ZW5PZGQ7CisgICAgYm9vbCBzaG91bGRGaWxsID0gY29udGV4dC5maWxsUGF0dGVybigpIHx8IGNv
bnRleHQuZmlsbENvbG9yKCkuaXNWaXNpYmxlKCk7CisgICAgYm9vbCBzaG91bGRTdHJva2UgPSBj
b250ZXh0LnN0cm9rZVBhdHRlcm4oKSB8fCAoY29udGV4dC5zdHJva2VTdHlsZSgpICE9IE5vU3Ry
b2tlICYmIGNvbnRleHQuc3Ryb2tlQ29sb3IoKS5pc1Zpc2libGUoKSk7CisgICAgYm9vbCB1c2VF
T0ZpbGwgPSBjb250ZXh0LmZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQ7CiAKICAgICBp
ZiAoc2hvdWxkRmlsbCkgewogICAgICAgICBpZiAoc2hvdWxkU3Ryb2tlKSB7CkBAIC02MjQsOSAr
NjMxLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0
aCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0
YXRlOwogCi0gICAgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0ZS5zdHJva2VHcmFkaWVu
dCkgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBzdHJva2VHcmFkaWVudCgpKSB7CiAgICAg
ICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8gZmlsbCAmIHN0cm9rZSBh
IHBhdGggdXNpbmcgZ3JhZGllbnRzCiAgICAgICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0
IHRoaXMuCiAgICAgICAgIGZpbGxQYXRoKHBhdGgpOwpAQCAtNjM0LDEzICs2NDAsMTMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmls
bFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIGlmIChzdGF0ZS5z
dHJva2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ry
b2tlUGF0dGVybigpOwogCiAgICAgQ0dQYXRoRHJhd2luZ01vZGUgZHJhd2luZ01vZGU7Ci0gICAg
aWYgKGNhbGN1bGF0ZURyYXdpbmdNb2RlKHN0YXRlLCBkcmF3aW5nTW9kZSkpIHsKKyAgICBpZiAo
Y2FsY3VsYXRlRHJhd2luZ01vZGUoKnRoaXMsIGRyYXdpbmdNb2RlKSkgewogI2lmIEhBVkUoQ0df
Q09OVEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgICAgICBDR0NvbnRleHREcmF3UGF0aERpcmVj
dChjb250ZXh0LCBkcmF3aW5nTW9kZSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CiAj
ZWxzZQpAQCAtNjU4LDcgKzY2NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZp
bGxHcmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAg
RmxvYXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIEZs
b2F0U2l6ZSBsYXllclNpemUgPSBnZXRDVE0oKS5tYXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTY3
MCwzMyArNjc2LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0obGF5ZXJDb250ZXh0
LCAtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgo
bGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0
LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShs
YXllckNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAg
ICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3Jt
KCkpOwogCiAgICAgICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkK
ICAgICAgICAgICAgICAgICBDR0NvbnRleHRFT0NsaXAobGF5ZXJDb250ZXh0KTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7CiAK
LSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOwor
ICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAg
ICAgICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRl
eHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3Jt
UGF0aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250
ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZp
bGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENU
TShjb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAgICAgIGlmIChmaWxs
UnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgICAgIENHQ29udGV4dEVP
Q2xpcChjb250ZXh0KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwogCi0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFp
bnQoKnRoaXMpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5maWxs
UGF0dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVy
bigpOwogI2lmIEhBVkUoQ0dfQ09OVEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgIENHQ29udGV4
dERyYXdQYXRoRGlyZWN0KGNvbnRleHQsIGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQg
PyBrQ0dQYXRoRU9GaWxsIDoga0NHUGF0aEZpbGwsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51bGxw
dHIpOwpAQCAtNzE3LDcgKzcyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlm
IChzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAg
ICAgICAgRmxvYXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAg
ICAgIGZsb2F0IGxpbmVXaWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtNzQyLDggKzc0OCw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
ICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBwYXRoLnBsYXRmb3Jt
UGF0aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRo
KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7
Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VH
cmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNh
dENUTShsYXllckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAg
c3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgZmxv
YXQgZGVzdGluYXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAg
ICAgIGZsb2F0IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0aCk7CkBA
IC03NTQsMTMgKzc2MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBh
dGgucGxhdGZvcm1QYXRoKCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRo
U3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQp
OwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4
dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgp
LT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAg
ICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICNpZiBVU0UoQ0dfQ09OVEVYVF9TVFJPS0Vf
TElORV9TRUdNRU5UU19XSEVOX1NUUk9LSU5HX1BBVEgpCkBAIC03ODUsNyArNzkxLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAo
bV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkpIHsKICAgICAg
ICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBpZiAo
aGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXllclNpemUgPSBnZXRDVE0o
KS5tYXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTc5OCwyNyArODA0LDI3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgICAg
IENHQ29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENHQ29u
dGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RN
KGxheWVyQ29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAg
ICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAg
ICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxheWVy
LmdldCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1Jl
Y3QoY29udGV4dCwgcmVjdCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4
dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0
YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29u
Y2F0Q1RNKGNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIGZpbGxH
cmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigp
KQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKICAgICBib29sIGRyYXdPd25TaGFkb3cg
PSBjYW5Vc2VTaGFkb3dCbHVyKCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAg
ICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dp
dGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAot
ICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRv
d0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9hdFJv
dW5kZWRSZWN0KHJlY3QpKTsKICAgICB9CiAKQEAgLTgzNyw5ICs4NDMsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJh
d093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBv
ZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRm
b3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hh
ZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRv
d0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0
U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAg
IGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3QocmVj
dCkpOwogICAgIH0KIApAQCAtODUyLDcgKzg1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAg
ICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
ICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKQEAgLTg2NCw5ICs4NzAsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAg
ICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAg
IENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsK
IAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNo
YWRvd0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCByZWN0
KTsKICAgICB9CiAKQEAgLTg3NCw3ICs4ODAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0CiAg
ICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpID0gcmVjdC5yYWRpaSgpOwog
ICAgIGJvb2wgZXF1YWxXaWR0aHMgPSAocmFkaWkudG9wTGVmdCgpLndpZHRoKCkgPT0gcmFkaWku
dG9wUmlnaHQoKS53aWR0aCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSA9PSByYWRpaS5i
b3R0b21MZWZ0KCkud2lkdGgoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSA9PSByYWRp
aS5ib3R0b21SaWdodCgpLndpZHRoKCkpOwogICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gKHJhZGlp
LnRvcExlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgJiYgcmFk
aWkuYm90dG9tTGVmdCgpLmhlaWdodCgpID09IHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgJiYg
cmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgp
KTsKLSAgICBib29sIGhhc0N1c3RvbUZpbGwgPSBtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0
YXRlLmZpbGxQYXR0ZXJuOworICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IGZpbGxHcmFkaWVudCgp
IHx8IGZpbGxQYXR0ZXJuKCk7CiAgICAgaWYgKCFoYXNDdXN0b21GaWxsICYmIGVxdWFsV2lkdGhz
ICYmIGVxdWFsSGVpZ2h0cyAmJiByYWRpaS50b3BMZWZ0KCkud2lkdGgoKSAqIDIgPT0gci53aWR0
aCgpICYmIHJhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSAqIDIgPT0gci5oZWlnaHQoKSkKICAgICAg
ICAgQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3QoY29udGV4dCwgcik7CiAgICAgZWxzZSB7CkBA
IC05MTMsOSArOTE5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG8KICAgICBDR0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRy
YXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAg
Q0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJv
LCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENH
U2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0
YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd0luc2V0
U2hhZG93KCp0aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3QpOwogICAgIH0KIApAQCAtOTMwLDYg
KzkzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcChyZWN0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBy
ZWN0KTsKICAgICBtX2RhdGEtPmNsaXAocmVjdCk7CiB9CkBAIC05NDAsMzEgKzk0NywzNSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAg
ICAvLyB0byA8cmRhcjovL3Byb2JsZW0vMTI1ODQ0OTI+LCBDR1JlY3RJbmZpbml0ZSBjYW4ndCBi
ZSB1c2VkIHdpdGggYW4gYWNjZWxlcmF0ZWQgY29udGV4dCB0aGF0CiAgICAgLy8gaGFzIGNlcnRh
aW4gdHJhbnNmb3JtcyB0aGF0IGFyZW4ndCBqdXN0IGEgdHJhbnNsYXRpb24gb3IgYSBzY2FsZS4g
QW5kIGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vMTQ2MzQ0NTM+CiAgICAgLy8gd2UgY2Fubm90IHVz
ZSBpdCBpbiBmb3IgYSBwcmludGluZyBjb250ZXh0IGVpdGhlci4KKyAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
Y3RtID0gZ2V0Q1RNKCk7Ci0gICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4
dEdldFR5cGUocGxhdGZvcm1Db250ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5k
ZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkg
JiYgIWN0bS5jKCkpKTsKLSAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmlu
aXRlID8gQ0dSZWN0SW5maW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZv
cm1Db250ZXh0KCkpLCByZWN0IH07Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29u
dGV4dCgpKTsKLSAgICBDR0NvbnRleHRBZGRSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdHMs
IDIpOwotICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgYm9vbCBj
YW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUoY29udGV4dCkgIT0ga0NHQ29u
dGV4dFR5cGVQREYgJiYgKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOworICAgIENHUmVjdCByZWN0c1syXSA9
IHsgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZpbml0ZSA6IENHQ29udGV4dEdldENs
aXBCb3VuZGluZ0JveChjb250ZXh0KSwgcmVjdCB9OworICAgIENHQ29udGV4dEJlZ2luUGF0aChj
b250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRSZWN0cyhjb250ZXh0LCByZWN0cywgMik7CisgICAg
Q0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpj
bGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBD
R0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dEJlZ2lu
UGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIENHQ29udGV4dEdl
dENsaXBCb3VuZGluZ0JveChjb250ZXh0KSk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBh
dGgoKSk7Ci0gICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAg
Q0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBDR0Nv
bnRleHRFT0NsaXAoY29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogeworICAgIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOworCiAgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAg
IENHQ29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkp
OworICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4
dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAKICAgICAgICAgaWYgKGNs
aXBSdWxlID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlw
KGNvbnRleHQpOwpAQCAtOTc1LDExICs5ODYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICBtX2RhdGEt
PmNsaXAocGF0aCk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMo
KSBjb25zdAotewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBC
b3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgR3JhcGhp
Y3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwpAQCAtMTAwMiwxNyAr
MTAwOCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFuc3BhcmVuY3lMYXllcigp
CiAgICAgcmVzdG9yZSgpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmth
cm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHRmxvYXQmIHhP
ZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCitzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwg
Q0dGbG9hdCYgeU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9S
TShXSU4pCiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwogICAgIFVOVVNFRF9QQVJBTSh4T2Zm
c2V0KTsKICAgICBVTlVTRURfUEFSQU0oeU9mZnNldCk7CiAjZWxzZQotICAgIGlmIChjb250ZXh0
LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRz
KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhD
b3JyZWN0U2hhZG93T2Zmc2V0cyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
V29yayBhcm91bmQgPHJkYXI6Ly9wcm9ibGVtLzU1MzkzODg+IGJ5IGVuc3VyaW5nIHRoYXQgdGhl
IG9mZnNldHMgd2lsbCBnZXQgdHJ1bmNhdGVkCkBAIC0xMDMwLDEwICsxMDMzLDU1IEBAIHN0YXRp
YyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhj
b25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBv
ZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNldENH
TGluZUNhcChDR0NvbnRleHRSZWYgY29udGV4dCwgTGluZUNhcCBjYXApCiB7Ci0gICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAg
c3dpdGNoIChjYXApIHsKKyAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6CisgICAgICAgIENHQ29udGV4
dFNldExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcEJ1dHQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIExpbmVDYXA6OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRl
eHQsIGtDR0xpbmVDYXBSb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUNhcDo6
U3F1YXJlOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBT
cXVhcmUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CiAKK3N0YXRpYyB2b2lkIHNldENHTGlu
ZUpvaW4oQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVKb2luIGpvaW4pCit7CisgICAgc3dpdGNo
IChqb2luKSB7CisgICAgY2FzZSBMaW5lSm9pbjo6TWl0ZXI6CisgICAgICAgIENHQ29udGV4dFNl
dExpbmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luTWl0ZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIExpbmVKb2luOjpSb3VuZDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29u
dGV4dCwga0NHTGluZUpvaW5Sb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUpv
aW46OkJldmVsOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5l
Sm9pbkJldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXRD
R01pdGVyTGltaXQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGZsb2F0IGxpbWl0KQoreworICAgIENH
Q29udGV4dFNldE1pdGVyTGltaXQoY29udGV4dCwgbGltaXQpOworfQorCitzdGF0aWMgdm9pZCBz
ZXRDR0xpbmVEYXNoKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRhc2hl
cywgZmxvYXQgZGFzaE9mZnNldCkKK3sKKyAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKKyAgICAg
ICAgZmxvYXQgbGVuZ3RoID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNo
ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGRhc2hlc1tpXSk7CisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICBkYXNoT2Zmc2V0
ID0gZm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOworICAgIH0KKyAgICBDR0NvbnRl
eHRTZXRMaW5lRGFzaChjb250ZXh0LCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMu
c2l6ZSgpKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQs
IGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykKK3sKICAgICBpZiAob2Zmc2V0LmlzWmVybygpICYmICFibHVyKSB7CiAgICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTA0NSw3ICsxMDkzLDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFk
b3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6
ZSYKICAgICBDR0Zsb2F0IHlPZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9hdCBi
bHVyUmFkaXVzID0gYmx1cjsKIAotICAgIGlmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkpIHsKKyAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAg
ICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RN
KGNvbnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJU
b0Jhc2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTEwNjYs
NyArMTExNCw4IEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgLy8gRXh0cmVtZSAiYmx1
ciIgdmFsdWVzIGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcg
dGltZXMsIHNvIGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5h
cnJvd1ByZWNpc2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0
V29ya2Fyb3VuZElmTmVlZGVkKGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7Cisg
ICAgaWYgKHJlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAg
ICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnRleHQsIHhPZmZzZXQs
IHlPZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMg
bWVhbnMgdGhhdCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBh
bmQgd2Ugc2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3Iu
CkBAIC0xMDc2LDQ0ICsxMTI1LDgxIEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgICAg
IENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQs
IHlPZmZzZXQpLCBibHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKS5nZXQoKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mg
ZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0g
ICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKCFzdGF0ZSgpLmNo
YW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBDR0NvbnRl
eHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCAw
LmYpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpOwogCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNo
YW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQs
IGNhY2hlZENHQ29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpLmdldCgpKTsKKyAgICBmb3IgKGF1dG8g
Y2hhbmdlIDogc3RhdGUoKS5jaGFuZ2VzKCkpIHsKKyAgICAgICAgc3dpdGNoIChjaGFuZ2UpIHsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE06CisgICAgICAg
ICAgICBDR0NvbnRleHRTZXRDVE0oY29udGV4dCwgc3RhdGUoKS5nZXRDVE0oKSk7CisgICAgICAg
ICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3Rh
dGUuZmlsbENvbG9yKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpGaWxsQnJ1c2g6CisgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZSgp
LmZpbGxCcnVzaCgpLmNvbG9yKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAg
Q0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgICAg
IENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZSgpLnN0cm9rZVRo
aWNrbmVzcygpLCAwLmYpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNv
bnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5n
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKLSAgICAgICAgc2V0
Q0dCbGVuZE1vZGUoY29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5k
TW9kZSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tl
QnJ1c2g6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250
ZXh0LCBjYWNoZWRDR0NvbG9yKHN0YXRlKCkuc3Ryb2tlQnJ1c2goKS5jb2xvcigpKS5nZXQoKSk7
CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0
VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3
aW5nTW9kZSkpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Okxp
bmVDYXA6CisgICAgICAgICAgICBzZXRDR0xpbmVDYXAoY29udGV4dCwgc3RhdGUoKS5saW5lQ2Fw
KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4
dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luOgorICAgICAg
ICAgICAgc2V0Q0dMaW5lSm9pbihjb250ZXh0LCBzdGF0ZSgpLmxpbmVKb2luKCkpOworICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxk
U21vb3RoRm9udHMoY29udGV4dCwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoOgorICAgICAgICAgICAg
c2V0Q0dMaW5lRGFzaChjb250ZXh0LCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0ZSgp
LmxpbmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4
dCwgY2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1p
dDoKKyAgICAgICAgICAgIHNldENHTWl0ZXJMaW1pdChjb250ZXh0LCBzdGF0ZSgpLm1pdGVyTGlt
aXQoKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKLSAgICAgICAgc2V0Q0dTaGFkb3coKnRo
aXMsIHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRv
d0NvbG9yKTsKLX0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpD
b21wb3NpdGVNb2RlOgorICAgICAgICAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgc3RhdGUo
KS5jb21wb3NpdGVNb2RlKCkub3BlcmF0aW9uLCBzdGF0ZSgpLmNvbXBvc2l0ZU1vZGUoKS5ibGVu
ZE1vZGUpOworICAgICAgICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNl
dE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChw
bGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkRyb3BTaGFkb3c6CisgICAgICAgICAgICBzZXRDR1NoYWRvdyhjb250ZXh0
LCByZW5kZXJpbmdNb2RlKCksIHN0YXRlKCkuZHJvcFNoYWRvdygpLm9mZnNldCwgc3RhdGUoKS5k
cm9wU2hhZG93KCkuYmx1clJhZGl1cywgc3RhdGUoKS5kcm9wU2hhZG93KCkuY29sb3IsIHN0YXRl
KCkuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkFscGhhOgorICAgICAgICAg
ICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgc3RhdGUoKS5hbHBoYSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eToKKyAgICAgICAgICAgIENHQ29udGV4dFNldEludGVy
cG9sYXRpb25RdWFsaXR5KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUoKS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlOgor
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERy
YXdpbmdNb2RlKHN0YXRlKCkudGV4dERyYXdpbmdNb2RlKCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50
aWFsaWFzOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQs
IHN0YXRlKCkuc2hvdWxkQW50aWFsaWFzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTbW9vdGhGb250czoK
KyAgICAgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRl
KCkuc2hvdWxkU21vb3RoRm9udHMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkaWRB
cHBseVN0YXRlQ2hhbmdlcygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByKQpAQCAtMTEyNSw3ICsxMjExLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVX
aWR0aCkKIHsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwog
Ci0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICBpZiAoc3Ryb2tlR3JhZGll
bnQoKSkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGZs
b2F0IGRvdWJsZUxpbmVXaWR0aCA9IGxpbmVXaWR0aCAqIDI7CiAgICAgICAgICAgICBmbG9hdCBh
ZGp1c3RlZFdpZHRoID0gY2VpbGYocmVjdC53aWR0aCgpICsgZG91YmxlTGluZVdpZHRoKTsKQEAg
LTExMzUsNyArMTIyMSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBhdXRvIGxh
eWVyID0gYWRvcHRDRihDR0xheWVyQ3JlYXRlV2l0aENvbnRleHQoY29udGV4dCwgbGF5ZXJTaXpl
LCAwKSk7CiAKICAgICAgICAgICAgIENHQ29udGV4dFJlZiBsYXllckNvbnRleHQgPSBDR0xheWVy
R2V0Q29udGV4dChsYXllci5nZXQoKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcyA9IGxpbmVXaWR0aDsKICAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChsYXll
ckNvbnRleHQsIGxpbmVXaWR0aCk7CiAKICAgICAgICAgICAgIC8vIENvbXBlbnNhdGUgZm9yIHRo
ZSBsaW5lIHdpZHRoLCBvdGhlcndpc2UgdGhlIGxheWVyJ3MgdG9wLWxlZnQgY29ybmVyIHdvdWxk
IGJlCkBAIC0xMTQ5LDggKzEyMzQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICAgICAg
Q0dDb250ZXh0QWRkUmVjdChsYXllckNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250
ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAg
IENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNh
dENUTShsYXllckNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7
Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQp
OworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgc3Ryb2tlU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludChsYXll
ckNvbnRleHQpOwogCiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkZXN0aW5hdGlvblggPSByb3Vu
ZGYocmVjdC54KCkgLSBsaW5lV2lkdGgpOwogICAgICAgICAgICAgY29uc3QgZmxvYXQgZGVzdGlu
YXRpb25ZID0gcm91bmRmKHJlY3QueSgpIC0gbGluZVdpZHRoKTsKQEAgLTExNjEsMTMgKzEyNDYs
MTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QoY29u
dGV4dCwgcmVjdCk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2Vk
UGF0aChjb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci0gICAg
ICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBh
aW50KCp0aGlzKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBzdHJv
a2VTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50
KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1f
c3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBh
cHBseVN0cm9rZVBhdHRlcm4oKTsKIAogICAgIC8vIFVzaW5nIENHQ29udGV4dEFkZFJlY3QgYW5k
IENHQ29udGV4dFN0cm9rZVBhdGggdG8gc3Ryb2tlIHJlY3QgcmF0aGVyIHRoYW4KQEAgLTExODIs
OTQgKzEyNjcsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENHQ29udGV4dFN0cm9rZVBhdGgo
Y29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXAoTGluZUNh
cCBjYXApCi17Ci0gICAgc3dpdGNoIChjYXApIHsKLSAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6Ci0g
ICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBC
dXR0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lQ2FwOjpSb3VuZDoKLSAgICAgICAg
Q0dDb250ZXh0U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFJvdW5kKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lQ2FwOjpTcXVhcmU6Ci0gICAgICAgIENHQ29u
dGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBTcXVhcmUpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGlm
IChkYXNoT2Zmc2V0IDwgMCkgewotICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGxl
bmd0aCArPSBzdGF0aWNfY2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKLSAgICAgICAgaWYgKGxlbmd0
aCkKLSAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBs
ZW5ndGg7Ci0gICAgfQotICAgIENHQ29udGV4dFNldExpbmVEYXNoKHBsYXRmb3JtQ29udGV4dCgp
LCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBzd2l0
Y2ggKGpvaW4pIHsKLSAgICBjYXNlIExpbmVKb2luOjpNaXRlcjoKLSAgICAgICAgQ0dDb250ZXh0
U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luTWl0ZXIpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIExpbmVKb2luOjpSb3VuZDoKLSAgICAgICAgQ0dDb250ZXh0U2V0
TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luUm91bmQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIExpbmVKb2luOjpCZXZlbDoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZUpvaW4ocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luQmV2ZWwpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKLXsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwot
ICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZh
bHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17
Ci0gICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7Ci0gICAg
bV9kYXRhLT5yb3RhdGUoYW5nbGUpOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zv
cm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENH
Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0ocGxhdGZvcm1Db250ZXh0KCksIHgsIHkpOwotICAgIG1fZGF0YS0+dHJhbnNsYXRlKHgsIHkp
OwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9
IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dDb250ZXh0Q29uY2F0Q1RNKHBsYXRm
b3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9y
bSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5
ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZvcm1D
b250ZXh0KCksIHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKLSAg
ICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxz
ZTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0oSW5jbHVk
ZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKLXsKLSAgICAvLyBUaGUgQ1RNIHVzdWFs
bHkgaW5jbHVkZXMgdGhlIGRldmljZVNjYWxlRmFjdG9yIGV4Y2VwdCBpbiBXZWJLaXQgMSB3aGVu
IHRoZQotICAgIC8vIGNvbnRlbnQgaXMgbm9uLWNvbXBvc2l0ZWQsIHNpbmNlIHRoZSBzY2FsZSBm
YWN0b3IgaXMgaW50ZWdyYXRlZCBhdCBhIGxvd2VyCi0gICAgLy8gbGV2ZWwuIFRvIGd1YXJhbnRl
ZSB0aGUgZGV2aWNlU2NhbGUgaXMgaW5jbHVkZWQsIHdlIGNhbiB1c2UgdGhpcyBDRyBBUEkuCi0g
ICAgaWYgKGluY2x1ZGVTY2FsZSA9PSBEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKQotICAg
ICAgICByZXR1cm4gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShw
bGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICByZXR1cm4gQ0dDb250ZXh0R2V0Q1RNKHBsYXRmb3Jt
Q29udGV4dCgpKTsKLX0KLQogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9k
ZSkKIHsKICAgICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGlu
IGRldmljZSBzcGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCkBAIC0xMjgwLDcgKzEyNzcs
OSBAQCBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZwogICAgIGlmIChtX2RhdGEtPm1fdXNlclRvRGV2
aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkpCiAgICAgICAgIHJldHVybiByb3VuZGVkSW50
UmVjdChyZWN0KTsKIAotICAgIENHQWZmaW5lVHJhbnNmb3JtIGRldmljZU1hdHJpeCA9IENHQ29u
dGV4dEdldFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxhdGZvcm1Db250ZXh0KCkp
OworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBD
R0FmZmluZVRyYW5zZm9ybSBkZXZpY2VNYXRyaXggPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0Rl
dmljZVNwYWNlVHJhbnNmb3JtKGNvbnRleHQpOwogICAgIGlmIChDR0FmZmluZVRyYW5zZm9ybUlz
SWRlbnRpdHkoZGV2aWNlTWF0cml4KSkgewogICAgICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNl
VHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSB0cnVlOwogICAgICAgICByZXR1cm4gcm91bmRl
ZEludFJlY3QocmVjdCk7CkBAIC0xMzE5LDYgKzEzMTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlj
a25lcwogICAgIGlmICghd2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBsb2NhbFN0
cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoRmxvYXRSZWN0KHBvaW50LCBG
bG9hdFNpemUod2lkdGhzLmxhc3QoKSwgdGhpY2tuZXNzKSksIHByaW50aW5nLCBsb2NhbFN0cm9r
ZUNvbG9yKTsKQEAgLTEzNjQsMTIgKzEzNjQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXMK
ICAgICB9CiAKICAgICBpZiAoZmlsbENvbG9ySXNOb3RFcXVhbFRvU3Ryb2tlQ29sb3IpCi0gICAg
ICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBsb2NhbFN0cm9rZUNvbG9yKTsK
KyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgbG9jYWxTdHJva2VDb2xvcik7CiAKLSAg
ICBDR0NvbnRleHRGaWxsUmVjdHMocGxhdGZvcm1Db250ZXh0KCksIGRhc2hCb3VuZHMuZGF0YSgp
LCBkYXNoQm91bmRzLnNpemUoKSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3RzKGNvbnRleHQsIGRh
c2hCb3VuZHMuZGF0YSgpLCBkYXNoQm91bmRzLnNpemUoKSk7CiAKICAgICBpZiAoZmlsbENvbG9y
SXNOb3RFcXVhbFRvU3Ryb2tlQ29sb3IpCi0gICAgICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3Jt
Q29udGV4dCgpLCBmaWxsQ29sb3IoKSk7CisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQs
IGZpbGxDb2xvcigpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkBAIC0xNDEyLDE3
ICsxNDEyLDE4IEBAIFJlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q0c6OnJlbmRlcmluZ01v
ZGUoKSBjb25zdAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKICAgICBHcmFwaGljc0NvbnRleHQ6OmFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICAvLyBDb3JlR3JhcGhpY3MgZXhwZWN0
cyB0aGUgYmFzZSBDVE0gb2YgYSBIaURQSSBjb250ZXh0IHRvIGhhdmUgdGhlIHNjYWxlIGZhY3Rv
ciBhcHBsaWVkIHRvIGl0LgogICAgIC8vIEZhaWxpbmcgdG8gY2hhbmdlIHRoZSBiYXNlIGxldmVs
IENUTSB3aWxsIGNhdXNlIGNlcnRhaW4gQ0cgZmVhdHVyZXMsIHN1Y2ggYXMgZm9jdXMgcmluZ3Ms
CiAgICAgLy8gdG8gZHJhdyB3aXRoIGEgc2NhbGUgZmFjdG9yIG9mIDEgcmF0aGVyIHRoYW4gdGhl
IGFjdHVhbCBzY2FsZSBmYWN0b3IuCi0gICAgQ0dDb250ZXh0U2V0QmFzZUNUTShwbGF0Zm9ybUNv
bnRleHQoKSwgQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKHBsYXRm
b3JtQ29udGV4dCgpKSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7Cisg
ICAgQ0dDb250ZXh0U2V0QmFzZUNUTShjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENH
Q29udGV4dEdldEJhc2VDVE0oY29udGV4dCksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2Fs
ZUZhY3RvcikpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7CiAgICAgLy8gQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJl
Y3Qgb25seSBzdXBwb3J0cyBzb2xpZCBjb2xvcnMuCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRp
ZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkgfHwg
ZmlsbFBhdHRlcm4oKSkgewogICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0MzQsNyArMTQzNSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQog
ewogICAgIC8vIENHQ29udGV4dFN0cm9rZUVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0cyBzb2xp
ZCBjb2xvcnMuCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgbV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuKSB7CisgICAgaWYgKHN0cm9rZUdyYWRpZW50KCkgfHwgc3Ryb2tlUGF0dGVybigp
KSB7CiAgICAgICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xNDY4LDkgKzE0NjksMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2kK
IAogYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6Y2FuVXNlU2hhZG93Qmx1cigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zOworICAgIHJldHVybiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoKTsKIH0KIAotfQogCi0jZW5kaWYKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCmluZGV4IDQ2OGE0NGJhYTg2ZWU1MjYxOWQyNTVmOTM5
NDNhOTc1NWJhYzlmYWIuLmY5OWMzZDliOWJkMjgyNTg2NWZkZjdlYTgwYjJhZjAwZTM0YjUyZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMTAsIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw1MyArMjUsMTMgQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpZiBVU0UoQ0cpCisKICNpbmNsdWRlICJDb2xvclNwYWNlQ0cuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DR0Fm
ZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZik7Ci0KLWNsYXNzIENH
Q29udGV4dFN0YXRlU2F2ZXIgewotcHVibGljOgotICAgIENHQ29udGV4dFN0YXRlU2F2ZXIoQ0dD
b250ZXh0UmVmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgICAgICA6
IG1fY29udGV4dChjb250ZXh0KQotICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJl
c3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAg
IENHQ29udGV4dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgfkNHQ29u
dGV4dFN0YXRlU2F2ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0g
ICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3Rv
cmUpOwotICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1f
c2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgcmVzdG9yZSgpCi0gICAg
ewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNl
OwotICAgIH0KLSAgICAKLSAgICBib29sIGRpZFNhdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fc2F2ZUFuZFJlc3RvcmU7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBDR0Nv
bnRleHRSZWYgbV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KIGNs
YXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVibGljIEdyYXBoaWNzQ29u
dGV4dCB7CiBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmKTsKQEAg
LTg1LDY5ICs0NSw0OCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBj
b25zdCBmaW5hbDsKICAgICBDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmlu
YWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsK
KyAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7CisgICAgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOwotICAgIHZvaWQgZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2
b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQoYm9vbCkgZmluYWw7CiAKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lk
IHJlc3RvcmUoKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAg
ICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBh
dHRlcm4oKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpIGZpbmFsOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5h
bDsKIAogICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFs
OwogCi0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdElt
cGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0KLSAgICB2b2lkIHNl
dElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0
KCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wp
IGZpbmFsOwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwor
ICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAg
ICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKICAgICB2b2lkIGNsaXAoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotCi0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLQogICAgIHZv
aWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZp
bmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CiAKLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lk
IHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxv
YXQpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYpIGZpbmFsOwogCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkg
ZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKyAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZv
aWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgdXNpbmcgR3JhcGhpY3NDb250
ZXh0OjpzY2FsZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAg
IHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBmaW5hbDsKLSAgICB2b2lkIHRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUg
PSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5h
bDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
JikgZmluYWw7CiAKLSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZp
bmFsOwpAQCAtMTU2LDE4ICs5NSwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKICNlbmRpZgogCi0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKIAorICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFs
OwogICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZvclJlY3Qo
Y29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIHNldERlc3Rp
bmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwog
CiAgICAgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsKIAotICAgIHZv
aWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisgICAgdm9pZCBzZXRVUkxGb3JS
ZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBzZXRE
ZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5Vc2VTaGFk
b3dCbHVyKCkgY29uc3Q7CiAKQEAgLTE3NSw5ICsxMTcsMTYgQEAgcHVibGljOgogICAgIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29u
c3QgZmluYWw7CiAjZW5kaWYKIAorICAgIENHQ29udGV4dFJlZiBpbnRlcm5hbFBsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSogbV9kYXRhIHsgbnVsbHB0ciB9OwogfTsKIAotfQorQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0
VXNlclRvQmFzZUNUTShDR0NvbnRleHRSZWYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNpbmNsdWRlICJDR0NvbnRleHRTdGF0ZVNhdmVyLmgiCiAKKyNlbmRpZiAvLyBVU0UoQ0cpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3Vt
ZW50SW1hZ2UuY3BwCmluZGV4IGU2Y2UyZmI5NzI0N2E2Yjg2YzA5YjFhZDM2MTcwMWMyZWMzZTg2
MjUuLmFmMDBhMDEzMzQ3ZTBjZDg1YTMwYjg4NGViYzc5ZjMyZjFlMjMxMmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgYm9vbCBQREZEb2N1bWVudEltYWdlOjpjYWNoZVBh
cmFtZXRlcnNNYXRjaChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2EKIAogICAg
IC8vIE9sZCBhbmQgbmV3IGNvbnRleHQgc2NhbGluZyBmYWN0b3JzIGhhdmUgdG8gbWF0Y2ggYXMg
d2VsbC4KICAgICBBZmZpbmVUcmFuc2Zvcm06OkRlY29tcG9zZWRUeXBlIGRlY29tcG9zZWRUcmFu
c2Zvcm07Ci0gICAgY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5j
bHVkZURldmljZVNjYWxlKS5kZWNvbXBvc2UoZGVjb21wb3NlZFRyYW5zZm9ybSk7CisgICAgY29u
dGV4dC5nZXRDVE0oKS5kZWNvbXBvc2UoZGVjb21wb3NlZFRyYW5zZm9ybSk7CiAKICAgICBBZmZp
bmVUcmFuc2Zvcm06OkRlY29tcG9zZWRUeXBlIGNhY2hlZERlY29tcG9zZWRUcmFuc2Zvcm07CiAg
ICAgbV9jYWNoZWRUcmFuc2Zvcm0uZGVjb21wb3NlKGNhY2hlZERlY29tcG9zZWRUcmFuc2Zvcm0p
OwpAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVk
SW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgdHJhbnNm
b3JtQ29udGV4dEZvclBhaW50aW5nKGJ1ZmZlckNvbnRleHQsIGRzdFJlY3QsIEZsb2F0UmVjdCht
X2NhY2hlZEltYWdlUmVjdC5sb2NhdGlvbigpLCBzcmNSZWN0LnNpemUoKSkpOwogICAgIGRyYXdQ
REZQYWdlKGJ1ZmZlckNvbnRleHQpOwogCi0gICAgbV9jYWNoZWRUcmFuc2Zvcm0gPSBjb250ZXh0
LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwor
ICAgIG1fY2FjaGVkVHJhbnNmb3JtID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBtX2NhY2hlZERl
c3RpbmF0aW9uUmVjdCA9IGRzdFJlY3Q7CiAgICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0gc3JjUmVj
dDsKICAgICArK21fY2FjaGluZ0NvdW50Rm9yVGVzdGluZzsKQEAgLTM2Myw2ICszNjMsOCBAQCB2
b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKIAogICAgIGNvbnRleHQudHJhbnNsYXRlKC1tX2Nyb3BCb3gubG9jYXRpb24oKSk7CiAKKyAg
ICBjb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKICAgICAvLyBDR1BERiBwYWdlcyBhcmUg
aW5kZXhlZCBmcm9tIDEuCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgQ0dDb250ZXh0RHJhd1BE
RlBhZ2VXaXRoQW5ub3RhdGlvbnMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dQREZEb2N1
bWVudEdldFBhZ2UobV9kb2N1bWVudC5nZXQoKSwgMSksIG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKaW5kZXggZDY4OWE1MWE4OTEw
MmE1MDkwNDU1OWI0NDIyMzY5ZGUxNDcwMzMzNS4uZmRlZWY2YjM4ZDBjNWI1NTU2NzM3ZWI3ZjQ0
YWYyZjJmYzlhNDQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0aENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXRoQ0cuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MK
ICAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgc3Ry
b2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBib29sIGhpdFN1Y2Nlc3Mg
PSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9r
ZSk7CisgICAgYm9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoZ3Jh
cGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwga0NHUGF0aFN0cm9rZSk7CiAg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIAogICAgIHJldHVybiBoaXRTdWNj
ZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4
IGVmYmMxZTQ5NTQ0MWJlZGU3MzRlOTQ4ZGQyNmQzNzE0NDE2NTUzZTAuLmU5YjdhYzRkN2Y0Y2Jm
NzQxMjg5MzliZmE4YzA0ZTc2NWEwZGJkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhz
UmVjb3JkZXJDb3JlVGV4dC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRHJhd0dseXBoc1JlY29yZGVyLmgiCiAKLSNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2lu
Y2x1ZGUgIkZvbnQuaCIKQEAgLTM1LDQ5ICszNCw0MSBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgotCiAjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRl
eHRTUElXaW4uaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBDR0Nv
bnRleHREZWxlZ2F0ZVJlZiBiZWdpbkxheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRl
LCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3Qg
cmVjdCwgQ0ZEaWN0aW9uYXJ5UmVmLCBDR0NvbnRleHREZWxlZ2F0ZVJlZikKK3N0YXRpYyBDR0Nv
bnRleHREZWxlZ2F0ZVJlZiBiZWdpbkxheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRl
LCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCwgQ0ZEaWN0
aW9uYXJ5UmVmLCBDR0NvbnRleHREZWxlZ2F0ZVJlZikKIHsKICAgICBEcmF3R2x5cGhzUmVjb3Jk
ZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4
dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29yZEJlZ2luTGF5
ZXIocnN0YXRlLCBnc3RhdGUsIHJlY3QpOworICAgIHJlY29yZGVyLnJlY29yZEJlZ2luTGF5ZXIo
Z3N0YXRlKTsKICAgICByZXR1cm4gZGVsZWdhdGU7CiB9CiAKLXN0YXRpYyBDR0NvbnRleHREZWxl
Z2F0ZVJlZiBlbmRMYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJp
bmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSkKK3N0YXRpYyBDR0NvbnRleHRE
ZWxlZ2F0ZVJlZiBlbmRMYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQogewogICAgIERyYXdHbHlwaHNSZWNv
cmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250
ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRW5kTGF5
ZXIocnN0YXRlLCBnc3RhdGUpOworICAgIHJlY29yZGVyLnJlY29yZEVuZExheWVyKGdzdGF0ZSk7
CiAgICAgcmV0dXJuIGRlbGVnYXRlOwogfQogCi1zdGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENH
Q29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwg
Q0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSogdG0sIGNvbnN0IENH
R2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkK
K3N0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUs
IENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVU
cmFuc2Zvcm0qLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9u
c1tdLCBzaXplX3QgY291bnQpCiB7Ci0gICAgaWYgKENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSA+
IDApIHsKLSAgICAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2Fz
dDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUp
KTsKLSAgICAgICAgcmVjb3JkZXIucmVjb3JkRHJhd0dseXBocyhyc3RhdGUsIGdzdGF0ZSwgdG0s
IGdseXBocywgcG9zaXRpb25zLCBjb3VudCk7Ci0gICAgfQorICAgIERyYXdHbHlwaHNSZWNvcmRl
ciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0
RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7CisgICAgcmVjb3JkZXIucmVjb3JkRHJhd0dseXBo
cyhnc3RhdGUsIGdseXBocywgcG9zaXRpb25zLCBjb3VudCk7CiAgICAgcmV0dXJuIGtDR0Vycm9y
U3VjY2VzczsKIH0KIAotc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERlbGVnYXRl
UmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0
YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJlZiBpbWFnZSkKK3N0YXRpYyBDR0Vycm9yIGRyYXdJ
bWFnZShDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJlZiBpbWFnZSkKIHsKICAg
ICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNS
ZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29y
ZGVyLnJlY29yZERyYXdJbWFnZShyc3RhdGUsIGdzdGF0ZSwgcmVjdCwgaW1hZ2UpOworICAgIHJl
Y29yZGVyLnJlY29yZERyYXdJbWFnZShnc3RhdGUsIHJlY3QsIGltYWdlKTsKICAgICByZXR1cm4g
a0NHRXJyb3JTdWNjZXNzOwogfQogCi1VbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBEcmF3R2x5
cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCitzdGF0aWMgVW5pcXVlUmVmPEdy
YXBoaWNzQ29udGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KERyYXdHbHlwaHNSZWNvcmRlciYg
cmVjb3JkZXIpCiB7Ci0gICAgYXV0byBjb250ZXh0RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4
dERlbGVnYXRlQ3JlYXRlKHRoaXMpKTsKKyAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0
Q0YoQ0dDb250ZXh0RGVsZWdhdGVDcmVhdGUoJnJlY29yZGVyKSk7CiAgICAgQ0dDb250ZXh0RGVs
ZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlQmVnaW5MYXllciwgcmVp
bnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmYmVnaW5MYXllcikpOwog
ICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBk
ZUVuZExheWVyLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZl
bmRMYXllcikpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVn
YXRlLmdldCgpLCBkZURyYXdHbHlwaHMsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdh
dGVDYWxsYmFjaz4oJldlYkNvcmU6OmRyYXdHbHlwaHMpKTsKQEAgLTg2LDY3ICs3NywxNSBAQCBV
bmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVy
bmFsQ29udGV4dCgpCiAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0Q0c+
KGNvbnRleHQuZ2V0KCkpOwogfQogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNv
cmRlcihHcmFwaGljc0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25z
dHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQgZGVyaXZlRm9udEZyb21Db250
ZXh0KQotICAgIDogbV9vd25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBo
c1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVj
dERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQg
ZGVyaXZlRm9udEZyb21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQoZGVzdGlu
YXRpb25Db250ZXh0KQogICAgICwgbV9kZWNvbnN0cnVjdERyYXdHbHlwaHMoZGVjb25zdHJ1Y3RE
cmF3R2x5cGhzKQogICAgICwgbV9kZXJpdmVGb250RnJvbUNvbnRleHQoZGVyaXZlRm9udEZyb21D
b250ZXh0KQotICAgICwgbV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50ZXJuYWxDb250ZXh0KCkp
CisgICAgLCBtX2ludGVybmFsQ29udGV4dChjcmVhdGVJbnRlcm5hbENvbnRleHQoKnRoaXMpKQog
ewogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCi17Ci0gICAgbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5maWxsQ29sb3I7Ci0gICAgbV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGll
bnQ7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3Jt
ID0gY29udGV4dFN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fb3JpZ2lu
YWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5maWxsUGF0dGVybjsKLQot
ICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5zdHJv
a2VDb2xvcjsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQgPSBjb250
ZXh0U3RhdGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybTsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybiA9IGNv
bnRleHRTdGF0ZS5zdHJva2VQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5hbFN0YXRlLmN0bSA9IG1f
b3duZXIuZ2V0Q1RNKCk7IC8vIEZJWE1FOiBEZWFsIHdpdGggYmFzZSBDVE0uCi0KLSAgICBtX29y
aWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCA9IGNvbnRleHRTdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0g
ICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyID0gY29udGV4dFN0YXRlLnNoYWRvd0JsdXI7
Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciA9IGNvbnRleHRTdGF0ZS5zaGFkb3dD
b2xvcjsKLSAgICBtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPSBjb250
ZXh0U3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0KLSAgICBtX2N1cnJlbnRTdGF0ZSA9
IG1fb3JpZ2luYWxTdGF0ZTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRl
SW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUp
Ci17Ci0gICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IuaXNWYWxpZCgpKQot
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5m
aWxsU3R5bGUuY29sb3IpOwotICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUu
Z3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoKm1f
b3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5
bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVCht
X29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQt
PnNldEZpbGxQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwotICAg
IH0KLQotICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IuaXNWYWxpZCgp
KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ry
b2tlU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VH
cmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFs
U3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7Ci0gICAg
ICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybikKLSAgICAgICAgICAg
IG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ry
b2tlU3R5bGUucGF0dGVybik7Ci0gICAgfQotCi0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldENU
TShtX29yaWdpbmFsU3RhdGUuY3RtKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9y
bXMpOwotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNo
YWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRl
LnNoYWRvdy5jb2xvciwgY29udGV4dFN0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwotCi0gICAgbV9p
bnRlcm5hbENvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdp
bmdNb2RlKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENv
bnRleHQoY29uc3QgRm9udCYgZm9udCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
K3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYgZm9u
dCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBBU1NFUlQoQ0dBZmZp
bmVUcmFuc2Zvcm1Jc0lkZW50aXR5KENURm9udEdldE1hdHJpeChmb250LnBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpKSkpOwogCkBAIC0xNTYsMTA0ICs5NSwzOCBAQCB2b2lkIERyYXdHbHlwaHNSZWNv
cmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBmb250LCBGb250U21vb3Ro
aW5nTQogICAgIG1fb3JpZ2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4
KGZvbnQpOwogICAgIGlmIChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9u
dE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkKICAgICAgICAgbV9vcmlnaW5hbFRleHRNYXRyaXggPSBj
b21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIG1fb3JpZ2luYWxUZXh0TWF0cml4KTsKLQot
ICAgIGF1dG8mIGNvbnRleHRTdGF0ZSA9IG1fb3duZXIuc3RhdGUoKTsKLSAgICBwb3B1bGF0ZUlu
dGVybmFsU3RhdGUoY29udGV4dFN0YXRlKTsKLSAgICBwb3B1bGF0ZUludGVybmFsQ29udGV4dChj
b250ZXh0U3RhdGUpOwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6Y29uY2x1ZGVJbnRl
cm5hbENvbnRleHQoKQorR3JhcGhpY3NDb250ZXh0U3RhdGUgRHJhd0dseXBoc1JlY29yZGVyOjpw
cmVwYXJlSW50ZXJuYWxDb250ZXh0KCkKIHsKLSAgICB1cGRhdGVDVE0obV9vcmlnaW5hbFN0YXRl
LmN0bSk7Ci0gICAgdXBkYXRlRmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29s
b3IsIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQuZ2V0KCksIG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUucGF0dGVybi5nZXQoKSk7Ci0gICAgdXBkYXRlU3Ryb2tlQ29sb3IobV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5
bGUuZ3JhZGllbnQuZ2V0KCksIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuLmdl
dCgpKTsKLSAgICB1cGRhdGVTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciwg
bV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID8gU2hhZG93c0lnbm9yZVRy
YW5zZm9ybXM6OlllcyA6IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpObyk7CisgICAgYXV0byBv
cmlnaW5hbFN0YXRlID0gbV9kZXN0aW5hdGlvbkNvbnRleHQuc3RhdGUoKTsKKyAgICBtX2ludGVy
bmFsQ29udGV4dC0+bWVyZ2VTdGF0ZURpZmZzKG9yaWdpbmFsU3RhdGUpOworICAgIG1faW50ZXJu
YWxDb250ZXh0LT5hcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJldHVybiBvcmlnaW5hbFN0YXRl
OwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlRmlsbENvbG9yKGNvbnN0IENv
bG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJuKiBuZXdQYXR0ZXJu
KQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9yaWdpbmFsU3RhdGUpCiB7Ci0gICAgLy8gVGhpcyBj
aGVjayBsb29rcyB3cm9uZyBidXQgaXQgYWN0dWFsbHkgaXNuJ3QsIGZvciBvdXIgbGltaXRlZCB1
c2UuCi0gICAgLy8gQ1Qgd2lsbCBvbmx5IGV2ZXIgc2V0IHRoaXMgdG8gYSBzb2xpZCBjb2xvciwg
d2hpY2ggdGhpcyBpcyB0aGUgY29ycmVjdCBjaGVjayBmb3IuCi0gICAgLy8gSW4gY29uY2x1ZGVJ
bnRlcm5hbENvbnRleHQoKSB3ZSBzZXQgaXQgYmFjayB0byB3aGF0IGl0IHdhcyBvcmlnaW5hbGx5
LCB3aGljaCB0aGlzIGNoZWNrIHdvcmtzIGNvcnJlY3RseSBmb3IgdG9vLgotICAgIGlmIChuZXdD
b2xvciA9PSBtX2N1cnJlbnRTdGF0ZS5maWxsU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLmZpbGxD
b2xvciA9IG5ld0NvbG9yOwotICAgIGlmIChuZXdHcmFkaWVudCkKLSAgICAgICAgbmV3U3RhdGUu
ZmlsbEdyYWRpZW50ID0gbmV3R3JhZGllbnQ7Ci0gICAgaWYgKG5ld1BhdHRlcm4pCi0gICAgICAg
IG5ld1N0YXRlLmZpbGxQYXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0
ZVN0YXRlKG5ld1N0YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2Ug
fSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuZmlsbFN0eWxlLmNvbG9yID0gbmV3Q29sb3I7CisgICAg
bV9kZXN0aW5hdGlvbkNvbnRleHQubWVyZ2VTdGF0ZURpZmZzKG9yaWdpbmFsU3RhdGUpOwogfQog
Ci12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3Im
IG5ld0NvbG9yLCBHcmFkaWVudCogbmV3R3JhZGllbnQsIFBhdHRlcm4qIG5ld1BhdHRlcm4pCit2
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkQmVnaW5MYXllcihDR0dTdGF0ZVJlZiBnc3Rh
dGUpCiB7Ci0gICAgLy8gVGhpcyBjaGVjayBsb29rcyB3cm9uZyBidXQgaXQgYWN0dWFsbHkgaXNu
J3QsIGZvciBvdXIgbGltaXRlZCB1c2UuCi0gICAgLy8gQ1Qgd2lsbCBvbmx5IGV2ZXIgc2V0IHRo
aXMgdG8gYSBzb2xpZCBjb2xvciwgd2hpY2ggdGhpcyBpcyB0aGUgY29ycmVjdCBjaGVjayBmb3Iu
Ci0gICAgLy8gSW4gY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKSB3ZSBzZXQgaXQgYmFjayB0byB3
aGF0IGl0IHdhcyBvcmlnaW5hbGx5LCB3aGljaCB0aGlzIGNoZWNrIHdvcmtzIGNvcnJlY3RseSBm
b3IgdG9vLgotICAgIGlmIChuZXdDb2xvciA9PSBtX2N1cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5j
b2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3U3Rh
dGU7Ci0gICAgbmV3U3RhdGUuc3Ryb2tlQ29sb3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3Jh
ZGllbnQpCi0gICAgICAgIG5ld1N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbmV3R3JhZGllbnQ7Ci0g
ICAgaWYgKG5ld1BhdHRlcm4pCi0gICAgICAgIG5ld1N0YXRlLnN0cm9rZVBhdHRlcm4gPSBuZXdQ
YXR0ZXJuOwotICAgIG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlIH0pOwotICAgIG1fY3VycmVudFN0YXRlLnN0
cm9rZVN0eWxlLmNvbG9yID0gbmV3Q29sb3I7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0
Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5i
ZWdpblRyYW5zcGFyZW5jeUxheWVyKENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSk7CiB9CiAKLXZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBj
dG0pCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIoQ0dHU3RhdGVSZWYg
Z3N0YXRlKQogewotICAgIGlmIChjdG0gPT0gbV9jdXJyZW50U3RhdGUuY3RtKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX293bmVyLnNldENUTShjdG0pOwotICAgIG1fY3VycmVudFN0YXRlLmN0
bSA9IGN0bTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RN
KGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CiB9CiAKLXN0YXRpYyBib29sIHNoYWRvd0lzQ2xlYXJlZChjb25zdCBGbG9hdFNpemUmIHNo
YWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1cikKLXsKLSAgICByZXR1cm4gc2hhZG93T2Zmc2V0
ID09IEZsb2F0U2l6ZSgpICYmICFzaGFkb3dCbHVyOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNv
cmRlcjo6dXBkYXRlU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBz
aGFkb3dCbHVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotewotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
Y29uc2lkZXIgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgaWYgbm9ib2R5IGhhcyBhbnkgc2hhZG93
cy4KLSAgICBpZiAoc2hhZG93SXNDbGVhcmVkKHNoYWRvd09mZnNldCwgc2hhZG93Qmx1cikgJiYg
c2hhZG93SXNDbGVhcmVkKG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fY3VycmVudFN0
YXRlLnNoYWRvdy5ibHVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0
U3RhdGUgbmV3U3RhdGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3Mgc3RhdGVDaGFuZ2VGbGFnczsKLQotICAgIGlmIChzaGFkb3dPZmZzZXQgIT0gbV9jdXJyZW50
U3RhdGUuc2hhZG93Lm9mZnNldCB8fCBzaGFkb3dCbHVyICE9IG1fY3VycmVudFN0YXRlLnNoYWRv
dy5ibHVyIHx8IHNoYWRvd0NvbG9yICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5jb2xvcikgewot
ICAgICAgICBuZXdTdGF0ZS5zaGFkb3dPZmZzZXQgPSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgIG5l
d1N0YXRlLnNoYWRvd0JsdXIgPSBzaGFkb3dCbHVyOwotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dD
b2xvciA9IHNoYWRvd0NvbG9yOwotICAgICAgICBzdGF0ZUNoYW5nZUZsYWdzLmFkZChHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKLSAgICB9Ci0gICAgaWYgKHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zICE9IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpVbnNwZWNpZmllZCAmJiAo
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Olllcykg
IT0gbV9jdXJyZW50U3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgbmV3
U3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMg
PT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Olllcyk7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxh
Z3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5n
ZSk7Ci0gICAgfQotICAgIGlmIChzdGF0ZUNoYW5nZUZsYWdzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHN0YXRlQ2hhbmdl
RmxhZ3MpOwotCi0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCA9IHNoYWRvd09mZnNl
dDsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuYmx1ciA9IHNoYWRvd0JsdXI7Ci0gICAgbV9j
dXJyZW50U3RhdGUuc2hhZG93LmNvbG9yID0gc2hhZG93Q29sb3I7Ci0gICAgbV9jdXJyZW50U3Rh
dGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPSAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPT0g
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Olllcyk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjp1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZiBzdHlsZSkKK3N0YXRpYyB2b2lkIHNldERyb3BT
aGFkb3coR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIENHU3R5bGVSZWYgc3R5
bGUpCiB7CiAgICAgaWYgKENHU3R5bGVHZXRUeXBlKHN0eWxlKSAhPSBrQ0dTdHlsZVNoYWRvdykg
ewogICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBtb3JlIGtpbmRzIG9mIENHU3R5bGVzLgotICAg
ICAgICB1cGRhdGVTaGFkb3coezAsIDB9LCAwLCBDb2xvcigpLCBTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtczo6VW5zcGVjaWZpZWQpOworICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuY2xlYXJTaGFk
b3coKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjYxLDIwICsxMzQsOSBAQCB2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUpCiAgICAg
YXV0byByYWQgPSBkZWcycmFkKHNoYWRvd1N0eWxlLmF6aW11dGggLSAxODApOwogICAgIGF1dG8g
c2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHN0ZDo6Y29zKHJhZCksIHN0ZDo6c2luKHJhZCkpICog
c2hhZG93U3R5bGUuaGVpZ2h0OwogICAgIGF1dG8gc2hhZG93Q29sb3IgPSBDR1N0eWxlR2V0Q29s
b3Ioc3R5bGUpOwotICAgIHVwZGF0ZVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1N0eWxlLnJh
ZGl1cywgQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzaGFkb3dDb2xvciksIFNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6cmVjb3JkQmVnaW5MYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3Rh
dGUsIENHUmVjdCkKLXsKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwot
ICAgIGF1dG8gYWxwaGEgPSBDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSk7Ci0gICAgbV9vd25lci5i
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGFscGhhKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnJlY29yZEVuZExheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0
ZSkKLXsKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIG1fb3du
ZXIuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0RHJv
cFNoYWRvdyh7IHNoYWRvd09mZnNldCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNoYWRvd1N0eWxlLnJh
ZGl1cyksIENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3IpIH0p
OworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVl
KTsKIH0KIAogc3RhdGljIFZlY3RvcjxDR1NpemU+IGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlv
bnMoY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50LCBjb25zdCBDR0FmZmlu
ZVRyYW5zZm9ybSYgdGV4dE1hdHJpeCkKQEAgLTI5MCwxOCArMTUyLDE4IEBAIHN0YXRpYyBWZWN0
b3I8Q0dTaXplPiBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9z
aXRpb25zW10sIHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYg
Z3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5cGggZ2x5cGhzW10s
IGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKK3ZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dH
bHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQog
ewogICAgIEFTU0VSVF9JTVBMSUVTKG1fZGVyaXZlRm9udEZyb21Db250ZXh0ID09IERlcml2ZUZv
bnRGcm9tQ29udGV4dDo6Tm8sIG1fb3JpZ2luYWxGb250KTsKIAotICAgIGlmICghY291bnQpCisg
ICAgaWYgKCFjb3VudCB8fCBDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkgPD0gMCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgQ0dGb250UmVmIHVzZWRGb250ID0gQ0dHU3RhdGVHZXRGb250KGdzdGF0
ZSk7CiAgICAgaWYgKG1fZGVyaXZlRm9udEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29u
dGV4dDo6Tm8gJiYgdXNlZEZvbnQgIT0gYWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KG1f
b3JpZ2luYWxGb250LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbnVsbHB0cikpLmdldCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkp
OworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRl
KSk7CiAKICAgICAvLyBXZSB3YW50IHRoZSByZXBsYXllcidzIENUTSBhbmQgdGV4dCBtYXRyaXgg
dG8gbWF0Y2ggdGhlIGN1cnJlbnQgQ1RNIGFuZCB0ZXh0IG1hdHJpeC4KICAgICAvLyBUaGUgY3Vy
cmVudCB0ZXh0IG1hdHJpeCBpcyBhIGNvbmNhdGVuYXRpb24gb2Ygd2hhdGV2ZXIgV2ViS2l0IHNl
dHMgaXQgdG8gYW5kIHdoYXRldmVyCkBAIC0zMjQsMTMgKzE4NiwxNiBAQCB2b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0
ZVJlZiBnc3RhdAogICAgICAgICBpbnZlcnNlQ1RNRml4dXAgPSBpbnZlcnNlLnZhbHVlKCk7CiAg
ICAgZWxzZQogICAgICAgICBjdG1GaXh1cCA9IEFmZmluZVRyYW5zZm9ybSgpOwotICAgIG1fb3du
ZXIuY29uY2F0Q1RNKGN0bUZpeHVwKTsKKworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmNvbmNh
dENUTShjdG1GaXh1cCk7CiAKICAgICBhdXRvIGZpbGxDb2xvciA9IENHR1N0YXRlR2V0RmlsbENv
bG9yKGdzdGF0ZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9y
OjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2UoZmlsbENvbG9yKSk7CisKICAgICBhdXRvIHN0
cm9rZUNvbG9yID0gQ0dHU3RhdGVHZXRTdHJva2VDb2xvcihnc3RhdGUpOwotICAgIHVwZGF0ZUZp
bGxDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikpOwot
ICAgIHVwZGF0ZVN0cm9rZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uo
c3Ryb2tlQ29sb3IpKTsKLSAgICB1cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUp
KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRl
QW5kUHJlc2VydmVDb2xvclNwYWNlKHN0cm9rZUNvbG9yKSk7CisKKyAgICBzZXREcm9wU2hhZG93
KG1fZGVzdGluYXRpb25Db250ZXh0LCBDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOwogCiAgICAg
YXV0byBmb250U2l6ZSA9IENHR1N0YXRlR2V0Rm9udFNpemUoZ3N0YXRlKTsKICAgICBSZWYgZm9u
dCA9IG1fZGVyaXZlRm9udEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29udGV4dDo6Tm8g
PyAqbV9vcmlnaW5hbEZvbnQgOiBGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShhZG9wdENG
KENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQodXNlZEZvbnQsIGZvbnRTaXplLCBudWxscHRy
LCBudWxscHRyKSksIGZvbnRTaXplKSk7CkBAIC0zNDUsMzAgKzIxMCwzOCBAQCB2b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dT
dGF0ZVJlZiBnc3RhdAogICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIz
MjkxNz4gKGBEcmF3R2x5cGhzUmVjb3JkZXJgIHNob3VsZCBiZSBhYmxlIHRvIHJlY29yZCtyZXBs
YXkgdmVydGljYWwgdGV4dCkKICAgICB9CiAKLSAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNo
ZUZvbnQoZm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9u
cywgY291bnQsIHRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIHRleHRNYXRyaXgubWFwUG9pbnQo
cG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKLQotICAgIG1fb3duZXIuY29uY2F0Q1RN
KGludmVyc2VDVE1GaXh1cCk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0Fu
ZENhY2hlRm9udChmb250LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9z
aXRpb25zLCBjb3VudCwgdGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgdGV4dE1hdHJpeC5tYXBQ
b2ludChwb3NpdGlvbnNbMF0pLCBtX3Ntb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25D
b250ZXh0LmNvbmNhdENUTShpbnZlcnNlQ1RNRml4dXApOwogfQogCi12b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVm
IGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgY2dJbWFnZSkKK3ZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVj
dCwgQ0dJbWFnZVJlZiBjZ0ltYWdlKQogewotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0o
Z3N0YXRlKSk7Ci0gICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7Cisg
ICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsK
KyAgICBzZXREcm9wU2hhZG93KG1fZGVzdGluYXRpb25Db250ZXh0LCBDR0dTdGF0ZUdldFN0eWxl
KGdzdGF0ZSkpOwogCiAgICAgLy8gQ29yZSBHcmFwaGljcyBhc3N1bWVzIGEgInkgdXAiIGNvb3Jk
aW5hdGUgc3lzdGVtLCBidXQgaW4gV2ViS2l0LCB3ZSB1c2UgYSAieS1kb3duIiBjb29yZGluYXRl
IHN5c3RlbS4KICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgV2ViS2l0J3MgZHJhd2luZyByb3V0aW5l
cyAoR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoKSkgaW50ZW50aW9uYWxseSBkcmF3IGltYWdl
cyB1cHNpZGUtZG93biBmcm9tIENvcmUgR3JhcGhpY3MncyBwb2ludCBvZiB2aWV3LgogICAgIC8v
IChUaGVyZSdzIGEgeS1mbGlwIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UoKS4pCiAgICAgLy8gVGhlIHJlY3QgaGFzIHRoZSByaWdodCBib3Vu
ZHMsIGJ1dCB3ZSBuZWVkIHRvIHRyYW5zZm9ybSBmcm9tIENHJ3MgY29vcmRpbmF0ZSBzeXN0ZW0g
dG8gV2ViS2l0J3MgYnkgcGVyZm9ybWluZyBvdXIgb3duIHktZmxpcCBzbyBpbWFnZXMgYXJlIGRy
YXduIHRoZSByaWdodC1zaWRlLXVwLgogICAgIC8vIFdlIGRvIHRoaXMgYXQgdGhlIGJvdW5kYXJ5
IGJldHdlZW4gdGhlIHR3byBBUElzLCB3aGljaCBpcyByaWdodCBoZXJlLgotICAgIG1fb3duZXIu
dHJhbnNsYXRlKDAsIHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSk7Ci0gICAg
bV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLQorICAgIG1fZGVzdGluYXRpb25Db250
ZXh0LnRyYW5zbGF0ZSgwLCByZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpOwor
ICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIAog
ICAgIGF1dG8gaW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAgIG1fb3du
ZXIuZHJhd05hdGl2ZUltYWdlKCppbWFnZSwgaW1hZ2UtPnNpemUoKSwgRmxvYXRSZWN0KHJlY3Qp
LCBGbG9hdFJlY3Qge3sgfSwgaW1hZ2UtPnNpemUoKX0sIEltYWdlUGFpbnRpbmdPcHRpb25zIHsg
SW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKLQorICAgIG1fZGVzdGluYXRpb25D
b250ZXh0LmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5zaXplKCksIEZsb2F0UmVjdChy
ZWN0KSwgRmxvYXRSZWN0IHsgeyB9LCBpbWFnZS0+c2l6ZSgpIH0sIEltYWdlUGFpbnRpbmdPcHRp
b25zIHsgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKKyAgICAKICAgICAvLyBV
bmRvIHRoZSBhYm92ZSB5LWZsaXAgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4KLSAgICBtX293bmVy
LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIG1fb3duZXIudHJhbnNsYXRlKDAsIC0ocmVj
dC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KSk7CisgICAgbV9kZXN0aW5hdGlvbkNv
bnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQu
dHJhbnNsYXRlKDAsIC0ocmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KSk7Cit9
CisKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAgc2V0SW50
ZXJuYWxGb250KGZvbnQsIHNtb290aGluZ01vZGUpOworICAgIAorICAgIGF1dG8gb3JpZ2luYWxT
dGF0ZSA9IHByZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKKyAgICBGb250Q2FzY2FkZTo6ZHJhd0ds
eXBocyhtX2ludGVybmFsQ29udGV4dCwgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICByZXN0b3JlRGVzdGluYXRpb25Db250
ZXh0KG9yaWdpbmFsU3RhdGUpOwogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09U
U1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQpAQCAtMzc5LDI1ICsyNTIsMTkgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdP
VFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKgogICAgICAg
ICBhdXRvIGJvdW5kcyA9IGZvbnQuYm91bmRzRm9yR2x5cGgoZ2x5cGhzW2ldKTsKIAogICAgICAg
ICAvLyBDcmVhdGUgYSBsb2NhbCBJbWFnZUJ1ZmZlciBiZWNhdXNlIGRlY29kaW5nIHRoZSBTVkcg
Zm9udHMgaGFzIHRvIGhhcHBlbiBpbiBXZWJQcm9jZXNzLgotICAgICAgICBpZiAoYXV0byBpbWFn
ZUJ1ZmZlciA9IG1fb3duZXIuY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGJvdW5kcywgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFJlbmRlcmluZ01ldGhvZDo6TG9jYWwpKSB7CisgICAg
ICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9kZXN0aW5hdGlvbkNvbnRleHQuY3JlYXRlQWxp
Z25lZEltYWdlQnVmZmVyKGJvdW5kcywgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFJl
bmRlcmluZ01ldGhvZDo6TG9jYWwpKSB7CisgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4
dCgpLmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgICAgICAgICBGb250Q2FzY2FkZTo6ZHJhd0ds
eXBocyhpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLCBmb250LCBnbHlwaHMgKyBpLCBhZHZhbmNlcyAr
IGksIDEsIEZsb2F0UG9pbnQoKSwgc21vb3RoaW5nTW9kZSk7CiAKICAgICAgICAgICAgIEZsb2F0
UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcyk7CiAgICAgICAg
ICAgICBkZXN0aW5hdGlvblJlY3QubW92ZUJ5KHBlblBvc2l0aW9uKTsKLSAgICAgICAgICAgIG1f
b3duZXIuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAg
ICAgICAgICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBwZW5Qb3NpdGlvbi5t
b3ZlKHNpemUoYWR2YW5jZXNbaV0pKTsKICAgICB9CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCi17Ci0gICAgcHJlcGFyZUludGVybmFsQ29udGV4dChmb250LCBz
bW9vdGhpbmdNb2RlKTsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2ludGVybmFsQ29u
dGV4dCwgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9v
dGhpbmdNb2RlKTsKLSAgICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOwotfQotCiB2b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5z
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQog
ewogICAgIGF1dG8gb3RzdmdHbHlwaHMgPSBmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51
bUdseXBocyk7CkBAIC00NDAsNyArMzA3LDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRy
YXdCeVNwbGl0dGluZ0ludG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiBmb24KIHZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBG
b250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGlmIChtX2RlY29uc3RydWN0
RHJhd0dseXBocyA9PSBEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKSB7Ci0gICAgICAgIG1fb3du
ZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOworICAgICAgICBtX2Rlc3RpbmF0aW9uQ29u
dGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUds
eXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTQ1MywxNSArMzIwLDE3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3TmF0
aXZlVGV4dChDVEZvbnRSZWYgZm9udCwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lCiB7CiAgICAg
QVNTRVJUKG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzID09IERlY29uc3RydWN0RHJhd0dseXBoczo6
WWVzKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIobV9vd25lcik7Cisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihtX2Rlc3RpbmF0aW9uQ29udGV4dCk7
CiAKLSAgICBtX293bmVyLnRyYW5zbGF0ZShsaW5lUmVjdC5vcmlnaW4ueCwgbGluZVJlY3Qub3Jp
Z2luLnkgKyBsaW5lUmVjdC5zaXplLmhlaWdodCk7Ci0gICAgbV9vd25lci5zY2FsZShGbG9hdFNp
emUoMSwgLTEpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUobGluZVJlY3Qu
b3JpZ2luLngsIGxpbmVSZWN0Lm9yaWdpbi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogCi0gICAgcHJl
cGFyZUludGVybmFsQ29udGV4dChGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShmb250LCBm
b250U2l6ZSkpLCBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCk7CisgICAg
c2V0SW50ZXJuYWxGb250KEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGZvbnQsIGZvbnRT
aXplKSksIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKKyAgICAKKyAg
ICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CiAgICAgQ0dD
b250ZXh0U2V0VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSwgMCwgMCk7CiAgICAgQ1RMaW5lRHJhdyhsaW5lLCBtX2ludGVybmFsQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCkpOwotICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgcmVzdG9y
ZURlc3RpbmF0aW9uQ29udGV4dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAppbmRleCA1MTFlMDliOTZj
ZWYwMzI1MDkwZTIzYWY5MTRhZTM1ZjJhYjhlZDJlLi5lNTM0Y2M1NWFmMjZiN2ZiODI4MGU2M2I3
ZGMyNWEzZDRhNDE2Mzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcApAQCAt
MTUyLDI1ICsxNTIsMjcgQEAgc3RhdGljIHZvaWQgZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEdseXBo
UG9zaXRpb25zKFZlY3RvcjxDR1BvaW50LCAyNTY+JiBwb3NpdGlvbnMKICAgICB9CiB9CiAKLXN0
YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGNvbnN0IEZvbnQmIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBn
bHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCitzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFu
Y2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZh
bmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4dE1hdHJpeCkK
IHsKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm47CiAKKyAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOworCiAgICAgVmVj
dG9yPENHUG9pbnQsIDI1Nj4gcG9zaXRpb25zKGNvdW50KTsKICAgICBpZiAocGxhdGZvcm1EYXRh
Lm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewotICAgICAgICBT
Y29wZWRUZXh0TWF0cml4IHNhdmVkTWF0cml4KGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9u
dCwgdGV4dE1hdHJpeCksIGNvbnRleHQpOworICAgICAgICBTY29wZWRUZXh0TWF0cml4IHNhdmVk
TWF0cml4KGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9udCwgdGV4dE1hdHJpeCksIGNnQ29u
dGV4dCk7CiAKICAgICAgICAgVmVjdG9yPENHU2l6ZSwgMjU2PiB0cmFuc2xhdGlvbnMoY291bnQp
OwogICAgICAgICBDVEZvbnRHZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhwbGF0Zm9y
bURhdGEuY3RGb250KCksIGdseXBocywgdHJhbnNsYXRpb25zLmRhdGEoKSwgY291bnQpOwogCiAg
ICAgICAgIGF1dG8gYXNjZW50RGVsdGEgPSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQo
SWRlb2dyYXBoaWNCYXNlbGluZSkgLSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKTsK
LSAgICAgICAgZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywg
Y29udGV4dCwgdHJhbnNsYXRpb25zLmRhdGEoKSwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCwgYXNj
ZW50RGVsdGEpOwotICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQo
KSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7CisgICAgICAgIGZp
bGxWZWN0b3JXaXRoVmVydGljYWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNnQ29udGV4dCwg
dHJhbnNsYXRpb25zLmRhdGEoKSwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCwgYXNjZW50RGVsdGEp
OworICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhz
LCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY2dDb250ZXh0KTsKICAgICB9IGVsc2UgewotICAg
ICAgICBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNv
bnRleHQsIGFkdmFuY2VzLCBjb3VudCwgcG9pbnQpOwotICAgICAgICBDVEZvbnREcmF3R2x5cGhz
KHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwg
Y29udGV4dCk7CisgICAgICAgIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25z
KHBvc2l0aW9ucywgY2dDb250ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKKyAgICAgICAg
Q1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25z
LmRhdGEoKSwgY291bnQsIGNnQ29udGV4dCk7CiAgICAgfQogfQogCkBAIC0yNDIsMTAgKzI0NCw3
IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShj
b250ZXh0KTsKICAgICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0
YS5zaXplKCkpOwogCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFk
b3dCbHVyOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGNvbnRleHQuZ2V0U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgIGF1dG8gZHJvcFNoYWRv
dyA9IGNvbnRleHQuZHJvcFNoYWRvdygpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRD
VE0gPSBjb250ZXh0LmdldENUTSgpOwogICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBm
b250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKQEAgLTI1OCwyOSArMjU3LDI5IEBAIHZvaWQgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250
JiBmb250LCBjb25zdCBHCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYm9vbCBoYXNTaW1wbGVT
aGFkb3cgPSBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6Rmls
bCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgIXBsYXRmb3JtRGF0
YS5pc0NvbG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpIHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYg
IWNvbnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBoYXNTaW1wbGVTaGFk
b3cgPSBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAm
JiBkcm9wU2hhZG93LmNvbG9yLmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRvdy5ibHVyUmFkaXVzICYm
ICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JG
bGlwcGVkKCkpICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmICho
YXNTaW1wbGVTaGFkb3cpIHsKICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2Vs
dmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3Vi
cGl4ZWwgYW50aWFsaWFzaW5nLgogICAgICAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAg
ICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9y
IHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xv
ciA9IGRyb3BTaGFkb3cuY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9y
LmFscGhhQXNGbG9hdCgpKTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93Rmls
bENvbG9yKTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dP
ZmZzZXQud2lkdGgoKTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBk
cm9wU2hhZG93Lm9mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25v
cmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRl
IGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0
WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFu
Y2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgICAgICBmbG9h
dCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIGRyb3BTaGFkb3cub2Zmc2V0LmhlaWdodCgpICog
KGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisgICAgICAgIHNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkp
LCBmb250LCBjb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgp
OwogICAgICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgICAgIHNob3dHbHlw
aHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZz
ZXQsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1H
bHlwaHMsIHRleHRNYXRyaXgpOworICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhG
bG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkp
LCBmb250LCBjb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgp
OwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOwogICAgIH0KIAotICAg
IHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBh
ZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICBzaG93R2x5cGhzV2l0aEFkdmFu
Y2VzKHBvaW50LCBmb250LCBjb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRl
eHRNYXRyaXgpOwogCiAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0aWNCb2xkT2Zm
c2V0LCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUds
eXBocywgdGV4dE1hdHJpeCk7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQ
b2ludChwb2ludC54KCkgKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBj
b250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogCiAgICAg
aWYgKGhhc1NpbXBsZVNoYWRvdykKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0RHJvcFNo
YWRvdyhkcm9wU2hhZG93KTsKIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChz
aG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCAyZTJmNGY0ZjJjYjU1ZDM2NWU1YWUzOTkzMjVkMDVm
MmMxNzM2MWZkLi5jY2Y0MGNlYTYyYjE2NzQzNjZkNzQ4NDE2MmIxYmM0ZTkzNzcwNzU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTkwLDEwICs5MCw3IEBAIGJvb2wgRGlzcGxheUxp
c3Q6OnNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncyBmbGFncywgSXRlbUhhbmRsZSBpdGVt
KQogICAgICAgICBpZiAoIShmbGFncyAmIEFzVGV4dEZsYWc6OkluY2x1ZGVzUGxhdGZvcm1PcGVy
YXRpb25zKSkgewogICAgICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJdGVtID0gaXRlbS5nZXQ8
U2V0U3RhdGU+KCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIG5vdywgb25seSBkcm9wIHRo
ZSBpdGVtIGlmIHRoZSBvbmx5IHN0YXRlLWNoYW5nZSBmbGFncyBhcmUgcGxhdGZvcm0tc3BlY2lm
aWMuCi0gICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9jaGFuZ2VGbGFn
cyA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHN0
YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgICAgIGlmIChz
dGF0ZUl0ZW0uc3RhdGUoKS5jaGFuZ2VzKCkgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTIwMiwxNiArMTk5LDYgQEAgdm9p
ZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFw
cGVuZDxTYXZlPihpdGVtLmdldDxTYXZlPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3Jl
OgogICAgICAgICByZXR1cm4gYXBwZW5kPFJlc3RvcmU+KGl0ZW0uZ2V0PFJlc3RvcmU+KCkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxUcmFu
c2xhdGU+KGl0ZW0uZ2V0PFRyYW5zbGF0ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRl
OgotICAgICAgICByZXR1cm4gYXBwZW5kPFJvdGF0ZT4oaXRlbS5nZXQ8Um90YXRlPigpKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTY2FsZT4oaXRl
bS5nZXQ8U2NhbGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAg
ICAgICByZXR1cm4gYXBwZW5kPENvbmNhdGVuYXRlQ1RNPihpdGVtLmdldDxDb25jYXRlbmF0ZUNU
TT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gYXBwZW5k
PFNldENUTT4oaXRlbS5nZXQ8U2V0Q1RNPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVGaWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihp
dGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZVN0cm9rZUNvbG9yOgpAQCAtMjIwLDE2ICsyMDcsNiBAQCB2b2lkIERpc3BsYXlMaXN0Ojph
cHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0cm9rZVRo
aWNrbmVzcz4oaXRlbS5nZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdGF0ZToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdGF0ZT4oaXRlbS5nZXQ8
U2V0U3RhdGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJl
dHVybiBhcHBlbmQ8U2V0TGluZUNhcD4oaXRlbS5nZXQ8U2V0TGluZUNhcD4oKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZURh
c2g+KGl0ZW0uZ2V0PFNldExpbmVEYXNoPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Sm9pbjoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lSm9pbj4oaXRlbS5nZXQ8U2V0TGlu
ZUpvaW4+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJl
dHVybiBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4oaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8Q2xl
YXJTaGFkb3c+KGl0ZW0uZ2V0PENsZWFyU2hhZG93PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwOgogICAgICAgICByZXR1cm4gYXBwZW5kPENsaXA+KGl0ZW0uZ2V0PENsaXA+KCkpOwogICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CkBAIC0yNzQsOCArMjUxLDYgQEAgdm9pZCBEaXNwbGF5
TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxs
UmVjdFdpdGhDb2xvcj4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICByZXR1cm4gYXBwZW5kPEZp
bGxSZWN0V2l0aEdyYWRpZW50PihpdGVtLmdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4gYXBw
ZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVybiBhcHBl
bmQ8RmlsbFJvdW5kZWRSZWN0PihpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCkpOwogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDBjMjUyMjY0YWY0MTY2NTYy
MTc1MTYwNDEwNDJhOGJkZDNiZmFiYjUuLmRlZmNlODRlZjM1ODdiZWEwNmQyMDdkYjViODAyYWE3
YzgyNTY1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNl
IERpc3BsYXlMaXN0IHsKIAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkK
LSAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBG
bG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0pCisgICAgOiBtX2NvbnRleHQo
bV9kaXNwbGF5TGlzdCwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQog
ewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCmluZGV4
IDQ1Nzc1NTE4OWJkYWRkNzE5ZDI0NWE0ZTZkMmM4MWJkZGIxZjdkZjMuLjBkYjE1MDM5NjA0MDMy
ZjMzMDNmYmNiNjUyMWU1M2U0ZTM0ZjkxOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1CdWZmZXIuY3BwCkBAIC01MiwyMSArNTIsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3Jl
OgogICAgICAgICBnZXQ8UmVzdG9yZT4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgZ2V0PFRyYW5zbGF0ZT4o
KS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlJv
dGF0ZToKLSAgICAgICAgZ2V0PFJvdGF0ZT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBnZXQ8U2NhbGU+KCkuYXBw
bHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRl
bmF0ZUNUTToKLSAgICAgICAgZ2V0PENvbmNhdGVuYXRlQ1RNPigpLmFwcGx5KGNvbnRleHQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBnZXQ8
U2V0Q1RNPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICBnZXQ8U2V0SW5saW5lRmlsbENvbG9y
PigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CkBAIC03OSwyMSArNjQsNiBAQCB2
b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBnZXQ8
U2V0TGluZUNhcD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBnZXQ8U2V0TGluZURhc2g+KCkuYXBwbHko
Y29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9p
bjoKLSAgICAgICAgZ2V0PFNldExpbmVKb2luPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgZ2V0PFNl
dE1pdGVyTGltaXQ+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgZ2V0PENsZWFyU2hhZG93PigpLmFwcGx5
KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAg
ICAgICAgZ2V0PENsaXA+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2
MCw5ICsxMzAsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAg
Z2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBnZXQ8
RmlsbENvbXBvc2l0ZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBnZXQ8RmlsbFJvdW5k
ZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CkBAIC0yNzAsOSArMjM3
LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UGF0aDoKICAgICAgICAgZ2V0PERyYXdQYXRoPigpLn5EcmF3UGF0aCgpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBnZXQ8
RmlsbENvbXBvc2l0ZWRSZWN0PigpLn5GaWxsQ29tcG9zaXRlZFJlY3QoKTsKLSAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAgICBnZXQ8RmlsbFBhdGg+
KCkufkZpbGxQYXRoKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4OCw5ICsyNTIsNiBAQCB2b2lk
IEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVj
dDoKICAgICAgICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5+RmlsbFJvdW5kZWRSZWN0KCk7CiAg
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAg
Z2V0PFNldExpbmVEYXNoPigpLn5TZXRMaW5lRGFzaCgpOwotICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIGdldDxTZXRTdGF0ZT4oKS5+U2V0U3Rh
dGUoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzE0LDkgKzI3NSw2IEBAIHZvaWQgSXRlbUhhbmRs
ZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclJlY3Q+Ojp2YWx1
ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJT
aGFkb3c+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
OgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxD
bGlwPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC0zMjYsOSArMjg0LDYgQEAgdm9pZCBJ
dGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZl
cjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
Q2xpcFRvSW1hZ2VCdWZmZXI+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8Q29uY2F0ZW5hdGVDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgogICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC0zODcsMzMg
KzM0MiwxNSBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6
OlJlc3RvcmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPFJlc3RvcmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFJvdGF0ZT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNhdmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFNhdmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTY2FsZToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8U2NhbGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRDVE06Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFNldENUTT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lRmlsbENvbG9yPjo6dmFsdWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CiAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElu
bGluZVN0cm9rZUNvbG9yPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8U2V0TGluZUNhcD46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRMaW5lSm9pbj46OnZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldE1pdGVyTGltaXQ+Ojp2
YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlj
a25lc3M6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFNldFN0cm9rZVRoaWNrbmVzcz46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDM3
LDkgKzM3NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlw
ZTo6U3Ryb2tlTGluZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8U3Ryb2tlTGluZT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8VHJhbnNsYXRlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47
CiAgICAgfQogfQogCkBAIC01MDEsOCArNDM1LDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29w
eShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPERyYXdQYXR0ZXJuPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3UGF0
aD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVk
UmVjdDoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbU9m
ZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAgICByZXR1
cm4gY29weUludG88RmlsbFBhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKQEAgLTUxMyw4ICs0NDUsNiBAQCBib29sIEl0ZW1IYW5k
bGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBj
b25zdAogICAgICAgICByZXR1cm4gY29weUludG88RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAg
ICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsUm91bmRlZFJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPFNldExpbmVEYXNoPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRTdGF0ZT4oaXRlbU9mZnNldCwg
KnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CkBAIC01MzEsMTYgKzQ2MSwx
MiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFu
ZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88QmVnaW5UcmFu
c3BhcmVuY3lMYXllcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyUmVjdDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsZWFyUmVjdD4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4g
Y29weUludG88Q2xlYXJTaGFkb3c+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwOgogICAgICAgICByZXR1cm4gY29weUludG88Q2xpcD4oaXRlbU9mZnNldCwgKnRo
aXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CiAgICAgICAgIHJldHVybiBjb3B5SW50
bzxDbGlwT3V0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRv
SW1hZ2VCdWZmZXI6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwVG9JbWFnZUJ1ZmZlcj4o
aXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgot
ICAgICAgICByZXR1cm4gY29weUludG88Q29uY2F0ZW5hdGVDVE0+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgogICAgICAg
ICByZXR1cm4gY29weUludG88RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbU9mZnNldCwg
KnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgpAQCAtNTczLDI0ICs0OTks
MTIgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhh
bmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3Rv
cmU6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxSZXN0b3JlPihpdGVtT2Zmc2V0LCAqdGhpcyk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gY29weUludG88Um90
YXRlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPFNhdmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNjYWxlPihpdGVtT2Zmc2V0
LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gY29w
eUludG88U2V0Q1RNPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5saW5lRmlsbENv
bG9yPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVTdHJva2VDb2xvcj4o
aXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAg
ICAgIHJldHVybiBjb3B5SW50bzxTZXRMaW5lQ2FwPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRM
aW5lSm9pbj4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQ6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRNaXRlckxpbWl0PihpdGVtT2Zmc2V0
LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgICAg
ICByZXR1cm4gY29weUludG88U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKQEAgLTYwNyw4ICs1MjEsNiBAQCBi
b29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRl
c3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88U3Ryb2tlUmVjdD4oaXRl
bU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgICAg
IHJldHVybiBjb3B5SW50bzxTdHJva2VMaW5lPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gY29weUludG88VHJhbnNsYXRl
PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCA1NGVhMWM4NjgyYzA3NDQy
ZTJlODQxNGI3MzI4YWEzMjQ4MDI1YTc1Li5iYTBkOTUxYzIyY2Y0OWNlNDE3ZTMzNTUzYjAwZTBh
NWI4YWIyMDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCkBA
IC0zOCwxNiArMzgsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBl
IHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoU2F2ZSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6
UmVzdG9yZToKICAgICAgICAgcmV0dXJuIHNpemVvZihSZXN0b3JlKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoVHJhbnNsYXRlKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoUm90YXRlKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihTY2FsZSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
Q29uY2F0ZW5hdGVDVE0pOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0
dXJuIHNpemVvZihTZXRDVE0pOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjoKICAgICAgICAgcmV0dXJuIHNpemVvZihTZXRJbmxpbmVGaWxsQ29sb3IpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgpAQCAtNTYsMTYgKzQ2LDYgQEAgc3RhdGlj
IHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4g
c2l6ZW9mKFNldFN0cm9rZVRoaWNrbmVzcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6
CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0U3RhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVDYXA6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZUNhcCk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZURhc2gp
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KFNldExpbmVKb2luKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKFNldE1pdGVyTGltaXQpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFy
U2hhZG93OgotICAgICAgICByZXR1cm4gc2l6ZW9mKENsZWFyU2hhZG93KTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwOgogICAgICAgICByZXR1cm4gc2l6ZW9mKENsaXApOwogICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBPdXQ6CkBAIC0xMTAsOCArOTAsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0
ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoRmlsbFJlY3RX
aXRoQ29sb3IpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAg
ICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0V2l0aEdyYWRpZW50KTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoRmlsbENvbXBv
c2l0ZWRSZWN0KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAg
IHJldHVybiBzaXplb2YoRmlsbFJvdW5kZWRSZWN0KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZToKQEAgLTE4MiwyOCArMTYwLDE4IEBAIGJvb2wgaXNEcmF3aW5n
SXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46
CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogI2VuZGlmCi0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVm
ZmVyOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcFBhdGg6Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Rmx1c2hDb250ZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJ
bmxpbmVTdHJva2VDb2xvcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2lu
OgotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgIGNh
c2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xl
YXJSZWN0OgpAQCAtMjIyLDcgKzE5MCw2IEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0
eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
RWxsaXBzZToKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsTGluZToKQEAgLTI4OCwxMyArMjU1LDExIEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1U
eXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKICAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3TGluZXNGb3JUZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZToKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
U3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3U3lzdGVtSW1hZ2U6CkBAIC0zMDYsMTEgKzI3MSw5IEBAIGJvb2wgaXNJbmxpbmVJdGVt
KEl0ZW1UeXBlIHR5cGUpCiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFy
ZW5jeUxheWVyOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGVhclNoYWRvdzoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBPdXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcjoKQEAgLTMzMywxNSAr
Mjk2LDkgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1U
eXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0
b3JlOgotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZl
OgotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRN
aXRlckxpbWl0OgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQpAQCAtMzUxLDcgKzMwOCw2IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAj
ZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUxpbmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAppbmRleCBkNjgzYjJhY2Y3ODQ1Zjk5YzNjZDA5NWViOTEx
ZTU0ZjFmOGNlMTExLi4xNjYwYjk4ZmRhNWVmMjdiM2Y3NWQyMmE1NzlhM2E5YWUzY2M3MGZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAgLTMxLDIwICszMSwxMCBA
QCBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3Qg
ewogICAgIFNhdmUsCiAgICAgUmVzdG9yZSwKLSAgICBUcmFuc2xhdGUsCi0gICAgUm90YXRlLAot
ICAgIFNjYWxlLAotICAgIENvbmNhdGVuYXRlQ1RNLAotICAgIFNldENUTSwKICAgICBTZXRJbmxp
bmVGaWxsQ29sb3IsCiAgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgU2V0U3Ryb2tlVGhp
Y2tuZXNzLAogICAgIFNldFN0YXRlLAotICAgIFNldExpbmVDYXAsCi0gICAgU2V0TGluZURhc2gs
Ci0gICAgU2V0TGluZUpvaW4sCi0gICAgU2V0TWl0ZXJMaW1pdCwKLSAgICBDbGVhclNoYWRvdywK
ICAgICBDbGlwLAogICAgIENsaXBPdXQsCiAgICAgQ2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC02Nyw3
ICs1Nyw2IEBAIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGaWxsUmVjdCwK
ICAgICBGaWxsUmVjdFdpdGhDb2xvciwKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudCwKLSAgICBG
aWxsQ29tcG9zaXRlZFJlY3QsCiAgICAgRmlsbFJvdW5kZWRSZWN0LAogICAgIEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlLAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmluZGV4IDIzZDBiYmNjNzFjMjgxYzUyYzM1YThjMjUyZGE5
NmMwYWIxMmE5OGMuLjM2ZmE2YTEyN2ZmMDc5M2NlZjIzMGVkZjdhNjQxZGRlMDJmZTM3NGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZS5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKQEAgLTU0LDY3ICs1NSw2IEBAIHZvaWQgUmVzdG9yZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGNvbnRleHQucmVzdG9yZSgp
OwogfQogCi12b2lkIFRyYW5zbGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAotewotICAgIGNvbnRleHQudHJhbnNsYXRlKG1feCwgbV95KTsKLX0KLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRl
bSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoIngiLCBpdGVtLngoKSk7Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJ5IiwgaXRlbS55KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFJvdGF0
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQu
cm90YXRlKG1fYW5nbGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgUm90YXRlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
YW5nbGUiLCBpdGVtLmFuZ2xlKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNjYWxl
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5z
Y2FsZShtX3NpemUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU2NhbGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzaXpl
IiwgaXRlbS5hbW91bnQoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0Q1RNOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRD
VE0obV90cmFuc2Zvcm0pOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2V0Q1RNJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2V0LWN0bSIsIGl0ZW0udHJhbnNmb3JtKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lk
IENvbmNhdGVuYXRlQ1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17
Ci0gICAgY29udGV4dC5jb25jYXRDVE0obV90cmFuc2Zvcm0pOwotfQotCi1zdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29uY2F0ZW5hdGVDVE0mIGl0
ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQot
ICAgIHJldHVybiB0czsKLX0KLQogdm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihj
b2xvcigpKTsKQEAgLTE0OCw3NyArODgsMjIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiAgICAg
cmV0dXJuIHRzOwogfQogCi1TZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFn
cykKLSAgICA6IG1fc3RhdGVDaGFuZ2Uoc3RhdGUsIGZsYWdzKQotewotfQotCi1TZXRTdGF0ZTo6
U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQot
ICAgIDogbV9zdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZSkKK1NldFN0YXRlOjpTZXRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCisgICAgOiBtX3N0YXRlKHN0YXRlKQogewog
fQogCiB2b2lkIFNldFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0g
ICAgbV9zdGF0ZUNoYW5nZS5hcHBseShjb250ZXh0KTsKKyAgICBjb250ZXh0Lm1lcmdlU3RhdGVD
aGFuZ2VzKG1fc3RhdGUpOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIHN0YXRlKQorc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBpdGVtKQogewotICAgIHRz
IDw8IHN0YXRlLnN0YXRlQ2hhbmdlKCk7CisgICAgdHMgPDwgaXRlbS5zdGF0ZSgpOwogICAgIHJl
dHVybiB0czsKIH0KIAotdm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRM
aW5lQ2FwJiBsaW5lQ2FwKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1jYXAiLCBsaW5l
Q2FwLmxpbmVDYXAoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVEYXNoOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRM
aW5lRGFzaChtX2Rhc2hBcnJheSwgbV9kYXNoT2Zmc2V0KTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFz
aCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRhc2gtYXJyYXkiLCBsaW5lRGFzaC5kYXNoQXJy
YXkoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLW9mZnNldCIsIGxpbmVEYXNoLmRhc2hP
ZmZzZXQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVKb2luOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lSm9p
bihtX2xpbmVKb2luKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFNldExpbmVKb2luJiBsaW5lSm9pbikKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImxpbmUtam9pbiIsIGxpbmVKb2luLmxpbmVKb2luKCkpOwotICAgIHJldHVybiB0czsK
LX0KLQotdm9pZCBTZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1pdCk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRN
aXRlckxpbWl0JiBtaXRlckxpbWl0KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibWl0cmUtbGlt
aXQiLCBtaXRlckxpbWl0Lm1pdGVyTGltaXQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lk
IENsZWFyU2hhZG93OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0g
ICAgY29udGV4dC5jbGVhclNoYWRvdygpOwotfQotCiB2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKQEAg
LTY1NywzMCArNTQyLDE1IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKICAgICByZXR1cm4gdHM7
CiB9CiAKLXZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IsIG1f
b3AsIG1fYmxlbmRNb2RlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYgaXRlbSkKLXsKLSAgICB0cy5k
dW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJj
b2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3Bl
cmF0aW9uIiwgaXRlbS5jb21wb3NpdGVPcGVyYXRvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9kZSgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZv
aWQgRmlsbFJvdW5kZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7Ci0gICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5k
TW9kZSk7CisgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yKTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZp
bGxSb3VuZGVkUmVjdCYgaXRlbSkKIHsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVt
LnJvdW5kZWRSZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9y
KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkp
OwogICAgIHJldHVybiB0czsKIH0KIApAQCAtNzY4LDggKzYzOCw4IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkK
IH0KIAogI2lmIEVOQUJMRShWSURFTykKLVBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZv
ck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24p
Ci0gICAgOiBtX2lkZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKK1BhaW50RnJhbWVGb3JN
ZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50
aWZpZXIpCiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogewogfQpAQCAtMTAxMSwx
OSArODgxLDEwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBJdGVtVHlwZSB0eXBlKQogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6
OlNhdmU6IHRzIDw8ICJzYXZlIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTog
dHMgPDwgInJlc3RvcmUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHRz
IDw8ICJ0cmFuc2xhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHRzIDw8
ICJyb3RhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogdHMgPDwgInNjYWxl
IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB0cyA8PCAic2V0LWN0bSI7IGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB0cyA8PCAiY29uY2F0ZW50
YXRlLWN0bSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjog
dHMgPDwgInNldC1pbmxpbmUtZmlsbC1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZVN0cm9rZUNvbG9yOiB0cyA8PCAic2V0LWlubGluZS1zdHJva2UtY29sb3IiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHRzIDw8ICJzZXQt
c3Ryb2tlLXRoaWNrbmVzcyI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB0
cyA8PCAic2V0LXN0YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDog
dHMgPDwgInNldC1saW5lLWNhcCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVE
YXNoOiB0cyA8PCAic2V0LWxpbmUtZGFzaCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVKb2luOiB0cyA8PCAic2V0LWxpbmUtam9pbiI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldE1pdGVyTGltaXQ6IHRzIDw8ICJzZXQtbWl0ZXItbGltaXQiOyBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwOiB0cyA8PCAiY2xpcCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBPdXQ6IHRzIDw8ICJjbGlwLW91dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBUb0ltYWdlQnVmZmVyOiB0cyA8PCAiY2xpcC10by1pbWFnZS1idWZmZXIiOyBicmVhazsK
QEAgLTEwNDYsNyArOTA3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHRz
IDw8ICJmaWxsLXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvcjogdHMgPDwgImZpbGwtcmVjdC13aXRoLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1ncmFkaWVu
dCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogdHMgPDwg
ImZpbGwtY29tcG9zaXRlZC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OiB0cyA8PCAiZmlsbC1yb3VuZGVkLXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogdHMgPDwgImZpbGwtcmVjdC13aXRoLXJv
dW5kZWQtaG9sZSI7IGJyZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpAQCAtMTA3
OCw3ICs5MzgsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB0
cyA8PCAiYXBwbHktZmlsbC1wYXR0ZXJuIjsgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOiB0cyA8PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZh
Y3RvciI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xl
YXItc2hhZG93IjsgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0czsKIH0KQEAgLTEwODgsMjEg
Kzk0Nyw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5k
bGUgaXRlbSkKICAgICB0cyA8PCBpdGVtLnR5cGUoKTsKIAogICAgIHN3aXRjaCAoaXRlbS50eXBl
KCkpIHsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PFRyYW5zbGF0ZT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90
YXRlOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxSb3RhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTY2FsZT4o
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICB0
cyA8PCBpdGVtLmdldDxTZXRDVE0+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNU
TT4oKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENv
bG9yOgogICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMTExNSwxOCArOTU5LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
YXRlOgogICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
U2V0TGluZUNhcD4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVEYXNoPigpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8U2V0TGluZUpvaW4+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCk7
Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PENsaXA+KCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE5Myw5ICsxMDI1LDYgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQog
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICB0cyA8PCBp
dGVtLmdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxG
aWxsQ29tcG9zaXRlZFJlY3Q+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0
PigpOwogICAgICAgICBicmVhazsKQEAgLTEyNzEsNyArMTEwMCw2IEBAIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0
dGVybjoKICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgKaW5kZXggOTdjYjVmYzhkMDRiYTg2NjJiNzJjN2RkZWViYzQ0MTU1YzI4MjViNy4uZTgxYmIz
NDZjOWVmZWJlOTZhNjUwZDc1NDVhODFmNjE2YjdkNmE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCkBAIC04NSwxMDQgKzg1LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9OwogCi1jbGFzcyBUcmFu
c2xhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6VHJhbnNsYXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
ZmFsc2U7Ci0KLSAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICAgICAgOiBtX3go
eCkKLSAgICAgICAgLCBtX3koeSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgeCgpIGNvbnN0
IHsgcmV0dXJuIG1feDsgfQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgZmxvYXQgbV94IHsgMCB9OwotICAgIGZsb2F0IG1feSB7IDAgfTsKLX07
Ci0KLWNsYXNzIFJvdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpSb3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKLQotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICAgICAgOiBtX2Fu
Z2xlKGFuZ2xlKQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5nbGU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9hbmdsZSB7IDAgfTsgLy8g
SW4gcmFkaWFucy4KLX07Ci0KLWNsYXNzIFNjYWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNjYWxlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCi0gICAgICAgIDogbV9zaXplKHNpemUpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0
IEZsb2F0U2l6ZSYgYW1vdW50KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIEZsb2F0U2l6ZSBtX3NpemU7Ci19OwotCi1jbGFzcyBTZXRDVE0gewotcHVibGljOgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0Q1RN
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0o
dHJhbnNmb3JtKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKLX07Ci0KLWNsYXNzIENvbmNhdGVuYXRlQ1RN
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkNvbmNhdGVuYXRlQ1RNOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
ZmFsc2U7Ci0KLSAgICBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLSAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgewotICAgIH0KLQot
ICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2Zvcm07IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3Jt
OwotfTsKLQogY2xhc3MgU2V0SW5saW5lRmlsbENvbG9yIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjsKQEAgLTI0NywxMCArMTQ5LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyk7Ci0KLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlQ2hhbmdlOyB9Ci0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKCkgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQorICAgIFdF
QkNPUkVfRVhQT1JUIGV4cGxpY2l0IFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Jik7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZTsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFNldFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMjU4LDQwNCArMTU4LDI2
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpOwogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSBtX3N0YXRlQ2hhbmdlOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CiB9Owog
CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBTZXRTdGF0ZTo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBjaGFuZ2VGbGFncyA9IG1fc3RhdGVDaGFuZ2Uu
bV9jaGFuZ2VGbGFnczsKLSAgICBlbmNvZGVyIDw8IGNoYW5nZUZsYWdzOwotCi0gICAgYXV0byYg
c3RhdGUgPSBtX3N0YXRlQ2hhbmdlLm1fc3RhdGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAg
ICAgICBBU1NFUlQoc3RhdGUuc3Ryb2tlR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8ICpz
dGF0ZS5zdHJva2VHcmFkaWVudDsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAg
IEFTU0VSVChzdGF0ZS5zdHJva2VQYXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUu
c3Ryb2tlUGF0dGVybjsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJU
KHN0YXRlLmZpbGxHcmFkaWVudCk7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLmZpbGxHcmFk
aWVudDsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuZmls
bFBhdHRlcm4pOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9
Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
YWRvd0NoYW5nZSkpIHsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Qmx1cjsKLSAgICAgICAgZW5jb2RlciA8PCBz
dGF0ZS5zaGFkb3dDb2xvcjsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dSYWRpdXNN
b2RlOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0
ZS5zdHJva2VUaGlja25lc3M7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIg
PDwgc3RhdGUudGV4dERyYXdpbmdNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGVuY29k
ZXIgPDwgc3RhdGUuc3Ryb2tlQ29sb3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIg
PDwgc3RhdGUuZmlsbENvbG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwg
c3RhdGUuc3Ryb2tlU3R5bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0
ZS5maWxsUnVsZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBz
dGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5ibGVuZE1vZGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0KLSAgICBpZiAo
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkK
LSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5hbHBoYTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaG91bGRBbnRpYWxpYXM7Ci0KLSAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hh
bmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKLQotICAg
IGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICBlbmNv
ZGVyIDw8IG1fc3RhdGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBzdGQ6Om9wdGlv
bmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAg
c3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncz4gY2hh
bmdlRmxhZ3M7Ci0gICAgZGVjb2RlciA+PiBjaGFuZ2VGbGFnczsKLSAgICBpZiAoIWNoYW5nZUZs
YWdzKQorICAgIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IHN0YXRlOworICAg
IGRlY29kZXIgPj4gc3RhdGU7CisgICAgaWYgKCFzdGF0ZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwot
ICAgIHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MgPSAqY2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAo
c3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlR3JhZGllbnQgPSBH
cmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIXN0cm9rZUdyYWRpZW50KQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5t
X3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gV1RGTW92ZSgqc3Ryb2tlR3JhZGllbnQpOwotICAgIH0K
LQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0cm9rZVBh
dHRlcm4gPSBQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghc3Ryb2tlUGF0
dGVybikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gV1RGTW92ZSgqc3Ryb2tlUGF0dGVybik7Ci0g
ICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmaWxs
R3JhZGllbnQgPSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIWZpbGxH
cmFkaWVudCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3Rh
dGVDaGFuZ2UubV9zdGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKCpmaWxsR3JhZGllbnQpOwot
ICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmaWxs
UGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFmaWxsUGF0
dGVybikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5maWxsUGF0dGVybiA9IFdURk1vdmUoKmZpbGxQYXR0ZXJuKTsKLSAgICB9
Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
U2l6ZT4gc2hhZG93T2Zmc2V0OwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd09mZnNldDsKLSAg
ICAgICAgaWYgKCFzaGFkb3dPZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gKnNoYWRvd09m
ZnNldDsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzaGFkb3dCbHVyOwotICAgICAg
ICBkZWNvZGVyID4+IHNoYWRvd0JsdXI7Ci0gICAgICAgIGlmICghc2hhZG93Qmx1cikKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5zaGFkb3dCbHVyID0gKnNoYWRvd0JsdXI7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xv
cj4gc2hhZG93Q29sb3I7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93Q29sb3I7Ci0gICAgICAg
IGlmICghc2hhZG93Q29sb3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7Ci0K
LSAgICAgICAgc3RkOjpvcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiBzaGFkb3dSYWRpdXNNb2Rl
OwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGlmICghc2hh
ZG93UmFkaXVzTW9kZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gV1RGTW92ZSgqc2hhZG93
UmFkaXVzTW9kZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpIHsK
LSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc3Ryb2tlVGhpY2tuZXNzOwotICAgICAgICBk
ZWNvZGVyID4+IHN0cm9rZVRoaWNrbmVzczsKLSAgICAgICAgaWYgKCFzdHJva2VUaGlja25lc3Mp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdl
Lm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0gKnN0cm9rZVRoaWNrbmVzczsKLSAgICB9Ci0KLSAg
ICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPFRl
eHREcmF3aW5nTW9kZUZsYWdzPiB0ZXh0RHJhd2luZ01vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4g
dGV4dERyYXdpbmdNb2RlOwotICAgICAgICBpZiAoIXRleHREcmF3aW5nTW9kZSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS50
ZXh0RHJhd2luZ01vZGUgPSBXVEZNb3ZlKCp0ZXh0RHJhd2luZ01vZGUpOwotICAgIH0KLQotICAg
IGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4g
c3Ryb2tlQ29sb3I7Ci0gICAgICAgIGRlY29kZXIgPj4gc3Ryb2tlQ29sb3I7Ci0gICAgICAgIGlm
ICghc3Ryb2tlQ29sb3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlQ29sb3IgPSAqc3Ryb2tlQ29sb3I7Ci0gICAg
fQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxD
b2xvcj4gZmlsbENvbG9yOwotICAgICAgICBkZWNvZGVyID4+IGZpbGxDb2xvcjsKLSAgICAgICAg
aWYgKCFmaWxsQ29sb3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbENvbG9yID0gKmZpbGxDb2xvcjsKLSAgICB9Ci0K
LSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKSB7Ci0gICAgICAgIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cm9rZVN0eWxlKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5zdHJva2VTdHlsZSA9IHN0cm9rZVN0eWxlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNo
YW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxXaW5kUnVsZT4gZmlsbFJ1bGU7Ci0gICAg
ICAgIGRlY29kZXIgPj4gZmlsbFJ1bGU7Ci0gICAgICAgIGlmICghZmlsbFJ1bGUpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUu
ZmlsbFJ1bGUgPSAqZmlsbFJ1bGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlv
bkNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gY29t
cG9zaXRlT3BlcmF0b3I7Ci0gICAgICAgIGRlY29kZXIgPj4gY29tcG9zaXRlT3BlcmF0b3I7Ci0g
ICAgICAgIGlmICghY29tcG9zaXRlT3BlcmF0b3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3Ig
PSAqY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkp
IHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICAgICAg
ZGVjb2RlciA+PiBibGVuZE1vZGU7Ci0gICAgICAgIGlmICghYmxlbmRNb2RlKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmJs
ZW5kTW9kZSA9ICpibGVuZE1vZGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHlDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1
YWxpdHk+IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGRlY29kZXIgPj4gaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKLSAgICAgICAgaWYgKCFpbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSAqaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKSB7Ci0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGFscGhhOwotICAgICAgICBkZWNvZGVyID4+IGFscGhhOwot
ICAgICAgICBpZiAoIWFscGhhKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmFscGhhID0gKmFscGhhOwotICAgIH0KLQotICAg
IGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9v
bD4gc2hvdWxkQW50aWFsaWFzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZEFudGlhbGlhczsK
LSAgICAgICAgaWYgKCFzaG91bGRBbnRpYWxpYXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0g
KnNob3VsZEFudGlhbGlhczsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFu
Z2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU21vb3RoRm9udHM7Ci0g
ICAgICAgIGRlY29kZXIgPj4gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxk
U21vb3RoRm9udHMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAg
IHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSAqc2hvdWxkU21vb3RoRm9u
dHM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkp
IHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHM7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAg
ICAgICBpZiAoIXNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMgPSAqc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgIH0K
LQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpIHsKLSAgICAgICAgc3Rk
OjpvcHRpb25hbDxib29sPiBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLSAgICAgICAgZGVjb2Rl
ciA+PiBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLSAgICAgICAgaWYgKCFzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAg
c3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9ICpzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtczsKLSAgICB9Ci0KLSAgICByZXR1cm4geyB7IHN0YXRlQ2hhbmdlIH0gfTsK
LX0KLQotY2xhc3MgU2V0TGluZUNhcCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNh
cCkKLSAgICAgICAgOiBtX2xpbmVDYXAobGluZUNhcCkKLSAgICB7Ci0gICAgfQotCi0gICAgTGlu
ZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ2FwOyB9Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgot
ICAgIExpbmVDYXAgbV9saW5lQ2FwOwotfTsKLQotY2xhc3MgU2V0TGluZURhc2ggewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0
TGluZURhc2g7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAg
ICBTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNl
dCkKLSAgICAgICAgOiBtX2Rhc2hBcnJheShkYXNoQXJyYXkpCi0gICAgICAgICwgbV9kYXNoT2Zm
c2V0KGRhc2hPZmZzZXQpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IERhc2hBcnJheSYgZGFz
aEFycmF5KCkgY29uc3QgeyByZXR1cm4gbV9kYXNoQXJyYXk7IH0KLSAgICBmbG9hdCBkYXNoT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9kYXNoT2Zmc2V0OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVj
b2RlciYpOwotCi1wcml2YXRlOgotICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKLSAgICBmbG9h
dCBtX2Rhc2hPZmZzZXQ7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRM
aW5lRGFzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8
PCBtX2Rhc2hBcnJheTsKLSAgICBlbmNvZGVyIDw8IG1fZGFzaE9mZnNldDsKKyAgICByZXR1cm4g
U2V0U3RhdGUoKnN0YXRlKTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0
aW9uYWw8U2V0TGluZURhc2g+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBzdGQ6Om9wdGlvbmFsPERhc2hBcnJheT4gZGFzaEFycmF5OwotICAgIGRlY29kZXIg
Pj4gZGFzaEFycmF5OwotICAgIGlmICghZGFzaEFycmF5KQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZGFzaE9mZnNldDsKLSAgICBkZWNv
ZGVyID4+IGRhc2hPZmZzZXQ7Ci0gICAgaWYgKCFkYXNoT2Zmc2V0KQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICpkYXNoQXJyYXksICpkYXNoT2Zmc2V0IH19
OwotfQotCi1jbGFzcyBTZXRMaW5lSm9pbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUpvaW4oTGluZUpvaW4g
bGluZUpvaW4pCi0gICAgICAgIDogbV9saW5lSm9pbihsaW5lSm9pbikKLSAgICB7Ci0gICAgfQot
Ci0gICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIExpbmVKb2luIG1fbGluZUpvaW47Ci19OwotCi1jbGFzcyBTZXRNaXRl
ckxpbWl0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKLQotICAgIFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLSAgICAg
ICAgOiBtX21pdGVyTGltaXQobWl0ZXJMaW1pdCkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQg
bWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBmbG9hdCBtX21pdGVyTGltaXQ7Ci19OwotCi1jbGFzcyBDbGVhclNoYWRvdyB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpD
bGVhclNoYWRvdzsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLX07
Ci0KIC8vIEZJWE1FOiB0cmVhdCBhcyBkcmF3aW5nIGl0ZW0/CiBjbGFzcyBDbGlwIHsKIHB1Ymxp
YzoKQEAgLTE2MTIsOTEgKzExMzQsMjAgQEAgc3RkOjpvcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFk
aWVudD4gRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICBy
ZXR1cm4ge3sgKnJlY3QsIGdyYWRpZW50LT5nZXQoKSB9fTsKIH0KIAotY2xhc3MgRmlsbENvbXBv
c2l0ZWRSZWN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSB0cnVlOwotCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKLSAgICAgICAgOiBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2Nv
bG9yKGNvbG9yKQotICAgICAgICAsIG1fb3Aob3ApCi0gICAgICAgICwgbV9ibGVuZE1vZGUoYmxl
bmRNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y29sb3I7IH0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0
IHsgcmV0dXJuIG1fb3A7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9ibGVuZE1vZGU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9Ci0gICAgc3RkOjpvcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKLQotcHJp
dmF0ZToKLSAgICBGbG9hdFJlY3QgbV9yZWN0OwotICAgIENvbG9yIG1fY29sb3I7Ci0gICAgQ29t
cG9zaXRlT3BlcmF0b3IgbV9vcDsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Ci19OwotCi10
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVu
Y29kZXIgPDwgbV9jb2xvcjsKLSAgICBlbmNvZGVyIDw8IG1fb3A7Ci0gICAgZW5jb2RlciA8PCBt
X2JsZW5kTW9kZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8
RmlsbENvbXBvc2l0ZWRSZWN0PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29k
ZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBjb2xvcjsKLSAgICBkZWNvZGVyID4+IGNvbG9y
OwotICAgIGlmICghY29sb3IpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBz
dGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBvcDsKLSAgICBkZWNvZGVyID4+IG9wOwot
ICAgIGlmICghb3ApCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9w
dGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRNb2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwot
ICAgIGlmICghYmxlbmRNb2RlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIHt7ICpyZWN0LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSB9fTsKLX0KLQogY2xhc3Mg
RmlsbFJvdW5kZWRSZWN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKKyAgICBGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgICAgICAsIG1fY29s
b3IoY29sb3IpCi0gICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQogICAgIHsKICAgICB9
CiAKICAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y29sb3I7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVu
ZE1vZGU7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRp
b25hbDxGaWxsUm91bmRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CkBAIC0xNzA5LDcgKzExNjAs
NiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZsb2F0Um91bmRlZFJlY3QgbV9yZWN0OwogICAg
IENvbG9yIG1fY29sb3I7Ci0gICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOwogfTsKIAogdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTE3MTcsNyArMTE2Nyw2IEBAIHZvaWQgRmlsbFJvdW5kZWRS
ZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1f
cmVjdDsKICAgICBlbmNvZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX2JsZW5kTW9k
ZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTE3MzMsMTIgKzExODIsNyBAQCBz
dGQ6Om9wdGlvbmFsPEZpbGxSb3VuZGVkUmVjdD4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogCi0gICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNv
ZGVyID4+IGJsZW5kTW9kZTsKLSAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqYmxlbmRNb2RlIH19
OworICAgIHJldHVybiB7IHsgKnJlY3QsICpjb2xvciB9IH07CiB9CiAKIGNsYXNzIEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlIHsKQEAgLTE5NjEsNyArMTQwNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBQYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAgICBQYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKTsKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KQEAgLTIyNTYsMTMgKzE3MDAsMTEg
QEAgdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgPCBBcHBseURldmlj
ZVNjYWxlRmFjdG9yCiAgICAgLCBCZWdpblRyYW5zcGFyZW5jeUxheWVyCiAgICAgLCBDbGVhclJl
Y3QKLSAgICAsIENsZWFyU2hhZG93CiAgICAgLCBDbGlwCiAgICAgLCBDbGlwT3V0CiAgICAgLCBD
bGlwT3V0VG9QYXRoCiAgICAgLCBDbGlwUGF0aAogICAgICwgQ2xpcFRvSW1hZ2VCdWZmZXIKLSAg
ICAsIENvbmNhdGVuYXRlQ1RNCiAgICAgLCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyCiAgICAg
LCBEcmF3RWxsaXBzZQogICAgICwgRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIKQEAgLTIyNzgsNyAr
MTcyMCw2IEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgICwgRHJh
d1JlY3QKICAgICAsIERyYXdTeXN0ZW1JbWFnZQogICAgICwgRW5kVHJhbnNwYXJlbmN5TGF5ZXIK
LSAgICAsIEZpbGxDb21wb3NpdGVkUmVjdAogICAgICwgRmlsbEVsbGlwc2UKICAgICAsIEZpbGxQ
YXRoCiAgICAgLCBGaWxsUmVjdApAQCAtMjI4OCwyMyArMTcyOSwxNSBAQCB1c2luZyBEaXNwbGF5
TGlzdEl0ZW0gPSBzdGQ6OnZhcmlhbnQKICAgICAsIEZpbGxSb3VuZGVkUmVjdAogICAgICwgRmx1
c2hDb250ZXh0CiAgICAgLCBSZXN0b3JlCi0gICAgLCBSb3RhdGUKICAgICAsIFNhdmUKLSAgICAs
IFNjYWxlCi0gICAgLCBTZXRDVE0KICAgICAsIFNldElubGluZUZpbGxDb2xvcgogICAgICwgU2V0
SW5saW5lU3Ryb2tlQ29sb3IKLSAgICAsIFNldExpbmVDYXAKLSAgICAsIFNldExpbmVEYXNoCi0g
ICAgLCBTZXRMaW5lSm9pbgotICAgICwgU2V0TWl0ZXJMaW1pdAogICAgICwgU2V0U3RhdGUKICAg
ICAsIFNldFN0cm9rZVRoaWNrbmVzcwogICAgICwgU3Ryb2tlRWxsaXBzZQogICAgICwgU3Ryb2tl
TGluZQogICAgICwgU3Ryb2tlUGF0aAogICAgICwgU3Ryb2tlUmVjdAotICAgICwgVHJhbnNsYXRl
CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICAsIEZpbGxMaW5lCkBAIC0yMzQx
LDIwICsxNzc0LDEwIEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlPiB7CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2F2ZSwKICAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJlc3RvcmUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpSb3RhdGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTY2FsZSwK
LSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldENUTSwKLSAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNLAogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yLAogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3MsCiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNldExpbmVDYXAsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRMaW5lRGFzaCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNl
dExpbmVKb2luLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJM
aW1pdCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyU2hhZG93LAog
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcCwKICAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBPdXQsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlciwKQEAgLTIzNzYsNyArMTc5OSw2IEBAIHRlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7
CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdCwKICAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yLAogICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQsCi0gICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QsCiAgICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QsCiAgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcAppbmRleCBlZWU0NDcxZDM1NGU3NTE1MzEyNTE4OWRmY2M5NDE4YTM5NDUxNGExLi5h
NTM1MDk5ODBhOTMxNDA3ZTkxZTU0ZjlmOTIzMjVjZTVlNWQwNWRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC00MiwzNTAgKzQyLDE4OSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotUmVjb3JkZXI6OlJlY29y
ZGVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBp
bml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0g
ICAgOiBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQot
ewotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENU
TS5tYXBSZWN0KGluaXRpYWxDbGlwKSB9KTsKLX0KK1JlY29yZGVyOjpSZWNvcmRlcihjb25zdCBG
bG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0s
IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJh
d0dseXBocykKKyAgICA6IEdyYXBoaWNzQ29udGV4dChpbml0aWFsQ2xpcCwgeyB9LCAgaW5pdGlh
bENUTSkKKyAgICAsIG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBkZWNvbnN0cnVjdERyYXdH
bHlwaHMpCiAKLVJlY29yZGVyOjp+UmVjb3JkZXIoKQogewotICAgIEFTU0VSVChtX3N0YXRlU3Rh
Y2suc2l6ZSgpID09IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBpdCBpbmRpY2F0ZXMgbWlzbWF0Y2hl
ZCBzYXZlL3Jlc3RvcmUuCiB9CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRl
Q2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBpbmxp
bmVTdGF0ZUNoYW5nZUZsYWdzIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNv
bG9yQ2hhbmdlLAotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdl
LAotICAgIH07Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MgIT0gKGNoYW5nZUZsYWdzICYgaW5saW5l
U3RhdGVDaGFuZ2VGbGFncykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2Up
ICYmICFjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKK1JlY29yZGVyOjp+UmVjb3JkZXIoKSA9IGRlZmF1bHQ7CiAK
LSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxD
b2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5
dGVzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIGNoYW5nZUZsYWdzKQordm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7Ci0gICAgaWYgKCFjb250
YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7Ci0gICAg
ICAgIGlmIChhdXRvIHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAg
ICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKLSAgICAg
ICAgaWYgKGF1dG8gcGF0dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5maWxsUGF0dGVybikKLSAgICAg
ICAgICAgIHJlY29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKLSAgICAgICAg
cmVjb3JkU2V0U3RhdGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0SW5saW5lU3Ry
b2tlQ29sb3IoKmNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMo
KSk7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldFN0cm9rZVRoaWNrbmVz
cyhjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChjaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAg
ICAgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLnRy
eUdldEFzU1JHQkFCeXRlcygpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKKyAgICBy
ZWNvcmRTYXZlKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCkKK3ZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQogewotICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGN1cnJlbnRseSBpbnZva2VkIGluIGFuIGFkLWhvYyBtYW5uZXIgd2hlbiByZWNvcmRp
bmcgZHJhd2luZyBpdGVtcy4gV2Ugc2hvdWxkIGNvbnNpZGVyIGVpdGhlcgotICAgIC8vIHNwbGl0
dGluZyBHcmFwaGljc0NvbnRleHQgc3RhdGUgY2hhbmdlcyBpbnRvIGluZGl2aWR1YWwgZGlzcGxh
eSBsaXN0IGl0ZW1zLCBvciByZWZhY3RvcmluZyB0aGUgY29kZSBzdWNoIHRoYXQKLSAgICAvLyB0
aGlzIG1ldGhvZCBpcyBhdXRvbWF0aWNhbGx5IGludm9rZWQgd2hlbiByZWNvcmRpbmcgYSBkcmF3
aW5nIGl0ZW0uCi0gICAgYXV0byYgc3RhdGVDaGFuZ2VzID0gY3VycmVudFN0YXRlKCkuc3RhdGVD
aGFuZ2U7Ci0gICAgYXV0byBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFu
Z2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOwotICAgIGlmICgh
Y2hhbmdlc0Zyb21MYXN0U3RhdGUpCisgICAgaWYgKCFzdGFja1NpemUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJwcmUt
ZHJhd2luZywgc2F2aW5nIHN0YXRlICIgPDwgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3Rh
dGVDaGFuZ2VzLm1fc3RhdGUsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKSk7Ci0gICAgYXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtKHN0YXRlQ2hhbmdlcywgY2hhbmdlc0Zyb21MYXN0U3RhdGUpOwotICAgIHN0
YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0geyB9OwotICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3RE
cmF3aW5nU3RhdGUgPSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsKLX0KLQotY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIFJlY29yZGVyOjpzdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJl
bnRTdGF0ZSgpLnN0YXRlQ2hhbmdlLm1fc3RhdGU7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRpZFVw
ZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgY3VycmVudFN0YXRlKCku
c3RhdGVDaGFuZ2UuYWNjdW11bGF0ZShzdGF0ZSwgZmxhZ3MpOwotfQotCi12b2lkIFJlY29yZGVy
OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICByZWNvcmRTZXRMaW5lQ2FwKGxp
bmVDYXApOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkm
IGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICByZWNvcmRTZXRMaW5lRGFzaChk
YXNoQXJyYXksIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihM
aW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICByZWNvcmRTZXRMaW5lSm9pbihsaW5lSm9pbik7Ci19
Ci0KLXZvaWQgUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLXsKLSAg
ICByZWNvcmRTZXRNaXRlckxpbWl0KG1pdGVyTGltaXQpOworICAgIEdyYXBoaWNzQ29udGV4dDo6
cmVzdG9yZSgpOworICAgIHJlY29yZFJlc3RvcmUoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJl
c3VsdHMpCit2b2lkIFJlY29yZGVyOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgYXBwZW5k
U3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgZWZmZWN0IDog
ZmlsdGVyLmVmZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgewotICAg
ICAgICBhdXRvJiBmZUltYWdlID0gZG93bmNhc3Q8RkVJbWFnZT4oZWZmZWN0LmdldCgpKTsKLSAg
ICAgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShmZUltYWdlLnNvdXJjZUltYWdlKCkpKSB7Ci0g
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJj
ZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXNvdXJjZUltYWdlKSB7Ci0gICAg
ICAgIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKG51bGxwdHIsIHNvdXJjZUltYWdlUmVj
dCwgZmlsdGVyKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQogICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZSgqc291cmNlSW1hZ2UpKSB7Ci0g
ICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1h
Z2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBz
b3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7Ci19CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17
Ci0gICAgbV9kcmF3R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwotfQorICAgIGlmIChz
dGF0ZSgpLmhhc09ubHlQcmltaXRpdmVDaGFuZ2VzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRlKCku
Y2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVz
aCkpCisgICAgICAgICAgICByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoKmZpbGxDb2xvcigpLnRy
eUdldEFzU1JHQkFCeXRlcygpKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hl
Rm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
LXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFJl
c291cmNlVXNlKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKTsKLSAgICByZWNvcmREcmF3R2x5cGhz
KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9k
ZSk7Ci19CisgICAgICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaCkpCisgICAgICAgICAgICByZWNvcmRTZXRJ
bmxpbmVTdHJva2VDb2xvcigqc3Ryb2tlQ29sb3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CiAK
LXZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcykpCisgICAg
ICAgICAgICByZWNvcmRTZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwogCi0g
ICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKKyAgICAgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZl
SW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKLSAgICByZWNv
cmREcmF3TmF0aXZlSW1hZ2UoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGlt
YWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVy
OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkKLXsKLSAgICByZWNvcmREcmF3U3lzdGVtSW1hZ2Uoc3lzdGVt
SW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5n
ZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKLSAgICBy
ZWNvcmREcmF3UGF0dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVz
dFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZUJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotCi0gICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoKSkgeworICAgICAgICBpZiAoYXV0byBwYXR0
ZXJuID0gZmlsbFBhdHRlcm4oKSkKKyAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKHBhdHRl
cm4tPnRpbGVJbWFnZSgpKTsKICAgICB9CiAKLSAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZUJ1
ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXI6OnNhdmUoKQotewotICAgIHJlY29yZFNhdmUoKTsKLSAgICBtX3N0YXRlU3RhY2suYXBw
ZW5kKG1fc3RhdGVTdGFjay5sYXN0KCkuY2xvbmVGb3JTYXZlKCkpOwotfQotCi12b2lkIFJlY29y
ZGVyOjpyZXN0b3JlKCkKLXsKLSAgICBpZiAoIW1fc3RhdGVTdGFjay5zaXplKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKSB7CisgICAgICAgIGlmIChhdXRvIHBhdHRl
cm4gPSBzdHJva2VQYXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0
ZXJuLT50aWxlSW1hZ2UoKSk7CisgICAgfQogCi0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3Qo
KTsKLSAgICByZWNvcmRSZXN0b3JlKCk7CisgICAgcmVjb3JkU2V0U3RhdGUoc3RhdGUoKSk7Cisg
ICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6dHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkp
OwotICAgIHJlY29yZFRyYW5zbGF0ZSh4LCB5KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6cm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5
U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkucm90YXRlKGFuZ2xlSW5SYWRp
YW5zKTsKLSAgICByZWNvcmRSb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5
RmlsbFBhdHRlcm4oKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUpOwotICAgIHJl
Y29yZFNjYWxlKHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQXBw
bHlGaWxsUGF0dGVybigpOwogfQorI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7Ci0gICAgaWYgKHRyYW5z
Zm9ybS5pc0lkZW50aXR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgY3VycmVu
dFN0YXRlKCkuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgcmVjb3JkQ29uY2F0ZW5hdGVDVE0o
dHJhbnNmb3JtKTsKKyAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGlj
aCB3aWxsIGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KKyAgICAvLyBBc3Nl
cnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPworICAgIHJlY29yZEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIFJlY29yZGVyOjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgY3VycmVudFN0YXRlKCku
c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgcmVjb3JkU2V0Q1RNKHRyYW5zZm9ybSk7Ci19CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0o
R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGN1cnJlbnRTdGF0ZSgpLmN0bTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAKLXZv
aWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAg
ICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNldEFscGhhKG9wYWNp
dHkpOwogICAgIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgbV9z
dGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yVHJhbnNwYXJlbmN5
TGF5ZXIoKSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBhcHBlbmRTdGF0
ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdSZWN0KHJlY3QsIGJvcmRl
clRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFwcGVuZFN0YXRl
Q2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0xpbmUocG9pbnQxLCBwb2lu
dDIpOwotfQorICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tl
U3R5bGUpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICBy
ZWNvcmREcmF3TGluZXNGb3JUZXh0KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKKyAgICByZWNvcmRFbmRU
cmFuc3BhcmVuY3lMYXllcigpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCit2b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIHJlY29yZENsaXAocmVjdCk7
CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRS
dWxlKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkRHJhd0VsbGlwc2UocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAgICByZWNvcmRDbGlwUGF0
aChwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCit2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERy
YXdQYXRoKHBhdGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xpcE91
dChyZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVD
aGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChwYXRo
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBy
ZWNvcmRDbGlwT3V0VG9QYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJl
Y29yZERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwotfQor
ICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVj
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSNpZiBQTEFURk9STShNQUMpCi12b2lkIFJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBD
b2xvciYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJl
Y3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQordm9pZCBSZWNvcmRlcjo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xlYXJSZWN0KHJlY3QpOwogfQot
I2VuZGlmCiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihyZWN0LCBjb2xvcik7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVu
dChyZWN0LCBncmFkaWVudCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
QmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsQ29tcG9zaXRl
ZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBS
ZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsUm91bmRl
ZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3Qs
IGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOwotICAgIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xl
UmVjdCwgY29sb3IpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbEVs
bGlwc2UocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChw
YXRoLmhhc0lubGluZURhdGEoKSkgewogICAgICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPExp
bmVEYXRhPigpKQpAQCAtNDAyLDIxICsyNDEsMjEgQEAgdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKICAgICByZWNvcmRGaWxsUGF0aChwYXRoKTsKIH0KIAotdm9pZCBS
ZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRl
cjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29y
ZEZpbGxFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3Jk
U3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVyOjpz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBS
ZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRTdHJva2VSZWN0KHJl
Y3QsIGxpbmVXaWR0aCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRTdHJv
a2VFbGxpcHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
IGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewogICAgICAgICBpZiAocGF0aC5oYXNJbmxpbmVE
YXRhPExpbmVEYXRhPigpKQpAQCAtNDMzLDE0OCArMjcyLDE2OCBAQCB2b2lkIFJlY29yZGVyOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkU3Ryb2tlUGF0aChwYXRoKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OwotICAgIHJlY29yZFN0cm9rZUVsbGlwc2UocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICByZWNvcmREcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lk
IFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRl
cjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICBy
ZWNvcmRDbGVhclJlY3QocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNv
cmREcmF3TGluZShwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0UoQ0cpCi12b2lkIFJlY29y
ZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7Ci0gICAgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmREcmF3RWxsaXBzZShyZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRl
cjo6YXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAg
cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
cmVjb3JkRHJhd1BhdGgocGF0aCk7CiB9Ci0jZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6Y2xpcChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChjdXJyZW50U3Rh
dGUoKS5jdG0ubWFwUmVjdChyZWN0KSk7Ci0gICAgcmVjb3JkQ2xpcChyZWN0KTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIHJlY29yZENsaXBPdXQocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQs
IGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQor
I2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0
aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKIHsKLSAgICByZWNvcmRDbGlwT3V0VG9Q
YXRoKHBhdGgpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQordm9pZCBSZWNvcmRl
cjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYs
IGNvbnN0IENvbG9yJikKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2Vj
dChjdXJyZW50U3RhdGUoKS5jdG0ubWFwUmVjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSkpOwot
ICAgIHJlY29yZENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQorI2VuZGlmCiAKLUludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAordm9p
ZCBSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoYXV0byBpbnZlcnNlID0g
Y3VycmVudFN0YXRlKCkuY3RtLmludmVyc2UoKSkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QoaW52ZXJzZS0+bWFwUmVjdChjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzKSk7CisgICAg
aWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIC8vIElmIHRoZSBDVE0gaXMg
bm90IGludmVydGlibGUsIHJldHVybiB0aGUgb3JpZ2luYWwgcmVjdC4KLSAgICAvLyBUaGlzIG1h
dGNoZXMgQ0dSZWN0QXBwbHlJbnZlcnNlQWZmaW5lVHJhbnNmb3JtIGJlaGF2aW9yLgotICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRl
ciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQogewotICAgIHJlY29yZFJlc291cmNl
VXNlKGltYWdlQnVmZmVyKTsKLSAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ciwgZGVzdFJlY3QpOwotfQorICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVjdHNP
ZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgeworICAgICAgICBhdXRvJiBmZUlt
YWdlID0gZG93bmNhc3Q8RkVJbWFnZT4oZWZmZWN0LmdldCgpKTsKKyAgICAgICAgaWYgKCFyZWNv
cmRSZXNvdXJjZVVzZShmZUltYWdlLnNvdXJjZUltYWdlKCkpKSB7CisgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJ
bWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRl
cmluZ01ldGhvZCkgY29uc3QKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01v
ZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdNZXRob2Q6OkRpc3BsYXlMaXN0
KSk7Ci19CisgICAgaWYgKCFzb3VyY2VJbWFnZSkgeworICAgICAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgICAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihudWxscHRyLCBzb3Vy
Y2VJbWFnZVJlY3QsIGZpbHRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSNpZiBFTkFC
TEUoVklERU8pCi12b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
IHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoIXBsYXll
ci5pZGVudGlmaWVyKCkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9y
TWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZSgq
c291cmNlSW1hZ2UpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBBU1NFUlQocGxheWVyLmlkZW50aWZpZXIoKSk7
Ci0gICAgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworCisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwogfQotI2VuZGlmCiAKLXZv
aWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IpCit2b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKIHsKLSAgICAvLyBXZSBtb2RpZnkgdGhlIHN0YXRlIGRpcmVjdGx5IGhlcmUgaW5zdGVhZCBv
ZiBjYWxsaW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoKQotICAgIC8vIGJlY2F1c2UgdGhlIHJl
Y29yZGVkIGl0ZW0gd2lsbCBzY2FsZSgpIHdoZW4gcmVwbGF5ZWQuCi0gICAgY3VycmVudFN0YXRl
KCkuc2NhbGUoeyBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IgfSk7CisgICAg
cmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
cmVjb3JkRHJhd05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KIAotICAgIC8vIEZJ
WE1FOiB0aGlzIGNoYW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwg
b2Ygb3VyIGNhY2hlZCBleHRlbnRzLgotICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBjYWxs
ZWQgZWFybHkgb24/Ci0gICAgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2Fs
ZUZhY3Rvcik7Cit2b2lkIFJlY29yZGVyOjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5
c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3sKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwg
ZGVzdGluYXRpb25SZWN0KTsKIH0KIAotRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01v
ZGUpCit2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZp
Y2VQaXhlbHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXIuIik7Ci0gICAgcmV0dXJuIHJlY3Q7CisgICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi1jb25zdCBSZWNvcmRlcjo6
Q29udGV4dFN0YXRlJiBSZWNvcmRlcjo6Y3VycmVudFN0YXRlKCkgY29uc3QKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGVTdGFj
ay5sYXN0KCk7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihpbWFnZUJ1ZmZlciwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJl
Y29yZERyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
LCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKTsKIH0KIAotUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRT
dGF0ZSgpCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1l
ZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7
Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJldHVybiBtX3N0YXRlU3Rh
Y2subGFzdCgpOworICAgIGlmICghcGxheWVyLmlkZW50aWZpZXIoKSkgeworICAgICAgICBHcmFw
aGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllci5pZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uKTsK
IH0KKyNlbmRpZgogCi1jb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25z
dAordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMs
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNt
b290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCku
Y3RtOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgbV9kcmF3R2x5cGhzUmVjb3JkZXIu
ZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQs
IHNtb290aGluZ01vZGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hl
Rm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
IHsKLSAgICBjdG0udHJhbnNsYXRlKHgsIHkpOworICAgIHJlY29yZFJlc291cmNlVXNlKGNvbnN0
X2Nhc3Q8Rm9udCY+KGZvbnQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29y
ZERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBz
bW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUo
ZmxvYXQgYW5nbGVJblJhZGlhbnMpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKIHsK
LSAgICBkb3VibGUgYW5nbGVJbkRlZ3JlZXMgPSByYWQyZGVnKHN0YXRpY19jYXN0PGRvdWJsZT4o
YW5nbGVJblJhZGlhbnMpKTsKLSAgICBjdG0ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKLSAgICAK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gcm90YXRpb247Ci0gICAgcm90YXRpb24ucm90YXRlKGFuZ2xl
SW5EZWdyZWVzKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdMaW5l
c0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMp
OwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBj
dG0uc2NhbGUoc2l6ZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6
Q29udGV4dFN0YXRlOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCitSZWZQ
dHI8SW1hZ2VCdWZmZXI+IFJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01v
ZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0
CiB7Ci0gICAgY3RtID0gbWF0cml4OworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgcmVuZGVyaW5nTWV0aG9kLnZhbHVlX29yKFJlbmRlcmluZ01ldGhvZDo6RGlzcGxheUxp
c3QpKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCitGbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5n
TW9kZSkKIHsKLSAgICBjdG0gKj0gbWF0cml4OworICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3ND
b250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGgg
RGlzcGxheUxpc3Q6OlJlY29yZGVyLiIpOworICAgIHJldHVybiByZWN0OwogfQogCiB9IC8vIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
aW5kZXggODQ1ZWMwMDc3MmVkMmM1NGExZTZjYjI2YjIxNTFkYWJhYTZlYzA3NS4uYWUzNDM3OWJl
NjdmMDVlMTA0MmY2YWRjNWFhYmY4OGMyNzBjMTczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJ
dGVtcy5oIgogI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUu
CiAjaW5jbHVkZSAiSW5saW5lUGF0aERhdGEuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTUxLDcgKzUwLDcgQEAgY2xhc3MgUmVjb3Jk
ZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBwdWJsaWM6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgUmVjb3JkZXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBG
bG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVj
b25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlh
bENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5
cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKSA9IDA7CkBAIC02MSw0NyArNjAsMzUgQEAgcHVibGljOgogcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTYXZlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRSZXN0b3JlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQg
YW5nbGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXpl
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0SW5saW5l
RmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNl
dElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNl
dExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZFNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZFNldE1pdGVyTGltaXQoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xl
YXJTaGFkb3coKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJikgPSAwOworCisjaWYgVVNFKENHKQorICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZEFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJl
Y29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHJlY29y
ZENsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
Q2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZENs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
blJlY3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQ
YXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwg
V2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmls
dGVyJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5n
TW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRl
bnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1J
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJh
d1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5j
aG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29u
c3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgo
Y29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29u
c3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZp
bGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9k
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25zdCBBcmNEYXRhJikgPSAw
OwpAQCAtMTA5LDExICs5NiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29y
ZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSA9IDA7CiAjZW5kaWYKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotI2lmIEVO
QUJMRShWSURFTykKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgPSAwOwotI2VuZGlmCi0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVE
YXRhJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3QgQXJjRGF0
YSYpID0gMDsKQEAgLTEyMSwxMTYgKzEwNyw4MSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpID0gMDsK
ICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JikgPSAwOwotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQ
YXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50Mikg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRo
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIEZpbHRlciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdl
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0
dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgPSAwOwogI2VuZGlmCi0gICAgdmlydHVh
bCB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0
IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1h
Z2UmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKEltYWdlQnVmZmVy
JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShjb25zdCBTb3VyY2VJ
bWFnZSYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoRm9udCYpID0g
MDsKIAotICAgIHN0cnVjdCBDb250ZXh0U3RhdGUgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3RtOwotICAgICAgICBGbG9hdFJlY3QgY2xpcEJvdW5kczsKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2U7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
IGxhc3REcmF3aW5nU3RhdGU7Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UmVjdCYgY2xpcCkKLSAgICAgICAgICAgIDogY3RtKHRyYW5zZm9ybSkKLSAgICAg
ICAgICAgICwgY2xpcEJvdW5kcyhjbGlwKQotICAgICAgICAgICAgLCBsYXN0RHJhd2luZ1N0YXRl
KHN0YXRlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBDb250ZXh0U3RhdGUgY2xv
bmVGb3JTYXZlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQ29udGV4dFN0YXRlIHN0
YXRlKGxhc3REcmF3aW5nU3RhdGUsIGN0bSwgY2xpcEJvdW5kcyk7Ci0gICAgICAgICAgICBzdGF0
ZS5zdGF0ZUNoYW5nZSA9IHN0YXRlQ2hhbmdlOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlIGNsb25lRm9yVHJhbnNwYXJlbmN5TGF5
ZXIoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHN0YXRlID0gY2xvbmVGb3JT
YXZlKCk7Ci0gICAgICAgICAgICBzdGF0ZS5sYXN0RHJhd2luZ1N0YXRlLmFscGhhID0gMTsKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpOwotICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUlu
UmFkaWFucyk7Ci0gICAgICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgICAg
IHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgICAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB9OwotCi0gICAgY29uc3QgVmVjdG9y
PENvbnRleHRTdGF0ZSwgND4mIHN0YXRlU3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlU3Rh
Y2s7IH0KLQotICAgIGNvbnN0IENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCkgY29uc3Q7Ci0g
ICAgQ29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01vZGU+LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4pIGNv
bnN0IG92ZXJyaWRlOworICAgIAorCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxw
dHI7IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0NB
TGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5U3Ry
b2tlUGF0dGVybigpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlGaWxsUGF0
dGVybigpIGZpbmFsOwogI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseURldmlj
ZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKIAotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1w
bChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUoKSBjb25zdCBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZl
bk9kZCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBQYXRo
JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hP
ZmZzZXQpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGluZUpvaW4oTGluZUpv
aW4pIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJs
ZW5kTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotI2lmIFVTRShDRykKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwotI2VuZGlmCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFs
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBG
aWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBG
b250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUGF0aChjb25z
dCBQYXRoJikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQyKSBmaW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
UGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJikgZmluYWw7CkBAIC0yNDEsNDAgKzE5MiwyMyBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJs
ZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNl
bmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByZXN0b3JlKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZp
bmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0
IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBh
dGgmLCBXaW5kUnVsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBjbGlwQm91
bmRzKCkgY29uc3QgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
cmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
ZmluYWw7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikg
ZmluYWw7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2lu
dCwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCos
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBv
aW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSkgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9k
ZSkgZmluYWw7CiAKLSAgICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
Ci0gICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAg
ICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwotCi0gICAgVmVjdG9yPENvbnRl
eHRTdGF0ZSwgND4gbV9zdGF0ZVN0YWNrOwogICAgIERyYXdHbHlwaHNSZWNvcmRlciBtX2RyYXdH
bHlwaHNSZWNvcmRlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuY3BwCmluZGV4IDFmZGM2YmE1NmJmZGIyNjM2ZWZiMzQ2MmFkYTJhOTkwZDMzODk5
NDUuLjFmYjRkZDc5NWFlMTBhYThjY2NiY2RkODMxNGVlYTgwODZlOGRiNjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcApAQCAtNDIsMTggKzQyLDEz
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNv
cmRlckltcGw6OlJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRl
Y29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBSZWNvcmRl
cihzdGF0ZSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykK
K1JlY29yZGVySW1wbDo6UmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29u
c3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFs
Q1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVj
dERyYXdHbHlwaHMpCisgICAgOiBSZWNvcmRlcihpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSwgZGVj
b25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKIHsK
ICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVjb3JkaW5n
IHdpdGggY2xpcCAiIDw8IGluaXRpYWxDbGlwKTsKIH0KIAotUmVjb3JkZXJJbXBsOjp+UmVjb3Jk
ZXJJbXBsKCkKLXsKLSAgICBBU1NFUlQoc3RhdGVTdGFjaygpLnNpemUoKSA9PSAxKTsgLy8gSWYg
dGhpcyBmaXJlcywgaXQgaW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgotfQotCiB2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2F2ZSgpCiB7CiAgICAgYXBwZW5kPFNhdmU+KCk7CkBA
IC02NCwzMSArNTksNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUmVzdG9yZSgpCiAgICAg
YXBwZW5kPFJlc3RvcmU+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBhcHBlbmQ8VHJhbnNsYXRlPih4LCB5KTsKLX0K
LQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBh
cHBlbmQ8Um90YXRlPihhbmdsZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTY2Fs
ZShjb25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIGFwcGVuZDxTY2FsZT4oc2NhbGUpOwot
fQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQotewotICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5zZm9ybSk7Ci19Ci0KLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KHRyYW5zZm9ybSk7
Ci19Ci0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8
dWludDhfdD4gaW5saW5lQ29sb3IpCiB7CiAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4o
aW5saW5lQ29sb3IpOwpAQCAtMTA0LDkyICs3NCwyNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBhcHBlbmQ8U2V0U3Ry
b2tlVGhpY2tuZXNzPih0aGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKLXsKLSAgICBhcHBlbmQ8U2V0
U3RhdGU+KHN0YXRlLCBjaGFuZ2VGbGFncyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBhcHBlbmQ8U2V0TGluZUNhcD4o
bGluZUNhcCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmIGFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGFwcGVuZDxTZXRM
aW5lRGFzaD4oYXJyYXksIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkU2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBhcHBlbmQ8U2V0TGluZUpvaW4+
KGpvaW4pOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9h
dCBsaW1pdCkKLXsKLSAgICBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4obGltaXQpOwotfQotCi12b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIGFwcGVuZDxDbGVhclNo
YWRvdz4oKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXAoY29uc3QgRmxvYXRS
ZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBhcHBlbmQ8Q2xpcD4oY2xpcFJlY3QpOwotfQotCi12b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQor
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSkKIHsKLSAgICBhcHBlbmQ8Q2xpcE91dD4oY2xpcFJlY3QpOworICAgIGFwcGVu
ZDxTZXRTdGF0ZT4oc3RhdGUpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKLXsKLSAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVm
ZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpOwotfQot
Ci12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKLX0KLQotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCi17
Ci0gICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCBydWxlKTsKLX0KLQotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQotewot
ICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVy
OwotICAgIGlmIChzb3VyY2VJbWFnZSkKLSAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdl
LT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKLSAgICBhcHBlbmQ8RHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXI+KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVy
KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxB
bmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCi17Ci0gICAgYXBwZW5kPERyYXdHbHlwaHM+
KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVu
ZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdl
SWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCisjaWYgVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFw
cGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2VJ
ZGVudGlmaWVyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBh
cHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxs
UGF0dGVybigpCiB7Ci0gICAgYXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRl
c3RpbmF0aW9uUmVjdCk7CisgICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CiB9CisjZW5k
aWYgLy8gVVNFKENHKQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4oUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3Ip
CiB7Ci0gICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0
aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgYXBwZW5k
PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKIH0KIAogdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKQEAgLTIw
Miw0NCArMTA2LDM0IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lM
YXllcigpCiAgICAgYXBwZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpOwogfQogCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
aW5lV2lkdGgpCi17Ci0gICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBsaW5lV2lkdGgpOwotfQot
Ci12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXBwZW5kPERyYXdMaW5lPihw
b2ludDEsIHBvaW50Mik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
bG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
Q2xpcChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIGFwcGVuZDxEcmF3TGluZXNG
b3JUZXh0PihibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHBy
aW50aW5nLCBkb3VibGVMaW5lcyk7CisgICAgYXBwZW5kPENsaXA+KGNsaXBSZWN0KTsKIH0KIAot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgcnVsZSkKIHsKLSAgICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwg
c3R5bGUpOworICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7CiB9CiAKLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQog
ewotICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7CisgICAgYXBwZW5kPENsaXBPdXQ+KGNs
aXBSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7CisgICAgYXBwZW5kPENs
aXBPdXRUb1BhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0Zv
Y3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCiB7Ci0gICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcik7CisgICAgYXBwZW5kPENsaXBUb0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZl
ci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJlY3RzLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcik7CisgICAgYXBwZW5kPENsZWFyUmVjdD4ocmVjdCk7CiB9CiAKIHZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBA
IC0yNTcsMjMgKzE1MSwyMiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRo
R3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZwogICAgIGFwcGVuZDxG
aWxsUmVjdFdpdGhHcmFkaWVudD4ocmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmQ8RmlsbENvbXBv
c2l0ZWRSZWN0PihyZWN0LCBjb2xvciwgb3AsIG1vZGUpOworICAgIGFwcGVuZDxGaWxsUm91bmRl
ZFJlY3Q+KHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIEJsZW5kTW9kZSBtb2RlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmQ8RmlsbFJv
dW5kZWRSZWN0PihyZWN0LCBjb2xvciwgbW9kZSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPihyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5k
ZWRSZWN0LCBjb2xvcik7CisgICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKIH0KIAogI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmls
bExpbmUoY29uc3QgTGluZURhdGEmIGxpbmUpCiB7CiAgICAgYXBwZW5kPEZpbGxMaW5lPihsaW5l
KTsKQEAgLTI5Myw3ICsxODYsNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEJlemll
ckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYgY3VydmUpCiB7CiAgICAgYXBwZW5kPEZpbGxC
ZXppZXJDdXJ2ZT4oY3VydmUpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQpAQCAtMzAxLDI1ICsxOTMsMTcgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgYXBwZW5kPEZpbGxQYXRoPihwYXRoKTsKIH0KIAotdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBhcHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwotfQotCi0jaWYgRU5BQkxFKFZJREVP
KQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
ciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJU
aGlja25lc3MpCiB7Ci0gICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4ocGxheWVyLCBkZXN0
aW5hdGlvbik7CisgICAgYXBwZW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7
CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCB3aWR0aCk7CisgICAgYXBwZW5kPFN0cm9rZUVs
bGlwc2U+KHJlY3QpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0KIHZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewog
ICAgIGFwcGVuZDxTdHJva2VMaW5lPihsaW5lKTsKQEAgLTMzOSw3ICsyMjMsNiBAQCB2b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRh
JiBjdXJ2ZSkKIHsKICAgICBhcHBlbmQ8U3Ryb2tlQmV6aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQog
I2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzQ3LDMzICsyMzAsODQgQEAg
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAg
ICBhcHBlbmQ8U3Ryb2tlUGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKIHsKLSAgICBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CisgICAgYXBwZW5kPERy
YXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKIHsKLSAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKKyAgICBhcHBlbmQ8
RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAg
YXBwZW5kPERyYXdFbGxpcHNlPihyZWN0KTsKK30KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZEFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpOwor
ICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRBcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNS
aW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CisgICAg
YXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9
CiAKLSNlbmRpZiAvLyBVU0UoQ0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3Vz
UmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGFwcGVuZDxEcmF3Rm9jdXNS
aW5nUmVjdHM+KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Cit9CiAKLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQor
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhcHBlbmQ8QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcj4oc2NhbGVGYWN0b3IpOworICAgIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+
KGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3sKKyAg
ICBhcHBlbmQ8RHJhd1N5c3RlbUltYWdlPihzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsK
K30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
YXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQor
eworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlm
aWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkKKyAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUlt
YWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBhcHBlbmQ8RHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXI+KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgZmls
dGVyKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhcHBlbmQ8
RHJhd1BhdHRlcm4+KGltYWdlSWRlbnRpZmllciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAg
YXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4oaWRlbnRpZmllciwgZGVzdGluYXRpb24pOworfQor
I2VuZGlmCisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2Fs
QW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQoreworICAgIGFwcGVuZDxEcmF3R2x5cGhz
Pihmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUpOworfQor
Cit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3sKKyAgICBhcHBlbmQ8RHJhd0xpbmVzRm9y
VGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhz
LCBwcmludGluZywgZG91YmxlTGluZXMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERv
Y3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3sKKyAgICBhcHBlbmQ8RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOwogfQogCiBib29sIFJlY29yZGVySW1wbDo6cmVj
b3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlKQpAQCAtNDE3LDIwICszNTEs
MTYgQEAgc3RhdGljIGlubGluZSBmbG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVy
UmFkaXVzKQogCiBGbG9hdFJlY3QgUmVjb3JkZXJJbXBsOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewotICAgIEZsb2F0UmVjdCBib3VuZHMgPSBy
ZWN0OwotICAgIGF1dG8mIHN0YXRlID0gY3VycmVudFN0YXRlKCk7CisgICAgYXV0byBib3VuZHMg
PSByZWN0OwogCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dS
YWRpdXM7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBz
aGFkb3dFeHRlbnQgPSBib3VuZHM7Ci0gICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09m
ZnNldCk7Ci0gICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50
KHNoYWRvd1JhZGl1cykpOworICAgIGlmIChoYXNTaGFkb3coKSkgeworICAgICAgICBhdXRvIHNo
YWRvd0V4dGVudCA9IGJvdW5kczsKKyAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoZHJvcFNoYWRv
dygpLm9mZnNldCk7CisgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5n
RXh0ZW50KGRyb3BTaGFkb3coKS5ibHVyUmFkaXVzKSk7CiAgICAgICAgIGJvdW5kcy51bml0ZShz
aGFkb3dFeHRlbnQpOwogICAgIH0KIAotICAgIHJldHVybiBpbnRlcnNlY3Rpb24oc3RhdGUuY2xp
cEJvdW5kcywgc3RhdGUuY3RtLm1hcFJlY3QoYm91bmRzKSk7CisgICAgcmV0dXJuIGludGVyc2Vj
dGlvbihjbGlwQm91bmRzKCksIGdldENUTSgpLm1hcFJlY3QoYm91bmRzKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIERpc3BsYXlMaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVySW1wbC5oCmluZGV4IDY0MjI2NWYwOTgwMjJjZjJiMDVmMTgwYzE3NGZhMDM0NjJmMmRkNDAu
LjZkZTZhZWRmZmNiMTdkYjJkMDgxYjQyYzFkZTZiYzMyOWEzOGJmNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCkBAIC0zNSw5ICszNSw4IEBAIGNsYXNz
IFJlY29yZGVySW1wbCA6IHB1YmxpYyBSZWNvcmRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXJJbXBsKTsKIHB1YmxpYzoK
LSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmLCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhz
ID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXJJbXBsKCk7Ci0KKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0sIERyYXdHbHlwaHNS
ZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNv
bnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CisgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0KIAogICAgIHZvaWQgY29udmVydFRv
THVtaW5hbmNlTWFzaygpIGZpbmFsIHsgfQpAQCAtNDcsNDcgKzQ2LDM1IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgdm9pZCByZWNvcmRTYXZlKCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRSZXN0
b3JlKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRT
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDb25j
YXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKwogICAgIHZvaWQgcmVj
b3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRT
ZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVDYXAoTGlu
ZUNhcCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkm
LCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVKb2luKExp
bmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZFNl
dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgZmluYWw7CisKKyNpZiBVU0UoQ0cp
CisgICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIHJl
Y29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCByZWNvcmRC
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKICAgICB2b2lkIHJlY29yZENsaXAoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xp
cE91dFRvUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwUGF0aChj
b25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVj
dCwgRmlsdGVyJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5n
TW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TmF0
aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2Fs
QW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29u
c3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxDb21w
b3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgZmluYWw7Cisg
ICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRGaWxs
TGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25z
dCBBcmNEYXRhJikgZmluYWw7CkBAIC05NSwxMSArODIsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNl
bmRpZgogICAgIHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0jaWYgRU5BQkxF
KFZJREVPKQotICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKLSAgICB2b2lkIHJl
Y29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworCisgICAgdm9p
ZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRT
dHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTdHJva2VB
cmMoY29uc3QgQXJjRGF0YSYpIGZpbmFsOwpAQCAtMTA3LDEzICs5MywyOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikg
ZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSNp
ZiBVU0UoQ0cpCi0gICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3Jk
RHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29u
c3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7
CisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOworCisg
ICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5hbDsKKyAgICB2b2lkIHJl
Y29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZp
bmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZp
bmFsOwogI2VuZGlmCi0gICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZp
bmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50Jiwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxl
JikgZmluYWw7CiAKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJikgZmlu
YWw7CiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShJbWFnZUJ1ZmZlciYpIGZpbmFsOwpAQCAt
MTM5LDYgKzE0MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJl
Y29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCiAgICAgRmxvYXRSZWN0
IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAogICAgIERp
c3BsYXlMaXN0JiBtX2Rpc3BsYXlMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVw
bGF5ZXIuY3BwCmluZGV4IDhmZjE5ZDAwMzU0Y2RiZWRlM2E1YmExYWY3NThjZmYwMjNhMjVhMjIu
LjY2ZmM5ZDg4MmE0ZDNmN2RlOGU4OTEyYTFmMzBhZjE5OGQwMzUyODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTk3LDEwICs5NywxMCBAQCBpbmxpbmUg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBhcHBseVNl
dFN0YXRlSXRlbShHcmFwaAogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH07CiAK
LSAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0
YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkpCisgICAg
aWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0
ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm4gKmltYWdl
SWRlbnRpZmllcjsKIAotICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5U
aWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5maWxsUGF0dGVybi5n
ZXQoKSkpCisgICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFn
ZShzZXRTdGF0ZUl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICBy
ZXR1cm4gKmltYWdlSWRlbnRpZmllcjsKIAogICAgIHNldFN0YXRlSXRlbS5hcHBseShjb250ZXh0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcAppbmRleCBk
MDljMTM3M2VhOWFhYWY0YTE4NTEzNmVlODg1M2Q3ODhmYzQxNzhkLi5mY2FkZWYyMzhlMDlmZTAy
ODJhY2VlYzlhMWYyNWY4NzMzOWQ5YzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1Jl
Y29yZGVySGFyZkJ1enouY3BwCkBAIC0yOSwxNyArMjksMTggQEAKICNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRHJhd0ds
eXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwg
RGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293
bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVy
aXZlRm9udEZyb21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQoZGVzdGluYXRp
b25Db250ZXh0KQogewogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsK
LSAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICBtX2Rlc3RpbmF0
aW9uQ29udGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMs
IG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlci5jcHAKaW5kZXggOTExNDZkZmM2ZmQ4NGRmOGUyOTU0ZjAzNzdkMDA2NmE3
NzIzM2NjOS4uZmViNTg3ODczZTQwMTcwZGFlMzY2NGI1NGI5ZDY1NWM3NmM4MmEwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNv
c2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5j
cHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHly
aWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc3LDE0ICs3OCw3NSBAQCBhdXRvIGNyZWF0ZUNvbW1h
bmQoKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRhPD4s
IFQ+Ojp2YQogfQogCiBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyKFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCi0gICAgOiBtX2NvbW1hbmRMaXN0
KGNvbW1hbmRMaXN0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KEZsb2F0UmVjdDo6aW5maW5pdGVS
ZWN0KCkpCisgICAgLCBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQogewotICAgIG1fc3RhdGVT
dGFjay5hcHBlbmQoeyB7IH0sIHsgfSwgRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSB9KTsKIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzIGZsYWdzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzYXZlKCkKK3sKKyAg
ICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4g
eworICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhl
Y3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnNhdmUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAg
ICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTYXZlPD5cbiI7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CisgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8U2F2ZT4oKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cmVz
dG9yZSgpCit7CisgICAgc3RydWN0IFJlc3RvcmUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmlydHVhbCB+UmVzdG9yZSgpID0gZGVmYXVsdDsK
KworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVy
KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKS5yZXN0b3JlKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
UmVzdG9yZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGlmICghc3RhY2tTaXplKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOworICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPFJlc3RvcmU+KCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSB7CisgICAgaWYgKHN0YXRl
KCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTSkp
IHsKKyAgICAgICAgc3RydWN0IFNldENUTSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4geworICAgICAgICAgICAgdmlydHVhbCB+U2V0Q1RN
KCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8
MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTTw+XG4iOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldENUTT4o
Z2V0Q1RNKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSkgewogICAgICAg
ICBzdHJ1Y3QgU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKICAgICAgICAgICAgIHZpcnR1YWwgflN0cm9rZVRoaWNr
bmVzc0NoYW5nZSgpID0gZGVmYXVsdDsKIApAQCAtOTUsMTQgKzE1NywxNCBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgRwogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJT
dHJva2VUaGlja25lc3NDaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczw+XG4iOwog
ICAgICAgICAgICAgfQogICAgICAgICB9OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PFN0cm9rZVRoaWNrbmVzc0NoYW5nZT4oc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVRoaWNrbmVzc0NoYW5nZT4oc3Ryb2tlVGhpY2tu
ZXNzKCkpKTsKICAgICB9CiAKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlU3R5bGVDaGFuZ2UpIHsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGUpKSB7CiAgICAgICAgIHN0
cnVjdCBTdHJva2VTdHlsZUNoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPFN0cm9rZVN0eWxlPiB7CiAgICAgICAgICAgICB2aXJ0dWFsIH5TdHJva2VTdHlsZUNo
YW5nZSgpID0gZGVmYXVsdDsKIApAQCAtMTEzLDE0ICsxNzUsODYgQEAgdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUsIEcKIAogICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU3Ryb2tl
U3R5bGVDaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlPD5cbiI7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVD
aGFuZ2U+KHN0cm9rZVN0eWxlKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2Vz
KCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcCkpIHsKKyAg
ICAgICAgc3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxMaW5lQ2FwPiB7CisgICAgICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBk
ZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENh
aXJvOjpzZXRMaW5lQ2FwKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3Zl
cnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXA8PlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lQ2FwPihs
aW5lQ2FwKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2gpKSB7CisgICAgICAgIHN0cnVj
dCBTZXRMaW5lRGFzaCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPERh
c2hBcnJheSwgZmxvYXQ+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldExpbmVEYXNoKCkgPSBk
ZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENh
aXJvOjpzZXRMaW5lRGFzaChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFy
ZzwxPigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2g8PlxuIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxT
ZXRMaW5lRGFzaD4obGluZURhc2goKS5kYXNoZXMsIGxpbmVEYXNoKCkub2Zmc2V0KSk7CisgICAg
fQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkxpbmVKb2luKSkgeworICAgICAgICBzdHJ1Y3QgU2V0TGluZUpvaW4gZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lSm9pbj4geworICAgICAg
ICAgICAgdmlydHVhbCB+U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVKb2luKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkxpbmVKb2luPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKCkpKTsKKyAgICB9CisK
KyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6TWl0ZXJMaW1pdCkpIHsKKyAgICAgICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICAg
ICAgdmlydHVhbCB+U2V0TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpNaXRlckxpbWl0PD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0YXRlLnN0cm9rZVN0
eWxlKSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVyTGltaXQ+KG1pdGVy
TGltaXQoKSkpOwogICAgIH0KIAotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpIHsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCku
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSkpIHsK
ICAgICAgICAgc3RydWN0IENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+IHsK
ICAgICAgICAgICAgIHZpcnR1YWwgfkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSgpID0gZGVmYXVs
dDsKIApAQCAtMTMxLDE0ICsyNjUsMTQgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEcKIAogICAg
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ29tcG9zaXRlT3BlcmF0aW9uQ2hh
bmdlPD5cbiI7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVNb2RlPD5cbiI7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH07CiAKLSAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlPihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CisgICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZT4oY29tcG9z
aXRlTW9kZSgpLm9wZXJhdGlvbiwgY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZSkpOwogICAgIH0K
LQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXND
aGFuZ2UpIHsKKyAgICAKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzKSkgewogICAgICAgICBzdHJ1
Y3QgU2hvdWxkQW50aWFsaWFzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8Ym9vbD4gewogICAgICAgICAgICAgdmlydHVhbCB+U2hvdWxkQW50aWFsaWFzQ2hh
bmdlKCkgPSBkZWZhdWx0OwogCkBAIC0xNDksODggKzI4MywxODQgQEAgdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUsIEcKIAogICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2hvdWxk
QW50aWFsaWFzQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXM8PlxuIjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTaG91
bGRBbnRpYWxpYXNDaGFuZ2U+KHN0YXRlLnNob3VsZEFudGlhbGlhcykpOworICAgICAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxTaG91bGRBbnRpYWxpYXNDaGFuZ2U+KHNob3VsZEFudGlhbGlhcygp
KSk7CiAgICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKK30KKwordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
Cit7CisgICAgc3RydWN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICB2aXJ0dWFsIH5CZWdpblRy
YW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8
PCAiQmVnaW5UcmFuc3BhcmVuY3lMYXllcjw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8QmVnaW5UcmFu
c3BhcmVuY3lMYXllcj4ob3BhY2l0eSkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3sKKyAgICBzdHJ1Y3QgRW5kVHJhbnNwYXJlbmN5
TGF5ZXIgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAg
ICAgdmlydHVhbCB+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
KyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJFbmRUcmFuc3BhcmVuY3lMYXllcjw+XG4iOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEVuZFRyYW5zcGFy
ZW5jeUxheWVyPigpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBzdHJ1Y3QgQ2xpcCBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5D
bGlwKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlv
blJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENhaXJv
OjpjbGlwKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcDw+XG4iOworICAgICAgICB9CisgICAg
fTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNs
aXAocmVjdCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcD4ocmVjdCkpOworfQorCit2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIGNsaXBSdWxlKQoreworICAgIHN0cnVjdCBDbGlwUGF0aCBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIFdpbmRSdWxlPiB7CisgICAgICAgIHZpcnR1
YWwgfkNsaXBQYXRoKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGlu
Z09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENhaXJvOjpjbGlwUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCks
IGFyZzwxPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlw
UGF0aDw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocGF0aCwgd2luZFJ1bGUpOworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPENsaXBQYXRoPihwYXRoLCBjbGlwUnVsZSkpOwogfQogCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQordm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBzdHJ1Y3QgU2V0TGluZUNhcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPExpbmVDYXA+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZUNhcCgpID0gZGVmYXVs
dDsKKyAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwT3V0KCkgPSBkZWZhdWx0
OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6
Y2xpcE91dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7
Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldExpbmVDYXA8PlxuIjsKKyAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXApKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+KHJlY3Qp
KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHN0cnVjdCBTZXRMaW5l
RGFzaCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPERhc2hBcnJheSwg
ZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZURhc2goKSA9IGRlZmF1bHQ7CisgICAg
c3RydWN0IENsaXBPdXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQ
YXRoPiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVEYXNoKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmNs
aXBPdXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKICAgICAgICAgfQog
CiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewot
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRMaW5lRGFzaDw+XG4iOworICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0g
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZURhc2g+KGRhc2hlcywgZGFzaE9mZnNldCkp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xp
cE91dD4ocGF0aCkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVK
b2luKExpbmVKb2luIGxpbmVKb2luKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQogewotICAgIHN0cnVjdCBTZXRMaW5lSm9pbiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPExpbmVKb2luPiB7Ci0gICAgICAgIHZpcnR1YWwgflNldExpbmVKb2lu
KCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBDbGlwVG9JbWFnZUJ1ZmZlciBmaW5hbDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0
UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwVG9JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsK
IAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVy
KSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c2V0TGluZUpvaW4oY29u
dGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpj
bGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0
KCksIGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJT
ZXRMaW5lSm9pbjw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwVG9JbWFn
ZUJ1ZmZlcjw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPFNldExpbmVKb2luPihsaW5lSm9pbikpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisK
KyAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpKQorICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwVG9JbWFn
ZUJ1ZmZlcj4obmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QpKTsKIH0KIAot
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGlt
aXQpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5TZXRNaXRl
ckxpbWl0KCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBDbGVhclJlY3QgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+
Q2xlYXJSZWN0KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAg
IENhaXJvOjpzZXRNaXRlckxpbWl0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4o
KSk7CisgICAgICAgICAgICBDYWlybzo6Y2xlYXJSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
U2V0TWl0ZXJMaW1pdDw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGVhclJl
Y3Q8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxT
ZXRNaXRlckxpbWl0PihtaXRlckxpbWl0KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGVhclJlY3Q+KHJlY3QpKTsKIH0KIAogdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0y
NDksNiArNDc5LDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CkBAIC0yNjksNiArNTAxLDggQEAgdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworCiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9y
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIApAQCAtMjkxLDM1ICs1MjUsMzMg
QEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJl
Y3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRT
cGFjZVRyYW5zZm9ybSkpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4w
LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUp
CiB7CiAgICAgc3RydWN0IEZpbGxSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8RmxvYXRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwg
Q2Fpcm86OlNoYWRvd1N0YXRlLCBDb21wb3NpdGVPcGVyYXRvcj4gewogICAgICAgICB2aXJ0dWFs
IH5GaWxsUmVjdCgpID0gZGVmYXVsdDsKLQogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdP
cGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAg
ICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKTsKLQog
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1D
b250ZXh0LCBhcmc8Mj4oKSwgYXJnPDM+KCkpOwogICAgICAgICAgICAgQ2Fpcm86OmZpbGxSZWN0
KHBsYXRmb3JtQ29udGV4dCwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8ND4oKSk7CiAgICAgICAg
ICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQs
IGFyZzw1PigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiAgICAgICAgIH0KLQogICAgICAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiRmlsbFJlY3Q8PlxuIjsKICAgICAgICAgfQogICAgIH07Ci0KLSAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Rmls
bFJlY3Q+KHJlY3QsIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcikpOworICAgIAorICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+
KHJlY3QsIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUoKSksIGNvbXBvc2l0ZU9wZXJhdGlvbigpKSk7CiB9Ci0KLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisg
ICAgCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAg
IHN0cnVjdCBGaWxsUm91bmRlZFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxGbG9hdFJvdW5kZWRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CiAgICAgICAgIHZpcnR1YWwgfkZpbGxSb3VuZGVk
UmVjdCgpID0gZGVmYXVsdDsKQEAgLTM0NSw4ICs1NzcsOSBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
UmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+KHJvdW5kZWRSZWN0
LCBjb2xvciwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+KHJvdW5kZWRSZWN0LCBjb2xvciwgY29tcG9z
aXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkp
KTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMzY1LDMzICs1OTgsMTIgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworCiAgICAgVU5VU0VEX1BBUkFNKGNvbG9yKTsKICAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHN0cnVjdCBGaWxsUGF0
aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpG
aWxsU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAgICAgICAgdmlydHVhbCB+RmlsbFBh
dGgoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86
OmZpbGxQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCks
IGFyZzwyPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJGaWxs
UGF0aDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxQYXRoPihwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKLX0KLQogdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAg
c3RydWN0IEZpbGxFbGxpcHNlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8RmxvYXRSZWN0LCBDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CkBA
IC00MTAsNTEgKzYyMiw1NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNvdXJj
ZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIAotdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
bGluZVdpZHRoKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIHN0cnVjdCBTdHJva2VSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVy
YXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBmbG9hdCwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgflN0cm9rZVJlY3QoKSA9
IGRlZmF1bHQ7CisgICAgc3RydWN0IEZpbGxQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0
ZT4geworICAgICAgICB2aXJ0dWFsIH5GaWxsUGF0aCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2
b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQog
ICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c3Ryb2tlUmVjdChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCkpOworICAg
ICAgICAgICAgQ2Fpcm86OmZpbGxQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8
MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJTdHJva2VSZWN0PD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwg
IkZpbGxQYXRoPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCisgICAgaWYgKHBhdGguaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0
cm9rZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENh
aXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxs
UGF0aD4ocGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChj
b25zdCBQYXRoJiBwYXRoKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIHN0cnVjdCBT
dHJva2VQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwg
Q2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1
YWwgflN0cm9rZVBhdGgoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IFN0cm9rZVJlY3QgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIGZsb2F0LCBDYWly
bzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICAgICAgdmlydHVhbCB+
U3Ryb2tlUmVjdCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdP
cGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAg
ICBDYWlybzo6c3Ryb2tlUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCks
IGFyZzwxPigpLCBhcmc8Mj4oKSk7CisgICAgICAgICAgICBDYWlybzo6c3Ryb2tlUmVjdChjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJn
PDM+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBv
dmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVBh
dGg8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU3Ryb2tlUmVjdDw+XG4iOwog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fp
cm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKKyAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJv
OjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAK
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCkBAIC00NzksMTA3ICs2OTcsMjkgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3RydWN0
IENsZWFyUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0
UmVjdD4gewotICAgICAgICB2aXJ0dWFsIH5DbGVhclJlY3QoKSA9IGRlZmF1bHQ7Ci0KLSAgICAg
ICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJp
ZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsZWFyUmVjdChjb250ZXh0Rm9yUmVw
bGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1w
KFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBp
bmRlbnQgPDwgIkNsZWFyUmVjdDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPENsZWFyUmVjdD4ocmVjdCkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc3RydWN0IERyYXdHbHlwaHMgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlN0
cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlLCBGbG9hdFBvaW50LCBSZWZQdHI8Y2Fpcm9f
c2NhbGVkX2ZvbnRfdD4sIGZsb2F0LCBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4sIGZsb2F0LCBUZXh0
RHJhd2luZ01vZGVGbGFncywgZmxvYXQsIEZsb2F0U2l6ZSwgQ29sb3IsIEZvbnRTbW9vdGhpbmdN
b2RlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7CisgICAgc3Ry
dWN0IFN0cm9rZVBhdGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQ
YXRoLCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICAgICAg
dmlydHVhbCB+U3Ryb2tlUGF0aCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6ZHJhd0dseXBocyhjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
YXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLmdldCgpLAot
ICAgICAgICAgICAgICAgIGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCksIGFyZzw4PigpLCBh
cmc8OT4oKSwgYXJnPDEwPigpLCBhcmc8MTE+KCksIGFyZzwxMj4oKSk7CisgICAgICAgICAgICBD
YWlybzo6c3Ryb2tlUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFy
ZzwxPigpLCBhcmc8Mj4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8
PCAiRHJhd0dseXBoczw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VQ
YXRoPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgaWYgKCFmb250LnBsYXRmb3JtRGF0
YSgpLnNpemUoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4g
Y2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKLSAgICB7Ci0gICAgICAgIGF1dG8geU9mZnNldCA9IHBv
aW50LnkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkg
ewotICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9m
ZnNldCB9OwotICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCi0gICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSksIHBvaW50LAotICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5w
bGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLAotICAgICAgICBmb250LnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKSwgV1RGTW92ZShjYWlyb0dseXBocyksIHhPZmZzZXQsIHN0YXRlLnRleHREcmF3aW5n
TW9kZSwKLSAgICAgICAgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQs
IHN0YXRlLnNoYWRvd0NvbG9yLCBmb250U21vb3RoaW5nKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQotewot
ICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17
Ci0gICAgc3RydWN0IERyYXdOYXRpdmVJbWFnZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBGbG9hdFJlY3QsIEZsb2F0UmVj
dCwgSW1hZ2VQYWludGluZ09wdGlvbnMsIGZsb2F0LCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAg
ICAgICAgdmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZShjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJn
PDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7Ci0gICAgICAgIH0KKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOwogCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TmF0aXZlSW1hZ2U8Plxu
IjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKICAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RHJhd05hdGl2ZUltYWdlPihuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCksIGRlc3RSZWN0LCBz
cmNSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgc3RydWN0IERyYXdQYXR0ZXJuIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4sIEludFNpemUsIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFuc2Zvcm0sIEZs
b2F0UG9pbnQsIEltYWdlUGFpbnRpbmdPcHRpb25zPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdQ
YXR0ZXJuKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENh
aXJvOjpkcmF3UGF0dGVybihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0
KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSwgYXJn
PDY+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBv
dmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdQYXR0
ZXJuPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgVU5VU0VEX1BBUkFNKHNwYWNpbmcp
OwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdQYXR0ZXJuPihuYXRpdmVJbWFnZS5wbGF0
Zm9ybUltYWdlKCksIG5hdGl2ZUltYWdlLnNpemUoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucykpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PFN0cm9rZVBhdGg+KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCkBAIC01
OTgsOCArNzM4LDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBz
dGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJU
aGlja25lc3MsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpKSk7CiB9
CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCkBAIC02MjEsNTAgKzc2MSw4IEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJv
a2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
LSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRl
LnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBz
dGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVu
ZGVybGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQs
IERhc2hBcnJheSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKLSAgICAgICAgdmlydHVhbCB+RHJhd0xp
bmVzRm9yVGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdP
cGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xpbmVzRm9yVGV4
dDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpKTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
Ci17Ci0gICAgc3RydWN0IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBh
cmc8MT4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcjw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKSk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3
TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0cm9r
ZVRoaWNrbmVzcygpLCBzaG91bGRBbnRpYWxpYXMoKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTY4Mywx
MSArNzgxLDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4o
cmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29s
b3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIGZpbGxDb2xvcigpLCBz
dHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSkpOwogfQogCi12
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZs
b2F0IHdpZHRoLCBmbG9hdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogI2lmIFBMQVRGT1JNKFdQ
RSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywg
cGF0aCwgY29sb3IpOwpAQCAtNzA3LDEyICs4MDUsMTIgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dAogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0ZvY3VzUmluZz4ocGF0aCwgd2lkdGgsIGNvbG9yKSk7CiAj
ZW5kaWYKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAjaWYg
UExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWludEZv
Y3VzKCp0aGlzLCByZWN0cywgY29sb3IpOwpAQCAtNzMyLDM2OCArODMwLDE0NiBAQCB2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzLCBmbG9hdAogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0ZvY3VzUmluZz4ocmVjdHMsIHdp
ZHRoLCBjb2xvcikpOwogI2VuZGlmCi0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiB9CiAKLXZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2ZSgpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4gewotICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBk
ZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLnNhdmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJTYXZlPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR3JhcGhpY3NDb250ZXh0
OjpzYXZlKCk7Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTYXZlPigpKTsKLQotICAgIG1f
c3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6cmVzdG9yZSgpCi17Ci0gICAgc3RydWN0IFJlc3RvcmUgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKLSAgICAgICAgdmlydHVhbCB+
UmVzdG9yZSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5yZXN0b3JlKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiUmVzdG9yZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIGlmICghc3RhY2tTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dDo6cmVzdG9yZSgpOwotCi0gICAgaWYgKG1fc3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJlc3RvcmU+KCkpOwotCi0g
ICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICBpZiAobV9zdGF0ZVN0YWNrLmlzRW1w
dHkoKSkKLSAgICAgICAgbV9zdGF0ZVN0YWNrLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgc3RydWN0
IFRyYW5zbGF0ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0
LCBmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5UcmFuc2xhdGUoKSA9IGRlZmF1bHQ7Ci0KLSAg
ICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3Zl
cnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnRyYW5zbGF0ZShjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAg
ICAgICAgdHMgPDwgaW5kZW50IDw8ICJUcmFuc2xhdGU8PlxuIjsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxUcmFuc2xhdGU+KHgsIHkpKTsKLQotICAgIHsK
LSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0
ZS5jdG0udHJhbnNsYXRlKHgsIHkpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0OwotICAg
ICAgICB0LnRyYW5zbGF0ZSgteCwgLXkpOwotICAgICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gdCAq
IHN0YXRlLmN0bUludmVyc2U7Ci0gICAgfQorICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQu
CisgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJv
dGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzdHJ1Y3QgUm90YXRl
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKLSAgICAg
ICAgdmlydHVhbCB+Um90YXRlKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1h
Z2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zLCBm
bG9hdCwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJ
bWFnZSgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWly
bzo6cm90YXRlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAg
ICAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29udGV4dEZvclJlcGxheShyZXBsYXllciks
IGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwg
YXJnPDU+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRz
KSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlJvdGF0
ZTw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TmF0aXZlSW1hZ2U8Plxu
IjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxSb3RhdGU+
KGFuZ2xlSW5SYWRpYW5zKSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0
ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGUuY3RtLnJvdGF0ZShhbmdsZUluUmFkaWFucyk7
Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHQ7Ci0gICAgICAgIHQucm90YXRlKGFuZ2xlSW5S
YWRpYW5zKTsKLSAgICAgICAgc3RhdGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNl
OwotICAgIH0KKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPERyYXdOYXRpdmVJbWFnZT4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVj
dCwgc3JjUmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMob3B0aW9ucywgaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKSwgYWxwaGEoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9
CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHN0cnVjdCBTY2FsZSBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0U2l6ZT4gewotICAgICAgICB2aXJ0dWFsIH5T
Y2FsZSgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd1BhdHRlcm4gZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgSW50U2l6
ZSwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEFmZmluZVRyYW5zZm9ybSwgRmxvYXRQb2ludCwgSW1h
Z2VQYWludGluZ09wdGlvbnM+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd1BhdHRlcm4oKSA9IGRl
ZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNjYWxlKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6
ZHJhd1BhdHRlcm4oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBh
cmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCksIGFyZzw2Pigp
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTY2FsZTw+XG4iOwor
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3UGF0dGVybjw+XG4iOwogICAgICAgICB9
CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNjYWxlPihzaXplKSk7Ci0KLSAg
ICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAg
c3RhdGUuY3RtLnNjYWxlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIHQ7Ci0gICAgICAgIHQuc2NhbGUoMSAvIHNpemUud2lkdGgoKSwgMSAv
IHNpemUuaGVpZ2h0KCkpOwotICAgICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gdCAqIHN0YXRlLmN0
bUludmVyc2U7Ci0gICAgfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RHJhd1BhdHRlcm4+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgbmF0
aXZlSW1hZ2Uuc2l6ZSgpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBvcHRpb25zKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQorI2lmIEVOQUJMRShWSURFTykK
K3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgc3RydWN0
IENvbmNhdENUTSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEFmZmlu
ZVRyYW5zZm9ybT4gewotICAgICAgICB2aXJ0dWFsIH5Db25jYXRDVE0oKSA9IGRlZmF1bHQ7Ci0K
LSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNvbmNhdENUTShjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkNvbmNhdENUTTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgaWYgKCFpbnZlcnNlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDb25jYXRDVE0+KHRy
YW5zZm9ybSkpOwotCi0gICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAg
IHN0YXRlLmN0bSAqPSB0cmFuc2Zvcm07Ci0gICAgc3RhdGUuY3RtSW52ZXJzZSA9IGludmVyc2Uu
dmFsdWUoKSAqIHN0YXRlLmN0bUludmVyc2U7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRl
ZC4KKyAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3Rp
bmF0aW9uKTsKIH0KKyNlbmRpZgogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckds
eXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZv
bnRTbW9vdGhpbmcpCiB7Ci0gICAgc3RydWN0IFNldENUTSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4gewotICAgICAgICB2aXJ0dWFsIH5T
ZXRDVE0oKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IERyYXdHbHlwaHMgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlN0cm9r
ZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlLCBGbG9hdFBvaW50LCBSZWZQdHI8Y2Fpcm9fc2Nh
bGVkX2ZvbnRfdD4sIGZsb2F0LCBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4sIGZsb2F0LCBUZXh0RHJh
d2luZ01vZGVGbGFncywgZmxvYXQsIEZsb2F0U2l6ZSwgQ29sb3IsIEZvbnRTbW9vdGhpbmdNb2Rl
PiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0oY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3R2x5cGhz
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigp
LCBhcmc8Mz4oKSwgYXJnPDQ+KCkuZ2V0KCksCisgICAgICAgICAgICAgICAgYXJnPDU+KCksIGFy
Zzw2PigpLCBhcmc8Nz4oKSwgYXJnPDg+KCksIGFyZzw5PigpLCBhcmc8MTA+KCksIGFyZzwxMT4o
KSwgYXJnPDEyPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJT
ZXRDVE08PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0dseXBoczw+XG4i
OwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZl
cnNlKCk7Ci0gICAgaWYgKCFpbnZlcnNlKQorICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5z
aXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldENU
TT4odHJhbnNmb3JtKSk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7
Ci0gICAgc3RhdGUuY3RtID0gdHJhbnNmb3JtOwotICAgIHN0YXRlLmN0bUludmVyc2UgPSBpbnZl
cnNlLnZhbHVlKCk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCkuY3RtOwotfQotCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAg
ICBzdHJ1Y3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3Bl
cmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAg
Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllciks
IGFyZzwwPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJCZWdp
blRyYW5zcGFyZW5jeUxheWVyPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotCi0gICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4ob3BhY2l0eSkpOwotfQotCi12
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAg
ICBzdHJ1Y3QgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTw+IHsKLSAgICAgICAgdmlydHVhbCB+RW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVw
bGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJFbmRUcmFuc3BhcmVuY3lMYXllcjw+XG4i
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEVuZFRyYW5zcGFyZW5jeUxh
eWVyPigpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgQ2xpcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4gewotICAgICAgICB2aXJ0dWFsIH5DbGlwKCkg
PSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxh
eSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlw
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXA+KHJlY3QpKTsKLQorICAgIGF1dG8geE9mZnNl
dCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVt
R2x5cGhzKTsKICAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3Qo
KTsKLSAgICAgICAgc3RhdGUuY2xpcEJvdW5kcy5pbnRlcnNlY3Qoc3RhdGUuY3RtLm1hcFJlY3Qo
cmVjdCkpOwotICAgIH0KLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4gewotICAgICAgICB2aXJ0
dWFsIH5DbGlwT3V0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGlu
Z09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOwor
ICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0g
eyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKKyAgICAgICAgICAgIHhPZmZzZXQgKz0g
YWR2YW5jZXNbaV0ud2lkdGgoKTsKICAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxDbGlwT3V0PihyZWN0KSk7Ci19CisgICAgfQogCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBzdHJ1Y3QgQ2xp
cE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGg+IHsKLSAg
ICAgICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOwogCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+KHBhdGgpKTsKKyAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4o
Q2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKKyAg
ICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCisgICAgICAgIFJlZlB0cjxj
YWlyb19zY2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCisg
ICAgICAgIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBXVEZNb3ZlKGNhaXJvR2x5cGhzKSwg
eE9mZnNldCwgdGV4dERyYXdpbmdNb2RlKCksCisgICAgICAgIHN0cm9rZVRoaWNrbmVzcygpLCBz
aGFkb3dPZmZzZXQoKSwgc2hhZG93Q29sb3IoKSwgZm9udFNtb290aGluZykpOwogfQogCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGNsaXBSdWxlKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9r
ZVN0eWxlKQogewotICAgIHN0cnVjdCBDbGlwUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPFBhdGgsIFdpbmRSdWxlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBQ
YXRoKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERhc2hBcnJh
eSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4
dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25S
ZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6
Y2xpcFBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7
CisgICAgICAgICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0Pigp
LCBhcmc8NT4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xp
cFBhdGg8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xpbmVzRm9yVGV4
dDw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENs
aXBQYXRoPihwYXRoLCBjbGlwUnVsZSkpOwotCi0gICAgewotICAgICAgICBhdXRvJiBzdGF0ZSA9
IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmNsaXBCb3VuZHMuaW50ZXJzZWN0
KHN0YXRlLmN0bS5tYXBSZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKSk7Ci0gICAgfQotfQor
ICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLUludFJlY3QgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3Rh
dGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0
YXRlLmN0bUludmVyc2UubWFwUmVjdChzdGF0ZS5jbGlwQm91bmRzKSk7CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihw
b2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHJv
a2VDb2xvcigpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewot
ICAgIHN0cnVjdCBDbGlwVG9JbWFnZUJ1ZmZlciBmaW5hbDogUGFpbnRpbmdPcGVyYXRpb24sIE9w
ZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdD4gewotICAgICAg
ICB2aXJ0dWFsIH5DbGlwVG9JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPEZsb2F0UmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHsKKyAgICAgICAgdmly
dHVhbCB+RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKIAogICAgICAgICB2
b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQog
ICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSk7CisgICAgICAgICAg
ICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJDbGlwVG9JbWFnZUJ1ZmZlcjw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPD5cbiI7CiAgICAgICAgIH0KICAgICB9
OwogCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChhdXRvIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkp
Ci0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBUb0ltYWdlQnVmZmVyPihuYXRpdmVJ
bWFnZS0+cGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCi17CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyPihyZWN0LCBzdHlsZSkpOwogfQogCiBGbG9hdFJlY3QgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBo
aWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQpAQCAtMTEwNiwxMiArOTgyLDQgQEAgdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjphcHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50aW5nT3BlcmF0
aW9uPiYmIGNvbW1hbmQKICAgICBtX2NvbW1hbmRMaXN0LmFwcGVuZChXVEZNb3ZlKGNvbW1hbmQp
KTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24pCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLSAgICBHcmFw
aGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLX0K
LSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKaW5kZXggODNjNmQyN2Q2ZWEzNmM3
OWJlYmQ3ODI1Zjk5YjdjNDM5MDhlZTU0Yi4uYzY1YzU3N2MyOTI5OWFjZWQ1ZDViZTdkYzhjNzYw
MzcwMjM5YTk3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEg
Uy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNzggKzQyLDU5IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICB2b2lkIGRpZFVw
ZGF0ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOworICAgIHZv
aWQgc2F2ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOworICAgIHZv
aWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXll
cigpIG92ZXJyaWRlOworCisgICAgdm9pZCBjbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IG92ZXJyaWRlOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNv
cmU6OldpbmRSdWxlKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OlBh
dGgmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdl
QnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IHNldExpbmVDYXAoV2ViQ29yZTo6TGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5l
RGFzaChjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzZXRMaW5lSm9pbihXZWJDb3JlOjpMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRN
aXRlckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6R3JhZGllbnQm
KSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNv
cmU6OkJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNv
bnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92
ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
LCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYp
IG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBXZWJDb3Jl
OjpQYXRoJikgb3ZlcnJpZGU7CisKICAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBX
ZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgV2Vi
Q29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJD
b3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmLCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVy
cmlkZTsKIAotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6TmF0aXZlSW1hZ2Um
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFdlYkNv
cmU6OlBhdGgmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgV2Vi
Q29yZTo6U3Ryb2tlU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSkgb3ZlcnJpZGU7CisKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9h
dFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQg
cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjYWxlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29uY2F0Q1RNKGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q1RN
KGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSBnZXRDVE0oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRl
RGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJy
aWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUp
IG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3Jl
OjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd05hdGl2ZUlt
YWdlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQ
YXR0ZXJuKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYs
IGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CiAjaWYgRU5B
QkxFKFZJREVPKQogICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7CiAj
ZW5kaWYKIAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3Jl
OjpHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViQ29yZTo6
Rm9udFNtb290aGluZ01vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3Jl
OjpEYXNoQXJyYXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKIAogICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlk
ZTsKIAogICAgIHZvaWQgYXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4m
Jik7CiAgICAgUGFpbnRpbmdPcGVyYXRpb25zJiBtX2NvbW1hbmRMaXN0OwotCi0gICAgc3RydWN0
IFN0YXRlIHsKLSAgICAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bTsKLSAgICAgICAg
V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bUludmVyc2U7Ci0gICAgICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBjbGlwQm91bmRzOwotICAgIH07Ci0gICAgVmVjdG9yPFN0YXRlLCAzMj4gbV9zdGF0
ZVN0YWNrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVy
V2luLmNwcAppbmRleCA1ZDY2ZWI3MmFkMTNjMjRkYWMwOTVhOTQ1ZjYxNGE2ZjU1MjIyNDkyLi5i
ZWQxM2VjNTk4NDc1NzY3NWRjOTI5ZmVkYjU1NzI0ZDQ3ZGEwYjJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1Jl
Y29yZGVyV2luLmNwcApAQCAtMjksMTcgKzI5LDE4IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURyYXdHbHlwaHNS
ZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgb3duZXIsIERlY29u
c3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQotICAgIDogbV9vd25lcihv
d25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZv
bnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25Db250ZXh0KG93bmVyKQogewogfQog
CiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2lu
dCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBtX293bmVyLmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFy
dFBvaW50LCBtX3Ntb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFy
dFBvaW50LCBtX3Ntb290aGluZ01vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3Bw
CmluZGV4IGMxOWU3NDE1NTdjMzA4Yzk0MWU0ZWY3MTVlM2RiNDY1OTRkMTg1YjYuLjJjZDc4NjVl
Y2E4MjllYjQ1NzgwZTlmYjBlNzI0N2EzNzEyYmNjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCkBAIC0xNzYsMjUgKzE3Niwy
MiBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LAogICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNn
Q29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAgICAgRm9udENhc2NhZGU6OnNldENHQ29u
dGV4dEZvbnRSZW5kZXJpbmdTdHlsZShjZ0NvbnRleHQsIGZvbnQucGxhdGZvcm1EYXRhKCkuaXNT
eXN0ZW1Gb250KCksIGZhbHNlLCBmb250LnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpKTsKIAotICAg
IEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xv
ciBzaGFkb3dDb2xvcjsKLSAgICBncmFwaGljc0NvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNl
dCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgIGF1dG8gZHJvcFNoYWRvdyA9IGdyYXBo
aWNzQ29udGV4dC5kcm9wU2hhZG93KCk7CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGdy
YXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwg
JiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICghZ3JhcGhpY3NDb250
ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0LmdldENUTSgp
LmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworICAgIGJvb2wgaGFzU2ltcGxl
U2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5n
TW9kZTo6RmlsbCAmJiBkcm9wU2hhZG93LmNvbG9yLmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRvdy5i
bHVyUmFkaXVzICYmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkg
fHwgZ3JhcGhpY3NDb250ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlw
cGVkKCkpOwogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKICAgICAgICAgLy8gUGFpbnQgc2lt
cGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0
byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgICAgICBncmFwaGljc0Nv
bnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3ND
b250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFk
b3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0
KCkpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBkcm9wU2hhZG93LmNvbG9yLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAg
ICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsK
KyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNl
dC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1z
LCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBk
b3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSAr
IHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoKSA/IC0xIDogMSk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQu
eSgpICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwogICAgICAgICBDR0NvbnRleHRTZXRUZXh0
UG9zaXRpb24oY2dDb250ZXh0LCBzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpOwogICAgICAgICBD
R0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzKTsKICAgICAgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKSB7
Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBwb2ludC54
KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBw
b2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgQ0dDb250ZXh0
U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgZHJvcFNoYWRvdy5vZmZzZXQu
d2lkdGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyBkcm9wU2hh
ZG93Lm9mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0
aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzKTsKICAgICAg
ICAgfQogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CkBA
IC0yMDgsNyArMjA1LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwKICAgICB9CiAKICAgICBp
ZiAoaGFzU2ltcGxlU2hhZG93KQotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBncmFwaGljc0Nv
bnRleHQuc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93KTsKIAogICAgIEZvbnRDYXNjYWRlOjpzZXRG
b250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBvbGRGb250U21vb3RoaW5nU3R5bGUpOwogICAg
IENHQ29udGV4dFNldFRleHRNYXRyaXgoY2dDb250ZXh0LCBzYXZlZE1hdHJpeCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2UuY3BwCmluZGV4IDNjZjc0NjBjODBlM2JlMWQ1YmEzZjBjZWQ3YzE5YjI1ZGYyOWFiZjIuLjc4
NWU5NGJlY2YwN2NkNGE4NGM5YzM0ZDljZWNjODM4NTdlMDY5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3Bw
CkBAIC0yOTIsMTIgKzI5MiwxMiBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3
Qm94ZXMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIEZsb2F0UmVjdCBmcmFtZVJlY3Qo
MiwgMiwgc2l6ZS53aWR0aCgpIC0gMywgc2l6ZS5oZWlnaHQoKSAtIDMpOwogICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNr
bmVzcygzKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaFdpZHRocywgMCk7CisgICAg
Y29udGV4dC5zZXRMaW5lRGFzaCh7IG1fZGFzaFdpZHRocywgMCB9KTsKICAgICBtX3BhdGguYWRk
UmVjdChmcmFtZVJlY3QpOwogICAgIG1fcGF0aC5jbG9zZVN1YnBhdGgoKTsKICAgICBjb250ZXh0
LnN0cm9rZVBhdGgobV9wYXRoKTsKIAotICAgIGNvbnRleHQuc2V0TGluZURhc2goRGFzaEFycmF5
KCksIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IH0sIDAgfSk7CiAgICAgbV9wYXRo
LmNsZWFyKCk7CiAgICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIGJveFRvcCArIGJveFNp
emUpKTsKICAgICBtX3BhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoc2l6ZS53aWR0aCgpLCBib3hU
b3AgKyBib3hTaXplKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29u
dGVudGZ1bFBhaW50Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVu
dGZ1bFBhaW50Q2hlY2tlci5jcHAKaW5kZXggMWIxODJhMWQzNmI3Y2ZhYWEwYjE2OWQwZDhjODU0
MzVmNDNiNzY3ZC4uZTgwZjJlZTg5MTkzOTE0NDE4ZTg3OGJmMGE0YTI4NDBlZTY4OWQwMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2Vy
LmNwcApAQCAtMzksNyArMzksNyBAQCBib29sIENvbnRlbnRmdWxQYWludENoZWNrZXI6OnF1YWxp
Zmllc0ZvckNvbnRlbnRmdWxQYWludChGcmFtZVZpZXcmIGZyYW1lVmlldykKICAgICBmcmFtZVZp
ZXcuc2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXll
cnMpOwogICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyh0cnVlKTsKIAotICAg
IE51bGxHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOworICAg
IE51bGxHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoZnJhbWVWaWV3LnJlbmRlclZpZXco
KS0+ZG9jdW1lbnRSZWN0KCksIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9u
UmVhc29uczo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KTsKICAgICBmcmFtZVZpZXcucGFpbnQo
Y2hlY2tlckNvbnRleHQsIGZyYW1lVmlldy5yZW5kZXJWaWV3KCktPmRvY3VtZW50UmVjdCgpKTsK
IAogICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyhvbGRFbnRpcmVDb250ZW50
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcApp
bmRleCBjOWFiMjE3NjE0MWZhN2EzMzlhMjA5N2IzYWJmOTc2NTA3ODdlNGYxLi40YmZmOGQwMDgz
OTI1MTRjYmU2MmNhOTVkNGU3NDNmYzE5N2YwMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBMZWdh
Y3lFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnMKICAgICBib29sIHNldFNoYWRvdyA9IGZhbHNlOwogICAgIGlmIChsaW5l
U3R5bGUudGV4dFNoYWRvdygpKSB7CiAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0gbGluZVN0
eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPmNv
bG9yKCkpOwotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhMYXlvdXRTaXplKGxpbmVTdHlsZS50
ZXh0U2hhZG93KCktPngoKS52YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFs
dWUoKSksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0Nv
bG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgTGF5b3V0U2l6ZShsaW5lU3R5
bGUudGV4dFNoYWRvdygpLT54KCkudmFsdWUoKSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+eSgp
LnZhbHVlKCkpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFk
b3dDb2xvciB9KTsKICAgICAgICAgc2V0U2hhZG93ID0gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDI0
YzgyYzlkNmJkNDNmNzRiYTA1YWI1YWM3Njc5M2Q3NWQxNWU1NzcuLjhkOTdkMjU3MWUyNDUzZGYx
OTI4YmRlNmM3N2M3NjMxNWZiYzg4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNzA1LDcgKzcwNSw3IEBAIHN0YXRpYyB2
b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCgpOwog
CiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFkb3ctPngoKS52YWx1ZSgpLCBib3hT
aGFkb3ctPnkoKS52YWx1ZSgpKTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JG
aWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygp
ID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7
CisgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJh
ZGl1cygpLnZhbHVlKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRv
dy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1
c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiB9CiAKIEludGVy
cG9sYXRpb25RdWFsaXR5IFJlbmRlckJveE1vZGVsT2JqZWN0OjpjaG9vc2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEltYWdlJiBpbWFnZSwgY29uc3Qgdm9p
ZCogbGF5ZXIsIGNvbnN0IExheW91dFNpemUmIHNpemUpCkBAIC0yMDg3LDcgKzIwODcsNyBAQCB2
b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhdXRv
IGxpbmVEYXNoID0gRGFzaEFycmF5Ojpmcm9tKGRhc2hMZW5ndGgsIGdhcExlbmd0aCk7Ci0gICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIGRh
c2hMZW5ndGgpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsgV1RG
TW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRo
IHRpZ2h0IGNvcm5lcnM6CkBAIC0yNDU2LDcgKzI0NTYsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91
dFJlYwogICAgICAgICAgICAgRmxvYXRQb2ludCBzbmFwcGVkU2hhZG93T3JpZ2luID0gRmxvYXRQ
b2ludChyb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi54KCksIGRldmljZVNjYWxl
RmFjdG9yKSwgcm91bmRUb0RldmljZVBpeGVsKHNoYWRvd1JlY3RPcmlnaW4ueSgpLCBkZXZpY2VT
Y2FsZUZhY3RvcikpOwogICAgICAgICAgICAgRmxvYXRTaXplIHNuYXBwZWRTaGFkb3dPZmZzZXQg
PSBzbmFwcGVkU2hhZG93T3JpZ2luIC0gcGl4ZWxTbmFwcGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0
aW9uKCk7CiAKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3co
KSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQp
OworICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc25hcHBlZFNoYWRvd09mZnNl
dCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygp
ID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9
KTsKIAogICAgICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91
dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMjU1OCw3ICsyNTU4LDcgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9m
ZnNldDsKIAogICAgICAgICAgICAgYXV0byBzbmFwcGVkU2hhZG93T2Zmc2V0ID0gcm91bmRTaXpl
VG9EZXZpY2VQaXhlbHMoc2hhZG93T2Zmc2V0LCBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAg
ICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMs
IHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICAgICAgICAgIGNv
bnRleHQuc2V0RHJvcFNoYWRvdyh7IHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01v
ZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAgICAgICAgICAgICBj
b250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4
ZWxTbmFwcGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA4NTBiZGU0OGU0OTI4ZTg2ZGMx
NzZiNjIzMjFmZWVkOWI2ODZjM2NkLi44Y2Y5NjFlMGJjMjM2NGU5NjJjZGE4ODFmODU5ZTRmMzFh
M2M5ODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTIy
NTMsMTQgKzIyNTMsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXll
cnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclAKICNpZiBFTkFCTEUoQ1NT
X0NPTVBPU0lUSU5HKQogICAgICAgICBib29sIHVzZXNDb21wb3NpdGVPcGVyYXRpb24gPSBoYXNC
bGVuZE1vZGUoKSAmJiAhKHJlbmRlcmVyKCkuaXNMZWdhY3lTVkdSb290KCkgJiYgcGFyZW50KCkg
JiYgcGFyZW50KCktPmlzUmVuZGVyVmlld0xheWVyKCkpOwogICAgICAgICBpZiAodXNlc0NvbXBv
c2l0ZU9wZXJhdGlvbikKLSAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpKTsKKyAgICAgICAgICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCks
IGJsZW5kTW9kZSgpIH0pOwogI2VuZGlmCiAKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFy
ZW5jeUxheWVyKHJlbmRlcmVyKCkub3BhY2l0eSgpKTsKIAogI2lmIEVOQUJMRShDU1NfQ09NUE9T
SVRJTkcpCiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAgICAgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24o
KSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVN
b2RlKHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7
CiAjZW5kaWYKIAogI2lmZGVmIFJFVkVBTF9UUkFOU1BBUkVOQ1lfTEFZRVJTCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDVmOThiOTEy
NGEzNDlhYzc1NTc5ZjcxMTM1ZWUwZjM4YWJiNGYxMmQuLjNlMmU2YmYxZGU1ZDU0ZWIzOGQ5Mjdh
NTFmMDdjODkxMGFlNmMxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xODMxLDcgKzE4MzEsOSBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2
ZW50UmVnaW9uRm9yTGF5ZXIgPSBbJl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewot
ICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgICAgIGF1dG8gZGlydHlS
ZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoZ3JhcGhpY3NMYXllci5vZmZzZXRGcm9tUmVuZGVy
ZXIoKSksIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKTsKKyAgICAKKyAgICAgICAgTnVsbEdyYXBoaWNz
Q29udGV4dCBudWxsQ29udGV4dChkaXJ0eVJlY3QsIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50
SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgICAgIEV2ZW50UmVnaW9uIGV2ZW50UmVn
aW9uOwogI2lmIEVOQUJMRShFRElUQUJMRV9SRUdJT04pCiAgICAgICAgIGlmIChyZW5kZXJlcigp
LnBhZ2UoKS5zaG91bGRCdWlsZEVkaXRhYmxlUmVnaW9uKCkpCkBAIC0xODUzLDggKzE4NTUsNyBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgICAgICAg
ICAgZXZlbnRSZWdpb25Db250ZXh0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KC1s
YXllck9mZnNldCwgZ3JhcGhpY3NMYXllci5zaXplKCkpKSwgcmVuZGVyZXIoKS5zdHlsZSgpKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChG
bG9hdFJlY3QoRmxvYXRQb2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwg
Z3JhcGhpY3NMYXllci5zaXplKCkpKTsKLSAgICAgICAgcGFpbnRJbnRvTGF5ZXIoJmdyYXBoaWNz
TGF5ZXIsIG51bGxDb250ZXh0LCBkaXJ0eVJlY3QsIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7
CisgICAgICAgIHBhaW50SW50b0xheWVyKCZncmFwaGljc0xheWVyLCBudWxsQ29udGV4dCwgZW5j
bG9zaW5nSW50UmVjdChkaXJ0eVJlY3QpLCB7IH0sICZldmVudFJlZ2lvbkNvbnRleHQpOwogCiAg
ICAgICAgIGV2ZW50UmVnaW9uLnRyYW5zbGF0ZSh0b0ludFNpemUobGF5ZXJPZmZzZXQpKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDMwY2QzNDNl
YTdkZjkxNjhjYzNjZGU0N2RiZWY4Zjc1OWU4OGY3MzEuLjI1NmZjNzQ5NTZkYTMzODZhNTRkMzUy
ZGUxMWI2ZmY3MzY2OWExZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVJT1MubW0KQEAgLTYwNSw3ICs2MDUsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludFRl
eHRGaWVsZElubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdAogICAg
IGNvbnN0IEZsb2F0U2l6ZSBpbm5lclNoYWRvd09mZnNldCB7IDAsIDUgfTsKICAgICBjb25zdGV4
cHIgYXV0byBpbm5lclNoYWRvd0JsdXIgPSAxMC4wZjsKICAgICBhdXRvIGlubmVyU2hhZG93Q29s
b3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMCwgMCwgMCwgMC4wNGYgfTsKLSAgICBjb250ZXh0LnNl
dFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRvd0Nv
bG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBpbm5lclNoYWRvd09mZnNldCwgaW5u
ZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRvd0NvbG9yIH0pOwogICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVyU2hhZG93UGF0aDsKQEAgLTIwODAs
NyArMjA4MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdl
KEltYWdlJiBpbWFnZSwgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgLy8gVXNlIHRoZSBHcmFw
aGljc0NvbnRleHQgZnVuY3Rpb24sIGJlY2F1c2UgaXQgY2FsY3VsYXRlcyB0aGUgYmx1ciByYWRp
dXMgaW4gY29udGV4dCBzcGFjZSwKICAgICAvLyByYXRoZXIgdGhhbiBzY3JlZW4gc3BhY2UuCiAg
ICAgY29uc3RleHByIGF1dG8gc2hhZG93Q29sb3IgPSBDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxw
aGFCeXRlKDI2KTsKLSAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IH0s
IDE2LCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3coeyBG
bG9hdFNpemUgeyB9LCAxNiwgc2hhZG93Q29sb3IgfSk7CiAKICAgICAvLyBUaGUgY2lyY2xlIG11
c3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIHZhbHVlIG9mIDEgZm9yIHRoZSBzaGFkb3cgY29sb3Ig
dG8gYXBwZWFyLgogICAgIENHRmxvYXQgY2lyY2xlQ29sb3JDb21wb25lbnRzWzRdID0geyAwLCAw
LCAwLCAxIH07CkBAIC0yMjczLDcgKzIyNzMsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWlu
dENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYwog
CiAgICAgYm9vbCBpc0VtcHR5ID0gIXN0YXRlcy5jb250YWluc0FueSh7IENvbnRyb2xTdGF0ZXM6
OlN0YXRlczo6Q2hlY2tlZCwgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpJbmRldGVybWluYXRlIH0p
OwogICAgIGF1dG8gZmlyc3RTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4geyAwLCAwLCAw
LCBpc0VtcHR5ID8gMC4wNWYgOiAwLjFmIH07Ci0gICAgY29udGV4dC5zZXRTaGFkb3coaW5uZXJT
aGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgZmlyc3RTaGFkb3dDb2xvcik7CisgICAgY29u
dGV4dC5zZXREcm9wU2hhZG93KHsgaW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwg
Zmlyc3RTaGFkb3dDb2xvciB9KTsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6Ymxh
Y2spOwogCiAgICAgUGF0aCBpbm5lclNoYWRvd1BhdGg7CkBAIC0yMjkwLDcgKzIyOTAsNyBAQCB2
b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgYwogICAgIGNvbnRleHQuZmlsbFBhdGgoaW5uZXJTaGFkb3dQ
YXRoKTsKIAogICAgIGNvbnN0ZXhwciBhdXRvIHNlY29uZFNoYWRvd0NvbG9yID0gRGlzcGxheVAz
PGZsb2F0PiB7IDEsIDEsIDEsIDAuNWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhGbG9hdFNp
emUgeyAwLCAwIH0sIDEsIHNlY29uZFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BT
aGFkb3coeyBGbG9hdFNpemUgeyAwLCAwIH0sIDEsIHNlY29uZFNoYWRvd0NvbG9yIH0pOwogCiAg
ICAgY29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDAxMGVjYmFlZDg3YTczYTQyMGFmYjk3
ZThlODBmZWE2Mzc5ZmVkM2UuLjEwZGM5MGU1N2U1YWUwZjQyNWEwZGFhYTM2NGY4MTRlNDQ5NDk5
MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI4
MTYsNyArMjgxNiw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9y
ZGVyKGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQsCiAgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihwbGFjZWhvbGRlckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9r
ZVRoaWNrbmVzcyhhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJXaWR0aCk7CiAgICAgY29udGV4
dC5zZXRTdHJva2VTdHlsZShEYXNoZWRTdHJva2UpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2go
e2F0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGh9LCAwKTsKKyAgICBjb250ZXh0
LnNldExpbmVEYXNoKHsgeyBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNoTGVuZ3RoIH0s
IDAgfSk7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKGJvcmRlclBhdGgpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4
IDY3NTU2OGFmZjYxMThmMDEzYmQxZDRmNTVhNmMzNjRmYThhZjM4ZTguLjgzMDliMmY4ZDRhMzFm
YTAzYjFhYmY4NDM5ZGEwZjNlZjE2Mjg0MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9p
ZCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKGNvbnN0
IFRleHRSdW4mIHRleHRSdW4sIGMKICAgICAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0gc2hh
ZG93LT5jb2xvcigpOwogICAgICAgICAgICAgaWYgKG1fc2hhZG93Q29sb3JGaWx0ZXIpCiAgICAg
ICAgICAgICAgICAgbV9zaGFkb3dDb2xvckZpbHRlci0+dHJhbnNmb3JtQ29sb3Ioc2hhZG93Q29s
b3IpOwotICAgICAgICAgICAgbV9jb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93WCwg
c2hhZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFkb3dD
b2xvcik7CisgICAgICAgICAgICBtX2NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZShz
aGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQpLCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCks
IHNoYWRvd0NvbG9yIH0pOwogICAgICAgICAgICAgc2hhZG93ID0gc2hhZG93LT5uZXh0KCk7CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWlu
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKaW5kZXgg
ODg1ZDgyNmVlOWU3OTZmNGI1YzViNTgzM2Y3MWEwMjhjNDU0MWE3YS4uZmU4ODY5YzE5ZTVmOGQ0
M2I3ZmExNmU0MDFiNGZiYzZkY2Y3ZWVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dFBhaW50ZXIuY3BwCkBAIC03NCw3ICs3NCw3IEBAIFNoYWRvd0FwcGxpZXI6OlNoYWRvd0FwcGxp
ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csCiAg
ICAgfQogCiAgICAgaWYgKCFtX2F2b2lkRHJhd2luZ1NoYWRvdykKLSAgICAgICAgY29udGV4dC5z
ZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93Q29sb3Ip
OworICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsKIH0KIAogaW5saW5lIGJvb2wgU2hhZG93QXBw
bGllcjo6aXNMYXN0U2hhZG93SXRlcmF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCmluZGV4IDdlZDUzN2M5Mjc5Mzc3MGY0NDg4YWUyOWRm
NDA3MjdkN2ViMWEzYTkuLjZjNzMwZWYwN2U0OGM3ZWNmOGM0MGUzN2UwMDM0NWNmYWI1NmM2OGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApA
QCAtNjksNyArNjksNyBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlVXBkYXRl
ZFN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKIHN0YXRpYyB2b2lkIHVzZVN0cm9rZVN0eWxlVG9G
aWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoYXV0byBncmFkaWVudCA9
IGNvbnRleHQuc3Ryb2tlR3JhZGllbnQoKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGll
bnQoKmdyYWRpZW50LCBjb250ZXh0LnN0YXRlKCkuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KCpncmFkaWVudCwgY29udGV4dC5z
dHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKICAgICBlbHNlIGlmIChQYXR0ZXJuKiBwYXR0ZXJuID0g
Y29udGV4dC5zdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGNvbnRleHQuc2V0RmlsbFBhdHRlcm4o
KnBhdHRlcm4pOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IGNjMzhlYzcwMzBlNjBjZTE3NTliMTMyODdkZTI1
ZjczZDU2NWM4NTguLmI2NTg2OGQxYmQzNGM5MGQ0YmJmZGQ0NzdhZDJjNzQyODJhMDU2YWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNw
cApAQCAtNTAxLDEwICs1MDEsMTIgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9r
ZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChjYW5TZXRMaW5lRGFzaCkKLSAgICAgICAgICAgIGNvbnRleHQuc2V0
TGluZURhc2goZGFzaEFycmF5LCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxl
LnN0cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBjb250ZXh0
LnNldExpbmVEYXNoKHsgV1RGTW92ZShkYXNoQXJyYXkpLCBsZW5ndGhDb250ZXh0LnZhbHVlRm9y
TGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZhY3RvciB9KTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9r
ZSk7CiAgICAgfQorCisgICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCiB2b2lk
IFNWR1JlbmRlclN1cHBvcnQ6OnN0eWxlQ2hhbmdlZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMmZiOGYzM2E4NzBkZmNj
ZWI2MmUxNDk2NTZiMTQ0MzcyMmViZWEyZC4uZjU3OWU1YTc1ZmU5MTBmNmU1YjU4YTlhZWZiNjgz
NTg5NjIyMTBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xMTUsMTIgKzExNSwxMiBAQCB2b2lkIFNWR1JlbmRl
cmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIFBhaQogICAgICAgICBpZiAob3BhY2l0eSA8IDEgfHwgaGFzQmxlbmRNb2RlIHx8IGlz
b2xhdGVNYXNrRm9yQmxlbmRpbmcgfHwgaGFzSXNvbGF0aW9uKSB7CiAKICAgICAgICAgICAgIGlm
IChoYXNCbGVuZE1vZGUpCi0gICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5z
ZXRDb21wb3NpdGVPcGVyYXRpb24obV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVy
YXRpb24oKSwgc3R5bGUuYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgICAgIG1fcGFpbnRJbmZv
LT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY29t
cG9zaXRlT3BlcmF0aW9uKCksIHN0eWxlLmJsZW5kTW9kZSgpIH0pOwogCiAgICAgICAgICAgICBt
X3BhaW50SW5mby0+Y29udGV4dCgpLmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAK
ICAgICAgICAgICAgIGlmIChoYXNCbGVuZE1vZGUpCi0gICAgICAgICAgICAgICAgbV9wYWludElu
Zm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9wYWludEluZm8tPmNvbnRleHQo
KS5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAgICAgICAg
ICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJbmZv
LT5jb250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsIH0pOwog
CiAgICAgICAgICAgICBtX3JlbmRlcmluZ0ZsYWdzIHw9IEVuZE9wYWNpdHlMYXllcjsKICAgICAg
ICAgfQpAQCAtMjczLDcgKzI3Myw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVy
Rm9yZWdyb3VuZChSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikKIAogICAgIC8vIElu
dmFsaWRhdGUgYW4gZXhpc3RpbmcgYnVmZmVyIGlmIHRoZSBzY2FsZSBpcyBub3QgY29ycmVjdC4K
ICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bSA9IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zv
cm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTSgpOwogICAgICAgICBJbnRTaXplIGV4
cGFuZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKTsK
ICAgICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRl
ZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGljX2Nhc3Q8
aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxl
KCkpKSk7CiAgICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6
ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggNGRkN2Y4
MGUzNzc3OTg3ZGNiNzBjMWEzYzhhODdjZDhhNGZkNmZiOS4uY2Q4OGFkZjA4ZGRhODAzYmZkOTNm
ODk1Nzc0MDc2ODZhYzRjNTQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCkBAIC0yNjksMTQgKzI2OSwxNCBAQCBJbWFnZURyYXdSZXN1bHQgU1ZHSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlYwogICAg
IEFTU0VSVCh2aWV3KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNv
bXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVu
ZE1vZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSk7
CiAKICAgICBmbG9hdCBhbHBoYSA9IGNvbnRleHQuYWxwaGEoKTsKICAgICBib29sIGNvbXBvc2l0
aW5nUmVxdWlyZXNUcmFuc3BhcmVuY3lMYXllciA9IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3Io
KSAhPSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciB8fCBvcHRpb25zLmJsZW5kTW9kZSgp
ICE9IEJsZW5kTW9kZTo6Tm9ybWFsIHx8IGFscGhhIDwgMTsKICAgICBpZiAoY29tcG9zaXRpbmdS
ZXF1aXJlc1RyYW5zcGFyZW5jeUxheWVyKSB7CiAgICAgICAgIGNvbnRleHQuYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihhbHBoYSk7Ci0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGhvbm9yIG9wdGlvbnMub3JpZW50YXRpb24oKSwgc2luY2UgSW1hZ2VCaXRtYXAncyBmbGlw
WSBoYW5kbGluZyByZWxpZXMgb24gaXQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzEwMDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCA1NDM4MTgy
ZGRlODc2M2ViYWQzOGYxOTJkZjc5NWFhMDYwYjY1MWJiLi44ZGEzOTBmNmRhNzBlMzc5NTUwYTU3
MmUwOWUwODQxMTg5YzJkZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC03
NCwzMSArNzQsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJlc3RvcmUoKQog
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAg
aGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgaGFuZGxl
SXRlbShEaXNwbGF5TGlzdDo6Um90YXRlKGFuZ2xlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBoYW5k
bGVJdGVtKERpc3BsYXlMaXN0OjpTY2FsZShzY2FsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAg
ICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRDVE0oY3RtKSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBjdG0pCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE0oY3Rt
KSk7Ci19Ci0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0SW5saW5lRmlsbENv
bG9yKERpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3ImJiBpdGVtKQogewogICAgIGhhbmRs
ZUl0ZW0oV1RGTW92ZShpdGVtKSk7CkBAIC0xMjgsNDAgKzEwMywxNSBAQCB2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OnNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSYmIGl0ZW0p
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH07CiAKLSAgICBpZiAoIWZpeFBhdHRlcm5UaWxl
SW1hZ2UoaXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkpCisg
ICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGUoKS5zdHJva2VCcnVzaCgpLnBh
dHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFn
ZShpdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSkpCisgICAgaWYg
KCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwogfQog
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5l
Q2FwKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVDYXAobGluZUNhcCkp
OwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVEYXNoKERpc3Bs
YXlMaXN0OjpTZXRMaW5lRGFzaCYmIGl0ZW0pCi17Ci0gICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0
ZW0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbihM
aW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRMaW5l
Sm9pbihsaW5lSm9pbikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNl
dE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6
U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OmNsZWFyU2hhZG93KCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDbGVhclNo
YWRvdygpKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDbGlwKHJl
Y3QpKTsKQEAgLTM3MSwxNCArMzIxLDkgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpmaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3IKICAgICBo
YW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17
Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNv
bG9yLCBvcCwgYmxlbmRNb2RlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpGaWxsUm91
bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOworICAgIGhhbmRsZUl0ZW0oRGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcikpOwogfQogCiB2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCAzYmJhZjc2NWQwNWY0
NGFiZjRkOTYxZTc2NmNlNjU0Njk4ZWRlMjk0Li44MTg4OTY2YWZmYTcwOWU2ZmQwYTMxYmZjYTZj
M2U3MTg1NjVjNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTU5LDIwICs1OSwx
MCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUoKTsKLSAg
ICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICB2b2lkIHJvdGF0ZShmbG9h
dCBhbmdsZSk7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNjYWxl
KTsKLSAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsKLSAg
ICB2b2lkIGNvbmNhdGVuYXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwog
ICAgIHZvaWQgc2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxp
bmVGaWxsQ29sb3ImJik7CiAgICAgdm9pZCBzZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3ImJik7CiAgICAgdm9pZCBzZXRTdHJva2VU
aGlja25lc3MoZmxvYXQpOwogICAgIHZvaWQgc2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldFN0YXRlJiYpOwotICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKTsKLSAg
ICB2b2lkIHNldExpbmVEYXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmKTsK
LSAgICB2b2lkIHNldExpbmVKb2luKFdlYkNvcmU6OkxpbmVKb2luKTsKLSAgICB2b2lkIHNldE1p
dGVyTGltaXQoZmxvYXQpOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKTsKICAgICB2b2lkIGNsaXAo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCk7CkBAIC05Nyw4ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoQ29sb3Io
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2
b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhHcmFkaWVudCYmKTsKLSAgICB2b2lkIGZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9w
ZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdl
YkNvcmU6OkJsZW5kTW9kZSk7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAgICAgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIGZpbGxMaW5lKGNvbnN0IFdlYkNvcmU6
OkxpbmVEYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmlu
CmluZGV4IDI4MDJmZmU4ZjgzOTdjMGVkNGRmMTIxYTAxN2ZlNzgxMDhmZjZjMjAuLjQxNGMzMWEx
MzIwYzBiMmU3ODZiYzhkOWY2NTk4MTAyZDg3MGY0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCkBAIC0yNSw0NyArMjUsMzUgQEAKIG1lc3NhZ2VzIC0+
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIFNh
dmUoKQogICAgIFJlc3RvcmUoKQotICAgIFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAg
IFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICBTY2FsZShXZWJDb3JlOjpGbG9hdFNpemUgc2NhbGUp
Ci0gICAgU2V0Q1RNKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG0pCi0gICAgQ29uY2F0ZW5h
dGVDVE0oV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bSkKKwogICAgIFNldElubGluZUZpbGxD
b2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yIGl0ZW0pCiAgICAg
U2V0SW5saW5lU3Ryb2tlQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9r
ZUNvbG9yIGl0ZW0pCiAgICAgU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAg
ICBTZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUgaXRlbSkKLSAgICBTZXRM
aW5lQ2FwKGVudW06dWludDhfdCBXZWJDb3JlOjpMaW5lQ2FwIGxpbmVDYXApCi0gICAgU2V0TGlu
ZURhc2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIGl0ZW0pCi0gICAgU2V0TGlu
ZUpvaW4oZW51bTp1aW50OF90IFdlYkNvcmU6OkxpbmVKb2luIGxpbmVKb2luKQotICAgIFNldE1p
dGVyTGltaXQoZmxvYXQgbGltaXQpCi0gICAgQ2xlYXJTaGFkb3coKQorI2lmIFVTRShDRykKKyAg
ICBBcHBseVN0cm9rZVBhdHRlcm4oKQorICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorI2VuZGlmCisg
ICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKworICAgIEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICBFbmRUcmFuc3BhcmVuY3lMYXll
cigpCisKICAgICBDbGlwKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIENsaXBQYXRoKFdl
YkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxl
KQogICAgIENsaXBPdXQoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xpcFRvSW1hZ2VC
dWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKICAgICBD
bGlwT3V0VG9QYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBDbGlwUGF0aChXZWJDb3JlOjpQ
YXRoIHBhdGgsIGVudW06dWludDhfdCBXZWJDb3JlOjpXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICBE
cmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCi0gICAgRHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXI+IHNvdXJjZUltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0
IHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyKQotICAgIERyYXdJ
bWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBXZWJDb3Jl
OjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25z
IG9wdGlvbnMpCi0gICAgRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFnZVNpemUs
IFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3Qs
IHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIERyYXdT
eXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVtSW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQotICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0
UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBoYXNlLCBXZWJDb3Jl
OjpGbG9hdFNpemUgc3BhY2luZywgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25z
IG9wdGlvbnMpCi0gICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotICAg
IEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLSAgICBEcmF3UmVjdChXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotICAgIERyYXdMaW5lKFdlYkNvcmU6OkZsb2F0
UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MikKLSAgICBEcmF3TGluZXNG
b3JUZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0IGl0ZW0pCi0gICAg
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgc3RydWN0
IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgIERyYXdFbGxpcHNl
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotICAgIERyYXdQYXRoKFdlYkNvcmU6OlBhdGggcGF0
aCkKLSAgICBEcmF3Rm9jdXNSaW5nUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQotICAgIERyYXdGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisgICAgQ2xpcFRvSW1hZ2VCdWZmZXIoV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKKworICAgIENsZWFyUmVj
dChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKwogICAgIEZpbGxSZWN0KFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0KQogICAgIEZpbGxSZWN0V2l0aENvbG9yKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0
LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQgaXRlbSkKLSAgICBGaWxsQ29tcG9z
aXRlZFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBl
bnVtOnVpbnQ4X3QgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGVudW06dWludDhfdCBX
ZWJDb3JlOjpCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBlbnVtOnVpbnQ4
X3QgV2ViQ29yZTo6QmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBGaWxsUm91bmRlZFJlY3QoV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdCByZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgV2ViQ29yZTo6
RmxvYXRSb3VuZGVkUmVjdCByb3VuZGVkSG9sZVJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQor
CisgICAgRmlsbEVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCiAgICAgRmlsbExpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRh
dGEpCiAgICAgRmlsbEFyYyhzdHJ1Y3QgV2ViQ29yZTo6QXJjRGF0YSBkYXRhKQpAQCAtNzMsMTEg
KzYxLDEwIEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291
bnRlZCBTdHJlYW0gewogICAgIEZpbGxCZXppZXJDdXJ2ZShzdHJ1Y3QgV2ViQ29yZTo6QmV6aWVy
Q3VydmVEYXRhIGRhdGEpCiAjZW5kaWYKICAgICBGaWxsUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgp
Ci0gICAgRmlsbEVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ29udmVydFRv
THVtaW5hbmNlTWFzaygpCi0gICAgVHJhbnNmb3JtVG9Db2xvclNwYWNlKFdlYkNvcmU6OkRlc3Rp
bmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIFBhaW50RnJhbWVGb3JNZWRpYShXZWJD
b3JlOjpNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0
IGRlc3RpbmF0aW9uKQorCiAgICAgU3Ryb2tlUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwg
ZmxvYXQgbGluZVdpZHRoKQorCisgICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBTdHJva2VMaW5lKHN0cnVj
dCBXZWJDb3JlOjpMaW5lRGF0YSBkYXRhKQogICAgIFN0cm9rZUFyYyhzdHJ1Y3QgV2ViQ29yZTo6
QXJjRGF0YSBkYXRhKQpAQCAtODUsMTMgKzcyLDMxIEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIFN0cm9rZUJlemllckN1
cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRpZgogICAgIFN0
cm9rZVBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIFN0cm9rZUVsbGlwc2UoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQot
I2lmIFVTRShDRykKLSAgICBBcHBseVN0cm9rZVBhdHRlcm4oKQotICAgIEFwcGx5RmlsbFBhdHRl
cm4oKQorCisgICAgRHJhd1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykKKyAgICBEcmF3TGluZShXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MSwgV2Vi
Q29yZTo6RmxvYXRQb2ludCBwb2ludDIpCisKKyAgICBEcmF3RWxsaXBzZShXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCkKKyAgICBEcmF3UGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCisKKyAgICBEcmF3
Rm9jdXNSaW5nUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorICAgIERyYXdGb2N1c1JpbmdSZWN0cyhWZWN0b3I8
V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2Vi
Q29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9w
dGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNlSW1hZ2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRl
clJlZmVyZW5jZSBmaWx0ZXIpCisgICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0
UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3Qg
V2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3U3lzdGVtSW1h
Z2UoUmVmPFdlYkNvcmU6OlN5c3RlbUltYWdlPiBzeXN0ZW1JbWFnZSwgV2ViQ29yZTo6RmxvYXRS
ZWN0IGRlc3RpbmF0aW9uUmVjdCkKKyAgICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRTaXpl
IGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJl
Y3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMp
CisgICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9h
dFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0sIFdlYkNv
cmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBzdHJ1Y3Qg
V2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyNpZiBFTkFCTEUoVklERU8p
CisgICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCiAjZW5kaWYKLSAgICBB
cHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgRHJhd0dseXBo
cyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocyBpdGVtKQorICAgIERyYXdMaW5lc0Zv
clRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKKyAgICBE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3Qg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisKKyAgICBDb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCkKKyAgICBUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGlu
YXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgRmx1c2hDb250ZXh0KFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKaW5kZXggODU3N2NiYmRlNmQzOTAx
ZDM0NzA3NjFlZDMwZjc5ZDk4ZTgyYjk4ZC4uNmNmYmFiY2E3YmNmYmVkYzU5NTQ4M2U4ZWViMWQ1
YWIxMjA5NjZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
LmNwcApAQCAtMzIsMzYgKzMyLDIxIEBACiAjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxp
c3REcmF3aW5nQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9JbWFnZUJ1ZmZlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5ZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KEltYWdlQnVmZmVyJiBpbWFnZUJ1
ZmZlciwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiByZW5kZXJpbmdCYWNrZW5kLCBjb25z
dCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0
RHJhd0dseXBocykKLSAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcih7IH0sIGluaXRpYWxDbGlw
LCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBEaXNwbGF5TGlzdDo6
UmVjb3JkZXIoaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykK
ICAgICAsIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVyLnJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcigpKQogICAgICwgbV9pbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikK
ICAgICAsIG1fcmVuZGVyaW5nQmFja2VuZChyZW5kZXJpbmdCYWNrZW5kKQogewogfQogCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygp
Ci17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q29udmVy
dFRvTHVtaW5hbmNlTWFzaygpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKLX0KLQog
UmVuZGVyaW5nTW9kZSBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlbmRlcmluZ01v
ZGUoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyID8gbV9pbWFnZUJ1ZmZlci0+
cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKQEAgLTc3LDMx
ICs2Miw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSZXN0
b3JlKCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSZXN0
b3JlKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
VHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSb3RhdGUoYW5nbGUp
KTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6U2NhbGUoc2NhbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpTZXRDVE0odHJhbnNmb3JtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpD
b25jYXRlbmF0ZUNUTSh0cmFuc2Zvcm0pKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBjb2xv
cikKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRJ
bmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciB7IGNvbG9yIH0p
KTsKQEAgLTExNyw5MiArNzcsMjYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3Ryb2tlVGhpY2tuZXNzKHRo
aWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3Rh
dGUgeyBzdGF0ZSwgZmxhZ3MgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUNhcChsaW5lQ2FwKSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmIGFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldExpbmVEYXNoKERpc3Bs
YXlMaXN0OjpTZXRMaW5lRGFzaCB7IGFycmF5LCBkYXNoT2Zmc2V0IH0pKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2lu
IGxpbmVKb2luKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldE1pdGVyTGltaXQobGlt
aXQpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENs
ZWFyU2hhZG93KCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpDbGVhclNoYWRvdygpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAocmVjdCkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6Q2xpcE91dChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpDbGlwT3V0VG9QYXRoKHBhdGgpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIHJ1bGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChzb3VyY2VJ
bWFnZSkKLSAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJ
bWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3RhdGUo
RGlzcGxheUxpc3Q6OlNldFN0YXRlIHsgc3RhdGUgfSkpOwogfQogCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwg
Rm9udFNtb290aGluZ01vZGUgbW9kZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9u
dCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJbWFn
ZShpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseVN0
cm9rZVBhdHRlcm4oKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRl
c3RpbmF0aW9uUmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkFwcGx5RmlsbFBhdHRlcm4oKSk7CiB9CisjZW5kaWYgLy8gVVNFKENHKQogCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxl
RmFjdG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBAIC0yMTUsNDQgKzEwOSwz
NCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCB3aWR0aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpEcmF3UmVjdChyZWN0LCB3aWR0aCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKLX0KLQotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZXNGb3JUZXh0KERpc3BsYXlMaXN0OjpE
cmF3TGluZXNGb3JUZXh0IHsgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMgfSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAocmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHls
ZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwg
c3R5bGUpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpD
bGlwUGF0aChwYXRoLCBydWxlKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd0VsbGlwc2UocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkNsaXBPdXQocmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd1BhdGgocGF0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0Zv
Y3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1
ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNS
aW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5n
UmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xlYXJSZWN0KHJlY3QpKTsKIH0KIAogdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKQEAgLTI3MCwyMyArMTU0LDIyIEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3Qm
CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJlY3RX
aXRoR3JhZGllbnQoRGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50IHsgcmVjdCwgZ3Jh
ZGllbnQgfSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbENvbXBvc2l0ZWRS
ZWN0KHJlY3QsIGNvbG9yLCBvcCwgbW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSb3VuZGVkUmVjdChyb3VuZGVkUmVjdCwgY29sb3IpKTsK
IH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJv
dW5kZWRSZWN0KHJvdW5kZWRSZWN0LCBjb2xvciwgbW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3Qs
IHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVk
UmVjdCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxMaW5l
KGNvbnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkZpbGxMaW5lKGRhdGEpKTsKQEAgLTMwNiw3ICsxODksNiBAQCB2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNv
bnN0IEJlemllckN1cnZlRGF0YQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkZpbGxCZXppZXJDdXJ2ZShkYXRhKSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zMTQsMjMgKzE5NiwxNyBA
QCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpGaWxsUGF0aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEVsbGlwc2UocmVj
dCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUGFp
bnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1l
Rm9yTWVkaWEocGxheWVyLmlkZW50aWZpZXIoKSwgZGVzdGluYXRpb24pKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VSZWN0KHJlY3QsIGJvcmRl
clRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlN0cm9rZVJlY3QocmVjdCwgd2lkdGgpKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VFbGxpcHNlKHJlY3QpKTsKIH0KIAog
I2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYgZGF0YSkKIHsKICAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VMaW5lKGRh
dGEpKTsKQEAgLTM1MCw3ICsyMjYsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYQogewogICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUJlemllckN1
cnZlKGRhdGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQpAQCAtMzU4LDMzICsyMzMsODQgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VQYXRoKHBhdGgp
KTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlN0cm9rZUVsbGlwc2UocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwog
fQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpDbGVhclJlY3QocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKSk7CiB9CiAKLSNpZiBVU0Uo
Q0cpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdFbGxpcHNlKHJlY3QpKTsKK30KIAotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpBcHBseVN0cm9rZVBhdHRlcm4oKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RHJhd1BhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0
aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5Rmls
bFBhdHRlcm4oKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKIH0KIAot
I2VuZGlmIC8vIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1JlY3Rz
KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2Fs
ZUZhY3RvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VC
dWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6
Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBp
ZiAoc291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV1RGTW92ZShpZGVudGlmaWVy
KSwgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZShSZWY8RmlsdGVyPiB7IGZp
bHRlciB9KSkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdOYXRpdmVJbWFnZShpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVz
dGluYXRpb25SZWN0KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVu
dGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKK30KKworI2lmIEVOQUJMRShWSURF
TykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6UGFpbnRGcmFtZUZvck1lZGlhKGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKSk7Cit9
CisjZW5kaWYKKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhz
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCit7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhE
aXNwbGF5TGlzdDo6RHJhd0dseXBocyB7IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBs
b2NhbEFuY2hvciwgbW9kZSB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdMaW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQg
eyBGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHBy
aW50aW5nLCBkb3VibGVMaW5lcyB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQoreworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKIH0KIAogYm9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBpbWFnZSkKQEAgLTQzNCwx
MSArMzYwLDYgQEAgYm9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJl
c291cmNlVXNlKEZvbnQmIGZvbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQoR3JhcGhpY3NDb250ZXh0Rmx1
c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6Rmx1c2hDb250ZXh0KGlkZW50aWZpZXIpKTsKLX0KLQogUmVmUHRy
PEltYWdlQnVmZmVyPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0ZUltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVy
aW5nTW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJl
bmRlcmluZ01ldGhvZCkgY29uc3QKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFj
a2VuZCkpIHsKQEAgLTQ2NCw2ICszODUsMjEgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb24KICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBz
Y2FsZUZhY3RvcigpLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2Qp
OwogfQogCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVt
aW5hbmNlTWFzaygpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6Q29udmVydFRvTHVtaW5hbmNlTWFzaygpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3Bh
Y2UpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29u
dGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRleHQoaWRl
bnRpZmllcikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHku
aAppbmRleCA5YjMzYTA2N2ZkMTZiY2NmMTQwNDJjMTk3NGRkNjkxOTQyMjYyNDY4Li5mMmFkOGQw
YWE0NTg1ODlhZWU4MTkwN2Q5YzkwODk2ZDM0YjZmNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiAKIGNsYXNzIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXIgeworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7CiBw
dWJsaWM6CiAgICAgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KFdlYkNvcmU6OkltYWdl
QnVmZmVyJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgV2Vi
Q29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBXZWJDb3Jl
OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKICAgICB+
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KCkgPSBkZWZhdWx0OwpAQCAtNTAsNjMgKzUx
LDM5IEBAIHB1YmxpYzoKICAgICB2b2lkIGZsdXNoQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRGbHVzaElkZW50aWZpZXIpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZW5kKFQmJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFtX3JlbmRlcmluZ0JhY2tlbmQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIG1fbmVlZHNGbHVzaCA9IHRydWU7Ci0gICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+
c2VuZFRvU3RyZWFtKFdURk1vdmUobWVzc2FnZSksIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlm
aWVyKTsKLSAgICB9Ci0KLSAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RHJhd0dseXBoc1JlY29y
ZGVyOwotCiAgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
ZmluYWw7CiAKICAgICB2b2lkIHJlY29yZFNhdmUoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFJl
c3RvcmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRTY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZFNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybSYpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29y
ZTo6U1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tl
Q29sb3IoV2ViQ29yZTo6U1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGlu
ZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVEYXNo
KGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkU2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVh
clNoYWRvdygpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGUmKSBmaW5hbDsKKworI2lmIFVTRShDRykKKyAgICB2b2lkIHJl
Y29yZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxs
UGF0dGVybigpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgm
LCBXZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VC
dWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdl
YkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciosIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBXZWJDb3JlOjpGaWx0ZXImKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdl
YkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNo
b3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERy
YXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
V2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERy
YXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFdlYkNvcmU6OlN5c3RlbUltYWdlJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVy
KCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50Mikg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9jYWxB
bmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkRHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7
CisgICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwor
CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxs
UmVjdFdpdGhHcmFkaWVudChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFk
aWVudCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9z
aXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRG
aWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZEZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNv
cmRGaWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IFdlYkNv
cmU6OkxpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IFdlYkNv
cmU6OkFyY0RhdGEmKSBmaW5hbDsKQEAgLTExNCw5ICs5MSwxMCBAQCBwcml2YXRlOgogICAgIHZv
aWQgcmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSYp
IGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRGaWxsUGF0aChjb25zdCBXZWJDb3JlOjpQ
YXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShXZWJD
b3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24p
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKworICAgIHZv
aWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsK
ICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZFN0cm9rZUxpbmUo
Y29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFN0cm9rZUFy
Yyhjb25zdCBXZWJDb3JlOjpBcmNEYXRhJikgZmluYWw7CkBAIC0xMjQsMTMgKzEwMiwyOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgV2ViQ29yZTo6
QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBh
dGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxs
aXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENs
ZWFyUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cpCi0g
ICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAg
ICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJl
Y29yZERyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOworCisgICAgdm9p
ZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lk
IHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0
PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmlu
YWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZl
ciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNvcmU6Oklt
YWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIFdl
YkNvcmU6OkZpbHRlciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNv
cmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3U3lz
dGVtSW1hZ2UoV2ViQ29yZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uUmVjdCk7CisgICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKLSAgICB2
b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisgICAgdm9p
ZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgY291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJD
b3JlOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZXNG
b3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IFdlYkNvcmU6OkRhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUmKSBmaW5hbDsKIAogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6TmF0
aXZlSW1hZ2UmKSBmaW5hbDsKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6Oklt
YWdlQnVmZmVyJikgZmluYWw7CkBAIC0xNDEsNiArMTM0LDE4IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNl
Jiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdNZXRob2Q+KSBjb25zdCBmaW5hbDsK
ICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0
IGZpbmFsOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNlbmQoVCYmIG1l
c3NhZ2UpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsKKyAg
ICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwg
bV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIHZvaWQgcmVjb3Jk
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKICAgICBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXI7CiAg
ICAgV2Vha1B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKICAgICBXZWFr
UHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW5kZXJpbmdCYWNrZW5kOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3Bw
CmluZGV4IDFkNjQzYjZiNDI4OGQwOGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcuLjA3OTkzYjM4
MGYxZWE3ZDM0OWRkN2ViZmMxNjBjODA0ZGFkNDNlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTUzNCw3ICs1MzQs
NyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjbwogCiAgICAgLy8gRHJhdyB3aGl0ZSBmcmFtZXMg
YXJvdW5kIHRoZSBob2xlcy4KICAgICAvLyBXZSBkb3VibGUgdGhlIHRoaWNrbmVzcyBiZWNhdXNl
IGhhbGYgb2YgdGhlIHN0cm9rZSB3aWxsIGJlIGVyYXNlZCB3aGVuIHdlIGNsZWFyIHRoZSBob2xl
cy4KLSAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRY
LCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdy
YXBoaWNzQ29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNo
YWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAgICBncmFw
aGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKICAgICBncmFwaGljc0Nv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoICogMik7CiAgICAgZm9yIChhdXRv
JiBwYXRoIDogd2hpdGVGcmFtZVBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAK
aW5kZXggZjE2Zjc5NmUwNDdlOTkxOTcyYzBlZDFmNGFlMTEzY2UxNjU2NWMxMC4uNDllMDBiZTMz
N2VhZmVlMTI5M2VmMDc3YWRmNjE3Y2RhZTNkNGExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRy
b2xsZXIuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRy
b2xsZXI6OmRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGgKIAog
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGlj
c0NvbnRleHQpOwogCi0gICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhXZWJDb3JlOjpGbG9h
dFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNo
YWRvd0NvbG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IFdlYkNvcmU6
OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1
cywgc2hhZG93Q29sb3IgfSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKGZv
dW5kQ29sb3IpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoaW5kaWNh
dG9yQm9yZGVyV2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiBmb3VuZEZyYW1lUGF0
aHMpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
ZTk3YzIwYTRmZjViZTQxZDljMzIwNTdjNTA4MWNmZmM0YjgxYTRhNi4uMmFmODFjMmExZmM1ZjY4
YmEwNDBmM2QwMTRmNDIxN2Y0ZWIzNjFlMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAzLTE0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3Jh
cGhpY3NDb250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9y
bSBjb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzc3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0VGVzdHNDRy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMi0w
My0xNCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2dp
dC13ZWJraXRdIEhhbmRsZSBjb21wYXJpbmcgVXNlciBhbmQgQ29udHJpYnV0b3IgdG8gTm9uZQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5kZXggOGU0
MWM1YTczYWUzNjg0Y2VkZGYxZjk0ZjlmMTcxODk1MzUxNGM5Zi4uZWJlNjQ0ODcxZTI4ZjUxOWNk
MjYxMjBiOGE4Mjc4ODZjMDE5MDJiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dFRlc3RzQ0cuY3BwCkBAIC01NCw3ICs1NCw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dFRlc3RzLCBCYXNpYykKICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmltYXJ5Q29u
dGV4dChwcmltYXJ5Q0dDb250ZXh0LmdldCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3Qg
ZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxp
c3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsg
fSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIEZsb2F0
UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsK
IApAQCAtOTAsMTAgKzkwLDEwIEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3Rz
LCBCYXNpYykKIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUZXh0KQogewog
ICAgIEluTWVtb3J5RGlzcGxheUxpc3QgcHJpbWFyeURpc3BsYXlMaXN0OwotICAgIFJlY29yZGVy
SW1wbCBwcmltYXJ5Q29udGV4dChwcmltYXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAs
IDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBs
IHByaW1hcnlDb250ZXh0KHByaW1hcnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRl
eHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBzZWNv
bmRhcnlEaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNv
bmRhcnlEaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250
ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNv
bmRhcnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhl
aWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRl
eHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAgVEVTVChCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJvcmRlcnMpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cg
cHJpbWFyeUNvbnRleHQocHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAKICAgICBJbk1lbW9yeURp
c3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0
KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRI
ZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlM
aXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAg
ICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5
Q29udGV4dCk7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHRUZXN0cywgVHJhbnNmb3JtZWRDbGlwKQogICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFy
eUNvbnRleHQgPSBwcmltYXJ5Q29udGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBk
aXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlM
aXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJ
bXBsIHNlY29uZGFyeUNvbnRleHRETChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwg
MTAwKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5
Q29udGV4dERMOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNv
bnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwpAQCAtMjg3LDE1ICsyODcsMTUgQEAgVEVTVChCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCiAgICAg
R3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCA9IHByaW1hcnlDb250ZXh0Q0c7CiAKICAg
ICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNv
bmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAw
KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0
LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBHcmFwaGljc0NvbnRleHQmIHNlY29u
ZGFyeUNvbnRleHQgPSBzZWNvbmRhcnlDb250ZXh0REw7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKICAgICBj
dHguYXBwbHlEZXZpY2VTY2FsZUZhY3RvcigyKTsKIAotICAgIGF1dG8gcHJpbWFyeUNUTSA9IHBy
aW1hcnlDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6
RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byBzZWNvbmRhcnlDVE0gPSBz
ZWNvbmRhcnlDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2Fs
ZTo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgYXV0byBwcmltYXJ5Q1RNID0g
cHJpbWFyeUNvbnRleHQuZ2V0Q1RNKCk7CisgICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRh
cnlDb250ZXh0LmdldENUTSgpOwogCiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueFNjYWxlKCks
IHNlY29uZGFyeUNUTS54U2NhbGUoKSk7CiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueVNjYWxl
KCksIHNlY29uZGFyeUNUTS55U2NhbGUoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvY2cvR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAK
aW5kZXggMjQ3MzU4MGYxOTBlMGZkNjc0YzM2N2RhNDdjOWYxOTJiYTI0ODVlNC4uMjE1YzE3YzY2
NTdhZWRhNmE2ZTJjZDBhZTBjOWM5MjZmM2JkODJiMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0dyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0
c0NHLmNwcApAQCAtNTIsNyArNTIsNyBAQCBURVNUKEdyYXBoaWNzQ29udGV4dFRlc3RzLCBEcmF3
TmF0aXZlSW1hZ2VEb2VzTm90TGVha0NvbXBvc2l0ZU9wZXJhdG9yKQogICAgIEdyYXBoaWNzQ29u
dGV4dENHIGN0eChjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgRVhQRUNUX0VRKGN0eC5jb21wb3Np
dGVPcGVyYXRpb24oKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIpOwotICAgIEVYUEVD
VF9FUShjdHguYmxlbmRNb2RlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICBF
WFBFQ1RfRVEoY3R4LmJsZW5kTW9kZSgpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiAKICAgICBhdXRv
IGdyZWVuUGl4ZWxDRyA9IGdyZWVuSW1hZ2UoKTsKICAgICBhdXRvIGdyZWVuUGl4ZWxOYXRpdmUg
PSBOYXRpdmVJbWFnZTo6Y3JlYXRlKGdyZWVuUGl4ZWxDRy5nZXQoKSk7CkBAIC03MSw3ICs3MSw3
IEBAIFRFU1QoR3JhcGhpY3NDb250ZXh0VGVzdHMsIERyYXdOYXRpdmVJbWFnZURvZXNOb3RMZWFr
Q29tcG9zaXRlT3BlcmF0b3IpCiAgICAgRVhQRUNUX0VRKHByaW1hcnlEYXRhWzJdLCAwKTsKIAog
ICAgIEVYUEVDVF9FUShjdHguY29tcG9zaXRlT3BlcmF0aW9uKCksIENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyKTsKLSAgICBFWFBFQ1RfRVEoY3R4LmJsZW5kTW9kZU9wZXJhdGlvbigpLCBC
bGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgRVhQRUNUX0VRKGN0eC5ibGVuZE1vZGUoKSwgQmxlbmRN
b2RlOjpOb3JtYWwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
NTE3N2VkOTI5ODBkZDhkNGJhNGJmM2FmM2QxNDEwNmE2MmZkNmI4Ny4uYzRmOTZjMWI4Yzg3MmNk
OGE4MDU4ZDIxYzQ0YTZkZTdlMTIzMzlhNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAz
LTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUg
UHJvY2Vzc10gR3JhcGhpY3NDb250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRv
IHRoZSBwbGF0Zm9ybSBjb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzc3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9y
bXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlz
dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBw
ZWQtcmVjdC1leHBlY3RlZC50eHQ6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFv
dXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRv
ZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVk
LnR4dAppbmRleCA1MTFiN2MwYzU0ZDMzMjE2YjdjNmVhZjA0M2E3NWMxNjc2NmQwNDI3Li5kYmY1
NGIzZWEyMDRlMTkyNGJkNDM1ZDUxNzM2ZGM3MzQ3NzAyY2ZmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0
ZWQudHh0CkBAIC0xLDE3ICsxLDEzIEBACiAKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkg
MC4wMCkpCiAoc2F2ZSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyA1MTIpCi0gIChzaGFk
b3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAo
c2hhZG93LWNvbG9yICMwMDAwMDApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQot
KGZpbGwtY29tcG9zaXRlZC1yZWN0CisgIChjaGFuZ2UtZmxhZ3MgW2Ryb3Atc2hhZG93XSkKKyAg
KGRyb3Atc2hhZG93CisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAg
IChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LWNvbG9yICMwMDAwMDApCisgICAgKHNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChy
ZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQotICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBv
c2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50
IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQorICAoY29sb3IgIzAwMDBGRikgZXh0ZW50IGF0ICg0
Myw1MCkgc2l6ZSAxMzR4MTM3KQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9k
aXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVk
LnR4dAppbmRleCAzODZlMzk0MTE4NWYwOWEzYzY4ZWM2YzJhZTg4ZGYxMWM3MGIwYTY5Li41Zjc4
YjhjMzUwNWM5ZTgwMzk5YmQ2MDVhOWJlOTU1YWIwOWI3MDVlIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jt
cy1leHBlY3RlZC50eHQKQEAgLTEsMjEgKzEsMTQgQEAKIAotKHRyYW5zbGF0ZQotICAoeCAwLjAw
KQotICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50YXRlLWN0bQotICAoY3RtIHttPSgoMC44NywwLjUw
KSgtMC41MCwwLjg3KSkgdD0oODEuNzAsLTE4LjMwKX0pKQogKHNhdmUpCiAoc2V0LXN0YXRlCi0g
IChjaGFuZ2UtZmxhZ3MgNTEyKQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zm
c2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvdy1jb2xvciAjMDAwMDAwKQotICAoc2hh
ZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkKLShmaWxsLWNvbXBvc2l0ZWQtcmVjdAorICAoY2hh
bmdlLWZsYWdzIFtjdG0sIGRyb3Atc2hhZG93XSkKKyAgKGN0bSB7bT0oKDAuODcsMC41MCkoLTAu
NTAsMC44NykpIHQ9KDgxLjcwLDMuNzApfSkKKyAgKGRyb3Atc2hhZG93CisgICAgKHNoYWRvdy1v
ZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAo
c2hhZG93LWNvbG9yICMwMDAwMDApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkp
KQorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkK
LSAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQot
ICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgx
ODUuNjUpCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQu
NTV4MTg1LjY1KQogKHJlc3RvcmUpCi0oc2V0LWN0bQotICAoc2V0LWN0bSB7bT0oKDEuMDAsMC4w
MCkoMC4wMCwxLjAwKSkgdD0oMC4wMCwyMi4wMCl9KSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGJjMTdi
NTExNDk5ZjgyNTZjOTkyOTBkYWU4NjE0ZDQ4OTRjYWY5Y2MuLjU0NmRjNDkxMmY1MmQwM2E4OWFk
OTA2ODU3MmIyOGVkYzgwMzIyNTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSwxNiArMSwxMiBAQAog
Ci0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5IDAuMDApKQotKGZpbGwtY29tcG9zaXRlZC1y
ZWN0CisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0
KQotICAoY29sb3IgIzAwODAwMCkKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIp
Ci0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKKyAg
KGNvbG9yICMwMDgwMDApIGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAoc2V0LXN0YXRl
Ci0gIChjaGFuZ2UtZmxhZ3MgMzI5NjApCi0gIChmaWxsLWNvbG9yICMwMDAwRkYpCi0gIChzdHJv
a2Utc3R5bGUgMCkKKyAgKGNoYW5nZS1mbGFncyBbZmlsbC1icnVzaCwgc3Ryb2tlLXN0eWxlLCBz
aG91bGQtYW50aWFsaWFzXSkKKyAgKGZpbGwtYnJ1c2gKKyAgICAoY29sb3IgIzAwMDBGRikpCisg
IChzdHJva2Utc3R5bGUgTk8tU1RST0tFKQogICAoc2hvdWxkLWFudGlhbGlhcyAwKSkKIChkcmF3
LXJlY3QKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MikKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3Rl
ZC50eHQKaW5kZXggYmI1OTNkMjBmNmRhNjQ4NjI5MmQzNmMwMjIwZTJhOWQ4NzJmODJiOS4uYjg2
MDQ4Y2MwOGM5OTM3ZWYwMDc4MmU3MTA4OWNhY2JjOTljNTMzMiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1l
eHBlY3RlZC50eHQKQEAgLTEsMTYgKzEsOCBAQAogcmVjb3JkZWQ6Ci0odHJhbnNsYXRlCi0gICh4
IDAuMDApCi0gICh5IDAuMDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisoZmlsbC1yZWN0LXdp
dGgtY29sb3IKICAgKHJlY3QgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAw
MEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUg
bm9ybWFsKSBleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCisgIChjb2xvciAjMDAwMEZG
KSBleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAKIHJlcGxheWVkOgogKAogICAoY2xp
cCBhdCAoNTEyLDApIHNpemUgNTEyeDIwMCkKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkg
MC4wMCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454747</attachid>
            <date>2022-03-15 13:10:42 -0700</date>
            <delta_ts>2022-03-15 13:45:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220315131041.patch</filename>
            <type>text/plain</type>
            <size>665851</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uYTQ4MWZkZWNmZjQ3ZWUzY2E5Njc4OTgzOTE3YTYw
ODA0MzJjMDVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzMiBAQAorMjAyMi0wMy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdl
OjpkcmF3UGF0dGVybik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjphcHBseUxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1BvaW50SW5TdHJv
a2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YXBwbHlTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXlvdXRTdGlwcGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xheW91dEhhdGNoaW5nKToKKyAgICAgICAgKiBw
YWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1
c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxh
eWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3Rp
bmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlk
VXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBo
c1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRlY29u
c3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRp
c3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEltYWdlOjpkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkaWRBcHBs
eVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGVG
YWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVu
ZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9
PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9w
ZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3RhdGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VH
cmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnREZXRlY3RlZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5n
TW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0YXRlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVyZ2VTdGF0ZUNoYW5n
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJnZVN0YXRlRGlmZnMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNmb3JtIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmluZUNhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojps
aW5lRGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZUpvaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Om1pdGVyTGltaXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcG9zaXRlTW9kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU9wZXJhdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJsZW5kTW9kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU1vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpkcm9wU2hhZG93IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93T2Zmc2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93Qmx1ciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0NvbG9yIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0ZXh0RHJhd2luZ01vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRBbnRpYWxpYXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaG91bGRTbW9vdGhGb250cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNtb290aEZvbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RHJhd0x1bWluYW5jZU1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1c2VEYXJrQXBwZWFyYW5jZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVzZURhcmtBcHBlYXJh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzSW5UcmFuc3Bh
cmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNs
aXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGls
ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2NhbGVkSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFs
TGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJc0NB
TGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aXNDQUxh
eWVyQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmJsZW5kTW9kZU9wZXJhdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6
Y29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lM
YXllclNjb3BlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OmJlZ2luTGF5ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVy
U2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVT
dGFja0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjp+R3Jh
cGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxp
dHlNYWludGFpbmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlw
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpo
YXNPbmx5UHJpbWl0aXZlQ2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptZXJnZURpZmZzKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXRlQ2hhbmdl
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHVtcCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Y2hhbmdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmdldENUTSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpmaWxsQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmlsbFJ1bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzdHJva2VCcnVzaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZUdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzdHJva2VUaGlja25lc3MgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlU3R5
bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0
cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5l
Q2FwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRM
aW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5lRGFz
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGlu
ZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmxpbmVKb2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRMaW5l
Sm9pbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWl0ZXJMaW1p
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TWl0
ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y29tcG9z
aXRlTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2V0Q29tcG9zaXRlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6ZHJvcFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjp0ZXh0RHJhd2luZ01vZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFRleHREcmF3aW5nTW9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkQW50aWFs
aWFzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRT
aG91bGRBbnRpYWxpYXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNob3VsZFNtb290aEZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpzZXRTaG91bGRTbW9vdGhGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHJhd0x1bWluYW5jZU1hc2sgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldERyYXdMdW1pbmFuY2VNYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjp1c2VEYXJrQXBwZWFy
YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0
VXNlRGFya0FwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpiZWdpbkxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6On5UcmFuc3Bh
cmVuY3lMYXllclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U3RhY2tDaGVja2VyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNzQ29u
dGV4dFN0YXRlU3RhY2tDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6fkludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVNb2RlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZU1vZGU6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6TGluZURh
c2g6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lRGFzaDo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmlzVmlzaWJsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc0JsdXJyZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJvcFNoYWRvdzo6aGFzT3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcm9w
U2hhZG93OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpOdWxsR3JhcGhpY3NDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFn
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJI
YXJmQnV6ei5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU291cmNlQnJ1c2guY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpTb3VyY2VCcnVzaCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c3BhY2VUcmFu
c2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmdyYWRpZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpwYXR0ZXJuIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCcnVzaDo6c2V0UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpjb2xvciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnJ1c2g6OmJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRH
cmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0UGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6aXNQcmltaXRpdmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6
QnJ1c2g6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6QnJ1
c2g6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpkZWNvZGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1RleHRCb3hJdGVyYXRvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6
ei5jcHAuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OlRleHRCb3hJdGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9mZnNldCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmluY3JlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRCb3hJdGVyYXRvcjo6Y3VycmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0
ZXJhdG9yOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRl
OjpzZXRTdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpz
ZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFNob3Vs
ZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OmdldENUTSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6RmlsbFNvdXJjZTo6RmlsbFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWly
bzo6U3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OlNoYWRvd1N0YXRlOjpTaGFkb3dTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0
TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZURhc2gpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2Fpcm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkaWRVcGRhdGVTdGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y29u
Y2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENhaXJvOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0
ZVNhdmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0
U3RhdGVTYXZlcjo6Q0dDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyOjp+Q0dDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4
dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVT
YXZlcjo6ZGlkU2F2ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OkdyYXBoaWNzQ29udGV4dENHKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmludGVybmFsUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
Y3VsYXRlRHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5U2hhZG93T2Zm
c2V0V29ya2Fyb3VuZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZUNhcCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dENHTWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xpbmVEYXNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldENHU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OmNhblVzZVNoYWRvd0JsdXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFz
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGlu
ZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNj
YWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3Rh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5z
bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y29u
Y2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpz
ZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6Omdl
dENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6
OkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250
ZXh0U3RhdGVTYXZlcjo6fkNHQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OmRpZFNhdmUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2ggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1h
Z2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkcmF3UERG
UGFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9rZUNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpiZWdpbkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZExheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZHJh
d0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludGVybmFsQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnNldEludGVybmFsRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGlu
YXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVj
b3JkQmVnaW5MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJl
Y29yZEVuZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERyb3BTaGFkb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJD
b3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9w
dWxhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0ds
eXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRl
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNoYWRvd0lzQ2xlYXJlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG93R2x5cGhzV2l0aEFkdmFuY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdp
bmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlOjpzYWZlQ29weSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OnNpemVPZkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0Ojppc0RyYXdpbmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
Ojppc0lubGluZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0YXRlOjpTZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0U3RhdGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVy
YXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6
OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1l
Rm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6VHJhbnNsYXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Um90YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6YXBwbHkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVKb2luOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6YXBwbHkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjphcHBseSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0
ZWRSZWN0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0YXRlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0YXRlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmVuY29kZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OnggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3Rh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6YW5n
bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxl
OjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6
OmFtb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldENUTTo6dHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjp0cmFuc2Zvcm0gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpz
dGF0ZUNoYW5nZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpsaW5lQ2FwIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6U2V0TGluZURhc2gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpk
YXNoQXJyYXkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVEYXNoOjpkYXNoT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGVjb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpv
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2lu
OjpsaW5lSm9pbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6bWl0ZXJMaW1pdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpG
aWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6cmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpjb2xvciBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0
Ojpjb21wb3NpdGVPcGVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Z2xv
YmFsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0
ZWRSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSb3VuZGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OlJlY29yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX2RyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpl
bmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
bGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBP
dXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9JbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFy
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ry
b2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9r
ZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJv
a2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpk
cmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp+UmVjb3Jk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25s
eUlubGluZVN0YXRlQ2hhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6c3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVKb2luKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmN1cnJlbnRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmN0bSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250
ZXh0U3RhdGU6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpDb250ZXh0U3RhdGU6OkNvbnRleHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y2xvbmVGb3JTYXZlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
Q29udGV4dFN0YXRlOjpjbG9uZUZvclRyYW5zcGFyZW5jeUxheWVyIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3RhdGVTdGFjayBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OlJlY29yZGVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4pOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxs
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEVsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
RmlsbEJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmREcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2
ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1Bh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OmV4dGVudEZyb21Mb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjp+UmVjb3JkZXJJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRS
b3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENvbmNhdGVuYXRlQ1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZFNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUpvaW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0
TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmRDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVySW1wbDo6UmVjb3JkZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6YXBwbHlTZXRTdGF0ZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnNhdmUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6cmVzdG9yZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjph
cHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXApOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpjbGVhclJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QpOgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoTmljb3Np
YTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoTmljb3Np
YTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAg
KE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRpZFVw
ZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQu
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjp0cmFuc2xhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNj
YWxlKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3
Qm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRmdWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNv
bnRlbnRmdWxQYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVu
dFJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9J
bm5lclNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dERlY29yYXRpb25QYWludGVyOjpwYWludEJhY2tncm91bmREZWNvcmF0aW9ucyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXNlU3Ryb2tlU3R5bGVU
b0ZpbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRvUmVuZGVyU1ZH
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJG
b3JlZ3JvdW5kKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRyYXcpOgorCiAyMDIyLTAzLTE0ICBBbnRvaW5lIFF1aW50
ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFttb2RlbF0gPG1vZGVsIGludGVyYWN0
aXZlPiBkb2Vzbid0IGFsbG93IG1vZGVsIHRvIGJlIHJvdGF0ZWQgb24gaU9TCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IGQ5Y2MzYzRmZTY5ZThiY2U1ZTAxYzg5YWY0ZDA3Yzc1YWM4MGMzZTYuLjIzYzYwN2E2ZjIyZDU0
MjZjODIwYzk2NTJhMTVjNjBkNmJhNTliOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIw
MjItMDMtMTQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAg
W0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6aWx5IGFwcGxp
ZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNvbmNhdGVuYXRlQ1RNKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZUNh
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsQ29tcG9z
aXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxs
UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFBhdGgpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXQp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQmV6aWVyQ3Vy
dmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd0xpbmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZy
YW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KToK
KyAgICAgICAgKFdlYktpdDo6bV9yZW5kZXJpbmdCYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZFJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVE
YXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnNlbmQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpkcmF3UmVj
dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6
ZHJhd1JlY3QpOgorCiAyMDIyLTAzLTE0ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFttb2RlbF0gPG1vZGVsIGludGVyYWN0aXZlPiBkb2Vzbid0IGFsbG93
IG1vZGVsIHRvIGJlIHJvdGF0ZWQgb24gaU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDVjN2I3M2ViMjA1
ZTA5ZWMyNDZlMDExZDBhNTAyZGNkNGMxZGNhNTAuLmViNzZhMTg2ZDM0OGQ0YjM2ODlmMjM0ZjNk
YmY2MjgyYWFhZGUwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ1LDYgKzIwNDUsNyBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNvbnRl
bnRzRGlzcGxheURlbGVnYXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRy
YW5zZm9ybS5jcHAKQEAgLTIwODQsNiArMjA4NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUltYWdlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDgyOTYyYmEwNGUy
ZmZkN2ZmYTBjNmU2MWQ5YzljMmMxN2E1ZjY0NjcuLmI1NWM1YzFjNDJlMzI5NTU3MGVkMjRjODQw
ZGMzZTRmMmZkMzAyZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTIzMzEsMTAgKzIzMzEsMTIgQEAKIAkJNzFFRkNFREMyMDJC
MzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1h
dGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGMDVGN0Uy
NTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGQ0IxNzAyN0JBQjNGRTAwRTA2
MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcxRkNCMTZEMjdCQUIzREYwMEUwNjMxQyAvKiBGcmFtZVJhdGVBbGln
bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIwMTc4M0IyN0Q1N0Y5RjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMDE3ODNBMjdENTczQjIw
MDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNW
R1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBG
MTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5
T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0
MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIElt
YWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNDYwREQ2MjdDODVEMDEw
MEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNCMjc1QzVGQTYwMEE5MTU2QSAvKiBD
U1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRDI3NUM2MTQ0MDBBOTE1
NkEgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MjE0QjlCNzI3NDQ1OEZBMDAzQkU2REYgLyogRmlsdGVyRWZmZWN0
VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzI0Njk2M0UyNzVDNjE2NzAwQTkxNTZBIC8qIEZpbHRlckltYWdlVmVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkI0RUY3QzI3NEVFMzdG
MDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM0Miw2ICsyMzQ0LDkgQEAKIAkJNzI0RUU1NTAx
REM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rp
dml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNl
cnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0
RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNTYwNzhF
Mjc5RDM0QjYwMDdEMkREMyAvKiBGRUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkY3RTc0RjI3OUNFREU4MDBEODJEMkQgLyogRkVJbWFnZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNTgx
ODU0MjdDREE2OUEwMEMzRDk3RSAvKiBTb3VyY2VCcnVzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNv
dXJjZUJydXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkIzNTEw
QzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NjI3Q0RBRkQ1
MDBDM0Q5N0UgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8q
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZDREUyMDI3NTk3MzUwMDBBNDQ1QjIgLyogRmlsdGVy
RWZmZWN0R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyOTY2MUEyMjc1OTYwQTUwMEU3REY5QiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1
NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyog
UGxhdGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBOYXRpdmVJbWFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjYxRDgyMDlG
NDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMzE4LDYgKzExMzIzLDggQEAKIAkJNzFGQ0IxNkQyN0JB
QjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRnJhbWVSYXRlQWxpZ25lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUZDQjE2RjI3QkFCM0UwMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZVJhdGVBbGlnbmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8q
IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZp
Z2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
MDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENHQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXh0Qm94SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzIxMUI1RDYyNzY1MzY4MjAwNzZGRUY4IC8qIEZpbHRlclJlc3VsdHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmlsdGVyUmVzdWx0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0
NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMTMyNyw2ICsxMTMzNCw4IEBACiAJCTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAv
KiBBbmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNDM1RUY0MjczRDA3NjcwMDA1RTdF
RSAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjQzNUVGNTI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVy
SW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3ND
b250ZXh0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENjI3Qzg1RDAxMDBENUY5
RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250
ZXh0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1
NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1p
bk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzODksNiArMTEzOTgsMTAgQEAKIAkJNzJBMTNB
RDUyNzRERTU0RTAwRTJBODhFIC8qIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyQTEzQUQ2Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFwaGljU29m
dHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkExM0FENzI3NERF
NTc4MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBFMjdDQjQyRkQw
MEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VCcnVz
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBGMjdDQjQyRkUwMEQy
N0FFMCAvKiBTb3VyY2VCcnVzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VCcnVzaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3NDI3NEUyMzMzMDAyOTNDMkYgLyogRkVC
bGVuZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUJsZW5kU29mdHdhcmVBcHBs
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjc1Mjc0RTIzMzQwMDI5
M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZF
QmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmlsdGVySW1hZ2VWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4ODEwLDYgKzI4ODIzLDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjAxNzgzQTI3
RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oICovLAogCQkJCTBGQ0YzMzIz
MEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMzI1OTY4RDBC
MDAzMEU2QUEgLyogQ29sb3JTcGFjZUNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMjI1OTY4RDBCMDAz
MEU2QUEgLyogQ29sb3JTcGFjZUNHLmggKi8sCkBAIC0yOTA0Myw2ICsyOTA1Nyw5IEBACiAJCQkJ
N0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0
b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCiAJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENFIC8q
IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywKKwkJCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5
RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwICovLAorCQkJCTcyNDYwREQ2MjdDODVEMDEw
MEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oICovLAorCQkJCTcyQjM1MTBEMjdDQTMy
OEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEY1ODBC
MDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBGNTgwQjBB
MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBCMEIwRjEy
QTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLywKQEAgLTI5MTQzLDYgKzI5
MTYwLDcgQEAKIAkJCQlCQ0E1NTkxMjI2M0RCRDc5MDA3RjE5QjMgLyogUGl4ZWxGb3JtYXQuaCAq
LywKIAkJCQlDREQwOEFCRjI3N0U1NEYwMDBFQTM3NTUgLyogUGxhdGZvcm1BdWRpb1RyYWNrQ29u
ZmlndXJhdGlvbi5oICovLAogCQkJCUJDM0U2MjQyMjY1OTc5MTcwMDU0OEFDRCAvKiBQbGF0Zm9y
bUNvbG9yU3BhY2UuaCAqLywKKwkJCQk3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyog
UGxhdGZvcm1JbWFnZS5oICovLAogCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJNTUwNjQwQUQyNDA3NTZEQTAwQUFFMDQ1IC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCkBAIC0yOTE2Niw2ICsyOTE4NCw4IEBACiAJ
CQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLAogCQkJCTBG
M0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8sCiAJCQkJMUM0REIwMjQy
NzMzOUU1RTAwN0IwQUQxIC8qIFNob3VsZExvY2FsaXplQXhpc05hbWVzLmggKi8sCisJCQkJNzJC
MzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmNwcCAqLywKKwkJCQk3MkIzNTEw
RjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLywKIAkJCQkxREQxMjdBQzI1NkUz
QTg3MDBCMjI3RDcgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgKi8sCiAJCQkJQ0Q2NDFFQjIx
ODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVB
QzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovLApAQCAt
MjkxNzcsNiArMjkxOTcsNyBAQAogCQkJCTA4NzU1OEM0MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJy
b2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCAqLywKIAkJCQk5NUU5RjQ0NDI3QzlBMzlCMDA5
NDUzMzcgLyogU3lzdGVtSW1hZ2UuaCAqLywKIAkJCQkzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkg
LyogVGFiU2l6ZS5oICovLAorCQkJCTcyMDZENDM1MjdEQURFQ0EwMDQwRkVCMiAvKiBUZXh0Qm94
SXRlcmF0b3IuaCAqLywKIAkJCQkzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5j
cHAgKi8sCiAJCQkJQTgyNEI0NjQwRTJFRjJFQTAwODFBN0I3IC8qIFRleHRSdW4uaCAqLywKIAkJ
CQlDRDFFNzM0NjE2N0JDNzhFMDA5QTg4NUQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3Bw
ICovLApAQCAtMzM4NzMsNiArMzM4OTQsNyBAQAogCQkJCUNERTNBRTEyMjRCNDkxNkEwMDEyOEU3
RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVGQTkwNENBMTc4RTYxRjUw
MDRDOEEyRCAvKiBDZXJ0aWZpY2F0ZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTkxQjhGMEI1
MjE5NTNENjUwMDBDMkIwMCAvKiBDZXJ0aWZpY2F0ZVN1bW1hcnkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyMDE3ODNCMjdENTdGOUYwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTM2RkQxNTE2Qzc4MjY1MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lv
bkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2OUREMTUwNUYwNzYwMDFCNzRBQyAvKiBD
aGFuZ2VWZXJzaW9uV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTc4NUQ5MTUyNEI0RDFD
QTAwMTREQjIxIC8qIENoYW5uZWxDb3VudE1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ3OTgs
NiArMzQ4MjAsOCBAQAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2
MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2
NzA4MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzI0NjBERDcyN0M4NkRBRDAwRDVGOUY0IC8qIEdyYXBoaWNz
Q29udGV4dFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5
N0UgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTgwQjBFMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzA1LDYgKzM2NzI5LDcgQEAKIAkJCQlCQ0FBNDg3
MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jv
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRm
b3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdF
IC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjZENTZF
MjI1M0FFMjhEMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkQ3NzA1QzcyNTUyNzZDRDAwMUQwQzk0IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU1MDY0MEFGMjQwNzU4MkQwMEFBRTA0NSAvKiBQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzM4Niw2ICszNzQxMSw3IEBACiAJCQkJ
NTEwRDRBMzgxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVh
bUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjNFMEZDN0RGRjAwMDk1NTMw
MCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTQyN0NEQTY5QTAw
QzNEOTdFIC8qIFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2MjE3QTlE
MDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2
NTE3QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0RGMTM1MDkyNEM5RkNBMzAwNDMyRTFFIC8qIFNvdXJjZUJ1ZmZlclBhcnNlci5oIGluIEhl
YWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRleCA4NTZhM2RlNTA0ZGVjMGJiZmE5MGFj
MTdkZTM3ZjUxNWUxNGQ5MjA0Li45ZDkzNWE2ZmYzMjMwZjNmNDZhMmVmNWQ3ZWExMDAxMGFlOWUx
MGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVj
b3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3Bs
YXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lkIEJvcmRl
clBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGgoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0Nv
bnRleHQsIGNvbnN0CiAgICAgICAgICAgICBEYXNoQXJyYXkgbGluZURhc2g7CiAgICAgICAgICAg
ICBsaW5lRGFzaC5hcHBlbmQoZGFzaExlbmd0aCk7CiAgICAgICAgICAgICBsaW5lRGFzaC5hcHBl
bmQoZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExp
bmVEYXNoKGxpbmVEYXNoLCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9y
ZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6CkBAIC0xMjk0LDcgKzEy
OTQsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWludGlu
Z0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNoYWRvd1JlY3RP
cmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNldDsKICAgICAg
ICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4gLSBhZGp1c3Rl
ZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIHBhaW50aW5nQ29udGV4dC5j
b250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVl
KCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICBw
YWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgYWRqdXN0ZWRTaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0
Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0IH0pOwogCiAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAgICAgICAg
ICAgIC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0
IG91dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMTQwNSw3ICsxNDA1LDcgQEAg
dm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0
JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQu
dHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zm
c2V0OwogCi0gICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Vi
a2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNN
b2RlOjpEZWZhdWx0KTsKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0RHJvcFNo
YWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigp
LCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6
IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5j
b250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCByb3VuZGVk
SG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9t
UGFpbnRJbWFnZS5jcHAKaW5kZXggZjRiOThiYTYyZTExOWEwNzcxMzEyZDNiODhjNDkxOTM2ODM2
ZWUzNy4uZWU1MDRmMDhjNDlmYzhkNWI1YWVkNzAyYmUyMTdmMWIwNmZkNGUwZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgSW1h
Z2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdG9tUGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY28KIEltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRl
c3RDb250ZXh0KTsKLSAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29u
dGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGRlc3RDb250ZXh0LmNsaXAoZGVzdFJlY3QpOwogICAg
IGRlc3RDb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZGVz
dFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQg
Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0CiAgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7CiAKICAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBzY2FsZSB0
byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGRl
c3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0
Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhTY2FsZSA9IGZhYnMoZGVz
dENvbnRleHRDVE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RDb250
ZXh0Q1RNLnlTY2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJuQ1RN
ID0gcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggMGU3ODA2M2Uz
YTQxY2JjNjkwZjBkMGNjYjc4ODExN2RlNjkzOGEwMi4uZGJjOTU3YzUzZDA0YTM5NmVhYzY0ZDY3
ZmU2YTJiMTdlNDQ4YzY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTY5Nyw3ICs2OTcs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5TGluZURhc2goKSBj
b25zdAogICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChzdGF0ZSgpLmxpbmVEYXNoLnNp
emUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZSgpLmxpbmVEYXNoLnNpemUo
KTsgKytpKQogICAgICAgICBjb252ZXJ0ZWRMaW5lRGFzaFtpXSA9IHN0YXRpY19jYXN0PERhc2hB
cnJheUVsZW1lbnQ+KHN0YXRlKCkubGluZURhc2hbaV0pOwotICAgIGMtPnNldExpbmVEYXNoKGNv
bnZlcnRlZExpbmVEYXNoLCBzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICBjLT5zZXRMaW5l
RGFzaCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3Rh
dGUoKS5saW5lRGFzaE9mZnNldCkgfSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0R2xvYmFsQWxwaGEoZG91YmxlIGFscGhhKQpAQCAtNzI4LDcgKzcyOCw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xvYmFsQ29tcG9zaXRlT3Bl
cmF0aW9uKGNvbnN0IFN0cmluZyYgb3BlCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2lu
Z0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKLSAgICBjLT5zZXRDb21w
b3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7CisgICAgYy0+c2V0Q29tcG9zaXRlTW9kZSh7
IG9wLCBibGVuZE1vZGUgfSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kpCkBAIC0xMTg2LDcgKzExODYsNyBAQCBib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmlzUG9pbnRJblN0cm9rZUludGVybmFsKGNv
bnN0IFBhdGgmIHBhdGgsIGRvdQogICAgICAgICBEYXNoQXJyYXkgY29udmVydGVkTGluZURhc2go
bGluZURhc2guc2l6ZSgpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lRGFz
aC5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGNvbnZlcnRlZExpbmVEYXNoW2ldID0gc3RhdGlj
X2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4obGluZURhc2hbaV0pOwotICAgICAgICBjb250ZXh0LnNl
dExpbmVEYXNoKGNvbnZlcnRlZExpbmVEYXNoLCBzdGF0ZS5saW5lRGFzaE9mZnNldCk7CisgICAg
ICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGNvbnZlcnRlZExpbmVEYXNoKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHN0YXRlLmxpbmVEYXNoT2Zmc2V0KSB9KTsKICAgICB9KTsKIH0KIApA
QCAtMTIwNSw3ICsxMjA1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpj
bGVhclJlY3QoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGQKICAgICBpZiAoc2hv
dWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNh
dmVkID0gdHJ1ZTsKLSAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBD
b2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAg
ICAgY29udGV4dC0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0KICAgICBpZiAo
c3RhdGUoKS5nbG9iYWxBbHBoYSAhPSAxKSB7CiAgICAgICAgIGlmICghc2F2ZWQpIHsKQEAgLTEz
NjMsOSArMTM2Myw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlT
aGFkb3coKQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGZsb2F0IHdp
ZHRoID0gc3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0
ID0gc3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgICAgIGMtPnNldFNoYWRvdyhG
bG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hh
ZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgIGMtPnNldERyb3BT
aGFkb3coeyBGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0
YXRlKCkuc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSB9KTsKICAgICB9IGVs
c2UKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNo
YWRvdyh7IEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFk
aXVzTW9kZTo6TGVnYWN5IH0pOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QKQEAgLTI0MzIsMTkgKzI0MzIsMTYgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBkb3UKIAogICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldCgwLCAy
ICogbWFza1JlY3QuaGVpZ2h0KCkpOwogCi0gICAgICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zm
c2V0OwotICAgICAgICAgICAgZmxvYXQgc2hhZG93UmFkaXVzOwotICAgICAgICAgICAgQ29sb3Ig
c2hhZG93Q29sb3I7Ci0gICAgICAgICAgICBjLT5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLQogICAgICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1Jl
Y3QobWFza1JlY3QpOwotICAgICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHNoYWRvd1JhZGl1
cyAqIDEuNCk7Ci0gICAgICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc2hhZG93T2Zmc2V0ICogLTEp
OworICAgICAgICAgICAgYXV0byBkcm9wU2hhZG93ID0gYy0+ZHJvcFNoYWRvdygpOworCisgICAg
ICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoZHJvcFNoYWRvdy5ibHVyUmFkaXVzICogMS40KTsK
KyAgICAgICAgICAgIHNoYWRvd1JlY3QubW92ZShkcm9wU2hhZG93Lm9mZnNldCAqIC0xKTsKICAg
ICAgICAgICAgIGMtPmNsaXAoc2hhZG93UmVjdCk7CiAKLSAgICAgICAgICAgIHNoYWRvd09mZnNl
dCArPSBvZmZzZXQ7CisgICAgICAgICAgICBkcm9wU2hhZG93Lm9mZnNldCArPSBvZmZzZXQ7CiAK
LSAgICAgICAgICAgIGMtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgICAgICBjLT5zZXRE
cm9wU2hhZG93KGRyb3BTaGFkb3cpOwogCiAgICAgICAgICAgICBpZiAoZmlsbCkKICAgICAgICAg
ICAgICAgICBjLT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCA0ZjYzYWRjZTkzOTE2ZGIyMzIw
ZTk2NzhhYWJmZTBmM2NkOTk3NjJiLi45YTgwM2E0MDhkODhjMmZmNDhkZDNiZWEwMjk1MWI4NzU4
MDk4ZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0U3RpcHBsaW5n
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4dCk7CiAgICAgY29udGV4dC5zZXRT
dHJva2VUaGlja25lc3MoMSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHls
ZTo6RGFzaGVkU3Ryb2tlKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgMSwgZGVuc2l0eSB9
LCAxKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyAxLCBkZW5zaXR5IH0sIDEgfSk7CiAK
ICAgICBkcmF3TGF5b3V0UGF0dGVybihjb250ZXh0LCBxdWFkLCBkZW5zaXR5LCBGbGlwOjpObyk7
CiB9CkBAIC0xMjU0LDcgKzEyNTQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0SGF0Y2hpbmco
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0
cm9rZVRoaWNrbmVzcygwLjUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5
bGU6OkRhc2hlZFN0cm9rZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IDIsIDIgfSwgMik7
CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IHsgMiwgMiB9LCAyIH0pOwogCiAgICAgY29uc3Rl
eHByIGF1dG8gZGVmYXVsdExheW91dEhhdGNoU3BhY2luZyA9IDEyOwogICAgIGRyYXdMYXlvdXRQ
YXR0ZXJuKGNvbnRleHQsIHF1YWQsIGRlZmF1bHRMYXlvdXRIYXRjaFNwYWNpbmcsIGZsaXApOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGI1ODhmNmZhNGExMWQ3NzBjM2M4NDk5OTY3
MmQ3ZDdlZmY0MzJjNGYuLjhhMTdhZTM3MGFlMzZiMDBlYmI3YTliMmUwNzU1MTgwNmJlZDE2Njkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQzMDMsNyArNDMwMyw3IEBAIHZvaWQg
RnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIGxheW91
dENvbnRleHQoKS5sYXlvdXQoKTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChw
YWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4
dChmcmFtZVJlY3QoKSwgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxhdGZv
cm1XaWRnZXQoKSkgewogICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVDb250
ZW50cygpLgogICAgICAgICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50UmVj
dChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CkBAIC00ODU0LDcgKzQ4NTQsNyBAQCB2
b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0JvdHRv
bSwgZmxvYXQgb2xkVG9wLCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQgd2l0
aCBwYWludGluZyBkaXNhYmxlZC4KLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoTnVs
bEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBO
dWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoZnJhbWVSZWN0KCksIE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0
VHJ1bmNhdGVkQXQoc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob2xkQm90dG9tKSkpOwogICAgIElu
dFJlY3QgZGlydHlSZWN0KDAsIHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5k
ZXJWaWV3LT5sYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhYKCksIHN0YXRpY19jYXN0PGludD4oY2Vp
bGYob2xkQm90dG9tIC0gb2xkVG9wKSkpOwogICAgIHJlbmRlclZpZXctPnNldFByaW50UmVjdChk
aXJ0eVJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA5ZmQyNWQ4MGFkMTJk
YzkxZGQxMWY5MTU5OGZjNmM4ZWZhNGNiMmEyLi4yODk1NzRiOWMxZTQwY2Q3MTJiNGUyYjZlOWVi
MzRiMDE3MjlkZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMjksNyArMjks
OCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQs
IEdyYXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5Q29udGV4dCkKLSAgICA6IG1fcHJpbWFyeUNvbnRl
eHQocHJpbWFyeUNvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHQocHJpbWFyeUNvbnRleHQu
Y2xpcEJvdW5kcygpLCB7IH0sIHByaW1hcnlDb250ZXh0LmdldENUTSgpKQorICAgICwgbV9wcmlt
YXJ5Q29udGV4dChwcmltYXJ5Q29udGV4dCkKICAgICAsIG1fc2Vjb25kYXJ5Q29udGV4dChzZWNv
bmRhcnlDb250ZXh0KQogewogfQpAQCAtNDgsNiArNDksMzAgQEAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiB9CiAKKyNp
ZiBVU0UoQ0cpCitib29sIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LmlzQ0FMYXllckNvbnRl
eHQoKTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJD
b250ZXh0KGJvb2wgaXNDQUxheWVyQ29udGV4dCkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LnNl
dElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Cit9CisKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOworfQorI2VuZGlm
CisKK1JlbmRlcmluZ01vZGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9k
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgp
OworfQorCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQogewogICAgIC8v
IEZJWE1FOiBDb25zaWRlciBub3QgdXNpbmcgdGhlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQn
cyBzdGF0ZSBzdGFjayBhdCBhbGwsCkBAIC02NCwyMiArODksMTAgQEAgdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICBtX3NlY29uZGFyeUNvbnRleHQucmVzdG9y
ZSgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBmcm9tLCBj
b25zdCBGbG9hdFBvaW50JiB0bykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdMaW5lKGZy
b20sIHRvKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZUNo
YW5nZXMoKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKIH0KIAogI2lmIFVTRShDRykKQEAgLTk2LDIyICsxMDksMTAgQEAgdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKIH0KICNlbmRpZgog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKLSAgICBtX3NlY29u
ZGFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LmZpbGxQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUGF0aChwYXRo
KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tl
UGF0aChwYXRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAg
ICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwogfQogCiB2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkKQEAgLTEyNiwyMjIgKzEyNywxMjYgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0
LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKLX0KLQotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZmlsbFJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZp
bGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
cmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
bGluZVdpZHRoKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBsaW5l
V2lkdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0
aCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbEVsbGlw
c2UoZWxsaXBzZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2Up
OwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlRWxs
aXBzZShlbGxpcHNlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxp
cHNlKTsKLX0KLQotI2lmIFVTRShDRykKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzQ0FMYXllckNvbnRleHQpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOwot
fQotCi1ib29sIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQoKSBj
b25zdAotewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LmlzQ0FMYXllckNvbnRleHQoKTsK
LX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOwotICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4
dCk7Ci19Ci0jZW5kaWYKLQotUmVuZGVyaW5nTW9kZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5y
ZW5kZXJpbmdNb2RlKCk7Ci19Ci0KIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xp
cChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJl
Y3QpOwogICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcChyZWN0KTsKICAgICBtX3NlY29uZGFyeUNv
bnRleHQuY2xpcChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNs
aXBPdXQocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXQocmVjdCk7Ci19Ci0K
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuY2xpcE91dChwYXRoKTsKLX0KLQogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKKyAg
ICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKICAgICBtX3ByaW1h
cnlDb250ZXh0LmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKICAgICBtX3NlY29uZGFyeUNvbnRl
eHQuY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogfQogCi1JbnRSZWN0IEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaW1hcnlD
b250ZXh0LmNsaXBCb3VuZHMoKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5zZXRMaW5lQ2FwKGxpbmVDYXApOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5l
Q2FwKGxpbmVDYXApOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxv
YXQgZGFzaE9mZnNldCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZURhc2goZGFz
aEFycmF5LCBkYXNoT2Zmc2V0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZURhc2go
ZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXQocGF0
aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXQocGF0aCk7CiB9CiAKLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5zZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LnNldExpbmVKb2luKGxpbmVKb2luKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNs
aXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25S
ZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0
KGZsb2F0IG1pdGVyTGltaXQpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRN
aXRlckxpbWl0KG1pdGVyTGltaXQpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRNaXRlckxp
bWl0KG1pdGVyTGltaXQpOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwor
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJ
bWFnZSwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd05hdGl2ZUltYWdl
KG5hdGl2ZUltYWdlLCBzZWxmU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobmF0aXZlSW1hZ2UsIHNlbGZTaXpl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxs
UmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCk7CiB9CiAK
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd1BhdHRlcm4obmF0aXZlSW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3UGF0dGVybihuYXRpdmVJbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxs
UmVjdChyZWN0LCBncmFkaWVudCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJl
Y3QsIGdyYWRpZW50KTsKIH0KIAotSW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ltYWdl
KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKIH0KIAot
SW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdl
KEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQ
b2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5k
cmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNp
bmcsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGlsZWRJbWFnZShpbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAg
IHJldHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7
CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGls
ZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtX3ByaW1hcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291
cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucyk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0
aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotI2lmIEVOQUJMRShWSURF
TykKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlv
bik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRl
c3RpbmF0aW9uKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5maWxsUGF0aChwYXRoKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pCiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzY2FsZSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBtX3By
aW1hcnlDb250ZXh0LnNjYWxlKHNjYWxlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2NhbGUo
c2NhbGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlj
a25lc3MpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGJvcmRlclRo
aWNrbmVzcyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZs
b2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnJvdGF0
ZShhbmdsZUluUmFkaWFucyk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVs
bGlwc2UpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwog
fQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC50cmFuc2xhdGUoeCwgeSk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVBhdGgo
cGF0aCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKKyAgICBtX3ByaW1hcnlD
b250ZXh0LmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBmcm9tLCBjb25zdCBGbG9hdFBvaW50JiB0bykKIHsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LnNldENUTSh0cmFuc2Zvcm0pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRDVE0odHJh
bnNmb3JtKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOwogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBp
bmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gbV9wcmlt
YXJ5Q29udGV4dC5nZXRDVE0oaW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RWxsaXBz
ZShyZWN0KTsKIH0KIAotRmxvYXRSZWN0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRp
bmdNb2RlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJvdW5kVG9EZXZpY2VQ
aXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXRo
KHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKIH0KIAogdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQpAQCAtMzcwLDI5ICsyNzUsNTQgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG8KIH0K
ICNlbmRpZgogCi1GbG9hdFNpemUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQo
Y29uc3QgRm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRv
KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGF1
dG8gc2l6ZSA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwg
ZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGV4dChjYXNjYWRlLCBydW4s
IHBvaW50LCBmcm9tLCB0byk7Ci0gICAgcmV0dXJuIHNpemU7CisgICAgbV9wcmltYXJ5Q29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgZmlsdGVyUmVzdWx0cykKIHsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQs
IGZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgZmlsdGVyUmVz
dWx0cyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNv
dXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgZmlsdGVyUmVzdWx0cyk7CiB9CiAK
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3Qg
Rm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHRvKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LmRyYXdFbXBoYXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRv
KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoY2FzY2FkZSwgcnVu
LCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd05hdGl2
ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGNhc2NhZGUsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LmRyYXdCaWRpVGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBjdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3QmlkaVRleHQoY2FzY2FkZSwg
cnVuLCBwb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlv
blJlY3QpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0
LmRyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1Bh
dHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBtX3By
aW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBtX3By
aW1hcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRp
b24pOworfQorI2VuZGlmIC8vIEVOQUJMRShWSURFTykKKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUg
Zm9udFNtb290aGluZ01vZGUpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3R2x5cGhzKGZv
bnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2Rl
KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CiAKIHZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCkBAIC00
MDcsMTYgKzMzNyw5IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsCiAgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgbWFya2VyU3R5bGUpOwogfQog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJM
JiB1cmwsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNl
dFVSTEZvclJlY3QodXJsLCByZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0VVJMRm9y
UmVjdCh1cmwsIHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNl
dERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK2Jvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExp
bmtzKCkgY29uc3QKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVj
dChuYW1lLCByZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JS
ZWN0KG5hbWUsIHJlY3QpOworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnN1cHBvcnRzSW50
ZXJuYWxMaW5rcygpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFkZERl
c3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQpAQCAtNDI1LDE4ICszNDgsMTYgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAogICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5hZGREZXN0aW5hdGlvbkF0UG9pbnQobmFtZSwgcG9pbnQpOwogfQog
Ci1ib29sIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygp
IGNvbnN0Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9y
UmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKKyAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOwogfQogCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MgZmxhZ3MpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJl
Y3QoY29uc3QgVVJMJiB1cmwsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBUaGlz
IGNhbGxzIHVwZGF0ZVN0YXRlKCkgaW5zdGVhZCBvZiBkaWRVcGRhdGVTdGF0ZSgpIHNvIHRoYXQg
Y2hhbmdlcwotICAgIC8vIGFyZSBhbHNvIGFwcGxpZWQgdG8gZWFjaCBjb250ZXh0J3MgR3JhcGhp
Y3NDb250ZXh0U3RhdGUsIHNvIHRoYXQgY29kZQotICAgIC8vIGludGVybmFsIHRvIHRoZSBjaGls
ZCBjb250ZXh0cyB0aGF0IHJlYWRzIGZyb20gdGhlIHN0YXRlIGdldHMgdGhlIHJpZ2h0IHZhbHVl
cy4KLSAgICBtX3ByaW1hcnlDb250ZXh0LnVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LnVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0KTsKIH0KIAogI2lmIE9TKFdJTkRPV1MpICYmICFV
U0UoQ0FJUk8pCkBAIC00NDYsNSArMzY3LDEwIEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZFByaXZhdGVDb250CiB9
CiAjZW5kaWYKIAorRmxvYXRSZWN0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdN
b2RlKQoreworICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJvdW5kVG9EZXZpY2VQaXhlbHMo
cmVjdCwgcm91bmRpbmdNb2RlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4YjM0YzkxNDM0MmI3Mzc3NzI3YzExYTczYjZkODIx
OGUxNTU2Zi4uN2EzN2ExMTNkZDgxNWViM2I5NTYwNzUyZDlkYzcwZWI1YTg5N2M1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQuaApAQCAtNDMsODMgKzQzLDU0IEBAIHB1YmxpYzoKICAgICBib29s
IGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgc2F2ZSgpIGZpbmFs
OwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworI2lmIFVTRShDRykKKyAgICBib29sIGlzQ0FM
YXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQo
Ym9vbCkgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCkgZmluYWw7CisjZW5kaWYKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUo
KSBjb25zdCBmaW5hbDsKIAorICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9y
ZSgpIGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICNpZiBVU0Uo
Q0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5
RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBhcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lM
YXllcigpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZh
Y3RvcikgZmluYWw7Ci0KLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0OwotICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLQot
ICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLSAg
ICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLQot
I2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7Ci0g
ICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKLQogICAgIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7Ci0KICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwor
ICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CiAKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKLQotICAgIEludFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZp
bmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKLQotICAgIHZvaWQgZHJhd05hdGl2ZUlt
YWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3Rl
bUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0lt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlv
bjo6RnJvbUltYWdlIH0pIGZpbmFsOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFn
ZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCBwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5h
bDsKLSNlbmRpZgorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogCi0g
ICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBm
aW5hbDsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKKyAgICB2
b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgdm9p
ZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCisgICAgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICB2
b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRl
RGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7Ci0K
LSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3Vu
ZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisgICAgdm9pZCBkcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50Mikg
ZmluYWw7CiAKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwor
ICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIAogICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNpZiBQTEFURk9STShNQUMpCkBAIC0xMjcs
MjMgKzk4LDI2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlm
CiAKLSAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290
aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxv
YXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IHN0ZDo6bnVsbG9wdCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdO
YXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lz
dGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisgICAg
dm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CisjZW5k
aWYKIAorICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwogICAgIHZv
aWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
U3Ryb2tlU3R5bGUpIGZpbmFsOwotCiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKIAotICAg
IHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
LQotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0KICAgICBib29sIHN1
cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwor
ICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBmaW5hbDsKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKIAogI2lmIE9TKFdJ
TkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZElt
YWdlLmNwcAppbmRleCBiYjRkYWMwMTljNWI5ZTEzYjEzN2FlNjk0ZTRiZjZiMjc2YmZjYzBkLi4x
YzFiOTZlYzViOTgzY2M1ZjE4ZDZmZjFmZDI1ODU3ZmE5NDNjNDFiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVk
SW1hZ2UuY3BwCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6
OmRyYXdDcm9zc2ZhZGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogSW1hZ2VEcmF3UmVzdWx0
IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkp
OworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAoZHN0UmVjdCk7
CiAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZHN0
UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDI1YTNkM2ZlODc3
MzMxZGRhMzk1NzgwMTFiNmQ4OTBmMjEyYzcyZTYuLjNiY2I1MDVhZjNjMjgyZjQyMjMyNWNkN2Uz
MDA1MzRmZDlmOTljYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjQgKzI2LDExIEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRTdGF0ZS5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KIAotI2lmIFVTRShDT1JFX1RFWFQpCi0jaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0j
aWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+
Ci0jZWxzZQotI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29yZVRleHRTUEkuaD4KLSNlbmRpZgotI2lu
Y2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFBvaW50OwpAQCAtNjIsNzYgKzQ5LDMyIEBAIHB1Ymxp
YzoKICNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQogICAgIHZvaWQgZHJhd05h
dGl2ZVRleHQoQ1RGb250UmVmLCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmVSZWYsIENHUmVjdCBs
aW5lUmVjdCk7CiAKLSAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiwgQ0dHU3RhdGVSZWYsIENHUmVjdCk7Ci0gICAgdm9pZCByZWNvcmRFbmRMYXllcihDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZik7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENH
UmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSos
IGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50
KTsKLSAgICB2b2lkIHJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0
ZVJlZiwgQ0dSZWN0LCBDR0ltYWdlUmVmKTsKKyAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dH
U3RhdGVSZWYpOworICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dHU3RhdGVSZWYpOworICAgIHZv
aWQgcmVjb3JkRHJhd0dseXBocyhDR0dTdGF0ZVJlZiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBD
R1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpOworICAgIHZvaWQgcmVjb3JkRHJhd0lt
YWdlKENHR1N0YXRlUmVmLCBDR1JlY3QsIENHSW1hZ2VSZWYpOwogI2VuZGlmCiAKLSAgICBEZWNv
bnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKCkgY29uc3QgeyByZXR1cm4g
bV9kZWNvbnN0cnVjdERyYXdHbHlwaHM7IH0KLQogcHJpdmF0ZToKLSNpZiBVU0UoQ09SRV9URVhU
KSAmJiAhUExBVEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0
ZUludGVybmFsQ29udGV4dCgpOwotI2VuZGlmCi0KLSAgICB2b2lkIGRyYXdCeVNwbGl0dGluZ0lu
dG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGRy
YXdPVFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
YW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGRyYXdOb25PVFNWR1J1
bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLQotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbFN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9pZCBwb3B1bGF0ZUludGVybmFs
Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIHZvaWQgcHJlcGFyZUlu
dGVybmFsQ29udGV4dChjb25zdCBGb250JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQg
Y29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKKyAgICB2b2lkIHNldEludGVybmFsRm9udChjb25z
dCBGb250JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHBy
ZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKKyAgICB2b2lkIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9yaWdpbmFsU3RhdGUpOwogCi0gICAgdm9p
ZCB1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImLCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0
ZXJuKiA9IG51bGxwdHIpOwotICAgIHZvaWQgdXBkYXRlU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3Im
LCBHcmFkaWVudCogPSBudWxscHRyLCBQYXR0ZXJuKiA9IG51bGxwdHIpOwotICAgIHZvaWQgdXBk
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIGVudW0gY2xhc3MgU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMgewotICAgICAgICBVbnNwZWNpZmllZCwKLSAgICAgICAgWWVzLAotICAg
ICAgICBObwotICAgIH07Ci0gICAgdm9pZCB1cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBz
aGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwg
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwotCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRG
T1JNKFdJTikKLSAgICB2b2lkIHVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmKTsKLSNlbmRpZgorICAg
IHZvaWQgZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3
T1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdCeVNwbGl0dGluZ0lu
dG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwogCi0gICAgR3JhcGhp
Y3NDb250ZXh0JiBtX293bmVyOworICAgIEdyYXBoaWNzQ29udGV4dCYgbV9kZXN0aW5hdGlvbkNv
bnRleHQ7CiAgICAgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhz
OwogICAgIERlcml2ZUZvbnRGcm9tQ29udGV4dCBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dDsKIAot
I2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAgVW5pcXVlUmVmPEdyYXBo
aWNzQ29udGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7Ci0jZW5kaWYKLQogICAgIGNvbnN0IEZvbnQq
IG1fb3JpZ2luYWxGb250IHsgbnVsbHB0ciB9OwogICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21v
b3RoaW5nTW9kZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nIH07CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OwogCi0gICAgc3RydWN0IFN0YXRlIHsK
LSAgICAgICAgc3RydWN0IFN0eWxlIHsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAg
ICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKLSAgICAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgICAgICAgICAgUmVmUHRyPFBhdHRlcm4+
IHBhdHRlcm47Ci0gICAgICAgIH07Ci0gICAgICAgIFN0eWxlIGZpbGxTdHlsZTsKLSAgICAgICAg
U3R5bGUgc3Ryb2tlU3R5bGU7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKLQotICAg
ICAgICBzdHJ1Y3QgU2hhZG93U3RhdGUgewotICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldDsK
LSAgICAgICAgICAgIGZsb2F0IGJsdXIgeyAwIH07Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsK
LSAgICAgICAgICAgIGJvb2wgaWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07Ci0gICAgICAgIH07
Ci0gICAgICAgIFNoYWRvd1N0YXRlIHNoYWRvdzsKLSAgICB9OwotICAgIFN0YXRlIG1fb3JpZ2lu
YWxTdGF0ZTsKLSAgICBTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKyNpZiBVU0UoQ09SRV9URVhUKSAm
JiAhUExBVEZPUk0oV0lOKQorICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJu
YWxDb250ZXh0OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODUx
ODBhZDEwOWZkODE4ZTliYjE1ODhjZTk2MmFiNDYzMDgxNmEwOS4uMzYxMWIxMmNhOWFiMjllYjky
MWYyMzI1ZTFmOTZkMjk1MjUzYzdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgRm9udENh
c2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuCiAKIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNw
bGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4dFJ1bihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24pIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFjb250ZXh0LnBhaW50aW5nRGlzYWJs
ZWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCAhY29udGV4dC5wYWludGluZ0Rpc2Fi
bGVkKCkpOwogICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uID0gdG8udmFsdWVfb3IocnVuLmxlbmd0
aCgpKTsKICAgICAKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNwbGF5
TGlzdEZvclRleAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IGRpc3BsYXlMaXN0ID0gbWFr
ZVVuaXF1ZTxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4oKTsKLSAgICBEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBjb250ZXh0
LnN0YXRlKCksIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgRHJhd0dseXBoc1JlY29y
ZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKTsKKyAgICBEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoKSwgQWZmaW5l
VHJhbnNmb3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpO
byk7CiAgICAgCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50ID0gdG9GbG9hdFBvaW50KFdlYkNv
cmU6OnNpemUoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKSkpOwogICAgIGRyYXdHbHlwaEJ1
ZmZlcihyZWNvcmRpbmdDb250ZXh0LCBnbHlwaEJ1ZmZlciwgc3RhcnRQb2ludCwgY3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnRJbWFnZS5jcHAKaW5kZXggNjQ1ODRlNWNmZTAxMTg4MmVmYWIyZTIzYzNhNTk0
ZTE3ODJmMjg5MC4uMmY4MjdmNjI1ZjY0YjU5Y2ExYTY2NDk2MDczMGYwM2MyM2JjMzdhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5j
cHAKQEAgLTQzLDcgKzQzLDcgQEAgR3JhZGllbnRJbWFnZTo6fkdyYWRpZW50SW1hZ2UoKSA9IGRl
ZmF1bHQ7CiBJbWFnZURyYXdSZXN1bHQgR3JhZGllbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihkZXN0Q29udGV4dCk7Ci0gICAg
ZGVzdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgZGVzdENvbnRleHQuc2V0Q29tcG9zaXRl
TW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9
KTsKICAgICBkZXN0Q29udGV4dC5jbGlwKGRlc3RSZWN0KTsKICAgICBkZXN0Q29udGV4dC50cmFu
c2xhdGUoZGVzdFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBz
cmNSZWN0LnNpemUoKSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBHcmFkaWVudEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGQK
ICAgICBtX2dyYWRpZW50LT5hZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3aW5nKGFkanVzdGVk
U2l6ZSwgYWRqdXN0ZWRTcmNSZWN0LCBzcGFjaW5nKTsKIAogICAgIC8vIEZhY3RvciBpbiB0aGUg
ZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29s
dXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5n
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oKTsK
ICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7CiAgICAg
ZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAK
aW5kZXggMGJiMTM1OTdjZWE3MzY5ZGJiYzZlMTcyN2YyNmM5MmI4ZmI3NTE3Ni4uY2Y4YzcxOGI4
MTJjNzk3OTFmMmJlM2ViN2Q4YmU4ZDU1YTJjMzNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcs
NiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQmlkaVJlc29s
dmVyLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKQEAg
LTM2LDQ3MyArMzUsMzEwIEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiTnVs
bEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAi
U3lzdGVtSW1hZ2UuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiVGV4dEJveEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFRleHRCb3hJdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgVGV4dEJv
eEl0ZXJhdG9yKCkKLSAgICAgICAgOiBtX3RleHRSdW4oMCkKLSAgICAgICAgLCBtX29mZnNldCgw
KQotICAgIHsKLSAgICB9Ci0KLSAgICBUZXh0Qm94SXRlcmF0b3IoY29uc3QgVGV4dFJ1biogdGV4
dFJ1biwgdW5zaWduZWQgb2Zmc2V0KQotICAgICAgICA6IG1fdGV4dFJ1bih0ZXh0UnVuKQotICAg
ICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLSAgICB2b2lkIGluY3JlbWVudCgpIHsg
bV9vZmZzZXQrKzsgfQotICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV90ZXh0UnVu
IHx8IG1fb2Zmc2V0ID49IG1fdGV4dFJ1bi0+bGVuZ3RoKCk7IH0KLSAgICBVQ2hhciBjdXJyZW50
KCkgY29uc3QgeyByZXR1cm4gKCptX3RleHRSdW4pW21fb2Zmc2V0XTsgfQotICAgIFVDaGFyRGly
ZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGF0RW5kKCkgPyBVX09USEVSX05FVVRS
QUwgOiB1X2NoYXJEaXJlY3Rpb24oY3VycmVudCgpKTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQgJiYgbV90ZXh0UnVuID09IG90aGVyLm1fdGV4
dFJ1bjsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVGV4dEJveEl0ZXJhdG9y
JiBvdGhlcikgY29uc3QgeyByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgY29uc3QgVGV4dFJ1biogbV90ZXh0UnVuOwotICAgIHVuc2lnbmVkIG1fb2Zmc2V0Owot
fTsKLQotI2RlZmluZSBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShmbGFnLCBwcm9wZXJ0eSkg
XAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpm
bGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0eSAhPSBzdGF0ZS5wcm9wZXJ0eSkpIFwKLSAgICAgICAg
Y2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFnKTsKLQotR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkKLSAgICA6IHNob3VsZEFudGlhbGlh
cyh0cnVlKQotICAgICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKLSAgICAsIHNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyh0cnVlKQotICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFs
c2UpCi0gICAgLCBkcmF3THVtaW5hbmNlTWFzayhmYWxzZSkKK0dyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2VGbGFncyYgY2hhbmdlRmxhZ3MsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fc3RhdGUoaW5pdGlhbENsaXAsIGNoYW5nZUZsYWdz
LCBpbml0aWFsQ1RNKQogewogfQogCi1HcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBoaWNzQ29u
dGV4dFN0YXRlKCkgPSBkZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OwotR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6b3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OwotR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVyYXRvcj0oR3JhcGhp
Y3NDb250ZXh0U3RhdGUmJikgPSBkZWZhdWx0OwotCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjptZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK0dyYXBoaWNzQ29udGV4dDo6
fkdyYXBoaWNzQ29udGV4dCgpCiB7Ci0gICAgYXV0byBzdHJva2VGbGFncyA9IHsgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0cm9rZUZsYWdzKSkgewotICAgICAg
ICBzdHJva2VDb2xvciA9IHN0YXRlLnN0cm9rZUNvbG9yOwotICAgICAgICBzdHJva2VHcmFkaWVu
dCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgICAgICBzdHJva2VQYXR0ZXJuID0gc3RhdGUu
c3Ryb2tlUGF0dGVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbGxGbGFncyA9IHsgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxH
cmFkaWVudENoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlIH07
Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGZpbGxGbGFncykpIHsKLSAgICAgICAgZmlsbENv
bG9yID0gc3RhdGUuZmlsbENvbG9yOwotICAgICAgICBmaWxsR3JhZGllbnQgPSBzdGF0ZS5maWxs
R3JhZGllbnQ7Ci0gICAgICAgIGZpbGxQYXR0ZXJuID0gc3RhdGUuZmlsbFBhdHRlcm47Ci0gICAg
fQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dD
aGFuZ2UpKSB7Ci0gICAgICAgIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAg
ICAgICAgc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgICAgIHNoYWRvd0NvbG9y
ID0gc3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIHNoYWRvd1JhZGl1c01vZGUgPSBzdGF0ZS5z
aGFkb3dSYWRpdXNNb2RlOwotICAgIH0KLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgc3Ryb2tlVGhp
Y2tuZXNzID0gc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICB0
ZXh0RHJhd2luZ01vZGUgPSBzdGF0ZS50ZXh0RHJhd2luZ01vZGU7Ci0KLSAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAg
ICAgc3Ryb2tlU3R5bGUgPSBzdGF0ZS5zdHJva2VTdHlsZTsKLQotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKQotICAgICAgICBmaWxs
UnVsZSA9IHN0YXRlLmZpbGxSdWxlOworICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOworfQogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGFs
cGhhID0gc3RhdGUuYWxwaGE7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCit7CisgICAg
bV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnko
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKSB7Ci0gICAgICAgIGNvbXBvc2l0ZU9w
ZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgICAgIGJsZW5kTW9kZSA9IHN0
YXRlLmJsZW5kTW9kZTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKK3sKKyAgICBp
ZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHN0YXRl
LnNob3VsZEFudGlhbGlhczsKKyAgICBtX3N0YXRlID0gbV9zdGFjay50YWtlTGFzdCgpOworICAg
IG1fbGFzdEFwcGxpZWRTdGF0ZSA9IHN0ZDo6bnVsbG9wdDsKIAotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAg
ICAgICBzaG91bGRTbW9vdGhGb250cyA9IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOwotCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMg
PSBzdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0KLSAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdl
KSkKLSAgICAgICAgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtczsKKyAgICAvLyBNYWtlIHN1cmUgd2UgZGVhbGxvY2F0ZSB0aGUgc3RhdGUgc3Rh
Y2sgYnVmZmVyIHdoZW4gaXQgZ29lcyBlbXB0eS4KKyAgICAvLyBDYW52YXMgZWxlbWVudHMgd2ls
bCBpbW1lZGlhdGVseSBzYXZlKCkgYWdhaW4sIGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2Fw
YWNpdHkuCisgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICBtX3N0YWNrLmNsZWFy
KCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRy
YXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgZHJhd0x1bWluYW5jZU1hc2sgPSBzdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkaWRBcHBseVN0YXRl
Q2hhbmdlcygpCit7CisgICAgbV9zdGF0ZS5kaWRBcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1f
bGFzdEFwcGxpZWRTdGF0ZSA9IG1fc3RhdGU7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQot
ICAgICAgICBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gc3RhdGUuaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eTsKK0Zsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yKCkgY29u
c3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgcmV0
dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Cit9
CisgICAgCitGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmco
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICBhdXRv
IHRyYW5zZm9ybWVkRGVzdFJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7CisgICAg
cmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7Cit9CiAK
LSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChmbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICB1
c2VEYXJrQXBwZWFyYW5jZSA9IHN0YXRlLnVzZURhcmtBcHBlYXJhbmNlOwotI2VuZGlmCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKK3sKKyAgICAr
K21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKSBjb25zdAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFnczsKKyAgICBBU1NFUlQobV90cmFuc3Bh
cmVuY3lMYXllckNvdW50ID4gMCk7CisgICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7Cit9
CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VHcmFkaWVudENoYW5nZSwg
c3Ryb2tlR3JhZGllbnQpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVBh
dHRlcm5DaGFuZ2UsIHN0cm9rZVBhdHRlcm4pOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BF
UlRZKEZpbGxHcmFkaWVudENoYW5nZSwgZmlsbEdyYWRpZW50KTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShGaWxsUGF0dGVybkNoYW5nZSwgZmlsbFBhdHRlcm4pOwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fc3RhdGUu
Y2xpcChyZWN0KTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpCi0gICAgICAgICYmIChtX3N0YXRlLnNoYWRvd09m
ZnNldCAhPSBzdGF0ZS5zaGFkb3dPZmZzZXQKLSAgICAgICAgICAgIHx8IG1fc3RhdGUuc2hhZG93
Qmx1ciAhPSBzdGF0ZS5zaGFkb3dCbHVyCi0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0Nv
bG9yICE9IHN0YXRlLnNoYWRvd0NvbG9yKSkKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlKQoreworICAgIG1fc3RhdGUuY2xpcChw
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Cit9CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9Q
RVJUWShTdHJva2VUaGlja25lc3NDaGFuZ2UsIHN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoVGV4dERyYXdpbmdNb2RlQ2hhbmdlLCB0ZXh0RHJhd2luZ01v
ZGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZUNvbG9yQ2hhbmdlLCBz
dHJva2VDb2xvcik7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbENvbG9yQ2hh
bmdlLCBmaWxsQ29sb3IpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVN0
eWxlQ2hhbmdlLCBzdHJva2VTdHlsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
RmlsbFJ1bGVDaGFuZ2UsIGZpbGxSdWxlKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShBbHBoYUNoYW5nZSwgYWxwaGEpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIFBhdGggcGF0aDsKKyAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOworICAgIGNsaXBQYXRoKHBhdGgpOworfQogCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2Rl
Q2hhbmdlIH0pCi0gICAgICAgICYmIChtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yICE9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yIHx8IG1fc3RhdGUuYmxlbmRNb2RlICE9IHN0YXRlLmJsZW5kTW9k
ZSkpIHsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21w
b3NpdGVPcGVyYXRpb25DaGFuZ2UpOwotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hv
dWxkQW50aWFsaWFzQ2hhbmdlLCBzaG91bGRBbnRpYWxpYXMpOwotICAgIENIRUNLX0ZPUl9DSEFO
R0VEX1BST1BFUlRZKFNob3VsZFNtb290aEZvbnRzQ2hhbmdlLCBzaG91bGRTbW9vdGhGb250cyk7
Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzQ2hhbmdlLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotICAgIENIRUNLX0ZPUl9D
SEFOR0VEX1BST1BFUlRZKFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtcyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UsIGRyYXdMdW1pbmFuY2VNYXNrKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlLCBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKLQotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoVXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UsIHVzZURhcmtB
cHBlYXJhbmNlKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGNoYW5nZUZsYWdzOworICAgIFBhdGgg
cGF0aDsKKyAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOworICAgIGNsaXBPdXQocGF0aCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KQogewotICAgIG1fc3RhdGUubWVyZ2VDaGFuZ2VzKHN0YXRlLCBmbGFncyk7Ci0KLSAgICBh
dXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnNBbnkoc3Ryb2tlRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShzdHJva2VG
bGFncyk7Ci0KLSAgICBhdXRvIGZpbGxGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zQW55KGZpbGxGbGFncykpCi0gICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3ZlKGZp
bGxGbGFncyk7Ci0KLSAgICBhdXRvIGNvbXBvc2l0ZU9wZXJhdG9yRmxhZ3MgPSB7IEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoY29tcG9z
aXRlT3BlcmF0b3JGbGFncykpCi0gICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3ZlKGNvbXBvc2l0
ZU9wZXJhdG9yRmxhZ3MpOwotCi0gICAgbV9jaGFuZ2VGbGFncy5hZGQoZmxhZ3MpOworICAgIGlt
YWdlQnVmZmVyLmNsaXBUb01hc2soKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3BlcmF0aW9uLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fc3RhdGUuc3Ryb2tlR3JhZGllbnQsIG1fc3RhdGUuc3Ry
b2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpCi0gICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlUGF0dGVybigqbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKTsKLQotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3Jh
ZGllbnRDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqbV9zdGF0ZS5m
aWxsR3JhZGllbnQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0
ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqbV9zdGF0ZS5maWxs
UGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0
LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNoYWRvd0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hh
ZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3Rh
dGUuc2hhZG93UmFkaXVzTW9kZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgY29u
dGV4dC5zZXRTdHJva2VUaGlja25lc3MobV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOworICAgIGF1
dG8gcHJldmlvdXNDb21wb3NpdGVNb2RlID0gY29tcG9zaXRlTW9kZSgpOwogCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9k
ZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKG1fc3RhdGUudGV4
dERyYXdpbmdNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ry
b2tlQ29sb3IobV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IobV9zdGF0ZS5maWxsQ29sb3IpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdl
KSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShtX3N0YXRlLnN0cm9rZVN0eWxlKTsK
LQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbFJ1bGUobV9zdGF0ZS5maWxs
UnVsZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEFscGhhKG1fc3RhdGUuYWxw
aGEpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
QmxlbmRNb2RlQ2hhbmdlIH0pKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlv
bihtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBtX3N0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50
aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMobV9zdGF0
ZS5zaG91bGRBbnRpYWxpYXMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgY29u
dGV4dC5zZXRTaG91bGRTbW9vdGhGb250cyhtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKLQot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyhtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldERyYXdMdW1p
bmFuY2VNYXNrKG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOwotCi0gICAgaWYgKG1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHlDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkobV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKLQotI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5z
ZXRVc2VEYXJrQXBwZWFyYW5jZShtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlKTsKLSNlbmRpZgor
ICAgIHNldENvbXBvc2l0ZU1vZGUoeyBvcGVyYXRpb24sIGJsZW5kTW9kZSB9KTsKKyAgICBmaWxs
UmVjdChyZWN0LCBjb2xvcik7CisgICAgc2V0Q29tcG9zaXRlTW9kZShwcmV2aW91c0NvbXBvc2l0
ZU1vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wKFRleHRT
dHJlYW0mIHRzKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY2hhbmdlLWZsYWdzIiwgbV9jaGFuZ2VGbGFncy50b1JhdygpKTsKLQotICAgIGlmIChtX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENo
YW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWdyYWRpZW50IiwgbV9zdGF0
ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpCi0gICAgICAgIHRz
LmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXBhdHRlcm4iLCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0
KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1n
cmFkaWVudCIsIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKLQotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1wYXR0ZXJuIiwgbV9zdGF0ZS5maWxsUGF0
dGVybi5nZXQoKSk7CisgICAgZ3JhZGllbnQuZmlsbCgqdGhpcywgcmVjdCk7Cit9CiAKLSAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKSkgewotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwgbV9zdGF0ZS5z
aGFkb3dCbHVyKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zmc2V0IiwgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1jb2xv
ciIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRv
d3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5KTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQoreworICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgeworICAgICAg
ICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVu
ZE1vZGUpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgICAgICAKKyAgICBDb21wb3NpdGVP
cGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7CisgICAgc2V0
Q29tcG9zaXRlTW9kZSh7IHByZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSB9KTsKKyAgICBmaWxs
Um91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2
aW91c09wZXJhdG9yKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoInN0cm9rZS10aGlja25lc3MiLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4
dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ0ZXh0LWRyYXdp
bmctbW9kZSIsIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlLnRvUmF3KCkpOwotCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtY29sb3IiLCBtX3N0YXRlLnN0
cm9rZUNvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZp
bGwtY29sb3IiLCBtX3N0YXRlLmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1zdHlsZSIsIG1fc3RhdGUuc3Ryb2tlU3R5bGUpOwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUmVjdChyZWN0
KTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1ydWxlIiwg
bV9zdGF0ZS5maWxsUnVsZSk7CisgICAgaWYgKCFyb3VuZGVkSG9sZVJlY3QucmFkaWkoKS5pc1pl
cm8oKSkKKyAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyb3VuZGVkSG9sZVJlY3QpOworICAg
IGVsc2UKKyAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5kZWRIb2xlUmVjdC5yZWN0KCkpOwogCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhh
Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbHBoYSIsIG1fc3RhdGUuYWxwaGEp
OworICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxlID0gZmlsbFJ1bGUoKTsKKyAgICBDb2xvciBvbGRG
aWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShXaW5kUnVsZTo6
RXZlbk9kZCk7CisgICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFu
Z2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRvciIsIG1fc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3IpOworICAgIGZpbGxQYXRoKHBhdGgpOworICAgIAorICAgIHNl
dEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsK
K30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpCbGVuZE1vZGVDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUi
LCBtX3N0YXRlLmJsZW5kTW9kZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VB
c1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQoreworICAgIFBhdGggcGF0aDsKKyAgICBw
YXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cit9CiAKLSAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50
aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtYW50aWFsaWFz
IiwgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQoreworICAgIFBhdGggcGF0
aDsKKyAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7CisgICAgc3Ryb2tlUGF0aChwYXRoKTsK
K30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hv
dWxkLXNtb290aC1mb250cyIsIG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQoreworICAg
IGF1dG8gb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CisgICAgYXV0byBvbGRTdHJva2VDb2xv
ciA9IHN0cm9rZUNvbG9yKCk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtc3VicGl4ZWwtcXVhbnRpemUtZm9udHMiLCBt
X3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgc2V0RmlsbENvbG9yKHNo
YWRvd0NvbG9yKTsKKyAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7CisgICAgZHJhd0Vs
bGlwc2UoRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSkpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIiwgbV9zdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3Jtcyk7CisgICAgc2V0RmlsbENvbG9yKGVsbGlwc2VDb2xvcik7CisgICAg
c2V0U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBkcmF3RWxsaXBzZShyZWN0KTsKIAot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3
THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhdy1sdW1p
bmFuY2UtbWFzayIsIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2spOworICAgIHNldEZpbGxDb2xv
cihvbGRGaWxsQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9yKG9sZFN0cm9rZUNvbG9yKTsKK30K
IAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkK
LSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ1c2UtZGFyay1hcHBlYXJhbmNlIiwgbV9zdGF0ZS51
c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0
aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGZpbGxQYXRoKHBhdGgpOworICAgIHN0cm9rZVBh
dGgocGF0aCk7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9h
dFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFp
bnRpbmdPcHRpb25zKQogewotICAgIHN0YXRlQ2hhbmdlLmR1bXAodHMpOwotICAgIHJldHVybiB0
czsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1h
Z2UubG9naWNhbFNpemUoKSksIEZsb2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBp
bWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29u
dGV4dCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIEFTU0VSVChtX3N0YWNrLmlz
RW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOworICAgIGRy
YXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlLmxv
Z2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzYXZlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWlu
dGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmlu
dGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgaWYgKG1f
c3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOworICAgIGlmICghaW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlID0gbV9zdGFjay5sYXN0KCk7Ci0g
ICAgbV9zdGFjay5yZW1vdmVMYXN0KCk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgd2UgZGVhbGxvY2F0
ZSB0aGUgc3RhdGUgc3RhY2sgYnVmZmVyIHdoZW4gaXQgZ29lcyBlbXB0eS4KLSAgICAvLyBDYW52
YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkgYWdhaW4sIGJ1dCB0aGF0IGdvZXMg
aW50byBpbmxpbmUgY2FwYWNpdHkuCi0gICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQotICAgICAg
ICBtX3N0YWNrLmNsZWFyKCk7CisgICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0gaW1hZ2UtPmxv
Z2ljYWxTaXplKCk7CisgICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2Up
LCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlTG9naWNhbFNpemUpLCBGbG9hdFJlY3QoeyB9
LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUubWVyZ2VD
aGFuZ2VzKHN0YXRlLCBmbGFncyk7Ci0gICAgZGlkVXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsK
KyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBpbWFnZUxvZ2ljYWxT
aXplID0gaW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFdURk1vdmUoaW1hZ2UpLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2Fs
U2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGVs
bGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc2F2ZSgpOwotCi0gICAg
c2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IpOwotICAgIHNldEZpbGxDb2xvcihzaGFkb3dDb2xv
cik7Ci0KLSAgICBkcmF3RWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgMSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0KLSAgICBzZXRTdHJva2VDb2xvcihlbGxp
cHNlQ29sb3IpOwotICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IpOwotCi0gICAgZHJhd0Vs
bGlwc2UocmVjdCk7ICAKLQotICAgIHJlc3RvcmUoKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRp
b25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5
KCkpOworICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhp
cywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJl
c3VsdHMmIHJlc3VsdHMpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwotICAg
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0
dGVybiA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKKyAgICBhdXRvIHJlc3VsdCA9IGZpbHRlci5h
cHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCByZXN1bHRzKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSByZXN1
bHQtPmltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZp
bHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOworICAgIGRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7CisgICAgc2NhbGUoZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIFNo
YWRvd1JhZGl1c01vZGUgcmFkaXVzTW9kZSkKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0g
ICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVy
ID0gYmx1cjsKLSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0ZS5z
aGFkb3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKKyAgICByZXR1cm4gZHJhd0lt
YWdlKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKK0ltYWdlRHJhd1Jlc3VsdCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0
aW9ucykKIHsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwotICAgIG1f
c3RhdGUuc2hhZG93Qmx1ciA9IDA7Ci0gICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7
Ci0gICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVs
dDsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hh
ZG93Q2hhbmdlKTsKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNp
emUoaW1hZ2VQYWludGluZ09wdGlvbnMub3JpZW50YXRpb24oKSkpOworICAgIHJldHVybiBkcmF3
SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzcmNSZWN0LCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7
CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBvZmZzZXQs
IGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CitJbWFnZURyYXdSZXN1bHQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgb2Zmc2V0ID0gbV9zdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAg
Ymx1ciA9IG1fc3RhdGUuc2hhZG93Qmx1cjsKLSAgICBjb2xvciA9IG1fc3RhdGUuc2hhZG93Q29s
b3I7Ci0KLSAgICByZXR1cm4gaGFzU2hhZG93KCk7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25z
LmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOwotICAgIG1f
c3RhdGUuZmlsbEdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0g
bnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RmlsbENvbG9yQ2hhbmdlKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIg
aW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xh
dGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGlu
YXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQor
SW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsCisgICAgSW1hZ2U6OlRpbGVSdWxl
IGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0
ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0g
V1RGTW92ZShwYXR0ZXJuKTsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSk7CisgICAgaWYgKGhSdWxlID09IEltYWdl
OjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKKyAgICAgICAg
Ly8gSnVzdCBkbyBhIHNjYWxlLgorICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKKyAgICB9CisKKyAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9w
dGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxl
ZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1
bGUsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0g
eyB9OwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLmZp
bGxQYXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpOworICAgIHN5c3RlbUlt
YWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50ID0gV1RGTW92ZShncmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNl
VHJhbnNmb3JtID0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX3N0YXRlLnN0
cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSk7CisgICAgaW1hZ2UuZHJhd1Bh
dHRlcm4oKnRoaXMsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBm
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7IH07
Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKLSAgICBtX3N0
YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm07Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSk7Ci0g
ICAgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHBsYXllci5wbGF5ZXJQcml2YXRl
KCktPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9Cisj
ZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewotICAgICsrbV90cmFuc3BhcmVu
Y3lMYXllckNvdW50OworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewotICAgIEFTU0VSVChtX3RyYW5z
cGFyZW5jeUxheWVyQ291bnQgPiAwKTsKLSAgICAtLW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsK
KyAgICBkcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQs
IGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHRvKQpAQCAtNTExLDExICszNDcsNiBAQCBGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3
VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgIHJl
dHVybiBmb250LmRyYXdUZXh0KCp0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290
aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCi17Ci0gICAgRm9udENhc2NhZGU6OmRyYXdHbHlw
aHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRT
bW9vdGhpbmdNb2RlKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01h
cmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0
b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKICAgICBmb250LmRyYXdFbXBoYXNpc01hcmtz
KCp0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CkBAIC01NDksNyArMzgwLDQ1IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgYmlkaVJ1biA9IGJpZGlSdW4tPm5leHQo
KTsKICAgICB9CiAKLSAgICBiaWRpUnVucy5jbGVhcigpOworICAgIGJpZGlSdW5zLmNsZWFyKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0
eWxlIHN0eWxlKQoreworICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0
LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRpbmcsIGRvdWJs
ZVVuZGVybGluZXMsIHN0eWxlKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29t
cHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHBy
aW50aW5nKQoreworICAgIENvbG9yIGR1bW15Q29sb3I7CisgICAgcmV0dXJuIGNvbXB1dGVMaW5l
Qm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQocmVjdCwgcHJpbnRpbmcsIGR1bW15Q29s
b3IpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0Fu
ZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmlu
dGluZywgQ29sb3ImIGNvbG9yKQoreworICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gcmVjdC5sb2Nh
dGlvbigpOworICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIDAu
NWYpOworICAgIGlmIChwcmludGluZykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4s
IEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOworCisgICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIC8vIEp1c3QgY29tcHV0ZSBzY2FsZSBpbiB4
IGRpbWVuc2lvbiwgYXNzdW1pbmcgeCBhbmQgeSBzY2FsZXMgYXJlIGVxdWFsLgorICAgIGZsb2F0
IHNjYWxlID0gdHJhbnNmb3JtLmIoKSA/IHN0ZDo6aHlwb3QodHJhbnNmb3JtLmEoKSwgdHJhbnNm
b3JtLmIoKSkgOiB0cmFuc2Zvcm0uYSgpOworICAgIGlmIChzY2FsZSA8IDEuMCkgeworICAgICAg
ICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRyYXdzIGEgbGluZSB0aGF0IGlzIGF0IGxlYXN0IG9uZS1w
aXhlbCBsaW5lIGhpZ2gsCisgICAgICAgIC8vIHdoaWNoIHRlbmRzIHRvIHZpc3VhbGx5IG92ZXJ3
aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxlcy4gVG8gY291bnRlciB0aGlzCisgICAgICAgIC8vIGVm
ZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGllZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9yIHdoZW4gdGV4
dCBpcyBhdCBzbWFsbCBzY2FsZXMuCisgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVt
VW5kZXJsaW5lQWxwaGEgPSAwLjRmOworICAgICAgICBmbG9hdCBzaGFkZSA9IHNjYWxlID4gbWlu
aW11bVVuZGVybGluZUFscGhhID8gc2NhbGUgOiBtaW5pbXVtVW5kZXJsaW5lQWxwaGE7CisgICAg
ICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hhZGUpOworICAg
IH0KKworICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFwUG9pbnQocmVj
dC5sb2NhdGlvbigpKTsKKyAgICAvLyBWaXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2NjdXIgaGVyZSBk
dWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25z
IGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRlcmxpbmUgZGVjb3JhdGlvbi4KKyAg
ICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRmKGRldmljZVBvaW50
LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOworICAgIGlmIChhdXRvIGludmVyc2UgPSB0
cmFuc2Zvcm0uaW52ZXJzZSgpKQorICAgICAgICBvcmlnaW4gPSBpbnZlcnNlLnZhbHVlKCkubWFw
UG9pbnQoZGV2aWNlT3JpZ2luKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRT
aXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9CiAKIHN0YXRpYyBJbnRTaXplIHNjYWxl
ZEltYWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEZsb2F0U2l6ZSYg
c2NhbGUpCkBAIC02MzksMTg3ICs1MDgsOSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IEdyYXBoaWNz
Q29udGV4dDo6Y3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcgogICAg
IHJldHVybiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBzY2FsZUZhY3RvcigpLCBjb2xv
clNwYWNlLCByZW5kZXJpbmdNb2RlKCksIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKLXsKLSAgICBzeXN0ZW1JbWFnZS5kcmF3
KCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQot
ewotICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1h
Z2Uuc2l6ZSgpKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKSwgaW1hZ2VQ
YWludGluZ09wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgRmxv
YXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKGltYWdlUGFpbnRpbmdPcHRp
b25zLm9yaWVudGF0aW9uKCkpKTsKLSAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc3JjUmVjdCwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1
bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVy
cG9sYXRpb25RdWFsaXR5KCkpOwotICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNp
emUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9s
YXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFs
aXR5KCkpOwotICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRT
aXplJiB0aWxlU2NhbGVGYWN0b3IsCi0gICAgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6
VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0
cmV0Y2hUaWxlKSB7Ci0gICAgICAgIC8vIEp1c3QgZG8gYSBzY2FsZS4KLSAgICAgICAgcmV0dXJu
IGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgfQot
Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5
Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAg
IHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVT
Y2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBp
bWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1h
Z2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2UubG9naWNhbFNpemUoKSksIEZsb2F0UmVj
dCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBk
ZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFp
bnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxp
dHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0g
ICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0gaW1hZ2Ut
PmxvZ2ljYWxTaXplKCk7Ci0gICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1vdmUoaW1h
Z2UpLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlTG9naWNhbFNpemUpLCBGbG9hdFJlY3Qo
eyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBpZiAoIWltYWdlKQot
ICAgICAgICByZXR1cm47Ci0gICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0gaW1hZ2UtPmxvZ2lj
YWxTaXplKCk7Ci0gICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpLCBk
ZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2FsU2l6ZSksIGltYWdlUGFpbnRp
bmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFn
ZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIElu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNT
Y29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBJbWFnZUJ1
ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCi17
Ci0gICAgYXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdl
UmVjdCwgcmVzdWx0cyk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBhdXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZlcigpOwotICAgIGlmICgh
aW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjYWxlKHsgMSAvIGZpbHRlci5m
aWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9
KTsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1bHQtPmFic29sdXRlSW1h
Z2VSZWN0KCkpOwotICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBpbWFnZS5kcmF3UGF0dGVybigqdGhpcywgZGVzdFJlY3QsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVj
dCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKLSAg
ICBjbGlwUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQotewotICAgIGlmICghcmVjdC5p
c1JvdW5kZWQoKSkgewotICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJl
Y3QpOwotICAgIGNsaXBPdXQocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0KQotewotICAgIGltYWdlQnVmZmVyLmNsaXBUb01hc2soKnRoaXMsIGRl
c3RpbmF0aW9uUmVjdCk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRz
KCkgY29uc3QKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW50UmVj
dCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgZ3JhZGllbnQuZmlsbCgqdGhpcywg
cmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi17Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRv
ciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwg
YmxlbmRNb2RlKTsKLSAgICBmaWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQo
KSkgewotICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9uKCks
IGJsZW5kTW9kZSk7Ci0gICAgICAgIGZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwot
ICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9uKCkpOwotICAg
IH0gZWxzZQotICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0ZU9w
ZXJhdGlvbigpLCBibGVuZE1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBQYXRo
IHBhdGg7Ci0gICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotCi0gICAgaWYgKCFyb3VuZGVkSG9sZVJl
Y3QucmFkaWkoKS5pc1plcm8oKSkKLSAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyb3VuZGVk
SG9sZVJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgcGF0aC5hZGRSZWN0KHJvdW5kZWRIb2xlUmVj
dC5yZWN0KCkpOwogCi0gICAgV2luZFJ1bGUgb2xkRmlsbFJ1bGUgPSBmaWxsUnVsZSgpOwotICAg
IENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwotICAgIAotICAgIHNldEZpbGxSdWxl
KFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICBzZXRGaWxsQ29sb3IoY29sb3IpOwogCi0gICAgZmls
bFBhdGgocGF0aCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOwotICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwotfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbiwg
QmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yID0g
Y29tcG9zaXRlT3BlcmF0aW9uOwotICAgIG1fc3RhdGUuYmxlbmRNb2RlID0gYmxlbmRNb2RlOwot
ICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3Np
dGVPcGVyYXRpb25DaGFuZ2UpOwotfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGlu
ZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQg
c3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQogewpAQCAtODUwLDc3ICs1NDEsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0
UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAotRmxvYXRTaXplIEdyYXBoaWNz
Q29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNj
YWxlKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKHRyYW5zZm9ybS54U2NhbGUoKSwgdHJhbnNmb3Jt
LnlTY2FsZSgpKTsKLX0KLSAgICAKLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFj
dG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENU
TShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIGF1
dG8gdHJhbnNmb3JtZWREZXN0UmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KGRlc3RSZWN0KTsKLSAg
ICByZXR1cm4gdHJhbnNmb3JtZWREZXN0UmVjdC5zaXplKCkgLyBzcmNSZWN0LnNpemUoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0g
ICAgZmlsbFBhdGgocGF0aCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkK
LXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2UpOwotICAgIGZp
bGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFz
UGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBh
dGguYWRkRWxsaXBzZShlbGxpcHNlKTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHlsZSkK
LXsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwg
RGFzaEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVz
LCBzdHlsZSk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxp
bmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykKLXsK
LSAgICBDb2xvciBkdW1teUNvbG9yOwotICAgIHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFu
dGlhbGlhc2luZ01vZGVGb3JUZXh0KHJlY3QsIHByaW50aW5nLCBkdW1teUNvbG9yKTsKLX0KLQot
RmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNp
bmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIENvbG9y
JiBjb2xvcikKLXsKLSAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKLSAg
ICBmbG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKLSAgICBp
ZiAocHJpbnRpbmcpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUo
cmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zv
cm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKLSAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3VtaW5nIHgg
YW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KLSAgICBmbG9hdCBzY2FsZSA9IHRyYW5zZm9ybS5iKCkg
PyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJhbnNmb3JtLmEo
KTsKLSAgICBpZiAoc2NhbGUgPCAxLjApIHsKLSAgICAgICAgLy8gVGhpcyBjb2RlIGFsd2F5cyBk
cmF3cyBhIGxpbmUgdGhhdCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdoLAotICAgICAg
ICAvLyB3aGljaCB0ZW5kcyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBzbWFsbCBzY2Fs
ZXMuIFRvIGNvdW50ZXIgdGhpcwotICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhhIGlzIGFwcGxp
ZWQgdG8gdGhlIHVuZGVybGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwgc2NhbGVzLgot
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhhID0gMC40ZjsK
LSAgICAgICAgZmxvYXQgc2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA/IHNj
YWxlIDogbWluaW11bVVuZGVybGluZUFscGhhOwotICAgICAgICBjb2xvciA9IGNvbG9yLmNvbG9y
V2l0aEFscGhhTXVsdGlwbGllZEJ5KHNoYWRlKTsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IGRl
dmljZVBvaW50ID0gdHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7Ci0gICAgLy8g
VmlzdWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFsIHJvdW5kZi9j
ZWlsZi4gdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBvdmVyZmxvdyB2
YWx1ZSBmb3IgdW5kZXJsaW5lIGRlY29yYXRpb24uCi0gICAgRmxvYXRQb2ludCBkZXZpY2VPcmln
aW4gPSBGbG9hdFBvaW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihkZXZpY2VQb2lu
dC55KCkpKTsKLSAgICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVyc2UoKSkKLSAg
ICAgICAgb3JpZ2luID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9yaWdpbik7Ci0g
ICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNr
bmVzcykpOwotfQotCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVDb3JuZXJXaWR0
aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAgIGZsb2F0IHRo
aWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtOTcyLDE1ICs1OTIsNCBAQCBWZWN0b3I8
RmxvYXRQb2ludD4gR3JhcGhpY3NDb250ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhi
b29sIGlzVmVydGljYWxMaQogICAgIHJldHVybiB7IHBvaW50MSwgcG9pbnQyIH07CiB9CiAKLSNp
ZiBFTkFCTEUoVklERU8pCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17Ci0g
ICAgcGxheWVyLnBsYXllclByaXZhdGUoKS0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoKnRo
aXMsIGRlc3RpbmF0aW9uKTsKLX0KLSNlbmRpZgotCi12b2lkIE51bGxHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCi17
Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKaW5kZXggZmI5NWRkMjViMjcxZGViOWZhODVmZjJkOWYxZjc0NzE2YTA2NmJh
ZS4uYmU0NDU2NjI5OTc2NTk2ZDY5MjRkODliOTFmNDU3NDYwZmNmYzFiNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCw0OSArMzAsMTggQEAKICNpbmNsdWRl
ICJEZXN0aW5hdGlvbkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRTdGF0ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAi
SW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKLSNpZiBVU0UoQ0cpCi10eXBlZGVmIHN0cnVjdCBDR0Nv
bnRleHQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZWxpZiBVU0UoQ0FJUk8pCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRDYWlybzsKLX0KLXR5cGVkZWYgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8gUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZWxz
ZQotdHlwZWRlZiB2b2lkIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShXSU4pCi0jaW5jbHVkZSAiRElCUGl4ZWxEYXRhLmgiCi10eXBlZGVmIHN0cnVjdCBI
RENfXyogSERDOwotI2lmICFVU0UoQ0cpCi0vLyBVSW50OCBpcyBkZWZpbmVkIGluIENvcmVGb3Vu
ZGF0aW9uL0NGQmFzZS5oCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUludDg7Ci0jZW5kaWYKLSNl
bmRpZgotCi0vLyBYMTEgaGVhZGVycyBkZWZpbmUgYSBidW5jaCBvZiBtYWNyb3Mgd2l0aCBjb21t
b24gdGVybXMsIGludGVyZmVyaW5nIHdpdGggV2ViQ29yZSBhbmQgV1RGIGVudW0gdmFsdWVzLgot
Ly8gQXMgYSB3b3JrYXJvdW5kLCB3ZSBleHBsaWNpdGx5IHVuZGVmIHRoZW0gaGVyZS4KLSNpZiBk
ZWZpbmVkKE5vbmUpCi0jdW5kZWYgTm9uZQotI2VuZGlmCi0jaWYgZGVmaW5lZChCZWxvdykKLSN1
bmRlZiBCZWxvdwotI2VuZGlmCi0jaWYgZGVmaW5lZChTdWNjZXNzKQotI3VuZGVmIFN1Y2Nlc3MK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsK
QEAgLTgyLDcgKzUxLDYgQEAgY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogY2xhc3MgSW1hZ2VCdWZm
ZXI7Ci1jbGFzcyBJbnRSZWN0OwogY2xhc3MgTWVkaWFQbGF5ZXI7CiBjbGFzcyBSb3VuZGVkUmVj
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMOwpAQCAtOTEsMTc0ICs1OSwxMiBAQCBjbGFzcyBT
eXN0ZW1JbWFnZTsKIGNsYXNzIFRleHRSdW47CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsK
IAotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIFJlY29yZGVyOwotfQotCi1lbnVtIGNs
YXNzIFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgewotICAgIEZpbGwgPSAxIDw8IDAsCi0gICAg
U3Ryb2tlID0gMSA8PCAxLAotfTsKLXVzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0gT3B0aW9u
U2V0PFRleHREcmF3aW5nTW9kZT47Ci0KLS8vIExlZ2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMg
dXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotLy8gSXQgaGFzIGRpZmZl
cmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi1lbnVtIGNsYXNzIFNoYWRvd1JhZGl1c01v
ZGUgOiBib29sIHsKLSAgICBEZWZhdWx0LAotICAgIExlZ2FjeQotfTsKLQotZW51bSBTdHJva2VT
dHlsZSB7Ci0gICAgTm9TdHJva2UsCi0gICAgU29saWRTdHJva2UsCi0gICAgRG90dGVkU3Ryb2tl
LAotICAgIERhc2hlZFN0cm9rZSwKLSAgICBEb3VibGVTdHJva2UsCi0gICAgV2F2eVN0cm9rZSwK
LX07Ci0KLXN0cnVjdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSB7Ci0gICAgZW51bSBjbGFzcyBN
b2RlIDogdWludDhfdCB7Ci0gICAgICAgIFRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXMsCi0gICAgICAgIFNwZWxsaW5nLAotICAgICAgICBHcmFtbWFyLAotICAgICAg
ICBBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAotICAgICAgICBEaWN0YXRpb25BbHRlcm5hdGl2
ZXMKLSAgICB9IG1vZGU7Ci0gICAgYm9vbCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB7IGZhbHNl
IH07Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi10ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtb2RlOwotICAgIGVuY29k
ZXIgPDwgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1zdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25h
bDxNb2RlPiBtb2RlOwotICAgIGRlY29kZXIgPj4gbW9kZTsKLSAgICBpZiAoIW1vZGUpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlOwotICAgIGRlY29kZXIgPj4gc2hvdWxkVXNlRGFya0FwcGVhcmFu
Y2U7Ci0gICAgaWYgKCFzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqbW9kZSwgKnNob3VsZFVzZURhcmtBcHBlYXJh
bmNlIH19OwotfQotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U7Ci0KLXN0cnVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250
ZXh0U3RhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0U3RhdGUoKTsK
LQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0
U3RhdGUmJik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIG9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKLQotICAgIGVudW0gQ2hh
bmdlIDogdWludDMyX3QgewotICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDAsCi0gICAgICAgIFN0cm9rZVBhdHRlcm5DaGFuZ2UgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMSwKLSAgICAgICAgRmlsbEdyYWRpZW50Q2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAyLAotICAgICAgICBGaWxsUGF0dGVybkNoYW5nZSAgICAgICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgICAgIFN0cm9rZVRoaWNrbmVzc0NoYW5nZSAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgNCwKLSAgICAgICAgU3Ryb2tlQ29sb3JDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgID0gMSA8PCA1LAotICAgICAgICBTdHJva2VTdHlsZUNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDYsCi0gICAgICAgIEZpbGxDb2xvckNoYW5nZSAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNywKLSAgICAgICAgRmlsbFJ1bGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA4LAotICAgICAgICBTaGFkb3dDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDksCi0gICAgICAgIFNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zQ2hhbmdlICAgICAgICAgICA9IDEgPDwgMTAsCi0gICAgICAgIEFscGhhQ2hh
bmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTEsCi0gICAgICAgIENvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSAgICAgICAgICAgICAgICA9IDEgPDwgMTIsCi0gICAgICAgIEJs
ZW5kTW9kZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTMsCi0gICAgICAg
IFRleHREcmF3aW5nTW9kZUNoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTQsCi0gICAg
ICAgIFNob3VsZEFudGlhbGlhc0NoYW5nZSAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTUsCi0g
ICAgICAgIFNob3VsZFNtb290aEZvbnRzQ2hhbmdlICAgICAgICAgICAgICAgICA9IDEgPDwgMTYs
Ci0gICAgICAgIFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSAgICAgICA9IDEgPDwg
MTcsCi0gICAgICAgIERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlICAgICAgICAgICAgICAgICA9IDEg
PDwgMTgsCi0gICAgICAgIEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UgICAgICAgICA9
IDEgPDwgMTksCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICAgICAgVXNlRGFy
a0FwcGVhcmFuY2VDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAyMCwKLSNlbmRpZgotICAg
IH07Ci0gICAgdXNpbmcgU3RhdGVDaGFuZ2VGbGFncyA9IE9wdGlvblNldDxDaGFuZ2U+OwotCi0g
ICAgdm9pZCBtZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBSZWZQdHI8R3JhZGllbnQ+
IHN0cm9rZUdyYWRpZW50OwotICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOwotICAg
IAotICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50OwotICAgIFJlZlB0cjxQYXR0ZXJu
PiBmaWxsUGF0dGVybjsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0KLSAgICBDb2xv
ciBzdHJva2VDb2xvciB7IENvbG9yOjpibGFjayB9OwotICAgIENvbG9yIGZpbGxDb2xvciB7IENv
bG9yOjpibGFjayB9OwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotCi0gICAgQWZmaW5lVHJhbnNm
b3JtIHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGZp
bGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotCi0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzIHsg
MCB9OwotICAgIGZsb2F0IHNoYWRvd0JsdXIgeyAwIH07Ci0gICAgZmxvYXQgYWxwaGEgeyAxIH07
Ci0KLSAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSB7IFNvbGlkU3Ryb2tlIH07Ci0gICAgV2lu
ZFJ1bGUgZmlsbFJ1bGUgeyBXaW5kUnVsZTo6Tm9uWmVybyB9OwotCi0gICAgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdpbmdNb2RlOjpGaWxsIH07Ci0gICAg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlT3ZlciB9OwotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUgeyBCbGVuZE1vZGU6Ok5vcm1h
bCB9OwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
eyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OwotICAgIFNoYWRvd1JhZGl1c01vZGUg
c2hhZG93UmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKLQotICAgIGJv
b2wgc2hvdWxkQW50aWFsaWFzIDogMTsKLSAgICBib29sIHNob3VsZFNtb290aEZvbnRzIDogMTsK
LSAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA6IDE7Ci0gICAgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA6IDE7Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzayA6IDE7
Ci0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBib29sIHVzZURhcmtBcHBlYXJh
bmNlIDogMTsKLSNlbmRpZgotfTsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
IHsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSgpID0gZGVmYXVsdDsKLSAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgICAgICA6
IG1fc3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9jaGFuZ2VGbGFncyhmbGFncykKLSAgICB7Ci0g
ICAgfQotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdl
c0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OwotCi0gICAgdm9p
ZCBhY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0Owot
Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBtX2NoYW5nZUZsYWdzOwotfTsKLQotV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlJik7Ci0KIGNsYXNzIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoR3JhcGhpY3NDb250ZXh0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6ICAgCisgICAgZnJpZW5kIGNsYXNzIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1bHQ7CitwdWJsaWM6Cisg
ICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2VGbGFncyYgPSB7IH0sIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzUGxh
dGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI3MCwyNzAgKzc2LDI3
MyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3lu
Y0RlY29kZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBkZXRl
Y3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgLy8g
Q29udGV4dCBTdGF0ZQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICB2b2lkIHNldENvbnRlbnRm
dWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQor
ICAgIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCi0gICAgdm9pZCBzZXRTdHJv
a2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0g
dGhpY2tuZXNzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKTsgfQotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOyB9CisgICAgLy8gQ29udGV4dCBT
dGF0ZQogCi0gICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkgeyBtX3N0
YXRlLnN0cm9rZVN0eWxlID0gc3R5bGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7IH0KLSAgICBTdHJva2VTdHlsZSBzdHJv
a2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlU3R5bGU7IH0KKyAgICBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9
CisgICAgdm9pZCBtZXJnZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
b3RoZXIpIHsgbV9zdGF0ZS5tZXJnZUNoYW5nZXMob3RoZXIpOyB9CisgICAgdm9pZCBtZXJnZVN0
YXRlRGlmZnMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1fc3RhdGUubWVy
Z2VEaWZmcyhvdGhlcik7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlQ29s
b3IoY29uc3QgQ29sb3ImKTsKLSAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnN0cm9rZUNvbG9yOyB9CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENU
TSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZ2V0Q1RNKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKSB7IG1fc3RhdGUuc2V0Q1RNKGN0bSwg
bV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgY3RtKSB7IHNldENUTShnZXRDVE0oKSAqIGN0bSk7IH0KKyAgICB2b2lkIHRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KSB7IHNldENUTShnZXRDVE0oKS50cmFuc2xhdGUoeCwgeSkp
OyB9CisgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHRyYW5zbGF0
ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoY29u
c3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54KCksIHAueSgpKTsgfQorICAgIHZvaWQg
c2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KSB7IHNldENUTShnZXRDVE0oKS5zY2FsZShzeCwgc3kp
KTsgfQorICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZShzLCBzKTsgfQorICAgIHZvaWQg
c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHNjYWxlKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgeyBzZXRD
VE0oZ2V0Q1RNKCkucm90YXRlKHJhZDJkZWcoYW5nbGVJblJhZGlhbnMpKSk7IH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJik7Ci0gICAg
UGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlUGF0
dGVybi5nZXQoKTsgfQorICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmZpbGxCcnVzaCgpLmNvbG9yKCk7IH0KKyAgICBHcmFkaWVudCogZmlsbEdyYWRp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5ncmFkaWVudCgpOyB9Cisg
ICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxCcnVz
aCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbFNwYWNlVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5zcGFjZVRyYW5zZm9y
bSgpOyB9CisgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fc3Rh
dGUuc2V0RmlsbENvbG9yKGNvbG9yLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBz
ZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0RmlsbEdyYWRpZW50KFdU
Rk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IH0KKyAgICB2b2lkIHNldEZpbGxQYXR0
ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VU
cmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRGaWxsUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4p
LCBzcGFjZVRyYW5zZm9ybSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tl
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsK
LSAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50LmdldCgpOyB9CisgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmZpbGxSdWxlKCk7IH0KKyAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxl
IGZpbGxSdWxlKSB7IG1fc3RhdGUuc2V0RmlsbFJ1bGUoZmlsbFJ1bGUsIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9z
dGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpOyB9Ci0gICAgV2luZFJ1bGUgZmlsbFJ1bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOyB9CisgICAgY29uc3QgQ29sb3ImIHN0
cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLmNvbG9yKCk7
IH0KKyAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnN0cm9rZUJydXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4o
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkucGF0dGVybigpOyB9CisgICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VTcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpOyB9CisgICAgdm9pZCBz
ZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9zdGF0ZS5zZXRTdHJva2VDb2xv
cihjb2xvciwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRTdHJva2VHcmFkaWVudChXVEZN
b3ZlKGdyYWRpZW50KSwgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7IH0KKyAgICB2b2lkIHNldFN0
cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRTdHJva2VQYXR0ZXJu
KFdURk1vdmUocGF0dGVybiksIHBhdHRlcm5TcGFjZVRyYW5zZm9ybSk7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgY29uc3QgQ29s
b3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9yOyB9CisgICAg
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlj
a25lc3MoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykg
eyBtX3N0YXRlLnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MsIG1fbGFzdEFwcGxpZWRTdGF0
ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRl
cm4+JiYpOwotICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5maWxsUGF0dGVybi5nZXQoKTsgfQorICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VTdHlsZSgpOyB9CisgICAgdm9pZCBzZXRTdHJva2VT
dHlsZShTdHJva2VTdHlsZSBzdHlsZSkgeyBtX3N0YXRlLnNldFN0cm9rZVN0eWxlKHN0eWxlLCBt
X2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxH
cmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwot
ICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxH
cmFkaWVudC5nZXQoKTsgfQorICAgIExpbmVDYXAgaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5saW5lQ2FwKCk7IH0KKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKSB7
IG1fc3RhdGUuc2V0TGluZUNhcChsaW5lQ2FwLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAg
ICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMpIHsgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7IH0KKyAgICBjb25zdCBMaW5lRGFzaCBsaW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUubGluZURhc2goKTsgfQorICAgIHZvaWQgc2V0TGluZURhc2goTGluZURhc2gmJiBsaW5lRGFz
aCkgeyBtX3N0YXRlLnNldExpbmVEYXNoKFdURk1vdmUobGluZURhc2gpLCBtX2xhc3RBcHBsaWVk
U3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlh
bGlhcykgeyBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlhczsgZGlkVXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0No
YW5nZSk7IH0KLSAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuc2hvdWxkQW50aWFsaWFzOyB9CisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmxpbmVKb2luKCk7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2lu
IGxpbmVKb2luKSB7IG1fc3RhdGUuc2V0TGluZUpvaW4obGluZUpvaW4sIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBzaG91bGRTbW9v
dGhGb250cykgeyBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7
IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9v
dGhGb250c0NoYW5nZSk7IH0KLSAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250czsgfQorICAgIGZsb2F0IG1pdGVyTGltaXQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLm1pdGVyTGltaXQoKTsgfQorICAgIHZvaWQgc2V0TWl0
ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KSB7IG1fc3RhdGUuc2V0TWl0ZXJMaW1pdChtaXRlckxp
bWl0LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVz
IHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5j
ZSBvZiBhbGlnbmluZyBnbHlwaHMuCi0gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRp
c2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgot
ICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0g
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsgfQot
ICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IH0KKyAgICBDb21wb3NpdGVNb2RlIGNv
bXBvc2l0ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU1vZGUoKTsgfQor
ICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGNvbXBvc2l0ZU1vZGUoKS5vcGVyYXRpb247IH0KKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkg
Y29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZTsgfQorICAgIHZvaWQgc2V0
Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUpIHsgbV9zdGF0ZS5zZXRD
b21wb3NpdGVNb2RlKGNvbXBvc2l0ZU1vZGUsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2
b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcGVyYXRpb24pIHsg
c2V0Q29tcG9zaXRlTW9kZSh7IG9wZXJhdGlvbiwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7IH0KIAot
ICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7
IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7IH0KKyAgICBjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5kcm9wU2hhZG93KCk7IH0KKyAgICBGbG9hdFNpemUgc2hhZG93
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLm9mZnNldDsgfQorICAgIGZsb2F0
IHNoYWRvd0JsdXIoKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93KCkuYmx1clJhZGl1czsgfQor
ICAgIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3co
KS5jb2xvcjsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9w
U2hhZG93KSB7IG1fc3RhdGUuc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93LCBtX2xhc3RBcHBsaWVk
U3RhdGUpOyB9CisgICAgdm9pZCBjbGVhclNoYWRvdygpIHsgc2V0RHJvcFNoYWRvdyh7IH0pOyB9
CiAKLSAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuYWxwaGEgPSBhbHBo
YTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKTsgfQotICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYTsg
fQorICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3co
KS5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0
dXJuIGRyb3BTaGFkb3coKS5pc0JsdXJyZWQoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29u
c3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmhhc091dHNldHMoKTsgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOyB9
Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuYmxlbmRNb2RlOyB9CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmFscGhhKCk7IH0KKyAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuc2V0
QWxwaGEoYWxwaGEsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0RHJhd0x1
bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLmRyYXdMdW1pbmFu
Y2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7IH0KLSAgICBib29sIGRy
YXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFz
azsgfQorICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsgfQor
ICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSB7IG1fc3RhdGUuc2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShpbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBtX2xhc3RBcHBsaWVkU3RhdGUp
OyB9CiAKLSAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBt
b2RlKSB7IG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsgZGlkVXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSk7IH0KLSAg
ICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnRleHREcmF3aW5nTW9kZTsgfQorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRE
cmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKCk7IH0K
KyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJh
d2luZ01vZGUpIHsgbV9zdGF0ZS5zZXRUZXh0RHJhd2luZ01vZGUodGV4dERyYXdpbmdNb2RlLCBt
X2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRv
dyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIFNoYWRvd1JhZGl1
c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgY2xlYXJTaGFkb3coKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldFNo
YWRvdyhGbG9hdFNpemUmLCBmbG9hdCYsIENvbG9yJikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRB
bnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhcygpOyB9Cisg
ICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0
ZS5zZXRTaG91bGRBbnRpYWxpYXMoc2hvdWxkQW50aWFsaWFzLCBtX2xhc3RBcHBsaWVkU3RhdGUp
OyB9CiAKLSAgICBib29sIGhhc1Zpc2libGVTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNoYWRvd0NvbG9yLmlzVmlzaWJsZSgpOyB9Ci0gICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7
IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYgKG1fc3RhdGUuc2hhZG93Qmx1ciB8fCBtX3N0
YXRlLnNoYWRvd09mZnNldC53aWR0aCgpIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgp
KTsgfQotICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2li
bGVTaGFkb3coKSAmJiBtX3N0YXRlLnNoYWRvd0JsdXI7IH0KKyAgICBib29sIHNob3VsZFNtb290
aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cygpOyB9Cisg
ICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1f
c3RhdGUuc2V0U2hvdWxkU21vb3RoRm9udHMoc2hvdWxkU21vb3RoRm9udHMsIG1fbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KIAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgdm9pZCBz
ZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlKSB7IG1fc3RhdGUudXNl
RGFya0FwcGVhcmFuY2UgPSB1c2VEYXJrQXBwZWFyYW5jZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKTsgfQotICAg
IGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtB
cHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBpeGVs
LXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBhbGln
bmluZyBnbHlwaHMuCisgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUgdG8g
dG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgorICAgIGJvb2wg
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKTsgfQorICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUu
c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgYm9vbCBz
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMoKTsgfQorICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0YXRlLnNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9
CiAKLSAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIGJvb2wgZHJhd0x1bWlu
YW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrKCk7IH0K
KyAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spIHsg
bV9zdGF0ZS5zZXREcmF3THVtaW5hbmNlTWFzayhkcmF3THVtaW5hbmNlTWFzaywgbV9sYXN0QXBw
bGllZFN0YXRlKTsgfQogCi0gICAgLy8gQ2FsbGVkICphZnRlciogYW55IGNoYW5nZSB0byBHcmFw
aGljc0NvbnRleHRTdGF0ZTsgZ2VuZXJhbGx5IHVzZWQgdG8gcHJvcGFnYXRlIGNoYW5nZXMKLSAg
ICAvLyB0byB0aGUgcGxhdGZvcm0gY29udGV4dCdzIHN0YXRlLgotICAgIHZpcnR1YWwgdm9pZCBk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS51c2VEYXJrQXBwZWFyYW5jZSgpOyB9CisgICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShi
b29sIHVzZURhcmtBcHBlYXJhbmNlKSB7IG1fc3RhdGUuc2V0VXNlRGFya0FwcGVhcmFuY2UodXNl
RGFya0FwcGVhcmFuY2UsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyNlbmRpZgogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNhdmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgcmVzdG9yZSgpOwotICAgIAorICAgIHZvaWQgZGlkQXBwbHlTdGF0ZUNoYW5nZXMo
KTsKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUo
KTsgfQogCisgICAgdmlydHVhbCB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgPSAwOwogI2lmIFVT
RShDRykKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIHJlYWxseSBiZSBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0IG1ldGhvZHM/Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOworI2VuZGlmCiAKLSAgICAvLyBGSVhN
RTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRoZW4gaGF2
ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNDQUxheWVy
Q29udGV4dChib29sKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBj
b25zdCA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0
OwogCi0gICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29uc3Ry
dWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQgb2ZmIHRoZSBjb250ZXh0PwotICAgIHZp
cnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSA9IDA7Ci0jZW5kaWYKKyAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhl
IGNvbnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCisgICAgLy8gYWN0aW5nIGFz
IGEgYmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgorICAgIHZpcnR1
YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0
b3IpOyB9CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KKyAgICAvLyBUcmFuc3Bh
cmVuY3kgTGF5ZXJzCiAKLSAgICAvLyBQaXhlbCBTbmFwcGluZworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAg
IGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gc3VwcG9ydHNUcmFu
c3BhcmVuY3lMYXllcnMoKSAmJiBtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7IH0KIAotICAgIGVu
dW0gUm91bmRpbmdNb2RlIHsKLSAgICAgICAgUm91bmRBbGxTaWRlcywKLSAgICAgICAgUm91bmRP
cmlnaW5BbmREaW1lbnNpb25zCi0gICAgfTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lk
ZXMpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhl
bEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VX
aWR0aCwgU3Ryb2tlU3R5bGUpOworICAgIC8vIENsaXBwaW5nCiAKLSAgICAvLyBTaGFwZXMKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRS
dWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIC8vIFRoZXNlIGRyYXcg
bWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxpbmcuCi0gICAgLy8gRklYTUU6
IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGljaCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0
cm9rZXMKLSAgICAvLyB1c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3Qg
Ym9yZGVycyAob2YgdGhlIGNvcnJlY3QKLSAgICAvLyBzdHJva2UgY29sb3IpLgotICAgIHZpcnR1
YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mg
PSAxKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
blJlY3QpOwogCi0gICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOworICAgIEludFJlY3Qg
Y2xpcEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9zdGF0ZS5jbGlw
Qm91bmRzKCkpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVs
bGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KKyAgICAvLyBTaGFwZXMKKworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCiAgICAg
dmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdy
YWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdmlydHVhbCB2
b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxl
bmRNb2RlOjpOb3JtYWwpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotCi0gICAgdmlydHVh
bCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgPSAwOwotCi0gICAgLy8gSW1hZ2VzLCBQYXR0
ZXJucywgYW5kIE1lZGlhCisgICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkgeyBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwogCi0gICAg
SW50U2l6ZSBjb21wYXRpYmxlSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+
ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
RmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
ID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0
ZDo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNp
emUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9
IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxs
b3B0KSBjb25zdDsKKyAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBib3RoIHN0cm9r
aW5nIGFuZCBmaWxsaW5nLgorICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1JlY3QoKSwgd2hp
Y2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCisgICAgLy8gdXNpbmcgYSAxLXBp
eGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBjb3JyZWN0Cisg
ICAgLy8gc3Ryb2tlIGNvbG9yKS4KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVB
bGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBzdHJva2VFbGxpcHNlQXNQ
YXRoKGVsbGlwc2UpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVBh
dGgoY29uc3QgUGF0aCYpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSA9IDA7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JikgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdTeXN0ZW1J
bWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdmlydHVhbCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6
RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7
CisgICAgLy8gRm9jdXMgUmluZ3MKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXpl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpU
aWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0
aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50YXRpb24/IE9yIGVsc2V3aGVyZT8KKyNpZiBQTEFURk9S
TShNQUMpCisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJs
ZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3Vi
bGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOworI2Vu
ZGlmCiAKKyAgICAvLyBJbWFnZXMKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1p
bmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5n
SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQ
YXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VC
Q09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0
UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdl
T3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdS
ZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2Ug
fSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFn
ZSB9KTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFn
ZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQ
T1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBz
ZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSk7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBw
YWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKTsKICNlbmRpZgotCi0gICAgLy8gQ2xpcHBpbmcKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xp
cE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBj
bGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotICAgIHZpcnR1YWwg
dm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkg
PSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7Ci0KKyAgICAKICAgICAvLyBUZXh0CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9
IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKICAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2lu
dCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6
bnVsbG9wdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBh
aW50SWZGb250Tm90UmVhZHkpOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNo
ZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9k
ZSkKLSAgICB7Ci0gICAgICAgIGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVt
R2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwotICAgIH0KKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0
KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7CiAgICAgdmly
dHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAKLSAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCi0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKTsKLSAgICBib29sIGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsg
cmV0dXJuIChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5zcGFy
ZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRl
cmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwogCi0g
ICAgLy8gRm9jdXMgUmluZ3MKKyAgICAvLyBDb21wYXRpYmxlIEltYWdlQnVmZmVyCiAKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhl
IENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAg
IHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNl
dCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZz
ZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKLSNlbmRpZgorICAgIElu
dFNpemUgY29tcGF0aWJsZUltYWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsK
IAotICAgIC8vIFRyYW5zZm9ybXMKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3Rk
OjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQp
IGNvbnN0OwogCi0gICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsgcywgcyB9KTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwotICAgIHZvaWQgdHJhbnNs
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsgfQotICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsg
dHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZs
b2F0IHgsIGZsb2F0IHkpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0
U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+
ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51
bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBz
Y2FsZSA9IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6
Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkg
Y29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
ID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0g
c3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAgIGVudW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVm
aW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsK
LSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0g
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0ID0gMDsKKyAgICAvLyBQaXhlbCBTbmFw
cGluZwogCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFj
dG9yIHRvIHRoZSBjb250ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgotICAgIC8v
IGFjdGluZyBhcyBhIGJhc2UtbGV2ZWwgY29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4K
LSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsg
c2NhbGUoZmFjdG9yKTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3Rv
cigpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRy
YXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
KSBjb25zdDsKKyAgICBlbnVtIFJvdW5kaW5nTW9kZSB7CisgICAgICAgIFJvdW5kQWxsU2lkZXMs
CisgICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucworICAgIH07CisgICAgdmlydHVhbCBG
bG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01v
ZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQg
YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBw
MiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKIAogICAgIC8vIExpbmtzCiAKKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0
IEZsb2F0UmVjdCYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVj
dChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotCi0gICAgLy8gQ29udGVudGZ1bCBQYWludCBEZXRlY3Rpb24KKyNpZiBV
U0UoQ0cpCisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBh
IHdoYXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVh
bCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgeyB9CisgICAgdmlydHVhbCBib29sIGlz
Q0FMYXllckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBzZXRD
b250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRy
dWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRmdWxQYWludERldGVjdGVkOyB9CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEg
R3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQg
b2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sKSB7IH0KKyNlbmRpZgogCiAgICAgLy8gRklYTUU6IE5vdGhpbmcgaW4gdGhpcyBzZWN0
aW9uIGJlbG9uZ3MgaGVyZSwgYW5kIHNob3VsZCBiZSBtb3ZlZCBlbHNld2hlcmUuCiAjaWYgT1Mo
V0lORE9XUykKQEAgLTU0NiwxMCArMzU1LDcgQEAgcHVibGljOgogICAgIC8vIHB1dCBjb2RlIHNo
YXJlZCBiZXR3ZWVuIFdpbmRvd3MgQ0cgYW5kIFdpbmRvd3MgQ2Fpcm8gYmFja2VuZHMuCiAgICAg
dmlydHVhbCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRl
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgotCi1wcml2YXRlOgot
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLQorICAgIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1Bh
dGgoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0
IEZsb2F0UmVjdCYpOwpAQCAtNTYxLDE5MSArMzY3LDE3IEBAIHByb3RlY3RlZDoKICAgICBmbG9h
dCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBw
YXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdDsKICAgICBWZWN0b3I8RmxvYXRQ
b2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxv
YXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29u
c3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwotCiBwcml2YXRlOgorICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisgICAgc3RkOjpv
cHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4gbV9sYXN0QXBwbGllZFN0YXRlOwogICAgIFZl
Y3RvcjxHcmFwaGljc0NvbnRleHRTdGF0ZSwgMT4gbV9zdGFjazsKIAogICAgIHVuc2lnbmVkIG1f
dHJhbnNwYXJlbmN5TGF5ZXJDb3VudCB7IDAgfTsKICAgICBib29sIG1fY29udGVudGZ1bFBhaW50
RGV0ZWN0ZWQgeyBmYWxzZSB9OwogfTsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJl
c3RvcmUgPSB0cnVlKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NhdmVBbmRS
ZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3Rv
cmUpCi0gICAgICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwotICAgIH0KLSAgICAKLSAgICB+R3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlcigpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVz
dG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwot
ICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
c2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAgICAgICBt
X3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX2NvbnRleHQ7IH0KLQotcHJpdmF0ZToKLSAg
ICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7
Ci19OwotCi1jbGFzcyBUcmFuc3BhcmVuY3lMYXllclNjb3BlIHsKLXB1YmxpYzoKLSAgICBUcmFu
c3BhcmVuY3lMYXllclNjb3BlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxwaGEs
IGJvb2wgYmVnaW5MYXllciA9IHRydWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0g
ICAgICAgICwgbV9hbHBoYShhbHBoYSkKLSAgICAgICAgLCBtX2JlZ2FuTGF5ZXIoYmVnaW5MYXll
cikKLSAgICB7Ci0gICAgICAgIGlmIChiZWdpbkxheWVyKQotICAgICAgICAgICAgbV9jb250ZXh0
LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
YmVnaW5MYXllcihmbG9hdCBhbHBoYSkKLSAgICB7Ci0gICAgICAgIG1fYWxwaGEgPSBhbHBoYTsK
LSAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7Ci0gICAg
ICAgIG1fYmVnYW5MYXllciA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIH5UcmFuc3BhcmVuY3lM
YXllclNjb3BlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2JlZ2FuTGF5ZXIpCi0gICAgICAgICAg
ICBtX2NvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Ci0gICAgZmxvYXQgbV9hbHBoYTsKLSAgICBi
b29sIG1fYmVnYW5MYXllcjsKLX07Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyIHsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0g
ICAgICAgICwgbV9zdGFja1NpemUoY29udGV4dC5zdGFja1NpemUoKSkKLSAgICB7IH0KLSAgICAK
LSAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIoKQotICAgIHsKLSAgICAgICAg
aWYgKG1fY29udGV4dC5zdGFja1NpemUoKSAhPSBtX3N0YWNrU2l6ZSkKLSAgICAgICAgICAgIFdU
RkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0ICVwIHN0YWNrIGNoYW5nZWQgYnkgJWQiLCAmbV9j
b250ZXh0LCAoaW50KW1fY29udGV4dC5zdGFja1NpemUoKSAtIChpbnQpbV9zdGFja1NpemUpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICB1
bnNpZ25lZCBtX3N0YWNrU2l6ZTsKLX07Ci0KLWNsYXNzIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWlu
dGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgICAgICA6IG1fZ3JhcGhpY3NDb250
ZXh0KGdyYXBoaWNzQ29udGV4dCkKLSAgICAgICAgLCBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVh
bGl0eShncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQotICAgICAg
ICAsIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKGludGVycG9sYXRpb25RdWFsaXR5VG9V
c2UgIT0gSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgJiYgbV9jdXJyZW50SW50ZXJwb2xh
dGlvblF1YWxpdHkgIT0gaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKLSAgICB7Ci0gICAgICAg
IGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIG1fZ3JhcGhp
Y3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJwb2xhdGlvblF1YWxp
dHlUb1VzZSk7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWlu
dGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBzdGQ6Om9wdGlvbmFsPElu
dGVycG9sYXRpb25RdWFsaXR5PiBpbnRlcnBvbGF0aW9uUXVhbGl0eSkKLSAgICAgICAgOiBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoZ3JhcGhpY3NDb250ZXh0LCBpbnRlcnBvbGF0aW9u
UXVhbGl0eSA/IGludGVycG9sYXRpb25RdWFsaXR5LnZhbHVlKCkgOiBncmFwaGljc0NvbnRleHQu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICB+SW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ludGVycG9s
YXRpb25RdWFsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldElt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkobV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0
OwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5
OwotICAgIGJvb2wgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQ7Ci19OwotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlPiB7Ci0gICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxp
bmVTdHlsZTo6TW9kZSwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9k
ZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKLSAgICBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcsCi0gICAgV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIsCi0gICAgV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQs
Ci0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFs
dGVybmF0aXZlcwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKLSAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VHcmFkaWVudENoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEdyYWRpZW50Q2hhbmdlLAotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsUGF0dGVybkNoYW5nZSwKLSAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpT
dHJva2VDb2xvckNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6U3Ryb2tlU3R5bGVDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxDb2xvckNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbFJ1bGVDaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNoYWRvd0NoYW5nZSwKLSAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkFscGhhQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkJsZW5kTW9kZUNoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlLAot
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRp
YWxpYXNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UsCi0g
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRyYXdMdW1pbmFu
Y2VNYXNrQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlCi0jaWYgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKLSAgICAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZQotI2VuZGlmCi0gICAgPjsKLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6U3Ryb2tlU3R5bGU+IHsKLSAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlLAotICAgIFdl
YkNvcmU6OlN0cm9rZVN0eWxlOjpOb1N0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6
U29saWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdHRlZFN0cm9rZSwKLSAg
ICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9r
ZVN0eWxlOjpEb3VibGVTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OldhdnlTdHJv
a2UKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpU
ZXh0RHJhd2luZ01vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAg
ICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGUsCi0gICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5n
TW9kZTo6RmlsbCwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpTdHJva2UKLSAg
ICA+OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjOWU1ODFkY2MyMjAz
YWQyMWE3ZjQ4ZjM1NzgxNGRlZmMzY2ZmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAKQEAgLTAsMCAr
MSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCisK
KyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEZsb2F0
UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IENoYW5nZUZsYWdzJiBjaGFuZ2VGbGFncywgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQorICAgIDogbV9jbGlwQm91bmRzKGluaXRpYWxD
VE0ubWFwUmVjdChpbml0aWFsQ2xpcCkpCisgICAgLCBtX2NoYW5nZUZsYWdzKGNoYW5nZUZsYWdz
KQorICAgICwgbV9jdG0oaW5pdGlhbENUTSkKK3sKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpjbGlwQm91bmRzKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBpbnZlcnNlID0g
bV9jdG0uaW52ZXJzZSgpKQorICAgICAgICByZXR1cm4gaW52ZXJzZS0+bWFwUmVjdChtX2NsaXBC
b3VuZHMpOworCisgICAgLy8gSWYgdGhlIENUTSBpcyBub3QgaW52ZXJ0aWJsZSwgcmV0dXJuIHRo
ZSBvcmlnaW5hbCByZWN0LgorICAgIC8vIFRoaXMgbWF0Y2hlcyBDR1JlY3RBcHBseUludmVyc2VB
ZmZpbmVUcmFuc2Zvcm0gYmVoYXZpb3IuCisgICAgcmV0dXJuIG1fY2xpcEJvdW5kczsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSBjb25z
dAoreworICAgIHN0YXRpYyBjb25zdGV4cHIgQ2hhbmdlRmxhZ3MgcHJpbWl0aXZlQ2hhbmdlRmxh
Z3MgeyBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgQ2hhbmdlOjpTdHJva2VCcnVzaCwgQ2hhbmdl
OjpGaWxsQnJ1c2ggfTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICE9IChtX2NoYW5nZUZsYWdz
ICYgcHJpbWl0aXZlQ2hhbmdlRmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhDaGFuZ2U6OlN0cm9rZUJydXNoKSAmJiAhbV9zdHJv
a2VCcnVzaC5pc1ByaW1pdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhDaGFuZ2U6OkZpbGxCcnVzaCkgJiYgIW1fZmlsbEJydXNo
LmlzUHJpbWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKQoreworICAgIGF1dG8gbWVyZ2VDaGFuZ2UgPSBbJl0o
Q2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7Cisg
ICAgICAgIGlmIChvdGhlci5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpIHsKKyAgICAg
ICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9wZXJ0eTsKKyAgICAgICAgICAgIG1f
Y2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgQVNTRVJU
KG1fY2xpcEJvdW5kcyA9PSBvdGhlci5tX2NsaXBCb3VuZHMpOworCisgICAgbWVyZ2VDaGFuZ2Uo
Q2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9jdG0pOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAg
IG1lcmdlQ2hhbmdlKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdl
OjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VUaGlja25lc3Ms
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3Mp
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUpOworCisgICAgbWVyZ2VDaGFu
Z2UoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVEYXNoLCAg
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsK
KyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKTsKKyAgICBtZXJnZUNoYW5nZShDaGFu
Z2U6Ok1pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX21pdGVyTGltaXQpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpDb21wb3NpdGVNb2Rl
LCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2Rl
KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpOworCisgICAgbWVyZ2VDaGFu
Z2UoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9hbHBoYSk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5LCAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSk7
CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7CisgICAgbWVyZ2VD
aGFuZ2UoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdl
OjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RHJhd0x1
bWluYW5jZU1hc2ssICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1
bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgbWVyZ2VD
aGFuZ2UoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
b3RoZXIpCit7CisgICAgYXV0byBtZXJnZURpZmYgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmICh0aGlzLT4qcHJv
cGVydHkgIT0gb3RoZXIuKnByb3BlcnR5KSB7CisgICAgICAgICAgICB0aGlzLT4qcHJvcGVydHkg
PSBvdGhlci4qcHJvcGVydHk7CisgICAgICAgICAgICBtX2NoYW5nZUZsYWdzLmFkZChjaGFuZ2Up
OworICAgICAgICB9CisgICAgfTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkNUTSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworICAgIAor
ICAgIG1lcmdlRGlmZihDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkZp
bGxSdWxlLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxs
UnVsZSk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIG1lcmdlRGlm
ZihDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zdHJva2VUaGlja25lc3MpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZVN0
eWxlLCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHls
ZSk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCk7CisgICAgbWVyZ2VEaWZmKENoYW5n
ZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2xpbmVEYXNoKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlRGlm
ZihDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9taXRlckxpbWl0KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkNvbXBvc2l0ZU1v
ZGUsICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2Rl
KTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZURpZmYoQ2hh
bmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fYWxwaGEpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHksICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdlRGlm
ZihDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZFNt
b290aEZvbnRzLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9v
dGhGb250cyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzLCAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBt
ZXJnZURpZmYoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRp
ZgorfQorCitzdGF0aWMgY29uc3QgY2hhciogc3RhdGVDaGFuZ2VOYW1lKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2UgY2hhbmdlKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBz
dGF0ZUNoYW5nZU5hbWVzW10gPSB7CisgICAgICAgICJjdG0iLAorCisgICAgICAgICJmaWxsLWJy
dXNoIiwKKyAgICAgICAgImZpbGwtcnVsZSIsCisKKyAgICAgICAgInN0cm9rZS1icnVzaCIsCisg
ICAgICAgICJzdHJva2UtdGhpY2tuZXNzIiwKKyAgICAgICAgInN0cm9rZS1zdHlsZSIsCisKKyAg
ICAgICAgImxpbmUtY2FwIiwKKyAgICAgICAgImxpbmUtZGFzaCIsCisgICAgICAgICJsaW5lLWpv
aW4iLAorICAgICAgICAibWl0ZXItbGltaXQiLAorCisgICAgICAgICJjb21wb3NpdGUtbW9kZSIs
CisgICAgICAgICJkcm9wLXNoYWRvdyIsCisKKyAgICAgICAgImFscGhhIiwKKyAgICAgICAgImlt
YWdlLWludGVycG9sYXRpb24tcXVhbGl0eSIsCisgICAgICAgICJ0ZXh0LWRyYXdpbmctbW9kZSIs
CisKKyAgICAgICAgInNob3VsZC1hbnRpYWxpYXMiLAorICAgICAgICAic2hvdWxkLXNtb290aC1m
b250cyIsCisgICAgICAgICJzaG91bGQtc3VicGl4ZWwtcXVhbnRpemUtZm9udHMiLAorICAgICAg
ICAic2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsCisgICAgICAgICJkcmF3LWx1bWluYW5jZS1t
YXNrIgorI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgICwgInVzZS1kYXJr
LWFwcGVhcmFuY2UiCisjZW5kaWYKKyAgICB9OworCisgICAgdW5zaWduZWQgbWFzayA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjaGFuZ2UpOworICAgIEFTU0VSVCghKChtYXNrIC0gMSkgJiBtYXNr
KSk7CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9n
MihtYXNrKSk7CisgICAgcmV0dXJuIHN0YXRlQ2hhbmdlTmFtZXNbaW5kZXhdOworfQorCitUZXh0
U3RyZWFtJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QK
K3sKKyAgICBhdXRvIGR1bXAgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6KnByb3BlcnR5LCBjb25zdCBTdHJpbmcmIG5hbWUpIHsKKyAgICAgICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eShuYW1lLCB0aGlzLT4qcHJvcGVydHkpOworICAgIH07CisKKyAgICB0cy5kdW1wUHJvcGVydHko
ImNoYW5nZS1mbGFncyIsIG1fY2hhbmdlRmxhZ3MpOworCisgICAgZHVtcChDaGFuZ2U6OkNUTSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkNUTSkpOwor
CisgICAgZHVtcChDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hh
bmdlTmFtZShDaGFuZ2U6OkZpbGxCcnVzaCkpOworICAgIGR1bXAoQ2hhbmdlOjpGaWxsUnVsZSwg
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlLCAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpGaWxsUnVsZSkpOwor
CisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hh
bmdlTmFtZShDaGFuZ2U6OlN0cm9rZUJydXNoKSk7CisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZVRo
aWNrbmVzcywgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhp
Y2tuZXNzLCAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlN0cm9rZVRoaWNr
bmVzcykpOworICAgIGR1bXAoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICBz
dGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTdHJva2VTdHlsZSkpOworCisgICAgZHVtcChDaGFuZ2U6
OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
bGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6Okxp
bmVDYXApKTsKKyAgICBkdW1wKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZURhc2gpKTsKKyAgICBkdW1wKENoYW5nZTo6TGlu
ZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5l
Sm9pbiwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUpv
aW4pKTsKKyAgICBkdW1wKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgc3Rh
dGVDaGFuZ2VOYW1lKENoYW5nZTo6TWl0ZXJMaW1pdCkpOworCisgICAgZHVtcChDaGFuZ2U6OkNv
bXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY29t
cG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkNvbXBv
c2l0ZU1vZGUpKTsKKyAgICBkdW1wKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93LCAgICAgICAgICAgICAgICAg
ICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6RHJvcFNoYWRvdykpOworCisgICAgZHVtcChDaGFu
Z2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fYWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6
OkFscGhhKSk7CisgICAgZHVtcChDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAg
IHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKyAg
ICBkdW1wKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxk
QW50aWFsaWFzLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRB
bnRpYWxpYXMsICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkQW50
aWFsaWFzKSk7CisgICAgZHVtcChDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAg
IHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzKSk7CisgICAgZHVtcChD
aGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgIHN0YXRlQ2hhbmdlTmFtZShDaGFu
Z2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykpOworICAgIGR1bXAoQ2hhbmdlOjpTaGFk
b3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykpOworICAgIGR1bXAoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrLCAg
ICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaykpOwor
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgZHVtcChDaGFuZ2U6OlVzZURhcmtB
cHBlYXJhbmNlLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0Fw
cGVhcmFuY2UsICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlVzZURhcmtBcHBl
YXJhbmNlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UgY2hhbmdl
KQoreworICAgIHRzIDw8IHN0YXRlQ2hhbmdlTmFtZShjaGFuZ2UpOworICAgIHJldHVybiB0czsK
K30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiBzdGF0ZS5kdW1wKHRzKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZlNGNl
YTNjMmQ1OGM4N2I0OTIzODQ3NWU0NjhiNWRmZDVlZTNhMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmgKQEAg
LTAsMCArMSwzODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKyNpbmNsdWRl
ICJXaW5kUnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CitwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBDaGFuZ2UgOiB1aW50MzJfdCB7CisgICAgICAgIENUTSAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMCwKKworICAgICAgICBGaWxsQnJ1c2ggICAgICAgICAgICAgICAgICAg
PSAxIDw8IDEsCisgICAgICAgIEZpbGxSdWxlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwK
KworICAgICAgICBTdHJva2VCcnVzaCAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCisgICAgICAg
IFN0cm9rZVRoaWNrbmVzcyAgICAgICAgICAgICA9IDEgPDwgNCwKKyAgICAgICAgU3Ryb2tlU3R5
bGUgICAgICAgICAgICAgICAgID0gMSA8PCA1LAorCisgICAgICAgIExpbmVDYXAgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgNiwKKyAgICAgICAgTGluZURhc2ggICAgICAgICAgICAgICAgICAg
ID0gMSA8PCA3LAorICAgICAgICBMaW5lSm9pbiAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDgs
CisgICAgICAgIE1pdGVyTGltaXQgICAgICAgICAgICAgICAgICA9IDEgPDwgOSwKKworICAgICAg
ICBDb21wb3NpdGVNb2RlICAgICAgICAgICAgICAgPSAxIDw8IDEwLAorICAgICAgICBEcm9wU2hh
ZG93ICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAorCisgICAgICAgIEFscGhhICAgICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgMTIsCisgICAgICAgIEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkgICA9IDEgPDwgMTMsCisgICAgICAgIFRleHREcmF3aW5nTW9kZSAgICAgICAgICAgICA9IDEg
PDwgMTQsCisKKyAgICAgICAgU2hvdWxkQW50aWFsaWFzICAgICAgICAgICAgID0gMSA8PCAxNSwK
KyAgICAgICAgU2hvdWxkU21vb3RoRm9udHMgICAgICAgICAgID0gMSA8PCAxNiwKKyAgICAgICAg
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gMSA8PCAxNywKKyAgICAgICAgU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMgICAgID0gMSA8PCAxOCwKKyAgICAgICAgRHJhd0x1bWluYW5jZU1hc2sg
ICAgICAgICAgID0gMSA8PCAxOSwKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAg
ICAgICBVc2VEYXJrQXBwZWFyYW5jZSAgICAgICAgICAgPSAxIDw8IDIwLAorI2VuZGlmCisgICAg
fTsKKyAgICB1c2luZyBDaGFuZ2VGbGFncyA9IE9wdGlvblNldDxDaGFuZ2U+OworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBpbml0aWFsQ2hhbmdlRmxhZ3MgPSB7IENoYW5nZTo6
RmlsbEJydXNoLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcyB9
OworCisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcEJvdW5kcywgY29uc3QgQ2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0pOworCisgICAgV0VCQ09SRV9FWFBPUlQg
RmxvYXRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KSB7IG1fY2xpcEJvdW5kcy5pbnRlcnNlY3QobV9jdG0ubWFwUmVjdChyZWN0KSk7
IH0KKworICAgIENoYW5nZUZsYWdzIGNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZUZs
YWdzOyB9CisgICAgdm9pZCBkaWRBcHBseVN0YXRlQ2hhbmdlcygpIHsgbV9jaGFuZ2VGbGFncyA9
IHsgfTsgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3RtOyB9CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0sIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7
IHNldFByb3BlcnR5KENoYW5nZTo6Q1RNLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtLCBj
dG0sIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgZmlsbEJy
dXNoKCkgY29uc3QgeyByZXR1cm4gbV9maWxsQnJ1c2g7IH0KKyAgICB2b2lkIHNldEZpbGxDb2xv
cihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbEJydXNo
LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoLCB7IGNvbG9yIH0sIGxhc3RBcHBs
aWVkU3RhdGUpOyB9CisgICAgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdy
YWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fZmlsbEJy
dXNoLnNldEdyYWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hh
bmdlRmxhZ3MuYWRkKENoYW5nZTo6RmlsbEJydXNoKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRl
cm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSkgeyBtX2ZpbGxCcnVzaC5zZXRQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNl
VHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisKKyAg
ICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbFJ1bGU7IH0KKyAgICB2
b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFu
Z2U6OkZpbGxSdWxlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsIGZpbGxSdWxl
LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgY29uc3QgU291cmNlQnJ1c2gmIHN0cm9rZUJy
dXNoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCcnVzaDsgfQorICAgIHZvaWQgc2V0U3Ryb2tl
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29u
dGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9r
ZUJydXNoLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gsIHsgY29sb3IgfSwg
bGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFk
aWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkg
eyBtX3N0cm9rZUJydXNoLnNldEdyYWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5z
Zm9ybSk7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6U3Ryb2tlQnJ1c2gpOyB9CisgICAgdm9p
ZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9zdHJva2VCcnVzaC5zZXRQYXR0ZXJuKFdURk1v
dmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpT
dHJva2VCcnVzaCk7IH0KKworICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcygpIGNvbnN0IHsgcmV0
dXJuIG1fc3Ryb2tlVGhpY2tuZXNzOyB9CisgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxv
YXQgc3Ryb2tlVGhpY2tuZXNzLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVRoaWNr
bmVzcywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhp
Y2tuZXNzLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZVN0eWxlOyB9CisgICAgdm9pZCBzZXRTdHJva2VT
dHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGlj
c0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpT
dHJva2VTdHlsZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlLCBzdHJva2VT
dHlsZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZUNhcDsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXAsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGll
ZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZUNhcCwgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2xpbmVDYXAsIGxpbmVDYXAsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBjb25z
dCBMaW5lRGFzaCYgbGluZURhc2goKSBjb25zdCB7IHJldHVybiBtX2xpbmVEYXNoOyB9CisgICAg
dm9pZCBzZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVEYXNoLCBjb25zdCBzdGQ6Om9wdGlvbmFs
PEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShD
aGFuZ2U6OkxpbmVEYXNoLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gsIFdURk1v
dmUobGluZURhc2gpLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgTGluZUpvaW4gbGluZUpv
aW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9CisgICAgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbiBsaW5lSm9pbiwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpMaW5lSm9pbiwgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luLCBsaW5lSm9pbiwgbGFzdEFwcGxpZWRTdGF0
ZSk7IH0KKworICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVyTGlt
aXQ7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0
UHJvcGVydHkoQ2hhbmdlOjpNaXRlckxpbWl0LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0
ZXJMaW1pdCwgbWl0ZXJMaW1pdCwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBDb21w
b3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU1vZGU7
IH0KKyAgICB2b2lkIHNldENvbXBvc2l0ZU1vZGUoQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2Rl
LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRT
dGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCBjb21wb3NpdGVNb2RlLCBsYXN0QXBwbGllZFN0YXRl
KTsgfQorICAgIAorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJl
dHVybiBtX2Ryb3BTaGFkb3c7IH0KKyAgICB2b2lkIHNldERyb3BTaGFkb3coY29uc3QgRHJvcFNo
YWRvdyYgZHJvcFNoYWRvdywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpEcm9wU2hhZG93LCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdywgZHJvcFNoYWRvdywgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKworICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYTsg
fQorICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3Jh
cGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5n
ZTo6QWxwaGEsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgYWxwaGEsIGxhc3RBcHBs
aWVkU3RhdGUpOyB9CisgICAgCisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9u
UXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFu
Z2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBsYXN0
QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3
aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9CisgICAgdm9pZCBz
ZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0
ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSwgdGV4dERyYXdpbmdNb2RlLCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorCisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3No
b3VsZEFudGlhbGlhczsgfQorICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxk
QW50aWFsaWFzLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFz
dEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcywgc2hvdWxkQW50aWFsaWFzLCBs
YXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkU21vb3RoRm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFNtb290
aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhp
Y3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6
U2hvdWxkU21vb3RoRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhG
b250cywgc2hvdWxkU21vb3RoRm9udHMsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBib29s
IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5
KENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBzaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAg
IHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBs
aWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcywg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBib29sIGRy
YXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3THVtaW5hbmNlTWFzazsgfQor
ICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaywgY29u
c3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUp
IHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrLCBkcmF3THVtaW5hbmNlTWFzaywgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgYm9vbCB1
c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlRGFya0FwcGVhcmFuY2U7IH0K
KyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRl
KSB7IHNldFByb3BlcnR5KENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgdXNlRGFya0FwcGVhcmFuY2UsIGxhc3RBcHBs
aWVkU3RhdGUpOyB9CisjZW5kaWYKKworICAgIGJvb2wgaGFzT25seVByaW1pdGl2ZUNoYW5nZXMo
KSBjb25zdDsKKyAgICB2b2lkIG1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgb3RoZXIpOworICAgIHZvaWQgbWVyZ2VEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgb3RoZXIpOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBkdW1wKFdURjo6VGV4dFN0cmVhbSYp
IGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZXRQcm9wZXJ0eShDaGFuZ2UgY2hh
bmdlLCBUIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHksIGNvbnN0IFQmIHZhbHVlLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0
ZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLT4qcHJvcGVydHkgPT0gdmFsdWUpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IHZhbHVlOworICAgICAgICBt
X2NoYW5nZUZsYWdzLnNldChjaGFuZ2UsICFsYXN0QXBwbGllZFN0YXRlIHx8ICgqbGFzdEFwcGxp
ZWRTdGF0ZSkuKnByb3BlcnR5ICE9IHRoaXMtPipwcm9wZXJ0eSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQg
R3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgVCYmIHZhbHVlLCBjb25zdCBzdGQ6Om9w
dGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh0aGlzLT4qcHJvcGVydHkgPT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IFdURk1vdmUodmFsdWUpOworICAgICAgICBtX2No
YW5nZUZsYWdzLnNldChjaGFuZ2UsICFsYXN0QXBwbGllZFN0YXRlIHx8ICgqbGFzdEFwcGxpZWRT
dGF0ZSkuKnByb3BlcnR5ICE9IHRoaXMtPipwcm9wZXJ0eSk7CisgICAgfQorCisgICAgRmxvYXRS
ZWN0IG1fY2xpcEJvdW5kczsKKworICAgIENoYW5nZUZsYWdzIG1fY2hhbmdlRmxhZ3M7CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CisKKyAgICBTb3VyY2VCcnVzaCBtX2ZpbGxCcnVzaCB7
IENvbG9yOjpibGFjayB9OworICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGUgeyBXaW5kUnVsZTo6Tm9u
WmVybyB9OworCisgICAgU291cmNlQnJ1c2ggbV9zdHJva2VCcnVzaCB7IENvbG9yOjpibGFjayB9
OworICAgIGZsb2F0IG1fc3Ryb2tlVGhpY2tuZXNzIHsgMCB9OworICAgIFN0cm9rZVN0eWxlIG1f
c3Ryb2tlU3R5bGUgeyBTb2xpZFN0cm9rZSB9OworCisgICAgTGluZUNhcCBtX2xpbmVDYXAgeyBM
aW5lQ2FwOjpCdXR0IH07CisgICAgTGluZURhc2ggbV9saW5lRGFzaDsKKyAgICBMaW5lSm9pbiBt
X2xpbmVKb2luIHsgTGluZUpvaW46Ok1pdGVyIH07CisgICAgZmxvYXQgbV9taXRlckxpbWl0IHsg
MCB9OworCisgICAgQ29tcG9zaXRlTW9kZSBtX2NvbXBvc2l0ZU1vZGUgeyBDb21wb3NpdGVPcGVy
YXRvcjo6U291cmNlT3ZlciwgQmxlbmRNb2RlOjpOb3JtYWwgfTsKKyAgICBEcm9wU2hhZG93IG1f
ZHJvcFNoYWRvdzsKKworICAgIGZsb2F0IG1fYWxwaGEgeyAxIH07CisgICAgSW50ZXJwb2xhdGlv
blF1YWxpdHkgbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlvblF1YWxp
dHk6OkRlZmF1bHQgfTsKKyAgICBUZXh0RHJhd2luZ01vZGVGbGFncyBtX3RleHREcmF3aW5nTW9k
ZSB7IFRleHREcmF3aW5nTW9kZTo6RmlsbCB9OworCisgICAgYm9vbCBtX3Nob3VsZEFudGlhbGlh
cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxkU21vb3RoRm9udHMgeyB0cnVlIH07CisgICAg
Ym9vbCBtX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1f
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kcmF3THVtaW5h
bmNlTWFzayB7IGZhbHNlIH07CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBi
b29sIG1fdXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgYXV0byBlbmNvZGUgPSBbJl0oQ2hhbmdlIGNoYW5n
ZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHRo
aXMtPipwcm9wZXJ0eTsKKyAgICB9OworCisgICAgZW5jb2RlciA8PCBtX2NsaXBCb3VuZHM7CisK
KyAgICBlbmNvZGVyIDw8IG1fY2hhbmdlRmxhZ3M7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpDVE0s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3Rt
KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAgIGVuY29kZShDaGFuZ2U6
OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9maWxsUnVsZSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIGVu
Y29kZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpOworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9r
ZVN0eWxlLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJv
a2VTdHlsZSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCk7CisgICAgZW5jb2RlKENo
YW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2xpbmVEYXNoKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIGVu
Y29kZShDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkNvbXBvc2l0
ZU1vZGUsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3Np
dGVNb2RlKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBlbmNvZGUo
Q2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fYWxwaGEpOworICAgIGVuY29kZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHksICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIGVu
Y29kZShDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMpOworICAgIGVuY29kZShDaGFuZ2U6OlNob3Vs
ZFNtb290aEZvbnRzLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91
bGRTbW9vdGhGb250cyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzLCAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsK
KyAgICBlbmNvZGUoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCisgICAgZW5jb2RlKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsK
KyNlbmRpZgorfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxHcmFw
aGljc0NvbnRleHRTdGF0ZT4gR3JhcGhpY3NDb250ZXh0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIGF1dG8gZGVjb2RlID0gWyZdKEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5
KSB7CisgICAgICAgIGlmICghc3RhdGUubV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgdXNpbmcgUHJvcGVydHlUeXBlID0g
dHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxHcmFw
aGljc0NvbnRleHRTdGF0ZT4oKS4qcHJvcGVydHkpPjo6dHlwZTsKKyAgICAgICAgc3RkOjpvcHRp
b25hbDxQcm9wZXJ0eVR5cGU+IHZhbHVlOworICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAg
ICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN0
YXRlLipwcm9wZXJ0eSA9ICp2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKwor
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBjbGlwQm91bmRzOworICAgIGRlY29kZXIgPj4g
Y2xpcEJvdW5kczsKKyAgICBpZiAoIWNsaXBCb3VuZHMpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKKyAg
ICBkZWNvZGVyID4+IGNoYW5nZUZsYWdzOworICAgIGlmICghY2hhbmdlRmxhZ3MpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZSgq
Y2xpcEJvdW5kcywgKmNoYW5nZUZsYWdzKTsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFu
Z2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2N0bSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShz
dGF0ZSwgQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9maWxsQnJ1c2gpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdl
OjpTdHJva2VUaGlja25lc3MsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9z
dHJva2VUaGlja25lc3MpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICgh
ZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXApKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVE
YXNoLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNo
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9saW5lSm9pbikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFk
ZWNvZGUoc3RhdGUsIENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpE
cm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9w
U2hhZG93KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rl
KHN0YXRlLCBDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2FscGhhKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBp
ZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpU
ZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0
RHJhd2luZ01vZGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFk
ZWNvZGUoc3RhdGUsIENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250
cywgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cykp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENo
YW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNm
b3JtcywgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUs
IENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fZHJhd0x1bWluYW5jZU1hc2spKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENo
YW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fdXNlRGFya0FwcGVhcmFuY2UpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworI2Vu
ZGlmCisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UpOworVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlPiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6Q1RNLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OkZpbGxCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6RmlsbFJ1bGUsCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGUsCisKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcCwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2gsCisgICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luLAorICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0LAorCisgICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsCisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRyb3BTaGFkb3cs
CisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGEs
CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHksCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsCisgICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLAorICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaworI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCisgICAgICAgICwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6VXNlRGFya0FwcGVhcmFuY2UKKyNlbmRpZgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzIxMzI4NTI2MWU2OTBj
YTMwNjBkN2UwMjZlNTBlNTJlZWE1OTBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCkBAIC0wLDAg
KzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBi
b29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkK
KyAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwor
ICAgIH0KKyAgICAKKyAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcigpCisgICAgeworICAg
ICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5yZXN0b3Jl
KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2F2ZSgpCisgICAgeworICAgICAgICBBU1NFUlQo
IW1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOworICAgICAgICBt
X3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmUoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAgICBtX2NvbnRleHQu
cmVzdG9yZSgpOworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAg
IAorICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX2NvbnRl
eHQ7IH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBi
b29sIG1fc2F2ZUFuZFJlc3RvcmU7Cit9OworCitjbGFzcyBUcmFuc3BhcmVuY3lMYXllclNjb3Bl
IHsKK3B1YmxpYzoKKyAgICBUcmFuc3BhcmVuY3lMYXllclNjb3BlKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgZmxvYXQgYWxwaGEsIGJvb2wgYmVnaW5MYXllciA9IHRydWUpCisgICAgICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9hbHBoYShhbHBoYSkKKyAgICAgICAgLCBt
X2JlZ2FuTGF5ZXIoYmVnaW5MYXllcikKKyAgICB7CisgICAgICAgIGlmIChiZWdpbkxheWVyKQor
ICAgICAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYmVnaW5MYXllcihmbG9hdCBhbHBoYSkKKyAgICB7CisgICAg
ICAgIG1fYWxwaGEgPSBhbHBoYTsKKyAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIobV9hbHBoYSk7CisgICAgICAgIG1fYmVnYW5MYXllciA9IHRydWU7CisgICAgfQorICAg
IAorICAgIH5UcmFuc3BhcmVuY3lMYXllclNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2Jl
Z2FuTGF5ZXIpCisgICAgICAgICAgICBtX2NvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CisgICAg
ZmxvYXQgbV9hbHBoYTsKKyAgICBib29sIG1fYmVnYW5MYXllcjsKK307CisKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVN0YWNrQ2hlY2tlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCisgICAgICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9zdGFja1NpemUoY29udGV4dC5zdGFja1Np
emUoKSkKKyAgICB7IH0KKworICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigp
CisgICAgeworICAgICAgICBpZiAobV9jb250ZXh0LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXpl
KQorICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hh
bmdlZCBieSAlZCIsICZtX2NvbnRleHQsIChpbnQpbV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGlu
dCltX3N0YWNrU2l6ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYg
bV9jb250ZXh0OworICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOworfTsKKworY2xhc3MgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgICAg
IDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQorICAgICAgICAsIG1fY3VycmVu
dEludGVycG9sYXRpb25RdWFsaXR5KGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KCkpCisgICAgICAgICwgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJw
b2xhdGlvblF1YWxpdHlUb1VzZSAhPSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBt
X2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNl
KQorICAgIHsKKyAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQorICAg
ICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBJbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5
KQorICAgICAgICA6IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRl
eHQsIGludGVycG9sYXRpb25RdWFsaXR5ID8gaW50ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6
IGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCisgICAgeworICAg
IH0KKworICAgIH5JbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQorICAgICAgICAgICAgbV9ncmFw
aGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBv
bGF0aW9uUXVhbGl0eSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYg
bV9ncmFwaGljc0NvbnRleHQ7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50
ZXJwb2xhdGlvblF1YWxpdHk7CisgICAgYm9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdl
ZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKaW5kZXggMTVkZjFkZmRiNmYzYTE2
YWQ1ZWFmNjQ3MjYxZmNmYzRiN2E5M2FiNC4uNjJmOWY0NjRjM2Q2ZDlkNWEwOWNhNWE0YjdiZDhh
MTAzNjE1OTFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5jcHAKQEAgLTEyNiwyNyArMTI2LDUxIEBAIFN0cmluZyBibGVuZE1vZGVO
YW1lKEJsZW5kTW9kZSBibGVuZE9wKQogICAgIHJldHVybiBibGVuZE9wZXJhdG9yTmFtZXNbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGJsZW5kT3ApIC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEJsZW5k
TW9kZTo6Tm9ybWFsKV07CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgcmV0dXJuIHRzIDw8IGJsZW5kTW9kZU5h
bWUoYmxlbmRNb2RlKTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2RlKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y29tcG9zaXRlLW9wZXJhdGlvbiIsIGNvbXBvc2l0ZU1vZGUub3BlcmF0aW9uKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBjb21wb3NpdGVNb2RlLmJsZW5kTW9kZSk7CisgICAg
cmV0dXJuIHRzOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBD
b21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAgICByZXR1cm4gdHMgPDwgY29tcG9zaXRlT3BlcmF0
b3JOYW1lKG9wLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIEJsZW5kTW9kZSBibGVuZE1vZGUpCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KQogewot
ICAgIHJldHVybiB0cyA8PCBibGVuZE1vZGVOYW1lKGJsZW5kTW9kZSk7CisgICAgdHMuZHVtcFBy
b3BlcnR5KCJzaGFkb3ctb2Zmc2V0IiwgZHJvcFNoYWRvdy5vZmZzZXQpOworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic2hhZG93LWJsdXIiLCBkcm9wU2hhZG93LmJsdXJSYWRpdXMpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2hhZG93LWNvbG9yIiwgZHJvcFNoYWRvdy5jb2xvcik7CisgICAgdHMuZHVt
cFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgZHJvcFNoYWRvdy5yYWRpdXNN
b2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgcmV0dXJuIHRzOwogfQogCi1U
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBXaW5kUnVsZSBydWxlKQorVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSW50ZXJwb2xhdGlvblF1YWxpdHkg
aW50ZXJwb2xhdGlvblF1YWxpdHkpCiB7Ci0gICAgc3dpdGNoIChydWxlKSB7Ci0gICAgY2FzZSBX
aW5kUnVsZTo6Tm9uWmVybzoKLSAgICAgICAgdHMgPDwgIk5PTi1aRVJPIjsKKyAgICBzd2l0Y2gg
KGludGVycG9sYXRpb25RdWFsaXR5KSB7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6
RGVmYXVsdDoKKyAgICAgICAgdHMgPDwgIkRFRkFVTFQiOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIFdpbmRSdWxlOjpFdmVuT2RkOgotICAgICAgICB0cyA8PCAiRVZFTi1PREQiOworICAgIGNh
c2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6CisgICAgICAgIHRzIDw8
ICJETy1OT1QtSU5URVJQT0xBVEUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVycG9s
YXRpb25RdWFsaXR5OjpMb3c6CisgICAgICAgIHRzIDw8ICJMT1ciOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgIHRzIDw8ICJN
RURJVU0iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpI
aWdoOgorICAgICAgICB0cyA8PCAiSEVJR0giOwogICAgICAgICBicmVhazsKICAgICB9Ci0KICAg
ICByZXR1cm4gdHM7CiB9CiAKQEAgLTE2Niw2ICsxOTAsMTEgQEAgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUNhcCBjYXBTdHlsZSkKICAgICByZXR1cm4gdHM7CiB9
CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVEYXNoKQorewor
ICAgIHJldHVybiB0czsKK30KKwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgTGluZUpvaW4gam9pblN0eWxlKQogewogICAgIHN3aXRjaCAoam9pblN0eWxlKSB7CkBAIC0x
ODIsNCArMjExLDU2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExp
bmVKb2luIGpvaW5TdHlsZSkKICAgICByZXR1cm4gdHM7CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQoreworICAgIHN3
aXRjaCAoc3Ryb2tlU3R5bGUpIHsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpOb1N0cm9rZToKKyAg
ICAgICAgdHMgPDwgIk5PLVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tl
U3R5bGU6OlNvbGlkU3Ryb2tlOgorICAgICAgICB0cyA8PCAiU09MSUQtU1RST0tFIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlOgorICAgICAgICB0
cyA8PCAiRE9UVEVELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5
bGU6OkRhc2hlZFN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRBU0hFRC1TVFJPS0UiOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpEb3VibGVTdHJva2U6CisgICAgICAgIHRz
IDw8ICJET1VCTEUtU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHls
ZTo6V2F2eVN0cm9rZToKKyAgICAgICAgdHMgPDwgIldBVlktU1RST0tFIjsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgVGV4dERyYXdpbmdNb2RlIHRleHREcmF3aW5nTW9kZSkKK3sKKyAgICBz
d2l0Y2ggKHRleHREcmF3aW5nTW9kZSkgeworICAgIGNhc2UgVGV4dERyYXdpbmdNb2RlOjpGaWxs
OgorICAgICAgICB0cyA8PCAiRklMTCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dERy
YXdpbmdNb2RlOjpTdHJva2U6CisgICAgICAgIHRzIDw8ICJTVFJPS0UiOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBXaW5kUnVsZSBydWxlKQoreworICAgIHN3aXRjaCAocnVsZSkgeworICAg
IGNhc2UgV2luZFJ1bGU6Ok5vblplcm86CisgICAgICAgIHRzIDw8ICJOT04tWkVSTyI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2luZFJ1bGU6OkV2ZW5PZGQ6CisgICAgICAgIHRzIDw8ICJF
VkVOLU9ERCI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0czsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4IDRkMjA0ZTk3ZTVjNTQ0ZDc3NmJmYTdmMzBhYWNj
MWI3YzQ2M2UwZTAuLjBmOGIyZDAyNzU1YmZhZWM2NWQ5NWMwNGYyYzQ1YjUyNDk0ZjI2MzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgK
QEAgLTI1LDYgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb2xvci5oIgor
I2luY2x1ZGUgIkRhc2hBcnJheS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUg
IldpbmRSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgpAQCAtNzMsNiArNzYsNzkgQEAgZW51bSBjbGFzcyBCbGVuZE1vZGUgOiB1aW50
OF90IHsKICAgICBQbHVzTGlnaHRlcgogfTsKIAorc3RydWN0IENvbXBvc2l0ZU1vZGUgeworICAg
IENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbjsKKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlOwor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbXBvc2l0ZU1vZGUmIG90aGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbiA9PSBvdGhlci5vcGVyYXRpb24gJiYgYmxlbmRNb2Rl
ID09IG90aGVyLmJsZW5kTW9kZTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU1vZGU+IGRlY29kZShEZWNvZGVy
Jik7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBDb21wb3NpdGVNb2RlOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG9wZXJhdGlv
bjsKKyAgICBlbmNvZGVyIDw8IGJsZW5kTW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KK3N0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gQ29tcG9zaXRlTW9kZTo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4g
b3BlcmF0aW9uOworICAgIGRlY29kZXIgPj4gb3BlcmF0aW9uOworICAgIGlmICghb3BlcmF0aW9u
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxCbGVu
ZE1vZGU+IGJsZW5kTW9kZTsKKyAgICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKKyAgICBpZiAoIWJs
ZW5kTW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsg
Km9wZXJhdGlvbiwgKmJsZW5kTW9kZSB9IH07Cit9CisKK3N0cnVjdCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSB7CisgICAgZW51bSBjbGFzcyBNb2RlIDogdWludDhfdCB7CisgICAgICAgIFRleHRD
aGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMsCisgICAgICAgIFNwZWxsaW5n
LAorICAgICAgICBHcmFtbWFyLAorICAgICAgICBBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAor
ICAgICAgICBEaWN0YXRpb25BbHRlcm5hdGl2ZXMKKyAgICB9IG1vZGU7CisgICAgYm9vbCBzaG91
bGRVc2VEYXJrQXBwZWFyYW5jZSB7IGZhbHNlIH07CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IGRlY29k
ZShEZWNvZGVyJik7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
ZW5jb2RlciA8PCBtb2RlOworICAgIGVuY29kZXIgPDwgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFy
a2VyTGluZVN0eWxlPiBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxNb2RlPiBtb2RlOworICAgIGRlY29kZXIgPj4g
bW9kZTsKKyAgICBpZiAoIW1vZGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOworICAgIGRlY29k
ZXIgPj4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7CisgICAgaWYgKCFzaG91bGRVc2VEYXJrQXBw
ZWFyYW5jZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsg
Km1vZGUsICpzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9IH07Cit9CisKIGVudW0gY2xhc3MgR3Jh
ZGllbnRTcHJlYWRNZXRob2QgOiB1aW50OF90IHsKICAgICBQYWQsCiAgICAgUmVmbGVjdCwKQEAg
LTkzLDYgKzE2OSw0MiBAQCBlbnVtIGNsYXNzIExpbmVDYXAgOiB1aW50OF90IHsKICAgICBTcXVh
cmUKIH07CiAKK3N0cnVjdCBMaW5lRGFzaCB7CisgICAgRGFzaEFycmF5IGRhc2hlczsKKyAgICBm
bG9hdCBvZmZzZXQ7CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOworfTsKKworaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBMaW5lRGFzaCYgYSwgY29uc3QgTGluZURhc2gmIGIpCit7Cisg
ICAgcmV0dXJuIGEuZGFzaGVzID09IGIuZGFzaGVzICYmIGEub2Zmc2V0ID09IGIub2Zmc2V0Owor
fQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBMaW5lRGFzaDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBkYXNoZXM7CisgICAgZW5jb2Rl
ciA8PCBvZmZzZXQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFs
PExpbmVEYXNoPiBMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3Rk
OjpvcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hlczsKKyAgICBkZWNvZGVyID4+IGRhc2hlczsKKyAg
ICBpZiAoIWRhc2hlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6
b3B0aW9uYWw8ZmxvYXQ+IG9mZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAo
IW9mZnNldCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsg
V1RGTW92ZSgqZGFzaGVzKSwgKm9mZnNldCB9IH07Cit9CisKIGVudW0gY2xhc3MgTGluZUpvaW4g
OiB1aW50OF90IHsKICAgICBNaXRlciwKICAgICBSb3VuZCwKQEAgLTEwNSw2ICsyMTcsNzYgQEAg
ZW51bSBIb3Jpem9udGFsQWxpZ25tZW50IHsKICAgICBBbGlnbkhDZW50ZXIKIH07CiAKKy8vIExl
Z2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMgdXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1i
b3gtc2hhZG93LgorLy8gSXQgaGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHgu
CitlbnVtIGNsYXNzIFNoYWRvd1JhZGl1c01vZGUgOiBib29sIHsKKyAgICBEZWZhdWx0LAorICAg
IExlZ2FjeQorfTsKKworc3RydWN0IERyb3BTaGFkb3cgeworICAgIEZsb2F0U2l6ZSBvZmZzZXQ7
CisgICAgZmxvYXQgYmx1clJhZGl1cyB7IDAgfTsKKyAgICBDb2xvciBjb2xvcjsKKyAgICBTaGFk
b3dSYWRpdXNNb2RlIHJhZGl1c01vZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07Cisg
ICAgCisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBjb2xvci5pc1Zpc2libGUo
KTsgfQorICAgIGJvb2wgaXNCbHVycmVkKCkgY29uc3QgeyByZXR1cm4gaXNWaXNpYmxlKCkgJiYg
Ymx1clJhZGl1czsgfQorICAgIGJvb2wgaGFzT3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIGlzQmx1
cnJlZCgpIHx8IChpc1Zpc2libGUoKSAmJiAhb2Zmc2V0LmlzWmVybygpKTsgfQorICAgIAorICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEcm9wU2hhZG93
PiBkZWNvZGUoRGVjb2RlciYpOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBE
cm9wU2hhZG93JiBhLCBjb25zdCBEcm9wU2hhZG93JiBiKQoreworICAgIHJldHVybiBhLm9mZnNl
dCA9PSBiLm9mZnNldCAmJiBhLmJsdXJSYWRpdXMgPT0gYi5ibHVyUmFkaXVzICYmIGEuY29sb3Ig
PT0gYi5jb2xvciAmJiBhLnJhZGl1c01vZGUgPT0gYi5yYWRpdXNNb2RlOworfQorCit0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBEcm9wU2hhZG93OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsKKyAgICBlbmNvZGVyIDw8IGJsdXJS
YWRpdXM7CisgICAgZW5jb2RlciA8PCBjb2xvcjsKKyAgICBlbmNvZGVyIDw8IHJhZGl1c01vZGU7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+
IERyb3BTaGFkb3c6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRTaXplPiBvZmZzZXQ7CisgICAgZGVjb2RlciA+PiBvZmZzZXQ7CisgICAgaWYgKCFv
ZmZzZXQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PGZsb2F0PiBibHVyUmFkaXVzOworICAgIGRlY29kZXIgPj4gYmx1clJhZGl1czsKKyAgICBpZiAo
IWJsdXJSYWRpdXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29s
b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFNo
YWRvd1JhZGl1c01vZGU+IHJhZGl1c01vZGU7CisgICAgZGVjb2RlciA+PiByYWRpdXNNb2RlOwor
ICAgIGlmICghcmFkaXVzTW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHJldHVybiB7IHsgKm9mZnNldCwgKmJsdXJSYWRpdXMsICpjb2xvciwgKnJhZGl1c01vZGUgfSB9
OworfQorCitlbnVtIFN0cm9rZVN0eWxlIHsKKyAgICBOb1N0cm9rZSwKKyAgICBTb2xpZFN0cm9r
ZSwKKyAgICBEb3R0ZWRTdHJva2UsCisgICAgRGFzaGVkU3Ryb2tlLAorICAgIERvdWJsZVN0cm9r
ZSwKKyAgICBXYXZ5U3Ryb2tlLAorfTsKKwogZW51bSBUZXh0QmFzZWxpbmUgewogICAgIEFscGhh
YmV0aWNUZXh0QmFzZWxpbmUsCiAgICAgVG9wVGV4dEJhc2VsaW5lLApAQCAtMTIyLDE2ICszMDQs
MjkgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9OwogCi1TdHJpbmcg
Y29tcG9zaXRlT3BlcmF0b3JOYW1lKFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3Jl
OjpCbGVuZE1vZGUpOwotU3RyaW5nIGJsZW5kTW9kZU5hbWUoV2ViQ29yZTo6QmxlbmRNb2RlKTsK
LWJvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7
Ci1ib29sIHBhcnNlQ29tcG9zaXRlQW5kQmxlbmRPcGVyYXRvcihjb25zdCBTdHJpbmcmLCBXZWJD
b3JlOjpDb21wb3NpdGVPcGVyYXRvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSYpOworZW51bSBjbGFz
cyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKKyAgICBGaWxsID0gMSA8PCAwLAorICAgIFN0
cm9rZSA9IDEgPDwgMSwKK307CiAKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwotV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNv
cmU6OkNvbXBvc2l0ZU9wZXJhdG9yKTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXaW5kUnVsZSk7Cit1c2luZyBUZXh0RHJhd2lu
Z01vZGVGbGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OworCitTdHJpbmcgY29tcG9z
aXRlT3BlcmF0b3JOYW1lKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworU3RyaW5nIGJs
ZW5kTW9kZU5hbWUoQmxlbmRNb2RlKTsKK2Jvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5n
JiwgQmxlbmRNb2RlJik7Citib29sIHBhcnNlQ29tcG9zaXRlQW5kQmxlbmRPcGVyYXRvcihjb25z
dCBTdHJpbmcmLCBDb21wb3NpdGVPcGVyYXRvciYsIEJsZW5kTW9kZSYpOworCitXRUJDT1JFX0VY
UE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQmxlbmRN
b2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBDb21wb3NpdGVPcGVyYXRvcik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29tcG9zaXRlTW9kZSk7CitXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgRHJvcFNoYWRvdyYpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEludGVycG9sYXRpb25RdWFsaXR5KTsKIFdFQkNPUkVf
RVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5l
Q2FwKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBMaW5lRGFzaCk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUpvaW4pOworV0VCQ09SRV9FWFBPUlQgV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFN0cm9rZVN0eWxlKTsK
K1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBUZXh0RHJhd2luZ01vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCkBAIC0yMTksNCArNDE0LDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6TGluZUpvaW4+IHsKICAgICA+OwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCisgICAgV2ViQ29yZTo6U3Ryb2tl
U3R5bGU6Ok5vU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwK
KyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0
cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJs
ZVN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQorICAgID47Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9k
ZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlRl
eHREcmF3aW5nTW9kZSwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAor
ICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQorICAgID47Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpNb2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVy
bmF0aXZlcywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3Bl
bGxpbmcsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1t
YXIsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3Jy
ZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlcworICAgID47Cit9OworCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVk
SW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IDRlMDcxZjcyZjM1YmU4YTU4ZmM0
Y2Q1NzdhMTQ1NmRlMTc0NjY4MmMuLjQxYjA1MTFhOGY3OGExNzliMzA0Y2Y4OWQ0MTAzZTM1ZGUz
ZTEyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVk
SW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcApAQCAtNDQsNyArNDQsNyBAQCBJbWFn
ZURyYXdSZXN1bHQgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRgogewogI2lmIFVTRShORVdfVEhFTUUpIHx8IFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRl
eHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3Np
dGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgp
IH0pOwogICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZShk
c3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNp
emUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxH
cmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxH
cmFwaGljc0NvbnRleHQuaAppbmRleCBiNjIzNjc4ODBlM2U1MzU0YjYxNzExMzQ3YzlhMTFiNDIy
NDY4ODVlLi5kNjdkM2VhMTE1ZDI0ZWZkOTA5ZTAzYWM5YWRlOTNhOGI0NzY0ZmM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29u
dGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM4LDg3ICszOCw1NyBAQCBwdWJsaWM6CiAgICAgICAgIERldGVjdGluZ0NvbnRlbnRm
dWxQYWludAogICAgIH07CiAKLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0
aW9uUmVhc29ucyByZWFzb25zKQotICAgICAgICA6IG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
KHJlYXNvbnMpCisgICAgTnVsbEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgcmVhc29ucykKKyAgICAgICAgOiBHcmFw
aGljc0NvbnRleHQoaW5pdGlhbENsaXApCisgICAgICAgICwgbV9wYWludEludmFsaWRhdGlvblJl
YXNvbnMocmVhc29ucykKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFVTRShDRykKLSAg
ICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9Ci0gICAgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotCiAg
ICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIGJvb2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpOb25lOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsgfQogICAgIGJvb2wgaW52YWxpZGF0
aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0
aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlczsgfQogICAgIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1
bFBhaW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMg
PT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQ7IH0K
IAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWwgeyB9Ci0KLSNpZiBV
U0UoQ0cpCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbCB7IH0K
LSNlbmRpZgotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2Uo
U3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH07Ci0KLSAgICB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9Ci0KLSAgICBJbnRS
ZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KLQorICAgIHZvaWQg
c2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorICAgIHZvaWQg
YXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbCB7IH07CiAjaWYgVVNFKENHKQogICAgIHZvaWQgYXBw
bHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAjZW5k
aWYKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgPSAxKSBmaW5h
bCB7IH0KLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JikgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbCB7IH0KLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KLSAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLSAg
ICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQotICAg
IHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQp
IGZpbmFsIHsgfQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWwgeyByZXR1cm4g
cmVjdDsgfQotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBT
b2xpZFN0cm9rZSkgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFs
IHsgfQotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZpbmFs
IHsgfQotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsIHsgfQotICAgIHZvaWQg
c2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsIHsg
fQotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIHRyYW5zbGF0ZShm
bG9hdCwgZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIGZpbmFsIHsgfQotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNj
YWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsg
fTsgfQotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAg
IHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsIHsgfQorCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRS
dWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQogICAgIHZvaWQgY2xpcE91dChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNhdmUoKSBmaW5hbCB7IH0KLSAgICB2
b2lkIHJlc3RvcmUoKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAg
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQogCi0gICAg
RmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0g
c3RkOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBG
b250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSos
IHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsg
fQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsg
fQogCi0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVk
ID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQpIGZpbmFsIHsgfQot
ICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
ID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWwgeyB9CisgICAg
dm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZp
bGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICAKKyAgICB2b2lkIHN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
KSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KIAotICAg
IEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50
YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5v
dGhpbmc7IH0KKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5h
bCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JikgZmluYWwgeyB9CiAKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBm
aW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KLSAgICBJbWFnZURy
YXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxl
UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IHJldHVybiBJ
bWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZp
bmFsIHsgfQogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQogICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsg
fQpAQCAtMTI3LDI4ICs5NywyNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmlu
YWwgeyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZl
cihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotCi0gICAgdm9pZCBj
bGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZv
aWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7IH0K
LSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRp
ZW50JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1h
bCkgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmlu
YWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLQorICAg
IHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRS
ZWN0JiwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQg
cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwg
eyB9CiAjZW5kaWYKIAorICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25z
dCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYs
IGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUp
IGZpbmFsIHsgfQorCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVy
biByZWN0OyB9CisKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQogICAgIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLXByaXZhdGU6CiAgICAgY29uc3Qg
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43ZTAxZmQzOTQ2NDMzOWQyZDRkNTRiYTkzNjRjNTk0NWNmYWQ3ZDVhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oV0lO
KQorI2luY2x1ZGUgIkRJQlBpeGVsRGF0YS5oIgordHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsK
KyNpZiAhVVNFKENHKQorLy8gVUludDggaXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJh
c2UuaAordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OworI2VuZGlmCisjZW5kaWYKKworI2lm
IFVTRShDRykKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gc3RydWN0IENHQ29udGV4
dDsKKyNlbGlmIFVTRShDQUlSTykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dENhaXJvOworfQordXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCA9IHZvaWQ7CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggYmIxMzhiNTI5N2E1MjFmYmY3ZDY5M2NkMTE0MTA0NDAw
ZmNhYmM0ZS4uOTAyNGY1ZDFhYmZjZTM4MDgxODNhM2IyMzFmYmNlMGZmYjJmZjQxNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTE5
MSwxNyArMTkxLDE3IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiBy
YWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDCiAgICAgdXBkYXRlU2hhZG93
Qmx1clZhbHVlcygpOwogfQogCi1TaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6IG1fY29sb3Ioc3RhdGUuc2hhZG93Q29sb3IpCi0g
ICAgLCBtX2JsdXJSYWRpdXMoc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Qmx1cikKLSAg
ICAsIG1fb2Zmc2V0KHN0YXRlLnNoYWRvd09mZnNldCkKLSAgICAsIG1fc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCitTaGFkb3dCbHVyOjpTaGFk
b3dCbHVyKGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3csIGJvb2wgc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpCisgICAgOiBtX2NvbG9yKGRyb3BTaGFkb3cuY29sb3IpCisgICAgLCBtX2JsdXJS
YWRpdXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVzLCBkcm9wU2hhZG93LmJsdXJSYWRpdXMpCisgICAg
LCBtX29mZnNldChkcm9wU2hhZG93Lm9mZnNldCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCiB7CiAjaWYgVVNFKENHKQogICAgIC8vIENv
cmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4
ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNl
cnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93
LgotICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSkgewotICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMo
c3RhdGUuc2hhZG93Qmx1cik7CisgICAgaWYgKGRyb3BTaGFkb3cucmFkaXVzTW9kZSA9PSBTaGFk
b3dSYWRpdXNNb2RlOjpMZWdhY3kpIHsKKyAgICAgICAgZmxvYXQgc2hhZG93Qmx1ciA9IHJhZGl1
c1RvTGVnYWN5UmFkaXVzKGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CiAgICAgICAgIG1fYmx1clJh
ZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAppbmRleCAx
NGZkODNlZGUxYTFiYWNmMTc3ZjMzMWVjYWQxYTQzMDI5M2Y2MDNhLi40NWQwZTU4MzI5Y2RlZWFi
ZmI3OGE0ZDVlNjdhYjhkODgxYWU1NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5oCkBAIC0zOCw4ICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owotc3Ry
dWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGU7CiBj
bGFzcyBJbWFnZUJ1ZmZlcjsKK3N0cnVjdCBEcm9wU2hhZG93OwogCiBjbGFzcyBTaGFkb3dCbHVy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFkb3dCbHVyKTsKQEAgLTUyLDcgKzUzLDcg
QEAgcHVibGljOgogCiAgICAgU2hhZG93Qmx1cigpOwogICAgIFNoYWRvd0JsdXIoY29uc3QgRmxv
YXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYsIGJv
b2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7Ci0gICAgU2hhZG93Qmx1cihjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIFNoYWRvd0JsdXIoY29uc3QgRHJvcFNoYWRv
dyYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAKICAgICB2b2lkIHNl
dFNoYWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmICwgY29uc3Qg
Q29sb3ImLCBib29sIGlnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzZh
YzEzZmQyNWM2ZjBmODAxNTg3MmZmMTllZDI4YTFmYTUyYmQ3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUJydXNoLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKGNvbnN0IENvbG9yJiBjb2xv
ciwgc3RkOjpvcHRpb25hbDxCcnVzaD4mJiBicnVzaCkKKyAgICA6IG1fY29sb3IoY29sb3IpCisg
ICAgLCBtX2JydXNoKFdURk1vdmUoYnJ1c2gpKQoreworfQorCitjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIFNvdXJjZUJydXNoOjpzcGFjZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEFmZmluZVRyYW5zZm9ybT4gaWRlbnRpdHk7CisgICAgcmV0dXJuIG1fYnJ1
c2ggPyBtX2JydXNoLT5zcGFjZVRyYW5zZm9ybSA6IGlkZW50aXR5LmdldCgpOworfQorCitHcmFk
aWVudCogU291cmNlQnJ1c2g6OmdyYWRpZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvKiBncmFkaWVudCA9IHN0ZDo6
Z2V0X2lmPFJlZjxHcmFkaWVudD4+KCZtX2JydXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBn
cmFkaWVudC0+cHRyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1BhdHRlcm4qIFNvdXJj
ZUJydXNoOjpwYXR0ZXJuKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGlmIChhdXRvKiBwYXR0ZXJuID0gc3RkOjpnZXRfaWY8UmVmPFBh
dHRlcm4+PigmbV9icnVzaC0+YnJ1c2gpKQorICAgICAgICByZXR1cm4gcGF0dGVybi0+cHRyKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgU291cmNlQnJ1c2g6OnNldEdyYWRpZW50
KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSkKK3sKKyAgICBtX2JydXNoID0geyBXVEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFu
c2Zvcm0gfTsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0UGF0dGVybihSZWY8UGF0dGVybj4m
JiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQoreworICAg
IG1fYnJ1c2ggPSB7IFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtIH07Cit9CisKK1dU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU291cmNlQnJ1
c2gmIGJydXNoKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBicnVzaC5jb2xvcigp
KTsKKworICAgIGlmIChhdXRvIGdyYWRpZW50ID0gYnJ1c2guZ3JhZGllbnQoKSkKKyAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJncmFkaWVudCIsIGdyYWRpZW50KTsKKworICAgIGlmIChhdXRvIHBh
dHRlcm4gPSBicnVzaC5wYXR0ZXJuKCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVy
biIsIHBhdHRlcm4pOworCisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
cnVzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MTEwZjIxZmRiZWFjYmYzNWQ3ODkwYzc4ZjczOTk3OTY0YWRmZWExCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1
c2guaApAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVk
ZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgU291cmNlQnJ1c2ggeworcHVibGljOgorICAgIHN0cnVjdCBCcnVzaCB7Cisg
ICAgICAgIHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0dGVybj4+IGJydXNoOwor
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gc3BhY2VUcmFuc2Zvcm07CisKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxCcnVzaD4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICB9OworCisgICAgU291cmNlQnJ1c2goKSA9IGRlZmF1bHQ7
CisgICAgV0VCQ09SRV9FWFBPUlQgU291cmNlQnJ1c2goY29uc3QgQ29sb3ImLCBzdGQ6Om9wdGlv
bmFsPEJydXNoPiYmID0gc3RkOjpudWxsb3B0KTsKKworICAgIGNvbnN0IENvbG9yJiBjb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICB2b2lkIHNldENvbG9yKGNvbnN0IENvbG9y
IGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsgfQorCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxC
cnVzaD4mIGJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9icnVzaDsgfQorCisgICAgV0VCQ09SRV9F
WFBPUlQgR3JhZGllbnQqIGdyYWRpZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUGF0
dGVybiogcGF0dGVybigpIGNvbnN0OworICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VU
cmFuc2Zvcm0oKSBjb25zdDsKKworICAgIHZvaWQgc2V0R3JhZGllbnQoUmVmPEdyYWRpZW50PiYm
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KTsKKyAgICB2b2lk
IHNldFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VU
cmFuc2Zvcm0gPSB7IH0pOworCisgICAgYm9vbCBpc1ByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJu
ICFtX2JydXNoICYmIG1fY29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCk7IH0KKworICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTb3VyY2VCcnVzaD4gZGVj
b2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBDb2xvciBtX2NvbG9yIHsgQ29sb3I6OmJs
YWNrIH07CisgICAgc3RkOjpvcHRpb25hbDxCcnVzaD4gbV9icnVzaDsKK307CisKK2lubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0
ZXJuPj4mIGEsIGNvbnN0IHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0dGVybj4+
JiBiKQoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGEsCisgICAgICAgIFsmXSAoY29uc3Qg
UmVmPEdyYWRpZW50PiYgYUdyYWRpZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byogYkdyYWRp
ZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdyYWRpZW50Pj4oJmIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBhR3JhZGllbnQucHRyKCkgPT0gYkdyYWRpZW50LT5wdHIoKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8UGF0dGVybj4m
IGFQYXR0ZXJuKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYlBhdHRlcm4gPSBzdGQ6OmdldF9p
ZjxSZWY8UGF0dGVybj4+KCZiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYVBhdHRlcm4ucHRy
KCkgPT0gYlBhdHRlcm4tPnB0cigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVz
aDo6QnJ1c2gmIGEsIGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYikKK3sKKyAgICByZXR1cm4g
YS5icnVzaCA9PSBiLmJydXNoICYmIGEuc3BhY2VUcmFuc2Zvcm0gPT0gYi5zcGFjZVRyYW5zZm9y
bTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaCYgYSwgY29u
c3QgU291cmNlQnJ1c2gmIGIpCit7CisgICAgcmV0dXJuIGEuY29sb3IoKSA9PSBiLmNvbG9yKCkg
JiYgYS5icnVzaCgpID09IGIuYnJ1c2goKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rl
cj4KK3ZvaWQgU291cmNlQnJ1c2g6OkJydXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IHNwYWNlVHJhbnNmb3JtOworICAgIFdURjo6c3dpdGNoT24o
YnJ1c2gsCisgICAgICAgIFsmXSAoY29uc3QgUmVmPEdyYWRpZW50PiYgZ3JhZGllbnQpIHsKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgdHJ1ZSA8PCBncmFkaWVudC5nZXQoKTsKKyAgICAgICAgfSwK
KyAgICAgICAgWyZdIChjb25zdCBSZWY8UGF0dGVybj4mIHBhdHRlcm4pIHsKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgZmFsc2UgPDwgcGF0dGVybi5nZXQoKTsKKyAgICAgICAgfQorICAgICk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNo
OjpCcnVzaD4gU291cmNlQnJ1c2g6OkJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBzdGQ6Om9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gc3BhY2VUcmFuc2Zvcm07CisgICAg
ZGVjb2RlciA+PiBzcGFjZVRyYW5zZm9ybTsKKyAgICBpZiAoIXNwYWNlVHJhbnNmb3JtKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBoYXNH
cmFkaWVudDsKKyAgICBkZWNvZGVyID4+IGhhc0dyYWRpZW50OworICAgIGlmICghaGFzR3JhZGll
bnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgaWYgKCpoYXNHcmFk
aWVudCkgeworICAgICAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVy
KTsKKyAgICAgICAgaWYgKCFncmFkaWVudCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgIHJldHVybiB7IHsgV1RGTW92ZSgqZ3JhZGllbnQpLCAqc3BhY2VUcmFuc2Zv
cm0gfSB9OworICAgIH0KKworICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNv
ZGVyKTsKKyAgICBpZiAoIXBhdHRlcm4pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpwYXR0ZXJuKSwgKnNwYWNlVHJhbnNmb3JtIH0gfTsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU291cmNlQnJ1c2g6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNv
ZGVyIDw8IG1fYnJ1c2g7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlv
bmFsPFNvdXJjZUJydXNoPiBTb3VyY2VCcnVzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7
CisgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7CisgICAgZGVjb2RlciA+PiBjb2xvcjsK
KyAgICBpZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3Rk
OjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPEJydXNoPj4gYnJ1c2g7CisgICAgZGVjb2RlciA+PiBi
cnVzaDsKKyAgICBpZiAoIWJydXNoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgcmV0dXJuIFNvdXJjZUJydXNoKCpjb2xvciwgV1RGTW92ZSgqYnJ1c2gpKTsKK30KKworV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFNvdXJjZUJy
dXNoJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRCb3hJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzdlNjhlMzhm
MDIzN2IwMjIwY2Y2NWJhMmMxMGU4ODg4ZGQ0OTg1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRCb3hJdGVyYXRvci5oCkBAIC0wLDAgKzEs
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgVGV4dEJveEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94SXRlcmF0b3Io
KQorICAgICAgICA6IG1fdGV4dFJ1bigwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgewor
ICAgIH0KKworICAgIFRleHRCb3hJdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNp
Z25lZCBvZmZzZXQpCisgICAgICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCisgICAgICAgICwgbV9v
ZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIHZvaWQgaW5jcmVtZW50KCkgeyBtX29mZnNldCsr
OyB9CisgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHRSdW4gfHwgbV9vZmZz
ZXQgPj0gbV90ZXh0UnVuLT5sZW5ndGgoKTsgfQorICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdCB7
IHJldHVybiAoKm1fdGV4dFJ1bilbbV9vZmZzZXRdOyB9CisgICAgVUNoYXJEaXJlY3Rpb24gZGly
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYXRFbmQoKSA/IFVfT1RIRVJfTkVVVFJBTCA6IHVfY2hh
ckRpcmVjdGlvbihjdXJyZW50KCkpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGV4
dEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNl
dCA9PSBvdGhlci5tX29mZnNldCAmJiBtX3RleHRSdW4gPT0gb3RoZXIubV90ZXh0UnVuOworICAg
IH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBj
b25zdCB7IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0KKworcHJpdmF0ZToKKyAgICBjb25z
dCBUZXh0UnVuKiBtX3RleHRSdW47CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA3MjhkM2JlYTBhMTcyMzUwMTRm
MGYxMmNmM2Q2ZDdkYTE5M2MzNWE1Li4xNWU4NDU1N2FjODFhNzY3YTAwNzQ2ZTMwMTYxNTM1NDRm
MjE1NjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTE4MzQsNyArMTgzNCw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0
ZSwgY29uc3QgVHJhCiAgICAgICAgIAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91
bmRzT3JpZ2luKCksIHNpemUoKSk7CiAKLSAgICAgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bCBjb250ZXh0KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFs
Q2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsIGNvbnRleHQoKm1fZGlzcGxheUxpc3QsIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0o
KSk7CiAgICAgICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmlu
ZGV4IDE1NTIzNTZhMjNhNWZkZmIxMGFmZWNhMmNjOTJhNzI3OTQ1ODEwMmUuLjQzN2I3NjRmNDA3
YWRlYzBlYjI4Y2RkZjVlZmRhNmNhNGFmNjkwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAt
MjI3LDcgKzIyNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UGF0aFNoYWRvdyhHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGCiAgICAgICAgIHNvbGlkRmln
dXJlRXh0ZW50cy51bml0ZShmaWxsRXh0ZW50cyk7CiAgICAgfQogCi0gICAgc2hhZG93LmRyYXdT
aGFkb3dMYXllcihTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlw
Qm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHNvbGlkRmlndXJlRXh0ZW50cywKKyAgICBzaGFkb3cu
ZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0LmNyKCkpLCBTdGF0
ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBzb2xpZEZpZ3VyZUV4dGVudHMsCiAg
ICAgICAgIFtjYWlyb0NvbnRleHQsIGRyYXdpbmdTdHlsZSwgJnBhdGgsICZmaWxsU291cmNlLCAm
c3Ryb2tlU291cmNlXShHcmFwaGljc0NvbnRleHQmIHNoYWRvd0NvbnRleHQpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGNhaXJvX3QqIGNhaXJvU2hhZG93Q29udGV4dCA9IHNoYWRvd0NvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CkBAIC0zNDEsNyArMzQxLDcgQEAgc3RhdGljIHZvaWQg
ZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBTaGFkb3cKICAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKHNjYWxlZEZv
bnQsIGdseXBocy5kYXRhKCksIGdseXBocy5zaXplKCksICZleHRlbnRzKTsKICAgICBGbG9hdFJl
Y3QgZm9udEV4dGVudHNSZWN0KHBvaW50LngoKSArIGV4dGVudHMueF9iZWFyaW5nLCBwb2ludC55
KCkgKyBleHRlbnRzLnlfYmVhcmluZywgZXh0ZW50cy53aWR0aCwgZXh0ZW50cy5oZWlnaHQpOwog
Ci0gICAgc2hhZG93LmRyYXdTaGFkb3dMYXllcihTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4
dCksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGZvbnRFeHRlbnRzUmVj
dCwKKyAgICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250
ZXh0LmNyKCkpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBmb250RXh0
ZW50c1JlY3QsCiAgICAgICAgIFtzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCAmZ2x5
cGhzLCBmb250U21vb3RoaW5nTW9kZV0oR3JhcGhpY3NDb250ZXh0JiBzaGFkb3dDb250ZXh0KQog
ICAgICAgICB7CiAgICAgICAgICAgICBkcmF3R2x5cGhzVG9Db250ZXh0KHNoYWRvd0NvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQs
IGdseXBocywgZm9udFNtb290aGluZ01vZGUpOwpAQCAtMzY3LDcgKzM2Nyw3IEBAIEZsb2F0UmVj
dCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEdyYXBoaWNzQ29u
dGV4dENhaXJvJiBwbGF0CiAgICAgaWYgKHByaW50aW5nKQogICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KG9yaWdpbiwgRmxvYXRTaXplKHdpZHRoLCB0aGlja25lc3MpKTsKIAotICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm0gPSBDYWlybzo6U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQp
OworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDYWlybzo6U3RhdGU6OmdldENUTShw
bGF0Zm9ybUNvbnRleHQuY3IoKSk7CiAgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGlt
ZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCiAgICAgZmxvYXQgc2Nh
bGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0u
YigpKSA6IHRyYW5zZm9ybS5hKCk7CiAgICAgaWYgKHNjYWxlIDwgMS4wKSB7CkBAIC00NDYsMTcg
KzQ0NiwxNiBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZD
b3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAK
LXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNh
aXJvX3QqIGNyIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQogewotICAg
IGNhaXJvX3NldF9saW5lX3dpZHRoKHBsYXRmb3JtQ29udGV4dC5jcigpLCBzdHJva2VUaGlja25l
c3MpOworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MpOwogfQog
Ci12b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190
KiBjciwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBkYXNoUGF0dGVybltdID0geyA1LjAsIDUuMCB9OwogICAgIHN0YXRpYyBjb25zdCBkb3VibGUg
ZG90UGF0dGVybltdID0geyAxLjAsIDEuMCB9OwogCi0gICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9y
bUNvbnRleHQuY3IoKTsKICAgICBzd2l0Y2ggKHN0cm9rZVN0eWxlKSB7CiAgICAgY2FzZSBOb1N0
cm9rZToKICAgICAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB3YXkgdG8gZW11bGF0ZSBO
b1N0cm9rZT8KQEAgLTQ3NywyOSArNDc2LDI5IEBAIHZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5CiAg
ICAgfQogfQogCi12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24s
IEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190
KiBjciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQogewotICAgIGNhaXJvX3NldF9vcGVyYXRvcihwbGF0Zm9ybUNvbnRleHQuY3IoKSwg
dG9DYWlyb09wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CisgICAgY2Fp
cm9fc2V0X29wZXJhdG9yKGNyLCB0b0NhaXJvT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBi
bGVuZE1vZGUpKTsKIH0KIAotdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgYm9vbCBlbmFibGUpCit2b2lkIHNldFNob3VsZEFudGlh
bGlhcyhjYWlyb190KiBjciwgYm9vbCBlbmFibGUpCiB7CiAgICAgLy8gV2hlbiB0cnVlLCB1c2Ug
dGhlIGRlZmF1bHQgQ2Fpcm8gYmFja2VuZCBhbnRpYWxpYXMgbW9kZSAodXN1YWxseSB0aGlzCiAg
ICAgLy8gZW5hYmxlcyBzdGFuZGFyZCAnZ3JheXNjYWxlJyBhbnRpYWxpYXNpbmcpOyBmYWxzZSB0
byBleHBsaWNpdGx5IGRpc2FibGUKICAgICAvLyBhbnRpYWxpYXNpbmcuCi0gICAgY2Fpcm9fc2V0
X2FudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQuY3IoKSwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFT
X0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlh
cyhjciwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNf
Tk9ORSk7CiB9CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBzZXRDVE0oY2Fp
cm9fdCogY3IsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGNvbnN0
IGNhaXJvX21hdHJpeF90IG1hdHJpeCA9IHRvQ2Fpcm9NYXRyaXgodHJhbnNmb3JtKTsKLSAgICBj
YWlyb19zZXRfbWF0cml4KHBsYXRmb3JtQ29udGV4dC5jcigpLCAmbWF0cml4KTsKKyAgICBjYWly
b19zZXRfbWF0cml4KGNyLCAmbWF0cml4KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIGdldENUTShH
cmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQorQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShjYWlyb190KiBjcikKIHsKICAgICBjYWlyb19tYXRyaXhfdCBtOwotICAgIGNhaXJvX2dl
dF9tYXRyaXgocGxhdGZvcm1Db250ZXh0LmNyKCksICZtKTsKKyAgICBjYWlyb19nZXRfbWF0cml4
KGNyLCAmbSk7CiAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybShtLnh4LCBtLnl4LCBtLnh5LCBt
Lnl5LCBtLngwLCBtLnkwKTsKIH0KIApAQCAtNTU2LDQ1ICs1NTUsNDUgQEAgYm9vbCBpc0FjY2Vs
ZXJhdGVkQ29udGV4dChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQogfSAv
LyBuYW1lc3BhY2UgU3RhdGUKIAogRmlsbFNvdXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUpCi0gICAgOiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAg
ICAsIGZpbGxSdWxlKHN0YXRlLmZpbGxSdWxlKQorICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxw
aGEoKSkKKyAgICAsIGZpbGxSdWxlKHN0YXRlLmZpbGxSdWxlKCkpCiB7Ci0gICAgaWYgKHN0YXRl
LmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAgIHBhdHRlcm4ub2JqZWN0ID0gYWRvcHRSZWYoc3RhdGUu
ZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOwor
ICAgIGlmIChhdXRvIGZpbGxQYXR0ZXJuID0gc3RhdGUuZmlsbEJydXNoKCkucGF0dGVybigpKSB7
CisgICAgICAgIHBhdHRlcm4ub2JqZWN0ID0gYWRvcHRSZWYoZmlsbFBhdHRlcm4tPmNyZWF0ZVBs
YXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOwogCi0gICAgICAgIGF1dG8mIHBhdHRl
cm5JbWFnZSA9IHN0YXRlLmZpbGxQYXR0ZXJuLT50aWxlSW1hZ2UoKTsKKyAgICAgICAgYXV0byYg
cGF0dGVybkltYWdlID0gZmlsbFBhdHRlcm4tPnRpbGVJbWFnZSgpOwogICAgICAgICBwYXR0ZXJu
LnNpemUgPSBwYXR0ZXJuSW1hZ2Uuc2l6ZSgpOwotICAgICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9
IHN0YXRlLmZpbGxQYXR0ZXJuLT5wYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKTsKLSAgICAgICAgcGF0
dGVybi5yZXBlYXRYID0gc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKTsKLSAgICAgICAgcGF0
dGVybi5yZXBlYXRZID0gc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKTsKLSAgICB9IGVsc2Ug
aWYgKHN0YXRlLmZpbGxHcmFkaWVudCkgewotICAgICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUu
ZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJh
bnNmb3JtKTsKLSAgICAgICAgaWYgKHN0YXRlLmFscGhhICE9IDEpCi0gICAgICAgICAgICBncmFk
aWVudC5hbHBoYUFkanVzdGVkID0gc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0
YXRlLmFscGhhLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIHBh
dHRlcm4udHJhbnNmb3JtID0gZmlsbFBhdHRlcm4tPnBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpOwor
ICAgICAgICBwYXR0ZXJuLnJlcGVhdFggPSBmaWxsUGF0dGVybi0+cmVwZWF0WCgpOworICAgICAg
ICBwYXR0ZXJuLnJlcGVhdFkgPSBmaWxsUGF0dGVybi0+cmVwZWF0WSgpOworICAgIH0gZWxzZSBp
ZiAoYXV0byBmaWxsR3JhZGllbnQgPSBzdGF0ZS5maWxsQnJ1c2goKS5ncmFkaWVudCgpKSB7Cisg
ICAgICAgIGdyYWRpZW50LmJhc2UgPSBmaWxsR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3Rh
dGUuZmlsbEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIGlmIChzdGF0ZS5hbHBo
YSgpICE9IDEpCisgICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gZmlsbEdyYWRp
ZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhKCksIHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNl
VHJhbnNmb3JtKCkpOwogICAgIH0gZWxzZQotICAgICAgICBjb2xvciA9IHN0YXRlLmZpbGxDb2xv
cjsKKyAgICAgICAgY29sb3IgPSBzdGF0ZS5maWxsQnJ1c2goKS5jb2xvcigpOwogfQogCiBTdHJv
a2VTb3VyY2U6OlN0cm9rZVNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUp
Ci0gICAgOiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLXsKLSAgICBpZiAoc3RhdGUuc3Ryb2tl
UGF0dGVybikKLSAgICAgICAgcGF0dGVybiA9IGFkb3B0UmVmKHN0YXRlLnN0cm9rZVBhdHRlcm4t
PmNyZWF0ZVBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotICAgIGVsc2UgaWYg
KHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7Ci0gICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdGF0ZS5z
dHJva2VHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigxLCBzdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNl
VHJhbnNmb3JtKTsKLSAgICAgICAgaWYgKHN0YXRlLmFscGhhICE9IDEpCi0gICAgICAgICAgICBn
cmFkaWVudC5hbHBoYUFkanVzdGVkID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRl
cm4oc3RhdGUuYWxwaGEsIHN0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAg
IDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEoKSkKK3sKKyAgICBpZiAoYXV0byBzdHJva2VQYXR0
ZXJuID0gc3RhdGUuc3Ryb2tlQnJ1c2goKS5wYXR0ZXJuKCkpCisgICAgICAgIHBhdHRlcm4gPSBh
ZG9wdFJlZihzdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNm
b3JtKCkpKTsKKyAgICBlbHNlIGlmIChhdXRvIHN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ryb2tl
QnJ1c2goKS5ncmFkaWVudCgpKSB7CisgICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdHJva2VHcmFk
aWVudC0+Y3JlYXRlUGF0dGVybigxLCBzdGF0ZS5zdHJva2VCcnVzaCgpLnNwYWNlVHJhbnNmb3Jt
KCkpOworICAgICAgICBpZiAoc3RhdGUuYWxwaGEoKSAhPSAxKQorICAgICAgICAgICAgZ3JhZGll
bnQuYWxwaGFBZGp1c3RlZCA9IHN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFs
cGhhKCksIHN0YXRlLnN0cm9rZUJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIGNvbG9yID0gc3RhdGUuc3Ryb2tlQ29sb3I7CisgICAgICAgIGNvbG9yID0gc3Rh
dGUuc3Ryb2tlQnJ1c2goKS5jb2xvcigpOwogfQogCiBTaGFkb3dTdGF0ZTo6U2hhZG93U3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogb2Zmc2V0KHN0YXRlLnNo
YWRvd09mZnNldCkKLSAgICAsIGJsdXIoc3RhdGUuc2hhZG93Qmx1cikKLSAgICAsIGNvbG9yKHN0
YXRlLnNoYWRvd0NvbG9yKQotICAgICwgaWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcykKLSAgICAsIGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKQotICAgICwgZ2xv
YmFsQ29tcG9zaXRlT3BlcmF0b3Ioc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpCisgICAgOiBvZmZz
ZXQoc3RhdGUuZHJvcFNoYWRvdygpLm9mZnNldCkKKyAgICAsIGJsdXIoc3RhdGUuZHJvcFNoYWRv
dygpLmJsdXJSYWRpdXMpCisgICAgLCBjb2xvcihzdGF0ZS5kcm9wU2hhZG93KCkuY29sb3IpCisg
ICAgLCBpZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpCisg
ICAgLCBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSgpKQorICAgICwgZ2xvYmFsQ29tcG9zaXRlT3Bl
cmF0b3Ioc3RhdGUuY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbikKIHsKIH0KIApAQCAtNjE1LDE0
ICs2MTQsMTQgQEAgYm9vbCBTaGFkb3dTdGF0ZTo6aXNSZXF1aXJlZChHcmFwaGljc0NvbnRleHRD
YWlybyYgcGxhdGZvcm1Db250ZXh0KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyBXZSBjYW4gYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlcmUgYXJlIG5vIHRyYW5zZm9y
bWF0aW9ucyB0byBhcHBseSB0byB0aGUgY2FudmFzLgotICAgIGlmIChTdGF0ZTo6Z2V0Q1RNKHBs
YXRmb3JtQ29udGV4dCkuaXNJZGVudGl0eSgpKQorICAgIGlmIChTdGF0ZTo6Z2V0Q1RNKHBsYXRm
b3JtQ29udGV4dC5jcigpKS5pc0lkZW50aXR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIE90aGVyd2lzZSwgbm8gY2hhbmNlIGF2b2lkaW5nIFNoYWRvd0JsdXIuCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxh
dGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxpbmVDYXApCit2b2lkIHNldExpbmVDYXAoY2Fpcm9fdCog
Y3IsIExpbmVDYXAgbGluZUNhcCkKIHsKICAgICBjYWlyb19saW5lX2NhcF90IGNhaXJvQ2FwIHsg
fTsKICAgICBzd2l0Y2ggKGxpbmVDYXApIHsKQEAgLTYzNiwxOCArNjM1LDE4IEBAIHZvaWQgc2V0
TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxp
bmVDYXApCiAgICAgICAgIGNhaXJvQ2FwID0gQ0FJUk9fTElORV9DQVBfU1FVQVJFOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xpbmVfY2FwKHBsYXRmb3JtQ29udGV4dC5j
cigpLCBjYWlyb0NhcCk7CisgICAgY2Fpcm9fc2V0X2xpbmVfY2FwKGNyLCBjYWlyb0NhcCk7CiB9
CiAKLXZvaWQgc2V0TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIHNldExp
bmVEYXNoKGNhaXJvX3QqIGNyLCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9m
ZnNldCkKIHsKICAgICBpZiAoc3RkOjphbGxfb2YoZGFzaGVzLmJlZ2luKCksIGRhc2hlcy5lbmQo
KSwgW10oYXV0byYgZGFzaCkgeyByZXR1cm4gIWRhc2g7IH0pKQotICAgICAgICBjYWlyb19zZXRf
ZGFzaChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgMCwgMCwgMCk7CisgICAgICAgIGNhaXJvX3NldF9k
YXNoKGNyLCAwLCAwLCAwKTsKICAgICBlbHNlCi0gICAgICAgIGNhaXJvX3NldF9kYXNoKHBsYXRm
b3JtQ29udGV4dC5jcigpLCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0
KTsKKyAgICAgICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXpl
KCksIGRhc2hPZmZzZXQpOwogfQogCi12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVKb2luIGxpbmVKb2luKQordm9pZCBzZXRMaW5lSm9p
bihjYWlyb190KiBjciwgTGluZUpvaW4gbGluZUpvaW4pCiB7CiAgICAgY2Fpcm9fbGluZV9qb2lu
X3QgY2Fpcm9Kb2luIHsgfTsKICAgICBzd2l0Y2ggKGxpbmVKb2luKSB7CkBAIC02NjEsMTIgKzY2
MCwxMiBAQCB2b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIExpbmVKb2luIGxpbmVKb2luKQogICAgICAgICBjYWlyb0pvaW4gPSBDQUlST19MSU5F
X0pPSU5fQkVWRUw7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYWlyb19zZXRfbGluZV9q
b2luKHBsYXRmb3JtQ29udGV4dC5jcigpLCBjYWlyb0pvaW4pOworICAgIGNhaXJvX3NldF9saW5l
X2pvaW4oY3IsIGNhaXJvSm9pbik7CiB9CiAKLXZvaWQgc2V0TWl0ZXJMaW1pdChHcmFwaGljc0Nv
bnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCBtaXRlckxpbWl0KQordm9pZCBzZXRN
aXRlckxpbWl0KGNhaXJvX3QqIGNyLCBmbG9hdCBtaXRlckxpbWl0KQogewotICAgIGNhaXJvX3Nl
dF9taXRlcl9saW1pdChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgbWl0ZXJMaW1pdCk7CisgICAgY2Fp
cm9fc2V0X21pdGVyX2xpbWl0KGNyLCBtaXRlckxpbWl0KTsKIH0KIAogdm9pZCBmaWxsUmVjdChH
cmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFk
b3dTdGF0ZSkKQEAgLTY4Miw3ICs2ODEsNyBAQCB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4
dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29ucwogewog
ICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAgICAgICBTaGFkb3dCbHVyIHNo
YWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwgc2hhZG93U3RhdGUu
b2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3JlVHJhbnNmb3Jtcyk7
Ci0gICAgICAgIHNoYWRvdy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29u
dGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIEZsb2F0Um91bmRl
ZFJlY3QocmVjdCksCisgICAgICAgIHNoYWRvdy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RN
KHBsYXRmb3JtQ29udGV4dC5jcigpKSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250
ZXh0KSwgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSwKICAgICAgICAgICAgIFsmcGxhdGZvcm1Db250
ZXh0LCAmc2hhZG93U3RhdGVdKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBv
aW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIGxh
eWVySW1hZ2UsIGxheWVyT3JpZ2luLCBsYXllclNpemUsIHNoYWRvd1N0YXRlKTsKQEAgLTcxMyw3
ICs3MTIsNyBAQCB2b2lkIGZpbGxSb3VuZGVkUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxh
dGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZQogewogICAgIGlmIChzaGFkb3dTdGF0
ZS5pc1Zpc2libGUoKSkgewogICAgICAgICBTaGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRl
LmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwgc2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0
ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5k
cmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRD
bGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHJlY3QsCisgICAgICAgIHNoYWRvdy5kcmF3UmVj
dFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigpKSwgU3RhdGU6OmdldENs
aXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgcmVjdCwKICAgICAgICAgICAgIFsmcGxhdGZvcm1D
b250ZXh0LCAmc2hhZG93U3RhdGVdKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9h
dFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9ybUNvbnRleHQs
IGxheWVySW1hZ2UsIGxheWVyT3JpZ2luLCBsYXllclNpemUsIHNoYWRvd1N0YXRlKTsKQEAgLTc0
Niw3ICs3NDUsNyBAQCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKEdyYXBoaWNzQ29udGV4
dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UgogCiAgICAgaWYgKHNoYWRvd1N0
YXRlLmlzVmlzaWJsZSgpKSB7CiAgICAgICAgIFNoYWRvd0JsdXIgc2hhZG93KHsgc2hhZG93U3Rh
dGUuYmx1ciwgc2hhZG93U3RhdGUuYmx1ciB9LCBzaGFkb3dTdGF0ZS5vZmZzZXQsIHNoYWRvd1N0
YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICAgICAgc2hhZG93
LmRyYXdJbnNldFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpn
ZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwKKyAg
ICAgICAgc2hhZG93LmRyYXdJbnNldFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4
dC5jcigpKSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgcmVjdCwgcm91
bmRlZEhvbGVSZWN0LAogICAgICAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHQsICZzaGFkb3dTdGF0
ZV0oSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2lu
LCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBmaWxsU2hhZG93QnVmZmVyKHBsYXRmb3JtQ29udGV4dCwgbGF5ZXJJbWFnZSwgbGF5ZXJP
cmlnaW4sIGxheWVyU2l6ZSwgc2hhZG93U3RhdGUpOwpAQCAtODYzLDkgKzg2Miw5IEBAIHZvaWQg
ZHJhd1BsYXRmb3JtSW1hZ2UoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
Y2Fpcm9fc3VyZmFjZV90KiBzCiAKICAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlv
bi4KICAgICBpZiAob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpID09IENvbXBvc2l0ZU9wZXJh
dG9yOjpTb3VyY2VPdmVyICYmIG9wdGlvbnMuYmxlbmRNb2RlKCkgPT0gQmxlbmRNb2RlOjpOb3Jt
YWwgJiYgIWNhaXJvU3VyZmFjZUhhc0FscGhhKHN1cmZhY2UpKQotICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIENvbXBvc2l0ZU9wZXJh
dG9yOjpDb3B5LCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dC5jcigpLCBDb21wb3NpdGVPcGVyYXRv
cjo6Q29weSwgQmxlbmRNb2RlOjpOb3JtYWwpOwogICAgIGVsc2UKLSAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBvcHRpb25zLmNvbXBv
c2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgb3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIEZsb2F0UmVj
dCBkc3QgPSBkZXN0UmVjdDsKICAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigpICE9IEltYWdl
T3JpZW50YXRpb246Ok5vbmUpIHsKQEAgLTk2NCw3ICs5NjMsNyBAQCB2b2lkIGRyYXdTdXJmYWNl
KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZQogCiAgICAgU2hhZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFk
b3dTdGF0ZS5ibHVyIH0sIHNoYWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNo
YWRvd1N0YXRlLmlnbm9yZVRyYW5zZm9ybXMpOwogICAgIGlmIChzaGFkb3cudHlwZSgpICE9IFNo
YWRvd0JsdXI6Ok5vU2hhZG93KSB7Ci0gICAgICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3Rh
dGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9y
bUNvbnRleHQpLCBkZXN0UmVjdCwKKyAgICAgICAgc2hhZG93LmRyYXdTaGFkb3dMYXllcihTdGF0
ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigpKSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxh
dGZvcm1Db250ZXh0KSwgZGVzdFJlY3QsCiAgICAgICAgICAgICBbJnBhdHRlcm4sICZkZXN0UmVj
dF0oR3JhcGhpY3NDb250ZXh0JiBzaGFkb3dDb250ZXh0KQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoc2hhZG93Q29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKSwgcGF0dGVybi5nZXQoKSwgZGVzdFJlY3QsIDEpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuaAppbmRleCA1NDk4NTYzY2U0OWMxNWUzNWQwODI1OWMyZDI2ZGM3YjE3Y2VhODg1Li5lNWEz
NDI0YWU2MTE3MDdhYzk3ZDBkMTllN2NjMzA2MWFiNzA2MWYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaApA
QCAtNDYsMjIgKzQ2LDIxIEBAIGNsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3Mg
RmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dFN0YXRlOwogY2xhc3MgUGF0aDsKIAotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOwotCiBu
YW1lc3BhY2UgQ2Fpcm8gewogCiBuYW1lc3BhY2UgU3RhdGUgewogCi12b2lkIHNldFN0cm9rZVRo
aWNrbmVzcyhHcmFwaGljc0NvbnRleHRDYWlybyYsIGZsb2F0KTsKLXZvaWQgc2V0U3Ryb2tlU3R5
bGUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBTdHJva2VTdHlsZSk7Cit2b2lkIHNldFN0cm9rZVRo
aWNrbmVzcyhjYWlyb190KiwgZmxvYXQpOwordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190Kiwg
U3Ryb2tlU3R5bGUpOwogCi12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRl
eHRDYWlybyYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwotdm9pZCBzZXRTaG91bGRB
bnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBib29sKTsKK3ZvaWQgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKGNhaXJvX3QqLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKK3ZvaWQg
c2V0U2hvdWxkQW50aWFsaWFzKGNhaXJvX3QqLCBib29sKTsKIAotdm9pZCBzZXRDVE0oR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLUFmZmluZVRyYW5zZm9y
bSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mKTsKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCop
OwogCiBJbnRSZWN0IGdldENsaXBCb3VuZHMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mKTsKIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxv
YXRSZWN0Jik7CkBAIC0xMjUsMTAgKzEyNCwxMCBAQCBzdHJ1Y3QgU2hhZG93U3RhdGUgewogICAg
IENvbXBvc2l0ZU9wZXJhdG9yIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3Bl
cmF0b3I6OlNvdXJjZU92ZXIgfTsKIH07CiAKLXZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRl
eHRDYWlybyYsIExpbmVDYXApOwotdm9pZCBzZXRMaW5lRGFzaChHcmFwaGljc0NvbnRleHRDYWly
byYsIGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KTsKLXZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mLCBMaW5lSm9pbik7Ci12b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mLCBmbG9hdCk7Cit2b2lkIHNldExpbmVDYXAoY2Fpcm9fdCosIExpbmVDYXApOwor
dm9pZCBzZXRMaW5lRGFzaChjYWlyb190KiwgY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpOwordm9p
ZCBzZXRMaW5lSm9pbihjYWlyb190KiwgTGluZUpvaW4pOwordm9pZCBzZXRNaXRlckxpbWl0KGNh
aXJvX3QqLCBmbG9hdCk7CiAKIHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsK
IHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYsIGNvbnN0IFNoYWRvd1N0YXRlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAppbmRleCBhN2FmMGNlYjUy
NDkwNDA0MWVlMTJkNTFmODljNmRmMTZjYjM2MDM3Li4zZDE5NzU3OWEyY2MyMjk5MzM4ODVhMWEx
NTk1YzYzOTZjYTg2ZGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBGb250Q2Fz
Y2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEcKICAgICBhdXRvJiBzdGF0ZSA9IGNvbnRleHQuc3RhdGUoKTsKICAgICBDYWly
bzo6ZHJhd0dseXBocygqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgQ2Fpcm86OkZpbGxTb3Vy
Y2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQs
IGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xv
ciwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlKCksIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cygpLCBzdGF0ZS5kcm9wU2hhZG93KCkub2Zmc2V0LCBzdGF0ZS5kcm9wU2hhZG93KCkuY29sb3Is
CiAgICAgICAgIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAppbmRleCA5
MDA5NmFjNjQ1MjI0ZGJmZGM2MGJmYTZjYWNhZDAzMDc2Y2IyOTdkLi5iZTJjMjk1Y2E1MDdkOWI1
NjNmODVkNWJjYjg3MDk3MmYwZGFkOGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcApAQCAtMjQ3LDcgKzI0
Nyw3IEBAIFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IEdyYWRpZW50OjpjcmVhdGVQYXR0ZXJuKGZs
b2F0IGdsb2JhbEFscGhhLCBjb25zdCBBZmZpbmVUCiAKIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXV0
byBwYXR0ZXJuID0gY3JlYXRlUGF0dGVybigxLjAsIGNvbnRleHQuc3RhdGUoKS5maWxsR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSk7CisgICAgYXV0byBwYXR0ZXJuID0gY3JlYXRlUGF0dGVybigxLjAs
IGNvbnRleHQuZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogICAgIGlmICghcGF0dGVybikKICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYzMyMzA0NDUz
NTFiMDNmMmFhODczNmFlZTJiY2U3OGJjNDM2MWY0OS4uODRkMDM5ZGRlNjU4ZDc3ZGI4YTI4NDU1
YTg5YjQzYTcxMWRjM2QyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgpAQCAtNjgsNyAr
NjgsOCBAQCBwdWJsaWM6CiB9OwogCiBHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm8oUmVmUHRyPGNhaXJvX3Q+JiYgY29udGV4dCkKLSAgICA6IG1fY3IoV1RGTW92ZShj
b250ZXh0KSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgp
KQorICAgICwgbV9jcihXVEZNb3ZlKGNvbnRleHQpKQogewogICAgIG1fY2Fpcm9TdGF0ZVN0YWNr
LmFwcGVuZChDYWlyb1N0YXRlKCkpOwogICAgIG1fY2Fpcm9TdGF0ZSA9ICZtX2NhaXJvU3RhdGVT
dGFjay5sYXN0KCk7CkBAIC04NiwxMCArODcsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1BZmZp
bmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2Nh
bGUgaW5jbHVkZVNjYWxlKSBjb25zdAorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWly
bzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTY2Fs
ZSk7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3Jt
Q29udGV4dCgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZDsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdApAQCAtMTM0LDUzICsxMzQsMTEwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogICAgIGNhaXJvX3Jlc3RvcmUobV9j
ci5nZXQoKSk7CiB9CiAKLS8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tl
ZCBib3JkZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgp
KTsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdSZWN0
KCp0aGlzLCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ry
b2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gY2hhbmdlIDogc3RhdGUoKS5jaGFu
Z2VzKCkpIHsKKyAgICAgICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE06CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dENUTShtX2NyLmdldCgpLCBzdGF0ZSgpLmdldENUTSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tu
ZXNzOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9jci5n
ZXQoKSwgc3RkOjptYXgoc3RhdGUoKS5zdHJva2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlN0cm9rZVN0eWxlOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZSht
X2NyLmdldCgpLCBzdGF0ZSgpLnN0cm9rZVN0eWxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAg
ICAgICAgICAgQ2Fpcm86OnNldExpbmVDYXAobV9jci5nZXQoKSwgc3RhdGUoKS5saW5lQ2FwKCkp
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpMaW5lSm9pbjoKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihtX2Ny
LmdldCgpLCBzdGF0ZSgpLmxpbmVKb2luKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaDoKKyAgICAgICAg
ICAgIENhaXJvOjpzZXRMaW5lRGFzaChtX2NyLmdldCgpLCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFz
aGVzLCBzdGF0ZSgpLmxpbmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoKKyAg
ICAgICAgICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fY3IuZ2V0KCksIHN0YXRlKCkubWl0ZXJM
aW1pdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZToKKyAgICAgICAgICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fY3IuZ2V0KCksIHN0YXRlKCkuY29tcG9zaXRlTW9k
ZSgpLm9wZXJhdGlvbiwgc3RhdGUoKS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpKSB7CisgICAgICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3Mg
Y29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAg
ICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52
YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cg
PSB0aGlzLT5kcm9wU2hhZG93KCk7CisgICAgICAgICAgICAgICAgZHJvcFNoYWRvdy5vZmZzZXQg
PSB7IGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCksIC1kcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQo
KSB9OworICAgICAgICAgICAgICAgIHNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENhaXJvOjpTdGF0
ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fY3IuZ2V0KCksIHN0YXRlKCkuc2hvdWxkQW50aWFsaWFz
KCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUlt
YWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9y
bUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFj
aXR5KTsKKyAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7
CiB9CiAKLS8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxk
IG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAo
c3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKLSAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNz
Q29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBDYWlybzo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKnRoaXMpOworfQogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwot
ICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91
bGRBbnRpYWxpYXMpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIENh
aXJvOjpjbGlwKCp0aGlzLCByZWN0KTsKIH0KIAotLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2Vk
IHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBj
bGlwUnVsZSkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86
OmRyYXdFbGxpcHNlKCp0aGlzLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKKyAgICBDYWlybzo6Y2xpcFBh
dGgoKnRoaXMsIHBhdGgsIGNsaXBSdWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKK30K
IAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgo
KnRoaXMsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgm
IHBhdGgpCit7CisgICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHBhdGgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpjbGlwVG9J
bWFnZUJ1ZmZlcigqdGhpcywgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVz
dFJlY3QpOworfQogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJv
OjpzdHJva2VQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIENhaXJvOjpjbGVhclJlY3QoKnRo
aXMsIHJlY3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0xOTYsOCArMjUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwg
c3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGF1dG8gcGF0dGVybiA9IGdy
YWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgaWYg
KCFwYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTIwNiwzNSArMjYyLDY0IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
ZGllbnQmIGdyYWRpZW50KQogICAgIHJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKKyAgICBDYWlybzo6
ZmlsbFJvdW5kZWRSZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAoIWNvbG9yLmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21w
b3NpdGVPcGVyYXRvcjsKKyAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMs
IHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKIAotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCp0
aGlzLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAgICBDYWlybzo6ZmlsbFJlY3Qo
KnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqdGhpcywgcHJldmlvdXNPcGVyYXRvciwg
QmxlbmRNb2RlOjpOb3JtYWwpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAg
ICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsK
LSAgICBDYWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOworICAgIENhaXJvOjpzdHJva2VSZWN0KCp0aGlzLCByZWN0LCBsaW5lV2lkdGgsIENh
aXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ2Fpcm86OmNsaXBQYXRoKCp0aGlzLCBwYXRoLCBj
bGlwUnVsZSk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnRo
aXMsIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcygp
IGNvbnN0CisvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVy
Lgordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6
Z2V0Q2xpcEJvdW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOworICAgIEFTU0VSVCghcmVjdC5pc0Vt
cHR5KCkpOworICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNz
LCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCisvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBk
cmF3IGJvcmRlcnMsIHNvIHdlIHNob3VsZCBub3QgZHJhdyBzaGFkb3dzLgordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIu
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNs
aXBUb0ltYWdlQnVmZmVyKCp0aGlzLCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgp
LCBkZXN0UmVjdCk7CisgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAg
IHJldHVybjsKKworICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0
cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzaG91bGRBbnRp
YWxpYXMoKSk7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBs
aXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIENhaXJvOjpkcmF3RWxs
aXBzZSgqdGhpcywgcmVjdCwgZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9y
KCksIHN0cm9rZVRoaWNrbmVzcygpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0yNjEsMTM4ICszNDYsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0
cywgZmxvYXQgdwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5l
cywgU3Ryb2tlU3R5bGUpCi17Ci0gICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVz
cywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xv
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHls
ZSkKLXsKLSAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwg
c3R5bGUpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2Rl
KQotewotICAgIFVOVVNFRF9QQVJBTShyb3VuZGluZ01vZGUpOwotICAgIHJldHVybiBDYWlybzo6
U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnRoaXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDYWly
bzo6dHJhbnNsYXRlKCp0aGlzLCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAg
ICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcygqdGhpcywgc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VT
dHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZSgqdGhpcywg
c3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRl
eHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAg
ICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBv
cHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNo
YWRvd09mZnNldDsKLSAgICAgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dP
ZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJh
dGlvbkNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24o
KnRoaXMsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAg
aWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkK
LSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnRoaXMsIHN0YXRlLnNo
b3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6Y29uY2F0
Q1RNKCp0aGlzLCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0
YXRlOjpzZXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFw
aGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgQ2Fpcm86
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgR3JhcGhpY3ND
b250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIENhaXJvOjplbmRUcmFuc3BhcmVu
Y3lMYXllcigqdGhpcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFyUmVjdCgqdGhpcywg
cmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VSZWN0KCp0aGlzLCByZWN0LCBsaW5lV2lk
dGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxp
bmVDYXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAoKnRoaXMsIGxpbmVDYXApOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRh
c2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBDYWlybzo6c2V0TGluZURhc2goKnRoaXMs
IGRhc2hlcywgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIENhaXJvOjpzZXRMaW5lSm9pbigq
dGhpcywgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRl
ckxpbWl0KGZsb2F0IG1pdGVyKQotewotICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCp0aGlzLCBt
aXRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgUGF0
aCYgcGF0aCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcGF0aCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdGF0ZShmbG9hdCByYWRpYW5zKQotewotICAgIENhaXJv
Ojpyb3RhdGUoKnRoaXMsIHJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgQ2Fpcm86OnNjYWxlKCp0aGlz
LCBzaXplKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHJlY3QpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKCFj
b2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJl
Y3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKKyAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnRoaXMsIG5h
dGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0
aW9ucywgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIH0sIGFscGhhKCksIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSgpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQ
YXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKQEAgLTQwNCwxMSAr
MzYwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QKICAgICBDYWlybzo6ZHJhd1BhdHRlcm4o
KnRoaXMsIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgbmF0aXZlSW1hZ2Uuc2l6
ZSgpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25z
KTsKIH0KIAotUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9k
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRl
eHQoKnBsYXRmb3JtQ29udGV4dCgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9v
dGhpbmcpCiB7CiAgICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTQzNCwx
MiArMzg1LDMxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKnRoaXMsIENhaXJvOjpGaWxsU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBz
dGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29s
b3IsCisgICAgICAgIHRleHREcmF3aW5nTW9kZSgpLCBzdHJva2VUaGlja25lc3MoKSwgc2hhZG93
T2Zmc2V0KCksIHNoYWRvd0NvbG9yKCksCiAgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQoreworICAgIGlm
ICh3aWR0aHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmRyYXdMaW5l
c0ZvclRleHQoKnRoaXMsIHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJs
ZVVuZGVybGluZXMsIHN0cm9rZUNvbG9yKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit7CisgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoKnRoaXMsIHJlY3QsIHN0eWxlKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNz
Q29udGV4dENhaXJvOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Um91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocm91bmRpbmdN
b2RlKTsKKyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCp0aGlz
LCByZWN0KTsKK30KKwogY2Fpcm9fdCogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNyKCkgY29uc3QK
IHsKKyAgICBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dENhaXJvJj4oKnRoaXMpLmFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CiAgICAgcmV0dXJuIG1fY3IuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5oCmluZGV4IDU2NDYxYzE1OWE1ODNjODljNjFlOGYwMmU0ZTBiZWU3YjA1OTMyZWYu
LjZmY2RlM2E4YmIxZGY5ZjU1YmY2OWJiYmY0ZmM2NDY1Zjg1ZTlhYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDYxICs1MSw0OSBAQCBwdWJs
aWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICAgICBHcmFw
aGljc0NvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2
b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9p
ZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwog
Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4o
TGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Cisg
ICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZp
bmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3Q7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFs
OwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsOwotICAg
IHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOworCiAgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9p
ZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHN0
cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwor
ICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CiAKLSAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCkgZmluYWw7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29s
LCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsK
KwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKICAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3Im
KSBmaW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAKLSAgICB2b2lkIHNhdmUoKSBm
aW5hbDsKLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0LCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFsOwotICAgIHVz
aW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNp
emUmKSBmaW5hbDsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBm
aW5hbDsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCkgZmluYWw7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworICAgIHZv
aWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwogCi0gICAgdm9pZCBjbGlwKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQg
Y2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKLSAgICBJbnRSZWN0IGNsaXBC
b3VuZHMoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgCi0gICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUp
IGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkg
ZmluYWw7CisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKIAogICAgIEZsb2F0UmVjdCByb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRp
bmdNb2RlKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4
IDk2Yzc2MTM1NDFiZGM2NThhNzg3YWIwM2U3NzgxODgzNGQzMTg1YzQuLmRjMjY3OTdlMGJjZGI2
M2MyZjVhYWNkYjgwNjQ4MjU2NTk4ODVkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6
ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAgICBj
b25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7
CiAKICAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0g
JmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCi0g
ICAgICAgIGRyYXdQbGF0Zm9ybUltYWdlKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwg
aW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9u
cywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRl
KGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7CisgICAgICAgIGRyYXdQbGF0Zm9ybUltYWdlKCpk
ZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBo
YSgpLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUp
KTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE4NTZhMDQzOTNmZDI0ZTk2MjhmNmZlOTM0NjllZWJlYTRhYmI1OTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRT
dGF0ZVNhdmVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7CitwdWJsaWM6
CisgICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCBzYXZl
QW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAg
ICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKKyAgICB7CisgICAgICAgIGlmICht
X3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRl
eHQpOworICAgIH0KKyAgICAKKyAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCisgICAgeworICAg
ICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFJlc3RvcmVH
U3RhdGUobV9jb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4dFNhdmVH
U3RhdGUobV9jb250ZXh0KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7CisgICAg
fQorCisgICAgdm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NhdmVBbmRS
ZXN0b3JlKTsKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOworICAg
ICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgZGlk
U2F2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9yZTsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7CisgICAgYm9v
bCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDMyNDVjNjAwNDMxNTUyZDUxM2I3
NGVlYmMwOWYzMThlZWMzZGQ3MmEuLjdlZmM3MmM5ZTdkMjhhZTI2ZDAxNmUwNmNiNzE4OGJhNjgw
OGM3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0xODUsMTQgKzE4NSwxMyBAQCBzdGF0aWMgdm9pZCBzZXRDR0JsZW5kTW9k
ZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZQog
fQogCiBHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmIGNn
Q29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdC
b3goY2dDb250ZXh0KSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmluaXRpYWxDaGFuZ2VGbGFncywg
Q0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCkpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUoY2dDb250ZXh0KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGlu
IHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgeyBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3ND
aGFuZ2UgfSk7Ci0gICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29yZUlu
dGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRm
b3JtQ29udGV4dCgpKSk7CisgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb3JlSW50
ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQoKSkpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6On5HcmFwaGlj
c0NvbnRleHRDRygpCkBAIC0yMDYsNiArMjA1LDE0IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0Q0c6
Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB9CiAKIENHQ29udGV4dFJlZiBHcmFwaGljc0Nv
bnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICAvLyBTb21lIGNhbGxlcnMg
dG8gdGhpcyBtZXRob2QgdXNlcyB0aGUgcGxhdGZvcm0gY29udGV4dCBvdXRzaWRlIHRoZSBzY29w
ZQorICAgIC8vIG9mIHRoaXMgY2xhc3MuIENvbW1pdCBhbnkgY2hhbmdlcyBiZWZvcmUgcmV0dXJu
aW5nIHRoZSBwbGF0Zm9ybSBjb250ZXh0LgorICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0
Q0cmPigqdGhpcykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1cm4gaW50ZXJuYWxQbGF0
Zm9ybUNvbnRleHQoKTsKK30KKworQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENHOjppbnRl
cm5hbFBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZGF0YS0+bV9jZ0Nv
bnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwpAQCAtMzM4LDcg
KzM0NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJ
bWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6CiAjZW5kaWYKIAogICAgIGF1dG8gb2xk
Q29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKLSAgICBhdXRvIG9sZEJs
ZW5kTW9kZSA9IGJsZW5kTW9kZU9wZXJhdGlvbigpOworICAgIGF1dG8gb2xkQmxlbmRNb2RlID0g
YmxlbmRNb2RlKCk7CiAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgb3B0aW9ucy5jb21wb3Np
dGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIC8vIE1ha2UgdGhlIG9y
aWdpbiBiZSBhdCBhZGp1c3RlZERlc3RSZWN0LmxvY2F0aW9uKCkKQEAgLTM5Niw3ICs0MDMsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZl
SW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZAogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0
KTsKIAotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9y
KCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIHNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25z
LmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAKICAgICBDR0Nv
bnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBk
ZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEp
OwpAQCAtNTU1LDEzICs1NjIsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBs
eVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlmICghbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAg
IGlmICghc3Ryb2tlUGF0dGVybigpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVz
ZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQp
KTsKIAotICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5j
cmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CisgICAgYXV0byBwbGF0Zm9ybVBh
dHRlcm4gPSBzdHJva2VQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNl
Q1RNKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01
NzQsMTMgKzU4MSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRl
cm4oKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAg
ICBpZiAoIW1fc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKCFmaWxsUGF0dGVybigpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zv
cm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIAotICAgIGF1dG8gcGxhdGZvcm1QYXR0
ZXJuID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jh
c2VDVE0pOworICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gZmlsbFBhdHRlcm4oKS0+Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJu
KQogICAgICAgICByZXR1cm47CiAKQEAgLTU5MSwxMSArNTk4LDExIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIENHQ29udGV4dFNldEZpbGxQYXR0ZXJu
KGNnQ29udGV4dCwgcGxhdGZvcm1QYXR0ZXJuLmdldCgpLCAmcGF0dGVybkFscGhhKTsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCitzdGF0aWMgaW5saW5l
IGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBDR1BhdGhEcmF3aW5nTW9kZSYgbW9kZSkKIHsKLSAgICBib29sIHNob3VsZEZpbGwgPSBzdGF0
ZS5maWxsUGF0dGVybiB8fCBzdGF0ZS5maWxsQ29sb3IuaXNWaXNpYmxlKCk7Ci0gICAgYm9vbCBz
aG91bGRTdHJva2UgPSBzdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IChzdGF0ZS5zdHJva2VTdHlsZSAh
PSBOb1N0cm9rZSAmJiBzdGF0ZS5zdHJva2VDb2xvci5pc1Zpc2libGUoKSk7Ci0gICAgYm9vbCB1
c2VFT0ZpbGwgPSBzdGF0ZS5maWxsUnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZDsKKyAgICBib29s
IHNob3VsZEZpbGwgPSBjb250ZXh0LmZpbGxQYXR0ZXJuKCkgfHwgY29udGV4dC5maWxsQ29sb3Io
KS5pc1Zpc2libGUoKTsKKyAgICBib29sIHNob3VsZFN0cm9rZSA9IGNvbnRleHQuc3Ryb2tlUGF0
dGVybigpIHx8IChjb250ZXh0LnN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UgJiYgY29udGV4dC5z
dHJva2VDb2xvcigpLmlzVmlzaWJsZSgpKTsKKyAgICBib29sIHVzZUVPRmlsbCA9IGNvbnRleHQu
ZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZDsKIAogICAgIGlmIChzaG91bGRGaWxsKSB7
CiAgICAgICAgIGlmIChzaG91bGRTdHJva2UpIHsKQEAgLTYyNCw5ICs2MzEsOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICByZXR1
cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAg
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKLSAgICBpZiAo
c3RhdGUuZmlsbEdyYWRpZW50IHx8IHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKGZp
bGxHcmFkaWVudCgpIHx8IHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qg
aGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBmaWxsICYgc3Ryb2tlIGEgcGF0aCB1c2luZyBncmFk
aWVudHMKICAgICAgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KICAgICAgICAg
ZmlsbFBhdGgocGF0aCk7CkBAIC02MzQsMTMgKzY0MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigpKQogICAg
ICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pCisg
ICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAK
ICAgICBDR1BhdGhEcmF3aW5nTW9kZSBkcmF3aW5nTW9kZTsKLSAgICBpZiAoY2FsY3VsYXRlRHJh
d2luZ01vZGUoc3RhdGUsIGRyYXdpbmdNb2RlKSkgeworICAgIGlmIChjYWxjdWxhdGVEcmF3aW5n
TW9kZSgqdGhpcywgZHJhd2luZ01vZGUpKSB7CiAjaWYgSEFWRShDR19DT05URVhUX0RSQVdfUEFU
SF9ESVJFQ1QpCiAgICAgICAgIENHQ29udGV4dERyYXdQYXRoRGlyZWN0KGNvbnRleHQsIGRyYXdp
bmdNb2RlLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCBudWxscHRyKTsKICNlbHNlCkBAIC02NTgsNyAr
NjY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAg
ICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkpIHsK
ICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdCA9
IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgRmxvYXRTaXplIGxheWVyU2l6
ZSA9IGdldENUTSgpLm1hcFNpemUocmVjdC5zaXplKCkpOwpAQCAtNjcwLDMzICs2NzYsMzMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAg
ICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShsYXllckNvbnRleHQsIC1yZWN0LngoKSwgLXJl
Y3QueSgpKTsKICAgICAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChsYXllckNvbnRleHQpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChsYXllckNvbnRleHQsIHBhdGgucGxhdGZvcm1Q
YXRoKCkpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9z
dGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0obGF5ZXJDb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAg
ICAgIGlmIChmaWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgICAg
IENHQ29udGV4dEVPQ2xpcChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAgICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBmaWxs
R3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dERy
YXdMYXllckluUmVjdChjb250ZXh0LCByZWN0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CiAgICAgICAgICAg
ICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogICAgICAg
ICAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgICAgICAg
ICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0pOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIGZpbGxT
cGFjZVRyYW5zZm9ybSgpKTsKIAogICAgICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gV2luZFJ1
bGU6OkV2ZW5PZGQpCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7
CiAKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludCgqdGhpcyk7CisgICAg
ICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlm
IChmaWxsUGF0dGVybigpKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAjaWYgSEFWRShD
R19DT05URVhUX0RSQVdfUEFUSF9ESVJFQ1QpCiAgICAgQ0dDb250ZXh0RHJhd1BhdGhEaXJlY3Qo
Y29udGV4dCwgZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCA/IGtDR1BhdGhFT0ZpbGwg
OiBrQ0dQYXRoRmlsbCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CkBAIC03MTcsNyAr
NzIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBw
YXRoKQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAot
ICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKHN0cm9rZUdyYWRpZW50
KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3Qg
cmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgZmxvYXQgbGluZVdp
ZHRoID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC03NDIsOCArNzQ4LDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgQ0dD
b250ZXh0QWRkUGF0aChsYXllckNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogICAgICAg
ICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgobGF5ZXJDb250ZXh0KTsK
ICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKLSAgICAgICAgICAgIENH
Q29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludChs
YXllckNvbnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4
dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgp
LT5wYWludChsYXllckNvbnRleHQpOwogCiAgICAgICAgICAgICBmbG9hdCBkZXN0aW5hdGlvblgg
PSByb3VuZGYocmVjdC54KCkgLSBsaW5lV2lkdGgpOwogICAgICAgICAgICAgZmxvYXQgZGVzdGlu
YXRpb25ZID0gcm91bmRmKHJlY3QueSgpIC0gbGluZVdpZHRoKTsKQEAgLTc1NCwxMyArNzYwLDEz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
ICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgo
KSk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250
ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAgICAgICBD
R0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJh
bnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KCp0aGlz
KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBzdHJva2VTcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUuc3Ry
b2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBseVN0cm9r
ZVBhdHRlcm4oKTsKIAogI2lmIFVTRShDR19DT05URVhUX1NUUk9LRV9MSU5FX1NFR01FTlRTX1dI
RU5fU1RST0tJTkdfUEFUSCkKQEAgLTc4NSw3ICs3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFk
aWVudCkgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSkgewogICAgICAgICBDR0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewog
ICAgICAgICAgICAgRmxvYXRTaXplIGxheWVyU2l6ZSA9IGdldENUTSgpLm1hcFNpemUocmVjdC5z
aXplKCkpOwpAQCAtNzk4LDI3ICs4MDQsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUmVj
dChsYXllckNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNv
bnRleHQpOwogCi0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBt
X3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUu
ZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0
Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAg
ICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0Nv
bnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByZWN0
KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50
LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwg
ZmlsbFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50
KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1f
c3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5
RmlsbFBhdHRlcm4oKTsKIAogICAgIGJvb2wgZHJhd093blNoYWRvdyA9IGNhblVzZVNoYWRvd0Js
dXIoKTsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093
blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYg
Q0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3Jt
Q29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93
V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0Js
dXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hh
ZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNv
bnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3QocmVjdCkp
OwogICAgIH0KIApAQCAtODM3LDkgKzg0Myw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIENH
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAg
ICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgot
ICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENH
U2l6ZVplcm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29u
dGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hh
ZG93KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRv
dygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5k
cmF3UmVjdFNoYWRvdygqdGhpcywgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSk7CiAgICAgfQogCkBA
IC04NTIsNyArODU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIHNldENHRmlsbENv
bG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIG9sZEZp
bGxDb2xvciA9IGZpbGxDb2xvcigpOwpAQCAtODY0LDkgKzg3MCw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVj
dCwgY29uc3QKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJh
d093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBv
ZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRm
b3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hh
ZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRv
d0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0
U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAg
IGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIHJlY3QpOwogICAgIH0KIApAQCAt
ODc0LDcgKzg4MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdElt
cGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QKICAgICBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkgPSByZWN0LnJhZGlpKCk7CiAgICAgYm9vbCBlcXVhbFdp
ZHRocyA9IChyYWRpaS50b3BMZWZ0KCkud2lkdGgoKSA9PSByYWRpaS50b3BSaWdodCgpLndpZHRo
KCkgJiYgcmFkaWkudG9wUmlnaHQoKS53aWR0aCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0
aCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpID09IHJhZGlpLmJvdHRvbVJpZ2h0KCku
d2lkdGgoKSk7CiAgICAgYm9vbCBlcXVhbEhlaWdodHMgPSAocmFkaWkudG9wTGVmdCgpLmhlaWdo
dCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCku
aGVpZ2h0KCkgPT0gcmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSAmJiByYWRpaS50b3BSaWdodCgp
LmhlaWdodCgpID09IHJhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkpOwotICAgIGJvb2wgaGFz
Q3VzdG9tRmlsbCA9IG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm47
CisgICAgYm9vbCBoYXNDdXN0b21GaWxsID0gZmlsbEdyYWRpZW50KCkgfHwgZmlsbFBhdHRlcm4o
KTsKICAgICBpZiAoIWhhc0N1c3RvbUZpbGwgJiYgZXF1YWxXaWR0aHMgJiYgZXF1YWxIZWlnaHRz
ICYmIHJhZGlpLnRvcExlZnQoKS53aWR0aCgpICogMiA9PSByLndpZHRoKCkgJiYgcmFkaWkudG9w
TGVmdCgpLmhlaWdodCgpICogMiA9PSByLmhlaWdodCgpKQogICAgICAgICBDR0NvbnRleHRGaWxs
RWxsaXBzZUluUmVjdChjb250ZXh0LCByKTsKICAgICBlbHNlIHsKQEAgLTkxMyw5ICs5MTksOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsbwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewog
ICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFk
b3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAg
ICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7
CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBT
aGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3SW5zZXRTaGFkb3coKnRoaXMsIHJl
Y3QsIHJvdW5kZWRIb2xlUmVjdCk7CiAgICAgfQogCkBAIC05MzAsNiArOTM2LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG8KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOwogICAg
IENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAgIG1fZGF0
YS0+Y2xpcChyZWN0KTsKIH0KQEAgLTk0MCwzMSArOTQ3LDM1IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIC8vIHRvIDxyZGFyOi8v
cHJvYmxlbS8xMjU4NDQ5Mj4sIENHUmVjdEluZmluaXRlIGNhbid0IGJlIHVzZWQgd2l0aCBhbiBh
Y2NlbGVyYXRlZCBjb250ZXh0IHRoYXQKICAgICAvLyBoYXMgY2VydGFpbiB0cmFuc2Zvcm1zIHRo
YXQgYXJlbid0IGp1c3QgYSB0cmFuc2xhdGlvbiBvciBhIHNjYWxlLiBBbmQgZHVlIHRvIDxyZGFy
Oi8vcHJvYmxlbS8xNDYzNDQ1Mz4KICAgICAvLyB3ZSBjYW5ub3QgdXNlIGl0IGluIGZvciBhIHBy
aW50aW5nIGNvbnRleHQgZWl0aGVyLgorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRDVE0oKTsK
LSAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9y
bUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKHJlbmRlcmluZ01vZGUoKSA9PSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOwot
ICAgIENHUmVjdCByZWN0c1syXSA9IHsgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZp
bml0ZSA6IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSksIHJl
Y3QgfTsKLSAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENH
Q29udGV4dEFkZFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgMik7Ci0gICAgQ0dDb250
ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBib29sIGNhblVzZUNHUmVjdEluZmlu
aXRlID0gQ0dDb250ZXh0R2V0VHlwZShjb250ZXh0KSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAo
cmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0u
YigpICYmICFjdG0uYygpKSk7CisgICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJ
bmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNv
bnRleHQpLCByZWN0IH07CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENH
Q29udGV4dEFkZFJlY3RzKGNvbnRleHQsIHJlY3RzLCAyKTsKKyAgICBDR0NvbnRleHRFT0NsaXAo
Y29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwot
ICAgIENHQ29udGV4dEFkZFJlY3QocGxhdGZvcm1Db250ZXh0KCksIENHQ29udGV4dEdldENsaXBC
b3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwor
ICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94
KGNvbnRleHQpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQotICAgICAgICBDR0NvbnRleHRB
ZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICBDR0Nv
bnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOworICAgICAgICBDR0NvbnRleHRBZGRQYXRo
KGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOworICAgIENHQ29udGV4dEVPQ2xpcChjb250
ZXh0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0
aChwYXRoLCBjbGlwUnVsZSk7CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LCBDR1JlY3RaZXJvKTsKICAgICBlbHNlIHsKLSAgICAgICAgQ0dDb250
ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0QWRkUGF0
aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisgICAgICAgIENHQ29u
dGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0
LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKIAogICAgICAgICBpZiAoY2xpcFJ1bGUgPT0gV2luZFJ1
bGU6OkV2ZW5PZGQpCiAgICAgICAgICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CkBAIC05
NzUsMTEgKzk4Niw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+Y2xpcChwYXRoKTsKIH0K
IAotSW50UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRm
b3JtQ29udGV4dCgpKSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CkBAIC0xMDAyLDE3ICsxMDA4LDE0IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICByZXN0b3JlKCk7
CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYg
eU9mZnNldCkKK3N0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVk
KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0
KQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKICAgICBVTlVT
RURfUEFSQU0oY29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKHhPZmZzZXQpOwogICAgIFVOVVNF
RF9QQVJBTSh5T2Zmc2V0KTsKICNlbHNlCi0gICAgaWYgKGNvbnRleHQucmVuZGVyaW5nTW9kZSgp
ID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKSkpCisgICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZz
ZXRzKGNvbnRleHQpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXb3JrIGFyb3VuZCA8cmRh
cjovL3Byb2JsZW0vNTUzOTM4OD4gYnkgZW5zdXJpbmcgdGhhdCB0aGUgb2Zmc2V0cyB3aWxsIGdl
dCB0cnVuY2F0ZWQKQEAgLTEwMzAsMTAgKzEwMzMsNTUgQEAgc3RhdGljIHZvaWQgYXBwbHlTaGFk
b3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1
ciwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0Q0dMaW5lQ2FwKENHQ29udGV4
dFJlZiBjb250ZXh0LCBMaW5lQ2FwIGNhcCkKIHsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzd2l0Y2ggKGNhcCkgewor
ICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChjb250
ZXh0LCBrQ0dMaW5lQ2FwQnV0dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUNhcDo6
Um91bmQ6CisgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcFJv
dW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQ2FwOjpTcXVhcmU6CisgICAgICAg
IENHQ29udGV4dFNldExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcFNxdWFyZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KIAorc3RhdGljIHZvaWQgc2V0Q0dMaW5lSm9pbihDR0NvbnRleHRS
ZWYgY29udGV4dCwgTGluZUpvaW4gam9pbikKK3sKKyAgICBzd2l0Y2ggKGpvaW4pIHsKKyAgICBj
YXNlIExpbmVKb2luOjpNaXRlcjoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4
dCwga0NHTGluZUpvaW5NaXRlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUpvaW46
OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9p
blJvdW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6CisgICAg
ICAgIENHQ29udGV4dFNldExpbmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luQmV2ZWwpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNldENHTWl0ZXJMaW1pdChDR0Nv
bnRleHRSZWYgY29udGV4dCwgZmxvYXQgbGltaXQpCit7CisgICAgQ0dDb250ZXh0U2V0TWl0ZXJM
aW1pdChjb250ZXh0LCBsaW1pdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHTGluZURhc2goQ0dD
b250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zm
c2V0KQoreworICAgIGlmIChkYXNoT2Zmc2V0IDwgMCkgeworICAgICAgICBmbG9hdCBsZW5ndGgg
PSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIGxlbmd0aCArPSBzdGF0aWNfY2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKKyAg
ICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZz
ZXQsIGxlbmd0aCkgKyBsZW5ndGg7CisgICAgfQorICAgIENHQ29udGV4dFNldExpbmVEYXNoKGNv
bnRleHQsIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkpOworfQorCitz
dGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhDR0NvbnRleHRSZWYgY29udGV4dCwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImIGNvbG9yLCBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQorewogICAgIGlm
IChvZmZzZXQuaXNaZXJvKCkgJiYgIWJsdXIpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93
V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogICAgICAgICByZXR1cm47CkBA
IC0xMDQ1LDcgKzEwOTMsNyBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJgogICAgIENHRmxvYXQg
eU9mZnNldCA9IG9mZnNldC5oZWlnaHQoKTsKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVy
OwogCi0gICAgaWYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSkg
eworICAgIGlmICghc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKICAgICAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAKICAg
ICAgICAgQ0dGbG9hdCBBID0gdXNlclRvQmFzZUNUTS5hICogdXNlclRvQmFzZUNUTS5hICsgdXNl
clRvQmFzZUNUTS5iICogdXNlclRvQmFzZUNUTS5iOwpAQCAtMTA2Niw3ICsxMTE0LDggQEAgc3Rh
dGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICAvLyBFeHRyZW1lICJibHVyIiB2YWx1ZXMgY2FuIG1h
a2UgdGV4dCBkcmF3aW5nIGNyYXNoIG9yIHRha2UgY3JhenkgbG9uZyB0aW1lcywgc28gY2xhbXAK
ICAgICBibHVyUmFkaXVzID0gc3RkOjptaW4oYmx1clJhZGl1cywgbmFycm93UHJlY2lzaW9uVG9D
R0Zsb2F0KDEwMDAuMCkpOwogCi0gICAgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVk
ZWQoZ3JhcGhpY3NDb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICBpZiAocmVuZGVyaW5n
TW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKKyAgICAgICAgYXBwbHlTaGFkb3dP
ZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7CiAKICAg
ICAvLyBDaGVjayBmb3IgYW4gaW52YWxpZCBjb2xvciwgYXMgdGhpcyBtZWFucyB0aGF0IHRoZSBj
b2xvciB3YXMgbm90IHNldCBmb3IgdGhlIHNoYWRvdwogICAgIC8vIGFuZCB3ZSBzaG91bGQgdGhl
cmVmb3JlIGp1c3QgdXNlIHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KQEAgLTEwNzYsNDQgKzEx
MjUsODEgQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICAgICAgQ0dDb250ZXh0U2V0U2hh
ZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZU1ha2UoeE9mZnNldCwgeU9mZnNldCksIGJsdXJS
YWRpdXMsIGNhY2hlZENHQ29sb3IoY29sb3IpLmdldCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBhdXRvIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQorICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChj
b250ZXh0LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlja25lc3MsIDAuZikpOworICAgIGF1dG8g
Y29udGV4dCA9IGludGVybmFsUGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAg
Q0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihz
dGF0ZS5zdHJva2VDb2xvcikuZ2V0KCkpOworICAgIGZvciAoYXV0byBjaGFuZ2UgOiBzdGF0ZSgp
LmNoYW5nZXMoKSkgeworICAgICAgICBzd2l0Y2ggKGNoYW5nZSkgeworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTToKKyAgICAgICAgICAgIENHQ29udGV4dFNl
dENUTShjb250ZXh0LCBzdGF0ZSgpLmdldENUTSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFu
Z2UpKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZS5maWxsQ29sb3IpOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaDoKKyAg
ICAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0YXRlKCkuZmlsbEJydXNoKCkuY29s
b3IoKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRBbHBo
YShjb250ZXh0LCBzdGF0ZS5hbHBoYSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0YXRlKCkuc3Ryb2tlVGhpY2tuZXNzKCksIDAuZikp
OworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKQotICAgICAgICBzZXRDR0JsZW5kTW9kZShjb250
ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaDoKKyAgICAgICAg
ICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29s
b3Ioc3RhdGUoKS5zdHJva2VCcnVzaCgpLmNvbG9yKCkpLmdldCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0
RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUo
Y29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKSk7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcDoKKyAgICAgICAg
ICAgIHNldENHTGluZUNhcChjb250ZXh0LCBzdGF0ZSgpLmxpbmVDYXAoKSk7CisgICAgICAgICAg
ICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFs
aWFzKGNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW46CisgICAgICAgICAgICBzZXRDR0xpbmVK
b2luKGNvbnRleHQsIHN0YXRlKCkubGluZUpvaW4oKSk7CisgICAgICAgICAgICBicmVhazsKIAot
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3Ro
Rm9udHNDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250
ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2g6CisgICAgICAgICAgICBzZXRDR0xpbmVEYXNoKGNv
bnRleHQsIHN0YXRlKCkubGluZURhc2goKS5kYXNoZXMsIHN0YXRlKCkubGluZURhc2goKS5vZmZz
ZXQpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAg
ICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9sYXRp
b25RdWFsaXR5KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0OgorICAgICAgICAgICAg
c2V0Q0dNaXRlckxpbWl0KGNvbnRleHQsIHN0YXRlKCkubWl0ZXJMaW1pdCgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dDaGFuZ2UpKQotICAgICAgICBzZXRDR1NoYWRvdygqdGhpcywgc3RhdGUuc2hhZG93
T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotfQorICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGU6Cisg
ICAgICAgICAgICBzZXRDR0JsZW5kTW9kZShjb250ZXh0LCBzdGF0ZSgpLmNvbXBvc2l0ZU1vZGUo
KS5vcGVyYXRpb24sIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZSk7CisgICAgICAg
ICAgICBicmVhazsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdChmbG9h
dCBsaW1pdCkKLXsKLSAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgp
LCBsaW1pdCk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJv
cFNoYWRvdzoKKyAgICAgICAgICAgIHNldENHU2hhZG93KGNvbnRleHQsIHJlbmRlcmluZ01vZGUo
KSwgc3RhdGUoKS5kcm9wU2hhZG93KCkub2Zmc2V0LCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5ibHVy
UmFkaXVzLCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5jb2xvciwgc3RhdGUoKS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGE6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRB
bHBoYShjb250ZXh0LCBzdGF0ZSgpLmFscGhhKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5OgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
Y29udGV4dCwgY2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZSgpLmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGU6CisgICAgICAgICAgICBDR0Nv
bnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUoc3RhdGUo
KS50ZXh0RHJhd2luZ01vZGUoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXM6CisgICAgICAg
ICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUoKS5zaG91bGRB
bnRpYWxpYXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzOgorICAgICAgICAgICAgQ0dD
b250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY29udGV4dCwgc3RhdGUoKS5zaG91bGRTbW9vdGhG
b250cygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHIpCkBAIC0xMTI1LDcgKzEyMTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewogICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0
ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAg
IGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgY29uc3QgZmxvYXQgZG91YmxlTGluZVdp
ZHRoID0gbGluZVdpZHRoICogMjsKICAgICAgICAgICAgIGZsb2F0IGFkanVzdGVkV2lkdGggPSBj
ZWlsZihyZWN0LndpZHRoKCkgKyBkb3VibGVMaW5lV2lkdGgpOwpAQCAtMTEzNSw3ICsxMjIxLDYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIGF1dG8gbGF5ZXIgPSBhZG9wdENGKENH
TGF5ZXJDcmVhdGVXaXRoQ29udGV4dChjb250ZXh0LCBsYXllclNpemUsIDApKTsKIAogICAgICAg
ICAgICAgQ0dDb250ZXh0UmVmIGxheWVyQ29udGV4dCA9IENHTGF5ZXJHZXRDb250ZXh0KGxheWVy
LmdldCgpKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0gbGluZVdpZHRo
OwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGxheWVyQ29udGV4dCwgbGluZVdp
ZHRoKTsKIAogICAgICAgICAgICAgLy8gQ29tcGVuc2F0ZSBmb3IgdGhlIGxpbmUgd2lkdGgsIG90
aGVyd2lzZSB0aGUgbGF5ZXIncyB0b3AtbGVmdCBjb3JuZXIgd291bGQgYmUKQEAgLTExNDksOCAr
MTIzNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRSZWN0
KGxheWVyQ29udGV4dCwgcmVjdCk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdp
dGhTdHJva2VkUGF0aChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChs
YXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4
dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1f
c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBD
R0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsK
KyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAKICAg
ICAgICAgICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0LngoKSAtIGxp
bmVXaWR0aCk7CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkZXN0aW5hdGlvblkgPSByb3VuZGYo
cmVjdC55KCkgLSBsaW5lV2lkdGgpOwpAQCAtMTE2MSwxMyArMTI0NiwxMyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCByZWN0KTsKICAg
ICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4
dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAg
ICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3Jt
KCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0
ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVy
bigpOwogCiAgICAgLy8gVXNpbmcgQ0dDb250ZXh0QWRkUmVjdCBhbmQgQ0dDb250ZXh0U3Ryb2tl
UGF0aCB0byBzdHJva2UgcmVjdCByYXRoZXIgdGhhbgpAQCAtMTE4Miw5NCArMTI2Nyw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBsaW5lV2lkdGgpCiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKLXsKLSAgICBz
d2l0Y2ggKGNhcCkgewotICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKLSAgICAgICAgQ0dDb250ZXh0
U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcEJ1dHQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIExpbmVDYXA6OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5l
Q2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwUm91bmQpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChw
bGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFNxdWFyZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgaWYgKGRhc2hPZmZzZXQgPCAw
KSB7Ci0gICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbGVuZ3RoICs9IHN0YXRpY19j
YXN0PGZsb2F0PihkYXNoZXNbaV0pOwotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAg
ZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsKLSAgICB9Ci0g
ICAgQ0dDb250ZXh0U2V0TGluZURhc2gocGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRh
c2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQotewotICAgIHN3aXRjaCAoam9pbikgewotICAg
IGNhc2UgTGluZUpvaW46Ok1pdGVyOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0
Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTGluZUpvaW46OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9y
bUNvbnRleHQoKSwga0NHTGluZUpvaW5Sb3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TGluZUpvaW46OkJldmVsOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNv
bnRleHQoKSwga0NHTGluZUpvaW5CZXZlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewot
ICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOwotICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7Ci0gICAgbV9kYXRhLT5tX3Vz
ZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBDR0NvbnRleHRS
b3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKLSAgICBtX2RhdGEtPnJvdGF0ZShh
bmdsZSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50
aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KQotewotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRl
eHQoKSwgeCwgeSk7Ci0gICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgbV9kYXRhLT5t
X3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKLXsKLSAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRy
YW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQotewotICAgIENHQ29udGV4dFNldENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNm
b3JtKTsKLSAgICBtX2RhdGEtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91c2Vy
VG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi1BZmZpbmVU
cmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5j
bHVkZVNjYWxlKSBjb25zdAotewotICAgIC8vIFRoZSBDVE0gdXN1YWxseSBpbmNsdWRlcyB0aGUg
ZGV2aWNlU2NhbGVGYWN0b3IgZXhjZXB0IGluIFdlYktpdCAxIHdoZW4gdGhlCi0gICAgLy8gY29u
dGVudCBpcyBub24tY29tcG9zaXRlZCwgc2luY2UgdGhlIHNjYWxlIGZhY3RvciBpcyBpbnRlZ3Jh
dGVkIGF0IGEgbG93ZXIKLSAgICAvLyBsZXZlbC4gVG8gZ3VhcmFudGVlIHRoZSBkZXZpY2VTY2Fs
ZSBpcyBpbmNsdWRlZCwgd2UgY2FuIHVzZSB0aGlzIENHIEFQSS4KLSAgICBpZiAoaW5jbHVkZVNj
YWxlID09IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBDR0Nv
bnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3JtKHBsYXRmb3JtQ29udGV4dCgp
KTsKLQotICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwotfQot
CiBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewogICAgIC8vIEl0
IGlzIG5vdCBlbm91Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2aWNlIHNwYWNlLiBU
aGUgcm90YXRpb24gcGFydCBvZiB0aGUKQEAgLTEyODAsNyArMTI3Nyw5IEBAIEZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIFJvdW5kaW5nCiAgICAgaWYgKG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93
blRvQmVJZGVudGl0eSkKICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3QpOwogCi0g
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0VXNlclNwYWNl
VG9EZXZpY2VTcGFjZVRyYW5zZm9ybShwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIENHQWZmaW5lVHJhbnNmb3Jt
IGRldmljZU1hdHJpeCA9IENHQ29udGV4dEdldFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFuc2Zv
cm0oY29udGV4dCk7CiAgICAgaWYgKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShkZXZpY2VN
YXRyaXgpKSB7CiAgICAgICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRv
QmVJZGVudGl0eSA9IHRydWU7CiAgICAgICAgIHJldHVybiByb3VuZGVkSW50UmVjdChyZWN0KTsK
QEAgLTEzMTksNiArMTMxOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAgICAgaWYgKCF3
aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIGxvY2FsU3Ryb2tlQ29sb3Ioc3Ryb2tl
Q29sb3IoKSk7CiAKICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRB
bnRpYWxpYXNpbmdNb2RlRm9yVGV4dChGbG9hdFJlY3QocG9pbnQsIEZsb2F0U2l6ZSh3aWR0aHMu
bGFzdCgpLCB0aGlja25lc3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3IpOwpAQCAtMTM2
NCwxMiArMTM2NCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lcwogICAgIH0KIAogICAgIGlm
IChmaWxsQ29sb3JJc05vdEVxdWFsVG9TdHJva2VDb2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29s
b3IocGxhdGZvcm1Db250ZXh0KCksIGxvY2FsU3Ryb2tlQ29sb3IpOworICAgICAgICBzZXRDR0Zp
bGxDb2xvcihjb250ZXh0LCBsb2NhbFN0cm9rZUNvbG9yKTsKIAotICAgIENHQ29udGV4dEZpbGxS
ZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaEJvdW5kcy5kYXRhKCksIGRhc2hCb3VuZHMuc2l6
ZSgpKTsKKyAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwgZGFzaEJvdW5kcy5kYXRhKCks
IGRhc2hCb3VuZHMuc2l6ZSgpKTsKIAogICAgIGlmIChmaWxsQ29sb3JJc05vdEVxdWFsVG9TdHJv
a2VDb2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGZpbGxD
b2xvcigpKTsKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgZmlsbENvbG9yKCkpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGlu
aywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKQEAgLTE0MTIsMTcgKzE0MTIsMTggQEAgUmVu
ZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yKQogewogICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBiYXNlIENUTSBv
ZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQu
CiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2Ug
Y2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKICAgICAvLyB0byBkcmF3
IHdpdGggYSBzY2FsZSBmYWN0b3Igb2YgMSByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIHNjYWxlIGZh
Y3Rvci4KLSAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBDR0FmZmlu
ZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCkpLCBk
ZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBDR0NvbnRleHRTZXRC
YXNlQ1RNKGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNU
TShjb250ZXh0KSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxs
aXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRz
IHNvbGlkIGNvbG9ycy4KLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5m
aWxsUGF0dGVybikgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBmaWxsUGF0dGVybigpKSB7
CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTQzNCw3ICsxNDM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7CiAgICAgLy8gQ0dDb250
ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KLSAgICBp
ZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKKyAg
ICBpZiAoc3Ryb2tlR3JhZGllbnQoKSB8fCBzdHJva2VQYXR0ZXJuKCkpIHsKICAgICAgICAgc3Ry
b2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0
NjgsOSArMTQ2OSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphZGREZXN0aW5hdGlvbkF0
UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaQogCiBib29sIEdyYXBoaWNz
Q29udGV4dENHOjpjYW5Vc2VTaGFkb3dCbHVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHJlbmRl
cmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVk
U2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgcmV0dXJu
IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFz
Qmx1cnJlZFNoYWRvdygpICYmICFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpOwogfQogCi19CiAK
LSNlbmRpZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmgKaW5kZXggNDY4YTQ0YmFhODZlZTUyNjE5ZDI1NWY5Mzk0M2E5NzU1YmFjOWZhYi4u
Zjk5YzNkOWI5YmQyODI1ODY1ZmRmN2VhODBiMmFmMDBlMzRiNTJkYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCwg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDUzICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lm
IFVTRShDRykKKwogI2luY2x1ZGUgIkNvbG9yU3BhY2VDRy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNHQWZmaW5lVHJhbnNmb3JtIGdl
dFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKLQotY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZl
ciB7Ci1wdWJsaWM6Ci0gICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4
dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCi0gICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdT
dGF0ZShtX2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigp
Ci0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIENHQ29u
dGV4dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZl
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIENH
Q29udGV4dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9
IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2Nv
bnRleHQpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotICAgIAot
ICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zYXZlQW5k
UmVzdG9yZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIENHQ29udGV4dFJlZiBtX2NvbnRl
eHQ7Ci0gICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOwotfTsKLQogY2xhc3MgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0Q0cgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKIHB1YmxpYzoK
ICAgICBHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYpOwpAQCAtODUsNjkgKzQ1LDQ4IEBA
IHB1YmxpYzoKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogICAg
IENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQg
c2F2ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBj
b25zdCBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBm
aW5hbDsKIAorICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFs
OworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5U3Ry
b2tlUGF0dGVybigpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwot
ICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmlu
YWw7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmlu
YWw7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCiAgICAgdm9pZCBh
cHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CiAKLSAgICB1c2luZyBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0OwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLQotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4
dChib29sKSBmaW5hbDsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsK
LQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7Ci0gICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAogICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAgICB2
b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotCiAgICAgdm9pZCBjbGlwUGF0aChjb25z
dCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisgICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CiAKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0
TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGlu
ZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7CiAK
LSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
c2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25z
dCBQYXRoJikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAg
IHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxv
YXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVk
ZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQgZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKIAotICAg
IEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5n
TW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7
CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9h
dCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CkBAIC0xNTYsMTgg
Kzk1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlmCiAK
LSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pIGZpbmFsOwogCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CiAgICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGRE
ZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50Jikg
ZmluYWw7CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CiAKICAgICBib29sIHN1cHBv
cnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwg
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVj
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQg
YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2lu
dCYpIGZpbmFsOwogCiAgICAgdmlydHVhbCBib29sIGNhblVzZVNoYWRvd0JsdXIoKSBjb25zdDsK
IApAQCAtMTc1LDkgKzExNywxNiBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICNlbmRp
ZgogCisgICAgQ0dDb250ZXh0UmVmIGludGVybmFsUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisK
IHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBu
dWxscHRyIH07CiB9OwogCi19CitDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENH
Q29udGV4dFJlZik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIkNHQ29u
dGV4dFN0YXRlU2F2ZXIuaCIKIAorI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5k
ZXggZTZjZTJmYjk3MjQ3YTZiODZjMDliMWFkMzYxNzAxYzJlYzNlODYyNS4uYWYwMGEwMTMzNDdl
MGNkODVhMzBiODg0ZWJjNzlmMzJmMWUyMzEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTEyNyw3
ICsxMjcsNyBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYQogCiAgICAgLy8gT2xkIGFuZCBuZXcg
Y29udGV4dCBzY2FsaW5nIGZhY3RvcnMgaGF2ZSB0byBtYXRjaCBhcyB3ZWxsLgogICAgIEFmZmlu
ZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFRyYW5zZm9ybTsKLSAgICBjb250
ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUp
LmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKKyAgICBjb250ZXh0LmdldENUTSgpLmRl
Y29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybTo6RGVj
b21wb3NlZFR5cGUgY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybTsKICAgICBtX2NhY2hlZFRyYW5z
Zm9ybS5kZWNvbXBvc2UoY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybSk7CkBAIC0yNTUsNyArMjU1
LDcgQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICB0cmFuc2Zvcm1Db250ZXh0Rm9yUGFp
bnRpbmcoYnVmZmVyQ29udGV4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KG1fY2FjaGVkSW1hZ2VSZWN0
LmxvY2F0aW9uKCksIHNyY1JlY3Quc2l6ZSgpKSk7CiAgICAgZHJhd1BERlBhZ2UoYnVmZmVyQ29u
dGV4dCk7CiAKLSAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9jYWNoZWRUcmFu
c2Zvcm0gPSBjb250ZXh0LmdldENUTSgpOwogICAgIG1fY2FjaGVkRGVzdGluYXRpb25SZWN0ID0g
ZHN0UmVjdDsKICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogICAgICsrbV9jYWNo
aW5nQ291bnRGb3JUZXN0aW5nOwpAQCAtMzYzLDYgKzM2Myw4IEBAIHZvaWQgUERGRG9jdW1lbnRJ
bWFnZTo6ZHJhd1BERlBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogCiAgICAgY29udGV4
dC50cmFuc2xhdGUoLW1fY3JvcEJveC5sb2NhdGlvbigpKTsKIAorICAgIGNvbnRleHQuYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKwogICAgIC8vIENHUERGIHBhZ2VzIGFyZSBpbmRleGVkIGZyb20gMS4K
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICBDR0NvbnRleHREcmF3UERGUGFnZVdpdGhBbm5vdGF0
aW9ucyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1BERkRvY3VtZW50R2V0UGFnZShtX2Rv
Y3VtZW50LmdldCgpLCAxKSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCBkNjg5YTUxYTg5MTAyYTUwOTA0NTU5YjQ0MjIz
NjlkZTE0NzAzMzM1Li5mZGVlZjZiMzhkMGM1YjU1NTY3MzdlYjdmNDRhZjJmMmZjOWE0NDQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAg
LTI0Nyw3ICsyNDcsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgIEdyYXBoaWNzQ29u
dGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBzdHJva2VTdHlsZUFwcGxpZXIo
Z3JhcGhpY3NDb250ZXh0KTsKIAotICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhD
b250YWluc1BvaW50KGNvbnRleHQsIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKKyAgICBib29sIGhp
dFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChncmFwaGljc0NvbnRleHQucGxh
dGZvcm1Db250ZXh0KCksIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNvbnRleHQpOwogCiAgICAgcmV0dXJuIGhpdFN1Y2Nlc3M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVj
b3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggZWZiYzFlNDk1NDQxYmVk
ZTczNGU5NDhkZDI2ZDM3MTQ0MTY1NTNlMC4uZTliN2FjNGQ3ZjRjYmY3NDEyODkzOWJmYThjMDRl
NzY1YTBkYmQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJE
cmF3R2x5cGhzUmVjb3JkZXIuaCIKIAotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVk
ZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgpA
QCAtMzUsNDkgKzM0LDQxIEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KICNpbmNsdWRl
IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIFBM
QVRGT1JNKFdJTikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVm
IGJlZ2luTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3Rh
dGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDRkRpY3Rpb25h
cnlSZWYsIENHQ29udGV4dERlbGVnYXRlUmVmKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVm
IGJlZ2luTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3Rh
dGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0LCBDRkRpY3Rpb25hcnlSZWYsIENHQ29u
dGV4dERlbGVnYXRlUmVmKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAq
c3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZv
KGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihyc3RhdGUsIGdzdGF0
ZSwgcmVjdCk7CisgICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihnc3RhdGUpOwogICAgIHJl
dHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExheWVy
KENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0
ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExh
eWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBD
R0dTdGF0ZVJlZiBnc3RhdGUpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9
ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldElu
Zm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmRFbmRMYXllcihyc3RhdGUsIGdzdGF0
ZSk7CisgICAgcmVjb3JkZXIucmVjb3JkRW5kTGF5ZXIoZ3N0YXRlKTsKICAgICByZXR1cm4gZGVs
ZWdhdGU7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVS
ZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3Rh
dGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiB0bSwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwg
Y29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIENHRXJyb3Ig
ZHJhd0dseXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0
ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0
IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3Vu
dCkKIHsKLSAgICBpZiAoQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpID4gMCkgewotICAgICAgICBE
cmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNv
cmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgICAgICByZWNv
cmRlci5yZWNvcmREcmF3R2x5cGhzKHJzdGF0ZSwgZ3N0YXRlLCB0bSwgZ2x5cGhzLCBwb3NpdGlv
bnMsIGNvdW50KTsKLSAgICB9CisgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpz
dGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8o
ZGVsZWdhdGUpKTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3R2x5cGhzKGdzdGF0ZSwgZ2x5cGhz
LCBwb3NpdGlvbnMsIGNvdW50KTsKICAgICByZXR1cm4ga0NHRXJyb3JTdWNjZXNzOwogfQogCi1z
dGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENH
UmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0
LCBDR0ltYWdlUmVmIGltYWdlKQorc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERl
bGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3Rh
dGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGltYWdlKQogewogICAgIERyYXdHbHlwaHNSZWNv
cmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250
ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRHJhd0lt
YWdlKHJzdGF0ZSwgZ3N0YXRlLCByZWN0LCBpbWFnZSk7CisgICAgcmVjb3JkZXIucmVjb3JkRHJh
d0ltYWdlKGdzdGF0ZSwgcmVjdCwgaW1hZ2UpOwogICAgIHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7
CiB9CiAKLVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3Jl
YXRlSW50ZXJuYWxDb250ZXh0KCkKK3N0YXRpYyBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBj
cmVhdGVJbnRlcm5hbENvbnRleHQoRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlcikKIHsKLSAg
ICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdhdGVDcmVhdGUo
dGhpcykpOworICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxl
Z2F0ZUNyZWF0ZSgmcmVjb3JkZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNr
KGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVCZWdpbkxheWVyLCByZWludGVycHJldF9jYXN0PENH
Q29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZiZWdpbkxheWVyKSk7CiAgICAgQ0dDb250ZXh0RGVs
ZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRW5kTGF5ZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmVuZExheWVyKSk7CiAgICAg
Q0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJh
d0dseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmV2Vi
Q29yZTo6ZHJhd0dseXBocykpOwpAQCAtODYsNjcgKzc3LDE1IEBAIFVuaXF1ZVJlZjxHcmFwaGlj
c0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHRDRz4oY29udGV4dC5nZXQoKSk7
CiB9CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29u
dGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMs
IERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293
bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNv
bnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNv
bnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiAg
ICAgLCBtX2RlY29uc3RydWN0RHJhd0dseXBocyhkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAgICAg
LCBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dChkZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgLCBt
X2ludGVybmFsQ29udGV4dChjcmVhdGVJbnRlcm5hbENvbnRleHQoKSkKKyAgICAsIG1faW50ZXJu
YWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4dCgqdGhpcykpCiB7CiB9CiAKLXZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxl
LmNvbG9yID0gY29udGV4dFN0YXRlLmZpbGxDb2xvcjsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmls
bFN0eWxlLmdyYWRpZW50ID0gY29udGV4dFN0YXRlLmZpbGxHcmFkaWVudDsKLSAgICBtX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUu
ZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLmZpbGxQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmNvbG9yID0gY29udGV4dFN0YXRlLnN0cm9rZUNvbG9yOwotICAgIG1f
b3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5zdHJva2VH
cmFkaWVudDsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAg
IG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLnN0cm9r
ZVBhdHRlcm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuY3RtID0gbV9vd25lci5nZXRDVE0oKTsg
Ly8gRklYTUU6IERlYWwgd2l0aCBiYXNlIENUTS4KLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cub2Zmc2V0ID0gY29udGV4dFN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBtX29yaWdpbmFsU3Rh
dGUuc2hhZG93LmJsdXIgPSBjb250ZXh0U3RhdGUuc2hhZG93Qmx1cjsKLSAgICBtX29yaWdpbmFs
U3RhdGUuc2hhZG93LmNvbG9yID0gY29udGV4dFN0YXRlLnNoYWRvd0NvbG9yOwotICAgIG1fb3Jp
Z2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA9IGNvbnRleHRTdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtczsKLQotICAgIG1fY3VycmVudFN0YXRlID0gbV9vcmlnaW5hbFN0YXRl
OwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAgICBpZiAobV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvcik7
Ci0gICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCkKLSAgICAg
ICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNl
VHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxTdGF0ZS5m
aWxsU3R5bGUucGF0dGVybik7Ci0gICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxl
LnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4o
Km1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYgKG1f
b3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50
ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUu
Y29sb3IpOwotICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVu
dCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdp
bmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHls
ZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1f
b3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKLSAgICAgICAgaWYgKG1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRl
eHQtPnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJu
KTsKLSAgICB9Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0Q1RNKG1fb3JpZ2luYWxTdGF0
ZS5jdG0pOwotCi0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgbV9pbnRl
cm5hbENvbnRleHQtPnNldFNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9v
cmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBj
b250ZXh0U3RhdGUuc2hhZG93UmFkaXVzTW9kZSk7Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+
c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwotfQotCi12
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250
JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OnNldEludGVybmFsRm9udChjb25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIEFTU0VSVChDR0FmZmluZVRyYW5zZm9ybUlzSWRl
bnRpdHkoQ1RGb250R2V0TWF0cml4KGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKSk7CiAK
QEAgLTE1NiwxMDQgKzk1LDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50
ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNCiAgICAgbV9vcmln
aW5hbFRleHRNYXRyaXggPSBjb21wdXRlT3ZlcmFsbFRleHRNYXRyaXgoZm9udCk7CiAgICAgaWYg
KGZvbnQucGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZl
cnRpY2FsKQogICAgICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVWZXJ0aWNhbFRl
eHRNYXRyaXgoZm9udCwgbV9vcmlnaW5hbFRleHRNYXRyaXgpOwotCi0gICAgYXV0byYgY29udGV4
dFN0YXRlID0gbV9vd25lci5zdGF0ZSgpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb250
ZXh0U3RhdGUpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnRleHRTdGF0ZSk7CiB9
CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29udGV4dCgpCitH
cmFwaGljc0NvbnRleHRTdGF0ZSBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENv
bnRleHQoKQogewotICAgIHVwZGF0ZUNUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKLSAgICB1cGRh
dGVGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0
YXRlLmZpbGxTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5w
YXR0ZXJuLmdldCgpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ry
b2tlU3R5bGUuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudC5nZXQo
KSwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0
ZVNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNo
YWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBtX29yaWdpbmFsU3RhdGUu
c2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPyBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzIDog
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Ok5vKTsKKyAgICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBt
X2Rlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5tZXJn
ZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPmFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGU7CiB9CiAKLXZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjp1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImIG5ld0NvbG9yLCBH
cmFkaWVudCogbmV3R3JhZGllbnQsIFBhdHRlcm4qIG5ld1BhdHRlcm4pCit2b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6cmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSkKIHsKLSAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdyb25n
IGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVzZS4KLSAgICAvLyBDVCB3
aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlzIHRo
ZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4dCgp
IHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMgY2hl
Y2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0NvbG9yID09IG1fY3VycmVu
dFN0YXRlLmZpbGxTdHlsZS5jb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGUgbmV3U3RhdGU7Ci0gICAgbmV3U3RhdGUuZmlsbENvbG9yID0gbmV3Q29sb3I7
Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5maWxsR3JhZGllbnQgPSBu
ZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0dGVybikKLSAgICAgICAgbmV3U3RhdGUuZmlsbFBh
dHRlcm4gPSBuZXdQYXR0ZXJuOwotICAgIG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUs
IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1cnJl
bnRTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBuZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29u
dGV4dC5tZXJnZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7CiB9CiAKLXZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjp1cGRhdGVTdHJva2VDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRp
ZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpyZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICAvLyBU
aGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1p
dGVkIHVzZS4KLSAgICAvLyBDVCB3aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNv
bG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25j
bHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdp
bmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYg
KG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBuZXdTdGF0
ZS5zdHJva2VDb2xvciA9IG5ld0NvbG9yOwotICAgIGlmIChuZXdHcmFkaWVudCkKLSAgICAgICAg
bmV3U3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBuZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0dGVy
bikKLSAgICAgICAgbmV3U3RhdGUuc3Ryb2tlUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAgbV9v
d25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlQ29sb3JDaGFuZ2UgfSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29sb3Ig
PSBuZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0
Q1RNKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnVwZGF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKK3ZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7Ci0gICAg
aWYgKGN0bSA9PSBtX2N1cnJlbnRTdGF0ZS5jdG0pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
b3duZXIuc2V0Q1RNKGN0bSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuY3RtID0gY3RtOworICAgIG1f
ZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAg
bV9kZXN0aW5hdGlvbkNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotc3RhdGlj
IGJvb2wgc2hhZG93SXNDbGVhcmVkKGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9h
dCBzaGFkb3dCbHVyKQotewotICAgIHJldHVybiBzaGFkb3dPZmZzZXQgPT0gRmxvYXRTaXplKCkg
JiYgIXNoYWRvd0JsdXI7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFk
b3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyBpZiBub2JvZHkgaGFzIGFueSBzaGFkb3dzLgotICAgIGlmIChzaGFk
b3dJc0NsZWFyZWQoc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyKSAmJiBzaGFkb3dJc0NsZWFyZWQo
bV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsK
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBzdGF0ZUNoYW5nZUZs
YWdzOwotCi0gICAgaWYgKHNoYWRvd09mZnNldCAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zm
c2V0IHx8IHNoYWRvd0JsdXIgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgfHwgc2hhZG93
Q29sb3IgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmNvbG9yKSB7Ci0gICAgICAgIG5ld1N0YXRl
LnNoYWRvd09mZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93Qmx1
ciA9IHNoYWRvd0JsdXI7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd0NvbG9yID0gc2hhZG93Q29s
b3I7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgIT0g
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkICYmIChzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKSAhPSBtX2N1cnJlbnRTdGF0
ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtczo6WWVzKTsKLSAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKLSAgICB9Ci0gICAg
aWYgKHN0YXRlQ2hhbmdlRmxhZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9v
d25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgc3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBt
X2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0ID0gc2hhZG93T2Zmc2V0OwotICAgIG1fY3VycmVu
dFN0YXRlLnNoYWRvdy5ibHVyID0gc2hhZG93Qmx1cjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFk
b3cuY29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3Jl
VHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtczo6WWVzKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRv
dyhDR1N0eWxlUmVmIHN0eWxlKQorc3RhdGljIHZvaWQgc2V0RHJvcFNoYWRvdyhHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgQ0dTdHlsZVJlZiBzdHlsZSkKIHsKICAgICBpZiAo
Q0dTdHlsZUdldFR5cGUoc3R5bGUpICE9IGtDR1N0eWxlU2hhZG93KSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBTdXBwb3J0IG1vcmUga2luZHMgb2YgQ0dTdHlsZXMuCi0gICAgICAgIHVwZGF0ZVNoYWRv
dyh7MCwgMH0sIDAsIENvbG9yKCksIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpVbnNwZWNpZmll
ZCk7CisgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0yNjEsMjAgKzEzNCw5IEBAIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjp1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZiBzdHlsZSkKICAgICBhdXRvIHJhZCA9IGRlZzJy
YWQoc2hhZG93U3R5bGUuYXppbXV0aCAtIDE4MCk7CiAgICAgYXV0byBzaGFkb3dPZmZzZXQgPSBG
bG9hdFNpemUoc3RkOjpjb3MocmFkKSwgc3RkOjpzaW4ocmFkKSkgKiBzaGFkb3dTdHlsZS5oZWln
aHQ7CiAgICAgYXV0byBzaGFkb3dDb2xvciA9IENHU3R5bGVHZXRDb2xvcihzdHlsZSk7Ci0gICAg
dXBkYXRlU2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93U3R5bGUucmFkaXVzLCBDb2xvcjo6Y3Jl
YXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHNoYWRvd0NvbG9yKSwgU2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM6Olllcyk7Ci19CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxh
eWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0KQotewot
ICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgYXV0byBhbHBoYSA9
IENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKTsKLSAgICBtX293bmVyLmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoYWxwaGEpOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5
ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQotewotICAgIHVwZGF0
ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgbV9vd25lci5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93
T2Zmc2V0LCBzdGF0aWNfY2FzdDxmbG9hdD4oc2hhZG93U3R5bGUucmFkaXVzKSwgQ29sb3I6OmNy
ZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzaGFkb3dDb2xvcikgfSk7CisgICAgZGVzdGluYXRp
b25Db250ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRydWUpOwogfQogCiBzdGF0aWMg
VmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhjb25zdCBDR1BvaW50
IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiB0ZXh0
TWF0cml4KQpAQCAtMjkwLDE4ICsxNTIsMTggQEAgc3RhdGljIFZlY3RvcjxDR1NpemU+IGNvbXB1
dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMoY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2kKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJh
d0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENH
QWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBw
b3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdHbHlwaHMoQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBj
b25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCiB7CiAgICAgQVNTRVJUX0lN
UExJRVMobV9kZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpO
bywgbV9vcmlnaW5hbEZvbnQpOwogCi0gICAgaWYgKCFjb3VudCkKKyAgICBpZiAoIWNvdW50IHx8
IENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSA8PSAwKQogICAgICAgICByZXR1cm47CiAKICAgICBD
R0ZvbnRSZWYgdXNlZEZvbnQgPSBDR0dTdGF0ZUdldEZvbnQoZ3N0YXRlKTsKICAgICBpZiAobV9k
ZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyAmJiB1c2Vk
Rm9udCAhPSBhZG9wdENGKENURm9udENvcHlHcmFwaGljc0ZvbnQobV9vcmlnaW5hbEZvbnQtPnBs
YXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBudWxscHRyKSkuZ2V0KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5h
dGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKIAogICAgIC8vIFdl
IHdhbnQgdGhlIHJlcGxheWVyJ3MgQ1RNIGFuZCB0ZXh0IG1hdHJpeCB0byBtYXRjaCB0aGUgY3Vy
cmVudCBDVE0gYW5kIHRleHQgbWF0cml4LgogICAgIC8vIFRoZSBjdXJyZW50IHRleHQgbWF0cml4
IGlzIGEgY29uY2F0ZW5hdGlvbiBvZiB3aGF0ZXZlciBXZWJLaXQgc2V0cyBpdCB0byBhbmQgd2hh
dGV2ZXIKQEAgLTMyNCwxMyArMTg2LDE2IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNv
cmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAg
ICAgIGludmVyc2VDVE1GaXh1cCA9IGludmVyc2UudmFsdWUoKTsKICAgICBlbHNlCiAgICAgICAg
IGN0bUZpeHVwID0gQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgbV9vd25lci5jb25jYXRDVE0oY3Rt
Rml4dXApOworCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RNKGN0bUZpeHVwKTsK
IAogICAgIGF1dG8gZmlsbENvbG9yID0gQ0dHU3RhdGVHZXRGaWxsQ29sb3IoZ3N0YXRlKTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNl
cnZlQ29sb3JTcGFjZShmaWxsQ29sb3IpKTsKKwogICAgIGF1dG8gc3Ryb2tlQ29sb3IgPSBDR0dT
dGF0ZUdldFN0cm9rZUNvbG9yKGdzdGF0ZSk7Ci0gICAgdXBkYXRlRmlsbENvbG9yKENvbG9yOjpj
cmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2UoZmlsbENvbG9yKSk7Ci0gICAgdXBkYXRlU3Ryb2tl
Q29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOwot
ICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9y
U3BhY2Uoc3Ryb2tlQ29sb3IpKTsKKworICAgIHNldERyb3BTaGFkb3cobV9kZXN0aW5hdGlvbkNv
bnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAgICBhdXRvIGZvbnRTaXplID0g
Q0dHU3RhdGVHZXRGb250U2l6ZShnc3RhdGUpOwogICAgIFJlZiBmb250ID0gbV9kZXJpdmVGb250
RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyA/ICptX29yaWdpbmFsRm9u
dCA6IEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0
aEdyYXBoaWNzRm9udCh1c2VkRm9udCwgZm9udFNpemUsIG51bGxwdHIsIG51bGxwdHIpKSwgZm9u
dFNpemUpKTsKQEAgLTM0NSwzMCArMjEwLDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpy
ZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAg
ICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjMyOTE3PiAoYERyYXdHbHlw
aHNSZWNvcmRlcmAgc2hvdWxkIGJlIGFibGUgdG8gcmVjb3JkK3JlcGxheSB2ZXJ0aWNhbCB0ZXh0
KQogICAgIH0KIAotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlw
aHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3VudCwgdGV4dE1h
dHJpeCkuZGF0YSgpLCBjb3VudCwgdGV4dE1hdHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBt
X3Ntb290aGluZ01vZGUpOwotCi0gICAgbV9vd25lci5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVw
KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQs
IGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCB0
ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1sw
XSksIG1fc21vb3RoaW5nTW9kZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RN
KGludmVyc2VDVE1GaXh1cCk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRE
cmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3Qg
cmVjdCwgQ0dJbWFnZVJlZiBjZ0ltYWdlKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdJbWFnZShDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNn
SW1hZ2UpCiB7Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICB1
cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9u
Q29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIHNldERyb3BTaGFk
b3cobV9kZXN0aW5hdGlvbkNvbnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAg
ICAvLyBDb3JlIEdyYXBoaWNzIGFzc3VtZXMgYSAieSB1cCIgY29vcmRpbmF0ZSBzeXN0ZW0sIGJ1
dCBpbiBXZWJLaXQsIHdlIHVzZSBhICJ5LWRvd24iIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgIC8v
IFRoaXMgbWVhbnMgdGhhdCBXZWJLaXQncyBkcmF3aW5nIHJvdXRpbmVzIChHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZSgpKSBpbnRlbnRpb25hbGx5IGRyYXcgaW1hZ2VzIHVwc2lkZS1kb3duIGZy
b20gQ29yZSBHcmFwaGljcydzIHBvaW50IG9mIHZpZXcuCiAgICAgLy8gKFRoZXJlJ3MgYSB5LWZs
aXAgaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZSgpLikKICAgICAvLyBUaGUgcmVjdCBoYXMgdGhlIHJpZ2h0IGJvdW5kcywgYnV0IHdlIG5lZWQg
dG8gdHJhbnNmb3JtIGZyb20gQ0cncyBjb29yZGluYXRlIHN5c3RlbSB0byBXZWJLaXQncyBieSBw
ZXJmb3JtaW5nIG91ciBvd24geS1mbGlwIHNvIGltYWdlcyBhcmUgZHJhd24gdGhlIHJpZ2h0LXNp
ZGUtdXAuCiAgICAgLy8gV2UgZG8gdGhpcyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGUgdHdv
IEFQSXMsIHdoaWNoIGlzIHJpZ2h0IGhlcmUuCi0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgcmVj
dC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKLSAgICBtX293bmVyLnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRlKDAs
IHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSk7CisgICAgbV9kZXN0aW5hdGlv
bkNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgCiAgICAgYXV0byBpbWFnZSA9
IE5hdGl2ZUltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5kcmF3TmF0aXZlSW1h
Z2UoKmltYWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9
LCBpbWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9u
OjpPcmlnaW5Ub3BMZWZ0IH0pOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd05hdGl2
ZUltYWdlKCppbWFnZSwgaW1hZ2UtPnNpemUoKSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9hdFJlY3Qg
eyB7IH0sIGltYWdlLT5zaXplKCkgfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVu
dGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOworICAgIAogICAgIC8vIFVuZG8gdGhlIGFib3ZlIHkt
ZmxpcCB0byByZXN0b3JlIHRoZSBjb250ZXh0LgotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXpl
KDEsIC0xKSk7Ci0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgLShyZWN0LnNpemUuaGVpZ2h0ICsg
MiAqIHJlY3Qub3JpZ2luLnkpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9h
dFNpemUoMSwgLTEpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgLShy
ZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpKTsKK30KKwordm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMs
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNt
b290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBzZXRJbnRlcm5hbEZvbnQoZm9udCwg
c21vb3RoaW5nTW9kZSk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUlu
dGVybmFsQ29udGV4dCgpOworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxD
b250ZXh0LCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNt
b290aGluZ01vZGUpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0
ZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0zNzksMjUg
KzI1MiwxOSBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIGF1dG8gYm91bmRzID0g
Zm9udC5ib3VuZHNGb3JHbHlwaChnbHlwaHNbaV0pOwogCiAgICAgICAgIC8vIENyZWF0ZSBhIGxv
Y2FsIEltYWdlQnVmZmVyIGJlY2F1c2UgZGVjb2RpbmcgdGhlIFNWRyBmb250cyBoYXMgdG8gaGFw
cGVuIGluIFdlYlByb2Nlc3MuCi0gICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9vd25l
ci5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoYm91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9kOjpMb2NhbCkpIHsKKyAgICAgICAgaWYgKGF1dG8gaW1h
Z2VCdWZmZXIgPSBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIo
Ym91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9kOjpM
b2NhbCkpIHsKKyAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKICAgICAgICAgICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKGltYWdlQnVmZmVy
LT5jb250ZXh0KCksIGZvbnQsIGdseXBocyArIGksIGFkdmFuY2VzICsgaSwgMSwgRmxvYXRQb2lu
dCgpLCBzbW9vdGhpbmdNb2RlKTsKIAogICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9u
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9u
UmVjdC5tb3ZlQnkocGVuUG9zaXRpb24pOwotICAgICAgICAgICAgbV9vd25lci5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICAgICAgbV9kZXN0
aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25S
ZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIHBlblBvc2l0aW9uLm1vdmUoc2l6ZShhZHZhbmNl
c1tpXSkpOwogICAgIH0KIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNW
R1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKLXsKLSAgICBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGZvbnQsIHNtb290aGluZ01vZGUpOwot
ICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxDb250ZXh0LCBmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwotICAg
IGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7Ci19Ci0KIHZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0
UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgYXV0byBvdHN2
Z0dseXBocyA9IGZvbnQuZmluZE9UU1ZHR2x5cGhzKGdseXBocywgbnVtR2x5cGhzKTsKQEAgLTQ0
MCw3ICszMDcsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0J5U3BsaXR0aW5nSW50
b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmIGZvbgogdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCiB7CiAgICAgaWYgKG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzID09IERl
Y29uc3RydWN0RHJhd0dseXBoczo6Tm8pIHsKLSAgICAgICAgbV9vd25lci5kcmF3R2x5cGhzQW5k
Q2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwg
c21vb3RoaW5nTW9kZSk7CisgICAgICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNB
bmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50
LCBzbW9vdGhpbmdNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDUzLDE1ICsz
MjAsMTcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KENURm9udFJl
ZiBmb250LCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmUKIHsKICAgICBBU1NFUlQobV9kZWNvbnN0
cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogCi0gICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihtX293bmVyKTsKKyAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHNhdmVyKG1fZGVzdGluYXRpb25Db250ZXh0KTsKIAotICAgIG1fb3duZXIu
dHJhbnNsYXRlKGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0
LnNpemUuaGVpZ2h0KTsKLSAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZShsaW5lUmVjdC5vcmlnaW4ueCwgbGluZVJl
Y3Qub3JpZ2luLnkgKyBsaW5lUmVjdC5zaXplLmhlaWdodCk7CisgICAgbV9kZXN0aW5hdGlvbkNv
bnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAKLSAgICBwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGZvbnQsIGZvbnRTaXplKSksIEZvbnRT
bW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKKyAgICBzZXRJbnRlcm5hbEZvbnQo
Rm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNtb290
aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIAorICAgIGF1dG8gb3JpZ2luYWxT
dGF0ZSA9IHByZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKICAgICBDR0NvbnRleHRTZXRUZXh0UG9z
aXRpb24obV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAwLCAwKTsKICAgICBD
VExpbmVEcmF3KGxpbmUsIG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0g
ICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKKyAgICByZXN0b3JlRGVzdGluYXRpb25Db250
ZXh0KG9yaWdpbmFsU3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2Fk
ZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCmluZGV4IDUxMWUwOWI5NmNlZjAzMjUwOTBlMjNhZjkx
NGFlMzVmMmFiOGVkMmUuLmU1MzRjYzU1YWYyNmI3ZmI4MjgwZTYzYjdkYzI1YTNkNGE0MTYzNzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0Zv
bnRDYXNjYWRlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC0xNTIsMjUgKzE1MiwyNyBA
QCBzdGF0aWMgdm9pZCBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMoVmVjdG9y
PENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgc2hvd0ds
eXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9u
dCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dT
aXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4
dE1hdHJpeCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBj
b3VudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQogewogICAgIGlmICghY291
bnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRm
b3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisKICAgICBWZWN0b3I8Q0dQb2ludCwgMjU2
PiBwb3NpdGlvbnMoY291bnQpOwogICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9
PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7Ci0gICAgICAgIFNjb3BlZFRleHRNYXRyaXgg
c2F2ZWRNYXRyaXgoY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCB0ZXh0TWF0cml4KSwg
Y29udGV4dCk7CisgICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgoY29tcHV0ZVZl
cnRpY2FsVGV4dE1hdHJpeChmb250LCB0ZXh0TWF0cml4KSwgY2dDb250ZXh0KTsKIAogICAgICAg
ICBWZWN0b3I8Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhjb3VudCk7CiAgICAgICAgIENURm9u
dEdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
Z2x5cGhzLCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7CiAKICAgICAgICAgYXV0byBhc2Nl
bnREZWx0YSA9IGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2Vs
aW5lKSAtIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpOwotICAgICAgICBmaWxsVmVj
dG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjb250ZXh0LCB0cmFuc2xh
dGlvbnMuZGF0YSgpLCBhZHZhbmNlcywgY291bnQsIHBvaW50LCBhc2NlbnREZWx0YSk7Ci0gICAg
ICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0
aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICAgICAgZmlsbFZlY3RvcldpdGhWZXJ0
aWNhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY2dDb250ZXh0LCB0cmFuc2xhdGlvbnMuZGF0
YSgpLCBhZHZhbmNlcywgY291bnQsIHBvaW50LCBhc2NlbnREZWx0YSk7CisgICAgICAgIENURm9u
dERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRh
KCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpbGxWZWN0b3JX
aXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgYWR2YW5jZXMs
IGNvdW50LCBwb2ludCk7Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0
Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICAg
ICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjZ0Nv
bnRleHQsIGFkdmFuY2VzLCBjb3VudCwgcG9pbnQpOworICAgICAgICBDVEZvbnREcmF3R2x5cGhz
KHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwg
Y2dDb250ZXh0KTsKICAgICB9CiB9CiAKQEAgLTI0MiwxMCArMjQ0LDcgQEAgdm9pZCBGb250Q2Fz
Y2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEcKICAgICBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOwogICAgIENH
Q29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAKLSAg
ICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29s
b3Igc2hhZG93Q29sb3I7Ci0gICAgY29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dCbHVyLCBzaGFkb3dDb2xvcik7CisgICAgYXV0byBkcm9wU2hhZG93ID0gY29udGV4dC5kcm9w
U2hhZG93KCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQuZ2V0
Q1RNKCk7CiAgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9s
ZE9mZnNldCgpOwpAQCAtMjU4LDI5ICsyNTcsMjkgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQu
dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9y
LmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBG
b250KCkgJiYgKCFjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENU
TS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQudGV4
dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIGRyb3BTaGFkb3cuY29s
b3IuaXNWYWxpZCgpICYmICFkcm9wU2hhZG93LmJsdXJSYWRpdXMgJiYgIXBsYXRmb3JtRGF0YS5p
c0NvbG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
IHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNv
bnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykg
ewogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiBy
ZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNp
bmcuCiAgICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENv
bG9yID0gY29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9y
ID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhh
QXNGbG9hdCgpKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gZHJvcFNoYWRvdy5j
b2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkp
OwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAg
ICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwor
ICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIGRyb3BTaGFkb3cub2Zmc2V0
LndpZHRoKCk7CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMs
IHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRv
d24gaXMgbmVnYXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsg
c2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
KSA/IC0xIDogMSk7Ci0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChz
aGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5j
ZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0g
cG9pbnQueSgpICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZh
bmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNvbnRleHQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGlmIChz
eW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhG
bG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkp
LCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJp
eCk7CisgICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93
VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNvbnRleHQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CiAgICAgfQogCi0gICAgc2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhwb2ludCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHRleHRNYXRyaXgpOworICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQs
IGNvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAKICAg
ICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSks
IGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4
KTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSAr
IHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNvbnRleHQsIGdseXBocywg
YWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAKICAgICBpZiAoaGFzU2ltcGxlU2hh
ZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIs
IHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3cp
OwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHNob3VsZFNtb290aEZvbnRz
ICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3Qu
Y3BwCmluZGV4IDJlMmY0ZjRmMmNiNTVkMzY1ZTVhZTM5OTMyNWQwNWYyYzE3MzYxZmQuLmNjZjQw
Y2VhNjJiMTY3NDM2NmQ3NDg0MTYyYjFiYzRlOTM3NzA3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0LmNwcApAQCAtOTAsMTAgKzkwLDcgQEAgYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZv
ckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIGlmICgh
KGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMpKSB7CiAgICAg
ICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93LCBvbmx5IGRyb3AgdGhlIGl0ZW0gaWYgdGhlIG9u
bHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4KLSAgICAgICAgICAg
IGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlQ2hh
bmdlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZSgp
LmNoYW5nZXMoKSA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwpAQCAtMjAyLDE2ICsxOTksNiBAQCB2b2lkIERpc3BsYXlMaXN0Ojph
cHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPFNhdmU+KGl0ZW0u
Z2V0PFNhdmU+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVy
biBhcHBlbmQ8UmVzdG9yZT4oaXRlbS5nZXQ8UmVzdG9yZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gYXBwZW5kPFRyYW5zbGF0ZT4oaXRlbS5nZXQ8
VHJhbnNsYXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVy
biBhcHBlbmQ8Um90YXRlPihpdGVtLmdldDxSb3RhdGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNjYWxlOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNjYWxlPihpdGVtLmdldDxTY2FsZT4oKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBhcHBl
bmQ8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVtLmdl
dDxTZXRDVE0+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAg
ICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0uZ2V0PFNldElubGlu
ZUZpbGxDb2xvcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6
CkBAIC0yMjAsMTYgKzIwNyw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxl
IGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtLmdl
dDxTZXRTdHJva2VUaGlja25lc3M+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgog
ICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0YXRlPihpdGVtLmdldDxTZXRTdGF0ZT4oKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRM
aW5lQ2FwPihpdGVtLmdldDxTZXRMaW5lQ2FwPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lRGFzaD4oaXRlbS5nZXQ8U2V0
TGluZURhc2g+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPFNldExpbmVKb2luPihpdGVtLmdldDxTZXRMaW5lSm9pbj4oKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRN
aXRlckxpbWl0PihpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGVhclNoYWRvdz4oaXRlbS5n
ZXQ8Q2xlYXJTaGFkb3c+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8Q2xpcD4oaXRlbS5nZXQ8Q2xpcD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dDoKQEAgLTI3NCw4ICsyNTEsNiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRl
bUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9yPihp
dGVtLmdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbENvbXBvc2l0
ZWRSZWN0PihpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOwogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUm91bmRlZFJl
Y3Q+KGl0ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5jcHAKaW5kZXggMGMyNTIyNjRhZjQxNjY1NjIxNzUxNjA0MTA0MmE4YmRk
M2JmYWJiNS4uZGVmY2U4NGVmMzU4N2JlYTA2ZDIwN2RiNWI4MDJhYTdjODI1NjUwYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcApAQCAtMzQs
NyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3Qgewog
CiBEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDogbV9jb250ZXh0
KG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxv
Z2ljYWxTaXplKSwgaW5pdGlhbENUTSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0LCBG
bG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0pCiB7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggNDU3NzU1MTg5YmRhZGQ3
MTlkMjQ1YTRlNmQyYzgxYmRkYjFmN2RmMy4uMGRiMTUwMzk2MDQwMzJmMzMwM2ZiY2I2NTIxZTUz
ZTRlMzRmOTE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHAKQEAgLTUyLDIxICs1Miw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIGdldDxS
ZXN0b3JlPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBnZXQ8VHJhbnNsYXRlPigpLmFwcGx5KGNvbnRleHQp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBn
ZXQ8Um90YXRlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGdldDxTY2FsZT4oKS5hcHBseShjb250ZXh0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAg
ICBnZXQ8Q29uY2F0ZW5hdGVDVE0+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGdldDxTZXRDVE0+KCkuYXBwbHko
Y29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVG
aWxsQ29sb3I6CiAgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkuYXBwbHkoY29udGV4
dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc5LDIxICs2NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
YXRlOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIGdldDxTZXRMaW5lQ2FwPigpLmFw
cGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBnZXQ8
U2V0TGluZUpvaW4+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICBnZXQ8U2V0TWl0ZXJMaW1pdD4oKS5h
cHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFy
U2hhZG93OgotICAgICAgICBnZXQ8Q2xlYXJTaGFkb3c+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICBnZXQ8Q2xpcD4o
KS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTYwLDkgKzEzMCw2IEBAIHZv
aWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICBnZXQ8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkuYXBwbHko
Y29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI3MCw5ICsyMzcsNiBAQCB2b2lkIEl0ZW1I
YW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICBn
ZXQ8RHJhd1BhdGg+KCkufkRyYXdQYXRoKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+KCkufkZpbGxDb21wb3NpdGVkUmVjdCgpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIGdldDxGaWxsUGF0aD4oKS5+RmlsbFBhdGgoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjg4LDkgKzI1Miw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVz
dHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBnZXQ8
RmlsbFJvdW5kZWRSZWN0PigpLn5GaWxsUm91bmRlZFJlY3QoKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBnZXQ8U2V0TGluZURhc2g+
KCkuflNldExpbmVEYXNoKCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRTdGF0ZToKICAgICAgICAgZ2V0PFNldFN0YXRlPigpLn5TZXRTdGF0ZSgpOwogICAgICAgICBy
ZXR1cm47CkBAIC0zMTQsOSArMjc1LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsZWFyUmVjdD46OnZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclNoYWRvdz46OnZhbHVlKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsaXA+Ojp2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTMyNiw5ICsyODQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ry
b3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwVG9JbWFnZUJ1ZmZl
cj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxDb25jYXRlbmF0ZUNUTT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTM4NywzMyArMzQyLDE1IEBAIHZvaWQg
SXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UmVzdG9yZT46
OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Um90YXRl
Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKICAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2F2ZT46
OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTY2FsZT46
OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0Q1RN
Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbENvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxTZXRJbmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lU3Ryb2tlQ29sb3I+
Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2Fw
OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
ZXRMaW5lQ2FwPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUpvaW46Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFNldExpbmVKb2luPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TWl0ZXJMaW1pdD46OnZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0U3Ryb2tlVGhp
Y2tuZXNzPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC00MzcsOSArMzc0LDYgQEAgdm9p
ZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgog
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTdHJv
a2VMaW5lPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJh
bnNsYXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxUcmFuc2xhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKQEAg
LTUwMSw4ICs0MzUsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1U
eXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29weUlu
dG88RHJhd1BhdHRlcm4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3UGF0aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdQYXRoPihpdGVtT2Zmc2V0LCAq
dGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBy
ZXR1cm4gY29weUludG88RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxs
UGF0aD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aENvbG9yOgpAQCAtNTEzLDggKzQ0NSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRl
bVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAgIHJl
dHVybiBjb3B5SW50bzxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbU9mZnNldCwgKnRoaXMp
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPEZpbGxSb3VuZGVkUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGluZURhc2g+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0YXRlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKQEAgLTUzMSwxNiArNDYxLDEyIEBAIGJvb2wgSXRlbUhh
bmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihp
dGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAgICAg
ICByZXR1cm4gY29weUludG88Q2xlYXJSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclNo
YWRvdz4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAg
ICAgIHJldHVybiBjb3B5SW50bzxDbGlwPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBPdXQ+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBUb0ltYWdlQnVmZmVyPihpdGVtT2Zmc2V0LCAqdGhp
cyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBj
b3B5SW50bzxDb25jYXRlbmF0ZUNUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgICAgIHJldHVybiBjb3B5SW50
bzxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CkBAIC01NzMsMjQgKzQ5OSwxMiBAQCBib29sIEl0ZW1I
YW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9u
KSBjb25zdAogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFJlc3RvcmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxSb3RhdGU+KGl0ZW1PZmZzZXQs
ICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICByZXR1cm4gY29weUlu
dG88U2F2ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgot
ICAgICAgICByZXR1cm4gY29weUludG88U2NhbGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRDVE0+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW1PZmZzZXQs
ICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtT2Zmc2V0LCAqdGhp
cyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPFNldExpbmVDYXA+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVKb2luPihpdGVtT2Zm
c2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPFNldE1pdGVyTGltaXQ+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CiAgICAgICAgIHJldHVybiBjb3B5SW50
bzxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VFbGxpcHNlOgpAQCAtNjA3LDggKzUyMSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6
c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTdHJva2VSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PFN0cm9rZUxpbmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFu
c2xhdGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxUcmFuc2xhdGU+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbVR5cGUuY3BwCmluZGV4IDU0ZWExYzg2ODJjMDc0NDJlMmU4NDE0YjczMjhhYTMy
NDgwMjVhNzUuLmJhMGQ5NTFjMjJjZjQ5Y2U0MTdlMzM1NTNiMDBlMGE1YjhhYjIwOTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKQEAgLTM4LDE2ICszOCw2IEBA
IHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAg
cmV0dXJuIHNpemVvZihTYXZlKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAg
ICByZXR1cm4gc2l6ZW9mKFJlc3RvcmUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToK
LSAgICAgICAgcmV0dXJuIHNpemVvZihUcmFuc2xhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJv
dGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihSb3RhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNjYWxlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNjYWxlKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihDb25jYXRlbmF0ZUNUTSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldENU
TSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1
cm4gc2l6ZW9mKFNldElubGluZUZpbGxDb2xvcik7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lU3Ryb2tlQ29sb3I6CkBAIC01NiwxNiArNDYsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0
ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0U3Ryb2tl
VGhpY2tuZXNzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgcmV0dXJu
IHNpemVvZihTZXRTdGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihTZXRMaW5lQ2FwKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
RGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lRGFzaCk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZUpvaW4pOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
U2V0TWl0ZXJMaW1pdCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoQ2xlYXJTaGFkb3cpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAg
ICAgICAgIHJldHVybiBzaXplb2YoQ2xpcCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoK
QEAgLTExMCw4ICs5MCw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5
cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhDb2xvcik7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHJldHVybiBzaXpl
b2YoRmlsbFJlY3RXaXRoR3JhZGllbnQpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3Np
dGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsQ29tcG9zaXRlZFJlY3QpOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIHNpemVvZihG
aWxsUm91bmRlZFJlY3QpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOgpAQCAtMTgyLDI4ICsxNjAsMTggQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5
cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKICAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clNoYWRvdzoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBPdXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVz
aENvbnRleHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1UeXBl
OjpSb3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
Y2FsZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
OgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZURhc2g6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJh
bnNsYXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5U
cmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CkBAIC0yMjIs
NyArMTkwLDYgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bENvbXBvc2l0ZWRSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgogI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxMaW5lOgpAQCAt
Mjg4LDEzICsyNTUsMTEgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0Zv
clRleHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lRGFzaDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdTeXN0ZW1JbWFn
ZToKQEAgLTMwNiwxMSArMjcxLDkgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkK
ICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93
OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgogICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyOgpAQCAtMzMzLDE1ICsyOTYsOSBAQCBib29sIGlz
SW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVG
b3JNZWRpYToKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVKb2luOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZUVsbGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCkBAIC0zNTEsNyArMzA4
LDYgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICNlbmRpZgogICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
VHlwZS5oCmluZGV4IGQ2ODNiMmFjZjc4NDVmOTljM2NkMDk1ZWI5MTFlNTRmMWY4Y2UxMTEuLjE2
NjBiOThmZGE1ZWYyN2IzZjc1ZDIyYTU3OWEzYTlhZTNjYzcwZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbVR5cGUuaApAQCAtMzEsMjAgKzMxLDEwIEBAIG5hbWVzcGFjZSBEaXNw
bGF5TGlzdCB7CiBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CiAgICAgU2F2ZSwKICAg
ICBSZXN0b3JlLAotICAgIFRyYW5zbGF0ZSwKLSAgICBSb3RhdGUsCi0gICAgU2NhbGUsCi0gICAg
Q29uY2F0ZW5hdGVDVE0sCi0gICAgU2V0Q1RNLAogICAgIFNldElubGluZUZpbGxDb2xvciwKICAg
ICBTZXRJbmxpbmVTdHJva2VDb2xvciwKICAgICBTZXRTdHJva2VUaGlja25lc3MsCiAgICAgU2V0
U3RhdGUsCi0gICAgU2V0TGluZUNhcCwKLSAgICBTZXRMaW5lRGFzaCwKLSAgICBTZXRMaW5lSm9p
biwKLSAgICBTZXRNaXRlckxpbWl0LAotICAgIENsZWFyU2hhZG93LAogICAgIENsaXAsCiAgICAg
Q2xpcE91dCwKICAgICBDbGlwVG9JbWFnZUJ1ZmZlciwKQEAgLTY3LDcgKzU3LDYgQEAgZW51bSBj
bGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIEZpbGxSZWN0LAogICAgIEZpbGxSZWN0V2l0
aENvbG9yLAogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50LAotICAgIEZpbGxDb21wb3NpdGVkUmVj
dCwKICAgICBGaWxsUm91bmRlZFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCiAj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5jcHAKaW5kZXggMjNkMGJiY2M3MWMyODFjNTJjMzVhOGMyNTJkYTk2YzBhYjEyYTk4Yy4uMzZm
YTZhMTI3ZmYwNzkzY2VmMjMwZWRmN2E2NDFkZGUwMmZlMzc0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlM
aXN0UmVwbGF5ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgpAQCAtNTQsNjcgKzU1LDYgQEAgdm9pZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgVHJh
bnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29u
dGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNsYXRlJiBpdGVtKQotewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgieCIsIGl0ZW0ueCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInkiLCBpdGVt
LnkoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgUm90YXRlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yb3RhdGUobV9hbmdsZSk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSb3RhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmdsZSIsIGl0ZW0uYW5n
bGUoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
Y2FsZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNpemUiLCBpdGVtLmFtb3VudCgp
KTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRDVE06OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldENUTShtX3RyYW5zZm9ybSk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRDVE0mIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzZXQtY3RtIiwgaXRlbS50
cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ29uY2F0ZW5hdGVDVE06
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNv
bmNhdENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYgaXRlbSkKLXsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImN0bSIsIGl0ZW0udHJhbnNmb3JtKCkpOwotCi0gICAgcmV0dXJuIHRzOwot
fQotCiB2b2lkIFNldElubGluZUZpbGxDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKCkpOwpAQCAtMTQ4
LDc3ICs4OCwyMiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU2V0U3Ryb2tlVGhpY2tuZXNzJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAK
LVNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIDogbV9zdGF0
ZUNoYW5nZShzdGF0ZSwgZmxhZ3MpCi17Ci19Ci0KLVNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCi0gICAgOiBtX3N0YXRlQ2hh
bmdlKHN0YXRlQ2hhbmdlKQorU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSkKKyAgICA6IG1fc3RhdGUoc3RhdGUpCiB7CiB9CiAKIHZvaWQgU2V0U3Rh
dGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBtX3N0YXRlQ2hhbmdl
LmFwcGx5KGNvbnRleHQpOworICAgIGNvbnRleHQubWVyZ2VTdGF0ZUNoYW5nZXMobV9zdGF0ZSk7
CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRTdGF0ZSYgc3RhdGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGUuc3RhdGVD
aGFuZ2UoKTsKKyAgICB0cyA8PCBpdGVtLnN0YXRlKCk7CiAgICAgcmV0dXJuIHRzOwogfQogCi12
b2lkIFNldExpbmVDYXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBjb250ZXh0LnNldExpbmVDYXAobV9saW5lQ2FwKTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXAp
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWNhcCIsIGxpbmVDYXAubGluZUNhcCgpKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFy
cmF5LCBtX2Rhc2hPZmZzZXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQotewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgiZGFzaC1hcnJheSIsIGxpbmVEYXNoLmRhc2hBcnJheSgpKTsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImRhc2gtb2Zmc2V0IiwgbGluZURhc2guZGFzaE9mZnNldCgpKTsKLSAgICBy
ZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwot
fQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
U2V0TGluZUpvaW4mIGxpbmVKb2luKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1qb2lu
IiwgbGluZUpvaW4ubGluZUpvaW4oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldE1p
dGVyTGltaXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LnNldE1pdGVyTGltaXQobV9taXRlckxpbWl0KTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVyTGltaXQmIG1pdGVy
TGltaXQpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJtaXRyZS1saW1pdCIsIG1pdGVyTGltaXQu
bWl0ZXJMaW1pdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJTaGFkb3c6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFy
U2hhZG93KCk7Ci19Ci0KIHZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwpAQCAtNjU3LDMwICs1NDIsMTUg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZp
bGxSZWN0V2l0aEdyYWRpZW50JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotdm9pZCBGaWxs
Q29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUp
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVj
dCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xv
cigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNv
bXBvc2l0ZU9wZXJhdG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0
ZW0uYmxlbmRNb2RlKCkpOwotICAgIHJldHVybiB0czsKLX0KLQogdm9pZCBGaWxsUm91bmRlZFJl
Y3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBjb250ZXh0
LmZpbGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKKyAgICBjb250
ZXh0LmZpbGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IpOwogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBp
dGVtKQogewogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7CiAgICAgcmV0dXJuIHRz
OwogfQogCkBAIC03NjgsOCArNjM4LDggQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQogfQogCiAjaWYgRU5BQkxF
KFZJREVPKQotUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5
ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLSAgICA6IG1faWRlbnRp
ZmllcihwbGF5ZXIuaWRlbnRpZmllcigpKQorUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1f
ZGVzdGluYXRpb24oZGVzdGluYXRpb24pCiB7CiB9CkBAIC0xMDExLDE5ICs4ODEsMTAgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUp
CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogdHMgPDwgInNh
dmUiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRDVE06IHRzIDw8ICJzZXQtY3RtIjsgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06IHRzIDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB0cyA8PCAic2V0LWlubGlu
ZS1maWxsLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tl
Q29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLXN0cm9rZS1jb2xvciI7IGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogdHMgPDwgInNldC1zdHJva2UtdGhpY2tuZXNz
IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHRzIDw8ICJzZXQtc3RhdGUi
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB0cyA8PCAic2V0LWxpbmUt
Y2FwIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6IHRzIDw8ICJzZXQt
bGluZS1kYXNoIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHRzIDw8
ICJzZXQtbGluZS1qb2luIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1p
dDogdHMgPDwgInNldC1taXRlci1saW1pdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXA6IHRzIDw8ICJjbGlwIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDogdHMg
PDwgImNsaXAtb3V0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZm
ZXI6IHRzIDw8ICJjbGlwLXRvLWltYWdlLWJ1ZmZlciI7IGJyZWFrOwpAQCAtMTA0Niw3ICs5MDcs
NiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5
cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogdHMgPDwgImZpbGwtcmVjdCI7
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8PCAiZmls
bC1yZWN0LXdpdGgtY29sb3IiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudDogdHMgPDwgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21wb3NpdGVk
LXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6IHRzIDw8
ICJmaWxsLXJvdW5kZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIjsgYnJl
YWs7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCkBAIC0xMDc4LDcgKzkzOCw2IEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBl
KQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHRzIDw8ICJhcHBseS1maWxs
LXBhdHRlcm4iOyBicmVhazsKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6IHRzIDw8ICJhcHBseS1kZXZpY2Utc2NhbGUtZmFjdG9yIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHRzIDw8ICJjbGVhci1zaGFkb3ciOyBicmVh
azsKICAgICB9CiAgICAgcmV0dXJuIHRzOwogfQpAQCAtMTA4OCwyMSArOTQ3LDYgQEAgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIHRz
IDw8IGl0ZW0udHlwZSgpOwogCiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2Ug
SXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8VHJhbnNsYXRlPigp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFJvdGF0ZT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2NhbGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNjYWxlPigpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNl
dENUTT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVD
VE06Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpOwotICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0x
MTE1LDE4ICs5NTksNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJ
dGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lQ2FwPigpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lSm9p
bj4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
LSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKLSAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcD4o
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTkzLDkgKzEwMjUsNiBAQCBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0
V2l0aEdyYWRpZW50PigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
Q29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVj
dD4oKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0
OgogICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTI3MSw3ICsxMTAwLDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tl
UGF0dGVybjoKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgogI2VuZGlmCi0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCA5N2NiNWZj
OGQwNGJhODY2MmI3MmM3ZGRlZWJjNDQxNTVjMjgyNWI3Li5lODFiYjM0NmM5ZWZlYmU5NmE2NTBk
NzU0NWE4MWY2MTZiN2Q2YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAg
LTg1LDEwNCArODUsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIH07CiAKLWNsYXNzIFRyYW5zbGF0ZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFu
c2xhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFRy
YW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgICAgICA6IG1feCh4KQotICAgICAgICAsIG1f
eSh5KQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9
Ci0gICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBm
bG9hdCBtX3ggeyAwIH07Ci0gICAgZmxvYXQgbV95IHsgMCB9OwotfTsKLQotY2xhc3MgUm90YXRl
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlJvdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwot
Ci0gICAgUm90YXRlKGZsb2F0IGFuZ2xlKQotICAgICAgICA6IG1fYW5nbGUoYW5nbGUpCi0gICAg
ewotICAgIH0KLQotICAgIGZsb2F0IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBmbG9hdCBtX2FuZ2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgotfTsK
LQotY2xhc3MgU2NhbGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6U2NhbGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKLQotICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICAgICAg
OiBtX3NpemUoc2l6ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRTaXplJiBhbW91
bnQoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRTaXpl
IG1fc2l6ZTsKLX07Ci0KLWNsYXNzIFNldENUTSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRDVE07Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKLSAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAg
ewotICAgIH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IG1fdHJhbnNmb3JtOwotfTsKLQotY2xhc3MgQ29uY2F0ZW5hdGVDVE0gewotcHVibGljOgotICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q29uY2F0ZW5h
dGVDVE07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIENv
bmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAgICA6
IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCiBjbGFzcyBT
ZXRJbmxpbmVGaWxsQ29sb3IgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOwpAQCAtMjQ3LDEwICsx
NDksOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGVDaGFuZ2U7IH0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVD
aGFuZ2UoKSB7IHJldHVybiBtX3N0YXRlQ2hhbmdlOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgZXhw
bGljaXQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2V0U3Rh
dGU+IGRlY29kZShEZWNvZGVyJik7CkBAIC0yNTgsNDA0ICsxNTgsMjYgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UmKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGVDaGFuZ2U7
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+CiB2b2lkIFNldFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IHsKLSAgICBhdXRvIGNoYW5nZUZsYWdzID0gbV9zdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzOwot
ICAgIGVuY29kZXIgPDwgY2hhbmdlRmxhZ3M7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVD
aGFuZ2UubV9zdGF0ZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5zdHJva2VHcmFkaWVudCk7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLnN0cm9rZUdyYWRp
ZW50OwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0
cm9rZVBhdHRlcm4pOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5zdHJva2VQYXR0ZXJuOwot
ICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuZmlsbEdyYWRp
ZW50KTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuZmlsbEdyYWRpZW50OwotICAgIH0KLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBh
dHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5maWxsUGF0dGVybik7Ci0gICAg
ICAgIGVuY29kZXIgPDwgKnN0YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5zaGFkb3dCbHVyOwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9y
OwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7Ci0gICAgfQotCi0g
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZVRoaWNrbmVz
czsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS50ZXh0RHJh
d2luZ01vZGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJv
a2VDb2xvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWxsQ29s
b3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VTdHls
ZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbFJ1bGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmZpbGxSdWxlOwotCi0g
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3Np
dGVPcGVyYXRpb25DaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpCbGVuZE1vZGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmJsZW5kTW9k
ZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLmFscGhhOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLnNob3VsZEFudGlhbGlhczsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBl
bmNvZGVyIDw8IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250czsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIGVuY29kZXIgPDwgbV9zdGF0ZTsK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IFNl
dFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKLSAgICBk
ZWNvZGVyID4+IGNoYW5nZUZsYWdzOwotICAgIGlmICghY2hhbmdlRmxhZ3MpCisgICAgc3RkOjpv
cHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4gc3RhdGU7CisgICAgZGVjb2RlciA+PiBzdGF0
ZTsKKyAgICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2U7Ci0gICAgc3RhdGVDaGFuZ2Uu
bV9jaGFuZ2VGbGFncyA9ICpjaGFuZ2VGbGFnczsKLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENo
YW5nZSkpIHsKLSAgICAgICAgYXV0byBzdHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpkZWNvZGUo
ZGVjb2Rlcik7Ci0gICAgICAgIGlmICghc3Ryb2tlR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQgPSBXVEZNb3ZlKCpzdHJva2VHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlUGF0dGVybiA9IFBhdHRlcm46
OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFzdHJva2VQYXR0ZXJuKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0
cm9rZVBhdHRlcm4gPSBXVEZNb3ZlKCpzdHJva2VQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAo
c3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbEdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBhdXRvIGZpbGxHcmFkaWVudCA9IEdyYWRp
ZW50OjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghZmlsbEdyYWRpZW50KQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRl
LmZpbGxHcmFkaWVudCA9IFdURk1vdmUoKmZpbGxHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYg
KHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBhdXRvIGZpbGxQYXR0ZXJuID0gUGF0dGVy
bjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIWZpbGxQYXR0ZXJuKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZp
bGxQYXR0ZXJuID0gV1RGTW92ZSgqZmlsbFBhdHRlcm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiBzaGFkb3dPZmZz
ZXQ7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93T2Zmc2V0OwotICAgICAgICBpZiAoIXNoYWRv
d09mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3Rh
dGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSAqc2hhZG93T2Zmc2V0OwotCi0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHNoYWRvd0JsdXI7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hh
ZG93Qmx1cjsKLSAgICAgICAgaWYgKCFzaGFkb3dCbHVyKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0JsdXIgPSAq
c2hhZG93Qmx1cjsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzaGFkb3dDb2xvcjsK
LSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dDb2xvcjsKLSAgICAgICAgaWYgKCFzaGFkb3dDb2xv
cikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFu
Z2UubV9zdGF0ZS5zaGFkb3dDb2xvciA9ICpzaGFkb3dDb2xvcjsKLQotICAgICAgICBzdGQ6Om9w
dGlvbmFsPFNoYWRvd1JhZGl1c01vZGU+IHNoYWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGRlY29k
ZXIgPj4gc2hhZG93UmFkaXVzTW9kZTsKLSAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5t
X3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBXVEZNb3ZlKCpzaGFkb3dSYWRpdXNNb2RlKTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGRlY29kZXIgPj4gc3Ryb2tl
VGhpY2tuZXNzOwotICAgICAgICBpZiAoIXN0cm9rZVRoaWNrbmVzcykKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VU
aGlja25lc3MgPSAqc3Ryb2tlVGhpY2tuZXNzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8VGV4dERyYXdpbmdNb2RlRmxh
Z3M+IHRleHREcmF3aW5nTW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiB0ZXh0RHJhd2luZ01vZGU7
Ci0gICAgICAgIGlmICghdGV4dERyYXdpbmdNb2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9
IFdURk1vdmUoKnRleHREcmF3aW5nTW9kZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdl
Lm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9y
Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzdHJva2VDb2xvcjsKLSAg
ICAgICAgZGVjb2RlciA+PiBzdHJva2VDb2xvcjsKLSAgICAgICAgaWYgKCFzdHJva2VDb2xvcikK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5zdHJva2VDb2xvciA9ICpzdHJva2VDb2xvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBmaWxsQ29sb3I7
Ci0gICAgICAgIGRlY29kZXIgPj4gZmlsbENvbG9yOwotICAgICAgICBpZiAoIWZpbGxDb2xvcikK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5maWxsQ29sb3IgPSAqZmlsbENvbG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNo
YW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VT
dHlsZUNoYW5nZSkpIHsKLSAgICAgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGU7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc3Ryb2tlU3R5bGUpKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVN0eWxlID0g
c3Ryb2tlU3R5bGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkgewotICAgICAg
ICBzdGQ6Om9wdGlvbmFsPFdpbmRSdWxlPiBmaWxsUnVsZTsKLSAgICAgICAgZGVjb2RlciA+PiBm
aWxsUnVsZTsKLSAgICAgICAgaWYgKCFmaWxsUnVsZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5maWxsUnVsZSA9ICpmaWxs
UnVsZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkgewotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBjb21wb3NpdGVPcGVyYXRvcjsK
LSAgICAgICAgZGVjb2RlciA+PiBjb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgaWYgKCFjb21w
b3NpdGVPcGVyYXRvcikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9ICpjb21wb3NpdGVPcGVy
YXRvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6
Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRNb2RlOwotICAgICAgICBkZWNvZGVyID4+IGJsZW5k
TW9kZTsKLSAgICAgICAgaWYgKCFibGVuZE1vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuYmxlbmRNb2RlID0gKmJsZW5k
TW9kZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkp
IHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eTsKLSAgICAgICAgZGVjb2RlciA+PiBpbWFnZUludGVycG9sYXRpb25R
dWFsaXR5OwotICAgICAgICBpZiAoIWltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9ICppbWFnZUludGVycG9sYXRpb25RdWFsaXR5Owot
ICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxm
bG9hdD4gYWxwaGE7Ci0gICAgICAgIGRlY29kZXIgPj4gYWxwaGE7Ci0gICAgICAgIGlmICghYWxw
aGEpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuYWxwaGEgPSAqYWxwaGE7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdl
Lm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlh
bGlhc0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRBbnRpYWxp
YXM7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hvdWxkQW50aWFsaWFzOwotICAgICAgICBpZiAoIXNo
b3VsZEFudGlhbGlhcykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSAqc2hvdWxkQW50aWFsaWFz
OwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpIHsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRTbW9vdGhGb250czsKLSAgICAgICAgZGVjb2RlciA+
PiBzaG91bGRTbW9vdGhGb250czsKLSAgICAgICAgaWYgKCFzaG91bGRTbW9vdGhGb250cykKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyA9ICpzaG91bGRTbW9vdGhGb250czsKLSAgICB9Ci0KLSAg
ICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6
Om9wdGlvbmFsPGJvb2w+IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICAgICAgZGVj
b2RlciA+PiBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cyA9ICpzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+
IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zOwotICAgICAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwot
ICAgIH0KLQotICAgIHJldHVybiB7IHsgc3RhdGVDaGFuZ2UgfSB9OwotfQotCi1jbGFzcyBTZXRM
aW5lQ2FwIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNldExpbmVDYXA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKLQotICAgIFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotICAgICAgICA6IG1f
bGluZUNhcChsaW5lQ2FwKQotICAgIHsKLSAgICB9Ci0KLSAgICBMaW5lQ2FwIGxpbmVDYXAoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZUNhcCBtX2xp
bmVDYXA7Ci19OwotCi1jbGFzcyBTZXRMaW5lRGFzaCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotICAgICAgICA6IG1f
ZGFzaEFycmF5KGRhc2hBcnJheSkKLSAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkK
LSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7
IHJldHVybiBtX2Rhc2hBcnJheTsgfQotICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2Rhc2hPZmZzZXQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8U2V0TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZh
dGU6Ci0gICAgRGFzaEFycmF5IG1fZGFzaEFycmF5OwotICAgIGZsb2F0IG1fZGFzaE9mZnNldDsK
LX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldExpbmVEYXNoOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fZGFzaEFycmF5Owot
ICAgIGVuY29kZXIgPDwgbV9kYXNoT2Zmc2V0OworICAgIHJldHVybiBTZXRTdGF0ZSgqc3RhdGUp
OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFz
aD4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0
aW9uYWw8RGFzaEFycmF5PiBkYXNoQXJyYXk7Ci0gICAgZGVjb2RlciA+PiBkYXNoQXJyYXk7Ci0g
ICAgaWYgKCFkYXNoQXJyYXkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBkYXNoT2Zmc2V0OwotICAgIGRlY29kZXIgPj4gZGFzaE9mZnNl
dDsKLSAgICBpZiAoIWRhc2hPZmZzZXQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4ge3sgKmRhc2hBcnJheSwgKmRhc2hPZmZzZXQgfX07Ci19Ci0KLWNsYXNzIFNl
dExpbmVKb2luIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlNldExpbmVKb2luOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAgICAg
ICAgOiBtX2xpbmVKb2luKGxpbmVKb2luKQotICAgIHsKLSAgICB9Ci0KLSAgICBMaW5lSm9pbiBs
aW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
TGluZUpvaW4gbV9saW5lSm9pbjsKLX07Ci0KLWNsYXNzIFNldE1pdGVyTGltaXQgewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0
TWl0ZXJMaW1pdDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0g
ICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotICAgICAgICA6IG1fbWl0ZXJMaW1p
dChtaXRlckxpbWl0KQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29u
c3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fbWl0
ZXJMaW1pdDsKLX07Ci0KLWNsYXNzIENsZWFyU2hhZG93IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyU2hhZG93OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotfTsKLQogLy8gRklYTUU6IHRy
ZWF0IGFzIGRyYXdpbmcgaXRlbT8KIGNsYXNzIENsaXAgewogcHVibGljOgpAQCAtMTYxMiw5MSAr
MTEzNCwyMCBAQCBzdGQ6Om9wdGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdp
dGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZQogICAgIHJldHVybiB7eyAqcmVjdCwg
Z3JhZGllbnQtPmdldCgpIH19OwogfQogCi1jbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgewotcHVi
bGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7Ci0KLSAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotICAgICAgICA6IG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAg
ICAgICwgbV9vcChvcCkKLSAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCi0gICAgewot
ICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0g
ICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsg
fQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsg
fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rmls
bENvbXBvc2l0ZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIEZsb2F0
UmVjdCBtX3JlY3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBt
X29wOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Ci12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2NvbG9y
OwotICAgIGVuY29kZXIgPDwgbV9vcDsKLSAgICBlbmNvZGVyIDw8IG1fYmxlbmRNb2RlOwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+IEZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAg
IGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0
aW9uYWw8Q29sb3I+IGNvbG9yOwotICAgIGRlY29kZXIgPj4gY29sb3I7Ci0gICAgaWYgKCFjb2xv
cikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Q29t
cG9zaXRlT3BlcmF0b3I+IG9wOwotICAgIGRlY29kZXIgPj4gb3A7Ci0gICAgaWYgKCFvcCkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2Rl
PiBibGVuZE1vZGU7Ci0gICAgZGVjb2RlciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1v
ZGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3Qs
ICpjb2xvciwgKm9wLCAqYmxlbmRNb2RlIH19OwotfQotCiBjbGFzcyBGaWxsUm91bmRlZFJlY3Qg
ewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6RmlsbFJvdW5kZWRSZWN0OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CiAKLSAgICBGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIEZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAg
ICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAg
ICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIEJs
ZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCiAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbGxSb3VuZGVk
UmVjdD4gZGVjb2RlKERlY29kZXImKTsKQEAgLTE3MDksNyArMTE2MCw2IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgRmxvYXRSb3VuZGVkUmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsK
LSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PgpAQCAtMTcxNyw3ICsxMTY3LDYgQEAgdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9yZWN0OwogICAgIGVuY29k
ZXIgPDwgbV9jb2xvcjsKLSAgICBlbmNvZGVyIDw8IG1fYmxlbmRNb2RlOwogfQogCiB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgpAQCAtMTczMywxMiArMTE4Miw3IEBAIHN0ZDo6b3B0aW9uYWw8Rmls
bFJvdW5kZWRSZWN0PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6
Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRNb2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2Rl
OwotICAgIGlmICghYmxlbmRNb2RlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IsICpibGVuZE1vZGUgfX07CisgICAgcmV0dXJuIHsg
eyAqcmVjdCwgKmNvbG9yIH0gfTsKIH0KIAogY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUg
ewpAQCAtMTk2MSw3ICsxNDA1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKIAotICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOworICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogCiAgICAg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRp
b247IH0KICAgICBNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1faWRlbnRpZmllcjsgfQpAQCAtMjI1NiwxMyArMTcwMCwxMSBAQCB1c2luZyBEaXNwbGF5
TGlzdEl0ZW0gPSBzdGQ6OnZhcmlhbnQKICAgICA8IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IKICAg
ICAsIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIKICAgICAsIENsZWFyUmVjdAotICAgICwgQ2xlYXJT
aGFkb3cKICAgICAsIENsaXAKICAgICAsIENsaXBPdXQKICAgICAsIENsaXBPdXRUb1BhdGgKICAg
ICAsIENsaXBQYXRoCiAgICAgLCBDbGlwVG9JbWFnZUJ1ZmZlcgotICAgICwgQ29uY2F0ZW5hdGVD
VE0KICAgICAsIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIKICAgICAsIERyYXdFbGxpcHNlCiAg
ICAgLCBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcgpAQCAtMjI3OCw3ICsxNzIwLDYgQEAgdXNpbmcg
RGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgLCBEcmF3UmVjdAogICAgICwgRHJh
d1N5c3RlbUltYWdlCiAgICAgLCBFbmRUcmFuc3BhcmVuY3lMYXllcgotICAgICwgRmlsbENvbXBv
c2l0ZWRSZWN0CiAgICAgLCBGaWxsRWxsaXBzZQogICAgICwgRmlsbFBhdGgKICAgICAsIEZpbGxS
ZWN0CkBAIC0yMjg4LDIzICsxNzI5LDE1IEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6
dmFyaWFudAogICAgICwgRmlsbFJvdW5kZWRSZWN0CiAgICAgLCBGbHVzaENvbnRleHQKICAgICAs
IFJlc3RvcmUKLSAgICAsIFJvdGF0ZQogICAgICwgU2F2ZQotICAgICwgU2NhbGUKLSAgICAsIFNl
dENUTQogICAgICwgU2V0SW5saW5lRmlsbENvbG9yCiAgICAgLCBTZXRJbmxpbmVTdHJva2VDb2xv
cgotICAgICwgU2V0TGluZUNhcAotICAgICwgU2V0TGluZURhc2gKLSAgICAsIFNldExpbmVKb2lu
Ci0gICAgLCBTZXRNaXRlckxpbWl0CiAgICAgLCBTZXRTdGF0ZQogICAgICwgU2V0U3Ryb2tlVGhp
Y2tuZXNzCiAgICAgLCBTdHJva2VFbGxpcHNlCiAgICAgLCBTdHJva2VMaW5lCiAgICAgLCBTdHJv
a2VQYXRoCiAgICAgLCBTdHJva2VSZWN0Ci0gICAgLCBUcmFuc2xhdGUKIAogI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQogICAgICwgRmlsbExpbmUKQEAgLTIzNDEsMjAgKzE3NzQsMTAgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUsCiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTYXZlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6UmVzdG9yZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRy
YW5zbGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZSwKLSAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNjYWxlLAotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0Q1RNLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0sCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzcywKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldFN0YXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
TGluZUNhcCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNo
LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW4sCi0gICAg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0LAotICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJTaGFkb3csCiAgICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q2xpcE91dCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBU
b0ltYWdlQnVmZmVyLApAQCAtMjM3Niw3ICsxNzk5LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51
bVRyYWl0czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVl
ZTQ0NzFkMzU0ZTc1MTUzMTI1MTg5ZGZjYzk0MThhMzk0NTE0YTEuLmE1MzUwOTk4MGE5MzE0MDdl
OTFlNTRmOWY5MjMyNWNlNWU1ZDA1ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKQEAgLTQyLDM1MCArNDIsMTg5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKLSAgICA6IG1fZHJhd0dseXBo
c1JlY29yZGVyKCp0aGlzLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi17Ci0gICAgbV9zdGF0ZVN0
YWNrLmFwcGVuZCh7IHN0YXRlLCBpbml0aWFsQ1RNLCBpbml0aWFsQ1RNLm1hcFJlY3QoaW5pdGlh
bENsaXApIH0pOwotfQorUmVjb3JkZXI6OlJlY29yZGVyKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29y
ZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDog
R3JhcGhpY3NDb250ZXh0KGluaXRpYWxDbGlwLCB7IH0sICBpbml0aWFsQ1RNKQorICAgICwgbV9k
cmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3RydWN0RHJhd0dseXBocykKIAotUmVjb3Jk
ZXI6On5SZWNvcmRlcigpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPT0gMSk7
IC8vIElmIHRoaXMgZmlyZXMsIGl0IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4K
IH0KIAotc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKLXsKLSAgICBzdGF0aWMgY29uc3RleHByIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGlubGluZVN0YXRlQ2hhbmdlRmxh
Z3MgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
LAotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsCi0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsCi0gICAgfTsKLQotICAg
IGlmIChjaGFuZ2VGbGFncyAhPSAoY2hhbmdlRmxhZ3MgJiBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdz
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9z
dGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworUmVjb3JkZXI6On5SZWNvcmRlcigpID0gZGVmYXVsdDsKIAotICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAh
Y2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmFw
cGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hh
bmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3Mp
Cit2b2lkIFJlY29yZGVyOjpzYXZlKCkKIHsKLSAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0
YXRlQ2hhbmdlcyhjaGFuZ2VzLCBjaGFuZ2VGbGFncykpIHsKLSAgICAgICAgaWYgKGF1dG8gcGF0
dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQotICAgICAgICAgICAgcmVjb3Jk
UmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOwotICAgICAgICBpZiAoYXV0byBwYXR0
ZXJuID0gY2hhbmdlcy5tX3N0YXRlLmZpbGxQYXR0ZXJuKQotICAgICAgICAgICAgcmVjb3JkUmVz
b3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOwotICAgICAgICByZWNvcmRTZXRTdGF0ZShj
aGFuZ2VzLm1fc3RhdGUsIGNoYW5nZUZsYWdzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
Q29sb3JDaGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcigqY2hhbmdl
cy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKTsKLQotICAgIGlmIChj
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGNoYW5nZXMubV9zdGF0
ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRJbmxp
bmVGaWxsQ29sb3IoKmNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVz
KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOworICAgIHJlY29yZFNhdmUoKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKQordm9p
ZCBSZWNvcmRlcjo6cmVzdG9yZSgpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5
IGludm9rZWQgaW4gYW4gYWQtaG9jIG1hbm5lciB3aGVuIHJlY29yZGluZyBkcmF3aW5nIGl0ZW1z
LiBXZSBzaG91bGQgY29uc2lkZXIgZWl0aGVyCi0gICAgLy8gc3BsaXR0aW5nIEdyYXBoaWNzQ29u
dGV4dCBzdGF0ZSBjaGFuZ2VzIGludG8gaW5kaXZpZHVhbCBkaXNwbGF5IGxpc3QgaXRlbXMsIG9y
IHJlZmFjdG9yaW5nIHRoZSBjb2RlIHN1Y2ggdGhhdAotICAgIC8vIHRoaXMgbWV0aG9kIGlzIGF1
dG9tYXRpY2FsbHkgaW52b2tlZCB3aGVuIHJlY29yZGluZyBhIGRyYXdpbmcgaXRlbS4KLSAgICBh
dXRvJiBzdGF0ZUNoYW5nZXMgPSBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZTsKLSAgICBhdXRv
IGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3RhdGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3Vy
cmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSk7Ci0gICAgaWYgKCFjaGFuZ2VzRnJvbUxhc3RT
dGF0ZSkKKyAgICBpZiAoIXN0YWNrU2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0df
V0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZpbmcg
c3RhdGUgIiA8PCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0
ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oc3Rh
dGVDaGFuZ2VzLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSk7Ci0gICAgc3RhdGVDaGFuZ2VzLm1fY2hh
bmdlRmxhZ3MgPSB7IH07Ci0gICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0
YXRlQ2hhbmdlcy5tX3N0YXRlOwotfQotCi1jb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgUmVj
b3JkZXI6OnN0YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuc3RhdGVD
aGFuZ2UubV9zdGF0ZTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5hY2N1
bXVsYXRlKHN0YXRlLCBmbGFncyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAoTGlu
ZUNhcCBsaW5lQ2FwKQotewotICAgIHJlY29yZFNldExpbmVDYXAobGluZUNhcCk7Ci19Ci0KLXZv
aWQgUmVjb3JkZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9h
dCBkYXNoT2Zmc2V0KQotewotICAgIHJlY29yZFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9m
ZnNldCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2lu
KQotewotICAgIHJlY29yZFNldExpbmVKb2luKGxpbmVKb2luKTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewotICAgIHJlY29yZFNldE1pdGVy
TGltaXQobWl0ZXJMaW1pdCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CisgICAg
cmVjb3JkUmVzdG9yZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKK3ZvaWQgUmVj
b3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXIuZWZmZWN0c09m
VHlwZShGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpKSB7Ci0gICAgICAgIGF1dG8mIGZlSW1h
Z2UgPSBkb3duY2FzdDxGRUltYWdlPihlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoIXJlY29y
ZFJlc291cmNlVXNlKGZlSW1hZ2Uuc291cmNlSW1hZ2UoKSkpIHsKLSAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUlt
YWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICghc291cmNlSW1hZ2UpIHsKLSAgICAgICAgcmVjb3JkRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIobnVsbHB0ciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAg
IGlmICghc3RhdGUoKS5jaGFuZ2VzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIXJlY29yZFJlc291cmNlVXNlKCpzb3VyY2VJbWFnZSkpIHsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VS
ZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVj
b3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwg
ZmlsdGVyKTsKLX0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQ
b2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBtX2RyYXdHbHlw
aHNSZWNvcmRlci5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
c3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7Ci19CisgICAgaWYgKHN0YXRlKCkuaGFzT25seVBy
aW1pdGl2ZUNoYW5nZXMoKSkgeworICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoKSkKKyAgICAgICAgICAg
IHJlY29yZFNldElubGluZUZpbGxDb2xvcigqZmlsbENvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVz
KCkpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2Fs
QW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3Rf
Y2FzdDxGb250Jj4oZm9udCkpOwotICAgIHJlY29yZERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKTsKLX0KKyAgICAgICAg
aWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlN0cm9rZUJydXNoKSkKKyAgICAgICAgICAgIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9y
KCpzdHJva2VDb2xvcigpLnRyeUdldEFzU1JHQkFCeXRlcygpKTsKIAotdm9pZCBSZWNvcmRlcjo6
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOworICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSkKKyAgICAgICAgICAgIHJlY29yZFNl
dFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7CiAKLSAgICBpZiAoIXJlY29yZFJl
c291cmNlVXNlKGltYWdlQnVmZmVyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAg
ICAgICBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwotICAgIHJlY29yZERyYXdOYXRpdmVJbWFn
ZShpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFn
ZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KQotewotICAgIHJlY29yZERyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRp
b25SZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5
KCk7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwotICAgIHJlY29yZERyYXdQYXR0ZXJu
KGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBpZiAo
IXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpGaWxsQnJ1c2gpKSB7CisgICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBmaWxsUGF0dGVy
bigpKQorICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkp
OwogICAgIH0KIAotICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCi17
Ci0gICAgcmVjb3JkU2F2ZSgpOwotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNr
Lmxhc3QoKS5jbG9uZUZvclNhdmUoKSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQot
ewotICAgIGlmICghbV9zdGF0ZVN0YWNrLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpTdHJva2VCcnVzaCkpIHsKKyAgICAgICAgaWYgKGF1dG8gcGF0dGVybiA9IHN0cm9rZVBhdHRl
cm4oKSkKKyAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgp
KTsKKyAgICB9CiAKLSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIHJlY29yZFJl
c3RvcmUoKTsKKyAgICByZWNvcmRTZXRTdGF0ZShzdGF0ZSgpKTsKKyAgICBkaWRBcHBseVN0YXRl
Q2hhbmdlcygpOwogfQogCi12b2lkIFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkKLXsKLSAgICBjdXJyZW50U3RhdGUoKS50cmFuc2xhdGUoeCwgeSk7Ci0gICAgcmVjb3JkVHJh
bnNsYXRlKHgsIHkpOwotfQotCi12b2lkIFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJh
ZGlhbnMpCisjaWYgVVNFKENHKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkK
IHsKLSAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgIHJlY29y
ZFJvdGF0ZShhbmdsZUluUmFkaWFucyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBy
ZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybigpCiB7
Ci0gICAgY3VycmVudFN0YXRlKCkuc2NhbGUoc2l6ZSk7Ci0gICAgcmVjb3JkU2NhbGUoc2l6ZSk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCk7
CiB9CisjZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQordm9pZCBSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHko
KSkKLSAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CiAKLSAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRD
VE0odHJhbnNmb3JtKTsKLSAgICByZWNvcmRDb25jYXRlbmF0ZUNUTSh0cmFuc2Zvcm0pOworICAg
IC8vIEZJWE1FOiB0aGlzIGNoYW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0
ZSBhbGwgb2Ygb3VyIGNhY2hlZCBleHRlbnRzLgorICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25s
eSBjYWxsZWQgZWFybHkgb24/CisgICAgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZp
Y2VTY2FsZUZhY3Rvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5zZXRDVE0odHJhbnNmb3Jt
KTsKLSAgICByZWNvcmRTZXRDVE0odHJhbnNmb3JtKTsKLX0KKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOwogCi1BZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCku
Y3RtOwotfQorICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFj
aXR5KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKIAotdm9pZCBSZWNvcmRlcjo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2V0QWxwaGEob3BhY2l0eSk7CiAgICAgcmVjb3Jk
QmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5k
KG1fc3RhdGVTdGFjay5sYXN0KCkuY2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllcigpKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGFwcGVuZFN0YXRl
Q2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKLSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotfQorICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLX0K
LQotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmREcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci19CisgICAgR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdMaW5lc0Zv
clRleHQoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhz
LCBwcmludGluZywgZG91YmxlTGluZXMpOworICAgIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgUmVj
b3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihyZWN0LCBzdHlsZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OmNsaXAocmVjdCk7CisgICAgcmVjb3JkQ2xpcChyZWN0KTsKIH0KIAotdm9pZCBSZWNv
cmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7Ci0gICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3RWxsaXBzZShy
ZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFBhdGgocGF0aCwgd2luZFJ1bGUpOworICAgIHJlY29yZENsaXBQYXRoKHBhdGgsIHdpbmRSdWxl
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQg
UmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd1BhdGgocGF0aCk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlwT3V0KHJlY3QpOwogfQogCi12
b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQs
IGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsaXBPdXRUb1Bh
dGgocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0ZvY3VzUmlu
Z1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Ci19CisgICAgaWYgKCFyZWNvcmRS
ZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlw
VG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xp
cFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQg
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUs
IGJvb2wmLCBjb25zdCBDb2xvciYpCit2b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmRDbGVhclJlY3QocmVjdCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBS
ZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAg
ICByZWNvcmRGaWxsUmVjdChyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAg
IHJlY29yZEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQordm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xv
ciwgb3AsIGJsZW5kTW9kZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRG
aWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5n
ZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xv
ciwgYmxlbmRNb2RlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi12
b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3Jk
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRGaWxsRWxsaXBzZShyZWN0KTsKIH0K
IAogdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0
YSgpKSB7CiAgICAgICAgIGlmIChwYXRoLmhhc0lubGluZURhdGE8TGluZURhdGE+KCkpCkBAIC00
MDIsMjEgKzI0MSwyMSBAQCB2b2lkIFJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogICAgIHJlY29yZEZpbGxQYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmlsbEVsbGlwc2UocmVj
dCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRTdHJva2VSZWN0KHJlY3Qs
IGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIFJlY29yZGVyOjpzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZFN0cm9rZUVsbGlwc2UocmVjdCk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAg
ICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5s
aW5lRGF0YSgpKSB7CiAgICAgICAgIGlmIChwYXRoLmhhc0lubGluZURhdGE8TGluZURhdGE+KCkp
CkBAIC00MzMsMTQ4ICsyNzIsMTY4IEBAIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKICAgICByZWNvcmRTdHJva2VQYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29y
ZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQog
ewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkU3Ry
b2tlRWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERy
YXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZENsZWFyUmVjdChy
ZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdMaW5lKHBvaW50
MSwgcG9pbnQyKTsKIH0KIAotI2lmIFVTRShDRykKLXZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tl
UGF0dGVybigpCit2b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNv
cmRBcHBseVN0cm9rZVBhdHRlcm4oKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJl
Y29yZERyYXdFbGxpcHNlKHJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjphcHBseUZpbGxQYXR0
ZXJuKCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRBcHBseUZpbGxQ
YXR0ZXJuKCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0aChw
YXRoKTsKIH0KLSNlbmRpZgogCi12b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGN1cnJl
bnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KGN1cnJlbnRTdGF0ZSgpLmN0bS5tYXBSZWN0
KHJlY3QpKTsKLSAgICByZWNvcmRDbGlwKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3Ip
OwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rz
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
cmVjb3JkQ2xpcE91dChyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCi12
b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCisjaWYgUExBVEZPUk0oTUFD
KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29s
JiwgY29uc3QgQ29sb3ImKQogewotICAgIHJlY29yZENsaXBPdXRUb1BhdGgocGF0aCk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0
aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQog
ewotICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KGN1cnJlbnRTdGF0ZSgp
LmN0bS5tYXBSZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKSk7Ci0gICAgcmVjb3JkQ2xpcFBh
dGgocGF0aCwgd2luZFJ1bGUpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisjZW5kaWYKIAot
SW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQogewotICAgIGlmIChhdXRvIGludmVyc2UgPSBjdXJyZW50U3RhdGUoKS5j
dG0uaW52ZXJzZSgpKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChpbnZlcnNlLT5t
YXBSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpKTsKKyAgICBpZiAoIXJlY29yZFJlc291
cmNlVXNlKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgLy8gSWYgdGhlIENUTSBpcyBub3QgaW52ZXJ0aWJsZSwg
cmV0dXJuIHRoZSBvcmlnaW5hbCByZWN0LgotICAgIC8vIFRoaXMgbWF0Y2hlcyBDR1JlY3RBcHBs
eUludmVyc2VBZmZpbmVUcmFuc2Zvcm0gYmVoYXZpb3IuCi0gICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QoY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICByZWNvcmREcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBS
ZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRl
clJlc3VsdHMmIHJlc3VsdHMpCiB7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIp
OwotICAgIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCk7Ci19
CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXIuZWZmZWN0c09mVHlwZShGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkZFSW1hZ2UpKSB7CisgICAgICAgIGF1dG8mIGZlSW1hZ2UgPSBkb3duY2FzdDxG
RUltYWdlPihlZmZlY3QuZ2V0KCkpOworICAgICAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGZl
SW1hZ2Uuc291cmNlSW1hZ2UoKSkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVy
LCByZXN1bHRzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAotUmVm
UHRyPEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdN
b2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25z
dAotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nTWV0
aG9kLnZhbHVlX29yKFJlbmRlcmluZ01ldGhvZDo6RGlzcGxheUxpc3QpKTsKLX0KKyAgICBpZiAo
IXNvdXJjZUltYWdlKSB7CisgICAgICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgICAgIHJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKG51bGxwdHIsIHNvdXJjZUltYWdlUmVjdCwgZmls
dGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQg
UmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIGlmICghcGxheWVyLmlkZW50aWZpZXIoKSkg
ewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRl
c3RpbmF0aW9uKTsKKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKCpzb3VyY2VJbWFnZSkpIHsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJ
bWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIEFTU0VSVChwbGF5ZXIuaWRlbnRpZmllcigpKTsKLSAgICByZWNvcmRQYWlu
dEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBz
b3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7CiB9Ci0jZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6YXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIC8vIFdl
IG1vZGlmeSB0aGUgc3RhdGUgZGlyZWN0bHkgaGVyZSBpbnN0ZWFkIG9mIGNhbGxpbmcgR3JhcGhp
Y3NDb250ZXh0OjpzY2FsZSgpCi0gICAgLy8gYmVjYXVzZSB0aGUgcmVjb3JkZWQgaXRlbSB3aWxs
IHNjYWxlKCkgd2hlbiByZXBsYXllZC4KLSAgICBjdXJyZW50U3RhdGUoKS5zY2FsZSh7IGRldmlj
ZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvciB9KTsKKyAgICByZWNvcmRSZXNvdXJjZVVz
ZShpbWFnZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TmF0aXZl
SW1hZ2UoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQogCi0gICAgLy8gRklYTUU6IHRoaXMgY2hhbmdl
cyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4
dGVudHMuCi0gICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KLSAg
ICByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkRHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3Qp
OwogfQogCi1GbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBX
VEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5v
dCB5ZXQgY29tcGF0aWJsZSB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1
cm4gcmVjdDsKKyAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLWNvbnN0IFJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJl
Y29yZGVyOjpjdXJyZW50U3RhdGUoKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4o
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIEFTU0VSVChtX3N0
YXRlU3RhY2suc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBp
ZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdHRlcm4o
aW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi1S
ZWNvcmRlcjo6Q29udGV4dFN0YXRlJiBSZWNvcmRlcjo6Y3VycmVudFN0YXRlKCkKKyNpZiBFTkFC
TEUoVklERU8pCit2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
IHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBBU1NFUlQobV9z
dGF0ZVN0YWNrLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAg
aWYgKCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFp
bnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRQYWludEZyYW1lRm9y
TWVkaWEocGxheWVyLmlkZW50aWZpZXIoKSwgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLWNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgUmVjb3JkZXI6OmN0bSgpIGNvbnN0Cit2b2lkIFJlY29yZGVy
OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9v
dGhpbmdNb2RlKQogewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICBtX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzKGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7
CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpCit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2Fs
QW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIGN0bS50cmFu
c2xhdGUoeCwgeSk7CisgICAgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3RfY2FzdDxGb250Jj4oZm9u
dCkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0dseXBocyhmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpOwog
fQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKQogewotICAgIGRvdWJsZSBhbmds
ZUluRGVncmVlcyA9IHJhZDJkZWcoc3RhdGljX2Nhc3Q8ZG91YmxlPihhbmdsZUluUmFkaWFucykp
OwotICAgIGN0bS5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOwotICAgIAotICAgIEFmZmluZVRyYW5z
Zm9ybSByb3RhdGlvbjsKLSAgICByb3RhdGlvbi5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChwb2ludCwg
dGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OkNvbnRleHRTdGF0ZTo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBS
ZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGN0bS5zY2FsZShzaXplKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIocmVjdCwgc3R5bGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4g
UmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2Us
IHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkgY29uc3QKIHsKLSAgICBjdG0gPSBt
YXRyaXg7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdN
ZXRob2QudmFsdWVfb3IoUmVuZGVyaW5nTWV0aG9kOjpEaXNwbGF5TGlzdCkpOwogfQogCi12b2lk
IFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG1hdHJpeCkKK0Zsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQogewotICAgIGN0
bSAqPSBtYXRyaXg7CisgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVj
b3JkZXIuIik7CisgICAgcmV0dXJuIHJlY3Q7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlM
aXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA4NDVlYzAwNzcy
ZWQyYzU0YTFlNmNiMjZiMjE1MWRhYmFhNmVjMDc1Li5hZTM0Mzc5YmU2N2YwNWUxMDQyZjZhZGM1
YWFiZjg4YzI3MGMxNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
QEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCiAjaW5jbHVk
ZSAiRHJhd0dseXBoc1JlY29yZGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4KICNpbmNsdWRlICJJbmxp
bmVQYXRoRGF0YS5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgpAQCAtNTEsNyArNTAsNyBAQCBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNv
cmRlcihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlw
aHM6Olllcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoY29uc3QgRmxvYXRSZWN0JiBp
bml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVj
b25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJl
Y29yZGVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpID0g
MDsKQEAgLTYxLDQ3ICs2MCwzNSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZFNhdmUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFJlc3RvcmUoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
ID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8
dWludDhfdD4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29s
b3IoU1JHQkE8dWludDhfdD4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGluZUNhcChMaW5lQ2Fw
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGlu
ZUpvaW4oTGluZUpvaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1p
dChmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclNoYWRvdygpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmKSA9IDA7CisKKyNpZiBVU0UoQ0cpCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5U3Ry
b2tlUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVy
bigpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdOYXRpdmVJ
bWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb25SZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxS
ZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBH
cmFkaWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSA9IDA7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IEFyY0RhdGEmKSA9IDA7CkBAIC0xMDksMTEgKzk2
LDEwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZl
KGNvbnN0IEJlemllckN1cnZlRGF0YSYpID0gMDsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRG
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSA9IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSA9IDA7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25zdCBBcmNEYXRhJikgPSAwOwpAQCAtMTIx
LDExNiArMTA3LDgxIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tl
QmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgPSAwOwogI2VuZGlmCiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0jaWYgVVNF
KENHKQotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSA9IDA7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKSA9IDA7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpID0gMDsKIAogICAg
IHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJbWFnZSYpID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1hZ2VCdWZmZXImKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKGNvbnN0IFNvdXJjZUltYWdlJikgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShGb250JikgPSAwOwogCi0gICAgc3RydWN0
IENvbnRleHRTdGF0ZSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0gICAgICAgIEZs
b2F0UmVjdCBjbGlwQm91bmRzOwotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBz
dGF0ZUNoYW5nZTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbGFzdERyYXdpbmdTdGF0
ZTsKLQotICAgICAgICBDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBj
bGlwKQotICAgICAgICAgICAgOiBjdG0odHJhbnNmb3JtKQotICAgICAgICAgICAgLCBjbGlwQm91
bmRzKGNsaXApCi0gICAgICAgICAgICAsIGxhc3REcmF3aW5nU3RhdGUoc3RhdGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZvclNhdmUoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBDb250ZXh0U3RhdGUgc3RhdGUobGFzdERyYXdpbmdT
dGF0ZSwgY3RtLCBjbGlwQm91bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLnN0YXRlQ2hhbmdlID0g
c3RhdGVDaGFuZ2U7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGF1dG8gc3RhdGUgPSBjbG9uZUZvclNhdmUoKTsKLSAgICAgICAg
ICAgIHN0YXRlLmxhc3REcmF3aW5nU3RhdGUuYWxwaGEgPSAxOwotICAgICAgICAgICAgcmV0dXJu
IHN0YXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSk7Ci0gICAgICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKLSAgICAg
ICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICAgICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOwotICAgIH07Ci0KLSAgICBjb25zdCBWZWN0b3I8Q29udGV4dFN0YXRlLCA0
PiYgc3RhdGVTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVTdGFjazsgfQotCi0gICAgY29u
c3QgQ29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKSBjb25zdDsKLSAgICBDb250ZXh0U3RhdGUm
IGN1cnJlbnRTdGF0ZSgpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TW9kZT4sIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgCisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCkgPSAwOwogCiBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxh
dGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZXN0b3JlKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0YXRlQ2hhbmdl
cygpIGZpbmFsOwogI2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9v
bCkgZmluYWwgeyB9Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZp
bmFsIHsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAj
ZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpIGZpbmFsOwogCi0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
LQotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgp
IGNvbnN0IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZFVw
ZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xp
cChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQ
YXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lk
dGgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0jaWYgVVNFKENHKQotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
cHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7Ci0jZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJl
c3VsdHMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
KSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZp
bmFsOwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKQEAg
LTI0MSw0MCArMTkyLDIzIEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJv
b2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
c3RvcmUoKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcm90YXRlKGZsb2F0
IGFuZ2xlSW5SYWRpYW5zKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2Nh
bGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFs
OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwg
RmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICNpZiBFTkFC
TEUoVklERU8pCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5n
TW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVG
b250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9y
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VT
dHlsZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKIAotICAg
IHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgY3RtKCkgY29uc3Q7Ci0KLSAgICBWZWN0b3I8Q29udGV4dFN0YXRlLCA0PiBtX3N0
YXRlU3RhY2s7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyIG1fZHJhd0dseXBoc1JlY29yZGVyOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKaW5k
ZXggMWZkYzZiYTU2YmZkYjI2MzZlZmIzNDYyYWRhMmE5OTBkMzM4OTk0NS4uMWZiNGRkNzk1YWUx
MGFhOGNjY2JjZGQ4MzE0ZWVhODA4NmU4ZGI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlckltcGwuY3BwCkBAIC00MiwxOCArNDIsMTMgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLVJlY29yZGVySW1wbDo6UmVjb3Jk
ZXJJbXBsKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5
cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKLSAgICA6IFJlY29yZGVyKHN0YXRlLCBpbml0aWFs
Q2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorUmVjb3JkZXJJbXBsOjpS
ZWNvcmRlckltcGwoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBGbG9hdFJlY3QmIGlu
aXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNS
ZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKKyAg
ICA6IFJlY29yZGVyKGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlw
aHMpCiAgICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQogewogICAgIExPR19XSVRIX1NU
UkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiXG5SZWNvcmRpbmcgd2l0aCBjbGlwICIgPDwg
aW5pdGlhbENsaXApOwogfQogCi1SZWNvcmRlckltcGw6On5SZWNvcmRlckltcGwoKQotewotICAg
IEFTU0VSVChzdGF0ZVN0YWNrKCkuc2l6ZSgpID09IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBpdCBp
bmRpY2F0ZXMgbWlzbWF0Y2hlZCBzYXZlL3Jlc3RvcmUuCi19Ci0KIHZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRTYXZlKCkKIHsKICAgICBhcHBlbmQ8U2F2ZT4oKTsKQEAgLTY0LDMxICs1OSw2IEBA
IHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRSZXN0b3JlKCkKICAgICBhcHBlbmQ8UmVzdG9yZT4o
KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KQotewotICAgIGFwcGVuZDxUcmFuc2xhdGU+KHgsIHkpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIGFwcGVuZDxSb3RhdGU+KGFu
Z2xlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgc2NhbGUpCi17Ci0gICAgYXBwZW5kPFNjYWxlPihzY2FsZSk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17
Ci0gICAgYXBwZW5kPFNldENUTT4odHJhbnNmb3JtKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQot
ewotICAgIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4odHJhbnNmb3JtKTsKLX0KLQogdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBpbmxpbmVD
b2xvcikKIHsKICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihpbmxpbmVDb2xvcik7CkBA
IC0xMDQsOTIgKzc0LDI2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdHJva2VUaGlj
a25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KHRo
aWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGNoYW5nZUZsYWdzKQotewotICAgIGFwcGVuZDxTZXRTdGF0ZT4oc3RhdGUsIGNo
YW5nZUZsYWdzKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVDYXAoTGlu
ZUNhcCBsaW5lQ2FwKQotewotICAgIGFwcGVuZDxTZXRMaW5lQ2FwPihsaW5lQ2FwKTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgYXJy
YXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgYXBwZW5kPFNldExpbmVEYXNoPihhcnJheSwg
ZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lSm9pbihM
aW5lSm9pbiBqb2luKQotewotICAgIGFwcGVuZDxTZXRMaW5lSm9pbj4oam9pbik7Ci19Ci0KLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAg
IGFwcGVuZDxTZXRNaXRlckxpbWl0PihsaW1pdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGVhclNoYWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQot
ewotICAgIGFwcGVuZDxDbGlwPihjbGlwUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCit2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewot
ICAgIGFwcGVuZDxDbGlwT3V0PihjbGlwUmVjdCk7CisgICAgYXBwZW5kPFNldFN0YXRlPihzdGF0
ZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQot
ewotICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXBwZW5k
PENsaXBPdXRUb1BhdGg+KHBhdGgpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKLXsKLSAgICBhcHBlbmQ8Q2xp
cFBhdGg+KHBhdGgsIHJ1bGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJj
ZUltYWdlKQotICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpOwotICAgIGFwcGVuZDxEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcj4oV1RG
TW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMs
IHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290
aGluZ01vZGUgbW9kZSkKLXsKLSAgICBhcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlKTsKLX0KLQotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZl
cj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRp
dmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
KyNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJu
KCkKIHsKLSAgICBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpbWFnZUlkZW50aWZpZXIsIGltYWdl
U2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIGFwcGVuZDxBcHBseVN0cm9r
ZVBhdHRlcm4+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVtSW1h
Z2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAg
ICBhcHBlbmQ8RHJhd1N5c3RlbUltYWdlPihzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsK
KyAgICBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4oKTsKIH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAK
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIHsKLSAgICBhcHBlbmQ8
RHJhd1BhdHRlcm4+KGltYWdlSWRlbnRpZmllciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcj4oc2NhbGVGYWN0b3IpOwogfQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQpAQCAtMjAyLDQ0ICsxMDYsMzQgQEAg
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBhcHBl
bmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAg
ICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGxpbmVXaWR0aCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikKLXsKLSAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsK
LX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0
UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KGJsb2NrTG9j
YXRpb24sIGxvY2FsQW5jaG9yLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxp
bmVzKTsKKyAgICBhcHBlbmQ8Q2xpcD4oY2xpcFJlY3QpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3ZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQogewotICAg
IGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihyZWN0LCBzdHlsZSk7CisgICAgYXBw
ZW5kPENsaXBQYXRoPihwYXRoLCBydWxlKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgYXBwZW5kPERy
YXdFbGxpcHNlPihyZWN0KTsKKyAgICBhcHBlbmQ8Q2xpcE91dD4oY2xpcFJlY3QpOwogfQogCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgYXBwZW5kPERyYXdQYXRoPihwYXRoKTsKKyAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0
aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAg
ICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1BhdGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsK
KyAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0
cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KTsKKyAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI1NywyMyArMTUxLDIy
IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBnCiAgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRp
ZW50PihyZWN0LCBncmFkaWVudCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxs
Q29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KHJlY3Qs
IGNvbG9yLCBvcCwgbW9kZSk7CisgICAgYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29s
b3IpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIG1v
ZGUpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3Qs
IGNvbG9yLCBtb2RlKTsKKyAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3Qs
IHJvdW5kZWRSZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFw
cGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKTsK
KyAgICBhcHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9Q
QVRIX0RBVEEpCi0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsTGluZShjb25zdCBMaW5l
RGF0YSYgbGluZSkKIHsKICAgICBhcHBlbmQ8RmlsbExpbmU+KGxpbmUpOwpAQCAtMjkzLDcgKzE4
Niw2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6
aWVyQ3VydmVEYXRhJiBjdXJ2ZSkKIHsKICAgICBhcHBlbmQ8RmlsbEJlemllckN1cnZlPihjdXJ2
ZSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zMDEsMjUgKzE5
MywxNyBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKICAgICBhcHBlbmQ8RmlsbFBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGFwcGVuZDxG
aWxsRWxsaXBzZT4ocmVjdCk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAg
ICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICBh
cHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KLSNlbmRpZiAvLyBF
TkFCTEUoVklERU8pCiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPFN0cm9r
ZVJlY3Q+KHJlY3QsIHdpZHRoKTsKKyAgICBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CiB9
CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmIGxpbmUpCiB7CiAgICAgYXBwZW5kPFN0cm9r
ZUxpbmU+KGxpbmUpOwpAQCAtMzM5LDcgKzIyMyw2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewogICAg
IGFwcGVuZDxTdHJva2VCZXppZXJDdXJ2ZT4oY3VydmUpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxF
KElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNDcsMzMgKzIzMCw4NCBAQCB2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxTdHJva2VQ
YXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFw
cGVuZDxTdHJva2VFbGxpcHNlPihyZWN0KTsKKyAgICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGJv
cmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewot
ICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOworICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQx
LCBwb2ludDIpOwogfQogCi0jaWYgVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhcHBlbmQ8RHJhd0VsbGlw
c2U+KHJlY3QpOworfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0
ZXJuKCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+KCk7CisgICAgYXBwZW5kPERyYXdQ
YXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRl
cm4oKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4oKTsKKyAgICBhcHBlbmQ8RHJhd0ZvY3Vz
UmluZ1BhdGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotI2VuZGlmIC8vIFVT
RShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMs
IHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKK30KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCit2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihz
Y2FsZUZhY3Rvcik7CisgICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2VJZGVudGlmaWVy
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIGFwcGVuZDxEcmF3U3lz
dGVtSW1hZ2U+KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworfQorCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhcHBlbmQ8RHJhd0ltYWdl
QnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7CisgICAgaWYgKHNv
dXJjZUltYWdlKQorICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpOworICAgIGFwcGVuZDxEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcj4o
V1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworfQorCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1h
Z2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBhcHBlbmQ8UGFpbnRGcmFt
ZUZvck1lZGlhPihpZGVudGlmaWVyLCBkZXN0aW5hdGlvbik7Cit9CisjZW5kaWYKKwordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9v
dGhpbmdNb2RlIG1vZGUpCit7CisgICAgYXBwZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBocywg
YWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKQoreworICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihGbG9hdFBvaW50
KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVMaW5lcyk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUmIHN0eWxlKQoreworICAgIGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihy
ZWN0LCBzdHlsZSk7CiB9CiAKIGJvb2wgUmVjb3JkZXJJbXBsOjpyZWNvcmRSZXNvdXJjZVVzZShO
YXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UpCkBAIC00MTcsMjAgKzM1MSwxNiBAQCBzdGF0aWMgaW5s
aW5lIGZsb2F0IHNoYWRvd1BhaW50aW5nRXh0ZW50KGZsb2F0IGJsdXJSYWRpdXMpCiAKIEZsb2F0
UmVjdCBSZWNvcmRlckltcGw6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IHJlY3Q7Ci0gICAgYXV0byYg
c3RhdGUgPSBjdXJyZW50U3RhdGUoKTsKKyAgICBhdXRvIGJvdW5kcyA9IHJlY3Q7CiAKLSAgICBG
bG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd1JhZGl1czsKLSAgICBDb2xv
ciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFk
aXVzLCBzaGFkb3dDb2xvcikpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJv
dW5kczsKLSAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKLSAgICAgICAg
c2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7
CisgICAgaWYgKGhhc1NoYWRvdygpKSB7CisgICAgICAgIGF1dG8gc2hhZG93RXh0ZW50ID0gYm91
bmRzOworICAgICAgICBzaGFkb3dFeHRlbnQubW92ZShkcm9wU2hhZG93KCkub2Zmc2V0KTsKKyAg
ICAgICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoZHJvcFNoYWRv
dygpLmJsdXJSYWRpdXMpKTsKICAgICAgICAgYm91bmRzLnVuaXRlKHNoYWRvd0V4dGVudCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGludGVyc2VjdGlvbihzdGF0ZS5jbGlwQm91bmRzLCBzdGF0ZS5j
dG0ubWFwUmVjdChib3VuZHMpKTsKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKGNsaXBCb3VuZHMo
KSwgZ2V0Q1RNKCkubWFwUmVjdChib3VuZHMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKaW5kZXgg
NjQyMjY1ZjA5ODAyMmNmMmIwNWYxODBjMTc0ZmEwMzQ2MmYyZGQ0MC4uNmRlNmFlZGZmY2IxN2Ri
MmQwODFiNDJjMWRlNmJjMzI5YTM4YmY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXJJbXBsLmgKQEAgLTM1LDkgKzM1LDggQEAgY2xhc3MgUmVjb3JkZXJJbXBsIDog
cHVibGljIFJlY29yZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShSZWNvcmRlckltcGwpOwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQ
T1JUIFJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVj
b3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5SZWNvcmRlckltcGwoKTsKLQorICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVySW1w
bChEaXNwbGF5TGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0
cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBo
czo6WWVzKTsKKyAgICAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bs
YXlMaXN0LmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkg
ZmluYWwgeyB9CkBAIC00Nyw0NyArNDYsMzUgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lk
IHJlY29yZFNhdmUoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFJlc3RvcmUoKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTY2FsZShj
b25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxs
Q29sb3IoU1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ry
b2tlQ29sb3IoU1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRDbGVhclNoYWRvdygpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmKSBmaW5hbDsKKworI2lmIFVTRShDRykKKyAgICB2b2lkIHJlY29y
ZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0
dGVybigpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CiAg
ICAgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5k
UnVsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0
cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCiAgICAgdm9p
ZCByZWNvcmRGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIHJlY29y
ZEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7
CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBH
cmFkaWVudCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworCisgICAg
dm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVE
YXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IEFyY0RhdGEmKSBmaW5h
bDsKQEAgLTk1LDExICs4MiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkRmlsbEJlemll
ckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCBy
ZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9p
ZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKSBmaW5hbDsKLSNlbmRpZgotICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3Qg
TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25zdCBBcmNEYXRh
JikgZmluYWw7CkBAIC0xMDcsMTMgKzkzLDI4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRT
dHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2
b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBw
bHlGaWxsUGF0dGVybigpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7Cisg
ICAgCisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIEZpbHRlciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisjaWYgRU5BQkxF
KFZJREVPKQorICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRl
bnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKLSAg
ICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisgICAg
dm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKIAogICAg
IGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmKSBmaW5hbDsKICAgICBib29sIHJl
Y29yZFJlc291cmNlVXNlKEltYWdlQnVmZmVyJikgZmluYWw7CkBAIC0xMzksNiArMTQwLDggQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2Fs
Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCiAgICAgRGlzcGxheUxpc3QmIG1fZGlz
cGxheUxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXgg
OGZmMTlkMDAzNTRjZGJlZGUzYTViYTFhZjc1OGNmZjAyM2EyNWEyMi4uNjZmYzlkODgyYTRkM2Y3
ZGU4ZTg5MTJhMWYzMGFmMTk4ZDAzNTI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlcGxheWVyLmNwcApAQCAtOTcsMTAgKzk3LDEwIEBAIGlubGluZSBzdGF0aWMgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGFwcGx5U2V0U3RhdGVJdGVtKEdyYXBo
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfTsKIAotICAgIGlmIChhdXRvIGlt
YWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlQ2hh
bmdlKCkubV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoYXV0byBpbWFnZUlk
ZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZSgpLmZpbGxC
cnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybiAqaW1hZ2VJZGVudGlmaWVyOwogCi0g
ICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0
ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAo
YXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5z
dGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybiAqaW1hZ2VJZGVu
dGlmaWVyOwogCiAgICAgc2V0U3RhdGVJdGVtLmFwcGx5KGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29y
ZGVySGFyZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCmluZGV4IGQwOWMxMzczZWE5YWFhZjRh
MTg1MTM2ZWU4ODUzZDc4OGZjNDE3OGQuLmZjYWRlZjIzOGUwOWZlMDI4MmFjZWVjOWExZjI1Zjg3
MzM5ZDljN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5j
cHAKQEAgLTI5LDE3ICsyOSwxOCBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRy
YXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdH
bHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3
R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3Rp
bmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRl
eHQpCisgICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9
CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBv
aW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJh
d0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0
YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFy
dFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNw
cAppbmRleCA5MTE0NmRmYzZmZDg0ZGY4ZTI5NTRmMDM3N2QwMDY2YTc3MjMzY2M5Li4zODA3YjUz
YmNiNzMyYTMxOTcyNzgwOGIzMGY4ZTAzMzA2ODNjYTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAq
IENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzcsMTYwICs3OCwzODkgQEAgYXV0byBjcmVhdGVDb21tYW5kKCkgLT4gc3RkOjpl
bmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8T3BlcmF0aW9uRGF0YTw+LCBUPjo6dmEKIH0KIAog
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09w
ZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDogbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkK
KyAgICA6IEdyYXBoaWNzQ29udGV4dChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpKQorICAgICwg
bV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKIHsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsg
eyB9LCB7IH0sIEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkgfSk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykK
K3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2ZSgpCit7CisgICAgc3RydWN0IFNhdmUg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmly
dHVhbCB+U2F2ZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdP
cGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5zYXZlKCk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiU2F2ZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAg
IEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNhdmU+
KCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJlc3RvcmUoKQoreworICAg
IHN0cnVjdCBSZXN0b3JlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
PiB7CisgICAgICAgIHZpcnR1YWwgflJlc3RvcmUoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikucmVzdG9yZSgp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlJlc3RvcmU8PlxuIjsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBpZiAoIXN0YWNrU2l6ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKKyAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxSZXN0b3JlPigpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjph
cHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkgeworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE0pKSB7CisgICAgICAgIHN0
cnVjdCBTZXRDVE0gZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZp
bmVUcmFuc2Zvcm0+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldENUTSgpID0gZGVmYXVsdDsK
KworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENUTShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3Zl
cnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTTw+XG4iOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldENUTT4oZ2V0Q1RNKCkp
KTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSkgewogICAgICAgICBzdHJ1Y3Qg
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8ZmxvYXQ+IHsKICAgICAgICAgICAgIHZpcnR1YWwgflN0cm9rZVRoaWNrbmVzc0NoYW5n
ZSgpID0gZGVmYXVsdDsKIAogICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0
aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ry
b2tlVGhpY2tuZXNzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBv
dmVycmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3M8PlxuIjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTdHJva2VUaGlja25lc3NDaGFuZ2U+KHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VUaGlja25lc3NDaGFuZ2U+KHN0cm9rZVRoaWNr
bmVzcygpKSk7CiAgICAgfQogCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVN0eWxlQ2hhbmdlKSB7CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlKSkgewogICAgICAgICBz
dHJ1Y3QgU3Ryb2tlU3R5bGVDaGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxTdHJva2VTdHlsZT4gewogICAgICAgICAgICAgdmlydHVhbCB+U3Ryb2tlU3R5bGVD
aGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ry
b2tlU3R5bGUoY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJy
aWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZTw+XG4iOworICAgICAgICAgICAg
fQorICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVN0eWxl
Q2hhbmdlPihzdHJva2VTdHlsZSgpKSk7CisgICAgfQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdl
cygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXApKSB7Cisg
ICAgICAgIHN0cnVjdCBTZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8TGluZUNhcD4geworICAgICAgICAgICAgdmlydHVhbCB+U2V0TGluZUNhcCgpID0g
ZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVw
bGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBD
YWlybzo6c2V0TGluZUNhcChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4o
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXA8PlxuIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5l
Q2FwPihsaW5lQ2FwKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2gpKSB7CisgICAgICAg
IHN0cnVjdCBTZXRMaW5lRGFzaCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPERhc2hBcnJheSwgZmxvYXQ+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldExpbmVEYXNo
KCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIENhaXJvOjpzZXRMaW5lRGFzaChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBh
cmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1
bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFz
aDw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFNldExpbmVEYXNoPihsaW5lRGFzaCgpLmRhc2hlcywgbGluZURhc2goKS5vZmZz
ZXQpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4pKSB7CisgICAgICAgIHN0cnVjdCBTZXRM
aW5lSm9pbiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPExpbmVKb2lu
PiB7CisgICAgICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lSm9pbigpID0gZGVmYXVsdDsKKworICAg
ICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6c2V0TGluZUpv
aW4oY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjw+XG4iOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVKb2luPihsaW5lSm9p
bigpKSk7CisgICAgfQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQpKSB7CisgICAgICAgIHN0cnVjdCBT
ZXRNaXRlckxpbWl0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Zmxv
YXQ+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7CisK
KyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNldE1p
dGVyTGltaXQoY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJy
aWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJv
a2VTdHlsZUNoYW5nZTw+XG4iOworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDw+XG4iOwogICAgICAgICAgICAg
fQogICAgICAgICB9OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVN0eWxl
Q2hhbmdlPihzdGF0ZS5zdHJva2VTdHlsZSkpOworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTZXRNaXRlckxpbWl0PihtaXRlckxpbWl0KCkpKTsKICAgICB9CiAKLSAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSB7CisgICAg
aWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkNvbXBvc2l0ZU1vZGUpKSB7CiAgICAgICAgIHN0cnVjdCBDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlPiB7CiAgICAgICAgICAgICB2aXJ0dWFsIH5Db21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4
dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICAg
ICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dEZvclJlcGxheShy
ZXBsYXllcikuY3IoKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ29tcG9zaXRlT3BlcmF0aW9uQ2hh
bmdlPD5cbiI7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVNb2RlPD5cbiI7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH07CiAKLSAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlPihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CisgICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZT4oY29tcG9z
aXRlTW9kZSgpLm9wZXJhdGlvbiwgY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZSkpOwogICAgIH0K
LQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXND
aGFuZ2UpIHsKKyAgICAKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzKSkgewogICAgICAgICBzdHJ1
Y3QgU2hvdWxkQW50aWFsaWFzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8Ym9vbD4gewogICAgICAgICAgICAgdmlydHVhbCB+U2hvdWxkQW50aWFsaWFzQ2hh
bmdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
aG91bGRBbnRpYWxpYXMoY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJTaG91bGRBbnRpYWxpYXNDaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczw+XG4i
OwogICAgICAgICAgICAgfQogICAgICAgICB9OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPFNob3VsZEFudGlhbGlhc0NoYW5nZT4oc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7CisgICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNob3VsZEFudGlhbGlhc0NoYW5nZT4oc2hvdWxkQW50
aWFsaWFzKCkpKTsKICAgICB9CisKKyAgICBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOworfQorCit2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSkKK3sKKyAgICBzdHJ1Y3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0PiB7CisgICAgICAgIHZpcnR1YWwg
fkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJCZWdpblRyYW5zcGFyZW5jeUxheWVyPD5cbiI7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxC
ZWdpblRyYW5zcGFyZW5jeUxheWVyPihvcGFjaXR5KSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQoreworICAgIHN0cnVjdCBFbmRUcmFu
c3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4g
eworICAgICAgICB2aXJ0dWFsIH5FbmRUcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKKwor
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllcikpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkVuZFRyYW5zcGFyZW5jeUxheWVyPD5cbiI7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RW5k
VHJhbnNwYXJlbmN5TGF5ZXI+KCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHN0cnVjdCBDbGlwIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7CisgICAgICAgIHZp
cnR1YWwgfkNsaXAoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5n
T3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgQ2Fpcm86OmNsaXAoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwPD5cbiI7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcChyZWN0KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwPihyZWN0KSk7
Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit7CisgICAgc3RydWN0IENsaXBQYXRoIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgV2luZFJ1bGU+IHsKKyAgICAg
ICAgdmlydHVhbCB+Q2xpcFBhdGgoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgewor
ICAgICAgICAgICAgQ2Fpcm86OmNsaXBQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkNsaXBQYXRoPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChwYXRoLCB3aW5kUnVsZSk7Cisg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcFBhdGg+KHBhdGgsIGNsaXBSdWxlKSk7CiB9CiAK
LXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAp
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIHN0cnVjdCBTZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8TGluZUNhcD4gewotICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkg
PSBkZWZhdWx0OworICAgIHN0cnVjdCBDbGlwT3V0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9
IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldExp
bmVDYXAoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAg
IENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2V0TGluZUNhcDw+XG4iOwor
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7CiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZUNhcD4obGluZUNhcCkpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91
dD4ocmVjdCkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc3RydWN0
IFNldExpbmVEYXNoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFz
aEFycmF5LCBmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lRGFzaCgpID0gZGVmYXVs
dDsKKyAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPFBhdGg+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKIAog
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2goY29udGV4
dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICBD
YWlybzo6Y2xpcE91dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAg
ICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldExpbmVEYXNoPD5cbiI7Cisg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBPdXQ8PlxuIjsKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lRGFzaD4oZGFzaGVzLCBkYXNo
T2Zmc2V0KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxDbGlwT3V0PihwYXRoKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCiB7Ci0gICAgc3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUpvaW4+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0
TGluZUpvaW4oKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IENsaXBUb0ltYWdlQnVmZmVyIGZpbmFs
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiwgRmxvYXRSZWN0PiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXBUb0ltYWdlQnVmZmVyKCkgPSBk
ZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRMaW5l
Sm9pbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAg
Q2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8
MD4oKS5nZXQoKSwgYXJnPDE+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIlNldExpbmVKb2luPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNs
aXBUb0ltYWdlQnVmZmVyPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKworICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENs
aXBUb0ltYWdlQnVmZmVyPihuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCkp
OwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQg
bWl0ZXJMaW1pdCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzdHJ1Y3QgU2V0TWl0ZXJMaW1pdCBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwg
flNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IENsZWFyUmVjdCBmaW5hbCA6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4geworICAgICAgICB2
aXJ0dWFsIH5DbGVhclJlY3QoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAg
ICAgICAgICAgQ2Fpcm86OnNldE1pdGVyTGltaXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciks
IGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpjbGVhclJlY3QoY29udGV4dEZvclJlcGxh
eShyZXBsYXllciksIGFyZzwwPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJTZXRNaXRlckxpbWl0PD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwg
IkNsZWFyUmVjdDw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPFNldE1pdGVyTGltaXQ+KG1pdGVyTGltaXQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsZWFyUmVjdD4ocmVjdCkpOwogfQogCiB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKQEAgLTI0OSw2ICs0NzksOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KQEAgLTI2OSw2ICs1MDEsOCBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVj
dCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCkBAIC0yOTEsMzUg
KzUyNSwxMiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogICAgICAgICB9CiAgICAgfTsKIAot
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxGaWxsUmVjdD4ocmVjdCwgZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIHN0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKSkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkK
LXsKLSAgICBzdHJ1Y3QgRmlsbFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxGbG9hdFJlY3QsIENvbG9yLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBD
YWlybzo6U2hhZG93U3RhdGUsIENvbXBvc2l0ZU9wZXJhdG9yPiB7Ci0gICAgICAgIHZpcnR1YWwg
fkZpbGxSZWN0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpOwotCi0g
ICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNv
bnRleHQsIGFyZzwyPigpLCBhcmc8Mz4oKSk7Ci0gICAgICAgICAgICBDYWlybzo6ZmlsbFJlY3Qo
cGxhdGZvcm1Db250ZXh0LCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzw0PigpKTsKLSAgICAgICAg
ICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwg
YXJnPDU+KCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJGaWxsUmVjdDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgY29tcG9zaXRlT3Bl
cmF0b3IsIGJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgc3RhdGUuY29tcG9z
aXRlT3BlcmF0b3IpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwg
Z3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKSkpOwogfQog
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKICAgICBzdHJ1Y3QgRmlsbFJvdW5kZWRSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8RmxvYXRSb3VuZGVkUmVjdCwgQ29sb3IsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewogICAgICAgICB2aXJ0dWFsIH5GaWxs
Um91bmRlZFJlY3QoKSA9IGRlZmF1bHQ7CkBAIC0zNDUsOCArNTU2LDkgQEAgdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZFJlY3QKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3Vu
ZGVkUmVjdCwgY29sb3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwgY29sb3Is
IGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM2NSw1MyArNTc3LDU5
IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKwogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7CiAgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xl
UmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IHN0cnVjdCBGaWxsUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PFBhdGgsIENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAgICAgICAg
dmlydHVhbCB+RmlsbFBhdGgoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IEZpbGxFbGxpcHNlIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDYWlybzo6
RmlsbFNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxF
bGxpcHNlKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENh
aXJvOjpmaWxsUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwx
PigpLCBhcmc8Mj4oKSk7CisgICAgICAgICAgICBQYXRoIHBhdGg7CisgICAgICAgICAgICBwYXRo
LmFkZEVsbGlwc2UoYXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmZpbGxQYXRoKGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBwYXRoLCBhcmc8MT4oKSwgYXJnPDI+KCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAg
ICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxQYXRoPD5cbiI7CisgICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxFbGxpcHNlPD5cbiI7CiAgICAgICAgIH0KICAgICB9
OwogCi0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKIAogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RmlsbEVsbGlwc2U+KHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzdHJ1Y3QgRmlsbEVsbGlw
c2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENh
aXJvOjpGaWxsU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAgICAgICAgdmlydHVhbCB+
RmlsbEVsbGlwc2UoKSA9IGRlZmF1bHQ7Ci0KKyAgICBzdHJ1Y3QgRmlsbFBhdGggZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBDYWlybzo6RmlsbFNvdXJjZSwg
Q2Fpcm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxQYXRoKCkgPSBkZWZh
dWx0OworCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIFBhdGggcGF0aDsKLSAgICAg
ICAgICAgIHBhdGguYWRkRWxsaXBzZShhcmc8MD4oKSk7Ci0gICAgICAgICAgICBDYWlybzo6Zmls
bFBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIHBhdGgsIGFyZzwxPigpLCBhcmc8Mj4o
KSk7CisgICAgICAgICAgICBDYWlybzo6ZmlsbFBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXll
ciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxFbGxpcHNlPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBp
bmRlbnQgPDwgIkZpbGxQYXRoPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCisgICAgaWYgKHBh
dGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0
aD4ocGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKQEAgLTQzMCwzMSArNjQ4LDEwIEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUmVj
dD4ocmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0
cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBzdHJ1Y3QgU3Ryb2tlUGF0aCBmaW5h
bCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpTdHJva2VT
b3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewotICAgICAgICB2aXJ0dWFsIH5TdHJva2VQYXRo
KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJl
cGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpz
dHJva2VQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCks
IGFyZzwyPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJv
a2VQYXRoPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKHBhdGguaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAogICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VQ
YXRoPihwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGxp
bmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTQ3OSwxMDcgKzY3NiwyOSBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QsIENhaXJvOjpTdHJv
a2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKLXZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBzdHJ1Y3QgQ2xlYXJSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8RmxvYXRSZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsZWFyUmVjdCgpID0gZGVm
YXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xlYXJSZWN0
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xlYXJSZWN0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xlYXJSZWN0PihyZWN0KSk7Ci19Ci0KLXZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzdHJ1Y3QgRHJhd0dseXBo
cyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPENhaXJvOjpGaWxsU291
cmNlLCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGUsIEZsb2F0UG9pbnQs
IFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiwgZmxvYXQsIFZlY3RvcjxjYWlyb19nbHlwaF90
PiwgZmxvYXQsIFRleHREcmF3aW5nTW9kZUZsYWdzLCBmbG9hdCwgRmxvYXRTaXplLCBDb2xvciwg
Rm9udFNtb290aGluZ01vZGU+IHsKLSAgICAgICAgdmlydHVhbCB+RHJhd0dseXBocygpID0gZGVm
YXVsdDsKKyAgICBzdHJ1Y3QgU3Ryb2tlUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0
ZT4geworICAgICAgICB2aXJ0dWFsIH5TdHJva2VQYXRoKCkgPSBkZWZhdWx0OwogCiAgICAgICAg
IHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRl
CiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpkcmF3R2x5cGhzKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJn
PDQ+KCkuZ2V0KCksCi0gICAgICAgICAgICAgICAgYXJnPDU+KCksIGFyZzw2PigpLCBhcmc8Nz4o
KSwgYXJnPDg+KCksIGFyZzw5PigpLCBhcmc8MTA+KCksIGFyZzwxMT4oKSwgYXJnPDEyPigpKTsK
KyAgICAgICAgICAgIENhaXJvOjpzdHJva2VQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJEcmF3R2x5cGhzPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIlN0cm9rZVBhdGg8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBpZiAoIWZv
bnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3Rvcjxj
YWlyb19nbHlwaF90PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOwotICAgIHsKLSAgICAgICAgYXV0
byB5T2Zmc2V0ID0gcG9pbnQueSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ld
LCB4T2Zmc2V0LCB5T2Zmc2V0IH07Ci0gICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ld
LndpZHRoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fpcm86OkZpbGxT
b3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKLSAgICAgICAgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCi0gICAgICAgIFJlZlB0cjxjYWlyb19zY2FsZWRf
Zm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCi0gICAgICAgIGZvbnQu
c3ludGhldGljQm9sZE9mZnNldCgpLCBXVEZNb3ZlKGNhaXJvR2x5cGhzKSwgeE9mZnNldCwgc3Rh
dGUudGV4dERyYXdpbmdNb2RlLAotICAgICAgICBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRl
LnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsIGZvbnRTbW9vdGhpbmcpKTsKLX0KLQot
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOwogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIHN0cnVjdCBEcmF3
TmF0aXZlSW1hZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdP
cHRpb25zLCBmbG9hdCwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRy
YXdOYXRpdmVJbWFnZSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29udGV4dEZvclJlcGxheShyZXBsYXllciks
IGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwg
YXJnPDU+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRz
KSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdO
YXRpdmVJbWFnZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIFVOVVNFRF9QQVJBTShp
bWFnZVNpemUpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2Uo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIHN0YXRl
LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzdHJ1Y3Qg
RHJhd1BhdHRlcm4gZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiwgSW50U2l6ZSwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEFmZmlu
ZVRyYW5zZm9ybSwgRmxvYXRQb2ludCwgSW1hZ2VQYWludGluZ09wdGlvbnM+IHsKLSAgICAgICAg
dmlydHVhbCB+RHJhd1BhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewot
ICAgICAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCks
IGFyZzw1PigpLCBhcmc8Nj4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVu
dCA8PCAiRHJhd1BhdHRlcm48PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBVTlVTRURf
UEFSQU0oc3BhY2luZyk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1BhdHRlcm4+KG5h
dGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgbmF0aXZlSW1hZ2Uuc2l6ZSgpLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKSk7CisgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykKQEAgLTU5OCw4ICs3MTcsOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZQogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0
ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcikpOworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1JlY3Q+
KHJlY3QsIGJvcmRlclRoaWNrbmVzcywgZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9r
ZUNvbG9yKCkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKQEAgLTYy
MSw1MCArNzQwLDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQKICAgICBpZiAoc3Ryb2tlU3R5
bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lPihwb2ludDEs
IHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcykpOwotfQotCi12b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCi17Ci0gICAgc3RydWN0IERyYXdM
aW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9h
dFBvaW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4gewotICAgICAgICB2
aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhl
Y3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+
KCksIGFyZzw1PigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJE
cmF3TGluZXNGb3JUZXh0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKHdpZHRo
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2lu
dCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5z
dHJva2VDb2xvcikpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSBzdHlsZSkKLXsKLSAgICBzdHJ1Y3QgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU+IHsKLSAgICAgICAgdmlydHVhbCB+RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcigpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBD
YWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCksIGFyZzwxPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4o
cmVjdCwgc3R5bGUpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Miwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tl
Q29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHNob3VsZEFudGlhbGlhcygpKSk7CiB9CiAKIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQpAQCAtNjgzLDExICs3NjAsMTEgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PERyYXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBz
dGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVjdCwg
ZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVz
cygpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAj
aWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWlu
dEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7CkBAIC03MDcsMTIgKzc4NCwxMiBAQCB2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxv
YXQgd2lkdGgsIGZsb2F0CiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3Rm9jdXNSaW5nPihwYXRoLCB3aWR0
aCwgY29sb3IpKTsKICNlbmRpZgotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwogfQogCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFk
d2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CkBAIC03MzIsMzY4ICs4MDks
MTQ2IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0CiAgICAgICAgIH0KICAgICB9OwogCisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3Rm9jdXNS
aW5nPihyZWN0cywgd2lkdGgsIGNvbG9yKSk7CiAjZW5kaWYKLSAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzYXZlKCkKLXsKLSAgICBz
dHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4gewot
ICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnNhdmUoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTYXZlPD5cbiI7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7Ci0KLSAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxTYXZlPigpKTsKLQotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNr
Lmxhc3QoKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cmVzdG9yZSgpCi17
Ci0gICAgc3RydWN0IFJlc3RvcmUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9u
RGF0YTw+IHsKLSAgICAgICAgdmlydHVhbCB+UmVzdG9yZSgpID0gZGVmYXVsdDsKLQotICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5yZXN0
b3JlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiUmVzdG9yZTw+
XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmICghc3RhY2tTaXplKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwotCi0gICAgaWYgKG1f
c3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFJlc3RvcmU+KCkpOwotCi0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsK
LSAgICBpZiAobV9zdGF0ZVN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGF0ZVN0YWNrLmNs
ZWFyKCk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBzdHJ1Y3QgVHJhbnNsYXRlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8ZmxvYXQsIGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgflRyYW5zbGF0ZSgpID0g
ZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6dHJhbnNs
YXRlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAg
ICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlRyYW5zbGF0ZTw+XG4iOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFRyYW5zbGF0ZT4oeCwg
eSkpOwotCi0gICAgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7
Ci0gICAgICAgIHN0YXRlLmN0bS50cmFuc2xhdGUoeCwgeSk7Ci0KLSAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIHQ7Ci0gICAgICAgIHQudHJhbnNsYXRlKC14LCAteSk7Ci0gICAgICAgIHN0YXRlLmN0
bUludmVyc2UgPSB0ICogc3RhdGUuY3RtSW52ZXJzZTsKLSAgICB9CisgICAgLy8gRklYTUU6IE5v
dCBpbXBsZW1lbnRlZC4KKyAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihpbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAg
IHN0cnVjdCBSb3RhdGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxm
bG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5Sb3RhdGUoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0
IERyYXdOYXRpdmVJbWFnZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwgSW1hZ2VQYWlu
dGluZ09wdGlvbnMsIGZsb2F0LCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICAgICAgdmlydHVh
bCB+RHJhd05hdGl2ZUltYWdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQ
YWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIENhaXJvOjpyb3RhdGUoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzww
PigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZShjb250ZXh0Rm9yUmVw
bGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+
KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiUm90YXRlPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdO
YXRpdmVJbWFnZTw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPFJvdGF0ZT4oYW5nbGVJblJhZGlhbnMpKTsKLQotICAgIHsKLSAgICAgICAgYXV0byYg
c3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZS5jdG0ucm90YXRlKGFu
Z2xlSW5SYWRpYW5zKTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdDsKLSAgICAgICAgdC5y
b3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gdCAqIHN0
YXRlLmN0bUludmVyc2U7Ci0gICAgfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUltYWdlPihuYXRpdmVJbWFnZS5wbGF0Zm9ybUlt
YWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhvcHRpb25zLCBp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpLCBhbHBoYSgpLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUoKSkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzY2FsZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc3RydWN0IFNjYWxlIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRTaXplPiB7Ci0gICAg
ICAgIHZpcnR1YWwgflNjYWxlKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3UGF0dGVybiBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+LCBJbnRTaXplLCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwgQWZmaW5lVHJhbnNmb3JtLCBG
bG9hdFBvaW50LCBJbWFnZVBhaW50aW5nT3B0aW9ucz4geworICAgICAgICB2aXJ0dWFsIH5EcmF3
UGF0dGVybigpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBD
YWlybzo6c2NhbGUoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAg
ICAgICAgIENhaXJvOjpkcmF3UGF0dGVybihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8
NT4oKSwgYXJnPDY+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwg
IlNjYWxlPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdQYXR0ZXJuPD5c
biI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2NhbGU+
KHNpemUpKTsKLQotICAgIHsKLSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFz
dCgpOwotICAgICAgICBzdGF0ZS5jdG0uc2NhbGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdDsKLSAgICAgICAgdC5zY2FsZSgxIC8gc2l6
ZS53aWR0aCgpLCAxIC8gc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHN0YXRlLmN0bUludmVyc2Ug
PSB0ICogc3RhdGUuY3RtSW52ZXJzZTsKLSAgICB9CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UGF0dGVybj4obmF0aXZlSW1hZ2UucGxhdGZv
cm1JbWFnZSgpLCBuYXRpdmVJbWFnZS5zaXplKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisjaWYg
RU5BQkxFKFZJREVPKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
IHsKLSAgICBzdHJ1Y3QgQ29uY2F0Q1RNIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8QWZmaW5lVHJhbnNmb3JtPiB7Ci0gICAgICAgIHZpcnR1YWwgfkNvbmNhdENUTSgp
ID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y29u
Y2F0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ29uY2F0Q1RNPD5cbiI7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBp
ZiAoIWludmVyc2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PENvbmNhdENUTT4odHJhbnNmb3JtKSk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFj
ay5sYXN0KCk7Ci0gICAgc3RhdGUuY3RtICo9IHRyYW5zZm9ybTsKLSAgICBzdGF0ZS5jdG1JbnZl
cnNlID0gaW52ZXJzZS52YWx1ZSgpICogc3RhdGUuY3RtSW52ZXJzZTsKKyAgICAvLyBGSVhNRTog
Tm90IGltcGxlbWVudGVkLgorICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlh
KHBsYXllciwgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNt
b290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLSAgICBzdHJ1Y3QgU2V0Q1RNIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8QWZmaW5lVHJhbnNmb3JtPiB7Ci0gICAg
ICAgIHZpcnR1YWwgflNldENUTSgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd0dseXBocyBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPENhaXJvOjpGaWxsU291cmNl
LCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGUsIEZsb2F0UG9pbnQsIFJl
ZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiwgZmxvYXQsIFZlY3RvcjxjYWlyb19nbHlwaF90Piwg
ZmxvYXQsIFRleHREcmF3aW5nTW9kZUZsYWdzLCBmbG9hdCwgRmxvYXRTaXplLCBDb2xvciwgRm9u
dFNtb290aGluZ01vZGU+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0dseXBocygpID0gZGVmYXVs
dDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxh
eWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENU
TShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fp
cm86OmRyYXdHbHlwaHMoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8
MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKS5nZXQoKSwKKyAgICAgICAgICAgICAg
ICBhcmc8NT4oKSwgYXJnPDY+KCksIGFyZzw3PigpLCBhcmc8OD4oKSwgYXJnPDk+KCksIGFyZzwx
MD4oKSwgYXJnPDExPigpLCBhcmc8MTI+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIlNldENUTTw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJE
cmF3R2x5cGhzPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byBpbnZlcnNlID0g
dHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBpZiAoIWludmVyc2UpCisgICAgaWYgKCFmb250LnBs
YXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pKTsKLQotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0
ZVN0YWNrLmxhc3QoKTsKLSAgICBzdGF0ZS5jdG0gPSB0cmFuc2Zvcm07Ci0gICAgc3RhdGUuY3Rt
SW52ZXJzZSA9IGludmVyc2UudmFsdWUoKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2Fs
ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07Ci19Ci0KLXZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQotewotICAgIHN0cnVjdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+
QmVnaW5UcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1
dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7
Ci0gICAgICAgICAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVw
bGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1w
KFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBp
bmRlbnQgPDwgIkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI8PlxuIjsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7
Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihvcGFj
aXR5KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKQotewotICAgIHN0cnVjdCBFbmRUcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4gewotICAgICAgICB2aXJ0dWFsIH5FbmRUcmFu
c3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXll
cikpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVy
cmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkVuZFRyYW5zcGFy
ZW5jeUxheWVyPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR3JhcGhpY3NDb250ZXh0
OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RW5k
VHJhbnNwYXJlbmN5TGF5ZXI+KCkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHN0cnVjdCBDbGlwIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7Ci0gICAgICAgIHZp
cnR1YWwgfkNsaXAoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5n
T3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAg
ICAgQ2Fpcm86OmNsaXAoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwPD5cbiI7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcD4ocmVjdCkpOwotCisg
ICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOworICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBj
YWlyb0dseXBocyhudW1HbHlwaHMpOwogICAgIHsKLSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0
YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZS5jbGlwQm91bmRzLmludGVyc2VjdChzdGF0
ZS5jdG0ubWFwUmVjdChyZWN0KSk7Ci0gICAgfQotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHN0cnVjdCBDbGlw
T3V0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7
Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBl
eGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAg
ICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBPdXQoY29udGV4dEZvclJlcGxheShyZXBsYXll
ciksIGFyZzwwPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJD
bGlwT3V0PD5cbiI7CisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fp
cm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAg
ICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwogICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+KHJlY3QpKTsKLX0KLQotdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgc3Ry
dWN0IENsaXBPdXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRo
PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CisgICAgfQogCi0gICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOwogCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAg
ICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocGF0aCkpOwor
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxEcmF3R2x5cGhzPihDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3Vy
Y2Uoc3RhdGUpLAorICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwKKyAg
ICAgICAgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+KGZvbnQucGxhdGZvcm1EYXRhKCkuc2Nh
bGVkRm9udCgpKSwKKyAgICAgICAgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIFdURk1vdmUo
Y2Fpcm9HbHlwaHMpLCB4T2Zmc2V0LCB0ZXh0RHJhd2luZ01vZGUoKSwKKyAgICAgICAgc3Ryb2tl
VGhpY2tuZXNzKCksIHNoYWRvd09mZnNldCgpLCBzaGFkb3dDb2xvcigpLCBmb250U21vb3RoaW5n
KSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0
aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVz
cywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5k
ZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAgc3RydWN0IENsaXBQYXRoIGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgV2luZFJ1bGU+IHsKLSAgICAgICAg
dmlydHVhbCB+Q2xpcFBhdGgoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IERyYXdMaW5lc0ZvclRl
eHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBm
bG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4geworICAgICAgICB2aXJ0dWFsIH5E
cmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpjbGlwUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8
Mz4oKSwgYXJnPDQ+KCksIGFyZzw1PigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJDbGlwUGF0aDw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJE
cmF3TGluZXNGb3JUZXh0PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8Q2xpcFBhdGg+KHBhdGgsIGNsaXBSdWxlKSk7CisgICAgaWYgKHdpZHRocy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIHsKLSAgICAgICAgYXV0byYgc3RhdGUg
PSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZS5jbGlwQm91bmRzLmludGVyc2Vj
dChzdGF0ZS5jdG0ubWFwUmVjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSkpOwotICAgIH0KKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5l
c0ZvclRleHQ+KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVy
bGluZXMsIHN0cm9rZUNvbG9yKCkpKTsKIH0KIAotSW50UmVjdCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFj
ay5sYXN0KCk7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qoc3RhdGUuY3RtSW52ZXJzZS5t
YXBSZWN0KHN0YXRlLmNsaXBCb3VuZHMpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgc3R5bGUpCiB7Ci0gICAgc3RydWN0IENsaXBUb0ltYWdlQnVmZmVyIGZpbmFsOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgRmxvYXRS
ZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBUb0ltYWdlQnVmZmVyKCkgPSBkZWZhdWx0Owor
ICAgIHN0cnVjdCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyIGZpbmFsIDogUGFpbnRpbmdPcGVy
YXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4g
eworICAgICAgICB2aXJ0dWFsIH5EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0
OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1
ZmZlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigp
KTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAg
ICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBUb0ltYWdlQnVmZmVyPD5cbiI7CisgICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI8PlxuIjsKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLmNvcHlJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKSkKLSAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcFRvSW1hZ2VC
dWZmZXI+KG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCksIGRlc3RSZWN0KSk7Ci19Ci0KLXZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkK
LXsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKSk7CiB9CiAKIEZsb2F0UmVjdCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCkBAIC0xMTA2LDEyICs5NjEs
NCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8
UGFpbnRpbmdPcGVyYXRpb24+JiYgY29tbWFuZAogICAgIG1fY29tbWFuZExpc3QuYXBwZW5kKFdU
Rk1vdmUoY29tbWFuZCkpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgotICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVz
dGluYXRpb24pOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIE5pY29zaWEKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCA4
M2M2ZDI3ZDZlYTM2Yzc5YmViZDc4MjVmOTliN2M0MzkwOGVlNTRiLi5hZjQ3OGZjNDM3ZThiNGVl
OTdhN2MwMWI3N2JjMjJhMDM1NDQ3OTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChD
KSAyMDE4IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3
OCArNDIsNTggQEAgcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAot
ICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3Zl
cnJpZGU7CisgICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN0b3JlKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIG92ZXJyaWRlOworCisgICAgdm9p
ZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3Jl
OjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOworICAgIHZvaWQgY2xpcE91dChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBPdXQoY29u
c3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
V2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldExpbmVKb2luKFdlYkNvcmU6OkxpbmVKb2luKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJD
b3JlOjpHcmFkaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVP
cGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSb3Vu
ZGVkUmVjdEltcGwoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBm
aWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKKwogICAgIHZvaWQgZmlsbEVsbGlwc2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNs
ZWFyUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGZp
bGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhd0ds
eXBocyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2Rl
KSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6
SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpO
YXRpdmVJbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihXZWJDb3Jl
OjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3Jl
OjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlRWxsaXBz
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZVBh
dGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3UmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3
TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBi
b29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKKwogICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdG
b2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3Rv
cmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2NhbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjb25jYXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7
Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OlBhdGgm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJD
b3JlOjpXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBjbGlwQm91bmRz
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZv
aWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6TmF0aXZlSW1hZ2UmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
KSBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYs
IGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1
ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmLCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0
eWxlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92
ZXJyaWRlOwogCiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpSb3VuZGlu
Z01vZGUpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBhcHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50
aW5nT3BlcmF0aW9uPiYmKTsKICAgICBQYWludGluZ09wZXJhdGlvbnMmIG1fY29tbWFuZExpc3Q7
Ci0KLSAgICBzdHJ1Y3QgU3RhdGUgewotICAgICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0g
Y3RtOwotICAgICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3RtSW52ZXJzZTsKLSAgICAg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNsaXBCb3VuZHM7Ci0gICAgfTsKLSAgICBWZWN0b3I8U3Rh
dGUsIDMyPiBtX3N0YXRlU3RhY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1Jl
Y29yZGVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3
R2x5cGhzUmVjb3JkZXJXaW4uY3BwCmluZGV4IDVkNjZlYjcyYWQxM2MyNGRhYzA5NWE5NDVmNjE0
YTZmNTUyMjI0OTIuLjA3YzAzMzlmNThiZjMyYzdkNWY4ZjgxN2RiZGQzZWI3ZjFlZTczNjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhz
UmVjb3JkZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCkBAIC0yOSwxNyArMjksMTggQEAKICNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0
JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCi0g
ICAgOiBtX293bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3Jk
ZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0ds
eXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQo
ZGVzdGluYXRpb25Db250ZXh0KQogewogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5n
TW9kZSkKIHsKLSAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBtX3Ntb290aGluZ01vZGUpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBtX3Ntb290aGluZ01vZGUpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCmluZGV4IGMxOWU3NDE1NTdjMzA4Yzk0MWU0ZWY3
MTVlM2RiNDY1OTRkMTg1YjYuLjJjZDc4NjVlY2E4MjllYjQ1NzgwZTlmYjBlNzI0N2EzNzEyYmNj
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q0dXaW4uY3BwCkBAIC0xNzYsMjUgKzE3NiwyMiBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LAog
ICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7
CiAgICAgRm9udENhc2NhZGU6OnNldENHQ29udGV4dEZvbnRSZW5kZXJpbmdTdHlsZShjZ0NvbnRl
eHQsIGZvbnQucGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCksIGZhbHNlLCBmb250LnBsYXRm
b3JtRGF0YSgpLnVzZUdESSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAg
ZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBncmFwaGljc0Nv
bnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwor
ICAgIGF1dG8gZHJvcFNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC5kcm9wU2hhZG93KCk7CiAKLSAg
ICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUo
KSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFz
aGFkb3dCbHVyICYmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkg
fHwgZ3JhcGhpY3NDb250ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlw
cGVkKCkpOworICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHRE
cmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBkcm9wU2hhZG93LmNvbG9y
LmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRvdy5ibHVyUmFkaXVzICYmICghZ3JhcGhpY3NDb250ZXh0
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0LmdldENUTSgpLmlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwogICAgIGlmIChoYXNTaW1wbGVTaGFk
b3cpIHsKICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQg
b2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFs
aWFzaW5nLgogICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAg
Q29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBD
b2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxs
Q29sb3IgPSBkcm9wU2hhZG93LmNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxD
b2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29s
b3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54
KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBw
b2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFk
b3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUg
WSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9h
dCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFw
aGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisgICAgICAg
IGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0
KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEp
OwogICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBzaGFkb3dUZXh0
WCwgc2hhZG93VGV4dFkpOwogICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2Vz
KGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzKTsKICAgICAgICAgaWYgKGZv
bnQuc3ludGhldGljQm9sZE9mZnNldCgpKSB7Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0
UG9zaXRpb24oY2dDb250ZXh0LCBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKSArIGZv
bnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0
KCkpOworICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9p
bnQueCgpICsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9m
ZnNldCgpLCBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQoKSk7CiAgICAgICAg
ICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhzLCBh
ZHZhbmNlcywgbnVtR2x5cGhzKTsKICAgICAgICAgfQogICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CkBAIC0yMDgsNyArMjA1LDcgQEAgdm9pZCBGb250Q2Fz
Y2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
Rm9udCYgZm9udCwKICAgICB9CiAKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgICAgICBn
cmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93
Q29sb3IpOworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93
KTsKIAogICAgIEZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBv
bGRGb250U21vb3RoaW5nU3R5bGUpOwogICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY2dDb250
ZXh0LCBzYXZlZE1hdHJpeCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDNjZjc0NjBjODBlM2JlMWQ1
YmEzZjBjZWQ3YzE5YjI1ZGYyOWFiZjIuLjc4NWU5NGJlY2YwN2NkNGE4NGM5YzM0ZDljZWNjODM4
NTdlMDY5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC0yOTIsMTIgKzI5MiwxMiBAQCB2b2lkIE1v
Y2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3Qm94ZXMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQogICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QoMiwgMiwgc2l6ZS53aWR0aCgpIC0gMywgc2l6ZS5o
ZWlnaHQoKSAtIDMpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsK
ICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygzKTsKLSAgICBjb250ZXh0LnNldExpbmVE
YXNoKG1fZGFzaFdpZHRocywgMCk7CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IG1fZGFzaFdp
ZHRocywgMCB9KTsKICAgICBtX3BhdGguYWRkUmVjdChmcmFtZVJlY3QpOwogICAgIG1fcGF0aC5j
bG9zZVN1YnBhdGgoKTsKICAgICBjb250ZXh0LnN0cm9rZVBhdGgobV9wYXRoKTsKIAotICAgIGNv
bnRleHQuc2V0TGluZURhc2goRGFzaEFycmF5KCksIDApOworICAgIGNvbnRleHQuc2V0TGluZURh
c2goeyB7IH0sIDAgfSk7CiAgICAgbV9wYXRoLmNsZWFyKCk7CiAgICAgbV9wYXRoLm1vdmVUbyhG
bG9hdFBvaW50KDAsIGJveFRvcCArIGJveFNpemUpKTsKICAgICBtX3BhdGguYWRkTGluZVRvKEZs
b2F0UG9pbnQoc2l6ZS53aWR0aCgpLCBib3hUb3AgKyBib3hTaXplKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKaW5kZXggMWIx
ODJhMWQzNmI3Y2ZhYWEwYjE2OWQwZDhjODU0MzVmNDNiNzY3ZC4uZTgwZjJlZTg5MTkzOTE0NDE4
ZTg3OGJmMGE0YTI4NDBlZTY4OWQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApAQCAtMzksNyArMzksNyBAQCBib29sIENv
bnRlbnRmdWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNvbnRlbnRmdWxQYWludChGcmFtZVZp
ZXcmIGZyYW1lVmlldykKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2
aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwogICAgIGZyYW1lVmlldy5zZXRQYWludHNF
bnRpcmVDb250ZW50cyh0cnVlKTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQgY2hlY2tlckNv
bnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRl
Y3RpbmdDb250ZW50ZnVsUGFpbnQpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY2hlY2tlckNv
bnRleHQoZnJhbWVWaWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCksIE51bGxHcmFwaGlj
c0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVudGZ1bFBh
aW50KTsKICAgICBmcmFtZVZpZXcucGFpbnQoY2hlY2tlckNvbnRleHQsIGZyYW1lVmlldy5yZW5k
ZXJWaWV3KCktPmRvY3VtZW50UmVjdCgpKTsKIAogICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRp
cmVDb250ZW50cyhvbGRFbnRpcmVDb250ZW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcAppbmRleCBjOWFiMjE3NjE0MWZhN2EzMzlhMjA5N2Iz
YWJmOTc2NTA3ODdlNGYxLi40YmZmOGQwMDgzOTI1MTRjYmU2MmNhOTVkNGU3NDNmYzE5N2YwMTlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBMZWdhY3lFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnMKICAgICBib29sIHNldFNo
YWRvdyA9IGZhbHNlOwogICAgIGlmIChsaW5lU3R5bGUudGV4dFNoYWRvdygpKSB7CiAgICAgICAg
IENvbG9yIHNoYWRvd0NvbG9yID0gbGluZVN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPmNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPngoKS52YWx1ZSgpLCBsaW5l
U3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCkt
PnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9w
U2hhZG93KHsgTGF5b3V0U2l6ZShsaW5lU3R5bGUudGV4dFNoYWRvdygpLT54KCkudmFsdWUoKSwg
bGluZVN0eWxlLnRleHRTaGFkb3coKS0+eSgpLnZhbHVlKCkpLCBsaW5lU3R5bGUudGV4dFNoYWRv
dygpLT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsKICAgICAgICAgc2V0U2hhZG93
ID0gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDI0YzgyYzlkNmJkNDNmNzRiYTA1YWI1YWM3Njc5M2Q3
NWQxNWU1NzcuLjhkOTdkMjU3MWUyNDUzZGYxOTI4YmRlNmM3N2M3NjMxNWZiYzg4MmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApA
QCAtNzA1LDcgKzcwNSw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3Vu
ZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNo
YWRvdyA9IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChi
b3hTaGFkb3ctPngoKS52YWx1ZSgpLCBib3hTaGFkb3ctPnkoKS52YWx1ZSgpKTsKLSAgICBjb250
ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwg
c3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94
U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDog
U2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsg
c2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHN0eWxlLmNvbG9yQnlB
cHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJr
aXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01v
ZGU6OkRlZmF1bHQgfSk7CiB9CiAKIEludGVycG9sYXRpb25RdWFsaXR5IFJlbmRlckJveE1vZGVs
T2JqZWN0OjpjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIEltYWdlJiBpbWFnZSwgY29uc3Qgdm9pZCogbGF5ZXIsIGNvbnN0IExheW91dFNpemUmIHNp
emUpCkBAIC0yMDg3LDcgKzIwODcsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3
Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBhdXRvIGxpbmVEYXNoID0gRGFzaEFycmF5Ojpmcm9tKGRh
c2hMZW5ndGgsIGdhcExlbmd0aCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGlu
ZURhc2goV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGgpOworICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9y
ZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6CkBAIC0yNDU2LDcgKzI0
NTYsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAgRmxvYXRQb2ludCBz
bmFwcGVkU2hhZG93T3JpZ2luID0gRmxvYXRQb2ludChyb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93
UmVjdE9yaWdpbi54KCksIGRldmljZVNjYWxlRmFjdG9yKSwgcm91bmRUb0RldmljZVBpeGVsKHNo
YWRvd1JlY3RPcmlnaW4ueSgpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAgICAgICAgICAgRmxv
YXRTaXplIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSBzbmFwcGVkU2hhZG93T3JpZ2luIC0gcGl4ZWxT
bmFwcGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgICAgIGNvbnRleHQu
c2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3Is
IHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6
IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICAgICAgY29udGV4dC5zZXREcm9w
U2hhZG93KHsgc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwg
c2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDog
U2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIAogICAgICAgICAgICAgaWYgKGhhc0JvcmRl
clJhZGl1cykgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBp
cyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGlt
ZQpAQCAtMjU1OCw3ICsyNTU4LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRC
b3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAg
ICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAogICAgICAgICAgICAgYXV0byBzbmFw
cGVkU2hhZG93T2Zmc2V0ID0gcm91bmRTaXplVG9EZXZpY2VQaXhlbHMoc2hhZG93T2Zmc2V0LCBk
ZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVk
U2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0
Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNuYXBwZWRT
aGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRC
b3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQgfSk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7
CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAppbmRleCA4NTBiZGU0OGU0OTI4ZTg2ZGMxNzZiNjIzMjFmZWVkOWI2ODZjM2NkLi44Y2Y5NjFl
MGJjMjM2NGU5NjJjZGE4ODFmODU5ZTRmMzFhM2M5ODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTIyNTMsMTQgKzIyNTMsMTQgQEAgdm9pZCBSZW5kZXJM
YXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBMYXllclAKICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgICAgICBib29sIHVz
ZXNDb21wb3NpdGVPcGVyYXRpb24gPSBoYXNCbGVuZE1vZGUoKSAmJiAhKHJlbmRlcmVyKCkuaXNM
ZWdhY3lTVkdSb290KCkgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPmlzUmVuZGVyVmlld0xheWVy
KCkpOwogICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZU9wZXJhdGlvbikKLSAgICAgICAgICAgIGNv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCks
IGJsZW5kTW9kZSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IGNv
bnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpIH0pOwogI2VuZGlmCiAKICAg
ICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKHJlbmRlcmVyKCkub3BhY2l0eSgp
KTsKIAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAgIGlmICh1c2VzQ29tcG9z
aXRlT3BlcmF0aW9uKQotICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24o
Y29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAg
ICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRp
b24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAjZW5kaWYKIAogI2lmZGVmIFJFVkVBTF9UUkFO
U1BBUkVOQ1lfTEFZRVJTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCmluZGV4IDVmOThiOTEyNGEzNDlhYzc1NTc5ZjcxMTM1ZWUwZjM4YWJiNGYx
MmQuLjNlMmU2YmYxZGU1ZDU0ZWIzOGQ5MjdhNTFmMDdjODkxMGFlNmMxYmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xODMxLDcg
KzE4MzEsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQog
ICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBbJl0oR3JhcGhp
Y3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51
bGxDb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
Tm9uZSk7CisgICAgICAgIGF1dG8gZGlydHlSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoZ3Jh
cGhpY3NMYXllci5vZmZzZXRGcm9tUmVuZGVyZXIoKSksIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKTsK
KyAgICAKKyAgICAgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBudWxsQ29udGV4dChkaXJ0eVJlY3Qs
IE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAg
ICAgICAgIEV2ZW50UmVnaW9uIGV2ZW50UmVnaW9uOwogI2lmIEVOQUJMRShFRElUQUJMRV9SRUdJ
T04pCiAgICAgICAgIGlmIChyZW5kZXJlcigpLnBhZ2UoKS5zaG91bGRCdWlsZEVkaXRhYmxlUmVn
aW9uKCkpCkBAIC0xODUzLDggKzE4NTUsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlRXZlbnRSZWdpb24oKQogICAgICAgICAgICAgZXZlbnRSZWdpb25Db250ZXh0LnVuaXRlKGVu
Y2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KC1sYXllck9mZnNldCwgZ3JhcGhpY3NMYXllci5zaXpl
KCkpKSwgcmVuZGVyZXIoKS5zdHlsZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGly
dHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludChncmFwaGljc0xh
eWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NMYXllci5zaXplKCkpKTsKLSAgICAg
ICAgcGFpbnRJbnRvTGF5ZXIoJmdyYXBoaWNzTGF5ZXIsIG51bGxDb250ZXh0LCBkaXJ0eVJlY3Qs
IHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7CisgICAgICAgIHBhaW50SW50b0xheWVyKCZncmFw
aGljc0xheWVyLCBudWxsQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChkaXJ0eVJlY3QpLCB7IH0s
ICZldmVudFJlZ2lvbkNvbnRleHQpOwogCiAgICAgICAgIGV2ZW50UmVnaW9uLnRyYW5zbGF0ZSh0
b0ludFNpemUobGF5ZXJPZmZzZXQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCmluZGV4IDMwY2QzNDNlYTdkZjkxNjhjYzNjZGU0N2RiZWY4Zjc1OWU4OGY3
MzEuLjI1NmZjNzQ5NTZkYTMzODZhNTRkMzUyZGUxMWI2ZmY3MzY2OWExZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTYwNSw3ICs2MDUsNyBAQCB2
b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludFRleHRGaWVsZElubmVyU2hhZG93KGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdAogICAgIGNvbnN0IEZsb2F0U2l6ZSBpbm5lclNoYWRvd09m
ZnNldCB7IDAsIDUgfTsKICAgICBjb25zdGV4cHIgYXV0byBpbm5lclNoYWRvd0JsdXIgPSAxMC4w
ZjsKICAgICBhdXRvIGlubmVyU2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMCwgMCwg
MCwgMC4wNGYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5u
ZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFk
b3coeyBpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRvd0NvbG9y
IH0pOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRo
IGlubmVyU2hhZG93UGF0aDsKQEAgLTIwODAsNyArMjA4MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKEltYWdlJiBpbWFnZSwgY29uc3QgUGFpbnRJbmZv
JiBwYWluCiAgICAgLy8gVXNlIHRoZSBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb24sIGJlY2F1c2Ug
aXQgY2FsY3VsYXRlcyB0aGUgYmx1ciByYWRpdXMgaW4gY29udGV4dCBzcGFjZSwKICAgICAvLyBy
YXRoZXIgdGhhbiBzY3JlZW4gc3BhY2UuCiAgICAgY29uc3RleHByIGF1dG8gc2hhZG93Q29sb3Ig
PSBDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxwaGFCeXRlKDI2KTsKLSAgICBncmFwaGljc0NvbnRl
eHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldERyb3BTaGFkb3coeyBGbG9hdFNpemUgeyB9LCAxNiwgc2hhZG93Q29sb3Ig
fSk7CiAKICAgICAvLyBUaGUgY2lyY2xlIG11c3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIHZhbHVl
IG9mIDEgZm9yIHRoZSBzaGFkb3cgY29sb3IgdG8gYXBwZWFyLgogICAgIENHRmxvYXQgY2lyY2xl
Q29sb3JDb21wb25lbnRzWzRdID0geyAwLCAwLCAwLCAxIH07CkBAIC0yMjczLDcgKzIyNzMsNyBA
QCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgYwogCiAgICAgYm9vbCBpc0VtcHR5ID0gIXN0YXRlcy5j
b250YWluc0FueSh7IENvbnRyb2xTdGF0ZXM6OlN0YXRlczo6Q2hlY2tlZCwgQ29udHJvbFN0YXRl
czo6U3RhdGVzOjpJbmRldGVybWluYXRlIH0pOwogICAgIGF1dG8gZmlyc3RTaGFkb3dDb2xvciA9
IERpc3BsYXlQMzxmbG9hdD4geyAwLCAwLCAwLCBpc0VtcHR5ID8gMC4wNWYgOiAwLjFmIH07Ci0g
ICAgY29udGV4dC5zZXRTaGFkb3coaW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwg
Zmlyc3RTaGFkb3dDb2xvcik7CisgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgaW5uZXJTaGFk
b3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgZmlyc3RTaGFkb3dDb2xvciB9KTsKICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCBpbm5lclNoYWRvd1Bh
dGg7CkBAIC0yMjkwLDcgKzIyOTAsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNr
Ym94UmFkaW9Jbm5lclNoYWRvdyhjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYwogICAgIGNv
bnRleHQuZmlsbFBhdGgoaW5uZXJTaGFkb3dQYXRoKTsKIAogICAgIGNvbnN0ZXhwciBhdXRvIHNl
Y29uZFNoYWRvd0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDEsIDEsIDEsIDAuNWYgfTsKLSAg
ICBjb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUgeyAwLCAwIH0sIDEsIHNlY29uZFNoYWRvd0Nv
bG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBGbG9hdFNpemUgeyAwLCAwIH0sIDEs
IHNlY29uZFNoYWRvd0NvbG9yIH0pOwogCiAgICAgY29udGV4dC5maWxsUGF0aChpbm5lclNoYWRv
d1BhdGgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmlu
ZGV4IDAxMGVjYmFlZDg3YTczYTQyMGFmYjk3ZThlODBmZWE2Mzc5ZmVkM2UuLjEwZGM5MGU1N2U1
YWUwZjQyNWEwZGFhYTM2NGY4MTRlNDQ5NDk5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI4MTYsNyArMjgxNiw3IEBAIHN0YXRpYyB2b2lkIHBh
aW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyKGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0
dGFjaG1lbnQsCiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihwbGFjZWhvbGRlckJvcmRlckNv
bG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhhdHRhY2htZW50UGxhY2Vob2xk
ZXJCb3JkZXJXaWR0aCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShEYXNoZWRTdHJva2Up
OwotICAgIGNvbnRleHQuc2V0TGluZURhc2goe2F0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckRh
c2hMZW5ndGh9LCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyBhdHRhY2htZW50UGxh
Y2Vob2xkZXJCb3JkZXJEYXNoTGVuZ3RoIH0sIDAgfSk7CiAgICAgY29udGV4dC5zdHJva2VQYXRo
KGJvcmRlclBhdGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dERlY29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDY3NTU2OGFmZjYxMThmMDEzYmQxZDRmNTVhNmMz
NjRmYThhZjM4ZTguLjgzMDliMmY4ZDRhMzFmYTAzYjFhYmY4NDM5ZGEwZjNlZjE2Mjg0MGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIu
Y3BwCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50
QmFja2dyb3VuZERlY29yYXRpb25zKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGMKICAgICAgICAg
ICAgIENvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5jb2xvcigpOwogICAgICAgICAgICAgaWYg
KG1fc2hhZG93Q29sb3JGaWx0ZXIpCiAgICAgICAgICAgICAgICAgbV9zaGFkb3dDb2xvckZpbHRl
ci0+dHJhbnNmb3JtQ29sb3Ioc2hhZG93Q29sb3IpOwotICAgICAgICAgICAgbV9jb250ZXh0LnNl
dFNoYWRvdyhGbG9hdFNpemUoc2hhZG93WCwgc2hhZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93
LT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgICAgICBtX2NvbnRleHQu
c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQp
LCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAgICAgICAg
c2hhZG93ID0gc2hhZG93LT5uZXh0KCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0UGFpbnRlci5jcHAKaW5kZXggODg1ZDgyNmVlOWU3OTZmNGI1YzViNTgzM2Y3MWEw
MjhjNDU0MWE3YS4uZmU4ODY5YzE5ZTVmOGQ0M2I3ZmExNmU0MDFiNGZiYzZkY2Y3ZWVmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCkBAIC03NCw3ICs3NCw3IEBA
IFNoYWRvd0FwcGxpZXI6OlNoYWRvd0FwcGxpZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBTaGFkb3dEYXRhKiBzaGFkb3csCiAgICAgfQogCiAgICAgaWYgKCFtX2F2b2lkRHJhd2lu
Z1NoYWRvdykKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dS
YWRpdXMudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0LnNldERyb3BTaGFk
b3coeyBzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsK
IH0KIAogaW5saW5lIGJvb2wgU2hhZG93QXBwbGllcjo6aXNMYXN0U2hhZG93SXRlcmF0aW9uKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCmluZGV4
IDdlZDUzN2M5Mjc5Mzc3MGY0NDg4YWUyOWRmNDA3MjdkN2ViMWEzYTkuLjZjNzMwZWYwN2U0OGM3
ZWNmOGM0MGUzN2UwMDM0NWNmYWI1NmM2OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtNjksNyArNjksNyBAQCBGbG9hdFJlY3QgUmVu
ZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlVXBkYXRlZFN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKIHN0
YXRpYyB2b2lkIHVzZVN0cm9rZVN0eWxlVG9GaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
IHsKICAgICBpZiAoYXV0byBncmFkaWVudCA9IGNvbnRleHQuc3Ryb2tlR3JhZGllbnQoKSkKLSAg
ICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0YXRlKCku
c3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbEdy
YWRpZW50KCpncmFkaWVudCwgY29udGV4dC5zdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKICAgICBl
bHNlIGlmIChQYXR0ZXJuKiBwYXR0ZXJuID0gY29udGV4dC5zdHJva2VQYXR0ZXJuKCkpCiAgICAg
ICAgIGNvbnRleHQuc2V0RmlsbFBhdHRlcm4oKnBhdHRlcm4pOwogICAgIGVsc2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IGNj
MzhlYzcwMzBlNjBjZTE3NTliMTMyODdkZTI1ZjczZDU2NWM4NTguLmI2NTg2OGQxYmQzNGM5MGQ0
YmJmZGQ0NzdhZDJjNzQyODJhMDU2YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtNTAxLDEwICs1MDEsMTIgQEAgdm9pZCBT
VkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjYW5TZXRMaW5lRGFz
aCkKLSAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goZGFzaEFycmF5LCBsZW5ndGhDb250
ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZh
Y3Rvcik7CisgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShkYXNoQXJy
YXkpLCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZz
ZXQoKSkgKiBzY2FsZUZhY3RvciB9KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29udGV4
dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAgfQorCisgICAgY29udGV4dC5hcHBs
eVN0YXRlQ2hhbmdlcygpOwogfQogCiB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OnN0eWxlQ2hhbmdl
ZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4
dC5jcHAKaW5kZXggMmZiOGYzM2E4NzBkZmNjZWI2MmUxNDk2NTZiMTQ0MzcyMmViZWEyZC4uZjU3
OWU1YTc1ZmU5MTBmNmU1YjU4YTlhZWZiNjgzNTg5NjIyMTBlOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xMTUs
MTIgKzExNSwxMiBAQCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRlclNW
R0NvbnRlbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFBhaQogICAgICAgICBpZiAob3BhY2l0
eSA8IDEgfHwgaGFzQmxlbmRNb2RlIHx8IGlzb2xhdGVNYXNrRm9yQmxlbmRpbmcgfHwgaGFzSXNv
bGF0aW9uKSB7CiAKICAgICAgICAgICAgIGlmIChoYXNCbGVuZE1vZGUpCi0gICAgICAgICAgICAg
ICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9wYWludElu
Zm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgc3R5bGUuYmxlbmRNb2RlKCkpOwor
ICAgICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlTW9kZSh7
IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIHN0eWxlLmJsZW5k
TW9kZSgpIH0pOwogCiAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAKICAgICAgICAgICAgIGlmIChoYXNCbGVuZE1vZGUp
Ci0gICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVPcGVy
YXRpb24obV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRN
b2RlOjpOb3JtYWwpOworICAgICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0
Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9u
KCksIEJsZW5kTW9kZTo6Tm9ybWFsIH0pOwogCiAgICAgICAgICAgICBtX3JlbmRlcmluZ0ZsYWdz
IHw9IEVuZE9wYWNpdHlMYXllcjsKICAgICAgICAgfQpAQCAtMjczLDcgKzI3Myw3IEBAIGJvb2wg
U1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZChSZWZQdHI8SW1hZ2VCdWZmZXI+
JiBpbWFnZUJ1ZmZlcikKIAogICAgIC8vIEludmFsaWRhdGUgYW4gZXhpc3RpbmcgYnVmZmVyIGlm
IHRoZSBzY2FsZSBpcyBub3QgY29ycmVjdC4KICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKLSAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAg
ICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdl
dENUTSgpOwogICAgICAgICBJbnRTaXplIGV4cGFuZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZElu
dFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0
YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zv
cm0ueFNjYWxlKCkpKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gu
aGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxlKCkpKSk7CiAgICAgICAgIGlmIChidWZmZXJTaXpl
ICE9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9TVkdJbWFnZS5jcHAKaW5kZXggNGRkN2Y4MGUzNzc3OTg3ZGNiNzBjMWEzYzhhODdjZDhhNGZk
NmZiOS4uY2Q4OGFkZjA4ZGRhODAzYmZkOTNmODk1Nzc0MDc2ODZhYzRjNTQ2MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0yNjksMTQgKzI2OSwxNCBAQCBJ
bWFnZURyYXdSZXN1bHQgU1ZHSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlYwogICAgIEFTU0VSVCh2aWV3KTsKIAogICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldENv
bXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxl
bmRNb2RlKCkpOworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAo
ZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSk7CiAKICAgICBmbG9hdCBhbHBoYSA9IGNvbnRleHQu
YWxwaGEoKTsKICAgICBib29sIGNvbXBvc2l0aW5nUmVxdWlyZXNUcmFuc3BhcmVuY3lMYXllciA9
IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSAhPSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
T3ZlciB8fCBvcHRpb25zLmJsZW5kTW9kZSgpICE9IEJsZW5kTW9kZTo6Tm9ybWFsIHx8IGFscGhh
IDwgMTsKICAgICBpZiAoY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5zcGFyZW5jeUxheWVyKSB7CiAg
ICAgICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci0gICAgICAgIGNv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVy
LCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7
IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICAg
ICB9CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhvbm9yIG9wdGlvbnMub3JpZW50YXRpb24o
KSwgc2luY2UgSW1hZ2VCaXRtYXAncyBmbGlwWSBoYW5kbGluZyByZWxpZXMgb24gaXQuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEwMDEKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLmNwcAppbmRleCA1NDM4MTgyZGRlODc2M2ViYWQzOGYxOTJkZjc5NWFhMDYwYjY1
MWJiLi44ZGEzOTBmNmRhNzBlMzc5NTUwYTU3MmUwOWUwODQxMTg5YzJkZGVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC03NCwzMSArNzQsNiBAQCB2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OnJlc3RvcmUoKQogICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlJl
c3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6dHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6VHJhbnNs
YXRlKHgsIHkpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpyb3RhdGUo
ZmxvYXQgYW5nbGUpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6Um90YXRlKGFuZ2xl
KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxv
YXRTaXplJiBzY2FsZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTY2FsZShzY2Fs
ZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRD
VE0oY3RtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5h
dGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pCi17Ci0gICAgaGFuZGxlSXRlbShEaXNw
bGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE0oY3RtKSk7Ci19Ci0KIHZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0SW5saW5lRmlsbENvbG9yKERpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxs
Q29sb3ImJiBpdGVtKQogewogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CkBAIC0xMjgs
NDAgKzEwMywxNSBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldFN0YXRlKERp
c3BsYXlMaXN0OjpTZXRTdGF0ZSYmIGl0ZW0pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH07
CiAKLSAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3Rh
dGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0
ZW0uc3RhdGUoKS5zdHJva2VCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5m
aWxsUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3Rh
dGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBoYW5k
bGVJdGVtKFdURk1vdmUoaXRlbSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxh
eUxpc3Q6OlNldExpbmVDYXAobGluZUNhcCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNldExpbmVEYXNoKERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmIGl0ZW0pCi17
Ci0gICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBoYW5k
bGVJdGVtKERpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbihsaW5lSm9pbikpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0g
ICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsZWFyU2hhZG93KCkKLXsKLSAgICBoYW5k
bGVJdGVtKERpc3BsYXlMaXN0OjpDbGVhclNoYWRvdygpKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBoYW5k
bGVJdGVtKERpc3BsYXlMaXN0OjpDbGlwKHJlY3QpKTsKQEAgLTM3MSwxNCArMzIxLDkgQEAgdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5
TGlzdDo6RmlsbFJlY3RXaXRoR3IKICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwogfQog
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6
RmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7Ci19Ci0KLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBoYW5k
bGVJdGVtKERpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9k
ZSkpOworICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBj
b2xvcikpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXIuaAppbmRleCAzYmJhZjc2NWQwNWY0NGFiZjRkOTYxZTc2NmNlNjU0Njk4ZWRlMjk0Li44
MTg4OTY2YWZmYTcwOWU2ZmQwYTMxYmZjYTZjM2U3MTg1NjVjNThlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLmgKQEAgLTU5LDIwICs1OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNhdmUo
KTsKICAgICB2b2lkIHJlc3RvcmUoKTsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZSk7Ci0gICAgdm9pZCBzY2FsZShjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIHNjYWxlKTsKLSAgICB2b2lkIHNldENUTShjb25zdCBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2b2lkIGNvbmNhdGVuYXRlQ1RNKGNvbnN0IFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwogICAgIHZvaWQgc2V0SW5saW5lRmlsbENvbG9yKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3ImJik7CiAgICAgdm9pZCBzZXRJ
bmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29s
b3ImJik7CiAgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQpOwogICAgIHZvaWQgc2V0
U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlJiYpOwotICAgIHZvaWQgc2V0TGlu
ZUNhcChXZWJDb3JlOjpMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmKTsKLSAgICB2b2lkIHNldExpbmVKb2luKFdlYkNvcmU6
OkxpbmVKb2luKTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpOwotICAgIHZvaWQgY2xl
YXJTaGFkb3coKTsKICAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAg
ICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CkBAIC05Nyw4ICs4Nyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwog
ICAgIHZvaWQgZmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudCYmKTsKLSAgICB2b2lkIGZpbGxD
b21wb3NpdGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpD
b2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwot
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7CisgICAgdm9pZCBm
aWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2
b2lkIGZpbGxMaW5lKGNvbnN0IFdlYkNvcmU6OkxpbmVEYXRhJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCmluZGV4IDI4MDJmZmU4ZjgzOTdjMGVkNGRmMTIx
YTAxN2ZlNzgxMDhmZjZjMjAuLjQxNGMzMWExMzIwYzBiMmU3ODZiYzhkOWY2NTk4MTAyZDg3MGY0
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCkBAIC0y
NSw0NyArMjUsMzUgQEAKIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90
UmVmQ291bnRlZCBTdHJlYW0gewogICAgIFNhdmUoKQogICAgIFJlc3RvcmUoKQotICAgIFRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICBTY2Fs
ZShXZWJDb3JlOjpGbG9hdFNpemUgc2NhbGUpCi0gICAgU2V0Q1RNKFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSBjdG0pCi0gICAgQ29uY2F0ZW5hdGVDVE0oV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
IGN0bSkKKwogICAgIFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
SW5saW5lRmlsbENvbG9yIGl0ZW0pCiAgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yIGl0ZW0pCiAgICAgU2V0U3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBTZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0U3RhdGUgaXRlbSkKLSAgICBTZXRMaW5lQ2FwKGVudW06dWludDhfdCBXZWJDb3JlOjpM
aW5lQ2FwIGxpbmVDYXApCi0gICAgU2V0TGluZURhc2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVEYXNoIGl0ZW0pCi0gICAgU2V0TGluZUpvaW4oZW51bTp1aW50OF90IFdlYkNvcmU6Okxp
bmVKb2luIGxpbmVKb2luKQotICAgIFNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi0gICAgQ2xl
YXJTaGFkb3coKQorI2lmIFVTRShDRykKKyAgICBBcHBseVN0cm9rZVBhdHRlcm4oKQorICAgIEFw
cGx5RmlsbFBhdHRlcm4oKQorI2VuZGlmCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKKworICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0
eSkKKyAgICBFbmRUcmFuc3BhcmVuY3lMYXllcigpCisKICAgICBDbGlwKFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0KQorICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90
IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQogICAgIENsaXBPdXQoV2ViQ29yZTo6RmxvYXRS
ZWN0IHJlY3QpCi0gICAgQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRS
ZWN0IGRlc3RpbmF0aW9uUmVjdCkKICAgICBDbGlwT3V0VG9QYXRoKFdlYkNvcmU6OlBhdGggcGF0
aCkKLSAgICBDbGlwUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGVudW06dWludDhfdCBXZWJDb3Jl
OjpXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3R2x5cGhzIGl0ZW0pCi0gICAgRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IHNvdXJjZUltYWdlSWRl
bnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJS
ZWZlcmVuY2UgZmlsdGVyKQotICAgIERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJl
Y3QgZGVzdGluYXRpb25SZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdl
YkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd05hdGl2ZUltYWdl
KFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdl
YkNvcmU6OkZsb2F0U2l6ZSBpbWFnZVNpemUsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwg
V2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyBvcHRpb25zKQotICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVt
SW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQot
ICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRS
ZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtLCBXZWJDb3Jl
OjpGbG9hdFBvaW50IHBoYXNlLCBXZWJDb3JlOjpGbG9hdFNpemUgc3BhY2luZywgc3RydWN0IFdl
YkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAgQmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KQotICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLSAgICBE
cmF3UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQot
ICAgIERyYXdMaW5lKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBv
aW50IHBvaW50MikKLSAgICBEcmF3TGluZXNGb3JUZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TGluZXNGb3JUZXh0IGl0ZW0pCi0gICAgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCwgc3RydWN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlIHN0eWxlKQotICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotICAg
IERyYXdQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBEcmF3Rm9jdXNSaW5nUGF0aChXZWJD
b3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9y
IGNvbG9yKQotICAgIERyYXdGb2N1c1JpbmdSZWN0cyhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0
PiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3Ip
CisgICAgQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3Rp
bmF0aW9uUmVjdCkKKworICAgIENsZWFyUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKwog
ICAgIEZpbGxSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogICAgIEZpbGxSZWN0V2l0aENv
bG9yKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBG
aWxsUmVjdFdpdGhHcmFkaWVudChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQgaXRlbSkKLSAgICBGaWxsQ29tcG9zaXRlZFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJl
Y3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6Q29tcG9zaXRl
T3BlcmF0b3Igb3AsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJlY3QsIFdlYkNv
cmU6OkNvbG9yIGNvbG9yLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6QmxlbmRNb2RlIGJsZW5kTW9k
ZSkKKyAgICBGaWxsUm91bmRlZFJlY3QoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCByZWN0LCBX
ZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCwgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCByb3VuZGVkSG9sZVJl
Y3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorCisgICAgRmlsbEVsbGlwc2UoV2ViQ29yZTo6Rmxv
YXRSZWN0IHJlY3QpCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgRmlsbExpbmUo
c3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRhdGEpCiAgICAgRmlsbEFyYyhzdHJ1Y3QgV2ViQ29y
ZTo6QXJjRGF0YSBkYXRhKQpAQCAtNzMsMTEgKzYxLDEwIEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIEZpbGxCZXppZXJD
dXJ2ZShzdHJ1Y3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhIGRhdGEpCiAjZW5kaWYKICAgICBG
aWxsUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0gICAgRmlsbEVsbGlwc2UoV2ViQ29yZTo6Rmxv
YXRSZWN0IHJlY3QpCi0gICAgQ29udmVydFRvTHVtaW5hbmNlTWFzaygpCi0gICAgVHJhbnNmb3Jt
VG9Db2xvclNwYWNlKFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQot
ICAgIFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllcklkZW50aWZpZXIgaWRl
bnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uKQorCiAgICAgU3Ryb2tlUmVj
dChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorCisgICAgU3Ryb2tl
RWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKICAgICBTdHJva2VMaW5lKHN0cnVjdCBXZWJDb3JlOjpMaW5lRGF0YSBkYXRhKQogICAg
IFN0cm9rZUFyYyhzdHJ1Y3QgV2ViQ29yZTo6QXJjRGF0YSBkYXRhKQpAQCAtODUsMTMgKzcyLDMx
IEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBT
dHJlYW0gewogICAgIFN0cm9rZUJlemllckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2
ZURhdGEgZGF0YSkKICNlbmRpZgogICAgIFN0cm9rZVBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQot
ICAgIFN0cm9rZUVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xlYXJSZWN0
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotI2lmIFVTRShDRykKLSAgICBBcHBseVN0cm9rZVBh
dHRlcm4oKQotICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorCisgICAgRHJhd1JlY3QoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICBEcmF3TGluZShXZWJD
b3JlOjpGbG9hdFBvaW50IHBvaW50MSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDIpCisKKyAg
ICBEcmF3RWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKyAgICBEcmF3UGF0aChXZWJD
b3JlOjpQYXRoIHBhdGgpCisKKyAgICBEcmF3Rm9jdXNSaW5nUGF0aChXZWJDb3JlOjpQYXRoIHBh
dGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorICAg
IERyYXdGb2N1c1JpbmdSZWN0cyhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cywgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBEcmF3
RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcj4gc291cmNlSW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qg
c291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIpCisgICAgRHJhd0lt
YWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6
OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMg
b3B0aW9ucykKKyAgICBEcmF3U3lzdGVtSW1hZ2UoUmVmPFdlYkNvcmU6OlN5c3RlbUltYWdlPiBz
eXN0ZW1JbWFnZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKKyAgICBEcmF3
TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRl
bnRpZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0
IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6Oklt
YWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCisgICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRS
ZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0sIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6
OkZsb2F0U2l6ZSBzcGFjaW5nLCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMg
b3B0aW9ucykKKyNpZiBFTkFCTEUoVklERU8pCisgICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNv
cmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qg
ZGVzdGluYXRpb24pCiAjZW5kaWYKLSAgICBBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNj
YWxlRmFjdG9yKQorCisgICAgRHJhd0dseXBocyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ds
eXBocyBpdGVtKQorICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdMaW5lc0ZvclRleHQgaXRlbSkKKyAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNv
cmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgc3R5bGUpCisKKyAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKKyAgICBUcmFuc2Zvcm1U
b0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCiAg
ICAgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBp
ZGVudGlmaWVyKQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eS5jcHAKaW5kZXggODU3N2NiYmRlNmQzOTAxZDM0NzA3NjFlZDMwZjc5ZDk4ZTgyYjk4ZC4uNmNm
YmFiY2E3YmNmYmVkYzU5NTQ4M2U4ZWViMWQ1YWIxMjA5NjZhOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcApAQCAtMzIsMzYgKzMyLDIxIEBACiAjaW5j
bHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvTWVkaWFQbGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5JiByZW5kZXJpbmdCYWNrZW5kLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKLSAgICA6IERpc3BsYXlMaXN0
OjpSZWNvcmRlcih7IH0sIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdH
bHlwaHMpCisgICAgOiBEaXNwbGF5TGlzdDo6UmVjb3JkZXIoaW5pdGlhbENsaXAsIGluaXRpYWxD
VE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGVzdGluYXRpb25CdWZmZXJJZGVu
dGlmaWVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKQogICAgICwg
bV9pbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikKICAgICAsIG1fcmVuZGVyaW5nQmFja2VuZChyZW5k
ZXJpbmdCYWNrZW5kKQogewogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Q29udmVydFRvTHVtaW5hbmNlTWFzaygpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShj
b25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCi17Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xv
clNwYWNlKGNvbG9yU3BhY2UpKTsKLX0KLQogUmVuZGVyaW5nTW9kZSBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewogICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyID8gbV9pbWFnZUJ1ZmZlci0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZDsKQEAgLTc3LDMxICs2Miw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRSZXN0b3JlKCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSZXN0b3JlKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNsYXRl
KHgsIHkpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpSb3RhdGUoYW5nbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2NhbGUoc2NhbGUp
KTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRDVE0odHJhbnNmb3JtKSk7Ci19Ci0KLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb25jYXRlbmF0ZUNUTSh0cmFuc2Zvcm0pKTsKLX0K
LQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldElubGluZUZp
bGxDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNl
dElubGluZUZpbGxDb2xvciB7IGNvbG9yIH0pKTsKQEAgLTExNyw5MiArNzcsMjYgQEAgdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhm
bG9hdCB0aGlja25lc3MpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6U2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBm
bGFncykKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpT
ZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUgeyBzdGF0ZSwgZmxhZ3MgfSkpOwotfQotCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcChMaW5l
Q2FwIGxpbmVDYXApCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGFycmF5LCBm
bG9hdCBkYXNoT2Zmc2V0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlNldExpbmVEYXNoKERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCB7IGFycmF5LCBk
YXNoT2Zmc2V0IH0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxp
bWl0KGZsb2F0IGxpbWl0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlNldE1pdGVyTGltaXQobGltaXQpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyU2hhZG93KCkKLXsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVhclNoYWRvdygpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkNsaXAocmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChyZWN0KSk7Ci19Ci0KLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNs
aXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
LCBkZXN0aW5hdGlvblJlY3QpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0VG9QYXRoKHBhdGgp
KTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmls
dGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBp
ZGVudGlmaWVyOwotICAgIGlmIChzb3VyY2VJbWFnZSkKLSAgICAgICAgaWRlbnRpZmllciA9IHNv
dXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihX
VEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNl
KFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6U2V0U3RhdGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlIHsgc3RhdGUg
fSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25z
dCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxv
Y2FsQW5jaG9yLCBtb2RlIH0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2
ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
I2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRB
cHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJbWFnZShpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseVN0cm9rZVBhdHRlcm4oKSk7CiB9CiAKLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVt
SW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3Zv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJu
KCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3
U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCkpOworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RmlsbFBhdHRlcm4oKSk7CiB9
CisjZW5kaWYgLy8gVVNFKENHKQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRl
bnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVu
dGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpB
cHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCkBAIC0yMTUsNDQgKzEwOSwzNCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKCkpOwog
fQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UmVjdChyZWN0LCB3aWR0aCkpOwotfQot
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQx
LCBwb2ludDIpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3
TGluZXNGb3JUZXh0KERpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0IHsgYmxvY2tMb2NhdGlv
biwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMg
fSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAo
cmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERv
Y3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxl
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwUGF0aChwYXRoLCBydWxlKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0VsbGlwc2UocmVjdCkpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXQocmVjdCkpOwog
fQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdGgocGF0aCkpOworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkp
OwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0Zv
Y3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNl
dCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIoKSwgZGVzdGluYXRpb25SZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xl
YXJSZWN0KHJlY3QpKTsKIH0KIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI3MCwyMyArMTU0LDIy
IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdp
dGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6RmlsbFJlY3RXaXRoR3JhZGllbnQoRGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50IHsgcmVjdCwgZ3JhZGllbnQgfSkpOwogfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
QmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgbW9kZSkpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSb3VuZGVk
UmVjdChyb3VuZGVkUmVjdCwgY29sb3IpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5kZWRSZWN0KHJvdW5kZWRSZWN0LCBjb2xvciwg
bW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7CiB9CiAK
ICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJiBkYXRhKQogewogICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxMaW5lKGRhdGEp
KTsKQEAgLTMwNiw3ICsxODksNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YQogewogICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxCZXppZXJDdXJ2ZShk
YXRhKSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCkBAIC0zMTQsMjMgKzE5NiwxNyBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUGF0aChwYXRoKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RmlsbEVsbGlwc2UocmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBw
bGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9yTWVkaWEocGxheWVyLmlkZW50aWZpZXIoKSwg
ZGVzdGluYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpTdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZVJlY3QocmVjdCwg
d2lkdGgpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpT
dHJva2VFbGxpcHNlKHJlY3QpKTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
CiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlTGluZShj
b25zdCBMaW5lRGF0YSYgZGF0YSkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTdHJva2VMaW5lKGRhdGEpKTsKQEAgLTM1MCw3ICsyMjYsNiBAQCB2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUo
Y29uc3QgQmV6aWVyQ3VydmVEYQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlN0cm9rZUJlemllckN1cnZlKGRhdGEpKTsKIH0KLQogI2VuZGlmIC8vIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzU4LDMzICsyMzMs
ODQgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpTdHJva2VQYXRoKHBhdGgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUVsbGlwc2UocmVjdCkp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0
KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVhclJlY3QocmVjdCkpOworICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lKHBvaW50
MSwgcG9pbnQyKSk7CiB9CiAKLSNpZiBVU0UoQ0cpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdFbGxpcHNl
KHJlY3QpKTsKK30KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZEFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseVN0cm9rZVBhdHRlcm4oKSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdGgocGF0aCkp
OwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlG
aWxsUGF0dGVybigpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RmlsbFBhdHRlcm4oKSk7CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lk
dGgsIG9mZnNldCwgY29sb3IpKTsKIH0KIAotI2VuZGlmIC8vIFVTRShDRykKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikp
OworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdl
QnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
c2NhbGVGYWN0b3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBG
aWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50
aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoV1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRl
clJlZmVyZW5jZShSZWY8RmlsdGVyPiB7IGZpbHRlciB9KSkpOworfQorCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJbWFnZShpbWFnZUlkZW50
aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShT
eXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdT
eXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7Cit9CisKK3ZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlm
aWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVy
IGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6UGFpbnRGcmFtZUZvck1lZGlhKGlk
ZW50aWZpZXIsIGRlc3RpbmF0aW9uKSk7Cit9CisjZW5kaWYKKwordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZv
bnRTbW9vdGhpbmdNb2RlIG1vZGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNwbGF5TGlzdDo6RHJhd0dseXBocyB7IGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSB9KSk7Cit9CisKK3Zv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQoreworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lc0ZvclRleHQoRGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBv
aW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyB9KSk7Cit9CisK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUmIHN0eWxlKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKIH0KIAog
Ym9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKE5h
dGl2ZUltYWdlJiBpbWFnZSkKQEAgLTQzNCwxMSArMzYwLDYgQEAgYm9vbCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKEZvbnQmIGZvbnQpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVz
aENvbnRleHQoR3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmx1c2hDb250ZXh0
KGlkZW50aWZpZXIpKTsKLX0KLQogUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9y
U3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpv
cHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkgY29uc3QKIHsKICAgICBp
ZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpIHsKQEAgLTQ2NCw2ICszODUsMjEgQEAg
UmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0
ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb24KICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVh
dGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBzY2FsZUZhY3RvcigpLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QpOwogfQogCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q29udmVydFRvTHVtaW5hbmNlTWFzaygp
KTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRv
Q29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3Bh
Y2UpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJh
bnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29udGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50
aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpGbHVzaENvbnRleHQoaWRlbnRpZmllcikpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaAppbmRleCA5YjMzYTA2N2ZkMTZiY2NmMTQwNDJj
MTk3NGRkNjkxOTQyMjYyNDY4Li5mMmFkOGQwYWE0NTg1ODlhZWU4MTkwN2Q5YzkwODk2ZDM0YjZm
NzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKQEAgLTM4
LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk7CiAKIGNsYXNzIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eSA6IHB1Ymxp
YyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXIgeworICAgIGZyaWVuZCBjbGFzcyBXZWJD
b3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7CiBwdWJsaWM6CiAgICAgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5KFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEZWNv
bnN0cnVjdERyYXdHbHlwaHMgPSBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3Ry
dWN0RHJhd0dseXBoczo6WWVzKTsKICAgICB+UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
KCkgPSBkZWZhdWx0OwpAQCAtNTAsNjMgKzUxLDM5IEBAIHB1YmxpYzoKICAgICB2b2lkIGZsdXNo
Q29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIpIGZpbmFsOwog
CiBwcml2YXRlOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZW5kKFQmJiBt
ZXNzYWdlKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbmRlcmluZ0JhY2tlbmQp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbmVlZHNGbHVzaCA9IHRydWU7Ci0g
ICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+c2VuZFRvU3RyZWFtKFdURk1vdmUobWVzc2FnZSks
IG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICBmcmllbmQgY2xh
c3MgV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOwotCiAgICAgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIHJlY29yZFNhdmUo
KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFJlc3RvcmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFJvdGF0
ZShmbG9hdCBhbmdsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTY2FsZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldENUTShjb25zdCBXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RN
KGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworCiAgICAgdm9pZCByZWNv
cmRTZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6U1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAg
IHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoV2ViQ29yZTo6U1JHQkE8dWludDhfdD4p
IGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZs
b2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUpvaW4oV2ViQ29y
ZTo6TGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCkg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclNoYWRvdygpIGZpbmFsOworICAgIHZvaWQgcmVj
b3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmKSBmaW5hbDsK
KworI2lmIFVTRShDRykKKyAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFs
OworICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworI2VuZGlmCisKKyAg
ICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3Jk
Q2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENs
aXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7CiAg
ICAgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CiAgICAgdm9p
ZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVs
ZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpJbWFnZUJ1ZmZlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBXZWJDb3JlOjpGaWx0ZXImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29u
c3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25z
dCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2Rl
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1
ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50
aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFdlYkNv
cmU6OlN5c3RlbUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
V2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGlu
ZXMpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBXZWJDb3Jl
OjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBX
ZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1
ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dGluYXRpb25SZWN0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0
aENvbG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9k
ZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRN
b2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKICAgICB2
b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lk
IHJlY29yZEZpbGxMaW5lKGNvbnN0IFdlYkNvcmU6OkxpbmVEYXRhJikgZmluYWw7CiAgICAgdm9p
ZCByZWNvcmRGaWxsQXJjKGNvbnN0IFdlYkNvcmU6OkFyY0RhdGEmKSBmaW5hbDsKQEAgLTExNCw5
ICs5MSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0
IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNv
cmRGaWxsUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRG
aWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tl
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisKKyAgICB2b2lk
IHJlY29yZFN0cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
ICAgICB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25zdCBXZWJDb3JlOjpBcmNEYXRhJikgZmlu
YWw7CkBAIC0xMjQsMTMgKzEwMiwyOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkU3Ryb2tl
QmV6aWVyQ3VydmUoY29uc3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5k
aWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRl
cm4oKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKwor
ICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9p
bnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgV2ViQ29y
ZTo6UGF0aCYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25z
dCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25z
dCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7CisgICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoV2ViQ29yZTo6U3lzdGVtSW1hZ2Um
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgdm9pZCBy
ZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisjaWYg
RU5BQkxFKFZJREVPKQorICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6
Ok1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5h
dGlvbikgZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IFdlYkNv
cmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgV2ViQ29y
ZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7
CisgICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKIAogICAgIGJvb2wgcmVj
b3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmKSBmaW5hbDsKICAgICBib29sIHJl
Y29yZFJlc291cmNlVXNlKFdlYkNvcmU6OkltYWdlQnVmZmVyJikgZmluYWw7CkBAIC0xNDEsNiAr
MTM0LDE4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVh
dGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5k
ZXJpbmdNZXRob2Q+KSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICB2b2lkIHNlbmQoVCYmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBpZiAoVU5M
SUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5k
VG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIp
OworICAgIH0KKworICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkg
ZmluYWw7CisKICAgICBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbV9kZXN0
aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXI7CiAgICAgV2Vha1B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZl
cj4gbV9pbWFnZUJ1ZmZlcjsKICAgICBXZWFrUHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eT4gbV9yZW5kZXJpbmdCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IDFkNjQzYjZiNDI4OGQwOGUwMzhjNDYy
NWQwNTQ5ZGU2OGFmMmFhNzcuLjA3OTkzYjM4MGYxZWE3ZDM0OWRkN2ViZmMxNjBjODA0ZGFkNDNl
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5jcHAKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3
UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjbwog
CiAgICAgLy8gRHJhdyB3aGl0ZSBmcmFtZXMgYXJvdW5kIHRoZSBob2xlcy4KICAgICAvLyBXZSBk
b3VibGUgdGhlIHRoaWNrbmVzcyBiZWNhdXNlIGhhbGYgb2YgdGhlIHN0cm9rZSB3aWxsIGJlIGVy
YXNlZCB3aGVuIHdlIGNsZWFyIHRoZSBob2xlcy4KLSAgICBncmFwaGljc0NvbnRleHQuc2V0U2hh
ZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJh
ZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXREcm9wU2hhZG93KHsg
RmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVz
LCBzaGFkb3dDb2xvciB9KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29s
b3I6OndoaXRlKTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRl
cldpZHRoICogMik7CiAgICAgZm9yIChhdXRvJiBwYXRoIDogd2hpdGVGcmFtZVBhdGhzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFu
Z2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZv
dW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKaW5kZXggZjE2Zjc5NmUwNDdlOTkxOTcyYzBlZDFm
NGFlMTEzY2UxNjU2NWMxMC4uNDllMDBiZTMzN2VhZmVlMTI5M2VmMDc3YWRmNjE3Y2RhZTNkNGEx
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRU
ZXh0UmFuZ2VDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAg
dm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VP
dmVybGF5JiwgV2ViQ29yZTo6R3JhcGgKIAogICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgZ3JhcGhpY3NDb250
ZXh0LnNldFNoYWRvdyhXZWJDb3JlOjpGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zm
c2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAgICBncmFwaGljc0NvbnRl
eHQuc2V0RHJvcFNoYWRvdyh7IFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFk
b3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IgfSk7CiAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKGZvdW5kQ29sb3IpOwogICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRTdHJva2VUaGlja25lc3MoaW5kaWNhdG9yQm9yZGVyV2lkdGggKiAyKTsKICAgICBmb3Ig
KGF1dG8mIHBhdGggOiBmb3VuZEZyYW1lUGF0aHMpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTk3YzIwYTRmZjViZTQxZDljMzIwNTdjNTA4MWNm
ZmM0YjgxYTRhNi4uMmFmODFjMmExZmM1ZjY4YmEwNDBmM2QwMTRmNDIxN2Y0ZWIzNjFlMiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDIyLTAzLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgor
CisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3JhcGhpY3NDb250ZXh0U3RhdGUgc2hvdWxkIGJlIGxh
emlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9ybSBjb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHA6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMi0wMy0xNCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFy
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2dpdC13ZWJraXRdIEhhbmRsZSBjb21wYXJpbmcgVXNl
ciBhbmQgQ29udHJpYnV0b3IgdG8gTm9uZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0VGVzdHNDRy5jcHAKaW5kZXggOGU0MWM1YTczYWUzNjg0Y2VkZGYxZjk0ZjlmMTcxODk1
MzUxNGM5Zi4uZWJlNjQ0ODcxZTI4ZjUxOWNkMjYxMjBiOGE4Mjc4ODZjMDE5MDJiZiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHRUZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCkBAIC01NCw3ICs1
NCw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCYXNpYykKICAgICBH
cmFwaGljc0NvbnRleHRDRyBwcmltYXJ5Q29udGV4dChwcmltYXJ5Q0dDb250ZXh0LmdldCgpKTsK
IAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBs
IHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRl
eHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFy
eUNvbnRleHQoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRl
eHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlD
b250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtOTAsMTAgKzkwLDEwIEBAIFRFU1QoQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCYXNpYykKIFRFU1QoQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dFRlc3RzLCBUZXh0KQogewogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgcHJpbWFy
eURpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBwcmltYXJ5Q29udGV4dChwcmltYXJ5RGlz
cGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdo
dCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHByaW1hcnlDb250ZXh0KHByaW1hcnlEaXNwbGF5
TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAg
ICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBzZWNvbmRhcnlEaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRl
ckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlEaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJl
Y3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRl
ckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAs
IDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC0y
MDEsNyArMjAxLDcgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJvcmRl
cnMpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgcHJpbWFyeUNvbnRleHQocHJpbWFyeUNHQ29udGV4
dC5nZXQoKSk7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJl
Y29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgw
LCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1w
bCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdp
ZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0
eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKQEAgLTIyOCw3ICsyMjgsNyBA
QCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgVHJhbnNmb3JtZWRDbGlwKQog
ICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQgPSBwcmltYXJ5Q29udGV4dENHOwog
CiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwg
c2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCAxMDAs
IDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRETChkaXNwbGF5
TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0JiBz
ZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5Q29udGV4dERMOwogCiAgICAgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwpAQCAt
Mjg3LDE1ICsyODcsMTUgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4
dCA9IHByaW1hcnlDb250ZXh0Q0c7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlM
aXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIHsg
fSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vj
b25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApKTsK
ICAgICBHcmFwaGljc0NvbnRleHQmIHNlY29uZGFyeUNvbnRleHQgPSBzZWNvbmRhcnlDb250ZXh0
REw7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwg
c2Vjb25kYXJ5Q29udGV4dCk7CiAKICAgICBjdHguYXBwbHlEZXZpY2VTY2FsZUZhY3RvcigyKTsK
IAotICAgIGF1dG8gcHJpbWFyeUNUTSA9IHByaW1hcnlDb250ZXh0LmdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7
Ci0gICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlDb250ZXh0LmdldENUTShHcmFwaGlj
c0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2Fs
ZSk7CisgICAgYXV0byBwcmltYXJ5Q1RNID0gcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKCk7CisgICAg
YXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlDb250ZXh0LmdldENUTSgpOwogCiAgICAgRVhQ
RUNUX0VRKHByaW1hcnlDVE0ueFNjYWxlKCksIHNlY29uZGFyeUNUTS54U2NhbGUoKSk7CiAgICAg
RVhQRUNUX0VRKHByaW1hcnlDVE0ueVNjYWxlKCksIHNlY29uZGFyeUNUTS55U2NhbGUoKSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvR3JhcGhpY3ND
b250ZXh0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cv
R3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5kZXggMjQ3MzU4MGYxOTBlMGZkNjc0YzM2N2Rh
NDdjOWYxOTJiYTI0ODVlNC4uMjE1YzE3YzY2NTdhZWRhNmE2ZTJjZDBhZTBjOWM5MjZmM2JkODJi
MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0dyYXBo
aWNzQ29udGV4dFRlc3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcApAQCAtNTIsNyArNTIsNyBAQCBURVNU
KEdyYXBoaWNzQ29udGV4dFRlc3RzLCBEcmF3TmF0aXZlSW1hZ2VEb2VzTm90TGVha0NvbXBvc2l0
ZU9wZXJhdG9yKQogICAgIEdyYXBoaWNzQ29udGV4dENHIGN0eChjZ0NvbnRleHQuZ2V0KCkpOwog
CiAgICAgRVhQRUNUX0VRKGN0eC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQ29tcG9zaXRlT3BlcmF0
b3I6OlNvdXJjZU92ZXIpOwotICAgIEVYUEVDVF9FUShjdHguYmxlbmRNb2RlT3BlcmF0aW9uKCks
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICBFWFBFQ1RfRVEoY3R4LmJsZW5kTW9kZSgpLCBCbGVu
ZE1vZGU6Ok5vcm1hbCk7CiAKICAgICBhdXRvIGdyZWVuUGl4ZWxDRyA9IGdyZWVuSW1hZ2UoKTsK
ICAgICBhdXRvIGdyZWVuUGl4ZWxOYXRpdmUgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKGdyZWVuUGl4
ZWxDRy5nZXQoKSk7CkBAIC03MSw3ICs3MSw3IEBAIFRFU1QoR3JhcGhpY3NDb250ZXh0VGVzdHMs
IERyYXdOYXRpdmVJbWFnZURvZXNOb3RMZWFrQ29tcG9zaXRlT3BlcmF0b3IpCiAgICAgRVhQRUNU
X0VRKHByaW1hcnlEYXRhWzJdLCAwKTsKIAogICAgIEVYUEVDVF9FUShjdHguY29tcG9zaXRlT3Bl
cmF0aW9uKCksIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyKTsKLSAgICBFWFBFQ1RfRVEo
Y3R4LmJsZW5kTW9kZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgRVhQRUNU
X0VRKGN0eC5ibGVuZE1vZGUoKSwgQmxlbmRNb2RlOjpOb3JtYWwpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTE3N2VkOTI5ODBkZDhkNGJhNGJmM2FmM2QxNDEw
NmE2MmZkNmI4Ny4uYzRmOTZjMWI4Yzg3MmNkOGE4MDU4ZDIxYzQ0YTZkZTdlMTIzMzlhNiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAzLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRA
YXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3JhcGhpY3NDb250ZXh0U3RhdGUg
c2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9ybSBjb250ZXh0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MjgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9l
eHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlz
dHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRp
c3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlz
cGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQ6CisKIDIwMjIt
MDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21v
ZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUgcm90YXRl
ZCBvbiBpT1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5j
bHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRl
bnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAppbmRleCA1MTFiN2MwYzU0ZDMzMjE2Yjdj
NmVhZjA0M2E3NWMxNjc2NmQwNDI3Li5kYmY1NGIzZWEyMDRlMTkyNGJkNDM1ZDUxNzM2ZGM3MzQ3
NzAyY2ZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1
ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4
dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CkBAIC0xLDE3ICsxLDEzIEBACiAKLSh0
cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCiAoc2F2ZSkKIChzZXQtc3RhdGUKLSAg
KGNoYW5nZS1mbGFncyA1MTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRvdy1vZmZz
ZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93LWNvbG9yICMwMDAwMDApCi0gIChzaGFk
b3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisgIChjaGFu
Z2UtZmxhZ3MgW2Ryb3Atc2hhZG93XSkKKyAgKGRyb3Atc2hhZG93CisgICAgKHNoYWRvdy1vZmZz
ZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hh
ZG93LWNvbG9yICMwMDAwMDApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQor
KGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQot
ICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0g
IChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQorICAo
Y29sb3IgIzAwMDBGRikgZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogKHJlc3RvcmUp
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRy
YW5zZm9ybXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1p
bmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAppbmRleCAzODZlMzk0MTE4NWYwOWEzYzY4
ZWM2YzJhZTg4ZGYxMWM3MGIwYTY5Li41Zjc4YjhjMzUwNWM5ZTgwMzk5YmQ2MDVhOWJlOTU1YWIw
OWI3MDVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1
ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKQEAgLTEsMjEgKzEsMTQg
QEAKIAotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50YXRl
LWN0bQotICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAsLTE4LjMw
KX0pKQogKHNhdmUpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgNTEyKQotICAoc2hhZG93
LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNo
YWRvdy1jb2xvciAjMDAwMDAwKQotICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkKLShm
aWxsLWNvbXBvc2l0ZWQtcmVjdAorICAoY2hhbmdlLWZsYWdzIFtjdG0sIGRyb3Atc2hhZG93XSkK
KyAgKGN0bSB7bT0oKDAuODcsMC41MCkoLTAuNTAsMC44NykpIHQ9KDgxLjcwLDMuNzApfSkKKyAg
KGRyb3Atc2hhZG93CisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAg
IChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LWNvbG9yICMwMDAwMDApCisgICAgKHNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChy
ZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKLSAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3Np
dGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBh
dCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCisgIChjb2xvciAjMDAwMEZGKSBleHRl
bnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogKHJlc3RvcmUpCi0oc2V0LWN0
bQotICAoc2V0LWN0bSB7bT0oKDEuMDAsMC4wMCkoMC4wMCwxLjAwKSkgdD0oMC4wMCwyMi4wMCl9
KSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlz
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxp
c3QtZXhwZWN0ZWQudHh0CmluZGV4IGJjMTdiNTExNDk5ZjgyNTZjOTkyOTBkYWU4NjE0ZDQ4OTRj
YWY5Y2MuLjU0NmRjNDkxMmY1MmQwM2E4OWFkOTA2ODU3MmIyOGVkYzgwMzIyNTMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVj
dGVkLnR4dApAQCAtMSwxNiArMSwxMiBAQAogCi0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5
IDAuMDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAg
KHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQotICAoY29sb3IgIzAwODAwMCkKLSAgKGNvbXBv
c2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50
IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKKyAgKGNvbG9yICMwMDgwMDApIGV4dGVudCBhdCAoMCww
KSBzaXplIDEwNHgxMDQpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMzI5NjApCi0gIChm
aWxsLWNvbG9yICMwMDAwRkYpCi0gIChzdHJva2Utc3R5bGUgMCkKKyAgKGNoYW5nZS1mbGFncyBb
ZmlsbC1icnVzaCwgc3Ryb2tlLXN0eWxlLCBzaG91bGQtYW50aWFsaWFzXSkKKyAgKGZpbGwtYnJ1
c2gKKyAgICAoY29sb3IgIzAwMDBGRikpCisgIChzdHJva2Utc3R5bGUgTk8tU1RST0tFKQogICAo
c2hvdWxkLWFudGlhbGlhcyAwKSkKIChkcmF3LXJlY3QKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAx
MDR4MikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1j
bGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxh
eS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKaW5kZXggYmI1OTNkMjBmNmRhNjQ4NjI5
MmQzNmMwMjIwZTJhOWQ4NzJmODJiOS4uYjg2MDQ4Y2MwOGM5OTM3ZWYwMDc4MmU3MTA4OWNhY2Jj
OTljNTMzMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lw
LWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKQEAgLTEsMTYgKzEsOCBAQAog
cmVjb3JkZWQ6Ci0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5IDAuMDApKQotKGZpbGwtY29t
cG9zaXRlZC1yZWN0CisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDQxMiwwKSBz
aXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBz
b3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDQxMiwwKSBzaXpl
IDEwMHgxMDApCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgx
MDApCiAKIHJlcGxheWVkOgogKAogICAoY2xpcCBhdCAoNTEyLDApIHNpemUgNTEyeDIwMCkKLSh0
cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCg==
</data>
<flag name="commit-queue"
          id="482490"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454751</attachid>
            <date>2022-03-15 13:37:04 -0700</date>
            <delta_ts>2022-03-15 14:48:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220315133702.patch</filename>
            <type>text/plain</type>
            <size>667385</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uZmJiZDUwMzdlYmViMjc4MGViNDliYWU4YTlmMjQw
M2NlNTY4ZWQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzMyBAQAorMjAyMi0wMy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uUGFpbnRlcjo6
cGFpbnRCb3hTaGFkb3cgY29uc3QpOgorICAgICAgICAqIGh0bWwvQ3VzdG9tUGFpbnRJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdlOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5TGluZURhc2ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xvYmFs
Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmlzUG9pbnRJblN0cm9rZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tl
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd0xheW91dFN0aXBwbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3TGF5
b3V0SGF0Y2hpbmcpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6dHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9y
TWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpz
dXBwb3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRl
ZFJlY3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
Sm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBo
YXNpc01hcmtzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZGVjb25zdHJ1Y3REcmF3R2x5cGhzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXh0UnVuIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRJ
bWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRpZEFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZUFzUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUVsbGlwc2VBc1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmFpc2VkRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0
Qm94SXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9y
OjpvZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJh
dG9yOjppbmNyZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJh
dG9yOjphdEVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRl
cmF0b3I6OmN1cnJlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJv
eEl0ZXJhdG9yOjpkaXJlY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdl
Q2hhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YXBwbHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6
OmR1bXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZVN0YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29s
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclNo
YWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldFNo
YWRvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldEZpbGxDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldFN0cm9rZVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
b250ZW5mdWxQYWludERldGVjdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjptZXJnZVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6Om1lcmdlU3RhdGVEaWZmcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldENUTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZmlsbENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZmlsbEdyYWRpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZmlsbFBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpm
aWxsU3BhY2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRGaWxsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRG
aWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VDb2xvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUdyYWRpZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0dGVybiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVNwYWNlVHJhbnNm
b3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFk
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VUaGlja25lc3Mg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VUaGlj
a25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VTdHlsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aW5lQ2FwIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpsaW5lSm9pbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6bWl0ZXJMaW1pdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb21w
b3NpdGVNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29t
cG9zaXRlT3BlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YmxlbmRNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyb3BTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
aGFkb3dPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
aGFkb3dCbHVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hh
ZG93Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRE
cm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFk
b3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNWaXNpYmxlU2hhZG93
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzQmx1cnJlZFNo
YWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1NoYWRv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFscGhhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRleHRE
cmF3aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFRleHREcmF3aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNo
b3VsZEFudGlhbGlhcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNob3VsZFNtb290aEZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0U2hvdWxkU21vb3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0x1bWluYW5jZU1hc2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXREcmF3THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6aXNJblRyYW5zcGFyZW5jeUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2U6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmxlbmRNb2RlT3BlcmF0aW9uIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxp
cHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ds
eXBoc0FuZENhY2hlRm9udCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6On5HcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXI6OnNhdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxheWVyU2Nv
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6
YmVnaW5MYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXll
clNjb3BlOjp+VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6R3JhcGhpY3NDb250ZXh0U3Rh
dGVTdGFja0NoZWNrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXI6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dFN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Omhhc09ubHlQcmltaXRpdmVDaGFuZ2VzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlRGlmZnMpOgorICAg
ICAgICAoV2ViQ29yZTo6c3RhdGVDaGFuZ2VOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9y
PDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpj
bGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjaGFuZ2VzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkaWRBcHBseVN0
YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Z2V0
Q1RNIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRD
VE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmZpbGxCcnVzaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsR3Jh
ZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpmaWxsUnVs
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0Rmls
bFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZUJy
dXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRT
dHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0
U3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNldFN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnN0cm9rZVRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzdHJva2VTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OmxpbmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bGluZUpvaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptaXRlckxpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpjb21wb3NpdGVNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkcm9wU2hhZG93IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjphbHBoYSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnRleHREcmF3aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpzaG91bGRBbnRpYWxpYXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNob3VsZFNtb290aEZvbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkcmF3
THVtaW5hbmNlTWFzayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0RHJhd0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjp+R3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlcjo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXll
clNjb3BlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5z
cGFyZW5jeUxheWVyU2NvcGU6OmJlZ2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNw
YXJlbmN5TGF5ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVyU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0
YXRlU3RhY2tDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U3RhY2tDaGVja2VyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9u
UXVhbGl0eU1haW50YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxp
dHlNYWludGFpbmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZU1vZGU6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZU1vZGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lRGFzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6
aXNWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmlzQmx1cnJl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93OjpoYXNPdXRzZXRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1l
ZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L051bGxHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0Nv
bnRleHQ6Ok51bGxHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFw
aGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3ND
b250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6
OlNoYWRvd0JsdXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJydXNoOjpzcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCcnVzaDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnJ1c2g6OnBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNl
dEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJydXNoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6
OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6YnJ1c2ggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUJydXNoOjpzZXRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpp
c1ByaW1pdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpCcnVzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJydXNoOjpCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJydXNoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1
c2g6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9y
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRC
b3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJ
dGVyYXRvcjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6aW5jcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAg
IChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpTdGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6
Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpGaWxsU291cmNlOjpGaWxsU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdHJva2VTb3VyY2U6OlN0cm9rZVNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGU6OlNoYWRvd1N0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
aXJvOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUpvaW4p
OgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnNldE1pdGVyTGltaXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRlQ2hhbmdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNs
aXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Z2V0Q1RNIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlw
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2gpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2luKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRl
ckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
Ojpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpDR0NvbnRleHRTdGF0ZVNhdmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6On5DR0NvbnRleHRTdGF0
ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3aW5nTW9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q0dMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZUpv
aW4pOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OnNldENHTGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dTaGFkb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2FuVXNlU2hhZG93Qmx1ciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEJvdW5k
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6Q0dDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjp+Q0dDb250ZXh0U3RhdGVT
YXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpz
YXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnJl
c3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
ZGlkU2F2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdl
OjpjYWNoZVBhcmFtZXRlcnNNYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1
bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBERkRvY3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tlQ29udGFp
bnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlw
aHNSZWNvcmRlckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJlZ2luTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5kTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0dseXBo
cyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlSW50ZXJuYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRl
cjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6c2V0SW50ZXJuYWxGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5
cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6
OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpyZWNvcmREcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3Tm9uT1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3T1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpk
cmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05h
dGl2ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJ
bnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1Jl
Y29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmNvbmNsdWRlSW50ZXJuYWxD
b250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6
dXBkYXRlRmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6c2hhZG93SXNDbGVhcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6YXBwbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmRlc3Ryb3kpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnNhZmVDb3B5IGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6c2l6ZU9mSXRlbUluQnl0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzRHJhd2luZ0l0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzSW5saW5lSXRlbSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6YXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlhKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmFwcGx5IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmFwcGx5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YXBw
bHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENU
TTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNvbmNhdGVuYXRlQ1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmFwcGx5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxp
bWl0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xlYXJTaGFkb3c6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91bmRl
ZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6
Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVk
UmVjdDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
Um91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJh
bnNsYXRlOjpUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlRyYW5zbGF0ZTo6eCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6VHJhbnNsYXRlOjp5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Um90YXRlOjphbmdsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YW1vdW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENUTSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjp0cmFuc2Zvcm0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpDb25j
YXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29u
Y2F0ZW5hdGVDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGVDaGFuZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OlNldExpbmVD
YXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
OmxpbmVDYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRhc2hBcnJheSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRhc2hPZmZzZXQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpl
bmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVEYXNoOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxpbmVKb2luIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0
OjptaXRlckxpbWl0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpyZWN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9z
aXRlZFJlY3Q6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbXBvc2l0ZU9wZXJhdG9yIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6
OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6bG9jYWxCb3Vu
ZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxD
b21wb3NpdGVkUmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpibGVuZE1vZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6UmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1fZHJh
d0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlc3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseVN0YXRl
Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5
U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6On5SZWNvcmRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Y29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFu
Z2VJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRpZFVwZGF0ZVN0YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGlu
ZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2NhbGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjb25jYXRDVE0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpnZXRDVE0gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3RtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjp0
cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2NhbGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNv
bnRleHRTdGF0ZTo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Q29udGV4dFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29u
dGV4dFN0YXRlOjpjbG9uZUZvclNhdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNsb25lRm9yVHJhbnNwYXJl
bmN5TGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpzdGF0ZVN0YWNrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6UmVjb3JkZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlw
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmRDbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OnJlY29yZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlckltcGw6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6On5SZWNvcmRlcklt
cGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkVHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRDVE0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lRGFzaCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsZWFyU2hhZG93KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmg6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpSZWNvcmRlckltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjphcHBseVNldFN0YXRl
SXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1Jl
Y29yZGVySGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29y
ZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIpOgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2ZSk6CisgICAgICAgIChOaWNv
c2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0b3JlKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcCk6
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aCk6Cisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KToKKyAgICAg
ICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyUmVjdCk6Cisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Zmls
bEVsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Zmls
bFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tl
UmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQ
YXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdSZWN0
KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmcp
OgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlQnVm
ZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRp
dmVJbWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
UGF0dGVybik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWlu
dEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZHJhd0dseXBocyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lRGFzaCk6IERl
bGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5l
Sm9pbik6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoTmljb3Np
YTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENUTSk6IERlbGV0ZWQuCisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpnZXRDVE0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5k
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNv
cmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL0Nv
bnRlbnRmdWxQYWludENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudGZ1bFBh
aW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxs
aXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21Q
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNo
YWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFp
bnRUZXh0RmllbGRJbm5lclNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQ
bGFjZWhvbGRlckJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFp
bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50
QmFja2dyb3VuZERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50ZXIu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1c2VTdHJva2VTdHlsZVRvRmlsbCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBv
cnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdD
b250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZHJhdyk6CisK
IDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUg
cm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZDljYzNjNGZlNjllOGJjZTVlMDFjODlhZjRkMDdj
NzVhYzgwYzNlNi4uMjNjNjA3YTZmMjJkNTQyNmM4MjBjOTY1MmExNWM2MGQ2YmE1OWI5YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAyMi0wMy0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxz
YWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0
YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNjYWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Y29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldE1pdGVy
TGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpjbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICog
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBw
bHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9y
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRDbGlwKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZENsZWFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQ
YXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1J
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xp
bmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNm
b3JtVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjptX3JlbmRlcmluZ0Jh
Y2tlbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTY2Fs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0
TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbENv
bXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6c2VuZCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6CisKIDIwMjItMDMtMTQgIEFudG9p
bmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwg
aW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCmluZGV4IDczNjQ0MmEwOGE3NDUwMGEzNTJmMDRjMmUxMDZkOGM0MWU3YTRm
YzUuLjkxYWJlYjU2OWJkOWQ5ZDBmZDZkODg5M2U4YjlkYjkzY2MzYWFmMTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQpAQCAtMTQ5MSw2ICsxNDkxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMU3RhdGUuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ29udGVudHNE
aXNwbGF5RGVsZWdhdGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGll
bnQuaApAQCAtMTU1MCw2ICsxNTUxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtQXVkaW9UcmFja0NvbmZpZ3Vy
YXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtQ29sb3JTcGFjZS5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA1YzdiNzNlYjIwNWUwOWVjMjQ2ZTAxMWQwYTUwMmRjZDRjMWRjYTUwLi5lYjc2
YTE4NmQzNDhkNGIzNjg5ZjIzNGYzZGJmNjI4MmFhYWRlMDU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MjA0NSw2ICsyMDQ1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJ
bWFnZUV4dHJhY3Rvci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRl
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXJDb250ZW50c0Rpc3BsYXlEZWxlZ2F0ZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwCkBAIC0yMDg0LDYgKzIwODUsNyBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA4Mjk2MmJhMDRlMmZmZDdmZmEwYzZlNjFkOWM5YzJjMTdhNWY2NDY3Li5iNTVj
NWMxYzQyZTMyOTU1NzBlZDI0Yzg0MGRjM2U0ZjJmZDMwMmUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzMxLDEwICsyMzMx
LDEyIEBACiAJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRUZDRUQ3MjAy
QjM4OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUYwNUY4MDI1MTI0NDJFMDA3MUU2OTMgLyog
Q1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcxRjA1RjdFMjUxMjQ0MEMwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1h
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcxRkNCMTcwMjdCQUIzRkUwMEUwNjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUZDQjE2RDI3QkFCM0RGMDBF
MDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyMDE3ODNCMjdENTdGOUYwMDlCRUIxQiAvKiBDR0NvbnRl
eHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjAxNzgzQTI3RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMz
MjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1By
b3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEw
MEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxQjQ5NzQyNTEyQkEzQjAwRkU5RDNCIC8qIEltYWdl
Qml0bWFwQmFja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMjgzRjBF
MjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3
IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI0NjBERDcyN0M4NkRBRDAwRDVGOUY0IC8qIEdyYXBoaWNz
Q29udGV4dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjQ2MERENjI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYz
QjI3NUM1RkE2MDBBOTE1NkEgLyogQ1NTRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmls
dGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzI0Njk2M0QyNzVDNjE0NDAwQTkxNTZBIC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIxNEI5QjcyNzQ0NThGQTAw
M0JFNkRGIC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNDY5NjNFMjc1QzYxNjcwMEE5MTU2QSAvKiBGaWx0
ZXJJbWFnZVZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzJCNEVGN0MyNzRFRTM3RjAwMjkzQzJGIC8qIEZpbHRlckltYWdlVmVjdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzNDIsNiAr
MjM0NCw5IEBACiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFE
QzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBB
Y3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0
YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MjU2MDc4RTI3OUQzNEI2MDA3RDJERDMgLyogRkVJbWFnZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJGN0U3NEYyNzlDRURF
ODAwRDgyRDJEIC8qIEZFSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1c2gu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjM1MTBG
MjdDQjQyRkUwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNTgxODU1MjdDREE4MEUwMEMzRDk3RSAvKiBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJCMzUxMEMyN0M5RjkzRTAwRDI3QUUwIC8qIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzI1ODE4NTYyN0NEQUZENTAwQzNEOTdFIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjM1
MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2Q0RFMjAyNzU5
NzM1MDAwQTQ0NUIyIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk2NjFBMjI3NTk2MEE1MDBFN0RGOUIgLyog
RmlsdGVyRWZmZWN0R2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3MjZENTZFMjI1M0FFMjhEMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2RDU2
RTEyNTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZENTZFMzI1M0FFMzY2MDAwMkVGOTAg
LyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTMxOCw2ICsxMTMy
Myw4IEBACiAJCTcxRkNCMTZEMjdCQUIzREYwMEUwNjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lUmF0ZUFsaWduZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQ0IxNkYyN0JBQjNFMDAwRTA2MzFDIC8qIEZy
YW1lUmF0ZUFsaWduZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RnJhbWVSYXRlQWxpZ25lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4
NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjAxNzgzQTI3RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250ZXh0
U3RhdGVTYXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDR0NvbnRleHRTdGF0ZVNhdmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDZENDM1MjdEQURFQ0EwMDQwRkVCMiAvKiBUZXh0
Qm94SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dEJveEl0ZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTFCNUQ2Mjc2NTM2ODIwMDc2RkVGOCAvKiBGaWx0ZXJS
ZXN1bHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlclJlc3VsdHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFs
dWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEyRkY3IC8q
IFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0eS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzMjcsNiArMTEzMzQsOCBAQAogCQk3MjJB
ODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MjQzNUVGNDI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmlsdGVySW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0MzVFRjUyNzNE
MDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbHRl
ckltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI0NjBERDUyN0M4NUQw
MTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBF
WFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVu
ZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0
MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVY
VEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzg5LDYg
KzExMzk4LDEwIEBACiAJCTcyQTEzQUQ1Mjc0REU1NEUwMEUyQTg4RSAvKiBTb3VyY2VBbHBoYVNv
ZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkExM0FENjI3NERFNTc4MDBFMkE4
OEUgLyogU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJBMTNBRDcyNzRERTU3ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAg
LyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEQyN0NB
MzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAgLyogU291cmNlQnJ1c2guY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU291cmNlQnJ1c2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkIzNTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU291cmNlQnJ1c2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNEVGNzQy
NzRFMjMzMzAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MkI0RUY3NTI3NEUyMzM0MDAyOTNDMkYgLyogRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCNEVGN0MyNzRFRTM3RjAwMjkzQzJGIC8qIEZpbHRlcklt
YWdlVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckltYWdlVmVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODgxMCw2ICsyODgyMyw3IEBACiAJCUIyNzUzNTI5MEIw
NTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2
ZXIuaCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8s
CiAJCQkJQkNBRkVEQjMyNTk2OEQwQjAwMzBFNkFBIC8qIENvbG9yU3BhY2VDRy5jcHAgKi8sCiAJ
CQkJQkNBRkVEQjIyNTk2OEQwQjAwMzBFNkFBIC8qIENvbG9yU3BhY2VDRy5oICovLApAQCAtMjkw
NDMsNiArMjkwNTcsOSBAQAogCQkJCTdCQjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGlj
c0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAw
MjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovLAogCQkJCTdCOTVD
RkU5Mjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmggKi8sCisJCQkJ
NzI0NjBERDUyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmNwcCAqLywK
KwkJCQk3MjQ2MERENjI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCAq
LywKKwkJCQk3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlci5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVy
LmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5o
ICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50
LmggKi8sCkBAIC0yOTE0Myw2ICsyOTE2MCw3IEBACiAJCQkJQkNBNTU5MTIyNjNEQkQ3OTAwN0Yx
OUIzIC8qIFBpeGVsRm9ybWF0LmggKi8sCiAJCQkJQ0REMDhBQkYyNzdFNTRGMDAwRUEzNzU1IC8q
IFBsYXRmb3JtQXVkaW9UcmFja0NvbmZpZ3VyYXRpb24uaCAqLywKIAkJCQlCQzNFNjI0MjI2NTk3
OTE3MDA1NDhBQ0QgLyogUGxhdGZvcm1Db2xvclNwYWNlLmggKi8sCisJCQkJNzJCMzUxMEMyN0M5
RjkzRTAwRDI3QUUwIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggKi8sCiAJCQkJNzI2RDU2
RTEyNTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQk3MkJBQzNBNjIz
RTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAogCQkJCTU1MDY0MEFE
MjQwNzU2REEwMEFBRTA0NSAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oICovLApAQCAt
MjkxNjYsNiArMjkxODQsOCBAQAogCQkJCTBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFk
b3dCbHVyLmNwcCAqLywKIAkJCQkwRjNERDQ0RTEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1
ci5oICovLAogCQkJCTFDNERCMDI0MjczMzlFNUUwMDdCMEFEMSAvKiBTaG91bGRMb2NhbGl6ZUF4
aXNOYW1lcy5oICovLAorCQkJCTcyQjM1MTBFMjdDQjQyRkQwMEQyN0FFMCAvKiBTb3VyY2VCcnVz
aC5jcHAgKi8sCisJCQkJNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmgg
Ki8sCiAJCQkJMUREMTI3QUMyNTZFM0E4NzAwQjIyN0Q3IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUu
Y3BwICovLAogCQkJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2
YXRlLmggKi8sCiAJCQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclBy
aXZhdGVDbGllbnQuaCAqLywKQEAgLTI5MTc3LDYgKzI5MTk3LDcgQEAKIAkJCQkwODc1NThDNDEz
QjRBNTdEMDBGNDkzMDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmggKi8sCiAJ
CQkJOTVFOUY0NDQyN0M5QTM5QjAwOTQ1MzM3IC8qIFN5c3RlbUltYWdlLmggKi8sCiAJCQkJM0JC
NkI4MEYyMkE3RDMxMTAwM0EyQTY5IC8qIFRhYlNpemUuaCAqLywKKwkJCQk3MjA2RDQzNTI3REFE
RUNBMDA0MEZFQjIgLyogVGV4dEJveEl0ZXJhdG9yLmggKi8sCiAJCQkJMzc2RENDRTAxM0I0Rjk2
NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovLAogCQkJCUE4MjRCNDY0MEUyRUYyRUEwMDgxQTdC
NyAvKiBUZXh0UnVuLmggKi8sCiAJCQkJQ0QxRTczNDYxNjdCQzc4RTAwOUE4ODVEIC8qIFRleHRU
cmFja1JlcHJlc2VudGF0aW9uLmNwcCAqLywKQEAgLTMzODczLDYgKzMzODk0LDcgQEAKIAkJCQlD
REUzQUUxMjI0QjQ5MTZBMDAxMjhFN0UgLyogQ0RNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1RkE5MDRDQTE3OEU2MUY1MDA0QzhBMkQgLyogQ2VydGlmaWNhdGVJbmZvLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MUI4RjBCNTIxOTUzRDY1MDAwQzJCMDAgLyogQ2VydGlmaWNhdGVTdW1t
YXJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAxNzgzQjI3RDU3RjlGMDA5QkVCMUIgLyogQ0dD
b250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTUxNkM3ODI2NTAw
Rjg4N0MxIC8qIENoYW5nZVZlcnNpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNjlE
RDE1MDVGMDc2MDAxQjc0QUMgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU3ODVEOTE1MjRCNEQxQ0EwMDE0REIyMSAvKiBDaGFubmVsQ291bnRNb2RlLmggaW4g
SGVhZGVycyAqLywKQEAgLTM0Nzk4LDYgKzM0ODIwLDggQEAKIAkJCQk0OUM3QjlGQzEwNDJEMzY1
MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTdCOTVDRkVCMjc1NEZGNkUwMDAwNjBDRSAvKiBHcmFwaGljc0NvbnRleHRHTFN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODBENjcwODBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNDYwREQ3MjdDODZE
QUQwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NzI1ODE4NTYyN0NEQUZENTAwQzNEOTdFIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xh
eWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3Jh
cGhpY3NMYXllckNBLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRTBGMTJBMjY5MDA1MUQ2
ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjcwNSw2ICsz
NjcyOSw3IEBACiAJCQkJQkNBQTQ4NzAxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRG
YWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZEQkUg
LyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMTk1MUQ1
NEY1RkIwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
NTgxODU1MjdDREE4MEUwMEMzRDk3RSAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJENzcwNUM3MjU1Mjc2Q0QwMDFEMEM5NCAvKiBQbGF0Zm9y
bUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTA2NDBBRjI0MDc1ODJEMDBBQUUw
NDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMzcz
ODYsNiArMzc0MTEsNyBAQAogCQkJCTUxMEQ0QTM4MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQUJBRTFFMTAzQzE5MTMw
MDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NEE4MUYzRTBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyNTgxODU0MjdDREE2OUEwMEMzRDk3RSAvKiBTb3VyY2VCcnVzaC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0QzQTQ5NjIxN0E5RDAxQjAwMjc0RTQyIC8qIFNvdXJjZUJ1ZmZlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0QzQTQ5NjUxN0E5RDAxQjAwMjc0RTQyIC8qIFNvdXJjZUJ1ZmZlckxp
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjEzNTA5MjRDOUZDQTMwMDQzMkUxRSAvKiBTb3Vy
Y2VCdWZmZXJQYXJzZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXgg
ODU2YTNkZTUwNGRlYzBiYmZhOTBhYzE3ZGUzN2Y1MTVlMTRkOTIwNC4uOWQ5MzVhNmZmMzIzMGYz
ZjQ2YTJlZjVkN2VhMTAwMTBhZTllMTBjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlz
cGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBAIC0zNzIs
NyArMzcyLDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZyb21QYXRoKFBhaW50
aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdAogICAgICAgICAgICAgRGFzaEFycmF5
IGxpbmVEYXNoOwogICAgICAgICAgICAgbGluZURhc2guYXBwZW5kKGRhc2hMZW5ndGgpOwogICAg
ICAgICAgICAgbGluZURhc2guYXBwZW5kKGdhcExlbmd0aCk7Ci0gICAgICAgICAgICBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5zZXRMaW5lRGFzaChsaW5lRGFzaCwgZGFzaExlbmd0aCk7CisgICAg
ICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRMaW5lRGFzaCh7IFdURk1vdmUobGlu
ZURhc2gpLCBkYXNoTGVuZ3RoIH0pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBG
SVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBwYXRoIGNhdXNlcyBpc3N1ZXMgd2l0aCB0aWdodCBj
b3JuZXJzOgpAQCAtMTI5NCw3ICsxMjk0LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6
cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAg
ICAgICAgYXV0byBzaGFkb3dSZWN0T3JpZ2luID0gZmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCkg
KyBzaGFkb3dPZmZzZXQ7CiAgICAgICAgIGF1dG8gYWRqdXN0ZWRTaGFkb3dPZmZzZXQgPSBzaGFk
b3dSZWN0T3JpZ2luIC0gYWRqdXN0ZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAg
ICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0
Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0KTsKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0RHJvcFNoYWRv
dyh7IGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNv
bG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVn
YWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIAogICAgICAgICBpZiAoaGFzQm9y
ZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMg
dW5uZWNlc3NhcnkgdG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUK
QEAgLTE0MDUsNyArMTQwNSw3IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94
U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIHBh
aW50aW5nQ29udGV4dC5jb250ZXh0LnRyYW5zbGF0ZShleHRyYU9mZnNldCk7CiAgICAgICAgIHNo
YWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICBwYWludGluZ0NvbnRleHQuY29u
dGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93
LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cy52
YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFk
b3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwogICAg
ICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShzaGFk
b3dDYXN0aW5nUmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAgIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3BwCmluZGV4IGY0Yjk4YmE2MmUxMTlh
MDc3MTMxMmQzYjg4YzQ5MTkzNjgzNmVlMzcuLmVlNTA0ZjA4YzQ5ZmM4ZDViNWFlZDcwMmJlMjE3
ZjFiMDZmZDRlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJ
bWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcApA
QCAtMTc1LDcgKzE3NSw3IEBAIEltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkb0N1
c3RvbVBhaW50KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvCiBJbWFnZURyYXdSZXN1
bHQgQ3VzdG9tUGFpbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihkZXN0Q29udGV4dCk7Ci0gICAgZGVzdENvbnRleHQuc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVu
ZE1vZGUoKSk7CisgICAgZGVzdENvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBkZXN0Q29udGV4
dC5jbGlwKGRlc3RSZWN0KTsKICAgICBkZXN0Q29udGV4dC50cmFuc2xhdGUoZGVzdFJlY3QubG9j
YXRpb24oKSk7CiAgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKQEAg
LTE5Miw3ICsxOTIsNyBAQCB2b2lkIEN1c3RvbVBhaW50SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdAogICAgIEZsb2F0UmVjdCBh
ZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwogCiAgICAgLy8gRmFjdG9yIGluIHRoZSBkZXN0aW5h
dGlvbiBjb250ZXh0J3Mgc2NhbGUgdG8gZ2VuZXJhdGUgYXQgdGhlIGJlc3QgcmVzb2x1dGlvbgot
ICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENUTShH
cmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIEFmZmlu
ZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENUTSgpOwogICAgIGRv
dWJsZSB4U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RNLnhTY2FsZSgpKTsKICAgICBkb3VibGUg
eVNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS55U2NhbGUoKSk7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIGFkanVzdGVkUGF0dGVybkNUTSA9IHBhdHRlcm5UcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCmluZGV4IDBlNzgwNjNlM2E0MWNiYzY5MGYwZDBjY2I3ODgxMTdkZTY5MzhhMDIuLmRi
Yzk1N2M1M2QwNGEzOTZlYWM2NGQ2N2ZlNmEyYjE3ZTQ0OGM2NjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCkBAIC02OTcsNyArNjk3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjphcHBseUxpbmVEYXNoKCkgY29uc3QKICAgICBEYXNoQXJyYXkgY29udmVydGVkTGluZURh
c2goc3RhdGUoKS5saW5lRGFzaC5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c3RhdGUoKS5saW5lRGFzaC5zaXplKCk7ICsraSkKICAgICAgICAgY29udmVydGVkTGluZURhc2hb
aV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50PihzdGF0ZSgpLmxpbmVEYXNoW2ldKTsK
LSAgICBjLT5zZXRMaW5lRGFzaChjb252ZXJ0ZWRMaW5lRGFzaCwgc3RhdGUoKS5saW5lRGFzaE9m
ZnNldCk7CisgICAgYy0+c2V0TGluZURhc2goeyBXVEZNb3ZlKGNvbnZlcnRlZExpbmVEYXNoKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRlKCkubGluZURhc2hPZmZzZXQpIH0pOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEdsb2JhbEFscGhhKGRvdWJsZSBhbHBo
YSkKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmIG9wZQogICAgIEdyYXBo
aWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICBy
ZXR1cm47Ci0gICAgYy0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOworICAg
IGMtPnNldENvbXBvc2l0ZU1vZGUoeyBvcCwgYmxlbmRNb2RlIH0pOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNjYWxlKGRvdWJsZSBzeCwgZG91YmxlIHN5KQpAQCAt
MTE4Niw3ICsxMTg2LDcgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc1Bv
aW50SW5TdHJva2VJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBkb3UKICAgICAgICAgRGFzaEFy
cmF5IGNvbnZlcnRlZExpbmVEYXNoKGxpbmVEYXNoLnNpemUoKSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGluZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBjb252ZXJ0
ZWRMaW5lRGFzaFtpXSA9IHN0YXRpY19jYXN0PERhc2hBcnJheUVsZW1lbnQ+KGxpbmVEYXNoW2ld
KTsKLSAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChjb252ZXJ0ZWRMaW5lRGFzaCwgc3RhdGUu
bGluZURhc2hPZmZzZXQpOworICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShj
b252ZXJ0ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZS5saW5lRGFzaE9mZnNl
dCkgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTEyMDUsNyArMTIwNSw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91Ymxl
IHdpZHRoLCBkCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgY29udGV4
dC0+c2F2ZSgpOwogICAgICAgICBzYXZlZCA9IHRydWU7Ci0gICAgICAgIGNvbnRleHQtPnNldFNo
YWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1
c01vZGU6OkxlZ2FjeSk7CisgICAgICAgIGNvbnRleHQtPnNldERyb3BTaGFkb3coeyBGbG9hdFNp
emUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2Fj
eSB9KTsKICAgICB9CiAgICAgaWYgKHN0YXRlKCkuZ2xvYmFsQWxwaGEgIT0gMSkgewogICAgICAg
ICBpZiAoIXNhdmVkKSB7CkBAIC0xMzYzLDkgKzEzNjMsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93KCkKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3Mo
KSkgewogICAgICAgICBmbG9hdCB3aWR0aCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCk7
CiAgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpOwot
ICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5z
aGFkb3dCbHVyLCBzdGF0ZSgpLnNoYWRvd0NvbG9yLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kp
OworICAgICAgICBjLT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwg
c3RhdGUoKS5zaGFkb3dCbHVyLCBzdGF0ZSgpLnNoYWRvd0NvbG9yLCBTaGFkb3dSYWRpdXNNb2Rl
OjpMZWdhY3kgfSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGMtPnNldFNoYWRvdyhGbG9hdFNpemUo
KSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7
CisgICAgICAgIGMtPnNldERyb3BTaGFkb3coeyBGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5z
cGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSB9KTsKIH0KIAogYm9vbCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzaG91bGREcmF3U2hhZG93cygpIGNvbnN0CkBAIC0y
NDMyLDE5ICsyNDMyLDE2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJh
d1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgZG91CiAKICAgICAgICAgICAg
IEZsb2F0U2l6ZSBvZmZzZXQoMCwgMiAqIG1hc2tSZWN0LmhlaWdodCgpKTsKIAotICAgICAgICAg
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIGZsb2F0IHNoYWRvd1JhZGl1
czsKLSAgICAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgICAgICAgICAgYy0+Z2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0KICAgICAgICAg
ICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KG1hc2tSZWN0KTsKLSAgICAgICAgICAgIHNoYWRvd1Jl
Y3QuaW5mbGF0ZShzaGFkb3dSYWRpdXMgKiAxLjQpOwotICAgICAgICAgICAgc2hhZG93UmVjdC5t
b3ZlKHNoYWRvd09mZnNldCAqIC0xKTsKKyAgICAgICAgICAgIGF1dG8gZHJvcFNoYWRvdyA9IGMt
PmRyb3BTaGFkb3coKTsKKworICAgICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKGRyb3BTaGFk
b3cuYmx1clJhZGl1cyAqIDEuNCk7CisgICAgICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoZHJvcFNo
YWRvdy5vZmZzZXQgKiAtMSk7CiAgICAgICAgICAgICBjLT5jbGlwKHNoYWRvd1JlY3QpOwogCi0g
ICAgICAgICAgICBzaGFkb3dPZmZzZXQgKz0gb2Zmc2V0OworICAgICAgICAgICAgZHJvcFNoYWRv
dy5vZmZzZXQgKz0gb2Zmc2V0OwogCi0gICAgICAgICAgICBjLT5zZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kp
OworICAgICAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93KTsKIAogICAgICAgICAg
ICAgaWYgKGZpbGwpCiAgICAgICAgICAgICAgICAgYy0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFj
ayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zlcmxh
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5k
ZXggNGY2M2FkY2U5MzkxNmRiMjMyMGU5Njc4YWFiZmUwZjNjZDk5NzYyYi4uOWE4MDNhNDA4ZDg4
YzJmZjQ4ZGQzYmVhMDI5NTFiODc1ODA5OGUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMTI0NCw3ICsxMjQ0LDcgQEAgc3RhdGljIHZv
aWQgZHJhd0xheW91dFN0aXBwbGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKGNvbnRl
eHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEpOwogICAgIGNvbnRleHQuc2V0
U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGU6OkRhc2hlZFN0cm9rZSk7Ci0gICAgY29udGV4dC5zZXRM
aW5lRGFzaCh7IDEsIGRlbnNpdHkgfSwgMSk7CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IHsg
MSwgZGVuc2l0eSB9LCAxIH0pOwogCiAgICAgZHJhd0xheW91dFBhdHRlcm4oY29udGV4dCwgcXVh
ZCwgZGVuc2l0eSwgRmxpcDo6Tm8pOwogfQpAQCAtMTI1NCw3ICsxMjU0LDcgQEAgc3RhdGljIHZv
aWQgZHJhd0xheW91dEhhdGNoaW5nKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRRdWFkJiBxdWFkLAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4
dCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMC41KTsKICAgICBjb250ZXh0LnNl
dFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAgIGNvbnRleHQuc2V0
TGluZURhc2goeyAyLCAyIH0sIDIpOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IDIsIDIg
fSwgMiB9KTsKIAogICAgIGNvbnN0ZXhwciBhdXRvIGRlZmF1bHRMYXlvdXRIYXRjaFNwYWNpbmcg
PSAxMjsKICAgICBkcmF3TGF5b3V0UGF0dGVybihjb250ZXh0LCBxdWFkLCBkZWZhdWx0TGF5b3V0
SGF0Y2hTcGFjaW5nLCBmbGlwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBiNTg4
ZjZmYTRhMTFkNzcwYzNjODQ5OTk2NzJkN2Q3ZWZmNDMyYzRmLi44YTE3YWUzNzBhZTM2YjAwZWJi
N2E5YjJlMDc1NTE4MDZiZWQxNjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC00
MzAzLDcgKzQzMDMsNyBAQCB2b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQYWludEludmFsaWRh
dGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdAogICAgIGlmIChuZWVkc0xh
eW91dCgpKQogICAgICAgICBsYXlvdXRDb250ZXh0KCkubGF5b3V0KCk7CiAKLSAgICBOdWxsR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICBOdWxs
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoZnJhbWVSZWN0KCksIHBhaW50SW52YWxpZGF0aW9uUmVh
c29ucyk7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpIHsKICAgICAgICAgLy8gRklYTUU6IGNv
bnN1bHQgcGFpbnRzRW50aXJlQ29udGVudHMoKS4KICAgICAgICAgcGFpbnRDb250ZW50cyhjb250
ZXh0LCB2aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwpA
QCAtNDg1NCw3ICs0ODU0LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHREZXBy
ZWNhdGVkKGZsb2F0ICpuZXdCb3R0b20sIGZsb2F0IG9sZFRvcCwgZmxvYXQKIAogICAgIH0KICAg
ICAvLyBVc2UgYSBjb250ZXh0IHdpdGggcGFpbnRpbmcgZGlzYWJsZWQuCi0gICAgTnVsbEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9u
UmVhc29uczo6Tm9uZSk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGZyYW1lUmVj
dCgpLCBOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUp
OwogICAgIHJlbmRlclZpZXctPnNldFRydW5jYXRlZEF0KHN0YXRpY19jYXN0PGludD4oZmxvb3Jm
KG9sZEJvdHRvbSkpKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdCgwLCBzdGF0aWNfY2FzdDxpbnQ+
KGZsb29yZihvbGRUb3ApKSwgcmVuZGVyVmlldy0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkubWF4WCgp
LCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG9sZEJvdHRvbSAtIG9sZFRvcCkpKTsKICAgICByZW5k
ZXJWaWV3LT5zZXRQcmludFJlY3QoZGlydHlSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5j
cHAKaW5kZXggOWZkMjVkODBhZDEyZGM5MWRkMTFmOTE1OThmYzZjOGVmYTRjYjJhMi4uMjg5NTc0
YjljMWU0MGNkNzEyYjRlMmI2ZTllYjM0YjAxNzI5ZGZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dC5jcHAKQEAgLTI5LDcgKzI5LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dChHcmFwaGljc0Nv
bnRleHQmIHByaW1hcnlDb250ZXh0LCBHcmFwaGljc0NvbnRleHQmIHNlY29uZGFyeUNvbnRleHQp
Ci0gICAgOiBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250ZXh0KQorICAgIDogR3JhcGhpY3ND
b250ZXh0KHByaW1hcnlDb250ZXh0LmNsaXBCb3VuZHMoKSwgeyB9LCBwcmltYXJ5Q29udGV4dC5n
ZXRDVE0oKSkKKyAgICAsIG1fcHJpbWFyeUNvbnRleHQocHJpbWFyeUNvbnRleHQpCiAgICAgLCBt
X3NlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5Q29udGV4dCkKIHsKIH0KQEAgLTQ4LDYgKzQ5LDMw
IEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpOwogfQogCisjaWYgVVNFKENHKQorYm9vbCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmltYXJ5
Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzQ0FMYXllckNvbnRleHQpCit7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQp
OworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KGlzQ0FMYXllckNv
bnRleHQpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxl
cmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQpCit7CisgICAgbV9wcmltYXJ5
Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7Cisg
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlzQWNjZWxlcmF0
ZWRDb250ZXh0KTsKK30KKyNlbmRpZgorCitSZW5kZXJpbmdNb2RlIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaW1hcnlD
b250ZXh0LnJlbmRlcmluZ01vZGUoKTsKK30KKwogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzYXZlKCkKIHsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgbm90IHVzaW5nIHRoZSBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0J3Mgc3RhdGUgc3RhY2sgYXQgYWxsLApAQCAtNjQsMjIgKzg5
LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCiAgICAgbV9z
ZWNvbmRhcnlDb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNr
bmVzcyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNr
bmVzcyk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQb2ludCYgdG8pCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRy
YXdMaW5lKGZyb20sIHRvKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRy
YXdFbGxpcHNlKHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShyZWN0
KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKICNpZiBVU0UoQ0cpCkBAIC05
NiwyMiArMTA5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxs
UGF0dGVybigpCiB9CiAjZW5kaWYKIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1Bh
dGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwotfQotCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
Ci17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChwYXRoKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikKIHsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0
LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxl
RmFjdG9yKGZhY3Rvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmFjdG9yKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBAIC0xMjYsMjIyICsxMjcsMTI2IEBA
IHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQog
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQg
ZmFjdG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
YWN0b3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZh
Y3Rvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVj
dCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwotfQotCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVj
dCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBjb2xvcik7
Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1w
bChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci19
Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
SG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVk
SG9sZVJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQu
Y2xlYXJSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7
Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ry
b2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBtX3By
aW1hcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBtX3By
aW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250
ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLSNpZiBVU0UoQ0cpCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJD
b250ZXh0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NB
TGF5ZXJDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4
dChpc0NBTGF5ZXJDb250ZXh0KTsKLX0KLQotYm9vbCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4
dC5pc0NBTGF5ZXJDb250ZXh0KCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dCkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlzQWNjZWxlcmF0
ZWRDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOwotfQotI2VuZGlmCi0KLVJlbmRlcmluZ01vZGUgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotfQotCiB2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKICAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXAocmVj
dCk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXAocmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5jbGlwT3V0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNs
aXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXQo
cGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXQocGF0aCk7Ci19Ci0KIHZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgd2luZFJ1bGUpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCB3
aW5kUnVsZSk7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7
CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKIH0KIAot
SW50UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5jbGlwQm91bmRzKCk7Ci19Ci0KLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZUNhcChsaW5lQ2FwKTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuc2V0TGluZUNhcChsaW5lQ2FwKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0
LmNsaXBPdXQocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBPdXQocmVjdCk7CiB9
CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFz
aEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCk7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCk7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0
KHBhdGgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2lu
KExpbmVKb2luIGxpbmVKb2luKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZUpvaW4obGlu
ZUpvaW4pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5lSm9pbihsaW5lSm9pbik7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGlu
YXRpb25SZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcFRvSW1hZ2VCdWZmZXIoaW1h
Z2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IG1fcHJpbWFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKLSAgICBtX3NlY29u
ZGFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xlYXJSZWN0KHJl
Y3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwgc2VsZlNpemUsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd05hdGl2ZUltYWdl
KG5hdGl2ZUltYWdlLCBzZWxmU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAg
IG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LmZpbGxSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBtX3By
aW1hcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0
KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBk
ZXN0aW5hdGlvblJlY3QpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29s
b3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBjb2xvcik7CiB9CiAK
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
IG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5hdGl2ZUltYWdlLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdHRlcm4obmF0aXZlSW1hZ2UsIGRlc3RSZWN0LCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAg
IG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgZ3JhZGllbnQpOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBncmFkaWVudCk7CiB9CiAKLUltYWdlRHJhd1Jlc3Vs
dCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3ByaW1hcnlDb250ZXh0LmRy
YXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9u
cyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSb3VuZGVk
UmVjdChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSb3VuZGVkUmVj
dChyZWN0LCBjb2xvcik7CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIHJlc3Vs
dCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBz
cGFjaW5nLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7
CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJv
dW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxl
IHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3VGlsZWRJbWFnZShp
bWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUs
IG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3VGlsZWRJbWFnZShpbWFnZSwg
ZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlv
bnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxsRWxsaXBz
ZShlbGxpcHNlKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7
CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1l
ZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5wYWludEZy
YW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5m
aWxsUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7CiB9
Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJU
aGlja25lc3MpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zY2FsZShzY2FsZSk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LnNjYWxlKHNjYWxlKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9r
ZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ry
b2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
CiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAgIG1fcHJpbWFyeUNv
bnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ry
b2tlRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNvbnRl
eHQudHJhbnNsYXRlKHgsIHkpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC50cmFuc2xhdGUoeCwg
eSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jb25j
YXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY29uY2F0Q1RNKHRyYW5z
Zm9ybSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25l
c3MpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25l
c3MpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQb2ludCYgdG8p
CiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX3NlY29u
ZGFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3
TGluZShmcm9tLCB0byk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdMaW5lKGZyb20sIHRv
KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmdldENU
TShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZURldmljZVNjYWxlKSBjb25zdAordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKGluY2x1ZGVEZXZpY2VTY2Fs
ZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKKyAgICBtX3NlY29u
ZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICByZXR1cm4gbV9wcmltYXJ5
Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7CisgICAgbV9w
cmltYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJh
d1BhdGgocGF0aCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM3MCwyOSArMjc1LDU0IEBAIHZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcmVjdHMsIGRvCiB9CiAjZW5kaWYKIAotRmxvYXRTaXplIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBhdXRvIHNpemUgPSBtX3ByaW1hcnlDb250ZXh0LmRyYXdUZXh0
KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZHJhd1RleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIHJldHVybiBzaXpl
OworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3Vs
dHMmIGZpbHRlclJlc3VsdHMpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3R2x5cGhzKGZv
bnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2Rl
KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CisgICAgbV9wcmltYXJ5
Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VS
ZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3
RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIs
IGZpbHRlclJlc3VsdHMpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1
bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RW1waGFzaXNNYXJrcyhjYXNjYWRlLCBydW4s
IG1hcmssIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdFbXBo
YXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFn
ZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdl
KFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3QmlkaVRleHQoY2FzY2FkZSwgcnVuLCBw
b2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
bik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRl
c3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShz
eXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKwordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihpbWFnZSwgZGVz
dFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30K
KworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGFp
bnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxh
eWVyLCBkZXN0aW5hdGlvbik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnBhaW50RnJhbWVGb3JN
ZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisK
K3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQoreworICAgIG1fcHJpbWFy
eUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBv
aW50LCBmb250U21vb3RoaW5nTW9kZSk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdHbHlw
aHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGlu
Z01vZGUpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlKQpAQCAtNDA3LDE2ICszMzcsOSBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LAogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJl
Y3QsIG1hcmtlclN0eWxlKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpz
ZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0CiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250
ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKKyAgICByZXR1cm4gbV9wcmlt
YXJ5Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKQEAgLTQyNSwxOCArMzQ4LDE2IEBAIHZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QKICAgICBtX3NlY29uZGFyeUNvbnRleHQuYWRkRGVzdGluYXRpb25BdFBv
aW50KG5hbWUsIHBvaW50KTsKIH0KIAotYm9vbCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpz
dXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuc3VwcG9ydHNJbnRl
cm5hbExpbmtzKCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3Qo
bmFtZSwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVj
dChuYW1lLCByZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkaWRV
cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7Ci0gICAgLy8gVGhpcyBjYWxscyB1cGRhdGVTdGF0ZSgpIGluc3RlYWQgb2YgZGlk
VXBkYXRlU3RhdGUoKSBzbyB0aGF0IGNoYW5nZXMKLSAgICAvLyBhcmUgYWxzbyBhcHBsaWVkIHRv
IGVhY2ggY29udGV4dCdzIEdyYXBoaWNzQ29udGV4dFN0YXRlLCBzbyB0aGF0IGNvZGUKLSAgICAv
LyBpbnRlcm5hbCB0byB0aGUgY2hpbGQgY29udGV4dHMgdGhhdCByZWFkcyBmcm9tIHRoZSBzdGF0
ZSBnZXRzIHRoZSByaWdodCB2YWx1ZXMuCi0gICAgbV9wcmltYXJ5Q29udGV4dC51cGRhdGVTdGF0
ZShzdGF0ZSwgZmxhZ3MpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC51cGRhdGVTdGF0ZShzdGF0
ZSwgZmxhZ3MpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3Qp
OworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7CiB9CiAK
ICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQpAQCAtNDQ2LDUgKzM2NywxMCBAQCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRl
cHJlY2F0ZWRQcml2YXRlQ29udAogfQogI2VuZGlmCiAKK0Zsb2F0UmVjdCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Um91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4
dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY1OGIzNGM5MTQz
NDJiNzM3NzcyN2MxMWE3M2I2ZDgyMThlMTU1NmYuLjdhMzdhMTEzZGQ4MTVlYjNiOTU2MDc1MmQ5
ZGM3MGViNWE4OTdjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgKQEAgLTQzLDgzICs0Myw1
NCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKICAgICBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAK
LSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyNpZiBV
U0UoQ0cpCisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWw7CisgICAgdm9p
ZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwogCi0gICAgdm9pZCBkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKLSAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7
Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOworI2VuZGlmCisgICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CiAKKyAgICB2b2lkIHNhdmUoKSBm
aW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFu
Z2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkg
ZmluYWw7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAjZW5kaWYKLSAgICB2
b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwor
ICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwogCiAg
ICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOwogICAg
IHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAotICAgIHZvaWQgYXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwotCi0gICAgdXNpbmcgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgZWxsaXBzZSkgZmluYWw7Ci0KLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJD
b250ZXh0KGJvb2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZp
bmFsOwotCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKLSNl
bmRpZgotCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7Ci0K
ICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CiAgICAg
dm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCiAgICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogCi0gICAgdm9p
ZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmlu
YWw7Ci0KLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQg
c2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERh
c2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4o
TGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0K
LSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
c2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lk
IGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwot
ICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbDsKLSAgICBJbWFnZURy
YXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRp
bGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZv
aWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0jaWYgRU5BQkxFKFZJREVP
KQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IEdyYWRpZW50JikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7Ci0g
ICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAg
IAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7
CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7
CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIEFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNl
U2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7Cisg
ICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
IGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwogCisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKKyAgICAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAjaWYg
UExBVEZPUk0oTUFDKQpAQCAtMTI3LDIzICs5OCwyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpIGZpbmFs
OwotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpIGZpbmFsOwotICAgIHZvaWQgZHJh
d0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2Nh
ZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWw7CisgICAgdm9pZCBkcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAg
dm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikg
ZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZv
aWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAg
IHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2
b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pIGZpbmFsOworI2VuZGlmCiAKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9u
dCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1
bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhp
bmdNb2RlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKLQogICAgIHZvaWQgZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgYWRk
RGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwotCiAgICAgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc2V0VVJM
Rm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQg
ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisgICAgRmxvYXRSZWN0IHJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRl
cykgZmluYWw7CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQogICAgIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3Qg
ZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggYmI0ZGFjMDE5YzViOWUxM2IxMzdh
ZTY5NGU0YmY2YjI3NmJmY2MwZC4uMWMxYjk2ZWM1Yjk4M2NjNWYxOGQ2ZmYxZmQyNTg1N2ZhOTQz
YzQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3Nm
YWRlR2VuZXJhdGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcApAQCAtOTAsNyArOTAsNyBAQCB2b2lkIENy
b3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3Q3Jvc3NmYWRlKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKIEltYWdlRHJhd1Jlc3VsdCBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigp
LCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBv
cHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAg
Y29udGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QubG9j
YXRpb24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29y
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3Jk
ZXIuaAppbmRleCAyNWEzZDNmZTg3NzMzMWRkYTM5NTc4MDExYjZkODkwZjIxMmM3MmU2Li4zYmNi
NTA1YWYzYzI4MmY0MjIzMjVjZDdlMzAwNTM0ZmQ5Zjk5Y2I5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDI0ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJU
ZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKLSNpZiBVU0UoQ09SRV9U
RVhUKQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxD
b3JlVGV4dC9Db3JlVGV4dC5oPgotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxwYWwvc3Bp
L3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2Vsc2UKLSNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVU
ZXh0U1BJLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5o
PgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsKQEAg
LTYyLDc2ICs0OSwzMiBAQCBwdWJsaWM6CiAjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JN
KFdJTikKICAgICB2b2lkIGRyYXdOYXRpdmVUZXh0KENURm9udFJlZiwgQ0dGbG9hdCBmb250U2l6
ZSwgQ1RMaW5lUmVmLCBDR1JlY3QgbGluZVJlY3QpOwogCi0gICAgdm9pZCByZWNvcmRCZWdpbkxh
eWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBDR1JlY3QpOwotICAgIHZvaWQg
cmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYpOwotICAgIHZv
aWQgcmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgY29u
c3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBoW10sIGNvbnN0IENHUG9pbnQgcG9z
aXRpb25zW10sIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCByZWNvcmREcmF3SW1hZ2UoQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIENHUmVjdCwgQ0dJbWFnZVJlZik7CisgICAgdm9p
ZCByZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmKTsKKyAgICB2b2lkIHJlY29yZEVuZExheWVy
KENHR1N0YXRlUmVmKTsKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoQ0dHU3RhdGVSZWYsIGNv
bnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KTsK
KyAgICB2b2lkIHJlY29yZERyYXdJbWFnZShDR0dTdGF0ZVJlZiwgQ0dSZWN0LCBDR0ltYWdlUmVm
KTsKICNlbmRpZgogCi0gICAgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0ds
eXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzOyB9Ci0KIHByaXZh
dGU6Ci0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICBVbmlxdWVSZWY8
R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRleHQoKTsKLSNlbmRpZgotCi0gICAg
dm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7Ci0g
ICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7Ci0KLSAgICB2b2lk
IHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAg
IHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
KTsKLSAgICB2b2lkIHByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYsIEZvbnRTbW9v
dGhpbmdNb2RlKTsKLSAgICB2b2lkIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgdm9p
ZCBzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgdm9pZCBy
ZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcmln
aW5hbFN0YXRlKTsKIAotICAgIHZvaWQgdXBkYXRlRmlsbENvbG9yKGNvbnN0IENvbG9yJiwgR3Jh
ZGllbnQqID0gbnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRyKTsKLSAgICB2b2lkIHVwZGF0ZVN0
cm9rZUNvbG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVybiogPSBu
dWxscHRyKTsKLSAgICB2b2lkIHVwZGF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAg
ICBlbnVtIGNsYXNzIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIHsKLSAgICAgICAgVW5zcGVjaWZp
ZWQsCi0gICAgICAgIFllcywKLSAgICAgICAgTm8KLSAgICB9OwotICAgIHZvaWQgdXBkYXRlU2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyLCBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLQotI2lmIFVT
RShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAgdm9pZCB1cGRhdGVTaGFkb3coQ0dT
dHlsZVJlZik7Ci0jZW5kaWYKKyAgICB2b2lkIGRyYXdOb25PVFNWR1J1bihjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGlu
Z01vZGUpOworICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisgICAg
dm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9vd25lcjsKKyAgICBHcmFwaGljc0Nv
bnRleHQmIG1fZGVzdGluYXRpb25Db250ZXh0OwogICAgIERlY29uc3RydWN0RHJhd0dseXBocyBt
X2RlY29uc3RydWN0RHJhd0dseXBoczsKICAgICBEZXJpdmVGb250RnJvbUNvbnRleHQgbV9kZXJp
dmVGb250RnJvbUNvbnRleHQ7CiAKLSNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lO
KQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJuYWxDb250ZXh0OwotI2Vu
ZGlmCi0KICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIgfTsKICAgICBG
b250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBGb250U21vb3RoaW5nTW9kZTo6QXV0
b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBtX29yaWdpbmFsVGV4dE1hdHJpeDsK
IAotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIHN0cnVjdCBTdHlsZSB7Ci0gICAgICAgICAg
ICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQ7Ci0g
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICAg
ICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuOwotICAgICAgICB9OwotICAgICAgICBTdHls
ZSBmaWxsU3R5bGU7Ci0gICAgICAgIFN0eWxlIHN0cm9rZVN0eWxlOwotCi0gICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdG07Ci0KLSAgICAgICAgc3RydWN0IFNoYWRvd1N0YXRlIHsKLSAgICAgICAg
ICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAgICAgICAgICBmbG9hdCBibHVyIHsgMCB9OwotICAg
ICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBib29sIGlnbm9yZVRyYW5zZm9ybXMg
eyBmYWxzZSB9OwotICAgICAgICB9OwotICAgICAgICBTaGFkb3dTdGF0ZSBzaGFkb3c7Ci0gICAg
fTsKLSAgICBTdGF0ZSBtX29yaWdpbmFsU3RhdGU7Ci0gICAgU3RhdGUgbV9jdXJyZW50U3RhdGU7
CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKKyAgICBVbmlxdWVSZWY8R3Jh
cGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuY3BwCmluZGV4IDg1MTgwYWQxMDlmZDgxOGU5YmIxNTg4Y2U5NjJhYjQ2MzA4MTZh
MDkuLjM2MTFiMTJjYTlhYjI5ZWI5MjFmMjMyNWUxZjk2ZDI5NTI1M2M3Y2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTE5OSw3
ICsxOTksNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1bgogCiBzdGQ6OnVuaXF1ZV9wdHI8RGlz
cGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZv
clRleHRSdW4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIHVu
c2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvLCBDdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAogewotICAgIEFTU0VSVCgh
Y29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwg
IWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICB1bnNpZ25lZCBkZXN0aW5hdGlvbiA9
IHRvLnZhbHVlX29yKHJ1bi5sZW5ndGgoKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFVzZSB0aGUg
ZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcg
YW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAwMDUwCkBAIC0yMTQsNyAr
MjE0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0
PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlM
aXN0PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxh
eUxpc3Q+KCk7Ci0gICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRpbmdDb250ZXh0
KCpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNm
b3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpObyk7Cisg
ICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlz
dCwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRl
Y29uc3RydWN0RHJhd0dseXBoczo6Tm8pOwogICAgIAogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2lu
dCA9IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNl
KCkpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5nQ29udGV4dCwgZ2x5cGhCdWZmZXIs
IHN0YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCmluZGV4IDY0NTg0ZTVj
ZmUwMTE4ODJlZmFiMmUyM2MzYTU5NGUxNzgyZjI4OTAuLjJmODI3ZjYyNWY2NGI1OWNhMWE2NjQ5
NjA3MzBmMDNjMjNiYzM3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCkBAIC00Myw3ICs0Myw3IEBAIEdyYWRpZW50SW1hZ2U6
On5HcmFkaWVudEltYWdlKCkgPSBkZWZhdWx0OwogSW1hZ2VEcmF3UmVzdWx0IEdyYWRpZW50SW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihv
cHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRl
c3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7
CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlm
IChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCkBAIC02Miw3ICs2Miw3IEBAIHZv
aWQgR3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgbV9ncmFkaWVudC0+YWRqdXN0UGFyYW1ldGVyc0Zv
clRpbGVkRHJhd2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVkU3JjUmVjdCwgc3BhY2luZyk7CiAK
ICAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBzY2FsZSB0byBnZW5l
cmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250
ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0g
ZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhTY2FsZSA9IGZhYnMoZGVzdENvbnRl
eHRDVE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RN
LnlTY2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJuQ1RNID0gcGF0
dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDBiYjEzNTk3Y2VhNzM2OWRiYmM2ZTE3MjdmMjZj
OTJiOGZiNzUxNzYuLmNmOGM3MThiODEyYzc5NzkxZjJiZTNlYjdkOGJlOGQ1NWEyYzMzYzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
IAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAj
aW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKICNpbmNsdWRlICJG
bG9hdFJvdW5kZWRSZWN0LmgiCkBAIC0zNiw0NzMgKzM1LDMxMCBAQAogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZS5oIgotI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSb3Vu
ZGVkUmVjdC5oIgogI2luY2x1ZGUgIlN5c3RlbUltYWdlLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5o
IgorI2luY2x1ZGUgIlRleHRCb3hJdGVyYXRvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBUZXh0Qm94SXRlcmF0b3Ig
ewotcHVibGljOgotICAgIFRleHRCb3hJdGVyYXRvcigpCi0gICAgICAgIDogbV90ZXh0UnVuKDAp
Ci0gICAgICAgICwgbV9vZmZzZXQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgVGV4dEJveEl0ZXJh
dG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkKLSAgICAgICAgOiBt
X3RleHRSdW4odGV4dFJ1bikKLSAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgewotICAg
IH0KLQotICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0g
ICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KLSAgICBib29sIGF0RW5kKCkgY29u
c3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRSdW4tPmxlbmd0aCgp
OyB9Ci0gICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90ZXh0UnVuKVttX29m
ZnNldF07IH0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBh
dEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1cnJlbnQoKSk7IH0K
LQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0ICYmIG1f
dGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09
KG90aGVyKTsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4dFJ1bjsKLSAg
ICB1bnNpZ25lZCBtX29mZnNldDsKLX07Ci0KLSNkZWZpbmUgQ0hFQ0tfRk9SX0NIQU5HRURfUFJP
UEVSVFkoZmxhZywgcHJvcGVydHkpIFwKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZykgJiYgKG1fc3RhdGUucHJvcGVydHkgIT0gc3RhdGUu
cHJvcGVydHkpKSBcCi0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6ZmxhZyk7Ci0KLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSgp
Ci0gICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAsIHNob3VsZFNtb290aEZvbnRzKHRy
dWUpCi0gICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHModHJ1ZSkKLSAgICAsIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2Up
CitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlRmxhZ3MmIGNoYW5nZUZs
YWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAgOiBtX3N0YXRlKGlu
aXRpYWxDbGlwLCBjaGFuZ2VGbGFncywgaW5pdGlhbENUTSkKIHsKIH0KIAotR3JhcGhpY3NDb250
ZXh0U3RhdGU6On5HcmFwaGljc0NvbnRleHRTdGF0ZSgpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRleHRTdGF0
ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6b3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpID0gZGVmYXVsdDsKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewotICAgIGF1dG8gc3Ry
b2tlRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShz
dHJva2VGbGFncykpIHsKLSAgICAgICAgc3Ryb2tlQ29sb3IgPSBzdGF0ZS5zdHJva2VDb2xvcjsK
LSAgICAgICAgc3Ryb2tlR3JhZGllbnQgPSBzdGF0ZS5zdHJva2VHcmFkaWVudDsKLSAgICAgICAg
c3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZVBhdHRlcm47Ci0gICAgfQotCi0gICAgYXV0byBm
aWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShmaWxsRmxh
Z3MpKSB7Ci0gICAgICAgIGZpbGxDb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsKLSAgICAgICAgZmls
bEdyYWRpZW50ID0gc3RhdGUuZmlsbEdyYWRpZW50OwotICAgICAgICBmaWxsUGF0dGVybiA9IHN0
YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICBzaGFkb3dPZmZzZXQgPSBz
dGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIHNoYWRvd0JsdXIgPSBzdGF0ZS5zaGFkb3dCbHVy
OwotICAgICAgICBzaGFkb3dDb2xvciA9IHN0YXRlLnNoYWRvd0NvbG9yOwotICAgICAgICBzaGFk
b3dSYWRpdXNNb2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKLSAgICB9Ci0KLSAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5n
ZSkpCi0gICAgICAgIHN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNrbmVzczsKLQot
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdN
b2RlQ2hhbmdlKSkKLSAgICAgICAgdGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4dERyYXdpbmdN
b2RlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHN0cm9rZVN0eWxlID0gc3RhdGUuc3Ryb2tlU3R5bGU7
Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxl
Q2hhbmdlKSkKLSAgICAgICAgZmlsbFJ1bGUgPSBzdGF0ZS5maWxsUnVsZTsKKyAgICBBU1NFUlQo
bV9zdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50
KTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxw
aGFDaGFuZ2UpKQotICAgICAgICBhbHBoYSA9IHN0YXRlLmFscGhhOwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNhdmUoKQoreworICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUpOworfQogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9w
ZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkg
ewotICAgICAgICBjb21wb3NpdGVPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwot
ICAgICAgICBibGVuZE1vZGUgPSBzdGF0ZS5ibGVuZE1vZGU7Cit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpCit7CisgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgIExP
R19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKSBzdGFjayBpcyBl
bXB0eSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBz
aG91bGRBbnRpYWxpYXMgPSBzdGF0ZS5zaG91bGRBbnRpYWxpYXM7CisgICAgbV9zdGF0ZSA9IG1f
c3RhY2sudGFrZUxhc3QoKTsKKyAgICBtX2xhc3RBcHBsaWVkU3RhdGUgPSBzdGQ6Om51bGxvcHQ7
CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNt
b290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBzdGF0ZS5zaG91
bGRTbW9vdGhGb250czsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
OwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
ID0gc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgLy8gTWFrZSBzdXJlIHdlIGRl
YWxsb2NhdGUgdGhlIHN0YXRlIHN0YWNrIGJ1ZmZlciB3aGVuIGl0IGdvZXMgZW1wdHkuCisgICAg
Ly8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhh
dCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5LgorICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkK
KyAgICAgICAgbV9zdGFjay5jbGVhcigpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIGRy
YXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7Cit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKQoreworICAgIG1fc3RhdGUuZGlkQXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICBtX2xhc3RBcHBsaWVkU3RhdGUgPSBtX3N0YXRlOworfQogCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9
IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7CitGbG9hdFNpemUgR3JhcGhpY3NDb250
ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bSA9IGdldENUTSgpOworICAgIHJldHVybiBGbG9hdFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0
cmFuc2Zvcm0ueVNjYWxlKCkpOworfQorICAgIAorRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6
c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
ID0gZ2V0Q1RNKCk7CisgICAgYXV0byB0cmFuc2Zvcm1lZERlc3RSZWN0ID0gdHJhbnNmb3JtLm1h
cFJlY3QoZGVzdFJlY3QpOworICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAv
IHNyY1JlY3Quc2l6ZSgpOworfQogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAg
ICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJh
bmNlQ2hhbmdlKSkKLSAgICAgICAgdXNlRGFya0FwcGVhcmFuY2UgPSBzdGF0ZS51c2VEYXJrQXBw
ZWFyYW5jZTsKLSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQpCit7CisgICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CiB9CiAKLUdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7
Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3M7
CisgICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApOworICAgIC0tbV90cmFu
c3BhcmVuY3lMYXllckNvdW50OworfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
U3Ryb2tlR3JhZGllbnRDaGFuZ2UsIHN0cm9rZUdyYWRpZW50KTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShTdHJva2VQYXR0ZXJuQ2hhbmdlLCBzdHJva2VQYXR0ZXJuKTsKLSAgICBD
SEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsR3JhZGllbnRDaGFuZ2UsIGZpbGxHcmFkaWVu
dCk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbFBhdHRlcm5DaGFuZ2UsIGZp
bGxQYXR0ZXJuKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBtX3N0YXRlLmNsaXAocmVjdCk7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKQotICAgICAg
ICAmJiAobV9zdGF0ZS5zaGFkb3dPZmZzZXQgIT0gc3RhdGUuc2hhZG93T2Zmc2V0Ci0gICAgICAg
ICAgICB8fCBtX3N0YXRlLnNoYWRvd0JsdXIgIT0gc3RhdGUuc2hhZG93Qmx1cgotICAgICAgICAg
ICAgfHwgbV9zdGF0ZS5zaGFkb3dDb2xvciAhPSBzdGF0ZS5zaGFkb3dDb2xvcikpCi0gICAgICAg
IGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSkK
K3sKKyAgICBtX3N0YXRlLmNsaXAocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpOworfQogCi0gICAg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLCBzdHJva2VU
aGlja25lc3MpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFRleHREcmF3aW5nTW9k
ZUNoYW5nZSwgdGV4dERyYXdpbmdNb2RlKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTdHJva2VDb2xvckNoYW5nZSwgc3Ryb2tlQ29sb3IpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKEZpbGxDb2xvckNoYW5nZSwgZmlsbENvbG9yKTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShTdHJva2VTdHlsZUNoYW5nZSwgc3Ryb2tlU3R5bGUpOwotICAgIENIRUNL
X0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdlLCBmaWxsUnVsZSk7Ci0gICAgQ0hF
Q0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoQWxwaGFDaGFuZ2UsIGFscGhhKTsKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkK
K3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBj
bGlwUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zQW55KHsg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KQotICAgICAgICAmJiAobV9zdGF0ZS5jb21w
b3NpdGVPcGVyYXRvciAhPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciB8fCBtX3N0YXRlLmJsZW5k
TW9kZSAhPSBzdGF0ZS5ibGVuZE1vZGUpKSB7Ci0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKTsKLSAgICAgICAgY2hh
bmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpOwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0KQoreworICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgeworICAgICAgICBjbGlw
T3V0KHJlY3QucmVjdCgpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENIRUNLX0ZP
Ul9DSEFOR0VEX1BST1BFUlRZKFNob3VsZEFudGlhbGlhc0NoYW5nZSwgc2hvdWxkQW50aWFsaWFz
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaG91bGRTbW9vdGhGb250c0NoYW5n
ZSwgc2hvdWxkU21vb3RoRm9udHMpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtc0NoYW5nZSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwotICAgIENIRUNLX0ZPUl9DSEFO
R0VEX1BST1BFUlRZKERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlLCBkcmF3THVtaW5hbmNlTWFzayk7
Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eUNoYW5nZSwgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktf
TU9ERV9TVVBQT1JUKQotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFVzZURhcmtBcHBl
YXJhbmNlQ2hhbmdlLCB1c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBj
aGFuZ2VGbGFnczsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0
KTsKKyAgICBjbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhz
dGF0ZSwgZmxhZ3MpOwotCi0gICAgYXV0byBzdHJva2VGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3Jh
ZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlIH07
Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0cm9rZUZsYWdzKSkKLSAgICAgICAgbV9jaGFu
Z2VGbGFncy5yZW1vdmUoc3Ryb2tlRmxhZ3MpOwotCi0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNo
YW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShmaWxsRmxhZ3MpKQotICAgICAgICBt
X2NoYW5nZUZsYWdzLnJlbW92ZShmaWxsRmxhZ3MpOwotCi0gICAgYXV0byBjb21wb3NpdGVPcGVy
YXRvckZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hh
bmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH07Ci0gICAgaWYgKGZs
YWdzLmNvbnRhaW5zQW55KGNvbXBvc2l0ZU9wZXJhdG9yRmxhZ3MpKQotICAgICAgICBtX2NoYW5n
ZUZsYWdzLnJlbW92ZShjb21wb3NpdGVPcGVyYXRvckZsYWdzKTsKLQotICAgIG1fY2hhbmdlRmxh
Z3MuYWRkKGZsYWdzKTsKKyAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5h
dGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRD
aGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KCptX3N0YXRlLnN0cm9r
ZUdyYWRpZW50LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBh
dHRlcm5DaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVBhdHRlcm4oKm1fc3RhdGUu
c3Ryb2tlUGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRG
aWxsR3JhZGllbnQoKm1fc3RhdGUuZmlsbEdyYWRpZW50LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNw
YWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0Rmls
bFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hh
bmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRl
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQotICAgICAgICBjb250ZXh0
LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0
YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwotCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1fc3RhdGUuc3Ry
b2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvIHByZXZpb3VzQ29tcG9zaXRlTW9kZSA9IGNvbXBvc2l0
ZU1vZGUoKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFRleHRE
cmF3aW5nTW9kZShtX3N0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQot
ICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3RhdGUuc3Ryb2tlQ29sb3IpOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxD
b2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fc3RhdGUuZmlsbENv
bG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUo
bV9zdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgY29udGV4
dC5zZXRBbHBoYShtX3N0YXRlLmFscGhhKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKLSAgICAgICAgY29udGV4
dC5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgbV9zdGF0
ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0
U2hvdWxkQW50aWFsaWFzKG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLQotICAgIGlmIChtX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250
c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkU21vb3RoRm9udHMobV9zdGF0ZS5z
aG91bGRTbW9vdGhGb250cyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkKLSAg
ICAgICAgY29udGV4dC5zZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMobV9zdGF0ZS5zaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAgICAg
ICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNr
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5n
ZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VXNlRGFya0FwcGVhcmFuY2UobV9zdGF0ZS51c2VEYXJr
QXBwZWFyYW5jZSk7Ci0jZW5kaWYKKyAgICBzZXRDb21wb3NpdGVNb2RlKHsgb3BlcmF0aW9uLCBi
bGVuZE1vZGUgfSk7CisgICAgZmlsbFJlY3QocmVjdCwgY29sb3IpOworICAgIHNldENvbXBvc2l0
ZU1vZGUocHJldmlvdXNDb21wb3NpdGVNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkK
IHsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNoYW5nZS1mbGFncyIsIG1fY2hhbmdlRmxhZ3MudG9S
YXcoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0
cm9rZS1ncmFkaWVudCIsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCkpOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRl
cm5DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1wYXR0ZXJuIiwgbV9z
dGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQo
KSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtcGF0
dGVybiIsIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOworICAgIGdyYWRpZW50LmZpbGwoKnRo
aXMsIHJlY3QpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJz
aGFkb3ctYmx1ciIsIG1fc3RhdGUuc2hhZG93Qmx1cik7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgic2hhZG93LW9mZnNldCIsIG1fc3RhdGUuc2hhZG93T2Zmc2V0KTsKLSAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJzaGFkb3ctY29sb3IiLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7Cit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBpZiAoIXJlY3Qu
aXNSb3VuZGVkKCkpIHsKKyAgICAgICAgZmlsbFJlY3QocmVjdC5yZWN0KCksIGNvbG9yLCBjb21w
b3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICAgICAgCisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGNvbXBvc2l0
ZU9wZXJhdGlvbigpOworICAgIHNldENvbXBvc2l0ZU1vZGUoeyBwcmV2aW91c09wZXJhdG9yLCBi
bGVuZE1vZGUgfSk7CisgICAgZmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBzZXRD
b21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7Cit9CiAKLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtdGhpY2tuZXNzIiwgbV9zdGF0
ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgidGV4dC1kcmF3aW5nLW1vZGUiLCBtX3N0YXRlLnRleHREcmF3aW5nTW9kZS50
b1JhdygpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ry
b2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWNvbG9yIiwgbV9zdGF0ZS5maWxsQ29sb3IpOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2Utc3R5bGUiLCBt
X3N0YXRlLnN0cm9rZVN0eWxlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIFBhdGggcGF0aDsK
KyAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKQotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImZpbGwtcnVsZSIsIG1fc3RhdGUuZmlsbFJ1bGUpOworICAgIGlmICghcm91bmRl
ZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCisgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qo
cm91bmRlZEhvbGVSZWN0KTsKKyAgICBlbHNlCisgICAgICAgIHBhdGguYWRkUmVjdChyb3VuZGVk
SG9sZVJlY3QucmVjdCgpKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
YWxwaGEiLCBtX3N0YXRlLmFscGhhKTsKKyAgICBXaW5kUnVsZSBvbGRGaWxsUnVsZSA9IGZpbGxS
dWxlKCk7CisgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CisgICAgCisgICAg
c2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOworICAgIHNldEZpbGxDb2xvcihjb2xvcik7
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJjb21w
b3NpdGUtb3BlcmF0b3IiLCBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICBmaWxsUGF0
aChwYXRoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShvbGRGaWxsUnVsZSk7CisgICAgc2V0Rmls
bENvbG9yKG9sZEZpbGxDb2xvcik7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJibGVuZC1tb2RlIiwgbV9zdGF0ZS5ibGVuZE1vZGUpOwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3sK
KyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2UpOworICAgIGZpbGxQ
YXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxs
aXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2UpOwor
ICAgIHN0cm9rZVBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgtZm9udHMiLCBtX3N0YXRlLnNob3VsZFNt
b290aEZvbnRzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9y
JiBzaGFkb3dDb2xvcikKK3sKKyAgICBhdXRvIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwor
ICAgIGF1dG8gb2xkU3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xvcigpOwogCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLXN1YnBp
eGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMp
OworICAgIHNldEZpbGxDb2xvcihzaGFkb3dDb2xvcik7CisgICAgc2V0U3Ryb2tlQ29sb3Ioc2hh
ZG93Q29sb3IpOworICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkg
KyAxLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKIAotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy1pZ25vcmUtdHJhbnNm
b3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIHNldEZpbGxDb2xv
cihlbGxpcHNlQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xvcik7CisgICAg
ZHJhd0VsbGlwc2UocmVjdCk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoImRyYXctbHVtaW5hbmNlLW1hc2siLCBtX3N0YXRlLmRyYXdMdW1pbmFuY2VN
YXNrKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKKyAgICBzZXRTdHJva2VDb2xv
cihvbGRTdHJva2VDb2xvcik7Cit9CiAKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VE
YXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgidXNlLWRhcmst
YXBwZWFyYW5jZSIsIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlmCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBmaWxsUGF0
aChwYXRoKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3Rh
dGVDaGFuZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBzdGF0ZUNoYW5nZS5k
dW1wKHRzKTsKLSAgICByZXR1cm4gdHM7CisgICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBGbG9h
dFJlY3QoZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBGbG9hdFJlY3QoeyB9LCBp
bWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi1HcmFwaGlj
c0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsK
LSAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV90cmFuc3BhcmVu
Y3lMYXllckNvdW50KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBG
bG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUpOworICAgIElu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNT
Y29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBpbWFnZS5k
cmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnJlc3RvcmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1p
bmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFBvaW50
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQogewotICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBMT0dfRVJS
T1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHki
KTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zdGF0
ZSA9IG1fc3RhY2subGFzdCgpOwotICAgIG1fc3RhY2sucmVtb3ZlTGFzdCgpOwotCi0gICAgLy8g
TWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0YWNrIGJ1ZmZlciB3aGVuIGl0IGdv
ZXMgZW1wdHkuCi0gICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkgc2F2ZSgp
IGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5LgotICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGFjay5jbGVhcigpOworICAgIGF1dG8gaW1hZ2VM
b2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIGRyYXdDb25zdW1pbmdJbWFn
ZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZUxvZ2lj
YWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2FsU2l6ZSksIGltYWdlUGFpbnRpbmdP
cHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdl
QnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
IHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3MpOwotICAgIGRpZFVwZGF0
ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIGRy
YXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgZGVzdGluYXRpb24sIEZsb2F0
UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xv
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIHNhdmUoKTsKLQotICAgIHNldFN0cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKLSAgICBz
ZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOwotCi0gICAgZHJhd0VsbGlwc2UoRmxvYXRSZWN0KHJl
Y3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwotCi0g
ICAgc2V0U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKLSAgICBzZXRGaWxsQ29sb3IoZWxsaXBz
ZUNvbG9yKTsKLQotICAgIGRyYXdFbGxpcHNlKHJlY3QpOyAgCi0KLSAgICByZXN0b3JlKCk7Cisg
ICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9u
cy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWlu
ZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZp
bHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQogewotICAgIG1fc3RhdGUuc3Ry
b2tlQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsK
LSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7CisgICAg
YXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwg
cmVzdWx0cyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZlcigpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHNjYWxlKHsgMSAvIGZpbHRlci5maWx0ZXJT
Y2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9KTsKKyAg
ICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1bHQtPmFic29sdXRlSW1hZ2VSZWN0
KCkpOworICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dSYWRpdXNNb2RlIHJhZGl1c01vZGUpCitJbWFnZURy
YXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gb2Zmc2V0Owot
ICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9
IGNvbG9yOwotICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IHJhZGl1c01vZGU7Ci0gICAg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5n
ZSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBp
bWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFn
ZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRv
dygpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQg
PSBGbG9hdFNpemUoKTsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSAwOwotICAgIG1fc3RhdGUu
c2hhZG93Q29sb3IgPSBDb2xvcigpOwotICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFNo
YWRvd1JhZGl1c01vZGU6OkRlZmF1bHQ7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CisgICAgRmxvYXRSZWN0IHNyY1JlY3Qo
RmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKGltYWdlUGFpbnRpbmdPcHRpb25zLm9yaWVudGF0aW9u
KCkpKTsKKyAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc3JjUmVjdCwg
aW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6Z2V0U2hh
ZG93KEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwgQ29sb3ImIGNvbG9yKSBjb25zdAor
SW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG9mZnNldCA9IG1fc3Rh
dGUuc2hhZG93T2Zmc2V0OwotICAgIGJsdXIgPSBtX3N0YXRlLnNoYWRvd0JsdXI7Ci0gICAgY29s
b3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwotCi0gICAgcmV0dXJuIGhhc1NoYWRvdygpOworICAg
IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRo
aXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1
cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQor
SW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3Vy
Y2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5maWxs
Q29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAg
bV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSk7CisgICAgSW50ZXJwb2xh
dGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0
aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5k
cmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBv
cHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYgcGF0dGVybikKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9y
LAorICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLnN0cm9rZUNv
bG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1f
c3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0gICAgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpOwor
ICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0
cmV0Y2hUaWxlKSB7CisgICAgICAgIC8vIEp1c3QgZG8gYSBzY2FsZS4KKyAgICAgICAgcmV0dXJu
IGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CisgICAgfQor
CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5
Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAg
IHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVT
Y2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYg
cGF0dGVybikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAg
ICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51
bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0gICAg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJu
Q2hhbmdlKTsKKyAgICBzeXN0ZW1JbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50
PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZUdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07Ci0g
ICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwotICAgIG1fc3Rh
dGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHN0cm9rZUdyYWRpZW50U3BhY2VUcmFu
c2Zvcm07Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFu
Z2UpOworICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCisjaWYgRU5B
QkxFKFZJREVPKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewotICAgIG1f
c3RhdGUuZmlsbENvbG9yID0geyB9OwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92
ZShncmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IGZp
bGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxs
cHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsR3JhZGllbnRDaGFuZ2UpOwotICAgIC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KKyAg
ICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhp
cywgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
IHsKLSAgICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKKyAgICBGb250Q2FzY2FkZTo6ZHJh
d0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwg
Zm9udFNtb290aGluZ01vZGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZv
bnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
IHsKLSAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCk7Ci0gICAgLS1tX3Ry
YW5zcGFyZW5jeUxheWVyQ291bnQ7CisgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CiAKIEZsb2F0U2l6
ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKQEAgLTUxMSwxMSArMzQ3LDYgQEAgRmxvYXRTaXpl
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHJ1biwKICAgICByZXR1cm4gZm9udC5kcmF3VGV4dCgqdGhpcywgcnVuLCBwb2lu
dCwgZnJvbSwgdG8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotewotICAg
IEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBu
dW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCiB7CiAgICAg
Zm9udC5kcmF3RW1waGFzaXNNYXJrcygqdGhpcywgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8p
OwpAQCAtNTQ5LDcgKzM4MCw0NSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgICAgIGJp
ZGlSdW4gPSBiaWRpUnVuLT5uZXh0KCk7CiAgICAgfQogCi0gICAgYmlkaVJ1bnMuY2xlYXIoKTsK
KyAgICBiaWRpUnVucy5jbGVhcigpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHlsZSkKK3sKKyAgICBkcmF3TGluZXNGb3JUZXh0
KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5IHsgMCwgcmVjdC53aWR0
aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHlsZSk7Cit9CisKK0Zsb2F0UmVj
dCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykKK3sKKyAgICBDb2xvciBkdW1teUNvbG9yOwor
ICAgIHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KHJl
Y3QsIHByaW50aW5nLCBkdW1teUNvbG9yKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4
dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIENvbG9yJiBjb2xvcikKK3sKKyAgICBGbG9hdFBv
aW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBmbG9hdCB0aGlja25lc3MgPSBzdGQ6
Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKKyAgICBpZiAocHJpbnRpbmcpCisgICAgICAgIHJl
dHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3Mp
KTsKKworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICAvLyBK
dXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3VtaW5nIHggYW5kIHkgc2NhbGVz
IGFyZSBlcXVhbC4KKyAgICBmbG9hdCBzY2FsZSA9IHRyYW5zZm9ybS5iKCkgPyBzdGQ6Omh5cG90
KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJhbnNmb3JtLmEoKTsKKyAgICBpZiAo
c2NhbGUgPCAxLjApIHsKKyAgICAgICAgLy8gVGhpcyBjb2RlIGFsd2F5cyBkcmF3cyBhIGxpbmUg
dGhhdCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdoLAorICAgICAgICAvLyB3aGljaCB0
ZW5kcyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBzbWFsbCBzY2FsZXMuIFRvIGNvdW50
ZXIgdGhpcworICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhhIGlzIGFwcGxpZWQgdG8gdGhlIHVu
ZGVybGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwgc2NhbGVzLgorICAgICAgICBzdGF0
aWMgY29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhhID0gMC40ZjsKKyAgICAgICAgZmxv
YXQgc2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA/IHNjYWxlIDogbWluaW11
bVVuZGVybGluZUFscGhhOworICAgICAgICBjb2xvciA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5KHNoYWRlKTsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50IGRldmljZVBvaW50ID0g
dHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgLy8gVmlzdWFsIG92ZXJm
bG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFsIHJvdW5kZi9jZWlsZi4gdmlzdWFs
T3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBvdmVyZmxvdyB2YWx1ZSBmb3IgdW5k
ZXJsaW5lIGRlY29yYXRpb24uCisgICAgRmxvYXRQb2ludCBkZXZpY2VPcmlnaW4gPSBGbG9hdFBv
aW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihkZXZpY2VQb2ludC55KCkpKTsKKyAg
ICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVyc2UoKSkKKyAgICAgICAgb3JpZ2lu
ID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9yaWdpbik7CisgICAgcmV0dXJuIEZs
b2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOwogfQog
CiBzdGF0aWMgSW50U2l6ZSBzY2FsZWRJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlKQpAQCAtNjM5LDE4NyArNTA4LDkgQEAgUmVmUHRy
PEltYWdlQnVmZmVyPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFJlY3QmIHIKICAgICByZXR1cm4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIocmVj
dCwgc2NhbGVGYWN0b3IoKSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSgpLCByZW5kZXJpbmdN
ZXRob2QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3Rl
bUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17
Ci0gICAgc3lzdGVtSW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKLX0KLQotSW1h
Z2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9h
dFJlY3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGltYWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVz
dWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uu
c2l6ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlvbigpKSk7Ci0gICAgcmV0dXJuIGRy
YXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3QsIGltYWdlUGFpbnRpbmdPcHRpb25z
KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29w
ZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1h
Z2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci19Ci0KLUltYWdl
RHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBj
b25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0
aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVk
KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7
Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAotICAgIEltYWdlOjpU
aWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxl
ICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewotICAgICAgICAvLyBKdXN0IGRvIGEg
c2NhbGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5l
ciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBv
bGF0aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0
aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9u
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0g
ICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLmxv
Z2ljYWxTaXplKCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQ
YWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGRy
YXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlLmxv
Z2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVy
cG9sYXRpb25RdWFsaXR5KCkpOwotICAgIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWlu
Z0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09w
dGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gaW1h
Z2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwotICAgIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZUxv
Z2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2FsU2l6ZSksIGltYWdlUGFpbnRp
bmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFn
ZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
Ci17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gaW1hZ2VMb2dp
Y2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwotICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1
ZmZlcihXVEZNb3ZlKGltYWdlKSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9n
aWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1
YWxpdHkoKSk7Ci0gICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92ZShpbWFnZSks
ICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0
ZXJSZXN1bHRzJiByZXN1bHRzKQotewotICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyLmFwcGx5KHNv
dXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMpOwotICAgIGlmICghcmVzdWx0KQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IHJlc3VsdC0+aW1h
Z2VCdWZmZXIoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBzY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZp
bHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7Ci0gICAgZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
ciwgcmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKLSAgICBzY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJbWFnZUJ1
ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2UuZHJhd1BhdHRlcm4oKnRoaXMs
IGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRk
Um91bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVj
dCkKLXsKLSAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKLSAgICAgICAgY2xpcE91dChyZWN0
LnJlY3QoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQYXRoIHBhdGg7Ci0gICAg
cGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKLSAgICBjbGlwT3V0KHBhdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVm
ZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKLXsKLSAgICBpbWFnZUJ1ZmZl
ci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi1JbnRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAg
IGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKLSAgICBzZXRD
b21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7Ci0gICAgZmlsbFJlY3QocmVjdCwgY29s
b3IpOwotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2aW91c09wZXJhdG9yKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0g
ICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpIHsKLSAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwotICAgICAgICBmaWxsUm91bmRlZFJl
Y3RJbXBsKHJlY3QsIGNvbG9yKTsKLSAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBv
c2l0ZU9wZXJhdGlvbigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmlsbFJlY3QocmVjdC5yZWN0
KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUmVjdChyZWN0KTsKLQot
ICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCi0gICAgICAgIHBhdGgu
YWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIHBhdGgu
YWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAotICAgIFdpbmRSdWxlIG9sZEZpbGxS
dWxlID0gZmlsbFJ1bGUoKTsKLSAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsK
LSAgICAKLSAgICBzZXRGaWxsUnVsZShXaW5kUnVsZTo6RXZlbk9kZCk7Ci0gICAgc2V0RmlsbENv
bG9yKGNvbG9yKTsKIAotICAgIGZpbGxQYXRoKHBhdGgpOwotICAgIAotICAgIHNldEZpbGxSdWxl
KG9sZEZpbGxSdWxlKTsKLSAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKLX0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgbV9zdGF0
ZS5jb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbjsKLSAgICBtX3N0YXRlLmJs
ZW5kTW9kZSA9IGJsZW5kTW9kZTsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKTsKLX0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwg
RmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBwZW5TdHlsZSkK
IHsKQEAgLTg1MCw3NyArNTQxLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVU
b1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIKICAgICB9CiB9
CiAKLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yKCkgY29uc3QKLXsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVm
aW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZSh0cmFuc2Zv
cm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci19Ci0gICAgCi1GbG9hdFNpemUgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdAotewotICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKLSAgICBhdXRvIHRyYW5zZm9ybWVkRGVzdFJlY3QgPSB0cmFuc2Zvcm0u
bWFwUmVjdChkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgp
IC8gc3JjUmVjdC5zaXplKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChj
b25zdCBQYXRoJiBwYXRoKQotewotICAgIGZpbGxQYXRoKHBhdGgpOwotICAgIHN0cm9rZVBhdGgo
cGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZUFzUGF0aChjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxs
aXBzZShlbGxpcHNlKTsKLSAgICBmaWxsUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewot
ICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgc3Ryb2tl
UGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5l
cywgU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0
aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmlu
dGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3ND
b250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgQ29sb3IgZHVtbXlDb2xvcjsKLSAgICByZXR1cm4g
Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChyZWN0LCBwcmludGlu
ZywgZHVtbXlDb2xvcik7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVM
aW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBib29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCi17Ci0gICAgRmxvYXRQb2ludCBvcmlnaW4g
PSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgZmxvYXQgdGhpY2tuZXNzID0gc3RkOjptYXgocmVjdC5o
ZWlnaHQoKSwgMC41Zik7Ci0gICAgaWYgKHByaW50aW5nKQotICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7Ci0KLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHgg
ZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCi0gICAgZmxvYXQg
c2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zv
cm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7Ci0gICAgaWYgKHNjYWxlIDwgMS4wKSB7Ci0gICAgICAg
IC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25lLXBp
eGVsIGxpbmUgaGlnaCwKLSAgICAgICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3Zlcndo
ZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVyIHRoaXMKLSAgICAgICAgLy8gZWZm
ZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0ZXh0
IGlzIGF0IHNtYWxsIHNjYWxlcy4KLSAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1V
bmRlcmxpbmVBbHBoYSA9IDAuNGY7Ci0gICAgICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBtaW5p
bXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1VbmRlcmxpbmVBbHBoYTsKLSAgICAg
ICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShzaGFkZSk7Ci0gICAg
fQotCi0gICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRyYW5zZm9ybS5tYXBQb2ludChyZWN0
LmxvY2F0aW9uKCkpOwotICAgIC8vIFZpc3VhbCBvdmVyZmxvdyBtaWdodCBvY2N1ciBoZXJlIGR1
ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMg
YWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVybGluZSBkZWNvcmF0aW9uLgotICAg
IEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2ludChyb3VuZGYoZGV2aWNlUG9pbnQu
eCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7Ci0gICAgaWYgKGF1dG8gaW52ZXJzZSA9IHRy
YW5zZm9ybS5pbnZlcnNlKCkpCi0gICAgICAgIG9yaWdpbiA9IGludmVyc2UudmFsdWUoKS5tYXBQ
b2ludChkZXZpY2VPcmlnaW4pOwotICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNp
emUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKLX0KLQogZmxvYXQgR3JhcGhpY3NDb250ZXh0
OjpkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aChmbG9hdCBzdHJva2VXaWR0aCkg
Y29uc3QKIHsKICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJva2VUaGlja25lc3MoKTsKQEAgLTk3
MiwxNSArNTkyLDQgQEAgVmVjdG9yPEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVy
TGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2lu
dDEsIHBvaW50MiB9OwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKQotewotICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3Vy
cmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKQotewotfQotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGZiOTVkZDI1YjI3MWRlYjlm
YTg1ZmYyZDlmMWY3NDcxNmEwNjZiYWUuLmIzOWNkODI0ODAwYTk0MjczMWY3NzRhYmQwYTk4Y2Rm
YmE3NGY4YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAs
NDkgKzMwLDE4IEBACiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNwYWNlLmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJHcmFw
aGljc1R5cGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKICNpbmNsdWRl
ICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFn
ZVBhaW50aW5nT3B0aW9ucy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQYXR0
ZXJuLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJS
ZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCi0jaWYgVVNFKENH
KQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2Vs
aWYgVVNFKENBSVJPKQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0
Q2Fpcm87Ci19Ci10eXBlZGVmIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0OwotI2Vsc2UKLXR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIkRJQlBpeGVsRGF0
YS5oIgotdHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKLSNpZiAhVVNFKENHKQotLy8gVUludDgg
aXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2UuaAotdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIFVJbnQ4OwotI2VuZGlmCi0jZW5kaWYKLQotLy8gWDExIGhlYWRlcnMgZGVmaW5lIGEgYnVu
Y2ggb2YgbWFjcm9zIHdpdGggY29tbW9uIHRlcm1zLCBpbnRlcmZlcmluZyB3aXRoIFdlYkNvcmUg
YW5kIFdURiBlbnVtIHZhbHVlcy4KLS8vIEFzIGEgd29ya2Fyb3VuZCwgd2UgZXhwbGljaXRseSB1
bmRlZiB0aGVtIGhlcmUuCi0jaWYgZGVmaW5lZChOb25lKQotI3VuZGVmIE5vbmUKLSNlbmRpZgot
I2lmIGRlZmluZWQoQmVsb3cpCi0jdW5kZWYgQmVsb3cKLSNlbmRpZgotI2lmIGRlZmluZWQoU3Vj
Y2VzcykKLSN1bmRlZiBTdWNjZXNzCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBBZmZpbmVUcmFuc2Zvcm07CkBAIC04Miw3ICs1MSw2IEBAIGNsYXNzIEZsb2F0Um91bmRl
ZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1lZGlhUGxh
eWVyOwogY2xhc3MgUm91bmRlZFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRHTDsKQEAgLTkx
LDE3NCArNTksMTIgQEAgY2xhc3MgU3lzdGVtSW1hZ2U7CiBjbGFzcyBUZXh0UnVuOwogY2xhc3Mg
VHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKLW5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7Ci1jbGFzcyBS
ZWNvcmRlcjsKLX0KLQotZW51bSBjbGFzcyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKLSAg
ICBGaWxsID0gMSA8PCAwLAotICAgIFN0cm9rZSA9IDEgPDwgMSwKLX07Ci11c2luZyBUZXh0RHJh
d2luZ01vZGVGbGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwotCi0vLyBMZWdhY3kg
c2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNo
YWRvdy4KLS8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgotZW51
bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7Ci0gICAgRGVmYXVsdCwKLSAgICBMZWdh
Y3kKLX07Ci0KLWVudW0gU3Ryb2tlU3R5bGUgewotICAgIE5vU3Ryb2tlLAotICAgIFNvbGlkU3Ry
b2tlLAotICAgIERvdHRlZFN0cm9rZSwKLSAgICBEYXNoZWRTdHJva2UsCi0gICAgRG91YmxlU3Ry
b2tlLAotICAgIFdhdnlTdHJva2UsCi19OwotCi1zdHJ1Y3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgewotICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4X3QgewotICAgICAgICBUZXh0Q2hlY2tp
bmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAotICAgICAgICBTcGVsbGluZywKLSAg
ICAgICAgR3JhbW1hciwKLSAgICAgICAgQXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKLSAgICAg
ICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAgfSBtb2RlOwotICAgIGJvb2wgc2hvdWxkVXNl
RGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBkZWNvZGUoRGVj
b2RlciYpOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgbW9kZTsKLSAgICBlbmNvZGVyIDw8IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxp
bmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQotewotICAgIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9kZTsKLSAgICBkZWNvZGVyID4+IG1vZGU7
Ci0gICAgaWYgKCFtb2RlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3Rk
OjpvcHRpb25hbDxib29sPiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLSAgICBkZWNvZGVyID4+
IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmICghc2hvdWxkVXNlRGFya0FwcGVhcmFu
Y2UpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKm1vZGUs
ICpzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9fTsKLX0KLQotc3RydWN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewotICAgIFdFQkNP
UkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgfkdy
YXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0U3Rh
dGUmJik7Ci0KLSAgICBlbnVtIENoYW5nZSA6IHVpbnQzMl90IHsKLSAgICAgICAgU3Ryb2tlR3Jh
ZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAotICAgICAgICBTdHJva2VQ
YXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCi0gICAgICAgIEZpbGxH
cmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwKLSAgICAgICAgRmls
bFBhdHRlcm5DaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLAotICAgICAgICBT
dHJva2VUaGlja25lc3NDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDQsCi0gICAgICAg
IFN0cm9rZUNvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNSwKLSAgICAg
ICAgU3Ryb2tlU3R5bGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA2LAotICAg
ICAgICBGaWxsQ29sb3JDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCi0g
ICAgICAgIEZpbGxSdWxlQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwK
LSAgICAgICAgU2hhZG93Q2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA5
LAotICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSAgICAgICAgICAgPSAxIDw8
IDEwLAotICAgICAgICBBbHBoYUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAx
IDw8IDExLAotICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UgICAgICAgICAgICAgICAg
PSAxIDw8IDEyLAotICAgICAgICBCbGVuZE1vZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDEzLAotICAgICAgICBUZXh0RHJhd2luZ01vZGVDaGFuZ2UgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDE0LAotICAgICAgICBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDE1LAotICAgICAgICBTaG91bGRTbW9vdGhGb250c0NoYW5nZSAgICAg
ICAgICAgICAgICAgPSAxIDw8IDE2LAotICAgICAgICBTaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHNDaGFuZ2UgICAgICAgPSAxIDw8IDE3LAotICAgICAgICBEcmF3THVtaW5hbmNlTWFza0NoYW5n
ZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE4LAotICAgICAgICBJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlICAgICAgICAgPSAxIDw8IDE5LAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NV
UFBPUlQpCi0gICAgICAgIFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlICAgICAgICAgICAgICAgICA9
IDEgPDwgMjAsCi0jZW5kaWYKLSAgICB9OwotICAgIHVzaW5nIFN0YXRlQ2hhbmdlRmxhZ3MgPSBP
cHRpb25TZXQ8Q2hhbmdlPjsKLQotICAgIHZvaWQgbWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwot
Ci0gICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKLSAgICBSZWZQdHI8UGF0dGVy
bj4gc3Ryb2tlUGF0dGVybjsKLSAgICAKLSAgICBSZWZQdHI8R3JhZGllbnQ+IGZpbGxHcmFkaWVu
dDsKLSAgICBSZWZQdHI8UGF0dGVybj4gZmlsbFBhdHRlcm47Ci0KLSAgICBGbG9hdFNpemUgc2hh
ZG93T2Zmc2V0OwotCi0gICAgQ29sb3Igc3Ryb2tlQ29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKLSAg
ICBDb2xvciBmaWxsQ29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKLSAgICBDb2xvciBzaGFkb3dDb2xv
cjsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwot
ICAgIEFmZmluZVRyYW5zZm9ybSBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLQotICAgIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcyB7IDAgfTsKLSAgICBmbG9hdCBzaGFkb3dCbHVyIHsgMCB9Owot
ICAgIGZsb2F0IGFscGhhIHsgMSB9OwotCi0gICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUgeyBT
b2xpZFN0cm9rZSB9OwotICAgIFdpbmRSdWxlIGZpbGxSdWxlIHsgV2luZFJ1bGU6Ok5vblplcm8g
fTsKLQotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSB7IFRleHREcmF3
aW5nTW9kZTo6RmlsbCB9OwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
IHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsKLSAgICBCbGVuZE1vZGUgYmxlbmRN
b2RlIHsgQmxlbmRNb2RlOjpOb3JtYWwgfTsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgfTsK
LSAgICBTaGFkb3dSYWRpdXNNb2RlIHNoYWRvd1JhZGl1c01vZGUgeyBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0IH07Ci0KLSAgICBib29sIHNob3VsZEFudGlhbGlhcyA6IDE7Ci0gICAgYm9vbCBz
aG91bGRTbW9vdGhGb250cyA6IDE7Ci0gICAgYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMgOiAxOwotICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgOiAxOwotICAgIGJvb2wg
ZHJhd0x1bWluYW5jZU1hc2sgOiAxOwotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0g
ICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSA6IDE7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZSB7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uo
KSA9IGRlZmF1bHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBmbGFncykKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgICAgICAsIG1fY2hhbmdl
RmxhZ3MoZmxhZ3MpCi0gICAgewotICAgIH0KLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmKSBjb25zdDsKLQotICAgIHZvaWQgYWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgZHVtcChXVEY6
OlRleHRTdHJlYW0mKSBjb25zdDsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7
Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFn
czsKLX07Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwotCiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOiAgIAorICAgIGZyaWVuZCBjbGFzcyBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KCkg
PSBkZWZhdWx0OworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dChj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7
IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAg
ICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CkBAIC0yNzAsMjcwICs3NiwyNzMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpbnZh
bGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIAotICAgIC8vIENvbnRleHQgU3RhdGUKKyAgICBib29sIGNvbnRlbmZ1bFBh
aW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkOyB9
CisgICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW50ZnVsUGFp
bnREZXRlY3RlZCA9IHRydWU7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykgeyBtX3N0
YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSk7IH0KLSAgICBmbG9h
dCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVz
czsgfQorICAgIC8vIENvbnRleHQgU3RhdGUKIAotICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOyBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9
Ci0gICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
cm9rZVN0eWxlOyB9CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgbWVyZ2VTdGF0ZUNoYW5nZXMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1fc3RhdGUubWVyZ2VDaGFuZ2VzKG90aGVy
KTsgfQorICAgIHZvaWQgbWVyZ2VTdGF0ZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBvdGhlcikgeyBtX3N0YXRlLm1lcmdlRGlmZnMob3RoZXIpOyB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgY29uc3QgQ29sb3Im
IHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvcjsgfQorICAg
IEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmdldENUTSgp
OyB9CisgICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkg
eyBtX3N0YXRlLnNldENUTShjdG0sIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIGNv
bmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkgeyBzZXRDVE0oZ2V0Q1RNKCkgKiBj
dG0pOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgeyBzZXRDVE0oZ2V0
Q1RNKCkudHJhbnNsYXRlKHgsIHkpKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQor
ICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgp
LCBwLnkoKSk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkgeyBzZXRDVE0o
Z2V0Q1RNKCkuc2NhbGUoc3gsIHN5KSk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2Nh
bGUocywgcyk7IH0KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyBzY2Fs
ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CisgICAgdm9pZCByb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpIHsgc2V0Q1RNKGdldENUTSgpLnJvdGF0ZShyYWQyZGVnKGFuZ2xlSW5S
YWRpYW5zKSkpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZVBhdHRlcm4o
UmVmPFBhdHRlcm4+JiYpOwotICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KKyAgICBjb25zdCBDb2xvciYgZmls
bENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5jb2xvcigpOyB9Cisg
ICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJy
dXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5wYXR0ZXJuKCk7IH0KKyAgICBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGZpbGxTcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmls
bEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldEZpbGxDb2xvcihjb2xvciwgbV9sYXN0QXBwbGll
ZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFk
aWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0
YXRlLnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0pOyB9
CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0RmlsbFBh
dHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyB9CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQqIHN0cm9rZUdyYWRpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQorICAgIFdpbmRSdWxl
IGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsUnVsZSgpOyB9CisgICAgdm9p
ZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLnNldEZpbGxSdWxlKGZp
bGxSdWxlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldEZpbGxSdWxlKFdp
bmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuZmlsbFJ1bGUgPSBmaWxsUnVsZTsgZGlkVXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKTsgfQot
ICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsUnVsZTsg
fQorICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
c3Ryb2tlQnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRpZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLmdyYWRpZW50KCk7IH0KKyAgICBQ
YXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVz
aCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlU3BhY2VU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkuc3BhY2VUcmFu
c2Zvcm0oKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7
IG1fc3RhdGUuc2V0U3Ryb2tlQ29sb3IoY29sb3IsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAg
ICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUu
c2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIGdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pOyB9CisgICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4s
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblNwYWNlVHJhbnNmb3JtID0geyB9KSB7IG1f
c3RhdGUuc2V0U3Ryb2tlUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pLCBwYXR0ZXJuU3BhY2VUcmFu
c2Zvcm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBD
b2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmZpbGxDb2xvcjsgfQorICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVRoaWNr
bmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zZXRTdHJva2VUaGlja25lc3ModGhpY2tu
ZXNzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQYXR0ZXJuKiBmaWxsUGF0dGVybigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCk7IH0KKyAgICBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlU3R5bGUoKTsg
fQorICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5z
ZXRTdHJva2VTdHlsZShzdHlsZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mID0geyB9KTsKLSAgICBHcmFkaWVudCogZmlsbEdyYWRpZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7IH0KKyAgICBMaW5lQ2FwIGxpbmVD
YXAoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVDYXAoKTsgfQorICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsgbV9zdGF0ZS5zZXRMaW5lQ2FwKGxpbmVDYXAsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0K
LSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIGNvbnN0IExpbmVEYXNoIGxpbmVEYXNo
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5saW5lRGFzaCgpOyB9CisgICAgdm9pZCBzZXRMaW5l
RGFzaChMaW5lRGFzaCYmIGxpbmVEYXNoKSB7IG1fc3RhdGUuc2V0TGluZURhc2goV1RGTW92ZShs
aW5lRGFzaCksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hvdWxkQW50
aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0g
c2hvdWxkQW50aWFsaWFzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxkQW50aWFsaWFz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXM7IH0KKyAgICBMaW5lSm9p
biBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubGluZUpvaW4oKTsgfQorICAgIHZv
aWQgc2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pIHsgbV9zdGF0ZS5zZXRMaW5lSm9pbihs
aW5lSm9pbiwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXRTaG91bGRTbW9v
dGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9u
dHMgPSBzaG91bGRTbW9vdGhGb250czsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxk
U21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzOyB9
CisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubWl0ZXJMaW1p
dCgpOyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpIHsgbV9zdGF0
ZS5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAg
IC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVhbnRpemF0aW9uIGJlY2F1c2UgaXQg
aW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5nIGdseXBocy4KLSAgICAvLyBJbiBz
b21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkg
b3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IGRpZFVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsg
fQorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuY29tcG9zaXRlTW9kZSgpOyB9CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbjsgfQorICAg
IEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBjb21wb3NpdGVNb2RlKCkuYmxl
bmRNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVNb2RlKENvbXBvc2l0ZU1vZGUgY29tcG9z
aXRlTW9kZSkgeyBtX3N0YXRlLnNldENvbXBvc2l0ZU1vZGUoY29tcG9zaXRlTW9kZSwgbV9sYXN0
QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZU9wZXJhdG9yIG9wZXJhdGlvbikgeyBzZXRDb21wb3NpdGVNb2RlKHsgb3BlcmF0aW9uLCBCbGVu
ZE1vZGU6Ok5vcm1hbCB9KTsgfQogCi0gICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpOyB9Ci0gICAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsgfQorICAgIGNvbnN0IERyb3BT
aGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyb3BTaGFkb3coKTsg
fQorICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93
KCkub2Zmc2V0OyB9CisgICAgZmxvYXQgc2hhZG93Qmx1cigpIGNvbnN0IHsgcmV0dXJuIGRyb3BT
aGFkb3coKS5ibHVyUmFkaXVzOyB9CisgICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29u
c3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmNvbG9yOyB9CisgICAgdm9pZCBzZXREcm9wU2hhZG93
KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpIHsgbV9zdGF0ZS5zZXREcm9wU2hhZG93KGRy
b3BTaGFkb3csIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIGNsZWFyU2hhZG93KCkg
eyBzZXREcm9wU2hhZG93KHsgfSk7IH0KIAotICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEp
IHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOyB9Ci0gICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29u
c3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBoYXNCbHVy
cmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmlzQmx1cnJlZCgpOyB9Cisg
ICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93KCkuaGFzT3V0c2V0
cygpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0KKyAgICBmbG9hdCBhbHBoYSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGEoKTsgfQorICAgIHZvaWQgc2V0QWxwaGEoZmxv
YXQgYWxwaGEpIHsgbV9zdGF0ZS5zZXRBbHBoYShhbHBoYSwgbV9sYXN0QXBwbGllZFN0YXRlKTsg
fQogCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNr
KSB7IG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFzazsgZGlkVXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNr
Q2hhbmdlKTsgfQotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSgpOyB9CisgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpIHsgbV9z
dGF0ZS5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2Rl
KFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBt
b2RlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERy
YXdpbmdNb2RlQ2hhbmdlKTsgfQotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlOyB9CisgICAgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS50ZXh0RHJhd2luZ01vZGUoKTsgfQorICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHRE
cmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSkgeyBtX3N0YXRlLnNldFRleHREcmF3aW5n
TW9kZSh0ZXh0RHJhd2luZ01vZGUsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNv
bnN0IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpOwotICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBj
b25zdDsKKyAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
c2hvdWxkQW50aWFsaWFzKCk7IH0KKyAgICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sIHNo
b3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNldFNob3VsZEFudGlhbGlhcyhzaG91bGRBbnRpYWxp
YXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBi
b29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9z
dGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkg
Y29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsg
fQorICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNo
b3VsZFNtb290aEZvbnRzKCk7IH0KKyAgICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wg
c2hvdWxkU21vb3RoRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91bGRTbW9vdGhGb250cyhzaG91bGRT
bW9vdGhGb250cywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0jaWYgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNl
OyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0Fw
cGVhcmFuY2VDaGFuZ2UpOyB9Ci0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0KLSNlbmRpZgorICAgIC8vIE5vcm1h
bGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMg
dGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5nIGdseXBocy4KKyAgICAvLyBJbiBzb21lIGNhc2Vz
IHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9m
IHRoZSBnbHlwaHMuCisgICAgYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpOyB9CisgICAg
dm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2
aXJ0dWFsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKyAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpOyB9CisgICAgdm9pZCBzZXRT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7IG1f
c3RhdGUuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMs
IG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyk7CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
ZHJhd0x1bWluYW5jZU1hc2soKTsgfQorICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9v
bCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLnNldERyYXdMdW1pbmFuY2VNYXNrKGRyYXdM
dW1pbmFuY2VNYXNrLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICAvLyBDYWxsZWQgKmFm
dGVyKiBhbnkgY2hhbmdlIHRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOyBnZW5lcmFsbHkgdXNlZCB0
byBwcm9wYWdhdGUgY2hhbmdlcwotICAgIC8vIHRvIHRoZSBwbGF0Zm9ybSBjb250ZXh0J3Mgc3Rh
dGUuCi0gICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpID0gMDsKKyNp
ZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2Uo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlKCk7IH0KKyAgICB2b2lk
IHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS5z
ZXRVc2VEYXJrQXBwZWFyYW5jZSh1c2VEYXJrQXBwZWFyYW5jZSwgbV9sYXN0QXBwbGllZFN0YXRl
KTsgfQorI2VuZGlmCiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7Ci0gICAgCisgICAgdm9p
ZCBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdGF0
ZUNoYW5nZXMoKSA9IDA7CiAjaWYgVVNFKENHKQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2Ug
cmVhbGx5IGJlIHB1YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0aG9kcz8KLSAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQ
YXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7
CisjZW5kaWYKIAotICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFrZSB0aGlzIGEgd2h5IGluc3RlYWQg
b2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNyb3NzLXBsYXRmb3JtPwotICAgIHZp
cnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9h
dFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUg
c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBH
cmFwaGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBv
ZmYgdGhlIGNvbnRleHQ/Ci0gICAgdmlydHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0
KGJvb2wpID0gMDsKLSNlbmRpZgorICAgIC8vIFRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgZGV2
aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFraW5nIHRoZSBjb250ZXh0IGNhcGFi
bGUgb2YKKyAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVsIGNvbnRleHQgZm9yIGEgSGlEUEkg
ZW52aXJvbm1lbnQuCisgICAgdmlydHVhbCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KIAotICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZDsgfQorICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKIAotICAgIC8vIFBpeGVsIFNuYXBw
aW5nCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25z
dCB7IHJldHVybiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpICYmIG1fdHJhbnNwYXJlbmN5
TGF5ZXJDb3VudDsgfQogCi0gICAgZW51bSBSb3VuZGluZ01vZGUgewotICAgICAgICBSb3VuZEFs
bFNpZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMKLSAgICB9OwotICAgIHZp
cnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91
bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQ
b2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7CisgICAgLy8gQ2xpcHBp
bmcKIAotICAgIC8vIFNoYXBlcworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYp
OwogCi0gICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwgZG8gYm90aCBzdHJva2luZyBhbmQg
ZmlsbGluZy4KLSAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRyYXdSZWN0KCksIHdoaWNoIGZpbGxz
IHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwotICAgIC8vIHVzaW5nIGEgMS1waXhlbCBzdHJv
a2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0aGUgY29ycmVjdAotICAgIC8vIHN0
cm9rZSBjb2xvcikuCi0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
bGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29s
b3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQ
YXRoJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25z
dCBQYXRoJik7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgeyByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChtX3N0YXRlLmNsaXBCb3VuZHMoKSk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgZmlsbEVsbGlwc2VBc1BhdGgo
ZWxsaXBzZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpIHsgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsgfQorICAgIC8vIFNo
YXBlcworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6
Tm9ybWFsKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYpOwogCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7
Ci0KLSAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRo
KGVsbGlwc2UpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNv
bnN0IFBhdGgmKSA9IDA7CiAKLSAgICBJbnRTaXplIGNvbXBhdGlibGVJbWFnZUJ1ZmZlclNpemUo
Y29uc3QgRmxvYXRTaXplJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSA9IDA7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
c3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKLSAgICBXRUJDT1JFX0VY
UE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRl
cmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIC8vIFRoZXNlIGRyYXcgbWV0
aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxpbmcuCisgICAgLy8gRklYTUU6IC4u
LmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGljaCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9r
ZXMKKyAgICAvLyB1c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9y
ZGVycyAob2YgdGhlIGNvcnJlY3QKKyAgICAvLyBzdHJva2UgY29sb3IpLgogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9k
PiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQ
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwogCi0gICAgdmlydHVh
bCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2Vs
ZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEp
ID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aXJ0dWFsIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBj
b25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6
RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3Jp
ZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICAvLyBGb2N1cyBSaW5ncwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNv
bnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAg
Ly8gRklYTUU6IENhbiB3ZSBoaWRlIHRoZXNlIGluIHRoZSBDRyBpbXBsZW1lbnRhdGlvbj8gT3Ig
ZWxzZXdoZXJlPworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBj
b25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywg
Y29uc3QgQ29sb3ImKSA9IDA7CisjZW5kaWYKIAorICAgIC8vIEltYWdlcwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2lu
dCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4s
IGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJik7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAw
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0lt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdF
QkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdl
T3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdS
ZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1h
Z2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXpl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUs
IEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3U3lzdGVtSW1h
Z2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVy
bihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogI2VuZGlmCi0KLSAgICAvLyBDbGlwcGluZwot
Ci0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKLQor
ICAgIAogICAgIC8vIFRleHQKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgRmxvYXRTaXpl
IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBz
dGQ6Om51bGxvcHQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290
aGluZ01vZGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5n
JiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
ID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMs
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIHsKLSAgICAgICAgZHJhd0dseXBocyhmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7
Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzQW5kQ2Fj
aGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dFNtb290aGluZ01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8g
PSBzdGQ6Om51bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0JpZGlUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFp
bnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY29tcHV0
ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0
JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlk
U3Ryb2tlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAotICAgIC8v
IFRyYW5zcGFyZW5jeSBMYXllcnMKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5z
cGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+
IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0
JiwgYm9vbCBwcmludGluZyk7CiAKLSAgICAvLyBGb2N1cyBSaW5ncworICAgIC8vIENvbXBhdGli
bGUgSW1hZ2VCdWZmZXIKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIC8vIEZJWE1FOiBD
YW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50YXRpb24/IE9yIGVsc2V3aGVyZT8K
LSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3Im
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9y
JikgPSAwOwotI2VuZGlmCisgICAgSW50U2l6ZSBjb21wYXRpYmxlSW1hZ2VCdWZmZXJTaXplKGNv
bnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwogCi0gICAgLy8gVHJhbnNmb3JtcworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAgICB2b2lkIHNjYWxlKGZsb2F0IHMp
IHsgc2NhbGUoeyBzLCBzIH0pOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5z
KSA9IDA7Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHRyYW5z
bGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9Ci0gICAgdm9pZCB0cmFuc2xhdGUo
Y29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54KCksIHAueSgpKTsgfQotICAgIHZp
cnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgPSAwOworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVu
ZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
ZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBjb25jYXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
UmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlv
bmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCi0gICAgZW51bSBJ
bmNsdWRlRGV2aWNlU2NhbGUgeyBEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlLCBQb3NzaWJs
eUluY2x1ZGVEZXZpY2VTY2FsZSB9OwotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENU
TShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qg
PSAwOworICAgIC8vIFBpeGVsIFNuYXBwaW5nCiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGxp
ZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNvbnRleHQsIG1ha2luZyB0aGUgY29u
dGV4dCBjYXBhYmxlIG9mCi0gICAgLy8gYWN0aW5nIGFzIGEgYmFzZS1sZXZlbCBjb250ZXh0IGZv
ciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3IpOyB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OworICAgIGVudW0gUm91bmRpbmdNb2RlIHsK
KyAgICAgICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25z
CisgICAgfTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQ
b2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUp
OwogCiAgICAgLy8gTGlua3MKIAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlu
a3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIHNldFVSTEZv
clJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UmVjdCYp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5n
JiwgY29uc3QgRmxvYXRQb2ludCYpIHsgfQogCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW50
ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBDb250ZW50ZnVs
IFBhaW50IERldGVjdGlvbgorI2lmIFVTRShDRykKKyAgICAvLyBGSVhNRTogQ2FuIHdlIG1ha2Ug
dGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRoZW4gaGF2ZSBpdCBleGlzdCBjcm9z
cy1wbGF0Zm9ybT8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSB7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRl
bnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRl
Y3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAv
LyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBwYXJh
bWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/CisgICAgdmlydHVhbCB2b2lk
IHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIHsgfQorI2VuZGlmCiAKICAgICAvLyBGSVhN
RTogTm90aGluZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBoZXJlLCBhbmQgc2hvdWxkIGJlIG1v
dmVkIGVsc2V3aGVyZS4KICNpZiBPUyhXSU5ET1dTKQpAQCAtNTQ2LDEwICszNTUsNyBAQCBwdWJs
aWM6CiAgICAgLy8gcHV0IGNvZGUgc2hhcmVkIGJldHdlZW4gV2luZG93cyBDRyBhbmQgV2luZG93
cyBDYWlybyBiYWNrZW5kcy4KICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsg
fQogI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzVHJhbnNwYXJl
bmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCisgICAgCiBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHN0
cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7CkBAIC01NjEsMTkxICszNjcsMTcg
QEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IGRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9yUGF0dGVy
bkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNv
bnN0OwogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhi
b29sIGlzVmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0aCwgRmxvYXRQb2ludCBwb2ludDEs
IEZsb2F0UG9pbnQgcG9pbnQyKSBjb25zdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1f
c3RhdGU7Ci0KIHByaXZhdGU6CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5
TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGUgbV9zdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBtX2xh
c3RBcHBsaWVkU3RhdGU7CiAgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0
YWNrOwogCiAgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsgMCB9OwogICAg
IGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9OwogCi1jbGFzcyBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKLSAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0gICAgewotICAg
ICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7
Ci0gICAgfQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgbV9jb250ZXh0LnJlc3Rv
cmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgICAg
IG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgcmVzdG9yZSgpCi0g
ICAgewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29udGV4
dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKLSAgICB9Ci0g
ICAgCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29u
dGV4dDsgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAg
IGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KLWNsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2Nv
cGUgewotcHVibGljOgotICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKLSAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX2FscGhhKGFscGhhKQotICAgICAgICAs
IG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQotICAgIHsKLSAgICAgICAgaWYgKGJlZ2luTGF5ZXIp
Ci0gICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQotICAgIHsKLSAg
ICAgICAgbV9hbHBoYSA9IGFscGhhOwotICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihtX2FscGhhKTsKLSAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
YmVnYW5MYXllcikKLSAgICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAg
ICBmbG9hdCBtX2FscGhhOwotICAgIGJvb2wgbV9iZWdhbkxheWVyOwotfTsKLQotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgewotcHVibGljOgotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNr
U2l6ZSgpKQotICAgIHsgfQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hl
Y2tlcigpCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0LnN0YWNrU2l6ZSgpICE9IG1fc3Rh
Y2tTaXplKQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQgJXAgc3Rh
Y2sgY2hhbmdlZCBieSAlZCIsICZtX2NvbnRleHQsIChpbnQpbV9jb250ZXh0LnN0YWNrU2l6ZSgp
IC0gKGludCltX3N0YWNrU2l6ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dCYgbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwotfTsKLQotY2xhc3Mg
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBJ
bnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCi0g
ICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQotICAgICAgICAsIG1f
Y3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpCi0gICAgICAgICwgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQo
aW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSAhPSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVs
dCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBpbnRlcnBvbGF0aW9uUXVhbGl0
eVRvVXNlKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2Vk
KQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKTsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBJ
bnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1YWxpdHk+IGludGVycG9sYXRpb25R
dWFsaXR5KQotICAgICAgICA6IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihncmFwaGlj
c0NvbnRleHQsIGludGVycG9sYXRpb25RdWFsaXR5ID8gaW50ZXJwb2xhdGlvblF1YWxpdHkudmFs
dWUoKSA6IGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAg
ewotICAgIH0KLQotICAgIH5JbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoKQotICAgIHsK
LSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAg
bV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX2N1cnJlbnRJ
bnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9jdXJy
ZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgYm9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlZDsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotbmFtZXNwYWNlIFdURiB7
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU6Ok1vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlLAotICAgIFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRo
QWx0ZXJuYXRpdmVzLAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
OjpTcGVsbGluZywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6
R3JhbW1hciwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0
b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUdyYWRpZW50Q2hhbmdlLAotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlLAotICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsR3JhZGllbnRD
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZp
bGxQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUNvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZUNoYW5nZSwKLSAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbENvbG9yQ2hhbmdl
LAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsUnVs
ZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
U2hhZG93Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGFDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QmxlbmRNb2Rl
Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpU
ZXh0RHJhd2luZ01vZGVDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhc0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsCi0gICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250c0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFu
Z2UKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgICAgICAsIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlCi0jZW5k
aWYKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpT
dHJva2VTdHlsZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29y
ZTo6U3Ryb2tlU3R5bGUsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlLAotICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VT
dHlsZTo6RG90dGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEYXNoZWRTdHJv
a2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZSwKLSAgICBXZWJDb3Jl
OjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZT4gewotICAgIHVzaW5nIHZhbHVl
cyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZSwKLSAgICAg
ICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAotICAgICAgICBXZWJDb3JlOjpUZXh0
RHJhd2luZ01vZGU6OlN0cm9rZQotICAgID47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmM5ZTU4MWRjYzIyMDNhZDIxYTdmNDhmMzU3ODE0ZGVmYzNjZmYwOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dFN0YXRlLmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0U3RhdGUuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQ2hhbmdlRmxh
Z3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAg
OiBtX2NsaXBCb3VuZHMoaW5pdGlhbENUTS5tYXBSZWN0KGluaXRpYWxDbGlwKSkKKyAgICAsIG1f
Y2hhbmdlRmxhZ3MoY2hhbmdlRmxhZ3MpCisgICAgLCBtX2N0bShpbml0aWFsQ1RNKQoreworfQor
CitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXBCb3VuZHMoKSBjb25zdAorewor
ICAgIGlmIChhdXRvIGludmVyc2UgPSBtX2N0bS5pbnZlcnNlKCkpCisgICAgICAgIHJldHVybiBp
bnZlcnNlLT5tYXBSZWN0KG1fY2xpcEJvdW5kcyk7CisKKyAgICAvLyBJZiB0aGUgQ1RNIGlzIG5v
dCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlY3QuCisgICAgLy8gVGhpcyBtYXRj
aGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9ybSBiZWhhdmlvci4KKyAgICByZXR1
cm4gbV9jbGlwQm91bmRzOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpoYXNPbmx5
UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDaGFuZ2VG
bGFncyBwcmltaXRpdmVDaGFuZ2VGbGFncyB7IENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCBDaGFu
Z2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6OkZpbGxCcnVzaCB9OworCisgICAgaWYgKG1fY2hhbmdl
RmxhZ3MgIT0gKG1fY2hhbmdlRmxhZ3MgJiBwcmltaXRpdmVDaGFuZ2VGbGFncykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKENoYW5nZTo6
U3Ryb2tlQnJ1c2gpICYmICFtX3N0cm9rZUJydXNoLmlzUHJpbWl0aXZlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKENoYW5nZTo6Rmls
bEJydXNoKSAmJiAhbV9maWxsQnJ1c2guaXNQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpCit7CisgICAg
YXV0byBtZXJnZUNoYW5nZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG90aGVyLm1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoY2hhbmdlKSkgeworICAgICAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gb3RoZXIuKnBy
b3BlcnR5OworICAgICAgICAgICAgbV9jaGFuZ2VGbGFncy5hZGQoY2hhbmdlKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBBU1NFUlQobV9jbGlwQm91bmRzID09IG90aGVyLm1fY2xpcEJvdW5k
cyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisKKyAgICBtZXJnZUNoYW5nZShD
aGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpGaWxsUnVsZSwgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisK
KyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKTsKKyAgICBtZXJnZUNoYW5nZShD
aGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VT
dHlsZSwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VT
dHlsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXApOworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZUpvaW4s
ICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4p
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCk7CisKKyAgICBtZXJnZUNoYW5n
ZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RHJvcFNo
YWRvdywgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNo
YWRvdyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhKTsKKyAgICBtZXJnZUNoYW5n
ZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdlQ2hhbmdlKENo
YW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U2hvdWxk
QW50aWFsaWFzLCAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxk
QW50aWFsaWFzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsK
KyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7Cisg
ICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisgICAgbWVy
Z2VDaGFuZ2UoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsK
KyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZURpZmZzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikKK3sKKyAgICBhdXRvIG1lcmdlRGlmZiA9IFsm
XShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsK
KyAgICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSAhPSBvdGhlci4qcHJvcGVydHkpIHsKKyAgICAg
ICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9wZXJ0eTsKKyAgICAgICAgICAgIG1f
Y2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbWVyZ2VE
aWZmKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2N0bSk7CisgICAgCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbEJydXNoLCAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7Cisg
ICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0
cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJv
a2VCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVy
Z2VEaWZmKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVD
YXAsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2Fw
KTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6
OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9s
aW5lSm9pbik7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisgICAgbWVyZ2VE
aWZmKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkRyb3BTaGFk
b3csICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93
KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2lt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlRleHREcmF3
aW5nTW9kZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2lu
Z01vZGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7CisgICAgbWVy
Z2VEaWZmKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTaGFkb3dz
SWdub3JlVHJhbnNmb3JtcywgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNr
LCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpV
c2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNl
RGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBzdGF0ZUNo
YW5nZU5hbWUoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSBjaGFuZ2UpCit7CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IHN0YXRlQ2hhbmdlTmFtZXNbXSA9IHsKKyAgICAgICAgImN0
bSIsCisKKyAgICAgICAgImZpbGwtYnJ1c2giLAorICAgICAgICAiZmlsbC1ydWxlIiwKKworICAg
ICAgICAic3Ryb2tlLWJydXNoIiwKKyAgICAgICAgInN0cm9rZS10aGlja25lc3MiLAorICAgICAg
ICAic3Ryb2tlLXN0eWxlIiwKKworICAgICAgICAibGluZS1jYXAiLAorICAgICAgICAibGluZS1k
YXNoIiwKKyAgICAgICAgImxpbmUtam9pbiIsCisgICAgICAgICJtaXRlci1saW1pdCIsCisKKyAg
ICAgICAgImNvbXBvc2l0ZS1tb2RlIiwKKyAgICAgICAgImRyb3Atc2hhZG93IiwKKworICAgICAg
ICAiYWxwaGEiLAorICAgICAgICAiaW1hZ2UtaW50ZXJwb2xhdGlvbi1xdWFsaXR5IiwKKyAgICAg
ICAgInRleHQtZHJhd2luZy1tb2RlIiwKKworICAgICAgICAic2hvdWxkLWFudGlhbGlhcyIsCisg
ICAgICAgICJzaG91bGQtc21vb3RoLWZvbnRzIiwKKyAgICAgICAgInNob3VsZC1zdWJwaXhlbC1x
dWFudGl6ZS1mb250cyIsCisgICAgICAgICJzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIiwKKyAg
ICAgICAgImRyYXctbHVtaW5hbmNlLW1hc2siCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9S
VCkKKyAgICAgICAgLCAidXNlLWRhcmstYXBwZWFyYW5jZSIKKyNlbmRpZgorICAgIH07CisKKyAg
ICB1bnNpZ25lZCBtYXNrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYW5nZSk7CisgICAgQVNT
RVJUKCEoKG1hc2sgLSAxKSAmIG1hc2spKTsKKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihsb2cyKG1hc2spKTsKKyAgICByZXR1cm4gc3RhdGVDaGFuZ2VO
YW1lc1tpbmRleF07Cit9CisKK1RleHRTdHJlYW0mIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpkdW1w
KFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGF1dG8gZHVtcCA9IFsmXShDaGFuZ2UgY2hh
bmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHksIGNvbnN0IFN0cmluZyYg
bmFtZSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQorICAg
ICAgICAgICAgdHMuZHVtcFByb3BlcnR5KG5hbWUsIHRoaXMtPipwcm9wZXJ0eSk7CisgICAgfTsK
KworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdlLWZsYWdzIiwgbV9jaGFuZ2VGbGFncyk7CisK
KyAgICBkdW1wKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9jdG0sICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFu
Z2VOYW1lKENoYW5nZTo6Q1RNKSk7CisKKyAgICBkdW1wKENoYW5nZTo6RmlsbEJydXNoLCAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gsICAgICAg
ICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6RmlsbEJydXNoKSk7CisgICAg
ZHVtcChDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFt
ZShDaGFuZ2U6OkZpbGxSdWxlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgICAg
ICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U3Ryb2tlQnJ1c2gpKTsKKyAg
ICBkdW1wKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MsICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZVN0
eWxlLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5
bGUsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlN0cm9rZVN0eWxl
KSk7CisKKyAgICBkdW1wKENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUNhcCkpOworICAgIGR1bXAoQ2hhbmdlOjpMaW5lRGFz
aCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNo
LCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpMaW5lRGFzaCkp
OworICAgIGR1bXAoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNo
YW5nZU5hbWUoQ2hhbmdlOjpMaW5lSm9pbikpOworICAgIGR1bXAoQ2hhbmdlOjpNaXRlckxpbWl0
LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQs
ICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpNaXRlckxpbWl0KSk7
CisKKyAgICBkdW1wKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgc3RhdGVD
aGFuZ2VOYW1lKENoYW5nZTo6Q29tcG9zaXRlTW9kZSkpOworICAgIGR1bXAoQ2hhbmdlOjpEcm9w
U2hhZG93LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BT
aGFkb3csICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpEcm9wU2hh
ZG93KSk7CisKKyAgICBkdW1wKENoYW5nZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6QWxwaGEpKTsKKyAgICBkdW1wKENoYW5nZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5LCAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSkpOworICAgIGR1bXAoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSwgICAg
ICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUpKTsKKwor
ICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICBzdGF0ZUNoYW5n
ZU5hbWUoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMpKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxk
U21vb3RoRm9udHMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
bW9vdGhGb250cywgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkU21v
b3RoRm9udHMpKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
LCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMs
ICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSk7
CisgICAgZHVtcChDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgIHN0YXRlQ2hh
bmdlTmFtZShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSk7CisgICAgZHVtcChDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fZHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6
OkRyYXdMdW1pbmFuY2VNYXNrKSk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICBkdW1wKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UpKTsKKyNlbmRpZgorICAgIHJldHVybiB0czsK
K30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZSBjaGFuZ2UpCit7CisgICAgdHMgPDwgc3RhdGVDaGFuZ2VOYW1lKGNo
YW5nZSk7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCit7CisgICAgcmV0
dXJuIHN0YXRlLmR1bXAodHMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hNmU0Y2VhM2MyZDU4Yzg3YjQ5MjM4NDc1ZTQ2OGI1ZGZkNWVlM2Ey
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0U3RhdGUuaApAQCAtMCwwICsxLDM4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJT
b3VyY2VCcnVzaC5oIgorI2luY2x1ZGUgIldpbmRSdWxlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0
YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENoYW5nZSA6IHVpbnQzMl90IHsKKyAgICAg
ICAgQ1RNICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAorCisgICAgICAgIEZpbGxC
cnVzaCAgICAgICAgICAgICAgICAgICA9IDEgPDwgMSwKKyAgICAgICAgRmlsbFJ1bGUgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAyLAorCisgICAgICAgIFN0cm9rZUJydXNoICAgICAgICAgICAg
ICAgICA9IDEgPDwgMywKKyAgICAgICAgU3Ryb2tlVGhpY2tuZXNzICAgICAgICAgICAgID0gMSA8
PCA0LAorICAgICAgICBTdHJva2VTdHlsZSAgICAgICAgICAgICAgICAgPSAxIDw8IDUsCisKKyAg
ICAgICAgTGluZUNhcCAgICAgICAgICAgICAgICAgICAgID0gMSA8PCA2LAorICAgICAgICBMaW5l
RGFzaCAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisgICAgICAgIExpbmVKb2luICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgTWl0ZXJMaW1pdCAgICAgICAgICAgICAg
ICAgID0gMSA8PCA5LAorCisgICAgICAgIENvbXBvc2l0ZU1vZGUgICAgICAgICAgICAgICA9IDEg
PDwgMTAsCisgICAgICAgIERyb3BTaGFkb3cgICAgICAgICAgICAgICAgICA9IDEgPDwgMTEsCisK
KyAgICAgICAgQWxwaGEgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxMiwKKyAgICAgICAg
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSAgID0gMSA8PCAxMywKKyAgICAgICAgVGV4dERyYXdp
bmdNb2RlICAgICAgICAgICAgID0gMSA8PCAxNCwKKworICAgICAgICBTaG91bGRBbnRpYWxpYXMg
ICAgICAgICAgICAgPSAxIDw8IDE1LAorICAgICAgICBTaG91bGRTbW9vdGhGb250cyAgICAgICAg
ICAgPSAxIDw8IDE2LAorICAgICAgICBTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSAxIDw8
IDE3LAorICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAgICAgPSAxIDw8IDE4LAorICAg
ICAgICBEcmF3THVtaW5hbmNlTWFzayAgICAgICAgICAgPSAxIDw8IDE5LAorI2lmIEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgIFVzZURhcmtBcHBlYXJhbmNlICAgICAgICAgICA9
IDEgPDwgMjAsCisjZW5kaWYKKyAgICB9OworICAgIHVzaW5nIENoYW5nZUZsYWdzID0gT3B0aW9u
U2V0PENoYW5nZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIENoYW5nZUZsYWdzIGluaXRpYWxD
aGFuZ2VGbGFncyA9IHsgQ2hhbmdlOjpGaWxsQnJ1c2gsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsIENo
YW5nZTo6U3Ryb2tlVGhpY2tuZXNzIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHRTdGF0ZShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwQm91bmRzLCBjb25zdCBDaGFu
Z2VGbGFncyYgPSB7IH0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSk7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAg
IHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsgbV9jbGlwQm91bmRzLmludGVyc2Vj
dChtX2N0bS5tYXBSZWN0KHJlY3QpKTsgfQorCisgICAgQ2hhbmdlRmxhZ3MgY2hhbmdlcygpIGNv
bnN0IHsgcmV0dXJuIG1fY2hhbmdlRmxhZ3M7IH0KKyAgICB2b2lkIGRpZEFwcGx5U3RhdGVDaGFu
Z2VzKCkgeyBtX2NoYW5nZUZsYWdzID0geyB9OyB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9jdG07IH0KKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGN0bSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpDVE0sICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9jdG0sIGN0bSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNv
bnN0IFNvdXJjZUJydXNoJiBmaWxsQnJ1c2goKSBjb25zdCB7IHJldHVybiBtX2ZpbGxCcnVzaDsg
fQorICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3Qgc3RkOjpv
cHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJv
cGVydHkoQ2hhbmdlOjpGaWxsQnJ1c2gsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1
c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldEZpbGxHcmFk
aWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Bh
Y2VUcmFuc2Zvcm0pIHsgbV9maWxsQnJ1c2guc2V0R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCks
IHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9
CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fZmlsbEJydXNoLnNldFBhdHRlcm4o
V1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFu
Z2U6OkZpbGxCcnVzaCk7IH0KKworICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1
cm4gbV9maWxsUnVsZTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUs
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0
YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbFJ1bGUsICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsUnVsZSwgZmlsbFJ1bGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBjb25z
dCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1c2goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJydXNo
OyB9CisgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNl
dFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlQnJ1c2gsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9z
dHJva2VCcnVzaCwgeyBjb2xvciB9LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0
U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1c2guc2V0R3JhZGllbnQoV1RGTW92
ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpT
dHJva2VCcnVzaCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYg
cGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX3N0cm9r
ZUJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyBtX2No
YW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsgfQorCisgICAgZmxvYXQgc3Ryb2tl
VGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VUaGlja25lc3M7IH0KKyAgICB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3Bl
cnR5KENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ry
b2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAg
ICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlU3R5bGU7
IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkg
eyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc3Ryb2tlU3R5bGUsIHN0cm9rZVN0eWxlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAg
TGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ2FwOyB9CisgICAgdm9pZCBz
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0Nv
bnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpMaW5l
Q2FwLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCwgbGluZUNhcCwgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IExpbmVEYXNoJiBsaW5lRGFzaCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZURhc2g7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKExpbmVEYXNoJiYgbGluZURh
c2gsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGll
ZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZURhc2gsICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9saW5lRGFzaCwgV1RGTW92ZShsaW5lRGFzaCksIGxhc3RBcHBsaWVkU3RhdGUpOyB9
CisKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0K
KyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0
eShDaGFuZ2U6OkxpbmVKb2luLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4sIGxp
bmVKb2luLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQorICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9h
dCBtaXRlckxpbWl0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYg
bGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6Ok1pdGVyTGltaXQsICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCBtaXRlckxpbWl0LCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorICAgIAorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29tcG9zaXRlTW9kZTsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRlTW9kZShDb21w
b3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250
ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6Q29tcG9z
aXRlTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUsIGNvbXBvc2l0
ZU1vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisgICAgY29uc3QgRHJvcFNoYWRvdyYg
ZHJvcFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcFNoYWRvdzsgfQorICAgIHZvaWQgc2V0
RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93LCBjb25zdCBzdGQ6Om9wdGlv
bmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0
eShDaGFuZ2U6OkRyb3BTaGFkb3csICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93
LCBkcm9wU2hhZG93LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgZmxvYXQgYWxwaGEoKSBj
b25zdCB7IHJldHVybiBtX2FscGhhOyB9CisgICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSwg
Y29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3Rh
dGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpBbHBoYSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2FscGhhLCBhbHBoYSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBJbnRlcnBvbGF0
aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHks
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0
YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIGltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHksIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisgICAgVGV4dERy
YXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJh
d2luZ01vZGU7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVG
bGFncyB0ZXh0RHJhd2luZ01vZGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6VGV4dERyYXdp
bmdNb2RlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlLCB0ZXh0RHJh
d2luZ01vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBib29sIHNob3VsZEFudGlhbGlh
cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQW50aWFsaWFzOyB9CisgICAgdm9pZCBzZXRTaG91
bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3Jh
cGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5n
ZTo6U2hvdWxkQW50aWFsaWFzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFs
aWFzLCBzaG91bGRBbnRpYWxpYXMsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBib29sIHNo
b3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTbW9vdGhGb250czsgfQor
ICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cywgY29u
c3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUp
IHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzLCBzaG91bGRTbW9vdGhGb250cywgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IH0KKyAgICB2b2lkIHNl
dFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBs
aWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMs
IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAg
IGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOyB9CisgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhi
b29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNz
Q29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBsYXN0QXBwbGllZFN0YXRl
KTsgfQorICAgIAorICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBt
X2RyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhib29s
IGRyYXdMdW1pbmFuY2VNYXNrLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkRyYXdMdW1pbmFu
Y2VNYXNrLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2ssIGRyYXdM
dW1pbmFuY2VNYXNrLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisjaWYgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4g
bV91c2VEYXJrQXBwZWFyYW5jZTsgfQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9v
bCB1c2VEYXJrQXBwZWFyYW5jZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRT
dGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpVc2VEYXJrQXBw
ZWFyYW5jZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlLCB1c2VE
YXJrQXBwZWFyYW5jZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyNlbmRpZgorCisgICAgYm9vbCBo
YXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0OworICAgIHZvaWQgbWVyZ2VDaGFuZ2VzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7CisgICAgdm9pZCBtZXJnZURpZmZzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7CisKKyAgICBXVEY6OlRleHRTdHJlYW0m
IGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IGRlY29kZShE
ZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lk
IHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9w
ZXJ0eSwgY29uc3QgVCYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMtPipwcm9w
ZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy0+KnByb3Bl
cnR5ID0gdmFsdWU7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Muc2V0KGNoYW5nZSwgIWxhc3RBcHBs
aWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJvcGVydHkgIT0gdGhpcy0+KnByb3Bl
cnR5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2V0UHJv
cGVydHkoQ2hhbmdlIGNoYW5nZSwgVCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5LCBU
JiYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0
QXBwbGllZFN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSA9PSB2YWx1
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gV1RGTW92
ZSh2YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Muc2V0KGNoYW5nZSwgIWxhc3RBcHBsaWVk
U3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJvcGVydHkgIT0gdGhpcy0+KnByb3BlcnR5
KTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgbV9jbGlwQm91bmRzOworCisgICAgQ2hhbmdlRmxh
Z3MgbV9jaGFuZ2VGbGFnczsKKworICAgIEFmZmluZVRyYW5zZm9ybSBtX2N0bTsKKworICAgIFNv
dXJjZUJydXNoIG1fZmlsbEJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgV2luZFJ1bGUgbV9m
aWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07CisKKyAgICBTb3VyY2VCcnVzaCBtX3N0cm9r
ZUJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgZmxvYXQgbV9zdHJva2VUaGlja25lc3MgeyAw
IH07CisgICAgU3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZSB7IFNvbGlkU3Ryb2tlIH07CisKKyAg
ICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1dHQgfTsKKyAgICBMaW5lRGFzaCBtX2xp
bmVEYXNoOworICAgIExpbmVKb2luIG1fbGluZUpvaW4geyBMaW5lSm9pbjo6TWl0ZXIgfTsKKyAg
ICBmbG9hdCBtX21pdGVyTGltaXQgeyAwIH07CisKKyAgICBDb21wb3NpdGVNb2RlIG1fY29tcG9z
aXRlTW9kZSB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1h
bCB9OworICAgIERyb3BTaGFkb3cgbV9kcm9wU2hhZG93OworCisgICAgZmxvYXQgbV9hbHBoYSB7
IDEgfTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OworICAgIFRleHREcmF3aW5nTW9k
ZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdpbmdNb2RlOjpGaWxsIH07CisKKyAg
ICBib29sIG1fc2hvdWxkQW50aWFsaWFzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaG91bGRTbW9v
dGhGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
IHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2RyYXdMdW1pbmFuY2VNYXNrIHsgZmFsc2UgfTsKKyNpZiBIQVZFKE9TX0RB
UktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgbV91c2VEYXJrQXBwZWFyYW5jZSB7IGZhbHNlIH07
CisjZW5kaWYKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBhdXRvIGVu
Y29kZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJv
cGVydHkpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgdGhpcy0+KnByb3BlcnR5OworICAgIH07CisKKyAgICBlbmNv
ZGVyIDw8IG1fY2xpcEJvdW5kczsKKworICAgIGVuY29kZXIgPDwgbV9jaGFuZ2VGbGFnczsKKwor
ICAgIGVuY29kZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgZW5jb2RlKENoYW5nZTo6RmlsbEJydXNo
LCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVz
aCk7CisgICAgZW5jb2RlKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAgIGVuY29kZShDaGFuZ2U6
OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zdHJva2VCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7Cisg
ICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIGVuY29kZShDaGFuZ2U6Okxp
bmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9s
aW5lQ2FwKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIGVuY29kZShDaGFu
Z2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9saW5lSm9pbik7CisgICAgZW5jb2RlKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisgICAg
ZW5jb2RlKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIGVuY29kZShDaGFuZ2U6OkRyb3BT
aGFkb3csICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9w
U2hhZG93KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7CisgICAgZW5jb2RlKENoYW5n
ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIGVuY29kZShDaGFuZ2U6OlRleHRE
cmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0
RHJhd2luZ01vZGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7Cisg
ICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBlbmNvZGUoQ2hhbmdl
OjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaGFk
b3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIGVuY29kZShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VN
YXNrLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNl
TWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBlbmNvZGUoQ2hhbmdl
OjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CitzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgYXV0byBkZWNvZGUgPSBbJl0o
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKCFzdGF0ZS5tX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICB1c2luZyBQcm9wZXJ0eVR5cGUgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8ZGVj
bHR5cGUoc3RkOjpkZWNsdmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPigpLipwcm9wZXJ0eSk+Ojp0
eXBlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFByb3BlcnR5VHlwZT4gdmFsdWU7CisgICAgICAg
IGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgc3RhdGUuKnByb3BlcnR5ID0gKnZhbHVlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IGNsaXBC
b3VuZHM7CisgICAgZGVjb2RlciA+PiBjbGlwQm91bmRzOworICAgIGlmICghY2xpcEJvdW5kcykK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q2hhbmdl
RmxhZ3M+IGNoYW5nZUZsYWdzOworICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7CisgICAgaWYg
KCFjaGFuZ2VGbGFncykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlIHN0YXRlKCpjbGlwQm91bmRzLCAqY2hhbmdlRmxhZ3MpOworCisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RmlsbFJ1
bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUp
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUs
IENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc3Ryb2tlQnJ1c2gpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcykpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlU3R5bGUs
ICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENo
YW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fbGluZUNhcCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGUoc3RhdGUsIENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fbGluZURhc2gpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpNaXRlckxpbWl0LCAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFu
Z2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2NvbXBvc2l0ZU1vZGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICgh
ZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6QWxwaGEsICAgICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHksICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICgh
ZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRBbnRpYWxp
YXMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMp
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBD
aGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3Nob3VsZFNtb290aEZvbnRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFu
Z2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzaykpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKKworICAgIHJldHVybiBzdGF0ZTsKK30KKworVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZSk7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBX
VEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlLAorICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE0sCisKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoLAorICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsUnVsZSwKKworICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaCwKKyAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNz
LAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VT
dHlsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpM
aW5lQ2FwLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpM
aW5lRGFzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
TGluZUpvaW4sCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
Ok1pdGVyTGltaXQsCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6Q29tcG9zaXRlTW9kZSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6RHJvcFNoYWRvdywKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlLAorCisgICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlh
cywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxk
U21vb3RoRm9udHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsCisgICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNr
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAgICAgLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZQorI2VuZGlmCisgICAg
PjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY3MjEzMjg1MjYxZTY5MGNhMzA2MGQ3ZTAyNmU1MGU1MmVlYTU5MGYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQorICAgICAg
ICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFu
ZFJlc3RvcmUpCisgICAgeworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAg
ICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgfQorICAgIAorICAgIH5HcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAg
ICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29u
dGV4dC5zYXZlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOworICAgIH0KKwor
ICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9y
ZSk7CisgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29u
dGV4dCYgbV9jb250ZXh0OworICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKK307CisKK2NsYXNz
IFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgeworcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUxheWVy
U2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxh
eWVyID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX2Fs
cGhhKGFscGhhKQorICAgICAgICAsIG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQorICAgIHsKKyAg
ICAgICAgaWYgKGJlZ2luTGF5ZXIpCisgICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihtX2FscGhhKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBiZWdpbkxheWVyKGZs
b2F0IGFscGhhKQorICAgIHsKKyAgICAgICAgbV9hbHBoYSA9IGFscGhhOworICAgICAgICBtX2Nv
bnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAgICAgICAgbV9iZWdhbkxh
eWVyID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKKyAgICAgICAgICAgIG1fY29udGV4dC5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0Nv
bnRleHQmIG1fY29udGV4dDsKKyAgICBmbG9hdCBtX2FscGhhOworICAgIGJvb2wgbV9iZWdhbkxh
eWVyOworfTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgeworcHVi
bGljOgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3N0
YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQorICAgIHsgfQorCisgICAgfkdyYXBoaWNzQ29u
dGV4dFN0YXRlU3RhY2tDaGVja2VyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQuc3Rh
Y2tTaXplKCkgIT0gbV9zdGFja1NpemUpCisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBo
aWNzQ29udGV4dCAlcCBzdGFjayBjaGFuZ2VkIGJ5ICVkIiwgJm1fY29udGV4dCwgKGludCltX2Nv
bnRleHQuc3RhY2tTaXplKCkgLSAoaW50KW1fc3RhY2tTaXplKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CisgICAgdW5zaWduZWQgbV9zdGFja1Np
emU7Cit9OworCitjbGFzcyBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlv
blF1YWxpdHlUb1VzZSkKKyAgICAgICAgOiBtX2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRl
eHQpCisgICAgICAgICwgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkoZ3JhcGhpY3NDb250
ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICAgICAgLCBtX2ludGVycG9sYXRp
b25RdWFsaXR5Q2hhbmdlZChpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlICE9IEludGVycG9sYXRp
b25RdWFsaXR5OjpEZWZhdWx0ICYmIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5ICE9IGlu
dGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgeworICAgICAgICBpZiAobV9pbnRlcnBvbGF0
aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpOworICAgIH0K
KworICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCwgc3RkOjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0
eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkpCisgICAgICAgIDogSW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyKGdyYXBoaWNzQ29udGV4dCwgaW50ZXJwb2xhdGlvblF1YWxpdHkgPyBpbnRlcnBv
bGF0aW9uUXVhbGl0eS52YWx1ZSgpIDogZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoKSkKKyAgICB7CisgICAgfQorCisgICAgfkludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lcigpCisgICAgeworICAgICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5n
ZWQpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4dDsKKyAgICBJbnRlcnBvbGF0
aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eTsKKyAgICBib29sIG1faW50
ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBl
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNw
cAppbmRleCAxNWRmMWRmZGI2ZjNhMTZhZDVlYWY2NDcyNjFmY2ZjNGI3YTkzYWI0Li42MmY5ZjQ2
NGMzZDZkOWQ1YTA5Y2E1YTRiN2JkOGExMDM2MTU5MWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcApAQCAtMTI2LDI3ICsxMjYs
NTEgQEAgU3RyaW5nIGJsZW5kTW9kZU5hbWUoQmxlbmRNb2RlIGJsZW5kT3ApCiAgICAgcmV0dXJu
IGJsZW5kT3BlcmF0b3JOYW1lc1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYmxlbmRPcCkgLSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oQmxlbmRNb2RlOjpOb3JtYWwpXTsKIH0KIAorVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBy
ZXR1cm4gdHMgPDwgYmxlbmRNb2RlTmFtZShibGVuZE1vZGUpOworfQorCitUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUpCit7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0aW9uIiwgY29tcG9zaXRlTW9k
ZS5vcGVyYXRpb24pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGNvbXBvc2l0
ZU1vZGUuYmxlbmRNb2RlKTsKKyAgICByZXR1cm4gdHM7Cit9CisKIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAgIHJldHVy
biB0cyA8PCBjb21wb3NpdGVPcGVyYXRvck5hbWUob3AsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKIH0K
IAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyb3BT
aGFkb3cmIGRyb3BTaGFkb3cpCiB7Ci0gICAgcmV0dXJuIHRzIDw8IGJsZW5kTW9kZU5hbWUoYmxl
bmRNb2RlKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBkcm9wU2hhZG93
Lm9mZnNldCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctYmx1ciIsIGRyb3BTaGFkb3cu
Ymx1clJhZGl1cyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctY29sb3IiLCBkcm9wU2hh
ZG93LmNvbG9yKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRp
dXMiLCBkcm9wU2hhZG93LnJhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsK
KyAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIFdpbmRSdWxlIHJ1bGUpCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSkKIHsKLSAgICBzd2l0
Y2ggKHJ1bGUpIHsKLSAgICBjYXNlIFdpbmRSdWxlOjpOb25aZXJvOgotICAgICAgICB0cyA8PCAi
Tk9OLVpFUk8iOworICAgIHN3aXRjaCAoaW50ZXJwb2xhdGlvblF1YWxpdHkpIHsKKyAgICBjYXNl
IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAgICAgICB0cyA8PCAiREVGQVVMVCI7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2luZFJ1bGU6OkV2ZW5PZGQ6Ci0gICAgICAgIHRz
IDw8ICJFVkVOLU9ERCI7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRl
cnBvbGF0ZToKKyAgICAgICAgdHMgPDwgIkRPLU5PVC1JTlRFUlBPTEFURSI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKKyAgICAgICAgdHMgPDwg
IkxPVyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6Ok1l
ZGl1bToKKyAgICAgICAgdHMgPDwgIk1FRElVTSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAgIHRzIDw8ICJIRUlHSCI7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLQogICAgIHJldHVybiB0czsKIH0KIApAQCAtMTY2LDYgKzE5MCwx
MSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lQ2FwIGNhcFN0
eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgTGluZURhc2gpCit7CisgICAgcmV0dXJuIHRzOworfQorCiBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBqb2luU3R5bGUpCiB7CiAgICAgc3dp
dGNoIChqb2luU3R5bGUpIHsKQEAgLTE4Miw0ICsyMTEsNTYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gam9pblN0eWxlKQogICAgIHJldHVybiB0czsK
IH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgU3Ryb2tlU3R5bGUg
c3Ryb2tlU3R5bGUpCit7CisgICAgc3dpdGNoIChzdHJva2VTdHlsZSkgeworICAgIGNhc2UgU3Ry
b2tlU3R5bGU6Ok5vU3Ryb2tlOgorICAgICAgICB0cyA8PCAiTk8tU1RST0tFIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6U29saWRTdHJva2U6CisgICAgICAgIHRzIDw8
ICJTT0xJRC1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpE
b3R0ZWRTdHJva2U6CisgICAgICAgIHRzIDw8ICJET1RURUQtU1RST0tFIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlOgorICAgICAgICB0cyA8PCAi
REFTSEVELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5bGU6OkRv
dWJsZVN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRPVUJMRS1TVFJPS0UiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tlOgorICAgICAgICB0cyA8PCAiV0FW
WS1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBUZXh0RHJhd2luZ01vZGUgdGV4
dERyYXdpbmdNb2RlKQoreworICAgIHN3aXRjaCAodGV4dERyYXdpbmdNb2RlKSB7CisgICAgY2Fz
ZSBUZXh0RHJhd2luZ01vZGU6OkZpbGw6CisgICAgICAgIHRzIDw8ICJGSUxMIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OlN0cm9rZToKKyAgICAgICAgdHMgPDwg
IlNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK1Rl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdpbmRSdWxlIHJ1bGUpCit7Cisg
ICAgc3dpdGNoIChydWxlKSB7CisgICAgY2FzZSBXaW5kUnVsZTo6Tm9uWmVybzoKKyAgICAgICAg
dHMgPDwgIk5PTi1aRVJPIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXaW5kUnVsZTo6RXZl
bk9kZDoKKyAgICAgICAgdHMgPDwgIkVWRU4tT0REIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIHRzOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5kZXggNGQyMDRl
OTdlNWM1NDRkNzc2YmZhN2YzMGFhY2MxYjdjNDYzZTBlMC4uMGY4YjJkMDI3NTViZmFlYzY1ZDk1
YzA0ZjJjNDViNTI0OTRmMjYzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUsOSBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGFzaEFycmF5LmgiCisjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRy
YWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC03Myw2ICs3Niw3OSBAQCBlbnVt
IGNsYXNzIEJsZW5kTW9kZSA6IHVpbnQ4X3QgewogICAgIFBsdXNMaWdodGVyCiB9OwogCitzdHJ1
Y3QgQ29tcG9zaXRlTW9kZSB7CisgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3BlcmF0aW9uOworICAg
IEJsZW5kTW9kZSBibGVuZE1vZGU7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29tcG9z
aXRlTW9kZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gb3BlcmF0aW9uID09IG90aGVy
Lm9wZXJhdGlvbiAmJiBibGVuZE1vZGUgPT0gb3RoZXIuYmxlbmRNb2RlOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q29tcG9z
aXRlTW9kZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIENvbXBvc2l0ZU1vZGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgb3BlcmF0aW9uOworICAgIGVuY29kZXIgPDwgYmxlbmRNb2RlOworfQor
Cit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxDb21wb3NpdGVNb2RlPiBD
b21wb3NpdGVNb2RlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlv
bmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBvcGVyYXRpb247CisgICAgZGVjb2RlciA+PiBvcGVyYXRp
b247CisgICAgaWYgKCFvcGVyYXRpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRNb2RlOworICAgIGRlY29kZXIgPj4g
YmxlbmRNb2RlOworICAgIGlmICghYmxlbmRNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgcmV0dXJuIHsgeyAqb3BlcmF0aW9uLCAqYmxlbmRNb2RlIH0gfTsKK30KKwor
c3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAgICBlbnVtIGNsYXNzIE1vZGUgOiB1
aW50OF90IHsKKyAgICAgICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0
aXZlcywKKyAgICAgICAgU3BlbGxpbmcsCisgICAgICAgIEdyYW1tYXIsCisgICAgICAgIEF1dG9j
b3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcworICAg
IH0gbW9kZTsKKyAgICBib29sIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2UgfTsKKwor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3RlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1vZGU7CisgICAgZW5jb2RlciA8PCBz
aG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0
ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPE1vZGU+
IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlmICghbW9kZSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkVXNlRGFy
a0FwcGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKKyAg
ICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgcmV0dXJuIHsgeyAqbW9kZSwgKnNob3VsZFVzZURhcmtBcHBlYXJhbmNlIH0g
fTsKK30KKwogZW51bSBjbGFzcyBHcmFkaWVudFNwcmVhZE1ldGhvZCA6IHVpbnQ4X3QgewogICAg
IFBhZCwKICAgICBSZWZsZWN0LApAQCAtOTMsNiArMTY5LDQyIEBAIGVudW0gY2xhc3MgTGluZUNh
cCA6IHVpbnQ4X3QgewogICAgIFNxdWFyZQogfTsKIAorc3RydWN0IExpbmVEYXNoIHsKKyAgICBE
YXNoQXJyYXkgZGFzaGVzOworICAgIGZsb2F0IG9mZnNldDsKKyAgICAKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGluZURhc2g+IGRlY29kZShEZWNv
ZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExpbmVEYXNoJiBhLCBj
b25zdCBMaW5lRGFzaCYgYikKK3sKKyAgICByZXR1cm4gYS5kYXNoZXMgPT0gYi5kYXNoZXMgJiYg
YS5vZmZzZXQgPT0gYi5vZmZzZXQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IGRhc2hlczsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGluZURhc2g+IExpbmVEYXNoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERhc2hBcnJheT4gZGFzaGVzOworICAg
IGRlY29kZXIgPj4gZGFzaGVzOworICAgIGlmICghZGFzaGVzKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gb2Zmc2V0OworICAgIGRlY29k
ZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpkYXNoZXMpLCAqb2Zmc2V0IH0gfTsKK30K
KwogZW51bSBjbGFzcyBMaW5lSm9pbiA6IHVpbnQ4X3QgewogICAgIE1pdGVyLAogICAgIFJvdW5k
LApAQCAtMTA1LDYgKzIxNyw3NiBAQCBlbnVtIEhvcml6b250YWxBbGlnbm1lbnQgewogICAgIEFs
aWduSENlbnRlcgogfTsKIAorLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZv
ciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisvLyBJdCBoYXMgZGlmZmVyZW50IHRy
ZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9kZSA6IGJv
b2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9OworCitzdHJ1Y3QgRHJvcFNoYWRvdyB7
CisgICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICBmbG9hdCBibHVyUmFkaXVzIHsgMCB9OworICAg
IENvbG9yIGNvbG9yOworICAgIFNoYWRvd1JhZGl1c01vZGUgcmFkaXVzTW9kZSB7IFNoYWRvd1Jh
ZGl1c01vZGU6OkRlZmF1bHQgfTsKKyAgICAKKyAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsg
cmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBpc0JsdXJyZWQoKSBjb25zdCB7
IHJldHVybiBpc1Zpc2libGUoKSAmJiBibHVyUmFkaXVzOyB9CisgICAgYm9vbCBoYXNPdXRzZXRz
KCkgY29uc3QgeyByZXR1cm4gaXNCbHVycmVkKCkgfHwgKGlzVmlzaWJsZSgpICYmICFvZmZzZXQu
aXNaZXJvKCkpOyB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IERyb3BTaGFkb3cmIGEsIGNvbnN0IERyb3BTaGFkb3cmIGIp
Cit7CisgICAgcmV0dXJuIGEub2Zmc2V0ID09IGIub2Zmc2V0ICYmIGEuYmx1clJhZGl1cyA9PSBi
LmJsdXJSYWRpdXMgJiYgYS5jb2xvciA9PSBiLmNvbG9yICYmIGEucmFkaXVzTW9kZSA9PSBiLnJh
ZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERyb3BTaGFkb3c6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgb2Zmc2V0
OworICAgIGVuY29kZXIgPDwgYmx1clJhZGl1czsKKyAgICBlbmNvZGVyIDw8IGNvbG9yOworICAg
IGVuY29kZXIgPDwgcmFkaXVzTW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0
ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gRHJvcFNoYWRvdzo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IG9mZnNldDsKKyAgICBkZWNvZGVy
ID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJsdXJSYWRpdXM7CisgICAgZGVjb2RlciA+
PiBibHVyUmFkaXVzOworICAgIGlmICghYmx1clJhZGl1cykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGNvbG9yOworICAgIGRlY29kZXIg
Pj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4gcmFkaXVzTW9kZTsKKyAgICBk
ZWNvZGVyID4+IHJhZGl1c01vZGU7CisgICAgaWYgKCFyYWRpdXNNb2RlKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb2Zmc2V0LCAqYmx1clJhZGl1cywg
KmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07Cit9CisKK2VudW0gU3Ryb2tlU3R5bGUgeworICAgIE5v
U3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tlLAorICAgIERvdHRlZFN0cm9rZSwKKyAgICBEYXNoZWRT
dHJva2UsCisgICAgRG91YmxlU3Ryb2tlLAorICAgIFdhdnlTdHJva2UsCit9OworCiBlbnVtIFRl
eHRCYXNlbGluZSB7CiAgICAgQWxwaGFiZXRpY1RleHRCYXNlbGluZSwKICAgICBUb3BUZXh0QmFz
ZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwyOSBAQCBlbnVtIFRleHRBbGlnbiB7CiAgICAgUmlnaHRU
ZXh0QWxpZ24KIH07CiAKLVN0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29t
cG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1TdHJpbmcgYmxlbmRNb2RlTmFt
ZShXZWJDb3JlOjpCbGVuZE1vZGUpOwotYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcm
LCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKLWJvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJh
dG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yJiwgV2ViQ29yZTo6
QmxlbmRNb2RlJik7CitlbnVtIGNsYXNzIFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgeworICAg
IEZpbGwgPSAxIDw8IDAsCisgICAgU3Ryb2tlID0gMSA8PCAxLAorfTsKIAotV0VCQ09SRV9FWFBP
UlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6
OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IpOwotV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRS
dWxlKTsKK3VzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0gT3B0aW9uU2V0PFRleHREcmF3aW5n
TW9kZT47CisKK1N0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoQ29tcG9zaXRlT3BlcmF0b3Is
IEJsZW5kTW9kZSk7CitTdHJpbmcgYmxlbmRNb2RlTmFtZShCbGVuZE1vZGUpOworYm9vbCBwYXJz
ZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBCbGVuZE1vZGUmKTsKK2Jvb2wgcGFyc2VDb21wb3Np
dGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENvbXBvc2l0ZU9wZXJhdG9yJiwgQmxl
bmRNb2RlJik7CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mLCBCbGVuZE1vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKK1dF
QkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBDb21wb3NpdGVNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEcm9wU2hhZG93Jik7CitXRUJDT1JFX0VYUE9S
VCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgSW50ZXJwb2xh
dGlvblF1YWxpdHkpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVEYXNoKTsKIFdFQkNPUkVfRVhQ
T1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9p
bik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgU3Ryb2tlU3R5bGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFRleHREcmF3aW5nTW9kZSk7CitXRUJDT1JFX0VY
UE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2luZFJ1
bGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKQEAgLTIxOSw0ICs0MTQsMzUgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpMaW5lSm9pbj4gewogICAgID47CiB9
OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlN0cm9rZVN0eWxlPiB7
CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHls
ZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6Tm9TdHJva2UsCisgICAgV2ViQ29yZTo6U3Ry
b2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEb3R0ZWRT
dHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRhc2hlZFN0cm9rZSwKKyAgICBXZWJD
b3JlOjpTdHJva2VTdHlsZTo6RG91YmxlU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxl
OjpXYXZ5U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8
V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVl
czwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlLAorICAgICAgICBXZWJDb3JlOjpU
ZXh0RHJhd2luZ01vZGU6OkZpbGwsCisgICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZTo6
U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBF
bnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlLAor
ICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdE
aWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxp
bmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKKyAgICBXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCisgICAg
PjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKaW5k
ZXggNGUwNzFmNzJmMzViZThhNThmYzRjZDU3N2ExNDU2ZGUxNzQ2NjgyYy4uNDFiMDUxMWE4Zjc4
YTE3OWIzMDRjZjg5ZDQxMDNlMzVkZTNlMTI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3Bw
CkBAIC00NCw3ICs0NCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBOYW1lZEltYWdlR2VuZXJhdGVkSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGCiB7CiAjaWYgVVNFKE5F
V19USEVNRSkgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsK
KyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9y
KCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4dC5jbGlwKGRzdFJlY3QpOwog
ICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRzdFJl
Y3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oCmluZGV4IGI2MjM2Nzg4MGUz
ZTUzNTRiNjE3MTEzNDdjOWExMWI0MjI0Njg4NWUuLmQ2N2QzZWExMTVkMjRlZmQ5MDllMDNhYzlh
ZGU5M2E4YjQ3NjRmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL051bGxHcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsODcgKzM4LDU3IEBAIHB1YmxpYzoKICAg
ICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CiAgICAgfTsKIAotICAgIE51bGxHcmFwaGlj
c0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNvbnMpCi0gICAgICAgIDogbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAgICBOdWxsR3JhcGhpY3NDb250ZXh0
KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBy
ZWFzb25zKQorICAgICAgICA6IEdyYXBoaWNzQ29udGV4dChpbml0aWFsQ2xpcCkKKyAgICAgICAg
LCBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25zKQogICAgIHsKICAgICB9CiAKIHBy
aXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBm
aW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBmYWxzZTsgfQotI2VuZGlmCi0KICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRp
b24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyAhPSBQ
YWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KICAgICBib29sIGludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRz
OyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9CiAgICAg
Ym9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Bh
aW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVj
dGluZ0NvbnRlbnRmdWxQYWludDsgfQogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBmaW5hbCB7IH0KLQotI2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRD
b250ZXh0KGJvb2wpIGZpbmFsIHsgfQotI2VuZGlmCi0KLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9Ci0KLSAg
ICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsIHsgfTsKLQotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbCB7IH0KLQotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHsgfTsgfQotCisgICAgdm9pZCBzYXZlKCkgZmluYWwgeyB9CisgICAgdm9pZCByZXN0b3Jl
KCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsIHsgfTsKICNp
ZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0KICAgICB2
b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWwg
eyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9Ci0g
ICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1
bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9Ci0gICAgRmxvYXRSZWN0IHJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFs
bFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCA9
IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNl
dExpbmVDYXAoTGluZUNhcCkgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9p
bikgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbCB7IH0KLSAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc2NhbGUoY29u
c3QgRmxvYXRTaXplJikgZmluYWwgeyB9Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFsIHsg
fQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwgeyB9Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkg
Y29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWwgeyB9CisK
ICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9
CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQg
c2F2ZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQotCi0gICAgdm9p
ZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JikgZmluYWwgeyB9CiAKLSAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2Nh
ZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQpIGZpbmFsIHsgcmV0dXJuIHsgfTsg
fQorICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQogCi0gICAg
dm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBH
cmFkaWVudCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiA9IHN0
ZDo6bnVsbG9wdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpD
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAg
IAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9
CiAKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0Jiwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQogCi0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIHZvaWQgZHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KIAotICAgIEltYWdlRHJhd1Jl
c3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlk
Tm90aGluZzsgfQotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdl
OjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAg
IHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBk
cmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmlu
YWwgeyB9CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQs
IGNvbnN0IENvbG9yJikgZmluYWwgeyB9CkBAIC0xMjcsMjggKzk3LDI2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBi
b29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgdm9pZCBkcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQotICAgIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWw7Ci0KLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsIHsgfQotCisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmlu
YWwgeyB9CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3Rl
bUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQorICAgIHZvaWQgZHJh
d1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KICNpZiBF
TkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KICNlbmRpZgogCisgICAgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkg
ZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBm
bG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsIHsg
fQorICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisKKyAgICBGbG9hdFJlY3Qgcm91bmRU
b0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSA9IFJvdW5k
QWxsU2lkZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KKwogI2lmIE9TKFdJTkRPV1MpICYmICFV
U0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVk
UHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYK
IAotcHJpdmF0ZToKICAgICBjb25zdCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgbV9wYWludElu
dmFsaWRhdGlvblJlYXNvbnMgeyBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUgfTsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlMDFmZDM5NDY0MzM5ZDJkNGQ1NGJh
OTM2NGM1OTQ1Y2ZhZDdkNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiRElCUGl4ZWxEYXRhLmgiCit0eXBl
ZGVmIHN0cnVjdCBIRENfXyogSERDOworI2lmICFVU0UoQ0cpCisvLyBVSW50OCBpcyBkZWZpbmVk
IGluIENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUludDg7
CisjZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQgPSBzdHJ1Y3QgQ0dDb250ZXh0OworI2VsaWYgVVNFKENBSVJPKQorbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87Cit9Cit1c2luZyBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOworI2Vsc2UKK3Vz
aW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gdm9pZDsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCBiYjEzOGI1Mjk3
YTUyMWZiZjdkNjkzY2QxMTQxMDQ0MDBmY2FiYzRlLi45MDI0ZjVkMWFiZmNlMzgwODE4M2EzYjIz
MWZiY2UwZmZiMmZmNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcApAQCAtMTkxLDE3ICsxOTEsMTcgQEAgU2hhZG93Qmx1cjo6U2hhZG93
Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNv
bnN0IEMKICAgICB1cGRhdGVTaGFkb3dCbHVyVmFsdWVzKCk7CiB9CiAKLVNoYWRvd0JsdXI6OlNo
YWRvd0JsdXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogbV9jb2xv
cihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIG1fYmx1clJhZGl1cyhzdGF0ZS5zaGFkb3dCbHVy
LCBzdGF0ZS5zaGFkb3dCbHVyKQotICAgICwgbV9vZmZzZXQoc3RhdGUuc2hhZG93T2Zmc2V0KQot
ICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRv
dywgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKKyAgICA6IG1fY29sb3IoZHJvcFNoYWRv
dy5jb2xvcikKKyAgICAsIG1fYmx1clJhZGl1cyhkcm9wU2hhZG93LmJsdXJSYWRpdXMsIGRyb3BT
aGFkb3cuYmx1clJhZGl1cykKKyAgICAsIG1fb2Zmc2V0KGRyb3BTaGFkb3cub2Zmc2V0KQorICAg
ICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKIHsK
ICNpZiBVU0UoQ0cpCiAgICAgLy8gQ29yZSBHcmFwaGljcyBpbmNvcnJlY3RseSByZW5kZXJzIHNo
YWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJvYmxlbS84MTAzNDQyPiksCiAgICAg
Ly8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdneSBiZWhhdmlvciBmb3IgY2FudmFz
IGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgaWYgKHN0YXRlLnNoYWRvd1JhZGl1c01vZGUg
PT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KSB7Ci0gICAgICAgIGZsb2F0IHNoYWRvd0JsdXIg
PSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0ZS5zaGFkb3dCbHVyKTsKKyAgICBpZiAoZHJvcFNo
YWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgeworICAgICAgICBm
bG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoZHJvcFNoYWRvdy5ibHVyUmFk
aXVzKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRTaXplKHNoYWRvd0JsdXIsIHNoYWRv
d0JsdXIpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2hhZG93Qmx1ci5oCmluZGV4IDE0ZmQ4M2VkZTFhMWJhY2YxNzdmMzMxZWNhZDFhNDMwMjkz
ZjYwM2EuLjQ1ZDBlNTgzMjljZGVlYWJmYjc4YTRkNWU2N2FiOGQ4ODFhZTU0ZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKQEAgLTM4LDggKzM4
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGU7CitjbGFzcyBH
cmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIEltYWdlQnVmZmVyOworc3RydWN0IERyb3BTaGFk
b3c7CiAKIGNsYXNzIFNoYWRvd0JsdXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYWRv
d0JsdXIpOwpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBTaGFkb3dCbHVyKCk7CiAg
ICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBv
ZmZzZXQsIGNvbnN0IENvbG9yJiwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNl
KTsKLSAgICBTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAgU2hh
ZG93Qmx1cihjb25zdCBEcm9wU2hhZG93JiwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9
IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIGJvb2wgaWdub3JlVHJhbnNmb3JtcyA9IGZh
bHNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291
cmNlQnJ1c2guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1
c2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZjNmFjMTNmZDI1YzZmMGY4MDE1ODcyZmYxOWVkMjhhMWZhNTJi
ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
b3VyY2VCcnVzaC5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU291
cmNlQnJ1c2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTb3VyY2VCcnVzaDo6U291cmNl
QnJ1c2goY29uc3QgQ29sb3ImIGNvbG9yLCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYmIGJydXNoKQor
ICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAsIG1fYnJ1c2goV1RGTW92ZShicnVzaCkpCit7Cit9
CisKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgU291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3JtKCkg
Y29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QWZmaW5lVHJhbnNmb3JtPiBpZGVu
dGl0eTsKKyAgICByZXR1cm4gbV9icnVzaCA/IG1fYnJ1c2gtPnNwYWNlVHJhbnNmb3JtIDogaWRl
bnRpdHkuZ2V0KCk7Cit9CisKK0dyYWRpZW50KiBTb3VyY2VCcnVzaDo6Z3JhZGllbnQoKSBjb25z
dAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KGF1dG8qIGdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdyYWRpZW50Pj4oJm1fYnJ1c2gtPmJy
dXNoKSkKKyAgICAgICAgcmV0dXJuIGdyYWRpZW50LT5wdHIoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworUGF0dGVybiogU291cmNlQnJ1c2g6OnBhdHRlcm4oKSBjb25zdAoreworICAgIGlm
ICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8qIHBhdHRl
cm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZtX2JydXNoLT5icnVzaCkpCisgICAgICAg
IHJldHVybiBwYXR0ZXJuLT5wdHIoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBT
b3VyY2VCcnVzaDo6c2V0R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQoreworICAgIG1fYnJ1c2ggPSB7IFdURk1v
dmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSB9OworfQorCit2b2lkIFNvdXJjZUJydXNoOjpz
ZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
c3BhY2VUcmFuc2Zvcm0pCit7CisgICAgbV9icnVzaCA9IHsgV1RGTW92ZShwYXR0ZXJuKSwgc3Bh
Y2VUcmFuc2Zvcm0gfTsKK30KKworV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTb3VyY2VCcnVzaCYgYnJ1c2gpCit7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJjb2xvciIsIGJydXNoLmNvbG9yKCkpOworCisgICAgaWYgKGF1dG8gZ3JhZGllbnQgPSBicnVz
aC5ncmFkaWVudCgpKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoImdyYWRpZW50IiwgZ3JhZGll
bnQpOworCisgICAgaWYgKGF1dG8gcGF0dGVybiA9IGJydXNoLnBhdHRlcm4oKSkKKyAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuIiwgcGF0dGVybik7CisKKyAgICByZXR1cm4gdHM7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCcnVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxMTBmMjFmZGJlYWNiZjM1ZDc4OTBj
NzhmNzM5OTc5NjRhZGZlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgorI2luY2x1ZGUgIlBhdHRlcm4u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTb3VyY2VCcnVzaCB7CitwdWJsaWM6
CisgICAgc3RydWN0IEJydXNoIHsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4s
IFJlZjxQYXR0ZXJuPj4gYnJ1c2g7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBzcGFjZVRyYW5z
Zm9ybTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEJydXNoPiBkZWNvZGUoRGVjb2RlciYpOworICAgIH07CisKKyAgICBT
b3VyY2VCcnVzaCgpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBTb3VyY2VCcnVzaChj
b25zdCBDb2xvciYsIHN0ZDo6b3B0aW9uYWw8QnJ1c2g+JiYgPSBzdGQ6Om51bGxvcHQpOworCisg
ICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIHZv
aWQgc2V0Q29sb3IoY29uc3QgQ29sb3IgY29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CisKKyAg
ICBjb25zdCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYgYnJ1c2goKSBjb25zdCB7IHJldHVybiBtX2Jy
dXNoOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFkaWVudCogZ3JhZGllbnQoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCBQYXR0ZXJuKiBwYXR0ZXJuKCkgY29uc3Q7CisgICAgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSgpIGNvbnN0OworCisgICAgdm9pZCBzZXRH
cmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFu
c2Zvcm0gPSB7IH0pOworICAgIHZvaWQgc2V0UGF0dGVybihSZWY8UGF0dGVybj4mJiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsgfSk7CisKKyAgICBib29sIGlzUHJp
bWl0aXZlKCkgY29uc3QgeyByZXR1cm4gIW1fYnJ1c2ggJiYgbV9jb2xvci50cnlHZXRBc1NSR0JB
Qnl0ZXMoKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFNvdXJjZUJydXNoPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIENv
bG9yIG1fY29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPEJydXNoPiBt
X2JydXNoOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBzdGQ6OnZhcmlhbnQ8
UmVmPEdyYWRpZW50PiwgUmVmPFBhdHRlcm4+PiYgYSwgY29uc3Qgc3RkOjp2YXJpYW50PFJlZjxH
cmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGIpCit7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
YSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+JiBhR3JhZGllbnQpIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvKiBiR3JhZGllbnQgPSBzdGQ6OmdldF9pZjxSZWY8R3JhZGllbnQ+Pigm
YikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFHcmFkaWVudC5wdHIoKSA9PSBiR3JhZGllbnQt
PnB0cigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9LAorICAgICAgICBb
Jl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgYVBhdHRlcm4pIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiBiUGF0dGVybiA9IHN0ZDo6Z2V0X2lmPFJlZjxQYXR0ZXJuPj4oJmIpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBhUGF0dGVybi5wdHIoKSA9PSBiUGF0dGVybi0+cHRyKCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICApOworfQorCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYSwgY29uc3QgU291cmNlQnJ1c2g6OkJy
dXNoJiBiKQoreworICAgIHJldHVybiBhLmJydXNoID09IGIuYnJ1c2ggJiYgYS5zcGFjZVRyYW5z
Zm9ybSA9PSBiLnNwYWNlVHJhbnNmb3JtOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFNvdXJjZUJydXNoJiBhLCBjb25zdCBTb3VyY2VCcnVzaCYgYikKK3sKKyAgICByZXR1cm4g
YS5jb2xvcigpID09IGIuY29sb3IoKSAmJiBhLmJydXNoKCkgPT0gYi5icnVzaCgpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBTb3VyY2VCcnVzaDo6QnJ1c2g6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgc3BhY2VUcmFuc2Zv
cm07CisgICAgV1RGOjpzd2l0Y2hPbihicnVzaCwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8R3Jh
ZGllbnQ+JiBncmFkaWVudCkgeworICAgICAgICAgICAgZW5jb2RlciA8PCB0cnVlIDw8IGdyYWRp
ZW50LmdldCgpOworICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYg
cGF0dGVybikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBmYWxzZSA8PCBwYXR0ZXJuLmdldCgp
OworICAgICAgICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4KK3N0
ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g6OkJydXNoPiBTb3VyY2VCcnVzaDo6QnJ1c2g6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8QWZmaW5lVHJhbnNmb3Jt
PiBzcGFjZVRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHNwYWNlVHJhbnNmb3JtOworICAgIGlm
ICghc3BhY2VUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPGJvb2w+IGhhc0dyYWRpZW50OworICAgIGRlY29kZXIgPj4gaGFzR3JhZGll
bnQ7CisgICAgaWYgKCFoYXNHcmFkaWVudCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICAKKyAgICBpZiAoKmhhc0dyYWRpZW50KSB7CisgICAgICAgIGF1dG8gZ3JhZGllbnQgPSBH
cmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBpZiAoIWdyYWRpZW50KQorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpn
cmFkaWVudCksICpzcGFjZVRyYW5zZm9ybSB9IH07CisgICAgfQorCisgICAgYXV0byBwYXR0ZXJu
ID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOworICAgIGlmICghcGF0dGVybikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IFdURk1vdmUoKnBhdHRlcm4pLCAq
c3BhY2VUcmFuc2Zvcm0gfSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBT
b3VyY2VCcnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rl
ciA8PCBtX2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9icnVzaDsKK30KKwordGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g+IFNvdXJjZUJydXNoOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBjb2xvcjsK
KyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29sb3IpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8QnJ1c2g+PiBi
cnVzaDsKKyAgICBkZWNvZGVyID4+IGJydXNoOworICAgIGlmICghYnJ1c2gpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU291cmNlQnJ1c2goKmNvbG9yLCBXVEZN
b3ZlKCpicnVzaCkpOworfQorCitXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgY29uc3QgU291cmNlQnJ1c2gmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0Qm94SXRlcmF0b3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBjZjY1YmEyYzEwZTg4ODhkZDQ5ODU0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJv
eEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRleHRSdW4uaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0Qm94SXRlcmF0b3IgeworcHVibGlj
OgorICAgIFRleHRCb3hJdGVyYXRvcigpCisgICAgICAgIDogbV90ZXh0UnVuKDApCisgICAgICAg
ICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAgVGV4dEJveEl0ZXJhdG9yKGNvbnN0
IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkKKyAgICAgICAgOiBtX3RleHRSdW4o
dGV4dFJ1bikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgIH0KKworICAg
IHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgdm9pZCBp
bmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1
cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRSdW4tPmxlbmd0aCgpOyB9CisgICAg
VUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90ZXh0UnVuKVttX29mZnNldF07IH0K
KyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBhdEVuZCgpID8g
VV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1cnJlbnQoKSk7IH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0ICYmIG1fdGV4dFJ1biA9
PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRl
eHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsg
fQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4dFJ1bjsKKyAgICB1bnNpZ25l
ZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmlu
ZGV4IDcyOGQzYmVhMGExNzIzNTAxNGYwZjEyY2YzZDZkN2RhMTkzYzM1YTUuLjE1ZTg0NTU3YWM4
MWE3NjdhMDA3NDZlMzAxNjE1MzU0NGYyMTU2N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtMTgzNCw3
ICsxODM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMo
Q29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmEKICAgICAgICAgCiAgICAgICAgIEZs
b2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwgc2l6ZSgpKTsKIAotICAgICAgICBE
aXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1fZGlzcGxheUxpc3QsIEdyYXBoaWNz
Q29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAg
IERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4dCgqbV9kaXNwbGF5TGlzdCwgaW5pdGlh
bENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAgICAgcGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1NmEyM2E1ZmRmYjEwYWZlY2EyY2M5MmE3
Mjc5NDU4MTAyZS4uNDM3Yjc2NGY0MDdhZGVjMGViMjhjZGRmNWVmZGE2Y2E0YWY2OTAxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb09wZXJhdGlvbnMuY3BwCkBAIC0yMjcsNyArMjI3LDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEYKICAgICAgICAgc29saWRGaWd1cmVFeHRlbnRzLnVuaXRlKGZpbGxFeHRlbnRzKTsKICAg
ICB9CiAKLSAgICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1D
b250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgc29saWRGaWd1
cmVFeHRlbnRzLAorICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0
Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCks
IHNvbGlkRmlndXJlRXh0ZW50cywKICAgICAgICAgW2NhaXJvQ29udGV4dCwgZHJhd2luZ1N0eWxl
LCAmcGF0aCwgJmZpbGxTb3VyY2UsICZzdHJva2VTb3VyY2VdKEdyYXBoaWNzQ29udGV4dCYgc2hh
ZG93Q29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgY2Fpcm9fdCogY2Fpcm9TaGFkb3dD
b250ZXh0ID0gc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKQEAgLTM0MSw3
ICszNDEsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFNoYWRvdwogICAgIGNhaXJvX3NjYWxlZF9mb250
X2dseXBoX2V4dGVudHMoc2NhbGVkRm9udCwgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwg
JmV4dGVudHMpOwogICAgIEZsb2F0UmVjdCBmb250RXh0ZW50c1JlY3QocG9pbnQueCgpICsgZXh0
ZW50cy54X2JlYXJpbmcsIHBvaW50LnkoKSArIGV4dGVudHMueV9iZWFyaW5nLCBleHRlbnRzLndp
ZHRoLCBleHRlbnRzLmhlaWdodCk7CiAKLSAgICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRl
OjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1D
b250ZXh0KSwgZm9udEV4dGVudHNSZWN0LAorICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3Rh
dGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBs
YXRmb3JtQ29udGV4dCksIGZvbnRFeHRlbnRzUmVjdCwKICAgICAgICAgW3NjYWxlZEZvbnQsIHN5
bnRoZXRpY0JvbGRPZmZzZXQsICZnbHlwaHMsIGZvbnRTbW9vdGhpbmdNb2RlXShHcmFwaGljc0Nv
bnRleHQmIHNoYWRvd0NvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGRyYXdHbHlwaHNU
b0NvbnRleHQoc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgc2NhbGVkRm9u
dCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBmb250U21vb3RoaW5nTW9kZSk7CkBAIC0z
NjcsNyArMzY3LDcgQEAgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5n
TW9kZUZvclRleHQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXQKICAgICBpZiAocHJpbnRpbmcp
CiAgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUod2lkdGgsIHRoaWNr
bmVzcykpOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENhaXJvOjpTdGF0ZTo6
Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9
IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigpKTsKICAgICAvLyBKdXN0
IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3VtaW5nIHggYW5kIHkgc2NhbGVzIGFy
ZSBlcXVhbC4KICAgICBmbG9hdCBzY2FsZSA9IHRyYW5zZm9ybS5iKCkgPyBzdGQ6Omh5cG90KHRy
YW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJhbnNmb3JtLmEoKTsKICAgICBpZiAoc2Nh
bGUgPCAxLjApIHsKQEAgLTQ0NiwxNyArNDQ2LDE2IEBAIHN0YXRpYyBWZWN0b3I8RmxvYXRQb2lu
dD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQK
IAogbmFtZXNwYWNlIFN0YXRlIHsKIAotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQordm9p
ZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCogY3IgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCBz
dHJva2VUaGlja25lc3MpCiB7Ci0gICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgocGxhdGZvcm1Db250
ZXh0LmNyKCksIHN0cm9rZVRoaWNrbmVzcyk7CisgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3Is
IHN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit2b2lk
IHNldFN0cm9rZVN0eWxlKGNhaXJvX3QqIGNyLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKIHsK
ICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRhc2hQYXR0ZXJuW10gPSB7IDUuMCwgNS4wIH07CiAg
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkb3RQYXR0ZXJuW10gPSB7IDEuMCwgMS4wIH07CiAKLSAg
ICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dC5jcigpOwogICAgIHN3aXRjaCAoc3Ryb2tl
U3R5bGUpIHsKICAgICBjYXNlIE5vU3Ryb2tlOgogICAgICAgICAvLyBGSVhNRTogaXMgaXQgdGhl
IHJpZ2h0IHdheSB0byBlbXVsYXRlIE5vU3Ryb2tlPwpAQCAtNDc3LDI5ICs0NzYsMjkgQEAgdm9p
ZCBzZXRTdHJva2VTdHlsZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBT
dHJva2VTdHlsZSBzdHJva2VTdHkKICAgICB9CiB9CiAKLXZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKGNhaXJvX3QqIGNyLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9y
KHBsYXRmb3JtQ29udGV4dC5jcigpLCB0b0NhaXJvT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9u
LCBibGVuZE1vZGUpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIHRvQ2Fpcm9PcGVyYXRv
cihjb21wb3NpdGVPcGVyYXRpb24sIGJsZW5kTW9kZSkpOwogfQogCi12b2lkIHNldFNob3VsZEFu
dGlhbGlhcyhHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBib29sIGVuYWJs
ZSkKK3ZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGNhaXJvX3QqIGNyLCBib29sIGVuYWJsZSkKIHsK
ICAgICAvLyBXaGVuIHRydWUsIHVzZSB0aGUgZGVmYXVsdCBDYWlybyBiYWNrZW5kIGFudGlhbGlh
cyBtb2RlICh1c3VhbGx5IHRoaXMKICAgICAvLyBlbmFibGVzIHN0YW5kYXJkICdncmF5c2NhbGUn
IGFudGlhbGlhc2luZyk7IGZhbHNlIHRvIGV4cGxpY2l0bHkgZGlzYWJsZQogICAgIC8vIGFudGlh
bGlhc2luZy4KLSAgICBjYWlyb19zZXRfYW50aWFsaWFzKHBsYXRmb3JtQ29udGV4dC5jcigpLCBl
bmFibGUgPyBDQUlST19BTlRJQUxJQVNfREVGQVVMVCA6IENBSVJPX0FOVElBTElBU19OT05FKTsK
KyAgICBjYWlyb19zZXRfYW50aWFsaWFzKGNyLCBlbmFibGUgPyBDQUlST19BTlRJQUxJQVNfREVG
QVVMVCA6IENBSVJPX0FOVElBTElBU19OT05FKTsKIH0KIAotdm9pZCBzZXRDVE0oR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0pCit2b2lkIHNldENUTShjYWlyb190KiBjciwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCiB7CiAgICAgY29uc3QgY2Fpcm9fbWF0cml4X3QgbWF0cml4ID0gdG9DYWlyb01h
dHJpeCh0cmFuc2Zvcm0pOwotICAgIGNhaXJvX3NldF9tYXRyaXgocGxhdGZvcm1Db250ZXh0LmNy
KCksICZtYXRyaXgpOworICAgIGNhaXJvX3NldF9tYXRyaXgoY3IsICZtYXRyaXgpOwogfQogCi1B
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQpCitBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKGNhaXJvX3QqIGNyKQogewogICAgIGNhaXJvX21h
dHJpeF90IG07Ci0gICAgY2Fpcm9fZ2V0X21hdHJpeChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgJm0p
OworICAgIGNhaXJvX2dldF9tYXRyaXgoY3IsICZtKTsKICAgICByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKG0ueHgsIG0ueXgsIG0ueHksIG0ueXksIG0ueDAsIG0ueTApOwogfQogCkBAIC01NTYsNDUg
KzU1NSw0NSBAQCBib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KEdyYXBoaWNzQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQpCiB9IC8vIG5hbWVzcGFjZSBTdGF0ZQogCiBGaWxsU291cmNlOjpG
aWxsU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6IGdsb2Jh
bEFscGhhKHN0YXRlLmFscGhhKQotICAgICwgZmlsbFJ1bGUoc3RhdGUuZmlsbFJ1bGUpCisgICAg
OiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSgpKQorICAgICwgZmlsbFJ1bGUoc3RhdGUuZmlsbFJ1
bGUoKSkKIHsKLSAgICBpZiAoc3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgcGF0dGVybi5v
YmplY3QgPSBhZG9wdFJlZihzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJu
KEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgaWYgKGF1dG8gZmlsbFBhdHRlcm4gPSBzdGF0ZS5m
aWxsQnJ1c2goKS5wYXR0ZXJuKCkpIHsKKyAgICAgICAgcGF0dGVybi5vYmplY3QgPSBhZG9wdFJl
ZihmaWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSk7
CiAKLSAgICAgICAgYXV0byYgcGF0dGVybkltYWdlID0gc3RhdGUuZmlsbFBhdHRlcm4tPnRpbGVJ
bWFnZSgpOworICAgICAgICBhdXRvJiBwYXR0ZXJuSW1hZ2UgPSBmaWxsUGF0dGVybi0+dGlsZUlt
YWdlKCk7CiAgICAgICAgIHBhdHRlcm4uc2l6ZSA9IHBhdHRlcm5JbWFnZS5zaXplKCk7Ci0gICAg
ICAgIHBhdHRlcm4udHJhbnNmb3JtID0gc3RhdGUuZmlsbFBhdHRlcm4tPnBhdHRlcm5TcGFjZVRy
YW5zZm9ybSgpOwotICAgICAgICBwYXR0ZXJuLnJlcGVhdFggPSBzdGF0ZS5maWxsUGF0dGVybi0+
cmVwZWF0WCgpOwotICAgICAgICBwYXR0ZXJuLnJlcGVhdFkgPSBzdGF0ZS5maWxsUGF0dGVybi0+
cmVwZWF0WSgpOwotICAgIH0gZWxzZSBpZiAoc3RhdGUuZmlsbEdyYWRpZW50KSB7Ci0gICAgICAg
IGdyYWRpZW50LmJhc2UgPSBzdGF0ZS5maWxsR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3Rh
dGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICBpZiAoc3RhdGUuYWxwaGEg
IT0gMSkKLSAgICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBzdGF0ZS5maWxsR3Jh
ZGllbnQtPmNyZWF0ZVBhdHRlcm4oc3RhdGUuYWxwaGEsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNl
VHJhbnNmb3JtKTsKKyAgICAgICAgcGF0dGVybi50cmFuc2Zvcm0gPSBmaWxsUGF0dGVybi0+cGF0
dGVyblNwYWNlVHJhbnNmb3JtKCk7CisgICAgICAgIHBhdHRlcm4ucmVwZWF0WCA9IGZpbGxQYXR0
ZXJuLT5yZXBlYXRYKCk7CisgICAgICAgIHBhdHRlcm4ucmVwZWF0WSA9IGZpbGxQYXR0ZXJuLT5y
ZXBlYXRZKCk7CisgICAgfSBlbHNlIGlmIChhdXRvIGZpbGxHcmFkaWVudCA9IHN0YXRlLmZpbGxC
cnVzaCgpLmdyYWRpZW50KCkpIHsKKyAgICAgICAgZ3JhZGllbnQuYmFzZSA9IGZpbGxHcmFkaWVu
dC0+Y3JlYXRlUGF0dGVybigxLCBzdGF0ZS5maWxsQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsK
KyAgICAgICAgaWYgKHN0YXRlLmFscGhhKCkgIT0gMSkKKyAgICAgICAgICAgIGdyYWRpZW50LmFs
cGhhQWRqdXN0ZWQgPSBmaWxsR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oc3RhdGUuYWxwaGEoKSwg
c3RhdGUuZmlsbEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IGNvbG9yID0gc3RhdGUuZmlsbENvbG9yOworICAgICAgICBjb2xvciA9IHN0YXRlLmZpbGxCcnVz
aCgpLmNvbG9yKCk7CiB9CiAKIFN0cm9rZVNvdXJjZTo6U3Ryb2tlU291cmNlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKQot
ewotICAgIGlmIChzdGF0ZS5zdHJva2VQYXR0ZXJuKQotICAgICAgICBwYXR0ZXJuID0gYWRvcHRS
ZWYoc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5z
Zm9ybSgpKSk7Ci0gICAgZWxzZSBpZiAoc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKLSAgICAgICAg
Z3JhZGllbnQuYmFzZSA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEsIHN0
YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICBpZiAoc3RhdGUuYWxw
aGEgIT0gMSkKLSAgICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBzdGF0ZS5zdHJv
a2VHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSwgc3RhdGUuc3Ryb2tlR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSk7CisgICAgOiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSgpKQorewor
ICAgIGlmIChhdXRvIHN0cm9rZVBhdHRlcm4gPSBzdGF0ZS5zdHJva2VCcnVzaCgpLnBhdHRlcm4o
KSkKKyAgICAgICAgcGF0dGVybiA9IGFkb3B0UmVmKHN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgIGVsc2UgaWYgKGF1dG8gc3Ryb2tl
R3JhZGllbnQgPSBzdGF0ZS5zdHJva2VCcnVzaCgpLmdyYWRpZW50KCkpIHsKKyAgICAgICAgZ3Jh
ZGllbnQuYmFzZSA9IHN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEsIHN0YXRlLnN0cm9r
ZUJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIGlmIChzdGF0ZS5hbHBoYSgpICE9
IDEpCisgICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gc3Ryb2tlR3JhZGllbnQt
PmNyZWF0ZVBhdHRlcm4oc3RhdGUuYWxwaGEoKSwgc3RhdGUuc3Ryb2tlQnJ1c2goKS5zcGFjZVRy
YW5zZm9ybSgpKTsKICAgICB9IGVsc2UKLSAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHJva2VDb2xv
cjsKKyAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHJva2VCcnVzaCgpLmNvbG9yKCk7CiB9CiAKIFNo
YWRvd1N0YXRlOjpTaGFkb3dTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUp
Ci0gICAgOiBvZmZzZXQoc3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgYmx1cihzdGF0ZS5zaGFk
b3dCbHVyKQotICAgICwgY29sb3Ioc3RhdGUuc2hhZG93Q29sb3IpCi0gICAgLCBpZ25vcmVUcmFu
c2Zvcm1zKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAgICwgZ2xvYmFsQWxwaGEo
c3RhdGUuYWxwaGEpCi0gICAgLCBnbG9iYWxDb21wb3NpdGVPcGVyYXRvcihzdGF0ZS5jb21wb3Np
dGVPcGVyYXRvcikKKyAgICA6IG9mZnNldChzdGF0ZS5kcm9wU2hhZG93KCkub2Zmc2V0KQorICAg
ICwgYmx1cihzdGF0ZS5kcm9wU2hhZG93KCkuYmx1clJhZGl1cykKKyAgICAsIGNvbG9yKHN0YXRl
LmRyb3BTaGFkb3coKS5jb2xvcikKKyAgICAsIGlnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSkKKyAgICAsIGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkpCisg
ICAgLCBnbG9iYWxDb21wb3NpdGVPcGVyYXRvcihzdGF0ZS5jb21wb3NpdGVNb2RlKCkub3BlcmF0
aW9uKQogewogfQogCkBAIC02MTUsMTQgKzYxNCwxNCBAQCBib29sIFNoYWRvd1N0YXRlOjppc1Jl
cXVpcmVkKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dCbHVyLCBzaW5j
ZSB0aGVyZSBhcmUgbm8gdHJhbnNmb3JtYXRpb25zIHRvIGFwcGx5IHRvIHRoZSBjYW52YXMuCi0g
ICAgaWYgKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KS5pc0lkZW50aXR5KCkpCisgICAg
aWYgKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0LmNyKCkpLmlzSWRlbnRpdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gT3RoZXJ3aXNlLCBubyBjaGFuY2UgYXZvaWRp
bmcgU2hhZG93Qmx1ci4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBzZXRMaW5lQ2FwKEdy
YXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVDYXAgbGluZUNhcCkKK3Zv
aWQgc2V0TGluZUNhcChjYWlyb190KiBjciwgTGluZUNhcCBsaW5lQ2FwKQogewogICAgIGNhaXJv
X2xpbmVfY2FwX3QgY2Fpcm9DYXAgeyB9OwogICAgIHN3aXRjaCAobGluZUNhcCkgewpAQCAtNjM2
LDE4ICs2MzUsMTggQEAgdm9pZCBzZXRMaW5lQ2FwKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0
Zm9ybUNvbnRleHQsIExpbmVDYXAgbGluZUNhcCkKICAgICAgICAgY2Fpcm9DYXAgPSBDQUlST19M
SU5FX0NBUF9TUVVBUkU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYWlyb19zZXRfbGlu
ZV9jYXAocGxhdGZvcm1Db250ZXh0LmNyKCksIGNhaXJvQ2FwKTsKKyAgICBjYWlyb19zZXRfbGlu
ZV9jYXAoY3IsIGNhaXJvQ2FwKTsKIH0KIAotdm9pZCBzZXRMaW5lRGFzaChHcmFwaGljc0NvbnRl
eHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKK3ZvaWQgc2V0TGluZURhc2goY2Fpcm9fdCogY3IsIGNvbnN0IERhc2hBcnJh
eSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewogICAgIGlmIChzdGQ6OmFsbF9vZihkYXNo
ZXMuYmVnaW4oKSwgZGFzaGVzLmVuZCgpLCBbXShhdXRvJiBkYXNoKSB7IHJldHVybiAhZGFzaDsg
fSkpCi0gICAgICAgIGNhaXJvX3NldF9kYXNoKHBsYXRmb3JtQ29udGV4dC5jcigpLCAwLCAwLCAw
KTsKKyAgICAgICAgY2Fpcm9fc2V0X2Rhc2goY3IsIDAsIDAsIDApOwogICAgIGVsc2UKLSAgICAg
ICAgY2Fpcm9fc2V0X2Rhc2gocGxhdGZvcm1Db250ZXh0LmNyKCksIGRhc2hlcy5kYXRhKCksIGRh
c2hlcy5zaXplKCksIGRhc2hPZmZzZXQpOworICAgICAgICBjYWlyb19zZXRfZGFzaChjciwgZGFz
aGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQgc2V0TGlu
ZUpvaW4oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUpvaW4gbGlu
ZUpvaW4pCit2b2lkIHNldExpbmVKb2luKGNhaXJvX3QqIGNyLCBMaW5lSm9pbiBsaW5lSm9pbikK
IHsKICAgICBjYWlyb19saW5lX2pvaW5fdCBjYWlyb0pvaW4geyB9OwogICAgIHN3aXRjaCAobGlu
ZUpvaW4pIHsKQEAgLTY2MSwxMiArNjYwLDEyIEBAIHZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUpvaW4gbGluZUpvaW4pCiAgICAgICAg
IGNhaXJvSm9pbiA9IENBSVJPX0xJTkVfSk9JTl9CRVZFTDsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIGNhaXJvX3NldF9saW5lX2pvaW4ocGxhdGZvcm1Db250ZXh0LmNyKCksIGNhaXJvSm9p
bik7CisgICAgY2Fpcm9fc2V0X2xpbmVfam9pbihjciwgY2Fpcm9Kb2luKTsKIH0KIAotdm9pZCBz
ZXRNaXRlckxpbWl0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0
IG1pdGVyTGltaXQpCit2b2lkIHNldE1pdGVyTGltaXQoY2Fpcm9fdCogY3IsIGZsb2F0IG1pdGVy
TGltaXQpCiB7Ci0gICAgY2Fpcm9fc2V0X21pdGVyX2xpbWl0KHBsYXRmb3JtQ29udGV4dC5jcigp
LCBtaXRlckxpbWl0KTsKKyAgICBjYWlyb19zZXRfbWl0ZXJfbGltaXQoY3IsIG1pdGVyTGltaXQp
OwogfQogCiB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwg
Y29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQpAQCAtNjgyLDcgKzY4MSw3IEBAIHZvaWQg
ZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zCiB7CiAgICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7
CiAgICAgICAgIFNoYWRvd0JsdXIgc2hhZG93KHsgc2hhZG93U3RhdGUuYmx1ciwgc2hhZG93U3Rh
dGUuYmx1ciB9LCBzaGFkb3dTdGF0ZS5vZmZzZXQsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dT
dGF0ZS5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICAgICAgc2hhZG93LmRyYXdSZWN0U2hhZG93KFN0
YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZv
cm1Db250ZXh0KSwgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSwKKyAgICAgICAgc2hhZG93LmRyYXdS
ZWN0U2hhZG93KFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0LmNyKCkpLCBTdGF0ZTo6Z2V0
Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3QpLAogICAg
ICAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHQsICZzaGFkb3dTdGF0ZV0oSW1hZ2VCdWZmZXImIGxh
eWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNpemUm
IGxheWVyU2l6ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBmaWxsU2hhZG93QnVm
ZmVyKHBsYXRmb3JtQ29udGV4dCwgbGF5ZXJJbWFnZSwgbGF5ZXJPcmlnaW4sIGxheWVyU2l6ZSwg
c2hhZG93U3RhdGUpOwpAQCAtNzEzLDcgKzcxMiw3IEBAIHZvaWQgZmlsbFJvdW5kZWRSZWN0KEdy
YXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJl
CiB7CiAgICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7CiAgICAgICAgIFNoYWRvd0Js
dXIgc2hhZG93KHsgc2hhZG93U3RhdGUuYmx1ciwgc2hhZG93U3RhdGUuYmx1ciB9LCBzaGFkb3dT
dGF0ZS5vZmZzZXQsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5pZ25vcmVUcmFuc2Zv
cm1zKTsKLSAgICAgICAgc2hhZG93LmRyYXdSZWN0U2hhZG93KFN0YXRlOjpnZXRDVE0ocGxhdGZv
cm1Db250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgcmVjdCwK
KyAgICAgICAgc2hhZG93LmRyYXdSZWN0U2hhZG93KFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250
ZXh0LmNyKCkpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCByZWN0LAog
ICAgICAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHQsICZzaGFkb3dTdGF0ZV0oSW1hZ2VCdWZmZXIm
IGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNp
emUmIGxheWVyU2l6ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBmaWxsU2hhZG93
QnVmZmVyKHBsYXRmb3JtQ29udGV4dCwgbGF5ZXJJbWFnZSwgbGF5ZXJPcmlnaW4sIGxheWVyU2l6
ZSwgc2hhZG93U3RhdGUpOwpAQCAtNzQ2LDcgKzc0NSw3IEBAIHZvaWQgZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxv
YXRSCiAKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgU2hhZG93
Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFkb3dTdGF0ZS5ibHVyIH0sIHNoYWRv
d1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLmlnbm9yZVRyYW5z
Zm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd0luc2V0U2hhZG93KFN0YXRlOjpnZXRDVE0ocGxh
dGZvcm1Db250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgcmVj
dCwgcm91bmRlZEhvbGVSZWN0LAorICAgICAgICBzaGFkb3cuZHJhd0luc2V0U2hhZG93KFN0YXRl
OjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0LmNyKCkpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0
Zm9ybUNvbnRleHQpLCByZWN0LCByb3VuZGVkSG9sZVJlY3QsCiAgICAgICAgICAgICBbJnBsYXRm
b3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3Qg
RmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0U2l6ZSYgbGF5ZXJTaXplKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxTaGFkb3dCdWZmZXIocGxhdGZvcm1Db250
ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5ZXJTaXplLCBzaGFkb3dTdGF0ZSk7CkBA
IC04NjMsOSArODYyLDkgQEAgdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShHcmFwaGljc0NvbnRleHRD
YWlybyYgcGxhdGZvcm1Db250ZXh0LCBjYWlyb19zdXJmYWNlX3QqIHMKIAogICAgIC8vIFNldCB0
aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgogICAgIGlmIChvcHRpb25zLmNvbXBvc2l0ZU9wZXJh
dG9yKCkgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgJiYgb3B0aW9ucy5ibGVuZE1v
ZGUoKSA9PSBCbGVuZE1vZGU6Ok5vcm1hbCAmJiAhY2Fpcm9TdXJmYWNlSGFzQWxwaGEoc3VyZmFj
ZSkpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3Jt
Q29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0
LmNyKCksIENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5LCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiAgICAg
ZWxzZQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9y
bUNvbnRleHQsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUo
KSk7CisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3Jt
Q29udGV4dC5jcigpLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRN
b2RlKCkpOwogCiAgICAgRmxvYXRSZWN0IGRzdCA9IGRlc3RSZWN0OwogICAgIGlmIChvcHRpb25z
Lm9yaWVudGF0aW9uKCkgIT0gSW1hZ2VPcmllbnRhdGlvbjo6Tm9uZSkgewpAQCAtOTY0LDcgKzk2
Myw3IEBAIHZvaWQgZHJhd1N1cmZhY2UoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCwgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlCiAKICAgICBTaGFkb3dCbHVyIHNoYWRvdyh7
IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwgc2hhZG93U3RhdGUub2Zmc2V0
LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3JlVHJhbnNmb3Jtcyk7CiAgICAg
aWYgKHNoYWRvdy50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKLSAgICAgICAgc2hh
ZG93LmRyYXdTaGFkb3dMYXllcihTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRl
OjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGRlc3RSZWN0LAorICAgICAgICBzaGFk
b3cuZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0LmNyKCkpLCBT
dGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBkZXN0UmVjdCwKICAgICAgICAg
ICAgIFsmcGF0dGVybiwgJmRlc3RSZWN0XShHcmFwaGljc0NvbnRleHQmIHNoYWRvd0NvbnRleHQp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZHJhd1BhdHRlcm5Ub0NhaXJvQ29udGV4
dChzaGFkb3dDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBwYXR0ZXJuLmdldCgpLCBk
ZXN0UmVjdCwgMSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCmluZGV4IDU0OTg1NjNjZTQ5YzE1ZTM1ZDA4MjU5
YzJkMjZkYzdiMTdjZWE4ODUuLmU1YTM0MjRhZTYxMTcwN2FjOTdkMGQxOWU3Y2MzMDYxYWI3MDYx
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvT3BlcmF0aW9ucy5oCkBAIC00NiwyMiArNDYsMjEgQEAgY2xhc3MgQ29sb3I7CiBj
bGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgRmxvYXRTaXpl
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGU7CiBjbGFzcyBQYXRoOwogCi1zdHJ1Y3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGU7Ci0KIG5hbWVzcGFjZSBDYWlybyB7CiAKIG5hbWVzcGFjZSBTdGF0
ZSB7CiAKLXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgZmxv
YXQpOwotdm9pZCBzZXRTdHJva2VTdHlsZShHcmFwaGljc0NvbnRleHRDYWlybyYsIFN0cm9rZVN0
eWxlKTsKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJvX3QqLCBmbG9hdCk7Cit2b2lkIHNl
dFN0cm9rZVN0eWxlKGNhaXJvX3QqLCBTdHJva2VTdHlsZSk7CiAKLXZvaWQgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSk7Ci12b2lkIHNldFNob3VsZEFudGlhbGlhcyhHcmFwaGljc0NvbnRleHRDYWlybyYsIGJv
b2wpOwordm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oY2Fpcm9fdCosIENvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUpOwordm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoY2Fpcm9fdCosIGJvb2wp
OwogCi12b2lkIHNldENUTShHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpOwotQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHRDYWlybyYpOwor
dm9pZCBzZXRDVE0oY2Fpcm9fdCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworQWZmaW5lVHJh
bnNmb3JtIGdldENUTShjYWlyb190Kik7CiAKIEludFJlY3QgZ2V0Q2xpcEJvdW5kcyhHcmFwaGlj
c0NvbnRleHRDYWlybyYpOwogRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmKTsKQEAgLTEyNSwxMCArMTI0LDEwIEBAIHN0
cnVjdCBTaGFkb3dTdGF0ZSB7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgZ2xvYmFsQ29tcG9zaXRl
T3BlcmF0b3IgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciB9OwogfTsKIAotdm9pZCBz
ZXRMaW5lQ2FwKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgTGluZUNhcCk7Ci12b2lkIHNldExpbmVE
YXNoKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpOwotdm9p
ZCBzZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYsIExpbmVKb2luKTsKLXZvaWQgc2V0
TWl0ZXJMaW1pdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGZsb2F0KTsKK3ZvaWQgc2V0TGluZUNh
cChjYWlyb190KiwgTGluZUNhcCk7Cit2b2lkIHNldExpbmVEYXNoKGNhaXJvX3QqLCBjb25zdCBE
YXNoQXJyYXkmLCBmbG9hdCk7Cit2b2lkIHNldExpbmVKb2luKGNhaXJvX3QqLCBMaW5lSm9pbik7
Cit2b2lkIHNldE1pdGVyTGltaXQoY2Fpcm9fdCosIGZsb2F0KTsKIAogdm9pZCBmaWxsUmVjdChH
cmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZpbGxTb3VyY2Um
LCBjb25zdCBTaGFkb3dTdGF0ZSYpOwogdm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWly
byYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgY29uc3QgU2hhZG93U3RhdGUmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm8uY3BwCmluZGV4IGE3YWYwY2ViNTI0OTA0MDQxZWUxMmQ1MWY4OWM2ZGYxNmNiMzYwMzcuLjNk
MTk3NTc5YTJjYzIyOTkzMzg4NWExYTE1OTVjNjM5NmNhODZkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAtNzIs
NyArNzIsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIGF1dG8mIHN0YXRlID0gY29u
dGV4dC5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3R2x5cGhzKCpjb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3Rh
dGUpLAogICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgc2NhbGVkRm9u
dCwgc3ludGhldGljQm9sZE9mZnNldCwgY2Fpcm9HbHlwaHMsIHhPZmZzZXQsCi0gICAgICAgIHN0
YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dP
ZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLAorICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUo
KSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKCksIHN0YXRlLmRyb3BTaGFkb3coKS5vZmZzZXQsIHN0
YXRlLmRyb3BTaGFkb3coKS5jb2xvciwKICAgICAgICAgZm9udFNtb290aGluZ01vZGUpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFk
aWVudENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YWRpZW50Q2Fpcm8uY3BwCmluZGV4IDkwMDk2YWM2NDUyMjRkYmZkYzYwYmZhNmNhY2FkMDMwNzZj
YjI5N2QuLmJlMmMyOTVjYTUwN2Q5YjU2M2Y4NWQ1YmNiODcwOTcyZjBkYWQ4ZWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gR3Jh
ZGllbnQ6OmNyZWF0ZVBhdHRlcm4oZmxvYXQgZ2xvYmFsQWxwaGEsIGNvbnN0IEFmZmluZVQKIAog
dm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBhdXRvIHBhdHRlcm4gPSBjcmVhdGVQYXR0ZXJuKDEuMCwgY29u
dGV4dC5zdGF0ZSgpLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICBhdXRvIHBhdHRl
cm4gPSBjcmVhdGVQYXR0ZXJuKDEuMCwgY29udGV4dC5maWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAg
ICAgaWYgKCFwYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAppbmRleCBjMzIzMDQ0NTM1MWIwM2YyYWE4NzM2YWVlMmJjZTc4YmM0MzYxZjQ5Li44
NGQwMzlkZGU2NThkNzdkYjhhMjg0NTVhODliNDNhNzExZGMzZDJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA4
IE51YW50aSBMdGQuCkBAIC02OCw3ICs2OCw4IEBAIHB1YmxpYzoKIH07CiAKIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyhSZWZQdHI8Y2Fpcm9fdD4mJiBjb250ZXh0
KQotICAgIDogbV9jcihXVEZNb3ZlKGNvbnRleHQpKQorICAgIDogR3JhcGhpY3NDb250ZXh0KEZs
b2F0UmVjdDo6aW5maW5pdGVSZWN0KCkpCisgICAgLCBtX2NyKFdURk1vdmUoY29udGV4dCkpCiB7
CiAgICAgbV9jYWlyb1N0YXRlU3RhY2suYXBwZW5kKENhaXJvU3RhdGUoKSk7CiAgICAgbV9jYWly
b1N0YXRlID0gJm1fY2Fpcm9TdGF0ZVN0YWNrLmxhc3QoKTsKQEAgLTg2LDEwICs4Nyw5IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0Q2Fpcm86Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRDYWlybzo6
Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitSZW5kZXJpbmdN
b2RlIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHsKLSAgICBV
TlVTRURfUEFSQU0oaW5jbHVkZVNjYWxlKTsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRD
VE0oKnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjppc0FjY2Vs
ZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCiBHcmFwaGljc0NvbnRl
eHRDYWlybyogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CkBA
IC0xMzQsNTMgKzEzNCwxMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVzdG9yZSgp
CiAgICAgY2Fpcm9fcmVzdG9yZShtX2NyLmdldCgpKTsKIH0KIAotLy8gRHJhd3MgYSBmaWxsZWQg
cmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YXBwbHlTdGF0ZUNoYW5nZXMoKQogewotICAg
IEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBDYWlybzo6ZHJhd1JlY3QoKnRoaXMsIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3Rh
dGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOworICAg
IGlmICghc3RhdGUoKS5jaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0
byBjaGFuZ2UgOiBzdGF0ZSgpLmNoYW5nZXMoKSkgeworICAgICAgICBzd2l0Y2ggKGNoYW5nZSkg
eworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTToKKyAgICAg
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKG1fY3IuZ2V0KCksIHN0YXRlKCkuZ2V0Q1RNKCkp
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3M6CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dFN0cm9rZVRoaWNrbmVzcyhtX2NyLmdldCgpLCBzdGQ6Om1heChzdGF0ZSgpLnN0cm9rZVRoaWNr
bmVzcygpLCAwLmYpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGU6CisgICAgICAgICAgICBDYWlybzo6
U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fY3IuZ2V0KCksIHN0YXRlKCkuc3Ryb2tlU3R5bGUoKSk7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OkxpbmVDYXA6CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZUNhcChtX2NyLmdl
dCgpLCBzdGF0ZSgpLmxpbmVDYXAoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luOgorICAgICAgICAgICAg
Q2Fpcm86OnNldExpbmVKb2luKG1fY3IuZ2V0KCksIHN0YXRlKCkubGluZUpvaW4oKSk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkxpbmVEYXNoOgorICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVEYXNoKG1fY3IuZ2V0KCks
IHN0YXRlKCkubGluZURhc2goKS5kYXNoZXMsIHN0YXRlKCkubGluZURhc2goKS5vZmZzZXQpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpNaXRlckxpbWl0OgorICAgICAgICAgICAgQ2Fpcm86OnNldE1pdGVyTGltaXQobV9j
ci5nZXQoKSwgc3RhdGUoKS5taXRlckxpbWl0KCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVNb2RlOgor
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9jci5nZXQo
KSwgc3RhdGUoKS5jb21wb3NpdGVNb2RlKCkub3BlcmF0aW9uLCBzdGF0ZSgpLmNvbXBvc2l0ZU1v
ZGUoKS5ibGVuZE1vZGUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAgICAgICAgaWYgKHN0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBNZWFu
aW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQKKyAgICAgICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQg
c2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcworICAgICAgICAg
ICAgICAgIGF1dG8gZHJvcFNoYWRvdyA9IHRoaXMtPmRyb3BTaGFkb3coKTsKKyAgICAgICAgICAg
ICAgICBkcm9wU2hhZG93Lm9mZnNldCA9IHsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKSwgLWRy
b3BTaGFkb3cub2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgICAgICAgICAgc2V0RHJvcFNoYWRv
dyhkcm9wU2hhZG93KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzOgor
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9jci5nZXQoKSwg
c3RhdGUoKS5zaG91bGRBbnRpYWxpYXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBk
aWRBcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnRo
aXMsIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBo
YSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKCp0aGlzLCBvcGFjaXR5KTsKIH0KIAotLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJh
dyBib3JkZXJzLCBzbyB3ZSBzaG91bGQgbm90IGRyYXcgc2hhZG93cy4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKQogewotICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQotICAgICAg
ICByZXR1cm47CisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwor
ICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigqdGhpcyk7Cit9CiAKLSAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdMaW5lKCp0aGlzLCBwb2ludDEs
IHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Cit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmNsaXAocmVjdCk7CisgICAgQ2Fpcm86OmNsaXAoKnRoaXMsIHJlY3QpOwogfQogCi0vLyBU
aGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBp
biBsaXN0cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewotICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnRoaXMsIHJlY3QsIHN0YXRlLmZp
bGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MpOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgY2xpcFJ1
bGUpOworICAgIENhaXJvOjpjbGlwUGF0aCgqdGhpcywgcGF0aCwgY2xpcFJ1bGUpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmNs
aXBPdXQoKnRoaXMsIHJlY3QpOworfQogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwotICAgIENhaXJvOjpmaWxsUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBDYWlybzo6Y2xpcE91dCgqdGhp
cywgcGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0g
ICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gbmF0
aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkK
KyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCp0aGlzLCBuYXRpdmVJbWFnZS0+cGxh
dGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Cit9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpT
dHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgQ2Fpcm86OmNsZWFyUmVjdCgqdGhpcywgcmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTE5Niw4ICsyNTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8gcGF0dGVybiA9IGdyYWRp
ZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7
CisgICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIGZpbGxTcGFj
ZVRyYW5zZm9ybSgpKTsKICAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApAQCAt
MjA2LDM1ICsyNjIsNjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiAgICAgcmVzdG9yZSgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogeworICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9y
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQoreworICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOworICAgIENhaXJvOjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6Rmls
bFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGlm
IChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgQ2Fpcm86OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUp
OwotICAgIENhaXJvOjpmaWxsUmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCp0
aGlzLCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpmaWxsUGF0aCgqdGhpcywgcGF0aCwgQ2Fp
cm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIENhaXJvOjpjbGlwKCp0aGlzLCByZWN0KTsKKyAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0cm9rZVJlY3QoKnRo
aXMsIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBDYWlybzo6
Y2xpcFBhdGgoKnRoaXMsIHBhdGgsIGNsaXBSdWxlKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAg
ICBDYWlybzo6c3Ryb2tlUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpjbGlwQm91bmRzKCkgY29uc3QKKy8vIERyYXdzIGEgZmlsbGVkIHJlY3Rhbmds
ZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAg
ICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7CisgICAgQ2Fpcm86OmRyYXdSZWN0KCp0aGlz
LCByZWN0LCBib3JkZXJUaGlja25lc3MsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJv
a2VDb2xvcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKKy8v
IFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3
IHNoYWRvd3MuCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAoYXV0
byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpKQotICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnRoaXMsIG5hdGl2ZUltYWdl
LT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0KTsKKyAgICBpZiAoc3Ryb2tlU3R5bGUo
KSA9PSBOb1N0cm9rZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ2Fpcm86OmRyYXdMaW5lKCp0
aGlzLCBwb2ludDEsIHBvaW50Miwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tl
VGhpY2tuZXNzKCksIHNob3VsZEFudGlhbGlhcygpKTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMg
b25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCp0aGlzLCByZWN0LCBmaWxsQ29sb3IoKSwgc3Ry
b2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTI2MSwxMzgg
KzM0Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBpZiAod2lkdGhz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0
KCp0aGlzLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxp
bmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKCp0aGlzLCByZWN0LCBzdHlsZSk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJv
dW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHJvdW5kaW5nTW9k
ZSk7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscygqdGhpcywg
cmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQotewotICAgIENhaXJvOjp0cmFuc2xhdGUoKnRoaXMsIHgsIHkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNz
KCp0aGlzLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6
OnNldFN0cm9rZVN0eWxlKCp0aGlzLCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChz
dGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0
aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cg
YW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYg
c2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbV9zdGF0ZS5z
aGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdo
dCgpIH07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqdGhpcywgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0
YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFu
dGlhbGlhcygqdGhpcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQotewotICAgIENhaXJvOjpjb25jYXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLXsKLSAgICBDYWlybzo6U3RhdGU6OnNldENUTSgqdGhpcywgdHJhbnNmb3JtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXll
cihvcGFjaXR5KTsKLSAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqdGhpcywgb3Bh
Y2l0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0g
ICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCp0aGlzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBD
YWlybzo6Y2xlYXJSZWN0KCp0aGlzLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkK
LXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVJl
Y3QoKnRoaXMsIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENh
aXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBDYWlybzo6c2V0TGluZUNhcCgq
dGhpcywgbGluZUNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIENh
aXJvOjpzZXRMaW5lRGFzaCgqdGhpcywgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0g
ICAgQ2Fpcm86OnNldExpbmVKb2luKCp0aGlzLCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCi17Ci0gICAgQ2Fpcm86
OnNldE1pdGVyTGltaXQoKnRoaXMsIG1pdGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIENhaXJvOjpjbGlwT3V0KCp0
aGlzLCBwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKGZsb2F0
IHJhZGlhbnMpCi17Ci0gICAgQ2Fpcm86OnJvdGF0ZSgqdGhpcywgcmFkaWFucyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsK
LSAgICBDYWlybzo6c2NhbGUoKnRoaXMsIHNpemUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xp
cE91dCgqdGhpcywgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxS
b3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KCp0aGlzLCByZWN0
LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3
UGxhdGZvcm1JbWFnZSgqdGhpcywgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkg
fSwgYWxwaGEoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQpAQCAtNDA0LDExICszNjAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdAog
ICAgIENhaXJvOjpkcmF3UGF0dGVybigqdGhpcywgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgp
LmdldCgpLCBuYXRpdmVJbWFnZS5zaXplKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwogfQogCi1SZW5kZXJpbmdNb2RlIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0
YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpID8gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwotfQotCiB2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKICAgICBpZiAoIWZvbnQucGxhdGZvcm1E
YXRhKCkuc2l6ZSgpKQpAQCAtNDM0LDEyICszODUsMzEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KgogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0dseXBo
cygqdGhpcywgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwKICAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZv
bnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAotICAgICAgICBz
dGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93
T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKKyAgICAgICAgdGV4dERyYXdpbmdNb2RlKCksIHN0
cm9rZVRoaWNrbmVzcygpLCBzaGFkb3dPZmZzZXQoKSwgc2hhZG93Q29sb3IoKSwKICAgICAgICAg
Zm9udFNtb290aGluZyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywg
U3Ryb2tlU3R5bGUpCit7CisgICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlQ29sb3IoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3sKKyAg
ICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUpOwor
fQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQoreworICAg
IFVOVVNFRF9QQVJBTShyb3VuZGluZ01vZGUpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJv
dW5kVG9EZXZpY2VQaXhlbHMoKnRoaXMsIHJlY3QpOworfQorCiBjYWlyb190KiBHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y3IoKSBjb25zdAogeworICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0
Q2Fpcm8mPigqdGhpcykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZXR1cm4gbV9jci5nZXQo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKaW5kZXggNTY0NjFjMTU5YTU4M2M4OWM2
MWU4ZjAyZTRlMGJlZTdiMDU5MzJlZi4uNmZjZGUzYThiYjFkZjlmNTViZjY5YmJiZjRmYzY0NjVm
ODVlOWFiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCkBAIC0xLDYgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJp
Z2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTAsNjEgKzUxLDQ5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IGZpbmFsOwogICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Cisg
ICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lk
IHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5
U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAKLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmlu
YWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7
Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCBzZXRNaXRl
ckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAg
IHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAg
dm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIAorICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwog
Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKICAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1v
ZGU6Ok5vcm1hbCkgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOwogICAgIHZvaWQg
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisKICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAg
dm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdH
bHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0KSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICB2
b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKICAgICB2b2lkIGRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKLSAgICB2
b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUpIGZpbmFsOworCiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKIAotICAgIHZvaWQgc2F2ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwot
Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJvdGF0
ZShmbG9hdCkgZmluYWw7Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKLSAgICB2
b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgY29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7CiAKLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBj
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgZmluYWw7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZp
bmFsOwotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAg
ICAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2
b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJv
b2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFs
OwogCiAgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0Jiwg
R3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5jcHAKaW5kZXggOTZjNzYxMzU0MWJkYzY1OGE3ODdhYjAzZTc3ODE4ODM0
ZDMxODVjNC4uZGMyNjc5N2UwYmNkYjYzYzJmNWFhY2RiODA2NDgyNTY1OTg4NWRlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtNjUsNyArNjUsNyBAQCB2b2lkIElt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdAogICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRl
ID0gZGVzdENvbnRleHQuc3RhdGUoKTsKIAogICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgZHJhd1BsYXRmb3JtSW1hZ2UoKmRlc3RDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJD
b3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKKyAgICAg
ICAgZHJhd1BsYXRmb3JtSW1hZ2UoKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFn
ZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3Rp
bmF0aW9uQ29udGV4dFN0YXRlLmFscGhhKCksIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRl
eHRTdGF0ZVNhdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0Nv
bnRleHRTdGF0ZVNhdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTg1NmEwNDM5M2ZkMjRlOTYyOGY2ZmU5MzQ2
OWVlYmVhNGFiYjU5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaApAQCAtMCwwICsxLDc0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFVTRShDRykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDR0NvbnRl
eHRTdGF0ZVNhdmVyIHsKK3B1YmxpYzoKKyAgICBDR0NvbnRleHRTdGF0ZVNhdmVyKENHQ29udGV4
dFJlZiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKKyAgICAgICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3Jl
KQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBDR0Nv
bnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7CisgICAgfQorICAgIAorICAgIH5DR0NvbnRleHRT
dGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAg
ICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHNhdmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsK
KyAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOworICAgICAgICBtX3NhdmVB
bmRSZXN0b3JlID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmUoKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAgICBDR0NvbnRleHRSZXN0b3Jl
R1N0YXRlKG1fY29udGV4dCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBkaWRTYXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3NhdmVBbmRSZXN0b3JlOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgQ0dDb250ZXh0
UmVmIG1fY29udGV4dDsKKyAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5k
ZXggMzI0NWM2MDA0MzE1NTJkNTEzYjc0ZWViYzA5ZjMxOGVlYzNkZDcyYS4uN2VmYzcyYzllN2Qy
OGFlMjZkMDE2ZTA2Y2I3MTg4YmE2ODA4YzcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4NSwxNCArMTg1LDEzIEBAIHN0
YXRpYyB2b2lkIHNldENHQmxlbmRNb2RlKENHQ29udGV4dFJlZiBjb250ZXh0LCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgQmxlbmRNb2RlCiB9CiAKIEdyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0Nv
bnRleHRDRyhDR0NvbnRleHRSZWYgY2dDb250ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KENH
Q29udGV4dEdldENsaXBCb3VuZGluZ0JveChjZ0NvbnRleHQpLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6aW5pdGlhbENoYW5nZUZsYWdzLCBDR0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KSkKIHsKICAg
ICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhID0gbmV3IEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpOwotICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBkaWRVcGRh
dGVTdGF0ZShtX3N0YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSB9KTsKLSAgICBtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkgPSBjb3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50
ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBzZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KGNvcmVJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRl
cnBvbGF0aW9uUXVhbGl0eShpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpKSkpOwogfQogCiBHcmFw
aGljc0NvbnRleHRDRzo6fkdyYXBoaWNzQ29udGV4dENHKCkKQEAgLTIwNiw2ICsyMDUsMTQgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHRDRzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIH0KIAog
Q0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENHOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAor
eworICAgIC8vIFNvbWUgY2FsbGVycyB0byB0aGlzIG1ldGhvZCB1c2VzIHRoZSBwbGF0Zm9ybSBj
b250ZXh0IG91dHNpZGUgdGhlIHNjb3BlCisgICAgLy8gb2YgdGhpcyBjbGFzcy4gQ29tbWl0IGFu
eSBjaGFuZ2VzIGJlZm9yZSByZXR1cm5pbmcgdGhlIHBsYXRmb3JtIGNvbnRleHQuCisgICAgY29u
c3RfY2FzdDxHcmFwaGljc0NvbnRleHRDRyY+KCp0aGlzKS5hcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJldHVybiBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpOworfQorCitDR0NvbnRleHRSZWYg
R3JhcGhpY3NDb250ZXh0Q0c6OmludGVybmFsUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAg
ICBBU1NFUlQobV9kYXRhLT5tX2NnQ29udGV4dCk7CiAgICAgcmV0dXJuIG1fZGF0YS0+bV9jZ0Nv
bnRleHQuZ2V0KCk7CkBAIC0zMzgsNyArMzQ1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXoK
ICNlbmRpZgogCiAgICAgYXV0byBvbGRDb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJh
dGlvbigpOwotICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRNb2RlT3BlcmF0aW9uKCk7Cisg
ICAgYXV0byBvbGRCbGVuZE1vZGUgPSBibGVuZE1vZGUoKTsKICAgICBzZXRDR0JsZW5kTW9kZShj
b250ZXh0LCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkp
OwogCiAgICAgLy8gTWFrZSB0aGUgb3JpZ2luIGJlIGF0IGFkanVzdGVkRGVzdFJlY3QubG9jYXRp
b24oKQpAQCAtMzk2LDcgKzQwMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgQ0dD
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgIENHQ29udGV4dENsaXBU
b1JlY3QoY29udGV4dCwgZGVzdFJlY3QpOwogCi0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9w
dGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0
Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVu
ZE1vZGUoKSB9KTsKIAogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBkZXN0UmVj
dC54KCksIGRlc3RSZWN0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRT
Y2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CkBAIC01NTUsMTMgKzU2MiwxMyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKCFtX3N0
YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKCFzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShnZXRV
c2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCi0gICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4gPSBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RN
KTsKKyAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IHN0cm9rZVBhdHRlcm4oKS0+Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTU3NCwxMyArNTgxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFw
cGx5RmlsbFBhdHRlcm4oKQogewotICAgIGlmICghbV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICBp
ZiAoIWZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBj
Z0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRv
QmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwog
Ci0gICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4gPSBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQ
bGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CisgICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4g
PSBmaWxsUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CiAg
ICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApAQCAtNTkxLDExICs1
OTgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVybigpCiAgICAg
Q0dDb250ZXh0U2V0RmlsbFBhdHRlcm4oY2dDb250ZXh0LCBwbGF0Zm9ybVBhdHRlcm4uZ2V0KCks
ICZwYXR0ZXJuQWxwaGEpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2lu
Z01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDR1BhdGhEcmF3aW5nTW9k
ZSYgbW9kZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHUGF0aERyYXdpbmdNb2RlJiBtb2RlKQogewotICAg
IGJvb2wgc2hvdWxkRmlsbCA9IHN0YXRlLmZpbGxQYXR0ZXJuIHx8IHN0YXRlLmZpbGxDb2xvci5p
c1Zpc2libGUoKTsKLSAgICBib29sIHNob3VsZFN0cm9rZSA9IHN0YXRlLnN0cm9rZVBhdHRlcm4g
fHwgKHN0YXRlLnN0cm9rZVN0eWxlICE9IE5vU3Ryb2tlICYmIHN0YXRlLnN0cm9rZUNvbG9yLmlz
VmlzaWJsZSgpKTsKLSAgICBib29sIHVzZUVPRmlsbCA9IHN0YXRlLmZpbGxSdWxlID09IFdpbmRS
dWxlOjpFdmVuT2RkOworICAgIGJvb2wgc2hvdWxkRmlsbCA9IGNvbnRleHQuZmlsbFBhdHRlcm4o
KSB8fCBjb250ZXh0LmZpbGxDb2xvcigpLmlzVmlzaWJsZSgpOworICAgIGJvb2wgc2hvdWxkU3Ry
b2tlID0gY29udGV4dC5zdHJva2VQYXR0ZXJuKCkgfHwgKGNvbnRleHQuc3Ryb2tlU3R5bGUoKSAh
PSBOb1N0cm9rZSAmJiBjb250ZXh0LnN0cm9rZUNvbG9yKCkuaXNWaXNpYmxlKCkpOworICAgIGJv
b2wgdXNlRU9GaWxsID0gY29udGV4dC5maWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkOwog
CiAgICAgaWYgKHNob3VsZEZpbGwpIHsKICAgICAgICAgaWYgKHNob3VsZFN0cm9rZSkgewpAQCAt
NjI0LDkgKzYzMSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
ID0gbV9zdGF0ZTsKIAotICAgIGlmIChzdGF0ZS5maWxsR3JhZGllbnQgfHwgc3RhdGUuc3Ryb2tl
R3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkgfHwgc3Ryb2tlR3JhZGllbnQoKSkg
ewogICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBvcHRpbWl6ZWQgd2F5IHRvIGZpbGwgJiBz
dHJva2UgYSBwYXRoIHVzaW5nIGdyYWRpZW50cwogICAgICAgICAvLyBGSVhNRTogQmUgc21hcnRl
ciBhYm91dCB0aGlzLgogICAgICAgICBmaWxsUGF0aChwYXRoKTsKQEAgLTYzNCwxMyArNjQwLDEz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3RhdGUuZmlsbFBhdHRlcm4pCisgICAg
aWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICBpZiAo
c3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBh
cHBseVN0cm9rZVBhdHRlcm4oKTsKIAogICAgIENHUGF0aERyYXdpbmdNb2RlIGRyYXdpbmdNb2Rl
OwotICAgIGlmIChjYWxjdWxhdGVEcmF3aW5nTW9kZShzdGF0ZSwgZHJhd2luZ01vZGUpKSB7Cisg
ICAgaWYgKGNhbGN1bGF0ZURyYXdpbmdNb2RlKCp0aGlzLCBkcmF3aW5nTW9kZSkpIHsKICNpZiBI
QVZFKENHX0NPTlRFWFRfRFJBV19QQVRIX0RJUkVDVCkKICAgICAgICAgQ0dDb250ZXh0RHJhd1Bh
dGhEaXJlY3QoY29udGV4dCwgZHJhd2luZ01vZGUsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51bGxw
dHIpOwogI2Vsc2UKQEAgLTY1OCw3ICs2NjQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgeworICAg
IGlmIChmaWxsR3JhZGllbnQoKSkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAg
ICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CiAgICAgICAg
ICAgICBGbG9hdFNpemUgbGF5ZXJTaXplID0gZ2V0Q1RNKCkubWFwU2l6ZShyZWN0LnNpemUoKSk7
CkBAIC02NzAsMzMgKzY3NiwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGxheWVy
Q29udGV4dCwgLXJlY3QueCgpLCAtcmVjdC55KCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0QmVn
aW5QYXRoKGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGxheWVy
Q29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25j
YXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsK
KyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRy
YW5zZm9ybSgpKTsKIAogICAgICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2
ZW5PZGQpCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGxheWVyQ29udGV4dCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNvbnRl
eHQpOwogCi0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250
ZXh0KTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxheWVy
LmdldCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0
aChjb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5w
bGF0Zm9ybVBhdGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9z
dGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgICAgICAgICBp
ZiAoZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAgICAgICBDR0Nv
bnRleHRFT0NsaXAoY29udGV4dCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
Q0dDb250ZXh0Q2xpcChjb250ZXh0KTsKIAotICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGll
bnQtPnBhaW50KCp0aGlzKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludCgqdGhp
cyk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3Rh
dGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5Rmls
bFBhdHRlcm4oKTsKICNpZiBIQVZFKENHX0NPTlRFWFRfRFJBV19QQVRIX0RJUkVDVCkKICAgICBD
R0NvbnRleHREcmF3UGF0aERpcmVjdChjb250ZXh0LCBmaWxsUnVsZSgpID09IFdpbmRSdWxlOjpF
dmVuT2RkID8ga0NHUGF0aEVPRmlsbCA6IGtDR1BhdGhGaWxsLCBwYXRoLnBsYXRmb3JtUGF0aCgp
LCBudWxscHRyKTsKQEAgLTcxNyw3ICs3MjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsK
KyAgICBpZiAoc3Ryb2tlR3JhZGllbnQoKSkgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsK
ICAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7CiAg
ICAgICAgICAgICBmbG9hdCBsaW5lV2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKQEAgLTc0Miw4
ICs3NDgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGxheWVyQ29udGV4dCwgcGF0aC5w
bGF0Zm9ybVBhdGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJv
a2VkUGF0aChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNv
bnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBDR0NvbnRl
eHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAg
ICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAKICAgICAgICAg
ICAgIGZsb2F0IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0LngoKSAtIGxpbmVXaWR0aCk7CiAg
ICAgICAgICAgICBmbG9hdCBkZXN0aW5hdGlvblkgPSByb3VuZGYocmVjdC55KCkgLSBsaW5lV2lk
dGgpOwpAQCAtNzU0LDEzICs3NjAsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250
ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQ
YXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChj
b250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RN
KGNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3Jh
ZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJu
KCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwogCiAjaWYgVVNFKENHX0NPTlRFWFRf
U1RST0tFX0xJTkVfU0VHTUVOVFNfV0hFTl9TVFJPS0lOR19QQVRIKQpAQCAtNzg1LDcgKzc5MSw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0g
ICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgpKSB7
CiAgICAgICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICAg
ICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFNpemUgbGF5ZXJTaXplID0g
Z2V0Q1RNKCkubWFwU2l6ZShyZWN0LnNpemUoKSk7CkBAIC03OTgsMjcgKzgwNCwyNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
ICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGxheWVyQ29udGV4dCwgcmVjdCk7CiAgICAgICAgICAg
ICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7CiAKLSAgICAgICAgICAgIENHQ29udGV4dENv
bmNhdENUTShsYXllckNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OwotICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7
CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBmaWxsU3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250
ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckluUmVjdChjb250ZXh0LCByZWN0
LCBsYXllci5nZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQsIHJlY3QpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RN
KGNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAg
ICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKKyAgICAgICAgICAgIENHQ29u
dGV4dENvbmNhdENUTShjb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAg
ICBmaWxsR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBh
dHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogCiAgICAgYm9vbCBkcmF3T3du
U2hhZG93ID0gY2FuVXNlU2hhZG93Qmx1cigpOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykg
ewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRTZXRT
aGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOworICAg
ICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwg
MCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAg
ICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywg
RmxvYXRSb3VuZGVkUmVjdChyZWN0KSk7CiAgICAgfQogCkBAIC04MzcsOSArODQzLDkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRl
eHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8v
IFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xv
cihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4
dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAg
ICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIg
Y29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwog
ICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9hdFJvdW5kZWRS
ZWN0KHJlY3QpKTsKICAgICB9CiAKQEAgLTg1Miw3ICs4NTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CkBAIC04NjQsOSAr
ODcwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRv
dykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRT
ZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwor
ICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywg
MCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAg
ICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdygqdGhp
cywgcmVjdCk7CiAgICAgfQogCkBAIC04NzQsNyArODgwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBj
b25zdAogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSA9IHJlY3QucmFk
aWkoKTsKICAgICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExlZnQoKS53aWR0aCgpID09
IHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdodCgpLndpZHRoKCkgPT0g
cmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkg
PT0gcmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKICAgICBib29sIGVxdWFsSGVpZ2h0cyA9
IChyYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgp
ICYmIHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50b3BSaWdodCgpLmhlaWdo
dCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS5o
ZWlnaHQoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gbV9zdGF0ZS5maWxsR3JhZGllbnQg
fHwgbV9zdGF0ZS5maWxsUGF0dGVybjsKKyAgICBib29sIGhhc0N1c3RvbUZpbGwgPSBmaWxsR3Jh
ZGllbnQoKSB8fCBmaWxsUGF0dGVybigpOwogICAgIGlmICghaGFzQ3VzdG9tRmlsbCAmJiBlcXVh
bFdpZHRocyAmJiBlcXVhbEhlaWdodHMgJiYgcmFkaWkudG9wTGVmdCgpLndpZHRoKCkgKiAyID09
IHIud2lkdGgoKSAmJiByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKiAyID09IHIuaGVpZ2h0KCkp
CiAgICAgICAgIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0KGNvbnRleHQsIHIpOwogICAgIGVs
c2UgewpAQCAtOTEzLDkgKzkxOSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvCiAgICAgQ0dD
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAg
IGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0g
ICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dT
aXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250
ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFk
b3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93
KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRy
YXdJbnNldFNoYWRvdygqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0KTsKICAgICB9CiAKQEAg
LTkzMCw2ICs5MzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsbwogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OmNsaXAocmVjdCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChwbGF0Zm9ybUNvbnRl
eHQoKSwgcmVjdCk7CiAgICAgbV9kYXRhLT5jbGlwKHJlY3QpOwogfQpAQCAtOTQwLDMxICs5NDcs
MzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUg
Y2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8vIGhh
cyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9yIGEg
c2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUzPgogICAgIC8vIHdlIGNh
bm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRoZXIuCisgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGN0bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBD
R0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBERiAm
JiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFj
dG0uYigpICYmICFjdG0uYygpKSk7Ci0gICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1Jl
Y3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94
KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9OwotICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdHMocGxhdGZvcm1Db250ZXh0KCks
IHJlY3RzLCAyKTsKLSAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOworICAg
IGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKGNvbnRleHQpICE9
IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsKKyAgICBDR1JlY3QgcmVj
dHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0SW5maW5pdGUgOiBDR0NvbnRl
eHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCksIHJlY3QgfTsKKyAgICBDR0NvbnRleHRCZWdp
blBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdHMoY29udGV4dCwgcmVjdHMsIDIp
OworICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENHQ29udGV4dEJlZ2luUGF0
aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdChwbGF0Zm9ybUNvbnRl
eHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7Cisg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRl
eHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCBDR0Nv
bnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCkpOwogICAgIGlmICghcGF0aC5pc0VtcHR5
KCkpCi0gICAgICAgIENHQ29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxh
dGZvcm1QYXRoKCkpOwotICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Cisg
ICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKKyAgICBH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKKwogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdFplcm8pOwogICAg
IGVsc2UgewotICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwot
ICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3Jt
UGF0aCgpKTsKKyAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgICAgICBD
R0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogCiAgICAgICAg
IGlmIChjbGlwUnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAgIENHQ29udGV4
dEVPQ2xpcChjb250ZXh0KTsKQEAgLTk3NSwxMSArOTg2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAg
bV9kYXRhLT5jbGlwKHBhdGgpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpjbGlw
Qm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChDR0NvbnRleHRH
ZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0KLQogdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogICAg
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKQEAgLTEw
MDIsMTcgKzEwMDgsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKQogICAgIHJlc3RvcmUoKTsKIH0KIAotc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZz
ZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDR0Zs
b2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQorc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dP
ZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHRmxvYXQmIHhP
ZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwg
UExBVEZPUk0oV0lOKQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKICAgICBVTlVTRURfUEFS
QU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAo
Y29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hhZG93
T2Zmc2V0cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICBpZiAoQ0dDb250ZXh0RHJh
d3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29udGV4dCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81NTM5Mzg4PiBieSBlbnN1cmluZyB0
aGF0IHRoZSBvZmZzZXRzIHdpbGwgZ2V0IHRydW5jYXRlZApAQCAtMTAzMCwxMCArMTAzMyw1NSBA
QCBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2V0Q0dT
aGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgdm9p
ZCBzZXRDR0xpbmVDYXAoQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVDYXAgY2FwKQogewotICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
OworICAgIHN3aXRjaCAoY2FwKSB7CisgICAgY2FzZSBMaW5lQ2FwOjpCdXR0OgorICAgICAgICBD
R0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBCdXR0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBMaW5lQ2FwOjpSb3VuZDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNh
cChjb250ZXh0LCBrQ0dMaW5lQ2FwUm91bmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExp
bmVDYXA6OlNxdWFyZToKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChjb250ZXh0LCBrQ0dM
aW5lQ2FwU3F1YXJlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQogCitzdGF0aWMgdm9pZCBz
ZXRDR0xpbmVKb2luKENHQ29udGV4dFJlZiBjb250ZXh0LCBMaW5lSm9pbiBqb2luKQoreworICAg
IHN3aXRjaCAoam9pbikgeworICAgIGNhc2UgTGluZUpvaW46Ok1pdGVyOgorICAgICAgICBDR0Nv
bnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pbk1pdGVyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6CisgICAgICAgIENHQ29udGV4dFNldExpbmVK
b2luKGNvbnRleHQsIGtDR0xpbmVKb2luUm91bmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IExpbmVKb2luOjpCZXZlbDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4dCwg
a0NHTGluZUpvaW5CZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgc2V0Q0dNaXRlckxpbWl0KENHQ29udGV4dFJlZiBjb250ZXh0LCBmbG9hdCBsaW1pdCkKK3sK
KyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KGNvbnRleHQsIGxpbWl0KTsKK30KKworc3RhdGlj
IHZvaWQgc2V0Q0dMaW5lRGFzaChDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgRGFzaEFycmF5
JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7
CisgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZGFzaGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbGVuZ3RoICs9IHN0YXRpY19jYXN0
PGZsb2F0PihkYXNoZXNbaV0pOworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICAgICAgZGFz
aE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsKKyAgICB9CisgICAg
Q0dDb250ZXh0U2V0TGluZURhc2goY29udGV4dCwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwg
ZGFzaGVzLnNpemUoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHU2hhZG93KENHQ29udGV4dFJl
ZiBjb250ZXh0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYg
b2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIGJvb2wgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpCit7CiAgICAgaWYgKG9mZnNldC5pc1plcm8oKSAmJiAhYmx1cikgewogICAg
ICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwg
MCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNDUsNyArMTA5Myw3IEBAIHN0YXRpYyB2b2lkIHNl
dENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBG
bG9hdFNpemUmCiAgICAgQ0dGbG9hdCB5T2Zmc2V0ID0gb2Zmc2V0LmhlaWdodCgpOwogICAgIENH
RmxvYXQgYmx1clJhZGl1cyA9IGJsdXI7CiAKLSAgICBpZiAoIWdyYXBoaWNzQ29udGV4dC5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CisgICAgaWYgKCFzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykgewogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gZ2V0VXNlclRv
QmFzZUNUTShjb250ZXh0KTsKIAogICAgICAgICBDR0Zsb2F0IEEgPSB1c2VyVG9CYXNlQ1RNLmEg
KiB1c2VyVG9CYXNlQ1RNLmEgKyB1c2VyVG9CYXNlQ1RNLmIgKiB1c2VyVG9CYXNlQ1RNLmI7CkBA
IC0xMDY2LDcgKzExMTQsOCBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJgogICAgIC8vIEV4dHJl
bWUgImJsdXIiIHZhbHVlcyBjYW4gbWFrZSB0ZXh0IGRyYXdpbmcgY3Jhc2ggb3IgdGFrZSBjcmF6
eSBsb25nIHRpbWVzLCBzbyBjbGFtcAogICAgIGJsdXJSYWRpdXMgPSBzdGQ6Om1pbihibHVyUmFk
aXVzLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoMTAwMC4wKSk7CiAKLSAgICBhcHBseVNoYWRv
d09mZnNldFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQsIHhPZmZzZXQsIHlPZmZz
ZXQpOworICAgIGlmIChyZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
KQorICAgICAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb250ZXh0LCB4
T2Zmc2V0LCB5T2Zmc2V0KTsKIAogICAgIC8vIENoZWNrIGZvciBhbiBpbnZhbGlkIGNvbG9yLCBh
cyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0IGZvciB0aGUgc2hhZG93CiAg
ICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2UgdGhlIGRlZmF1bHQgc2hhZG93
IGNvbG9yLgpAQCAtMTA3Niw0NCArMTEyNSw4MSBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhj
b25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJgog
ICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplTWFrZSh4
T2Zmc2V0LCB5T2Zmc2V0KSwgYmx1clJhZGl1cywgY2FjaGVkQ0dDb2xvcihjb2xvcikuZ2V0KCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzIGZsYWdzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdGF0ZUNoYW5nZXMo
KQogewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmICghc3Rh
dGUoKS5jaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChmbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAg
Q0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0YXRlLnN0cm9rZVRoaWNr
bmVzcywgMC5mKSk7CisgICAgYXV0byBjb250ZXh0ID0gaW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQo
KTsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
Q29sb3JDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihj
b250ZXh0LCBjYWNoZWRDR0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKS5nZXQoKSk7CisgICAgZm9y
IChhdXRvIGNoYW5nZSA6IHN0YXRlKCkuY2hhbmdlcygpKSB7CisgICAgICAgIHN3aXRjaCAoY2hh
bmdlKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q1RNOgor
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q1RNKGNvbnRleHQsIHN0YXRlKCkuZ2V0Q1RNKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRl
eHQsIHN0YXRlLmZpbGxDb2xvcik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6RmlsbEJydXNoOgorICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwg
c3RhdGUoKS5maWxsQnJ1c2goKS5jb2xvcigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0g
ICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlLmFscGhhKTsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3M6CisgICAg
ICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3RkOjptYXgoc3RhdGUoKS5z
dHJva2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChm
bGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRp
b25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpCi0gICAg
ICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0
ZS5ibGVuZE1vZGUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlN0cm9rZUJydXNoOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29s
b3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZSgpLnN0cm9rZUJydXNoKCkuY29sb3IoKSku
Z2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIENHQ29u
dGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9kZShzdGF0ZS50
ZXh0RHJhd2luZ01vZGUpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpMaW5lQ2FwOgorICAgICAgICAgICAgc2V0Q0dMaW5lQ2FwKGNvbnRleHQsIHN0YXRlKCku
bGluZUNhcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBD
R0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFz
KTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjoK
KyAgICAgICAgICAgIHNldENHTGluZUpvaW4oY29udGV4dCwgc3RhdGUoKS5saW5lSm9pbigpKTsK
KyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNl
dFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaDoKKyAgICAg
ICAgICAgIHNldENHTGluZURhc2goY29udGV4dCwgc3RhdGUoKS5saW5lRGFzaCgpLmRhc2hlcywg
c3RhdGUoKS5saW5lRGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5
KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSkpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1p
dGVyTGltaXQ6CisgICAgICAgICAgICBzZXRDR01pdGVyTGltaXQoY29udGV4dCwgc3RhdGUoKS5t
aXRlckxpbWl0KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCi0gICAgICAgIHNldENHU2hh
ZG93KCp0aGlzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0
ZS5zaGFkb3dDb2xvcik7Ci19CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6Q29tcG9zaXRlTW9kZToKKyAgICAgICAgICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQs
IHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbiwgc3RhdGUoKS5jb21wb3NpdGVNb2Rl
KCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIENHQ29udGV4dFNldE1pdGVy
TGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAgICAgICAgc2V0Q0dTaGFkb3co
Y29udGV4dCwgcmVuZGVyaW5nTW9kZSgpLCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5vZmZzZXQsIHN0
YXRlKCkuZHJvcFNoYWRvdygpLmJsdXJSYWRpdXMsIHN0YXRlKCkuZHJvcFNoYWRvdygpLmNvbG9y
LCBzdGF0ZSgpLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYToKKyAg
ICAgICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlKCkuYWxwaGEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk6CisgICAgICAgICAgICBDR0NvbnRleHRT
ZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5KHN0
YXRlKCkuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlRleHREcmF3aW5n
TW9kZToKKyAgICAgICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBj
Z1RleHREcmF3aW5nTW9kZShzdGF0ZSgpLnRleHREcmF3aW5nTW9kZSgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNo
b3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhj
b250ZXh0LCBzdGF0ZSgpLnNob3VsZEFudGlhbGlhcygpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3Ro
Rm9udHM6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250ZXh0
LCBzdGF0ZSgpLnNob3VsZFNtb290aEZvbnRzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTExMjUsNyArMTIxMSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBsaW5lV2lkdGgpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKHN0cm9r
ZUdyYWRpZW50KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBj
b25zdCBmbG9hdCBkb3VibGVMaW5lV2lkdGggPSBsaW5lV2lkdGggKiAyOwogICAgICAgICAgICAg
ZmxvYXQgYWRqdXN0ZWRXaWR0aCA9IGNlaWxmKHJlY3Qud2lkdGgoKSArIGRvdWJsZUxpbmVXaWR0
aCk7CkBAIC0xMTM1LDcgKzEyMjEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICAgICAg
YXV0byBsYXllciA9IGFkb3B0Q0YoQ0dMYXllckNyZWF0ZVdpdGhDb250ZXh0KGNvbnRleHQsIGxh
eWVyU2l6ZSwgMCkpOwogCiAgICAgICAgICAgICBDR0NvbnRleHRSZWYgbGF5ZXJDb250ZXh0ID0g
Q0dMYXllckdldENvbnRleHQobGF5ZXIuZ2V0KCkpOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJv
a2VUaGlja25lc3MgPSBsaW5lV2lkdGg7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lk
dGgobGF5ZXJDb250ZXh0LCBsaW5lV2lkdGgpOwogCiAgICAgICAgICAgICAvLyBDb21wZW5zYXRl
IGZvciB0aGUgbGluZSB3aWR0aCwgb3RoZXJ3aXNlIHRoZSBsYXllcidzIHRvcC1sZWZ0IGNvcm5l
ciB3b3VsZCBiZQpAQCAtMTE0OSw4ICsxMjM0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAg
ICAgICAgIENHQ29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAg
IENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxheWVyQ29udGV4dCk7CiAgICAg
ICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0gICAgICAgICAgICBDR0NvbnRl
eHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQobGF5ZXJD
b250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIHN0
cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFp
bnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgY29uc3QgZmxvYXQgZGVzdGluYXRpb25Y
ID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAgICAgIGNvbnN0IGZsb2F0
IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0aCk7CkBAIC0xMTYxLDEz
ICsxMjQ2LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRS
ZWN0KGNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRo
U3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQp
OwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4
dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgp
LT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAg
ICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICAgICAvLyBVc2luZyBDR0NvbnRleHRBZGRS
ZWN0IGFuZCBDR0NvbnRleHRTdHJva2VQYXRoIHRvIHN0cm9rZSByZWN0IHJhdGhlciB0aGFuCkBA
IC0xMTgyLDk0ICsxMjY3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBDR0NvbnRleHRTdHJv
a2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2Fw
KExpbmVDYXAgY2FwKQotewotICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAgY2FzZSBMaW5lQ2FwOjpC
dXR0OgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dM
aW5lQ2FwQnV0dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6Um91bmQ6Ci0g
ICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBS
b3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6U3F1YXJlOgotICAgICAg
ICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwU3F1YXJl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsK
LSAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKLSAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tpXSk7Ci0gICAgICAgIGlm
IChsZW5ndGgpCi0gICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChkYXNoT2Zmc2V0LCBsZW5n
dGgpICsgbGVuZ3RoOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9ybUNv
bnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0g
ICAgc3dpdGNoIChqb2luKSB7Ci0gICAgY2FzZSBMaW5lSm9pbjo6TWl0ZXI6Ci0gICAgICAgIENH
Q29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pbk1pdGVyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6Ci0gICAgICAgIENHQ29u
dGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pblJvdW5kKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6Ci0gICAgICAgIENHQ29udGV4
dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9pbkJldmVsKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzY2FsZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250
ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9kYXRhLT5zY2FsZShz
aXplKTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRp
dHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKGZsb2F0IGFu
Z2xlKQotewotICAgIENHQ29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgYW5nbGUp
OwotICAgIG1fZGF0YS0+cm90YXRlKGFuZ2xlKTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNl
VHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQ0dDb250ZXh0VHJh
bnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKLSAgICBtX2RhdGEtPnRyYW5zbGF0
ZSh4LCB5KTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRl
bnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENHQ29udGV4dENvbmNhdENU
TShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPmNvbmNhdENUTSh0
cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJ
ZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dDb250ZXh0U2V0Q1RNKHBs
YXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+c2V0Q1RNKHRyYW5zZm9y
bSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5
ID0gZmFsc2U7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RN
KEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIENU
TSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQgaW4gV2ViS2l0
IDEgd2hlbiB0aGUKLSAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBzaW5jZSB0aGUg
c2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgotICAgIC8vIGxldmVsLiBUbyBn
dWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNlIHRoaXMgQ0cg
QVBJLgotICAgIGlmIChpbmNsdWRlU2NhbGUgPT0gRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2Fs
ZSkKLSAgICAgICAgcmV0dXJuIENHQ29udGV4dEdldFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFu
c2Zvcm0ocGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgcmV0dXJuIENHQ29udGV4dEdldENUTShw
bGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91
bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3Vu
ZGluZ01vZGUpCiB7CiAgICAgLy8gSXQgaXMgbm90IGVub3VnaCBqdXN0IHRvIHJvdW5kIHRvIHBp
eGVscyBpbiBkZXZpY2Ugc3BhY2UuIFRoZSByb3RhdGlvbiBwYXJ0IG9mIHRoZQpAQCAtMTI4MCw3
ICsxMjc3LDkgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmcKICAgICBpZiAobV9kYXRhLT5tX3Vz
ZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5KQogICAgICAgICByZXR1cm4gcm91
bmRlZEludFJlY3QocmVjdCk7CiAKLSAgICBDR0FmZmluZVRyYW5zZm9ybSBkZXZpY2VNYXRyaXgg
PSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3JtKHBsYXRmb3JtQ29u
dGV4dCgpKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwor
CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0VXNlclNw
YWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShjb250ZXh0KTsKICAgICBpZiAoQ0dBZmZpbmVUcmFu
c2Zvcm1Jc0lkZW50aXR5KGRldmljZU1hdHJpeCkpIHsKICAgICAgICAgbV9kYXRhLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IHJvdW5kZWRJbnRSZWN0KHJlY3QpOwpAQCAtMTMxOSw2ICsxMzE4LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgdGhpY2tuZXMKICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Ig
bG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAogICAgIEZsb2F0UmVjdCBib3VuZHMg
PSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEZsb2F0UmVjdChw
b2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykpLCBwcmludGluZywgbG9j
YWxTdHJva2VDb2xvcik7CkBAIC0xMzY0LDEyICsxMzY0LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzCiAgICAgfQogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1YWxUb1N0cm9rZUNvbG9y
KQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgbG9jYWxTdHJva2VD
b2xvcik7CisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGxvY2FsU3Ryb2tlQ29sb3Ip
OwogCi0gICAgQ0dDb250ZXh0RmlsbFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCBkYXNoQm91bmRz
LmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkpOworICAgIENHQ29udGV4dEZpbGxSZWN0cyhjb250
ZXh0LCBkYXNoQm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkpOwogCiAgICAgaWYgKGZp
bGxDb2xvcklzTm90RXF1YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihw
bGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9yKCkpOworICAgICAgICBzZXRDR0ZpbGxDb2xvcihj
b250ZXh0LCBmaWxsQ29sb3IoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldFVS
TEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpAQCAt
MTQxMiwxNyArMTQxMiwxOCBAQCBSZW5kZXJpbmdNb2RlIEdyYXBoaWNzQ29udGV4dENHOjpyZW5k
ZXJpbmdNb2RlKCkgY29uc3QKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0
OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgLy8gQ29yZUdyYXBoaWNz
IGV4cGVjdHMgdGhlIGJhc2UgQ1RNIG9mIGEgSGlEUEkgY29udGV4dCB0byBoYXZlIHRoZSBzY2Fs
ZSBmYWN0b3IgYXBwbGllZCB0byBpdC4KICAgICAvLyBGYWlsaW5nIHRvIGNoYW5nZSB0aGUgYmFz
ZSBsZXZlbCBDVE0gd2lsbCBjYXVzZSBjZXJ0YWluIENHIGZlYXR1cmVzLCBzdWNoIGFzIGZvY3Vz
IHJpbmdzLAogICAgIC8vIHRvIGRyYXcgd2l0aCBhIHNjYWxlIGZhY3RvciBvZiAxIHJhdGhlciB0
aGFuIHRoZSBhY3R1YWwgc2NhbGUgZmFjdG9yLgotICAgIENHQ29udGV4dFNldEJhc2VDVE0ocGxh
dGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNU
TShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3Rv
cikpOworICAgIENHQ29udGV4dFNldEJhc2VDVE0oY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1T
Y2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKGNvbnRleHQpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2
aWNlU2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewogICAgIC8vIENHQ29udGV4dEZpbGxFbGxp
cHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAgIGlmIChtX3N0YXRlLmZp
bGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgaWYgKGZpbGxHcmFkaWVu
dCgpIHx8IGZpbGxQYXR0ZXJuKCkpIHsKICAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBz
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDM0LDcgKzE0MzUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxs
aXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9y
dHMgc29saWQgY29sb3JzLgotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3Rh
dGUuc3Ryb2tlUGF0dGVybikgeworICAgIGlmIChzdHJva2VHcmFkaWVudCgpIHx8IHN0cm9rZVBh
dHRlcm4oKSkgewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTQ2OCw5ICsxNDY5LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZs
b2F0UG9pCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0Q0c6OmNhblVzZVNoYWRvd0JsdXIoKSBjb25z
dAogewotICAgIHJldHVybiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtczsKKyAgICByZXR1cm4gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIXNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCk7CiB9CiAKLX0KIAotI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCA0NjhhNDRiYWE4NmVlNTI2MTlk
MjU1ZjkzOTQzYTk3NTViYWM5ZmFiLi5mOTljM2Q5YjliZDI4MjU4NjVmZGY3ZWE4MGIyYWYwMGUz
NGI1MmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDEwLCAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTMgKzI1LDEzIEBA
CiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNFKENHKQorCiAjaW5jbHVkZSAiQ29sb3JTcGFjZUNH
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShDR0NvbnRleHRSZWYpOwotCi1j
bGFzcyBDR0NvbnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAgICBDR0NvbnRleHRTdGF0ZVNh
dmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkKLSAg
ICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNh
dmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAg
ICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgfQotICAgIAotICAg
IH5DR0NvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0
b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NhdmVB
bmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOwotICAg
ICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3RvcmUo
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUg
PSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRTYXZlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0g
ICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Ci19
OwotCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRDRyA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHQgewogcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFJl
Zik7CkBAIC04NSw2OSArNDUsNDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250
ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkg
ZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJv
b2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKLSAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7
Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwogCisgICAgdm9pZCBzYXZlKCkgZmluYWw7Cisg
ICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZp
bmFsOwogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBs
eUZpbGxQYXR0ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmlu
YWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJv
a2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVy
KCkgZmluYWw7CiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9y
KSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7Ci0gICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91bmRl
ZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwot
ICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwot
ICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgc3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwotCi0gICAg
dm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotICAgIHZv
aWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotCi0gICAg
dm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxheWVy
Q29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sKSBmaW5hbDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBm
aW5hbDsKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmlu
YWw7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCiAgICAgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKLQotICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7Ci0K
ICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVu
T2RkKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZv
aWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIEludFJlY3QgY2xpcEJv
dW5kcygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQg
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0g
ICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCBzZXRNaXRlckxp
bWl0KGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUlt
YWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICB2
b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmlj
ZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0g
MSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpIGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CisgICAg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKQEAgLTE1NiwxOCArOTUsMjEgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENv
bG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIHZv
aWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CiAKKyAgICB2b2lkIGRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxl
KSBmaW5hbDsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRVUkxG
b3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBz
ZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBm
aW5hbDsKIAogICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CiAK
LSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIHZvaWQgc2V0
VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZv
aWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
VXNlU2hhZG93Qmx1cigpIGNvbnN0OwogCkBAIC0xNzUsOSArMTE3LDE2IEBAIHB1YmxpYzoKICAg
ICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4
dCgpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBDR0NvbnRleHRSZWYgaW50ZXJuYWxQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKIH07CiAKLX0KK0NHQWZmaW5lVHJhbnNm
b3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjaW5jbHVkZSAiQ0dDb250ZXh0U3RhdGVTYXZlci5oIgogCisjZW5kaWYgLy8gVVNF
KENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmNwcAppbmRleCBlNmNlMmZiOTcyNDdhNmI4NmMwOWIxYWQzNjE3MDFj
MmVjM2U4NjI1Li5hZjAwYTAxMzM0N2UwY2Q4NWEzMGI4ODRlYmM3OWYzMmYxZTIzMTJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgUERGRG9jdW1lbnRJbWFnZTo6
Y2FjaGVQYXJhbWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
CiAKICAgICAvLyBPbGQgYW5kIG5ldyBjb250ZXh0IHNjYWxpbmcgZmFjdG9ycyBoYXZlIHRvIG1h
dGNoIGFzIHdlbGwuCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBv
c2VkVHJhbnNmb3JtOwotICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zvcm0pOwor
ICAgIGNvbnRleHQuZ2V0Q1RNKCkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zvcm0pOwogCiAg
ICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBjYWNoZWREZWNvbXBvc2VkVHJhbnNm
b3JtOwogICAgIG1fY2FjaGVkVHJhbnNmb3JtLmRlY29tcG9zZShjYWNoZWREZWNvbXBvc2VkVHJh
bnNmb3JtKTsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0
ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAg
IHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhidWZmZXJDb250ZXh0LCBkc3RSZWN0LCBGbG9h
dFJlY3QobV9jYWNoZWRJbWFnZVJlY3QubG9jYXRpb24oKSwgc3JjUmVjdC5zaXplKCkpKTsKICAg
ICBkcmF3UERGUGFnZShidWZmZXJDb250ZXh0KTsKIAotICAgIG1fY2FjaGVkVHJhbnNmb3JtID0g
Y29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNj
YWxlKTsKKyAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7CiAgICAgbV9j
YWNoZWREZXN0aW5hdGlvblJlY3QgPSBkc3RSZWN0OwogICAgIG1fY2FjaGVkU291cmNlUmVjdCA9
IHNyY1JlY3Q7CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CkBAIC0zNjMsNiArMzYz
LDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFnZShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtbV9jcm9wQm94LmxvY2F0aW9uKCkp
OwogCisgICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgLy8gQ0dQREYgcGFn
ZXMgYXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIENHQ29udGV4
dERyYXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIENH
UERGRG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBudWxscHRyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4IGQ2ODlh
NTFhODkxMDJhNTA5MDQ1NTliNDQyMjM2OWRlMTQ3MDMzMzUuLmZkZWVmNmIzOGQwYzViNTU1Njcz
N2ViN2Y0NGFmMmYyZmM5YTQ0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tl
Q29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3Jh
cGhpY3NDCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwog
ICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgYm9vbCBoaXRT
dWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9pbnQsIGtDR1Bh
dGhTdHJva2UpOworICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhDb250YWluc1Bv
aW50KGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIGtDR1BhdGhTdHJv
a2UpOwogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAKICAgICByZXR1cm4g
aGl0U3VjY2VzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNw
cAppbmRleCBlZmJjMWU0OTU0NDFiZWRlNzM0ZTk0OGRkMjZkMzcxNDQxNjU1M2UwLi5lOWI3YWM0
ZDdmNGNiZjc0MTI4OTM5YmZhOGMwNGU3NjVhMGRiZDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJh
d0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogCi0jaW5jbHVkZSAi
Qml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0zNSw0OSArMzQsNDEgQEAKICNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLQogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHBhbC9zcGkvd2lu
L0NvcmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBk
ZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwg
Q0dSZWN0IHJlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCitzdGF0
aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBk
ZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3Qs
IENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCiB7CiAgICAgRHJhd0dseXBo
c1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihD
R0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmRC
ZWdpbkxheWVyKHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsKKyAgICByZWNvcmRlci5yZWNvcmRCZWdp
bkxheWVyKGdzdGF0ZSk7CiAgICAgcmV0dXJuIGRlbGVnYXRlOwogfQogCi1zdGF0aWMgQ0dDb250
ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENH
UmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCitzdGF0aWMgQ0dD
b250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUs
IENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKICAgICBEcmF3R2x5
cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+
KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29y
ZEVuZExheWVyKHJzdGF0ZSwgZ3N0YXRlKTsKKyAgICByZWNvcmRlci5yZWNvcmRFbmRMYXllcihn
c3RhdGUpOwogICAgIHJldHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHRXJyb3IgZHJhd0ds
eXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiBy
c3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qIHRtLCBj
b25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3Qg
Y291bnQpCitzdGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENHQ29udGV4dERlbGVnYXRlUmVmIGRl
bGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENH
QWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBw
b3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQogewotICAgIGlmIChDR0dTdGF0ZUdldEFscGhhKGdz
dGF0ZSkgPiAwKSB7Ci0gICAgICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3Rh
dGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRl
bGVnYXRlKSk7Ci0gICAgICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlwaHMocnN0YXRlLCBnc3Rh
dGUsIHRtLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwotICAgIH0KKyAgICBEcmF3R2x5cGhz
UmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENH
Q29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOworICAgIHJlY29yZGVyLnJlY29yZERy
YXdHbHlwaHMoZ3N0YXRlLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwogICAgIHJldHVybiBr
Q0dFcnJvclN1Y2Nlc3M7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShDR0NvbnRleHRE
ZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRl
UmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2UpCitzdGF0aWMgQ0dFcnJv
ciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3Rh
dGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2Up
CiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3
R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAg
ICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UocnN0YXRlLCBnc3RhdGUsIHJlY3QsIGltYWdlKTsK
KyAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UoZ3N0YXRlLCByZWN0LCBpbWFnZSk7CiAgICAg
cmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4g
RHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQorc3RhdGljIFVuaXF1
ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFsQ29udGV4dChEcmF3R2x5cGhzUmVj
b3JkZXImIHJlY29yZGVyKQogewotICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihD
R0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7CisgICAgYXV0byBjb250ZXh0RGVsZWdhdGUg
PSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKCZyZWNvcmRlcikpOwogICAgIENHQ29u
dGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZUJlZ2luTGF5
ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmJlZ2luTGF5
ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5n
ZXQoKSwgZGVFbmRMYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxi
YWNrPigmZW5kTGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRl
eHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0PENHQ29udGV4
dERlbGVnYXRlQ2FsbGJhY2s+KCZXZWJDb3JlOjpkcmF3R2x5cGhzKSk7CkBAIC04Niw2NyArNzcs
MTUgQEAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVh
dGVJbnRlcm5hbENvbnRleHQoKQogICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29u
dGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5
cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhz
IGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0IGRlcml2ZUZvbnRG
cm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRy
YXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVj
b25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21D
b250ZXh0IGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25Db250ZXh0
KGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICAsIG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzKGRlY29u
c3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGVyaXZlRm9udEZyb21Db250ZXh0KGRlcml2ZUZv
bnRGcm9tQ29udGV4dCkKLSAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29u
dGV4dCgpKQorICAgICwgbV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50ZXJuYWxDb250ZXh0KCp0
aGlzKSkKIHsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQotewotICAgIG1f
b3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBjb250ZXh0U3RhdGUuZmlsbENvbG9yOwot
ICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQgPSBjb250ZXh0U3RhdGUuZmls
bEdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBt
X29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUuZmlsbFBhdHRl
cm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IgPSBjb250ZXh0U3Rh
dGUuc3Ryb2tlQ29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50
ID0gY29udGV4dFN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJv
a2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0YXRlLnN0cm9rZUdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRl
cm4gPSBjb250ZXh0U3RhdGUuc3Ryb2tlUGF0dGVybjsKLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5j
dG0gPSBtX293bmVyLmdldENUTSgpOyAvLyBGSVhNRTogRGVhbCB3aXRoIGJhc2UgQ1RNLgotCi0g
ICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBjb250ZXh0U3RhdGUuc2hhZG93T2Zm
c2V0OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciA9IGNvbnRleHRTdGF0ZS5zaGFk
b3dCbHVyOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IgPSBjb250ZXh0U3RhdGUu
c2hhZG93Q29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1z
ID0gY29udGV4dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotCi0gICAgbV9jdXJyZW50
U3RhdGUgPSBtX29yaWdpbmFsU3RhdGU7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpw
b3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4
dFN0YXRlKQotewotICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yLmlzVmFs
aWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvcihtX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUuZmls
bFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbEdyYWRp
ZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVsc2UgewotICAgICAgICBB
U1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICAgICAgaWYgKG1f
b3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1faW50ZXJuYWxD
b250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJu
KTsKLSAgICB9Ci0KLSAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yLmlz
VmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7Ci0gICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0
U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwgbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVs
c2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4p
OwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pCi0gICAg
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAgIG1faW50ZXJuYWxDb250ZXh0
LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVU
cmFuc2Zvcm1zKTsKLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1fb3JpZ2luYWxT
dGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2lu
YWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsKLQot
ICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRl
eHREcmF3aW5nTW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50
ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGlu
Z01vZGUpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250KGNvbnN0IEZv
bnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgQVNTRVJU
KENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRyaXgoZm9udC5wbGF0Zm9y
bURhdGEoKS5jdEZvbnQoKSkpKTsKIApAQCAtMTU2LDEwNCArOTUsMzggQEAgdm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYgZm9udCwgRm9u
dFNtb290aGluZ00KICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVPdmVyYWxsVGV4
dE1hdHJpeChmb250KTsKICAgICBpZiAoZm9udC5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCiAgICAgICAgIG1fb3JpZ2luYWxUZXh0TWF0
cml4ID0gY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCBtX29yaWdpbmFsVGV4dE1hdHJp
eCk7Ci0KLSAgICBhdXRvJiBjb250ZXh0U3RhdGUgPSBtX293bmVyLnN0YXRlKCk7Ci0gICAgcG9w
dWxhdGVJbnRlcm5hbFN0YXRlKGNvbnRleHRTdGF0ZSk7Ci0gICAgcG9wdWxhdGVJbnRlcm5hbENv
bnRleHQoY29udGV4dFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmNvbmNs
dWRlSW50ZXJuYWxDb250ZXh0KCkKK0dyYXBoaWNzQ29udGV4dFN0YXRlIERyYXdHbHlwaHNSZWNv
cmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCgpCiB7Ci0gICAgdXBkYXRlQ1RNKG1fb3JpZ2lu
YWxTdGF0ZS5jdG0pOwotICAgIHVwZGF0ZUZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0
eWxlLmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LmdldCgpLCBtX29y
aWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0ZVN0cm9rZUNv
bG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0YXRlLnN0
cm9rZVN0eWxlLmdyYWRpZW50LmdldCgpLCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0
dGVybi5nZXQoKSk7Ci0gICAgdXBkYXRlU2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zm
c2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cu
Y29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA/IFNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOjpZZXMgOiBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6Tm8pOworICAg
IGF1dG8gb3JpZ2luYWxTdGF0ZSA9IG1fZGVzdGluYXRpb25Db250ZXh0LnN0YXRlKCk7CisgICAg
bV9pbnRlcm5hbENvbnRleHQtPm1lcmdlU3RhdGVEaWZmcyhvcmlnaW5hbFN0YXRlKTsKKyAgICBt
X2ludGVybmFsQ29udGV4dC0+YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1cm4gb3JpZ2lu
YWxTdGF0ZTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZpbGxDb2xvcihj
b25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiogbmV3
UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGluYXRpb25Db250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKQogewotICAgIC8v
IFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0LCBmb3Igb3VyIGxp
bWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlzIHRvIGEgc29saWQg
Y29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgotICAgIC8vIEluIGNv
bmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3Jp
Z2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9yIHRvby4KLSAgICBp
ZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuZmlsbFN0eWxlLmNvbG9yKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBuZXdTdGF0
ZS5maWxsQ29sb3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3JhZGllbnQpCi0gICAgICAgIG5l
d1N0YXRlLmZpbGxHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQot
ICAgICAgICBuZXdTdGF0ZS5maWxsUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAgbV9vd25lci5k
aWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlIH0pOwotICAgIG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5jb2xvciA9IG5ld0NvbG9y
OworICAgIG1fZGVzdGluYXRpb25Db250ZXh0Lm1lcmdlU3RhdGVEaWZmcyhvcmlnaW5hbFN0YXRl
KTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJuKiBuZXdQYXR0
ZXJuKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dHU3RhdGVS
ZWYgZ3N0YXRlKQogewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVh
bGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwgb25seSBldmVy
IHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hl
Y2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJh
Y2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3Jy
ZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuc3Ryb2tl
U3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
IG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9yID0gbmV3Q29sb3I7Ci0gICAgaWYg
KG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VHcmFkaWVudCA9IG5ld0dyYWRp
ZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VQYXR0ZXJu
ID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0YXRlLCB7IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1cnJlbnRT
dGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworICAgIG1fZGVzdGluYXRpb25Db250
ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNv
bnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkpOwog
fQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgY3RtKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVuZExheWVyKENHR1N0
YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICBpZiAoY3RtID09IG1fY3VycmVudFN0YXRlLmN0bSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9vd25lci5zZXRDVE0oY3RtKTsKLSAgICBtX2N1cnJlbnRT
dGF0ZS5jdG0gPSBjdG07CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0
ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwogfQogCi1zdGF0aWMgYm9vbCBzaGFkb3dJc0NsZWFyZWQoY29uc3QgRmxvYXRT
aXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIpCi17Ci0gICAgcmV0dXJuIHNoYWRv
d09mZnNldCA9PSBGbG9hdFNpemUoKSAmJiAhc2hhZG93Qmx1cjsKLX0KLQotdm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwg
ZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsKLSAgICAvLyBXZSBkb24ndCBu
ZWVkIHRvIGNvbnNpZGVyIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGlmIG5vYm9keSBoYXMgYW55
IHNoYWRvd3MuCi0gICAgaWYgKHNoYWRvd0lzQ2xlYXJlZChzaGFkb3dPZmZzZXQsIHNoYWRvd0Js
dXIpICYmIHNoYWRvd0lzQ2xlYXJlZChtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX2N1
cnJlbnRTdGF0ZS5zaGFkb3cuYmx1cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIHN0YXRlQ2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc2hhZG93T2Zmc2V0ICE9IG1f
Y3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQgfHwgc2hhZG93Qmx1ciAhPSBtX2N1cnJlbnRTdGF0
ZS5zaGFkb3cuYmx1ciB8fCBzaGFkb3dDb2xvciAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuY29s
b3IpIHsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93T2Zmc2V0ID0gc2hhZG93T2Zmc2V0OwotICAg
ICAgICBuZXdTdGF0ZS5zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjsKLSAgICAgICAgbmV3U3RhdGUu
c2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Ci0gICAgfQotICAgIGlmIChzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyAhPSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6VW5zcGVjaWZp
ZWQgJiYgKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
OjpZZXMpICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAg
ICAgIG5ld1N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotICAgICAgICBzdGF0ZUNo
YW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXNDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc3RhdGVDaGFuZ2VGbGFncy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0YXRlLCBzdGF0
ZUNoYW5nZUZsYWdzKTsKLQotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBzaGFk
b3dPZmZzZXQ7Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgPSBzaGFkb3dCbHVyOwot
ICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5jb2xvciA9IHNoYWRvd0NvbG9yOwotICAgIG1fY3Vy
cmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotfQotCi12b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUpCitzdGF0aWMgdm9pZCBz
ZXREcm9wU2hhZG93KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBDR1N0eWxl
UmVmIHN0eWxlKQogewogICAgIGlmIChDR1N0eWxlR2V0VHlwZShzdHlsZSkgIT0ga0NHU3R5bGVT
aGFkb3cpIHsKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBraW5kcyBvZiBDR1N0eWxl
cy4KLSAgICAgICAgdXBkYXRlU2hhZG93KHswLCAwfSwgMCwgQ29sb3IoKSwgU2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkKTsKKyAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmNs
ZWFyU2hhZG93KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2MSwyMCArMTM0LDkg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmIHN0eWxl
KQogICAgIGF1dG8gcmFkID0gZGVnMnJhZChzaGFkb3dTdHlsZS5hemltdXRoIC0gMTgwKTsKICAg
ICBhdXRvIHNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzdGQ6OmNvcyhyYWQpLCBzdGQ6OnNpbihy
YWQpKSAqIHNoYWRvd1N0eWxlLmhlaWdodDsKICAgICBhdXRvIHNoYWRvd0NvbG9yID0gQ0dTdHls
ZUdldENvbG9yKHN0eWxlKTsKLSAgICB1cGRhdGVTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dT
dHlsZS5yYWRpdXMsIENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29s
b3IpLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KIAotdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVS
ZWYgZ3N0YXRlLCBDR1JlY3QpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3Rh
dGUpKTsKLSAgICBhdXRvIGFscGhhID0gQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpOwotICAgIG1f
b3duZXIuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJl
ZiBnc3RhdGUpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAg
ICBtX293bmVyLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgZGVzdGluYXRpb25Db250ZXh0
LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHN0YXRpY19jYXN0PGZsb2F0PihzaGFkb3dT
dHlsZS5yYWRpdXMpLCBDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHNoYWRvd0Nv
bG9yKSB9KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXModHJ1ZSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21wdXRlQWR2YW5jZXNGcm9t
UG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCwgY29uc3Qg
Q0dBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCkBAIC0yOTAsMTggKzE1MiwxOCBAQCBzdGF0
aWMgVmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhjb25zdCBDR1Bv
aW50IHBvc2l0aW9uc1tdLCBzaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0
YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBoIGds
eXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCit2b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR0dTdGF0ZVJlZiBnc3RhdGUsIGNv
bnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBj
b3VudCkKIHsKICAgICBBU1NFUlRfSU1QTElFUyhtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBE
ZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vLCBtX29yaWdpbmFsRm9udCk7CiAKLSAgICBpZiAoIWNv
dW50KQorICAgIGlmICghY291bnQgfHwgQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpIDw9IDApCiAg
ICAgICAgIHJldHVybjsKIAogICAgIENHRm9udFJlZiB1c2VkRm9udCA9IENHR1N0YXRlR2V0Rm9u
dChnc3RhdGUpOwogICAgIGlmIChtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250
RnJvbUNvbnRleHQ6Ok5vICYmIHVzZWRGb250ICE9IGFkb3B0Q0YoQ1RGb250Q29weUdyYXBoaWNz
Rm9udChtX29yaWdpbmFsRm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG51bGxwdHIpKS5n
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShn
c3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RN
KGdzdGF0ZSkpOwogCiAgICAgLy8gV2Ugd2FudCB0aGUgcmVwbGF5ZXIncyBDVE0gYW5kIHRleHQg
bWF0cml4IHRvIG1hdGNoIHRoZSBjdXJyZW50IENUTSBhbmQgdGV4dCBtYXRyaXguCiAgICAgLy8g
VGhlIGN1cnJlbnQgdGV4dCBtYXRyaXggaXMgYSBjb25jYXRlbmF0aW9uIG9mIHdoYXRldmVyIFdl
YktpdCBzZXRzIGl0IHRvIGFuZCB3aGF0ZXZlcgpAQCAtMzI0LDEzICsxODYsMTYgQEAgdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgaW52ZXJzZUNUTUZpeHVwID0gaW52ZXJzZS52YWx1
ZSgpOwogICAgIGVsc2UKICAgICAgICAgY3RtRml4dXAgPSBBZmZpbmVUcmFuc2Zvcm0oKTsKLSAg
ICBtX293bmVyLmNvbmNhdENUTShjdG1GaXh1cCk7CisKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4
dC5jb25jYXRDVE0oY3RtRml4dXApOwogCiAgICAgYXV0byBmaWxsQ29sb3IgPSBDR0dTdGF0ZUdl
dEZpbGxDb2xvcihnc3RhdGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldEZpbGxDb2xv
cihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikpOworCiAgICAg
YXV0byBzdHJva2VDb2xvciA9IENHR1N0YXRlR2V0U3Ryb2tlQ29sb3IoZ3N0YXRlKTsKLSAgICB1
cGRhdGVGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShmaWxsQ29s
b3IpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xv
clNwYWNlKHN0cm9rZUNvbG9yKSk7Ci0gICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUo
Z3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6
OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOworCisgICAgc2V0RHJv
cFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsK
IAogICAgIGF1dG8gZm9udFNpemUgPSBDR0dTdGF0ZUdldEZvbnRTaXplKGdzdGF0ZSk7CiAgICAg
UmVmIGZvbnQgPSBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRl
eHQ6Ok5vID8gKm1fb3JpZ2luYWxGb250IDogRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEo
YWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KHVzZWRGb250LCBmb250U2l6ZSwg
bnVsbHB0ciwgbnVsbHB0cikpLCBmb250U2l6ZSkpOwpAQCAtMzQ1LDMwICsyMTAsMzggQEAgdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5v
cmcvYi8yMzI5MTc+IChgRHJhd0dseXBoc1JlY29yZGVyYCBzaG91bGQgYmUgYWJsZSB0byByZWNv
cmQrcmVwbGF5IHZlcnRpY2FsIHRleHQpCiAgICAgfQogCi0gICAgbV9vd25lci5kcmF3R2x5cGhz
QW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhw
b3NpdGlvbnMsIGNvdW50LCB0ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0TWF0cml4Lm1h
cFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7Ci0KLSAgICBtX293bmVyLmNv
bmNhdENUTShpbnZlcnNlQ1RNRml4dXApOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRp
b25zKHBvc2l0aW9ucywgY291bnQsIHRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIHRleHRNYXRy
aXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKKyAgICBtX2Rlc3Rp
bmF0aW9uQ29udGV4dC5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsKIH0KIAotdm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dT
dGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNnSW1hZ2UpCit2b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dS
ZWN0IHJlY3QsIENHSW1hZ2VSZWYgY2dJbWFnZSkKIHsKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRl
R2V0Q1RNKGdzdGF0ZSkpOwotICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0
ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0
YXRlKSk7CisgICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVH
ZXRTdHlsZShnc3RhdGUpKTsKIAogICAgIC8vIENvcmUgR3JhcGhpY3MgYXNzdW1lcyBhICJ5IHVw
IiBjb29yZGluYXRlIHN5c3RlbSwgYnV0IGluIFdlYktpdCwgd2UgdXNlIGEgInktZG93biIgY29v
cmRpbmF0ZSBzeXN0ZW0uCiAgICAgLy8gVGhpcyBtZWFucyB0aGF0IFdlYktpdCdzIGRyYXdpbmcg
cm91dGluZXMgKEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkpIGludGVudGlvbmFsbHkgZHJh
dyBpbWFnZXMgdXBzaWRlLWRvd24gZnJvbSBDb3JlIEdyYXBoaWNzJ3MgcG9pbnQgb2Ygdmlldy4K
ICAgICAvLyAoVGhlcmUncyBhIHktZmxpcCBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkuKQogICAgIC8vIFRoZSByZWN0IGhhcyB0aGUgcmln
aHQgYm91bmRzLCBidXQgd2UgbmVlZCB0byB0cmFuc2Zvcm0gZnJvbSBDRydzIGNvb3JkaW5hdGUg
c3lzdGVtIHRvIFdlYktpdCdzIGJ5IHBlcmZvcm1pbmcgb3VyIG93biB5LWZsaXAgc28gaW1hZ2Vz
IGFyZSBkcmF3biB0aGUgcmlnaHQtc2lkZS11cC4KICAgICAvLyBXZSBkbyB0aGlzIGF0IHRoZSBi
b3VuZGFyeSBiZXR3ZWVuIHRoZSB0d28gQVBJcywgd2hpY2ggaXMgcmlnaHQgaGVyZS4KLSAgICBt
X293bmVyLnRyYW5zbGF0ZSgwLCByZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkp
OwotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0KKyAgICBtX2Rlc3RpbmF0
aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdp
bi55KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsK
KyAgICAKICAgICBhdXRvIGltYWdlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKTsKLSAg
ICBtX293bmVyLmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5zaXplKCksIEZsb2F0UmVj
dChyZWN0KSwgRmxvYXRSZWN0IHt7IH0sIGltYWdlLT5zaXplKCl9LCBJbWFnZVBhaW50aW5nT3B0
aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7Ci0KKyAgICBtX2Rlc3Rp
bmF0aW9uQ29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9h
dFJlY3QocmVjdCksIEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2UtPnNpemUoKSB9LCBJbWFnZVBhaW50
aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7CisgICAgCiAg
ICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQuCi0gICAg
bV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBtX293bmVyLnRyYW5zbGF0ZSgw
LCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIG1fZGVzdGluYXRpb25D
b250ZXh0LnRyYW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4u
eSkpOworfQorCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQoreworICAg
IHNldEludGVybmFsRm9udChmb250LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAKKyAgICBhdXRvIG9y
aWdpbmFsU3RhdGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51
bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgcmVzdG9yZURlc3RpbmF0
aW9uQ29udGV4dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6
OmRyYXdPVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21v
b3RoaW5nTW9kZSkKQEAgLTM3OSwyNSArMjUyLDE5IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoK
ICAgICAgICAgYXV0byBib3VuZHMgPSBmb250LmJvdW5kc0ZvckdseXBoKGdseXBoc1tpXSk7CiAK
ICAgICAgICAgLy8gQ3JlYXRlIGEgbG9jYWwgSW1hZ2VCdWZmZXIgYmVjYXVzZSBkZWNvZGluZyB0
aGUgU1ZHIGZvbnRzIGhhcyB0byBoYXBwZW4gaW4gV2ViUHJvY2Vzcy4KLSAgICAgICAgaWYgKGF1
dG8gaW1hZ2VCdWZmZXIgPSBtX293bmVyLmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihib3VuZHMs
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6OkxvY2FsKSkg
eworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fZGVzdGluYXRpb25Db250ZXh0LmNy
ZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBSZW5kZXJpbmdNZXRob2Q6OkxvY2FsKSkgeworICAgICAgICAgICAgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS5hcHBseVN0YXRlQ2hhbmdlcygpOwogICAgICAgICAgICAgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoaW1hZ2VCdWZmZXItPmNvbnRleHQoKSwgZm9udCwgZ2x5cGhzICsgaSwgYWR2
YW5jZXMgKyBpLCAxLCBGbG9hdFBvaW50KCksIHNtb290aGluZ01vZGUpOwogCiAgICAgICAgICAg
ICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0ID0gZW5jbG9zaW5nSW50UmVjdChib3VuZHMpOwog
ICAgICAgICAgICAgZGVzdGluYXRpb25SZWN0Lm1vdmVCeShwZW5Qb3NpdGlvbik7Ci0gICAgICAg
ICAgICBtX293bmVyLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVj
dCk7CisgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogICAgICAgICB9CiAKICAgICAgICAgcGVuUG9z
aXRpb24ubW92ZShzaXplKGFkdmFuY2VzW2ldKSk7CiAgICAgfQogfQogCi12b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQo
Zm9udCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRl
cm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2lu
dCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKLX0KLQog
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGluZ0ludG9PVFNWR0FuZE5vbk9U
U1ZHUnVucyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5n
TW9kZSkKIHsKICAgICBhdXRvIG90c3ZnR2x5cGhzID0gZm9udC5maW5kT1RTVkdHbHlwaHMoZ2x5
cGhzLCBudW1HbHlwaHMpOwpAQCAtNDQwLDcgKzMwNyw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYg
Zm9uCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQ
b2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBpZiAobV9kZWNv
bnN0cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpObykgewotICAgICAg
ICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAgICAgbV9kZXN0aW5h
dGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2Vz
LCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC00NTMsMTUgKzMyMCwxNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6
ZHJhd05hdGl2ZVRleHQoQ1RGb250UmVmIGZvbnQsIENHRmxvYXQgZm9udFNpemUsIENUTGluZQog
ewogICAgIEFTU0VSVChtX2RlY29uc3RydWN0RHJhd0dseXBocyA9PSBEZWNvbnN0cnVjdERyYXdH
bHlwaHM6Olllcyk7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKG1fb3du
ZXIpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIobV9kZXN0aW5hdGlvbkNv
bnRleHQpOwogCi0gICAgbV9vd25lci50cmFuc2xhdGUobGluZVJlY3Qub3JpZ2luLngsIGxpbmVS
ZWN0Lm9yaWdpbi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIG1fb3duZXIuc2NhbGUo
RmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRlKGxp
bmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0LnNpemUuaGVpZ2h0
KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKIAot
ICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEo
Zm9udCwgZm9udFNpemUpKSwgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQp
OworICAgIHNldEludGVybmFsRm9udChGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShmb250
LCBmb250U2l6ZSkpLCBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCk7Cisg
ICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUludGVybmFsQ29udGV4dCgpOwog
ICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCksIDAsIDApOwogICAgIENUTGluZURyYXcobGluZSwgbV9pbnRlcm5hbENvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOworICAg
IHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0ZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNTEx
ZTA5Yjk2Y2VmMDMyNTA5MGUyM2FmOTE0YWUzNWYyYWI4ZWQyZS4uZTUzNGNjNTVhZjI2YjdmYjgy
ODBlNjNiN2RjMjVhM2Q0YTQxNjM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5j
cHAKQEAgLTE1MiwyNSArMTUyLDI3IEBAIHN0YXRpYyB2b2lkIGZpbGxWZWN0b3JXaXRoVmVydGlj
YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zCiAgICAgfQog
fQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dH
bHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQorc3RhdGljIHZvaWQgc2hvd0dseXBoc1dp
dGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleHRN
YXRyaXgpCiB7CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKwog
ICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7CiAgICAgaWYgKHBsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAg
ICAgICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGljYWxUZXh0TWF0
cml4KGZvbnQsIHRleHRNYXRyaXgpLCBjb250ZXh0KTsKKyAgICAgICAgU2NvcGVkVGV4dE1hdHJp
eCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIHRleHRNYXRyaXgp
LCBjZ0NvbnRleHQpOwogCiAgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJhbnNsYXRpb25z
KGNvdW50KTsKICAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMo
cGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGNvdW50
KTsKIAogICAgICAgICBhdXRvIGFzY2VudERlbHRhID0gZm9udC5mb250TWV0cmljcygpLmZsb2F0
QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNj
ZW50KCk7Ci0gICAgICAgIGZpbGxWZWN0b3JXaXRoVmVydGljYWxHbHlwaFBvc2l0aW9ucyhwb3Np
dGlvbnMsIGNvbnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBjb3VudCwgcG9p
bnQsIGFzY2VudERlbHRhKTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAg
ICAgICBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjZ0Nv
bnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBjb3VudCwgcG9pbnQsIGFzY2Vu
dERlbHRhKTsKKyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCks
IGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNnQ29udGV4dCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRp
b25zLCBjb250ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKLSAgICAgICAgQ1RGb250RHJh
d0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwg
Y291bnQsIGNvbnRleHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBv
c2l0aW9ucyhwb3NpdGlvbnMsIGNnQ29udGV4dCwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCk7Cisg
ICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBv
c2l0aW9ucy5kYXRhKCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0KIH0KIApAQCAtMjQyLDEw
ICsyNDQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIHNldENHRm9udFJlbmRlcmlu
Z01vZGUoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0
Zm9ybURhdGEuc2l6ZSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxv
YXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBjb250ZXh0LmdldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAgICBhdXRvIGRy
b3BTaGFkb3cgPSBjb250ZXh0LmRyb3BTaGFkb3coKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBj
b250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zm
c2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CkBAIC0yNTgsMjkgKzI1NywyOSBAQCB2
b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGJvb2wgaGFz
U2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01v
ZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICFwbGF0
Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVk
KCkpICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaGFzU2lt
cGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6
OkZpbGwgJiYgZHJvcFNoYWRvdy5jb2xvci5pc1ZhbGlkKCkgJiYgIWRyb3BTaGFkb3cuYmx1clJh
ZGl1cyAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFjb250ZXh0LnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5T3JUcmFuc2xh
dGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAg
ICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7CiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dz
IG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9z
aW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KICAgICAgICAgY29udGV4dC5jbGVhclNoYWRvdygp
OwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAg
ICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAgICBDb2xvciBzaGFkb3dG
aWxsQ29sb3IgPSBkcm9wU2hhZG93LmNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZp
bGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNo
YWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsg
c2hhZG93T2Zmc2V0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQu
eCgpICsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93cyBh
cmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29v
cmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hh
ZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAgc2hvd0dseXBoc1dp
dGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNn
Q29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAg
ICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9mZnNldC5oZWln
aHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOworICAg
ICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFgsIHNoYWRv
d1RleHRZKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0
TWF0cml4KTsKICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgICAgICBz
aG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNC
b2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRv
d1RleHRZKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0
TWF0cml4KTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKICAgICB9
CiAKLSAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0NvbnRleHQsIGds
eXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgc2hvd0dseXBoc1dp
dGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCB0ZXh0TWF0cml4KTsKIAogICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAg
ICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgc3ludGhldGlj
Qm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2Vz
LCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2Vz
KEZsb2F0UG9pbnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQueSgpKSwg
Zm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsK
IAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0LnNl
dERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5n
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggMmUyZjRmNGYyY2I1NWQzNjVlNWFlMzk5
MzI1ZDA1ZjJjMTczNjFmZC4uY2NmNDBjZWE2MmIxNjc0MzY2ZDc0ODQxNjJiMWJjNGU5Mzc3MDc1
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC05MCwxMCArOTAsNyBAQCBib29sIERp
c3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIEl0ZW1IYW5k
bGUgaXRlbSkKICAgICAgICAgaWYgKCEoZmxhZ3MgJiBBc1RleHRGbGFnOjpJbmNsdWRlc1BsYXRm
b3JtT3BlcmF0aW9ucykpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHN0YXRlSXRlbSA9IGl0
ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICAgICAgLy8gRklYTUU6IGZvciBub3csIG9ubHkg
ZHJvcCB0aGUgaXRlbSBpZiB0aGUgb25seSBzdGF0ZS1jaGFuZ2UgZmxhZ3MgYXJlIHBsYXRmb3Jt
LXNwZWNpZmljLgotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fY2hh
bmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250c0NoYW5nZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAg
IGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisgICAgICAgICAg
ICBpZiAoc3RhdGVJdGVtLnN0YXRlKCkuY2hhbmdlcygpID09IEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yMDIsMTYgKzE5OSw2
IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8U2F2ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6
UmVzdG9yZToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihpdGVtLmdldDxSZXN0b3Jl
PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBhcHBl
bmQ8VHJhbnNsYXRlPihpdGVtLmdldDxUcmFuc2xhdGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0PFJvdGF0ZT4o
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2Nh
bGU+KGl0ZW0uZ2V0PFNjYWxlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNU
TToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5nZXQ8Q29uY2F0
ZW5hdGVDVE0+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0dXJu
IGFwcGVuZDxTZXRDVE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxD
b2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTIyMCwxNiArMjA3LDYgQEAgdm9pZCBEaXNwbGF5
TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRT
dHJva2VUaGlja25lc3M+KGl0ZW0uZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKSk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3RhdGU+KGl0
ZW0uZ2V0PFNldFN0YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAg
ICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVDYXA+KGl0ZW0uZ2V0PFNldExpbmVDYXA+KCkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNl
dExpbmVEYXNoPihpdGVtLmdldDxTZXRMaW5lRGFzaD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZUpvaW4+KGl0ZW0uZ2V0
PFNldExpbmVKb2luPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAg
ICAgICByZXR1cm4gYXBwZW5kPFNldE1pdGVyTGltaXQ+KGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+
KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gYXBw
ZW5kPENsZWFyU2hhZG93PihpdGVtLmdldDxDbGVhclNoYWRvdz4oKSk7CiAgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwPihpdGVtLmdldDxDbGlwPigp
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMjc0LDggKzI1MSw2IEBAIHZvaWQg
RGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBl
bmQ8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpKTsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAgcmV0dXJuIGFw
cGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+
KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0
dXJuIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVj
dD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1
cm4gYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAppbmRleCAwYzI1MjI2NGFm
NDE2NjU2MjE3NTE2MDQxMDQyYThiZGQzYmZhYmI1Li5kZWZjZTg0ZWYzNTg3YmVhMDZkMjA3ZGI1
YjgwMmFhN2M4MjU2NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRp
YWxDVE0pCi0gICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3Rh
dGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQorICAgIDogbV9j
b250ZXh0KG1fZGlzcGxheUxpc3QsIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlh
bENUTSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNw
cAppbmRleCA0NTc3NTUxODliZGFkZDcxOWQyNDVhNGU2ZDJjODFiZGRiMWY3ZGYzLi4wZGIxNTAz
OTYwNDAzMmYzMzAzZmJjYjY1MjFlNTNlNGUzNGY5MThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtNTIsMjEgKzUyLDYgQEAgdm9pZCBJdGVtSGFu
ZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6
UmVzdG9yZToKICAgICAgICAgZ2V0PFJlc3RvcmU+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGdldDxUcmFu
c2xhdGU+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6Ci0gICAgICAgIGdldDxSb3RhdGU+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgZ2V0PFNjYWxl
PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6
Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGdldDxDb25jYXRlbmF0ZUNUTT4oKS5hcHBseShjb250
ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAg
ICAgZ2V0PFNldENUTT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgZ2V0PFNldElubGluZUZp
bGxDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzksMjEgKzY0
LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAg
ICAgZ2V0PFNldExpbmVDYXA+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0PFNldExpbmVEYXNoPigp
LmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUpvaW46Ci0gICAgICAgIGdldDxTZXRMaW5lSm9pbj4oKS5hcHBseShjb250ZXh0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAg
IGdldDxTZXRNaXRlckxpbWl0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGdldDxDbGVhclNoYWRvdz4o
KS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXA6CiAgICAgICAgIGdldDxDbGlwPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47
CkBAIC0xNjAsOSArMTMwLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAg
ICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5hcHBseShjb250ZXh0KTsKICAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAg
ICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgZ2V0PEZp
bGxSb3VuZGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjcw
LDkgKzIzNyw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1BhdGg6CiAgICAgICAgIGdldDxEcmF3UGF0aD4oKS5+RHJhd1BhdGgoKTsKICAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAg
ICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0ZWRSZWN0KCk7Ci0gICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAgICAgZ2V0PEZp
bGxQYXRoPigpLn5GaWxsUGF0aCgpOwogICAgICAgICByZXR1cm47CkBAIC0yODgsOSArMjUyLDYg
QEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91
bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVj
dCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0g
ICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKLSAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBnZXQ8U2V0U3RhdGU+KCku
flNldFN0YXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxNCw5ICsyNzUsNiBAQCB2b2lkIEl0
ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKICAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJSZWN0
Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFk
b3c6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PENsZWFyU2hhZG93Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8Q2xpcD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI2LDkgKzI4NCw2IEBA
IHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1h
Z2VCdWZmZXI6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPENsaXBUb0ltYWdlQnVmZmVyPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENvbmNhdGVuYXRlQ1RNPjo6dmFsdWUpOwotICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
Mzg3LDMzICszNDIsMTUgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0
ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxSZXN0b3JlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxSb3RhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxTYXZlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFNjYWxlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxTZXRDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxDb2xvcj46OnZhbHVl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNv
bG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxTZXRJbmxpbmVTdHJva2VDb2xvcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2YWx1ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRNaXRlckxp
bWl0Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ry
b2tlVGhpY2tuZXNzOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsK
QEAgLTQzNyw5ICszNzQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUxpbmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOwogICAgIH0KIH0KIApAQCAtNTAxLDggKzQzNSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6
c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3UGF0dGVybj4oaXRlbU9mZnNldCwgKnRoaXMp
OwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICByZXR1cm4gY29weUludG88
RHJhd1BhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29t
cG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsQ29tcG9zaXRlZFJlY3Q+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CkBAIC01MTMsOCArNDQ1LDYgQEAgYm9vbCBJ
dGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5h
dGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRS
ZWN0OgogICAgICAgICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0PihpdGVtT2Zmc2V0
LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVy
biBjb3B5SW50bzxTZXRMaW5lRGFzaD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0U3RhdGU+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgpAQCAtNTMxLDE2
ICs0NjEsMTIgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwg
SXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclJlY3Q+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPENsZWFyU2hhZG93PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXA+KGl0ZW1PZmZz
ZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgICAgICByZXR1cm4g
Y29weUludG88Q2xpcE91dD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgICAgICByZXR1cm4gY29weUludG88Q2xpcFRvSW1hZ2VC
dWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENvbmNhdGVuYXRlQ1RNPihpdGVtT2Zmc2V0
LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoK
ICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKQEAgLTU3Mywy
NCArNDk5LDEyIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUs
IEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBl
OjpSZXN0b3JlOgogICAgICAgICByZXR1cm4gY29weUludG88UmVzdG9yZT4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPFJvdGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTYXZlPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTY2FsZT4oaXRl
bU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFNldENUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldElubGlu
ZUZpbGxDb2xvcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZVN0cm9rZUNvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5saW5lU3Ryb2tl
Q29sb3I+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2Fw
OgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGluZUNhcD4oaXRlbU9mZnNldCwgKnRoaXMp
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4gY29weUlu
dG88U2V0TGluZUpvaW4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TWl0ZXJMaW1pdD4oaXRl
bU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoK
ICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRlbU9mZnNldCwg
KnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CkBAIC02MDcsOCArNTIx
LDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhh
bmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFN0cm9rZVJl
Y3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgog
ICAgICAgICByZXR1cm4gY29weUludG88U3Ryb2tlTGluZT4oaXRlbU9mZnNldCwgKnRoaXMpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFRy
YW5zbGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKaW5kZXggNTRlYTFjODY4
MmMwNzQ0MmUyZTg0MTRiNzMyOGFhMzI0ODAyNWE3NS4uYmEwZDk1MWMyMmNmNDljZTQxN2UzMzU1
M2IwMGUwYTViOGFiMjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBl
LmNwcApAQCAtMzgsMTYgKzM4LDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJ
dGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNhdmUpOwogICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVybiBzaXplb2YoUmVzdG9yZSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFRyYW5zbGF0ZSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFJvdGF0
ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2Nh
bGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKENvbmNhdGVuYXRlQ1RNKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoU2V0Q1RNKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVG
aWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5lRmlsbENvbG9yKTsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTU2LDE2ICs0Niw2IEBA
IHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAg
cmV0dXJuIHNpemVvZihTZXRTdHJva2VUaGlja25lc3MpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0YXRlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0YXRlKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVDYXApOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExp
bmVEYXNoKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihTZXRMaW5lSm9pbik7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRNaXRlckxpbWl0KTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIHNpemVvZihDbGVhclNoYWRvdyk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIHNpemVvZihDbGlwKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMTEwLDggKzkwLDYgQEAgc3RhdGljIHNpemVfdCBz
aXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKEZp
bGxSZWN0V2l0aENvbG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVu
dDoKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhHcmFkaWVudCk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKEZp
bGxDb21wb3NpdGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0Ogog
ICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSb3VuZGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CkBAIC0xODIsMjggKzE2MCwxOCBAQCBib29sIGlz
RHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQ
YXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKICNlbmRpZgot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9J
bWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBQYXRoOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0
b3JlOgotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZl
OgotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lSm9pbjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgogICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoK
LSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgogICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyUmVjdDoKQEAgLTIyMiw3ICsxOTAsNiBAQCBib29sIGlzRHJhd2luZ0l0ZW0oSXRl
bVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3UmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoK
LSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbEVsbGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbExpbmU6CkBAIC0yODgsMTMgKzI1NSwxMSBAQCBib29sIGlzSW5saW5lSXRl
bShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0
aDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFBhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5k
ZWRSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgIGNhc2UgSXRlbVR5
cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1N5c3RlbUltYWdlOgpAQCAtMzA2LDExICsyNzEsOSBAQCBib29sIGlzSW5s
aW5lSXRlbShJdGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5U
cmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVm
ZmVyOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Vs
bGlwc2U6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXI6CkBAIC0z
MzMsMTUgKzI5Niw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlw
ZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6
CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKQEAgLTM1MSw3ICszMDgsNiBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0
eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VMaW5lOgotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5kZXggZDY4M2IyYWNmNzg0NWY5OWMzY2Qw
OTVlYjkxMWU1NGYxZjhjZTExMS4uMTY2MGI5OGZkYTVlZjI3YjNmNzVkMjJhNTc5YTNhOWFlM2Nj
NzBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCkBAIC0zMSwyMCAr
MzEsMTAgQEAgbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1
aW50OF90IHsKICAgICBTYXZlLAogICAgIFJlc3RvcmUsCi0gICAgVHJhbnNsYXRlLAotICAgIFJv
dGF0ZSwKLSAgICBTY2FsZSwKLSAgICBDb25jYXRlbmF0ZUNUTSwKLSAgICBTZXRDVE0sCiAgICAg
U2V0SW5saW5lRmlsbENvbG9yLAogICAgIFNldElubGluZVN0cm9rZUNvbG9yLAogICAgIFNldFN0
cm9rZVRoaWNrbmVzcywKICAgICBTZXRTdGF0ZSwKLSAgICBTZXRMaW5lQ2FwLAotICAgIFNldExp
bmVEYXNoLAotICAgIFNldExpbmVKb2luLAotICAgIFNldE1pdGVyTGltaXQsCi0gICAgQ2xlYXJT
aGFkb3csCiAgICAgQ2xpcCwKICAgICBDbGlwT3V0LAogICAgIENsaXBUb0ltYWdlQnVmZmVyLApA
QCAtNjcsNyArNTcsNiBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CiAgICAgRmls
bFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJlY3RXaXRoR3JhZGllbnQs
Ci0gICAgRmlsbENvbXBvc2l0ZWRSZWN0LAogICAgIEZpbGxSb3VuZGVkUmVjdCwKICAgICBGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAyM2QwYmJjYzcxYzI4MWM1MmMzNWE4
YzI1MmRhOTZjMGFiMTJhOThjLi4zNmZhNmExMjdmZjA3OTNjZWYyMzBlZGY3YTY0MWRkZTAyZmUz
NzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgogI2luY2x1ZGUgIkZpbHRlci5o
IgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3Rh
dGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC01NCw2NyArNTUsNiBAQCB2b2lkIFJlc3Rv
cmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBjb250ZXh0LnJl
c3RvcmUoKTsKIH0KIAotdm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUcmFuc2xh
dGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkpOwotICAgIHRz
LmR1bXBQcm9wZXJ0eSgieSIsIGl0ZW0ueSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBSb3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LnJvdGF0ZShtX2FuZ2xlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImFuZ2xlIiwgaXRlbS5hbmdsZSgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNv
bnRleHQuc2NhbGUobV9zaXplKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0
eSgic2l6ZSIsIGl0ZW0uYW1vdW50KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNl
dENUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRl
eHQuc2V0Q1RNKG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoInNldC1jdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVybiB0czsKLX0K
LQotdm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAotewotICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNhdGVuYXRl
Q1RNJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50cmFuc2Zvcm0o
KSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgU2V0SW5saW5lRmlsbENvbG9yOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IoY29sb3IoKSk7CkBAIC0xNDgsNzcgKzg4LDIyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdHJva2VUaGlja25lc3MmIHN0YXRl
KQogICAgIHJldHVybiB0czsKIH0KIAotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgZmxhZ3MpCi0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0YXRlLCBmbGFncykKLXsKLX0KLQotU2V0
U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNo
YW5nZSkKLSAgICA6IG1fc3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2UpCitTZXRTdGF0ZTo6U2V0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQorICAgIDogbV9zdGF0ZShzdGF0
ZSkKIHsKIH0KIAogdm9pZCBTZXRTdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQogewotICAgIG1fc3RhdGVDaGFuZ2UuYXBwbHkoY29udGV4dCk7CisgICAgY29udGV4dC5tZXJn
ZVN0YXRlQ2hhbmdlcyhtX3N0YXRlKTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBzdGF0ZSkKK3N0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgaXRlbSkKIHsK
LSAgICB0cyA8PCBzdGF0ZS5zdGF0ZUNoYW5nZSgpOworICAgIHRzIDw8IGl0ZW0uc3RhdGUoKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKLXZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXAp
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2V0TGluZUNhcCYgbGluZUNhcCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtY2Fw
IiwgbGluZUNhcC5saW5lQ2FwKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRMaW5l
RGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRl
eHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYg
bGluZURhc2gpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5IiwgbGluZURhc2gu
ZGFzaEFycmF5KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQiLCBsaW5lRGFz
aC5kYXNoT2Zmc2V0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRMaW5lSm9pbjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0
TGluZUpvaW4obV9saW5lSm9pbik7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCi17Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJsaW5lLWpvaW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsKLSAgICByZXR1
cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQp
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoIm1p
dHJlLWxpbWl0IiwgbWl0ZXJMaW1pdC5taXRlckxpbWl0KCkpOwotICAgIHJldHVybiB0czsKLX0K
LQotdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAotewotICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLX0KLQogdm9pZCBDbGlwOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwKG1fcmVj
dCk7CkBAIC02NTcsMzAgKzU0MiwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0pCiAgICAgcmV0
dXJuIHRzOwogfQogCi12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2Nv
bG9yLCBtX29wLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCi17Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9z
aXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAgdHMuZHVtcFBy
b3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRzOwot
fQotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwg
bV9ibGVuZE1vZGUpOworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xv
cik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBGaWxsUm91bmRlZFJlY3QmIGl0ZW0pCiB7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0
IiwgaXRlbS5yb3VuZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRl
bS5jb2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5k
TW9kZSgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTc2OCw4ICs2MzgsOCBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbEVsbGlwc2Um
IGl0ZW0pCiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1QYWludEZyYW1lRm9yTWVkaWE6OlBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkpCitQYWludEZy
YW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRl
bnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKKyAgICA6IG1faWRlbnRpZmll
cihpZGVudGlmaWVyKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKIHsKIH0KQEAg
LTEwMTEsMTkgKzg4MSwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgSXRlbVR5cGUgdHlwZSkKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTYXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlJl
c3RvcmU6IHRzIDw8ICJyZXN0b3JlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNs
YXRlOiB0cyA8PCAidHJhbnNsYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRl
OiB0cyA8PCAicm90YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6IHRzIDw8
ICJzY2FsZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogdHMgPDwgInNldC1j
dG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMgPDwgImNv
bmNhdGVudGF0ZS1jdG0iOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxs
Q29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLWZpbGwtY29sb3IiOyBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogdHMgPDwgInNldC1pbmxpbmUtc3Ryb2tlLWNv
bG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOiB0cyA8
PCAic2V0LXN0cm9rZS10aGlja25lc3MiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dGF0ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVDYXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0IjsgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjogdHMgPDwgImNsaXAtdG8taW1hZ2UtYnVmZmVyIjsg
YnJlYWs7CkBAIC0xMDQ2LDcgKzkwNyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0OiB0cyA8PCAiZmlsbC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoQ29sb3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciI7IGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgt
Z3JhZGllbnQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6
IHRzIDw8ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSb3VuZGVkUmVjdDogdHMgPDwgImZpbGwtcm91bmRlZC1yZWN0IjsgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHRzIDw8ICJmaWxsLXJlY3Qt
d2l0aC1yb3VuZGVkLWhvbGUiOyBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
QEAgLTEwNzgsNyArOTM4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0
dGVybjogdHMgPDwgImFwcGx5LWZpbGwtcGF0dGVybiI7IGJyZWFrOwogI2VuZGlmCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogdHMgPDwgImFwcGx5LWRldmljZS1z
Y2FsZS1mYWN0b3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogdHMg
PDwgImNsZWFyLXNoYWRvdyI7IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7CiB9CkBAIC0x
MDg4LDIxICs5NDcsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJ
dGVtSGFuZGxlIGl0ZW0pCiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKICAgICBzd2l0Y2ggKGl0
ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICB0cyA8
PCBpdGVtLmdldDxUcmFuc2xhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlJvdGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Um90YXRlPigpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
U2NhbGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q29uY2F0
ZW5hdGVDVE0+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZUZpbGxDb2xvcjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigp
OwogICAgICAgICBicmVhazsKQEAgLTExMTUsMTggKzk1OSw2IEBAIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRTdGF0ZToKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3RhdGU+KCk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFNldExpbmVDYXA+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVEYXNoOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lRGFzaD4oKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFNldExpbmVKb2luPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRNaXRlckxp
bWl0PigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAg
ICB0cyA8PCBpdGVtLmdldDxDbGlwPigpOwogICAgICAgICBicmVhazsKQEAgLTExOTMsOSArMTAy
NSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUg
aXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCk7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSb3Vu
ZGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjcxLDcgKzExMDAsNiBAQCBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5
RmlsbFBhdHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5oCmluZGV4IDk3Y2I1ZmM4ZDA0YmE4NjYyYjcyYzdkZGVlYmM0NDE1NWMyODI1Yjcu
LmU4MWJiMzQ2YzllZmViZTk2YTY1MGQ3NTQ1YTgxZjYxNmI3ZDZhOWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtODUsMTA0ICs4NSw2IEBAIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogfTsKIAotY2xh
c3MgVHJhbnNsYXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OlRyYW5zbGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOwotCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgICAg
IDogbV94KHgpCi0gICAgICAgICwgbV95KHkpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IHgo
KSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95
OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1feCB7IDAgfTsKLSAgICBmbG9hdCBtX3kgeyAw
IH07Ci19OwotCi1jbGFzcyBSb3RhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90YXRlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgICAg
IDogbV9hbmdsZShhbmdsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgYW5nbGUoKSBjb25z
dCB7IHJldHVybiBtX2FuZ2xlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fYW5nbGUgeyAw
IH07IC8vIEluIHJhZGlhbnMuCi19OwotCi1jbGFzcyBTY2FsZSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTY2FsZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2NhbGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQotICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBGbG9hdFNpemUgbV9zaXplOwotfTsKLQotY2xhc3MgU2V0Q1RNIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OlNldENUTTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAg
U2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAgICA6IG1fdHJh
bnNmb3JtKHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCi1jbGFzcyBDb25jYXRl
bmF0ZUNUTSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOwotCi0gICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmluZVRyYW5zZm9ybSBtX3Ry
YW5zZm9ybTsKLX07Ci0KIGNsYXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVG
aWxsQ29sb3I7CkBAIC0yNDcsMTAgKzE0OSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOwotCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRl
Q2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIHsgcmV0dXJuIG1fc3RhdGVDaGFuZ2U7IH0K
KyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYpOworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGU7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgc3RkOjpvcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKQEAgLTI1OCw0MDQg
KzE1OCwyNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKTsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UgbV9zdGF0ZUNoYW5nZTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRl
OwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgU2V0U3RhdGU6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGF1dG8gY2hhbmdlRmxhZ3MgPSBtX3N0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3M7Ci0gICAgZW5jb2RlciA8PCBjaGFuZ2VGbGFnczsKLQotICAg
IGF1dG8mIHN0YXRlID0gbV9zdGF0ZUNoYW5nZS5tX3N0YXRlOwotCi0gICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkp
IHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0cm9rZUdyYWRpZW50KTsKLSAgICAgICAgZW5jb2Rl
ciA8PCAqc3RhdGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0gICAgICAgIGVuY29kZXIgPDwg
KnN0YXRlLnN0cm9rZVBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAg
IEFTU0VSVChzdGF0ZS5maWxsR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5m
aWxsR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0
YXRlLmZpbGxQYXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuZmlsbFBhdHRlcm47
Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93T2Zm
c2V0OwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgICAgIGVuY29k
ZXIgPDwgc3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93
UmFkaXVzTW9kZTsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIg
PDwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICBl
bmNvZGVyIDw8IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZUNvbG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBl
bmNvZGVyIDw8IHN0YXRlLmZpbGxDb2xvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIg
PDwgc3RhdGUuZmlsbFJ1bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0gICAgICAgIGVuY29k
ZXIgPDwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0gICAgICAgIGVu
Y29kZXIgPDwgc3RhdGUuYmxlbmRNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkK
LSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0g
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNo
YW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYWxwaGE7Ci0KLSAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5n
ZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkQW50aWFsaWFzOwotCi0gICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhG
b250c0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHM7
Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5n
ZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Cisg
ICAgZW5jb2RlciA8PCBtX3N0YXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3Rk
OjpvcHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ewotICAgIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3M+IGNoYW5nZUZsYWdzOwotICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7Ci0gICAgaWYgKCFj
aGFuZ2VGbGFncykKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBzdGF0
ZTsKKyAgICBkZWNvZGVyID4+IHN0YXRlOworICAgIGlmICghc3RhdGUpCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBzdGF0ZUNo
YW5nZTsKLSAgICBzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzID0gKmNoYW5nZUZsYWdzOwotCi0g
ICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0cm9rZUdyYWRp
ZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFzdHJva2VHcmFk
aWVudCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoKnN0cm9rZUdyYWRpZW50KTsK
LSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgYXV0byBz
dHJva2VQYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIXN0
cm9rZVBhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAg
IHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUoKnN0cm9rZVBhdHRl
cm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIGF1
dG8gZmlsbEdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYg
KCFmaWxsR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZSgqZmlsbEdyYWRp
ZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIGF1
dG8gZmlsbFBhdHRlcm4gPSBQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICgh
ZmlsbFBhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAg
IHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKCpmaWxsUGF0dGVybik7
Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25h
bDxGbG9hdFNpemU+IHNoYWRvd09mZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dPZmZz
ZXQ7Ci0gICAgICAgIGlmICghc2hhZG93T2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd09mZnNldCA9ICpz
aGFkb3dPZmZzZXQ7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2hhZG93Qmx1cjsK
LSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dCbHVyOwotICAgICAgICBpZiAoIXNoYWRvd0JsdXIp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdl
Lm1fc3RhdGUuc2hhZG93Qmx1ciA9ICpzaGFkb3dCbHVyOwotCi0gICAgICAgIHN0ZDo6b3B0aW9u
YWw8Q29sb3I+IHNoYWRvd0NvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd0NvbG9yOwot
ICAgICAgICBpZiAoIXNoYWRvd0NvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0NvbG9yID0gKnNoYWRvd0Nv
bG9yOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4gc2hhZG93UmFk
aXVzTW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dSYWRpdXNNb2RlOwotICAgICAgICBp
ZiAoIXNoYWRvd1JhZGl1c01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFdURk1vdmUo
KnNoYWRvd1JhZGl1c01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFu
Z2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHN0cm9rZVRoaWNrbmVzczsKLSAg
ICAgICAgZGVjb2RlciA+PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGlmICghc3Ryb2tlVGhp
Y2tuZXNzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9ICpzdHJva2VUaGlja25lc3M7Ci0gICAg
fQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRp
b25hbDxUZXh0RHJhd2luZ01vZGVGbGFncz4gdGV4dERyYXdpbmdNb2RlOwotICAgICAgICBkZWNv
ZGVyID4+IHRleHREcmF3aW5nTW9kZTsKLSAgICAgICAgaWYgKCF0ZXh0RHJhd2luZ01vZGUpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1f
c3RhdGUudGV4dERyYXdpbmdNb2RlID0gV1RGTW92ZSgqdGV4dERyYXdpbmdNb2RlKTsKLSAgICB9
Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8
Q29sb3I+IHN0cm9rZUNvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHN0cm9rZUNvbG9yOwotICAg
ICAgICBpZiAoIXN0cm9rZUNvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZUNvbG9yID0gKnN0cm9rZUNvbG9y
OwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0
aW9uYWw8Q29sb3I+IGZpbGxDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxsQ29sb3I7Ci0g
ICAgICAgIGlmICghZmlsbENvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxDb2xvciA9ICpmaWxsQ29sb3I7Ci0g
ICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkgewotICAgICAgICBTdHJva2VTdHls
ZSBzdHJva2VTdHlsZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJva2VTdHlsZSkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdl
Lm1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bFJ1bGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8V2luZFJ1bGU+IGZpbGxSdWxl
OwotICAgICAgICBkZWNvZGVyID4+IGZpbGxSdWxlOwotICAgICAgICBpZiAoIWZpbGxSdWxlKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5t
X3N0YXRlLmZpbGxSdWxlID0gKmZpbGxSdWxlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlT3BlcmF0
b3I+IGNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBkZWNvZGVyID4+IGNvbXBvc2l0ZU9wZXJh
dG9yOwotICAgICAgICBpZiAoIWNvbXBvc2l0ZU9wZXJhdG9yKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yID0gKmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVD
aGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0g
ICAgICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgICAgICBpZiAoIWJsZW5kTW9kZSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5ibGVuZE1vZGUgPSAqYmxlbmRNb2RlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEludGVycG9s
YXRpb25RdWFsaXR5PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgICAgICBkZWNvZGVy
ID4+IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGlmICghaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gKmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgewot
ICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBhbHBoYTsKLSAgICAgICAgZGVjb2RlciA+PiBh
bHBoYTsKLSAgICAgICAgaWYgKCFhbHBoYSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5hbHBoYSA9ICphbHBoYTsKLSAgICB9
Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlv
bmFsPGJvb2w+IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91bGRBbnRp
YWxpYXM7Ci0gICAgICAgIGlmICghc2hvdWxkQW50aWFsaWFzKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZEFudGlh
bGlhcyA9ICpzaG91bGRBbnRpYWxpYXM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZv
bnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZFNtb290aEZv
bnRzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFNtb290aEZvbnRzOwotICAgICAgICBpZiAo
IXNob3VsZFNtb290aEZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0gKnNob3VsZFNt
b290aEZvbnRzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHND
aGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
czsKLSAgICAgICAgaWYgKCFzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gKnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsK
LSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKSB7Ci0gICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAg
IGRlY29kZXIgPj4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAgIGlmICghc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSAqc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgeyBzdGF0ZUNoYW5n
ZSB9IH07Ci19Ci0KLWNsYXNzIFNldExpbmVDYXAgewotcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUNhcDsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUNhcChMaW5lQ2Fw
IGxpbmVDYXApCi0gICAgICAgIDogbV9saW5lQ2FwKGxpbmVDYXApCi0gICAgewotICAgIH0KLQot
ICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQotCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICBMaW5lQ2FwIG1fbGluZUNhcDsKLX07Ci0KLWNsYXNzIFNldExpbmVEYXNoIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OlNldExpbmVEYXNoOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwotCi0gICAgU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRh
c2hPZmZzZXQpCi0gICAgICAgIDogbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAgICAgICAsIG1f
ZGFzaE9mZnNldChkYXNoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBEYXNoQXJy
YXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9Ci0gICAgZmxvYXQg
ZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFzaD4gZGVj
b2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBEYXNoQXJyYXkgbV9kYXNoQXJyYXk7Ci0g
ICAgZmxvYXQgbV9kYXNoT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZv
aWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVu
Y29kZXIgPDwgbV9kYXNoQXJyYXk7Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hPZmZzZXQ7CisgICAg
cmV0dXJuIFNldFN0YXRlKCpzdGF0ZSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1z
dGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJheTsKLSAgICBk
ZWNvZGVyID4+IGRhc2hBcnJheTsKLSAgICBpZiAoIWRhc2hBcnJheSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGRhc2hPZmZzZXQ7Ci0g
ICAgZGVjb2RlciA+PiBkYXNoT2Zmc2V0OwotICAgIGlmICghZGFzaE9mZnNldCkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqZGFzaEFycmF5LCAqZGFzaE9m
ZnNldCB9fTsKLX0KLQotY2xhc3MgU2V0TGluZUpvaW4gewotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUpvaW47Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExpbmVKb2luKExp
bmVKb2luIGxpbmVKb2luKQotICAgICAgICA6IG1fbGluZUpvaW4obGluZUpvaW4pCi0gICAgewot
ICAgIH0KLQotICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9p
bjsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBMaW5lSm9pbiBtX2xpbmVKb2luOwotfTsKLQotY2xhc3Mg
U2V0TWl0ZXJMaW1pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQp
Ci0gICAgICAgIDogbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi0gICAgewotICAgIH0KLQotICAg
IGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7IH0KLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgZmxvYXQgbV9taXRlckxpbWl0OwotfTsKLQotY2xhc3MgQ2xlYXJTaGFkb3cg
ewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6Q2xlYXJTaGFkb3c7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxz
ZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7Ci19OwotCiAvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2luZyBpdGVtPwogY2xhc3MgQ2xpcCB7
CiBwdWJsaWM6CkBAIC0xNjEyLDkxICsxMTM0LDIwIEBAIHN0ZDo6b3B0aW9uYWw8RmlsbFJlY3RX
aXRoR3JhZGllbnQ+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
CiAgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0KCkgfX07CiB9CiAKLWNsYXNzIEZp
bGxDb21wb3NpdGVkUmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKLQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgICAgIDogbV9yZWN0KHJlY3QpCi0gICAgICAg
ICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBtX29wKG9wKQotICAgICAgICAsIG1fYmxlbmRN
b2RlKGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX2NvbG9yOyB9Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3Io
KSBjb25zdCB7IHJldHVybiBtX29wOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQotICAgIHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7
Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBtX2NvbG9yOwot
ICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOwot
fTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsK
LSAgICBlbmNvZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX29wOwotICAgIGVuY29k
ZXIgPDwgbV9ibGVuZE1vZGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1zdGQ6Om9w
dGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAg
ICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7Ci0gICAgZGVjb2RlciA+
PiBjb2xvcjsKLSAgICBpZiAoIWNvbG9yKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3A7Ci0gICAgZGVjb2RlciA+
PiBvcDsKLSAgICBpZiAoIW9wKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
c3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVyID4+IGJsZW5k
TW9kZTsKLSAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUgfX07Ci19Ci0K
IGNsYXNzIEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIEZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCisgICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICAgICAg
LCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKICAgICB7
CiAgICAgfQogCiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX2NvbG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxlbmRNb2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMTcwOSw3
ICsxMTYwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVj
dDsKICAgICBDb2xvciBtX2NvbG9yOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKIH07CiAK
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xNzE3LDcgKzExNjcsNiBAQCB2b2lkIEZpbGxS
b3VuZGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rl
ciA8PCBtX3JlY3Q7CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAgIGVuY29kZXIgPDwgbV9i
bGVuZE1vZGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0xNzMzLDEyICsxMTgy
LDcgQEAgc3RkOjpvcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IEZpbGxSb3VuZGVkUmVjdDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0g
ICAgZGVjb2RlciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0gICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKmJsZW5k
TW9kZSB9fTsKKyAgICByZXR1cm4geyB7ICpyZWN0LCAqY29sb3IgfSB9OwogfQogCiBjbGFzcyBG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZSB7CkBAIC0xOTYxLDcgKzE0MDUsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgUGFpbnRGcmFtZUZv
ck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAg
UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRlbnRpZmllciBp
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CkBAIC0yMjU2LDEzICsx
NzAwLDExIEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgIDwgQXBw
bHlEZXZpY2VTY2FsZUZhY3RvcgogICAgICwgQmVnaW5UcmFuc3BhcmVuY3lMYXllcgogICAgICwg
Q2xlYXJSZWN0Ci0gICAgLCBDbGVhclNoYWRvdwogICAgICwgQ2xpcAogICAgICwgQ2xpcE91dAog
ICAgICwgQ2xpcE91dFRvUGF0aAogICAgICwgQ2xpcFBhdGgKICAgICAsIENsaXBUb0ltYWdlQnVm
ZmVyCi0gICAgLCBDb25jYXRlbmF0ZUNUTQogICAgICwgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cgogICAgICwgRHJhd0VsbGlwc2UKICAgICAsIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyCkBAIC0y
Mjc4LDcgKzE3MjAsNiBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZhcmlhbnQKICAg
ICAsIERyYXdSZWN0CiAgICAgLCBEcmF3U3lzdGVtSW1hZ2UKICAgICAsIEVuZFRyYW5zcGFyZW5j
eUxheWVyCi0gICAgLCBGaWxsQ29tcG9zaXRlZFJlY3QKICAgICAsIEZpbGxFbGxpcHNlCiAgICAg
LCBGaWxsUGF0aAogICAgICwgRmlsbFJlY3QKQEAgLTIyODgsMjMgKzE3MjksMTUgQEAgdXNpbmcg
RGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgLCBGaWxsUm91bmRlZFJlY3QKICAg
ICAsIEZsdXNoQ29udGV4dAogICAgICwgUmVzdG9yZQotICAgICwgUm90YXRlCiAgICAgLCBTYXZl
Ci0gICAgLCBTY2FsZQotICAgICwgU2V0Q1RNCiAgICAgLCBTZXRJbmxpbmVGaWxsQ29sb3IKICAg
ICAsIFNldElubGluZVN0cm9rZUNvbG9yCi0gICAgLCBTZXRMaW5lQ2FwCi0gICAgLCBTZXRMaW5l
RGFzaAotICAgICwgU2V0TGluZUpvaW4KLSAgICAsIFNldE1pdGVyTGltaXQKICAgICAsIFNldFN0
YXRlCiAgICAgLCBTZXRTdHJva2VUaGlja25lc3MKICAgICAsIFN0cm9rZUVsbGlwc2UKICAgICAs
IFN0cm9rZUxpbmUKICAgICAsIFN0cm9rZVBhdGgKICAgICAsIFN0cm9rZVJlY3QKLSAgICAsIFRy
YW5zbGF0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgLCBGaWxsTGluZQpA
QCAtMjM0MSwyMCArMTc3NCwxMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNhdmUsCiAgICAg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlLAotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6Um90YXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2NhbGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRDVE0sCi0gICAg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSwKICAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvciwKICAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yLAogICAgIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzLAogICAgIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGUsCi0gICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0TGluZURhc2gsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRMaW5lSm9pbiwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNl
dE1pdGVyTGltaXQsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclNo
YWRvdywKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXAsCiAgICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0LAogICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC0yMzc2LDcgKzE3OTksNiBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3QsCiAg
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvciwKICAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50LAot
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0LAog
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0LAogICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUs
CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHAKaW5kZXggZWVlNDQ3MWQzNTRlNzUxNTMxMjUxODlkZmNjOTQxOGEzOTQ1
MTRhMS4uYTUzNTA5OTgwYTkzMTQwN2U5MWU1NGY5ZjkyMzI1Y2U1ZTVkMDVkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNDIsMzUwICs0MiwxODkgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLVJlY29yZGVy
OjpSZWNvcmRlcihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0
UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJh
d0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5
cGhzKQotICAgIDogbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3RydWN0RHJhd0ds
eXBocykKLXsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUsIGluaXRpYWxDVE0sIGlu
aXRpYWxDVE0ubWFwUmVjdChpbml0aWFsQ2xpcCkgfSk7Ci19CitSZWNvcmRlcjo6UmVjb3JkZXIo
Y29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0
aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0
cnVjdERyYXdHbHlwaHMpCisgICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENsaXAsIHsgfSwg
IGluaXRpYWxDVE0pCisgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZGVjb25zdHJ1
Y3REcmF3R2x5cGhzKQogCi1SZWNvcmRlcjo6flJlY29yZGVyKCkKIHsKLSAgICBBU1NFUlQobV9z
dGF0ZVN0YWNrLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5kaWNhdGVzIG1p
c21hdGNoZWQgc2F2ZS9yZXN0b3JlLgogfQogCi1zdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxp
bmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQotewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgaW5saW5lU3RhdGVDaGFuZ2VGbGFncyB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xv
ckNoYW5nZSwKLSAgICB9OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFuZ2VGbGFncyAm
IGlubGluZVN0YXRlQ2hhbmdlRmxhZ3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9y
Q2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFzU1JHQkFCeXRl
cygpKQotICAgICAgICByZXR1cm4gZmFsc2U7CitSZWNvcmRlcjo6flJlY29yZGVyKCkgPSBkZWZh
dWx0OwogCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLnRyeUdldEFz
U1JHQkFCeXRlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKK3ZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewotICAgIGlm
ICghY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNoYW5nZXMsIGNoYW5nZUZsYWdzKSkg
ewotICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVBhdHRl
cm4pCi0gICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7
Ci0gICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuZmlsbFBhdHRlcm4p
Ci0gICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7Ci0g
ICAgICAgIHJlY29yZFNldFN0YXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldElu
bGluZVN0cm9rZUNvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdC
QUJ5dGVzKCkpOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRTdHJva2VU
aGlja25lc3MoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkp
Ci0gICAgICAgIHJlY29yZFNldElubGluZUZpbGxDb2xvcigqY2hhbmdlcy5tX3N0YXRlLmZpbGxD
b2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7
CisgICAgcmVjb3JkU2F2ZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5n
ZUl0ZW1JZk5lY2Vzc2FyeSgpCit2b2lkIFJlY29yZGVyOjpyZXN0b3JlKCkKIHsKLSAgICAvLyBG
SVhNRTogVGhpcyBpcyBjdXJyZW50bHkgaW52b2tlZCBpbiBhbiBhZC1ob2MgbWFubmVyIHdoZW4g
cmVjb3JkaW5nIGRyYXdpbmcgaXRlbXMuIFdlIHNob3VsZCBjb25zaWRlciBlaXRoZXIKLSAgICAv
LyBzcGxpdHRpbmcgR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5nZXMgaW50byBpbmRpdmlkdWFs
IGRpc3BsYXkgbGlzdCBpdGVtcywgb3IgcmVmYWN0b3JpbmcgdGhlIGNvZGUgc3VjaCB0aGF0Ci0g
ICAgLy8gdGhpcyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBpbnZva2VkIHdoZW4gcmVjb3JkaW5n
IGEgZHJhd2luZyBpdGVtLgotICAgIGF1dG8mIHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgp
LnN0YXRlQ2hhbmdlOwotICAgIGF1dG8gY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBzdGF0ZUNoYW5n
ZXMuY2hhbmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlKTsKLSAg
ICBpZiAoIWNoYW5nZXNGcm9tTGFzdFN0YXRlKQorICAgIGlmICghc3RhY2tTaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8
PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOwotICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbShzdGF0ZUNoYW5nZXMsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKTsK
LSAgICBzdGF0ZUNoYW5nZXMubV9jaGFuZ2VGbGFncyA9IHsgfTsKLSAgICBjdXJyZW50U3RhdGUo
KS5sYXN0RHJhd2luZ1N0YXRlID0gc3RhdGVDaGFuZ2VzLm1fc3RhdGU7Ci19Ci0KLWNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBSZWNvcmRlcjo6c3RhdGUoKSBjb25zdAotewotICAgIHJldHVy
biBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5tX3N0YXRlOwotfQotCi12b2lkIFJlY29yZGVy
OjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGN1cnJlbnRT
dGF0ZSgpLnN0YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgcmVjb3JkU2V0TGlu
ZUNhcChsaW5lQ2FwKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZURhc2goY29uc3QgRGFz
aEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgcmVjb3JkU2V0TGlu
ZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGlu
ZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgcmVjb3JkU2V0TGluZUpvaW4obGluZUpv
aW4pOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQp
Ci17Ci0gICAgcmVjb3JkU2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OnJlc3RvcmUoKTsKKyAgICByZWNvcmRSZXN0b3JlKCk7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1
bHRzJiByZXN1bHRzKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMoKQogewotICAg
IGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkp
IHsKLSAgICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQo
KSk7Ci0gICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3VyY2VJbWFnZSgp
KSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFzb3VyY2VJbWFnZSkg
ewotICAgICAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihudWxscHRyLCBzb3VyY2VJ
bWFnZVJlY3QsIGZpbHRlcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoKnNvdXJjZUltYWdl
KSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNv
dXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJ
bWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQogCi12b2lkIFJlY29yZGVyOjpkcmF3
R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQotewotICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKLX0KKyAg
ICBpZiAoc3RhdGUoKS5oYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpKSB7CisgICAgICAgIGlmIChz
dGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpG
aWxsQnJ1c2gpKQorICAgICAgICAgICAgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9yKCpmaWxsQ29s
b3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHNB
bmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwg
Y29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGlu
Z01vZGUpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICBy
ZWNvcmRSZXNvdXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7Ci0gICAgcmVjb3JkRHJh
d0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIHNtb290
aGluZ01vZGUpOwotfQorICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKQorICAgICAgICAgICAgcmVj
b3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoKnN0cm9rZUNvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVz
KCkpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdl
QnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMo
KS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3Mp
KQorICAgICAgICAgICAgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygp
KTsKIAotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZWNvcmREcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZm
ZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVD
aGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7Ci0g
ICAgcmVjb3JkRHJhd05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgcmVjb3JkRHJhd1N5c3RlbUltYWdl
KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7
Ci0gICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VCdWZmZXIsIGRlc3RS
ZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwotICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCkpIHsKKyAgICAgICAgaWYgKGF1
dG8gcGF0dGVybiA9IGZpbGxQYXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVz
ZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7CiAgICAgfQogCi0gICAgcmVjb3JkRHJhd1BhdHRlcm4o
aW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12
b2lkIFJlY29yZGVyOjpzYXZlKCkKLXsKLSAgICByZWNvcmRTYXZlKCk7Ci0gICAgbV9zdGF0ZVN0
YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsKLX0KLQotdm9p
ZCBSZWNvcmRlcjo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKCFtX3N0YXRlU3RhY2suc2l6ZSgpKQot
ICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkgeworICAgICAgICBpZiAoYXV0
byBwYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpKQorICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VV
c2UocGF0dGVybi0+dGlsZUltYWdlKCkpOworICAgIH0KIAotICAgIG1fc3RhdGVTdGFjay5yZW1v
dmVMYXN0KCk7Ci0gICAgcmVjb3JkUmVzdG9yZSgpOworICAgIHJlY29yZFNldFN0YXRlKHN0YXRl
KCkpOworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnRy
YW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIGN1cnJlbnRTdGF0ZSgpLnRyYW5zbGF0
ZSh4LCB5KTsKLSAgICByZWNvcmRUcmFuc2xhdGUoeCwgeSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6
OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVy
OjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnJvdGF0ZShhbmds
ZUluUmFkaWFucyk7Ci0gICAgcmVjb3JkUm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpOwogfQogCi12
b2lkIFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIFJlY29yZGVy
OjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5zY2FsZShzaXplKTsK
LSAgICByZWNvcmRTY2FsZShzaXplKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJl
Y29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKIH0KKyNlbmRpZgogCi12b2lkIFJlY29yZGVyOjpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIFJlY29yZGVyOjph
cHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgIGlm
ICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3ND
b250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAg
IGN1cnJlbnRTdGF0ZSgpLmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29yZENvbmNhdGVu
YXRlQ1RNKHRyYW5zZm9ybSk7CisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNU
TSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCisgICAg
Ly8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAgICByZWNvcmRBcHBs
eURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAotdm9pZCBSZWNvcmRl
cjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBSZWNvcmRl
cjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGN1cnJlbnRT
dGF0ZSgpLnNldENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29yZFNldENUTSh0cmFuc2Zvcm0pOwot
fQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKLUFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6
Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdAotewotICAg
IHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07Ci19CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgp
OwogCi12b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
Ci17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBzZXRBbHBo
YShvcGFjaXR5KTsKICAgICByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwot
ICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclRyYW5z
cGFyZW5jeUxheWVyKCkpOwogfQogCiB2b2lkIFJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXll
cigpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNv
cmRFbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7
Ci19CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3UmVjdChyZWN0
LCBib3JkZXJUaGlja25lc3MpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdMaW5lKHBvaW50
MSwgcG9pbnQyKTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKLXZvaWQgUmVjb3JkZXI6OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMs
IFN0cm9rZVN0eWxlKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
Ci0gICAgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBv
aW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CisgICAgcmVj
b3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlIHN0eWxlKQordm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAgICByZWNvcmRDbGlw
KHJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSB3aW5kUnVsZSkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwot
ICAgIHJlY29yZERyYXdFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAgcmVjb3Jk
Q2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0aChj
b25zdCBQYXRoJiBwYXRoKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICBy
ZWNvcmREcmF3UGF0aChwYXRoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29y
ZENsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1Bh
dGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsK
LSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KTsKLX0KKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5h
dGlvblJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0jaWYgUExBVEZPUk0oTUFDKQot
dm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwg
Y29uc3QgQ29sb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGlu
YXRpb25SZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKK3ZvaWQgUmVjb3Jk
ZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsZWFyUmVjdChyZWN0
KTsKIH0KLSNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0KHJlY3QpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29s
b3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3RXaXRo
R3JhZGllbnQocmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmlsbENv
bXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29y
ZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmls
bFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhv
bGVSZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3Vu
ZGVkSG9sZVJlY3QsIGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29y
ZEZpbGxFbGxpcHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAg
ICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHBhdGguaGFzSW5saW5l
RGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQwMiwyMSArMjQxLDIxIEBAIHZvaWQgUmVjb3JkZXI6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkRmlsbFBhdGgocGF0aCk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
UmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJU
aGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAg
ICByZWNvcmRGaWxsRWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAg
IHJlY29yZFN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNv
cmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkK
K3ZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkU3Ryb2tl
UmVjdChyZWN0LCBsaW5lV2lkdGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVj
b3JkU3Ryb2tlRWxsaXBzZShyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5
KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHBhdGguaGFz
SW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQzMywxNDggKzI3MiwxNjggQEAgdm9pZCBSZWNv
cmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHJlY29yZFN0cm9rZVBhdGgo
cGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQyKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
Ci0gICAgcmVjb3JkQ2xlYXJSZWN0KHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgcmVjb3JkRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwogfQogCi0jaWYgVVNFKENHKQotdm9p
ZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0VsbGlwc2UocmVjdCk7CiB9CiAKLXZvaWQg
UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OwotICAgIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZERyYXdQYXRoKHBhdGgpOwogfQotI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QoY3Vy
cmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocmVjdCkpOwotICAgIHJlY29yZENsaXAocmVjdCk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChwYXRo
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICByZWNvcmRDbGlwT3V0KHJlY3QpOworICAgIGFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYg
cGF0aCkKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAgcmVjb3JkQ2xp
cE91dFRvUGF0aChwYXRoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFJlY29y
ZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUs
IGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5p
bnRlcnNlY3QoY3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocGF0aC5mYXN0Qm91bmRpbmdSZWN0
KCkpKTsKLSAgICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KKyNlbmRpZgogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91bmRzKCkgY29u
c3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKGF1dG8gaW52
ZXJzZSA9IGN1cnJlbnRTdGF0ZSgpLmN0bS5pbnZlcnNlKCkpCi0gICAgICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGludmVyc2UtPm1hcFJlY3QoY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcykp
OworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAvLyBJZiB0aGUg
Q1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlY3QuCi0gICAgLy8g
VGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9ybSBiZWhhdmlvci4K
LSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihpbWFn
ZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lkIFJlY29yZGVy
OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKIHsKLSAgICByZWNvcmRS
ZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcik7Ci0gICAgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoaW1h
Z2VCdWZmZXIsIGRlc3RSZWN0KTsKLX0KKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IGZpbHRlci5l
ZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkpIHsKKyAgICAgICAgYXV0
byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQoKSk7CisgICAgICAgIGlm
ICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3VyY2VJbWFnZSgpKSkgeworICAgICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwg
c291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFJlY29yZGVyOjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9k
PiByZW5kZXJpbmdNZXRob2QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QudmFsdWVfb3IoUmVuZGVyaW5nTWV0aG9kOjpEaXNw
bGF5TGlzdCkpOwotfQorICAgIGlmICghc291cmNlSW1hZ2UpIHsKKyAgICAgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKKyAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIobnVsbHB0
ciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0j
aWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17Ci0gICAgaWYg
KCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRG
cmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGlmICghcmVjb3JkUmVzb3Vy
Y2VVc2UoKnNvdXJjZUltYWdlKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVz
dWx0cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQVNTRVJUKHBsYXllci5pZGVudGlm
aWVyKCkpOwotICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9u
KTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKIH0KLSNlbmRp
ZgogCi12b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yKQordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgLy8gV2UgbW9kaWZ5IHRoZSBzdGF0ZSBkaXJlY3RseSBoZXJlIGlu
c3RlYWQgb2YgY2FsbGluZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKCkKLSAgICAvLyBiZWNhdXNl
IHRoZSByZWNvcmRlZCBpdGVtIHdpbGwgc2NhbGUoKSB3aGVuIHJlcGxheWVkLgotICAgIGN1cnJl
bnRTdGF0ZSgpLnNjYWxlKHsgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yIH0p
OworICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZERyYXdOYXRpdmVJbWFnZShpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CiAKLSAg
ICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRh
dGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KLSAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9u
bHkgY2FsbGVkIGVhcmx5IG9uPwotICAgIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2
aWNlU2NhbGVGYWN0b3IpOwordm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3U3lzdGVtSW1hZ2Uoc3lzdGVt
SW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRU
b0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91
bmRpbmdNb2RlKQordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQogewotICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlzcGxheUxpc3Q6
OlJlY29yZGVyLiIpOwotICAgIHJldHVybiByZWN0OworICAgIHJlY29yZFJlc291cmNlVXNlKGlt
YWdlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQYXR0ZXJuKGlt
YWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotY29uc3QgUmVj
b3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpIGNvbnN0Cit2b2lk
IFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJldHVybiBtX3N0
YXRlU3RhY2subGFzdCgpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIp
KSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VCdWZmZXIsIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7CiB9CiAKLVJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpj
dXJyZW50U3RhdGUoKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVjb3JkZXI6OnBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKQogewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9z
dGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlv
bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigpLCBkZXN0aW5h
dGlvbik7CiB9CisjZW5kaWYKIAotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZWNvcmRlcjo6Y3Rt
KCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgcmV0dXJuIGN1cnJlbnRT
dGF0ZSgpLmN0bTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fZHJhd0dseXBoc1Jl
Y29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFy
dFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRl
Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHNB
bmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwg
Y29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGlu
Z01vZGUpCiB7Ci0gICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICByZWNvcmRSZXNvdXJjZVVz
ZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICByZWNvcmREcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFu
Y2hvciwgc21vb3RoaW5nTW9kZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6
cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5
bGUpCiB7Ci0gICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzID0gcmFkMmRlZyhzdGF0aWNfY2FzdDxk
b3VibGU+KGFuZ2xlSW5SYWRpYW5zKSk7Ci0gICAgY3RtLnJvdGF0ZShhbmdsZUluRGVncmVlcyk7
Ci0gICAgCi0gICAgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uOwotICAgIHJvdGF0aW9uLnJvdGF0
ZShhbmdsZUluRGVncmVlcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRE
cmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJs
ZUxpbmVzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCit2b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7
Ci0gICAgY3RtLnNjYWxlKHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVj
b3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4
KQorUmVmUHRyPEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5k
ZXJpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9k
KSBjb25zdAogewotICAgIGN0bSA9IG1hdHJpeDsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
OjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJl
bmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdNZXRob2Q6OkRp
c3BsYXlMaXN0KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorRmxvYXRSZWN0IFJlY29yZGVyOjpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpS
b3VuZGluZ01vZGUpCiB7Ci0gICAgY3RtICo9IG1hdHJpeDsKKyAgICBXVEZMb2dBbHdheXMoIkdy
YXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5vdCB5ZXQgY29tcGF0aWJs
ZSB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKKyAgICByZXR1cm4gcmVjdDsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCmluZGV4IDg0NWVjMDA3NzJlZDJjNTRhMWU2Y2IyNmIyMTUxZGFiYWE2ZWMwNzUuLmFl
MzQzNzliZTY3ZjA1ZTEwNDJmNmFkYzVhYWJmODhjMjcwYzE3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpc3Bs
YXlMaXN0SXRlbXMuaCIKICNpbmNsdWRlICJEcmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRp
bGVSdWxlLgogI2luY2x1ZGUgIklubGluZVBhdGhEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdz
LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MSw3ICs1MCw3IEBAIGNsYXNz
IFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwogcHVibGljOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
Y29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRHJh
d0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWNv
cmRlcihjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0g
RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOwpAQCAtNjEsNDcgKzYwLDM1IEBAIHB1YmxpYzoKIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2F2ZSgpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkUmVzdG9yZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkVHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkUm90YXRl
KGZsb2F0IGFuZ2xlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNl
dElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0
TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZENsZWFyU2hhZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gMDsKKworI2lmIFVTRShDRykKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKKwogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb25SZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgo
Y29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3Qg
UGF0aCYsIFdpbmRSdWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIEZpbHRlciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNt
b290aGluZ01vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBp
bWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2Uo
U3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBs
b2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQ
YXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGb2N1c1Jp
bmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOworCiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRp
ZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBD
b21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29y
ZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBC
bGVuZE1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgTGlu
ZURhdGEmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxBcmMoY29uc3QgQXJjRGF0
YSYpID0gMDsKQEAgLTEwOSwxMSArOTYsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgPSAwOwogI2Vu
ZGlmCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
LSNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0gMDsKLSNl
bmRpZgotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25z
dCBMaW5lRGF0YSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0
IEFyY0RhdGEmKSA9IDA7CkBAIC0xMjEsMTE2ICsxMDcsODEgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEm
KSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQ
YXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5
U3Ryb2tlUGF0dGVybigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0
dGVybigpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFBh
dGgmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29u
c3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3
RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBGaWx0ZXImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdOYXRp
dmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyNpZiBFTkFCTEUoVklERU8p
CisgICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0gMDsKICNlbmRpZgotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50
LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlJikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKE5h
dGl2ZUltYWdlJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShJbWFn
ZUJ1ZmZlciYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3Qg
U291cmNlSW1hZ2UmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKEZv
bnQmKSA9IDA7CiAKLSAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKLSAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGN0bTsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHM7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZSBsYXN0RHJhd2luZ1N0YXRlOwotCi0gICAgICAgIENvbnRleHRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsaXApCi0gICAgICAgICAgICA6IGN0bSh0cmFuc2Zvcm0p
Ci0gICAgICAgICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKLSAgICAgICAgICAgICwgbGFzdERyYXdp
bmdTdGF0ZShzdGF0ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgQ29udGV4dFN0
YXRlIGNsb25lRm9yU2F2ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENvbnRleHRT
dGF0ZSBzdGF0ZShsYXN0RHJhd2luZ1N0YXRlLCBjdG0sIGNsaXBCb3VuZHMpOwotICAgICAgICAg
ICAgc3RhdGUuc3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKLSAgICAgICAgICAgIHJldHVybiBz
dGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZvclRyYW5zcGFy
ZW5jeUxheWVyKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBzdGF0ZSA9IGNs
b25lRm9yU2F2ZSgpOwotICAgICAgICAgICAgc3RhdGUubGFzdERyYXdpbmdTdGF0ZS5hbHBoYSA9
IDE7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9pZCByb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpOwotICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwot
ICAgICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICAgICAg
dm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgfTsKLQotICAgIGNvbnN0
IFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+JiBzdGF0ZVN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZVN0YWNrOyB9Ci0KLSAgICBjb25zdCBDb250ZXh0U3RhdGUmIGN1cnJlbnRTdGF0ZSgpIGNv
bnN0OwotICAgIENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCk7Ci0KICAgICBXRUJDT1JFX0VY
UE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwg
c3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRo
b2Q+KSBjb25zdCBvdmVycmlkZTsKKyAgICAKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBs
eURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNQ
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogICAgIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBudWxscHRyOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKSBmaW5hbDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQotICAgIHZvaWQg
c2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNv
bnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
cHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5
RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lkIGZpbGxSb3VuZGVk
UmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1
bGU6OkV2ZW5PZGQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29u
c3QgUGF0aCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVKb2lu
KExpbmVKb2luKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1pdGVyTGltaXQo
ZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xv
ciYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNpZiBVU0UoQ0cp
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKLSNlbmRpZgor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
IGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBoc0FuZENh
Y2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFu
Y2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJ
bWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVt
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJu
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpIGZpbmFsOwpAQCAtMjQxLDQwICsxOTIsMjMgQEAgcHJpdmF0ZToKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBj
b25zdCBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXAo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91
dChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUGF0aChj
b25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3Qg
Y2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQorICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1Bh
dHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOwogI2lmIEVOQUJMRShWSURFTykKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pIGZpbmFsOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5j
aG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3Qg
RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IHJv
dW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3Vu
ZGluZ01vZGUpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mp
OwotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLQotICAgIFZlY3Rv
cjxDb250ZXh0U3RhdGUsIDQ+IG1fc3RhdGVTdGFjazsKICAgICBEcmF3R2x5cGhzUmVjb3JkZXIg
bV9kcmF3R2x5cGhzUmVjb3JkZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXJJbXBsLmNwcAppbmRleCAxZmRjNmJhNTZiZmRiMjYzNmVmYjM0NjJhZGEyYTk5
MGQzMzg5OTQ1Li4xZmI0ZGQ3OTVhZTEwYWE4Y2NjYmNkZDgzMTRlZWE4MDg2ZThkYjY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKQEAgLTQyLDE4
ICs0MiwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsK
IAotUmVjb3JkZXJJbXBsOjpSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29y
ZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDog
UmVjb3JkZXIoc3RhdGUsIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdH
bHlwaHMpCitSZWNvcmRlckltcGw6OlJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
aW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVj
b25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDogUmVjb3JkZXIoaW5pdGlhbENsaXAsIGluaXRpYWxD
VE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGlzcGxheUxpc3QoZGlzcGxheUxp
c3QpCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJcblJl
Y29yZGluZyB3aXRoIGNsaXAgIiA8PCBpbml0aWFsQ2xpcCk7CiB9CiAKLVJlY29yZGVySW1wbDo6
flJlY29yZGVySW1wbCgpCi17Ci0gICAgQVNTRVJUKHN0YXRlU3RhY2soKS5zaXplKCkgPT0gMSk7
IC8vIElmIHRoaXMgZmlyZXMsIGl0IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4K
LX0KLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNhdmUoKQogewogICAgIGFwcGVuZDxTYXZl
PigpOwpAQCAtNjQsMzEgKzU5LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFJlc3RvcmUo
KQogICAgIGFwcGVuZDxSZXN0b3JlPigpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
VHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgYXBwZW5kPFRyYW5zbGF0ZT4oeCwg
eSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpCi17
Ci0gICAgYXBwZW5kPFJvdGF0ZT4oYW5nbGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBhcHBlbmQ8U2NhbGU+KHNj
YWxlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBhcHBlbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pOwot
fQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgYXBwZW5kPENvbmNhdGVuYXRlQ1RNPih0cmFu
c2Zvcm0pOwotfQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0SW5saW5lRmlsbENvbG9y
KFNSR0JBPHVpbnQ4X3Q+IGlubGluZUNvbG9yKQogewogICAgIGFwcGVuZDxTZXRJbmxpbmVGaWxs
Q29sb3I+KGlubGluZUNvbG9yKTsKQEAgLTEwNCw5MiArNzQsMjYgQEAgdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAgYXBwZW5k
PFNldFN0cm9rZVRoaWNrbmVzcz4odGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17Ci0gICAgYXBw
ZW5kPFNldFN0YXRlPihzdGF0ZSwgY2hhbmdlRmxhZ3MpOwotfQotCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgYXBwZW5kPFNldExp
bmVDYXA+KGxpbmVDYXApOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiBhcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBhcHBl
bmQ8U2V0TGluZURhc2g+KGFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0gICAgYXBwZW5kPFNldExp
bmVKb2luPihqb2luKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldE1pdGVyTGlt
aXQoZmxvYXQgbGltaXQpCi17Ci0gICAgYXBwZW5kPFNldE1pdGVyTGltaXQ+KGxpbWl0KTsKLX0K
LQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyU2hhZG93KCkKLXsKLSAgICBhcHBlbmQ8
Q2xlYXJTaGFkb3c+KCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwKGNvbnN0
IEZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXA+KGNsaXBSZWN0KTsKLX0K
LQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBjbGlw
UmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgYXBwZW5kPENsaXBPdXQ+KGNsaXBSZWN0KTsKKyAg
ICBhcHBlbmQ8U2V0U3RhdGU+KHN0YXRlKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXBUb0ltYWdlQnVmZmVyPihp
bWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0
KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0
aCYgcGF0aCkKLXsKLSAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0aCk7Ci19Ci0KLXZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBy
dWxlKQotewotICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRl
cikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRl
bnRpZmllcjsKLSAgICBpZiAoc291cmNlSW1hZ2UpCi0gICAgICAgIGlkZW50aWZpZXIgPSBzb3Vy
Y2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7Ci0gICAgYXBwZW5kPERyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3Qs
IGZpbHRlcik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQm
IGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewotICAgIGFwcGVuZDxEcmF3
R2x5cGhzPihmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUp
OwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAg
ICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+
KGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
CisgICAgYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFw
cGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3U3lzdGVtSW1hZ2U+KHN5c3RlbUlt
YWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPigpOwog
fQorI2VuZGlmIC8vIFVTRShDRykKIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0
ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxl
RmFjdG9yKQogewotICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0
UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAg
IGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihzY2FsZUZhY3Rvcik7CiB9CiAKIHZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
CkBAIC0yMDIsNDQgKzEwNiwzNCBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKQogICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKTsKIH0KIAot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbGluZVdpZHRoKQotewotICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwgbGluZVdpZHRo
KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFwcGVuZDxEcmF3
TGluZT4ocG9pbnQxLCBwb2ludDIpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9h
dFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJh
d0xpbmVzRm9yVGV4dD4oYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lk
dGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOworICAgIGFwcGVuZDxDbGlwPihjbGlwUmVjdCk7
CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0
eWxlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIHJ1bGUpCiB7Ci0gICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+
KHJlY3QsIHN0eWxlKTsKKyAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBhdGgsIHJ1bGUpOwogfQogCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBjbGlw
UmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOworICAgIGFwcGVuZDxDbGlw
T3V0PihjbGlwUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aChj
b25zdCBQYXRoJiBwYXRoKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOworICAgIGFw
cGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwg
d2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1h
Z2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCk7
CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0
cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOwog
fQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQpAQCAtMjU3LDIzICsxNTEsMjIgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxS
ZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGcKICAgICBh
cHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KHJlY3QsIGdyYWRpZW50KTsKIH0KIAotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBt
b2RlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kPEZp
bGxDb21wb3NpdGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBtb2RlKTsKKyAgICBhcHBlbmQ8Rmls
bFJvdW5kZWRSZWN0PihyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5k
PEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29sb3IsIG1vZGUpOworICAgIGFwcGVuZDxGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0
LCByb3VuZGVkUmVjdCwgY29sb3IpOworICAgIGFwcGVuZDxGaWxsRWxsaXBzZT4ocmVjdCk7CiB9
CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVuZDxGaWxsTGlu
ZT4obGluZSk7CkBAIC0yOTMsNyArMTg2LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZp
bGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewogICAgIGFwcGVu
ZDxGaWxsQmV6aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKQEAgLTMwMSwyNSArMTkzLDE3IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRG
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxGaWxsUGF0aD4ocGF0aCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKLX0KLQotI2lmIEVOQUJM
RShWSURFTykKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXll
ciwgZGVzdGluYXRpb24pOworICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBib3JkZXJUaGlj
a25lc3MpOwogfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAotdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgd2lkdGgpOworICAgIGFwcGVuZDxT
dHJva2VFbGxpcHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
CiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYgbGlu
ZSkKIHsKICAgICBhcHBlbmQ8U3Ryb2tlTGluZT4obGluZSk7CkBAIC0zMzksNyArMjIzLDYgQEAg
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1
cnZlRGF0YSYgY3VydmUpCiB7CiAgICAgYXBwZW5kPFN0cm9rZUJlemllckN1cnZlPihjdXJ2ZSk7
CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM0NywzMyArMjMw
LDg0IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiAgICAgYXBwZW5kPFN0cm9rZVBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOworICAgIGFw
cGVuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kPENsZWFyUmVjdD4ocmVjdCk7CisgICAg
YXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0UoQ0cpCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
eworICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7Cit9CiAKLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVy
bj4oKTsKKyAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJh
d0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPigp
OworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9mZnNldCwgY29s
b3IpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBhcHBlbmQ8RHJh
d0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOworfQogCi12b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZh
Y3RvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXBwZW5kPEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKKyAgICBhcHBlbmQ8RHJhd05hdGl2
ZUltYWdlPihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5
c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
Cit7CisgICAgYXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9u
UmVjdCk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
eworICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZp
bHRlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4g
aWRlbnRpZmllcjsKKyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50aWZpZXIgPSBz
b3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgYXBwZW5kPERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJl
Y3QsIGZpbHRlcik7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
YXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwg
dHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBFTkFCTEUoVklE
RU8pCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQor
eworICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KGlkZW50aWZpZXIsIGRlc3RpbmF0aW9u
KTsKK30KKyNlbmRpZgorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50
JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBhcHBlbmQ8RHJh
d0dseXBocz4oZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2Rl
KTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgYXBwZW5kPERyYXdM
aW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3Ms
IHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgYXBwZW5kPERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKIH0KIAogYm9vbCBSZWNvcmRlcklt
cGw6OnJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSkKQEAgLTQxNywy
MCArMzUxLDE2IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdFeHRlbnQoZmxv
YXQgYmx1clJhZGl1cykKIAogRmxvYXRSZWN0IFJlY29yZGVySW1wbDo6ZXh0ZW50RnJvbUxvY2Fs
Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgYm91
bmRzID0gcmVjdDsKLSAgICBhdXRvJiBzdGF0ZSA9IGN1cnJlbnRTdGF0ZSgpOworICAgIGF1dG8g
Ym91bmRzID0gcmVjdDsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQg
c2hhZG93UmFkaXVzOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGlmIChnZXRTaGFkb3co
c2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgewotICAgICAgICBGbG9h
dFJlY3Qgc2hhZG93RXh0ZW50ID0gYm91bmRzOwotICAgICAgICBzaGFkb3dFeHRlbnQubW92ZShz
aGFkb3dPZmZzZXQpOwotICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQYWludGlu
Z0V4dGVudChzaGFkb3dSYWRpdXMpKTsKKyAgICBpZiAoaGFzU2hhZG93KCkpIHsKKyAgICAgICAg
YXV0byBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CisgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKGRy
b3BTaGFkb3coKS5vZmZzZXQpOworICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQ
YWludGluZ0V4dGVudChkcm9wU2hhZG93KCkuYmx1clJhZGl1cykpOwogICAgICAgICBib3VuZHMu
dW5pdGUoc2hhZG93RXh0ZW50KTsKICAgICB9CiAKLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHN0
YXRlLmNsaXBCb3VuZHMsIHN0YXRlLmN0bS5tYXBSZWN0KGJvdW5kcykpOworICAgIHJldHVybiBp
bnRlcnNlY3Rpb24oY2xpcEJvdW5kcygpLCBnZXRDVE0oKS5tYXBSZWN0KGJvdW5kcykpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlckltcGwuaAppbmRleCA2NDIyNjVmMDk4MDIyY2YyYjA1ZjE4MGMxNzRmYTAzNDYy
ZjJkZDQwLi42ZGU2YWVkZmZjYjE3ZGIyZDA4MWI0MmMxZGU2YmMzMjlhMzhiZjQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaApAQCAtMzUsOSArMzUsOCBA
QCBjbGFzcyBSZWNvcmRlckltcGwgOiBwdWJsaWMgUmVjb3JkZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVySW1wbCk7CiBw
dWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiwgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJh
d0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVySW1wbCgpOwotCisgICAgV0VC
Q09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiwgY29uc3QgRmxvYXRSZWN0JiBp
bml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9LCBEcmF3
R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRl
cjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIAogICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIGNv
bnZlcnRUb0x1bWluYW5jZU1hc2soKSBmaW5hbCB7IH0KQEAgLTQ3LDQ3ICs0NiwzNSBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkU2F2ZSgpIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKICAgICB2
b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgZmluYWw7CiAgICAg
dm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PikgZmluYWw7CiAg
ICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5l
Q2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgRGFz
aEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5l
Sm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGZpbmFsOworCisjaWYg
VVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CisgICAg
dm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQg
cmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9pZCByZWNv
cmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRDbGlwKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0
aCYsIFdpbmRSdWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xp
cFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIEZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNt
b290aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZp
ZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXpl
JiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50
TWFya2VyTGluZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRp
ZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRG
aWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpIGZp
bmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0
IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQgcmVj
b3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxB
cmMoY29uc3QgQXJjRGF0YSYpIGZpbmFsOwpAQCAtOTUsMTEgKzgyLDEwIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgZmlu
YWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotI2lm
IEVOQUJMRShWSURFTykKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotI2VuZGlmCi0gICAg
dm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKwor
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQg
cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3Jk
U3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEmKSBmaW5hbDsKQEAgLTEwNywxMyArOTMsMjggQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZl
RGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBh
dGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisKKyAgICB2b2lk
IHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykg
ZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQ
YXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
IGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIq
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgZmluYWw7CisgICAg
dm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERy
YXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdN
b2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSYpIGZpbmFsOwogCiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJbWFn
ZSYpIGZpbmFsOwogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1hZ2VCdWZmZXImKSBmaW5h
bDsKQEAgLTEzOSw2ICsxNDAsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCisgICAg
dm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKwogICAgIEZs
b2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAK
ICAgICBEaXNwbGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmNwcAppbmRleCA4ZmYxOWQwMDM1NGNkYmVkZTNhNWJhMWFmNzU4Y2ZmMDIz
YTI1YTIyLi42NmZjOWQ4ODJhNGQzZjdkZThlODkxMmExZjMwYWYxOThkMDM1MjgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZXBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC05NywxMCArOTcsMTAgQEAg
aW5saW5lIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4g
YXBwbHlTZXRTdGF0ZUl0ZW0oR3JhcGgKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICB9OwogCi0gICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFn
ZShzZXRTdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkp
KQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0
U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0dXJu
ICppbWFnZUlkZW50aWZpZXI7CiAKLSAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQ
YXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuZmlsbFBh
dHRlcm4uZ2V0KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5U
aWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVybigpKSkKICAg
ICAgICAgcmV0dXJuICppbWFnZUlkZW50aWZpZXI7CiAKICAgICBzZXRTdGF0ZUl0ZW0uYXBwbHko
Y29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAK
aW5kZXggZDA5YzEzNzNlYTlhYWFmNGExODUxMzZlZTg4NTNkNzg4ZmM0MTc4ZC4uZmNhZGVmMjM4
ZTA5ZmUwMjgyYWNlZWM5YTFmMjVmODczMzlkOWM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enou
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdH
bHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtMjksMTcgKzI5LDE4IEBACiAjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYg
b3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQotICAg
IDogbV9vd25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVy
KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVjdERyYXdHbHlw
aHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25Db250ZXh0KGRl
c3RpbmF0aW9uQ29udGV4dCkKIHsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdH
bHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01v
ZGUpCiB7Ci0gICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywg
YWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgbV9k
ZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCmluZGV4IDkxMTQ2ZGZjNmZkODRkZjhlMjk1NGYwMzc3
ZDAwNjZhNzcyMzNjYzkuLjUzMDRiNGIzMmU3YTI3OTJiNWNkZTcyNzI4MjcyMjEzMjM3MTYxNzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fp
cm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVj
b3JkZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxNjAgKzc4LDM4OSBAQCBhdXRvIGNy
ZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRp
b25EYXRhPD4sIFQ+Ojp2YQogfQogCiBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyKFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCi0gICAgOiBtX2Nv
bW1hbmRMaXN0KGNvbW1hbmRMaXN0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KEZsb2F0UmVjdDo6
aW5maW5pdGVSZWN0KCkpCisgICAgLCBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQogewotICAg
IG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7IH0sIHsgfSwgRmxvYXRSZWN0OjppbmZpbml0ZVJlY3Qo
KSB9KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzYXZl
KCkKK3sKKyAgICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPD4geworICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBkZWZhdWx0OworCisgICAgICAg
IHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnNhdmUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTYXZlPD5cbiI7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CisgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8U2F2ZT4oKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6cmVzdG9yZSgpCit7CisgICAgc3RydWN0IFJlc3RvcmUgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmlydHVhbCB+UmVzdG9yZSgpID0g
ZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0Rm9yUmVw
bGF5KHJlcGxheWVyKS5yZXN0b3JlKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiUmVzdG9yZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGlmICghc3Rh
Y2tTaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJlc3RvcmU+KCkpOworfQorCit2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSB7CisgICAg
aWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkNUTSkpIHsKKyAgICAgICAgc3RydWN0IFNldENUTSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4geworICAgICAgICAgICAgdmlydHVh
bCB+U2V0Q1RNKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q1RNPD5c
biI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8U2V0Q1RNPihnZXRDVE0oKSkpOworICAgIH0KKworICAgIGlmIChzdGF0ZSgpLmNoYW5n
ZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25l
c3MpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VUaGlja25lc3NDaGFuZ2UgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewogICAgICAgICAgICAgdmlydHVh
bCB+U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tu
ZXNzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICAg
ICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoY29udGV4dEZvclJlcGxheShyZXBs
YXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VUaGlja25lc3NDaGFuZ2U8PlxuIjsKKyAgICAg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlN0cm9rZVRoaWNrbmVzczw+XG4iOwogICAgICAgICAgICAgfQogICAgICAgICB9OwogCi0gICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVRoaWNrbmVzc0NoYW5nZT4oc3RhdGUuc3Ry
b2tlVGhpY2tuZXNzKSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVRoaWNr
bmVzc0NoYW5nZT4oc3Ryb2tlVGhpY2tuZXNzKCkpKTsKICAgICB9CiAKLSAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpIHsKKyAgICBpZiAoc3Rh
dGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ry
b2tlU3R5bGUpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VTdHlsZUNoYW5nZSBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFN0cm9rZVN0eWxlPiB7CiAgICAgICAgICAg
ICB2aXJ0dWFsIH5TdHJva2VTdHlsZUNoYW5nZSgpID0gZGVmYXVsdDsKIAogICAgICAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0
eWxlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICAg
ICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0
eWxlPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0cm9rZVN0eWxlKCkpKTsKKyAgICB9CisK
KyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6TGluZUNhcCkpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lQ2FwPiB7CisgICAgICAgICAgICB2
aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1
dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
TGluZUNhcDw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXAoKSkpOworICAgIH0KKworICAgIGlm
IChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpMaW5lRGFzaCkpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVEYXNoIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFzaEFycmF5LCBmbG9hdD4geworICAgICAgICAg
ICAgdmlydHVhbCB+U2V0TGluZURhc2goKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVEYXNoKGNvbnRleHRGb3JS
ZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZURhc2g+KGxpbmVEYXNoKCku
ZGFzaGVzLCBsaW5lRGFzaCgpLm9mZnNldCkpOworICAgIH0KKworICAgIGlmIChzdGF0ZSgpLmNo
YW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbikp
IHsKKyAgICAgICAgc3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8TGluZUpvaW4+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldExpbmVK
b2luKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigp
LCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luPD5cbiI7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5j
aGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1p
dCkpIHsKKyAgICAgICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICAgICAgdmlydHVhbCB+U2V0TWl0
ZXJMaW1pdCgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5n
T3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KS5jcigpLCBhcmc8MD4oKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVN0eWxlQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxp
bWl0PD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0YXRlLnN0cm9rZVN0eWxlKSk7CisgICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVyTGltaXQ+KG1pdGVyTGltaXQoKSkpOwog
ICAgIH0KIAotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpIHsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSkpIHsKICAgICAgICAgc3Ry
dWN0IENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+IHsKICAgICAgICAgICAg
IHZpcnR1YWwgfkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSgpID0gZGVmYXVsdDsKIAogICAgICAg
ICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3Zl
cnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFy
ZzwxPigpKTsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSwgYXJnPDE+KCkp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAgICB0cyA8PCBp
bmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGU8Plxu
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U+KHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBz
dGF0ZS5ibGVuZE1vZGUpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q29tcG9zaXRl
T3BlcmF0aW9uQ2hhbmdlPihjb21wb3NpdGVNb2RlKCkub3BlcmF0aW9uLCBjb21wb3NpdGVNb2Rl
KCkuYmxlbmRNb2RlKSk7CiAgICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkgeworICAgIAorICAgIGlmIChzdGF0ZSgpLmNo
YW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRp
YWxpYXMpKSB7CiAgICAgICAgIHN0cnVjdCBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxib29sPiB7CiAgICAgICAgICAgICB2aXJ0
dWFsIH5TaG91bGRBbnRpYWxpYXNDaGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRp
YWxpYXMoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAg
ICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNob3VsZEFudGlhbGlhc0NoYW5nZTw+XG4iOworICAg
ICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U2hvdWxkQW50aWFsaWFzPD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAg
ICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2hvdWxkQW50aWFsaWFzQ2hhbmdlPihzdGF0ZS5z
aG91bGRBbnRpYWxpYXMpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2hvdWxkQW50
aWFsaWFzQ2hhbmdlPihzaG91bGRBbnRpYWxpYXMoKSkpOwogICAgIH0KKworICAgIGRpZEFwcGx5
U3RhdGVDaGFuZ2VzKCk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQoreworICAgIHN0cnVjdCBCZWdpblRyYW5z
cGFyZW5jeUxheWVyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Zmxv
YXQ+IHsKKyAgICAgICAgdmlydHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVs
dDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxh
eWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAg
ICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI8
PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisg
ICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpKTsK
K30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigp
Cit7CisgICAgc3RydWN0IEVuZFRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFpbnRpbmdPcGVy
YXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7CisgICAgICAgIHZpcnR1YWwgfkVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIENh
aXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRW5kVHJhbnNwYXJlbmN5TGF5
ZXI8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIAorICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7Cit9CisKK3ZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgc3RydWN0IENsaXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxG
bG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xpcCgpID0gZGVmYXVsdDsKKworICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6Y2xpcChjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkNsaXA8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworCisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPENsaXA+KHJlY3QpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKK3sKKyAgICBz
dHJ1Y3QgQ2xpcFBhdGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQ
YXRoLCBXaW5kUnVsZT4geworICAgICAgICB2aXJ0dWFsIH5DbGlwUGF0aCgpID0gZGVmYXVsdDsK
KworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVy
KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6Y2xpcFBhdGgoY29udGV4
dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFBhdGg8PlxuIjsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKHBhdGgsIHdpbmRSdWxlKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwUGF0aD4o
cGF0aCwgd2luZFJ1bGUpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRM
aW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xp
cE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc3RydWN0IFNldExpbmVDYXAgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lQ2FwPiB7Ci0gICAgICAg
IHZpcnR1YWwgflNldExpbmVDYXAoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IENsaXBPdXQgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAg
ICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6c2V0TGluZUNhcChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
YXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmNsaXBPdXQoY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJTZXRMaW5lQ2FwPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBP
dXQ8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxT
ZXRMaW5lQ2FwPihsaW5lQ2FwKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxDbGlwT3V0PihyZWN0KSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRh
c2hPZmZzZXQpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBzdHJ1Y3QgU2V0TGluZURhc2ggZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxEYXNoQXJyYXksIGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwg
flNldExpbmVEYXNoKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBDbGlwT3V0IGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aD4geworICAgICAgICB2aXJ0dWFsIH5D
bGlwT3V0KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENh
aXJvOjpzZXRMaW5lRGFzaChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFy
ZzwxPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8
PCAiU2V0TGluZURhc2g8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91
dDw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNl
dExpbmVEYXNoPihkYXNoZXMsIGRhc2hPZmZzZXQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+KHBhdGgpKTsKIH0KIAotdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3Zv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBzdHJ1Y3QgU2V0TGlu
ZUpvaW4gZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lSm9pbj4g
ewotICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lSm9pbigpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3Qg
Q2xpcFRvSW1hZ2VCdWZmZXIgZmluYWw6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+
Q2xpcFRvSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAg
ICAgICAgICAgQ2Fpcm86OnNldExpbmVKb2luKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSk7CiAgICAgICAgIH0K
IAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2V0TGluZUpvaW48PlxuIjsKKyAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFRvSW1hZ2VCdWZmZXI8PlxuIjsKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lSm9pbj4obGluZUpvaW4p
KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2Ug
PSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KG5hdGl2ZUltYWdlLT5wbGF0
Zm9ybUltYWdlKCksIGRlc3RSZWN0KSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQordm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHN0cnVjdCBT
ZXRNaXRlckxpbWl0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Zmxv
YXQ+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKKyAgICBz
dHJ1Y3QgQ2xlYXJSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
RmxvYXRSZWN0PiB7CisgICAgICAgIHZpcnR1YWwgfkNsZWFyUmVjdCgpID0gZGVmYXVsdDsKIAog
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmNs
ZWFyUmVjdChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7
Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldE1pdGVyTGltaXQ8PlxuIjsKKyAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xlYXJSZWN0PD5cbiI7CiAgICAgICAgIH0KICAgICB9
OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TWl0ZXJMaW1pdD4obWl0ZXJMaW1pdCkp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xl
YXJSZWN0PihyZWN0KSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjQ5LDYgKzQ3OSw4IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAg
ICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKICAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJl
Y3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkp
OwogfQpAQCAtMjY5LDYgKzUwMSw4IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAg
IH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KCkpKSk7CiB9CiAKQEAgLTI5MSwzNSArNTI1LDEyIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQp
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBncmFkaWVudC5jcmVhdGVQ
YXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pKSk7Ci19Ci0KLXZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIHN0cnVjdCBGaWxsUmVjdCBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ29sb3IsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZSwgQ29tcG9zaXRlT3BlcmF0
b3I+IHsKLSAgICAgICAgdmlydHVhbCB+RmlsbFJlY3QoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
LSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dEZv
clJlcGxheShyZXBsYXllcik7Ci0KLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDI+KCksIGFyZzwzPigpKTsKLSAgICAg
ICAgICAgIENhaXJvOjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQsIGFyZzwwPigpLCBhcmc8MT4o
KSwgYXJnPDQ+KCkpOwotICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVy
YXRpb24ocGxhdGZvcm1Db250ZXh0LCBhcmc8NT4oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAg
ICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxSZWN0PD5cbiI7Ci0gICAg
ICAgIH0KLSAgICB9OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKLSAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJl
Y3QsIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcikpOworICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxSZWN0PihyZWN0LCBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgZmlsbFNw
YWNlVHJhbnNmb3JtKCkpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Zmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIHN0cnVjdCBGaWxsUm91bmRlZFJlY3QgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJvdW5kZWRSZWN0LCBD
b2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7
CiAgICAgICAgIHZpcnR1YWwgfkZpbGxSb3VuZGVkUmVjdCgpID0gZGVmYXVsdDsKQEAgLTMyOCw3
ICs1MzksNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB7CiAgICAgICAgICAg
ICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKTsKIAot
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1D
b250ZXh0LCBhcmc8Mj4oKSwgYXJnPDM+KCkpOworICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LmNyKCksIGFyZzwyPigpLCBhcmc8
Mz4oKSk7CiAKICAgICAgICAgICAgIGF1dG8mIHJlY3QgPSBhcmc8MD4oKTsKICAgICAgICAgICAg
IGlmIChyZWN0LmlzUm91bmRlZCgpKQpAQCAtMzM2LDcgKzU0Nyw3IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRSZWN0CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ2Fpcm86OmZpbGxS
ZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVjdC5yZWN0KCksIGFyZzwxPigpLCBhcmc8ND4oKSk7CiAK
LSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3Jt
Q29udGV4dCwgYXJnPDI+KCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dC5jcigpLCBhcmc8
Mj4oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1w
KFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAtMzQ1LDggKzU1Niw5IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4ocm91
bmRlZFJlY3QsIGNvbG9yLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4ocm91bmRlZFJlY3QsIGNvbG9y
LCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCksIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSgpKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0zNjUsMTAgKzU3Nywz
NiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29ucwogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisKICAgICBVTlVTRURfUEFSQU0oY29sb3IpOwogICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9s
ZVJlY3QsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCit2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAg
ICBzdHJ1Y3QgRmlsbEVsbGlwc2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9u
RGF0YTxGbG9hdFJlY3QsIENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsK
KyAgICAgICAgdmlydHVhbCB+RmlsbEVsbGlwc2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgUGF0aCBwYXRoOworICAgICAgICAgICAgcGF0aC5hZGRFbGxp
cHNlKGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUGF0aChjb250ZXh0Rm9yUmVw
bGF5KHJlcGxheWVyKSwgcGF0aCwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJGaWxsRWxsaXBzZTw+XG4iOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbEVsbGlwc2U+KHJlY3Qs
IENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwor
fQorCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiB7CiAgICAgc3RydWN0IEZpbGxQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9w
ZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4g
ewpAQCAtMzg4LDMyICs2MjYsMTIgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxs
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwg
Q2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9
CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIHN0cnVjdCBGaWxsRWxsaXBzZSBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2UsIENhaXJv
OjpTaGFkb3dTdGF0ZT4gewotICAgICAgICB2aXJ0dWFsIH5GaWxsRWxsaXBzZSgpID0gZGVmYXVs
dDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxh
eWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBQYXRoIHBhdGg7Ci0gICAgICAg
ICAgICBwYXRoLmFkZEVsbGlwc2UoYXJnPDA+KCkpOwotICAgICAgICAgICAgQ2Fpcm86OmZpbGxQ
YXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBwYXRoLCBhcmc8MT4oKSwgYXJnPDI+KCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxFbGxpcHNlPD5c
biI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6Rmls
bFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKLX0KLQogdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbGluZVdpZHRoKQogewogICAgIHN0cnVjdCBTdHJva2VSZWN0IGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBmbG9hdCwgQ2Fpcm86OlN0cm9r
ZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CkBAIC00MzAsMzEgKzY0OCwxMCBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJl
Y3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgc3RydWN0IFN0cm9rZVBhdGggZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBDYWlybzo6U3Ryb2tlU291cmNl
LCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAgICAgICAgdmlydHVhbCB+U3Ryb2tlUGF0aCgpID0g
ZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c3Ryb2tl
UGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8
Mj4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU3Ryb2tlUGF0
aDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKICAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0aD4o
cGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lk
dGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCkBAIC00NzksMTA3ICs2NzYsMjkgQEAgdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCi12b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgc3RydWN0IENsZWFyUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEZsb2F0UmVjdD4gewotICAgICAgICB2aXJ0dWFsIH5DbGVhclJlY3QoKSA9IGRlZmF1bHQ7
Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXll
cikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsZWFyUmVjdChjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkNsZWFyUmVjdDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsZWFyUmVjdD4ocmVjdCkpOwotfQotCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc3RydWN0IERyYXdHbHlwaHMgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDYWlybzo6RmlsbFNvdXJjZSwg
Q2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlLCBGbG9hdFBvaW50LCBSZWZQ
dHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4sIGZsb2F0LCBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4sIGZs
b2F0LCBUZXh0RHJhd2luZ01vZGVGbGFncywgZmxvYXQsIEZsb2F0U2l6ZSwgQ29sb3IsIEZvbnRT
bW9vdGhpbmdNb2RlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7
CisgICAgc3RydWN0IFN0cm9rZVBhdGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxQYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsK
KyAgICAgICAgdmlydHVhbCB+U3Ryb2tlUGF0aCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAg
ICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd0dseXBocyhjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0Pigp
LmdldCgpLAotICAgICAgICAgICAgICAgIGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCksIGFy
Zzw4PigpLCBhcmc8OT4oKSwgYXJnPDEwPigpLCBhcmc8MTE+KCksIGFyZzwxMj4oKSk7CisgICAg
ICAgICAgICBDYWlybzo6c3Ryb2tlUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1
bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8
IGluZGVudCA8PCAiRHJhd0dseXBoczw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJTdHJva2VQYXRoPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgaWYgKCFmb250LnBs
YXRmb3JtRGF0YSgpLnNpemUoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8Y2Fpcm9f
Z2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKLSAgICB7Ci0gICAgICAgIGF1dG8geU9m
ZnNldCA9IHBvaW50LnkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlw
aHM7ICsraSkgewotICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9m
ZnNldCwgeU9mZnNldCB9OwotICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0
aCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNl
KHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCi0gICAgICAgIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSksIHBvaW50LAotICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRf
dD4oZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLAotICAgICAgICBmb250LnN5bnRo
ZXRpY0JvbGRPZmZzZXQoKSwgV1RGTW92ZShjYWlyb0dseXBocyksIHhPZmZzZXQsIHN0YXRlLnRl
eHREcmF3aW5nTW9kZSwKLSAgICAgICAgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFk
b3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLCBmb250U21vb3RoaW5nKSk7Ci19Ci0KLXZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFn
ZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgc3RydWN0IERyYXdOYXRpdmVJbWFnZSBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBGbG9hdFJlY3Qs
IEZsb2F0UmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMsIGZsb2F0LCBDYWlybzo6U2hhZG93U3Rh
dGU+IHsKLSAgICAgICAgdmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCkgPSBkZWZhdWx0OwotCi0g
ICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92
ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZShj
b250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8
Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd05hdGl2ZUltYWdlPD5cbiI7Ci0gICAgICAgIH0KLSAg
ICB9OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKLSAgICBVTlVTRURfUEFSQU0oaW1hZ2VT
aXplKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RHJhd05hdGl2ZUltYWdlPihuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCksIGRl
c3RSZWN0LCBzcmNSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhvcHRpb25zLCBzdGF0ZS5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgc3RydWN0IERyYXdQ
YXR0ZXJuIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4sIEludFNpemUsIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFu
c2Zvcm0sIEZsb2F0UG9pbnQsIEltYWdlUGFpbnRpbmdPcHRpb25zPiB7Ci0gICAgICAgIHZpcnR1
YWwgfkRyYXdQYXR0ZXJuKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpkcmF3UGF0dGVybihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8
NT4oKSwgYXJnPDY+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwg
IkRyYXdQYXR0ZXJuPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgVU5VU0VEX1BBUkFN
KHNwYWNpbmcpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdQYXR0ZXJuPihuYXRpdmVJ
bWFnZS5wbGF0Zm9ybUltYWdlKCksIG5hdGl2ZUltYWdlLnNpemUoKSwgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucykpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFN0cm9rZVBhdGg+KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25l
c3MpCkBAIC01OTgsOCArNzE3LDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAgICAgICAg
fQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmls
bENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0
LCBib3JkZXJUaGlja25lc3MsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xv
cigpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCkBAIC02MjEsNTAg
Kzc0MCw4IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAgaWYgKHN0cm9rZVN0eWxlKCkg
PT0gTm9TdHJva2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2lu
dDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIHN0cnVjdCBEcmF3TGluZXNG
b3JUZXh0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2lu
dCwgZmxvYXQsIERhc2hBcnJheSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKLSAgICAgICAgdmlydHVh
bCB+RHJhd0xpbmVzRm9yVGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBh
cmc8NT4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xp
bmVzRm9yVGV4dDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmICh3aWR0aHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRo
aWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tl
Q29sb3IpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgc3R5bGUpCi17Ci0gICAgc3RydWN0IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86
OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFy
ZzwwPigpLCBhcmc8MT4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8
PCAiRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3Qs
IHN0eWxlKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9y
KCksIHN0cm9rZVRoaWNrbmVzcygpLCBzaG91bGRBbnRpYWxpYXMoKSkpOwogfQogCiB2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
QEAgLTY4MywxMSArNzYwLDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0Vs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3
RWxsaXBzZT4ocmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUu
c3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIGZpbGxD
b2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSkp
OwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
IHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogI2lmIFBM
QVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1
cygqdGhpcywgcGF0aCwgY29sb3IpOwpAQCAtNzA3LDEyICs3ODQsMTIgQEAgdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdp
ZHRoLCBmbG9hdAogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0ZvY3VzUmluZz4ocGF0aCwgd2lkdGgsIGNv
bG9yKSk7CiAjZW5kaWYKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKIH0KIAotdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRh
OjpwYWludEZvY3VzKCp0aGlzLCByZWN0cywgY29sb3IpOwpAQCAtNzMyLDM2OCArODA5LDE0NiBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdAogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0ZvY3VzUmluZz4o
cmVjdHMsIHdpZHRoLCBjb2xvcikpOwogI2VuZGlmCi0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7
Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2ZSgpCi17Ci0gICAgc3RydWN0
IFNhdmUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKLSAgICAg
ICAgdmlydHVhbCB+U2F2ZSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5zYXZlKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2F2ZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8U2F2ZT4oKSk7Ci0KLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVTdGFjay5sYXN0
KCkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJlc3RvcmUoKQordm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc3RydWN0IFJlc3Rv
cmUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKLSAgICAgICAg
dmlydHVhbCB+UmVzdG9yZSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5yZXN0b3JlKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiUmVzdG9yZTw+XG4iOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIGlmICghc3RhY2tTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwotCi0gICAgaWYgKG1fc3RhdGVTdGFjay5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJlc3RvcmU+
KCkpOwotCi0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICBpZiAobV9zdGF0ZVN0
YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGF0ZVN0YWNrLmNsZWFyKCk7CisgICAgLy8gRklY
TUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZl
cihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgc3RydWN0IFRyYW5zbGF0ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPGZsb2F0LCBmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5UcmFuc2xhdGUoKSA9IGRl
ZmF1bHQ7CisgICAgc3RydWN0IERyYXdOYXRpdmVJbWFnZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBGbG9hdFJlY3QsIEZs
b2F0UmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMsIGZsb2F0LCBDYWlybzo6U2hhZG93U3RhdGU+
IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCkgPSBkZWZhdWx0OwogCiAgICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjp0cmFuc2xhdGUoY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICBDYWlybzo6
ZHJhd1BsYXRmb3JtSW1hZ2UoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdl
dCgpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQog
ICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlRyYW5zbGF0ZTw+XG4iOwor
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TmF0aXZlSW1hZ2U8PlxuIjsKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxUcmFuc2xhdGU+KHgsIHkp
KTsKLQotICAgIHsKLSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwot
ICAgICAgICBzdGF0ZS5jdG0udHJhbnNsYXRlKHgsIHkpOwotCi0gICAgICAgIEFmZmluZVRyYW5z
Zm9ybSB0OwotICAgICAgICB0LnRyYW5zbGF0ZSgteCwgLXkpOwotICAgICAgICBzdGF0ZS5jdG1J
bnZlcnNlID0gdCAqIHN0YXRlLmN0bUludmVyc2U7Ci0gICAgfQorICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUltYWdlPihuYXRpdmVJ
bWFnZS5wbGF0Zm9ybUltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBJbWFnZVBhaW50aW5nT3B0
aW9ucyhvcHRpb25zLCBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpLCBhbHBoYSgpLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
c3RydWN0IFJvdGF0ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZs
b2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgflJvdGF0ZSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2
b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6cm90YXRlKGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8
PCAiUm90YXRlPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8Um90YXRlPihhbmdsZUluUmFkaWFucykpOwotCi0gICAgewotICAgICAgICBhdXRvJiBz
dGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmN0bS5yb3RhdGUoYW5n
bGVJblJhZGlhbnMpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0OwotICAgICAgICB0LnJv
dGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgICAgIHN0YXRlLmN0bUludmVyc2UgPSB0ICogc3Rh
dGUuY3RtSW52ZXJzZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIHN0cnVjdCBTY2FsZSBmaW5hbCA6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0U2l6ZT4gewotICAgICAgICB2
aXJ0dWFsIH5TY2FsZSgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd1BhdHRlcm4gZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiwgSW50U2l6ZSwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEFmZmluZVRyYW5zZm9ybSwgRmxvYXRQ
b2ludCwgSW1hZ2VQYWludGluZ09wdGlvbnM+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd1BhdHRl
cm4oKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86
OnNjYWxlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigp
LmdldCgpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCks
IGFyZzw2PigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTY2Fs
ZTw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3UGF0dGVybjw+XG4iOwog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNjYWxlPihzaXpl
KSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsK
LSAgICAgICAgc3RhdGUuY3RtLnNjYWxlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0K
LSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHQ7Ci0gICAgICAgIHQuc2NhbGUoMSAvIHNpemUud2lk
dGgoKSwgMSAvIHNpemUuaGVpZ2h0KCkpOwotICAgICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gdCAq
IHN0YXRlLmN0bUludmVyc2U7Ci0gICAgfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1BhdHRlcm4+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1h
Z2UoKSwgbmF0aXZlSW1hZ2Uuc2l6ZSgpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBvcHRpb25zKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQorI2lmIEVOQUJM
RShWSURFTykKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0g
ICAgc3RydWN0IENvbmNhdENUTSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEFmZmluZVRyYW5zZm9ybT4gewotICAgICAgICB2aXJ0dWFsIH5Db25jYXRDVE0oKSA9IGRl
ZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNvbmNhdENU
TShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAg
ICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNvbmNhdENUTTw+XG4iOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgaWYgKCFp
bnZlcnNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDb25j
YXRDVE0+KHRyYW5zZm9ybSkpOwotCi0gICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFz
dCgpOwotICAgIHN0YXRlLmN0bSAqPSB0cmFuc2Zvcm07Ci0gICAgc3RhdGUuY3RtSW52ZXJzZSA9
IGludmVyc2UudmFsdWUoKSAqIHN0YXRlLmN0bUludmVyc2U7CisgICAgLy8gRklYTUU6IE5vdCBp
bXBsZW1lbnRlZC4KKyAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5
ZXIsIGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRpZgogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMs
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7Ci0gICAgc3RydWN0IFNldENUTSBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4gewotICAgICAgICB2
aXJ0dWFsIH5TZXRDVE0oKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IERyYXdHbHlwaHMgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDYWlybzo6RmlsbFNvdXJjZSwgQ2Fp
cm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlLCBGbG9hdFBvaW50LCBSZWZQdHI8
Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4sIGZsb2F0LCBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4sIGZsb2F0
LCBUZXh0RHJhd2luZ01vZGVGbGFncywgZmxvYXQsIEZsb2F0U2l6ZSwgQ29sb3IsIEZvbnRTbW9v
dGhpbmdNb2RlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7CiAK
ICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0oY29u
dGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpk
cmF3R2x5cGhzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCks
IGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCkuZ2V0KCksCisgICAgICAgICAgICAgICAgYXJn
PDU+KCksIGFyZzw2PigpLCBhcmc8Nz4oKSwgYXJnPDg+KCksIGFyZzw5PigpLCBhcmc8MTA+KCks
IGFyZzwxMT4oKSwgYXJnPDEyPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJTZXRDVE08PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0ds
eXBoczw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8gaW52ZXJzZSA9IHRyYW5z
Zm9ybS5pbnZlcnNlKCk7Ci0gICAgaWYgKCFpbnZlcnNlKQorICAgIGlmICghZm9udC5wbGF0Zm9y
bURhdGEoKS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPFNldENUTT4odHJhbnNmb3JtKSk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFj
ay5sYXN0KCk7Ci0gICAgc3RhdGUuY3RtID0gdHJhbnNmb3JtOwotICAgIHN0YXRlLmN0bUludmVy
c2UgPSBpbnZlcnNlLnZhbHVlKCk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCkuY3RtOwotfQotCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0
eSkKLXsKLSAgICBzdHJ1Y3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAg
ICAgICAgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJCZWdpblRyYW5zcGFyZW5jeUxheWVyPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotCi0g
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4ob3BhY2l0eSkp
OwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KCkKLXsKLSAgICBzdHJ1Y3QgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKLSAgICAgICAgdmlydHVhbCB+RW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3Bl
cmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAg
Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
LSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJFbmRUcmFuc3BhcmVuY3lM
YXllcjw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEVuZFRyYW5z
cGFyZW5jeUxheWVyPigpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgQ2xpcCBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4gewotICAgICAgICB2aXJ0dWFs
IH5DbGlwKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENh
aXJvOjpjbGlwKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcDw+XG4iOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXA+KHJlY3QpKTsKLQorICAgIGF1
dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9H
bHlwaHMobnVtR2x5cGhzKTsKICAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0
YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGUuY2xpcEJvdW5kcy5pbnRlcnNlY3Qoc3RhdGUuY3Rt
Lm1hcFJlY3QocmVjdCkpOwotICAgIH0KLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgQ2xpcE91dCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4gewotICAg
ICAgICB2aXJ0dWFsIH5DbGlwT3V0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91
dDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENs
aXBPdXQ+KHJlY3QpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0
KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgc3RydWN0IENsaXBPdXQgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoPiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBP
dXQoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86
OmNsaXBPdXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAg
YXV0byB5T2Zmc2V0ID0gcG9pbnQueSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bUdseXBoczsgKytpKSB7CisgICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhz
W2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH07CisgICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2Vz
W2ldLndpZHRoKCk7CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkNsaXBPdXQ8PlxuIjsKLSAgICAgICAgfQotICAgIH07CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+KHBhdGgpKTsKKyAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJh
d0dseXBocz4oQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwKKyAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCisgICAgICAg
IFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZv
bnQoKSksCisgICAgICAgIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBXVEZNb3ZlKGNhaXJv
R2x5cGhzKSwgeE9mZnNldCwgdGV4dERyYXdpbmdNb2RlKCksCisgICAgICAgIHN0cm9rZVRoaWNr
bmVzcygpLCBzaGFkb3dPZmZzZXQoKSwgc2hhZG93Q29sb3IoKSwgZm9udFNtb290aGluZykpOwog
fQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGlu
ZXMsIFN0cm9rZVN0eWxlKQogewotICAgIHN0cnVjdCBDbGlwUGF0aCBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIFdpbmRSdWxlPiB7Ci0gICAgICAgIHZpcnR1
YWwgfkNsaXBQYXRoKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQs
IERhc2hBcnJheSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0xp
bmVzRm9yVGV4dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdP
cGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAg
ICBDYWlybzo6Y2xpcFBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBh
cmc8MT4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCks
IGFyZzw0PigpLCBhcmc8NT4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVu
dCA8PCAiQ2xpcFBhdGg8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xp
bmVzRm9yVGV4dDw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPENsaXBQYXRoPihwYXRoLCBjbGlwUnVsZSkpOwotCi0gICAgewotICAgICAgICBhdXRv
JiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmNsaXBCb3VuZHMu
aW50ZXJzZWN0KHN0YXRlLmN0bS5tYXBSZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKSk7Ci0g
ICAgfQotfQorICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLUlu
dFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAg
YXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KHN0YXRlLmN0bUludmVyc2UubWFwUmVjdChzdGF0ZS5jbGlwQm91bmRzKSk7CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNG
b3JUZXh0Pihwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxp
bmVzLCBzdHJva2VDb2xvcigpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQogewotICAgIHN0cnVjdCBDbGlwVG9JbWFnZUJ1ZmZlciBmaW5hbDogUGFpbnRpbmdPcGVy
YXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdD4g
ewotICAgICAgICB2aXJ0dWFsIH5DbGlwVG9JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKKyAgICBz
dHJ1Y3QgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHsKKyAg
ICAgICAgdmlydHVhbCB+RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKIAog
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIo
Y29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSk7Cisg
ICAgICAgICAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb250ZXh0Rm9yUmVw
bGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwVG9JbWFnZUJ1ZmZlcjw+XG4iOworICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPD5cbiI7CiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkpCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBUb0ltYWdlQnVmZmVy
PihuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCkpOwotfQotCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCi17Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyPihyZWN0LCBzdHlsZSkpOwogfQogCiBGbG9hdFJlY3QgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQpAQCAtMTEwNiwxMiArOTYxLDQgQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50
aW5nT3BlcmF0aW9uPiYmIGNvbW1hbmQKICAgICBtX2NvbW1hbmRMaXN0LmFwcGVuZChXVEZNb3Zl
KGNvbW1hbmQpKTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24pCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4K
LSAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0
aW9uKTsKLX0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWly
b09wZXJhdGlvblJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKaW5kZXggODNjNmQy
N2Q2ZWEzNmM3OWJlYmQ3ODI1Zjk5YjdjNDM5MDhlZTU0Yi4uYWY0NzhmYzQzN2U4YjRlZTk3YTdj
MDFiNzdiYzIyYTAzNTQ0Nzk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAx
OCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNzggKzQy
LDU4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICB2
b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRl
OworICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRl
OworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbmRUcmFuc3Bh
cmVuY3lMYXllcigpIG92ZXJyaWRlOworCisgICAgdm9pZCBjbGlwKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0
aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdl
YkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNv
cmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIHNldExpbmVDYXAoV2ViQ29yZTo6TGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzZXRMaW5lRGFzaChjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihXZWJDb3JlOjpMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFyUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRl
OwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6
R3JhZGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0
b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJl
Y3RJbXBsKGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpD
b2xvciYpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2b2lkIGZpbGxS
b3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25z
dCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CisKICAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VQ
YXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlw
c2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxsUGF0
aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXdHbHlwaHMo
Y29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBj
b25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZs
b2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdl
QnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6TmF0aXZl
SW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50
aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6TmF0
aXZlSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW1h
Z2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VQYXRoKGNv
bnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwg
Ym9vbCwgV2ViQ29yZTo6U3Ryb2tlU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CisKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92
ZXJyaWRlOwogCi0gICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXN0b3JlKCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNjYWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0Q1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAg
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBnZXRDVE0oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6
V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VC
dWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRy
YXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJh
d05hdGl2ZUltYWdlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdQYXR0ZXJuKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7
CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6
Ok1lZGlhUGxheWVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3Zl
cnJpZGU7CiAjZW5kaWYKIAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25z
dCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jiwg
V2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlk
ZTsKIAogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2Rl
KSBvdmVycmlkZTsKIAogICAgIHZvaWQgYXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09w
ZXJhdGlvbj4mJik7CiAgICAgUGFpbnRpbmdPcGVyYXRpb25zJiBtX2NvbW1hbmRMaXN0OwotCi0g
ICAgc3RydWN0IFN0YXRlIHsKLSAgICAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bTsK
LSAgICAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bUludmVyc2U7Ci0gICAgICAgIFdl
YkNvcmU6OkZsb2F0UmVjdCBjbGlwQm91bmRzOwotICAgIH07Ci0gICAgVmVjdG9yPFN0YXRlLCAz
Mj4gbV9zdGF0ZVN0YWNrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRl
cldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBo
c1JlY29yZGVyV2luLmNwcAppbmRleCA1ZDY2ZWI3MmFkMTNjMjRkYWMwOTVhOTQ1ZjYxNGE2ZjU1
MjIyNDkyLi4wN2MwMzM5ZjU4YmYzMmM3ZDVmOGY4MTdkYmRkM2ViN2YxZWU3MzY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29y
ZGVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJh
d0dseXBoc1JlY29yZGVyV2luLmNwcApAQCAtMjksMTcgKzI5LDE4IEBACiAjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURy
YXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgb3du
ZXIsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQotICAgIDog
bV9vd25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdy
YXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVjdERyYXdHbHlwaHMs
IERlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25Db250ZXh0KGRlc3Rp
bmF0aW9uQ29udGV4dCkKIHsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUp
CiB7Ci0gICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgbV9zbW9vdGhpbmdNb2RlKTsKKyAgICBtX2Rl
c3RpbmF0aW9uQ29udGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgbV9zbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENHV2luLmNwcAppbmRleCBjMTllNzQxNTU3YzMwOGM5NDFlNGVmNzE1ZTNk
YjQ2NTk0ZDE4NWI2Li4yY2Q3ODY1ZWNhODI5ZWI0NTc4MGU5ZmIwZTcyNDdhMzcxMmJjYzM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2lu
LmNwcApAQCAtMTc2LDI1ICsxNzYsMjIgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwKICAgICBD
R0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkpOwogICAg
IEZvbnRDYXNjYWRlOjpzZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUoY2dDb250ZXh0LCBm
b250LnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9udCgpLCBmYWxzZSwgZm9udC5wbGF0Zm9ybURh
dGEoKS51c2VHREkoKSk7CiAKLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0
IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhpY3NDb250ZXh0
LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAgICBh
dXRvIGRyb3BTaGFkb3cgPSBncmFwaGljc0NvbnRleHQuZHJvcFNoYWRvdygpOwogCi0gICAgYm9v
bCBoYXNTaW1wbGVTaGFkb3cgPSBncmFwaGljc0NvbnRleHQudGV4dERyYXdpbmdNb2RlKCkgPT0g
VGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hhZG93
Qmx1ciAmJiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGdy
YXBoaWNzQ29udGV4dC5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgp
KTsKKyAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2lu
Z01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgZHJvcFNoYWRvdy5jb2xvci5pc1Zh
bGlkKCkgJiYgIWRyb3BTaGFkb3cuYmx1clJhZGl1cyAmJiAoIWdyYXBoaWNzQ29udGV4dC5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGdyYXBoaWNzQ29udGV4dC5nZXRDVE0oKS5pc0lkZW50
aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7
CiAgICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJl
bHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2lu
Zy4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9y
IGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Ig
c2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
ZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9y
ID0gZHJvcFNoYWRvdy5jb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3Iu
YWxwaGFBc0Zsb2F0KCkpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKHNo
YWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsg
c2hhZG93T2Zmc2V0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQu
eCgpICsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93cyBh
cmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29v
cmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hh
ZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3ND
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOworICAgICAgICBmbG9h
dCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIGRyb3BTaGFkb3cub2Zmc2V0LmhlaWdodCgpICog
KGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKICAg
ICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgc2hhZG93VGV4dFgsIHNo
YWRvd1RleHRZKTsKICAgICAgICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjZ0Nv
bnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocyk7CiAgICAgICAgIGlmIChmb250LnN5
bnRoZXRpY0JvbGRPZmZzZXQoKSkgewotICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0
aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCkgKyBmb250LnN5
bnRoZXRpY0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsK
KyAgICAgICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50Lngo
KSArIGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCkgKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQo
KSwgcG9pbnQueSgpICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAg
Q0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjZ0NvbnRleHQsIGdseXBocywgYWR2YW5j
ZXMsIG51bUdseXBocyk7CiAgICAgICAgIH0KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZp
bGxDb2xvcihmaWxsQ29sb3IpOwpAQCAtMjA4LDcgKzIwNSw3IEBAIHZvaWQgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQm
IGZvbnQsCiAgICAgfQogCiAgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykKLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9y
KTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAK
ICAgICBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwgb2xkRm9u
dFNtb290aGluZ1N0eWxlKTsKICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNnQ29udGV4dCwg
c2F2ZWRNYXRyaXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9N
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAppbmRleCAzY2Y3NDYwYzgwZTNiZTFkNWJhM2Yw
Y2VkN2MxOWIyNWRmMjlhYmYyLi43ODVlOTRiZWNmMDdjZDRhODRjOWMzNGQ5Y2VjYzgzODU3ZTA2
OTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZVZpZGVvU291cmNlLmNwcApAQCAtMjkyLDEyICsyOTIsMTIgQEAgdm9pZCBNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6ZHJhd0JveGVzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAg
ICBGbG9hdFJlY3QgZnJhbWVSZWN0KDIsIDIsIHNpemUud2lkdGgoKSAtIDMsIHNpemUuaGVpZ2h0
KCkgLSAzKTsKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSk7CiAgICAg
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMyk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCht
X2Rhc2hXaWR0aHMsIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBtX2Rhc2hXaWR0aHMs
IDAgfSk7CiAgICAgbV9wYXRoLmFkZFJlY3QoZnJhbWVSZWN0KTsKICAgICBtX3BhdGguY2xvc2VT
dWJwYXRoKCk7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKG1fcGF0aCk7CiAKLSAgICBjb250ZXh0
LnNldExpbmVEYXNoKERhc2hBcnJheSgpLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
eyB9LCAwIH0pOwogICAgIG1fcGF0aC5jbGVhcigpOwogICAgIG1fcGF0aC5tb3ZlVG8oRmxvYXRQ
b2ludCgwLCBib3hUb3AgKyBib3hTaXplKSk7CiAgICAgbV9wYXRoLmFkZExpbmVUbyhGbG9hdFBv
aW50KHNpemUud2lkdGgoKSwgYm94VG9wICsgYm94U2l6ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IDFiMTgyYTFk
MzZiN2NmYWFhMGIxNjlkMGQ4Yzg1NDM1ZjQzYjc2N2QuLmU4MGYyZWU4OTE5MzkxNDQxOGU4Nzhi
ZjBhNGEyODQwZWU2ODlkMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
b250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgYm9vbCBDb250ZW50
ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBm
cmFtZVZpZXcpCiAgICAgZnJhbWVWaWV3LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6
RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJl
Q29udGVudHModHJ1ZSk7CiAKLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNoZWNrZXJDb250ZXh0
KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50KTsKKyAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNoZWNrZXJDb250ZXh0
KGZyYW1lVmlldy5yZW5kZXJWaWV3KCktPmRvY3VtZW50UmVjdCgpLCBOdWxsR3JhcGhpY3NDb250
ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7
CiAgICAgZnJhbWVWaWV3LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmll
dygpLT5kb2N1bWVudFJlY3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29u
dGVudHMob2xkRW50aXJlQ29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
ZWdhY3lFbGxpcHNpc0JveC5jcHAKaW5kZXggYzlhYjIxNzYxNDFmYTdhMzM5YTIwOTdiM2FiZjk3
NjUwNzg3ZTRmMS4uNGJmZjhkMDA4MzkyNTE0Y2JlNjJjYTk1ZDRlNzQzZmMxOTdmMDE5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCkBAIC01
NSw3ICs1NSw3IEBAIHZvaWQgTGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgYm9vbCBzZXRTaGFkb3cg
PSBmYWxzZTsKICAgICBpZiAobGluZVN0eWxlLnRleHRTaGFkb3coKSkgewogICAgICAgICBDb2xv
ciBzaGFkb3dDb2xvciA9IGxpbmVTdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihsaW5l
U3R5bGUudGV4dFNoYWRvdygpLT5jb2xvcigpKTsKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3co
TGF5b3V0U2l6ZShsaW5lU3R5bGUudGV4dFNoYWRvdygpLT54KCkudmFsdWUoKSwgbGluZVN0eWxl
LnRleHRTaGFkb3coKS0+eSgpLnZhbHVlKCkpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT5yYWRp
dXMoKS52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRv
dyh7IExheW91dFNpemUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgpLnZhbHVlKCksIGxpbmVT
dHlsZS50ZXh0U2hhZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+
cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiAgICAgICAgIHNldFNoYWRvdyA9IHRy
dWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAppbmRleCAyNGM4MmM5ZDZiZDQzZjc0YmEwNWFiNWFjNzY3OTNkNzVkMTVl
NTc3Li44ZDk3ZDI1NzFlMjQ1M2RmMTkyOGJkZTZjNzdjNzYzMTVmYmM4ODJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTcw
NSw3ICs3MDUsNyBAQCBzdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdAogICAgICAgICBib3hTaGFkb3cg
PSBib3hTaGFkb3ctPm5leHQoKTsKIAogICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoYm94U2hh
ZG93LT54KCkudmFsdWUoKSwgYm94U2hhZG93LT55KCkudmFsdWUoKSk7Ci0gICAgY29udGV4dC5z
ZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHN0eWxl
LmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRv
dy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRv
d1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNoYWRv
d09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzdHlsZS5jb2xvckJ5QXBwbHlp
bmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94
U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpE
ZWZhdWx0IH0pOwogfQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6Y2hvb3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJ
bWFnZSYgaW1hZ2UsIGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpA
QCAtMjA4Nyw3ICsyMDg3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNp
ZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgYXV0byBsaW5lRGFzaCA9IERhc2hBcnJheTo6ZnJvbShkYXNoTGVu
Z3RoLCBnYXBMZW5ndGgpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNo
KFdURk1vdmUobGluZURhc2gpLCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXRMaW5lRGFzaCh7IFdURk1vdmUobGluZURhc2gpLCBkYXNoTGVuZ3RoIH0pOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBw
YXRoIGNhdXNlcyBpc3N1ZXMgd2l0aCB0aWdodCBjb3JuZXJzOgpAQCAtMjQ1Niw3ICsyNDU2LDcg
QEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIEZsb2F0UG9pbnQgc25hcHBl
ZFNoYWRvd09yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRUb0RldmljZVBpeGVsKHNoYWRvd1JlY3RP
cmlnaW4ueCgpLCBkZXZpY2VTY2FsZUZhY3RvciksIHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dS
ZWN0T3JpZ2luLnkoKSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICAgICAgICAgIEZsb2F0U2l6
ZSBzbmFwcGVkU2hhZG93T2Zmc2V0ID0gc25hcHBlZFNoYWRvd09yaWdpbiAtIHBpeGVsU25hcHBl
ZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFk
b3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRv
dyh7IHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRv
dy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRv
d1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAKICAgICAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRp
dXMpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5u
ZWNlc3NhcnkgdG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAg
LTI1NTgsNyArMjU1OCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hh
ZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBz
aGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKICAgICAgICAgICAgIGF1dG8gc25hcHBlZFNo
YWRvd09mZnNldCA9IHJvdW5kU2l6ZVRvRGV2aWNlUGl4ZWxzKHNoYWRvd09mZnNldCwgZGV2aWNl
U2NhbGVGYWN0b3IpOwotICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRv
d09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNo
YWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVm
YXVsdCk7CisgICAgICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzbmFwcGVkU2hhZG93
T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hh
ZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZh
dWx0IH0pOwogICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShwaXhl
bFNuYXBwZWRPdXRlclJlY3QsIHBpeGVsU25hcHBlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5k
ZXggODUwYmRlNDhlNDkyOGU4NmRjMTc2YjYyMzIxZmVlZDliNjg2YzNjZC4uOGNmOTYxZTBiYzIz
NjRlOTYyY2RhODgxZjg1OWU0ZjMxYTNjOTgzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCkBAIC0yMjUzLDE0ICsyMjUzLDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
TGF5ZXJQCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgYm9vbCB1c2VzQ29t
cG9zaXRlT3BlcmF0aW9uID0gaGFzQmxlbmRNb2RlKCkgJiYgIShyZW5kZXJlcigpLmlzTGVnYWN5
U1ZHUm9vdCgpICYmIHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1JlbmRlclZpZXdMYXllcigpKTsK
ICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVPcGVyYXRpb24pCi0gICAgICAgICAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVu
ZE1vZGUoKSk7CisgICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0
LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUoKSB9KTsKICNlbmRpZgogCiAgICAgICAg
IGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihyZW5kZXJlcigpLm9wYWNpdHkoKSk7CiAK
ICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZU9w
ZXJhdGlvbikKLSAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnRl
eHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCks
IEJsZW5kTW9kZTo6Tm9ybWFsIH0pOwogI2VuZGlmCiAKICNpZmRlZiBSRVZFQUxfVFJBTlNQQVJF
TkNZX0xBWUVSUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAppbmRleCA1Zjk4YjkxMjRhMzQ5YWM3NTU3OWY3MTEzNWVlMGYzOGFiYjRmMTJkLi4z
ZTJlNmJmMWRlNWQ1NGViMzhkOTI3YTUxZjA3Yzg5MTBhZTZjMWJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMTgzMSw3ICsxODMx
LDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKCkKICAgICB9
OwogCiAgICAgYXV0byB1cGRhdGVFdmVudFJlZ2lvbkZvckxheWVyID0gWyZdKEdyYXBoaWNzTGF5
ZXImIGdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBudWxsQ29u
dGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUp
OworICAgICAgICBhdXRvIGRpcnR5UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KGdyYXBoaWNz
TGF5ZXIub2Zmc2V0RnJvbVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNpemUoKSk7CisgICAg
CisgICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQoZGlydHlSZWN0LCBOdWxs
R3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOwogICAgICAg
ICBFdmVudFJlZ2lvbiBldmVudFJlZ2lvbjsKICNpZiBFTkFCTEUoRURJVEFCTEVfUkVHSU9OKQog
ICAgICAgICBpZiAocmVuZGVyZXIoKS5wYWdlKCkuc2hvdWxkQnVpbGRFZGl0YWJsZVJlZ2lvbigp
KQpAQCAtMTg1Myw4ICsxODU1LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2
ZW50UmVnaW9uKCkKICAgICAgICAgICAgIGV2ZW50UmVnaW9uQ29udGV4dC51bml0ZShlbmNsb3Np
bmdJbnRSZWN0KEZsb2F0UmVjdCgtbGF5ZXJPZmZzZXQsIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKSks
IHJlbmRlcmVyKCkuc3R5bGUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGRpcnR5UmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoZ3JhcGhpY3NMYXllci5v
ZmZzZXRGcm9tUmVuZGVyZXIoKSksIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKSk7Ci0gICAgICAgIHBh
aW50SW50b0xheWVyKCZncmFwaGljc0xheWVyLCBudWxsQ29udGV4dCwgZGlydHlSZWN0LCB7IH0s
ICZldmVudFJlZ2lvbkNvbnRleHQpOworICAgICAgICBwYWludEludG9MYXllcigmZ3JhcGhpY3NM
YXllciwgbnVsbENvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoZGlydHlSZWN0KSwgeyB9LCAmZXZl
bnRSZWdpb25Db250ZXh0KTsKIAogICAgICAgICBldmVudFJlZ2lvbi50cmFuc2xhdGUodG9JbnRT
aXplKGxheWVyT2Zmc2V0KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbQppbmRleCAzMGNkMzQzZWE3ZGY5MTY4Y2MzY2RlNDdkYmVmOGY3NTllODhmNzMxLi4y
NTZmYzc0OTU2ZGEzMzg2YTU0ZDM1MmRlMTFiNmZmNzM2NjlhMWY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCkBAIC02MDUsNyArNjA1LDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGRJbm5lclNoYWRvdyhjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QKICAgICBjb25zdCBGbG9hdFNpemUgaW5uZXJTaGFkb3dPZmZzZXQg
eyAwLCA1IH07CiAgICAgY29uc3RleHByIGF1dG8gaW5uZXJTaGFkb3dCbHVyID0gMTAuMGY7CiAg
ICAgYXV0byBpbm5lclNoYWRvd0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIDAu
MDRmIH07Ci0gICAgY29udGV4dC5zZXRTaGFkb3coaW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hh
ZG93Qmx1ciwgaW5uZXJTaGFkb3dDb2xvcik7CisgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsg
aW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgaW5uZXJTaGFkb3dDb2xvciB9KTsK
ICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCBpbm5l
clNoYWRvd1BhdGg7CkBAIC0yMDgwLDcgKzIwODAsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpw
YWludFN5c3RlbVByZXZpZXdCYWRnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bgogICAgIC8vIFVzZSB0aGUgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9uLCBiZWNhdXNlIGl0IGNh
bGN1bGF0ZXMgdGhlIGJsdXIgcmFkaXVzIGluIGNvbnRleHQgc3BhY2UsCiAgICAgLy8gcmF0aGVy
IHRoYW4gc2NyZWVuIHNwYWNlLgogICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0gQ29s
b3I6OmJsYWNrLmNvbG9yV2l0aEFscGhhQnl0ZSgyNik7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNl
dFNoYWRvdyhGbG9hdFNpemUgeyB9LCAxNiwgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yIH0pOwog
CiAgICAgLy8gVGhlIGNpcmNsZSBtdXN0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCB2YWx1ZSBvZiAx
IGZvciB0aGUgc2hhZG93IGNvbG9yIHRvIGFwcGVhci4KICAgICBDR0Zsb2F0IGNpcmNsZUNvbG9y
Q29tcG9uZW50c1s0XSA9IHsgMCwgMCwgMCwgMSB9OwpAQCAtMjI3Myw3ICsyMjczLDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveFJhZGlvSW5uZXJTaGFkb3coY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGMKIAogICAgIGJvb2wgaXNFbXB0eSA9ICFzdGF0ZXMuY29udGFp
bnNBbnkoeyBDb250cm9sU3RhdGVzOjpTdGF0ZXM6OkNoZWNrZWQsIENvbnRyb2xTdGF0ZXM6OlN0
YXRlczo6SW5kZXRlcm1pbmF0ZSB9KTsKICAgICBhdXRvIGZpcnN0U2hhZG93Q29sb3IgPSBEaXNw
bGF5UDM8ZmxvYXQ+IHsgMCwgMCwgMCwgaXNFbXB0eSA/IDAuMDVmIDogMC4xZiB9OwotICAgIGNv
bnRleHQuc2V0U2hhZG93KGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGZpcnN0
U2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IGlubmVyU2hhZG93T2Zm
c2V0LCBpbm5lclNoYWRvd0JsdXIsIGZpcnN0U2hhZG93Q29sb3IgfSk7CiAgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAogICAgIFBhdGggaW5uZXJTaGFkb3dQYXRoOwpA
QCAtMjI5MCw3ICsyMjkwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveFJh
ZGlvSW5uZXJTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGMKICAgICBjb250ZXh0
LmZpbGxQYXRoKGlubmVyU2hhZG93UGF0aCk7CiAKICAgICBjb25zdGV4cHIgYXV0byBzZWNvbmRT
aGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4geyAxLCAxLCAxLCAwLjVmIH07Ci0gICAgY29u
dGV4dC5zZXRTaGFkb3coRmxvYXRTaXplIHsgMCwgMCB9LCAxLCBzZWNvbmRTaGFkb3dDb2xvcik7
CisgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplIHsgMCwgMCB9LCAxLCBzZWNv
bmRTaGFkb3dDb2xvciB9KTsKIAogICAgIGNvbnRleHQuZmlsbFBhdGgoaW5uZXJTaGFkb3dQYXRo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAw
MTBlY2JhZWQ4N2E3M2E0MjBhZmI5N2U4ZTgwZmVhNjM3OWZlZDNlLi4xMGRjOTBlNTdlNWFlMGY0
MjVhMGRhYWEzNjRmODE0ZTQ0OTQ5OTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCkBAIC0yODE2LDcgKzI4MTYsNyBAQCBzdGF0aWMgdm9pZCBwYWludEF0
dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcihjb25zdCBSZW5kZXJBdHRhY2htZW50JiBhdHRhY2ht
ZW50LAogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IocGxhY2Vob2xkZXJCb3JkZXJDb2xvcik7
CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYXR0YWNobWVudFBsYWNlaG9sZGVyQm9y
ZGVyV2lkdGgpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoRGFzaGVkU3Ryb2tlKTsKLSAg
ICBjb250ZXh0LnNldExpbmVEYXNoKHthdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNoTGVu
Z3RofSwgMCk7CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IHsgYXR0YWNobWVudFBsYWNlaG9s
ZGVyQm9yZGVyRGFzaExlbmd0aCB9LCAwIH0pOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChib3Jk
ZXJQYXRoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRE
ZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29y
YXRpb25QYWludGVyLmNwcAppbmRleCA2NzU1NjhhZmY2MTE4ZjAxM2JkMWQ0ZjU1YTZjMzY0ZmE4
YWYzOGU4Li44MzA5YjJmOGQ0YTMxZmEwM2IxYWJmODQzOWRhMGYzZWYxNjI4NDBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcApA
QCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgVGV4dERlY29yYXRpb25QYWludGVyOjpwYWludEJhY2tn
cm91bmREZWNvcmF0aW9ucyhjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjCiAgICAgICAgICAgICBD
b2xvciBzaGFkb3dDb2xvciA9IHNoYWRvdy0+Y29sb3IoKTsKICAgICAgICAgICAgIGlmIChtX3No
YWRvd0NvbG9yRmlsdGVyKQogICAgICAgICAgICAgICAgIG1fc2hhZG93Q29sb3JGaWx0ZXItPnRy
YW5zZm9ybUNvbG9yKHNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIG1fY29udGV4dC5zZXRTaGFk
b3coRmxvYXRTaXplKHNoYWRvd1gsIHNoYWRvd1kgLSBleHRyYU9mZnNldCksIHNoYWRvdy0+cmFk
aXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICAgICAgbV9jb250ZXh0LnNldERy
b3BTaGFkb3coeyBGbG9hdFNpemUoc2hhZG93WCwgc2hhZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hh
ZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsKICAgICAgICAgICAgIHNoYWRv
dyA9IHNoYWRvdy0+bmV4dCgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dFBhaW50ZXIuY3BwCmluZGV4IDg4NWQ4MjZlZTllNzk2ZjRiNWM1YjU4MzNmNzFhMDI4YzQ1
NDFhN2EuLmZlODg2OWMxOWU1ZjhkNDNiN2ZhMTZlNDAxYjRmYmM2ZGNmN2VlZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAtNzQsNyArNzQsNyBAQCBTaGFk
b3dBcHBsaWVyOjpTaGFkb3dBcHBsaWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
U2hhZG93RGF0YSogc2hhZG93LAogICAgIH0KIAogICAgIGlmICghbV9hdm9pZERyYXdpbmdTaGFk
b3cpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVz
LnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsg
c2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiB9CiAK
IGlubGluZSBib29sIFNoYWRvd0FwcGxpZXI6OmlzTGFzdFNoYWRvd0l0ZXJhdGlvbigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRleCA3ZWQ1
MzdjOTI3OTM3NzBmNDQ4OGFlMjlkZjQwNzI3ZDdlYjFhM2E5Li42YzczMGVmMDdlNDhjN2VjZjhj
NDBlMzdlMDAzNDVjZmFiNTZjNjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUGF0aC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgRmxvYXRSZWN0IFJlbmRlclNW
R1BhdGg6OmNhbGN1bGF0ZVVwZGF0ZWRTdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CiBzdGF0aWMg
dm9pZCB1c2VTdHJva2VTdHlsZVRvRmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAg
ICAgaWYgKGF1dG8gZ3JhZGllbnQgPSBjb250ZXh0LnN0cm9rZUdyYWRpZW50KCkpCi0gICAgICAg
IGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KCpncmFkaWVudCwgY29udGV4dC5zdGF0ZSgpLnN0cm9r
ZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVu
dCgqZ3JhZGllbnQsIGNvbnRleHQuc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgZWxzZSBp
ZiAoUGF0dGVybiogcGF0dGVybiA9IGNvbnRleHQuc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBj
b250ZXh0LnNldEZpbGxQYXR0ZXJuKCpwYXR0ZXJuKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCBjYzM4ZWM3
MDMwZTYwY2UxNzU5YjEzMjg3ZGUyNWY3M2Q1NjVjODU4Li5iNjU4NjhkMWJkMzRjOTBkNGJiZmRk
NDc3YWQyYzc0MjgyYTA1NmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKQEAgLTUwMSwxMCArNTAxLDEyIEBAIHZvaWQgU1ZHUmVu
ZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY2FuU2V0TGluZURhc2gpCi0g
ICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgbGVuZ3RoQ29udGV4dC52
YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zmc2V0KCkpICogc2NhbGVGYWN0b3Ip
OworICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IFdURk1vdmUoZGFzaEFycmF5KSwg
bGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zmc2V0KCkp
ICogc2NhbGVGYWN0b3IgfSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRleHQuc2V0
U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIH0KKworICAgIGNvbnRleHQuYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKIH0KIAogdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpzdHlsZUNoYW5nZWQoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3Bw
CmluZGV4IDJmYjhmMzNhODcwZGZjY2ViNjJlMTQ5NjU2YjE0NDM3MjJlYmVhMmQuLmY1NzllNWE3
NWZlOTEwZjZlNWI1OGE5YWVmYjY4MzU4OTYyMjEwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTE1LDEyICsx
MTUsMTIgQEAgdm9pZCBTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250
ZW50KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBQYWkKICAgICAgICAgaWYgKG9wYWNpdHkgPCAx
IHx8IGhhc0JsZW5kTW9kZSB8fCBpc29sYXRlTWFza0ZvckJsZW5kaW5nIHx8IGhhc0lzb2xhdGlv
bikgewogCiAgICAgICAgICAgICBpZiAoaGFzQmxlbmRNb2RlKQotICAgICAgICAgICAgICAgIG1f
cGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGFpbnRJbmZvLT5j
b250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIHN0eWxlLmJsZW5kTW9kZSgpKTsKKyAgICAg
ICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU1vZGUoeyBtX3Bh
aW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5ibGVuZE1vZGUo
KSB9KTsKIAogICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5iZWdpblRyYW5zcGFy
ZW5jeUxheWVyKG9wYWNpdHkpOwogCiAgICAgICAgICAgICBpZiAoaGFzQmxlbmRNb2RlKQotICAg
ICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6
Tm9ybWFsKTsKKyAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBv
c2l0ZU1vZGUoeyBtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBC
bGVuZE1vZGU6Ok5vcm1hbCB9KTsKIAogICAgICAgICAgICAgbV9yZW5kZXJpbmdGbGFncyB8PSBF
bmRPcGFjaXR5TGF5ZXI7CiAgICAgICAgIH0KQEAgLTI3Myw3ICsyNzMsNyBAQCBib29sIFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQoUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1h
Z2VCdWZmZXIpCiAKICAgICAvLyBJbnZhbGlkYXRlIGFuIGV4aXN0aW5nIGJ1ZmZlciBpZiB0aGUg
c2NhbGUgaXMgbm90IGNvcnJlY3QuCiAgICAgaWYgKGltYWdlQnVmZmVyKSB7Ci0gICAgICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTShH
cmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgICAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5nZXRDVE0o
KTsKICAgICAgICAgSW50U2l6ZSBleHBhbmRlZEJvdW5kaW5nQm94ID0gZXhwYW5kZWRJbnRTaXpl
KGJvdW5kaW5nQm94LnNpemUoKSk7CiAgICAgICAgIEludFNpemUgYnVmZmVyU2l6ZShzdGF0aWNf
Y2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC53aWR0aCgpICogdHJhbnNmb3JtLnhT
Y2FsZSgpKSksIHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94LmhlaWdo
dCgpICogdHJhbnNmb3JtLnlTY2FsZSgpKSkpOwogICAgICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBp
bWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwCmluZGV4IDRkZDdmODBlMzc3Nzk4N2RjYjcwYzFhM2M4YTg3Y2Q4YTRmZDZmYjku
LmNkODhhZGYwOGRkYTgwM2JmZDkzZjg5NTc3NDA3Njg2YWM0YzU0NjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApAQCAtMjY5LDE0ICsyNjksMTQgQEAgSW1hZ2VE
cmF3UmVzdWx0IFNWR0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWMKICAgICBBU1NFUlQodmlldyk7CiAKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3Np
dGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9k
ZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9w
ZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4dC5jbGlwKGVuY2xv
c2luZ0ludFJlY3QoZHN0UmVjdCkpOwogCiAgICAgZmxvYXQgYWxwaGEgPSBjb250ZXh0LmFscGhh
KCk7CiAgICAgYm9vbCBjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJlbmN5TGF5ZXIgPSBvcHRp
b25zLmNvbXBvc2l0ZU9wZXJhdG9yKCkgIT0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIg
fHwgb3B0aW9ucy5ibGVuZE1vZGUoKSAhPSBCbGVuZE1vZGU6Ok5vcm1hbCB8fCBhbHBoYSA8IDE7
CiAgICAgaWYgKGNvbXBvc2l0aW5nUmVxdWlyZXNUcmFuc3BhcmVuY3lMYXllcikgewogICAgICAg
ICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoYWxwaGEpOwotICAgICAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgQmxl
bmRNb2RlOjpOb3JtYWwpOworICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBDb21w
b3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAgICAgfQog
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBob25vciBvcHRpb25zLm9yaWVudGF0aW9uKCksIHNp
bmNlIEltYWdlQml0bWFwJ3MgZmxpcFkgaGFuZGxpbmcgcmVsaWVzIG9uIGl0LiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMDAxCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAKaW5kZXggNTQzODE4MmRkZTg3NjNlYmFkMzhmMTkyZGY3OTVhYTA2MGI2NTFiYi4u
OGRhMzkwZjZkYTcwZTM3OTU1MGE1NzJlMDllMDg0MTE4OWMyZGRlYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLmNwcApAQCAtNzQsMzEgKzc0LDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpyZXN0b3JlKCkKICAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpSZXN0b3Jl
KCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlRyYW5zbGF0ZSh4
LCB5KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cm90YXRlKGZsb2F0
IGFuZ2xlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlJvdGF0ZShhbmdsZSkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgc2NhbGUpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2NhbGUoc2NhbGUpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBjdG0pCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2V0Q1RNKGN0
bSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNvbmNhdGVuYXRlQ1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxp
c3Q6OkNvbmNhdGVuYXRlQ1RNKGN0bSkpOwotfQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OnNldElubGluZUZpbGxDb2xvcihEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9y
JiYgaXRlbSkKIHsKICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwpAQCAtMTI4LDQwICsx
MDMsMTUgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRTdGF0ZShEaXNwbGF5
TGlzdDo6U2V0U3RhdGUmJiBpdGVtKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9OwogCi0g
ICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLnN0
cm9rZVBhdHRlcm4uZ2V0KCkpKQorICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0
YXRlKCkuc3Ryb2tlQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuZmlsbFBh
dHRlcm4uZ2V0KCkpKQorICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlKCku
ZmlsbEJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaGFuZGxlSXRl
bShXVEZNb3ZlKGl0ZW0pKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpz
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0
OjpTZXRMaW5lQ2FwKGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpzZXRMaW5lRGFzaChEaXNwbGF5TGlzdDo6U2V0TGluZURhc2gmJiBpdGVtKQotewotICAg
IGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW4obGluZUpvaW4pKTsKLX0KLQotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGhh
bmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQobGltaXQpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci0gICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3coKSk7Ci19Ci0KIHZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6Q2xpcChyZWN0KSk7CkBAIC0zNzEsMTQgKzMyMSw5IEBAIHZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoR3JhZGllbnQoRGlzcGxheUxpc3Q6
OkZpbGxSZWN0V2l0aEdyCiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsKIH0KIAotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxD
b21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsK
KyAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3Ip
KTsKIH0KIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
LmgKaW5kZXggM2JiYWY3NjVkMDVmNDRhYmY0ZDk2MWU3NjZjZTY1NDY5OGVkZTI5NC4uODE4ODk2
NmFmZmE3MDllNmZkMGEzMWJmY2E2YzNlNzE4NTY1YzU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5oCkBAIC01OSwyMCArNTksMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlKCk7CiAg
ICAgdm9pZCByZXN0b3JlKCk7Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7
Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGUpOwotICAgIHZvaWQgc2NhbGUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9pZCBjb25jYXRlbmF0ZUNUTShjb25zdCBXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0mKTsKICAgICB2b2lkIHNldElubGluZUZpbGxDb2xvcihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yJiYpOwogICAgIHZvaWQgc2V0SW5saW5l
U3Ryb2tlQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yJiYp
OwogICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKICAgICB2b2lkIHNldFN0YXRl
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZSYmKTsKLSAgICB2b2lkIHNldExpbmVDYXAo
V2ViQ29yZTo6TGluZUNhcCk7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZURhc2gmJik7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihXZWJDb3JlOjpMaW5l
Sm9pbik7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLSAgICB2b2lkIGNsZWFyU2hh
ZG93KCk7CiAgICAgdm9pZCBjbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZv
aWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXBUb0lt
YWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpOwpAQCAtOTcsOCArODcsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2
b2lkIGZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQmJik7Ci0gICAgdm9pZCBmaWxsQ29tcG9z
aXRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
LCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKLSAgICB2
b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVuZE1vZGUpOworICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpDb2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJik7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCBm
aWxsTGluZShjb25zdCBXZWJDb3JlOjpMaW5lRGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlci5tZXNzYWdlcy5pbgppbmRleCAyODAyZmZlOGY4Mzk3YzBlZDRkZjEyMWEwMTdm
ZTc4MTA4ZmY2YzIwLi40MTRjMzFhMTMyMGMwYjJlNzg2YmM4ZDlmNjU5ODEwMmQ4NzBmNDg5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbgpAQCAtMjUsNDcg
KzI1LDM1IEBACiBtZXNzYWdlcyAtPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIE5vdFJlZkNv
dW50ZWQgU3RyZWFtIHsKICAgICBTYXZlKCkKICAgICBSZXN0b3JlKCkKLSAgICBUcmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgU2NhbGUoV2Vi
Q29yZTo6RmxvYXRTaXplIHNjYWxlKQotICAgIFNldENUTShXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0gY3RtKQotICAgIENvbmNhdGVuYXRlQ1RNKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG0p
CisKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZUZpbGxDb2xvciBpdGVtKQogICAgIFNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvciBpdGVtKQogICAgIFNldFN0cm9rZVRoaWNrbmVz
cyhmbG9hdCB0aGlja25lc3MpCiAgICAgU2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlIGl0ZW0pCi0gICAgU2V0TGluZUNhcChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6TGluZUNh
cCBsaW5lQ2FwKQotICAgIFNldExpbmVEYXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
RGFzaCBpdGVtKQotICAgIFNldExpbmVKb2luKGVudW06dWludDhfdCBXZWJDb3JlOjpMaW5lSm9p
biBsaW5lSm9pbikKLSAgICBTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotICAgIENsZWFyU2hh
ZG93KCkKKyNpZiBVU0UoQ0cpCisgICAgQXBwbHlTdHJva2VQYXR0ZXJuKCkKKyAgICBBcHBseUZp
bGxQYXR0ZXJuKCkKKyNlbmRpZgorICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2Nh
bGVGYWN0b3IpCisKKyAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCisg
ICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQorCiAgICAgQ2xpcChXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdCkKKyAgICBDbGlwUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGVudW06dWludDhfdCBXZWJD
b3JlOjpXaW5kUnVsZSB3aW5kUnVsZSkKICAgICBDbGlwT3V0KFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KQotICAgIENsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBk
ZXN0aW5hdGlvblJlY3QpCiAgICAgQ2xpcE91dFRvUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0g
ICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6V2lu
ZFJ1bGUgd2luZFJ1bGUpCi0gICAgRHJhd0dseXBocyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0dseXBocyBpdGVtKQotICAgIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJl
bmNlIGZpbHRlcikKLSAgICBEcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRl
c3RpbmF0aW9uUmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3Jl
OjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIERyYXdOYXRpdmVJbWFnZShXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpGbG9hdFNpemUgaW1hZ2VTaXplLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNv
cmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlv
bnMgb3B0aW9ucykKLSAgICBEcmF3U3lzdGVtSW1hZ2UoUmVmPFdlYkNvcmU6OlN5c3RlbUltYWdl
PiBzeXN0ZW1JbWFnZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKLSAgICBE
cmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVu
dGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB0
aWxlUmVjdCwgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6Rmxv
YXRQb2ludCBwaGFzZSwgV2ViQ29yZTo6RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJDb3Jl
OjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKLSAgICBFbmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgRHJhd1Jl
Y3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLSAgICBE
cmF3TGluZShXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MSwgV2ViQ29yZTo6RmxvYXRQb2ludCBw
b2ludDIpCi0gICAgRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xp
bmVzRm9yVGV4dCBpdGVtKQotICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKLSAgICBEcmF3RWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBEcmF3
UGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0gICAgRHJhd0ZvY3VzUmluZ1BhdGgoV2ViQ29yZTo6
UGF0aCBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xv
cikKLSAgICBEcmF3Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gcmVj
dHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorICAg
IENsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlv
blJlY3QpCisKKyAgICBDbGVhclJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisKICAgICBG
aWxsUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKICAgICBGaWxsUmVjdFdpdGhDb2xvcihX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCiAgICAgRmlsbFJl
Y3RXaXRoR3JhZGllbnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50
IGl0ZW0pCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBX
ZWJDb3JlOjpDb2xvciBjb2xvciwgZW51bTp1aW50OF90IFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6QmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICBG
aWxsUm91bmRlZFJlY3QoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCByZWN0LCBXZWJDb3JlOjpD
b2xvciBjb2xvciwgZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9kZSBibGVuZE1vZGUpCisg
ICAgRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgcmVjdCwgV2ViQ29y
ZTo6Q29sb3IgY29sb3IpCiAgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoV2ViQ29yZTo6Rmxv
YXRSZWN0IHJlY3QsIFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Qgcm91bmRlZEhvbGVSZWN0LCBX
ZWJDb3JlOjpDb2xvciBjb2xvcikKKworICAgIEZpbGxFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0KQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIEZpbGxMaW5lKHN0cnVj
dCBXZWJDb3JlOjpMaW5lRGF0YSBkYXRhKQogICAgIEZpbGxBcmMoc3RydWN0IFdlYkNvcmU6OkFy
Y0RhdGEgZGF0YSkKQEAgLTczLDExICs2MSwxMCBAQCBtZXNzYWdlcyAtPiBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyIE5vdFJlZkNvdW50ZWQgU3RyZWFtIHsKICAgICBGaWxsQmV6aWVyQ3VydmUo
c3RydWN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSBkYXRhKQogI2VuZGlmCiAgICAgRmlsbFBh
dGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIEZpbGxFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0KQotICAgIENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotICAgIFRyYW5zZm9ybVRvQ29s
b3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKLSAgICBQ
YWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvbikKKwogICAgIFN0cm9rZVJlY3QoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKworICAgIFN0cm9rZUVsbGlw
c2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CiAgICAgU3Ryb2tlTGluZShzdHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBTdHJv
a2VBcmMoc3RydWN0IFdlYkNvcmU6OkFyY0RhdGEgZGF0YSkKQEAgLTg1LDEzICs3MiwzMSBAQCBt
ZXNzYWdlcyAtPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIE5vdFJlZkNvdW50ZWQgU3RyZWFt
IHsKICAgICBTdHJva2VCZXppZXJDdXJ2ZShzdHJ1Y3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRh
IGRhdGEpCiAjZW5kaWYKICAgICBTdHJva2VQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBT
dHJva2VFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotICAgIENsZWFyUmVjdChXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKLSNpZiBVU0UoQ0cpCi0gICAgQXBwbHlTdHJva2VQYXR0ZXJu
KCkKLSAgICBBcHBseUZpbGxQYXR0ZXJuKCkKKworICAgIERyYXdSZWN0KFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisgICAgRHJhd0xpbmUoV2ViQ29yZTo6
RmxvYXRQb2ludCBwb2ludDEsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQyKQorCisgICAgRHJh
d0VsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisgICAgRHJhd1BhdGgoV2ViQ29yZTo6
UGF0aCBwYXRoKQorCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKyAgICBEcmF3
Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorCisgICAgRHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXI+IHNvdXJjZUltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IHNvdXJj
ZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyKQorICAgIERyYXdJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBXZWJDb3JlOjpGbG9h
dFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlv
bnMpCisgICAgRHJhd1N5c3RlbUltYWdlKFJlZjxXZWJDb3JlOjpTeXN0ZW1JbWFnZT4gc3lzdGVt
SW1hZ2UsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QpCisgICAgRHJhd05hdGl2
ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFnZVNpemUsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0
UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBh
aW50aW5nT3B0aW9ucyBvcHRpb25zKQorICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBk
ZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBoYXNlLCBXZWJDb3JlOjpGbG9h
dFNpemUgc3BhY2luZywgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlv
bnMpCisjaWYgRU5BQkxFKFZJREVPKQorICAgIFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpN
ZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3Rp
bmF0aW9uKQogI2VuZGlmCi0gICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZh
Y3RvcikKKworICAgIERyYXdHbHlwaHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMg
aXRlbSkKKyAgICBEcmF3TGluZXNGb3JUZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGlu
ZXNGb3JUZXh0IGl0ZW0pCisgICAgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihXZWJDb3JlOjpG
bG9hdFJlY3QgcmVjdCwgc3RydWN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQorCisgICAgQ29udmVydFRvTHVtaW5hbmNlTWFzaygpCisgICAgVHJhbnNmb3JtVG9Db2xv
clNwYWNlKFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogICAgIEZs
dXNoQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRp
ZmllcikKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3Bw
CmluZGV4IDg1NzdjYmJkZTZkMzkwMWQzNDcwNzYxZWQzMGY3OWQ5OGU4MmI5OGQuLjZjZmJhYmNh
N2JjZmJlZGM1OTU0ODNlOGVlYjFkNWFiMTIwOTY2YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKQEAgLTMyLDM2ICszMiwyMSBAQAogI2luY2x1ZGUg
IlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L01lZGlhUGxheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eShJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYg
cmVuZGVyaW5nQmFja2VuZCwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0
RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBEaXNwbGF5TGlzdDo6UmVj
b3JkZXIoeyB9LCBpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhz
KQorICAgIDogRGlzcGxheUxpc3Q6OlJlY29yZGVyKGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBk
ZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAgICAgLCBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmll
cihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSkKICAgICAsIG1faW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIpCiAgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmQocmVuZGVyaW5n
QmFja2VuZCkKIHsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29uc3Qg
V2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlRyYW5zZm9ybVRvQ29sb3JTcGFj
ZShjb2xvclNwYWNlKSk7Ci19Ci0KIFJlbmRlcmluZ01vZGUgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlciA/IG1faW1hZ2VCdWZmZXItPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQ7CkBAIC03NywzMSArNjIsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkUmVzdG9yZSgpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6UmVzdG9yZSgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlRyYW5zbGF0ZSh4LCB5
KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSb3Rh
dGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6Um90YXRlKGFuZ2xlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRTY2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNjYWxlKHNjYWxlKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0Q1RNKHRyYW5zZm9ybSkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Q29uY2F0ZW5hdGVDVE0odHJhbnNmb3JtKSk7Ci19Ci0KIHZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRJbmxpbmVGaWxsQ29s
b3IoU1JHQkE8dWludDhfdD4gY29sb3IpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6U2V0SW5saW5lRmlsbENvbG9yKERpc3BsYXlMaXN0OjpTZXRJbmxp
bmVGaWxsQ29sb3IgeyBjb2xvciB9KSk7CkBAIC0xMTcsOTIgKzc3LDI2IEBAIHZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQg
dGhpY2tuZXNzKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OlNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
Ci17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3Rh
dGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlIHsgc3RhdGUsIGZsYWdzIH0pKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OlNldExpbmVDYXAobGluZUNhcCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBhcnJheSwgZmxvYXQg
ZGFzaE9mZnNldCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpTZXRMaW5lRGFzaChEaXNwbGF5TGlzdDo6U2V0TGluZURhc2ggeyBhcnJheSwgZGFzaE9m
ZnNldCB9KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRMaW5lSm9pbihsaW5lSm9pbikpOwotfQotCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TWl0ZXJMaW1pdChm
bG9hdCBsaW1pdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpTZXRNaXRlckxpbWl0KGxpbWl0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclNoYWRvdygpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xlYXJTaGFkb3coKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpD
bGlwKHJlY3QpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXQocmVjdCkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwVG9J
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVz
dGluYXRpb25SZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dFRvUGF0aChwYXRoKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpD
bGlwUGF0aChwYXRoLCBydWxlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNl
SW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikK
LXsKLSAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRp
ZmllcjsKLSAgICBpZiAoc291cmNlSW1hZ2UpCi0gICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJ
bWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV1RGTW92
ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZShSZWY8
RmlsdGVyPiB7IGZpbHRlciB9KSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7IHN0YXRlIH0pKTsK
IH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCi17Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNwbGF5
TGlzdDo6RHJhd0dseXBocyB7IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFu
Y2hvciwgbW9kZSB9KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdOYXRpdmVJbWFn
ZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKKyNpZiBV
U0UoQ0cpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlT
dHJva2VQYXR0ZXJuKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpEcmF3TmF0aXZlSW1hZ2UoaW1hZ2VJZGVudGlmaWVyLCBpbWFnZVNpemUsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6QXBwbHlTdHJva2VQYXR0ZXJuKCkpOwogfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdl
JiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseUZpbGxQYXR0ZXJuKCkpOwogfQorI2Vu
ZGlmIC8vIFVTRShDRykKIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZp
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBs
eURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdQYXR0ZXJuKGltYWdlSWRlbnRpZmll
ciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQpAQCAtMjE1LDQ0ICsxMDksMzQgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpFbmRUcmFuc3BhcmVuY3lMYXllcigpKTsKIH0KIAot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1JlY3QocmVjdCwgd2lkdGgpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lKHBvaW50MSwgcG9p
bnQyKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZs
b2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmVz
Rm9yVGV4dChEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IGJsb2NrTG9jYXRpb24sIGxv
Y2FsQW5jaG9yLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzIH0pKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwKHJlY3Qp
KTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwogfQogCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdFbGxpcHNlKHJlY3QpKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0KHJlY3QpKTsKIH0KIAot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
Q2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdQYXRoKHBhdGgpKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0VG9QYXRoKHBhdGgpKTsKIH0K
IAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1Jp
bmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xp
cFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGRlc3RpbmF0aW9uUmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyUmVj
dChyZWN0KSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yNzAsMjMgKzE1NCwyMiBAQCB2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3RXaXRoR3Jh
ZGllbnQoY29uc3QgRmxvYXRSZWN0JgogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0aEdyYWRpZW50KERpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhHcmFkaWVudCB7IHJlY3QsIGdyYWRpZW50IH0pKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBtb2RlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkZpbGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIG1vZGUpKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRlZFJlY3Qo
cm91bmRlZFJlY3QsIGNvbG9yKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkZpbGxSb3VuZGVkUmVjdChyb3VuZGVkUmVjdCwgY29sb3IsIG1vZGUp
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpKTsKIH0KIAotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYgZGF0YSkKIHsKICAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsTGluZShkYXRhKSk7CkBA
IC0zMDYsNyArMTg5LDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEKIHsKICAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsQmV6aWVyQ3VydmUoZGF0YSkp
OwogfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQpAQCAtMzE0LDIzICsxOTYsMTcgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFBhdGgocGF0aCkpOwogfQogCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkZpbGxFbGxpcHNlKHJlY3QpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6UGFpbnRGcmFtZUZvck1lZGlhKHBsYXllci5pZGVudGlmaWVyKCksIGRlc3Rp
bmF0aW9uKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
U3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCB3aWR0aCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VSZWN0KHJlY3QsIHdpZHRo
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tl
RWxsaXBzZShyZWN0KSk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUxpbmUoY29uc3Qg
TGluZURhdGEmIGRhdGEpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6U3Ryb2tlTGluZShkYXRhKSk7CkBAIC0zNTAsNyArMjI2LDYgQEAgdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0
IEJlemllckN1cnZlRGEKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpTdHJva2VCZXppZXJDdXJ2ZShkYXRhKSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM1OCwzMyArMjMzLDg0IEBA
IHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6U3Ryb2tlUGF0aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VFbGxpcHNlKHJlY3QpKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UmVjdChyZWN0
LCBib3JkZXJUaGlja25lc3MpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xlYXJSZWN0KHJlY3QpKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZShwb2ludDEsIHBv
aW50MikpOwogfQogCi0jaWYgVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RWxsaXBzZShyZWN0
KSk7Cit9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBs
eVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlTdHJva2VQYXR0ZXJuKCkpOworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdQYXRoKHBhdGgpKTsKIH0K
IAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RmlsbFBh
dHRlcm4oKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdG
b2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpBcHBseUZpbGxQYXR0ZXJuKCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBv
ZmZzZXQsIGNvbG9yKSk7CiB9CiAKLSNlbmRpZiAvLyBVU0UoQ0cpCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKK30K
IAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZl
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxl
RmFjdG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVy
JiBmaWx0ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXI+IGlkZW50aWZpZXI7CisgICAgaWYgKHNvdXJjZUltYWdlKQorICAgICAgICBpZGVudGlmaWVy
ID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyKFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZl
cmVuY2UoUmVmPEZpbHRlcj4geyBmaWx0ZXIgfSkpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TmF0aXZlSW1hZ2UoaW1hZ2VJZGVudGlmaWVy
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Cit9CisKK3ZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVt
SW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3sK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3U3lzdGVt
SW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCkpOworfQorCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdQYXR0ZXJuKGltYWdlSWRlbnRpZmllciwg
ZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7
Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVu
dGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQoreworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JNZWRpYShpZGVudGlm
aWVyLCBkZXN0aW5hdGlvbikpOworfQorI2VuZGlmCisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSBtb2RlKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdHbHlwaHMoRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgeyBmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUgfSkpOworfQorCit2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3sKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZXNGb3JUZXh0KERpc3BsYXlM
aXN0OjpEcmF3TGluZXNGb3JUZXh0IHsgRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCks
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMgfSkpOworfQorCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0
eWxlJiBzdHlsZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKSk7CiB9CiAKIGJvb2wg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJ
bWFnZSYgaW1hZ2UpCkBAIC00MzQsMTEgKzM2MCw2IEBAIGJvb2wgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRSZXNvdXJjZVVzZShGb250JiBmb250KQogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250
ZXh0KEdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZsdXNoQ29udGV4dChpZGVu
dGlmaWVyKSk7Ci19Ci0KIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNl
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nTWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0CiB7CiAgICAgaWYgKFVO
TElLRUxZKCFtX3JlbmRlcmluZ0JhY2tlbmQpKSB7CkBAIC00NjQsNiArMzg1LDIxIEBAIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpjcmVhdGVBbGln
bmVkSW1hZ2VCdWZmZXIoY29uCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2Nh
bGVkSW1hZ2VCdWZmZXIocmVjdCwgc2NhbGVGYWN0b3IoKSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgcmVuZGVyaW5nTWV0aG9kKTsKIH0KIAordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQoreworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSk7Cit9
CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojp0cmFuc2Zvcm1Ub0NvbG9y
U3BhY2UoY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQor
eworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlRyYW5zZm9y
bVRvQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQoR3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVy
IGlkZW50aWZpZXIpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6Rmx1c2hDb250ZXh0KGlkZW50aWZpZXIpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5LmgKaW5kZXggOWIzM2EwNjdmZDE2YmNjZjE0MDQyYzE5NzRk
ZDY5MTk0MjI2MjQ2OC4uZjJhZDhkMGFhNDU4NTg5YWVlODE5MDdkOWM5MDg5NmQzNGI2ZjcwNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCkBAIC0zOCw2ICsz
OCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OwogCiBjbGFzcyBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkgOiBwdWJsaWMgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyIHsKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOwogcHVibGljOgogICAgIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYsIFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzID0gV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERy
YXdHbHlwaHM6Olllcyk7CiAgICAgflJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eSgpID0g
ZGVmYXVsdDsKQEAgLTUwLDYzICs1MSwzOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmbHVzaENvbnRl
eHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyKSBmaW5hbDsKIAogcHJp
dmF0ZToKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2VuZChUJiYgbWVzc2Fn
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX25lZWRzRmx1c2ggPSB0cnVlOwotICAgICAg
ICBtX3JlbmRlcmluZ0JhY2tlbmQtPnNlbmRUb1N0cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rl
c3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcik7Ci0gICAgfQotCi0gICAgZnJpZW5kIGNsYXNzIFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKLQogICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCByZWNvcmRTYXZlKCkgZmlu
YWw7CiAgICAgdm9pZCByZWNvcmRSZXN0b3JlKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRUcmFu
c2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRSb3RhdGUoZmxv
YXQgYW5nbGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2NhbGUoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShjb25z
dCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkU2V0
SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+KSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZFNldExpbmVDYXAoV2ViQ29yZTo6TGluZUNhcCkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBmbG9hdCBk
YXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVKb2luKFdlYkNvcmU6Okxp
bmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3coKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZFNl
dFN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJikgZmluYWw7CisKKyNp
ZiBVU0UoQ0cpCisgICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAg
ICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9p
ZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJl
Y29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKICAgICB2b2lkIHJlY29yZENsaXAo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwUGF0
aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIGZpbmFsOwogICAgIHZv
aWQgcmVjb3JkQ2xpcE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkQ2xpcE91dFRvUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmRDbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1h
Z2VCdWZmZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2Vi
Q29yZTo6RmlsdGVyJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IFdl
YkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgV2Vi
Q29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShXZWJDb3JlOjpT
eXN0ZW1JbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgcmVjb3Jk
RHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1JlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9y
VGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNv
cmU6OkRhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0
aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgV2ViQ29y
ZTo6UGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIo
V2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhDb2xv
cihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgV2ViQ29yZTo6R3JhZGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxD
b21wb3NpdGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpD
b2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSkg
ZmluYWw7CisgICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CiAgICAgdm9pZCBy
ZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBm
aW5hbDsKKworICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNv
cmRGaWxsTGluZShjb25zdCBXZWJDb3JlOjpMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkRmlsbEFyYyhjb25zdCBXZWJDb3JlOjpBcmNEYXRhJikgZmluYWw7CkBAIC0xMTQsOSArOTEs
MTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBXZWJD
b3JlOjpCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkRmls
bFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbEVs
bGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRQ
YWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXImLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNv
cmRTdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAg
dm9pZCByZWNvcmRTdHJva2VMaW5lKGNvbnN0IFdlYkNvcmU6OkxpbmVEYXRhJikgZmluYWw7CiAg
ICAgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3QgV2ViQ29yZTo6QXJjRGF0YSYpIGZpbmFsOwpA
QCAtMTI0LDEzICsxMDIsMjggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZFN0cm9rZUJlemll
ckN1cnZlKGNvbnN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAg
ICAgdm9pZCByZWNvcmRTdHJva2VQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikg
ZmluYWw7Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisKKyAgICB2
b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50Mikg
IGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFdlYkNvcmU6OlBh
dGgmKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgV2Vi
Q29yZTo6UGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6Oklt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBXZWJDb3JlOjpGaWx0ZXImKSBmaW5hbDsKKyAgICB2b2lkIHJl
Y29yZERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwor
ICAgIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFdlYkNvcmU6OlN5c3RlbUltYWdlJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpOworICAgIHZvaWQgcmVjb3Jk
RHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lmIEVOQUJM
RShWSURFTykKKyAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRp
YVBsYXllcklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24p
IGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBXZWJDb3JlOjpG
b250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6Okds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jiwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7CiAKICAgICBib29sIHJlY29yZFJl
c291cmNlVXNlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJikgZmluYWw7CiAgICAgYm9vbCByZWNvcmRS
ZXNvdXJjZVVzZShXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGZpbmFsOwpAQCAtMTQxLDYgKzEzNCwx
OCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxp
Z25lZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6
OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5n
TWV0aG9kPikgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBj
cmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpS
ZW5kZXJpbmdNZXRob2Q+KSBjb25zdCBmaW5hbDsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgdm9pZCBzZW5kKFQmJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFtX3JlbmRlcmluZ0JhY2tlbmQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1f
bmVlZHNGbHVzaCA9IHRydWU7CisgICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+c2VuZFRvU3Ry
ZWFtKFdURk1vdmUobWVzc2FnZSksIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFs
OworCiAgICAgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1fZGVzdGluYXRp
b25CdWZmZXJJZGVudGlmaWVyOwogICAgIFdlYWtQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1f
aW1hZ2VCdWZmZXI7CiAgICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1f
cmVuZGVyaW5nQmFja2VuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCAxZDY0M2I2YjQyODhkMDhlMDM4YzQ2MjVkMDU0
OWRlNjhhZjJhYTc3Li4wNzk5M2IzODBmMWVhN2QzNDlkZDdlYmZjMTYwYzgwNGRhZDQzZTNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCkBAIC01MzQsNyArNTM0LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3Qo
UGFnZU92ZXJsYXkmLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KIAogICAg
IC8vIERyYXcgd2hpdGUgZnJhbWVzIGFyb3VuZCB0aGUgaG9sZXMuCiAgICAgLy8gV2UgZG91Ymxl
IHRoZSB0aGlja25lc3MgYmVjYXVzZSBoYWxmIG9mIHRoZSBzdHJva2Ugd2lsbCBiZSBlcmFzZWQg
d2hlbiB3ZSBjbGVhciB0aGUgaG9sZXMuCi0gICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhG
bG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMs
IHNoYWRvd0NvbG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0
U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hh
ZG93Q29sb3IgfSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjp3
aGl0ZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhib3JkZXJXaWR0
aCAqIDIpOwogICAgIGZvciAoYXV0byYgcGF0aCA6IHdoaXRlRnJhbWVQYXRocykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRl
eHRSYW5nZUNvbnRyb2xsZXIuY3BwCmluZGV4IGYxNmY3OTZlMDQ3ZTk5MTk3MmMwZWQxZjRhZTEx
M2NlMTY1NjVjMTAuLjQ5ZTAwYmUzMzdlYWZlZTEyOTNlZjA3N2FkZjYxN2NkYWUzZDRhMTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJh
bmdlQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQg
V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3Zlcmxh
eSYsIFdlYkNvcmU6OkdyYXBoCiAKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAotICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXRTaGFkb3coV2ViQ29yZTo6RmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkp
LCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dERyb3BTaGFkb3coeyBXZWJDb3JlOjpGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zm
c2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXRTdHJva2VDb2xvcihmb3VuZENvbG9yKTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0
U3Ryb2tlVGhpY2tuZXNzKGluZGljYXRvckJvcmRlcldpZHRoICogMik7CiAgICAgZm9yIChhdXRv
JiBwYXRoIDogZm91bmRGcmFtZVBhdGhzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGU5N2MyMGE0ZmY1YmU0MWQ5YzMyMDU3YzUwODFjZmZjNGI4
MWE0YTYuLjJhZjgxYzJhMWZjNWY2OGJhMDQwZjNkMDE0ZjQyMTdmNGViMzYxZTIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAyMi0wMy0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAg
ICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkg
YXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6CisKIDIwMjItMDMtMTQgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBw
bGUuY29tPgogCiAgICAgICAgIFtnaXQtd2Via2l0XSBIYW5kbGUgY29tcGFyaW5nIFVzZXIgYW5k
IENvbnRyaWJ1dG9yIHRvIE5vbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dFRlc3RzQ0cuY3BwCmluZGV4IDhlNDFjNWE3M2FlMzY4NGNlZGRmMWY5NGY5ZjE3MTg5NTM1MTRj
OWYuLmViZTY0NDg3MWUyOGY1MTljZDI2MTIwYjhhODI3ODg2YzAxOTAyYmYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcApAQCAtNTQsNyArNTQsNyBA
QCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgQmFzaWMpCiAgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgcHJpbWFyeUNvbnRleHQocHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAKICAg
ICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNv
bmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lk
dGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250
ZXh0KGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVp
Z2h0KSk7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4
dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKQEAgLTkwLDEwICs5MCwxMCBAQCBURVNUKEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgQmFzaWMpCiBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHRUZXN0cywgVGV4dCkKIHsKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IHByaW1hcnlEaXNw
bGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgcHJpbWFyeUNvbnRleHQocHJpbWFyeURpc3BsYXlM
aXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7
IH0pOworICAgIFJlY29yZGVySW1wbCBwcmltYXJ5Q29udGV4dChwcmltYXJ5RGlzcGxheUxpc3Qs
IEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIElu
TWVtb3J5RGlzcGxheUxpc3Qgc2Vjb25kYXJ5RGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBs
IHNlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAs
IDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBs
IHNlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5RGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBj
b250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtMjAxLDcg
KzIwMSw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCb3JkZXJzKQog
ICAgIEdyYXBoaWNzQ29udGV4dENHIHByaW1hcnlDb250ZXh0KHByaW1hcnlDR0NvbnRleHQuZ2V0
KCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRl
ckltcGwgc2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwg
Y29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vj
b25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwg
Y29udGV4dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJp
bWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC0yMjgsNyArMjI4LDcgQEAgVEVT
VChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIFRyYW5zZm9ybWVkQ2xpcCkKICAgICBH
cmFwaGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0ID0gcHJpbWFyeUNvbnRleHRDRzsKIAogICAg
IEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29u
ZGFyeUNvbnRleHRETChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDAp
LCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3Qs
IEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgc2Vjb25k
YXJ5Q29udGV4dCA9IHNlY29uZGFyeUNvbnRleHRETDsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKQEAgLTI4Nywx
NSArMjg3LDE1IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBBcHBseURl
dmljZVNjYWxlRmFjdG9yKQogICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQgPSBw
cmltYXJ5Q29udGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsK
LSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCB7IH0sIEZs
b2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFy
eUNvbnRleHRETChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAg
R3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5Q29udGV4dERMOwog
CiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29u
ZGFyeUNvbnRleHQpOwogCiAgICAgY3R4LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoMik7CiAKLSAg
ICBhdXRvIHByaW1hcnlDVE0gPSBwcmltYXJ5Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpJbmNsdWRlRGV2aWNlU2NhbGU6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAg
IGF1dG8gc2Vjb25kYXJ5Q1RNID0gc2Vjb25kYXJ5Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGU6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwor
ICAgIGF1dG8gcHJpbWFyeUNUTSA9IHByaW1hcnlDb250ZXh0LmdldENUTSgpOworICAgIGF1dG8g
c2Vjb25kYXJ5Q1RNID0gc2Vjb25kYXJ5Q29udGV4dC5nZXRDVE0oKTsKIAogICAgIEVYUEVDVF9F
UShwcmltYXJ5Q1RNLnhTY2FsZSgpLCBzZWNvbmRhcnlDVE0ueFNjYWxlKCkpOwogICAgIEVYUEVD
VF9FUShwcmltYXJ5Q1RNLnlTY2FsZSgpLCBzZWNvbmRhcnlDVE0ueVNjYWxlKCkpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0dyYXBoaWNzQ29udGV4
dFRlc3RzQ0cuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0dyYXBo
aWNzQ29udGV4dFRlc3RzQ0cuY3BwCmluZGV4IDI0NzM1ODBmMTkwZTBmZDY3NGMzNjdkYTQ3Yzlm
MTkyYmEyNDg1ZTQuLjIxNWMxN2M2NjU3YWVkYTZhNmUyY2QwYWUwYzljOTI2ZjNiZDgyYjAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFwaGljc0Nv
bnRleHRUZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Y2cvR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgVEVTVChHcmFw
aGljc0NvbnRleHRUZXN0cywgRHJhd05hdGl2ZUltYWdlRG9lc05vdExlYWtDb21wb3NpdGVPcGVy
YXRvcikKICAgICBHcmFwaGljc0NvbnRleHRDRyBjdHgoY2dDb250ZXh0LmdldCgpKTsKIAogICAg
IEVYUEVDVF9FUShjdHguY29tcG9zaXRlT3BlcmF0aW9uKCksIENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VPdmVyKTsKLSAgICBFWFBFQ1RfRVEoY3R4LmJsZW5kTW9kZU9wZXJhdGlvbigpLCBCbGVu
ZE1vZGU6Ok5vcm1hbCk7CisgICAgRVhQRUNUX0VRKGN0eC5ibGVuZE1vZGUoKSwgQmxlbmRNb2Rl
OjpOb3JtYWwpOwogCiAgICAgYXV0byBncmVlblBpeGVsQ0cgPSBncmVlbkltYWdlKCk7CiAgICAg
YXV0byBncmVlblBpeGVsTmF0aXZlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShncmVlblBpeGVsQ0cu
Z2V0KCkpOwpAQCAtNzEsNyArNzEsNyBAQCBURVNUKEdyYXBoaWNzQ29udGV4dFRlc3RzLCBEcmF3
TmF0aXZlSW1hZ2VEb2VzTm90TGVha0NvbXBvc2l0ZU9wZXJhdG9yKQogICAgIEVYUEVDVF9FUShw
cmltYXJ5RGF0YVsyXSwgMCk7CiAKICAgICBFWFBFQ1RfRVEoY3R4LmNvbXBvc2l0ZU9wZXJhdGlv
bigpLCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zlcik7Ci0gICAgRVhQRUNUX0VRKGN0eC5i
bGVuZE1vZGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIEVYUEVDVF9FUShj
dHguYmxlbmRNb2RlKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDUxNzdlZDkyOTgwZGQ4ZDRiYTRiZjNhZjNkMTQxMDZhNjJm
ZDZiODcuLmM0Zjk2YzFiOGM4NzJjZDhhODA1OGQyMWM0NGE2ZGU3ZTEyMzM5YTYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAyMi0wMy0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxl
LmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3Vs
ZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2V4
dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5
bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXls
aXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0OgorCiAyMDIyLTAzLTE0
ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFttb2RlbF0g
PG1vZGVsIGludGVyYWN0aXZlPiBkb2Vzbid0IGFsbG93IG1vZGVsIHRvIGJlIHJvdGF0ZWQgb24g
aU9TCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVz
LXNoYWRvdy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWlu
Y2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXggNTExYjdjMGM1NGQzMzIxNmI3YzZlYWYw
NDNhNzVjMTY3NjZkMDQyNy4uZGJmNTRiM2VhMjA0ZTE5MjRiZDQzNWQ1MTczNmRjNzM0NzcwMmNm
ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQt
aW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtMSwxNyArMSwxMyBAQAogCi0odHJhbnNs
YXRlCi0gICh4IDAuMDApCi0gICh5IDAuMDApKQogKHNhdmUpCiAoc2V0LXN0YXRlCi0gIChjaGFu
Z2UtZmxhZ3MgNTEyKQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdp
ZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvdy1jb2xvciAjMDAwMDAwKQotICAoc2hhZG93cy11
c2UtbGVnYWN5LXJhZGl1cyAwKSkKLShmaWxsLWNvbXBvc2l0ZWQtcmVjdAorICAoY2hhbmdlLWZs
YWdzIFtkcm9wLXNoYWRvd10pCisgIChkcm9wLXNoYWRvdworICAgIChzaGFkb3ctb2Zmc2V0IHdp
ZHRoPTEwIGhlaWdodD0yMCkKKyAgICAoc2hhZG93LWJsdXIgMTIuMDApCisgICAgKHNoYWRvdy1j
b2xvciAjMDAwMDAwKQorICAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKSkKKyhmaWxs
LXJlY3Qtd2l0aC1jb2xvcgogICAocmVjdCBhdCAoNTAsNTApIHNpemUgMTAweDEwMCkKLSAgKGNv
bG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxl
bmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKKyAgKGNvbG9y
ICMwMDAwRkYpIGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKIChyZXN0b3JlKQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zv
cm1zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVk
ZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKaW5kZXggMzg2ZTM5NDExODVmMDlhM2M2OGVjNmMy
YWU4OGRmMTFjNzBiMGE2OS4uNWY3OGI4YzM1MDVjOWU4MDM5OWJkNjA1YTliZTk1NWFiMDliNzA1
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10
cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0
ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CkBAIC0xLDIxICsxLDE0IEBACiAK
LSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMjIuMDApKQotKGNvbmNhdGVudGF0ZS1jdG0K
LSAgKGN0bSB7bT0oKDAuODcsMC41MCkoLTAuNTAsMC44NykpIHQ9KDgxLjcwLC0xOC4zMCl9KSkK
IChzYXZlKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDUxMikKLSAgKHNoYWRvdy1ibHVy
IDEyLjAwKQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCi0gIChzaGFkb3ct
Y29sb3IgIzAwMDAwMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCi0oZmlsbC1j
b21wb3NpdGVkLXJlY3QKKyAgKGNoYW5nZS1mbGFncyBbY3RtLCBkcm9wLXNoYWRvd10pCisgIChj
dG0ge209KCgwLjg3LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwzLjcwKX0pCisgIChkcm9w
LXNoYWRvdworICAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKKyAgICAoc2hh
ZG93LWJsdXIgMTIuMDApCisgICAgKHNoYWRvdy1jb2xvciAjMDAwMDAwKQorICAgIChzaGFkb3dz
LXVzZS1sZWdhY3ktcmFkaXVzIDApKSkKKyhmaWxsLXJlY3Qtd2l0aC1jb2xvcgogICAocmVjdCBh
dCAoMCwwKSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9w
ZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDcu
MTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQorICAoY29sb3IgIzAwMDBGRikgZXh0ZW50IGF0
ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKIChyZXN0b3JlKQotKHNldC1jdG0KLSAg
KHNldC1jdG0ge209KCgxLjAwLDAuMDApKDAuMDAsMS4wMCkpIHQ9KDAuMDAsMjIuMDApfSkpCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4
cGVjdGVkLnR4dAppbmRleCBiYzE3YjUxMTQ5OWY4MjU2Yzk5MjkwZGFlODYxNGQ0ODk0Y2FmOWNj
Li41NDZkYzQ5MTJmNTJkMDNhODlhZDkwNjg1NzJiMjhlZGM4MDMyMjUzIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50
eHQKQEAgLTEsMTYgKzEsMTIgQEAKIAotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAwLjAw
KSkKLShmaWxsLWNvbXBvc2l0ZWQtcmVjdAorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0
IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKLSAgKGNvbG9yICMwMDgwMDApCi0gIChjb21wb3NpdGUt
b3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAo
MCwwKSBzaXplIDEwNHgxMDQpCisgIChjb2xvciAjMDA4MDAwKSBleHRlbnQgYXQgKDAsMCkgc2l6
ZSAxMDR4MTA0KQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDMyOTYwKQotICAoZmlsbC1j
b2xvciAjMDAwMEZGKQotICAoc3Ryb2tlLXN0eWxlIDApCisgIChjaGFuZ2UtZmxhZ3MgW2ZpbGwt
YnJ1c2gsIHN0cm9rZS1zdHlsZSwgc2hvdWxkLWFudGlhbGlhc10pCisgIChmaWxsLWJydXNoCisg
ICAgKGNvbG9yICMwMDAwRkYpKQorICAoc3Ryb2tlLXN0eWxlIE5PLVNUUk9LRSkKICAgKHNob3Vs
ZC1hbnRpYWxpYXMgMCkpCiAoZHJhdy1yZWN0CiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTA0eDIp
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBl
ZC1yZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tp
cC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0CmluZGV4IGJiNTkzZDIwZjZkYTY0ODYyOTJkMzZj
MDIyMGUyYTlkODcyZjgyYjkuLmI4NjA0OGNjMDhjOTkzN2VmMDA3ODJlNzEwODljYWNiYzk5YzUz
MzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlw
cGVkLXJlY3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBs
YXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0CkBAIC0xLDE2ICsxLDggQEAKIHJlY29y
ZGVkOgotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAwLjAwKSkKLShmaWxsLWNvbXBvc2l0
ZWQtcmVjdAorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICg0MTIsMCkgc2l6ZSAx
MDB4MTAwKQotICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNl
LW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0MTIsMCkgc2l6ZSAxMDB4
MTAwKQorICAoY29sb3IgIzAwMDBGRikgZXh0ZW50IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQog
CiByZXBsYXllZDoKICgKICAgKGNsaXAgYXQgKDUxMiwwKSBzaXplIDUxMngyMDApCi0odHJhbnNs
YXRlCi0gICh4IDAuMDApCi0gICh5IDAuMDApKQo=
</data>
<flag name="commit-queue"
          id="482499"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454755</attachid>
            <date>2022-03-15 14:00:46 -0700</date>
            <delta_ts>2022-03-15 15:01:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220315140044.patch</filename>
            <type>text/plain</type>
            <size>667795</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uZmJiZDUwMzdlYmViMjc4MGViNDliYWU4YTlmMjQw
M2NlNTY4ZWQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzMyBAQAorMjAyMi0wMy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uUGFpbnRlcjo6
cGFpbnRCb3hTaGFkb3cgY29uc3QpOgorICAgICAgICAqIGh0bWwvQ3VzdG9tUGFpbnRJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludEltYWdlOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5TGluZURhc2ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xvYmFs
Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmlzUG9pbnRJblN0cm9rZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tl
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd0xheW91dFN0aXBwbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3TGF5
b3V0SGF0Y2hpbmcpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6dHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9y
TWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpz
dXBwb3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyk6
CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRl
ZFJlY3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
Sm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBo
YXNpc01hcmtzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZGVjb25zdHJ1Y3REcmF3R2x5cGhzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXh0UnVuIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRJ
bWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRpZEFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZUFzUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUVsbGlwc2VBc1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmFpc2VkRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0
Qm94SXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9y
OjpvZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJh
dG9yOjppbmNyZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJh
dG9yOjphdEVuZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRl
cmF0b3I6OmN1cnJlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJv
eEl0ZXJhdG9yOjpkaXJlY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3IhPSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdl
Q2hhbmdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YXBwbHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6
OmR1bXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZVN0YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29s
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclNo
YWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldFNo
YWRvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldEZpbGxDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldFN0cm9rZVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
b250ZW5mdWxQYWludERldGVjdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjptZXJnZVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6Om1lcmdlU3RhdGVEaWZmcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmdldENUTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZmlsbENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZmlsbEdyYWRpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZmlsbFBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpm
aWxsU3BhY2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRGaWxsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRG
aWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VDb2xvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUdyYWRpZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0dGVybiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVNwYWNlVHJhbnNm
b3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFk
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VUaGlja25lc3Mg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VUaGlj
a25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VTdHlsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aW5lQ2FwIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpsaW5lSm9pbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6bWl0ZXJMaW1pdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb21w
b3NpdGVNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29t
cG9zaXRlT3BlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YmxlbmRNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyb3BTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
aGFkb3dPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
aGFkb3dCbHVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hh
ZG93Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRE
cm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFk
b3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNWaXNpYmxlU2hhZG93
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzQmx1cnJlZFNo
YWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1NoYWRv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFscGhhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRleHRE
cmF3aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFRleHREcmF3aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNo
b3VsZEFudGlhbGlhcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNob3VsZFNtb290aEZvbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0U2hvdWxkU21vb3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0x1bWluYW5jZU1hc2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXREcmF3THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6aXNJblRyYW5zcGFyZW5jeUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2U6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmxlbmRNb2RlT3BlcmF0aW9uIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxp
cHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ds
eXBoc0FuZENhY2hlRm9udCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6On5HcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXI6OnNhdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxheWVyU2Nv
cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6
YmVnaW5MYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXll
clNjb3BlOjp+VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6R3JhcGhpY3NDb250ZXh0U3Rh
dGVTdGFja0NoZWNrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXI6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dFN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Omhhc09ubHlQcmltaXRpdmVDaGFuZ2VzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlRGlmZnMpOgorICAg
ICAgICAoV2ViQ29yZTo6c3RhdGVDaGFuZ2VOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9y
PDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpj
bGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpjaGFuZ2VzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkaWRBcHBseVN0
YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Z2V0
Q1RNIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRD
VE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmZpbGxCcnVzaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsR3Jh
ZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEZpbGxQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpmaWxsUnVs
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0Rmls
bFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZUJy
dXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRT
dHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0
U3Ryb2tlR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNldFN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnN0cm9rZVRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzdHJva2VTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OmxpbmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmxpbmVEYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bGluZUpvaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptaXRlckxpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpjb21wb3NpdGVNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkcm9wU2hhZG93IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjphbHBoYSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnRleHREcmF3aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpzaG91bGRBbnRpYWxpYXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNob3VsZFNtb290aEZvbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkcmF3
THVtaW5hbmNlTWFzayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0RHJhd0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjp+R3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlcjo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXll
clNjb3BlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5z
cGFyZW5jeUxheWVyU2NvcGU6OmJlZ2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNw
YXJlbmN5TGF5ZXJTY29wZTo6flRyYW5zcGFyZW5jeUxheWVyU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6OkdyYXBoaWNzQ29udGV4dFN0
YXRlU3RhY2tDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
U3RhY2tDaGVja2VyOjp+R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyOjpJbnRlcnBvbGF0aW9u
UXVhbGl0eU1haW50YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJwb2xhdGlvblF1YWxp
dHlNYWludGFpbmVyOjp+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZU1vZGU6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZU1vZGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lRGFzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6
aXNWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmlzQmx1cnJl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEcm9wU2hhZG93OjpoYXNPdXRzZXRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEcm9wU2hhZG93OjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1l
ZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L051bGxHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0Nv
bnRleHQ6Ok51bGxHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFw
aGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3ND
b250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6
OlNoYWRvd0JsdXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJydXNoOjpzcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCcnVzaDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnJ1c2g6OnBhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNl
dEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJydXNoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6
OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpzZXRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6YnJ1c2ggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUJydXNoOjpzZXRQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpp
c1ByaW1pdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpCcnVzaDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJydXNoOjpCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJydXNoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1
c2g6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9y
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRC
b3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJ
dGVyYXRvcjo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6aW5jcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAg
IChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpTdGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6
Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpGaWxsU291cmNlOjpGaWxsU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdHJva2VTb3VyY2U6OlN0cm9rZVNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGU6OlNoYWRvd1N0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
aXJvOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUpvaW4p
OgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnNldE1pdGVyTGltaXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRlQ2hhbmdlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNs
aXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Z2V0Q1RNIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlw
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2gpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2luKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRl
ckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
Ojpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpDR0NvbnRleHRTdGF0ZVNhdmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6On5DR0NvbnRleHRTdGF0
ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3aW5nTW9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q0dMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZUpv
aW4pOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OnNldENHTGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dTaGFkb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2FuVXNlU2hhZG93Qmx1ciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEJvdW5k
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6Q0dDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjp+Q0dDb250ZXh0U3RhdGVT
YXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpz
YXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OnJl
c3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
ZGlkU2F2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdl
OjpjYWNoZVBhcmFtZXRlcnNNYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1
bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlBERkRvY3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tlQ29udGFp
bnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlw
aHNSZWNvcmRlckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJlZ2luTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5kTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0dseXBo
cyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlSW50ZXJuYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRl
cjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6c2V0SW50ZXJuYWxGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5
cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6
OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpyZWNvcmREcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3Tm9uT1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3T1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpk
cmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05h
dGl2ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJ
bnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1Jl
Y29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmNvbmNsdWRlSW50ZXJuYWxD
b250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6
dXBkYXRlRmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6c2hhZG93SXNDbGVhcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6YXBwbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmRlc3Ryb3kpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnNhZmVDb3B5IGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6c2l6ZU9mSXRlbUluQnl0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzRHJhd2luZ0l0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzSW5saW5lSXRlbSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6YXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlhKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmFwcGx5IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmFwcGx5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YXBw
bHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENU
TTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNvbmNhdGVuYXRlQ1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjphcHBseSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmFwcGx5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxp
bWl0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xlYXJTaGFkb3c6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91bmRl
ZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6
Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVk
UmVjdDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
Um91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJh
bnNsYXRlOjpUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlRyYW5zbGF0ZTo6eCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6VHJhbnNsYXRlOjp5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Um90YXRlOjphbmdsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YW1vdW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENUTSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjp0cmFuc2Zvcm0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpDb25j
YXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29u
Y2F0ZW5hdGVDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGVDaGFuZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OlNldExpbmVD
YXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
OmxpbmVDYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRhc2hBcnJheSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRhc2hPZmZzZXQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpl
bmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVEYXNoOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxpbmVKb2luIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0
OjptaXRlckxpbWl0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpyZWN0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9z
aXRlZFJlY3Q6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbXBvc2l0ZU9wZXJhdG9yIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6
OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6bG9jYWxCb3Vu
ZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxD
b21wb3NpdGVkUmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpibGVuZE1vZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6UmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1fZHJh
d0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlc3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseVN0YXRl
Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5
U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6On5SZWNvcmRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Y29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFu
Z2VJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRpZFVwZGF0ZVN0YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGlu
ZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2NhbGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjb25jYXRDVE0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpnZXRDVE0gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3RtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjp0
cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2NhbGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNv
bnRleHRTdGF0ZTo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Q29udGV4dFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29u
dGV4dFN0YXRlOjpjbG9uZUZvclNhdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNsb25lRm9yVHJhbnNwYXJl
bmN5TGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpzdGF0ZVN0YWNrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6UmVjb3JkZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlw
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmRDbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OnJlY29yZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlckltcGw6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6On5SZWNvcmRlcklt
cGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkVHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRDVE0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lRGFzaCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsZWFyU2hhZG93KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmg6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpSZWNvcmRlckltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjphcHBseVNldFN0YXRl
SXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1Jl
Y29yZGVySGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29y
ZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIpOgorICAgICAg
ICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2ZSk6CisgICAgICAgIChOaWNv
c2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0b3JlKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcCk6
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aCk6Cisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KToKKyAgICAg
ICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyUmVjdCk6Cisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Zmls
bEVsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Zmls
bFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tl
UmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQ
YXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdSZWN0
KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmcp
OgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlQnVm
ZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRp
dmVJbWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
UGF0dGVybik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWlu
dEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZHJhd0dseXBocyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lRGFzaCk6IERl
bGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5l
Sm9pbik6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoTmljb3Np
YTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENUTSk6IERlbGV0ZWQuCisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpnZXRDVE0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5k
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNv
cmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL0Nv
bnRlbnRmdWxQYWludENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudGZ1bFBh
aW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5RWxs
aXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21Q
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNo
YWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFp
bnRUZXh0RmllbGRJbm5lclNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQ
bGFjZWhvbGRlckJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFp
bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50
QmFja2dyb3VuZERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50ZXIu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp1c2VTdHJva2VTdHlsZVRvRmlsbCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBv
cnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdD
b250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6ZHJhdyk6CisK
IDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUg
cm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZDljYzNjNGZlNjllOGJjZTVlMDFjODlhZjRkMDdj
NzVhYzgwYzNlNi4uMjNjNjA3YTZmMjJkNTQyNmM4MjBjOTY1MmExNWM2MGQ2YmE1OWI5YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAyMi0wMy0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxz
YWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0
YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNjYWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Y29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldE1pdGVy
TGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpjbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgICog
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBw
bHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9y
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRDbGlwKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZENsZWFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQ
YXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1J
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xp
bmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNm
b3JtVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjptX3JlbmRlcmluZ0Jh
Y2tlbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTY2Fs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0
TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbENv
bXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6c2VuZCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6CisKIDIwMjItMDMtMTQgIEFudG9p
bmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwg
aW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCmluZGV4IDczNjQ0MmEwOGE3NDUwMGEzNTJmMDRjMmUxMDZkOGM0MWU3YTRm
YzUuLmUzN2M0ODZkODU5NzM5NDBlNWU1Nzc3YzE5NmViOTJiN2QwYjBjZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQpAQCAtMTQ5MSw2ICsxNDkxLDggQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMU3RhdGUuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5
RGVsZWdhdGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaApA
QCAtMTU1MCw2ICsxNTUyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtQXVkaW9UcmFja0NvbmZpZ3VyYXRpb24u
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtQ29sb3JTcGFjZS5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMTU2OCw2ICsx
NTcxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5k
ZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaG91bGRMb2NhbGl6ZUF4aXNOYW1lcy5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1
ZmZlclByaXZhdGVDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUltYWdlLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggNWM3YjczZWIyMDVlMDllYzI0NmUwMTFkMGE1MDJkY2Q0YzFkY2E1
MC4uZWI3NmExODZkMzQ4ZDRiMzY4OWYyMzRmM2RiZjYyODJhYWFkZTA1NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTIwNDUsNiArMjA0NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2Uu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRTdGF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcApAQCAtMjA4NCw2ICsyMDg1
LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNl
QnJ1c2guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvU291cmNlSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdU
cnVuY2F0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggODI5NjJiYTA0ZTJmZmQ3ZmZhMGM2ZTYxZDljOWMyYzE3YTVmNjQ2
Ny4uYjU1YzVjMWM0MmUzMjk1NTcwZWQyNGM4NDBkYzNlNGYyZmQzMDJlMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjMzMSwx
MCArMjMzMSwxMiBAQAogCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZm
ZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVG
Q0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGMDVGODAyNTEyNDQyRTAwNzFF
NjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3MUZDQjE3MDI3QkFCM0ZFMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQ0IxNkQyN0JB
QjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAxNzgzQjI3RDU3RjlGMDA5QkVCMUIgLyog
Q0dDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAv
KiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIy
M0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMUI0OTc0MjUxMkJBM0IwMEZFOUQzQiAv
KiBJbWFnZUJpdG1hcEJhY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tp
bmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0Qjcw
MDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNDYwREQ3MjdDODZEQUQwMEQ1RjlGNCAvKiBH
cmFwaGljc0NvbnRleHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzI0Njk2M0IyNzVDNUZBNjAwQTkxNTZBIC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1M0ZCODMyMTNCMUJCODAwQzQwRDM0IC8q
IENTU0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcyNDY5NjNEMjc1QzYxNDQwMEE5MTU2QSAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMTRCOUI3Mjc0
NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRTI3NUM2MTY3MDBBOTE1NkEg
LyogRmlsdGVySW1hZ2VWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyQjRFRjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBGaWx0ZXJJbWFnZVZlY3Rv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0y
MzQyLDYgKzIzNDQsOSBAQAogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlT
dGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0
RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI1NjA3OEUyNzlEMzRCNjAwN0QyREQzIC8qIEZFSW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyRjdFNzRG
Mjc5Q0VERTgwMEQ4MkQyRCAvKiBGRUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8qIFNvdXJj
ZUJydXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkIzNTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NTI3Q0RBODBFMDBDM0Q5
N0UgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkNE
RTIwMjc1OTczNTAwMEE0NDVCMiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NjYxQTIyNzU5NjBBNTAwRTdE
RjlCIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8qIFBsYXRm
b3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNBRTM2NjAw
MDJFRjkwIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTEzMTgs
NiArMTEzMjMsOCBAQAogCQk3MUZDQjE2RDI3QkFCM0RGMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxp
Z25lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZVJhdGVBbGlnbmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkNCMTZGMjdCQUIzRTAwMEUwNjMx
QyAvKiBGcmFtZVJhdGVBbGlnbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZyYW1lUmF0ZUFsaWduZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENH
Q29udGV4dFN0YXRlU2F2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0dDb250ZXh0U3RhdGVTYXZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjA2RDQzNTI3REFERUNBMDA0MEZFQjIg
LyogVGV4dEJveEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hJdGVyYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjExQjVENjI3NjUzNjgyMDA3NkZFRjggLyog
RmlsdGVyUmVzdWx0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmlt
YXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3Bl
cnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYx
MkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVy
dHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzI3LDYgKzExMzM0LDggQEAK
IAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNDM1
RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGaWx0ZXJJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNDYwREQ1
MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXgu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYx
M0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkIx
QTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MTM4OSw2ICsxMTM5OCwxMCBAQAogCQk3MkExM0FENTI3NERFNTRFMDBFMkE4OEUgLyogU291cmNl
QWxwaGFTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQWxwaGFTb2Z0d2Fy
ZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBMTNBRDYyNzRERTU3
ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyQTEzQUQ3Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFwaGlj
U29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFw
cGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEMyN0M5RjkzRTAw
RDI3QUUwIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1
MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCMzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUJydXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNvdXJjZUJydXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
QjRFRjc0Mjc0RTIzMzMwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJCNEVGNzUyNzRFMjMzNDAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2FyZUFwcGxp
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBG
aWx0ZXJJbWFnZVZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZVZlY3Rvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4MTAsNiArMjg4MjMsNyBAQAogCQlCMjc1
MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRT
dGF0ZVNhdmVyLmggKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cu
Y3BwICovLAogCQkJCUJDQUZFREIzMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cuY3Bw
ICovLAogCQkJCUJDQUZFREIyMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cuaCAqLywK
QEAgLTI5MDQzLDYgKzI5MDU3LDkgQEAKIAkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlEMDggLyog
R3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRBNDUyNTM3
NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAqLywKIAkJ
CQk3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oICov
LAorCQkJCTcyNDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5j
cHAgKi8sCisJCQkJNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0
YXRlLmggKi8sCisJCQkJNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhp
Y3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNz
TGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXll
ckNsaWVudC5oICovLApAQCAtMjkxNDMsNiArMjkxNjAsNyBAQAogCQkJCUJDQTU1OTEyMjYzREJE
NzkwMDdGMTlCMyAvKiBQaXhlbEZvcm1hdC5oICovLAogCQkJCUNERDA4QUJGMjc3RTU0RjAwMEVB
Mzc1NSAvKiBQbGF0Zm9ybUF1ZGlvVHJhY2tDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJQkMzRTYy
NDIyNjU5NzkxNzAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oICovLAorCQkJCTcyQjM1
MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovLAogCQkJ
CTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJNzJC
QUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk1
NTA2NDBBRDI0MDc1NkRBMDBBQUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAq
LywKQEAgLTI5MTY2LDYgKzI5MTg0LDggQEAKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAg
LyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNo
YWRvd0JsdXIuaCAqLywKIAkJCQkxQzREQjAyNDI3MzM5RTVFMDA3QjBBRDEgLyogU2hvdWxkTG9j
YWxpemVBeGlzTmFtZXMuaCAqLywKKwkJCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAgLyogU291
cmNlQnJ1c2guY3BwICovLAorCQkJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBTb3VyY2VC
cnVzaC5oICovLAogCQkJCTFERDEyN0FDMjU2RTNBODcwMEIyMjdENyAvKiBTb3VyY2VCdWZmZXJQ
cml2YXRlLmNwcCAqLywKIAkJCQlDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZS5oICovLAogCQkJCUNEQzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBTb3VyY2VC
dWZmZXJQcml2YXRlQ2xpZW50LmggKi8sCkBAIC0yOTE3Nyw2ICsyOTE5Nyw3IEBACiAJCQkJMDg3
NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5o
ICovLAogCQkJCTk1RTlGNDQ0MjdDOUEzOUIwMDk0NTMzNyAvKiBTeXN0ZW1JbWFnZS5oICovLAog
CQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCisJCQkJNzIwNkQ0
MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovLAogCQkJCTM3NkRDQ0Uw
MTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLywKIAkJCQlBODI0QjQ2NDBFMkVGMkVB
MDA4MUE3QjcgLyogVGV4dFJ1bi5oICovLAogCQkJCUNEMUU3MzQ2MTY3QkM3OEUwMDlBODg1RCAv
KiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAgKi8sCkBAIC0zMzg3Myw2ICszMzg5NCw3IEBA
CiAJCQkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRlSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8qIENlcnRpZmlj
YXRlU3VtbWFyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5RjAwOUJFQjFC
IC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZGRDE1MTZD
NzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNzg1RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5lbENvdW50TW9k
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDc5OCw2ICszNDgyMCw4IEBACiAJCQkJNDlDN0I5RkMx
MDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3Qjk1Q0ZFQjI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjQ2MERE
NzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkgLyogR3Jh
cGhpY3NMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAwRTcyNkMy
IC8qIEdyYXBoaWNzTGF5ZXJDQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUwRjEyQTI2
OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzY3
MDUsNiArMzY3MjksNyBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0Q0E0QzAw
OEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVC
RTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MjU4MTg1NTI3Q0RBODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9y
bUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc3MDVDNzI1NTI3NkNEMDAxRDBDOTQgLyog
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQUYyNDA3NTgy
RDAwQUFFMDQ1IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywK
QEAgLTM3Mzg2LDYgKzM3NDExLDcgQEAKIAkJCQk1MTBENEEzODEwMzE2NUVFMDA0OUVBNTQgLyog
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFCQUUxRTEw
M0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1c2guaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNEM0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VCdWZmZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTY1MTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VC
dWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYxMzUwOTI0QzlGQ0EzMDA0MzJFMUUg
LyogU291cmNlQnVmZmVyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3Bw
CmluZGV4IDg1NmEzZGU1MDRkZWMwYmJmYTkwYWMxN2RlMzdmNTE1ZTE0ZDkyMDQuLjlkOTM1YTZm
ZjMyMzBmM2Y0NmEyZWY1ZDdlYTEwMDEwYWU5ZTEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcApA
QCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0
aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICAgICAgICAgIERh
c2hBcnJheSBsaW5lRGFzaDsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNoTGVuZ3Ro
KTsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAgICAgICAg
cGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hMZW5ndGgp
OworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2goeyBXVEZN
b3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGgg
dGlnaHQgY29ybmVyczoKQEAgLTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgQm94RGVjb3JhdGlvblBh
aW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBT
aGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdpbiA9IGZpbGxSZWN0LnJlY3QoKS5sb2Nh
dGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBhdXRvIGFkanVzdGVkU2hhZG93T2Zmc2V0
ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7
CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVzdGVkU2hh
ZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5p
c1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFk
aXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldERy
b3BTaGFkb3coeyBhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNo
YWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01v
ZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAKICAgICAgICAgaWYg
KGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUs
IGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZl
cyB0aW1lCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpw
YWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAg
ICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAg
ICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgcGFpbnRpbmdDb250
ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCks
IHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1
c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICBwYWlu
dGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBzaGFkb3dS
YWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygp
ID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9
KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsKICAgICB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAppbmRleCBmNGI5OGJh
NjJlMTE5YTA3NzEzMTJkM2I4OGM0OTE5MzY4MzZlZTM3Li5lZTUwNGYwOGM0OWZjOGQ1YjVhZWQ3
MDJiZTIxN2YxYjA2ZmQ0ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3Rv
bVBhaW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFn
ZS5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFpbnRJbWFn
ZTo6ZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjbwogSW1hZ2VE
cmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RDb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlv
bnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRp
b25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgZGVz
dENvbnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKGRlc3RS
ZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXpl
KCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAgICBGbG9h
dFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKIAogICAgIC8vIEZhY3RvciBpbiB0aGUg
ZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0IHJlc29s
dXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5n
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRDVE0oKTsK
ICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7CiAgICAg
ZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcAppbmRleCAwZTc4MDYzZTNhNDFjYmM2OTBmMGQwY2NiNzg4MTE3ZGU2OTM4
YTAyLi5kYmM5NTdjNTNkMDRhMzk2ZWFjNjRkNjdmZTZhMmIxN2U0NDhjNjYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcApAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCgpIGNvbnN0CiAgICAgRGFzaEFycmF5IGNvbnZlcnRl
ZExpbmVEYXNoKHN0YXRlKCkubGluZURhc2guc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHN0YXRlKCkubGluZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbnZlcnRlZExp
bmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4oc3RhdGUoKS5saW5lRGFz
aFtpXSk7Ci0gICAgYy0+c2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRlKCkubGlu
ZURhc2hPZmZzZXQpOworICAgIGMtPnNldExpbmVEYXNoKHsgV1RGTW92ZShjb252ZXJ0ZWRMaW5l
RGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KSB9KTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxBbHBoYShkb3Vi
bGUgYWxwaGEpCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBvcGUKICAg
ICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAg
ICAgICAgcmV0dXJuOwotICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2Rl
KTsKKyAgICBjLT5zZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKIH0KIAogdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBz
eSkKQEAgLTExODYsNyArMTE4Niw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZG91CiAgICAgICAg
IERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkpOwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAgICAgICAg
Y29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50PihsaW5l
RGFzaFtpXSk7Ci0gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gs
IHN0YXRlLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IFdU
Rk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUubGluZURh
c2hPZmZzZXQpIH0pOwogICAgIH0pOwogfQogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChkb3VibGUgeCwgZG91YmxlIHks
IGRvdWJsZSB3aWR0aCwgZAogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAg
IGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250ZXh0
LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFk
b3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBjb250ZXh0LT5zZXREcm9wU2hhZG93KHsg
RmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2Rl
OjpMZWdhY3kgfSk7CiAgICAgfQogICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9IDEpIHsK
ICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTM2Myw5ICsxMzYzLDkgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3VsZERyYXdT
aGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09mZnNldC53
aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWln
aHQoKTsKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0
YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSh3aWR0aCwgLWhl
aWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFk
aXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRTaGFkb3coRmxv
YXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpM
ZWdhY3kpOworICAgICAgICBjLT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9y
Ojp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiB9CiAKIGJv
b2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25z
dApAQCAtMjQzMiwxOSArMjQzMiwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGRvdQogCiAgICAg
ICAgICAgICBGbG9hdFNpemUgb2Zmc2V0KDAsIDIgKiBtYXNrUmVjdC5oZWlnaHQoKSk7CiAKLSAg
ICAgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBmbG9hdCBzaGFk
b3dSYWRpdXM7Ci0gICAgICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICAgICAgICAgIGMt
PmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotCiAg
ICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChtYXNrUmVjdCk7Ci0gICAgICAgICAgICBz
aGFkb3dSZWN0LmluZmxhdGUoc2hhZG93UmFkaXVzICogMS40KTsKLSAgICAgICAgICAgIHNoYWRv
d1JlY3QubW92ZShzaGFkb3dPZmZzZXQgKiAtMSk7CisgICAgICAgICAgICBhdXRvIGRyb3BTaGFk
b3cgPSBjLT5kcm9wU2hhZG93KCk7CisKKyAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShk
cm9wU2hhZG93LmJsdXJSYWRpdXMgKiAxLjQpOworICAgICAgICAgICAgc2hhZG93UmVjdC5tb3Zl
KGRyb3BTaGFkb3cub2Zmc2V0ICogLTEpOwogICAgICAgICAgICAgYy0+Y2xpcChzaGFkb3dSZWN0
KTsKIAotICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKKyAgICAgICAgICAgIGRy
b3BTaGFkb3cub2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5KTsKKyAgICAgICAgICAgIGMtPnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICAg
ICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xvcihDb2xv
cjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXku
Y3BwCmluZGV4IDRmNjNhZGNlOTM5MTZkYjIzMjBlOTY3OGFhYmZlMGYzY2Q5OTc2MmIuLjlhODAz
YTQwOGQ4OGMyZmY0OGRkM2JlYTAyOTUxYjg3NTgwOThlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTEyNDQsNyArMTI0NCw3IEBAIHN0
YXRpYyB2b2lkIGRyYXdMYXlvdXRTdGlwcGxpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZl
cihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAgICBjb250
ZXh0LnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAgIGNvbnRl
eHQuc2V0TGluZURhc2goeyAxLCBkZW5zaXR5IH0sIDEpOworICAgIGNvbnRleHQuc2V0TGluZURh
c2goeyB7IDEsIGRlbnNpdHkgfSwgMSB9KTsKIAogICAgIGRyYXdMYXlvdXRQYXR0ZXJuKGNvbnRl
eHQsIHF1YWQsIGRlbnNpdHksIEZsaXA6Ok5vKTsKIH0KQEAgLTEyNTQsNyArMTI1NCw3IEBAIHN0
YXRpYyB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVy
KGNvbnRleHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNSk7CiAgICAgY29u
dGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlKTsKLSAgICBjb250
ZXh0LnNldExpbmVEYXNoKHsgMiwgMiB9LCAyKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
eyAyLCAyIH0sIDIgfSk7CiAKICAgICBjb25zdGV4cHIgYXV0byBkZWZhdWx0TGF5b3V0SGF0Y2hT
cGFjaW5nID0gMTI7CiAgICAgZHJhd0xheW91dFBhdHRlcm4oY29udGV4dCwgcXVhZCwgZGVmYXVs
dExheW91dEhhdGNoU3BhY2luZywgZmxpcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5k
ZXggYjU4OGY2ZmE0YTExZDc3MGMzYzg0OTk5NjcyZDdkN2VmZjQzMmM0Zi4uOGExN2FlMzcwYWUz
NmIwMGViYjdhOWIyZTA3NTUxODA2YmVkMTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cApAQCAtNDMwMyw3ICs0MzAzLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9yUGFpbnRJ
bnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXQKICAgICBpZiAo
bmVlZHNMYXlvdXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwogCi0gICAg
TnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Cisg
ICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGZyYW1lUmVjdCgpLCBwYWludEludmFsaWRh
dGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRlbnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVu
dHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJl
Y3QpKTsKQEAgLTQ4NTQsNyArNDg1NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVp
Z2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAg
ICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgotICAgIE51
bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFs
aWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChm
cmFtZVJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2FzdDxpbnQ+
KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3RhdGljX2Nh
c3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93UmVjdCgp
Lm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3ApKSk7CiAg
ICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQuY3BwCmluZGV4IDlmZDI1ZDgwYWQxMmRjOTFkZDExZjkxNTk4ZmM2YzhlZmE0Y2IyYTIu
LjI4OTU3NGI5YzFlNDBjZDcxMmI0ZTJiNmU5ZWIzNGIwMTcyOWRmY2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuY3BwCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCwgR3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlD
b250ZXh0KQotICAgIDogbV9wcmltYXJ5Q29udGV4dChwcmltYXJ5Q29udGV4dCkKKyAgICA6IEdy
YXBoaWNzQ29udGV4dChwcmltYXJ5Q29udGV4dC5jbGlwQm91bmRzKCksIHsgfSwgcHJpbWFyeUNv
bnRleHQuZ2V0Q1RNKCkpCisgICAgLCBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250ZXh0KQog
ICAgICwgbV9zZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeUNvbnRleHQpCiB7CiB9CkBAIC00OCw2
ICs0OSwzMCBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIAorI2lmIFVTRShDRykKK2Jvb2wgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgpOworfQorCit2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0
KQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJD
b250ZXh0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NB
TGF5ZXJDb250ZXh0KTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJ
c0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KQoreworICAgIG1f
cHJpbWFyeUNvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRl
eHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0Fj
Y2VsZXJhdGVkQ29udGV4dCk7Cit9CisjZW5kaWYKKworUmVuZGVyaW5nTW9kZSBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cmltYXJ5Q29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Cit9CisKIHZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2F2ZSgpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG5vdCB1c2luZyB0
aGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCdzIHN0YXRlIHN0YWNrIGF0IGFsbCwKQEAgLTY0
LDIyICs4OSwxMCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQog
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3Jk
ZXJUaGlja25lc3MpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0LCBib3Jk
ZXJUaGlja25lc3MpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIGZyb20sIGNvbnN0IEZsb2F0UG9pbnQmIHRvKQotewotICAg
IG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlw
c2UocmVjdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOworICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCiAjaWYgVVNFKENH
KQpAQCAtOTYsMjIgKzEwOSwxMCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFw
cGx5RmlsbFBhdHRlcm4oKQogfQogI2VuZGlmCiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LmRyYXdQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsK
LX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpCiB7
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOworICAgIG1fcHJpbWFyeUNvbnRleHQuYXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmYWN0b3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseURldmlj
ZVNjYWxlRmFjdG9yKGZhY3Rvcik7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQpAQCAtMTI2LDIyMiArMTI3
LDEyNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0K
IAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0IGZhY3RvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmFjdG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihmYWN0b3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxS
ZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsKLX0KLQot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxS
ZWN0KHJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwg
Y29sb3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVk
UmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xv
cik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29s
b3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9y
KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwg
cm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LmNsZWFyUmVjdChyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xlYXJSZWN0
KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgbV9wcmltYXJ5
Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250
ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotfQotCi0jaWYgVVNFKENHKQotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXND
QUxheWVyQ29udGV4dCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQ0FMYXllckNvbnRl
eHQoaXNDQUxheWVyQ29udGV4dCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQ0FMYXll
ckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Ci19Ci0KLWJvb2wgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFy
eUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRl
eHQpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0Fj
Y2VsZXJhdGVkQ29udGV4dCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKLX0KLSNlbmRpZgotCi1SZW5kZXJpbmdN
b2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLX0KLQogdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5j
bGlwKHJlY3QpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwKHJlY3QpOwogfQogCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKLSAgICBtX3NlY29uZGFy
eUNvbnRleHQuY2xpcE91dChyZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5j
bGlwT3V0KHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwotfQot
CiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgo
cGF0aCwgd2luZFJ1bGUpOwogICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFBhdGgocGF0aCwgd2lu
ZFJ1bGUpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7
CiB9CiAKLUludFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuY2xpcEJvdW5kcygpOwotfQotCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2Fw
KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVDYXAobGluZUNhcCk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVDYXAobGluZUNhcCk7CisgICAgbV9wcmltYXJ5
Q29udGV4dC5jbGlwT3V0KHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHJl
Y3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgbV9w
cmltYXJ5Q29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpOworICAg
IG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
Y2xpcE91dChwYXRoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVK
b2luKGxpbmVKb2luKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZUpvaW4obGluZUpv
aW4pOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIs
IGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBUb0ltYWdlQnVm
ZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LnNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsZWFy
UmVjdChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIHNlbGZT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9w
cmltYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobmF0aXZlSW1hZ2UsIHNlbGZTaXplLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdOYXRp
dmVJbWFnZShuYXRpdmVJbWFnZSwgc2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOworICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC5maWxsUmVjdChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0
aW9uUmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1J
bWFnZSwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3Ip
OwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihuYXRpdmVJbWFnZSwgZGVz
dFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5hdGl2ZUltYWdlLCBkZXN0
UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50KTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgZ3JhZGllbnQpOwogfQogCi1JbWFnZURy
YXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29u
dGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4dC5maWxs
Um91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUm91
bmRlZFJlY3QocmVjdCwgY29sb3IpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0
byByZXN1bHQgPSBtX3ByaW1hcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxl
U2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1h
cnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwg
Y29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShy
ZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAotSW1hZ2VEcmF3UmVzdWx0IEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpU
aWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVk
SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUs
IHZSdWxlLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2Uo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxl
LCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmls
bEVsbGlwc2UoZWxsaXBzZSk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVs
bGlwc2UpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnBhaW50RnJh
bWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIG1fcHJpbWFyeUNv
bnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxQYXRoKHBh
dGgpOwogfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxlKQordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2NhbGUoc2NhbGUpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zY2FsZShzY2FsZSk7CisgICAgbV9wcmltYXJ5Q29udGV4
dC5zdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBl
bGxpcHNlKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAgICBtX3By
aW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBtX3ByaW1h
cnlDb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQudHJhbnNs
YXRlKHgsIHkpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIG1fcHJpbWFyeUNvbnRl
eHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNvbmNhdENU
TSh0cmFuc2Zvcm0pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVy
VGhpY2tuZXNzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwgYm9yZGVy
VGhpY2tuZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIGZyb20sIGNvbnN0IEZsb2F0UG9p
bnQmIHRvKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LnNldENUTSh0cmFuc2Zvcm0pOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZHJhd0xpbmUoZnJvbSwgdG8pOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TGluZShm
cm9tLCB0byk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LmdldENUTShpbmNsdWRlRGV2
aWNlU2NhbGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CisgICAg
bV9zZWNvbmRhcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOwogfQogCi1GbG9hdFJlY3QgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCit2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgcmV0dXJuIG1f
cHJpbWFyeUNvbnRleHQucm91bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOwor
ICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdQYXRoKHBhdGgpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0zNzAsMjkgKzI3NSw1NCBA
QCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBkbwogfQogI2VuZGlmCiAKLUZsb2F0U2l6ZSBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJv
bSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXV0byBzaXplID0gbV9wcmltYXJ5Q29udGV4dC5k
cmF3VGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAgICByZXR1
cm4gc2l6ZTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0
ZXJSZXN1bHRzJiBmaWx0ZXJSZXN1bHRzKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ds
eXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3Ro
aW5nTW9kZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOworICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJj
ZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwg
ZmlsdGVyLCBmaWx0ZXJSZXN1bHRzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCit2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoY2FzY2Fk
ZSwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3RW1waGFzaXNNYXJrcyhjYXNjYWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TmF0
aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwog
fQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBG
b250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250
Tm90UmVhZHlBY3Rpb24pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUs
IHJ1biwgcG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7Ci0gICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdCaWRpVGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBjdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1N5c3RlbUltYWdlKHN5c3RlbUlt
YWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3U3lzdGVt
SW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0
LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwor
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdHRlcm4oaW1h
Z2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0dGVybihpbWFnZSwgZGVz
dFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1l
ZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5wYWludEZy
YW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPKQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3sKKyAgICBt
X3ByaW1hcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRT
bW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBT
dHJva2VTdHlsZSBzdHJva2VTdHlsZSkKQEAgLTQwNywxNiArMzM3LDkgQEAgdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihyZWN0LCBtYXJrZXJTdHlsZSk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVybCwgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3QpOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7Ci19Ci0KLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAogewotICAgIG1fcHJpbWFy
eUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOwotICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAgcmV0dXJu
IG1fcHJpbWFyeUNvbnRleHQuc3VwcG9ydHNJbnRlcm5hbExpbmtzKCk7CiB9CiAKIHZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCkBAIC00MjUsMTggKzM0OCwxNiBAQCB2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFkZERlc3RpbmF0
aW9uQXRQb2ludChuYW1lLCBwb2ludCk7CiB9CiAKLWJvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnN1cHBv
cnRzSW50ZXJuYWxMaW5rcygpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25G
b3JSZWN0KG5hbWUsIHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlv
bkZvclJlY3QobmFtZSwgcmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVybCwgY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIC8vIFRoaXMgY2FsbHMgdXBkYXRlU3RhdGUoKSBpbnN0ZWFk
IG9mIGRpZFVwZGF0ZVN0YXRlKCkgc28gdGhhdCBjaGFuZ2VzCi0gICAgLy8gYXJlIGFsc28gYXBw
bGllZCB0byBlYWNoIGNvbnRleHQncyBHcmFwaGljc0NvbnRleHRTdGF0ZSwgc28gdGhhdCBjb2Rl
Ci0gICAgLy8gaW50ZXJuYWwgdG8gdGhlIGNoaWxkIGNvbnRleHRzIHRoYXQgcmVhZHMgZnJvbSB0
aGUgc3RhdGUgZ2V0cyB0aGUgcmlnaHQgdmFsdWVzLgotICAgIG1fcHJpbWFyeUNvbnRleHQudXBk
YXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQudXBkYXRlU3Rh
dGUoc3RhdGUsIGZsYWdzKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJs
LCByZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3Qp
OwogfQogCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShDQUlSTykKQEAgLTQ0Niw1ICszNjcsMTAg
QEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnQKIH0KICNlbmRpZgogCitGbG9hdFJlY3QgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCit7CisgICAgcmV0dXJuIG1fcHJpbWFy
eUNvbnRleHQucm91bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAppbmRleCBmNThi
MzRjOTE0MzQyYjczNzc3MjdjMTFhNzNiNmQ4MjE4ZTE1NTZmLi43YTM3YTExM2RkODE1ZWIzYjk1
NjA3NTJkOWRjNzBlYjVhODk3YzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oCkBAIC00Myw4
MyArNDMsNTQgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7
CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZp
bmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWw7
CisjaWYgVVNFKENHKQorICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwor
ICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKIAotICAgIHZvaWQgZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7
Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKKyNlbmRpZgorICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwogCisgICAgdm9pZCBz
YXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0
YXRlQ2hhbmdlcygpIGZpbmFsOwogI2lmIFVTRShDRykKICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0
dGVybigpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwogI2VuZGlm
Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUGF0
aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbDsKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5h
bDsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5h
bDsKICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKLSAgICB2b2lkIGFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKLQotICAgIHVzaW5nIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwotCi0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotCi0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBj
b25zdCBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmlu
YWw7Ci0jZW5kaWYKLQotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZp
bmFsOwotCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQg
Y2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFs
OwogICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQogICAgIHZvaWQg
Y2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKIAot
ICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5P
ZGQpIGZpbmFsOwotCi0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0KLSAg
ICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHNldExp
bmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZp
bmFsOwotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0g
ICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFs
OwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWw7Ci0gICAg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKElt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIElt
YWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsK
KyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotI2lmIEVOQUJM
RShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotI2VuZGlmCisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNj
YWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCBy
b3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwotICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0IHgsIGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKKyAgICAKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
IGZpbmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVk
ZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZp
bmFsOworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKIAorICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRo
JikgZmluYWw7CisgICAgCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFs
OwogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTEyNywyMyArOTgsMjYgQEAgcHVibGljOgogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0
KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAgdm9pZCBk
cmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAs
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBmaW5hbDsKLSAgICB2
b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZv
bnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFsOworICAgIHZvaWQgZHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFs
OworICAgIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVz
dWx0cyYpIGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8p
CisgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKKyNlbmRpZgogCisgICAgdm9pZCBkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250
U21vb3RoaW5nTW9kZSkgZmluYWw7CiAgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7Ci0KICAgICB2
b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVS
TCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCi0gICAgdm9pZCBzZXREZXN0aW5hdGlvbkZv
clJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0
UG9pbnQmKSBmaW5hbDsKLQogICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAg
ICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIEZsb2F0UmVjdCBy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5k
QWxsU2lkZXMpIGZpbmFsOwogCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShDQUlSTykKICAgICBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgp
IGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IGJiNGRhYzAxOWM1Yjll
MTNiMTM3YWU2OTRlNGJmNmIyNzZiZmNjMGQuLjFjMWI5NmVjNWI5ODNjYzVmMThkNmZmMWZkMjU4
NTdmYTk0M2M0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKQEAgLTkwLDcgKzkwLDcgQEAg
dm9pZCBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhd0Nyb3NzZmFkZShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiBJbWFnZURyYXdSZXN1bHQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQp
OwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVN
b2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0p
OwogICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZShkc3RS
ZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlw
aHNSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBo
c1JlY29yZGVyLmgKaW5kZXggMjVhM2QzZmU4NzczMzFkZGEzOTU3ODAxMWI2ZDg5MGYyMTJjNzJl
Ni4uM2JjYjUwNWFmM2MyODJmNDIyMzI1Y2Q3ZTMwMDUzNGZkOWY5OWNiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiwyNCArMjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRl
ICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAjaW5j
bHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCi0jaWYgVVNF
KENPUkVfVEVYVCkKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5j
bHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8
cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KLSNlbHNlCi0jaW5jbHVkZSA8cGFsL3NwaS9j
Zi9Db3JlVGV4dFNQSS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9p
bnQ7CkBAIC02Miw3NiArNDksMzIgQEAgcHVibGljOgogI2lmIFVTRShDT1JFX1RFWFQpICYmICFQ
TEFURk9STShXSU4pCiAgICAgdm9pZCBkcmF3TmF0aXZlVGV4dChDVEZvbnRSZWYsIENHRmxvYXQg
Zm9udFNpemUsIENUTGluZVJlZiwgQ0dSZWN0IGxpbmVSZWN0KTsKIAotICAgIHZvaWQgcmVjb3Jk
QmVnaW5MYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0KTsKLSAg
ICB2b2lkIHJlY29yZEVuZExheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmKTsK
LSAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVS
ZWYsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBDR1Bv
aW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdl
KENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBDR1JlY3QsIENHSW1hZ2VSZWYpOwor
ICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR0dTdGF0ZVJlZik7CisgICAgdm9pZCByZWNvcmRF
bmRMYXllcihDR0dTdGF0ZVJlZik7CisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENHR1N0YXRl
UmVmLCBjb25zdCBDR0dseXBoW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBj
b3VudCk7CisgICAgdm9pZCByZWNvcmREcmF3SW1hZ2UoQ0dHU3RhdGVSZWYsIENHUmVjdCwgQ0dJ
bWFnZVJlZik7CiAjZW5kaWYKIAotICAgIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVj
dERyYXdHbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2RlY29uc3RydWN0RHJhd0dseXBoczsgfQot
CiBwcml2YXRlOgotI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAgVW5p
cXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7Ci0jZW5kaWYK
LQotICAgIHZvaWQgZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9u
dFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01v
ZGUpOwotICAgIHZvaWQgZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwotCi0g
ICAgdm9pZCBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
KTsKLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJik7Ci0gICAgdm9pZCBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmLCBG
b250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOwor
ICAgIHZvaWQgc2V0SW50ZXJuYWxGb250KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgcHJlcGFyZUludGVybmFsQ29udGV4dCgpOworICAg
IHZvaWQgcmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgb3JpZ2luYWxTdGF0ZSk7CiAKLSAgICB2b2lkIHVwZGF0ZUZpbGxDb2xvcihjb25zdCBDb2xv
ciYsIEdyYWRpZW50KiA9IG51bGxwdHIsIFBhdHRlcm4qID0gbnVsbHB0cik7Ci0gICAgdm9pZCB1
cGRhdGVTdHJva2VDb2xvcihjb25zdCBDb2xvciYsIEdyYWRpZW50KiA9IG51bGxwdHIsIFBhdHRl
cm4qID0gbnVsbHB0cik7Ci0gICAgdm9pZCB1cGRhdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jik7Ci0gICAgZW51bSBjbGFzcyBTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyB7Ci0gICAgICAgIFVu
c3BlY2lmaWVkLAotICAgICAgICBZZXMsCi0gICAgICAgIE5vCi0gICAgfTsKLSAgICB2b2lkIHVw
ZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1
ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0K
LSNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQotICAgIHZvaWQgdXBkYXRlU2hh
ZG93KENHU3R5bGVSZWYpOwotI2VuZGlmCisgICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3Qg
Rm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
LCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdPVFNWR1J1bihjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUp
OworICAgIHZvaWQgZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fb3duZXI7CisgICAgR3Jh
cGhpY3NDb250ZXh0JiBtX2Rlc3RpbmF0aW9uQ29udGV4dDsKICAgICBEZWNvbnN0cnVjdERyYXdH
bHlwaHMgbV9kZWNvbnN0cnVjdERyYXdHbHlwaHM7CiAgICAgRGVyaXZlRm9udEZyb21Db250ZXh0
IG1fZGVyaXZlRm9udEZyb21Db250ZXh0OwogCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRG
T1JNKFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4
dDsKLSNlbmRpZgotCiAgICAgY29uc3QgRm9udCogbV9vcmlnaW5hbEZvbnQgeyBudWxscHRyIH07
CiAgICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlIHsgRm9udFNtb290aGluZ01v
ZGU6OkF1dG9TbW9vdGhpbmcgfTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9vcmlnaW5hbFRleHRN
YXRyaXg7CiAKLSAgICBzdHJ1Y3QgU3RhdGUgewotICAgICAgICBzdHJ1Y3QgU3R5bGUgewotICAg
ICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRp
ZW50OwotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm07
Ci0gICAgICAgICAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybjsKLSAgICAgICAgfTsKLSAgICAg
ICAgU3R5bGUgZmlsbFN0eWxlOwotICAgICAgICBTdHlsZSBzdHJva2VTdHlsZTsKLQotICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotCi0gICAgICAgIHN0cnVjdCBTaGFkb3dTdGF0ZSB7Ci0g
ICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0OwotICAgICAgICAgICAgZmxvYXQgYmx1ciB7IDAg
fTsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAgICAgICAgYm9vbCBpZ25vcmVUcmFu
c2Zvcm1zIHsgZmFsc2UgfTsKLSAgICAgICAgfTsKLSAgICAgICAgU2hhZG93U3RhdGUgc2hhZG93
OwotICAgIH07Ci0gICAgU3RhdGUgbV9vcmlnaW5hbFN0YXRlOwotICAgIFN0YXRlIG1fY3VycmVu
dFN0YXRlOworI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAgVW5pcXVl
UmVmPEdyYXBoaWNzQ29udGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA4NTE4MGFkMTA5ZmQ4MThlOWJiMTU4OGNlOTYyYWI0
NjMwODE2YTA5Li4zNjExYjEyY2E5YWIyOWViOTIxZjIzMjVlMWY5NmQyOTUyNTNjN2NmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBA
IC0xOTksNyArMTk5LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4KIAogc3RkOjp1bmlxdWVf
cHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxh
eUxpc3RGb3JUZXh0UnVuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYg
cnVuLCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bywgQ3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikgY29uc3QKIHsKLSAgICBB
U1NFUlQoIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNv
bnRleHQsICFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSk7CiAgICAgdW5zaWduZWQgZGVzdGlu
YXRpb24gPSB0by52YWx1ZV9vcihydW4ubGVuZ3RoKCkpOwogICAgIAogICAgIC8vIEZJWE1FOiBV
c2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBr
ZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MApAQCAt
MjE0LDcgKzIxNCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNw
bGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlE
aXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpJbk1lbW9y
eURpc3BsYXlMaXN0PigpOwotICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgcmVjb3JkaW5n
Q29udGV4dCgqZGlzcGxheUxpc3QsIGNvbnRleHQuc3RhdGUoKSwgRmxvYXRSZWN0KCksIEFmZmlu
ZVRyYW5zZm9ybSgpLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6
Tm8pOworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgcmVjb3JkaW5nQ29udGV4dCgqZGlz
cGxheUxpc3QsIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgRHJhd0dseXBoc1JlY29y
ZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0
YXJ0UG9pbnQgPSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFs
QWR2YW5jZSgpKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBo
QnVmZmVyLCBzdGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAppbmRleCA2
NDU4NGU1Y2ZlMDExODgyZWZhYjJlMjNjM2E1OTRlMTc4MmYyODkwLi4yZjgyN2Y2MjVmNjRiNTlj
YTFhNjY0OTYwNzMwZjAzYzIzYmMzN2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcApAQCAtNDMsNyArNDMsNyBAQCBHcmFkaWVu
dEltYWdlOjp+R3JhZGllbnRJbWFnZSgpID0gZGVmYXVsdDsKIEltYWdlRHJhd1Jlc3VsdCBHcmFk
aWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsKLSAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsK
KyAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVy
YXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGRlc3RDb250ZXh0LmNsaXAoZGVz
dFJlY3QpOwogICAgIGRlc3RDb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsK
ICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpAQCAtNjIsNyArNjIs
NyBAQCB2b2lkIEdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZAogICAgIG1fZ3JhZGllbnQtPmFkanVzdFBhcmFt
ZXRlcnNGb3JUaWxlZERyYXdpbmcoYWRqdXN0ZWRTaXplLCBhZGp1c3RlZFNyY1JlY3QsIHNwYWNp
bmcpOwogCiAgICAgLy8gRmFjdG9yIGluIHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0J3Mgc2NhbGUg
dG8gZ2VuZXJhdGUgYXQgdGhlIGJlc3QgcmVzb2x1dGlvbgotICAgIEFmZmluZVRyYW5zZm9ybSBk
ZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmlu
aXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4
dENUTSA9IGRlc3RDb250ZXh0LmdldENUTSgpOwogICAgIGRvdWJsZSB4U2NhbGUgPSBmYWJzKGRl
c3RDb250ZXh0Q1RNLnhTY2FsZSgpKTsKICAgICBkb3VibGUgeVNjYWxlID0gZmFicyhkZXN0Q29u
dGV4dENUTS55U2NhbGUoKSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGFkanVzdGVkUGF0dGVybkNU
TSA9IHBhdHRlcm5UcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCAwYmIxMzU5N2NlYTczNjlkYmJjNmUx
NzI3ZjI2YzkyYjhmYjc1MTc2Li5jZjhjNzE4YjgxMmM3OTc5MWYyYmUzZWI3ZDhiZThkNTVhMmMz
M2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCiAjaW5j
bHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgpAQCAtMzYsNDczICszNSwzMTAgQEAKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGUuaCIKLSNpbmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJTeXN0ZW1JbWFnZS5oIgotI2luY2x1ZGUgIlRl
eHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0Qm94SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGV4dEJveEl0
ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBUZXh0Qm94SXRlcmF0b3IoKQotICAgICAgICA6IG1fdGV4
dFJ1bigwKQotICAgICAgICAsIG1fb2Zmc2V0KDApCi0gICAgewotICAgIH0KLQotICAgIFRleHRC
b3hJdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBvZmZzZXQpCi0gICAg
ICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAg
IHsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dDsgfQotICAgIHZvaWQgaW5jcmVtZW50KCkgeyBtX29mZnNldCsrOyB9Ci0gICAgYm9vbCBhdEVu
ZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHRSdW4gfHwgbV9vZmZzZXQgPj0gbV90ZXh0UnVuLT5s
ZW5ndGgoKTsgfQotICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoKm1fdGV4dFJ1
bilbbV9vZmZzZXRdOyB9Ci0gICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gYXRFbmQoKSA/IFVfT1RIRVJfTkVVVFJBTCA6IHVfY2hhckRpcmVjdGlvbihjdXJyZW50
KCkpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNl
dCAmJiBtX3RleHRSdW4gPT0gb3RoZXIubV90ZXh0UnVuOwotICAgIH0KLQotICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhb3Bl
cmF0b3I9PShvdGhlcik7IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBUZXh0UnVuKiBtX3RleHRS
dW47Ci0gICAgdW5zaWduZWQgbV9vZmZzZXQ7Ci19OwotCi0jZGVmaW5lIENIRUNLX0ZPUl9DSEFO
R0VEX1BST1BFUlRZKGZsYWcsIHByb3BlcnR5KSBcCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OmZsYWcpICYmIChtX3N0YXRlLnByb3BlcnR5ICE9
IHN0YXRlLnByb3BlcnR5KSkgXAotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OmZsYWcpOwotCi1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGUoKQotICAgIDogc2hvdWxkQW50aWFsaWFzKHRydWUpCi0gICAgLCBzaG91bGRTbW9vdGhG
b250cyh0cnVlKQotICAgICwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHRydWUpCi0gICAg
LCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkKLSAgICAsIGRyYXdMdW1pbmFuY2VNYXNr
KGZhbHNlKQorR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoY29uc3QgRmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZUZsYWdzJiBj
aGFuZ2VGbGFncywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQorICAgIDogbV9z
dGF0ZShpbml0aWFsQ2xpcCwgY2hhbmdlRmxhZ3MsIGluaXRpYWxDVE0pCiB7CiB9CiAKLUdyYXBo
aWNzQ29udGV4dFN0YXRlOjp+R3JhcGhpY3NDb250ZXh0U3RhdGUoKSA9IGRlZmF1bHQ7Ci1HcmFw
aGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJikgPSBkZWZhdWx0OwotR3JhcGhpY3NDb250
ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRleHRTdGF0ZSYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKSA9IGRlZmF1bHQ7
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIGZsYWdzKQorR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKIHsKLSAgICBh
dXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnNBbnkoc3Ryb2tlRmxhZ3MpKSB7Ci0gICAgICAgIHN0cm9rZUNvbG9yID0gc3RhdGUuc3Ryb2tl
Q29sb3I7Ci0gICAgICAgIHN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQ7Ci0g
ICAgICAgIHN0cm9rZVBhdHRlcm4gPSBzdGF0ZS5zdHJva2VQYXR0ZXJuOwotICAgIH0KLQotICAg
IGF1dG8gZmlsbEZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnko
ZmlsbEZsYWdzKSkgewotICAgICAgICBmaWxsQ29sb3IgPSBzdGF0ZS5maWxsQ29sb3I7Ci0gICAg
ICAgIGZpbGxHcmFkaWVudCA9IHN0YXRlLmZpbGxHcmFkaWVudDsKLSAgICAgICAgZmlsbFBhdHRl
cm4gPSBzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgc2hhZG93T2Zm
c2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICBzaGFkb3dCbHVyID0gc3RhdGUuc2hh
ZG93Qmx1cjsKLSAgICAgICAgc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKLSAgICAg
ICAgc2hhZG93UmFkaXVzTW9kZSA9IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7Ci0gICAgfQotCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25l
c3NDaGFuZ2UpKQotICAgICAgICBzdHJva2VUaGlja25lc3MgPSBzdGF0ZS5zdHJva2VUaGlja25l
c3M7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHRE
cmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIHRleHREcmF3aW5nTW9kZSA9IHN0YXRlLnRleHRE
cmF3aW5nTW9kZTsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBzdHJva2VTdHlsZSA9IHN0YXRlLnN0cm9r
ZVN0eWxlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGZpbGxSdWxlID0gc3RhdGUuZmlsbFJ1bGU7CisgICAg
QVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5TGF5
ZXJDb3VudCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgYWxwaGEgPSBzdGF0ZS5hbHBoYTsKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzYXZlKCkKK3sKKyAgICBtX3N0YWNrLmFwcGVuZChtX3N0YXRlKTsKK30K
IAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21w
b3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFu
Z2UgfSkpIHsKLSAgICAgICAgY29tcG9zaXRlT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsKLSAgICAgICAgYmxlbmRNb2RlID0gc3RhdGUuYmxlbmRNb2RlOwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJlc3RvcmUoKQoreworICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgeworICAg
ICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3Rh
Y2sgaXMgZW1wdHkiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAg
ICAgICAgc2hvdWxkQW50aWFsaWFzID0gc3RhdGUuc2hvdWxkQW50aWFsaWFzOworICAgIG1fc3Rh
dGUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgbV9sYXN0QXBwbGllZFN0YXRlID0gc3RkOjpu
dWxsb3B0OwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gc3Rh
dGUuc2hvdWxkU21vb3RoRm9udHM7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAg
IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250czsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSBkZWFsbG9jYXRlIHRoZSBzdGF0ZSBzdGFjayBidWZmZXIgd2hlbiBpdCBnb2VzIGVtcHR5
LgorICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2Fpbiwg
YnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KKyAgICBpZiAobV9zdGFjay5pc0Vt
cHR5KCkpCisgICAgICAgIG1fc3RhY2suY2xlYXIoKTsKK30KIAotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpKQotICAg
ICAgICBkcmF3THVtaW5hbmNlTWFzayA9IHN0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRpZEFwcGx5U3RhdGVDaGFuZ2VzKCkKK3sKKyAgICBtX3N0YXRlLmRp
ZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgbV9sYXN0QXBwbGllZFN0YXRlID0gbV9zdGF0ZTsK
K30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIGltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkgPSBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OworRmxvYXRTaXplIEdyYXBo
aWNzQ29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICByZXR1cm4gRmxvYXRTaXplKHRyYW5zZm9ybS54U2Nh
bGUoKSwgdHJhbnNmb3JtLnlTY2FsZSgpKTsKK30KKyAgICAKK0Zsb2F0U2l6ZSBHcmFwaGljc0Nv
bnRleHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRy
YW5zZm9ybSA9IGdldENUTSgpOworICAgIGF1dG8gdHJhbnNmb3JtZWREZXN0UmVjdCA9IHRyYW5z
Zm9ybS5tYXBSZWN0KGRlc3RSZWN0KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtZWREZXN0UmVjdC5z
aXplKCkgLyBzcmNSZWN0LnNpemUoKTsKK30KIAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJr
QXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIHVzZURhcmtBcHBlYXJhbmNlID0gc3RhdGUudXNl
RGFya0FwcGVhcmFuY2U7Ci0jZW5kaWYKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0KQoreworICAgICsrbV90cmFuc3BhcmVuY3lMYXllckNvdW50Owog
fQogCi1HcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKQogewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5n
ZUZsYWdzOworICAgIEFTU0VSVChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsKKyAgICAt
LW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKK30KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BS
T1BFUlRZKFN0cm9rZUdyYWRpZW50Q2hhbmdlLCBzdHJva2VHcmFkaWVudCk7Ci0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlUGF0dGVybkNoYW5nZSwgc3Ryb2tlUGF0dGVybik7
Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbEdyYWRpZW50Q2hhbmdlLCBmaWxs
R3JhZGllbnQpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxQYXR0ZXJuQ2hh
bmdlLCBmaWxsUGF0dGVybik7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgbV9zdGF0ZS5jbGlwKHJlY3QpOworfQogCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkK
LSAgICAgICAgJiYgKG1fc3RhdGUuc2hhZG93T2Zmc2V0ICE9IHN0YXRlLnNoYWRvd09mZnNldAot
ICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dCbHVyICE9IHN0YXRlLnNoYWRvd0JsdXIKLSAg
ICAgICAgICAgIHx8IG1fc3RhdGUuc2hhZG93Q29sb3IgIT0gc3RhdGUuc2hhZG93Q29sb3IpKQot
ICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5n
ZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUpCit7CisgICAgbV9zdGF0ZS5jbGlwKHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKTsKK30K
IAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVRoaWNrbmVzc0NoYW5nZSwg
c3Ryb2tlVGhpY2tuZXNzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShUZXh0RHJh
d2luZ01vZGVDaGFuZ2UsIHRleHREcmF3aW5nTW9kZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURf
UFJPUEVSVFkoU3Ryb2tlQ29sb3JDaGFuZ2UsIHN0cm9rZUNvbG9yKTsKLSAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShGaWxsQ29sb3JDaGFuZ2UsIGZpbGxDb2xvcik7Ci0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlU3R5bGVDaGFuZ2UsIHN0cm9rZVN0eWxlKTsKLSAg
ICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsUnVsZUNoYW5nZSwgZmlsbFJ1bGUpOwot
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEFscGhhQ2hhbmdlLCBhbHBoYSk7Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7
CisgICAgY2xpcFBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
c0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkKLSAgICAgICAgJiYgKG1fc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3IgIT0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgfHwgbV9zdGF0
ZS5ibGVuZE1vZGUgIT0gc3RhdGUuYmxlbmRNb2RlKSkgewotICAgICAgICBjaGFuZ2VGbGFncy5h
ZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSk7Ci0gICAg
ICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdl
KTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKKyAgICAg
ICAgY2xpcE91dChyZWN0LnJlY3QoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBD
SEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNob3VsZEFu
dGlhbGlhcyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21vb3RoRm9u
dHNDaGFuZ2UsIHNob3VsZFNtb290aEZvbnRzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9Q
RVJUWShTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UsIHNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXNDaGFuZ2UsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBDSEVDS19G
T1JfQ0hBTkdFRF9QUk9QRVJUWShEcmF3THVtaW5hbmNlTWFza0NoYW5nZSwgZHJhd0x1bWluYW5j
ZU1hc2spOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHlDaGFuZ2UsIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotCi0jaWYgSEFWRShP
U19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShVc2VE
YXJrQXBwZWFyYW5jZUNoYW5nZSwgdXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlmCi0KLSAgICBy
ZXR1cm4gY2hhbmdlRmxhZ3M7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJl
Y3QocmVjdCk7CisgICAgY2xpcE91dChwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9zdGF0ZS5tZXJnZUNo
YW5nZXMoc3RhdGUsIGZsYWdzKTsKLQotICAgIGF1dG8gc3Ryb2tlRmxhZ3MgPSB7IEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUdyYWRpZW50Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNo
YW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShzdHJva2VGbGFncykpCi0gICAgICAg
IG1fY2hhbmdlRmxhZ3MucmVtb3ZlKHN0cm9rZUZsYWdzKTsKLQotICAgIGF1dG8gZmlsbEZsYWdz
ID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBh
dHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoZmlsbEZsYWdzKSkKLSAg
ICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoZmlsbEZsYWdzKTsKLQotICAgIGF1dG8gY29tcG9z
aXRlT3BlcmF0b3JGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJh
dGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9OwotICAg
IGlmIChmbGFncy5jb250YWluc0FueShjb21wb3NpdGVPcGVyYXRvckZsYWdzKSkKLSAgICAgICAg
bV9jaGFuZ2VGbGFncy5yZW1vdmUoY29tcG9zaXRlT3BlcmF0b3JGbGFncyk7Ci0KLSAgICBtX2No
YW5nZUZsYWdzLmFkZChmbGFncyk7CisgICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywg
ZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b21wb3NpdGVPcGVyYXRvciBvcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VHcmFkaWVudCgqbV9zdGF0
ZS5zdHJva2VHcmFkaWVudCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsK
LQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCpt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpCi0gICAgICAgIGNvbnRl
eHQuc2V0RmlsbEdyYWRpZW50KCptX3N0YXRlLmZpbGxHcmFkaWVudCwgbV9zdGF0ZS5maWxsR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKQotICAgICAgICBjb250ZXh0
LnNldEZpbGxQYXR0ZXJuKCptX3N0YXRlLmZpbGxQYXR0ZXJuKTsKLQotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
bV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKLSAgICAgICAg
Y29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1
ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsKLQotICAg
IGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAgYXV0byBwcmV2aW91c0NvbXBvc2l0ZU1vZGUgPSBj
b21wb3NpdGVNb2RlKCk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5z
ZXRUZXh0RHJhd2luZ01vZGUobV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwotCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hh
bmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihtX3N0YXRlLnN0cm9rZUNvbG9y
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3N0YXRl
LmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9r
ZVN0eWxlKG1fc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgY29u
dGV4dC5zZXRGaWxsUnVsZShtX3N0YXRlLmZpbGxSdWxlKTsKLQotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAg
IGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpCi0gICAgICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3Is
IG1fc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBjb250
ZXh0LnNldFNob3VsZEFudGlhbGlhcyhtX3N0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci0KLSAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21v
b3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFNob3VsZFNtb290aEZvbnRzKG1f
c3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5n
ZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKG1fc3Rh
dGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSkp
Ci0gICAgICAgIGNvbnRleHQuc2V0RHJhd0x1bWluYW5jZU1hc2sobV9zdGF0ZS5kcmF3THVtaW5h
bmNlTWFzayk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIGNvbnRl
eHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkpOwotCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFu
Y2VDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFVzZURhcmtBcHBlYXJhbmNlKG1fc3RhdGUu
dXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlmCisgICAgc2V0Q29tcG9zaXRlTW9kZSh7IG9wZXJh
dGlvbiwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBzZXRD
b21wb3NpdGVNb2RlKHByZXZpb3VzQ29tcG9zaXRlTW9kZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3Jh
ZGllbnQpCiB7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjaGFuZ2UtZmxhZ3MiLCBtX2NoYW5nZUZs
YWdzLnRvUmF3KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpKTsKLQot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtcGF0dGVy
biIsIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWdyYWRpZW50IiwgbV9zdGF0ZS5maWxsR3JhZGll
bnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJm
aWxsLXBhdHRlcm4iLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKTsKKyAgICBncmFkaWVudC5m
aWxsKCp0aGlzLCByZWN0KTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRvd0JsdXIpOwotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRlLnNoYWRvd09mZnNldCk7Ci0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWNvbG9yIiwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyIsIG1fc3Rh
dGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgaWYg
KCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xv
ciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CisgICAgICAgIAorICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBj
b21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICBzZXRDb21wb3NpdGVNb2RlKHsgcHJldmlvdXNPcGVy
YXRvciwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7Cisg
ICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOworfQogCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNr
bmVzc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXRoaWNrbmVzcyIs
IG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInRleHQtZHJhd2luZy1tb2RlIiwgbV9zdGF0ZS50ZXh0RHJhd2lu
Z01vZGUudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoInN0cm9rZS1jb2xvciIsIG1fc3RhdGUuc3Ryb2tlQ29sb3IpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3RhdGUuZmlsbENvbG9y
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXN0
eWxlIiwgbV9zdGF0ZS5zdHJva2VTdHlsZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBQYXRo
IHBhdGg7CisgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJmaWxsLXJ1bGUiLCBtX3N0YXRlLmZpbGxSdWxlKTsKKyAgICBpZiAo
IXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVybygpKQorICAgICAgICBwYXRoLmFkZFJvdW5k
ZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7CisgICAgZWxzZQorICAgICAgICBwYXRoLmFkZFJlY3Qo
cm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoImFscGhhIiwgbV9zdGF0ZS5hbHBoYSk7CisgICAgV2luZFJ1bGUgb2xkRmlsbFJ1bGUg
PSBmaWxsUnVsZSgpOworICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOworICAg
IAorICAgIHNldEZpbGxSdWxlKFdpbmRSdWxlOjpFdmVuT2RkKTsKKyAgICBzZXRGaWxsQ29sb3Io
Y29sb3IpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY29tcG9zaXRlLW9wZXJhdG9yIiwgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvcik7CisgICAg
ZmlsbFBhdGgocGF0aCk7CisgICAgCisgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOworICAg
IHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIG1fc3RhdGUuYmxlbmRNb2RlKTsKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlw
c2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKKyAg
ICBmaWxsUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoInNob3VsZC1hbnRpYWxpYXMiLCBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyk7
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBzZShlbGxp
cHNlKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkK
LSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtc21vb3RoLWZvbnRzIiwgbV9zdGF0ZS5z
aG91bGRTbW9vdGhGb250cyk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IpCit7CisgICAgYXV0byBvbGRGaWxsQ29sb3IgPSBmaWxsQ29s
b3IoKTsKKyAgICBhdXRvIG9sZFN0cm9rZUNvbG9yID0gc3Ryb2tlQ29sb3IoKTsKIAotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3Vs
ZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsIG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKTsKKyAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOworICAgIHNldFN0cm9rZUNv
bG9yKHNoYWRvd0NvbG9yKTsKKyAgICBkcmF3RWxsaXBzZShGbG9hdFJlY3QocmVjdC54KCksIHJl
Y3QueSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvd3MtaWdub3Jl
LXRyYW5zZm9ybXMiLCBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBzZXRG
aWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBzZXRTdHJva2VDb2xvcihlbGxpcHNlQ29sb3Ip
OworICAgIGRyYXdFbGxpcHNlKHJlY3QpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJkcmF3LWx1bWluYW5jZS1tYXNrIiwgbV9zdGF0ZS5kcmF3THVt
aW5hbmNlTWFzayk7CisgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7CisgICAgc2V0U3Ry
b2tlQ29sb3Iob2xkU3Ryb2tlQ29sb3IpOworfQogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInVz
ZS1kYXJrLWFwcGVhcmFuY2UiLCBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlKTsKLSNlbmRpZgor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAg
ZmlsbFBhdGgocGF0aCk7CisgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmIHN0YXRlQ2hhbmdlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgc3RhdGVD
aGFuZ2UuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOworICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFn
ZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0
KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAot
R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudCk7CisgICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5h
dGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdP
cHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YWNrLmFwcGVuZChtX3N0YXRlKTsK
KyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAg
aW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxv
YXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBh
aW50aW5nT3B0aW9ucykKIHsKLSAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlz
IGVtcHR5Iik7CisgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fc3RhdGUgPSBtX3N0YWNrLmxhc3QoKTsKLSAgICBtX3N0YWNrLnJlbW92ZUxhc3QoKTsKLQot
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZWFsbG9jYXRlIHRoZSBzdGF0ZSBzdGFjayBidWZmZXIgd2hl
biBpdCBnb2VzIGVtcHR5LgotICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5
IHNhdmUoKSBhZ2FpbiwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KLSAgICBp
ZiAobV9zdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhY2suY2xlYXIoKTsKKyAgICBhdXRv
IGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1h
Z2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1p
bmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09w
dGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5tZXJnZUNoYW5nZXMoc3RhdGUsIGZsYWdzKTsKLSAgICBk
aWRVcGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsK
KyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIGRlc3RpbmF0aW9u
LCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hh
ZG93Q29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKLSAgICBzYXZlKCk7Ci0KLSAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7
Ci0gICAgc2V0RmlsbENvbG9yKHNoYWRvd0NvbG9yKTsKLQotICAgIGRyYXdFbGxpcHNlKEZsb2F0
UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
KTsKLQotICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xvcik7Ci0gICAgc2V0RmlsbENvbG9y
KGVsbGlwc2VDb2xvcik7Ci0KLSAgICBkcmF3RWxsaXBzZShyZWN0KTsgIAotCi0gICAgcmVzdG9y
ZSgpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRlcnBvbGF0aW9u
UXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMs
IG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgSW1hZ2VCdWZmZXI6OmRyYXdD
b25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKIHsKLSAgICBtX3N0
YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51
bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2Up
OworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFn
ZVJlY3QsIHJlc3VsdHMpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAo
IWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBzY2FsZSh7IDEgLyBmaWx0ZXIu
ZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkg
fSk7CisgICAgZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgcmVzdWx0LT5hYnNvbHV0ZUlt
YWdlUmVjdCgpKTsKKyAgICBzY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hhZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlKQor
SW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9m
ZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwotICAgIG1fc3RhdGUuc2hhZG93
Q29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSByYWRpdXNNb2Rl
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpOworICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5h
dGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgp
KSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJTaGFkb3coKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUuc2hhZG93
T2Zmc2V0ID0gRmxvYXRTaXplKCk7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsKLSAgICBt
X3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKLSAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01v
ZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOworICAgIEZsb2F0UmVjdCBz
cmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmll
bnRhdGlvbigpKSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNy
Y1JlY3QsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6
OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJsdXIsIENvbG9yJiBjb2xvcikg
Y29uc3QKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBvZmZzZXQg
PSBtX3N0YXRlLnNoYWRvd09mZnNldDsKLSAgICBibHVyID0gbV9zdGF0ZS5zaGFkb3dCbHVyOwot
ICAgIGNvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKLQotICAgIHJldHVybiBoYXNTaGFkb3co
KTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxp
dHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Cisg
ICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2lu
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3Rh
dGUuZmlsbENvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRy
OwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOworICAgIElu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNT
Y29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1cm4g
aW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3Bh
Y2luZywgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0
ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwKKyAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVs
ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5z
dHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsK
LSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKTsKKyAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IElt
YWdlOjpTdHJldGNoVGlsZSkgeworICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCisgICAgICAg
IHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwor
ICAgIH0KKworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9u
UXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgp
KTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNl
LCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRv
cigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0
ZXJuPiYmIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5
c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
CiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGll
bnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4p
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
UGF0dGVybkNoYW5nZSk7CisgICAgc3lzdGVtSW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb25S
ZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxH
cmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVu
dFNwYWNlVHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdl
QnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0g
eyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKLSAg
ICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNw
YWNlVHJhbnNmb3JtOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRp
ZW50Q2hhbmdlKTsKKyAgICBpbWFnZS5kcmF3UGF0dGVybigqdGhpcywgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRp
ZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQor
I2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsK
LSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9
IFdURk1vdmUoZ3JhZGllbnQpOwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0gPSBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX3N0YXRlLmZpbGxQYXR0ZXJu
ID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKTsKLSAgICAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRl
cm4/CisgICAgcGxheWVyLnBsYXllclByaXZhdGUoKS0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRl
eHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
Z01vZGUpCiB7Ci0gICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CisgICAgRm9udENhc2Nh
ZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
cG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzQW5k
Q2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
Z01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApOwotICAg
IC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworICAgIGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiBG
bG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQg
ZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCkBAIC01MTEsMTEgKzM0Nyw2IEBAIEZs
b2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1
biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
LXsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZh
bmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwotfQotCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvKQog
ewogICAgIGZvbnQuZHJhd0VtcGhhc2lzTWFya3MoKnRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZy
b20sIHRvKTsKQEAgLTU0OSw3ICszODAsNDUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdC
aWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAg
ICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwogICAgIH0KIAotICAgIGJpZGlSdW5zLmNs
ZWFyKCk7CisgICAgYmlkaVJ1bnMuY2xlYXIoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5bGUpCit7CisgICAgZHJhd0xpbmVz
Rm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJl
Y3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOworfQorCitG
bG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcpCit7CisgICAgQ29sb3IgZHVtbXlD
b2xvcjsKKyAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9y
VGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xvcik7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCit7CisgICAg
RmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7CisgICAgZmxvYXQgdGhpY2tuZXNz
ID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7CisgICAgaWYgKHByaW50aW5nKQorICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhp
Y2tuZXNzKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7Cisg
ICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5
IHNjYWxlcyBhcmUgZXF1YWwuCisgICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3Rk
OjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7Cisg
ICAgaWYgKHNjYWxlIDwgMS4wKSB7CisgICAgICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3Mg
YSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxpbmUgaGlnaCwKKyAgICAgICAgLy8g
d2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBU
byBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8gZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRv
IHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KKyAgICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA9IDAuNGY7CisgICAg
ICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6
IG1pbmltdW1VbmRlcmxpbmVBbHBoYTsKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeShzaGFkZSk7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBkZXZpY2VQ
b2ludCA9IHRyYW5zZm9ybS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIC8vIFZpc3Vh
bCBvdmVyZmxvdyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYu
IHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUg
Zm9yIHVuZGVybGluZSBkZWNvcmF0aW9uLgorICAgIEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0g
RmxvYXRQb2ludChyb3VuZGYoZGV2aWNlUG9pbnQueCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgp
KSk7CisgICAgaWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCkpCisgICAgICAg
IG9yaWdpbiA9IGludmVyc2UudmFsdWUoKS5tYXBQb2ludChkZXZpY2VPcmlnaW4pOworICAgIHJl
dHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3Mp
KTsKIH0KIAogc3RhdGljIEludFNpemUgc2NhbGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKQEAgLTYzOSwxODcgKzUwOCw5IEBA
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVBbGlnbmVkSW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRSZWN0JiByCiAgICAgcmV0dXJuIGNyZWF0ZVNjYWxlZEltYWdlQnVm
ZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUoKSwgcmVu
ZGVyaW5nTWV0aG9kKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFn
ZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KQotewotICAgIHN5c3RlbUltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7Ci19
Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShpbWFn
ZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdl
RHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCks
IGltYWdlLnNpemUoaW1hZ2VQYWludGluZ09wdGlvbnMub3JpZW50YXRpb24oKSkpOwotICAgIHJl
dHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzcmNSZWN0LCBpbWFnZVBhaW50aW5n
T3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAg
ICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JU
aGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0
dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQot
Ci1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRo
aXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRy
YXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9w
dGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKLSAgICBJ
bWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJl
dGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKLSAgICAgICAgLy8gSnVz
dCBkbyBhIHNjYWxlLgotICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKLSAgICB9Ci0KLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMu
aW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhp
cywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9w
dGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25z
KQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBp
bWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSks
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsK
LSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBp
bWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9u
cy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdD
b25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9h
dFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFp
bnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBh
dXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKLSAgICBkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwg
aW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFn
ZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIGlt
YWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKLSAgICBkcmF3Q29uc3VtaW5n
SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBp
bWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm47Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwotICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUo
aW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291
cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRl
ciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKLXsKLSAgICBhdXRvIHJlc3VsdCA9IGZpbHRlci5h
cHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCByZXN1bHRzKTsKLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSByZXN1
bHQtPmltYWdlQnVmZmVyKCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZp
bHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOwotICAgIGRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7Ci0gICAgc2NhbGUoZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4o
SW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlLmRyYXdQYXR0ZXJu
KCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFj
aW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBw
YXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAgIGNsaXBQYXRoKHBhdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7Ci0gICAgICAgIGNsaXBP
dXQocmVjdC5yZWN0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGF0aCBwYXRo
OwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcE91dChwYXRoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgaW1h
Z2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKLX0KLQotSW50UmVj
dCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkK
LXsKLSAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBDb21w
b3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0g
ICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotICAgIGZpbGxSZWN0KHJl
Y3QsIGNvbG9yKTsKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotewotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKSB7Ci0gICAgICAgIHNldENvbXBvc2l0ZU9w
ZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKLSAgICAgICAgZmlsbFJv
dW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlv
bihjb21wb3NpdGVPcGVyYXRpb24oKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZpbGxSZWN0KHJl
Y3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJlY3QocmVj
dCk7Ci0KLSAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVybygpKQotICAgICAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7Ci0gICAgZWxzZQotICAgICAg
ICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAgICBXaW5kUnVsZSBv
bGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7Ci0gICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENv
bG9yKCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHNl
dEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBmaWxsUGF0aChwYXRoKTsKLSAgICAKLSAgICBzZXRG
aWxsUnVsZShvbGRGaWxsUnVsZSk7Ci0gICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7Ci19
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAg
IG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247Ci0gICAgbV9z
dGF0ZS5ibGVuZE1vZGUgPSBibGVuZE1vZGU7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSk7Ci19CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2lu
dCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVu
U3R5bGUpCiB7CkBAIC04NTAsNzcgKzU0MSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1
c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyCiAg
ICAgfQogfQogCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0
Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRl
eHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIHJldHVybiBGbG9hdFNpemUo
dHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOwotfQotICAgIAotRmxvYXRT
aXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVs
eUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byB0cmFuc2Zvcm1lZERlc3RSZWN0ID0gdHJh
bnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0
LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBmaWxsUGF0aChwYXRoKTsKLSAgICBzdHJv
a2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1Bh
dGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRo
LmFkZEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2UpOwotICAg
IHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
clRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVu
ZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIGRyYXdMaW5lc0ZvclRleHQocmVj
dC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkg
fSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0eWxlKTsKLX0KLQotRmxvYXRSZWN0IEdy
YXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBib29sIHByaW50aW5nKQotewotICAgIENvbG9yIGR1bW15Q29sb3I7Ci0gICAg
cmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQocmVjdCwg
cHJpbnRpbmcsIGR1bW15Q29sb3IpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpj
b21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgYm9vbCBwcmludGluZywgQ29sb3ImIGNvbG9yKQotewotICAgIEZsb2F0UG9pbnQg
b3JpZ2luID0gcmVjdC5sb2NhdGlvbigpOwotICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0ZDo6bWF4
KHJlY3QuaGVpZ2h0KCksIDAuNWYpOwotICAgIGlmIChwcmludGluZykKLSAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOwot
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6
OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIC8vIEp1c3QgY29tcHV0ZSBzY2Fs
ZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcgeCBhbmQgeSBzY2FsZXMgYXJlIGVxdWFsLgotICAg
IGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLmIoKSA/IHN0ZDo6aHlwb3QodHJhbnNmb3JtLmEoKSwg
dHJhbnNmb3JtLmIoKSkgOiB0cmFuc2Zvcm0uYSgpOwotICAgIGlmIChzY2FsZSA8IDEuMCkgewot
ICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRyYXdzIGEgbGluZSB0aGF0IGlzIGF0IGxlYXN0
IG9uZS1waXhlbCBsaW5lIGhpZ2gsCi0gICAgICAgIC8vIHdoaWNoIHRlbmRzIHRvIHZpc3VhbGx5
IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxlcy4gVG8gY291bnRlciB0aGlzCi0gICAgICAg
IC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGllZCB0byB0aGUgdW5kZXJsaW5lIGNvbG9yIHdo
ZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMuCi0gICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBt
aW5pbXVtVW5kZXJsaW5lQWxwaGEgPSAwLjRmOwotICAgICAgICBmbG9hdCBzaGFkZSA9IHNjYWxl
ID4gbWluaW11bVVuZGVybGluZUFscGhhID8gc2NhbGUgOiBtaW5pbXVtVW5kZXJsaW5lQWxwaGE7
Ci0gICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoc2hhZGUp
OwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0ubWFwUG9p
bnQocmVjdC5sb2NhdGlvbigpKTsKLSAgICAvLyBWaXN1YWwgb3ZlcmZsb3cgbWlnaHQgb2NjdXIg
aGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxPdmVyZmxvd0ZvckRlY29y
YXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRlcmxpbmUgZGVjb3JhdGlv
bi4KLSAgICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRmKGRldmlj
ZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOwotICAgIGlmIChhdXRvIGludmVy
c2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQotICAgICAgICBvcmlnaW4gPSBpbnZlcnNlLnZhbHVl
KCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwg
RmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNz
Q29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tl
V2lkdGgpIGNvbnN0CiB7CiAgICAgZmxvYXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7
CkBAIC05NzIsMTUgKzU5Miw0IEBAIFZlY3RvcjxGbG9hdFBvaW50PiBHcmFwaGljc0NvbnRleHQ6
OmNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0dXJu
IHsgcG9pbnQxLCBwb2ludDIgfTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5w
YWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwotfQotI2VuZGlm
Ci0KLXZvaWQgTnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBmYjk1ZGQyNWIy
NzFkZWI5ZmE4NWZmMmQ5ZjFmNzQ3MTZhMDY2YmFlLi5iMzljZDgyNDgwMGE5NDI3MzFmNzc0YWJk
MGE5OGNkZmJhNzRmOGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTMwLDQ5ICszMCwxOCBAQAogI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAj
aW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIAotI2lm
IFVTRShDRykKLXR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDsKLSNlbGlmIFVTRShDQUlSTykKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dENhaXJvOwotfQotdHlwZWRlZiBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybyBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbHNlCi10eXBlZGVmIHZvaWQgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJESUJQ
aXhlbERhdGEuaCIKLXR5cGVkZWYgc3RydWN0IEhEQ19fKiBIREM7Ci0jaWYgIVVTRShDRykKLS8v
IFVJbnQ4IGlzIGRlZmluZWQgaW4gQ29yZUZvdW5kYXRpb24vQ0ZCYXNlLmgKLXR5cGVkZWYgdW5z
aWduZWQgY2hhciBVSW50ODsKLSNlbmRpZgotI2VuZGlmCi0KLS8vIFgxMSBoZWFkZXJzIGRlZmlu
ZSBhIGJ1bmNoIG9mIG1hY3JvcyB3aXRoIGNvbW1vbiB0ZXJtcywgaW50ZXJmZXJpbmcgd2l0aCBX
ZWJDb3JlIGFuZCBXVEYgZW51bSB2YWx1ZXMuCi0vLyBBcyBhIHdvcmthcm91bmQsIHdlIGV4cGxp
Y2l0bHkgdW5kZWYgdGhlbSBoZXJlLgotI2lmIGRlZmluZWQoTm9uZSkKLSN1bmRlZiBOb25lCi0j
ZW5kaWYKLSNpZiBkZWZpbmVkKEJlbG93KQotI3VuZGVmIEJlbG93Ci0jZW5kaWYKLSNpZiBkZWZp
bmVkKFN1Y2Nlc3MpCi0jdW5kZWYgU3VjY2VzcwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwpAQCAtODIsNyArNTEsNiBAQCBjbGFzcyBGbG9h
dFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEludFJlY3Q7CiBjbGFzcyBN
ZWRpYVBsYXllcjsKIGNsYXNzIFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0R0w7
CkBAIC05MSwxNzQgKzU5LDEyIEBAIGNsYXNzIFN5c3RlbUltYWdlOwogY2xhc3MgVGV4dFJ1bjsK
IGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCi1uYW1lc3BhY2UgRGlzcGxheUxpc3Qgewot
Y2xhc3MgUmVjb3JkZXI7Ci19Ci0KLWVudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhf
dCB7Ci0gICAgRmlsbCA9IDEgPDwgMCwKLSAgICBTdHJva2UgPSAxIDw8IDEsCi19OwotdXNpbmcg
VGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2RlPjsKLQotLy8g
TGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0
LWJveC1zaGFkb3cuCi0vLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhw
eC4KLWVudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgewotICAgIERlZmF1bHQsCi0g
ICAgTGVnYWN5Ci19OwotCi1lbnVtIFN0cm9rZVN0eWxlIHsKLSAgICBOb1N0cm9rZSwKLSAgICBT
b2xpZFN0cm9rZSwKLSAgICBEb3R0ZWRTdHJva2UsCi0gICAgRGFzaGVkU3Ryb2tlLAotICAgIERv
dWJsZVN0cm9rZSwKLSAgICBXYXZ5U3Ryb2tlLAotfTsKLQotc3RydWN0IERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHsKLSAgICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKLSAgICAgICAgVGV4
dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKLSAgICAgICAgU3BlbGxp
bmcsCi0gICAgICAgIEdyYW1tYXIsCi0gICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQs
Ci0gICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcwotICAgIH0gbW9kZTsKLSAgICBib29sIHNo
b3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2UgfTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVj
b2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAg
ICBlbmNvZGVyIDw8IG1vZGU7Ci0gICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5j
ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8RG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7Ci0gICAgZGVjb2RlciA+
PiBtb2RlOwotICAgIGlmICghbW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgZGVj
b2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLSAgICBpZiAoIXNob3VsZFVzZURhcmtB
cHBlYXJhbmNlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7
ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfX07Ci19Ci0KLXN0cnVjdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGlj
c0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiYpOwotCi0gICAgZW51bSBDaGFuZ2UgOiB1aW50MzJfdCB7Ci0gICAgICAgIFN0
cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKLSAgICAgICAg
U3Ryb2tlUGF0dGVybkNoYW5nZSAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxLAotICAgICAg
ICBGaWxsR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDIsCi0gICAg
ICAgIEZpbGxQYXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywKLSAg
ICAgICAgU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCA0LAot
ICAgICAgICBTdHJva2VDb2xvckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDUs
Ci0gICAgICAgIFN0cm9rZVN0eWxlQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwg
NiwKLSAgICAgICAgRmlsbENvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCA3LAotICAgICAgICBGaWxsUnVsZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAx
IDw8IDgsCi0gICAgICAgIFNoYWRvd0NoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgOSwKLSAgICAgICAgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UgICAgICAgICAg
ID0gMSA8PCAxMCwKLSAgICAgICAgQWxwaGFDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMSA8PCAxMSwKLSAgICAgICAgQ29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlICAgICAgICAg
ICAgICAgID0gMSA8PCAxMiwKLSAgICAgICAgQmxlbmRNb2RlQ2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMSA8PCAxMywKLSAgICAgICAgVGV4dERyYXdpbmdNb2RlQ2hhbmdlICAgICAg
ICAgICAgICAgICAgID0gMSA8PCAxNCwKLSAgICAgICAgU2hvdWxkQW50aWFsaWFzQ2hhbmdlICAg
ICAgICAgICAgICAgICAgID0gMSA8PCAxNSwKLSAgICAgICAgU2hvdWxkU21vb3RoRm9udHNDaGFu
Z2UgICAgICAgICAgICAgICAgID0gMSA8PCAxNiwKLSAgICAgICAgU2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzQ2hhbmdlICAgICAgID0gMSA8PCAxNywKLSAgICAgICAgRHJhd0x1bWluYW5jZU1h
c2tDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAxOCwKLSAgICAgICAgSW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZSAgICAgICAgID0gMSA8PCAxOSwKLSNpZiBIQVZFKE9TX0RBUktf
TU9ERV9TVVBQT1JUKQotICAgICAgICBVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSAgICAgICAgICAg
ICAgICAgPSAxIDw8IDIwLAotI2VuZGlmCi0gICAgfTsKLSAgICB1c2luZyBTdGF0ZUNoYW5nZUZs
YWdzID0gT3B0aW9uU2V0PENoYW5nZT47Ci0KLSAgICB2b2lkIG1lcmdlQ2hhbmdlcyhjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKTsKLQotICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQ7Ci0gICAgUmVmUHRy
PFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47Ci0gICAgCi0gICAgUmVmUHRyPEdyYWRpZW50PiBmaWxs
R3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+IGZpbGxQYXR0ZXJuOwotCi0gICAgRmxvYXRT
aXplIHNoYWRvd09mZnNldDsKLQotICAgIENvbG9yIHN0cm9rZUNvbG9yIHsgQ29sb3I6OmJsYWNr
IH07Ci0gICAgQ29sb3IgZmlsbENvbG9yIHsgQ29sb3I6OmJsYWNrIH07Ci0gICAgQ29sb3Igc2hh
ZG93Q29sb3I7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5z
Zm9ybTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0K
LSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgeyAwIH07Ci0gICAgZmxvYXQgc2hhZG93Qmx1ciB7
IDAgfTsKLSAgICBmbG9hdCBhbHBoYSB7IDEgfTsKLQotICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBXaW5kUnVsZSBmaWxsUnVsZSB7IFdpbmRSdWxlOjpO
b25aZXJvIH07Ci0KLSAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUgeyBU
ZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07Ci0gICAgQmxlbmRNb2Rl
IGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxp
dHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZh
dWx0IH07Ci0gICAgU2hhZG93UmFkaXVzTW9kZSBzaGFkb3dSYWRpdXNNb2RlIHsgU2hhZG93UmFk
aXVzTW9kZTo6RGVmYXVsdCB9OwotCi0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgOiAxOwotICAg
IGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwotICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzIDogMTsKLSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIDogMTsKLSAg
ICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDogMTsKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQ
T1JUKQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgOiAxOwotI2VuZGlmCi19OwotCi1zdHJ1
Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlKCkgPSBkZWZhdWx0OwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgLCBt
X2NoYW5nZUZsYWdzKGZsYWdzKQotICAgIHsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJikgY29uc3Q7Ci0KLSAgICB2b2lkIGFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIGR1
bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBt
X3N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIG1fY2hh
bmdlRmxhZ3M7Ci19OwotCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKLQogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzogICAKKyAgICBmcmllbmQgY2xhc3MgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29u
dGV4dCgpID0gZGVmYXVsdDsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZUZsYWdzJiA9IHsgfSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFs
Q1RNID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQo
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpAQCAtMjcwLDI3MCArNzYsMjczIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBDb250ZXh0IFN0YXRlCisgICAgYm9vbCBjb250
ZW5mdWxQYWludERldGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50ZnVsUGFpbnREZXRl
Y3RlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVu
dGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9CisgICAgCisgICAgdmlydHVhbCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOyB9CiAKLSAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3Mp
IHsgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7IGRpZFVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9Ci0g
ICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VU
aGlja25lc3M7IH0KKyAgICAvLyBDb250ZXh0IFN0YXRlCiAKLSAgICB2b2lkIHNldFN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hh
bmdlKTsgfQotICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5zdHJva2VTdHlsZTsgfQorICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIG1lcmdlU3RhdGVDaGFuZ2Vz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikgeyBtX3N0YXRlLm1lcmdlQ2hhbmdl
cyhvdGhlcik7IH0KKyAgICB2b2lkIG1lcmdlU3RhdGVEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3RoZXIpIHsgbV9zdGF0ZS5tZXJnZURpZmZzKG90aGVyKTsgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0
IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7
IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5n
ZXRDVE0oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBjdG0pIHsgbV9zdGF0ZS5zZXRDVE0oY3RtLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAg
dm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pIHsgc2V0Q1RNKGdldENU
TSgpICogY3RtKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIHsgc2V0
Q1RNKGdldENUTSgpLnRyYW5zbGF0ZSh4LCB5KSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFBvaW50JiBwKSB7IHRyYW5zbGF0
ZShwLngoKSwgcC55KCkpOyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpIHsg
c2V0Q1RNKGdldENUTSgpLnNjYWxlKHN4LCBzeSkpOyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBz
KSB7IHNjYWxlKHMsIHMpOyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUp
IHsgc2NhbGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSB7IHNldENUTShnZXRDVE0oKS5yb3RhdGUocmFkMmRlZyhh
bmdsZUluUmFkaWFucykpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VQ
YXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CisgICAgY29uc3QgQ29s
b3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuY29sb3Io
KTsgfQorICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmZpbGxCcnVzaCgpLmdyYWRpZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBmaWxsUGF0dGVybigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkucGF0dGVybigpOyB9CisgICAgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBmaWxsU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNldEZpbGxDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9zdGF0ZS5zZXRGaWxsQ29sb3IoY29sb3IsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+
JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0p
IHsgbV9zdGF0ZS5zZXRGaWxsR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNm
b3JtKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNl
dEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtKTsgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwotICAgIEdyYWRpZW50KiBzdHJva2VHcmFkaWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCk7IH0KKyAgICBX
aW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGUoKTsgfQor
ICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9zdGF0ZS5zZXRGaWxs
UnVsZShmaWxsUnVsZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXRGaWxs
UnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IGRp
ZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5n
ZSk7IH0KLSAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmls
bFJ1bGU7IH0KKyAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsgfQorICAgIEdyYWRpZW50KiBzdHJva2VHcmFk
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5ncmFkaWVudCgpOyB9
CisgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ry
b2tlQnJ1c2goKS5wYXR0ZXJuKCk7IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9r
ZVNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnNw
YWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikgeyBtX3N0YXRlLnNldFN0cm9rZUNvbG9yKGNvbG9yLCBtX2xhc3RBcHBsaWVkU3RhdGUp
OyB9CisgICAgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBt
X3N0YXRlLnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBncmFkaWVudFNwYWNl
VHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBw
YXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5TcGFjZVRyYW5zZm9ybSA9IHsg
fSkgeyBtX3N0YXRlLnNldFN0cm9rZVBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgcGF0dGVyblNw
YWNlVHJhbnNmb3JtKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImKTsKLSAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsQ29sb3I7IH0KKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcygpOyB9CisgICAgdm9pZCBzZXRTdHJv
a2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3RhdGUuc2V0U3Ryb2tlVGhpY2tuZXNz
KHRoaWNrbmVzcywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7Ci0gICAgUGF0dGVybiogZmlsbFBh
dHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpOyB9CisgICAg
U3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0
eWxlKCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1f
c3RhdGUuc2V0U3Ryb2tlU3R5bGUoc3R5bGUsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9CisgICAgTGluZUNh
cCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5saW5lQ2FwKCk7IH0KKyAgICB2b2lk
IHNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKSB7IG1fc3RhdGUuc2V0TGluZUNhcChsaW5lQ2Fw
LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyBkaWRVcGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFu
Z2UpOyB9Ci0gICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KKyAgICBjb25zdCBMaW5lRGFzaCBs
aW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubGluZURhc2goKTsgfQorICAgIHZvaWQg
c2V0TGluZURhc2goTGluZURhc2gmJiBsaW5lRGFzaCkgeyBtX3N0YXRlLnNldExpbmVEYXNoKFdU
Rk1vdmUobGluZURhc2gpLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldFNo
b3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNob3VsZEFudGlh
bGlhcyA9IHNob3VsZEFudGlhbGlhczsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7IH0KLSAgICBib29sIHNob3VsZEFu
dGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzOyB9CisgICAg
TGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVKb2luKCk7IH0K
KyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKSB7IG1fc3RhdGUuc2V0TGlu
ZUpvaW4obGluZUpvaW4sIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hv
dWxkU21vb3RoRm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykgeyBtX3N0YXRlLnNob3VsZFNt
b290aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSk7IH0KLSAgICBib29s
IHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhG
b250czsgfQorICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLm1p
dGVyTGltaXQoKTsgfQorICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KSB7
IG1fc3RhdGUuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9
CiAKLSAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNh
dXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCi0gICAg
Ly8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1x
dWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgotICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUu
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
OyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHM7IH0KKyAgICBDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmNvbXBvc2l0ZU1vZGUoKTsgfQorICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbXBvc2l0ZU1vZGUoKS5vcGVyYXRpb247
IH0KKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9k
ZSgpLmJsZW5kTW9kZTsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2Rl
IGNvbXBvc2l0ZU1vZGUpIHsgbV9zdGF0ZS5zZXRDb21wb3NpdGVNb2RlKGNvbXBvc2l0ZU1vZGUs
IG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVPcGVyYXRvciBvcGVyYXRpb24pIHsgc2V0Q29tcG9zaXRlTW9kZSh7IG9wZXJhdGlv
biwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7IH0KIAotICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQot
ICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAgICBjb25z
dCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcm9wU2hh
ZG93KCk7IH0KKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gZHJv
cFNoYWRvdygpLm9mZnNldDsgfQorICAgIGZsb2F0IHNoYWRvd0JsdXIoKSBjb25zdCB7IHJldHVy
biBkcm9wU2hhZG93KCkuYmx1clJhZGl1czsgfQorICAgIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5jb2xvcjsgfQorICAgIHZvaWQgc2V0RHJv
cFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KSB7IG1fc3RhdGUuc2V0RHJvcFNo
YWRvdyhkcm9wU2hhZG93LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBjbGVhclNo
YWRvdygpIHsgc2V0RHJvcFNoYWRvdyh7IH0pOyB9CiAKLSAgICB2b2lkIHNldEFscGhhKGZsb2F0
IGFscGhhKSB7IG1fc3RhdGUuYWxwaGEgPSBhbHBoYTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKTsgfQotICAgIGZsb2F0IGFscGhhKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYTsgfQorICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRv
dygpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wg
aGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5pc0JsdXJyZWQo
KTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmhh
c091dHNldHMoKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsK
LSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZU9w
ZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYmxlbmRNb2RlOyB9CisgICAgZmxvYXQg
YWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhKCk7IH0KKyAgICB2b2lkIHNldEFs
cGhhKGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuc2V0QWxwaGEoYWxwaGEsIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5h
bmNlTWFzaykgeyBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7
IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5h
bmNlTWFza0NoYW5nZSk7IH0KLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzazsgfQorICAgIEludGVycG9sYXRpb25RdWFs
aXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KSB7IG1fc3RhdGUuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbWFnZUludGVycG9sYXRp
b25RdWFsaXR5LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldFRleHREcmF3
aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKSB7IG1fc3RhdGUudGV4dERyYXdpbmdN
b2RlID0gbW9kZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlRleHREcmF3aW5nTW9kZUNoYW5nZSk7IH0KLSAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0
RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZTsgfQor
ICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKCk7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9k
ZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUpIHsgbV9zdGF0ZS5zZXRUZXh0
RHJhd2luZ01vZGUodGV4dERyYXdpbmdNb2RlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBi
bHVyLCBjb25zdCBDb2xvciYsIFNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpE
ZWZhdWx0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xlYXJTaGFkb3coKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldFNoYWRvdyhGbG9hdFNpemUmLCBmbG9hdCYsIENv
bG9yJikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnNob3VsZEFudGlhbGlhcygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMo
Ym9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zZXRTaG91bGRBbnRpYWxpYXMoc2hvdWxk
QW50aWFsaWFzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBib29sIGhhc1Zpc2libGVT
aGFkb3coKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRvd0NvbG9yLmlzVmlzaWJsZSgpOyB9
Ci0gICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkg
JiYgKG1fc3RhdGUuc2hhZG93Qmx1ciB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpIHx8
IG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsgfQotICAgIGJvb2wgaGFzQmx1cnJlZFNo
YWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiBtX3N0YXRlLnNoYWRv
d0JsdXI7IH0KKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250
cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1fc3RhdGUuc2V0U2hvdWxkU21vb3RoRm9udHMo
c2hvdWxkU21vb3RoRm9udHMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotI2lmIEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCi0gICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVz
ZURhcmtBcHBlYXJhbmNlKSB7IG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UgPSB1c2VEYXJrQXBw
ZWFyYW5jZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVz
ZURhcmtBcHBlYXJhbmNlQ2hhbmdlKTsgfQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICAv
LyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGlt
cHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCisgICAgLy8gSW4gc29t
ZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91
dHB1dCBvZiB0aGUgZ2x5cGhzLgorICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKTsg
fQorICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzKHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQog
Ci0gICAgdmlydHVhbCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlOyB9CisgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKTsgfQorICAgIHZv
aWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykgeyBtX3N0YXRlLnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHVwZGF0ZVN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOworICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrKCk7IH0KKyAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VN
YXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spIHsgbV9zdGF0ZS5zZXREcmF3THVtaW5hbmNlTWFz
ayhkcmF3THVtaW5hbmNlTWFzaywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgLy8gQ2Fs
bGVkICphZnRlciogYW55IGNoYW5nZSB0byBHcmFwaGljc0NvbnRleHRTdGF0ZTsgZ2VuZXJhbGx5
IHVzZWQgdG8gcHJvcGFnYXRlIGNoYW5nZXMKLSAgICAvLyB0byB0aGUgcGxhdGZvcm0gY29udGV4
dCdzIHN0YXRlLgotICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBl
YXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSgpOyB9Cisg
ICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlKSB7IG1f
c3RhdGUuc2V0VXNlRGFya0FwcGVhcmFuY2UodXNlRGFya0FwcGVhcmFuY2UsIG1fbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKyNlbmRpZgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNh
dmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwotICAgIAor
ICAgIHZvaWQgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICB1bnNpZ25lZCBzdGFja1NpemUo
KSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQogCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5U3RhdGVDaGFuZ2VzKCkgPSAwOwogI2lmIFVTRShDRykKICAgICAvLyBGSVhNRTogU2hvdWxk
IHRoZXNlIHJlYWxseSBiZSBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IG1ldGhvZHM/Ci0gICAgdmly
dHVhbCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXBw
bHlGaWxsUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJu
KCkgPSAwOworI2VuZGlmCiAKLSAgICAvLyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBp
bnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRoZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgV0VCQ09SRV9FWFBP
UlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IENhbiB0aGlz
IGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJl
IHJlYWQgb2ZmIHRoZSBjb250ZXh0PwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChib29sKSA9IDA7Ci0jZW5kaWYKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMg
dGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNvbnRleHQsIG1ha2luZyB0aGUgY29udGV4
dCBjYXBhYmxlIG9mCisgICAgLy8gYWN0aW5nIGFzIGEgYmFzZS1sZXZlbCBjb250ZXh0IGZvciBh
IEhpRFBJIGVudmlyb25tZW50LgorICAgIHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3IpOyB9CiAKLSAgICB2aXJ0dWFsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQ7IH0KKyAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICAvLyBQaXhl
bCBTbmFwcGluZworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVy
KCkgY29uc3QgeyByZXR1cm4gc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKSAmJiBtX3RyYW5z
cGFyZW5jeUxheWVyQ291bnQ7IH0KIAotICAgIGVudW0gUm91bmRpbmdNb2RlIHsKLSAgICAgICAg
Um91bmRBbGxTaWRlcywKLSAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCi0gICAgfTsK
LSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEs
IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworICAgIC8v
IENsaXBwaW5nCiAKLSAgICAvLyBTaGFwZXMKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmKTsKIAotICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tp
bmcgYW5kIGZpbGxpbmcuCi0gICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGlj
aCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKLSAgICAvLyB1c2luZyBhIDEtcGl4
ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKLSAg
ICAvLyBzdHJva2UgY29sb3IpLgotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpOwogCi0gICAgdmlydHVhbCB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dGgoY29uc3QgUGF0aCYpOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QobV9zdGF0ZS5jbGlwQm91bmRzKCkpOyB9CiAKLSAgICB2aXJ0dWFs
IHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNl
QXNQYXRoKGVsbGlwc2UpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KKyAg
ICAvLyBTaGFwZXMKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikg
PSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVu
ZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVu
dCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9k
ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERh
c2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGlu
ZUpvaW4oTGluZUpvaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9h
dCkgPSAwOwotCi0gICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1lZGlhCisgICAgdmlydHVh
bCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBmaWxsRWxsaXBz
ZUFzUGF0aChlbGxpcHNlKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxs
UGF0aChjb25zdCBQYXRoJikgPSAwOwogCi0gICAgSW50U2l6ZSBjb21wYXRpYmxlSW1hZ2VCdWZm
ZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSA9IDEsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwg
c3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0sIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwg
c3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICAvLyBUaGVzZSBk
cmF3IG1ldGhvZHMgd2lsbCBkbyBib3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgorICAgIC8vIEZJ
WE1FOiAuLi5leGNlcHQgZHJhd1JlY3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5
cyBzdHJva2VzCisgICAgLy8gdXNpbmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSBy
ZWN0IGJvcmRlcnMgKG9mIHRoZSBjb3JyZWN0CisgICAgLy8gc3Ryb2tlIGNvbG9yKS4KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVk
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmlu
Z01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxv
cHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgZWxsaXBzZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKIAotICAg
IHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNp
emUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25l
c3MgPSAxKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgPSAwOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93
Q29sb3IpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlydHVhbCBkcmF3UGF0aChjb25zdCBQ
YXRoJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKElt
YWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVf
RVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50
YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJh
d1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJ
bWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgLy8gRm9jdXMgUmluZ3MKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKElt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291
cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRT
aXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAw
OworICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50YXRp
b24/IE9yIGVsc2V3aGVyZT8KKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1Jl
ZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNS
ZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOworI2VuZGlmCiAKKyAgICAvLyBJbWFnZXMKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VC
dWZmZXI+LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0
cyYpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oSW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1h
Z2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKIAorICAgIFdFQkNPUkVfRVhQT1JU
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGls
ZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRp
bGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1N5
c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
OworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJh
d1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKICNlbmRpZgotCi0gICAgLy8gQ2xp
cHBpbmcKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwg
V2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgY29u
c3Q7Ci0KKyAgICAKICAgICAvLyBUZXh0CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZs
b2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHRvID0gc3RkOjpudWxsb3B0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJh
d0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZv
bnRTbW9vdGhpbmdNb2RlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRv
bVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwotCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIGRyYXdHbHlw
aHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGlu
Z01vZGUpOwotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBo
c0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6
bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25z
dCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdCaWRp
VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpE
b05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0
IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJp
bnRpbmcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZs
b2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tl
U3R5bGUgPSBTb2xpZFN0cm9rZSk7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUg
PSBTb2xpZFN0cm9rZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAK
LSAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCi0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBib29sIGlz
SW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJuIChtX3RyYW5zcGFyZW5jeUxheWVy
Q291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZs
b2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwogCi0gICAgLy8gRm9jdXMgUmluZ3MKKyAgICAvLyBD
b21wYXRpYmxlIEltYWdlQnVmZmVyCiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICAvLyBG
SVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNl
d2hlcmU/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0
IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25z
dCBDb2xvciYpID0gMDsKLSNlbmRpZgorICAgIEludFNpemUgY29tcGF0aWJsZUltYWdlQnVmZmVy
U2l6ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKIAotICAgIC8vIFRyYW5zZm9ybXMKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6
Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCi0gICAgdm9pZCBzY2FsZShm
bG9hdCBzKSB7IHNjYWxlKHsgcywgcyB9KTsgfQotICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25z
dCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUlu
UmFkaWFucykgPSAwOwotICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkg
eyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQotICAgIHZvaWQgdHJh
bnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEgfSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlv
bmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVu
ZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpu
dWxsb3B0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3Rk
OjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAg
IGVudW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwg
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9y
bSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0ID0gMDsKKyAgICAvLyBQaXhlbCBTbmFwcGluZwogCi0gICAgLy8gVGhpcyBmdW5jdGlv
biBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250ZXh0LCBtYWtpbmcg
dGhlIGNvbnRleHQgY2FwYWJsZSBvZgotICAgIC8vIGFjdGluZyBhcyBhIGJhc2UtbGV2ZWwgY29u
dGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsgfQotICAgIFdFQkNP
UkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQ
T1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAgICBlbnVtIFJvdW5kaW5n
TW9kZSB7CisgICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAgIFJvdW5kT3JpZ2luQW5kRGlt
ZW5zaW9ucworICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVz
KEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9r
ZVN0eWxlKTsKIAogICAgIC8vIExpbmtzCiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRl
cm5hbExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogCiAgICAgdmly
dHVhbCB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9h
dFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0
IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gQ29u
dGVudGZ1bCBQYWludCBEZXRlY3Rpb24KKyNpZiBVU0UoQ0cpCisgICAgLy8gRklYTUU6IENhbiB3
ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdoYXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhp
c3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQo
Ym9vbCkgeyB9CisgICAgdmlydHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsg
bV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBh
aW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkOyB9
CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0
b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQgb2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1
YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSB7IH0KKyNlbmRpZgogCiAgICAg
Ly8gRklYTUU6IE5vdGhpbmcgaW4gdGhpcyBzZWN0aW9uIGJlbG9uZ3MgaGVyZSwgYW5kIHNob3Vs
ZCBiZSBtb3ZlZCBlbHNld2hlcmUuCiAjaWYgT1MoV0lORE9XUykKQEAgLTU0NiwxMCArMzU1LDcg
QEAgcHVibGljOgogICAgIC8vIHB1dCBjb2RlIHNoYXJlZCBiZXR3ZWVuIFdpbmRvd3MgQ0cgYW5k
IFdpbmRvd3MgQ2Fpcm8gYmFja2VuZHMuCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51
bGxwdHI7IH0KICNlbmRpZgotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1Ry
YW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQorICAgIAogcHJvdGVj
dGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAg
dm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtNTYxLDE5MSAr
MzY3LDE3IEBAIHByb3RlY3RlZDoKICAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZv
clBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdp
ZHRoKSBjb25zdDsKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNv
cm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQg
cG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29uc3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZSBtX3N0YXRlOwotCiBwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlIG1fc3RhdGU7CisgICAgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4gbV9sYXN0QXBwbGllZFN0YXRlOwogICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRTdGF0ZSwg
MT4gbV9zdGFjazsKIAogICAgIHVuc2lnbmVkIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCB7IDAg
fTsKICAgICBib29sIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgeyBmYWxzZSB9OwogfTsKIAot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAg
IHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2NvbnRleHQu
c2F2ZSgpOwotICAgIH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcigpCi0g
ICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1fY29udGV4
dC5yZXN0b3JlKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2F2ZSgpCi0gICAgewotICAgICAg
ICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwot
ICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc3Rv
cmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBt
X2NvbnRleHQucmVzdG9yZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0g
ICAgfQotICAgIAotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
ICZtX2NvbnRleHQ7IH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4
dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Ci19OwotCi1jbGFzcyBUcmFuc3BhcmVuY3lM
YXllclNjb3BlIHsKLXB1YmxpYzoKLSAgICBUcmFuc3BhcmVuY3lMYXllclNjb3BlKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxwaGEsIGJvb2wgYmVnaW5MYXllciA9IHRydWUpCi0g
ICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9hbHBoYShhbHBoYSkKLSAg
ICAgICAgLCBtX2JlZ2FuTGF5ZXIoYmVnaW5MYXllcikKLSAgICB7Ci0gICAgICAgIGlmIChiZWdp
bkxheWVyKQotICAgICAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9h
bHBoYSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYmVnaW5MYXllcihmbG9hdCBhbHBoYSkKLSAg
ICB7Ci0gICAgICAgIG1fYWxwaGEgPSBhbHBoYTsKLSAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7Ci0gICAgICAgIG1fYmVnYW5MYXllciA9IHRydWU7Ci0g
ICAgfQotICAgIAotICAgIH5UcmFuc3BhcmVuY3lMYXllclNjb3BlKCkKLSAgICB7Ci0gICAgICAg
IGlmIChtX2JlZ2FuTGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQuZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRl
eHQ7Ci0gICAgZmxvYXQgbV9hbHBoYTsKLSAgICBib29sIG1fYmVnYW5MYXllcjsKLX07Ci0KLWNs
YXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyIHsKLXB1YmxpYzoKLSAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0g
ICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9zdGFja1NpemUoY29udGV4
dC5zdGFja1NpemUoKSkKLSAgICB7IH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVT
dGFja0NoZWNrZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC5zdGFja1NpemUoKSAh
PSBtX3N0YWNrU2l6ZSkKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0
ICVwIHN0YWNrIGNoYW5nZWQgYnkgJWQiLCAmbV9jb250ZXh0LCAoaW50KW1fY29udGV4dC5zdGFj
a1NpemUoKSAtIChpbnQpbV9zdGFja1NpemUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFw
aGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKLX07Ci0K
LWNsYXNzIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7Ci1wdWJsaWM6Ci0gICAgZXhw
bGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRv
VXNlKQotICAgICAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkKLSAgICAg
ICAgLCBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eShncmFwaGljc0NvbnRleHQuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSgpKQotICAgICAgICAsIG1faW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2VkKGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UgIT0gSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkRlZmF1bHQgJiYgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gaW50ZXJwb2xhdGlv
blF1YWxpdHlUb1VzZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlZCkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSk7Ci0gICAgfQotCi0gICAgZXhw
bGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBzdGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFsaXR5PiBpbnRlcnBv
bGF0aW9uUXVhbGl0eSkKLSAgICAgICAgOiBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIo
Z3JhcGhpY3NDb250ZXh0LCBpbnRlcnBvbGF0aW9uUXVhbGl0eSA/IGludGVycG9sYXRpb25RdWFs
aXR5LnZhbHVlKCkgOiBncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgp
KQotICAgIHsKLSAgICB9Ci0KLSAgICB+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkKLSAgICAg
ICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkobV9j
dXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFw
aGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0OwotICAgIEludGVycG9sYXRpb25RdWFsaXR5
IG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5OwotICAgIGJvb2wgbV9pbnRlcnBvbGF0aW9u
UXVhbGl0eUNoYW5nZWQ7Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLW5hbWVzcGFj
ZSBXVEYgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpNb2RlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwK
LSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKLSAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlcywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHls
ZTo6TW9kZTo6U3BlbGxpbmcsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
Ok1vZGU6OkdyYW1tYXIsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1v
ZGU6OkF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlcwotICAgID47Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VHcmFkaWVudENoYW5nZSwKLSAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlUGF0dGVybkNoYW5n
ZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEdy
YWRpZW50Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpGaWxsUGF0dGVybkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VDb2xvckNoYW5nZSwKLSAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGVDaGFuZ2Us
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxDb2xv
ckNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
RmlsbFJ1bGVDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNoYWRvd0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkFscGhhQ2hhbmdlLAotICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkJs
ZW5kTW9kZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
LAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlLAotICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5Q2hhbmdlCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICAgICAgLCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5n
ZQotI2VuZGlmCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6U3Ryb2tlU3R5bGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpOb1N0cm9r
ZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6U29saWRTdHJva2UsCi0gICAgV2ViQ29yZTo6
U3Ryb2tlU3R5bGU6OkRvdHRlZFN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RGFz
aGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEb3VibGVTdHJva2UsCi0gICAg
V2ViQ29yZTo6U3Ryb2tlU3R5bGU6OldhdnlTdHJva2UKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU+IHsKLSAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGUs
Ci0gICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZTo6RmlsbCwKLSAgICAgICAgV2ViQ29y
ZTo6VGV4dERyYXdpbmdNb2RlOjpTdHJva2UKLSAgICA+OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJjOWU1ODFkY2MyMjAzYWQyMWE3ZjQ4ZjM1NzgxNGRlZmMzY2ZmMDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRTdGF0ZS5jcHAKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0U3RhdGU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IENo
YW5nZUZsYWdzJiBjaGFuZ2VGbGFncywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RN
KQorICAgIDogbV9jbGlwQm91bmRzKGluaXRpYWxDVE0ubWFwUmVjdChpbml0aWFsQ2xpcCkpCisg
ICAgLCBtX2NoYW5nZUZsYWdzKGNoYW5nZUZsYWdzKQorICAgICwgbV9jdG0oaW5pdGlhbENUTSkK
K3sKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwQm91bmRzKCkgY29u
c3QKK3sKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gbV9jdG0uaW52ZXJzZSgpKQorICAgICAgICBy
ZXR1cm4gaW52ZXJzZS0+bWFwUmVjdChtX2NsaXBCb3VuZHMpOworCisgICAgLy8gSWYgdGhlIENU
TSBpcyBub3QgaW52ZXJ0aWJsZSwgcmV0dXJuIHRoZSBvcmlnaW5hbCByZWN0LgorICAgIC8vIFRo
aXMgbWF0Y2hlcyBDR1JlY3RBcHBseUludmVyc2VBZmZpbmVUcmFuc2Zvcm0gYmVoYXZpb3IuCisg
ICAgcmV0dXJuIG1fY2xpcEJvdW5kczsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
aGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdGV4cHIg
Q2hhbmdlRmxhZ3MgcHJpbWl0aXZlQ2hhbmdlRmxhZ3MgeyBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVz
cywgQ2hhbmdlOjpTdHJva2VCcnVzaCwgQ2hhbmdlOjpGaWxsQnJ1c2ggfTsKKworICAgIGlmICht
X2NoYW5nZUZsYWdzICE9IChtX2NoYW5nZUZsYWdzICYgcHJpbWl0aXZlQ2hhbmdlRmxhZ3MpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhD
aGFuZ2U6OlN0cm9rZUJydXNoKSAmJiAhbV9zdHJva2VCcnVzaC5pc1ByaW1pdGl2ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhDaGFu
Z2U6OkZpbGxCcnVzaCkgJiYgIW1fZmlsbEJydXNoLmlzUHJpbWl0aXZlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjptZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKQor
eworICAgIGF1dG8gbWVyZ2VDaGFuZ2UgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmIChvdGhlci5tX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKGNoYW5nZSkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90
aGVyLipwcm9wZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgQVNTRVJUKG1fY2xpcEJvdW5kcyA9PSBvdGhlci5tX2Ns
aXBCb3VuZHMpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgbWVyZ2VD
aGFuZ2UoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RmlsbFJ1
bGUsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1
bGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VD
aGFuZ2UoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6
U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
c3Ryb2tlU3R5bGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBt
ZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Okxp
bmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xp
bmVKb2luKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisgICAgbWVy
Z2VDaGFuZ2UoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2Ryb3BTaGFkb3cpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7CisgICAgbWVy
Z2VDaGFuZ2UoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBtZXJnZUNo
YW5nZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZEFudGlhbGlhcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRTbW9vdGhG
b250cywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhG
b250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMsICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwor
ICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpVc2VEYXJrQXBwZWFy
YW5jZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFy
YW5jZSk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VEaWZm
cyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZURp
ZmYgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3Bl
cnR5KSB7CisgICAgICAgIGlmICh0aGlzLT4qcHJvcGVydHkgIT0gb3RoZXIuKnByb3BlcnR5KSB7
CisgICAgICAgICAgICB0aGlzLT4qcHJvcGVydHkgPSBvdGhlci4qcHJvcGVydHk7CisgICAgICAg
ICAgICBtX2NoYW5nZUZsYWdzLmFkZChjaGFuZ2UpOworICAgICAgICB9CisgICAgfTsKKworICAg
IG1lcmdlRGlmZihDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9jdG0pOworICAgIAorICAgIG1lcmdlRGlmZihDaGFuZ2U6OkZpbGxC
cnVzaCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1
c2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZURpZmYoQ2hh
bmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fc3Ryb2tlQnJ1c2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpOwor
ICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdl
OjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
bGluZUNhcCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAgICBtZXJnZURpZmYo
Q2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlRGlmZihDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KTsKKworICAg
IG1lcmdlRGlmZihDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpE
cm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJv
cFNoYWRvdyk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpOworICAgIG1lcmdlRGlmZihD
aGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpU
ZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4
dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMpOwor
ICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAgbWVyZ2VEaWZmKENo
YW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3No
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpEcmF3THVtaW5h
bmNlTWFzaywgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5j
ZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgbWVyZ2VEaWZmKENo
YW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCitzdGF0aWMgY29uc3QgY2hhciog
c3RhdGVDaGFuZ2VOYW1lKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UgY2hhbmdlKQorewor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzdGF0ZUNoYW5nZU5hbWVzW10gPSB7CisgICAg
ICAgICJjdG0iLAorCisgICAgICAgICJmaWxsLWJydXNoIiwKKyAgICAgICAgImZpbGwtcnVsZSIs
CisKKyAgICAgICAgInN0cm9rZS1icnVzaCIsCisgICAgICAgICJzdHJva2UtdGhpY2tuZXNzIiwK
KyAgICAgICAgInN0cm9rZS1zdHlsZSIsCisKKyAgICAgICAgImxpbmUtY2FwIiwKKyAgICAgICAg
ImxpbmUtZGFzaCIsCisgICAgICAgICJsaW5lLWpvaW4iLAorICAgICAgICAibWl0ZXItbGltaXQi
LAorCisgICAgICAgICJjb21wb3NpdGUtbW9kZSIsCisgICAgICAgICJkcm9wLXNoYWRvdyIsCisK
KyAgICAgICAgImFscGhhIiwKKyAgICAgICAgImltYWdlLWludGVycG9sYXRpb24tcXVhbGl0eSIs
CisgICAgICAgICJ0ZXh0LWRyYXdpbmctbW9kZSIsCisKKyAgICAgICAgInNob3VsZC1hbnRpYWxp
YXMiLAorICAgICAgICAic2hvdWxkLXNtb290aC1mb250cyIsCisgICAgICAgICJzaG91bGQtc3Vi
cGl4ZWwtcXVhbnRpemUtZm9udHMiLAorICAgICAgICAic2hhZG93cy1pZ25vcmUtdHJhbnNmb3Jt
cyIsCisgICAgICAgICJkcmF3LWx1bWluYW5jZS1tYXNrIgorI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCisgICAgICAgICwgInVzZS1kYXJrLWFwcGVhcmFuY2UiCisjZW5kaWYKKyAgICB9
OworCisgICAgdW5zaWduZWQgbWFzayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGFuZ2UpOwor
ICAgIEFTU0VSVCghKChtYXNrIC0gMSkgJiBtYXNrKSk7CisgICAgCisgICAgdW5zaWduZWQgaW5k
ZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihtYXNrKSk7CisgICAgcmV0dXJuIHN0YXRl
Q2hhbmdlTmFtZXNbaW5kZXhdOworfQorCitUZXh0U3RyZWFtJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICBhdXRvIGR1bXAgPSBbJl0oQ2hh
bmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5LCBjb25zdCBT
dHJpbmcmIG5hbWUpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdl
KSkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eShuYW1lLCB0aGlzLT4qcHJvcGVydHkpOwor
ICAgIH07CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImNoYW5nZS1mbGFncyIsIG1fY2hhbmdlRmxh
Z3MpOworCisgICAgZHVtcChDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkNUTSkpOworCisgICAgZHVtcChDaGFuZ2U6OkZpbGxCcnVz
aCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNo
LCAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkZpbGxCcnVzaCkp
OworICAgIGR1bXAoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNo
YW5nZU5hbWUoQ2hhbmdlOjpGaWxsUnVsZSkpOworCisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZUJy
dXNoLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1
c2gsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlN0cm9rZUJydXNo
KSk7CisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgIHN0YXRl
Q2hhbmdlTmFtZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcykpOworICAgIGR1bXAoQ2hhbmdlOjpT
dHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0
cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTdHJv
a2VTdHlsZSkpOworCisgICAgZHVtcChDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCwgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkxpbmVDYXApKTsKKyAgICBkdW1wKENoYW5nZTo6
TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9s
aW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGlu
ZURhc2gpKTsKKyAgICBkdW1wKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUpvaW4pKTsKKyAgICBkdW1wKENoYW5nZTo6TWl0
ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRl
ckxpbWl0LCAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TWl0ZXJM
aW1pdCkpOworCisgICAgZHVtcChDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY29tcG9zaXRlTW9kZSwgICAgICAgICAgICAgICAg
IHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUpKTsKKyAgICBkdW1wKENoYW5n
ZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9kcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6
RHJvcFNoYWRvdykpOworCisgICAgZHVtcChDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEsICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkFscGhhKSk7CisgICAgZHVtcChDaGFuZ2U6
OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6Oklt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKyAgICBkdW1wKENoYW5nZTo6VGV4dERyYXdpbmdN
b2RlLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01v
ZGUsICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6VGV4dERyYXdpbmdNb2Rl
KSk7CisKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICAgc3Rh
dGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzKSk7CisgICAgZHVtcChDaGFuZ2U6
OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
c2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNo
b3VsZFNtb290aEZvbnRzKSk7CisgICAgZHVtcChDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cywgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzLCAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cykpOworICAgIGR1bXAoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgICBz
dGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcykpOworICAgIGR1
bXAoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUo
Q2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaykpOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCisgICAgZHVtcChDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAgIHN0YXRl
Q2hhbmdlTmFtZShDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlKSk7CisjZW5kaWYKKyAgICByZXR1
cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UgY2hhbmdlKQoreworICAgIHRzIDw8IHN0YXRlQ2hhbmdl
TmFtZShjaGFuZ2UpOworICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQorewor
ICAgIHJldHVybiBzdGF0ZS5kdW1wKHRzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dFN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZlNGNlYTNjMmQ1OGM4N2I0OTIzODQ3NWU0NjhiNWRm
ZDVlZTNhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmgKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5j
bHVkZSAiU291cmNlQnJ1c2guaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0Nv
bnRleHRTdGF0ZSB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDaGFuZ2UgOiB1aW50MzJfdCB7
CisgICAgICAgIENUTSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKKworICAgICAg
ICBGaWxsQnJ1c2ggICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIEZpbGxSdWxl
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwKKworICAgICAgICBTdHJva2VCcnVzaCAgICAg
ICAgICAgICAgICAgPSAxIDw8IDMsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzcyAgICAgICAgICAg
ICA9IDEgPDwgNCwKKyAgICAgICAgU3Ryb2tlU3R5bGUgICAgICAgICAgICAgICAgID0gMSA8PCA1
LAorCisgICAgICAgIExpbmVDYXAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNiwKKyAgICAg
ICAgTGluZURhc2ggICAgICAgICAgICAgICAgICAgID0gMSA8PCA3LAorICAgICAgICBMaW5lSm9p
biAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDgsCisgICAgICAgIE1pdGVyTGltaXQgICAgICAg
ICAgICAgICAgICA9IDEgPDwgOSwKKworICAgICAgICBDb21wb3NpdGVNb2RlICAgICAgICAgICAg
ICAgPSAxIDw8IDEwLAorICAgICAgICBEcm9wU2hhZG93ICAgICAgICAgICAgICAgICAgPSAxIDw8
IDExLAorCisgICAgICAgIEFscGhhICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMTIsCisg
ICAgICAgIEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgICA9IDEgPDwgMTMsCisgICAgICAgIFRl
eHREcmF3aW5nTW9kZSAgICAgICAgICAgICA9IDEgPDwgMTQsCisKKyAgICAgICAgU2hvdWxkQW50
aWFsaWFzICAgICAgICAgICAgID0gMSA8PCAxNSwKKyAgICAgICAgU2hvdWxkU21vb3RoRm9udHMg
ICAgICAgICAgID0gMSA8PCAxNiwKKyAgICAgICAgU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
ID0gMSA8PCAxNywKKyAgICAgICAgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgICAgID0gMSA8PCAx
OCwKKyAgICAgICAgRHJhd0x1bWluYW5jZU1hc2sgICAgICAgICAgID0gMSA8PCAxOSwKKyNpZiBI
QVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgICAgICBVc2VEYXJrQXBwZWFyYW5jZSAgICAg
ICAgICAgPSAxIDw8IDIwLAorI2VuZGlmCisgICAgfTsKKyAgICB1c2luZyBDaGFuZ2VGbGFncyA9
IE9wdGlvblNldDxDaGFuZ2U+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBp
bml0aWFsQ2hhbmdlRmxhZ3MgPSB7IENoYW5nZTo6RmlsbEJydXNoLCBDaGFuZ2U6OlN0cm9rZUJy
dXNoLCBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcyB9OworCisgICAgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcEJvdW5kcywgY29u
c3QgQ2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0g
PSB7IH0pOworCisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNsaXBCb3VuZHMoKSBjb25z
dDsKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fY2xpcEJvdW5kcy5p
bnRlcnNlY3QobV9jdG0ubWFwUmVjdChyZWN0KSk7IH0KKworICAgIENoYW5nZUZsYWdzIGNoYW5n
ZXMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZUZsYWdzOyB9CisgICAgdm9pZCBkaWRBcHBseVN0
YXRlQ2hhbmdlcygpIHsgbV9jaGFuZ2VGbGFncyA9IHsgfTsgfQorCisgICAgQWZmaW5lVHJhbnNm
b3JtIGdldENUTSgpIGNvbnN0IHsgcmV0dXJuIG1fY3RtOyB9CisgICAgdm9pZCBzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0sIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250
ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6Q1RNLCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtLCBjdG0sIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisK
KyAgICBjb25zdCBTb3VyY2VCcnVzaCYgZmlsbEJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9maWxs
QnJ1c2g7IH0KKyAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7
IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbEJydXNoLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
ZmlsbEJydXNoLCB7IGNvbG9yIH0sIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBzZXRG
aWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fZmlsbEJydXNoLnNldEdyYWRpZW50KFdURk1vdmUoZ3Jh
ZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6RmlsbEJy
dXNoKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX2ZpbGxCcnVzaC5zZXRQ
YXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5h
ZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisKKyAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsbFJ1bGU7IH0KKyAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZp
bGxSdWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFw
cGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkZpbGxSdWxlLCAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsIGZpbGxSdWxlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisg
ICAgY29uc3QgU291cmNlQnJ1c2gmIHN0cm9rZUJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJv
a2VCcnVzaDsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0
ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZUJydXNoLCAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc3Ryb2tlQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2
b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldEdyYWRpZW50
KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxhZ3MuYWRkKENo
YW5nZTo6U3Ryb2tlQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0
ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsg
bV9zdHJva2VCcnVzaC5zZXRQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3Jt
KTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKworICAgIGZsb2F0
IHN0cm9rZVRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlVGhpY2tuZXNzOyB9Cisg
ICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBz
ZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3N0cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tuZXNzLCBsYXN0QXBwbGllZFN0YXRlKTsg
fQorCisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0cm9r
ZVN0eWxlOyB9CisgICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHls
ZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVk
U3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTdHJva2VTdHlsZSwgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3N0cm9rZVN0eWxlLCBzdHJva2VTdHlsZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KworICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsgfQorICAg
IHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3Jh
cGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5n
ZTo6TGluZUNhcCwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXAsIGxpbmVDYXAsIGxh
c3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBjb25zdCBMaW5lRGFzaCYgbGluZURhc2goKSBjb25z
dCB7IHJldHVybiBtX2xpbmVEYXNoOyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChMaW5lRGFzaCYm
IGxpbmVEYXNoLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFz
dEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVEYXNoLCAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fbGluZURhc2gsIFdURk1vdmUobGluZURhc2gpLCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorCisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVK
b2luOyB9CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbiwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0
UHJvcGVydHkoQ2hhbmdlOjpMaW5lSm9pbiwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVK
b2luLCBsaW5lSm9pbiwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGZsb2F0IG1pdGVyTGlt
aXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7IH0KKyAgICB2b2lkIHNldE1pdGVyTGlt
aXQoZmxvYXQgbWl0ZXJMaW1pdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRT
dGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpNaXRlckxpbWl0
LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCwgbWl0ZXJMaW1pdCwgbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUoKSBj
b25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU1vZGU7IH0KKyAgICB2b2lkIHNldENvbXBvc2l0ZU1v
ZGUoQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2RlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBo
aWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6
OkNvbXBvc2l0ZU1vZGUsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCBj
b21wb3NpdGVNb2RlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIGNvbnN0IERyb3BT
aGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX2Ryb3BTaGFkb3c7IH0KKyAgICB2
b2lkIHNldERyb3BTaGFkb3coY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdywgY29uc3Qgc3Rk
OjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0
UHJvcGVydHkoQ2hhbmdlOjpEcm9wU2hhZG93LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJv
cFNoYWRvdywgZHJvcFNoYWRvdywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGZsb2F0IGFs
cGhhKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYTsgfQorICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQg
YWxwaGEsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBw
bGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6QWxwaGEsICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9hbHBoYSwgYWxwaGEsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25R
dWFsaXR5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFw
cGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHksICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAg
IFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dERyYXdpbmdNb2RlOyB9CisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdp
bmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNz
Q29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlRl
eHREcmF3aW5nTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSwg
dGV4dERyYXdpbmdNb2RlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgYm9vbCBzaG91bGRB
bnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEFudGlhbGlhczsgfQorICAgIHZvaWQg
c2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0
eShDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3Vs
ZEFudGlhbGlhcywgc2hvdWxkQW50aWFsaWFzLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAg
Ym9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU21vb3RoRm9u
dHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9u
dHMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGll
ZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywgc2hvdWxkU21vb3RoRm9udHMsIGxh
c3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOyB9CisgICAg
dm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBs
YXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsIGxhc3RBcHBsaWVkU3RhdGUpOyB9
CisKKyAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgY29uc3Qgc3RkOjpvcHRpb25hbDxH
cmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hh
bmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3No
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmF3THVtaW5hbmNlTWFzazsgfQorICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1h
c2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0Nv
bnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpEcmF3
THVtaW5hbmNlTWFzaywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNr
LCBkcmF3THVtaW5hbmNlTWFzaywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworI2lmIEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlRGFya0FwcGVhcmFuY2U7IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJh
bmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3ND
b250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6VXNl
RGFya0FwcGVhcmFuY2UsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5j
ZSwgdXNlRGFya0FwcGVhcmFuY2UsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisjZW5kaWYKKworICAg
IGJvb2wgaGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSBjb25zdDsKKyAgICB2b2lkIG1lcmdlQ2hh
bmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpOworICAgIHZvaWQgbWVyZ2VE
aWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpOworCisgICAgV1RGOjpUZXh0
U3RyZWFtJiBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiBk
ZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgdm9pZCBzZXRQcm9wZXJ0eShDaGFuZ2UgY2hhbmdlLCBUIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjoqcHJvcGVydHksIGNvbnN0IFQmIHZhbHVlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNz
Q29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
LT4qcHJvcGVydHkgPT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMt
Pipwcm9wZXJ0eSA9IHZhbHVlOworICAgICAgICBtX2NoYW5nZUZsYWdzLnNldChjaGFuZ2UsICFs
YXN0QXBwbGllZFN0YXRlIHx8ICgqbGFzdEFwcGxpZWRTdGF0ZSkuKnByb3BlcnR5ICE9IHRoaXMt
Pipwcm9wZXJ0eSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lk
IHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Oipwcm9w
ZXJ0eSwgVCYmIHZhbHVlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PiYgbGFzdEFwcGxpZWRTdGF0ZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLT4qcHJvcGVydHkg
PT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9
IFdURk1vdmUodmFsdWUpOworICAgICAgICBtX2NoYW5nZUZsYWdzLnNldChjaGFuZ2UsICFsYXN0
QXBwbGllZFN0YXRlIHx8ICgqbGFzdEFwcGxpZWRTdGF0ZSkuKnByb3BlcnR5ICE9IHRoaXMtPipw
cm9wZXJ0eSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IG1fY2xpcEJvdW5kczsKKworICAgIENo
YW5nZUZsYWdzIG1fY2hhbmdlRmxhZ3M7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CisK
KyAgICBTb3VyY2VCcnVzaCBtX2ZpbGxCcnVzaCB7IENvbG9yOjpibGFjayB9OworICAgIFdpbmRS
dWxlIG1fZmlsbFJ1bGUgeyBXaW5kUnVsZTo6Tm9uWmVybyB9OworCisgICAgU291cmNlQnJ1c2gg
bV9zdHJva2VCcnVzaCB7IENvbG9yOjpibGFjayB9OworICAgIGZsb2F0IG1fc3Ryb2tlVGhpY2tu
ZXNzIHsgMCB9OworICAgIFN0cm9rZVN0eWxlIG1fc3Ryb2tlU3R5bGUgeyBTb2xpZFN0cm9rZSB9
OworCisgICAgTGluZUNhcCBtX2xpbmVDYXAgeyBMaW5lQ2FwOjpCdXR0IH07CisgICAgTGluZURh
c2ggbV9saW5lRGFzaDsKKyAgICBMaW5lSm9pbiBtX2xpbmVKb2luIHsgTGluZUpvaW46Ok1pdGVy
IH07CisgICAgZmxvYXQgbV9taXRlckxpbWl0IHsgMCB9OworCisgICAgQ29tcG9zaXRlTW9kZSBt
X2NvbXBvc2l0ZU1vZGUgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgQmxlbmRNb2Rl
OjpOb3JtYWwgfTsKKyAgICBEcm9wU2hhZG93IG1fZHJvcFNoYWRvdzsKKworICAgIGZsb2F0IG1f
YWxwaGEgeyAxIH07CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5IHsgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgfTsKKyAgICBUZXh0RHJh
d2luZ01vZGVGbGFncyBtX3RleHREcmF3aW5nTW9kZSB7IFRleHREcmF3aW5nTW9kZTo6RmlsbCB9
OworCisgICAgYm9vbCBtX3Nob3VsZEFudGlhbGlhcyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hv
dWxkU21vb3RoRm9udHMgeyB0cnVlIH07CisgICAgYm9vbCBtX3Nob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9kcmF3THVtaW5hbmNlTWFzayB7IGZhbHNlIH07CisjaWYgSEFW
RShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIG1fdXNlRGFya0FwcGVhcmFuY2UgeyBm
YWxzZSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
YXV0byBlbmNvZGUgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5n
ZSkpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHRoaXMtPipwcm9wZXJ0eTsKKyAgICB9OworCisg
ICAgZW5jb2RlciA8PCBtX2NsaXBCb3VuZHM7CisKKyAgICBlbmNvZGVyIDw8IG1fY2hhbmdlRmxh
Z3M7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKTsKKworICAgIGVuY29kZShDaGFuZ2U6OkZp
bGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9m
aWxsQnJ1c2gpOworICAgIGVuY29kZShDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBlbmNvZGUo
Q2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVz
cywgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25l
c3MpOworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBlbmNvZGUoQ2hh
bmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fbGluZUNhcCk7CisgICAgZW5jb2RlKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAgICBlbmNv
ZGUoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIGVuY29kZShDaGFuZ2U6Ok1pdGVyTGltaXQsICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KTsK
KworICAgIGVuY29kZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBlbmNvZGUoQ2hhbmdl
OjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fZHJvcFNoYWRvdyk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpOworICAgIGVuY29k
ZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBlbmNvZGUoQ2hhbmdl
OjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIGVuY29kZShDaGFuZ2U6OlNob3VsZEFudGlhbGlh
cywgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxp
YXMpOworICAgIGVuY29kZShDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAgZW5jb2Rl
KENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgZW5jb2RlKENoYW5n
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpEcmF3THVt
aW5hbmNlTWFzaywgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1
bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgZW5jb2Rl
KENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4gR3JhcGhpY3ND
b250ZXh0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGF1dG8gZGVjb2Rl
ID0gWyZdKEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ2hhbmdlIGNoYW5nZSwgYXV0byBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmICghc3RhdGUubV9j
aGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAgICAgdXNpbmcgUHJvcGVydHlUeXBlID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJl
bmNlPGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4oKS4qcHJvcGVy
dHkpPjo6dHlwZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxQcm9wZXJ0eVR5cGU+IHZhbHVlOwor
ICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN0YXRlLipwcm9wZXJ0eSA9ICp2YWx1ZTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0
PiBjbGlwQm91bmRzOworICAgIGRlY29kZXIgPj4gY2xpcEJvdW5kczsKKyAgICBpZiAoIWNsaXBC
b3VuZHMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PENoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKKyAgICBkZWNvZGVyID4+IGNoYW5nZUZsYWdzOwor
ICAgIGlmICghY2hhbmdlRmxhZ3MpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZSgqY2xpcEJvdW5kcywgKmNoYW5nZUZsYWdzKTsK
KworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpGaWxsQnJ1c2gsICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Zp
bGxSdWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2Rl
KHN0YXRlLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9r
ZVN0eWxlLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0
eWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0
YXRlLCBDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2xpbmVDYXApKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbikpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TWl0ZXJM
aW1pdCwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1p
dCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0
ZSwgQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9jb21wb3NpdGVNb2RlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkFscGhhLCAgICAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U2hvdWxk
QW50aWFsaWFzLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkQW50
aWFsaWFzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShz
dGF0ZSwgQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0
ZSwgQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ss
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworI2VuZGlmCisKKyAgICByZXR1cm4gc3RhdGU7Cit9
CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2UpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVl
czwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSwKKyAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q1RNLAorCisgICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCwKKyAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbFJ1bGUsCisKKyAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gs
CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRo
aWNrbmVzcywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
U3Ryb2tlU3R5bGUsCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6TGluZUNhcCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6TGluZURhc2gsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OkxpbmVKb2luLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpNaXRlckxpbWl0LAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkRyb3BTaGFkb3csCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksCisgICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwK
KworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRB
bnRpYWxpYXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlNob3VsZFNtb290aEZvbnRzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsCisgICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLAor
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcmF3THVtaW5h
bmNlTWFzaworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgICwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UKKyNlbmRp
ZgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mNzIxMzI4NTI2MWU2OTBjYTMwNjBkN2UwMjZlNTBlNTJlZWE1OTBmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlci5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkK
KyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3Jl
KHNhdmVBbmRSZXN0b3JlKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisg
ICAgICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOworICAgIH0KKyAgICAKKyAgICB+R3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcigpCisgICAgeworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkK
KyAgICAgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2F2ZSgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAg
ICBtX2NvbnRleHQuc2F2ZSgpOworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlc3RvcmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2F2ZUFu
ZFJlc3RvcmUpOworICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOworICAgICAgICBtX3NhdmVB
bmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX2NvbnRleHQ7IH0KKworcHJpdmF0ZToKKyAgICBHcmFw
aGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Cit9Owor
CitjbGFzcyBUcmFuc3BhcmVuY3lMYXllclNjb3BlIHsKK3B1YmxpYzoKKyAgICBUcmFuc3BhcmVu
Y3lMYXllclNjb3BlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxwaGEsIGJvb2wg
YmVnaW5MYXllciA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAg
ICwgbV9hbHBoYShhbHBoYSkKKyAgICAgICAgLCBtX2JlZ2FuTGF5ZXIoYmVnaW5MYXllcikKKyAg
ICB7CisgICAgICAgIGlmIChiZWdpbkxheWVyKQorICAgICAgICAgICAgbV9jb250ZXh0LmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYmVnaW5M
YXllcihmbG9hdCBhbHBoYSkKKyAgICB7CisgICAgICAgIG1fYWxwaGEgPSBhbHBoYTsKKyAgICAg
ICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7CisgICAgICAgIG1f
YmVnYW5MYXllciA9IHRydWU7CisgICAgfQorICAgIAorICAgIH5UcmFuc3BhcmVuY3lMYXllclNj
b3BlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2JlZ2FuTGF5ZXIpCisgICAgICAgICAgICBtX2Nv
bnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3Jh
cGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CisgICAgZmxvYXQgbV9hbHBoYTsKKyAgICBib29sIG1f
YmVnYW5MYXllcjsKK307CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2Vy
IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAg
ICwgbV9zdGFja1NpemUoY29udGV4dC5zdGFja1NpemUoKSkKKyAgICB7IH0KKworICAgIH5HcmFw
aGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCisgICAgeworICAgICAgICBpZiAobV9jb250
ZXh0LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQorICAgICAgICAgICAgV1RGTG9nQWx3YXlz
KCJHcmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBieSAlZCIsICZtX2NvbnRleHQsIChp
bnQpbV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0YWNrU2l6ZSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIHVuc2lnbmVkIG1f
c3RhY2tTaXplOworfTsKKworY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVy
cG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhp
Y3NDb250ZXh0KQorICAgICAgICAsIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KGdyYXBo
aWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCisgICAgICAgICwgbV9pbnRl
cnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSAhPSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0
eSAhPSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQorICAgIHsKKyAgICAgICAgaWYgKG1faW50
ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQorICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQu
c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKTsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlv
blF1YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5KQorICAgICAgICA6IEludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGludGVycG9sYXRpb25RdWFsaXR5ID8g
aW50ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KCkpCisgICAgeworICAgIH0KKworICAgIH5JbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2VkKQorICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7CisgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7CisgICAgYm9v
bCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NU
eXBlcy5jcHAKaW5kZXggMTVkZjFkZmRiNmYzYTE2YWQ1ZWFmNjQ3MjYxZmNmYzRiN2E5M2FiNC4u
NjJmOWY0NjRjM2Q2ZDlkNWEwOWNhNWE0YjdiZDhhMTAzNjE1OTFjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKQEAgLTEyNiwy
NyArMTI2LDUxIEBAIFN0cmluZyBibGVuZE1vZGVOYW1lKEJsZW5kTW9kZSBibGVuZE9wKQogICAg
IHJldHVybiBibGVuZE9wZXJhdG9yTmFtZXNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJsZW5kT3Ap
IC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEJsZW5kTW9kZTo6Tm9ybWFsKV07CiB9CiAKK1RleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7
CisgICAgcmV0dXJuIHRzIDw8IGJsZW5kTW9kZU5hbWUoYmxlbmRNb2RlKTsKK30KKworVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVN
b2RlKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGNvbXBv
c2l0ZU1vZGUub3BlcmF0aW9uKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBj
b21wb3NpdGVNb2RlLmJsZW5kTW9kZSk7CisgICAgcmV0dXJuIHRzOworfQorCiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAg
ICByZXR1cm4gdHMgPDwgY29tcG9zaXRlT3BlcmF0b3JOYW1lKG9wLCBCbGVuZE1vZGU6Ok5vcm1h
bCk7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KQogewotICAgIHJldHVybiB0cyA8PCBibGVuZE1vZGVO
YW1lKGJsZW5kTW9kZSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zmc2V0IiwgZHJv
cFNoYWRvdy5vZmZzZXQpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBkcm9w
U2hhZG93LmJsdXJSYWRpdXMpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWNvbG9yIiwg
ZHJvcFNoYWRvdy5jb2xvcik7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdh
Y3ktcmFkaXVzIiwgZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSk7CisgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBXaW5kUnVsZSBydWxlKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkpCiB7Ci0g
ICAgc3dpdGNoIChydWxlKSB7Ci0gICAgY2FzZSBXaW5kUnVsZTo6Tm9uWmVybzoKLSAgICAgICAg
dHMgPDwgIk5PTi1aRVJPIjsKKyAgICBzd2l0Y2ggKGludGVycG9sYXRpb25RdWFsaXR5KSB7Cisg
ICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKKyAgICAgICAgdHMgPDwgIkRF
RkFVTFQiOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdpbmRSdWxlOjpFdmVuT2RkOgotICAg
ICAgICB0cyA8PCAiRVZFTi1PREQiOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRv
Tm90SW50ZXJwb2xhdGU6CisgICAgICAgIHRzIDw8ICJETy1OT1QtSU5URVJQT0xBVEUiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6CisgICAgICAg
IHRzIDw8ICJMT1ciOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFs
aXR5OjpNZWRpdW06CisgICAgICAgIHRzIDw8ICJNRURJVU0iOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAgICAgICB0cyA8PCAiSEVJR0gi
OwogICAgICAgICBicmVhazsKICAgICB9Ci0KICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTE2Niw2
ICsxOTAsMTEgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUNh
cCBjYXBTdHlsZSkKICAgICByZXR1cm4gdHM7CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIExpbmVEYXNoKQoreworICAgIHJldHVybiB0czsKK30KKwogVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gam9pblN0eWxlKQogewog
ICAgIHN3aXRjaCAoam9pblN0eWxlKSB7CkBAIC0xODIsNCArMjExLDU2IEBAIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVKb2luIGpvaW5TdHlsZSkKICAgICByZXR1
cm4gdHM7CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFN0cm9r
ZVN0eWxlIHN0cm9rZVN0eWxlKQoreworICAgIHN3aXRjaCAoc3Ryb2tlU3R5bGUpIHsKKyAgICBj
YXNlIFN0cm9rZVN0eWxlOjpOb1N0cm9rZToKKyAgICAgICAgdHMgPDwgIk5PLVNUUk9LRSI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlOgorICAgICAg
ICB0cyA8PCAiU09MSUQtU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VT
dHlsZTo6RG90dGVkU3Ryb2tlOgorICAgICAgICB0cyA8PCAiRE9UVEVELVNUUk9LRSI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5bGU6OkRhc2hlZFN0cm9rZToKKyAgICAgICAg
dHMgPDwgIkRBU0hFRC1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0
eWxlOjpEb3VibGVTdHJva2U6CisgICAgICAgIHRzIDw8ICJET1VCTEUtU1RST0tFIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6V2F2eVN0cm9rZToKKyAgICAgICAgdHMg
PDwgIldBVlktU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsK
K30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVGV4dERyYXdpbmdN
b2RlIHRleHREcmF3aW5nTW9kZSkKK3sKKyAgICBzd2l0Y2ggKHRleHREcmF3aW5nTW9kZSkgewor
ICAgIGNhc2UgVGV4dERyYXdpbmdNb2RlOjpGaWxsOgorICAgICAgICB0cyA8PCAiRklMTCI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dERyYXdpbmdNb2RlOjpTdHJva2U6CisgICAgICAg
IHRzIDw8ICJTVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOwor
fQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBXaW5kUnVsZSBydWxl
KQoreworICAgIHN3aXRjaCAocnVsZSkgeworICAgIGNhc2UgV2luZFJ1bGU6Ok5vblplcm86Cisg
ICAgICAgIHRzIDw8ICJOT04tWkVSTyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2luZFJ1
bGU6OkV2ZW5PZGQ6CisgICAgICAgIHRzIDw8ICJFVkVOLU9ERCI7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiB0czsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4
IDRkMjA0ZTk3ZTVjNTQ0ZDc3NmJmYTdmMzBhYWNjMWI3YzQ2M2UwZTAuLjBmOGIyZDAyNzU1YmZh
ZWM2NWQ5NWMwNGYyYzQ1YjUyNDk0ZjI2MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTI1LDYgKzI1LDkgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRhc2hBcnJheS5oIgorI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5jbHVkZSA8d3Rm
L0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNzMsNiArNzYsNzkg
QEAgZW51bSBjbGFzcyBCbGVuZE1vZGUgOiB1aW50OF90IHsKICAgICBQbHVzTGlnaHRlcgogfTsK
IAorc3RydWN0IENvbXBvc2l0ZU1vZGUgeworICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlv
bjsKKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlOworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENvbXBvc2l0ZU1vZGUmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbiA9
PSBvdGhlci5vcGVyYXRpb24gJiYgYmxlbmRNb2RlID09IG90aGVyLmJsZW5kTW9kZTsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PENvbXBvc2l0ZU1vZGU+IGRlY29kZShEZWNvZGVyJik7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgordm9pZCBDb21wb3NpdGVNb2RlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IG9wZXJhdGlvbjsKKyAgICBlbmNvZGVyIDw8IGJsZW5kTW9k
ZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8Q29tcG9zaXRl
TW9kZT4gQ29tcG9zaXRlTW9kZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3Rk
OjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3BlcmF0aW9uOworICAgIGRlY29kZXIgPj4g
b3BlcmF0aW9uOworICAgIGlmICghb3BlcmF0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKKyAgICBkZWNv
ZGVyID4+IGJsZW5kTW9kZTsKKyAgICBpZiAoIWJsZW5kTW9kZSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm9wZXJhdGlvbiwgKmJsZW5kTW9kZSB9IH07
Cit9CisKK3N0cnVjdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSB7CisgICAgZW51bSBjbGFzcyBN
b2RlIDogdWludDhfdCB7CisgICAgICAgIFRleHRDaGVja2luZ0RpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXMsCisgICAgICAgIFNwZWxsaW5nLAorICAgICAgICBHcmFtbWFyLAorICAgICAg
ICBBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAorICAgICAgICBEaWN0YXRpb25BbHRlcm5hdGl2
ZXMKKyAgICB9IG1vZGU7CisgICAgYm9vbCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB7IGZhbHNl
IH07CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IGRlY29kZShEZWNvZGVyJik7Cit9OworCit0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtb2RlOworICAgIGVuY29k
ZXIgPDwgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CitzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25h
bDxNb2RlPiBtb2RlOworICAgIGRlY29kZXIgPj4gbW9kZTsKKyAgICBpZiAoIW1vZGUpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlOworICAgIGRlY29kZXIgPj4gc2hvdWxkVXNlRGFya0FwcGVhcmFu
Y2U7CisgICAgaWYgKCFzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm1vZGUsICpzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZSB9IH07Cit9CisKIGVudW0gY2xhc3MgR3JhZGllbnRTcHJlYWRNZXRob2QgOiB1aW50OF90
IHsKICAgICBQYWQsCiAgICAgUmVmbGVjdCwKQEAgLTkzLDYgKzE2OSw0MiBAQCBlbnVtIGNsYXNz
IExpbmVDYXAgOiB1aW50OF90IHsKICAgICBTcXVhcmUKIH07CiAKK3N0cnVjdCBMaW5lRGFzaCB7
CisgICAgRGFzaEFycmF5IGRhc2hlczsKKyAgICBmbG9hdCBvZmZzZXQ7CisgICAgCisgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExpbmVEYXNoPiBkZWNv
ZGUoRGVjb2RlciYpOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMaW5lRGFz
aCYgYSwgY29uc3QgTGluZURhc2gmIGIpCit7CisgICAgcmV0dXJuIGEuZGFzaGVzID09IGIuZGFz
aGVzICYmIGEub2Zmc2V0ID09IGIub2Zmc2V0OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgordm9pZCBMaW5lRGFzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
ZW5jb2RlciA8PCBkYXNoZXM7CisgICAgZW5jb2RlciA8PCBvZmZzZXQ7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPExpbmVEYXNoPiBMaW5lRGFzaDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hl
czsKKyAgICBkZWNvZGVyID4+IGRhc2hlczsKKyAgICBpZiAoIWRhc2hlcykKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9mZnNldDsKKyAg
ICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgV1RGTW92ZSgqZGFzaGVzKSwgKm9mZnNldCB9
IH07Cit9CisKIGVudW0gY2xhc3MgTGluZUpvaW4gOiB1aW50OF90IHsKICAgICBNaXRlciwKICAg
ICBSb3VuZCwKQEAgLTEwNSw2ICsyMTcsNzYgQEAgZW51bSBIb3Jpem9udGFsQWxpZ25tZW50IHsK
ICAgICBBbGlnbkhDZW50ZXIKIH07CiAKKy8vIExlZ2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMg
dXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorLy8gSXQgaGFzIGRpZmZl
cmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCitlbnVtIGNsYXNzIFNoYWRvd1JhZGl1c01v
ZGUgOiBib29sIHsKKyAgICBEZWZhdWx0LAorICAgIExlZ2FjeQorfTsKKworc3RydWN0IERyb3BT
aGFkb3cgeworICAgIEZsb2F0U2l6ZSBvZmZzZXQ7CisgICAgZmxvYXQgYmx1clJhZGl1cyB7IDAg
fTsKKyAgICBDb2xvciBjb2xvcjsKKyAgICBTaGFkb3dSYWRpdXNNb2RlIHJhZGl1c01vZGUgeyBT
aGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07CisgICAgCisgICAgYm9vbCBpc1Zpc2libGUoKSBj
b25zdCB7IHJldHVybiBjb2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaXNCbHVycmVkKCkg
Y29uc3QgeyByZXR1cm4gaXNWaXNpYmxlKCkgJiYgYmx1clJhZGl1czsgfQorICAgIGJvb2wgaGFz
T3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIGlzQmx1cnJlZCgpIHx8IChpc1Zpc2libGUoKSAmJiAh
b2Zmc2V0LmlzWmVybygpKTsgfQorICAgIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxEcm9wU2hhZG93PiBkZWNvZGUoRGVjb2RlciYpOworfTsKKwor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEcm9wU2hhZG93JiBhLCBjb25zdCBEcm9wU2hh
ZG93JiBiKQoreworICAgIHJldHVybiBhLm9mZnNldCA9PSBiLm9mZnNldCAmJiBhLmJsdXJSYWRp
dXMgPT0gYi5ibHVyUmFkaXVzICYmIGEuY29sb3IgPT0gYi5jb2xvciAmJiBhLnJhZGl1c01vZGUg
PT0gYi5yYWRpdXNNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBEcm9w
U2hhZG93OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IG9mZnNldDsKKyAgICBlbmNvZGVyIDw8IGJsdXJSYWRpdXM7CisgICAgZW5jb2RlciA8PCBjb2xv
cjsKKyAgICBlbmNvZGVyIDw8IHJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29k
ZXI+CitzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IERyb3BTaGFkb3c6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiBvZmZzZXQ7CisgICAg
ZGVjb2RlciA+PiBvZmZzZXQ7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBibHVyUmFkaXVzOworICAgIGRl
Y29kZXIgPj4gYmx1clJhZGl1czsKKyAgICBpZiAoIWJsdXJSYWRpdXMpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBk
ZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29sb3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFNoYWRvd1JhZGl1c01vZGU+IHJhZGl1c01vZGU7
CisgICAgZGVjb2RlciA+PiByYWRpdXNNb2RlOworICAgIGlmICghcmFkaXVzTW9kZSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm9mZnNldCwgKmJsdXJS
YWRpdXMsICpjb2xvciwgKnJhZGl1c01vZGUgfSB9OworfQorCitlbnVtIFN0cm9rZVN0eWxlIHsK
KyAgICBOb1N0cm9rZSwKKyAgICBTb2xpZFN0cm9rZSwKKyAgICBEb3R0ZWRTdHJva2UsCisgICAg
RGFzaGVkU3Ryb2tlLAorICAgIERvdWJsZVN0cm9rZSwKKyAgICBXYXZ5U3Ryb2tlLAorfTsKKwog
ZW51bSBUZXh0QmFzZWxpbmUgewogICAgIEFscGhhYmV0aWNUZXh0QmFzZWxpbmUsCiAgICAgVG9w
VGV4dEJhc2VsaW5lLApAQCAtMTIyLDE2ICszMDQsMjkgQEAgZW51bSBUZXh0QWxpZ24gewogICAg
IFJpZ2h0VGV4dEFsaWduCiB9OwogCi1TdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1lKFdlYkNv
cmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwotU3RyaW5nIGJsZW5k
TW9kZU5hbWUoV2ViQ29yZTo6QmxlbmRNb2RlKTsKLWJvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3Qg
U3RyaW5nJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7Ci1ib29sIHBhcnNlQ29tcG9zaXRlQW5kQmxl
bmRPcGVyYXRvcihjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciYsIFdl
YkNvcmU6OkJsZW5kTW9kZSYpOworZW51bSBjbGFzcyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90
IHsKKyAgICBGaWxsID0gMSA8PCAwLAorICAgIFN0cm9rZSA9IDEgPDwgMSwKK307CiAKLVdFQkNP
UkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBX
ZWJDb3JlOjpCbGVuZE1vZGUpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yKTsKLVdF
QkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBXaW5kUnVsZSk7Cit1c2luZyBUZXh0RHJhd2luZ01vZGVGbGFncyA9IE9wdGlvblNldDxUZXh0
RHJhd2luZ01vZGU+OworCitTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1lKENvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUpOworU3RyaW5nIGJsZW5kTW9kZU5hbWUoQmxlbmRNb2RlKTsKK2Jv
b2wgcGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwgQmxlbmRNb2RlJik7Citib29sIHBhcnNl
Q29tcG9zaXRlQW5kQmxlbmRPcGVyYXRvcihjb25zdCBTdHJpbmcmLCBDb21wb3NpdGVPcGVyYXRv
ciYsIEJsZW5kTW9kZSYpOworCitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQmxlbmRNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDb21wb3NpdGVPcGVyYXRv
cik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgQ29tcG9zaXRlTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRHJvcFNoYWRvdyYpOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIElu
dGVycG9sYXRpb25RdWFsaXR5KTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lQ2FwKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lRGFzaCk7CiBXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
TGluZUpvaW4pOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIFN0cm9rZVN0eWxlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBUZXh0RHJhd2luZ01vZGUpOworV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IFdpbmRSdWxlKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkBAIC0yMTksNCArNDE0LDM1
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6TGluZUpvaW4+IHsKICAg
ICA+OwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VT
dHlsZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6U3Ry
b2tlU3R5bGUsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlLAorICAgIFdlYkNv
cmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6
RG90dGVkU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCisg
ICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJv
a2VTdHlsZTo6V2F2eVN0cm9rZQorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZSwKKyAgICAgICAgV2Vi
Q29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2lu
Z01vZGU6OlN0cm9rZQorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlPiB7CisgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
TW9kZSwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENo
ZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKKyAgICBXZWJDb3JlOjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcsCisgICAgV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZl
cworICAgID47Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2Uu
Y3BwCmluZGV4IDRlMDcxZjcyZjM1YmU4YTU4ZmM0Y2Q1NzdhMTQ1NmRlMTc0NjY4MmMuLjQxYjA1
MTFhOGY3OGExNzliMzA0Y2Y4OWQ0MTAzZTM1ZGUzZTEyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZElt
YWdlLmNwcApAQCAtNDQsNyArNDQsNyBAQCBJbWFnZURyYXdSZXN1bHQgTmFtZWRJbWFnZUdlbmVy
YXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRgogewogI2lm
IFVTRShORVdfVEhFTUUpIHx8IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1v
ZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChkc3RS
ZWN0KTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlm
IChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAppbmRleCBiNjIz
Njc4ODBlM2U1MzU0YjYxNzExMzQ3YzlhMTFiNDIyNDY4ODVlLi5kNjdkM2VhMTE1ZDI0ZWZkOTA5
ZTAzYWM5YWRlOTNhOGI0NzY0ZmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDg3ICszOCw1NyBAQCBwdWJs
aWM6CiAgICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAogICAgIH07CiAKLSAgICBOdWxs
R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQotICAgICAg
ICA6IG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKHJlYXNvbnMpCisgICAgTnVsbEdyYXBoaWNz
Q29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcmVhc29ucykKKyAgICAgICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENsaXApCisg
ICAgICAgICwgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKICAgICB7CiAgICAg
fQogCiBwcml2YXRlOgotI2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQo
Ym9vbCkgZmluYWwgeyB9Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotCiAgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wgcGVyZm9ybWluZ1BhaW50SW52
YWxpZGF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNv
bnMgIT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lOyB9CiAgICAgYm9vbCBpbnZhbGlk
YXRpbmdDb250cm9sVGludHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0
aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRy
b2xUaW50czsgfQogICAgIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50
SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlczsg
fQogICAgIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQ7IH0KIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncykgZmluYWwgeyB9Ci0KLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0FjY2Vs
ZXJhdGVkQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsg
fQotCi0gICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH07Ci0KLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWwgeyB9Ci0KLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB7IH07IH0KLQorICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQg
cmVzdG9yZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbCB7
IH07CiAjaWYgVVNFKENHKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9
CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3UGF0
aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgPSAxKSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWwgeyB9Ci0gICAgdm9pZCBk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFs
IHsgfQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYs
IFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQotICAgIEZsb2F0UmVjdCBy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlID0g
Um91bmRBbGxTaWRlcykgZmluYWwgeyByZXR1cm4gcmVjdDsgfQotICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2ws
IGJvb2wgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSkgZmluYWwgeyB9Ci0gICAg
dm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGluZUpvaW4o
TGluZUpvaW4pIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWwg
eyB9Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNj
YWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsIHsgfQotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBm
aW5hbCB7IH0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIGZpbmFsIHsgfQotICAg
IHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQotICAgIHZv
aWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQotICAgIEFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNl
U2NhbGUpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotICAgIHZvaWQgY2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFs
IHsgfQorCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZv
aWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZp
bmFsIHsgfQogICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAg
ICB2b2lkIHNhdmUoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbCB7IH0KLQot
ICAgIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikg
ZmluYWwgeyB9CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCA9
IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpudWxsb3B0KSBmaW5hbCB7IHJldHVy
biB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0K
IAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5n
JiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gPSBzdGQ6Om51bGxvcHQpIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2Fz
Y2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJ
ZkZvbnROb3RSZWFkeSkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7
IH0KKyAgICAKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZp
bmFsIHsgfQogCi0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7
IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICB2b2lkIGRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWwgeyB9CiAKLSAgICBJbWFn
ZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1
bHQ6OkRpZE5vdGhpbmc7IH0KLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUm
LCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7
IH0KKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAg
IHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQogCiAgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xv
ciYpIGZpbmFsIHsgfQogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQs
IGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQpAQCAtMTI3LDI4ICs5NywyNiBAQCBwcml2
YXRlOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRv
dWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIHZvaWQg
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KLSAg
ICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsOwotCi0gICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9Ci0gICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVu
ZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLQorICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0
cyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFn
ZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJh
d1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KKyAgICB2
b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9
CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAjZW5kaWYKIAorICAgIHZvaWQgZHJh
d0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGlu
Z01vZGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsIHsgfQorCisgICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUg
PSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisKICNpZiBPUyhXSU5ET1dT
KSAmJiAhVVNFKENBSVJPKQogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQog
I2VuZGlmCiAKLXByaXZhdGU6CiAgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1f
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25l
IH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTAxZmQzOTQ2NDMzOWQy
ZDRkNTRiYTkzNjRjNTk0NWNmYWQ3ZDVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaApAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIkRJQlBpeGVsRGF0YS5o
IgordHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKKyNpZiAhVVNFKENHKQorLy8gVUludDggaXMg
ZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2UuaAordHlwZWRlZiB1bnNpZ25lZCBjaGFy
IFVJbnQ4OworI2VuZGlmCisjZW5kaWYKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0ID0gc3RydWN0IENHQ29udGV4dDsKKyNlbGlmIFVTRShDQUlSTykKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOworfQordXNpbmcgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzsKKyNl
bHNlCit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IHZvaWQ7CisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggYmIx
MzhiNTI5N2E1MjFmYmY3ZDY5M2NkMTE0MTA0NDAwZmNhYmM0ZS4uOTAyNGY1ZDFhYmZjZTM4MDgx
ODNhM2IyMzFmYmNlMGZmYjJmZjQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTE5MSwxNyArMTkxLDE3IEBAIFNoYWRvd0JsdXI6
OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0LCBjb25zdCBDCiAgICAgdXBkYXRlU2hhZG93Qmx1clZhbHVlcygpOwogfQogCi1TaGFkb3dC
bHVyOjpTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLSAgICA6
IG1fY29sb3Ioc3RhdGUuc2hhZG93Q29sb3IpCi0gICAgLCBtX2JsdXJSYWRpdXMoc3RhdGUuc2hh
ZG93Qmx1ciwgc3RhdGUuc2hhZG93Qmx1cikKLSAgICAsIG1fb2Zmc2V0KHN0YXRlLnNoYWRvd09m
ZnNldCkKLSAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IERyb3BTaGFkb3cmIGRy
b3BTaGFkb3csIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCisgICAgOiBtX2NvbG9yKGRy
b3BTaGFkb3cuY29sb3IpCisgICAgLCBtX2JsdXJSYWRpdXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVz
LCBkcm9wU2hhZG93LmJsdXJSYWRpdXMpCisgICAgLCBtX29mZnNldChkcm9wU2hhZG93Lm9mZnNl
dCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpCiB7CiAjaWYgVVNFKENHKQogICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVu
ZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4p
LAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9y
IGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRp
dXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgewotICAgICAgICBmbG9hdCBzaGFk
b3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CisgICAgaWYg
KGRyb3BTaGFkb3cucmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpIHsKKyAg
ICAgICAgZmxvYXQgc2hhZG93Qmx1ciA9IHJhZGl1c1RvTGVnYWN5UmFkaXVzKGRyb3BTaGFkb3cu
Ymx1clJhZGl1cyk7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVy
LCBzaGFkb3dCbHVyKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuaAppbmRleCAxNGZkODNlZGUxYTFiYWNmMTc3ZjMzMWVjYWQx
YTQzMDI5M2Y2MDNhLi40NWQwZTU4MzI5Y2RlZWFiZmI3OGE0ZDVlNjdhYjhkODgxYWU1NGZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCkBAIC0z
OCw4ICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3Jt
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK3N0cnVjdCBE
cm9wU2hhZG93OwogCiBjbGFzcyBTaGFkb3dCbHVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTaGFkb3dCbHVyKTsKQEAgLTUyLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgU2hhZG93Qmx1
cigpOwogICAgIFNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMg
PSBmYWxzZSk7Ci0gICAgU2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwor
ICAgIFNoYWRvd0JsdXIoY29uc3QgRHJvcFNoYWRvdyYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgPSBmYWxzZSk7CiAKICAgICB2b2lkIHNldFNoYWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBGbG9hdFNpemUmICwgY29uc3QgQ29sb3ImLCBib29sIGlnbm9yZVRyYW5zZm9y
bXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJydXNoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJydXNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzZhYzEzZmQyNWM2ZjBmODAxNTg3MmZmMTllZDI4
YTFmYTUyYmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU291cmNlQnJ1c2guY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNvdXJjZUJydXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU291cmNlQnJ1c2g6
OlNvdXJjZUJydXNoKGNvbnN0IENvbG9yJiBjb2xvciwgc3RkOjpvcHRpb25hbDxCcnVzaD4mJiBi
cnVzaCkKKyAgICA6IG1fY29sb3IoY29sb3IpCisgICAgLCBtX2JydXNoKFdURk1vdmUoYnJ1c2gp
KQoreworfQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFNvdXJjZUJydXNoOjpzcGFjZVRyYW5z
Zm9ybSgpIGNvbnN0Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEFmZmluZVRyYW5zZm9y
bT4gaWRlbnRpdHk7CisgICAgcmV0dXJuIG1fYnJ1c2ggPyBtX2JydXNoLT5zcGFjZVRyYW5zZm9y
bSA6IGlkZW50aXR5LmdldCgpOworfQorCitHcmFkaWVudCogU291cmNlQnJ1c2g6OmdyYWRpZW50
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChhdXRvKiBncmFkaWVudCA9IHN0ZDo6Z2V0X2lmPFJlZjxHcmFkaWVudD4+KCZtX2Jy
dXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBncmFkaWVudC0+cHRyKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK1BhdHRlcm4qIFNvdXJjZUJydXNoOjpwYXR0ZXJuKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRv
KiBwYXR0ZXJuID0gc3RkOjpnZXRfaWY8UmVmPFBhdHRlcm4+PigmbV9icnVzaC0+YnJ1c2gpKQor
ICAgICAgICByZXR1cm4gcGF0dGVybi0+cHRyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3ZvaWQgU291cmNlQnJ1c2g6OnNldEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkKK3sKKyAgICBtX2JydXNoID0g
eyBXVEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKwordm9pZCBTb3VyY2VC
cnVzaDo6c2V0UGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQoreworICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUocGF0dGVy
biksIHNwYWNlVHJhbnNmb3JtIH07Cit9CisKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgU291cmNlQnJ1c2gmIGJydXNoKQoreworICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiY29sb3IiLCBicnVzaC5jb2xvcigpKTsKKworICAgIGlmIChhdXRvIGdyYWRpZW50
ID0gYnJ1c2guZ3JhZGllbnQoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJncmFkaWVudCIs
IGdyYWRpZW50KTsKKworICAgIGlmIChhdXRvIHBhdHRlcm4gPSBicnVzaC5wYXR0ZXJuKCkpCisg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVybiIsIHBhdHRlcm4pOworCisgICAgcmV0dXJu
IHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTEwZjIxZmRiZWFjYmYz
NWQ3ODkwYzc4ZjczOTk3OTY0YWRmZWExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaApAQCAtMCwwICsxLDE2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJQ
YXR0ZXJuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU291cmNlQnJ1c2ggewor
cHVibGljOgorICAgIHN0cnVjdCBCcnVzaCB7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWY8R3Jh
ZGllbnQ+LCBSZWY8UGF0dGVybj4+IGJydXNoOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gc3Bh
Y2VUcmFuc2Zvcm07CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVy
PiBzdGF0aWMgc3RkOjpvcHRpb25hbDxCcnVzaD4gZGVjb2RlKERlY29kZXImKTsKKyAgICB9Owor
CisgICAgU291cmNlQnJ1c2goKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgU291cmNl
QnJ1c2goY29uc3QgQ29sb3ImLCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYmID0gc3RkOjpudWxsb3B0
KTsKKworICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0K
KyAgICB2b2lkIHNldENvbG9yKGNvbnN0IENvbG9yIGNvbG9yKSB7IG1fY29sb3IgPSBjb2xvcjsg
fQorCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxCcnVzaD4mIGJydXNoKCkgY29uc3QgeyByZXR1
cm4gbV9icnVzaDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgR3JhZGllbnQqIGdyYWRpZW50KCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUGF0dGVybiogcGF0dGVybigpIGNvbnN0OworICAg
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIHZv
aWQgc2V0R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNw
YWNlVHJhbnNmb3JtID0geyB9KTsKKyAgICB2b2lkIHNldFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworCisgICAgYm9v
bCBpc1ByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2JydXNoICYmIG1fY29sb3IudHJ5R2V0
QXNTUkdCQUJ5dGVzKCk7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxTb3VyY2VCcnVzaD4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToK
KyAgICBDb2xvciBtX2NvbG9yIHsgQ29sb3I6OmJsYWNrIH07CisgICAgc3RkOjpvcHRpb25hbDxC
cnVzaD4gbV9icnVzaDsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qgc3RkOjp2
YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGEsIGNvbnN0IHN0ZDo6dmFyaWFu
dDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0dGVybj4+JiBiKQoreworICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKGEsCisgICAgICAgIFsmXSAoY29uc3QgUmVmPEdyYWRpZW50PiYgYUdyYWRpZW50KSB7
CisgICAgICAgICAgICBpZiAoYXV0byogYkdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdyYWRp
ZW50Pj4oJmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhR3JhZGllbnQucHRyKCkgPT0gYkdy
YWRpZW50LT5wdHIoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSwKKyAg
ICAgICAgWyZdIChjb25zdCBSZWY8UGF0dGVybj4mIGFQYXR0ZXJuKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byogYlBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZiKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYVBhdHRlcm4ucHRyKCkgPT0gYlBhdHRlcm4tPnB0cigpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaDo6QnJ1c2gmIGEsIGNvbnN0IFNvdXJjZUJy
dXNoOjpCcnVzaCYgYikKK3sKKyAgICByZXR1cm4gYS5icnVzaCA9PSBiLmJydXNoICYmIGEuc3Bh
Y2VUcmFuc2Zvcm0gPT0gYi5zcGFjZVRyYW5zZm9ybTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBTb3VyY2VCcnVzaCYgYSwgY29uc3QgU291cmNlQnJ1c2gmIGIpCit7CisgICAg
cmV0dXJuIGEuY29sb3IoKSA9PSBiLmNvbG9yKCkgJiYgYS5icnVzaCgpID09IGIuYnJ1c2goKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KK3ZvaWQgU291cmNlQnJ1c2g6OkJydXNo
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHNwYWNl
VHJhbnNmb3JtOworICAgIFdURjo6c3dpdGNoT24oYnJ1c2gsCisgICAgICAgIFsmXSAoY29uc3Qg
UmVmPEdyYWRpZW50PiYgZ3JhZGllbnQpIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdHJ1ZSA8
PCBncmFkaWVudC5nZXQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8UGF0
dGVybj4mIHBhdHRlcm4pIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgZmFsc2UgPDwgcGF0dGVy
bi5nZXQoKTsKKyAgICAgICAgfQorICAgICk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERlY29k
ZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoOjpCcnVzaD4gU291cmNlQnJ1c2g6OkJydXNo
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEFmZmluZVRy
YW5zZm9ybT4gc3BhY2VUcmFuc2Zvcm07CisgICAgZGVjb2RlciA+PiBzcGFjZVRyYW5zZm9ybTsK
KyAgICBpZiAoIXNwYWNlVHJhbnNmb3JtKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
CisgICAgc3RkOjpvcHRpb25hbDxib29sPiBoYXNHcmFkaWVudDsKKyAgICBkZWNvZGVyID4+IGhh
c0dyYWRpZW50OworICAgIGlmICghaGFzR3JhZGllbnQpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgCisgICAgaWYgKCpoYXNHcmFkaWVudCkgeworICAgICAgICBhdXRvIGdyYWRp
ZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFncmFkaWVudCkK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IHsgV1RG
TW92ZSgqZ3JhZGllbnQpLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworICAgIH0KKworICAgIGF1dG8g
cGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsKKyAgICBpZiAoIXBhdHRlcm4pCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpwYXR0
ZXJuKSwgKnNwYWNlVHJhbnNmb3JtIH0gfTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
K3ZvaWQgU291cmNlQnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1fYnJ1c2g7Cit9CisKK3RlbXBs
YXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBTb3VyY2VCcnVz
aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4g
Y29sb3I7CisgICAgZGVjb2RlciA+PiBjb2xvcjsKKyAgICBpZiAoIWNvbG9yKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPEJy
dXNoPj4gYnJ1c2g7CisgICAgZGVjb2RlciA+PiBicnVzaDsKKyAgICBpZiAoIWJydXNoKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIFNvdXJjZUJydXNoKCpjb2xv
ciwgV1RGTW92ZSgqYnJ1c2gpKTsKK30KKworV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIGNvbnN0IFNvdXJjZUJydXNoJik7CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRC
b3hJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0
ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzdlNjhlMzhmMDIzN2IwMjIwY2Y2NWJhMmMxMGU4ODg4ZGQ0
OTg1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1RleHRCb3hJdGVyYXRvci5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXh0
UnVuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dEJveEl0ZXJhdG9yIHsK
K3B1YmxpYzoKKyAgICBUZXh0Qm94SXRlcmF0b3IoKQorICAgICAgICA6IG1fdGV4dFJ1bigwKQor
ICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKworICAgIFRleHRCb3hJdGVyYXRv
cihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV90
ZXh0UnVuKHRleHRSdW4pCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAg
IHZvaWQgaW5jcmVtZW50KCkgeyBtX29mZnNldCsrOyB9CisgICAgYm9vbCBhdEVuZCgpIGNvbnN0
IHsgcmV0dXJuICFtX3RleHRSdW4gfHwgbV9vZmZzZXQgPj0gbV90ZXh0UnVuLT5sZW5ndGgoKTsg
fQorICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoKm1fdGV4dFJ1bilbbV9vZmZz
ZXRdOyB9CisgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYXRF
bmQoKSA/IFVfT1RIRVJfTkVVVFJBTCA6IHVfY2hhckRpcmVjdGlvbihjdXJyZW50KCkpOyB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldCAmJiBtX3Rl
eHRSdW4gPT0gb3RoZXIubV90ZXh0UnVuOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhb3BlcmF0b3I9PShv
dGhlcik7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUZXh0UnVuKiBtX3RleHRSdW47CisgICAg
dW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmNwcAppbmRleCA3MjhkM2JlYTBhMTcyMzUwMTRmMGYxMmNmM2Q2ZDdkYTE5M2MzNWE1Li4xNWU4
NDU1N2FjODFhNzY3YTAwNzQ2ZTMwMTYxNTM1NDRmMjE1NjdiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAg
LTE4MzQsNyArMTgzNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRD
aGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAgICAgIAogICAg
ICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUoKSk7CiAKLSAg
ICAgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCBjb250ZXh0KCptX2Rpc3BsYXlMaXN0LCBH
cmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkpOwor
ICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1fZGlzcGxheUxpc3Qs
IGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CiAgICAgICAgIHBhaW50R3JhcGhpY3NM
YXllckNvbnRlbnRzKGNvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoKSkpOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IDE1NTIzNTZhMjNhNWZkZmIxMGFmZWNh
MmNjOTJhNzI3OTQ1ODEwMmUuLjQzN2I3NjRmNDA3YWRlYzBlYjI4Y2RkZjVlZmRhNmNhNGFmNjkw
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtMjI3LDcgKzIyNyw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBkcmF3UGF0aFNoYWRvdyhHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBGCiAgICAgICAgIHNvbGlkRmlndXJlRXh0ZW50cy51bml0ZShmaWxsRXh0ZW50
cyk7CiAgICAgfQogCi0gICAgc2hhZG93LmRyYXdTaGFkb3dMYXllcihTdGF0ZTo6Z2V0Q1RNKHBs
YXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHNv
bGlkRmlndXJlRXh0ZW50cywKKyAgICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRD
VE0ocGxhdGZvcm1Db250ZXh0LmNyKCkpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNv
bnRleHQpLCBzb2xpZEZpZ3VyZUV4dGVudHMsCiAgICAgICAgIFtjYWlyb0NvbnRleHQsIGRyYXdp
bmdTdHlsZSwgJnBhdGgsICZmaWxsU291cmNlLCAmc3Ryb2tlU291cmNlXShHcmFwaGljc0NvbnRl
eHQmIHNoYWRvd0NvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNhaXJvX3QqIGNhaXJv
U2hhZG93Q29udGV4dCA9IHNoYWRvd0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CkBA
IC0zNDEsNyArMzQxLDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0Nv
bnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBTaGFkb3cKICAgICBjYWlyb19zY2Fs
ZWRfZm9udF9nbHlwaF9leHRlbnRzKHNjYWxlZEZvbnQsIGdseXBocy5kYXRhKCksIGdseXBocy5z
aXplKCksICZleHRlbnRzKTsKICAgICBGbG9hdFJlY3QgZm9udEV4dGVudHNSZWN0KHBvaW50Lngo
KSArIGV4dGVudHMueF9iZWFyaW5nLCBwb2ludC55KCkgKyBleHRlbnRzLnlfYmVhcmluZywgZXh0
ZW50cy53aWR0aCwgZXh0ZW50cy5oZWlnaHQpOwogCi0gICAgc2hhZG93LmRyYXdTaGFkb3dMYXll
cihTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBs
YXRmb3JtQ29udGV4dCksIGZvbnRFeHRlbnRzUmVjdCwKKyAgICBzaGFkb3cuZHJhd1NoYWRvd0xh
eWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0LmNyKCkpLCBTdGF0ZTo6Z2V0Q2xpcEJv
dW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBmb250RXh0ZW50c1JlY3QsCiAgICAgICAgIFtzY2FsZWRG
b250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCAmZ2x5cGhzLCBmb250U21vb3RoaW5nTW9kZV0oR3Jh
cGhpY3NDb250ZXh0JiBzaGFkb3dDb250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICBkcmF3
R2x5cGhzVG9Db250ZXh0KHNoYWRvd0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHNj
YWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywgZm9udFNtb290aGluZ01vZGUp
OwpAQCAtMzY3LDcgKzM2Nyw3IEBAIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0CiAgICAgaWYgKHBy
aW50aW5nKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHdpZHRo
LCB0aGlja25lc3MpKTsKIAotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDYWlybzo6
U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpOworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBDYWlybzo6U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSk7CiAgICAg
Ly8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNj
YWxlcyBhcmUgZXF1YWwuCiAgICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpo
eXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7CiAgICAg
aWYgKHNjYWxlIDwgMS4wKSB7CkBAIC00NDYsMTcgKzQ0NiwxNiBAQCBzdGF0aWMgVmVjdG9yPEZs
b2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpbmUs
IGZsb2F0CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAKLXZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKEdy
YXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IHN0cm9rZVRoaWNrbmVz
cykKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJvX3QqIGNyIHBsYXRmb3JtQ29udGV4dCwg
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQogewotICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKHBsYXRm
b3JtQ29udGV4dC5jcigpLCBzdHJva2VUaGlja25lc3MpOworICAgIGNhaXJvX3NldF9saW5lX3dp
ZHRoKGNyLCBzdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBo
aWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KQordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiBjciwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkYXNoUGF0dGVybltdID0geyA1LjAsIDUu
MCB9OwogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG90UGF0dGVybltdID0geyAxLjAsIDEuMCB9
OwogCi0gICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKICAgICBzd2l0Y2gg
KHN0cm9rZVN0eWxlKSB7CiAgICAgY2FzZSBOb1N0cm9rZToKICAgICAgICAgLy8gRklYTUU6IGlz
IGl0IHRoZSByaWdodCB3YXkgdG8gZW11bGF0ZSBOb1N0cm9rZT8KQEAgLTQ3NywyOSArNDc2LDI5
IEBAIHZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5CiAgICAgfQogfQogCi12b2lkIHNldENvbXBvc2l0
ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lk
IHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiBjciwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGNhaXJvX3NldF9v
cGVyYXRvcihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgdG9DYWlyb09wZXJhdG9yKGNvbXBvc2l0ZU9w
ZXJhdGlvbiwgYmxlbmRNb2RlKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCB0b0NhaXJv
T3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBibGVuZE1vZGUpKTsKIH0KIAotdm9pZCBzZXRT
aG91bGRBbnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgYm9v
bCBlbmFibGUpCit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190KiBjciwgYm9vbCBlbmFi
bGUpCiB7CiAgICAgLy8gV2hlbiB0cnVlLCB1c2UgdGhlIGRlZmF1bHQgQ2Fpcm8gYmFja2VuZCBh
bnRpYWxpYXMgbW9kZSAodXN1YWxseSB0aGlzCiAgICAgLy8gZW5hYmxlcyBzdGFuZGFyZCAnZ3Jh
eXNjYWxlJyBhbnRpYWxpYXNpbmcpOyBmYWxzZSB0byBleHBsaWNpdGx5IGRpc2FibGUKICAgICAv
LyBhbnRpYWxpYXNpbmcuCi0gICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQu
Y3IoKSwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNf
Tk9ORSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhjciwgZW5hYmxlID8gQ0FJUk9fQU5USUFM
SUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CiB9CiAKLXZvaWQgc2V0Q1RNKEdy
YXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQordm9pZCBzZXRDVE0oY2Fpcm9fdCogY3IsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQogewogICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IG1hdHJpeCA9IHRv
Q2Fpcm9NYXRyaXgodHJhbnNmb3JtKTsKLSAgICBjYWlyb19zZXRfbWF0cml4KHBsYXRmb3JtQ29u
dGV4dC5jcigpLCAmbWF0cml4KTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNyLCAmbWF0cml4KTsK
IH0KIAotQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0KQorQWZmaW5lVHJhbnNmb3JtIGdldENUTShjYWlyb190KiBjcikKIHsKICAgICBj
YWlyb19tYXRyaXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRyaXgocGxhdGZvcm1Db250ZXh0LmNy
KCksICZtKTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7CiAgICAgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybShtLnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngwLCBtLnkwKTsKIH0KIApAQCAt
NTU2LDQ1ICs1NTUsNDUgQEAgYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dChHcmFwaGljc0NvbnRl
eHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQogfSAvLyBuYW1lc3BhY2UgU3RhdGUKIAogRmlsbFNv
dXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCi0gICAg
OiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGZpbGxSdWxlKHN0YXRlLmZpbGxSdWxl
KQorICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEoKSkKKyAgICAsIGZpbGxSdWxlKHN0YXRl
LmZpbGxSdWxlKCkpCiB7Ci0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAgIHBh
dHRlcm4ub2JqZWN0ID0gYWRvcHRSZWYoc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3Jt
UGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgIGlmIChhdXRvIGZpbGxQYXR0ZXJuID0g
c3RhdGUuZmlsbEJydXNoKCkucGF0dGVybigpKSB7CisgICAgICAgIHBhdHRlcm4ub2JqZWN0ID0g
YWRvcHRSZWYoZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zv
cm0oKSkpOwogCi0gICAgICAgIGF1dG8mIHBhdHRlcm5JbWFnZSA9IHN0YXRlLmZpbGxQYXR0ZXJu
LT50aWxlSW1hZ2UoKTsKKyAgICAgICAgYXV0byYgcGF0dGVybkltYWdlID0gZmlsbFBhdHRlcm4t
PnRpbGVJbWFnZSgpOwogICAgICAgICBwYXR0ZXJuLnNpemUgPSBwYXR0ZXJuSW1hZ2Uuc2l6ZSgp
OwotICAgICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9IHN0YXRlLmZpbGxQYXR0ZXJuLT5wYXR0ZXJu
U3BhY2VUcmFuc2Zvcm0oKTsKLSAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gc3RhdGUuZmlsbFBh
dHRlcm4tPnJlcGVhdFgoKTsKLSAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gc3RhdGUuZmlsbFBh
dHRlcm4tPnJlcGVhdFkoKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCkgewot
ICAgICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJu
KDEsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgaWYgKHN0YXRl
LmFscGhhICE9IDEpCi0gICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gc3RhdGUu
ZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhLCBzdGF0ZS5maWxsR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIHBhdHRlcm4udHJhbnNmb3JtID0gZmlsbFBhdHRl
cm4tPnBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpOworICAgICAgICBwYXR0ZXJuLnJlcGVhdFggPSBm
aWxsUGF0dGVybi0+cmVwZWF0WCgpOworICAgICAgICBwYXR0ZXJuLnJlcGVhdFkgPSBmaWxsUGF0
dGVybi0+cmVwZWF0WSgpOworICAgIH0gZWxzZSBpZiAoYXV0byBmaWxsR3JhZGllbnQgPSBzdGF0
ZS5maWxsQnJ1c2goKS5ncmFkaWVudCgpKSB7CisgICAgICAgIGdyYWRpZW50LmJhc2UgPSBmaWxs
R3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3RhdGUuZmlsbEJydXNoKCkuc3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgICAgIGlmIChzdGF0ZS5hbHBoYSgpICE9IDEpCisgICAgICAgICAgICBncmFk
aWVudC5hbHBoYUFkanVzdGVkID0gZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFs
cGhhKCksIHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCkpOwogICAgIH0gZWxzZQot
ICAgICAgICBjb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsKKyAgICAgICAgY29sb3IgPSBzdGF0ZS5m
aWxsQnJ1c2goKS5jb2xvcigpOwogfQogCiBTdHJva2VTb3VyY2U6OlN0cm9rZVNvdXJjZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCi0gICAgOiBnbG9iYWxBbHBoYShzdGF0ZS5h
bHBoYSkKLXsKLSAgICBpZiAoc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAgICAgICAgcGF0dGVybiA9
IGFkb3B0UmVmKHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihBZmZp
bmVUcmFuc2Zvcm0oKSkpOwotICAgIGVsc2UgaWYgKHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7Ci0g
ICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlUGF0dGVy
bigxLCBzdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgaWYgKHN0
YXRlLmFscGhhICE9IDEpCi0gICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gc3Rh
dGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oc3RhdGUuYWxwaGEsIHN0YXRlLnN0cm9r
ZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEo
KSkKK3sKKyAgICBpZiAoYXV0byBzdHJva2VQYXR0ZXJuID0gc3RhdGUuc3Ryb2tlQnJ1c2goKS5w
YXR0ZXJuKCkpCisgICAgICAgIHBhdHRlcm4gPSBhZG9wdFJlZihzdHJva2VQYXR0ZXJuLT5jcmVh
dGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpKTsKKyAgICBlbHNlIGlmIChhdXRv
IHN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ryb2tlQnJ1c2goKS5ncmFkaWVudCgpKSB7CisgICAg
ICAgIGdyYWRpZW50LmJhc2UgPSBzdHJva2VHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigxLCBzdGF0
ZS5zdHJva2VCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICBpZiAoc3RhdGUuYWxw
aGEoKSAhPSAxKQorICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0cm9rZUdy
YWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhKCksIHN0YXRlLnN0cm9rZUJydXNoKCku
c3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbG9yID0gc3RhdGUuc3Ry
b2tlQ29sb3I7CisgICAgICAgIGNvbG9yID0gc3RhdGUuc3Ryb2tlQnJ1c2goKS5jb2xvcigpOwog
fQogCiBTaGFkb3dTdGF0ZTo6U2hhZG93U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlKQotICAgIDogb2Zmc2V0KHN0YXRlLnNoYWRvd09mZnNldCkKLSAgICAsIGJsdXIoc3Rh
dGUuc2hhZG93Qmx1cikKLSAgICAsIGNvbG9yKHN0YXRlLnNoYWRvd0NvbG9yKQotICAgICwgaWdu
b3JlVHJhbnNmb3JtcyhzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLSAgICAsIGdsb2Jh
bEFscGhhKHN0YXRlLmFscGhhKQotICAgICwgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3Ioc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3IpCisgICAgOiBvZmZzZXQoc3RhdGUuZHJvcFNoYWRvdygpLm9mZnNl
dCkKKyAgICAsIGJsdXIoc3RhdGUuZHJvcFNoYWRvdygpLmJsdXJSYWRpdXMpCisgICAgLCBjb2xv
cihzdGF0ZS5kcm9wU2hhZG93KCkuY29sb3IpCisgICAgLCBpZ25vcmVUcmFuc2Zvcm1zKHN0YXRl
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpCisgICAgLCBnbG9iYWxBbHBoYShzdGF0ZS5hbHBo
YSgpKQorICAgICwgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3Ioc3RhdGUuY29tcG9zaXRlTW9kZSgp
Lm9wZXJhdGlvbikKIHsKIH0KIApAQCAtNjE1LDE0ICs2MTQsMTQgQEAgYm9vbCBTaGFkb3dTdGF0
ZTo6aXNSZXF1aXJlZChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KSBjb25z
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBXZSBjYW4gYXZvaWQgU2hhZG93Qmx1
ciwgc2luY2UgdGhlcmUgYXJlIG5vIHRyYW5zZm9ybWF0aW9ucyB0byBhcHBseSB0byB0aGUgY2Fu
dmFzLgotICAgIGlmIChTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCkuaXNJZGVudGl0eSgp
KQorICAgIGlmIChTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigpKS5pc0lkZW50aXR5
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIE90aGVyd2lzZSwgbm8gY2hhbmNl
IGF2b2lkaW5nIFNoYWRvd0JsdXIuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgc2V0TGlu
ZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxpbmVD
YXApCit2b2lkIHNldExpbmVDYXAoY2Fpcm9fdCogY3IsIExpbmVDYXAgbGluZUNhcCkKIHsKICAg
ICBjYWlyb19saW5lX2NhcF90IGNhaXJvQ2FwIHsgfTsKICAgICBzd2l0Y2ggKGxpbmVDYXApIHsK
QEAgLTYzNiwxOCArNjM1LDE4IEBAIHZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxpbmVDYXApCiAgICAgICAgIGNhaXJvQ2FwID0g
Q0FJUk9fTElORV9DQVBfU1FVQVJFOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fpcm9f
c2V0X2xpbmVfY2FwKHBsYXRmb3JtQ29udGV4dC5jcigpLCBjYWlyb0NhcCk7CisgICAgY2Fpcm9f
c2V0X2xpbmVfY2FwKGNyLCBjYWlyb0NhcCk7CiB9CiAKLXZvaWQgc2V0TGluZURhc2goR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRGFzaEFycmF5JiBkYXNoZXMs
IGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIHNldExpbmVEYXNoKGNhaXJvX3QqIGNyLCBjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsKICAgICBpZiAoc3RkOjphbGxf
b2YoZGFzaGVzLmJlZ2luKCksIGRhc2hlcy5lbmQoKSwgW10oYXV0byYgZGFzaCkgeyByZXR1cm4g
IWRhc2g7IH0pKQotICAgICAgICBjYWlyb19zZXRfZGFzaChwbGF0Zm9ybUNvbnRleHQuY3IoKSwg
MCwgMCwgMCk7CisgICAgICAgIGNhaXJvX3NldF9kYXNoKGNyLCAwLCAwLCAwKTsKICAgICBlbHNl
Ci0gICAgICAgIGNhaXJvX3NldF9kYXNoKHBsYXRmb3JtQ29udGV4dC5jcigpLCBkYXNoZXMuZGF0
YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKKyAgICAgICAgY2Fpcm9fc2V0X2Rhc2go
Y3IsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCksIGRhc2hPZmZzZXQpOwogfQogCi12b2lk
IHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVK
b2luIGxpbmVKb2luKQordm9pZCBzZXRMaW5lSm9pbihjYWlyb190KiBjciwgTGluZUpvaW4gbGlu
ZUpvaW4pCiB7CiAgICAgY2Fpcm9fbGluZV9qb2luX3QgY2Fpcm9Kb2luIHsgfTsKICAgICBzd2l0
Y2ggKGxpbmVKb2luKSB7CkBAIC02NjEsMTIgKzY2MCwxMiBAQCB2b2lkIHNldExpbmVKb2luKEdy
YXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVKb2luIGxpbmVKb2luKQog
ICAgICAgICBjYWlyb0pvaW4gPSBDQUlST19MSU5FX0pPSU5fQkVWRUw7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYWlyb19zZXRfbGluZV9qb2luKHBsYXRmb3JtQ29udGV4dC5jcigpLCBj
YWlyb0pvaW4pOworICAgIGNhaXJvX3NldF9saW5lX2pvaW4oY3IsIGNhaXJvSm9pbik7CiB9CiAK
LXZvaWQgc2V0TWl0ZXJMaW1pdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0
LCBmbG9hdCBtaXRlckxpbWl0KQordm9pZCBzZXRNaXRlckxpbWl0KGNhaXJvX3QqIGNyLCBmbG9h
dCBtaXRlckxpbWl0KQogewotICAgIGNhaXJvX3NldF9taXRlcl9saW1pdChwbGF0Zm9ybUNvbnRl
eHQuY3IoKSwgbWl0ZXJMaW1pdCk7CisgICAgY2Fpcm9fc2V0X21pdGVyX2xpbWl0KGNyLCBtaXRl
ckxpbWl0KTsKIH0KIAogdm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxT
b3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKQEAgLTY4Miw3ICs2ODEsNyBA
QCB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29ucwogewogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2li
bGUoKSkgewogICAgICAgICBTaGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIsIHNo
YWRvd1N0YXRlLmJsdXIgfSwgc2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xvciwg
c2hhZG93U3RhdGUuaWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5kcmF3UmVjdFNo
YWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRz
KHBsYXRmb3JtQ29udGV4dCksIEZsb2F0Um91bmRlZFJlY3QocmVjdCksCisgICAgICAgIHNoYWRv
dy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigpKSwgU3Rh
dGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgRmxvYXRSb3VuZGVkUmVjdChyZWN0
KSwKICAgICAgICAgICAgIFsmcGxhdGZvcm1Db250ZXh0LCAmc2hhZG93U3RhdGVdKEltYWdlQnVm
ZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxv
YXRTaXplJiBsYXllclNpemUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmlsbFNo
YWRvd0J1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIGxheWVySW1hZ2UsIGxheWVyT3JpZ2luLCBsYXll
clNpemUsIHNoYWRvd1N0YXRlKTsKQEAgLTcxMyw3ICs3MTIsNyBAQCB2b2lkIGZpbGxSb3VuZGVk
UmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZQogewogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAgICAgICBT
aGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwg
c2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3Jl
VHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RN
KHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCks
IHJlY3QsCisgICAgICAgIHNoYWRvdy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRm
b3JtQ29udGV4dC5jcigpKSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwg
cmVjdCwKICAgICAgICAgICAgIFsmcGxhdGZvcm1Db250ZXh0LCAmc2hhZG93U3RhdGVdKEltYWdl
QnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3Qg
RmxvYXRTaXplJiBsYXllclNpemUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmls
bFNoYWRvd0J1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIGxheWVySW1hZ2UsIGxheWVyT3JpZ2luLCBs
YXllclNpemUsIHNoYWRvd1N0YXRlKTsKQEAgLTc0Niw3ICs3NDUsNyBAQCB2b2lkIGZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEZsb2F0UgogCiAgICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7CiAgICAgICAg
IFNoYWRvd0JsdXIgc2hhZG93KHsgc2hhZG93U3RhdGUuYmx1ciwgc2hhZG93U3RhdGUuYmx1ciB9
LCBzaGFkb3dTdGF0ZS5vZmZzZXQsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5pZ25v
cmVUcmFuc2Zvcm1zKTsKLSAgICAgICAgc2hhZG93LmRyYXdJbnNldFNoYWRvdyhTdGF0ZTo6Z2V0
Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4
dCksIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwKKyAgICAgICAgc2hhZG93LmRyYXdJbnNldFNoYWRv
dyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigpKSwgU3RhdGU6OmdldENsaXBCb3Vu
ZHMocGxhdGZvcm1Db250ZXh0KSwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LAogICAgICAgICAgICAg
WyZwbGF0Zm9ybUNvbnRleHQsICZzaGFkb3dTdGF0ZV0oSW1hZ2VCdWZmZXImIGxheWVySW1hZ2Us
IGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6
ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBmaWxsU2hhZG93QnVmZmVyKHBsYXRm
b3JtQ29udGV4dCwgbGF5ZXJJbWFnZSwgbGF5ZXJPcmlnaW4sIGxheWVyU2l6ZSwgc2hhZG93U3Rh
dGUpOwpAQCAtODYzLDkgKzg2Miw5IEBAIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY2Fpcm9fc3VyZmFjZV90KiBzCiAKICAgICAv
LyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KICAgICBpZiAob3B0aW9ucy5jb21wb3Np
dGVPcGVyYXRvcigpID09IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyICYmIG9wdGlvbnMu
YmxlbmRNb2RlKCkgPT0gQmxlbmRNb2RlOjpOb3JtYWwgJiYgIWNhaXJvU3VyZmFjZUhhc0FscGhh
KHN1cmZhY2UpKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihw
bGF0Zm9ybUNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5LCBCbGVuZE1vZGU6Ok5vcm1h
bCk7CisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3Jt
Q29udGV4dC5jcigpLCBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSwgQmxlbmRNb2RlOjpOb3JtYWwp
OwogICAgIGVsc2UKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24o
cGxhdGZvcm1Db250ZXh0LCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxl
bmRNb2RlKCkpOworICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihw
bGF0Zm9ybUNvbnRleHQuY3IoKSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25z
LmJsZW5kTW9kZSgpKTsKIAogICAgIEZsb2F0UmVjdCBkc3QgPSBkZXN0UmVjdDsKICAgICBpZiAo
b3B0aW9ucy5vcmllbnRhdGlvbigpICE9IEltYWdlT3JpZW50YXRpb246Ok5vbmUpIHsKQEAgLTk2
NCw3ICs5NjMsNyBAQCB2b2lkIGRyYXdTdXJmYWNlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0
Zm9ybUNvbnRleHQsIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZQogCiAgICAgU2hhZG93Qmx1ciBz
aGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFkb3dTdGF0ZS5ibHVyIH0sIHNoYWRvd1N0YXRl
Lm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLmlnbm9yZVRyYW5zZm9ybXMp
OwogICAgIGlmIChzaGFkb3cudHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7Ci0gICAg
ICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQp
LCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBkZXN0UmVjdCwKKyAgICAg
ICAgc2hhZG93LmRyYXdTaGFkb3dMYXllcihTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5j
cigpKSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZGVzdFJlY3QsCiAg
ICAgICAgICAgICBbJnBhdHRlcm4sICZkZXN0UmVjdF0oR3JhcGhpY3NDb250ZXh0JiBzaGFkb3dD
b250ZXh0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGRyYXdQYXR0ZXJuVG9DYWly
b0NvbnRleHQoc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcGF0dGVybi5n
ZXQoKSwgZGVzdFJlY3QsIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAppbmRleCA1NDk4NTYzY2U0OWMxNWUz
NWQwODI1OWMyZDI2ZGM3YjE3Y2VhODg1Li5lNWEzNDI0YWU2MTE3MDdhYzk3ZDBkMTllN2NjMzA2
MWFiNzA2MWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb09wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaApAQCAtNDYsMjIgKzQ2LDIxIEBAIGNsYXNzIENv
bG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEZs
b2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlOwogY2xhc3MgUGF0aDsKIAotc3Ry
dWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOwotCiBuYW1lc3BhY2UgQ2Fpcm8gewogCiBuYW1lc3Bh
Y2UgU3RhdGUgewogCi12b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhHcmFwaGljc0NvbnRleHRDYWly
byYsIGZsb2F0KTsKLXZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBT
dHJva2VTdHlsZSk7Cit2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhjYWlyb190KiwgZmxvYXQpOwor
dm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiwgU3Ryb2tlU3R5bGUpOwogCi12b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUpOwotdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0Q2Fp
cm8mLCBib29sKTsKK3ZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNhaXJvX3QqLCBDb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKK3ZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGNhaXJvX3Qq
LCBib29sKTsKIAotdm9pZCBzZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fp
cm8mKTsKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKK0Fm
ZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCopOwogCiBJbnRSZWN0IGdldENsaXBCb3VuZHMo
R3JhcGhpY3NDb250ZXh0Q2Fpcm8mKTsKIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKEdy
YXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0Jik7CkBAIC0xMjUsMTAgKzEyNCwx
MCBAQCBzdHJ1Y3QgU2hhZG93U3RhdGUgewogICAgIENvbXBvc2l0ZU9wZXJhdG9yIGdsb2JhbENv
bXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsKIH07CiAK
LXZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYsIExpbmVDYXApOwotdm9pZCBz
ZXRMaW5lRGFzaChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IERhc2hBcnJheSYsIGZsb2F0
KTsKLXZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5lSm9pbik7Ci12
b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBmbG9hdCk7Cit2b2lkIHNl
dExpbmVDYXAoY2Fpcm9fdCosIExpbmVDYXApOwordm9pZCBzZXRMaW5lRGFzaChjYWlyb190Kiwg
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQpOwordm9pZCBzZXRMaW5lSm9pbihjYWlyb190KiwgTGlu
ZUpvaW4pOwordm9pZCBzZXRNaXRlckxpbWl0KGNhaXJvX3QqLCBmbG9hdCk7CiAKIHZvaWQgZmls
bFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGaWxs
U291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKIHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IFNoYWRvd1N0
YXRlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcAppbmRleCBhN2FmMGNlYjUyNDkwNDA0MWVlMTJkNTFmODljNmRmMTZjYjM2
MDM3Li4zZDE5NzU3OWEyY2MyMjk5MzM4ODVhMWExNTk1YzYzOTZjYTg2ZGZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAK
QEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAgICBhdXRvJiBzdGF0
ZSA9IGNvbnRleHQuc3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0dseXBocygqY29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKSwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNj
YWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAotICAg
ICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUu
c2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKKyAgICAgICAgc3RhdGUudGV4dERyYXdp
bmdNb2RlKCksIHN0YXRlLnN0cm9rZVRoaWNrbmVzcygpLCBzdGF0ZS5kcm9wU2hhZG93KCkub2Zm
c2V0LCBzdGF0ZS5kcm9wU2hhZG93KCkuY29sb3IsCiAgICAgICAgIGZvbnRTbW9vdGhpbmdNb2Rl
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhZGllbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFkaWVudENhaXJvLmNwcAppbmRleCA5MDA5NmFjNjQ1MjI0ZGJmZGM2MGJmYTZjYWNh
ZDAzMDc2Y2IyOTdkLi5iZTJjMjk1Y2E1MDdkOWI1NjNmODVkNWJjYjg3MDk3MmYwZGFkOGVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIFJlZlB0cjxjYWlyb19wYXR0ZXJu
X3Q+IEdyYWRpZW50OjpjcmVhdGVQYXR0ZXJuKGZsb2F0IGdsb2JhbEFscGhhLCBjb25zdCBBZmZp
bmVUCiAKIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXV0byBwYXR0ZXJuID0gY3JlYXRlUGF0dGVybigx
LjAsIGNvbnRleHQuc3RhdGUoKS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgYXV0
byBwYXR0ZXJuID0gY3JlYXRlUGF0dGVybigxLjAsIGNvbnRleHQuZmlsbFNwYWNlVHJhbnNmb3Jt
KCkpOwogICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAKaW5kZXggYzMyMzA0NDUzNTFiMDNmMmFhODczNmFlZTJiY2U3OGJjNDM2
MWY0OS4uODRkMDM5ZGRlNjU4ZDc3ZGI4YTI4NDU1YTg5YjQzYTcxMWRjM2QyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwOCBOdWFudGkgTHRkLgpAQCAtNjgsNyArNjgsOCBAQCBwdWJsaWM6CiB9OwogCiBHcmFw
aGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUmVmUHRyPGNhaXJvX3Q+JiYg
Y29udGV4dCkKLSAgICA6IG1fY3IoV1RGTW92ZShjb250ZXh0KSkKKyAgICA6IEdyYXBoaWNzQ29u
dGV4dChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpKQorICAgICwgbV9jcihXVEZNb3ZlKGNvbnRl
eHQpKQogewogICAgIG1fY2Fpcm9TdGF0ZVN0YWNrLmFwcGVuZChDYWlyb1N0YXRlKCkpOwogICAg
IG1fY2Fpcm9TdGF0ZSA9ICZtX2NhaXJvU3RhdGVTdGFjay5sYXN0KCk7CkBAIC04NiwxMCArODcs
OSBAQCBib29sIEdyYXBoaWNzQ29udGV4dENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAogICAgIHJldHVybiB0cnVlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorUmVu
ZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTY2FsZSk7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0
ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6
aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAogR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdApAQCAtMTM0LDUzICsxMzQsMTEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJl
c3RvcmUoKQogICAgIGNhaXJvX3Jlc3RvcmUobV9jci5nZXQoKSk7CiB9CiAKLS8vIERyYXdzIGEg
ZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFwcGx5U3RhdGVDaGFuZ2VzKCkK
IHsKLSAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KCp0aGlzLCByZWN0LCBib3JkZXJUaGlja25l
c3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9y
KTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKGF1dG8gY2hhbmdlIDogc3RhdGUoKS5jaGFuZ2VzKCkpIHsKKyAgICAgICAgc3dpdGNoIChj
aGFuZ2UpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE06
CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENUTShtX2NyLmdldCgpLCBzdGF0ZSgpLmdl
dENUTSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9jci5nZXQoKSwgc3RkOjptYXgoc3RhdGUoKS5zdHJv
a2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlOgorICAgICAgICAgICAg
Q2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX2NyLmdldCgpLCBzdGF0ZSgpLnN0cm9rZVN0
eWxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVDYXAo
bV9jci5nZXQoKSwgc3RhdGUoKS5saW5lQ2FwKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjoKKyAgICAg
ICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihtX2NyLmdldCgpLCBzdGF0ZSgpLmxpbmVKb2luKCkp
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpMaW5lRGFzaDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lRGFzaChtX2Ny
LmdldCgpLCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0ZSgpLmxpbmVEYXNoKCkub2Zm
c2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRNaXRlckxp
bWl0KG1fY3IuZ2V0KCksIHN0YXRlKCkubWl0ZXJMaW1pdCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRl
TW9kZToKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1f
Y3IuZ2V0KCksIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbiwgc3RhdGUoKS5jb21w
b3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAg
IGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CisgICAgICAgICAgICAgICAg
Ly8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGgg
YSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUg
aGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAg
ICAgICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cgPSB0aGlzLT5kcm9wU2hhZG93KCk7CisgICAg
ICAgICAgICAgICAgZHJvcFNoYWRvdy5vZmZzZXQgPSB7IGRyb3BTaGFkb3cub2Zmc2V0LndpZHRo
KCksIC1kcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQoKSB9OworICAgICAgICAgICAgICAgIHNldERy
b3BTaGFkb3coZHJvcFNoYWRvdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlh
bGlhczoKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fY3Iu
Z2V0KCksIHN0YXRlKCkuc2hvdWxkQW50aWFsaWFzKCkpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxv
YXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUlt
YWdlKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBz
cmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3Rh
dGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIEdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBDYWlybzo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7CiB9CiAKLS8vIFRoaXMgaXMgb25seSB1c2Vk
IHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkK
LSAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKKyAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMpOworfQogCi0gICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywg
cG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIENhaXJvOjpjbGlwKCp0aGlzLCByZWN0KTsKIH0K
IAotLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVz
IHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0
aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCp0aGlzLCByZWN0LCBz
dGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgs
IGNsaXBSdWxlKTsKKyAgICBDYWlybzo6Y2xpcFBhdGgoKnRoaXMsIHBhdGgsIGNsaXBSdWxlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENh
aXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpGaWxsU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgQ2Fpcm86OmNsaXBP
dXQoKnRoaXMsIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChh
dXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSkpCisgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywgbmF0aXZlSW1h
Z2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOworfQogCi0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VQYXRoKCp0aGlzLCBwYXRoLCBD
YWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIENhaXJvOjpjbGVhclJlY3QoKnRoaXMsIHJlY3QpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0xOTYs
OCArMjUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50
KQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRvIHBhdHRlcm4g
PSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0pOworICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBm
aWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgaWYgKCFwYXR0ZXJuKQogICAgICAgICByZXR1cm47
CiAKQEAgLTIwNiwzNSArMjYyLDY0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogICAgIHJlc3Rv
cmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKKyAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KCp0aGlzLCByZWN0
LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3sKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9y
IHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKKyAgICBDYWlybzo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fp
cm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sK
KyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIENhaXJvOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCp0aGlzLCBjb21wb3NpdGVPcGVyYXRvciwgYmxl
bmRNb2RlKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbigqdGhpcywgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBh
dGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAgICBDYWlybzo6Y2xpcCgqdGhpcywgcmVj
dCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpzdHJva2VS
ZWN0KCp0aGlzLCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAg
Q2Fpcm86OmNsaXBQYXRoKCp0aGlzLCBwYXRoLCBjbGlwUnVsZSk7CisgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7CisgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpTdHJva2VTb3Vy
Y2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotSW50UmVjdCBHcmFw
aGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcygpIGNvbnN0CisvLyBEcmF3cyBhIGZpbGxlZCBy
ZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgordm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
CiB7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcygqcGxhdGZvcm1Db250
ZXh0KCkpOworICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOworICAgIENhaXJvOjpkcmF3UmVj
dCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUo
KSwgc3Ryb2tlQ29sb3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QpCisvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNob3VsZCBu
b3QgZHJhdyBzaGFkb3dzLgordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAg
aWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCp0aGlzLCBuYXRp
dmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7CisgICAgaWYgKHN0cm9r
ZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsKKworICAgIENhaXJvOjpkcmF3
TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCks
IHN0cm9rZVRoaWNrbmVzcygpLCBzaG91bGRBbnRpYWxpYXMoKSk7Cit9CisKKy8vIFRoaXMgbWV0
aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3Rz
Lgordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqdGhpcywgcmVjdCwgZmlsbENvbG9y
KCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0y
NjEsMTM4ICszNDYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgdwogI2VuZGlmCiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCi17Ci0gICAgaWYg
KHdpZHRocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBDYWlybzo6ZHJhd0xpbmVz
Rm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91Ymxl
VW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBDYWlybzo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUpOwotfQotCi1GbG9hdFJlY3QgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQotewotICAgIFVOVVNFRF9QQVJBTShyb3Vu
ZGluZ01vZGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
KnRoaXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp0cmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDYWlybzo6dHJhbnNsYXRlKCp0aGlzLCB4LCB5KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRo
aWNrbmVzcygqdGhpcywgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAm
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86
OlN0YXRlOjpzZXRTdHJva2VTdHlsZSgqdGhpcywgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAg
aWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAg
ICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1l
YW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNp
bmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAg
IGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG1f
c3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNl
dC5oZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgQ2Fpcm86
OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHN0YXRlLmNvbXBvc2l0ZU9wZXJh
dG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
aG91bGRBbnRpYWxpYXMoKnRoaXMsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKLXsKLSAgICBDYWlybzo6Y29uY2F0Q1RNKCp0aGlzLCB0cmFuc2Zvcm0pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0oKnRoaXMsIHRyYW5zZm9y
bSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnRo
aXMsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3Bh
cmVuY3lMYXllcigpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXll
cigpOwotICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigqdGhpcyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgQ2Fpcm86OmNsZWFyUmVjdCgqdGhpcywgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpz
dHJva2VSZWN0KCp0aGlzLCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgQ2Fpcm86OnNldExp
bmVDYXAoKnRoaXMsIGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsK
LSAgICBDYWlybzo6c2V0TGluZURhc2goKnRoaXMsIGRhc2hlcywgZGFzaE9mZnNldCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2lu
KQotewotICAgIENhaXJvOjpzZXRMaW5lSm9pbigqdGhpcywgbGluZUpvaW4pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQotewotICAg
IENhaXJvOjpzZXRNaXRlckxpbWl0KCp0aGlzLCBtaXRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBDYWlybzo6Y2xp
cE91dCgqdGhpcywgcGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdGF0
ZShmbG9hdCByYWRpYW5zKQotewotICAgIENhaXJvOjpyb3RhdGUoKnRoaXMsIHJhZGlhbnMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCi17Ci0gICAgQ2Fpcm86OnNjYWxlKCp0aGlzLCBzaXplKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fp
cm86OmNsaXBPdXQoKnRoaXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgQ2Fpcm86OmZpbGxSb3VuZGVkUmVjdCgqdGhp
cywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86
OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBDYWly
bzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnRoaXMsIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5n
ZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSgpIH0sIGFscGhhKCksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKQEAgLTQwNCwxMSArMzYwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9h
dFJlY3QKICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnRoaXMsIG5hdGl2ZUltYWdlLnBsYXRmb3Jt
SW1hZ2UoKS5nZXQoKSwgbmF0aXZlSW1hZ2Uuc2l6ZSgpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAotUmVuZGVyaW5nTW9kZSBHcmFw
aGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENh
aXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKSA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
LX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7CiAgICAgaWYgKCFmb250LnBs
YXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTQzNCwxMiArMzg1LDMxIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCoKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRy
YXdHbHlwaHMoKnRoaXMsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNv
dXJjZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBz
Y2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAg
ICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRl
LnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAgIHRleHREcmF3aW5nTW9k
ZSgpLCBzdHJva2VUaGlja25lc3MoKSwgc2hhZG93T2Zmc2V0KCksIHNoYWRvd0NvbG9yKCksCiAg
ICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIFN0cm9rZVN0eWxlKQoreworICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnRoaXMsIHBvaW50LCB0aGlj
a25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0cm9rZUNvbG9yKCkp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
Cit7CisgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKnRoaXMsIHJlY3QsIHN0
eWxlKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0ocm91bmRpbmdNb2RlKTsKKyAgICByZXR1cm4gQ2Fpcm86OlN0
YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCp0aGlzLCByZWN0KTsKK30KKwogY2Fpcm9fdCogR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNyKCkgY29uc3QKIHsKKyAgICBjb25zdF9jYXN0PEdyYXBoaWNz
Q29udGV4dENhaXJvJj4oKnRoaXMpLmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmV0dXJuIG1f
Y3IuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCmluZGV4IDU2NDYxYzE1OWE1
ODNjODljNjFlOGYwMmU0ZTBiZWU3YjA1OTMyZWYuLjZmY2RlM2E4YmIxZGY5ZjU1YmY2OWJiYmY0
ZmM2NDY1Zjg1ZTlhYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAq
IENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUwLDYxICs1MSw0OSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCBmaW5hbDsKICAgICBHcmFwaGljc0NvbnRleHRDYWlybyogcGxhdGZvcm1D
b250ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisg
ICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9p
ZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVD
YXApIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQp
IGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQg
c2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7
CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFs
OworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7CiAgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0g
QmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsKICAg
ICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworCiAgICAgdm9pZCBmaWxsUGF0
aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFs
OwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9p
ZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCBkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwog
CiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CiAgICAg
dm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFs
OwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7
Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKKwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0
aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9y
JikgZmluYWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlc3RvcmUoKSBm
aW5hbDsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWw7Ci0gICAgdm9p
ZCByb3RhdGUoZmxvYXQpIGZpbmFsOwotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7
Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIHZv
aWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBlbmRUcmFu
c3BhcmVuY3lMYXllcigpIGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUlt
YWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIGZpbmFsOwogCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAg
IHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQo
Y29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRS
dWxlKSBmaW5hbDsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKLSAgICB2
b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0gICAgCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
KSBmaW5hbDsKIAogICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IDk2Yzc2MTM1NDFiZGM2NThhNzg3YWIwM2U3
NzgxODgzNGQzMTg1YzQuLmRjMjY3OTdlMGJjZGI2M2MyZjVhYWNkYjgwNjQ4MjU2NTk4ODVkZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAg
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRl
eHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CiAKICAgICBpZiAoYXV0byBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3Rv
cmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIGRyYXdQbGF0Zm9ybUltYWdlKCpk
ZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBo
YSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7
CisgICAgICAgIGRyYXdQbGF0Zm9ybUltYWdlKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KSwgaW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0
aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9
LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSgpLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93
U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Q0dDb250ZXh0U3RhdGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4NTZhMDQzOTNmZDI0ZTk2Mjhm
NmZlOTM0NjllZWJlYTRhYmI1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSw3NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q0dDb250ZXh0U3RhdGVTYXZlciB7CitwdWJsaWM6CisgICAgQ0dDb250ZXh0U3RhdGVTYXZlcihD
R0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAg
IDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5k
UmVzdG9yZSkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAg
ICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOworICAgIH0KKyAgICAKKyAgICB+Q0dD
b250ZXh0U3RhdGVTYXZlcigpCisgICAgeworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkK
KyAgICAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVz
dG9yZSk7CisgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICAgICAg
bV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKKyAgICAgICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFs
c2U7CisgICAgfQorICAgIAorICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9zYXZlQW5kUmVzdG9yZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENH
Q29udGV4dFJlZiBtX2NvbnRleHQ7CisgICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCmluZGV4IDMyNDVjNjAwNDMxNTUyZDUxM2I3NGVlYmMwOWYzMThlZWMzZGQ3MmEuLjdlZmM3
MmM5ZTdkMjhhZTI2ZDAxNmUwNmNiNzE4OGJhNjgwOGM3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xODUsMTQgKzE4NSwx
MyBAQCBzdGF0aWMgdm9pZCBzZXRDR0JsZW5kTW9kZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZQogfQogCiBHcmFwaGljc0NvbnRleHRDRzo6R3Jh
cGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29u
dGV4dChDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY2dDb250ZXh0KSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OmluaXRpYWxDaGFuZ2VGbGFncywgQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCkp
CiB7CiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YSA9
IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY2dDb250ZXh0KTsKLSAgICAvLyBN
YWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UgfSk7Ci0gICAgbV9zdGF0ZS5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4
dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgc2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0
R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSkpKTsKIH0K
IAogR3JhcGhpY3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRDRygpCkBAIC0yMDYsNiArMjA1
LDE0IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0
CiB9CiAKIENHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkg
Y29uc3QKK3sKKyAgICAvLyBTb21lIGNhbGxlcnMgdG8gdGhpcyBtZXRob2QgdXNlcyB0aGUgcGxh
dGZvcm0gY29udGV4dCBvdXRzaWRlIHRoZSBzY29wZQorICAgIC8vIG9mIHRoaXMgY2xhc3MuIENv
bW1pdCBhbnkgY2hhbmdlcyBiZWZvcmUgcmV0dXJuaW5nIHRoZSBwbGF0Zm9ybSBjb250ZXh0Lgor
ICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0Q0cmPigqdGhpcykuYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZXR1cm4gaW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKTsKK30KKworQ0dDb250
ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENHOjppbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEt
Pm1fY2dDb250ZXh0LmdldCgpOwpAQCAtMzM4LDcgKzM0NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6CiAjZW5kaWYKIAogICAgIGF1dG8gb2xkQ29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3Np
dGVPcGVyYXRpb24oKTsKLSAgICBhdXRvIG9sZEJsZW5kTW9kZSA9IGJsZW5kTW9kZU9wZXJhdGlv
bigpOworICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRNb2RlKCk7CiAgICAgc2V0Q0dCbGVu
ZE1vZGUoY29udGV4dCwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5k
TW9kZSgpKTsKIAogICAgIC8vIE1ha2UgdGhlIG9yaWdpbiBiZSBhdCBhZGp1c3RlZERlc3RSZWN0
LmxvY2F0aW9uKCkKQEAgLTM5Niw3ICs0MDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpk
cmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZAog
ICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRl
eHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKIAotICAgIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwor
ICAgIHNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlv
bnMuYmxlbmRNb2RlKCkgfSk7CiAKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwg
ZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dD
b250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwpAQCAtNTU1LDEzICs1NjIsMTMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlm
ICghbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgIGlmICghc3Ryb2tlUGF0dGVybigpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zv
cm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIAotICAgIGF1dG8gcGxhdGZvcm1QYXR0
ZXJuID0gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRv
QmFzZUNUTSk7CisgICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4gPSBzdHJva2VQYXR0ZXJuKCktPmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0
dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01NzQsMTMgKzU4MSwxMyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRlcm4oKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuZmlsbFBhdHRlcm4p
CisgICAgaWYgKCFmaWxsUGF0dGVybigpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRl
eHQpKTsKIAotICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOworICAgIGF1dG8gcGxhdGZvcm1Q
YXR0ZXJuID0gZmlsbFBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VD
VE0pOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTU5
MSwxMSArNTk4LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4o
KQogICAgIENHQ29udGV4dFNldEZpbGxQYXR0ZXJuKGNnQ29udGV4dCwgcGxhdGZvcm1QYXR0ZXJu
LmdldCgpLCAmcGF0dGVybkFscGhhKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0
ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXRoRHJh
d2luZ01vZGUmIG1vZGUpCitzdGF0aWMgaW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDR1BhdGhEcmF3aW5nTW9kZSYgbW9kZSkK
IHsKLSAgICBib29sIHNob3VsZEZpbGwgPSBzdGF0ZS5maWxsUGF0dGVybiB8fCBzdGF0ZS5maWxs
Q29sb3IuaXNWaXNpYmxlKCk7Ci0gICAgYm9vbCBzaG91bGRTdHJva2UgPSBzdGF0ZS5zdHJva2VQ
YXR0ZXJuIHx8IChzdGF0ZS5zdHJva2VTdHlsZSAhPSBOb1N0cm9rZSAmJiBzdGF0ZS5zdHJva2VD
b2xvci5pc1Zpc2libGUoKSk7Ci0gICAgYm9vbCB1c2VFT0ZpbGwgPSBzdGF0ZS5maWxsUnVsZSA9
PSBXaW5kUnVsZTo6RXZlbk9kZDsKKyAgICBib29sIHNob3VsZEZpbGwgPSBjb250ZXh0LmZpbGxQ
YXR0ZXJuKCkgfHwgY29udGV4dC5maWxsQ29sb3IoKS5pc1Zpc2libGUoKTsKKyAgICBib29sIHNo
b3VsZFN0cm9rZSA9IGNvbnRleHQuc3Ryb2tlUGF0dGVybigpIHx8IChjb250ZXh0LnN0cm9rZVN0
eWxlKCkgIT0gTm9TdHJva2UgJiYgY29udGV4dC5zdHJva2VDb2xvcigpLmlzVmlzaWJsZSgpKTsK
KyAgICBib29sIHVzZUVPRmlsbCA9IGNvbnRleHQuZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZl
bk9kZDsKIAogICAgIGlmIChzaG91bGRGaWxsKSB7CiAgICAgICAgIGlmIChzaG91bGRTdHJva2Up
IHsKQEAgLTYyNCw5ICs2MzEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aChj
b25zdCBQYXRoJiBwYXRoKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CiAKLSAgICBpZiAoc3RhdGUuZmlsbEdyYWRpZW50IHx8IHN0YXRl
LnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgpIHx8IHN0cm9rZUdyYWRp
ZW50KCkpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBm
aWxsICYgc3Ryb2tlIGEgcGF0aCB1c2luZyBncmFkaWVudHMKICAgICAgICAgLy8gRklYTUU6IEJl
IHNtYXJ0ZXIgYWJvdXQgdGhpcy4KICAgICAgICAgZmlsbFBhdGgocGF0aCk7CkBAIC02MzQsMTMg
KzY0MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBw
YXRoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJu
KQorICAgIGlmIChmaWxsUGF0dGVybigpKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0g
ICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAg
ICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICAgICBDR1BhdGhEcmF3aW5nTW9kZSBkcmF3
aW5nTW9kZTsKLSAgICBpZiAoY2FsY3VsYXRlRHJhd2luZ01vZGUoc3RhdGUsIGRyYXdpbmdNb2Rl
KSkgeworICAgIGlmIChjYWxjdWxhdGVEcmF3aW5nTW9kZSgqdGhpcywgZHJhd2luZ01vZGUpKSB7
CiAjaWYgSEFWRShDR19DT05URVhUX0RSQVdfUEFUSF9ESVJFQ1QpCiAgICAgICAgIENHQ29udGV4
dERyYXdQYXRoRGlyZWN0KGNvbnRleHQsIGRyYXdpbmdNb2RlLCBwYXRoLnBsYXRmb3JtUGF0aCgp
LCBudWxscHRyKTsKICNlbHNlCkBAIC02NTgsNyArNjY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQp
IHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7
CiAgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwog
ICAgICAgICAgICAgRmxvYXRTaXplIGxheWVyU2l6ZSA9IGdldENUTSgpLm1hcFNpemUocmVjdC5z
aXplKCkpOwpAQCAtNjcwLDMzICs2NzYsMzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNU
TShsYXllckNvbnRleHQsIC1yZWN0LngoKSwgLXJlY3QueSgpKTsKICAgICAgICAgICAgIENHQ29u
dGV4dEJlZ2luUGF0aChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0
aChsYXllckNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwotICAgICAgICAgICAgQ0dDb250
ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBmaWxs
U3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFdpbmRS
dWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChsYXllckNvbnRl
eHQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5
ZXJDb250ZXh0KTsKIAotICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxh
eWVyQ29udGV4dCk7CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250
ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckluUmVjdChjb250ZXh0LCByZWN0
LCBsYXllci5nZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRC
ZWdpblBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQs
IHBhdGgucGxhdGZvcm1QYXRoKCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRl
eHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICAgICAgQ0dD
b250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgICAg
ICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQpCiAgICAgICAgICAgICAg
ICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7CiAKLSAgICAgICAgICAgIG1fc3RhdGUuZmls
bEdyYWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFp
bnQoKnRoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigpKQogICAgICAgICBh
cHBseUZpbGxQYXR0ZXJuKCk7CiAjaWYgSEFWRShDR19DT05URVhUX0RSQVdfUEFUSF9ESVJFQ1Qp
CiAgICAgQ0dDb250ZXh0RHJhd1BhdGhEaXJlY3QoY29udGV4dCwgZmlsbFJ1bGUoKSA9PSBXaW5k
UnVsZTo6RXZlbk9kZCA/IGtDR1BhdGhFT0ZpbGwgOiBrQ0dQYXRoRmlsbCwgcGF0aC5wbGF0Zm9y
bVBhdGgoKSwgbnVsbHB0cik7CkBAIC03MTcsNyArNzIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogCiAgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50KSB7CisgICAgaWYgKHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRv
dygpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVj
dCgpOwogICAgICAgICAgICAgZmxvYXQgbGluZVdpZHRoID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBA
IC03NDIsOCArNzQ4LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChsYXllckNvbnRleHQs
IHBhdGgucGxhdGZvcm1QYXRoKCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhX
aXRoU3Ryb2tlZFBhdGgobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAo
bGF5ZXJDb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRl
eHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBt
X3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAg
Q0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7
CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogCiAg
ICAgICAgICAgICBmbG9hdCBkZXN0aW5hdGlvblggPSByb3VuZGYocmVjdC54KCkgLSBsaW5lV2lk
dGgpOwogICAgICAgICAgICAgZmxvYXQgZGVzdGluYXRpb25ZID0gcm91bmRmKHJlY3QueSgpIC0g
bGluZVdpZHRoKTsKQEAgLTc1NCwxMyArNzYwLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBh
dGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRS
ZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4
dENsaXAoY29udGV4dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwg
bV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3Rh
dGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKKyAgICAgICAgICAgIENHQ29udGV4dENv
bmNhdENUTShjb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0
cm9rZUdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tl
UGF0dGVybigpKQogICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKIAogI2lmIFVTRShDR19D
T05URVhUX1NUUk9LRV9MSU5FX1NFR01FTlRTX1dIRU5fU1RST0tJTkdfUEFUSCkKQEAgLTc4NSw3
ICs3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKIAotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgeworICAgIGlmIChmaWxsR3JhZGll
bnQoKSkgewogICAgICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7
CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgRmxvYXRTaXplIGxheWVy
U2l6ZSA9IGdldENUTSgpLm1hcFNpemUocmVjdC5zaXplKCkpOwpAQCAtNzk4LDI3ICs4MDQsMjcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUmVjdChsYXllckNvbnRleHQsIHJlY3QpOwogICAg
ICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNvbnRleHQpOwogCi0gICAgICAgICAgICBDR0Nv
bnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJh
bnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNv
bnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmls
bFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxh
eWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4
dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dD
b250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByZWN0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENv
bmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAg
ICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAg
ICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOworICAg
ICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYg
KGZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKIAogICAgIGJvb2wg
ZHJhd093blNoYWRvdyA9IGNhblVzZVNoYWRvd0JsdXIoKTsKICAgICBDR0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25T
aGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250
ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAw
KTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVpl
cm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsK
KyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3co
KnRoaXMsIEZsb2F0Um91bmRlZFJlY3QocmVjdCkpOwogICAgIH0KIApAQCAtODM3LDkgKzg0Myw5
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAg
ICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dX
aXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBD
R0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAK
LSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFk
b3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywgRmxvYXRS
b3VuZGVkUmVjdChyZWN0KSk7CiAgICAgfQogCkBAIC04NTIsNyArODU4LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOwogICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwpAQCAt
ODY0LDkgKzg3MCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdElt
cGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QKICAgICBDR0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdP
d25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dD
b250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAw
LCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6
ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRl
KTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFk
b3coKnRoaXMsIHJlY3QpOwogICAgIH0KIApAQCAtODc0LDcgKzg4MCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QKICAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkgPSBy
ZWN0LnJhZGlpKCk7CiAgICAgYm9vbCBlcXVhbFdpZHRocyA9IChyYWRpaS50b3BMZWZ0KCkud2lk
dGgoKSA9PSByYWRpaS50b3BSaWdodCgpLndpZHRoKCkgJiYgcmFkaWkudG9wUmlnaHQoKS53aWR0
aCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS53
aWR0aCgpID09IHJhZGlpLmJvdHRvbVJpZ2h0KCkud2lkdGgoKSk7CiAgICAgYm9vbCBlcXVhbEhl
aWdodHMgPSAocmFkaWkudG9wTGVmdCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS5o
ZWlnaHQoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkudG9wUmlnaHQo
KS5oZWlnaHQoKSAmJiByYWRpaS50b3BSaWdodCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbVJp
Z2h0KCkuaGVpZ2h0KCkpOwotICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IG1fc3RhdGUuZmlsbEdy
YWRpZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm47CisgICAgYm9vbCBoYXNDdXN0b21GaWxsID0g
ZmlsbEdyYWRpZW50KCkgfHwgZmlsbFBhdHRlcm4oKTsKICAgICBpZiAoIWhhc0N1c3RvbUZpbGwg
JiYgZXF1YWxXaWR0aHMgJiYgZXF1YWxIZWlnaHRzICYmIHJhZGlpLnRvcExlZnQoKS53aWR0aCgp
ICogMiA9PSByLndpZHRoKCkgJiYgcmFkaWkudG9wTGVmdCgpLmhlaWdodCgpICogMiA9PSByLmhl
aWdodCgpKQogICAgICAgICBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdChjb250ZXh0LCByKTsK
ICAgICBlbHNlIHsKQEAgLTkxMyw5ICs5MTksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsbwog
ICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93
KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFk
b3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0
KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29s
b3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250
ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJv
cFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNo
YWRvdy5kcmF3SW5zZXRTaGFkb3coKnRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCk7CiAgICAg
fQogCkBAIC05MzAsNiArOTM2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG8KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZv
cm1Db250ZXh0KCksIHJlY3QpOwogICAgIG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KQEAgLTk0MCwz
MSArOTQ3LDM1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgIC8vIHRvIDxyZGFyOi8vcHJvYmxlbS8xMjU4NDQ5Mj4sIENHUmVjdElu
ZmluaXRlIGNhbid0IGJlIHVzZWQgd2l0aCBhbiBhY2NlbGVyYXRlZCBjb250ZXh0IHRoYXQKICAg
ICAvLyBoYXMgY2VydGFpbiB0cmFuc2Zvcm1zIHRoYXQgYXJlbid0IGp1c3QgYSB0cmFuc2xhdGlv
biBvciBhIHNjYWxlLiBBbmQgZHVlIHRvIDxyZGFyOi8vcHJvYmxlbS8xNDYzNDQ1Mz4KICAgICAv
LyB3ZSBjYW5ub3QgdXNlIGl0IGluIGZvciBhIHByaW50aW5nIGNvbnRleHQgZWl0aGVyLgorICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRDVE0oKTsKLSAgICBib29sIGNhblVzZUNHUmVjdEluZmlu
aXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5
cGVQREYgJiYgKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
IHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOwotICAgIENHUmVjdCByZWN0c1syXSA9IHsgY2Fu
VXNlQ0dSZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZpbml0ZSA6IENHQ29udGV4dEdldENsaXBCb3Vu
ZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSksIHJlY3QgfTsKLSAgICBDR0NvbnRleHRCZWdpblBh
dGgocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENHQ29udGV4dEFkZFJlY3RzKHBsYXRmb3JtQ29u
dGV4dCgpLCByZWN0cywgMik7Ci0gICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgp
KTsKKyAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShjb250
ZXh0KSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7CisgICAgQ0dS
ZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDog
Q0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpLCByZWN0IH07CisgICAgQ0dDb250
ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENHQ29udGV4dEFkZFJlY3RzKGNvbnRleHQsIHJl
Y3RzLCAyKTsKKyAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBDR0NvbnRleHRC
ZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENHQ29udGV4dEFkZFJlY3QocGxhdGZv
cm1Db250ZXh0KCksIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQo
KSkpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAg
Q0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4
dCwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpKTsKICAgICBpZiAoIXBhdGgu
aXNFbXB0eSgpKQotICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBw
YXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0
KCkpOworICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRo
KCkpOworICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7
CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7CisKICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGlmIChwYXRoLmlz
RW1wdHkoKSkKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBDR1JlY3RaZXJv
KTsKICAgICBlbHNlIHsKLSAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5w
bGF0Zm9ybVBhdGgoKSk7CisgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAg
ICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKIAog
ICAgICAgICBpZiAoY2xpcFJ1bGUgPT0gV2luZFJ1bGU6OkV2ZW5PZGQpCiAgICAgICAgICAgICBD
R0NvbnRleHRFT0NsaXAoY29udGV4dCk7CkBAIC05NzUsMTEgKzk4Niw2IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxl
KQogICAgIG1fZGF0YS0+Y2xpcChwYXRoKTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoQ0dD
b250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7Ci19Ci0KIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkK
IHsKICAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7
CkBAIC0xMDAyLDE3ICsxMDA4LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCkKICAgICByZXN0b3JlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGx5U2hh
ZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYgeU9mZnNldCkKK3N0YXRpYyB2b2lkIGFwcGx5
U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zs
b2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQogewogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpIHx8IFBMQVRGT1JNKFdJTikKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgVU5V
U0VEX1BBUkFNKHhPZmZzZXQpOwogICAgIFVOVVNFRF9QQVJBTSh5T2Zmc2V0KTsKICNlbHNlCi0g
ICAgaWYgKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVj
dFNoYWRvd09mZnNldHMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpCisgICAgaWYgKENHQ29u
dGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQpKQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBXb3JrIGFyb3VuZCA8cmRhcjovL3Byb2JsZW0vNTUzOTM4OD4gYnkgZW5z
dXJpbmcgdGhhdCB0aGUgb2Zmc2V0cyB3aWxsIGdldCB0cnVuY2F0ZWQKQEAgLTEwMzAsMTAgKzEw
MzMsNTUgQEAgc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lk
IHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3Rh
dGljIHZvaWQgc2V0Q0dMaW5lQ2FwKENHQ29udGV4dFJlZiBjb250ZXh0LCBMaW5lQ2FwIGNhcCkK
IHsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKTsKKyAgICBzd2l0Y2ggKGNhcCkgeworICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKKyAg
ICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChjb250ZXh0LCBrQ0dMaW5lQ2FwQnV0dCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTGluZUNhcDo6Um91bmQ6CisgICAgICAgIENHQ29udGV4dFNl
dExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcFJvdW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBMaW5lQ2FwOjpTcXVhcmU6CisgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAoY29udGV4
dCwga0NHTGluZUNhcFNxdWFyZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KIAorc3RhdGlj
IHZvaWQgc2V0Q0dMaW5lSm9pbihDR0NvbnRleHRSZWYgY29udGV4dCwgTGluZUpvaW4gam9pbikK
K3sKKyAgICBzd2l0Y2ggKGpvaW4pIHsKKyAgICBjYXNlIExpbmVKb2luOjpNaXRlcjoKKyAgICAg
ICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4dCwga0NHTGluZUpvaW5NaXRlcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTGluZUpvaW46OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pblJvdW5kKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6CisgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKGNv
bnRleHQsIGtDR0xpbmVKb2luQmV2ZWwpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHNldENHTWl0ZXJMaW1pdChDR0NvbnRleHRSZWYgY29udGV4dCwgZmxvYXQgbGlt
aXQpCit7CisgICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChjb250ZXh0LCBsaW1pdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHNldENHTGluZURhc2goQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IERh
c2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQoreworICAgIGlmIChkYXNoT2Zmc2V0
IDwgMCkgeworICAgICAgICBmbG9hdCBsZW5ndGggPSAwOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGxlbmd0aCArPSBzdGF0
aWNfY2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAg
ICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7CisgICAg
fQorICAgIENHQ29udGV4dFNldExpbmVEYXNoKGNvbnRleHQsIGRhc2hPZmZzZXQsIGRhc2hlcy5k
YXRhKCksIGRhc2hlcy5zaXplKCkpOworfQorCitzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhDR0Nv
bnRleHRSZWYgY29udGV4dCwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9h
dFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBib29sIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKQorewogICAgIGlmIChvZmZzZXQuaXNaZXJvKCkgJiYgIWJsdXIp
IHsKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVpl
cm8sIDAsIDApOwogICAgICAgICByZXR1cm47CkBAIC0xMDQ1LDcgKzEwOTMsNyBAQCBzdGF0aWMg
dm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgRmxvYXRTaXplJgogICAgIENHRmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWlnaHQoKTsK
ICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVyOwogCi0gICAgaWYgKCFncmFwaGljc0NvbnRl
eHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSkgeworICAgIGlmICghc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpIHsKICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IGdl
dFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAKICAgICAgICAgQ0dGbG9hdCBBID0gdXNlclRvQmFz
ZUNUTS5hICogdXNlclRvQmFzZUNUTS5hICsgdXNlclRvQmFzZUNUTS5iICogdXNlclRvQmFzZUNU
TS5iOwpAQCAtMTA2Niw3ICsxMTE0LDggQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICAv
LyBFeHRyZW1lICJibHVyIiB2YWx1ZXMgY2FuIG1ha2UgdGV4dCBkcmF3aW5nIGNyYXNoIG9yIHRh
a2UgY3JhenkgbG9uZyB0aW1lcywgc28gY2xhbXAKICAgICBibHVyUmFkaXVzID0gc3RkOjptaW4o
Ymx1clJhZGl1cywgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KDEwMDAuMCkpOwogCi0gICAgYXBw
bHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoZ3JhcGhpY3NDb250ZXh0LCB4T2Zmc2V0
LCB5T2Zmc2V0KTsKKyAgICBpZiAocmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCkKKyAgICAgICAgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29u
dGV4dCwgeE9mZnNldCwgeU9mZnNldCk7CiAKICAgICAvLyBDaGVjayBmb3IgYW4gaW52YWxpZCBj
b2xvciwgYXMgdGhpcyBtZWFucyB0aGF0IHRoZSBjb2xvciB3YXMgbm90IHNldCBmb3IgdGhlIHNo
YWRvdwogICAgIC8vIGFuZCB3ZSBzaG91bGQgdGhlcmVmb3JlIGp1c3QgdXNlIHRoZSBkZWZhdWx0
IHNoYWRvdyBjb2xvci4KQEAgLTEwNzYsNDQgKzExMjUsODEgQEAgc3RhdGljIHZvaWQgc2V0Q0dT
aGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0
U2l6ZSYKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6
ZU1ha2UoeE9mZnNldCwgeU9mZnNldCksIGJsdXJSYWRpdXMsIGNhY2hlZENHQ29sb3IoY29sb3Ip
LmdldCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZGlkVXBkYXRlU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3RhdGVD
aGFuZ2VzKCkKIHsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBp
ZiAoIXN0YXRlKCkuY2hhbmdlcygpKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0g
ICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZS5zdHJv
a2VUaGlja25lc3MsIDAuZikpOworICAgIGF1dG8gY29udGV4dCA9IGludGVybmFsUGxhdGZvcm1D
b250ZXh0KCk7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRo
Q29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZS5zdHJva2VDb2xvcikuZ2V0KCkpOwor
ICAgIGZvciAoYXV0byBjaGFuZ2UgOiBzdGF0ZSgpLmNoYW5nZXMoKSkgeworICAgICAgICBzd2l0
Y2ggKGNoYW5nZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkNUTToKKyAgICAgICAgICAgIENHQ29udGV4dFNldENUTShjb250ZXh0LCBzdGF0ZSgpLmdldENU
TSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBzZXRDR0ZpbGxDb2xv
cihjb250ZXh0LCBzdGF0ZS5maWxsQ29sb3IpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaDoKKyAgICAgICAgICAgIHNldENHRmlsbENvbG9yKGNv
bnRleHQsIHN0YXRlKCkuZmlsbEJydXNoKCkuY29sb3IoKSk7CisgICAgICAgICAgICBicmVhazsK
IAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFu
Z2UpKQotICAgICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5hbHBoYSk7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNz
OgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0
YXRlKCkuc3Ryb2tlVGhpY2tuZXNzKCksIDAuZikpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRl
T3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0p
KQotICAgICAgICBzZXRDR0JsZW5kTW9kZShjb250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRv
ciwgc3RhdGUuYmxlbmRNb2RlKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpTdHJva2VCcnVzaDoKKyAgICAgICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9y
V2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3Ioc3RhdGUoKS5zdHJva2VCcnVzaCgpLmNv
bG9yKCkpLmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAg
ICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUo
c3RhdGUudGV4dERyYXdpbmdNb2RlKSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6TGluZUNhcDoKKyAgICAgICAgICAgIHNldENHTGluZUNhcChjb250ZXh0LCBz
dGF0ZSgpLmxpbmVDYXAoKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAg
ICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGlu
ZUpvaW46CisgICAgICAgICAgICBzZXRDR0xpbmVKb2luKGNvbnRleHQsIHN0YXRlKCkubGluZUpv
aW4oKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBDR0Nv
bnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2g6
CisgICAgICAgICAgICBzZXRDR0xpbmVEYXNoKGNvbnRleHQsIHN0YXRlKCkubGluZURhc2goKS5k
YXNoZXMsIHN0YXRlKCkubGluZURhc2goKS5vZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9u
UXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpNaXRlckxpbWl0OgorICAgICAgICAgICAgc2V0Q0dNaXRlckxpbWl0KGNvbnRleHQsIHN0
YXRlKCkubWl0ZXJMaW1pdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQotICAgICAgICBz
ZXRDR1NoYWRvdygqdGhpcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIs
IG1fc3RhdGUuc2hhZG93Q29sb3IpOwotfQorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGU6CisgICAgICAgICAgICBzZXRDR0JsZW5kTW9kZShj
b250ZXh0LCBzdGF0ZSgpLmNvbXBvc2l0ZU1vZGUoKS5vcGVyYXRpb24sIHN0YXRlKCkuY29tcG9z
aXRlTW9kZSgpLmJsZW5kTW9kZSk7CisgICAgICAgICAgICBicmVhazsKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBDR0NvbnRleHRT
ZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIHNldENH
U2hhZG93KGNvbnRleHQsIHJlbmRlcmluZ01vZGUoKSwgc3RhdGUoKS5kcm9wU2hhZG93KCkub2Zm
c2V0LCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5ibHVyUmFkaXVzLCBzdGF0ZSgpLmRyb3BTaGFkb3co
KS5jb2xvciwgc3RhdGUoKS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxw
aGE6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZSgpLmFscGhh
KCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5OgorICAgICAgICAgICAgQ0dD
b250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwgY2dJbnRlcnBvbGF0aW9uUXVh
bGl0eShzdGF0ZSgpLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0
RHJhd2luZ01vZGU6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29u
dGV4dCwgY2dUZXh0RHJhd2luZ01vZGUoc3RhdGUoKS50ZXh0RHJhd2luZ01vZGUoKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpTaG91bGRBbnRpYWxpYXM6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRp
YWxpYXMoY29udGV4dCwgc3RhdGUoKS5zaG91bGRBbnRpYWxpYXMoKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3Vs
ZFNtb290aEZvbnRzOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMo
Y29udGV4dCwgc3RhdGUoKS5zaG91bGRTbW9vdGhGb250cygpKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCkBAIC0xMTI1LDcgKzEyMTEsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlm
IChzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAg
ICAgICAgY29uc3QgZmxvYXQgZG91YmxlTGluZVdpZHRoID0gbGluZVdpZHRoICogMjsKICAgICAg
ICAgICAgIGZsb2F0IGFkanVzdGVkV2lkdGggPSBjZWlsZihyZWN0LndpZHRoKCkgKyBkb3VibGVM
aW5lV2lkdGgpOwpAQCAtMTEzNSw3ICsxMjIxLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAg
ICAgICAgIGF1dG8gbGF5ZXIgPSBhZG9wdENGKENHTGF5ZXJDcmVhdGVXaXRoQ29udGV4dChjb250
ZXh0LCBsYXllclNpemUsIDApKTsKIAogICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGxheWVyQ29u
dGV4dCA9IENHTGF5ZXJHZXRDb250ZXh0KGxheWVyLmdldCgpKTsKLSAgICAgICAgICAgIG1fc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzID0gbGluZVdpZHRoOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0
TGluZVdpZHRoKGxheWVyQ29udGV4dCwgbGluZVdpZHRoKTsKIAogICAgICAgICAgICAgLy8gQ29t
cGVuc2F0ZSBmb3IgdGhlIGxpbmUgd2lkdGgsIG90aGVyd2lzZSB0aGUgbGF5ZXIncyB0b3AtbGVm
dCBjb3JuZXIgd291bGQgYmUKQEAgLTExNDksOCArMTIzNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
CiAgICAgICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGxheWVyQ29udGV4dCwgcmVjdCk7CiAgICAg
ICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChsYXllckNvbnRleHQp
OwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNvbnRleHQpOwotICAgICAgICAgICAg
Q0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNw
YWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50
KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250
ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50
KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAKICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRlc3Rp
bmF0aW9uWCA9IHJvdW5kZihyZWN0LngoKSAtIGxpbmVXaWR0aCk7CiAgICAgICAgICAgICBjb25z
dCBmbG9hdCBkZXN0aW5hdGlvblkgPSByb3VuZGYocmVjdC55KCkgLSBsaW5lV2lkdGgpOwpAQCAt
MTE2MSwxMyArMTI0NiwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICAgICAgQ0dDb250
ZXh0QWRkUmVjdChjb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQ
YXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChj
b250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RN
KGNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3Jh
ZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJu
KCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwogCiAgICAgLy8gVXNpbmcgQ0dDb250
ZXh0QWRkUmVjdCBhbmQgQ0dDb250ZXh0U3Ryb2tlUGF0aCB0byBzdHJva2UgcmVjdCByYXRoZXIg
dGhhbgpAQCAtMTE4Miw5NCArMTI2Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgQ0dDb250
ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0
TGluZUNhcChMaW5lQ2FwIGNhcCkKLXsKLSAgICBzd2l0Y2ggKGNhcCkgewotICAgIGNhc2UgTGlu
ZUNhcDo6QnV0dDoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQo
KSwga0NHTGluZUNhcEJ1dHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVDYXA6OlJv
dW5kOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dM
aW5lQ2FwUm91bmQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToK
LSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNh
cFNxdWFyZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZz
ZXQpCi17Ci0gICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7Ci0gICAgICAgIGZsb2F0IGxlbmd0aCA9
IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgbGVuZ3RoICs9IHN0YXRpY19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOwotICAg
ICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNl
dCwgbGVuZ3RoKSArIGxlbmd0aDsKLSAgICB9Ci0gICAgQ0dDb250ZXh0U2V0TGluZURhc2gocGxh
dGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2lu
KQotewotICAgIHN3aXRjaCAoam9pbikgewotICAgIGNhc2UgTGluZUpvaW46Ok1pdGVyOgotICAg
ICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5N
aXRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUpvaW46OlJvdW5kOgotICAgICAg
ICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5Sb3Vu
ZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUpvaW46OkJldmVsOgotICAgICAgICBD
R0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5CZXZlbCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRm
b3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIG1fZGF0YS0+
c2NhbGUoc2l6ZSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9C
ZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZShm
bG9hdCBhbmdsZSkKLXsKLSAgICBDR0NvbnRleHRSb3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCks
IGFuZ2xlKTsKLSAgICBtX2RhdGEtPnJvdGF0ZShhbmdsZSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgeCwgeSk7Ci0gICAgbV9kYXRhLT50
cmFuc2xhdGUoeCwgeSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3du
VG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDR0NvbnRleHRD
b25jYXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5jb25j
YXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25v
d25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENHQ29udGV4dFNl
dENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPnNldENUTSh0
cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJ
ZGVudGl0eSA9IGZhbHNlOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6
OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAotewotICAgIC8v
IFRoZSBDVE0gdXN1YWxseSBpbmNsdWRlcyB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgZXhjZXB0IGlu
IFdlYktpdCAxIHdoZW4gdGhlCi0gICAgLy8gY29udGVudCBpcyBub24tY29tcG9zaXRlZCwgc2lu
Y2UgdGhlIHNjYWxlIGZhY3RvciBpcyBpbnRlZ3JhdGVkIGF0IGEgbG93ZXIKLSAgICAvLyBsZXZl
bC4gVG8gZ3VhcmFudGVlIHRoZSBkZXZpY2VTY2FsZSBpcyBpbmNsdWRlZCwgd2UgY2FuIHVzZSB0
aGlzIENHIEFQSS4KLSAgICBpZiAoaW5jbHVkZVNjYWxlID09IERlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNw
YWNlVHJhbnNmb3JtKHBsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIHJldHVybiBDR0NvbnRleHRH
ZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwotfQotCiBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0
Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01v
ZGUgcm91bmRpbmdNb2RlKQogewogICAgIC8vIEl0IGlzIG5vdCBlbm91Z2gganVzdCB0byByb3Vu
ZCB0byBwaXhlbHMgaW4gZGV2aWNlIHNwYWNlLiBUaGUgcm90YXRpb24gcGFydCBvZiB0aGUKQEAg
LTEyODAsNyArMTI3Nyw5IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nCiAgICAgaWYgKG1fZGF0
YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSkKICAgICAgICAgcmV0
dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3QpOwogCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNl
TWF0cml4ID0gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShwbGF0
Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKKworICAgIENHQWZmaW5lVHJhbnNmb3JtIGRldmljZU1hdHJpeCA9IENHQ29udGV4dEdl
dFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFuc2Zvcm0oY29udGV4dCk7CiAgICAgaWYgKENHQWZm
aW5lVHJhbnNmb3JtSXNJZGVudGl0eShkZXZpY2VNYXRyaXgpKSB7CiAgICAgICAgIG1fZGF0YS0+
bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IHRydWU7CiAgICAgICAg
IHJldHVybiByb3VuZGVkSW50UmVjdChyZWN0KTsKQEAgLTEzMTksNiArMTMxOCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGZsb2F0IHRoaWNrbmVzCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAg
IENvbG9yIGxvY2FsU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CiAKICAgICBGbG9hdFJlY3Qg
Ym91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChGbG9h
dFJlY3QocG9pbnQsIEZsb2F0U2l6ZSh3aWR0aHMubGFzdCgpLCB0aGlja25lc3MpKSwgcHJpbnRp
bmcsIGxvY2FsU3Ryb2tlQ29sb3IpOwpAQCAtMTM2NCwxMiArMTM2NCwxMiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBm
bG9hdCB0aGlja25lcwogICAgIH0KIAogICAgIGlmIChmaWxsQ29sb3JJc05vdEVxdWFsVG9TdHJv
a2VDb2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGxvY2Fs
U3Ryb2tlQ29sb3IpOworICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBsb2NhbFN0cm9r
ZUNvbG9yKTsKIAotICAgIENHQ29udGV4dEZpbGxSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgZGFz
aEJvdW5kcy5kYXRhKCksIGRhc2hCb3VuZHMuc2l6ZSgpKTsKKyAgICBDR0NvbnRleHRGaWxsUmVj
dHMoY29udGV4dCwgZGFzaEJvdW5kcy5kYXRhKCksIGRhc2hCb3VuZHMuc2l6ZSgpKTsKIAogICAg
IGlmIChmaWxsQ29sb3JJc05vdEVxdWFsVG9TdHJva2VDb2xvcikKLSAgICAgICAgc2V0Q0dGaWxs
Q29sb3IocGxhdGZvcm1Db250ZXh0KCksIGZpbGxDb2xvcigpKTsKKyAgICAgICAgc2V0Q0dGaWxs
Q29sb3IoY29udGV4dCwgZmlsbENvbG9yKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCkKQEAgLTE0MTIsMTcgKzE0MTIsMTggQEAgUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRD
Rzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIEdyYXBoaWNz
Q29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIC8vIENvcmVH
cmFwaGljcyBleHBlY3RzIHRoZSBiYXNlIENUTSBvZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0
aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQuCiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2Ug
dGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2UgY2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBh
cyBmb2N1cyByaW5ncywKICAgICAvLyB0byBkcmF3IHdpdGggYSBzY2FsZSBmYWN0b3Igb2YgMSBy
YXRoZXIgdGhhbiB0aGUgYWN0dWFsIHNjYWxlIGZhY3Rvci4KLSAgICBDR0NvbnRleHRTZXRCYXNl
Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdl
dEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCkpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2Nh
bGVGYWN0b3IpKTsKKyAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKGNvbnRleHQsIENHQWZmaW5lVHJh
bnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShjb250ZXh0KSwgZGV2aWNlU2NhbGVGYWN0
b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRG
aWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KLSAgICBpZiAobV9z
dGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybikgeworICAgIGlmIChmaWxs
R3JhZGllbnQoKSB8fCBmaWxsUGF0dGVybigpKSB7CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRo
KGVsbGlwc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQzNCw3ICsxNDM1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKQogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiB7CiAgICAgLy8gQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5
IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8
fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKKyAgICBpZiAoc3Ryb2tlR3JhZGllbnQoKSB8fCBz
dHJva2VQYXR0ZXJuKCkpIHsKICAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0NjgsOSArMTQ2OSwxMCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBGbG9hdFBvaQogCiBib29sIEdyYXBoaWNzQ29udGV4dENHOjpjYW5Vc2VTaGFkb3dCbHVy
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgcmV0dXJuIChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpOwogfQogCi19CiAKLSNlbmRpZgorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKaW5kZXggNDY4YTQ0YmFhODZl
ZTUyNjE5ZDI1NWY5Mzk0M2E5NzU1YmFjOWZhYi4uZjk5YzNkOWI5YmQyODI1ODY1ZmRmN2VhODBi
MmFmMDBlMzRiNTJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCwgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDUzICsy
NSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFVTRShDRykKKwogI2luY2x1ZGUgIkNvbG9y
U3BhY2VDRy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNHQWZmaW5lVHJhbnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVm
KTsKLQotY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7Ci1wdWJsaWM6Ci0gICAgQ0dDb250ZXh0
U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRy
dWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9zYXZlQW5kUmVz
dG9yZShzYXZlQW5kUmVzdG9yZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3Jl
KQotICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOwotICAgIH0KLSAg
ICAKLSAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCi0gICAgewotICAgICAgICBpZiAobV9zYXZl
QW5kUmVzdG9yZSkKLSAgICAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgh
bV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUobV9jb250ZXh0
KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBy
ZXN0b3JlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOwotICAgICAgICBtX3NhdmVBbmRS
ZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9yZTsKLSAgICB9Ci0gICAgCi1wcml2
YXRlOgotICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7Ci0gICAgYm9vbCBtX3NhdmVBbmRSZXN0
b3JlOwotfTsKLQogY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0Q0cgOiBwdWJs
aWMgR3JhcGhpY3NDb250ZXh0IHsKIHB1YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHRDRyhDR0Nv
bnRleHRSZWYpOwpAQCAtODUsNjkgKzQ1LDQ4IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1BsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgc2F2ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVz
dG9yZSgpIGZpbmFsOworICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsK
KyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7
Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKIAorICAgIHZvaWQgc2F2ZSgpIGZp
bmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5n
ZXMoKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwogICAgIHZv
aWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVu
Y3lMYXllcigpIGZpbmFsOwogCiAgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
IGZhY3RvcikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0Owot
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsK
LQotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsK
LSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsK
LQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBib29sIGlz
Q0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQoYm9vbCkgZmluYWw7Ci0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNp
dHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAogICAg
IHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZp
bmFsOwotCiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCkgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsK
KyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICBJbnRSZWN0
IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAg
ICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZp
bmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0
TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9s
ZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICB1c2lu
ZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXpl
JikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwot
ICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgc3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwog
Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAg
dm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CisgICAgdm9pZCBz
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1
ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKIAotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFs
OworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9p
ZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmlu
YWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IENvbG9yJikgZmluYWw7CkBAIC0xNTYsMTggKzk1LDIxIEBAIHB1YmxpYzoKICAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBj
b25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlmCiAKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
c2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwogCisgICAgdm9pZCBk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJv
a2VTdHlsZSkgZmluYWw7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKIAotICAgIHZvaWQg
c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAg
IHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgRmxvYXRSZWN0IHJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxT
aWRlcykgZmluYWw7CiAKICAgICBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZp
bmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKyAgICB2
b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisK
KyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogCiAgICAgdmlydHVhbCBi
b29sIGNhblVzZVNoYWRvd0JsdXIoKSBjb25zdDsKIApAQCAtMTc1LDkgKzExNywxNiBAQCBwdWJs
aWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0
ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisgICAgQ0dDb250ZXh0UmVmIGludGVy
bmFsUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRyIH07CiB9OwogCi19CitDR0FmZmlu
ZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZik7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIkNHQ29udGV4dFN0YXRlU2F2ZXIuaCIKIAorI2VuZGlm
IC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggZTZjZTJmYjk3MjQ3YTZiODZjMDliMWFk
MzYxNzAxYzJlYzNlODYyNS4uYWYwMGEwMTMzNDdlMGNkODVhMzBiODg0ZWJjNzlmMzJmMWUyMzEy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTEyNyw3ICsxMjcsNyBAQCBib29sIFBERkRvY3VtZW50
SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYQogCiAgICAgLy8gT2xkIGFuZCBuZXcgY29udGV4dCBzY2FsaW5nIGZhY3RvcnMgaGF2
ZSB0byBtYXRjaCBhcyB3ZWxsLgogICAgIEFmZmluZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5cGUg
ZGVjb21wb3NlZFRyYW5zZm9ybTsKLSAgICBjb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6
OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpLmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNm
b3JtKTsKKyAgICBjb250ZXh0LmdldENUTSgpLmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3Jt
KTsKIAogICAgIEFmZmluZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5cGUgY2FjaGVkRGVjb21wb3Nl
ZFRyYW5zZm9ybTsKICAgICBtX2NhY2hlZFRyYW5zZm9ybS5kZWNvbXBvc2UoY2FjaGVkRGVjb21w
b3NlZFRyYW5zZm9ybSk7CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBQREZEb2N1bWVudEltYWdl
Ojp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QKICAgICB0cmFuc2Zvcm1Db250ZXh0Rm9yUGFpbnRpbmcoYnVmZmVyQ29udGV4dCwgZHN0UmVj
dCwgRmxvYXRSZWN0KG1fY2FjaGVkSW1hZ2VSZWN0LmxvY2F0aW9uKCksIHNyY1JlY3Quc2l6ZSgp
KSk7CiAgICAgZHJhd1BERlBhZ2UoYnVmZmVyQ29udGV4dCk7CiAKLSAgICBtX2NhY2hlZFRyYW5z
Zm9ybSA9IGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVE
ZXZpY2VTY2FsZSk7CisgICAgbV9jYWNoZWRUcmFuc2Zvcm0gPSBjb250ZXh0LmdldENUTSgpOwog
ICAgIG1fY2FjaGVkRGVzdGluYXRpb25SZWN0ID0gZHN0UmVjdDsKICAgICBtX2NhY2hlZFNvdXJj
ZVJlY3QgPSBzcmNSZWN0OwogICAgICsrbV9jYWNoaW5nQ291bnRGb3JUZXN0aW5nOwpAQCAtMzYz
LDYgKzM2Myw4IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2UoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQogCiAgICAgY29udGV4dC50cmFuc2xhdGUoLW1fY3JvcEJveC5sb2Nh
dGlvbigpKTsKIAorICAgIGNvbnRleHQuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAgIC8vIENH
UERGIHBhZ2VzIGFyZSBpbmRleGVkIGZyb20gMS4KICNpZiBQTEFURk9STShDT0NPQSkKICAgICBD
R0NvbnRleHREcmF3UERGUGFnZVdpdGhBbm5vdGF0aW9ucyhjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCBDR1BERkRvY3VtZW50R2V0UGFnZShtX2RvY3VtZW50LmdldCgpLCAxKSwgbnVsbHB0cik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRl
eCBkNjg5YTUxYTg5MTAyYTUwOTA0NTU5YjQ0MjIzNjlkZTE0NzAzMzM1Li5mZGVlZjZiMzhkMGM1
YjU1NTY3MzdlYjdmNDRhZjJmMmZjOWE0NDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBib29sIFBhdGg6
OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2
b2lkKEdyYXBoaWNzQwogICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAotICAgIGJv
b2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhDb250YWluc1BvaW50KGNvbnRleHQsIHBvaW50
LCBrQ0dQYXRoU3Ryb2tlKTsKKyAgICBib29sIGhpdFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29u
dGFpbnNQb2ludChncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCBrQ0dQ
YXRoU3Ryb2tlKTsKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogCiAgICAg
cmV0dXJuIGhpdFN1Y2Nlc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3Jl
VGV4dC5jcHAKaW5kZXggZWZiYzFlNDk1NDQxYmVkZTczNGU5NDhkZDI2ZDM3MTQ0MTY1NTNlMC4u
ZTliN2FjNGQ3ZjRjYmY3NDEyODkzOWJmYThjMDRlNzY1YTBkYmQ4NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVy
Q29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDYgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEcmF3R2x5cGhzUmVjb3JkZXIuaCIKIAotI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgpAQCAtMzUsNDkgKzM0LDQxIEBACiAjaW5jbHVk
ZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0KICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxwYWwv
c3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGJlZ2luTGF5ZXIoQ0dDb250ZXh0RGVsZWdh
dGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBn
c3RhdGUsIENHUmVjdCByZWN0LCBDRkRpY3Rpb25hcnlSZWYsIENHQ29udGV4dERlbGVnYXRlUmVm
KQorc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGJlZ2luTGF5ZXIoQ0dDb250ZXh0RGVsZWdh
dGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwg
Q0dSZWN0LCBDRkRpY3Rpb25hcnlSZWYsIENHQ29udGV4dERlbGVnYXRlUmVmKQogewogICAgIERy
YXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29y
ZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIu
cmVjb3JkQmVnaW5MYXllcihyc3RhdGUsIGdzdGF0ZSwgcmVjdCk7CisgICAgcmVjb3JkZXIucmVj
b3JkQmVnaW5MYXllcihnc3RhdGUpOwogICAgIHJldHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGlj
IENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVn
YXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQorc3Rh
dGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRl
bGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7CiAgICAg
RHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVj
b3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRl
ci5yZWNvcmRFbmRMYXllcihyc3RhdGUsIGdzdGF0ZSk7CisgICAgcmVjb3JkZXIucmVjb3JkRW5k
TGF5ZXIoZ3N0YXRlKTsKICAgICByZXR1cm4gZGVsZWdhdGU7CiB9CiAKLXN0YXRpYyBDR0Vycm9y
IGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3Rh
dGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3Jt
KiB0bSwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwg
c2l6ZV90IGNvdW50KQorc3RhdGljIENHRXJyb3IgZHJhd0dseXBocyhDR0NvbnRleHREZWxlZ2F0
ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBj
b25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENH
UG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKIHsKLSAgICBpZiAoQ0dHU3RhdGVHZXRB
bHBoYShnc3RhdGUpID4gMCkgewotICAgICAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVy
ID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0
SW5mbyhkZWxlZ2F0ZSkpOwotICAgICAgICByZWNvcmRlci5yZWNvcmREcmF3R2x5cGhzKHJzdGF0
ZSwgZ3N0YXRlLCB0bSwgZ2x5cGhzLCBwb3NpdGlvbnMsIGNvdW50KTsKLSAgICB9CisgICAgRHJh
d0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3Jk
ZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKKyAgICByZWNvcmRlci5y
ZWNvcmREcmF3R2x5cGhzKGdzdGF0ZSwgZ2x5cGhzLCBwb3NpdGlvbnMsIGNvdW50KTsKICAgICBy
ZXR1cm4ga0NHRXJyb3JTdWNjZXNzOwogfQogCi1zdGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dD
b250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBD
R0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGltYWdlKQorc3RhdGlj
IENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVm
IGltYWdlKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nh
c3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRl
KSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRHJhd0ltYWdlKHJzdGF0ZSwgZ3N0YXRlLCByZWN0LCBp
bWFnZSk7CisgICAgcmVjb3JkZXIucmVjb3JkRHJhd0ltYWdlKGdzdGF0ZSwgcmVjdCwgaW1hZ2Up
OwogICAgIHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAKLVVuaXF1ZVJlZjxHcmFwaGljc0Nv
bnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKK3N0YXRp
YyBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRleHQoRHJhd0ds
eXBoc1JlY29yZGVyJiByZWNvcmRlcikKIHsKLSAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFk
b3B0Q0YoQ0dDb250ZXh0RGVsZWdhdGVDcmVhdGUodGhpcykpOworICAgIGF1dG8gY29udGV4dERl
bGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSgmcmVjb3JkZXIpKTsKICAg
ICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVC
ZWdpbkxheWVyLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZi
ZWdpbkxheWVyKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVs
ZWdhdGUuZ2V0KCksIGRlRW5kTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdh
dGVDYWxsYmFjaz4oJmVuZExheWVyKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFj
ayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0dseXBocywgcmVpbnRlcnByZXRfY2FzdDxD
R0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmV2ViQ29yZTo6ZHJhd0dseXBocykpOwpAQCAtODYs
NjcgKzc3LDE1IEBAIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRl
cjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHcmFw
aGljc0NvbnRleHRDRz4oY29udGV4dC5nZXQoKSk7CiB9CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6
RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJh
d0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJp
dmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29y
ZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRl
eHQsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZv
bnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNvbnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9u
Q29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiAgICAgLCBtX2RlY29uc3RydWN0RHJhd0dseXBo
cyhkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAgICAgLCBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dChk
ZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgLCBtX2ludGVybmFsQ29udGV4dChjcmVhdGVJbnRl
cm5hbENvbnRleHQoKSkKKyAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29u
dGV4dCgqdGhpcykpCiB7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUlu
dGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsK
LSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yID0gY29udGV4dFN0YXRlLmZpbGxD
b2xvcjsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50ID0gY29udGV4dFN0
YXRlLmZpbGxHcmFkaWVudDsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07
Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLmZp
bGxQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yID0gY29u
dGV4dFN0YXRlLnN0cm9rZUNvbG9yOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5n
cmFkaWVudCA9IGNvbnRleHRTdGF0ZS5zdHJva2VHcmFkaWVudDsKLSAgICBtX29yaWdpbmFsU3Rh
dGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5zdHJv
a2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHls
ZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLnN0cm9rZVBhdHRlcm47Ci0KLSAgICBtX29yaWdpbmFs
U3RhdGUuY3RtID0gbV9vd25lci5nZXRDVE0oKTsgLy8gRklYTUU6IERlYWwgd2l0aCBiYXNlIENU
TS4KLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0ID0gY29udGV4dFN0YXRlLnNo
YWRvd09mZnNldDsKLSAgICBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIgPSBjb250ZXh0U3Rh
dGUuc2hhZG93Qmx1cjsKLSAgICBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yID0gY29udGV4
dFN0YXRlLnNoYWRvd0NvbG9yOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJh
bnNmb3JtcyA9IGNvbnRleHRTdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLQotICAgIG1f
Y3VycmVudFN0YXRlID0gbV9vcmlnaW5hbFN0YXRlOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNv
cmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IGNvbnRleHRTdGF0ZSkKLXsKLSAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xv
ci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsQ29sb3IobV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvcik7Ci0gICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0
YXRlLmZpbGxTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZp
bGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7Ci0gICAgICAg
IGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2lu
dGVybmFsQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUu
cGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5j
b2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VDb2xv
cihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IpOwotICAgIGVsc2UgaWYgKG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRl
eHQtPnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGll
bnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5w
YXR0ZXJuKTsKLSAgICAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJu
KQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZVBhdHRlcm4oKm1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBtX2ludGVybmFs
Q29udGV4dC0+c2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwotCi0gICAgbV9pbnRlcm5hbENv
bnRleHQtPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cu
aWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvdyhtX29y
aWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBt
X29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBjb250ZXh0U3RhdGUuc2hhZG93UmFkaXVzTW9k
ZSk7Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRT
dGF0ZS50ZXh0RHJhd2luZ01vZGUpOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJl
cGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnNldEludGVybmFsRm9udChj
b25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAg
IEFTU0VSVChDR0FmZmluZVRyYW5zZm9ybUlzSWRlbnRpdHkoQ1RGb250R2V0TWF0cml4KGZvbnQu
cGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKSk7CiAKQEAgLTE1NiwxMDQgKzk1LDM4IEBAIHZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZv
bnQsIEZvbnRTbW9vdGhpbmdNCiAgICAgbV9vcmlnaW5hbFRleHRNYXRyaXggPSBjb21wdXRlT3Zl
cmFsbFRleHRNYXRyaXgoZm9udCk7CiAgICAgaWYgKGZvbnQucGxhdGZvcm1EYXRhKCkub3JpZW50
YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKQogICAgICAgICBtX29yaWdpbmFs
VGV4dE1hdHJpeCA9IGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9udCwgbV9vcmlnaW5hbFRl
eHRNYXRyaXgpOwotCi0gICAgYXV0byYgY29udGV4dFN0YXRlID0gbV9vd25lci5zdGF0ZSgpOwot
ICAgIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb250ZXh0U3RhdGUpOwotICAgIHBvcHVsYXRlSW50
ZXJuYWxDb250ZXh0KGNvbnRleHRTdGF0ZSk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVy
Ojpjb25jbHVkZUludGVybmFsQ29udGV4dCgpCitHcmFwaGljc0NvbnRleHRTdGF0ZSBEcmF3R2x5
cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoKQogewotICAgIHVwZGF0ZUNUTSht
X29yaWdpbmFsU3RhdGUuY3RtKTsKLSAgICB1cGRhdGVGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRl
LmZpbGxTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudC5nZXQo
KSwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuLmdldCgpKTsKLSAgICB1cGRhdGVT
dHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IsIG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0
eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0ZVNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hh
ZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUu
c2hhZG93LmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPyBT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzIDogU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Ok5v
KTsKKyAgICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgp
OworICAgIG1faW50ZXJuYWxDb250ZXh0LT5tZXJnZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7
CisgICAgbV9pbnRlcm5hbENvbnRleHQtPmFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmV0dXJu
IG9yaWdpbmFsU3RhdGU7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVGaWxs
Q29sb3IoY29uc3QgQ29sb3ImIG5ld0NvbG9yLCBHcmFkaWVudCogbmV3R3JhZGllbnQsIFBhdHRl
cm4qIG5ld1BhdHRlcm4pCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVzdG9yZURlc3RpbmF0
aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSkKIHsK
LSAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9y
IG91ciBsaW1pdGVkIHVzZS4KLSAgICAvLyBDVCB3aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBh
IHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAv
LyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQg
d2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28u
Ci0gICAgaWYgKG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5jb2xvcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3U3RhdGU7Ci0gICAg
bmV3U3RhdGUuZmlsbENvbG9yID0gbmV3Q29sb3I7Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAg
ICAgICBuZXdTdGF0ZS5maWxsR3JhZGllbnQgPSBuZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0
dGVybikKLSAgICAgICAgbmV3U3RhdGUuZmlsbFBhdHRlcm4gPSBuZXdQYXR0ZXJuOwotICAgIG1f
b3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBu
ZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5tZXJnZVN0YXRlRGlmZnMob3JpZ2lu
YWxTdGF0ZSk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTdHJva2VDb2xv
cihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiog
bmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVyKENH
R1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBp
dCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVzZS4KLSAgICAvLyBDVCB3aWxsIG9u
bHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3Jy
ZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNl
dCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29y
a3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRl
LnN0cm9rZVN0eWxlLmNvbG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBuZXdTdGF0ZS5zdHJva2VDb2xvciA9IG5ld0NvbG9yOwot
ICAgIGlmIChuZXdHcmFkaWVudCkKLSAgICAgICAgbmV3U3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBu
ZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0dGVybikKLSAgICAgICAgbmV3U3RhdGUuc3Ryb2tl
UGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAgbV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0
ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UgfSk7Ci0gICAgbV9j
dXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IgPSBuZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0
aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoQ0dHU3RhdGVHZXRBbHBoYShnc3Rh
dGUpKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUNUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGN0bSkKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXll
cihDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7Ci0gICAgaWYgKGN0bSA9PSBtX2N1cnJlbnRTdGF0ZS5j
dG0pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb3duZXIuc2V0Q1RNKGN0bSk7Ci0gICAgbV9j
dXJyZW50U3RhdGUuY3RtID0gY3RtOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgq
Q0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotc3RhdGljIGJvb2wgc2hhZG93SXNDbGVhcmVkKGNvbnN0
IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKQotewotICAgIHJldHVy
biBzaGFkb3dPZmZzZXQgPT0gRmxvYXRTaXplKCkgJiYgIXNoYWRvd0JsdXI7Ci19Ci0KLXZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dP
ZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi17Ci0gICAgLy8gV2Ug
ZG9uJ3QgbmVlZCB0byBjb25zaWRlciBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyBpZiBub2JvZHkg
aGFzIGFueSBzaGFkb3dzLgotICAgIGlmIChzaGFkb3dJc0NsZWFyZWQoc2hhZG93T2Zmc2V0LCBz
aGFkb3dCbHVyKSAmJiBzaGFkb3dJc0NsZWFyZWQobV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNl
dCwgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyBzdGF0ZUNoYW5nZUZsYWdzOwotCi0gICAgaWYgKHNoYWRvd09mZnNl
dCAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0IHx8IHNoYWRvd0JsdXIgIT0gbV9jdXJy
ZW50U3RhdGUuc2hhZG93LmJsdXIgfHwgc2hhZG93Q29sb3IgIT0gbV9jdXJyZW50U3RhdGUuc2hh
ZG93LmNvbG9yKSB7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd09mZnNldCA9IHNoYWRvd09mZnNl
dDsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93Qmx1ciA9IHNoYWRvd0JsdXI7Ci0gICAgICAgIG5l
d1N0YXRlLnNoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxh
Z3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwotICAgIH0KLSAgICBp
ZiAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgIT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVu
c3BlY2lmaWVkICYmIChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtczo6WWVzKSAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3Jtcykg
ewotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLSAgICAgICAg
c3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zQ2hhbmdlKTsKLSAgICB9Ci0gICAgaWYgKHN0YXRlQ2hhbmdlRmxhZ3MuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0
ZSwgc3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0
ID0gc2hhZG93T2Zmc2V0OwotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5ibHVyID0gc2hhZG93
Qmx1cjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuY29sb3IgPSBzaGFkb3dDb2xvcjsKLSAg
ICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KLQotdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmIHN0eWxlKQorc3RhdGlj
IHZvaWQgc2V0RHJvcFNoYWRvdyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwg
Q0dTdHlsZVJlZiBzdHlsZSkKIHsKICAgICBpZiAoQ0dTdHlsZUdldFR5cGUoc3R5bGUpICE9IGtD
R1N0eWxlU2hhZG93KSB7CiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG1vcmUga2luZHMgb2Yg
Q0dTdHlsZXMuCi0gICAgICAgIHVwZGF0ZVNoYWRvdyh7MCwgMH0sIDAsIENvbG9yKCksIFNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOjpVbnNwZWNpZmllZCk7CisgICAgICAgIGRlc3RpbmF0aW9uQ29u
dGV4dC5jbGVhclNoYWRvdygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNjEsMjAg
KzEzNCw5IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFkb3coQ0dTdHlsZVJl
ZiBzdHlsZSkKICAgICBhdXRvIHJhZCA9IGRlZzJyYWQoc2hhZG93U3R5bGUuYXppbXV0aCAtIDE4
MCk7CiAgICAgYXV0byBzaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc3RkOjpjb3MocmFkKSwgc3Rk
OjpzaW4ocmFkKSkgKiBzaGFkb3dTdHlsZS5oZWlnaHQ7CiAgICAgYXV0byBzaGFkb3dDb2xvciA9
IENHU3R5bGVHZXRDb2xvcihzdHlsZSk7Ci0gICAgdXBkYXRlU2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93U3R5bGUucmFkaXVzLCBDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHNo
YWRvd0NvbG9yKSwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Olllcyk7Ci19CiAKLXZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENH
R1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0KQotewotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRD
VE0oZ3N0YXRlKSk7Ci0gICAgYXV0byBhbHBoYSA9IENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKTsK
LSAgICBtX293bmVyLmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoYWxwaGEpOwotfQotCi12b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dH
U3RhdGVSZWYgZ3N0YXRlKQotewotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRl
KSk7Ci0gICAgbV9vd25lci5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGRlc3RpbmF0aW9u
Q29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBzdGF0aWNfY2FzdDxmbG9hdD4o
c2hhZG93U3R5bGUucmFkaXVzKSwgQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShz
aGFkb3dDb2xvcikgfSk7CisgICAgZGVzdGluYXRpb25Db250ZXh0LnNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKHRydWUpOwogfQogCiBzdGF0aWMgVmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFu
Y2VzRnJvbVBvc2l0aW9ucyhjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQs
IGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQpAQCAtMjkwLDE4ICsxNTIsMTgg
QEAgc3RhdGljIFZlY3RvcjxDR1NpemU+IGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMoY29u
c3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2kKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVm
LCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dH
bHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQor
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dHU3RhdGVSZWYgZ3N0
YXRlLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBz
aXplX3QgY291bnQpCiB7CiAgICAgQVNTRVJUX0lNUExJRVMobV9kZXJpdmVGb250RnJvbUNvbnRl
eHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObywgbV9vcmlnaW5hbEZvbnQpOwogCi0gICAg
aWYgKCFjb3VudCkKKyAgICBpZiAoIWNvdW50IHx8IENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSA8
PSAwKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0ZvbnRSZWYgdXNlZEZvbnQgPSBDR0dTdGF0
ZUdldEZvbnQoZ3N0YXRlKTsKICAgICBpZiAobV9kZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVy
aXZlRm9udEZyb21Db250ZXh0OjpObyAmJiB1c2VkRm9udCAhPSBhZG9wdENGKENURm9udENvcHlH
cmFwaGljc0ZvbnQobV9vcmlnaW5hbEZvbnQtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBudWxs
cHRyKSkuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVH
ZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0
ZUdldENUTShnc3RhdGUpKTsKIAogICAgIC8vIFdlIHdhbnQgdGhlIHJlcGxheWVyJ3MgQ1RNIGFu
ZCB0ZXh0IG1hdHJpeCB0byBtYXRjaCB0aGUgY3VycmVudCBDVE0gYW5kIHRleHQgbWF0cml4Lgog
ICAgIC8vIFRoZSBjdXJyZW50IHRleHQgbWF0cml4IGlzIGEgY29uY2F0ZW5hdGlvbiBvZiB3aGF0
ZXZlciBXZWJLaXQgc2V0cyBpdCB0byBhbmQgd2hhdGV2ZXIKQEAgLTMyNCwxMyArMTg2LDE2IEBA
IHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3Rh
dGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgICAgIGludmVyc2VDVE1GaXh1cCA9IGludmVy
c2UudmFsdWUoKTsKICAgICBlbHNlCiAgICAgICAgIGN0bUZpeHVwID0gQWZmaW5lVHJhbnNmb3Jt
KCk7Ci0gICAgbV9vd25lci5jb25jYXRDVE0oY3RtRml4dXApOworCisgICAgbV9kZXN0aW5hdGlv
bkNvbnRleHQuY29uY2F0Q1RNKGN0bUZpeHVwKTsKIAogICAgIGF1dG8gZmlsbENvbG9yID0gQ0dH
U3RhdGVHZXRGaWxsQ29sb3IoZ3N0YXRlKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRG
aWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShmaWxsQ29sb3IpKTsK
KwogICAgIGF1dG8gc3Ryb2tlQ29sb3IgPSBDR0dTdGF0ZUdldFN0cm9rZUNvbG9yKGdzdGF0ZSk7
Ci0gICAgdXBkYXRlRmlsbENvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uo
ZmlsbENvbG9yKSk7Ci0gICAgdXBkYXRlU3Ryb2tlQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNl
cnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOwotICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdl
dFN0eWxlKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldFN0cm9rZUNvbG9y
KENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc3Ryb2tlQ29sb3IpKTsKKworICAg
IHNldERyb3BTaGFkb3cobV9kZXN0aW5hdGlvbkNvbnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0
YXRlKSk7CiAKICAgICBhdXRvIGZvbnRTaXplID0gQ0dHU3RhdGVHZXRGb250U2l6ZShnc3RhdGUp
OwogICAgIFJlZiBmb250ID0gbV9kZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZy
b21Db250ZXh0OjpObyA/ICptX29yaWdpbmFsRm9udCA6IEZvbnQ6OmNyZWF0ZShGb250UGxhdGZv
cm1EYXRhKGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udCh1c2VkRm9udCwgZm9u
dFNpemUsIG51bGxwdHIsIG51bGxwdHIpKSwgZm9udFNpemUpKTsKQEAgLTM0NSwzMCArMjEwLDM4
IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMjMyOTE3PiAoYERyYXdHbHlwaHNSZWNvcmRlcmAgc2hvdWxkIGJlIGFibGUg
dG8gcmVjb3JkK3JlcGxheSB2ZXJ0aWNhbCB0ZXh0KQogICAgIH0KIAotICAgIG1fb3duZXIuZHJh
d0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3Np
dGlvbnMocG9zaXRpb25zLCBjb3VudCwgdGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgdGV4dE1h
dHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBtX3Ntb290aGluZ01vZGUpOwotCi0gICAgbV9v
d25lci5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4
dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJv
bVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCB0ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0
ZXh0TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7CisgICAg
bV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RNKGludmVyc2VDVE1GaXh1cCk7CiB9CiAKLXZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJlZiBjZ0ltYWdlKQor
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZShDR0dTdGF0ZVJlZiBnc3Rh
dGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNnSW1hZ2UpCiB7Ci0gICAgdXBkYXRlQ1RNKCpD
R0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICB1cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHls
ZShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0
Q1RNKGdzdGF0ZSkpOworICAgIHNldERyb3BTaGFkb3cobV9kZXN0aW5hdGlvbkNvbnRleHQsIENH
R1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAgICAvLyBDb3JlIEdyYXBoaWNzIGFzc3VtZXMg
YSAieSB1cCIgY29vcmRpbmF0ZSBzeXN0ZW0sIGJ1dCBpbiBXZWJLaXQsIHdlIHVzZSBhICJ5LWRv
d24iIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBXZWJLaXQncyBk
cmF3aW5nIHJvdXRpbmVzIChHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSgpKSBpbnRlbnRpb25h
bGx5IGRyYXcgaW1hZ2VzIHVwc2lkZS1kb3duIGZyb20gQ29yZSBHcmFwaGljcydzIHBvaW50IG9m
IHZpZXcuCiAgICAgLy8gKFRoZXJlJ3MgYSB5LWZsaXAgaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlv
biBvZiBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSgpLikKICAgICAvLyBUaGUgcmVjdCBoYXMg
dGhlIHJpZ2h0IGJvdW5kcywgYnV0IHdlIG5lZWQgdG8gdHJhbnNmb3JtIGZyb20gQ0cncyBjb29y
ZGluYXRlIHN5c3RlbSB0byBXZWJLaXQncyBieSBwZXJmb3JtaW5nIG91ciBvd24geS1mbGlwIHNv
IGltYWdlcyBhcmUgZHJhd24gdGhlIHJpZ2h0LXNpZGUtdXAuCiAgICAgLy8gV2UgZG8gdGhpcyBh
dCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGUgdHdvIEFQSXMsIHdoaWNoIGlzIHJpZ2h0IGhlcmUu
Ci0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9y
aWdpbi55KTsKLSAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotCisgICAgbV9k
ZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRlKDAsIHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVj
dC5vcmlnaW4ueSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEs
IC0xKSk7CisgICAgCiAgICAgYXV0byBpbWFnZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoY2dJbWFn
ZSk7Ci0gICAgbV9vd25lci5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6ZSgpLCBG
bG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBpbWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWlu
dGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOwotCisgICAg
bV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd05hdGl2ZUltYWdlKCppbWFnZSwgaW1hZ2UtPnNpemUo
KSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9hdFJlY3QgeyB7IH0sIGltYWdlLT5zaXplKCkgfSwgSW1h
Z2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOwor
ICAgIAogICAgIC8vIFVuZG8gdGhlIGFib3ZlIHktZmxpcCB0byByZXN0b3JlIHRoZSBjb250ZXh0
LgotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgbV9vd25lci50cmFu
c2xhdGUoMCwgLShyZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpKTsKKyAgICBt
X2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBtX2Rlc3Rp
bmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgLShyZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qu
b3JpZ2luLnkpKTsKK30KKwordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1
bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
K3sKKyAgICBzZXRJbnRlcm5hbEZvbnQoZm9udCwgc21vb3RoaW5nTW9kZSk7CisgICAgCisgICAg
YXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUludGVybmFsQ29udGV4dCgpOworICAgIEZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxDb250ZXh0LCBmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOworICAgIHJlc3RvcmVE
ZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0ZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCkBAIC0zNzksMjUgKzI1MiwxOSBAQCB2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqCiAgICAgICAgIGF1dG8gYm91bmRzID0gZm9udC5ib3VuZHNGb3JHbHlwaChnbHlwaHNb
aV0pOwogCiAgICAgICAgIC8vIENyZWF0ZSBhIGxvY2FsIEltYWdlQnVmZmVyIGJlY2F1c2UgZGVj
b2RpbmcgdGhlIFNWRyBmb250cyBoYXMgdG8gaGFwcGVuIGluIFdlYlByb2Nlc3MuCi0gICAgICAg
IGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9vd25lci5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIo
Ym91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9kOjpM
b2NhbCkpIHsKKyAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX2Rlc3RpbmF0aW9uQ29u
dGV4dC5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoYm91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9kOjpMb2NhbCkpIHsKKyAgICAgICAgICAgIGltYWdl
QnVmZmVyLT5jb250ZXh0KCkuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICAgICAgICAgIEZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKGltYWdlQnVmZmVyLT5jb250ZXh0KCksIGZvbnQsIGdseXBocyAr
IGksIGFkdmFuY2VzICsgaSwgMSwgRmxvYXRQb2ludCgpLCBzbW9vdGhpbmdNb2RlKTsKIAogICAg
ICAgICAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoYm91
bmRzKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5tb3ZlQnkocGVuUG9zaXRpb24pOwot
ICAgICAgICAgICAgbV9vd25lci5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkZXN0aW5h
dGlvblJlY3QpOworICAgICAgICAgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKICAgICAgICAgfQogCiAgICAgICAg
IHBlblBvc2l0aW9uLm1vdmUoc2l6ZShhZHZhbmNlc1tpXSkpOwogICAgIH0KIH0KIAotdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwg
Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KGZvbnQsIHNtb290aGluZ01vZGUpOwotICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhz
KG1faW50ZXJuYWxDb250ZXh0LCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0
YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwotICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7
Ci19Ci0KIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdB
bmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNt
b290aGluZ01vZGUpCiB7CiAgICAgYXV0byBvdHN2Z0dseXBocyA9IGZvbnQuZmluZE9UU1ZHR2x5
cGhzKGdseXBocywgbnVtR2x5cGhzKTsKQEAgLTQ0MCw3ICszMDcsNyBAQCB2b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6ZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0
IEZvbnQmIGZvbgogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgaWYg
KG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzID09IERlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pIHsK
LSAgICAgICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgICAgIG1f
ZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtNDUzLDE1ICszMjAsMTcgQEAgdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdOYXRpdmVUZXh0KENURm9udFJlZiBmb250LCBDR0Zsb2F0IGZvbnRTaXplLCBD
VExpbmUKIHsKICAgICBBU1NFUlQobV9kZWNvbnN0cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpZZXMpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZl
cihtX293bmVyKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKG1fZGVzdGlu
YXRpb25Db250ZXh0KTsKIAotICAgIG1fb3duZXIudHJhbnNsYXRlKGxpbmVSZWN0Lm9yaWdpbi54
LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0LnNpemUuaGVpZ2h0KTsKLSAgICBtX293bmVy
LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnRyYW5z
bGF0ZShsaW5lUmVjdC5vcmlnaW4ueCwgbGluZVJlY3Qub3JpZ2luLnkgKyBsaW5lUmVjdC5zaXpl
LmhlaWdodCk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0x
KSk7CiAKLSAgICBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KEZvbnQ6OmNyZWF0ZShGb250UGxhdGZv
cm1EYXRhKGZvbnQsIGZvbnRTaXplKSksIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlh
bGlhc2VkKTsKKyAgICBzZXRJbnRlcm5hbEZvbnQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURh
dGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFz
ZWQpOworICAgIAorICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9IHByZXBhcmVJbnRlcm5hbENvbnRl
eHQoKTsKICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24obV9pbnRlcm5hbENvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCAwLCAwKTsKICAgICBDVExpbmVEcmF3KGxpbmUsIG1faW50ZXJuYWxD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQo
KTsKKyAgICByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KG9yaWdpbmFsU3RhdGUpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCmlu
ZGV4IDUxMWUwOWI5NmNlZjAzMjUwOTBlMjNhZjkxNGFlMzVmMmFiOGVkMmUuLmU1MzRjYzU1YWYy
NmI3ZmI4MjgwZTYzYjdkYzI1YTNkNGE0MTYzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29y
ZVRleHQuY3BwCkBAIC0xNTIsMjUgKzE1MiwyNyBAQCBzdGF0aWMgdm9pZCBmaWxsVmVjdG9yV2l0
aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucwog
ICAgIH0KIH0KIAotc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291
bnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4dE1hdHJpeCkKK3N0YXRpYyB2b2lkIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZv
bnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25z
dCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0ZXh0TWF0cml4KQogewogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKIAorICAg
IENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogICAg
IGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRh
KCk7CisKICAgICBWZWN0b3I8Q0dQb2ludCwgMjU2PiBwb3NpdGlvbnMoY291bnQpOwogICAgIGlm
IChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2Fs
KSB7Ci0gICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgoY29tcHV0ZVZlcnRpY2Fs
VGV4dE1hdHJpeChmb250LCB0ZXh0TWF0cml4KSwgY29udGV4dCk7CisgICAgICAgIFNjb3BlZFRl
eHRNYXRyaXggc2F2ZWRNYXRyaXgoY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCB0ZXh0
TWF0cml4KSwgY2dDb250ZXh0KTsKIAogICAgICAgICBWZWN0b3I8Q0dTaXplLCAyNTY+IHRyYW5z
bGF0aW9ucyhjb3VudCk7CiAgICAgICAgIENURm9udEdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9y
R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCB0cmFuc2xhdGlvbnMuZGF0YSgp
LCBjb3VudCk7CiAKICAgICAgICAgYXV0byBhc2NlbnREZWx0YSA9IGZvbnQuZm9udE1ldHJpY3Mo
KS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJpY3MoKS5m
bG9hdEFzY2VudCgpOwotICAgICAgICBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlv
bnMocG9zaXRpb25zLCBjb250ZXh0LCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBhZHZhbmNlcywgY291
bnQsIHBvaW50LCBhc2NlbnREZWx0YSk7Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZv
cm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0
KTsKKyAgICAgICAgZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9u
cywgY2dDb250ZXh0LCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBhZHZhbmNlcywgY291bnQsIHBvaW50
LCBhc2NlbnREZWx0YSk7CisgICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0
Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25z
KHBvc2l0aW9ucywgY29udGV4dCwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCk7Ci0gICAgICAgIENU
Rm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5k
YXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFs
R2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjZ0NvbnRleHQsIGFkdmFuY2VzLCBjb3VudCwgcG9p
bnQpOworICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5
cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY2dDb250ZXh0KTsKICAgICB9CiB9CiAKQEAg
LTI0MiwxMCArMjQ0LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAgICBzZXRDR0ZvbnRS
ZW5kZXJpbmdNb2RlKGNvbnRleHQpOwogICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4
dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAKLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0Owot
ICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgY29udGV4
dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CisgICAg
YXV0byBkcm9wU2hhZG93ID0gY29udGV4dC5kcm9wU2hhZG93KCk7CiAKICAgICBBZmZpbmVUcmFu
c2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZmxvYXQgc3ludGhldGlj
Qm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwpAQCAtMjU4LDI5ICsyNTcs
MjkgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAgICAgICAgfQogICAgIH07CiAKLSAgICBi
b29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERy
YXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1ciAm
JiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFjb250ZXh0LnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9y
RmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29s
IGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdp
bmdNb2RlOjpGaWxsICYmIGRyb3BTaGFkb3cuY29sb3IuaXNWYWxpZCgpICYmICFkcm9wU2hhZG93
LmJsdXJSYWRpdXMgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpICYmICghY29u
dGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9y
VHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVy
KCk7CiAgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewogICAgICAgICAvLyBQYWludCBzaW1wbGUg
c2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2
b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGNvbnRleHQuY2xlYXJT
aGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gY29udGV4dC5maWxsQ29sb3IoKTsK
LSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxw
aGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKKyAgICAgICAgQ29sb3Ig
c2hhZG93RmlsbENvbG9yID0gZHJvcFNoYWRvdy5jb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxp
ZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50
LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9
IHBvaW50LngoKSArIGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIC8vIElmIHNo
YWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRo
ZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAgICAgIGZs
b2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGNv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7Ci0gICAgICAgIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBm
b250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7
CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgZHJvcFNoYWRvdy5vZmZz
ZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAx
KTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRY
LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAg
ICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3lu
dGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywg
YWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgICAgICAgICBzaG93R2x5cGhz
V2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7
CiAgICAgfQogCi0gICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY2dDb250
ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNvbnRleHQsIGdseXBocywgYWR2YW5jZXMs
IG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAKICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkK
LSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5
bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBh
ZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50
LnkoKSksIGZvbnQsIGNvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1h
dHJpeCk7CiAKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY29u
dGV4dC5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3cpOwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgaWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNt
b290aGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCmluZGV4IDJlMmY0ZjRmMmNiNTVkMzY1
ZTVhZTM5OTMyNWQwNWYyYzE3MzYxZmQuLmNjZjQwY2VhNjJiMTY3NDM2NmQ3NDg0MTYyYjFiYzRl
OTM3NzA3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcApAQCAtOTAsMTAgKzkwLDcgQEAg
Ym9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBJ
dGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIGlmICghKGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVk
ZXNQbGF0Zm9ybU9wZXJhdGlvbnMpKSB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0
ZW0gPSBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93
LCBvbmx5IGRyb3AgdGhlIGl0ZW0gaWYgdGhlIG9ubHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBw
bGF0Zm9ybS1zcGVjaWZpYy4KLSAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2Uo
KS5tX2NoYW5nZUZsYWdzID09IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHNDaGFuZ2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAg
ICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZSgpLmNoYW5nZXMoKSA9PSBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjAyLDE2
ICsxOTksNiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAg
ICAgICByZXR1cm4gYXBwZW5kPFNhdmU+KGl0ZW0uZ2V0PFNhdmU+KCkpOwogICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8UmVzdG9yZT4oaXRlbS5nZXQ8
UmVzdG9yZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1
cm4gYXBwZW5kPFRyYW5zbGF0ZT4oaXRlbS5nZXQ8VHJhbnNsYXRlPigpKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8Um90YXRlPihpdGVtLmdldDxS
b3RhdGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICByZXR1cm4gYXBw
ZW5kPFNjYWxlPihpdGVtLmdldDxTY2FsZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0
ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0uZ2V0
PENvbmNhdGVuYXRlQ1RNPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAg
IHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVtLmdldDxTZXRDVE0+KCkpOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxp
bmVGaWxsQ29sb3I+KGl0ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKSk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CkBAIC0yMjAsMTYgKzIwNyw2IEBAIHZvaWQg
RGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBl
bmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtLmdldDxTZXRTdHJva2VUaGlja25lc3M+KCkpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0
YXRlPihpdGVtLmdldDxTZXRTdGF0ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lQ2FwPihpdGVtLmdldDxTZXRMaW5lQ2Fw
PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRMaW5lRGFzaD4oaXRlbS5nZXQ8U2V0TGluZURhc2g+KCkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVKb2luPihp
dGVtLmdldDxTZXRMaW5lSm9pbj4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1p
dDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRNaXRlckxpbWl0PihpdGVtLmdldDxTZXRNaXRl
ckxpbWl0PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0
dXJuIGFwcGVuZDxDbGVhclNoYWRvdz4oaXRlbS5nZXQ8Q2xlYXJTaGFkb3c+KCkpOwogICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcD4oaXRlbS5nZXQ8
Q2xpcD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKQEAgLTI3NCw4ICsyNTEsNiBA
QCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1
cm4gYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9yPihpdGVtLmdldDxGaWxsUmVjdFdpdGhDb2xvcj4o
KSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdy
YWRpZW50PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAg
ICAgIHJldHVybiBhcHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtLmdldDxGaWxsQ29tcG9z
aXRlZFJlY3Q+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAg
ICAgcmV0dXJuIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxSb3VuZGVkUmVj
dD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKaW5kZXggMGMy
NTIyNjRhZjQxNjY1NjIxNzUxNjA0MTA0MmE4YmRkM2JmYWJiNS4uZGVmY2U4NGVmMzU4N2JlYTA2
ZDIwN2RiNWI4MDJhYTdjODI1NjUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdERyYXdpbmdDb250ZXh0LmNwcApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCiBEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0Nv
bnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBpbml0aWFsQ1RNKQotICAgIDogbV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSkKKyAg
ICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0LCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSks
IGluaXRpYWxDVE0pCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5jcHAKaW5kZXggNDU3NzU1MTg5YmRhZGQ3MTlkMjQ1YTRlNmQyYzgxYmRkYjFmN2RmMy4u
MGRiMTUwMzk2MDQwMzJmMzMwM2ZiY2I2NTIxZTUzZTRlMzRmOTE4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKQEAgLTUyLDIxICs1Miw2IEBAIHZvaWQg
SXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIGdldDxSZXN0b3JlPigpLmFwcGx5KGNvbnRleHQpOwog
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBn
ZXQ8VHJhbnNsYXRlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBnZXQ8Um90YXRlPigpLmFwcGx5KGNvbnRleHQp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGdl
dDxTY2FsZT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRl
bVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICBnZXQ8Q29uY2F0ZW5hdGVDVE0+KCkuYXBw
bHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06
Ci0gICAgICAgIGdldDxTZXRDVE0+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIGdldDxTZXRJ
bmxpbmVGaWxsQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc5
LDIxICs2NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6
Ci0gICAgICAgIGdldDxTZXRMaW5lQ2FwPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIGdldDxTZXRMaW5l
RGFzaD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVKb2luOgotICAgICAgICBnZXQ8U2V0TGluZUpvaW4+KCkuYXBwbHkoY29udGV4
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0Ogot
ICAgICAgICBnZXQ8U2V0TWl0ZXJMaW1pdD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBnZXQ8Q2xlYXJT
aGFkb3c+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwOgogICAgICAgICBnZXQ8Q2xpcD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMTYwLDkgKzEzMCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50OgogICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7
CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6
Ci0gICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAg
IGdldDxGaWxsUm91bmRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTI3MCw5ICsyMzcsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICBnZXQ8RHJhd1BhdGg+KCkufkRyYXdQYXRoKCk7
CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6
Ci0gICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkufkZpbGxDb21wb3NpdGVkUmVjdCgp
OwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAg
IGdldDxGaWxsUGF0aD4oKS5+RmlsbFBhdGgoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjg4LDkg
KzI1Miw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLn5GaWxsUm91
bmRlZFJlY3QoKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVE
YXNoOgotICAgICAgICBnZXQ8U2V0TGluZURhc2g+KCkuflNldExpbmVEYXNoKCk7Ci0gICAgICAg
IHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgZ2V0PFNldFN0
YXRlPigpLn5TZXRTdGF0ZSgpOwogICAgICAgICByZXR1cm47CkBAIC0zMTQsOSArMjc1LDYgQEAg
dm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENs
ZWFyUmVjdD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyU2hhZG93OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxDbGVhclNoYWRvdz46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPENsaXA+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTMyNiw5ICsy
ODQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBUb0ltYWdlQnVmZmVyOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxDbGlwVG9JbWFnZUJ1ZmZlcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDb25jYXRlbmF0ZUNUTT46OnZhbHVl
KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTM4NywzMyArMzQyLDE1IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAg
Y2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8UmVzdG9yZT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Um90YXRlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2F2ZT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTY2FsZT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0Q1RNPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsQ29sb3I+
Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVT
dHJva2VDb2xvcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8U2V0SW5saW5lU3Ryb2tlQ29sb3I+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRMaW5lQ2FwPjo6dmFsdWUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVKb2luPjo6dmFs
dWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0
TWl0ZXJMaW1pdD46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6
OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8U2V0U3Ryb2tlVGhpY2tuZXNzPjo6dmFsdWUpOwogICAgICAgICBy
ZXR1cm47CkBAIC00MzcsOSArMzc0LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTdHJva2VMaW5lPjo6dmFsdWUpOwogICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUcmFuc2xhdGU+Ojp2YWx1ZSk7Ci0g
ICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKQEAgLTUwMSw4ICs0MzUsNiBAQCBib29sIEl0ZW1I
YW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9u
KSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88RHJhd1BhdHRlcm4+KGl0ZW1PZmZzZXQs
ICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPERyYXdQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4gY29weUludG88RmlsbENvbXBvc2l0
ZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsUGF0aD4oaXRlbU9mZnNldCwgKnRoaXMpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgpAQCAtNTEzLDggKzQ0NSw2IEBA
IGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUg
ZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
b3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSb3VuZGVkUmVjdD4oaXRl
bU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAg
ICByZXR1cm4gY29weUludG88U2V0TGluZURhc2g+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0YXRl
PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKQEAg
LTUzMSwxNiArNDYxLDEyIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRl
bVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5
SW50bzxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAgICAgICByZXR1cm4gY29weUludG88Q2xlYXJSZWN0
PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0g
ICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclNoYWRvdz4oaXRlbU9mZnNldCwgKnRoaXMpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwPihp
dGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPENsaXBPdXQ+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBU
b0ltYWdlQnVmZmVyPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29u
Y2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxDb25jYXRlbmF0ZUNUTT4oaXRl
bU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CkBA
IC01NzMsMjQgKzQ5OSwxMiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0
ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogI2VuZGlmCiAgICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFJlc3RvcmU+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVy
biBjb3B5SW50bzxSb3RhdGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTYXZlOgogICAgICAgICByZXR1cm4gY29weUludG88U2F2ZT4oaXRlbU9mZnNldCwgKnRoaXMp
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICByZXR1cm4gY29weUludG88U2Nh
bGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAg
ICAgIHJldHVybiBjb3B5SW50bzxTZXRDVE0+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxT
ZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldElubGlu
ZVN0cm9rZUNvbG9yPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVDYXA+KGl0ZW1PZmZzZXQs
ICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJu
IGNvcHlJbnRvPFNldExpbmVKb2luPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldE1pdGVyTGlt
aXQ+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlj
a25lc3M6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgpAQCAtNjA3
LDggKzUyMSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUs
IEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxT
dHJva2VSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
TGluZToKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFN0cm9rZUxpbmU+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBjb3B5
SW50bzxUcmFuc2xhdGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCmluZGV4IDU0
ZWExYzg2ODJjMDc0NDJlMmU4NDE0YjczMjhhYTMyNDgwMjVhNzUuLmJhMGQ5NTFjMjJjZjQ5Y2U0
MTdlMzM1NTNiMDBlMGE1YjhhYjIwOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtVHlwZS5jcHAKQEAgLTM4LDE2ICszOCw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUlu
Qnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihTYXZlKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKFJlc3RvcmUpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihUcmFu
c2xhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihSb3RhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFNjYWxlKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAg
cmV0dXJuIHNpemVvZihDb25jYXRlbmF0ZUNUTSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RN
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldENUTSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1cm4gc2l6ZW9mKFNldElubGluZUZpbGxDb2xv
cik7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CkBAIC01NiwxNiAr
NDYsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAg
ICAgICAgIHJldHVybiBzaXplb2YoU2V0U3Ryb2tlVGhpY2tuZXNzKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdGF0ZToKICAgICAgICAgcmV0dXJuIHNpemVvZihTZXRTdGF0ZSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lQ2Fw
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihTZXRMaW5lRGFzaCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAg
IHJldHVybiBzaXplb2YoU2V0TGluZUpvaW4pOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TWl0ZXJMaW1pdCk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBzaXplb2YoQ2xlYXJTaGFkb3cp
OwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcCk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKQEAgLTExMCw4ICs5MCw2IEBAIHN0YXRpYyBz
aXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNp
emVvZihGaWxsUmVjdFdpdGhDb2xvcik7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
R3JhZGllbnQ6CiAgICAgICAgIHJldHVybiBzaXplb2YoRmlsbFJlY3RXaXRoR3JhZGllbnQpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNp
emVvZihGaWxsQ29tcG9zaXRlZFJlY3QpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVk
UmVjdDoKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUm91bmRlZFJlY3QpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgpAQCAtMTgyLDI4ICsxNjAsMTggQEAg
Ym9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjoKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CiAj
ZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKICAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVzaENvbnRleHQ6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZUpvaW46Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlj
a25lc3M6Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclJlY3Q6CkBAIC0yMjIsNyArMTkwLDYgQEAgYm9vbCBpc0RyYXdpbmdJ
dGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5
TGF5ZXI6Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxFbGxpcHNlOgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxMaW5lOgpAQCAtMjg4LDEzICsyNTUsMTEgQEAgYm9vbCBpc0lu
bGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1BhdGg6Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENv
bG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgogICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSb3VuZGVkUmVjdDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdTeXN0ZW1JbWFnZToKQEAgLTMwNiwxMSArMjcxLDkgQEAgYm9v
bCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0Ogot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9J
bWFnZUJ1ZmZlcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdFbGxpcHNlOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
OgpAQCAtMzMzLDE1ICsyOTYsOSBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQog
ICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKICNlbmRpZgogICAgIGNhc2Ug
SXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgogICAgIGNhc2Ug
SXRlbVR5cGU6OlNhdmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0Q1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CiAjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCkBAIC0zNTEsNyArMzA4LDYgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRl
bVR5cGUgdHlwZSkKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCmluZGV4IGQ2ODNiMmFjZjc4NDVm
OTljM2NkMDk1ZWI5MTFlNTRmMWY4Y2UxMTEuLjE2NjBiOThmZGE1ZWYyN2IzZjc1ZDIyYTU3OWEz
YTlhZTNjYzcwZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaApAQCAt
MzEsMjAgKzMxLDEwIEBAIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiBlbnVtIGNsYXNzIEl0ZW1U
eXBlIDogdWludDhfdCB7CiAgICAgU2F2ZSwKICAgICBSZXN0b3JlLAotICAgIFRyYW5zbGF0ZSwK
LSAgICBSb3RhdGUsCi0gICAgU2NhbGUsCi0gICAgQ29uY2F0ZW5hdGVDVE0sCi0gICAgU2V0Q1RN
LAogICAgIFNldElubGluZUZpbGxDb2xvciwKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvciwKICAg
ICBTZXRTdHJva2VUaGlja25lc3MsCiAgICAgU2V0U3RhdGUsCi0gICAgU2V0TGluZUNhcCwKLSAg
ICBTZXRMaW5lRGFzaCwKLSAgICBTZXRMaW5lSm9pbiwKLSAgICBTZXRNaXRlckxpbWl0LAotICAg
IENsZWFyU2hhZG93LAogICAgIENsaXAsCiAgICAgQ2xpcE91dCwKICAgICBDbGlwVG9JbWFnZUJ1
ZmZlciwKQEAgLTY3LDcgKzU3LDYgQEAgZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3Qgewog
ICAgIEZpbGxSZWN0LAogICAgIEZpbGxSZWN0V2l0aENvbG9yLAogICAgIEZpbGxSZWN0V2l0aEdy
YWRpZW50LAotICAgIEZpbGxDb21wb3NpdGVkUmVjdCwKICAgICBGaWxsUm91bmRlZFJlY3QsCiAg
ICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5kZXggMjNkMGJiY2M3MWMyODFj
NTJjMzVhOGMyNTJkYTk2YzBhYjEyYTk4Yy4uMzZmYTZhMTI3ZmYwNzkzY2VmMjMwZWRmN2E2NDFk
ZGUwMmZlMzc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVwbGF5ZXIuaCIKICNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJNZWRpYVBs
YXllci5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgpAQCAtNTQsNjcgKzU1LDYgQEAgdm9p
ZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgY29u
dGV4dC5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgVHJhbnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwot
fQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
VHJhbnNsYXRlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgieCIsIGl0ZW0ueCgpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInkiLCBpdGVtLnkoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgUm90YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17
Ci0gICAgY29udGV4dC5yb3RhdGUobV9hbmdsZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSb3RhdGUmIGl0ZW0pCi17Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJhbmdsZSIsIGl0ZW0uYW5nbGUoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY2FsZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1w
UHJvcGVydHkoInNpemUiLCBpdGVtLmFtb3VudCgpKTsKLQotICAgIHJldHVybiB0czsKLX0KLQot
dm9pZCBTZXRDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAg
ICBjb250ZXh0LnNldENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRDVE0mIGl0ZW0pCi17Ci0gICAgdHMu
ZHVtcFByb3BlcnR5KCJzZXQtY3RtIiwgaXRlbS50cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4g
dHM7Ci19Ci0KLXZvaWQgQ29uY2F0ZW5hdGVDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNvbmNhdENUTShtX3RyYW5zZm9ybSk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25j
YXRlbmF0ZUNUTSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImN0bSIsIGl0ZW0udHJh
bnNmb3JtKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCiB2b2lkIFNldElubGluZUZpbGxDb2xv
cjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKGNvbG9yKCkpOwpAQCAtMTQ4LDc3ICs4OCwyMiBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3Ryb2tlVGhpY2tuZXNz
JiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGZsYWdzKQotICAgIDogbV9zdGF0ZUNoYW5nZShzdGF0ZSwgZmxhZ3MpCi17Ci19
Ci0KLVNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYg
c3RhdGVDaGFuZ2UpCi0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlKQorU2V0U3RhdGU6
OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKKyAgICA6IG1fc3Rh
dGUoc3RhdGUpCiB7CiB9CiAKIHZvaWQgU2V0U3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKIHsKLSAgICBtX3N0YXRlQ2hhbmdlLmFwcGx5KGNvbnRleHQpOworICAgIGNvbnRl
eHQubWVyZ2VTdGF0ZUNoYW5nZXMobV9zdGF0ZSk7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3RhdGUpCitzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIGl0
ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGUuc3RhdGVDaGFuZ2UoKTsKKyAgICB0cyA8PCBpdGVtLnN0
YXRlKCk7CiAgICAgcmV0dXJuIHRzOwogfQogCi12b2lkIFNldExpbmVDYXA6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVDYXAobV9s
aW5lQ2FwKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXApCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJs
aW5lLWNhcCIsIGxpbmVDYXAubGluZUNhcCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQg
U2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAg
ICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5LCBtX2Rhc2hPZmZzZXQpOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGlu
ZURhc2gmIGxpbmVEYXNoKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1hcnJheSIsIGxp
bmVEYXNoLmRhc2hBcnJheSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRhc2gtb2Zmc2V0Iiwg
bGluZURhc2guZGFzaE9mZnNldCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGlu
ZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250
ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpvaW4mIGxpbmVKb2luKQotewot
ICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1qb2luIiwgbGluZUpvaW4ubGluZUpvaW4oKSk7Ci0g
ICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldE1pdGVyTGltaXQ6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldE1pdGVyTGltaXQobV9taXRl
ckxpbWl0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNldE1pdGVyTGltaXQmIG1pdGVyTGltaXQpCi17Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJtaXRyZS1saW1pdCIsIG1pdGVyTGltaXQubWl0ZXJMaW1pdCgpKTsKLSAgICByZXR1cm4g
dHM7Ci19Ci0KLXZvaWQgQ2xlYXJTaGFkb3c6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7Ci19Ci0KIHZvaWQgQ2xpcDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xp
cChtX3JlY3QpOwpAQCAtNjU3LDMwICs1NDIsMTUgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aEdyYWRpZW50JiBpdGVtKQog
ICAgIHJldHVybiB0czsKIH0KIAotdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVj
dCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVt
KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwotICAgIHRz
LmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwotICAgIHJldHVy
biB0czsKLX0KLQogdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKLSAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChtX3JlY3QsIG1f
Y29sb3IsIG1fYmxlbmRNb2RlKTsKKyAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChtX3JlY3Qs
IG1fY29sb3IpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQogewogICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xv
ciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRl
bS5ibGVuZE1vZGUoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCkBAIC03NjgsOCArNjM4LDggQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxF
bGxpcHNlJiBpdGVtKQogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotUGFpbnRGcmFtZUZvck1lZGlh
OjpQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikKLSAgICA6IG1faWRlbnRpZmllcihwbGF5ZXIuaWRlbnRpZmllcigpKQor
UGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlm
aWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCisgICAgOiBtX2lk
ZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCiB7
CiB9CkBAIC0xMDExLDE5ICs4ODEsMTAgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpSZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlRyYW5zbGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlJvdGF0ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxl
OiB0cyA8PCAic2NhbGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06IHRzIDw8
ICJzZXQtY3RtIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06IHRz
IDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lRmlsbENvbG9yOiB0cyA8PCAic2V0LWlubGluZS1maWxsLWNvbG9yIjsgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLXN0
cm9rZS1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVz
czogdHMgPDwgInNldC1zdHJva2UtdGhpY2tuZXNzIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0U3RhdGU6IHRzIDw8ICJzZXQtc3RhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOiB0cyA8PCAic2V0LWxpbmUtY2FwIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZURhc2g6IHRzIDw8ICJzZXQtbGluZS1kYXNoIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHRzIDw8ICJzZXQtbGluZS1qb2luIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogdHMgPDwgInNldC1taXRlci1saW1pdCI7
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHRzIDw8ICJjbGlwIjsgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDogdHMgPDwgImNsaXAtb3V0IjsgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6IHRzIDw8ICJjbGlwLXRvLWltYWdlLWJ1
ZmZlciI7IGJyZWFrOwpAQCAtMTA0Niw3ICs5MDcsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdDogdHMgPDwgImZpbGwtcmVjdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtY29sb3IiOyBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDogdHMgPDwgImZpbGwtcmVj
dC13aXRoLWdyYWRpZW50IjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0
ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21wb3NpdGVkLXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6IHRzIDw8ICJmaWxsLXJvdW5kZWQtcmVjdCI7IGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB0cyA8PCAiZmls
bC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIjsgYnJlYWs7CiAjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCkBAIC0xMDc4LDcgKzkzOCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5
RmlsbFBhdHRlcm46IHRzIDw8ICJhcHBseS1maWxsLXBhdHRlcm4iOyBicmVhazsKICNlbmRpZgog
ICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6IHRzIDw8ICJhcHBseS1k
ZXZpY2Utc2NhbGUtZmFjdG9yIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFk
b3c6IHRzIDw8ICJjbGVhci1zaGFkb3ciOyBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHRzOwog
fQpAQCAtMTA4OCwyMSArOTQ3LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIHRzIDw8IGl0ZW0udHlwZSgpOwogCiAgICAgc3dp
dGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8VHJhbnNsYXRlPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFJvdGF0ZT4oKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFNjYWxlPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRD
VE06Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldENUTT4oKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PENvbmNhdGVuYXRlQ1RNPigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldElubGluZUZpbGxD
b2xvcj4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTE1LDE4ICs5NTksNiBAQCBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICB0
cyA8PCBpdGVtLmdldDxTZXRMaW5lQ2FwPigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZURhc2g+
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAg
ICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lSm9pbj4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0
TWl0ZXJMaW1pdD4oKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoK
ICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcD4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTkz
LDkgKzEwMjUsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVt
SGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAg
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKTsKLSAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICB0cyA8PCBpdGVtLmdldDxG
aWxsUm91bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTI3MSw3ICsxMTAwLDYgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQog
ICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKICAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseUZpbGxQYXR0ZXJuOgogI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFk
b3c6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaAppbmRleCA5N2NiNWZjOGQwNGJhODY2MmI3MmM3ZGRlZWJjNDQxNTVj
MjgyNWI3Li5lODFiYjM0NmM5ZWZlYmU5NmE2NTBkNzU0NWE4MWY2MTZiN2Q2YTliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTg1LDEwNCArODUsNiBAQCBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIH07
CiAKLWNsYXNzIFRyYW5zbGF0ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFuc2xhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQot
ICAgICAgICA6IG1feCh4KQotICAgICAgICAsIG1feSh5KQotICAgIHsKLSAgICB9Ci0KLSAgICBm
bG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0
dXJuIG1feTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBtX3ggeyAwIH07Ci0gICAgZmxvYXQg
bV95IHsgMCB9OwotfTsKLQotY2xhc3MgUm90YXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlJvdGF0ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgUm90YXRlKGZsb2F0IGFuZ2xlKQot
ICAgICAgICA6IG1fYW5nbGUoYW5nbGUpCi0gICAgewotICAgIH0KLQotICAgIGZsb2F0IGFuZ2xl
KCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBtX2Fu
Z2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgotfTsKLQotY2xhc3MgU2NhbGUgewotcHVibGljOgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2NhbGU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICAgICAgOiBtX3NpemUoc2l6ZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgY29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRTaXplIG1fc2l6ZTsKLX07Ci0KLWNsYXNzIFNldENU
TSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpTZXRDVE07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
LQotICAgIFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICAgICAg
OiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwotfTsKLQotY2xhc3Mg
Q29uY2F0ZW5hdGVDVE0gewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE07Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gbV90cmFuc2Zvcm07Ci19OwotCiBjbGFzcyBTZXRJbmxpbmVGaWxsQ29sb3IgewogcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOwpAQCAtMjQ3LDEwICsxNDksOCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
JiBzdGF0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVDaGFuZ2U7IH0KLSAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UoKSB7IHJldHVybiBtX3N0YXRlQ2hh
bmdlOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgU2V0U3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmKTsKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CkBAIC0y
NTgsNDA0ICsxNTgsMjYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGVDaGFuZ2U7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUg
bV9zdGF0ZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFNldFN0YXRlOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBhdXRvIGNoYW5nZUZsYWdzID0g
bV9zdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzOwotICAgIGVuY29kZXIgPDwgY2hhbmdlRmxhZ3M7
Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVDaGFuZ2UubV9zdGF0ZTsKLQotICAgIGlmIChj
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRD
aGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5zdHJva2VHcmFkaWVudCk7Ci0gICAgICAg
IGVuY29kZXIgPDwgKnN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgIH0KLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5n
ZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0cm9rZVBhdHRlcm4pOwotICAgICAgICBlbmNv
ZGVyIDw8ICpzdGF0ZS5zdHJva2VQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuZmlsbEdyYWRpZW50KTsKLSAgICAgICAgZW5jb2RlciA8PCAq
c3RhdGUuZmlsbEdyYWRpZW50OwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIEFT
U0VSVChzdGF0ZS5maWxsUGF0dGVybik7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLmZpbGxQ
YXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNo
YWRvd09mZnNldDsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dCbHVyOwotICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9yOwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LnNoYWRvd1JhZGl1c01vZGU7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBl
bmNvZGVyIDw8IHN0YXRlLnN0cm9rZVRoaWNrbmVzczsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS50ZXh0RHJhd2luZ01vZGU7Ci0KLSAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkK
LSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VDb2xvcjsKLQotICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWxsQ29sb3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAg
ICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VTdHlsZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKQotICAgICAgICBl
bmNvZGVyIDw8IHN0YXRlLmZpbGxSdWxlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpKQotICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UpKQotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLmJsZW5kTW9kZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNo
YW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
QWxwaGFDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmFscGhhOwotCi0gICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxp
YXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNob3VsZEFudGlhbGlhczsKLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxk
U21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNob3VsZFNtb290
aEZvbnRzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLQotICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zOworICAgIGVuY29kZXIgPDwgbV9zdGF0ZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IFNldFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKLSAgICBkZWNvZGVyID4+IGNoYW5nZUZsYWdzOwotICAg
IGlmICghY2hhbmdlRmxhZ3MpCisgICAgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4gc3RhdGU7CisgICAgZGVjb2RlciA+PiBzdGF0ZTsKKyAgICBpZiAoIXN0YXRlKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ug
c3RhdGVDaGFuZ2U7Ci0gICAgc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncyA9ICpjaGFuZ2VGbGFn
czsKLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgYXV0byBzdHJv
a2VHcmFkaWVudCA9IEdyYWRpZW50OjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghc3Ry
b2tlR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAg
IHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKCpzdHJva2VHcmFk
aWVudCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAg
IGF1dG8gc3Ryb2tlUGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAg
aWYgKCFzdHJva2VQYXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBXVEZNb3ZlKCpzdHJv
a2VQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkgewotICAg
ICAgICBhdXRvIGZpbGxHcmFkaWVudCA9IEdyYWRpZW50OjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAg
ICAgIGlmICghZmlsbEdyYWRpZW50KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxHcmFkaWVudCA9IFdURk1vdmUoKmZp
bGxHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkgewotICAg
ICAgICBhdXRvIGZpbGxQYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAg
ICBpZiAoIWZpbGxQYXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQot
ICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZSgqZmlsbFBh
dHRlcm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6
b3B0aW9uYWw8RmxvYXRTaXplPiBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hh
ZG93T2Zmc2V0OwotICAgICAgICBpZiAoIXNoYWRvd09mZnNldCkKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dPZmZz
ZXQgPSAqc2hhZG93T2Zmc2V0OwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHNoYWRv
d0JsdXI7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93Qmx1cjsKLSAgICAgICAgaWYgKCFzaGFk
b3dCbHVyKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0JsdXIgPSAqc2hhZG93Qmx1cjsKLQotICAgICAgICBzdGQ6
Om9wdGlvbmFsPENvbG9yPiBzaGFkb3dDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dD
b2xvcjsKLSAgICAgICAgaWYgKCFzaGFkb3dDb2xvcikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dDb2xvciA9ICpz
aGFkb3dDb2xvcjsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPFNoYWRvd1JhZGl1c01vZGU+IHNo
YWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93UmFkaXVzTW9kZTsKLSAg
ICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBX
VEZNb3ZlKCpzaGFkb3dSYWRpdXNNb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2Uu
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tu
ZXNzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzdHJva2VUaGlja25l
c3M7Ci0gICAgICAgIGRlY29kZXIgPj4gc3Ryb2tlVGhpY2tuZXNzOwotICAgICAgICBpZiAoIXN0
cm9rZVRoaWNrbmVzcykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSAqc3Ryb2tlVGhpY2tuZXNz
OwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0
ZDo6b3B0aW9uYWw8VGV4dERyYXdpbmdNb2RlRmxhZ3M+IHRleHREcmF3aW5nTW9kZTsKLSAgICAg
ICAgZGVjb2RlciA+PiB0ZXh0RHJhd2luZ01vZGU7Ci0gICAgICAgIGlmICghdGV4dERyYXdpbmdN
b2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNo
YW5nZS5tX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IFdURk1vdmUoKnRleHREcmF3aW5nTW9kZSk7
Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBzdHJva2VDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBzdHJva2VDb2xv
cjsKLSAgICAgICAgaWYgKCFzdHJva2VDb2xvcikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VDb2xvciA9ICpzdHJv
a2VDb2xvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkgewotICAgICAgICBz
dGQ6Om9wdGlvbmFsPENvbG9yPiBmaWxsQ29sb3I7Ci0gICAgICAgIGRlY29kZXIgPj4gZmlsbENv
bG9yOwotICAgICAgICBpZiAoIWZpbGxDb2xvcikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5maWxsQ29sb3IgPSAqZmlsbENv
bG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpIHsKLSAgICAgICAgU3Ry
b2tlU3R5bGUgc3Ryb2tlU3R5bGU7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3Ryb2tl
U3R5bGUpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7Ci0gICAgfQotCi0gICAg
aWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxSdWxlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPFdpbmRSdWxlPiBm
aWxsUnVsZTsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxsUnVsZTsKLSAgICAgICAgaWYgKCFmaWxs
UnVsZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5maWxsUnVsZSA9ICpmaWxsUnVsZTsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29t
cG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0
ZU9wZXJhdG9yPiBjb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgZGVjb2RlciA+PiBjb21wb3Np
dGVPcGVyYXRvcjsKLSAgICAgICAgaWYgKCFjb21wb3NpdGVPcGVyYXRvcikKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5jb21w
b3NpdGVPcGVyYXRvciA9ICpjb21wb3NpdGVPcGVyYXRvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Qmxl
bmRNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRN
b2RlOwotICAgICAgICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKLSAgICAgICAgaWYgKCFibGVuZE1v
ZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuYmxlbmRNb2RlID0gKmJsZW5kTW9kZTsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxJ
bnRlcnBvbGF0aW9uUXVhbGl0eT4gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKLSAgICAgICAg
ZGVjb2RlciA+PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgICAgICBpZiAoIWltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9
ICppbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5n
ZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYWxwaGE7Ci0gICAgICAgIGRlY29k
ZXIgPj4gYWxwaGE7Ci0gICAgICAgIGlmICghYWxwaGEpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuYWxwaGEgPSAqYWxwaGE7
Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpIHsKLSAgICAgICAgc3Rk
OjpvcHRpb25hbDxib29sPiBzaG91bGRBbnRpYWxpYXM7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hv
dWxkQW50aWFsaWFzOwotICAgICAgICBpZiAoIXNob3VsZEFudGlhbGlhcykKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91
bGRBbnRpYWxpYXMgPSAqc2hvdWxkQW50aWFsaWFzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNo
YW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRT
bW9vdGhGb250c0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRT
bW9vdGhGb250czsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91bGRTbW9vdGhGb250czsKLSAgICAg
ICAgaWYgKCFzaG91bGRTbW9vdGhGb250cykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyA9ICpz
aG91bGRTbW9vdGhGb250czsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250czsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0
YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9ICpzaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkg
ewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwot
ICAgICAgICBkZWNvZGVyID4+IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgICAgICBpZiAo
IXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
ID0gKnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgIH0KLQotICAgIHJldHVybiB7IHsgc3Rh
dGVDaGFuZ2UgfSB9OwotfQotCi1jbGFzcyBTZXRMaW5lQ2FwIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVDYXA7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExpbmVDYXAo
TGluZUNhcCBsaW5lQ2FwKQotICAgICAgICA6IG1fbGluZUNhcChsaW5lQ2FwKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0K
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgTGluZUNhcCBtX2xpbmVDYXA7Ci19OwotCi1jbGFzcyBTZXRMaW5l
RGFzaCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKLQotICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBm
bG9hdCBkYXNoT2Zmc2V0KQotICAgICAgICA6IG1fZGFzaEFycmF5KGRhc2hBcnJheSkKLSAgICAg
ICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3Qg
RGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hBcnJheTsgfQotICAg
IGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hPZmZzZXQ7IH0KLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2V0TGluZURh
c2g+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgRGFzaEFycmF5IG1fZGFzaEFy
cmF5OwotICAgIGZsb2F0IG1fZGFzaE9mZnNldDsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Ci12b2lkIFNldExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fZGFzaEFycmF5OwotICAgIGVuY29kZXIgPDwgbV9kYXNoT2Zmc2V0
OworICAgIHJldHVybiBTZXRTdGF0ZSgqc3RhdGUpOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFzaD4gU2V0TGluZURhc2g6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8RGFzaEFycmF5PiBkYXNoQXJyYXk7
Ci0gICAgZGVjb2RlciA+PiBkYXNoQXJyYXk7Ci0gICAgaWYgKCFkYXNoQXJyYXkpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBkYXNoT2Zm
c2V0OwotICAgIGRlY29kZXIgPj4gZGFzaE9mZnNldDsKLSAgICBpZiAoIWRhc2hPZmZzZXQpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKmRhc2hBcnJheSwg
KmRhc2hPZmZzZXQgfX07Ci19Ci0KLWNsYXNzIFNldExpbmVKb2luIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVKb2lu
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5l
Sm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAgICAgICAgOiBtX2xpbmVKb2luKGxpbmVKb2luKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1f
bGluZUpvaW47IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZUpvaW4gbV9saW5lSm9pbjsKLX07Ci0K
LWNsYXNzIFNldE1pdGVyTGltaXQgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRl
ckxpbWl0KQotICAgICAgICA6IG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQotICAgIHsKLSAgICB9
Ci0KLSAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKLX07Ci0KLWNsYXNzIENsZWFy
U2hhZG93IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkNsZWFyU2hhZG93OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwotfTsKLQogLy8gRklYTUU6IHRyZWF0IGFzIGRyYXdpbmcgaXRlbT8KIGNsYXNz
IENsaXAgewogcHVibGljOgpAQCAtMTYxMiw5MSArMTEzNCwyMCBAQCBzdGQ6Om9wdGlvbmFsPEZp
bGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZQogICAgIHJldHVybiB7eyAqcmVjdCwgZ3JhZGllbnQtPmdldCgpIH19OwogfQogCi1j
bGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7Ci0KLSAgICBGaWxsQ29tcG9zaXRlZFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgICAgICA6IG1fcmVjdChyZWN0KQot
ICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgICAgICwgbV9vcChvcCkKLSAgICAgICAgLCBt
X2JsZW5kTW9kZShibGVuZE1vZGUpCi0gICAgewotICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KLSAg
ICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbENvbXBvc2l0ZWRSZWN0PiBkZWNvZGUoRGVj
b2RlciYpOwotCi1wcml2YXRlOgotICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgQ29sb3IgbV9j
b2xvcjsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwotICAgIEJsZW5kTW9kZSBtX2JsZW5k
TW9kZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEZpbGxDb21wb3NpdGVk
UmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBt
X3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAgIGVuY29kZXIgPDwgbV9vcDsKLSAg
ICBlbmNvZGVyIDw8IG1fYmxlbmRNb2RlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
c3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IEZpbGxDb21wb3NpdGVkUmVjdDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IHJl
Y3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGNvbG9yOwotICAgIGRl
Y29kZXIgPj4gY29sb3I7Ci0gICAgaWYgKCFjb2xvcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlT3BlcmF0b3I+IG9wOwotICAgIGRl
Y29kZXIgPj4gb3A7Ci0gICAgaWYgKCFvcCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVuZE1vZGU7Ci0gICAgZGVjb2RlciA+
PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKm9wLCAqYmxlbmRNb2RlIH19
OwotfQotCiBjbGFzcyBGaWxsUm91bmRlZFJlY3QgewogcHVibGljOgogICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBGaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQorICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAg
ICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUp
CiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbGxSb3VuZGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKQEAg
LTE3MDksNyArMTE2MCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRmxvYXRSb3VuZGVkUmVj
dCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7
CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMTcxNyw3ICsxMTY3LDYgQEAgdm9p
ZCBGaWxsUm91bmRlZFJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAg
IGVuY29kZXIgPDwgbV9yZWN0OwogICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKLSAgICBlbmNvZGVy
IDw8IG1fYmxlbmRNb2RlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpAQCAtMTczMywx
MiArMTE4Miw3IEBAIHN0ZDo6b3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBGaWxsUm91bmRlZFJl
Y3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRN
b2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgIGlmICghYmxlbmRNb2RlKQotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3Is
ICpibGVuZE1vZGUgfX07CisgICAgcmV0dXJuIHsgeyAqcmVjdCwgKmNvbG9yIH0gfTsKIH0KIAog
Y2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgewpAQCAtMTk2MSw3ICsxNDA1LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24p
OworICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24pOwogCiAgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KICAgICBNZWRpYVBsYXllcklkZW50
aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQpAQCAtMjI1
NiwxMyArMTcwMCwxMSBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZhcmlhbnQKICAg
ICA8IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IKICAgICAsIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIK
ICAgICAsIENsZWFyUmVjdAotICAgICwgQ2xlYXJTaGFkb3cKICAgICAsIENsaXAKICAgICAsIENs
aXBPdXQKICAgICAsIENsaXBPdXRUb1BhdGgKICAgICAsIENsaXBQYXRoCiAgICAgLCBDbGlwVG9J
bWFnZUJ1ZmZlcgotICAgICwgQ29uY2F0ZW5hdGVDVE0KICAgICAsIERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIKICAgICAsIERyYXdFbGxpcHNlCiAgICAgLCBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cgpAQCAtMjI3OCw3ICsxNzIwLDYgQEAgdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJp
YW50CiAgICAgLCBEcmF3UmVjdAogICAgICwgRHJhd1N5c3RlbUltYWdlCiAgICAgLCBFbmRUcmFu
c3BhcmVuY3lMYXllcgotICAgICwgRmlsbENvbXBvc2l0ZWRSZWN0CiAgICAgLCBGaWxsRWxsaXBz
ZQogICAgICwgRmlsbFBhdGgKICAgICAsIEZpbGxSZWN0CkBAIC0yMjg4LDIzICsxNzI5LDE1IEBA
IHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgICwgRmlsbFJvdW5kZWRS
ZWN0CiAgICAgLCBGbHVzaENvbnRleHQKICAgICAsIFJlc3RvcmUKLSAgICAsIFJvdGF0ZQogICAg
ICwgU2F2ZQotICAgICwgU2NhbGUKLSAgICAsIFNldENUTQogICAgICwgU2V0SW5saW5lRmlsbENv
bG9yCiAgICAgLCBTZXRJbmxpbmVTdHJva2VDb2xvcgotICAgICwgU2V0TGluZUNhcAotICAgICwg
U2V0TGluZURhc2gKLSAgICAsIFNldExpbmVKb2luCi0gICAgLCBTZXRNaXRlckxpbWl0CiAgICAg
LCBTZXRTdGF0ZQogICAgICwgU2V0U3Ryb2tlVGhpY2tuZXNzCiAgICAgLCBTdHJva2VFbGxpcHNl
CiAgICAgLCBTdHJva2VMaW5lCiAgICAgLCBTdHJva2VQYXRoCiAgICAgLCBTdHJva2VSZWN0Ci0g
ICAgLCBUcmFuc2xhdGUKIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgICwgRmls
bExpbmUKQEAgLTIzNDEsMjAgKzE3NzQsMTAgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGUsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTYXZl
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UmVzdG9yZSwKLSAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNjYWxlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0Q1RN
LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0sCiAg
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3IsCiAg
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvciwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzcywK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlLAotICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUNhcCwKLSAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNoLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0TGluZUpvaW4sCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRNaXRlckxpbWl0LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xlYXJTaGFkb3csCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwLAog
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dCwKICAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyLApAQCAtMjM3Niw3ICsx
Nzk5LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxS
ZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29s
b3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFk
aWVudCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVk
UmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVj
dCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlLAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVlZTQ0NzFkMzU0ZTc1MTUzMTI1MTg5ZGZjYzk0
MThhMzk0NTE0YTEuLmE1MzUwOTk4MGE5MzE0MDdlOTFlNTRmOWY5MjMyNWNlNWU1ZDA1ZGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTQyLDM1MCArNDIs
MTg5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1S
ZWNvcmRlcjo6UmVjb3JkZXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25z
dCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0
RHJhd0dseXBocykKLSAgICA6IG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBkZWNvbnN0cnVj
dERyYXdHbHlwaHMpCi17Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZCh7IHN0YXRlLCBpbml0aWFs
Q1RNLCBpbml0aWFsQ1RNLm1hcFJlY3QoaW5pdGlhbENsaXApIH0pOwotfQorUmVjb3JkZXI6OlJl
Y29yZGVyKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMg
ZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDogR3JhcGhpY3NDb250ZXh0KGluaXRpYWxDbGlw
LCB7IH0sICBpbml0aWFsQ1RNKQorICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRl
Y29uc3RydWN0RHJhd0dseXBocykKIAotUmVjb3JkZXI6On5SZWNvcmRlcigpCiB7Ci0gICAgQVNT
RVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPT0gMSk7IC8vIElmIHRoaXMgZmlyZXMsIGl0IGluZGlj
YXRlcyBtaXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4KIH0KIAotc3RhdGljIGJvb2wgY29udGFpbnNP
bmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBj
aGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFn
cykKLXsKLSAgICBzdGF0aWMgY29uc3RleHByIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGlubGluZVN0YXRlQ2hhbmdlRmxhZ3MgewotICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLAotICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsQ29sb3JDaGFuZ2UsCi0gICAgfTsKLQotICAgIGlmIChjaGFuZ2VGbGFncyAhPSAoY2hhbmdl
RmxhZ3MgJiBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NS
R0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworUmVjb3JkZXI6On5SZWNvcmRlcigp
ID0gZGVmYXVsdDsKIAotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50
cnlHZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCit2b2lkIFJlY29yZGVyOjpzYXZlKCkKIHsK
LSAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjaGFuZ2VzLCBjaGFuZ2VG
bGFncykpIHsKLSAgICAgICAgaWYgKGF1dG8gcGF0dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuKQotICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUlt
YWdlKCkpOwotICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gY2hhbmdlcy5tX3N0YXRlLmZpbGxQ
YXR0ZXJuKQotICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdl
KCkpOwotICAgICAgICByZWNvcmRTZXRTdGF0ZShjaGFuZ2VzLm1fc3RhdGUsIGNoYW5nZUZsYWdz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICByZWNv
cmRTZXRJbmxpbmVTdHJva2VDb2xvcigqY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdl
dEFzU1JHQkFCeXRlcygpKTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0
U3Ryb2tlVGhpY2tuZXNzKGNoYW5nZXMubV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAg
aWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JD
aGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoKmNoYW5nZXMubV9zdGF0
ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6
c2F2ZSgpOworICAgIHJlY29yZFNhdmUoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKQordm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCiB7Ci0g
ICAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IGludm9rZWQgaW4gYW4gYWQtaG9jIG1hbm5l
ciB3aGVuIHJlY29yZGluZyBkcmF3aW5nIGl0ZW1zLiBXZSBzaG91bGQgY29uc2lkZXIgZWl0aGVy
Ci0gICAgLy8gc3BsaXR0aW5nIEdyYXBoaWNzQ29udGV4dCBzdGF0ZSBjaGFuZ2VzIGludG8gaW5k
aXZpZHVhbCBkaXNwbGF5IGxpc3QgaXRlbXMsIG9yIHJlZmFjdG9yaW5nIHRoZSBjb2RlIHN1Y2gg
dGhhdAotICAgIC8vIHRoaXMgbWV0aG9kIGlzIGF1dG9tYXRpY2FsbHkgaW52b2tlZCB3aGVuIHJl
Y29yZGluZyBhIGRyYXdpbmcgaXRlbS4KLSAgICBhdXRvJiBzdGF0ZUNoYW5nZXMgPSBjdXJyZW50
U3RhdGUoKS5zdGF0ZUNoYW5nZTsKLSAgICBhdXRvIGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3Rh
dGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0
ZSk7Ci0gICAgaWYgKCFjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkKKyAgICBpZiAoIXN0YWNrU2l6ZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBz
dHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZpbmcgc3RhdGUgIiA8PCBHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oc3RhdGVDaGFuZ2VzLCBjaGFuZ2VzRnJvbUxhc3RT
dGF0ZSk7Ci0gICAgc3RhdGVDaGFuZ2VzLm1fY2hhbmdlRmxhZ3MgPSB7IH07Ci0gICAgY3VycmVu
dFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOwotfQotCi1j
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OnN0YXRlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2UubV9zdGF0ZTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBj
dXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5hY2N1bXVsYXRlKHN0YXRlLCBmbGFncyk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIHJlY29y
ZFNldExpbmVDYXAobGluZUNhcCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIHJlY29y
ZFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6
OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIHJlY29yZFNldExpbmVKb2lu
KGxpbmVKb2luKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRl
ckxpbWl0KQotewotICAgIHJlY29yZFNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CisgICAgcmVjb3JkUmVzdG9yZSgpOwogfQogCi12b2lk
IFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmls
dGVyUmVzdWx0cyYgcmVzdWx0cykKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKCkK
IHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotCi0gICAgZm9yIChh
dXRvJiBlZmZlY3QgOiBmaWx0ZXIuZWZmZWN0c09mVHlwZShGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
SW1hZ2UpKSB7Ci0gICAgICAgIGF1dG8mIGZlSW1hZ2UgPSBkb3duY2FzdDxGRUltYWdlPihlZmZl
Y3QuZ2V0KCkpOwotICAgICAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGZlSW1hZ2Uuc291cmNl
SW1hZ2UoKSkpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghc291cmNl
SW1hZ2UpIHsKLSAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIobnVsbHB0ciwg
c291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgIGlmICghc3RhdGUoKS5jaGFuZ2VzKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKCpzb3Vy
Y2VJbWFnZSkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIo
c291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKLX0KIAotdm9pZCBSZWNvcmRl
cjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21v
b3RoaW5nTW9kZSkKLXsKLSAgICBtX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzKGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7
Ci19CisgICAgaWYgKHN0YXRlKCkuaGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSkgeworICAgICAg
ICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6RmlsbEJydXNoKSkKKyAgICAgICAgICAgIHJlY29yZFNldElubGluZUZpbGxDb2xvcigq
ZmlsbENvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
Y291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpOwotICAgIHJl
Y29yZERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9y
LCBzbW9vdGhpbmdNb2RlKTsKLX0KKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkKKyAgICAgICAg
ICAgIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKCpzdHJva2VDb2xvcigpLnRyeUdldEFzU1JH
QkFCeXRlcygpKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgICAgICBpZiAoc3RhdGUoKS5j
aGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhp
Y2tuZXNzKSkKKyAgICAgICAgICAgIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlj
a25lc3MoKSk7CiAKLSAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgewot
ICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICBkaWRBcHBseVN0YXRlQ2hhbmdlcygp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKGlt
YWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1h
Z2UpOwotICAgIHJlY29yZERyYXdOYXRpdmVJbWFnZShpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIHJlY29yZERyYXdTeXN0
ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2Uo
aW1hZ2UpOwotICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2VC
dWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdl
SXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVm
ZmVyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKGltYWdlQnVmZmVy
LCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1c2gpKSB7CisgICAgICAg
IGlmIChhdXRvIHBhdHRlcm4gPSBmaWxsUGF0dGVybigpKQorICAgICAgICAgICAgcmVjb3JkUmVz
b3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOwogICAgIH0KIAotICAgIHJlY29yZERyYXdQ
YXR0ZXJuKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
LX0KLQotdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCi17Ci0gICAgcmVjb3JkU2F2ZSgpOwotICAgIG1f
c3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclNhdmUoKSk7Ci19
Ci0KLXZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQotewotICAgIGlmICghbV9zdGF0ZVN0YWNrLnNp
emUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaCkpIHsKKyAgICAgICAg
aWYgKGF1dG8gcGF0dGVybiA9IHN0cm9rZVBhdHRlcm4oKSkKKyAgICAgICAgICAgIHJlY29yZFJl
c291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKKyAgICB9CiAKLSAgICBtX3N0YXRlU3Rh
Y2sucmVtb3ZlTGFzdCgpOwotICAgIHJlY29yZFJlc3RvcmUoKTsKKyAgICByZWNvcmRTZXRTdGF0
ZShzdGF0ZSgpKTsKKyAgICBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCi12b2lkIFJlY29y
ZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBjdXJyZW50U3RhdGUoKS50
cmFuc2xhdGUoeCwgeSk7Ci0gICAgcmVjb3JkVHJhbnNsYXRlKHgsIHkpOwotfQotCi12b2lkIFJl
Y29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCisjaWYgVVNFKENHKQordm9pZCBS
ZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5yb3Rh
dGUoYW5nbGVJblJhZGlhbnMpOwotICAgIHJlY29yZFJvdGF0ZShhbmdsZUluUmFkaWFucyk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBS
ZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuc2NhbGUo
c2l6ZSk7Ci0gICAgcmVjb3JkU2NhbGUoc2l6ZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCk7CiB9CisjZW5kaWYKIAotdm9pZCBSZWNvcmRl
cjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBSZWNv
cmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsK
LSAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIEdy
YXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7
CiAKLSAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICByZWNvcmRD
b25jYXRlbmF0ZUNUTSh0cmFuc2Zvcm0pOworICAgIC8vIEZJWE1FOiB0aGlzIGNoYW5nZXMgdGhl
IGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNhY2hlZCBleHRlbnRz
LgorICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgZWFybHkgb24/CisgICAgcmVj
b3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CiB9CiAKLXZvaWQg
UmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQg
UmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBj
dXJyZW50U3RhdGUoKS5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICByZWNvcmRTZXRDVE0odHJhbnNm
b3JtKTsKLX0KKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi1BZmZpbmVUcmFuc2Zvcm0gUmVj
b3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOwotfQorICAgIEdyYXBoaWNzQ29udGV4
dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6
OnNhdmUoKTsKIAotdm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAg
c2V0QWxwaGEob3BhY2l0eSk7CiAgICAgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFj
aXR5KTsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVTdGFjay5sYXN0KCkuY2xvbmVG
b3JUcmFuc3BhcmVuY3lMYXllcigpKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBtX3N0YXRlU3RhY2sucmVtb3Zl
TGFzdCgpOwotfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKLXZvaWQgUmVjb3JkZXI6OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewot
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd1Jl
Y3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0g
ICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3TGlu
ZShwb2ludDEsIHBvaW50Mik7Ci19CisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVu
Y3lMYXllcigpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwogCi12b2lkIFJlY29y
ZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZUxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZERyYXdMaW5lc0ZvclRleHQoRmxvYXRQb2ludCgpLCB0b0Zsb2F0
U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwor
ICAgIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAg
cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7CisgICAgcmVj
b3JkQ2xpcChyZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUgd2luZFJ1bGUpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKTsKLSAgICByZWNvcmREcmF3RWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOworICAg
IHJlY29yZENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
Ci0gICAgcmVjb3JkRHJhd1BhdGgocGF0aCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICByZWNvcmRDbGlwT3V0KHJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAg
ICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdGb2N1
c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZENsaXBPdXRUb1BhdGgocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpj
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcik7Ci19CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwg
ZGVzdGluYXRpb25SZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotI2lmIFBMQVRGT1JN
KE1BQykKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwg
Ym9vbCYsIGNvbnN0IENvbG9yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIs
IGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCit2b2lk
IFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGVhclJl
Y3QocmVjdCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxsUmVjdChyZWN0KTsKIH0K
IAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0V2l0aENvbG9yKHJl
Y3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxS
ZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBSZWNvcmRlcjo6ZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29y
ZEZpbGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3Ip
OwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9p
ZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJl
Y29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwgYmxlbmRNb2RlKTsKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJv
dW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6Zmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdl
SXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICByZWNvcmRGaWxsRWxsaXBzZShyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7CiAgICAgICAgIGlmIChwYXRoLmhh
c0lubGluZURhdGE8TGluZURhdGE+KCkpCkBAIC00MDIsMjEgKzI0MSwyMSBAQCB2b2lkIFJlY29y
ZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHJlY29yZEZpbGxQYXRoKHBhdGgp
OwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5
KCk7Ci0gICAgcmVjb3JkRmlsbEVsbGlwc2UocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICByZWNvcmRTdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCit2b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29y
ZFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJlY29yZFN0cm9rZUVsbGlwc2UocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAjaWYgRU5BQkxFKElOTElORV9Q
QVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7CiAgICAgICAgIGlmIChw
YXRoLmhhc0lubGluZURhdGE8TGluZURhdGE+KCkpCkBAIC00MzMsMTQ4ICsyNzIsMTY4IEBAIHZv
aWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICByZWNvcmRTdHJv
a2VQYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkU3Ryb2tlRWxsaXBzZShyZWN0KTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVz
cyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZENsZWFyUmVjdChyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZERyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKIH0KIAotI2lmIFVTRShD
RykKLXZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJlY29yZGVyOjpk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdFbGxpcHNlKHJlY3QpOwogfQog
Ci12b2lkIFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0aChwYXRoKTsKIH0KLSNlbmRpZgogCi12b2lkIFJl
Y29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJz
ZWN0KGN1cnJlbnRTdGF0ZSgpLmN0bS5tYXBSZWN0KHJlY3QpKTsKLSAgICByZWNvcmRDbGlwKHJl
Y3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1Bh
dGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmVjb3JkQ2xpcE91dChyZWN0KTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywg
d2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQogewotICAgIHJl
Y29yZENsaXBPdXRUb1BhdGgocGF0aCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUp
Cit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jiwg
ZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBC
b3VuZHMuaW50ZXJzZWN0KGN1cnJlbnRTdGF0ZSgpLmN0bS5tYXBSZWN0KHBhdGguZmFzdEJvdW5k
aW5nUmVjdCgpKSk7Ci0gICAgcmVjb3JkQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOworICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CisjZW5kaWYKIAotSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5k
cygpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChh
dXRvIGludmVyc2UgPSBjdXJyZW50U3RhdGUoKS5jdG0uaW52ZXJzZSgpKQotICAgICAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChpbnZlcnNlLT5tYXBSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBC
b3VuZHMpKTsKKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgeworICAg
ICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgLy8g
SWYgdGhlIENUTSBpcyBub3QgaW52ZXJ0aWJsZSwgcmV0dXJuIHRoZSBvcmlnaW5hbCByZWN0Lgot
ICAgIC8vIFRoaXMgbWF0Y2hlcyBDR1JlY3RBcHBseUludmVyc2VBZmZpbmVUcmFuc2Zvcm0gYmVo
YXZpb3IuCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoY3VycmVudFN0YXRlKCkuY2xpcEJv
dW5kcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3SW1hZ2VCdWZm
ZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBS
ZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCiB7Ci0gICAg
cmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpOwotICAgIHJlY29yZENsaXBUb0ltYWdlQnVm
ZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCk7Ci19CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBm
aWx0ZXIuZWZmZWN0c09mVHlwZShGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpKSB7CisgICAg
ICAgIGF1dG8mIGZlSW1hZ2UgPSBkb3duY2FzdDxGRUltYWdlPihlZmZlY3QuZ2V0KCkpOworICAg
ICAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGZlSW1hZ2Uuc291cmNlSW1hZ2UoKSkpIHsKKyAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNl
SW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmlu
Z01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAotewotICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nTWV0aG9kLnZhbHVlX29yKFJlbmRlcmluZ01ldGhv
ZDo6RGlzcGxheUxpc3QpKTsKLX0KKyAgICBpZiAoIXNvdXJjZUltYWdlKSB7CisgICAgICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgICAgIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KG51bGxwdHIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewot
ICAgIGlmICghcGxheWVyLmlkZW50aWZpZXIoKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICBpZiAoIXJlY29y
ZFJlc291cmNlVXNlKCpzb3VyY2VJbWFnZSkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0
ZXIsIHJlc3VsdHMpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEFTU0VSVChwbGF5ZXIu
aWRlbnRpZmllcigpKTsKLSAgICByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0
aW5hdGlvbik7CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7CiB9
Ci0jZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvcikKK3ZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIC8vIFdlIG1vZGlmeSB0aGUgc3RhdGUgZGlyZWN0bHkg
aGVyZSBpbnN0ZWFkIG9mIGNhbGxpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZSgpCi0gICAgLy8g
YmVjYXVzZSB0aGUgcmVjb3JkZWQgaXRlbSB3aWxsIHNjYWxlKCkgd2hlbiByZXBsYXllZC4KLSAg
ICBjdXJyZW50U3RhdGUoKS5zY2FsZSh7IGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZh
Y3RvciB9KTsKKyAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmREcmF3TmF0aXZlSW1hZ2UoaW1hZ2UucmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwor
fQogCi0gICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBp
bnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCi0gICAgLy8gQXNzZXJ0IHRoYXQg
aXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KLSAgICByZWNvcmRBcHBseURldmljZVNjYWxlRmFj
dG9yKGRldmljZVNjYWxlRmFjdG9yKTsKK3ZvaWQgUmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFnZShT
eXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KQoreworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1N5c3RlbUltYWdl
KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi1GbG9hdFJlY3QgUmVjb3JkZXI6
OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRl
eHQ6OlJvdW5kaW5nTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4
dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIERpc3Bs
YXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1cm4gcmVjdDsKKyAgICByZWNvcmRSZXNvdXJj
ZVVzZShpbWFnZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0
dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLWNv
bnN0IFJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVyOjpjdXJyZW50U3RhdGUoKSBjb25z
dAordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKLSAgICByZXR1
cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdl
QnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKGltYWdlQnVm
ZmVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5n
LCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi1SZWNvcmRlcjo6Q29udGV4dFN0YXRlJiBSZWNv
cmRlcjo6Y3VycmVudFN0YXRlKCkKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIFJlY29yZGVyOjpw
YWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbikKIHsKLSAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSk7Ci0gICAgcmV0
dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAgaWYgKCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVz
dGluYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEocGxheWVyLmlkZW50aWZpZXIoKSwg
ZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLWNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVjb3Jk
ZXI6OmN0bSgpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFy
dFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIHJldHVybiBj
dXJyZW50U3RhdGUoKS5jdG07CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX2RyYXdH
bHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRl
eHRTdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIFJlY29yZGVyOjpkcmF3
R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
Y291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQogewotICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7CisgICAgcmVjb3JkUmVz
b3VyY2VVc2UoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgcmVjb3JkRHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwg
bG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0
U3RhdGU6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0
cm9rZVN0eWxlKQogewotICAgIGRvdWJsZSBhbmdsZUluRGVncmVlcyA9IHJhZDJkZWcoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihhbmdsZUluUmFkaWFucykpOwotICAgIGN0bS5yb3RhdGUoYW5nbGVJbkRl
Z3JlZXMpOwotICAgIAotICAgIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbjsKLSAgICByb3RhdGlv
bi5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVMaW5lcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBSZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQogewotICAgIGN0bS5zY2FsZShzaXplKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpOwogfQogCi12
b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG1hdHJpeCkKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9k
ZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmlu
Z01ldGhvZCkgY29uc3QKIHsKLSAgICBjdG0gPSBtYXRyaXg7CisgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QudmFsdWVfb3IoUmVuZGVyaW5nTWV0
aG9kOjpEaXNwbGF5TGlzdCkpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNv
bmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKK0Zsb2F0UmVjdCBSZWNvcmRl
cjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29u
dGV4dDo6Um91bmRpbmdNb2RlKQogewotICAgIGN0bSAqPSBtYXRyaXg7CisgICAgV1RGTG9nQWx3
YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBub3QgeWV0IGNv
bXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7CisgICAgcmV0dXJuIHJlY3Q7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaAppbmRleCA4NDVlYzAwNzcyZWQyYzU0YTFlNmNiMjZiMjE1MWRhYmFhNmVj
MDc1Li5hZTM0Mzc5YmU2N2YwNWUxMDQyZjZhZGM1YWFiZjg4YzI3MGMxNzM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRl
ICJEaXNwbGF5TGlzdEl0ZW1zLmgiCiAjaW5jbHVkZSAiRHJhd0dseXBoc1JlY29yZGVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIgLy8gRm9yIElt
YWdlOjpUaWxlUnVsZS4KICNpbmNsdWRlICJJbmxpbmVQYXRoRGF0YS5oIgogI2luY2x1ZGUgIlRl
eHRGbGFncy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTEsNyArNTAsNyBA
QCBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1
YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBo
c1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CisgICAgV0VCQ09SRV9FWFBP
UlQgUmVjb3JkZXIoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0ds
eXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVyKCk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpID0gMDsKQEAgLTYxLDQ3ICs2MCwzNSBAQCBwdWJs
aWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNhdmUoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZFJlc3RvcmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29y
ZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29y
ZFJvdGF0ZShmbG9hdCBhbmdsZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTY2FsZShj
b25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZENvbmNhdGVu
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4pID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4pID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4pID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRDbGVhclNoYWRvdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IDA7CisKKyNpZiBVU0UoQ0cpCisg
ICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpID0gMDsKKyNlbmRpZgorCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IDA7CisKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwT3V0
VG9QYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3
RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBGaWx0ZXImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdHbHlw
aHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3Is
IEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0
U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3
Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0
cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
KwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdp
dGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJiwgQmxlbmRNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxMaW5lKGNv
bnN0IExpbmVEYXRhJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0
IEFyY0RhdGEmKSA9IDA7CkBAIC0xMDksMTEgKzk2LDEwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpID0g
MDsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRQYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSA9
IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUxp
bmUoY29uc3QgTGluZURhdGEmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUFy
Yyhjb25zdCBBcmNEYXRhJikgPSAwOwpAQCAtMTIxLDExNiArMTA3LDgxIEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3Vy
dmVEYXRhJikgPSAwOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZENsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0jaWYgVVNFKENHKQotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRBcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5
RmlsbFBhdHRlcm4oKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQyKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0aChj
b25zdCBQYXRoJikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQ
YXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRE
cmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisjaWYgRU5BQkxF
KFZJREVPKQorICAgIHZpcnR1YWwgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSA9IDA7CiAjZW5k
aWYKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSYpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJj
ZVVzZShOYXRpdmVJbWFnZSYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VV
c2UoSW1hZ2VCdWZmZXImKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNl
KGNvbnN0IFNvdXJjZUltYWdlJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJj
ZVVzZShGb250JikgPSAwOwogCi0gICAgc3RydWN0IENvbnRleHRTdGF0ZSB7Ci0gICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBjdG07Ci0gICAgICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzOwotICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZTsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGUgbGFzdERyYXdpbmdTdGF0ZTsKLQotICAgICAgICBDb250ZXh0U3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwKQotICAgICAgICAgICAgOiBjdG0odHJh
bnNmb3JtKQotICAgICAgICAgICAgLCBjbGlwQm91bmRzKGNsaXApCi0gICAgICAgICAgICAsIGxh
c3REcmF3aW5nU3RhdGUoc3RhdGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIENv
bnRleHRTdGF0ZSBjbG9uZUZvclNhdmUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBD
b250ZXh0U3RhdGUgc3RhdGUobGFzdERyYXdpbmdTdGF0ZSwgY3RtLCBjbGlwQm91bmRzKTsKLSAg
ICAgICAgICAgIHN0YXRlLnN0YXRlQ2hhbmdlID0gc3RhdGVDaGFuZ2U7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAgICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JU
cmFuc3BhcmVuY3lMYXllcigpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gc3Rh
dGUgPSBjbG9uZUZvclNhdmUoKTsKLSAgICAgICAgICAgIHN0YXRlLmxhc3REcmF3aW5nU3RhdGUu
YWxwaGEgPSAxOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgICAgIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKLSAgICAgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNp
emUmKTsKLSAgICAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0g
ICAgICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIH07Ci0KLSAg
ICBjb25zdCBWZWN0b3I8Q29udGV4dFN0YXRlLCA0PiYgc3RhdGVTdGFjaygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGVTdGFjazsgfQotCi0gICAgY29uc3QgQ29udGV4dFN0YXRlJiBjdXJyZW50U3Rh
dGUoKSBjb25zdDsKLSAgICBDb250ZXh0U3RhdGUmIGN1cnJlbnRTdGF0ZSgpOwotCiAgICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4sIHN0ZDo6b3B0aW9uYWw8UmVuZGVy
aW5nTWV0aG9kPikgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwogCiBwcml2YXRlOgogICAgIGJv
b2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbnVsbHB0cjsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCkgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogI2lmIFVTRShDRykKLSAg
ICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9Ci0gICAgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAjZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOwogCi0gICAgdm9pZCBmaWxs
Um91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9
IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlw
T3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
IGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRM
aW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNaXRl
ckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IENvbG9yJiwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxQYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0jaWYg
VVNFKENHKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7Ci0j
ZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgZWxsaXBzZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUGF0aChjb25z
dCBQYXRoJikgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBocyhjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZv
bnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYg
bG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1N5c3RlbUltYWdl
KFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwogCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKQEAgLTI0MSw0MCArMTkyLDIzIEBAIHByaXZhdGU6
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xv
ciYpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3Jh
cGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VT
Y2FsZSkgY29uc3QgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xp
cFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCBJ
bnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbDsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
cHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQs
IGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4
dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKIAotICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKTsKLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7Ci0KLSAg
ICBWZWN0b3I8Q29udGV4dFN0YXRlLCA0PiBtX3N0YXRlU3RhY2s7CiAgICAgRHJhd0dseXBoc1Jl
Y29yZGVyIG1fZHJhd0dseXBoc1JlY29yZGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKaW5kZXggMWZkYzZiYTU2YmZkYjI2MzZlZmIzNDYy
YWRhMmE5OTBkMzM4OTk0NS4uMWZiNGRkNzk1YWUxMGFhOGNjY2JjZGQ4MzE0ZWVhODA4NmU4ZGI2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCkBA
IC00MiwxOCArNDIsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5
TGlzdCB7CiAKLVJlY29yZGVySW1wbDo6UmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiBkaXNwbGF5
TGlzdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3Qm
IGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlw
aHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykK
LSAgICA6IFJlY29yZGVyKHN0YXRlLCBpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1
Y3REcmF3R2x5cGhzKQorUmVjb3JkZXJJbXBsOjpSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmIGRp
c3BsYXlMaXN0LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5
cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKKyAgICA6IFJlY29yZGVyKGluaXRpYWxDbGlwLCBp
bml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAgICAgLCBtX2Rpc3BsYXlMaXN0KGRp
c3BsYXlMaXN0KQogewogICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8
PCAiXG5SZWNvcmRpbmcgd2l0aCBjbGlwICIgPDwgaW5pdGlhbENsaXApOwogfQogCi1SZWNvcmRl
ckltcGw6On5SZWNvcmRlckltcGwoKQotewotICAgIEFTU0VSVChzdGF0ZVN0YWNrKCkuc2l6ZSgp
ID09IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBpdCBpbmRpY2F0ZXMgbWlzbWF0Y2hlZCBzYXZlL3Jl
c3RvcmUuCi19Ci0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTYXZlKCkKIHsKICAgICBhcHBl
bmQ8U2F2ZT4oKTsKQEAgLTY0LDMxICs1OSw2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRS
ZXN0b3JlKCkKICAgICBhcHBlbmQ8UmVzdG9yZT4oKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIGFwcGVuZDxUcmFuc2xh
dGU+KHgsIHkpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUm90YXRlKGZsb2F0IGFu
Z2xlKQotewotICAgIGFwcGVuZDxSb3RhdGU+KGFuZ2xlKTsKLX0KLQotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCi17Ci0gICAgYXBwZW5kPFNj
YWxlPihzY2FsZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgYXBwZW5kPFNldENUTT4odHJhbnNm
b3JtKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIGFwcGVuZDxDb25jYXRlbmF0ZUNU
TT4odHJhbnNmb3JtKTsKLX0KLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldElubGluZUZp
bGxDb2xvcihTUkdCQTx1aW50OF90PiBpbmxpbmVDb2xvcikKIHsKICAgICBhcHBlbmQ8U2V0SW5s
aW5lRmlsbENvbG9yPihpbmxpbmVDb2xvcik7CkBAIC0xMDQsOTIgKzc0LDI2IEBAIHZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAg
IGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KHRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQotewot
ICAgIGFwcGVuZDxTZXRTdGF0ZT4oc3RhdGUsIGNoYW5nZUZsYWdzKTsKLX0KLQotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIGFwcGVu
ZDxTZXRMaW5lQ2FwPihsaW5lQ2FwKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNl
dExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgYXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0g
ICAgYXBwZW5kPFNldExpbmVEYXNoPihhcnJheSwgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQotewotICAgIGFwcGVu
ZDxTZXRMaW5lSm9pbj4oam9pbik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRN
aXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGFwcGVuZDxTZXRNaXRlckxpbWl0PihsaW1p
dCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclNoYWRvdygpCi17Ci0gICAg
YXBwZW5kPENsZWFyU2hhZG93PigpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xp
cChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQotewotICAgIGFwcGVuZDxDbGlwPihjbGlwUmVj
dCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgY2xpcFJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewotICAgIGFwcGVuZDxDbGlwT3V0PihjbGlwUmVj
dCk7CisgICAgYXBwZW5kPFNldFN0YXRlPihzdGF0ZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1
ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0
aW9uUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXBwZW5kPENsaXBPdXRUb1BhdGg+KHBhdGgpOwotfQot
Ci12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgcnVsZSkKLXsKLSAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBhdGgsIHJ1bGUpOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVy
JiBmaWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXI+IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdlKQotICAgICAgICBpZGVudGlmaWVy
ID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOwotICAgIGFwcGVu
ZDxEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcj4oV1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1h
Z2VSZWN0LCBmaWx0ZXIpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBo
cyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9h
dFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKLXsKLSAgICBhcHBl
bmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9y
LCBtb2RlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Ci17Ci0gICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKKyNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBhcHBlbmQ8RHJhd05hdGl2
ZUltYWdlPihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+KCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBhcHBlbmQ8RHJhd1N5c3RlbUltYWdlPihz
eXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVy
bj4oKTsKIH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKIHsKLSAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+KGltYWdlSWRlbnRpZmll
ciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KTsKKyAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oc2NhbGVGYWN0b3IpOwogfQog
CiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQpAQCAtMjAyLDQ0ICsxMDYsMzQgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBhcHBlbmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCk7
CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGxp
bmVXaWR0aCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhcHBl
bmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgYXBw
ZW5kPERyYXdMaW5lc0ZvclRleHQ+KGJsb2NrTG9jYXRpb24sIGxvY2FsQW5jaG9yLCB0aGlja25l
c3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKKyAgICBhcHBlbmQ8Q2xpcD4oY2xp
cFJlY3QpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0
eWxlJiBzdHlsZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBXaW5kUnVsZSBydWxlKQogewotICAgIGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyPihyZWN0LCBzdHlsZSk7CisgICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCBydWxlKTsK
IH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgY2xpcFJlY3QpCiB7Ci0gICAgYXBwZW5kPERyYXdFbGxpcHNlPihyZWN0KTsKKyAgICBhcHBl
bmQ8Q2xpcE91dD4oY2xpcFJlY3QpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0
VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kPERyYXdQYXRoPihwYXRoKTsK
KyAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1BhdGg+
KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKKyAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZm
ZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlv
blJlY3QpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3Rz
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0
cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKKyAgICBhcHBlbmQ8Q2xlYXJSZWN0Pihy
ZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKQEAgLTI1NywyMyArMTUxLDIyIEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBn
CiAgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50PihyZWN0LCBncmFkaWVudCk7CiB9CiAK
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVu
ZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFw
cGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KHJlY3QsIGNvbG9yLCBvcCwgbW9kZSk7CisgICAgYXBw
ZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAg
IGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3QsIGNvbG9yLCBtb2RlKTsKKyAgICBhcHBlbmQ8
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcik7CiB9CiAK
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKTsKKyAgICBhcHBlbmQ8RmlsbEVsbGlwc2U+KHJl
Y3QpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0KIHZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYgbGluZSkKIHsKICAgICBhcHBlbmQ8
RmlsbExpbmU+KGxpbmUpOwpAQCAtMjkzLDcgKzE4Niw2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJiBjdXJ2ZSkKIHsKICAg
ICBhcHBlbmQ8RmlsbEJlemllckN1cnZlPihjdXJ2ZSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCkBAIC0zMDEsMjUgKzE5MywxNyBAQCB2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBhcHBlbmQ8RmlsbFBhdGg+KHBh
dGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIGFwcGVuZDxGaWxsRWxsaXBzZT4ocmVjdCk7Ci19Ci0KLSNp
ZiBFTkFCTEUoVklERU8pCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1l
ZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlh
PihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgYm9y
ZGVyVGhpY2tuZXNzKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUoVklERU8pCiAKLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lk
dGgpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPFN0cm9rZVJlY3Q+KHJlY3QsIHdpZHRoKTsKKyAgICBh
cHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURh
dGEmIGxpbmUpCiB7CiAgICAgYXBwZW5kPFN0cm9rZUxpbmU+KGxpbmUpOwpAQCAtMzM5LDcgKzIy
Myw2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBC
ZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewogICAgIGFwcGVuZDxTdHJva2VCZXppZXJDdXJ2ZT4o
Y3VydmUpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNDcs
MzMgKzIzMCw4NCBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogICAgIGFwcGVuZDxTdHJva2VQYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZDxTdHJva2VFbGxpcHNlPihyZWN0KTsK
KyAgICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3Qp
OworICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIpOwogfQogCi0jaWYgVVNFKENH
KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOworfQogCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZDxBcHBseVN0cm9r
ZVBhdHRlcm4+KCk7CisgICAgYXBwZW5kPERyYXdQYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmQ8QXBwbHlGaWxsUGF0
dGVybj4oKTsKKyAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1BhdGg+KHBhdGgsIHdpZHRoLCBvZmZz
ZXQsIGNvbG9yKTsKIH0KIAotI2VuZGlmIC8vIFVTRShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgYXBw
ZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKK30K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQg
c2NhbGVGYWN0b3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGFw
cGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihzY2FsZUZhY3Rvcik7CisgICAgYXBwZW5kPERy
YXdOYXRpdmVJbWFnZT4oaW1hZ2VJZGVudGlmaWVyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1J
bWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KQoreworICAgIGFwcGVuZDxEcmF3U3lzdGVtSW1hZ2U+KHN5c3RlbUltYWdlLCBkZXN0
aW5hdGlvblJlY3QpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKK3sKKyAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQor
Cit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmls
dGVyJiBmaWx0ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXI+IGlkZW50aWZpZXI7CisgICAgaWYgKHNvdXJjZUltYWdlKQorICAgICAgICBpZGVudGlm
aWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOworICAgIGFw
cGVuZDxEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcj4oV1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNl
SW1hZ2VSZWN0LCBmaWx0ZXIpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1Bh
dHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
eworICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCisjaWYgRU5B
QkxFKFZJREVPKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShN
ZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbikKK3sKKyAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihpZGVudGlmaWVyLCBkZXN0
aW5hdGlvbik7Cit9CisjZW5kaWYKKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCit7CisgICAgYXBw
ZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hv
ciwgbW9kZSk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQoreworICAgIGFwcGVu
ZDxEcmF3TGluZXNGb3JUZXh0PihGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQoreworICAgIGFwcGVu
ZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihyZWN0LCBzdHlsZSk7CiB9CiAKIGJvb2wgUmVj
b3JkZXJJbXBsOjpyZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UpCkBA
IC00MTcsMjAgKzM1MSwxNiBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IHNoYWRvd1BhaW50aW5nRXh0
ZW50KGZsb2F0IGJsdXJSYWRpdXMpCiAKIEZsb2F0UmVjdCBSZWNvcmRlckltcGw6OmV4dGVudEZy
b21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgRmxvYXRS
ZWN0IGJvdW5kcyA9IHJlY3Q7Ci0gICAgYXV0byYgc3RhdGUgPSBjdXJyZW50U3RhdGUoKTsKKyAg
ICBhdXRvIGJvdW5kcyA9IHJlY3Q7CiAKLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAg
IGZsb2F0IHNoYWRvd1JhZGl1czsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoZ2V0
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKLSAgICAg
ICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5kczsKLSAgICAgICAgc2hhZG93RXh0ZW50
Lm1vdmUoc2hhZG93T2Zmc2V0KTsKLSAgICAgICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93
UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CisgICAgaWYgKGhhc1NoYWRvdygpKSB7Cisg
ICAgICAgIGF1dG8gc2hhZG93RXh0ZW50ID0gYm91bmRzOworICAgICAgICBzaGFkb3dFeHRlbnQu
bW92ZShkcm9wU2hhZG93KCkub2Zmc2V0KTsKKyAgICAgICAgc2hhZG93RXh0ZW50LmluZmxhdGUo
c2hhZG93UGFpbnRpbmdFeHRlbnQoZHJvcFNoYWRvdygpLmJsdXJSYWRpdXMpKTsKICAgICAgICAg
Ym91bmRzLnVuaXRlKHNoYWRvd0V4dGVudCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGludGVyc2Vj
dGlvbihzdGF0ZS5jbGlwQm91bmRzLCBzdGF0ZS5jdG0ubWFwUmVjdChib3VuZHMpKTsKKyAgICBy
ZXR1cm4gaW50ZXJzZWN0aW9uKGNsaXBCb3VuZHMoKSwgZ2V0Q1RNKCkubWFwUmVjdChib3VuZHMp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKaW5kZXggNjQyMjY1ZjA5ODAyMmNmMmIwNWYxODBjMTc0
ZmEwMzQ2MmYyZGQ0MC4uNmRlNmFlZGZmY2IxN2RiMmQwODFiNDJjMWRlNmJjMzI5YTM4YmY0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKQEAgLTM1LDkg
KzM1LDggQEAgY2xhc3MgUmVjb3JkZXJJbXBsIDogcHVibGljIFJlY29yZGVyIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcklt
cGwpOwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVySW1wbChEaXNwbGF5TGlz
dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0
cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBo
czo6WWVzKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRlckltcGwoKTsKLQor
ICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYsIGNvbnN0IEZsb2F0
UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsg
fSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKKyAgICAKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKTsgfQogCiAgICAg
dm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgZmluYWwgeyB9CkBAIC00Nyw0NyArNDYsMzUg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZFNhdmUoKSBmaW5hbDsKICAgICB2
b2lkIHJlY29yZFJlc3RvcmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwor
CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4pIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4pIGZp
bmFsOwogICAgIHZvaWQgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
U2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
U2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1p
dChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclNoYWRvdygpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBmaW5hbDsK
KworI2lmIFVTRShDRykKKyAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFs
OworICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworI2VuZGlmCisKKyAg
ICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3Jk
Q2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CiAgICAg
dm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdHbHlw
aHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3Is
IEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZs
b2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25z
dCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQ
YXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9p
ZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdp
dGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRN
b2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2
b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNv
cmRGaWxsQXJjKGNvbnN0IEFyY0RhdGEmKSBmaW5hbDsKQEAgLTk1LDExICs4MiwxMCBAQCBwcml2
YXRlOgogICAgIHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0
YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJikg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKLSNlbmRp
ZgotICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmlu
YWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAg
ICB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZFN0cm9rZUFyYyhjb25zdCBBcmNEYXRhJikgZmluYWw7CkBAIC0xMDcsMTMgKzkzLDI4
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXpp
ZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChj
b25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVy
bigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworCisg
ICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVj
b3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmRE
cmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCisgICAgdm9pZCByZWNvcmREcmF3Rm9j
dXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdl
QnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpIGZpbmFs
OworICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcmVjb3JkUGFp
bnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKIAogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoTmF0
aXZlSW1hZ2UmKSBmaW5hbDsKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKEltYWdlQnVmZmVy
JikgZmluYWw7CkBAIC0xMzksNiArMTQwLDggQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0K
IAorICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisK
ICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OwogCiAgICAgRGlzcGxheUxpc3QmIG1fZGlzcGxheUxpc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBs
YXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXggOGZmMTlkMDAzNTRjZGJlZGUzYTViYTFhZjc1
OGNmZjAyM2EyNWEyMi4uNjZmYzlkODgyYTRkM2Y3ZGU4ZTg5MTJhMWYzMGFmMTk4ZDAzNTI4MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApAQCAtOTcsMTAgKzk3
LDEwIEBAIGlubGluZSBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXI+IGFwcGx5U2V0U3RhdGVJdGVtKEdyYXBoCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAgICAgfTsKIAotICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5U
aWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5zdHJva2VQYXR0ZXJu
LmdldCgpKSkKKyAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUlt
YWdlKHNldFN0YXRlSXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAg
IHJldHVybiAqaW1hZ2VJZGVudGlmaWVyOwogCi0gICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVy
ID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRl
LmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQ
YXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4o
KSkpCiAgICAgICAgIHJldHVybiAqaW1hZ2VJZGVudGlmaWVyOwogCiAgICAgc2V0U3RhdGVJdGVt
LmFwcGx5KGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1
enouY3BwCmluZGV4IGQwOWMxMzczZWE5YWFhZjRhMTg1MTM2ZWU4ODUzZDc4OGZjNDE3OGQuLmZj
YWRlZjIzOGUwOWZlMDI4MmFjZWVjOWExZjI1Zjg3MzM5ZDljN2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhh
cmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKQEAgLTI5LDE3ICsyOSwxOCBAQAogI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhC
dWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0Nv
bnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4
dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNS
ZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1Y3RE
cmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9uQ29u
dGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9v
dGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwor
ICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCA5MTE0NmRmYzZmZDg0ZGY4ZTI5
NTRmMDM3N2QwMDY2YTc3MjMzY2M5Li41MTU0N2FlNmRmYTEwNGI1ZGQ2NTRhOTMwYjk3MjQxZDk3
NzhkMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJh
dGlvblJlY29yZGVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEg
Uy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzcsMTYwICs3OCwzODkgQEAg
YXV0byBjcmVhdGVDb21tYW5kKCkgLT4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8
T3BlcmF0aW9uRGF0YTw+LCBUPjo6dmEKIH0KIAogQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09wZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAg
IDogbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChGbG9h
dFJlY3Q6OmluZmluaXRlUmVjdCgpKQorICAgICwgbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkK
IHsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgeyB9LCB7IH0sIEZsb2F0UmVjdDo6aW5maW5p
dGVSZWN0KCkgfSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZGlkVXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6c2F2ZSgpCit7CisgICAgc3RydWN0IFNhdmUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmlydHVhbCB+U2F2ZSgpID0gZGVmYXVsdDsKKwor
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KS5zYXZlKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2F2ZTw+
XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwor
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNhdmU+KCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnJlc3RvcmUoKQoreworICAgIHN0cnVjdCBSZXN0b3JlIGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7CisgICAgICAgIHZpcnR1YWwgflJlc3Rv
cmUoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4
dEZvclJlcGxheShyZXBsYXllcikucmVzdG9yZSgpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIlJlc3RvcmU8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBp
ZiAoIXN0YWNrU2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQ6
OnJlc3RvcmUoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxSZXN0b3JlPigpKTsKK30KKwor
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAg
aWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkg
eworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpDVE0pKSB7CisgICAgICAgIHN0cnVjdCBTZXRDVE0gZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFuc2Zvcm0+IHsKKyAgICAgICAgICAg
IHZpcnR1YWwgflNldENUTSgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENUTShjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkNUTTw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPFNldENUTT4oZ2V0Q1RNKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUo
KS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tl
VGhpY2tuZXNzKSkgewogICAgICAgICBzdHJ1Y3QgU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKICAgICAgICAgICAg
IHZpcnR1YWwgflN0cm9rZVRoaWNrbmVzc0NoYW5nZSgpID0gZGVmYXVsdDsKIAogICAgICAgICAg
ICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJp
ZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9r
ZVRoaWNrbmVzcyhjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlPD5cbiI7
CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpTdHJva2VUaGlja25lc3M8PlxuIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsK
IAotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VUaGlja25lc3NDaGFuZ2U+KHN0
YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJv
a2VUaGlja25lc3NDaGFuZ2U+KHN0cm9rZVRoaWNrbmVzcygpKSk7CiAgICAgfQogCi0gICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSB7CisgICAg
aWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlN0cm9rZVN0eWxlKSkgewogICAgICAgICBzdHJ1Y3QgU3Ryb2tlU3R5bGVDaGFuZ2UgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxTdHJva2VTdHlsZT4gewogICAg
ICAgICAgICAgdmlydHVhbCB+U3Ryb2tlU3R5bGVDaGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAg
ICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92
ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
dHJva2VTdHlsZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUoY29udGV4dEZvclJlcGxheShy
ZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpT
dHJva2VTdHlsZTw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVN0eWxlQ2hhbmdlPihzdHJva2VTdHlsZSgpKSk7Cisg
ICAgfQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXApKSB7CisgICAgICAgIHN0cnVjdCBTZXRMaW5lQ2FwIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUNhcD4geworICAgICAg
ICAgICAgdmlydHVhbCB+U2V0TGluZUNhcCgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6c2V0TGluZUNhcChjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OkxpbmVDYXA8PlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lQ2FwPihsaW5lQ2FwKCkpKTsKKyAgICB9CisK
KyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6TGluZURhc2gpKSB7CisgICAgICAgIHN0cnVjdCBTZXRMaW5lRGFzaCBmaW5hbCA6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPERhc2hBcnJheSwgZmxvYXQ+IHsKKyAg
ICAgICAgICAgIHZpcnR1YWwgflNldExpbmVEYXNoKCkgPSBkZWZhdWx0OworCisgICAgICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lRGFzaChjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaDw+XG4iOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVEYXNoPihsaW5l
RGFzaCgpLmRhc2hlcywgbGluZURhc2goKS5vZmZzZXQpKTsKKyAgICB9CisKKyAgICBpZiAoc3Rh
dGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGlu
ZUpvaW4pKSB7CisgICAgICAgIHN0cnVjdCBTZXRMaW5lSm9pbiBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPExpbmVKb2luPiB7CisgICAgICAgICAgICB2aXJ0dWFsIH5T
ZXRMaW5lSm9pbigpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50
aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBDYWlybzo6c2V0TGluZUpvaW4oY29udGV4dEZvclJlcGxheShyZXBsYXll
cikuY3IoKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1
bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9p
bjw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFNldExpbmVKb2luPihsaW5lSm9pbigpKSk7CisgICAgfQorCisgICAgaWYgKHN0
YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1p
dGVyTGltaXQpKSB7CisgICAgICAgIHN0cnVjdCBTZXRNaXRlckxpbWl0IGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKKyAgICAgICAgICAgIHZpcnR1YWwg
flNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQ
YWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNldE1pdGVyTGltaXQoY29udGV4dEZvclJlcGxheShy
ZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VTdHlsZUNoYW5nZTw+XG4iOworICAgICAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
TWl0ZXJMaW1pdDw+XG4iOwogICAgICAgICAgICAgfQogICAgICAgICB9OwogCi0gICAgICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVN0eWxlQ2hhbmdlPihzdGF0ZS5zdHJva2VTdHlsZSkp
OworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRNaXRlckxpbWl0PihtaXRlckxpbWl0
KCkpKTsKICAgICB9CiAKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29t
cG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSB7CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUpKSB7CiAgICAg
ICAgIHN0cnVjdCBDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlPiB7CiAgICAg
ICAgICAgICB2aXJ0dWFsIH5Db21wb3NpdGVPcGVyYXRpb25DaGFuZ2UoKSA9IGRlZmF1bHQ7CiAK
ICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzww
PigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3Np
dGVPcGVyYXRpb24oY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCksIGFy
ZzwxPigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzKSBvdmVycmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiQ29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVN
b2RlPD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlPihzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENv
bXBvc2l0ZU9wZXJhdGlvbkNoYW5nZT4oY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbiwgY29tcG9z
aXRlTW9kZSgpLmJsZW5kTW9kZSkpOwogICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpIHsKKyAgICAKKyAgICBpZiAoc3Rh
dGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hv
dWxkQW50aWFsaWFzKSkgewogICAgICAgICBzdHJ1Y3QgU2hvdWxkQW50aWFsaWFzQ2hhbmdlIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Ym9vbD4gewogICAgICAgICAg
ICAgdmlydHVhbCB+U2hvdWxkQW50aWFsaWFzQ2hhbmdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAg
ICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVy
cmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hv
dWxkQW50aWFsaWFzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAg
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dEZvclJl
cGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTaG91bGRBbnRpYWxpYXNDaGFuZ2U8Plxu
IjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczw+XG4iOwogICAgICAgICAgICAgfQogICAgICAgICB9
OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNob3VsZEFudGlhbGlhc0NoYW5nZT4o
c3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNo
b3VsZEFudGlhbGlhc0NoYW5nZT4oc2hvdWxkQW50aWFsaWFzKCkpKTsKICAgICB9CisKKyAgICBk
aWRBcHBseVN0YXRlQ2hhbmdlcygpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBzdHJ1Y3QgQmVn
aW5UcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPGZsb2F0PiB7CisgICAgICAgIHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSA9
IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
KyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJCZWdpblRyYW5zcGFyZW5j
eUxheWVyPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5
KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihvcGFj
aXR5KSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKQoreworICAgIHN0cnVjdCBFbmRUcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4geworICAgICAgICB2aXJ0dWFsIH5FbmRUcmFu
c3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAg
ICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXll
cikpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVy
cmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkVuZFRyYW5zcGFy
ZW5jeUxheWVyPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCkpOworfQor
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIHN0cnVjdCBDbGlwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8RmxvYXRSZWN0PiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXAoKSA9IGRlZmF1bHQ7CisK
KyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OmNsaXAoY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJDbGlwPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxDbGlwPihyZWN0KSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit7
CisgICAgc3RydWN0IENsaXBQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8UGF0aCwgV2luZFJ1bGU+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xpcFBhdGgoKSA9IGRl
ZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OmNsaXBQYXRo
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAg
ICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBQYXRoPD5cbiI7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQordm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzdHJ1Y3QgU2V0
TGluZUNhcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPExpbmVDYXA+
IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZUNhcCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3Qg
Q2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVj
dD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwT3V0KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIlNldExpbmVDYXA8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVu
dCA8PCAiQ2xpcE91dDw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXApKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+KHJlY3QpKTsKIH0KIAotdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hl
cywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHN0cnVjdCBTZXRMaW5lRGFzaCBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPERhc2hBcnJheSwgZmxvYXQ+IHsKLSAgICAg
ICAgdmlydHVhbCB+U2V0TGluZURhc2goKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IENsaXBPdXQg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoPiB7CisgICAgICAg
IHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAg
ICAgICAgICAgQ2Fpcm86OnNldExpbmVEYXNoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmNsaXBPdXQoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJTZXRMaW5lRGFzaDw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJDbGlwT3V0PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8U2V0TGluZURhc2g+KGRhc2hlcywgZGFzaE9mZnNldCkpOworICAgIGFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocGF0aCkpOwog
fQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxp
bmVKb2luKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIHN0
cnVjdCBTZXRMaW5lSm9pbiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PExpbmVKb2luPiB7Ci0gICAgICAgIHZpcnR1YWwgflNldExpbmVKb2luKCkgPSBkZWZhdWx0Owor
ICAgIHN0cnVjdCBDbGlwVG9JbWFnZUJ1ZmZlciBmaW5hbDogUGFpbnRpbmdPcGVyYXRpb24sIE9w
ZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdD4geworICAgICAg
ICB2aXJ0dWFsIH5DbGlwVG9JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAg
ICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c2V0TGluZUpvaW4oY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZl
cihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRMaW5lSm9pbjw+XG4i
OworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwVG9JbWFnZUJ1ZmZlcjw+XG4iOwog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVKb2lu
PihsaW5lSm9pbikpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBpZiAoYXV0byBu
YXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
KQorICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4obmF0aXZl
SW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5TZXRNaXRlckxpbWl0KCkgPSBkZWZh
dWx0OworICAgIHN0cnVjdCBDbGVhclJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xlYXJSZWN0KCkgPSBk
ZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRNaXRl
ckxpbWl0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAg
ICBDYWlybzo6Y2xlYXJSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7
CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRl
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2V0TWl0ZXJMaW1pdDw+
XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGVhclJlY3Q8PlxuIjsKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRNaXRlckxpbWl0Piht
aXRlckxpbWl0KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxDbGVhclJlY3Q+KHJlY3QpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yNDksNiArNDc5LDggQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxG
aWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKSk7CiB9CkBAIC0yNjksNiArNTAxLDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUoKSkpKTsKIH0KIApAQCAtMjkxLDM1ICs1MjUsMTIgQEAgdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50
JiBncmFkaWVudCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRp
ZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkp
KTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgc3RydWN0IEZpbGxSZWN0
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlLCBDb21w
b3NpdGVPcGVyYXRvcj4gewotICAgICAgICB2aXJ0dWFsIH5GaWxsUmVjdCgpID0gZGVmYXVsdDsK
LQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVy
KSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQg
PSBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKTsKLQotICAgICAgICAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBhcmc8Mj4oKSwgYXJnPDM+
KCkpOwotICAgICAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4dCwgYXJnPDA+
KCksIGFyZzwxPigpLCBhcmc8ND4oKSk7Ci0gICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzw1PigpLCBCbGVuZE1vZGU6Ok5v
cm1hbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbFJlY3Q8
PlxuIjsKLSAgICAgICAgfQotICAgIH07CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxG
aWxsUmVjdD4ocmVjdCwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSksIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKSk7CisgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4o
MS4wLCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgc3RydWN0IEZpbGxSb3Vu
ZGVkUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0Um91
bmRlZFJlY3QsIENvbG9yLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBDYWlybzo6U2hh
ZG93U3RhdGU+IHsKICAgICAgICAgdmlydHVhbCB+RmlsbFJvdW5kZWRSZWN0KCkgPSBkZWZhdWx0
OwpAQCAtMzI4LDcgKzUzOSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0CiAgICAgICAgIHsK
ICAgICAgICAgICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpOwogCi0gICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBhcmc8Mz4oKSk7CisgICAgICAgICAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgYXJn
PDI+KCksIGFyZzwzPigpKTsKIAogICAgICAgICAgICAgYXV0byYgcmVjdCA9IGFyZzwwPigpOwog
ICAgICAgICAgICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpCkBAIC0zMzYsNyArNTQ3LDcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBD
YWlybzo6ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0LCByZWN0LnJlY3QoKSwgYXJnPDE+KCksIGFy
Zzw0PigpKTsKIAotICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRp
b24ocGxhdGZvcm1Db250ZXh0LCBhcmc8Mj4oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0
LmNyKCksIGFyZzwyPigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiAgICAgICAgIH0KIAogICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCkBAIC0zNDUsOCArNTU2LDkgQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5k
ZWRSZWN0Pihyb3VuZGVkUmVjdCwgY29sb3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVu
ZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworCisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVk
UmVjdCwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUoKSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM2
NSwxMCArNTc3LDM2IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgIH0KICAgICB9
OwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7
CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3Qs
IHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKK3Zv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIHN0cnVjdCBGaWxsRWxsaXBzZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2UsIENhaXJvOjpTaGFk
b3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5GaWxsRWxsaXBzZSgpID0gZGVmYXVsdDsKKwor
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBQYXRoIHBhdGg7CisgICAgICAgICAgICBw
YXRoLmFkZEVsbGlwc2UoYXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmZpbGxQYXRoKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBwYXRoLCBhcmc8MT4oKSwgYXJnPDI+KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAg
ICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxFbGxpcHNlPD5cbiI7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsRWxs
aXBzZT4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKSk7Cit9CisKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKICAgICBzdHJ1Y3QgRmlsbFBhdGggZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNo
YWRvd1N0YXRlPiB7CkBAIC0zODgsMzIgKzYyNiwxMiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxQ
YXRoPihwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3RydWN0IEZpbGxFbGxpcHNlIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDYWlybzo6RmlsbFNv
dXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkZpbGxFbGxpcHNl
KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJl
cGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBhdGggcGF0
aDsKLSAgICAgICAgICAgIHBhdGguYWRkRWxsaXBzZShhcmc8MD4oKSk7Ci0gICAgICAgICAgICBD
YWlybzo6ZmlsbFBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIHBhdGgsIGFyZzwxPigp
LCBhcmc8Mj4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmls
bEVsbGlwc2U8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbEVsbGlwc2U+KHJlY3Qs
IENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwot
fQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgc3RydWN0IFN0cm9rZVJlY3QgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIGZsb2F0LCBD
YWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKQEAgLTQzMCwzMSArNjQ4
LDEwIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ry
b2tlUmVjdD4ocmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBzdHJ1Y3QgU3Ryb2tlUGF0
aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpT
dHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewotICAgICAgICB2aXJ0dWFsIH5TdHJv
a2VQYXRoKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENh
aXJvOjpzdHJva2VQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJn
PDE+KCksIGFyZzwyPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3Ry
ZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJTdHJva2VQYXRoPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKHBhdGguaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAogICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxT
dHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJl
Y3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTQ3OSwxMDcgKzY3NiwyOSBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QsIENhaXJv
OjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAK
LXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBzdHJ1Y3QgQ2xlYXJSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsZWFyUmVjdCgp
ID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xl
YXJSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xlYXJSZWN0PD5cbiI7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xlYXJSZWN0PihyZWN0KSk7Ci19
Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCit2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzdHJ1Y3QgRHJh
d0dseXBocyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPENhaXJvOjpG
aWxsU291cmNlLCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGUsIEZsb2F0
UG9pbnQsIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiwgZmxvYXQsIFZlY3RvcjxjYWlyb19n
bHlwaF90PiwgZmxvYXQsIFRleHREcmF3aW5nTW9kZUZsYWdzLCBmbG9hdCwgRmxvYXRTaXplLCBD
b2xvciwgRm9udFNtb290aGluZ01vZGU+IHsKLSAgICAgICAgdmlydHVhbCB+RHJhd0dseXBocygp
ID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgU3Ryb2tlUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFk
b3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5TdHJva2VQYXRoKCkgPSBkZWZhdWx0OwogCiAg
ICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92
ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpkcmF3R2x5cGhzKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4o
KSwgYXJnPDQ+KCkuZ2V0KCksCi0gICAgICAgICAgICAgICAgYXJnPDU+KCksIGFyZzw2PigpLCBh
cmc8Nz4oKSwgYXJnPDg+KCksIGFyZzw5PigpLCBhcmc8MTA+KCksIGFyZzwxMT4oKSwgYXJnPDEy
PigpKTsKKyAgICAgICAgICAgIENhaXJvOjpzdHJva2VQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAg
ICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3R2x5cGhzPD5cbiI7CisgICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIlN0cm9rZVBhdGg8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBp
ZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZl
Y3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOwotICAgIHsKLSAgICAg
ICAgYXV0byB5T2Zmc2V0ID0gcG9pbnQueSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5
cGhzW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH07Ci0gICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFu
Y2VzW2ldLndpZHRoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fpcm86
OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKLSAgICAgICAg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCi0gICAgICAgIFJlZlB0cjxjYWlyb19z
Y2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCi0gICAgICAg
IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBXVEZNb3ZlKGNhaXJvR2x5cGhzKSwgeE9mZnNl
dCwgc3RhdGUudGV4dERyYXdpbmdNb2RlLAotICAgICAgICBzdGF0ZS5zdHJva2VUaGlja25lc3Ms
IHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsIGZvbnRTbW9vdGhpbmcpKTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQot
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2Um
IG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzdHJ1Y3QgRHJhd05hdGl2ZUltYWdlIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4s
IEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucywgZmxvYXQsIENhaXJv
OjpTaGFkb3dTdGF0ZT4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3TmF0aXZlSW1hZ2UoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdQbGF0
Zm9ybUltYWdlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJn
PDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFyZzw1PigpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TmF0aXZlSW1hZ2U8PlxuIjsKLSAg
ICAgICAgfQotICAgIH07CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotICAgIFVOVVNFRF9Q
QVJBTShpbWFnZVNpemUpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3Jt
SW1hZ2UoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMs
IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBz
dHJ1Y3QgRHJhd1BhdHRlcm4gZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgSW50U2l6ZSwgRmxvYXRSZWN0LCBGbG9hdFJlY3Qs
IEFmZmluZVRyYW5zZm9ybSwgRmxvYXRQb2ludCwgSW1hZ2VQYWludGluZ09wdGlvbnM+IHsKLSAg
ICAgICAgdmlydHVhbCB+RHJhd1BhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBl
eGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAg
ICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJn
PDQ+KCksIGFyZzw1PigpLCBhcmc8Nj4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1
bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8
IGluZGVudCA8PCAiRHJhd1BhdHRlcm48PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBV
TlVTRURfUEFSQU0oc3BhY2luZyk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1BhdHRl
cm4+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgbmF0aXZlSW1hZ2Uuc2l6ZSgpLCBkZXN0
UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKSk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIAogdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKQEAgLTU5OCw4ICs3MTcsOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tu
ZQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
LSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNz
LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcikp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJh
d1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywgZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCks
IHN0cm9rZUNvbG9yKCkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikK
QEAgLTYyMSw1MCArNzQwLDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQKICAgICBpZiAoc3Ry
b2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lPihw
b2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0
ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcykpOwotfQotCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCi17Ci0gICAgc3RydWN0
IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxGbG9hdFBvaW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4gewotICAg
ICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnRleHRGb3JS
ZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwg
YXJnPDQ+KCksIGFyZzw1PigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJEcmF3TGluZXNGb3JUZXh0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYg
KHdpZHRocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0
Pihwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBz
dGF0ZS5zdHJva2VDb2xvcikpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBzdHJ1Y3QgRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHsKLSAgICAgICAgdmlydHVhbCB+RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPD5cbiI7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcj4ocmVjdCwgc3R5bGUpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Miwgc3Ryb2tlU3R5bGUoKSwg
c3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHNob3VsZEFudGlhbGlhcygpKSk7CiB9
CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQpAQCAtNjgzLDExICs3NjAsMTEgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9
OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPERyYXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4o
cmVjdCwgZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0cm9rZVRo
aWNrbmVzcygpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRh
OjpwYWludEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7CkBAIC03MDcsMTIgKzc4NCwxMiBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0CiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3Rm9jdXNSaW5nPihwYXRo
LCB3aWR0aCwgY29sb3IpKTsKICNlbmRpZgotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwogfQog
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBU
aGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CkBAIC03MzIsMzY4
ICs4MDksMTQ2IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0CiAgICAgICAgIH0KICAgICB9Owog
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3
Rm9jdXNSaW5nPihyZWN0cywgd2lkdGgsIGNvbG9yKSk7CiAjZW5kaWYKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzYXZlKCkKLXsK
LSAgICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PD4gewotICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnNhdmUoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTYXZlPD5cbiI7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7Ci0KLSAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxTYXZlPigpKTsKLQotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0
ZVN0YWNrLmxhc3QoKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cmVzdG9y
ZSgpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBz
dHJ1Y3QgUmVzdG9yZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4g
ewotICAgICAgICB2aXJ0dWFsIH5SZXN0b3JlKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnJlc3RvcmUoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
LSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJSZXN0b3JlPD5cbiI7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKCFzdGFja1NpemUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7Ci0KLSAgICBpZiAobV9zdGF0ZVN0
YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8UmVzdG9yZT4oKSk7Ci0KLSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIGlm
IChtX3N0YXRlU3RhY2suaXNFbXB0eSgpKQotICAgICAgICBtX3N0YXRlU3RhY2suY2xlYXIoKTsK
KyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAot
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkK
K3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBzdHJ1Y3QgVHJhbnNsYXRlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQsIGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgflRyYW5z
bGF0ZSgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd05hdGl2ZUltYWdlIGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZs
b2F0UmVjdCwgRmxvYXRSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucywgZmxvYXQsIENhaXJvOjpT
aGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5EcmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1
bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnRyYW5zbGF0ZShj
b250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAg
ICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
YXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBh
cmc8NT4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiVHJhbnNs
YXRlPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdOYXRpdmVJbWFnZTw+
XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFRyYW5z
bGF0ZT4oeCwgeSkpOwotCi0gICAgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFj
ay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmN0bS50cmFuc2xhdGUoeCwgeSk7Ci0KLSAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIHQ7Ci0gICAgICAgIHQudHJhbnNsYXRlKC14LCAteSk7Ci0gICAgICAg
IHN0YXRlLmN0bUludmVyc2UgPSB0ICogc3RhdGUuY3RtSW52ZXJzZTsKLSAgICB9CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TmF0aXZlSW1h
Z2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIEltYWdl
UGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSksIGFs
cGhhKCksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCi12b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKK3ZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKIHsKLSAgICBzdHJ1Y3QgUm90YXRlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8ZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+Um90YXRlKCkgPSBkZWZhdWx0Owot
Ci0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpyb3RhdGUoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJSb3RhdGU8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxSb3RhdGU+KGFuZ2xlSW5SYWRpYW5zKSk7Ci0KLSAgICB7Ci0gICAg
ICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGUuY3Rt
LnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHQ7Ci0g
ICAgICAgIHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICAgICAgc3RhdGUuY3RtSW52ZXJz
ZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0KLX0KLQotdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgc3RydWN0IFNj
YWxlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRTaXplPiB7
Ci0gICAgICAgIHZpcnR1YWwgflNjYWxlKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3UGF0
dGVybiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+LCBJbnRTaXplLCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwgQWZmaW5lVHJhbnNm
b3JtLCBGbG9hdFBvaW50LCBJbWFnZVBhaW50aW5nT3B0aW9ucz4geworICAgICAgICB2aXJ0dWFs
IH5EcmF3UGF0dGVybigpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAg
ICAgICBDYWlybzo6c2NhbGUoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsK
KyAgICAgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0Pigp
LCBhcmc8NT4oKSwgYXJnPDY+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIlNjYWxlPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdQYXR0
ZXJuPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
U2NhbGU+KHNpemUpKTsKLQotICAgIHsKLSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3Rh
Y2subGFzdCgpOwotICAgICAgICBzdGF0ZS5jdG0uc2NhbGUoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdDsKLSAgICAgICAgdC5zY2FsZSgx
IC8gc2l6ZS53aWR0aCgpLCAxIC8gc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHN0YXRlLmN0bUlu
dmVyc2UgPSB0ICogc3RhdGUuY3RtSW52ZXJzZTsKLSAgICB9CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UGF0dGVybj4obmF0aXZlSW1hZ2Uu
cGxhdGZvcm1JbWFnZSgpLCBuYXRpdmVJbWFnZS5zaXplKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
CisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbikKIHsKLSAgICBzdHJ1Y3QgQ29uY2F0Q1RNIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8QWZmaW5lVHJhbnNmb3JtPiB7Ci0gICAgICAgIHZpcnR1YWwgfkNvbmNh
dENUTSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWly
bzo6Y29uY2F0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ29uY2F0Q1RNPD5cbiI7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVyc2UoKTsK
LSAgICBpZiAoIWludmVyc2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPENvbmNhdENUTT4odHJhbnNmb3JtKSk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3Rh
dGVTdGFjay5sYXN0KCk7Ci0gICAgc3RhdGUuY3RtICo9IHRyYW5zZm9ybTsKLSAgICBzdGF0ZS5j
dG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpICogc3RhdGUuY3RtSW52ZXJzZTsKKyAgICAvLyBG
SVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZv
ck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQor
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLSAgICBzdHJ1Y3QgU2V0Q1RNIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8QWZmaW5lVHJhbnNmb3JtPiB7
Ci0gICAgICAgIHZpcnR1YWwgflNldENUTSgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd0ds
eXBocyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPENhaXJvOjpGaWxs
U291cmNlLCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGUsIEZsb2F0UG9p
bnQsIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiwgZmxvYXQsIFZlY3RvcjxjYWlyb19nbHlw
aF90PiwgZmxvYXQsIFRleHREcmF3aW5nTW9kZUZsYWdzLCBmbG9hdCwgRmxvYXRTaXplLCBDb2xv
ciwgRm9udFNtb290aGluZ01vZGU+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0dseXBocygpID0g
ZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6U3RhdGU6
OnNldENUTShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAg
ICAgQ2Fpcm86OmRyYXdHbHlwaHMoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigp
LCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKS5nZXQoKSwKKyAgICAgICAg
ICAgICAgICBhcmc8NT4oKSwgYXJnPDY+KCksIGFyZzw3PigpLCBhcmc8OD4oKSwgYXJnPDk+KCks
IGFyZzwxMD4oKSwgYXJnPDExPigpLCBhcmc8MTI+KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIlNldENUTTw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJEcmF3R2x5cGhzPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byBpbnZl
cnNlID0gdHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBpZiAoIWludmVyc2UpCisgICAgaWYgKCFm
b250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pKTsKLQotICAgIGF1dG8mIHN0YXRlID0g
bV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICBzdGF0ZS5jdG0gPSB0cmFuc2Zvcm07Ci0gICAgc3Rh
dGUuY3RtSW52ZXJzZSA9IGludmVyc2UudmFsdWUoKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZp
Y2VTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07Ci19
Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQotewotICAgIHN0cnVjdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKLSAgICAgICAgdmly
dHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI8PlxuIjsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSk7Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxCZWdpblRyYW5zcGFyZW5jeUxheWVy
PihvcGFjaXR5KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKQotewotICAgIHN0cnVjdCBFbmRUcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4gewotICAgICAgICB2aXJ0dWFsIH5F
bmRUcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJlcGxheShy
ZXBsYXllcikpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRz
KSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkVuZFRy
YW5zcGFyZW5jeUxheWVyPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR3JhcGhpY3ND
b250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHN0cnVjdCBDbGlwIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7Ci0gICAg
ICAgIHZpcnR1YWwgfkNsaXAoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAg
ICAgICAgICAgQ2Fpcm86OmNsaXAoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwPD5cbiI7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcD4ocmVjdCkp
OwotCisgICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOworICAgIFZlY3RvcjxjYWlyb19nbHlw
aF90PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOwogICAgIHsKLSAgICAgICAgYXV0byYgc3RhdGUg
PSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZS5jbGlwQm91bmRzLmludGVyc2Vj
dChzdGF0ZS5jdG0ubWFwUmVjdChyZWN0KSk7Ci0gICAgfQotfQotCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHN0cnVj
dCBDbGlwT3V0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRS
ZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
LSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBPdXQoY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJDbGlwT3V0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8Q2xpcE91dD4ocmVjdCkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5h
bCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGg+IHsKLSAgICAgICAgdmly
dHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkp
OworICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ld
ID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKKyAgICAgICAgICAgIHhPZmZzZXQg
Kz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocGF0
aCkpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxEcmF3R2x5cGhzPihDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJv
a2VTb3VyY2Uoc3RhdGUpLAorICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2lu
dCwKKyAgICAgICAgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+KGZvbnQucGxhdGZvcm1EYXRh
KCkuc2NhbGVkRm9udCgpKSwKKyAgICAgICAgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIFdU
Rk1vdmUoY2Fpcm9HbHlwaHMpLCB4T2Zmc2V0LCB0ZXh0RHJhd2luZ01vZGUoKSwKKyAgICAgICAg
c3Ryb2tlVGhpY2tuZXNzKCksIHNoYWRvd09mZnNldCgpLCBzaGFkb3dDb2xvcigpLCBmb250U21v
b3RoaW5nKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgoY29u
c3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAgc3RydWN0IENsaXBQYXRoIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgV2luZFJ1bGU+IHsKLSAg
ICAgICAgdmlydHVhbCB+Q2xpcFBhdGgoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IERyYXdMaW5l
c0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBv
aW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4geworICAgICAgICB2aXJ0
dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjpjbGlwUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
YXJnPDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigp
LCBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFyZzw1PigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJDbGlwUGF0aDw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJEcmF3TGluZXNGb3JUZXh0PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcFBhdGg+KHBhdGgsIGNsaXBSdWxlKSk7Ci0KLSAgICB7Ci0g
ICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGUu
Y2xpcEJvdW5kcy5pbnRlcnNlY3Qoc3RhdGUuY3RtLm1hcFJlY3QocGF0aC5mYXN0Qm91bmRpbmdS
ZWN0KCkpKTsKLSAgICB9Ci19CisgICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKIAotSW50UmVjdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwQm91bmRzKCkgY29u
c3QKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3Qoc3RhdGUuY3RtSW52ZXJzZS5tYXBSZWN0KHN0YXRlLmNsaXBCb3Vu
ZHMpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PERyYXdMaW5lc0ZvclRleHQ+KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRv
dWJsZVVuZGVybGluZXMsIHN0cm9rZUNvbG9yKCkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgc3RydWN0IENsaXBUb0ltYWdlQnVmZmVyIGZpbmFsOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90Piwg
RmxvYXRSZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBUb0ltYWdlQnVmZmVyKCkgPSBkZWZh
dWx0OworICAgIHN0cnVjdCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZT4geworICAgICAgICB2aXJ0dWFsIH5EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCkgPSBk
ZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlwVG9J
bWFnZUJ1ZmZlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFy
ZzwxPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOwogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7
Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBUb0ltYWdlQnVmZmVyPD5cbiI7Cisg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI8Plxu
IjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVy
LmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKSkKLSAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcFRv
SW1hZ2VCdWZmZXI+KG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCksIGRlc3RSZWN0KSk7Ci19
Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCkKLXsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKSk7CiB9CiAKIEZsb2F0
UmVjdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCkBAIC0xMTA2LDEy
ICs5NjEsNCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGVuZChzdGQ6OnVuaXF1
ZV9wdHI8UGFpbnRpbmdPcGVyYXRpb24+JiYgY29tbWFuZAogICAgIG1fY29tbWFuZExpc3QuYXBw
ZW5kKFdURk1vdmUoY29tbWFuZCkpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICAvLyBGSVhNRTogTm90IGlt
cGxlbWVudGVkLgotICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXll
ciwgZGVzdGluYXRpb24pOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIE5pY29zaWEKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8v
Tmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaApp
bmRleCA4M2M2ZDI3ZDZlYTM2Yzc5YmViZDc4MjVmOTliN2M0MzkwOGVlNTRiLi5hZjQ3OGZjNDM3
ZThiNGVlOTdhN2MwMWI3N2JjMjJhMDM1NDQ3OTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9j
YWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJp
Z2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MSw3OCArNDIsNTggQEAgcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7
IH0KIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cykgb3ZlcnJpZGU7CisgICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN0b3Jl
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIG92ZXJyaWRlOworCisg
ICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lk
IGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNsaXAoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBX
ZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOworICAgIHZvaWQgY2xp
cE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xpcFRvSW1hZ2VC
dWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExpbmVKb2luKFdlYkNvcmU6OkxpbmVKb2luKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQg
Y2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBXZWJDb3JlOjpHcmFkaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21w
b3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdEltcGwoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAg
IHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZp
bGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKKwogICAgIHZvaWQgZmlsbEVs
bGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJv
a2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNsZWFyUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKIAotICAgIHZvaWQg
ZHJhd0dseXBocyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIFdlYkNvcmU6OkZvbnRTbW9vdGhp
bmdNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJD
b3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihX
ZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBX
ZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0
cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJy
YXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKKwogICAgIHZvaWQgZHJh
d0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlc3RvcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIG92ZXJyaWRl
OwotICAgIHZvaWQgc2NhbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjb25jYXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3Zl
cnJpZGU7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6
OlBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgm
LCBXZWJDb3JlOjpXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBjbGlw
Qm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJD
b3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJy
aWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6TmF0aXZlSW1hZ2UmLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMm
KSBvdmVycmlkZTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9yTWVk
aWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKSBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6
Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmLCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0
cm9rZVN0eWxlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIG92ZXJyaWRlOwogCiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpS
b3VuZGluZ01vZGUpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBhcHBlbmQoc3RkOjp1bmlxdWVfcHRy
PFBhaW50aW5nT3BlcmF0aW9uPiYmKTsKICAgICBQYWludGluZ09wZXJhdGlvbnMmIG1fY29tbWFu
ZExpc3Q7Ci0KLSAgICBzdHJ1Y3QgU3RhdGUgewotICAgICAgICBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0gY3RtOwotICAgICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3RtSW52ZXJzZTsK
LSAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNsaXBCb3VuZHM7Ci0gICAgfTsKLSAgICBWZWN0
b3I8U3RhdGUsIDMyPiBtX3N0YXRlU3RhY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBOaWNvc2lh
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0ds
eXBoc1JlY29yZGVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCmluZGV4IDVkNjZlYjcyYWQxM2MyNGRhYzA5NWE5
NDVmNjE0YTZmNTUyMjI0OTIuLjA3YzAzMzlmNThiZjMyYzdkNWY4ZjgxN2RiZGQzZWI3ZjFlZTcz
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3
R2x5cGhzUmVjb3JkZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCkBAIC0yOSwxNyArMjksMTggQEAKICNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3ND
b250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRl
eHQpCi0gICAgOiBtX293bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhz
UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0
RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNv
bnRleHQoZGVzdGluYXRpb25Db250ZXh0KQogewogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21v
b3RoaW5nTW9kZSkKIHsKLSAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBtX3Ntb290aGluZ01vZGUp
OworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBtX3Ntb290aGluZ01vZGUp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCmluZGV4IGMxOWU3NDE1NTdjMzA4Yzk0
MWU0ZWY3MTVlM2RiNDY1OTRkMTg1YjYuLjJjZDc4NjVlY2E4MjllYjQ1NzgwZTlmYjBlNzI0N2Ez
NzEyYmNjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q0dXaW4uY3BwCkBAIC0xNzYsMjUgKzE3NiwyMiBAQCB2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBm
b250LAogICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNp
emUoKSk7CiAgICAgRm9udENhc2NhZGU6OnNldENHQ29udGV4dEZvbnRSZW5kZXJpbmdTdHlsZShj
Z0NvbnRleHQsIGZvbnQucGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCksIGZhbHNlLCBmb250
LnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7
Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBncmFw
aGljc0NvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29s
b3IpOworICAgIGF1dG8gZHJvcFNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC5kcm9wU2hhZG93KCk7
CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2lu
Z01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgp
ICYmICFzaGFkb3dCbHVyICYmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9u
T3JGbGlwcGVkKCkpOworICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0
LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBkcm9wU2hhZG93
LmNvbG9yLmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRvdy5ibHVyUmFkaXVzICYmICghZ3JhcGhpY3ND
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0LmdldENU
TSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwogICAgIGlmIChoYXNTaW1w
bGVTaGFkb3cpIHsKICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGlu
c3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwg
YW50aWFsaWFzaW5nLgogICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFkb3coKTsKICAg
ICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xvcigpOwotICAg
ICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAgICBDb2xvciBzaGFk
b3dGaWxsQ29sb3IgPSBkcm9wU2hhZG93LmNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRG
aWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBw
b2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4
dFggPSBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJ
ZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGll
ZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAgICAg
ICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAq
IChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7Cisg
ICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgZHJvcFNoYWRvdy5vZmZzZXQu
aGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAt
MSA6IDEpOwogICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBzaGFk
b3dUZXh0WCwgc2hhZG93VGV4dFkpOwogICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFk
dmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzKTsKICAgICAgICAg
aWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKSB7Ci0gICAgICAgICAgICBDR0NvbnRleHRT
ZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgo
KSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQu
aGVpZ2h0KCkpOworICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4
dCwgcG9pbnQueCgpICsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKSArIGZvbnQuc3ludGhldGlj
Qm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQoKSk7CiAg
ICAgICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5
cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzKTsKICAgICAgICAgfQogICAgICAgICBncmFwaGljc0Nv
bnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CkBAIC0yMDgsNyArMjA1LDcgQEAgdm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgRm9udCYgZm9udCwKICAgICB9CiAKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwg
c2hhZG93Q29sb3IpOworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyhkcm9w
U2hhZG93KTsKIAogICAgIEZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250
ZXh0LCBvbGRGb250U21vb3RoaW5nU3R5bGUpOwogICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgo
Y2dDb250ZXh0LCBzYXZlZE1hdHJpeCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDNjZjc0NjBjODBl
M2JlMWQ1YmEzZjBjZWQ3YzE5YjI1ZGYyOWFiZjIuLjc4NWU5NGJlY2YwN2NkNGE4NGM5YzM0ZDlj
ZWNjODM4NTdlMDY5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC0yOTIsMTIgKzI5MiwxMiBAQCB2
b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3Qm94ZXMoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQogICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QoMiwgMiwgc2l6ZS53aWR0aCgpIC0gMywg
c2l6ZS5oZWlnaHQoKSAtIDMpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6Ondo
aXRlKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygzKTsKLSAgICBjb250ZXh0LnNl
dExpbmVEYXNoKG1fZGFzaFdpZHRocywgMCk7CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IG1f
ZGFzaFdpZHRocywgMCB9KTsKICAgICBtX3BhdGguYWRkUmVjdChmcmFtZVJlY3QpOwogICAgIG1f
cGF0aC5jbG9zZVN1YnBhdGgoKTsKICAgICBjb250ZXh0LnN0cm9rZVBhdGgobV9wYXRoKTsKIAot
ICAgIGNvbnRleHQuc2V0TGluZURhc2goRGFzaEFycmF5KCksIDApOworICAgIGNvbnRleHQuc2V0
TGluZURhc2goeyB7IH0sIDAgfSk7CiAgICAgbV9wYXRoLmNsZWFyKCk7CiAgICAgbV9wYXRoLm1v
dmVUbyhGbG9hdFBvaW50KDAsIGJveFRvcCArIGJveFNpemUpKTsKICAgICBtX3BhdGguYWRkTGlu
ZVRvKEZsb2F0UG9pbnQoc2l6ZS53aWR0aCgpLCBib3hUb3AgKyBib3hTaXplKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKaW5k
ZXggMWIxODJhMWQzNmI3Y2ZhYWEwYjE2OWQwZDhjODU0MzVmNDNiNzY3ZC4uZTgwZjJlZTg5MTkz
OTE0NDE4ZTg3OGJmMGE0YTI4NDBlZTY4OWQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApAQCAtMzksNyArMzksNyBAQCBi
b29sIENvbnRlbnRmdWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNvbnRlbnRmdWxQYWludChG
cmFtZVZpZXcmIGZyYW1lVmlldykKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRCZWhhdmlvcihQYWlu
dEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwogICAgIGZyYW1lVmlldy5zZXRQ
YWludHNFbnRpcmVDb250ZW50cyh0cnVlKTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQgY2hl
Y2tlckNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY2hl
Y2tlckNvbnRleHQoZnJhbWVWaWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCksIE51bGxH
cmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVu
dGZ1bFBhaW50KTsKICAgICBmcmFtZVZpZXcucGFpbnQoY2hlY2tlckNvbnRleHQsIGZyYW1lVmll
dy5yZW5kZXJWaWV3KCktPmRvY3VtZW50UmVjdCgpKTsKIAogICAgIGZyYW1lVmlldy5zZXRQYWlu
dHNFbnRpcmVDb250ZW50cyhvbGRFbnRpcmVDb250ZW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcAppbmRleCBjOWFiMjE3NjE0MWZhN2EzMzlh
MjA5N2IzYWJmOTc2NTA3ODdlNGYxLi40YmZmOGQwMDgzOTI1MTRjYmU2MmNhOTVkNGU3NDNmYzE5
N2YwMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBz
aXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0Jv
eC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBMZWdhY3lFbGxpcHNpc0JveDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnMKICAgICBib29s
IHNldFNoYWRvdyA9IGZhbHNlOwogICAgIGlmIChsaW5lU3R5bGUudGV4dFNoYWRvdygpKSB7CiAg
ICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0gbGluZVN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9y
RmlsdGVyKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPmNvbG9yKCkpOwotICAgICAgICBjb250ZXh0
LnNldFNoYWRvdyhMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPngoKS52YWx1ZSgp
LCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVTdHlsZS50ZXh0U2hh
ZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5z
ZXREcm9wU2hhZG93KHsgTGF5b3V0U2l6ZShsaW5lU3R5bGUudGV4dFNoYWRvdygpLT54KCkudmFs
dWUoKSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+eSgpLnZhbHVlKCkpLCBsaW5lU3R5bGUudGV4
dFNoYWRvdygpLT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsKICAgICAgICAgc2V0
U2hhZG93ID0gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDI0YzgyYzlkNmJkNDNmNzRiYTA1YWI1YWM3
Njc5M2Q3NWQxNWU1NzcuLjhkOTdkMjU3MWUyNDUzZGYxOTI4YmRlNmM3N2M3NjMxNWZiYzg4MmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcApAQCAtNzA1LDcgKzcwNSw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFj
a2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAg
IGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09m
ZnNldChib3hTaGFkb3ctPngoKS52YWx1ZSgpLCBib3hTaGFkb3ctPnkoKS52YWx1ZSgpKTsKLSAg
ICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFs
dWUoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigp
KSwgYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVn
YWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgY29udGV4dC5zZXREcm9wU2hh
ZG93KHsgc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHN0eWxlLmNv
bG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+
aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1Jh
ZGl1c01vZGU6OkRlZmF1bHQgfSk7CiB9CiAKIEludGVycG9sYXRpb25RdWFsaXR5IFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIEltYWdlJiBpbWFnZSwgY29uc3Qgdm9pZCogbGF5ZXIsIGNvbnN0IExheW91dFNp
emUmIHNpemUpCkBAIC0yMDg3LDcgKzIwODcsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhdXRvIGxpbmVEYXNoID0gRGFzaEFycmF5Ojpm
cm9tKGRhc2hMZW5ndGgsIGdhcExlbmd0aCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGgpOworICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5n
dGggfSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0
aGUgYm9yZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6CkBAIC0yNDU2
LDcgKzI0NTYsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhj
b25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAgRmxvYXRQ
b2ludCBzbmFwcGVkU2hhZG93T3JpZ2luID0gRmxvYXRQb2ludChyb3VuZFRvRGV2aWNlUGl4ZWwo
c2hhZG93UmVjdE9yaWdpbi54KCksIGRldmljZVNjYWxlRmFjdG9yKSwgcm91bmRUb0RldmljZVBp
eGVsKHNoYWRvd1JlY3RPcmlnaW4ueSgpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAgICAgICAg
ICAgRmxvYXRTaXplIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSBzbmFwcGVkU2hhZG93T3JpZ2luIC0g
cGl4ZWxTbmFwcGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgICAgIGNv
bnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93
Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICAgICAgY29udGV4dC5z
ZXREcm9wU2hhZG93KHsgc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dD
b2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVn
YWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIAogICAgICAgICAgICAgaWYgKGhh
c0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBib3ggaXMgb3BhcXVl
LCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2
ZXMgdGltZQpAQCAtMjU1OCw3ICsyNTU4LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAg
ICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAogICAgICAgICAgICAgYXV0
byBzbmFwcGVkU2hhZG93T2Zmc2V0ID0gcm91bmRTaXplVG9EZXZpY2VQaXhlbHMoc2hhZG93T2Zm
c2V0LCBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhz
bmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlz
V2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRp
dXNNb2RlOjpEZWZhdWx0KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNu
YXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNX
ZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1
c01vZGU6OkRlZmF1bHQgfSk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3QsIGZpbGxD
b2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAppbmRleCA4NTBiZGU0OGU0OTI4ZTg2ZGMxNzZiNjIzMjFmZWVkOWI2ODZjM2NkLi44
Y2Y5NjFlMGJjMjM2NGU5NjJjZGE4ODFmODU5ZTRmMzFhM2M5ODNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTIyNTMsMTQgKzIyNTMsMTQgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcnMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBMYXllclAKICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgICAgICBi
b29sIHVzZXNDb21wb3NpdGVPcGVyYXRpb24gPSBoYXNCbGVuZE1vZGUoKSAmJiAhKHJlbmRlcmVy
KCkuaXNMZWdhY3lTVkdSb290KCkgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPmlzUmVuZGVyVmll
d0xheWVyKCkpOwogICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZU9wZXJhdGlvbikKLSAgICAgICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnRleHQuY29tcG9zaXRlT3BlcmF0
aW9uKCksIGJsZW5kTW9kZSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9k
ZSh7IGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpIH0pOwogI2VuZGlm
CiAKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKHJlbmRlcmVyKCkub3Bh
Y2l0eSgpKTsKIAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAgIGlmICh1c2Vz
Q29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOwor
ICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgY29udGV4dC5jb21wb3NpdGVP
cGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAjZW5kaWYKIAogI2lmZGVmIFJFVkVB
TF9UUkFOU1BBUkVOQ1lfTEFZRVJTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDVmOThiOTEyNGEzNDlhYzc1NTc5ZjcxMTM1ZWUwZjM4
YWJiNGYxMmQuLjNlMmU2YmYxZGU1ZDU0ZWIzOGQ5MjdhNTFmMDdjODkxMGFlNmMxYmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0x
ODMxLDcgKzE4MzEsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdp
b24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBbJl0o
R3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBOdWxsR3JhcGhpY3NDb250
ZXh0IG51bGxDb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVh
c29uczo6Tm9uZSk7CisgICAgICAgIGF1dG8gZGlydHlSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9p
bnQoZ3JhcGhpY3NMYXllci5vZmZzZXRGcm9tUmVuZGVyZXIoKSksIGdyYXBoaWNzTGF5ZXIuc2l6
ZSgpKTsKKyAgICAKKyAgICAgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBudWxsQ29udGV4dChkaXJ0
eVJlY3QsIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9u
ZSk7CiAgICAgICAgIEV2ZW50UmVnaW9uIGV2ZW50UmVnaW9uOwogI2lmIEVOQUJMRShFRElUQUJM
RV9SRUdJT04pCiAgICAgICAgIGlmIChyZW5kZXJlcigpLnBhZ2UoKS5zaG91bGRCdWlsZEVkaXRh
YmxlUmVnaW9uKCkpCkBAIC0xODUzLDggKzE4NTUsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgICAgICAgICAgZXZlbnRSZWdpb25Db250ZXh0LnVu
aXRlKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KC1sYXllck9mZnNldCwgZ3JhcGhpY3NMYXll
ci5zaXplKCkpKSwgcmVuZGVyZXIoKS5zdHlsZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1
dG8gZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludChncmFw
aGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NMYXllci5zaXplKCkpKTsK
LSAgICAgICAgcGFpbnRJbnRvTGF5ZXIoJmdyYXBoaWNzTGF5ZXIsIG51bGxDb250ZXh0LCBkaXJ0
eVJlY3QsIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7CisgICAgICAgIHBhaW50SW50b0xheWVy
KCZncmFwaGljc0xheWVyLCBudWxsQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChkaXJ0eVJlY3Qp
LCB7IH0sICZldmVudFJlZ2lvbkNvbnRleHQpOwogCiAgICAgICAgIGV2ZW50UmVnaW9uLnRyYW5z
bGF0ZSh0b0ludFNpemUobGF5ZXJPZmZzZXQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDMwY2QzNDNlYTdkZjkxNjhjYzNjZGU0N2RiZWY4Zjc1
OWU4OGY3MzEuLjI1NmZjNzQ5NTZkYTMzODZhNTRkMzUyZGUxMWI2ZmY3MzY2OWExZjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTYwNSw3ICs2MDUs
NyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludFRleHRGaWVsZElubmVyU2hhZG93KGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdAogICAgIGNvbnN0IEZsb2F0U2l6ZSBpbm5lclNo
YWRvd09mZnNldCB7IDAsIDUgfTsKICAgICBjb25zdGV4cHIgYXV0byBpbm5lclNoYWRvd0JsdXIg
PSAxMC4wZjsKICAgICBhdXRvIGlubmVyU2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsg
MCwgMCwgMCwgMC4wNGYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNl
dCwgaW5uZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERy
b3BTaGFkb3coeyBpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRv
d0NvbG9yIH0pOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAg
ICBQYXRoIGlubmVyU2hhZG93UGF0aDsKQEAgLTIwODAsNyArMjA4MCw3IEBAIHZvaWQgUmVuZGVy
VGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKEltYWdlJiBpbWFnZSwgY29uc3QgUGFp
bnRJbmZvJiBwYWluCiAgICAgLy8gVXNlIHRoZSBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb24sIGJl
Y2F1c2UgaXQgY2FsY3VsYXRlcyB0aGUgYmx1ciByYWRpdXMgaW4gY29udGV4dCBzcGFjZSwKICAg
ICAvLyByYXRoZXIgdGhhbiBzY3JlZW4gc3BhY2UuCiAgICAgY29uc3RleHByIGF1dG8gc2hhZG93
Q29sb3IgPSBDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxwaGFCeXRlKDI2KTsKLSAgICBncmFwaGlj
c0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFkb3dDb2xvcik7CisgICAg
Z3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3coeyBGbG9hdFNpemUgeyB9LCAxNiwgc2hhZG93
Q29sb3IgfSk7CiAKICAgICAvLyBUaGUgY2lyY2xlIG11c3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVs
IHZhbHVlIG9mIDEgZm9yIHRoZSBzaGFkb3cgY29sb3IgdG8gYXBwZWFyLgogICAgIENHRmxvYXQg
Y2lyY2xlQ29sb3JDb21wb25lbnRzWzRdID0geyAwLCAwLCAwLCAxIH07CkBAIC0yMjczLDcgKzIy
NzMsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRv
dyhjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYwogCiAgICAgYm9vbCBpc0VtcHR5ID0gIXN0
YXRlcy5jb250YWluc0FueSh7IENvbnRyb2xTdGF0ZXM6OlN0YXRlczo6Q2hlY2tlZCwgQ29udHJv
bFN0YXRlczo6U3RhdGVzOjpJbmRldGVybWluYXRlIH0pOwogICAgIGF1dG8gZmlyc3RTaGFkb3dD
b2xvciA9IERpc3BsYXlQMzxmbG9hdD4geyAwLCAwLCAwLCBpc0VtcHR5ID8gMC4wNWYgOiAwLjFm
IH07Ci0gICAgY29udGV4dC5zZXRTaGFkb3coaW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93
Qmx1ciwgZmlyc3RTaGFkb3dDb2xvcik7CisgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgaW5u
ZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgZmlyc3RTaGFkb3dDb2xvciB9KTsKICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCBpbm5lclNo
YWRvd1BhdGg7CkBAIC0yMjkwLDcgKzIyOTAsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWlu
dENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYwog
ICAgIGNvbnRleHQuZmlsbFBhdGgoaW5uZXJTaGFkb3dQYXRoKTsKIAogICAgIGNvbnN0ZXhwciBh
dXRvIHNlY29uZFNoYWRvd0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDEsIDEsIDEsIDAuNWYg
fTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUgeyAwLCAwIH0sIDEsIHNlY29uZFNo
YWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBGbG9hdFNpemUgeyAwLCAw
IH0sIDEsIHNlY29uZFNoYWRvd0NvbG9yIH0pOwogCiAgICAgY29udGV4dC5maWxsUGF0aChpbm5l
clNoYWRvd1BhdGgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCmluZGV4IDAxMGVjYmFlZDg3YTczYTQyMGFmYjk3ZThlODBmZWE2Mzc5ZmVkM2UuLjEwZGM5
MGU1N2U1YWUwZjQyNWEwZGFhYTM2NGY4MTRlNDQ5NDk5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI4MTYsNyArMjgxNiw3IEBAIHN0YXRpYyB2
b2lkIHBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyKGNvbnN0IFJlbmRlckF0dGFjaG1l
bnQmIGF0dGFjaG1lbnQsCiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihwbGFjZWhvbGRlckJv
cmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhhdHRhY2htZW50UGxh
Y2Vob2xkZXJCb3JkZXJXaWR0aCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShEYXNoZWRT
dHJva2UpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2goe2F0dGFjaG1lbnRQbGFjZWhvbGRlckJv
cmRlckRhc2hMZW5ndGh9LCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyBhdHRhY2ht
ZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNoTGVuZ3RoIH0sIDAgfSk7CiAgICAgY29udGV4dC5zdHJv
a2VQYXRoKGJvcmRlclBhdGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDY3NTU2OGFmZjYxMThmMDEzYmQxZDRm
NTVhNmMzNjRmYThhZjM4ZTguLjgzMDliMmY4ZDRhMzFmYTAzYjFhYmY4NDM5ZGEwZjNlZjE2Mjg0
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBh
aW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBh
aW50ZXIuY3BwCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6
OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGMKICAg
ICAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5jb2xvcigpOwogICAgICAgICAg
ICAgaWYgKG1fc2hhZG93Q29sb3JGaWx0ZXIpCiAgICAgICAgICAgICAgICAgbV9zaGFkb3dDb2xv
ckZpbHRlci0+dHJhbnNmb3JtQ29sb3Ioc2hhZG93Q29sb3IpOwotICAgICAgICAgICAgbV9jb250
ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93WCwgc2hhZG93WSAtIGV4dHJhT2Zmc2V0KSwg
c2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgICAgICBtX2Nv
bnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFP
ZmZzZXQpLCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAg
ICAgICAgc2hhZG93ID0gc2hhZG93LT5uZXh0KCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKaW5kZXggODg1ZDgyNmVlOWU3OTZmNGI1YzViNTgz
M2Y3MWEwMjhjNDU0MWE3YS4uZmU4ODY5YzE5ZTVmOGQ0M2I3ZmExNmU0MDFiNGZiYzZkY2Y3ZWVm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCkBAIC03NCw3ICs3
NCw3IEBAIFNoYWRvd0FwcGxpZXI6OlNoYWRvd0FwcGxpZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csCiAgICAgfQogCiAgICAgaWYgKCFtX2F2b2lk
RHJhd2luZ1NoYWRvdykKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0LnNldERy
b3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xv
ciB9KTsKIH0KIAogaW5saW5lIGJvb2wgU2hhZG93QXBwbGllcjo6aXNMYXN0U2hhZG93SXRlcmF0
aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3Bw
CmluZGV4IDdlZDUzN2M5Mjc5Mzc3MGY0NDg4YWUyOWRmNDA3MjdkN2ViMWEzYTkuLjZjNzMwZWYw
N2U0OGM3ZWNmOGM0MGUzN2UwMDM0NWNmYWI1NmM2OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAtNjksNyArNjksNyBAQCBGbG9hdFJl
Y3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlVXBkYXRlZFN0cm9rZUJvdW5kaW5nQm94KCkgY29u
c3QKIHN0YXRpYyB2b2lkIHVzZVN0cm9rZVN0eWxlVG9GaWxsKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKIHsKICAgICBpZiAoYXV0byBncmFkaWVudCA9IGNvbnRleHQuc3Ryb2tlR3JhZGllbnQo
KSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0
YXRlKCkuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIGNvbnRleHQuc2V0
RmlsbEdyYWRpZW50KCpncmFkaWVudCwgY29udGV4dC5zdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsK
ICAgICBlbHNlIGlmIChQYXR0ZXJuKiBwYXR0ZXJuID0gY29udGV4dC5zdHJva2VQYXR0ZXJuKCkp
CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbFBhdHRlcm4oKnBhdHRlcm4pOwogICAgIGVsc2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmlu
ZGV4IGNjMzhlYzcwMzBlNjBjZTE3NTliMTMyODdkZTI1ZjczZDU2NWM4NTguLmI2NTg2OGQxYmQz
NGM5MGQ0YmJmZGQ0NzdhZDJjNzQyODJhMDU2YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtNTAxLDEwICs1MDEsMTIgQEAg
dm9pZCBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjYW5TZXRM
aW5lRGFzaCkKLSAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goZGFzaEFycmF5LCBsZW5n
dGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSkgKiBz
Y2FsZUZhY3Rvcik7CisgICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShk
YXNoQXJyYXkpLCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURh
c2hPZmZzZXQoKSkgKiBzY2FsZUZhY3RvciB9KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAgICAgfQorCisgICAgY29udGV4
dC5hcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCiB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OnN0eWxl
Q2hhbmdlZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJp
bmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5n
Q29udGV4dC5jcHAKaW5kZXggMmZiOGYzM2E4NzBkZmNjZWI2MmUxNDk2NTZiMTQ0MzcyMmViZWEy
ZC4uZjU3OWU1YTc1ZmU5MTBmNmU1YjU4YTlhZWZiNjgzNTg5NjIyMTBlOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBA
IC0xMTUsMTIgKzExNSwxMiBAQCB2b2lkIFNWR1JlbmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1Jl
bmRlclNWR0NvbnRlbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIFBhaQogICAgICAgICBpZiAo
b3BhY2l0eSA8IDEgfHwgaGFzQmxlbmRNb2RlIHx8IGlzb2xhdGVNYXNrRm9yQmxlbmRpbmcgfHwg
aGFzSXNvbGF0aW9uKSB7CiAKICAgICAgICAgICAgIGlmIChoYXNCbGVuZE1vZGUpCi0gICAgICAg
ICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9w
YWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgc3R5bGUuYmxlbmRNb2Rl
KCkpOworICAgICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRl
TW9kZSh7IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIHN0eWxl
LmJsZW5kTW9kZSgpIH0pOwogCiAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAKICAgICAgICAgICAgIGlmIChoYXNCbGVu
ZE1vZGUpCi0gICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3Np
dGVPcGVyYXRpb24obV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwg
QmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0
KCkuc2V0Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY29tcG9zaXRlT3Bl
cmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsIH0pOwogCiAgICAgICAgICAgICBtX3JlbmRlcmlu
Z0ZsYWdzIHw9IEVuZE9wYWNpdHlMYXllcjsKICAgICAgICAgfQpAQCAtMjczLDcgKzI3Myw3IEBA
IGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZChSZWZQdHI8SW1hZ2VC
dWZmZXI+JiBpbWFnZUJ1ZmZlcikKIAogICAgIC8vIEludmFsaWRhdGUgYW4gZXhpc3RpbmcgYnVm
ZmVyIGlmIHRoZSBzY2FsZSBpcyBub3QgY29ycmVjdC4KICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsK
LSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250ZXh0
KCkuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7
CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4
dCgpLmdldENUTSgpOwogICAgICAgICBJbnRTaXplIGV4cGFuZGVkQm91bmRpbmdCb3ggPSBleHBh
bmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgSW50U2l6ZSBidWZmZXJT
aXplKHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0
cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRp
bmdCb3guaGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxlKCkpKSk7CiAgICAgICAgIGlmIChidWZm
ZXJTaXplICE9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggNGRkN2Y4MGUzNzc3OTg3ZGNiNzBjMWEzYzhhODdj
ZDhhNGZkNmZiOS4uY2Q4OGFkZjA4ZGRhODAzYmZkOTNmODk1Nzc0MDc2ODZhYzRjNTQ2MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0yNjksMTQgKzI2OSwx
NCBAQCBJbWFnZURyYXdSZXN1bHQgU1ZHSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlYwogICAgIEFTU0VSVCh2aWV3KTsKIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlv
bnMuYmxlbmRNb2RlKCkpOworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMu
Y29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKICAgICBjb250ZXh0
LmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSk7CiAKICAgICBmbG9hdCBhbHBoYSA9IGNv
bnRleHQuYWxwaGEoKTsKICAgICBib29sIGNvbXBvc2l0aW5nUmVxdWlyZXNUcmFuc3BhcmVuY3lM
YXllciA9IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSAhPSBDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlT3ZlciB8fCBvcHRpb25zLmJsZW5kTW9kZSgpICE9IEJsZW5kTW9kZTo6Tm9ybWFsIHx8
IGFscGhhIDwgMTsKICAgICBpZiAoY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5zcGFyZW5jeUxheWVy
KSB7CiAgICAgICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci0gICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRl
TW9kZSh7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9
KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhvbm9yIG9wdGlvbnMub3JpZW50
YXRpb24oKSwgc2luY2UgSW1hZ2VCaXRtYXAncyBmbGlwWSBoYW5kbGluZyByZWxpZXMgb24gaXQu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEwMDEKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCA1NDM4MTgyZGRlODc2M2ViYWQzOGYxOTJkZjc5NWFh
MDYwYjY1MWJiLi44ZGEzOTBmNmRhNzBlMzc5NTUwYTU3MmUwOWUwODQxMTg5YzJkZGVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC03NCwzMSArNzQsNiBAQCB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJlc3RvcmUoKQogICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxp
c3Q6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6dHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6
VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpy
b3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6Um90YXRl
KGFuZ2xlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTY2Fs
ZShzY2FsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0
OjpTZXRDVE0oY3RtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y29u
Y2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pCi17Ci0gICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE0oY3RtKSk7Ci19Ci0KIHZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6c2V0SW5saW5lRmlsbENvbG9yKERpc3BsYXlMaXN0OjpTZXRJbmxp
bmVGaWxsQ29sb3ImJiBpdGVtKQogewogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CkBA
IC0xMjgsNDAgKzEwMywxNSBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldFN0
YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSYmIGl0ZW0pCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH07CiAKLSAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZUNoYW5nZSgp
Lm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUlt
YWdlKGl0ZW0uc3RhdGUoKS5zdHJva2VCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlQ2hhbmdlKCkubV9z
dGF0ZS5maWxsUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0
ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIGhhbmRsZUl0ZW0o
RGlzcGxheUxpc3Q6OlNldExpbmVDYXAobGluZUNhcCkpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OnNldExpbmVEYXNoKERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmIGl0
ZW0pCi17Ci0gICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsKLX0KLQotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAg
ICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbihsaW5lSm9pbikpOwotfQotCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQp
Ci17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsZWFyU2hhZG93KCkKLXsKLSAg
ICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDbGVhclNoYWRvdygpKTsKLX0KLQogdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDbGlwKHJlY3QpKTsKQEAgLTM3MSwxNCArMzIxLDkg
QEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUmVjdFdpdGhHcmFkaWVudChE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3IKICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkp
OwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5
TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJs
ZW5kTW9kZSkpOworICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChy
ZWN0LCBjb2xvcikpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXIuaAppbmRleCAzYmJhZjc2NWQwNWY0NGFiZjRkOTYxZTc2NmNlNjU0Njk4ZWRl
Mjk0Li44MTg4OTY2YWZmYTcwOWU2ZmQwYTMxYmZjYTZjM2U3MTg1NjVjNThlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyLmgKQEAgLTU5LDIwICs1OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUoKTsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZSk7Ci0gICAgdm9pZCBzY2Fs
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNjYWxlKTsKLSAgICB2b2lkIHNldENUTShjb25z
dCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2b2lkIGNvbmNhdGVuYXRlQ1RNKGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwogICAgIHZvaWQgc2V0SW5saW5lRmlsbENv
bG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3ImJik7CiAgICAgdm9p
ZCBzZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ry
b2tlQ29sb3ImJik7CiAgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQpOwogICAgIHZv
aWQgc2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlJiYpOwotICAgIHZvaWQg
c2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmKTsKLSAgICB2b2lkIHNldExpbmVKb2luKFdl
YkNvcmU6OkxpbmVKb2luKTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpOwotICAgIHZv
aWQgY2xlYXJTaGFkb3coKTsKICAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CkBAIC05Nyw4ICs4
Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudCYmKTsKLSAgICB2b2lk
IGZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1v
ZGUpOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7CisgICAg
dm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
ICAgICB2b2lkIGZpbGxMaW5lKGNvbnN0IFdlYkNvcmU6OkxpbmVEYXRhJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCmluZGV4IDI4MDJmZmU4ZjgzOTdjMGVk
NGRmMTIxYTAxN2ZlNzgxMDhmZjZjMjAuLjQxNGMzMWExMzIwYzBiMmU3ODZiYzhkOWY2NTk4MTAy
ZDg3MGY0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmlu
CkBAIC0yNSw0NyArMjUsMzUgQEAKIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIFNhdmUoKQogICAgIFJlc3RvcmUoKQotICAg
IFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAg
ICBTY2FsZShXZWJDb3JlOjpGbG9hdFNpemUgc2NhbGUpCi0gICAgU2V0Q1RNKFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSBjdG0pCi0gICAgQ29uY2F0ZW5hdGVDVE0oV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIGN0bSkKKwogICAgIFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbENvbG9yIGl0ZW0pCiAgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yIGl0ZW0pCiAgICAgU2V0U3Ry
b2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBTZXRTdGF0ZShXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0U3RhdGUgaXRlbSkKLSAgICBTZXRMaW5lQ2FwKGVudW06dWludDhfdCBXZWJD
b3JlOjpMaW5lQ2FwIGxpbmVDYXApCi0gICAgU2V0TGluZURhc2goV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVEYXNoIGl0ZW0pCi0gICAgU2V0TGluZUpvaW4oZW51bTp1aW50OF90IFdlYkNv
cmU6OkxpbmVKb2luIGxpbmVKb2luKQotICAgIFNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi0g
ICAgQ2xlYXJTaGFkb3coKQorI2lmIFVTRShDRykKKyAgICBBcHBseVN0cm9rZVBhdHRlcm4oKQor
ICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorI2VuZGlmCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBzY2FsZUZhY3RvcikKKworICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSkKKyAgICBFbmRUcmFuc3BhcmVuY3lMYXllcigpCisKICAgICBDbGlwKFdlYkNvcmU6
OkZsb2F0UmVjdCByZWN0KQorICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1
aW50OF90IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQogICAgIENsaXBPdXQoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6
RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKICAgICBDbGlwT3V0VG9QYXRoKFdlYkNvcmU6OlBh
dGggcGF0aCkKLSAgICBDbGlwUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGVudW06dWludDhfdCBX
ZWJDb3JlOjpXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCi0gICAgRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IHNvdXJjZUlt
YWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCwgSVBDOjpG
aWx0ZXJSZWZlcmVuY2UgZmlsdGVyKQotICAgIERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpG
bG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3Ry
dWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd05hdGl2
ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZp
ZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFnZVNpemUsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0
UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBh
aW50aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6
U3lzdGVtSW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25S
ZWN0KQotICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6
RmxvYXRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtLCBX
ZWJDb3JlOjpGbG9hdFBvaW50IHBoYXNlLCBXZWJDb3JlOjpGbG9hdFNpemUgc3BhY2luZywgc3Ry
dWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAgQmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkK
LSAgICBEcmF3UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tu
ZXNzKQotICAgIERyYXdMaW5lKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpG
bG9hdFBvaW50IHBvaW50MikKLSAgICBEcmF3TGluZXNGb3JUZXh0KFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3TGluZXNGb3JUZXh0IGl0ZW0pCi0gICAgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgc3RydWN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQotICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0
KQotICAgIERyYXdQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBEcmF3Rm9jdXNSaW5nUGF0
aChXZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6
OkNvbG9yIGNvbG9yKQotICAgIERyYXdGb2N1c1JpbmdSZWN0cyhWZWN0b3I8V2ViQ29yZTo6Rmxv
YXRSZWN0PiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3Ig
Y29sb3IpCisgICAgQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0
IGRlc3RpbmF0aW9uUmVjdCkKKworICAgIENsZWFyUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dCkKKwogICAgIEZpbGxSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogICAgIEZpbGxSZWN0
V2l0aENvbG9yKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikK
ICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoR3JhZGllbnQgaXRlbSkKLSAgICBGaWxsQ29tcG9zaXRlZFJlY3QoV2ViQ29yZTo6RmxvYXRS
ZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6Q29t
cG9zaXRlT3BlcmF0b3Igb3AsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVuZE1vZGUgYmxlbmRN
b2RlKQotICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJlY3Qs
IFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6QmxlbmRNb2RlIGJs
ZW5kTW9kZSkKKyAgICBGaWxsUm91bmRlZFJlY3QoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCBy
ZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCByb3VuZGVk
SG9sZVJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorCisgICAgRmlsbEVsbGlwc2UoV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QpCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgRmls
bExpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRhdGEpCiAgICAgRmlsbEFyYyhzdHJ1Y3Qg
V2ViQ29yZTo6QXJjRGF0YSBkYXRhKQpAQCAtNzMsMTEgKzYxLDEwIEBAIG1lc3NhZ2VzIC0+IFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIEZpbGxC
ZXppZXJDdXJ2ZShzdHJ1Y3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhIGRhdGEpCiAjZW5kaWYK
ICAgICBGaWxsUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0gICAgRmlsbEVsbGlwc2UoV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ29udmVydFRvTHVtaW5hbmNlTWFzaygpCi0gICAgVHJh
bnNmb3JtVG9Db2xvclNwYWNlKFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQotICAgIFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllcklkZW50aWZp
ZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uKQorCiAgICAgU3Ry
b2tlUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorCisgICAg
U3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKICAgICBTdHJva2VMaW5lKHN0cnVjdCBXZWJDb3JlOjpMaW5lRGF0YSBkYXRh
KQogICAgIFN0cm9rZUFyYyhzdHJ1Y3QgV2ViQ29yZTo6QXJjRGF0YSBkYXRhKQpAQCAtODUsMTMg
KzcyLDMxIEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291
bnRlZCBTdHJlYW0gewogICAgIFN0cm9rZUJlemllckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXpp
ZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRpZgogICAgIFN0cm9rZVBhdGgoV2ViQ29yZTo6UGF0aCBw
YXRoKQotICAgIFN0cm9rZUVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xl
YXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotI2lmIFVTRShDRykKLSAgICBBcHBseVN0
cm9rZVBhdHRlcm4oKQotICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorCisgICAgRHJhd1JlY3QoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICBEcmF3TGlu
ZShXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDIp
CisKKyAgICBEcmF3RWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKyAgICBEcmF3UGF0
aChXZWJDb3JlOjpQYXRoIHBhdGgpCisKKyAgICBEcmF3Rm9jdXNSaW5nUGF0aChXZWJDb3JlOjpQ
YXRoIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9y
KQorICAgIERyYXdGb2N1c1JpbmdSZWN0cyhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0
cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAg
ICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNlSW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIpCisgICAg
RHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdl
YkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09w
dGlvbnMgb3B0aW9ucykKKyAgICBEcmF3U3lzdGVtSW1hZ2UoUmVmPFdlYkNvcmU6OlN5c3RlbUlt
YWdlPiBzeXN0ZW1JbWFnZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKKyAg
ICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNv
cmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCisgICAgRHJhd1BhdHRlcm4oV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6
RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0sIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdl
YkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09w
dGlvbnMgb3B0aW9ucykKKyNpZiBFTkFCTEUoVklERU8pCisgICAgUGFpbnRGcmFtZUZvck1lZGlh
KFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9h
dFJlY3QgZGVzdGluYXRpb24pCiAjZW5kaWYKLSAgICBBcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlRmFjdG9yKQorCisgICAgRHJhd0dseXBocyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0dseXBocyBpdGVtKQorICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKKyAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCisKKyAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKKyAgICBUcmFu
c2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCiAgICAgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRp
ZmllciBpZGVudGlmaWVyKQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eS5jcHAKaW5kZXggODU3N2NiYmRlNmQzOTAxZDM0NzA3NjFlZDMwZjc5ZDk4ZTgyYjk4
ZC4uNmNmYmFiY2E3YmNmYmVkYzU5NTQ4M2U4ZWViMWQ1YWIxMjA5NjZhOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcApAQCAtMzIsMzYgKzMyLDIxIEBA
CiAjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlck1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvTWVkaWFQbGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5JiByZW5kZXJpbmdCYWNrZW5kLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlw
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6
RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKLSAgICA6IERpc3Bs
YXlMaXN0OjpSZWNvcmRlcih7IH0sIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVj
dERyYXdHbHlwaHMpCisgICAgOiBEaXNwbGF5TGlzdDo6UmVjb3JkZXIoaW5pdGlhbENsaXAsIGlu
aXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGVzdGluYXRpb25CdWZm
ZXJJZGVudGlmaWVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKQog
ICAgICwgbV9pbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikKICAgICAsIG1fcmVuZGVyaW5nQmFja2Vu
ZChyZW5kZXJpbmdCYWNrZW5kKQogewogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q29udmVydFRvTHVtaW5hbmNlTWFzaygpKTsKLX0K
LQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JT
cGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCi17
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNmb3Jt
VG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKLX0KLQogUmVuZGVyaW5nTW9kZSBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewogICAgIHJldHVy
biBtX2ltYWdlQnVmZmVyID8gbV9pbWFnZUJ1ZmZlci0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKQEAgLTc3LDMxICs2Miw2IEBAIHZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSZXN0b3JlKCkKICAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSZXN0b3JlKCkpOwogfQogCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJh
bnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpSb3RhdGUoYW5nbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUp
Ci17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2NhbGUo
c2NhbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRDVE0odHJhbnNmb3JtKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0
ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb25jYXRlbmF0ZUNUTSh0cmFuc2Zvcm0p
KTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldElu
bGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKIHsKICAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxp
c3Q6OlNldElubGluZUZpbGxDb2xvciB7IGNvbG9yIH0pKTsKQEAgLTExNyw5MiArNzcsMjYgQEAg
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldFN0cm9rZVRoaWNr
bmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6U2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcykpOwogfQogCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBmbGFncykKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUgeyBzdGF0ZSwgZmxhZ3MgfSkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUNh
cChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGFy
cmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OlNldExpbmVEYXNoKERpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCB7IGFy
cmF5LCBkYXNoT2Zmc2V0IH0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldExpbmVKb2luKGxpbmVKb2lu
KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRN
aXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OlNldE1pdGVyTGltaXQobGltaXQpKTsKLX0KLQotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyU2hhZG93KCkKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVhclNoYWRvdygpKTsKLX0K
LQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkNsaXAocmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChyZWN0KSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb25SZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0VG9QYXRo
KHBhdGgpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRl
ciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChzb3VyY2VJbWFnZSkKLSAgICAgICAgaWRlbnRpZmll
ciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVm
ZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3RhdGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlIHsg
c3RhdGUgfSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50
LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3R2x5
cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291
bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cykpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIs
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJbWFnZShpbWFnZUlkZW50aWZpZXIsIGltYWdl
U2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseVN0cm9rZVBhdHRlcm4oKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3U3lzdGVtSW1hZ2Uo
U3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQ
YXR0ZXJuKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpEcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCkpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RmlsbFBhdHRlcm4o
KSk7CiB9CisjZW5kaWYgLy8gVVNFKENHKQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdHRlcm4oaW1h
Z2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKSk7CiB9CiAKIHZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCkBAIC0yMTUsNDQgKzEwOSwzNCBAQCB2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVy
KCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKLXsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UmVjdChyZWN0LCB3aWR0aCkp
OwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmUo
cG9pbnQxLCBwb2ludDIpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlv
biwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpEcmF3TGluZXNGb3JUZXh0KERpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0IHsgYmxvY2tM
b2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91Ymxl
TGluZXMgfSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkNsaXAocmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSBydWxlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwUGF0aChwYXRoLCBydWxlKSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0VsbGlwc2UocmVjdCkpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXQocmVj
dCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdGgocGF0aCkpOworICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1BhdGgo
cGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgs
IG9mZnNldCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZz
ZXQsIGNvbG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Q2xlYXJSZWN0KHJlY3QpKTsKIH0KIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI3MCwyMyAr
MTU0LDIyIEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxs
UmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmCiAgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJlY3RXaXRoR3JhZGllbnQoRGlzcGxheUxpc3Q6
OkZpbGxSZWN0V2l0aEdyYWRpZW50IHsgcmVjdCwgZ3JhZGllbnQgfSkpOwogfQogCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6RmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgbW9k
ZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxS
b3VuZGVkUmVjdChyb3VuZGVkUmVjdCwgY29sb3IpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgbW9kZSkK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5kZWRSZWN0KHJvdW5kZWRSZWN0LCBj
b2xvciwgbW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOwog
fQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7
CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJiBkYXRhKQog
ewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxMaW5l
KGRhdGEpKTsKQEAgLTMwNiw3ICsxODksNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YQogewog
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxCZXppZXJD
dXJ2ZShkYXRhKSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAog
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCkBAIC0zMTQsMjMgKzE5NiwxNyBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUGF0aChwYXRoKSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6RmlsbEVsbGlwc2UocmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9yTWVkaWEocGxheWVyLmlkZW50aWZp
ZXIoKSwgZGVzdGluYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpTdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogfQogCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZVJlY3Qo
cmVjdCwgd2lkdGgpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpTdHJva2VFbGxpcHNlKHJlY3QpKTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tl
TGluZShjb25zdCBMaW5lRGF0YSYgZGF0YSkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VMaW5lKGRhdGEpKTsKQEAgLTM1MCw3ICsyMjYsNiBA
QCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVy
Q3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUJlemllckN1cnZlKGRhdGEpKTsKIH0KLQogI2VuZGlm
IC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzU4LDMz
ICsyMzMsODQgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0
cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpTdHJva2VQYXRoKHBhdGgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUVsbGlwc2Uo
cmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRy
YXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVhclJlY3QocmVjdCkp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5l
KHBvaW50MSwgcG9pbnQyKSk7CiB9CiAKLSNpZiBVU0UoQ0cpCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdF
bGxpcHNlKHJlY3QpKTsKK30KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseVN0cm9rZVBhdHRlcm4oKSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdGgo
cGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
QXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RmlsbFBhdHRlcm4oKSk7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1BhdGgocGF0
aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKIH0KIAotI2VuZGlmIC8vIFVTRShDRykKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMo
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcikpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3Ioc2NhbGVGYWN0b3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Cit9CisKK3ZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAg
IGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXIoV1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBJUEM6
OkZpbHRlclJlZmVyZW5jZShSZWY8RmlsdGVyPiB7IGZpbHRlciB9KSkpOworfQorCit2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJbWFnZShpbWFn
ZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30K
Kwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1J
bWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7Cit9CisKK3Zv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJ
ZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6UGFpbnRGcmFtZUZvck1l
ZGlhKGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKSk7Cit9CisjZW5kaWYKKwordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNo
b3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNwbGF5TGlzdDo6RHJhd0dseXBocyB7
IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSB9KSk7Cit9
CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQoreworICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lc0ZvclRl
eHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBGbG9hdFBvaW50KCksIHRvRmxvYXRT
aXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyB9KSk7
Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUmIHN0eWxlKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsK
IH0KIAogYm9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNl
VXNlKE5hdGl2ZUltYWdlJiBpbWFnZSkKQEAgLTQzNCwxMSArMzYwLDYgQEAgYm9vbCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNlVXNlKEZvbnQmIGZvbnQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpmbHVzaENvbnRleHQoR3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIp
Ci17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmx1c2hD
b250ZXh0KGlkZW50aWZpZXIpKTsKLX0KLQogUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZSwg
c3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkgY29uc3QKIHsK
ICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpIHsKQEAgLTQ2NCw2ICszODUs
MjEgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb24KICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
OjpjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBzY2FsZUZhY3RvcigpLCBjb2xvclNwYWNl
LCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QpOwogfQogCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q29udmVydFRvTHVtaW5hbmNl
TWFzaygpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnRyYW5z
Zm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKK30KKwordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29udGV4dChHcmFwaGljc0NvbnRleHRGbHVz
aElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRleHQoaWRlbnRpZmllcikpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaAppbmRleCA5YjMzYTA2N2ZkMTZiY2Nm
MTQwNDJjMTk3NGRkNjkxOTQyMjYyNDY4Li5mMmFkOGQwYWE0NTg1ODlhZWU4MTkwN2Q5YzkwODk2
ZDM0YjZmNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgK
QEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk7CiAKIGNsYXNzIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eSA6
IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXIgeworICAgIGZyaWVuZCBjbGFz
cyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7CiBwdWJsaWM6CiAgICAgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5KFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29u
c3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRl
Y29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKICAgICB+UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5KCkgPSBkZWZhdWx0OwpAQCAtNTAsNjMgKzUxLDM5IEBAIHB1YmxpYzoKICAgICB2b2lk
IGZsdXNoQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIpIGZp
bmFsOwogCiBwcml2YXRlOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZW5k
KFQmJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbmRlcmluZ0Jh
Y2tlbmQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbmVlZHNGbHVzaCA9IHRy
dWU7Ci0gICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+c2VuZFRvU3RyZWFtKFdURk1vdmUobWVz
c2FnZSksIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKLSAgICB9Ci0KLSAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOwotCiAgICAgV2ViQ29yZTo6UmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIHJlY29y
ZFNhdmUoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFJlc3RvcmUoKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZFJvdGF0ZShmbG9hdCBhbmdsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTY2FsZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldENUTShjb25zdCBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENvbmNhdGVu
YXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworCiAgICAgdm9p
ZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6U1JHQkE8dWludDhfdD4pIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoV2ViQ29yZTo6U1JHQkE8dWlu
dDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJh
eSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUpvaW4o
V2ViQ29yZTo6TGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1pdChm
bG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclNoYWRvdygpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmKSBm
aW5hbDsKKworI2lmIFVTRShDRykKKyAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigp
IGZpbmFsOworICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworI2VuZGlm
CisKKyAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwor
ICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKwogICAgIHZvaWQg
cmVjb3JkQ2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJl
Y29yZENsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgZmlu
YWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CiAg
ICAgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsK
LSAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpX
aW5kUnVsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBXZWJDb3JlOjpGaWx0ZXImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdHbHlw
aHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgq
LCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhp
bmdNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09w
dGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdl
KFdlYkNvcmU6OlN5c3RlbUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAg
dm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmREcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24s
IGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBX
ZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChj
b25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhj
b25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwVG9J
bWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRGaWxsUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxS
ZWN0V2l0aENvbG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJs
ZW5kTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6
QmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsK
ICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAg
ICB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IFdlYkNvcmU6OkxpbmVEYXRhJikgZmluYWw7CiAg
ICAgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IFdlYkNvcmU6OkFyY0RhdGEmKSBmaW5hbDsKQEAg
LTExNCw5ICs5MSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZl
KGNvbnN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9p
ZCByZWNvcmRGaWxsUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmRGaWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
U3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisKKyAg
ICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKICAgICB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEm
KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25zdCBXZWJDb3JlOjpBcmNEYXRh
JikgZmluYWw7CkBAIC0xMjQsMTMgKzEwMiwyOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3Jk
U3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7
CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCByZWNvcmRBcHBseVN0cm9r
ZVBhdHRlcm4oKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5h
bDsKKworICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3Qg
V2ViQ29yZTo6UGF0aCYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0
aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0
cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERy
YXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
V2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOwor
ICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25z
JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoV2ViQ29yZTo6U3lzdGVt
SW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CisgICAg
dm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKFdl
YkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0
IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
V2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkg
ZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKKyAgICB2b2lkIHJl
Y29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKIAogICAgIGJv
b2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmKSBmaW5hbDsKICAgICBi
b29sIHJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6OkltYWdlQnVmZmVyJikgZmluYWw7CkBAIC0x
NDEsNiArMTM0LDE4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVy
PiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29u
c3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgc3RkOjpvcHRpb25hbDxXZWJDb3Jl
OjpSZW5kZXJpbmdNZXRob2Q+KSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNlbmQoVCYmIG1lc3NhZ2UpCisgICAgeworICAgICAgICBp
ZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5k
LT5zZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50
aWZpZXIpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCkgZmluYWw7CisKICAgICBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
bV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXI7CiAgICAgV2Vha1B0cjxXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKICAgICBXZWFrUHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eT4gbV9yZW5kZXJpbmdCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IDFkNjQzYjZiNDI4OGQwOGUw
MzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcuLjA3OTkzYjM4MGYxZWE3ZDM0OWRkN2ViZmMxNjBjODA0
ZGFkNDNlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Zp
bmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHAKQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIEZpbmRDb250cm9sbGVy
OjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBjbwogCiAgICAgLy8gRHJhdyB3aGl0ZSBmcmFtZXMgYXJvdW5kIHRoZSBob2xlcy4KICAgICAv
LyBXZSBkb3VibGUgdGhlIHRoaWNrbmVzcyBiZWNhdXNlIGhhbGYgb2YgdGhlIHN0cm9rZSB3aWxs
IGJlIGVyYXNlZCB3aGVuIHdlIGNsZWFyIHRoZSBob2xlcy4KLSAgICBncmFwaGljc0NvbnRleHQu
c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93
Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXREcm9wU2hh
ZG93KHsgRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVy
UmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoQ29sb3I6OndoaXRlKTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNz
KGJvcmRlcldpZHRoICogMik7CiAgICAgZm9yIChhdXRvJiBwYXRoIDogd2hpdGVGcmFtZVBhdGhz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRU
ZXh0UmFuZ2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKaW5kZXggZjE2Zjc5NmUwNDdlOTkxOTcy
YzBlZDFmNGFlMTEzY2UxNjU2NWMxMC4uNDllMDBiZTMzN2VhZmVlMTI5M2VmMDc3YWRmNjE3Y2Rh
ZTNkNGExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
Rm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCkBAIC0yNDcsNyArMjQ3
LDcgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KFdlYkNvcmU6
OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGgKIAogICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgZ3JhcGhp
Y3NDb250ZXh0LnNldFNoYWRvdyhXZWJDb3JlOjpGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hh
ZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAgICBncmFwaGlj
c0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRY
LCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IgfSk7CiAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKGZvdW5kQ29sb3IpOwogICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoaW5kaWNhdG9yQm9yZGVyV2lkdGggKiAyKTsKICAg
ICBmb3IgKGF1dG8mIHBhdGggOiBmb3VuZEZyYW1lUGF0aHMpCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTk3YzIwYTRmZjViZTQxZDljMzIwNTdj
NTA4MWNmZmM0YjgxYTRhNi4uMmFmODFjMmExZmM1ZjY4YmEwNDBmM2QwMTRmNDIxN2Y0ZWIzNjFl
MiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDIyLTAzLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUu
Y29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3JhcGhpY3NDb250ZXh0U3RhdGUgc2hvdWxk
IGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9ybSBjb250ZXh0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMi0wMy0xNCAgSm9uYXRoYW4gQmVkYXJkICA8
amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2dpdC13ZWJraXRdIEhhbmRsZSBjb21wYXJp
bmcgVXNlciBhbmQgQ29udHJpYnV0b3IgdG8gTm9uZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NH
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5kZXggOGU0MWM1YTczYWUzNjg0Y2VkZGYxZjk0Zjlm
MTcxODk1MzUxNGM5Zi4uZWJlNjQ0ODcxZTI4ZjUxOWNkMjYxMjBiOGE4Mjc4ODZjMDE5MDJiZiAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCkBAIC01
NCw3ICs1NCw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCYXNpYykK
ICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmltYXJ5Q29udGV4dChwcmltYXJ5Q0dDb250ZXh0Lmdl
dCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3Jk
ZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAs
IGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNl
Y29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgs
IGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHBy
aW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtOTAsMTAgKzkwLDEwIEBAIFRF
U1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCYXNpYykKIFRFU1QoQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUZXh0KQogewogICAgIEluTWVtb3J5RGlzcGxheUxpc3Qg
cHJpbWFyeURpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBwcmltYXJ5Q29udGV4dChwcmlt
YXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4
dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHByaW1hcnlDb250ZXh0KHByaW1hcnlE
aXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkp
OwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBzZWNvbmRhcnlEaXNwbGF5TGlzdDsKLSAgICBS
ZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlEaXNwbGF5TGlzdCwgeyB9LCBG
bG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBS
ZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlEaXNwbGF5TGlzdCwgRmxvYXRS
ZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwog
CkBAIC0yMDEsNyArMjAxLDcgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMs
IEJvcmRlcnMpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgcHJpbWFyeUNvbnRleHQocHJpbWFyeUNH
Q29udGV4dC5nZXQoKSk7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0Owot
ICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0
UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29y
ZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29u
dGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKQEAgLTIyOCw3ICsy
MjgsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgVHJhbnNmb3JtZWRD
bGlwKQogICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQgPSBwcmltYXJ5Q29udGV4
dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRl
ckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAw
LCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRETChk
aXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgR3JhcGhpY3NDb250
ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5Q29udGV4dERMOwogCiAgICAgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQp
OwpAQCAtMjg3LDE1ICsyODcsMTUgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVz
dHMsIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5
Q29udGV4dCA9IHByaW1hcnlDb250ZXh0Q0c7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRp
c3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxp
c3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgeyB9KTsKKyAgICBSZWNvcmRlcklt
cGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAx
MDApKTsKICAgICBHcmFwaGljc0NvbnRleHQmIHNlY29uZGFyeUNvbnRleHQgPSBzZWNvbmRhcnlD
b250ZXh0REw7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29u
dGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKICAgICBjdHguYXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cigyKTsKIAotICAgIGF1dG8gcHJpbWFyeUNUTSA9IHByaW1hcnlDb250ZXh0LmdldENUTShHcmFw
aGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VT
Y2FsZSk7Ci0gICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlDb250ZXh0LmdldENUTShH
cmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVseUluY2x1ZGVEZXZp
Y2VTY2FsZSk7CisgICAgYXV0byBwcmltYXJ5Q1RNID0gcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKCk7
CisgICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlDb250ZXh0LmdldENUTSgpOwogCiAg
ICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueFNjYWxlKCksIHNlY29uZGFyeUNUTS54U2NhbGUoKSk7
CiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueVNjYWxlKCksIHNlY29uZGFyeUNUTS55U2NhbGUo
KSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvR3Jh
cGhpY3NDb250ZXh0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY2cvR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5kZXggMjQ3MzU4MGYxOTBlMGZkNjc0
YzM2N2RhNDdjOWYxOTJiYTI0ODVlNC4uMjE1YzE3YzY2NTdhZWRhNmE2ZTJjZDBhZTBjOWM5MjZm
M2JkODJiMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2Nn
L0dyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcApAQCAtNTIsNyArNTIsNyBA
QCBURVNUKEdyYXBoaWNzQ29udGV4dFRlc3RzLCBEcmF3TmF0aXZlSW1hZ2VEb2VzTm90TGVha0Nv
bXBvc2l0ZU9wZXJhdG9yKQogICAgIEdyYXBoaWNzQ29udGV4dENHIGN0eChjZ0NvbnRleHQuZ2V0
KCkpOwogCiAgICAgRVhQRUNUX0VRKGN0eC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQ29tcG9zaXRl
T3BlcmF0b3I6OlNvdXJjZU92ZXIpOwotICAgIEVYUEVDVF9FUShjdHguYmxlbmRNb2RlT3BlcmF0
aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICBFWFBFQ1RfRVEoY3R4LmJsZW5kTW9kZSgp
LCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiAKICAgICBhdXRvIGdyZWVuUGl4ZWxDRyA9IGdyZWVuSW1h
Z2UoKTsKICAgICBhdXRvIGdyZWVuUGl4ZWxOYXRpdmUgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKGdy
ZWVuUGl4ZWxDRy5nZXQoKSk7CkBAIC03MSw3ICs3MSw3IEBAIFRFU1QoR3JhcGhpY3NDb250ZXh0
VGVzdHMsIERyYXdOYXRpdmVJbWFnZURvZXNOb3RMZWFrQ29tcG9zaXRlT3BlcmF0b3IpCiAgICAg
RVhQRUNUX0VRKHByaW1hcnlEYXRhWzJdLCAwKTsKIAogICAgIEVYUEVDVF9FUShjdHguY29tcG9z
aXRlT3BlcmF0aW9uKCksIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyKTsKLSAgICBFWFBF
Q1RfRVEoY3R4LmJsZW5kTW9kZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAg
RVhQRUNUX0VRKGN0eC5ibGVuZE1vZGUoKSwgQmxlbmRNb2RlOjpOb3JtYWwpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTE3N2VkOTI5ODBkZDhkNGJhNGJmM2Fm
M2QxNDEwNmE2MmZkNmI4Ny4uYzRmOTZjMWI4Yzg3MmNkOGE4MDU4ZDIxYzQ0YTZkZTdlMTIzMzlh
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAzLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3JhcGhpY3NDb250ZXh0
U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9ybSBjb250ZXh0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3MjgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXls
aXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNw
bGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQ6CisK
IDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUg
cm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRl
bnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAppbmRleCA1MTFiN2MwYzU0ZDMz
MjE2YjdjNmVhZjA0M2E3NWMxNjc2NmQwNDI3Li5kYmY1NGIzZWEyMDRlMTkyNGJkNDM1ZDUxNzM2
ZGM3MzQ3NzAyY2ZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CkBAIC0xLDE3ICsxLDEzIEBA
CiAKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCiAoc2F2ZSkKIChzZXQtc3Rh
dGUKLSAgKGNoYW5nZS1mbGFncyA1MTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRv
dy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93LWNvbG9yICMwMDAwMDApCi0g
IChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0Cisg
IChjaGFuZ2UtZmxhZ3MgW2Ryb3Atc2hhZG93XSkKKyAgKGRyb3Atc2hhZG93CisgICAgKHNoYWRv
dy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAg
ICAoc2hhZG93LWNvbG9yICMwMDAwMDApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMg
MCkpKQorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4
MTAwKQotICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92
ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3
KQorICAoY29sb3IgIzAwMDBGRikgZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogKHJl
c3RvcmUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1
ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4
dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAppbmRleCAzODZlMzk0MTE4NWYw
OWEzYzY4ZWM2YzJhZTg4ZGYxMWM3MGIwYTY5Li41Zjc4YjhjMzUwNWM5ZTgwMzk5YmQ2MDVhOWJl
OTU1YWIwOWI3MDVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKQEAgLTEsMjEg
KzEsMTQgQEAKIAotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAyMi4wMCkpCi0oY29uY2F0
ZW50YXRlLWN0bQotICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAs
LTE4LjMwKX0pKQogKHNhdmUpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgNTEyKQotICAo
c2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkK
LSAgKHNoYWRvdy1jb2xvciAjMDAwMDAwKQotICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAw
KSkKLShmaWxsLWNvbXBvc2l0ZWQtcmVjdAorICAoY2hhbmdlLWZsYWdzIFtjdG0sIGRyb3Atc2hh
ZG93XSkKKyAgKGN0bSB7bT0oKDAuODcsMC41MCkoLTAuNTAsMC44NykpIHQ9KDgxLjcwLDMuNzAp
fSkKKyAgKGRyb3Atc2hhZG93CisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIw
KQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LWNvbG9yICMwMDAwMDApCisg
ICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQorKGZpbGwtcmVjdC13aXRoLWNvbG9y
CiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKLSAgKGNvbG9yICMwMDAwRkYpCi0gIChj
b21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4
dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCisgIChjb2xvciAjMDAwMEZG
KSBleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogKHJlc3RvcmUpCi0o
c2V0LWN0bQotICAoc2V0LWN0bSB7bT0oKDEuMDAsMC4wMCkoMC4wMCwxLjAwKSkgdD0oMC4wMCwy
Mi4wMCl9KSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNw
YXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlz
cGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGJjMTdiNTExNDk5ZjgyNTZjOTkyOTBkYWU4NjE0
ZDQ4OTRjYWY5Y2MuLjU0NmRjNDkxMmY1MmQwM2E4OWFkOTA2ODU3MmIyOGVkYzgwMzIyNTMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0
LWV4cGVjdGVkLnR4dApAQCAtMSwxNiArMSwxMiBAQAogCi0odHJhbnNsYXRlCi0gICh4IDAuMDAp
Ci0gICh5IDAuMDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisoZmlsbC1yZWN0LXdpdGgtY29s
b3IKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQotICAoY29sb3IgIzAwODAwMCkKLSAg
KGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkg
ZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKKyAgKGNvbG9yICMwMDgwMDApIGV4dGVudCBh
dCAoMCwwKSBzaXplIDEwNHgxMDQpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMzI5NjAp
Ci0gIChmaWxsLWNvbG9yICMwMDAwRkYpCi0gIChzdHJva2Utc3R5bGUgMCkKKyAgKGNoYW5nZS1m
bGFncyBbZmlsbC1icnVzaCwgc3Ryb2tlLXN0eWxlLCBzaG91bGQtYW50aWFsaWFzXSkKKyAgKGZp
bGwtYnJ1c2gKKyAgICAoY29sb3IgIzAwMDBGRikpCisgIChzdHJva2Utc3R5bGUgTk8tU1RST0tF
KQogICAoc2hvdWxkLWFudGlhbGlhcyAwKSkKIChkcmF3LXJlY3QKICAgKHJlY3QgYXQgKDAsMCkg
c2l6ZSAxMDR4MikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXkt
c2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKaW5kZXggYmI1OTNkMjBmNmRh
NjQ4NjI5MmQzNmMwMjIwZTJhOWQ4NzJmODJiOS4uYjg2MDQ4Y2MwOGM5OTM3ZWYwMDc4MmU3MTA4
OWNhY2JjOTljNTMzMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxh
eS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKQEAgLTEsMTYgKzEs
OCBAQAogcmVjb3JkZWQ6Ci0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5IDAuMDApKQotKGZp
bGwtY29tcG9zaXRlZC1yZWN0CisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDQx
MiwwKSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJh
dGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDQxMiww
KSBzaXplIDEwMHgxMDApCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQgKDQxMiwwKSBzaXpl
IDEwMHgxMDApCiAKIHJlcGxheWVkOgogKAogICAoY2xpcCBhdCAoNTEyLDApIHNpemUgNTEyeDIw
MCkKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCg==
</data>
<flag name="commit-queue"
          id="482502"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454757</attachid>
            <date>2022-03-15 14:42:42 -0700</date>
            <delta_ts>2022-03-15 15:48:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220315144241.patch</filename>
            <type>text/plain</type>
            <size>669925</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uNTc2NTk5OGIxYWE0OTU1MzQxOTMyNDA3Yjk2ZGQ1
YzYzZjg0OWI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzNSBAQAorMjAyMi0wMy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
QXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZy
b21QYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25Q
YWludGVyOjpwYWludEJveFNoYWRvdyBjb25zdCk6CisgICAgICAgICogaHRtbC9DdXN0b21QYWlu
dEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0
VW5jaGVja2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3TGF5b3V0U3RpcHBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdMYXlvdXRIYXRjaGluZyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVy
aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjphcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZp
bGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50
RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNl
UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZp
bGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNo
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNjYWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0Ojp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0VtcGhhc2lzTWFya3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkZWNvbnN0cnVjdERyYXdHbHlwaHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4gY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdy
YXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdU
aWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3Rl
bUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBoc0FuZENhY2hlRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRB
bnRpYWxpYXNpbmdNb2RlRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0
b3I6OlRleHRCb3hJdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmluY3JlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmF0RW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRCb3hJdGVyYXRvcjo6Y3VycmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Qm94SXRlcmF0b3I6OmRpcmVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvciE9IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bWVyZ2VDaGFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZTo6ZHVtcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dXBkYXRl
U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Z2V0U2hhZG93IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0RmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRl
eHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6Om1lcmdlU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6bWVyZ2VTdGF0ZURpZmZzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Z2V0Q1RNIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpmaWxsQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsR3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0dGVybiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldEZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJ1bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRG
aWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9y
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlR3JhZGll
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXR0
ZXJuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3Bh
Y2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ry
b2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVRo
aWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ry
b2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjppbmVDYXAgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZURhc2ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVKb2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjptaXRlckxpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNvbXBvc2l0ZU1vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Ojpjb21wb3NpdGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpibGVuZE1vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJvcFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNoYWRvd09mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNoYWRvd0JsdXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzaGFkb3dDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGVhclNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1Zpc2li
bGVTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNC
bHVycmVkU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
aGFzU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWxw
aGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2hvdWxkQW50aWFsaWFzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRTaG91bGRTbW9vdGhGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3THVtaW5hbmNlTWFzayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0luVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5
TGF5ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6fkdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRleHQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6VHJhbnNwYXJlbmN5
TGF5ZXJTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXll
clNjb3BlOjpiZWdpbkxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFy
ZW5jeUxheWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6fkludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25seVByaW1pdGl2ZUNoYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VEaWZm
cyk6CisgICAgICAgIChXZWJDb3JlOjpzdGF0ZUNoYW5nZU5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNo
YW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRp
ZEFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Zmls
bEJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNl
dEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmZpbGxSdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpzZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c3Ryb2tlQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpzZXRTdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6c2V0U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUNhcCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZURhc2ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5lSm9pbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1pdGVyTGltaXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNvbXBvc2l0ZU1vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENvbXBvc2l0ZU1vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyb3BTaGFkb3cgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldERyb3BTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmFscGhhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRBbHBoYSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3VsZEFudGlhbGlhcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTbW9vdGhGb250cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU21v
b3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpzZXREcmF3THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFVzZURhcmtBcHBlYXJhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkZWNvZGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6
On5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFy
ZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6YmVnaW5MYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjp+VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6R3JhcGhpY3ND
b250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6OkludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVEYXNoOjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEcm9w
U2hhZG93Ojppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6
aXNCbHVycmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6Omhhc091dHNl
dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdy
YXBoaWNzQ29udGV4dDo6TnVsbEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpO
dWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpOdWxs
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFn
ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6U291cmNlQnJ1c2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJydXNoOjpncmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCcnVzaDo6cGF0dGVybiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
cnVzaDo6c2V0R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldFBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCcnVzaDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNl
dENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpicnVzaCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnJ1c2g6OmlzUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNoOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNoOjpkZWNvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnJ1c2g6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0Qm94
SXRlcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveEl0ZXJhdG9yOjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJv
eEl0ZXJhdG9yOjppbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9y
OjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmN1cnJl
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpkaXJlY3Rpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvcj09IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3IhPSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OlN0YXRlOjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OkZpbGxTb3VyY2U6OkZp
bGxTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0cm9rZVNvdXJjZTo6U3Ryb2tl
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZTo6U2hhZG93U3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnNldExpbmVDYXApOgorICAgICAgICAoV2Vi
Q29yZTo6Q2Fpcm86OnNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRM
aW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TWl0ZXJMaW1pdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFwcGx5U3RhdGVDaGFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpl
bmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xp
cFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZp
bGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5k
VG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpnZXRD
VE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0Q1RNKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lRGFzaCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGlu
ZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2lu
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OkNHQ29udGV4dFN0
YXRlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6fkNHQ29u
dGV4dFN0YXRlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OmRpZFNhdmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjppbnRlcm5hbFBsYXRmb3Jt
Q29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJv
a2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseUZp
bGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdpbmdNb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpj
bGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjphcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6c2V0
Q0dMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR01pdGVyTGltaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q0dMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR1NoYWRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdGF0ZUNoYW5n
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjYW5Vc2VTaGFkb3dCbHVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJl
Y3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpDR0NvbnRleHRTdGF0ZVNhdmVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6On5DR0NvbnRl
eHRTdGF0ZVNhdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRl
U2F2ZXI6OnNhdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVT
YXZlcjo6cmVzdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0
ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3Vt
ZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJv
a2VDb250YWlucyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmVnaW5M
YXllcik6CisgICAgICAgIChXZWJDb3JlOjplbmRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpk
cmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0ds
eXBoc1JlY29yZGVyOjpzZXRJbnRlcm5hbEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0ds
eXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdPVFNWR1J1bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3TmF0aXZlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6
OmNyZWF0ZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3
R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6Y29uY2x1ZGVJ
bnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1Jl
Y29yZGVyOjp1cGRhdGVGaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjp1cGRhdGVTdHJva2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpzaGFkb3dJc0NsZWFyZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd0dseXBoc1dpdGhBZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJv
eSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6c2FmZUNvcHkg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1UeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJ
dGVtSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6U2V0U3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjphcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9y
TWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6YXBwbHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNj
YWxlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0Q1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dE1pdGVyTGltaXQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0
YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OkZp
bGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0Ojpjb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJvdW5kZWRSZWN0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmFuZ2xlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2NhbGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjphbW91bnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6U2V0Q1RNKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OnRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVD
VE06OkNvbmNhdGVuYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDb25jYXRlbmF0ZUNUTTo6dHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGVDaGFuZ2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZUNoYW5n
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6
U2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZUNhcDo6bGluZUNhcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaEFycmF5IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaE9mZnNl
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2g6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZURhc2g6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6bGluZUpvaW4gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1p
dGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1p
dGVyTGltaXQ6Om1pdGVyTGltaXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6
OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdDo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29tcG9zaXRlT3BlcmF0b3IgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojps
b2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmJsZW5k
TW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6bV9kcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFw
cGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hl
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5l
c0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6flJlY29yZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojpjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmRT
dGF0ZUNoYW5nZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0YXRlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZGlkVXBkYXRl
U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp0cmFuc2xhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzY2FsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNvbmNhdENUTSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6Omdl
dENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpjdXJyZW50U3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdXJyZW50U3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdG0gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0
U3RhdGU6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzY2FsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0
ZTo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpDb250
ZXh0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpDb250ZXh0U3RhdGU6OmNsb25lRm9yU2F2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y2xvbmVGb3JU
cmFuc3BhcmVuY3lMYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnN0YXRlU3RhY2sgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpSZWNvcmRl
ckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVj
b3JkU2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZENsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZENsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJvdW5k
ZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFN0
cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0Zv
Y3VzUmluZ1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6flJl
Y29yZGVySW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkUm90YXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNjYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZFNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldExp
bmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldE1pdGVyTGltaXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJT
aGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OlJlY29yZGVySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmFwcGx5
U2V0U3RhdGVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3
R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5
cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwOgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcik6
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzYXZlKToKKyAgICAg
ICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJlc3RvcmUpOgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFu
c3BhcmVuY3lMYXllcik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQ
YXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQp
OgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJS
ZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0
KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzdHJva2VSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnN0cm9rZVBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd1JlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d0xpbmUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0Vs
bGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0Zv
Y3VzUmluZyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChOaWNv
c2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVE
YXNoKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAg
IChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjb25jYXRDVE0pOiBEZWxldGVkLgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRl
ZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVj
b3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29y
ZGVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0ds
eXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJh
d0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgICog
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6ZHJhd0JveGVzKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250ZW50ZnVsUGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
ZWdhY3lFbGxpcHNpc0JveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseUJveFNoYWRvd0ZvckJhY2tn
cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hT
aWRlRnJvbVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50Qm94U2hhZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
SU9TOjpwYWludFRleHRGaWVsZElubmVyU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lSU9TOjpwYWludFN5c3RlbVByZXZpZXdCYWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveFJhZGlvSW5uZXJTaGFkb3cpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0
YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dERlY29y
YXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRl
cjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0
UGFpbnRlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnVzZVN0cm9rZVN0eWxlVG9GaWxsKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVu
ZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
bmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpk
cmF3KToKKwogMjAyMi0wMy0xNCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4K
IAogICAgICAgICBbbW9kZWxdIDxtb2RlbCBpbnRlcmFjdGl2ZT4gZG9lc24ndCBhbGxvdyBtb2Rl
bCB0byBiZSByb3RhdGVkIG9uIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkOWNjM2M0ZmU2OWU4YmNlNWUwMWM4
OWFmNGQwN2M3NWFjODBjM2U2Li4yM2M2MDdhNmYyMmQ1NDI2YzgyMGM5NjUyYTE1YzYwZDZiYTU5
YjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDIyLTAzLTE0ICBTYWlkIEFib3UtSGFs
bGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3JhcGhpY3ND
b250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9ybSBjb250
ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldFN0YXRlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6dHJhbnNsYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpjb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVKb2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OmNsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaDoK
KyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldFN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZENsaXApOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0VG9QYXRoKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwVG9J
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQ2xlYXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEJlemllckN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VF
bGxpcHNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBz
ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd1BhdGgpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJ
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdOYXRpdmVJbWFnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d1N5c3RlbUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3R2x5cGhz
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Om1fcmVu
ZGVyaW5nQmFja2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkVHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSb3RhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENvbmNhdGVuYXRlQ1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUpv
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZFNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyU2hhZG93KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpzZW5kKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KToKKwogMjAyMi0wMy0x
NCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbbW9kZWxd
IDxtb2RlbCBpbnRlcmFjdGl2ZT4gZG9lc24ndCBhbGxvdyBtb2RlbCB0byBiZSByb3RhdGVkIG9u
IGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNzM2NDQyYTA4YTc0NTAwYTM1MmYwNGMyZTEwNmQ4
YzQxZTdhNGZjNS4uZTM3YzQ4NmQ4NTk3Mzk0MGU1ZTU3NzdjMTk2ZWI5MmI3ZDBiMGNmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCkBAIC0xNDkxLDYgKzE0OTEsOCBAQCBzZXQoV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0wuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDb250ZW50
c0Rpc3BsYXlEZWxlZ2F0ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNs
aWVudC5oCkBAIC0xNTUwLDYgKzE1NTIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1BdWRpb1RyYWNrQ29uZmln
dXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1Db2xvclNwYWNlLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0x
NTY4LDYgKzE1NzEsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUm91bmRlZFJlY3QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Nob3VsZExvY2FsaXplQXhp
c05hbWVzLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNl
SW1hZ2UuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggNjJkNDNlNmEz
YTkzMjE1ZmYwNzU3YTQ3ODg0YThiNmM4NDRiODk2ZC4uOTQyMTI5NTNkNTg0NTM1NGRjYjRkN2Vh
MmEwYzlmNDhmY2FhNDNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBs
ZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBA
IC05OSw2ICs5OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yU3BhY2VD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCmluZGV4IDVkZWU3NTQwNTM1NzlmNTViNTVmMmZlNGFkMGRkMGE2OWRl
YmZkNGEuLjZhNTA0NWExODRkNmM1NDhkMDFhYWI2ZWIzNDM2MjA0ODVhOTlmOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0yODUsNiArMjg1LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ry
b3BMYXllci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2lu
Z0xheWVyLm1tCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVy
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yU3BhY2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9h
dFBvaW50Q0cuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDVjN2I3M2ViMjA1ZTA5ZWMyNDZlMDExZDBh
NTAyZGNkNGMxZGNhNTAuLmViNzZhMTg2ZDM0OGQ0YjM2ODlmMjM0ZjNkYmY2MjgyYWFhZGUwNTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CkBAIC0yMDQ1LDYgKzIwNDUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVn
YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5jcHAKQEAg
LTIwODQsNiArMjA4NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5k
ZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL1NvdXJjZUJydXNoLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJp
dmF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUltYWdlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDgyOTYyYmEwNGUyZmZkN2ZmYTBjNmU2MWQ5
YzljMmMxN2E1ZjY0NjcuLmI1NWM1YzFjNDJlMzI5NTU3MGVkMjRjODQwZGMzZTRmMmZkMzAyZTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTIzMzEsMTAgKzIzMzEsMTIgQEAKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8q
IEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzFFRkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRjA1Rjgw
MjUxMjQ0MkUwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkz
IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGQ0IxNzAyN0JBQjNGRTAwRTA2MzFDIC8qIEZyYW1lUmF0
ZUFsaWduZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcxRkNCMTZEMjdCQUIzREYwMEUwNjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIwMTc4M0IyN0Q1N0Y5
RjAwOUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0Nv
bnRleHRTdGF0ZVNhdmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0Iy
QTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJv
cGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjFCNDk3NDI1MTJC
QTNCMDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1h
Z2VCaXRtYXBCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkMx
OEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjQ2MERENzI3Qzg2REFE
MDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFw
aGljc0NvbnRleHRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyNDY5NjNCMjc1QzVGQTYwMEE5MTU2QSAvKiBDU1NGaWx0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTNGQjgzMjEzQjFC
QjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRDI3NUM2MTQ0MDBBOTE1NkEgLyogRmlsdGVyRWZm
ZWN0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MjE0QjlCNzI3NDQ1OEZBMDAzQkU2REYgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0Njk2M0UyNzVD
NjE2NzAwQTkxNTZBIC8qIEZpbHRlckltYWdlVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmls
dGVySW1hZ2VWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMjM0Miw2ICsyMzQ0LDkgQEAKIAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZC
IC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTEx
REM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAw
QTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNTYwNzhFMjc5RDM0QjYwMDdEMkRE
MyAvKiBGRUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkY3RTc0RjI3OUNFREU4MDBEODJEMkQgLyogRkVJbWFnZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNTgxODU0MjdDREE2OUEwMEMz
RDk3RSAvKiBTb3VyY2VCcnVzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTUy
N0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkIzNTEwQzI3QzlGOTNFMDBEMjdB
RTAgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5N0UgLyogR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3MjZDREUyMDI3NTk3MzUwMDBBNDQ1QjIgLyogRmlsdGVyRWZmZWN0R2VvbWV0cnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOTY2MUEy
Mjc1OTYwQTUwMEU3REY5QiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1NkUyMjUzQUUyOEQwMDAy
RUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1
NkUzMjUzQUUzNjYwMDAyRUY5MCAvKiBOYXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5h
dGl2ZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTExMzE4LDYgKzExMzIzLDggQEAKIAkJNzFGQ0IxNkQyN0JBQjNERjAwRTA2MzFDIC8q
IEZyYW1lUmF0ZUFsaWduZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJh
bWVSYXRlQWxpZ25lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZDQjE2RjI3
QkFCM0UwMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25lci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZVJhdGVBbGlnbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRv
dWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBv
aW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3ODNBMjdENTczQjIw
MDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENHQ29udGV4
dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwNkQ0MzUyN0RB
REVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Qm94
SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxMUI1RDYyNzY1MzY4
MjAwNzZGRUY4IC8qIEZpbHRlclJlc3VsdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBGMTJG
RjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1h
dGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0
NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTMyNyw2
ICsxMTMzNCw4IEBACiAJCTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFt
ZVJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyNDM1RUY0MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFn
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjQzNUVGNTI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENjI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3ND
b250ZXh0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVY
VEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVY
VEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkEx
QTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTEzODksNiArMTEzOTgsMTAgQEAKIAkJNzJBMTNBRDUyNzRERTU0RTAwRTJB
ODhFIC8qIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJj
ZUFscGhhU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
QTEzQUQ2Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkExM0FENzI3NERFNTc4MDBFMkE4OEUgLyog
U291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VHcmFw
aGljU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1
MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBFMjdDQjQyRkQwMEQyN0FFMCAvKiBTb3Vy
Y2VCcnVzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VCcnVzaC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBTb3VyY2VC
cnVzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VCcnVzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkI0RUY3NDI3NEUyMzMzMDAyOTNDMkYgLyogRkVCbGVuZFNvZnR3YXJlQXBw
bGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjc1Mjc0RTIzMzQwMDI5M0MyRiAvKiBGRUJsZW5k
U29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFw
cGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3QzI3NEVFMzdG
MDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1h
Z2VWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4ODEwLDYgKzI4ODIz
LDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjAxNzgzQTI3RDU3M0IyMDA5QkVCMUIg
LyogQ0dDb250ZXh0U3RhdGVTYXZlci5oICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5
NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMzI1OTY4RDBCMDAzMEU2QUEgLyogQ29s
b3JTcGFjZUNHLmNwcCAqLywKIAkJCQlCQ0FGRURCMjI1OTY4RDBCMDAzMEU2QUEgLyogQ29sb3JT
cGFjZUNHLmggKi8sCkBAIC0yOTA0Myw2ICsyOTA1Nyw5IEBACiAJCQkJN0JCMzRBNDcyNTM3NzZD
NzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwICovLAogCQkJ
CTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmggKi8sCiAJCQkJN0I5NUNGRTkyNzU0RkY2RTAwMDA2MENFIC8qIEdyYXBoaWNzQ29udGV4
dEdMU3RhdGUuaCAqLywKKwkJCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3ND
b250ZXh0U3RhdGUuY3BwICovLAorCQkJCTcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFw
aGljc0NvbnRleHRTdGF0ZS5oICovLAorCQkJCTcyQjM1MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEY1ODBCMDkwRjEyQTI2OTAwNTFE
Njg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBGNTgwQjBBMEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBCMEIwRjEyQTI2OTAwNTFENjg5IC8q
IEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLywKQEAgLTI5MTQzLDYgKzI5MTYwLDcgQEAKIAkJCQlC
Q0E1NTkxMjI2M0RCRDc5MDA3RjE5QjMgLyogUGl4ZWxGb3JtYXQuaCAqLywKIAkJCQlDREQwOEFC
RjI3N0U1NEYwMDBFQTM3NTUgLyogUGxhdGZvcm1BdWRpb1RyYWNrQ29uZmlndXJhdGlvbi5oICov
LAogCQkJCUJDM0U2MjQyMjY1OTc5MTcwMDU0OEFDRCAvKiBQbGF0Zm9ybUNvbG9yU3BhY2UuaCAq
LywKKwkJCQk3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQuaCAqLywKIAkJCQk3MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5o
ICovLAogCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVy
LmggKi8sCiAJCQkJNTUwNjQwQUQyNDA3NTZEQTAwQUFFMDQ1IC8qIFBsYXRmb3JtSW1hZ2VCdWZm
ZXJCYWNrZW5kLmggKi8sCkBAIC0yOTE2Niw2ICsyOTE4NCw4IEBACiAJCQkJMEYzREQ0NEQxMkY1
RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLAogCQkJCTBGM0RENDRFMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8sCiAJCQkJMUM0REIwMjQyNzMzOUU1RTAwN0IwQUQx
IC8qIFNob3VsZExvY2FsaXplQXhpc05hbWVzLmggKi8sCisJCQkJNzJCMzUxMEUyN0NCNDJGRDAw
RDI3QUUwIC8qIFNvdXJjZUJydXNoLmNwcCAqLywKKwkJCQk3MkIzNTEwRjI3Q0I0MkZFMDBEMjdB
RTAgLyogU291cmNlQnJ1c2guaCAqLywKIAkJCQkxREQxMjdBQzI1NkUzQTg3MDBCMjI3RDcgLyog
U291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQx
IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2
ODUgLyogU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oICovLApAQCAtMjkxNzcsNiArMjkxOTcs
NyBAQAogCQkJCTA4NzU1OEM0MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dhdGVQYWlyQXdhcmVU
ZXh0SXRlcmF0b3IuaCAqLywKIAkJCQk5NUU5RjQ0NDI3QzlBMzlCMDA5NDUzMzcgLyogU3lzdGVt
SW1hZ2UuaCAqLywKIAkJCQkzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkgLyogVGFiU2l6ZS5oICov
LAorCQkJCTcyMDZENDM1MjdEQURFQ0EwMDQwRkVCMiAvKiBUZXh0Qm94SXRlcmF0b3IuaCAqLywK
IAkJCQkzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8sCiAJCQkJQTgy
NEI0NjQwRTJFRjJFQTAwODFBN0I3IC8qIFRleHRSdW4uaCAqLywKIAkJCQlDRDFFNzM0NjE2N0JD
NzhFMDA5QTg4NUQgLyogVGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwICovLApAQCAtMzM4NzMs
NiArMzM4OTQsNyBAQAogCQkJCUNERTNBRTEyMjRCNDkxNkEwMDEyOEU3RSAvKiBDRE1VdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVGQTkwNENBMTc4RTYxRjUwMDRDOEEyRCAvKiBDZXJ0
aWZpY2F0ZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTkxQjhGMEI1MjE5NTNENjUwMDBDMkIw
MCAvKiBDZXJ0aWZpY2F0ZVN1bW1hcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDE3ODNCMjdE
NTdGOUYwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRTM2RkQxNTE2Qzc4MjY1MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3QkM2OUREMTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3Jh
cHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTc4NUQ5MTUyNEI0RDFDQTAwMTREQjIxIC8qIENo
YW5uZWxDb3VudE1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ3OTgsNiArMzQ4MjAsOCBAQAog
CQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8qIEdyYXBoaWNz
Q29udGV4dEdMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0
MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzI0NjBERDcyN0M4NkRBRDAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5N0UgLyogR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAw
NTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4
Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NTgwQjBFMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTM2NzA1LDYgKzM2NzI5LDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZB
QzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNG
NzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MjZENTZFMjI1M0FFMjhEMDAwMkVG
OTAgLyogUGxhdGZvcm1JbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3NzA1QzcyNTUyNzZD
RDAwMUQwQzk0IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1
MDY0MEFGMjQwNzU4MkQwMEFBRTA0NSAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNzM4Niw2ICszNzQxMSw3IEBACiAJCQkJNTEwRDRBMzgxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBp
biBIZWFkZXJzICovLAogCQkJCTg0QTgxRjNFMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBo
YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8qIFNvdXJj
ZUJydXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2MjE3QTlEMDFCMDAyNzRFNDIgLyog
U291cmNlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2NTE3QTlEMDFCMDAyNzRF
NDIgLyogU291cmNlQnVmZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGMTM1MDkyNEM5
RkNBMzAwNDMyRTFFIC8qIFNvdXJjZUJ1ZmZlclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBh
aW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRp
b25QYWludGVyLmNwcAppbmRleCA4NTZhM2RlNTA0ZGVjMGJiZmE5MGFjMTdkZTM3ZjUxNWUxNGQ5
MjA0Li45ZDkzNWE2ZmYzMjMwZjNmNDZhMmVmNWQ3ZWExMDAxMGFlOWUxMGMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9u
UGFpbnRlci5jcHAKQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdC
b3hTaWRlRnJvbVBhdGgoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0CiAg
ICAgICAgICAgICBEYXNoQXJyYXkgbGluZURhc2g7CiAgICAgICAgICAgICBsaW5lRGFzaC5hcHBl
bmQoZGFzaExlbmd0aCk7CiAgICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZ2FwTGVuZ3RoKTsK
LSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExpbmVEYXNoKGxpbmVEYXNo
LCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExp
bmVEYXNoKHsgV1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2Vz
IGlzc3VlcyB3aXRoIHRpZ2h0IGNvcm5lcnM6CkBAIC0xMjk0LDcgKzEyOTQsNyBAQCB2b2lkIEJv
eERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBhaW50
aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNoYWRvd1JlY3RPcmlnaW4gPSBmaWxsUmVj
dC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNldDsKICAgICAgICAgYXV0byBhZGp1c3Rl
ZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4gLSBhZGp1c3RlZEZpbGxSZWN0LnJlY3Qo
KS5sb2NhdGlvbigpOwogCi0gICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRv
dyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xv
cigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2Fj
eSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICBwYWludGluZ0NvbnRleHQu
Y29udGV4dC5zZXREcm9wU2hhZG93KHsgYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBT
aGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwog
CiAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBi
b3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93ZXZlciwg
ZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMTQwNSw3ICsxNDA1LDcgQEAgdm9pZCBCb3hEZWNvcmF0
aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRl
eHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQudHJhbnNsYXRlKGV4dHJh
T2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCi0gICAgICAg
IHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cy52YWx1ZSgpLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkg
PyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsK
KyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNoYWRvd09m
ZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJr
aXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01v
ZGU6OkRlZmF1bHQgfSk7CiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCByb3VuZGVkSG9sZVJlY3QsIGZpbGxD
b2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21Q
YWludEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5jcHAK
aW5kZXggZjRiOThiYTYyZTExOWEwNzcxMzEyZDNiODhjNDkxOTM2ODM2ZWUzNy4uZWU1MDRmMDhj
NDlmYzhkNWI1YWVkNzAyYmUyMTdmMWIwNmZkNGUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1
c3RvbVBhaW50SW1hZ2UuY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEN1
c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdG9tUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY28KIEltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsKLSAg
ICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVy
YXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29udGV4dC5zZXRDb21wb3Np
dGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgp
IH0pOwogICAgIGRlc3RDb250ZXh0LmNsaXAoZGVzdFJlY3QpOwogICAgIGRlc3RDb250ZXh0LnRy
YW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9
IHNyY1JlY3Quc2l6ZSgpKQpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgQ3VzdG9tUGFpbnRJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0CiAgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CiAKICAgICAvLyBG
YWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQncyBzY2FsZSB0byBnZW5lcmF0ZSBhdCB0
aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0g
ZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZp
Y2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRl
eHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueFNj
YWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RNLnlTY2FsZSgp
KTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJuQ1RNID0gcGF0dGVyblRyYW5z
Zm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggMGU3ODA2M2UzYTQxY2JjNjkwZjBkMGNj
Yjc4ODExN2RlNjkzOGEwMi4uZGJjOTU3YzUzZDA0YTM5NmVhYzY0ZDY3ZmU2YTJiMTdlNDQ4YzY2
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5TGluZURhc2goKSBjb25zdAogICAgIERhc2hB
cnJheSBjb252ZXJ0ZWRMaW5lRGFzaChzdGF0ZSgpLmxpbmVEYXNoLnNpemUoKSk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZSgpLmxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAg
ICBjb252ZXJ0ZWRMaW5lRGFzaFtpXSA9IHN0YXRpY19jYXN0PERhc2hBcnJheUVsZW1lbnQ+KHN0
YXRlKCkubGluZURhc2hbaV0pOwotICAgIGMtPnNldExpbmVEYXNoKGNvbnZlcnRlZExpbmVEYXNo
LCBzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICBjLT5zZXRMaW5lRGFzaCh7IFdURk1vdmUo
Y29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUoKS5saW5lRGFzaE9m
ZnNldCkgfSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xv
YmFsQWxwaGEoZG91YmxlIGFscGhhKQpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKGNvbnN0IFN0
cmluZyYgb3BlCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAg
ICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKLSAgICBjLT5zZXRDb21wb3NpdGVPcGVyYXRpb24o
b3AsIGJsZW5kTW9kZSk7CisgICAgYy0+c2V0Q29tcG9zaXRlTW9kZSh7IG9wLCBibGVuZE1vZGUg
fSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2NhbGUoZG91Ymxl
IHN4LCBkb3VibGUgc3kpCkBAIC0xMTg2LDcgKzExODYsNyBAQCBib29sIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmlzUG9pbnRJblN0cm9rZUludGVybmFsKGNvbnN0IFBhdGgmIHBhdGgs
IGRvdQogICAgICAgICBEYXNoQXJyYXkgY29udmVydGVkTGluZURhc2gobGluZURhc2guc2l6ZSgp
KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lRGFzaC5zaXplKCk7ICsraSkK
ICAgICAgICAgICAgIGNvbnZlcnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5
RWxlbWVudD4obGluZURhc2hbaV0pOwotICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKGNvbnZl
cnRlZExpbmVEYXNoLCBzdGF0ZS5saW5lRGFzaE9mZnNldCk7CisgICAgICAgIGNvbnRleHQuc2V0
TGluZURhc2goeyBXVEZNb3ZlKGNvbnZlcnRlZExpbmVEYXNoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHN0YXRlLmxpbmVEYXNoT2Zmc2V0KSB9KTsKICAgICB9KTsKIH0KIApAQCAtMTIwNSw3ICsxMjA1
LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclJlY3QoZG91Ymxl
IHgsIGRvdWJsZSB5LCBkb3VibGUgd2lkdGgsIGQKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3Mo
KSkgewogICAgICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNhdmVkID0gdHJ1ZTsKLSAg
ICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgY29udGV4dC0+c2V0
RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0KICAgICBpZiAoc3RhdGUoKS5nbG9iYWxB
bHBoYSAhPSAxKSB7CiAgICAgICAgIGlmICghc2F2ZWQpIHsKQEAgLTEzNjMsOSArMTM2Myw5IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlTaGFkb3coKQogICAgIGlm
IChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGZsb2F0IHdpZHRoID0gc3RhdGUoKS5z
aGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RhdGUoKS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgICAgIGMtPnNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgs
IC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3IsIFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgIGMtPnNldERyb3BTaGFkb3coeyBGbG9hdFNp
emUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29s
b3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSB9KTsKICAgICB9IGVsc2UKLSAgICAgICAgYy0+
c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6
ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5
IH0pOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNob3VsZERyYXdT
aGFkb3dzKCkgY29uc3QKQEAgLTI0MzIsMTkgKzI0MzIsMTYgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVu
LCBkb3UKIAogICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldCgwLCAyICogbWFza1JlY3QuaGVp
Z2h0KCkpOwogCi0gICAgICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgICAgICAg
ICAgZmxvYXQgc2hhZG93UmFkaXVzOwotICAgICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0g
ICAgICAgICAgICBjLT5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yKTsKLQogICAgICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QobWFza1JlY3QpOwot
ICAgICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHNoYWRvd1JhZGl1cyAqIDEuNCk7Ci0gICAg
ICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc2hhZG93T2Zmc2V0ICogLTEpOworICAgICAgICAgICAg
YXV0byBkcm9wU2hhZG93ID0gYy0+ZHJvcFNoYWRvdygpOworCisgICAgICAgICAgICBzaGFkb3dS
ZWN0LmluZmxhdGUoZHJvcFNoYWRvdy5ibHVyUmFkaXVzICogMS40KTsKKyAgICAgICAgICAgIHNo
YWRvd1JlY3QubW92ZShkcm9wU2hhZG93Lm9mZnNldCAqIC0xKTsKICAgICAgICAgICAgIGMtPmNs
aXAoc2hhZG93UmVjdCk7CiAKLSAgICAgICAgICAgIHNoYWRvd09mZnNldCArPSBvZmZzZXQ7Cisg
ICAgICAgICAgICBkcm9wU2hhZG93Lm9mZnNldCArPSBvZmZzZXQ7CiAKLSAgICAgICAgICAgIGMt
PnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgICAgICAgICBjLT5zZXREcm9wU2hhZG93KGRyb3BT
aGFkb3cpOwogCiAgICAgICAgICAgICBpZiAoZmlsbCkKICAgICAgICAgICAgICAgICBjLT5zZXRG
aWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JPdmVybGF5LmNwcAppbmRleCA0ZjYzYWRjZTkzOTE2ZGIyMzIwZTk2NzhhYWJmZTBmM2Nk
OTk3NjJiLi45YTgwM2E0MDhkODhjMmZmNDhkZDNiZWEwMjk1MWI4NzU4MDk4ZTBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCkBAIC0xMjQ0LDcg
KzEyNDQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0U3RpcHBsaW5nKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLAogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc2F2ZXIoY29udGV4dCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
MSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tl
KTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgMSwgZGVuc2l0eSB9LCAxKTsKKyAgICBjb250
ZXh0LnNldExpbmVEYXNoKHsgeyAxLCBkZW5zaXR5IH0sIDEgfSk7CiAKICAgICBkcmF3TGF5b3V0
UGF0dGVybihjb250ZXh0LCBxdWFkLCBkZW5zaXR5LCBGbGlwOjpObyk7CiB9CkBAIC0xMjU0LDcg
KzEyNTQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5b3V0SGF0Y2hpbmcoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygw
LjUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGU6OkRhc2hlZFN0cm9r
ZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IDIsIDIgfSwgMik7CisgICAgY29udGV4dC5z
ZXRMaW5lRGFzaCh7IHsgMiwgMiB9LCAyIH0pOwogCiAgICAgY29uc3RleHByIGF1dG8gZGVmYXVs
dExheW91dEhhdGNoU3BhY2luZyA9IDEyOwogICAgIGRyYXdMYXlvdXRQYXR0ZXJuKGNvbnRleHQs
IHF1YWQsIGRlZmF1bHRMYXlvdXRIYXRjaFNwYWNpbmcsIGZsaXApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCmluZGV4IGI1ODhmNmZhNGExMWQ3NzBjM2M4NDk5OTY3MmQ3ZDdlZmY0MzJjNGYu
LjhhMTdhZTM3MGFlMzZiMDBlYmI3YTliMmUwNzU1MTgwNmJlZDE2NjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKQEAgLTQzMDMsNyArNDMwMyw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp0cmF2
ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxp
ZGF0CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIGxheW91dENvbnRleHQoKS5sYXlv
dXQoKTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChwYWludEludmFsaWRhdGlv
blJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChmcmFtZVJlY3QoKSwg
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgewog
ICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVDb250ZW50cygpLgogICAgICAg
ICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1
bWVudFZpc2libGVSZWN0KSk7CkBAIC00ODU0LDcgKzQ4NTQsNyBAQCB2b2lkIEZyYW1lVmlldzo6
YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9w
LCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQgd2l0aCBwYWludGluZyBkaXNh
YmxlZC4KLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4
dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBOdWxsR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQoZnJhbWVSZWN0KCksIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxp
ZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0VHJ1bmNhdGVkQXQoc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkQm90dG9tKSkpOwogICAgIEludFJlY3QgZGlydHlSZWN0
KDAsIHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5kZXJWaWV3LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKS5tYXhYKCksIHN0YXRpY19jYXN0PGludD4oY2VpbGYob2xkQm90dG9tIC0g
b2xkVG9wKSkpOwogICAgIHJlbmRlclZpZXctPnNldFByaW50UmVjdChkaXJ0eVJlY3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCmluZGV4
IGRjNjBlNzViMjk1YmM1M2E1OWE0NzAyYTE5OTg3YzAzYTExZjk1YTEuLmFjOTA5MTEzNzNhZmU1
ZjYyNjk3NTQwNmJjY2MzODM1MGQ5ZDM0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFRo
ZW1lQWR3YWl0YTo6cGFpbnRGb2N1cyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgUGF0aCYgcGF0aAogCiAgICAgZ3JhcGhpY3NDb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoY29sb3IuYWxwaGFBc0Zsb2F0KCkpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJv
a2VUaGlja25lc3MoZm9jdXNMaW5lV2lkdGgpOwotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5l
RGFzaCh7IGZvY3VzTGluZVdpZHRoLCAyICogZm9jdXNMaW5lV2lkdGggfSwgMCk7CisgICAgZ3Jh
cGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsgeyBmb2N1c0xpbmVXaWR0aCwgMiAqIGZvY3VzTGlu
ZVdpZHRoIH0sIDAgfSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVDYXAoTGluZUNhcDo6
U3F1YXJlKTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZUpvaW4oTGluZUpvaW46Ok1pdGVy
KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoY29sb3Iub3BhcXVlQ29sb3Io
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDlmZDI1ZDgwYWQxMmRjOTFkZDEx
ZjkxNTk4ZmM2YzhlZmE0Y2IyYTIuLjI4OTU3NGI5YzFlNDBjZDcxMmI0ZTJiNmU5ZWIzNGIwMTcy
OWRmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuY3BwCkBAIC0yOSw3ICsyOSw4IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OkJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCwgR3JhcGhp
Y3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0KQotICAgIDogbV9wcmltYXJ5Q29udGV4dChwcmlt
YXJ5Q29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChwcmltYXJ5Q29udGV4dC5jbGlwQm91
bmRzKCksIHsgfSwgcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKCkpCisgICAgLCBtX3ByaW1hcnlDb250
ZXh0KHByaW1hcnlDb250ZXh0KQogICAgICwgbV9zZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeUNv
bnRleHQpCiB7CiB9CkBAIC00OCw2ICs0OSwzMCBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCog
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKICAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIAorI2lmIFVTRShD
RykKK2Jvb2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgpOwor
fQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQo
Ym9vbCBpc0NBTGF5ZXJDb250ZXh0KQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxh
eWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0
SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKK30KKwordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0
ZWRDb250ZXh0KQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJc0Fj
Y2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7Cit9CisjZW5kaWYKKworUmVu
ZGVyaW5nTW9kZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Cit9CisK
IHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCiB7CiAgICAgLy8gRklYTUU6
IENvbnNpZGVyIG5vdCB1c2luZyB0aGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCdzIHN0YXRl
IHN0YWNrIGF0IGFsbCwKQEAgLTY0LDIyICs4OSwxMCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnJlc3RvcmUoKQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yZXN0b3JlKCk7CiB9
CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4
dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIGZyb20sIGNvbnN0IEZs
b2F0UG9pbnQmIHRvKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8p
OwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci19Ci0KLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseVN0YXRlQ2hhbmdlcygp
CiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICBtX3NlY29u
ZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseVN0YXRlQ2hhbmdl
cygpOwogfQogCiAjaWYgVVNFKENHKQpAQCAtOTYsMjIgKzEwOSwxMCBAQCB2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogfQogI2VuZGlmCiAKLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3UGF0aChwYXRoKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmls
bFBhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOwotfQot
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCBmYWN0b3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBh
dGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOworICAgIG1fcHJp
bWFyeUNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7CiB9CiAKIHZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQpAQCAtMTI2LDIyMiArMTI3LDEyNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojph
cHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikKLXsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRl
eHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUmVjdChyZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJvdW5k
ZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSb3Vu
ZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKLSAgICBtX3NlY29u
ZGFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lk
dGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLX0K
LQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxp
cHNlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0K
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVs
bGlwc2UpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwot
fQotCi0jaWYgVVNFKENHKQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NB
TGF5ZXJDb250ZXh0KGJvb2wgaXNDQUxheWVyQ29udGV4dCkKLXsKLSAgICBtX3ByaW1hcnlDb250
ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Ci19Ci0KLWJv
b2wgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgpOwotfQotCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJv
b2wgaXNBY2NlbGVyYXRlZENvbnRleHQpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0Fj
Y2VsZXJhdGVkQ29udGV4dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7Ci0gICAgbV9zZWNvbmRhcnlD
b250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKLX0K
LSNlbmRpZgotCi1SZW5kZXJpbmdNb2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRl
cmluZ01vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRlcmlu
Z01vZGUoKTsKLX0KLQogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7CiAg
ICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwKHJlY3QpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5j
bGlwKHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChy
ZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKLX0KLQotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4
dC5jbGlwT3V0KHBhdGgpOwotfQotCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogeworICAgIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogICAgIG1fcHJpbWFyeUNvbnRl
eHQuY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlw
UGF0aChwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQu
Y2xpcEJvdW5kcygpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVDYXAoTGluZUNhcCBsaW5lQ2FwKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNl
dExpbmVDYXAobGluZUNhcCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVDYXAobGlu
ZUNhcCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNo
T2Zmc2V0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBh
dGgmIHBhdGgpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXks
IGRhc2hPZmZzZXQpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJy
YXksIGRhc2hPZmZzZXQpOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKKyAg
ICBtX3NlY29uZGFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3By
aW1hcnlDb250ZXh0LnNldExpbmVKb2luKGxpbmVKb2luKTsKLSAgICBtX3NlY29uZGFyeUNvbnRl
eHQuc2V0TGluZUpvaW4obGluZUpvaW4pOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFRvSW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwog
fQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQg
bWl0ZXJMaW1pdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldE1pdGVyTGlt
aXQobWl0ZXJMaW1pdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldE1pdGVyTGltaXQobWl0
ZXJMaW1pdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7CisgICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBj
b25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobmF0aXZl
SW1hZ2UsIHNlbGZTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwgc2VsZlNpemUsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJl
Y3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsKIH0KIAotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5
c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3ZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1hZ2Uo
c3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRy
YXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3ByaW1h
cnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZmlsbFJlY3QocmVjdCwgY29sb3IpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0
dGVybihuYXRpdmVJbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0
ZXJuKG5hdGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJl
Y3QsIGdyYWRpZW50KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgZ3Jh
ZGllbnQpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8g
cmVzdWx0ID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2Us
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOwogfQogCi1JbWFnZURy
YXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX3ByaW1hcnlDb250ZXh0LmRyYXdUaWxl
ZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0
aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJl
Y3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAot
SW1hZ2VEcmF3UmVzdWx0IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdl
KEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGls
ZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcHJp
bWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRp
bGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2Fs
ZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IG1fcHJpbWFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5
ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBtX3By
aW1hcnlDb250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRp
b24pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgbV9zZWNvbmRh
cnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOwogfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNj
YWxlKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQuc2NhbGUoc2NhbGUpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zY2FsZShzY2FsZSk7
CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7
CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNz
KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQucm90
YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQucm90YXRlKGFuZ2xl
SW5SYWRpYW5zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7
CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ry
b2tlUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsK
IH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQog
ewotICAgIG1fcHJpbWFyeUNvbnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmNvbmNhdENUTSh0cmFuc2Zvcm0pOworICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
IGZyb20sIGNvbnN0IEZsb2F0UG9pbnQmIHRvKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldENUTSh0cmFuc2Zvcm0p
OworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVE
ZXZpY2VTY2FsZSkgY29uc3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Vs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250
ZXh0LmdldENUTShpbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJh
d0VsbGlwc2UocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3Qp
OwogfQogCi1GbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91bmRUb0RldmljZVBpeGVscyhy
ZWN0LCByb3VuZGluZ01vZGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7
CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwogfQogCiB2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CkBAIC0zNzAsMjkgKzI3NSw1NCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBkbwogfQogI2VuZGlm
CiAKLUZsb2F0U2l6ZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBG
b250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXV0byBzaXpl
ID0gbV9wcmltYXJ5Q29udGV4dC5kcmF3VGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBmcm9tLCB0
byk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQs
IGZyb20sIHRvKTsKLSAgICByZXR1cm4gc2l6ZTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiBmaWx0ZXJSZXN1bHRzKQogewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRy
YXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNt
b290aGluZ01vZGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRzKTsK
KyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1h
Z2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRzKTsKIH0KIAotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2Fz
Y2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gdG8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJ
bWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJh
d0VtcGhhc2lzTWFya3MoY2FzY2FkZSwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RW1waGFzaXNNYXJrcyhjYXNjYWRlLCBydW4sIG1hcmss
IHBvaW50LCBmcm9tLCB0byk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2Uo
aW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pCit2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
bik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdCaWRpVGV4dChjYXNjYWRlLCBydW4sIHBv
aW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJh
d1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7
Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1Bh
dHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0dGVybihp
bWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7Cit9CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bh
dHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIG1fcHJpbWFyeUNv
bnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYg
cGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQoreworICAgIG1fcHJpbWFyeUNv
bnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Cit9
CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21v
b3RoaW5nTW9kZSkKK3sKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOworICAg
IG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51
bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKQEAgLTQwNywxNiAr
MzM3LDkgQEAgdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKICAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBtYXJrZXJTdHlsZSk7CiB9CiAKLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVybCwg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0VVJMRm9y
UmVjdCh1cmwsIHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVy
bCwgcmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGlu
YXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
Ym9vbCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBj
b25zdAogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUs
IHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFt
ZSwgcmVjdCk7CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuc3VwcG9ydHNJbnRlcm5hbExp
bmtzKCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCkBA
IC00MjUsMTggKzM0OCwxNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFkZERl
c3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0CiAgICAgbV9zZWNvbmRh
cnlDb250ZXh0LmFkZERlc3RpbmF0aW9uQXRQb2ludChuYW1lLCBwb2ludCk7CiB9CiAKLWJvb2wg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QK
K3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBt
X3ByaW1hcnlDb250ZXh0LnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpOworICAgIG1fcHJpbWFyeUNv
bnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOworICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CiB9CiAKLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBm
bGFncykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25z
dCBVUkwmIHVybCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIC8vIFRoaXMgY2FsbHMg
dXBkYXRlU3RhdGUoKSBpbnN0ZWFkIG9mIGRpZFVwZGF0ZVN0YXRlKCkgc28gdGhhdCBjaGFuZ2Vz
Ci0gICAgLy8gYXJlIGFsc28gYXBwbGllZCB0byBlYWNoIGNvbnRleHQncyBHcmFwaGljc0NvbnRl
eHRTdGF0ZSwgc28gdGhhdCBjb2RlCi0gICAgLy8gaW50ZXJuYWwgdG8gdGhlIGNoaWxkIGNvbnRl
eHRzIHRoYXQgcmVhZHMgZnJvbSB0aGUgc3RhdGUgZ2V0cyB0aGUgcmlnaHQgdmFsdWVzLgotICAg
IG1fcHJpbWFyeUNvbnRleHQudXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKLSAgICBtX3NlY29u
ZGFyeUNvbnRleHQudXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKKyAgICBtX3ByaW1hcnlDb250
ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0
VVJMRm9yUmVjdCh1cmwsIHJlY3QpOwogfQogCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShDQUlS
TykKQEAgLTQ0Niw1ICszNjcsMTAgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnQKIH0KICNlbmRp
ZgogCitGbG9hdFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCit7
CisgICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucm91bmRUb0RldmljZVBpeGVscyhyZWN0LCBy
b3VuZGluZ01vZGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQuaAppbmRleCBmNThiMzRjOTE0MzQyYjczNzc3MjdjMTFhNzNiNmQ4MjE4ZTE1NTZm
Li43YTM3YTExM2RkODE1ZWIzYjk1NjA3NTJkOWRjNzBlYjVhODk3YzViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dC5oCkBAIC00Myw4MyArNDMsNTQgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGxh
dGZvcm1Db250ZXh0KCkgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAg
dm9pZCByZXN0b3JlKCkgZmluYWw7CisjaWYgVVNFKENHKQorICAgIGJvb2wgaXNDQUxheWVyQ29u
dGV4dCgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBm
aW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29s
KSBmaW5hbDsKKyNlbmRpZgorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0
IGZpbmFsOwogCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmlu
YWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogI2lmIFVTRShDRykKICAg
ICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlGaWxsUGF0
dGVybigpIGZpbmFsOwogI2VuZGlmCi0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmlu
YWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJv
a2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkg
ZmluYWw7CiAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBm
aW5hbDsKLQotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7Ci0gICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJl
Y3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAg
IHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAg
IHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwotCi0gICAgdm9p
ZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotICAgIHZvaWQg
c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotCi0jaWYgVVNF
KENHKQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNBY2NlbGVy
YXRlZENvbnRleHQoYm9vbCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2lu
ZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKLQogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9p
ZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb25SZWN0KSBmaW5hbDsKIAotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRS
dWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOwotCi0gICAgSW50UmVjdCBjbGlwQm91bmRz
KCkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0g
ICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBm
aW5hbDsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNl
dE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9t
SW1hZ2UgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVz
dWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9y
LCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKIAotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotI2Vu
ZGlmCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAKLSAgICB1c2lu
ZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXpl
JikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwot
ICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgZmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQ
YXRoJikgZmluYWw7CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VT
Y2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIEZs
b2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9k
ZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsK
IAorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9p
ZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCiAgICAgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYp
IGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0
LCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTEyNywyMyArOTgs
MjYgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAg
IEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
LCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9k
ZSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpu
dWxsb3B0KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkp
IGZpbmFsOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVj
dCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2ZUlt
YWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKKyNlbmRpZgogCisg
ICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9p
bnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CiAgICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VT
dHlsZSkgZmluYWw7Ci0KICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9pZCBz
ZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCi0gICAg
dm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLQogICAgIGJvb2wgc3VwcG9ydHNJ
bnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9p
ZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZp
bmFsOworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwogCiAjaWYgT1MoV0lORE9XUykg
JiYgIVVTRShDQUlSTykKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJl
Y2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3Bw
CmluZGV4IGJiNGRhYzAxOWM1YjllMTNiMTM3YWU2OTRlNGJmNmIyNzZiZmNjMGQuLjFjMWI5NmVj
NWI5ODNjYzVmMThkNmZmMWZkMjU4NTdmYTk0M2M0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5j
cHAKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhd0Ny
b3NzZmFkZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiBJbWFnZURyYXdSZXN1bHQgQ3Jvc3Nm
YWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBv
cHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAgICBj
b250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0LnNp
emUoKSAhPSBzcmNSZWN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKaW5kZXggMjVhM2QzZmU4NzczMzFkZGEz
OTU3ODAxMWI2ZDg5MGYyMTJjNzJlNi4uM2JjYjUwNWFmM2MyODJmNDIyMzI1Y2Q3ZTMwMDUzNGZk
OWY5OWNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJh
d0dseXBoc1JlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RHJhd0dseXBoc1JlY29yZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyNCArMjYsMTEgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNs
dWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IlBhdHRlcm4uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgogCi0jaWYgVVNFKENPUkVfVEVYVCkKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpZiBQTEFU
Rk9STShXSU4pCi0jaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KLSNlbHNl
Ci0jaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8
cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CkBAIC02Miw3NiArNDksMzIgQEAgcHVibGljOgogI2lm
IFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCiAgICAgdm9pZCBkcmF3TmF0aXZlVGV4
dChDVEZvbnRSZWYsIENHRmxvYXQgZm9udFNpemUsIENUTGluZVJlZiwgQ0dSZWN0IGxpbmVSZWN0
KTsKIAotICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dT
dGF0ZVJlZiwgQ0dSZWN0KTsKLSAgICB2b2lkIHJlY29yZEVuZExheWVyKENHUmVuZGVyaW5nU3Rh
dGVSZWYsIENHR1N0YXRlUmVmKTsKLSAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJp
bmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3Qg
Q0dHbHlwaFtdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpOwotICAg
IHZvaWQgcmVjb3JkRHJhd0ltYWdlKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBD
R1JlY3QsIENHSW1hZ2VSZWYpOworICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR0dTdGF0ZVJl
Zik7CisgICAgdm9pZCByZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJlZik7CisgICAgdm9pZCByZWNv
cmREcmF3R2x5cGhzKENHR1N0YXRlUmVmLCBjb25zdCBDR0dseXBoW10sIGNvbnN0IENHUG9pbnQg
cG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7CisgICAgdm9pZCByZWNvcmREcmF3SW1hZ2UoQ0dH
U3RhdGVSZWYsIENHUmVjdCwgQ0dJbWFnZVJlZik7CiAjZW5kaWYKIAotICAgIERlY29uc3RydWN0
RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2RlY29u
c3RydWN0RHJhd0dseXBoczsgfQotCiBwcml2YXRlOgotI2lmIFVTRShDT1JFX1RFWFQpICYmICFQ
TEFURk9STShXSU4pCi0gICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlSW50ZXJu
YWxDb250ZXh0KCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZH
QW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd09UU1ZH
UnVuKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQ
b2ludCwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd05vbk9UU1ZHUnVuKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9u
dFNtb290aGluZ01vZGUpOwotCi0gICAgdm9pZCBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgdm9pZCBwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBjb25jbHVk
ZUludGVybmFsQ29udGV4dCgpOworICAgIHZvaWQgc2V0SW50ZXJuYWxGb250KGNvbnN0IEZvbnQm
LCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgcHJlcGFyZUlu
dGVybmFsQ29udGV4dCgpOworICAgIHZvaWQgcmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSk7CiAKLSAgICB2b2lkIHVwZGF0
ZUZpbGxDb2xvcihjb25zdCBDb2xvciYsIEdyYWRpZW50KiA9IG51bGxwdHIsIFBhdHRlcm4qID0g
bnVsbHB0cik7Ci0gICAgdm9pZCB1cGRhdGVTdHJva2VDb2xvcihjb25zdCBDb2xvciYsIEdyYWRp
ZW50KiA9IG51bGxwdHIsIFBhdHRlcm4qID0gbnVsbHB0cik7Ci0gICAgdm9pZCB1cGRhdGVDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgZW51bSBjbGFzcyBTaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyB7Ci0gICAgICAgIFVuc3BlY2lmaWVkLAotICAgICAgICBZZXMsCi0gICAgICAgIE5v
Ci0gICAgfTsKLSAgICB2b2lkIHVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRvd09m
ZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFkb3dz
SWdub3JlVHJhbnNmb3Jtcyk7Ci0KLSNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lO
KQotICAgIHZvaWQgdXBkYXRlU2hhZG93KENHU3R5bGVSZWYpOwotI2VuZGlmCisgICAgdm9pZCBk
cmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdPVFNWR1J1
bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2lu
dCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZH
QW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQmIG1fb3duZXI7CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2Rlc3RpbmF0aW9uQ29udGV4dDsK
ICAgICBEZWNvbnN0cnVjdERyYXdHbHlwaHMgbV9kZWNvbnN0cnVjdERyYXdHbHlwaHM7CiAgICAg
RGVyaXZlRm9udEZyb21Db250ZXh0IG1fZGVyaXZlRm9udEZyb21Db250ZXh0OwogCi0jaWYgVVNF
KENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250
ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKLSNlbmRpZgotCiAgICAgY29uc3QgRm9udCogbV9vcmln
aW5hbEZvbnQgeyBudWxscHRyIH07CiAgICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdN
b2RlIHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfTsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7CiAKLSAgICBzdHJ1Y3QgU3RhdGUgewotICAgICAg
ICBzdHJ1Y3QgU3R5bGUgewotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBS
ZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OwotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdy
YWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgICAgICAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVy
bjsKLSAgICAgICAgfTsKLSAgICAgICAgU3R5bGUgZmlsbFN0eWxlOwotICAgICAgICBTdHlsZSBz
dHJva2VTdHlsZTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotCi0gICAgICAgIHN0
cnVjdCBTaGFkb3dTdGF0ZSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0OwotICAgICAg
ICAgICAgZmxvYXQgYmx1ciB7IDAgfTsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAg
ICAgICAgYm9vbCBpZ25vcmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsKLSAgICAgICAgfTsKLSAgICAg
ICAgU2hhZG93U3RhdGUgc2hhZG93OwotICAgIH07Ci0gICAgU3RhdGUgbV9vcmlnaW5hbFN0YXRl
OwotICAgIFN0YXRlIG1fY3VycmVudFN0YXRlOworI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFU
Rk9STShXSU4pCisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gbV9pbnRlcm5hbENvbnRl
eHQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA4NTE4MGFkMTA5
ZmQ4MThlOWJiMTU4OGNlOTYyYWI0NjMwODE2YTA5Li4zNjExYjEyY2E5YWIyOWViOTIxZjIzMjVl
MWY5NmQyOTUyNTNjN2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGUuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6
ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4KIAogc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0
PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXh0UnVuKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbikgY29uc3QKIHsKLSAgICBBU1NFUlQoIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKTsK
KyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsICFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSk7
CiAgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52YWx1ZV9vcihydW4ubGVuZ3RoKCkpOwog
ICAgIAogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxl
cyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzEwMDA1MApAQCAtMjE0LDcgKzIxNCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNw
bGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9y
VGV4CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxE
aXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVl
PERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIERpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGwgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxheUxpc3QsIGNvbnRleHQuc3RhdGUo
KSwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRl
Y29uc3RydWN0RHJhd0dseXBoczo6Tm8pOworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwg
cmVjb3JkaW5nQ29udGV4dCgqZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zv
cm0oKSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKTsKICAg
ICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQgPSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6
ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJl
Y29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBzdGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudEltYWdlLmNwcAppbmRleCA2NDU4NGU1Y2ZlMDExODgyZWZhYjJlMjNjM2E1OTRlMTc4MmYy
ODkwLi4yZjgyN2Y2MjVmNjRiNTljYTFhNjY0OTYwNzMwZjAzYzIzYmMzN2FiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcApAQCAt
NDMsNyArNDMsNyBAQCBHcmFkaWVudEltYWdlOjp+R3JhZGllbnRJbWFnZSgpID0gZGVmYXVsdDsK
IEltYWdlRHJhd1Jlc3VsdCBHcmFkaWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsKLSAgICBkZXN0Q29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBv
cHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsg
b3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAg
IGRlc3RDb250ZXh0LmNsaXAoZGVzdFJlY3QpOwogICAgIGRlc3RDb250ZXh0LnRyYW5zbGF0ZShk
ZXN0UmVjdC5sb2NhdGlvbigpKTsKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Qu
c2l6ZSgpKQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIEdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZAogICAgIG1f
Z3JhZGllbnQtPmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoYWRqdXN0ZWRTaXplLCBh
ZGp1c3RlZFNyY1JlY3QsIHNwYWNpbmcpOwogCiAgICAgLy8gRmFjdG9yIGluIHRoZSBkZXN0aW5h
dGlvbiBjb250ZXh0J3Mgc2NhbGUgdG8gZ2VuZXJhdGUgYXQgdGhlIGJlc3QgcmVzb2x1dGlvbgot
ICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENUTShH
cmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIEFmZmlu
ZVRyYW5zZm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENUTSgpOwogICAgIGRv
dWJsZSB4U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RNLnhTY2FsZSgpKTsKICAgICBkb3VibGUg
eVNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS55U2NhbGUoKSk7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIGFkanVzdGVkUGF0dGVybkNUTSA9IHBhdHRlcm5UcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCAw
YmIxMzU5N2NlYTczNjlkYmJjNmUxNzI3ZjI2YzkyYjhmYjc1MTc2Li5jZjhjNzE4YjgxMmM3OTc5
MWYyYmUzZWI3ZDhiZThkNTVhMmMzM2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw2IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIK
LSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUg
IkZpbHRlckltYWdlLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgpAQCAtMzYsNDcz
ICszNSwzMTAgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIu
aCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKLSNpbmNsdWRlICJOdWxsR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJTeXN0ZW1J
bWFnZS5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0Qm94SXRlcmF0b3Iu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgVGV4dEJveEl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBUZXh0Qm94SXRlcmF0
b3IoKQotICAgICAgICA6IG1fdGV4dFJ1bigwKQotICAgICAgICAsIG1fb2Zmc2V0KDApCi0gICAg
ewotICAgIH0KLQotICAgIFRleHRCb3hJdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1
bnNpZ25lZCBvZmZzZXQpCi0gICAgICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCi0gICAgICAgICwg
bV9vZmZzZXQob2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIHZvaWQgaW5jcmVtZW50KCkgeyBtX29mZnNl
dCsrOyB9Ci0gICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHRSdW4gfHwgbV9v
ZmZzZXQgPj0gbV90ZXh0UnVuLT5sZW5ndGgoKTsgfQotICAgIFVDaGFyIGN1cnJlbnQoKSBjb25z
dCB7IHJldHVybiAoKm1fdGV4dFJ1bilbbV9vZmZzZXRdOyB9Ci0gICAgVUNoYXJEaXJlY3Rpb24g
ZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gYXRFbmQoKSA/IFVfT1RIRVJfTkVVVFJBTCA6IHVf
Y2hhckRpcmVjdGlvbihjdXJyZW50KCkpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VGV4dEJveEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29m
ZnNldCA9PSBvdGhlci5tX29mZnNldCAmJiBtX3RleHRSdW4gPT0gb3RoZXIubV90ZXh0UnVuOwot
ICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVy
KSBjb25zdCB7IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0KLQotcHJpdmF0ZToKLSAgICBj
b25zdCBUZXh0UnVuKiBtX3RleHRSdW47Ci0gICAgdW5zaWduZWQgbV9vZmZzZXQ7Ci19OwotCi0j
ZGVmaW5lIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKGZsYWcsIHByb3BlcnR5KSBcCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OmZsYWcpICYm
IChtX3N0YXRlLnByb3BlcnR5ICE9IHN0YXRlLnByb3BlcnR5KSkgXAotICAgICAgICBjaGFuZ2VG
bGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OmZsYWcpOwotCi1HcmFwaGljc0NvbnRleHRT
dGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQotICAgIDogc2hvdWxkQW50aWFsaWFzKHRydWUp
Ci0gICAgLCBzaG91bGRTbW9vdGhGb250cyh0cnVlKQotICAgICwgc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKHRydWUpCi0gICAgLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkKLSAg
ICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQorR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0Nv
bnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZUZsYWdzJiBjaGFuZ2VGbGFncywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBp
bml0aWFsQ1RNKQorICAgIDogbV9zdGF0ZShpbml0aWFsQ2xpcCwgY2hhbmdlRmxhZ3MsIGluaXRp
YWxDVE0pCiB7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjp+R3JhcGhpY3NDb250ZXh0U3Rh
dGUoKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRl
eHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJikgPSBk
ZWZhdWx0OwotR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVy
YXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0Nv
bnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShHcmFwaGljc0NvbnRl
eHRTdGF0ZSYmKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdl
Q2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQorR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhp
Y3NDb250ZXh0KCkKIHsKLSAgICBhdXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFk
aWVudENoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UgfTsK
LSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoc3Ryb2tlRmxhZ3MpKSB7Ci0gICAgICAgIHN0cm9r
ZUNvbG9yID0gc3RhdGUuc3Ryb2tlQ29sb3I7Ci0gICAgICAgIHN0cm9rZUdyYWRpZW50ID0gc3Rh
dGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgICAgIHN0cm9rZVBhdHRlcm4gPSBzdGF0ZS5zdHJva2VQ
YXR0ZXJuOwotICAgIH0KLQotICAgIGF1dG8gZmlsbEZsYWdzID0geyBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50
Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UgfTsKLSAgICBp
ZiAoZmxhZ3MuY29udGFpbnNBbnkoZmlsbEZsYWdzKSkgewotICAgICAgICBmaWxsQ29sb3IgPSBz
dGF0ZS5maWxsQ29sb3I7Ci0gICAgICAgIGZpbGxHcmFkaWVudCA9IHN0YXRlLmZpbGxHcmFkaWVu
dDsKLSAgICAgICAgZmlsbFBhdHRlcm4gPSBzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkp
IHsKLSAgICAgICAgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICBz
aGFkb3dCbHVyID0gc3RhdGUuc2hhZG93Qmx1cjsKLSAgICAgICAgc2hhZG93Q29sb3IgPSBzdGF0
ZS5zaGFkb3dDb2xvcjsKLSAgICAgICAgc2hhZG93UmFkaXVzTW9kZSA9IHN0YXRlLnNoYWRvd1Jh
ZGl1c01vZGU7Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBzdHJva2VUaGlja25lc3Mg
PSBzdGF0ZS5zdHJva2VUaGlja25lc3M7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIHRleHREcmF3
aW5nTW9kZSA9IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChmbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBzdHJv
a2VTdHlsZSA9IHN0YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGZpbGxSdWxlID0g
c3RhdGUuZmlsbFJ1bGU7CisgICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NF
UlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgYWxwaGEgPSBz
dGF0ZS5hbHBoYTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKK3sKKyAgICBtX3N0YWNr
LmFwcGVuZChtX3N0YXRlKTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpIHsKLSAgICAgICAgY29tcG9zaXRlT3BlcmF0b3Ig
PSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgYmxlbmRNb2RlID0gc3RhdGUuYmxl
bmRNb2RlOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQoreworICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxk
QW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gc3RhdGUuc2hvdWxk
QW50aWFsaWFzOworICAgIG1fc3RhdGUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgbV9sYXN0
QXBwbGllZFN0YXRlID0gc3RkOjpudWxsb3B0OwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIHNo
b3VsZFNtb290aEZvbnRzID0gc3RhdGUuc2hvdWxkU21vb3RoRm9udHM7Ci0KLSAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250c0NoYW5nZSkpCi0gICAgICAgIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRl
LnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAg
ICAgICBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zOworICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZWFsbG9jYXRlIHRoZSBzdGF0ZSBzdGFjayBidWZm
ZXIgd2hlbiBpdCBnb2VzIGVtcHR5LgorICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVk
aWF0ZWx5IHNhdmUoKSBhZ2FpbiwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4K
KyAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCisgICAgICAgIG1fc3RhY2suY2xlYXIoKTsKK30K
IAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UpKQotICAgICAgICBkcmF3THVtaW5hbmNlTWFzayA9IHN0YXRlLmRyYXdM
dW1pbmFuY2VNYXNrOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRpZEFwcGx5U3RhdGVDaGFuZ2Vz
KCkKK3sKKyAgICBtX3N0YXRlLmRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgbV9sYXN0QXBw
bGllZFN0YXRlID0gbV9zdGF0ZTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAg
IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5OworRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAorewor
ICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICByZXR1cm4gRmxv
YXRTaXplKHRyYW5zZm9ybS54U2NhbGUoKSwgdHJhbnNmb3JtLnlTY2FsZSgpKTsKK30KKyAgICAK
K0Zsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIGF1dG8gdHJhbnNm
b3JtZWREZXN0UmVjdCA9IHRyYW5zZm9ybS5tYXBSZWN0KGRlc3RSZWN0KTsKKyAgICByZXR1cm4g
dHJhbnNmb3JtZWREZXN0UmVjdC5zaXplKCkgLyBzcmNSZWN0LnNpemUoKTsKK30KIAotI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIHVzZURhcmtB
cHBlYXJhbmNlID0gc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7Ci0jZW5kaWYKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQoreworICAgICsrbV90cmFu
c3BhcmVuY3lMYXllckNvdW50OwogfQogCi1HcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzOworICAgIEFTU0VSVChtX3RyYW5zcGFyZW5jeUxh
eWVyQ291bnQgPiAwKTsKKyAgICAtLW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKK30KIAotICAg
IENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZUdyYWRpZW50Q2hhbmdlLCBzdHJva2VH
cmFkaWVudCk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlUGF0dGVybkNo
YW5nZSwgc3Ryb2tlUGF0dGVybik7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmls
bEdyYWRpZW50Q2hhbmdlLCBmaWxsR3JhZGllbnQpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BS
T1BFUlRZKEZpbGxQYXR0ZXJuQ2hhbmdlLCBmaWxsUGF0dGVybik7Cit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9zdGF0ZS5jbGlwKHJl
Y3QpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd0NoYW5nZSkKLSAgICAgICAgJiYgKG1fc3RhdGUuc2hhZG93T2Zmc2V0ICE9
IHN0YXRlLnNoYWRvd09mZnNldAotICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dCbHVyICE9
IHN0YXRlLnNoYWRvd0JsdXIKLSAgICAgICAgICAgIHx8IG1fc3RhdGUuc2hhZG93Q29sb3IgIT0g
c3RhdGUuc2hhZG93Q29sb3IpKQotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUpCit7CisgICAgbV9zdGF0ZS5jbGlwKHBhdGguZmFz
dEJvdW5kaW5nUmVjdCgpKTsKK30KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0
cm9rZVRoaWNrbmVzc0NoYW5nZSwgc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICBDSEVDS19GT1JfQ0hB
TkdFRF9QUk9QRVJUWShUZXh0RHJhd2luZ01vZGVDaGFuZ2UsIHRleHREcmF3aW5nTW9kZSk7Ci0g
ICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlQ29sb3JDaGFuZ2UsIHN0cm9rZUNv
bG9yKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsQ29sb3JDaGFuZ2UsIGZp
bGxDb2xvcik7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlU3R5bGVDaGFu
Z2UsIHN0cm9rZVN0eWxlKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsUnVs
ZUNoYW5nZSwgZmlsbFJ1bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEFscGhh
Q2hhbmdlLCBhbHBoYSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGgu
YWRkUm91bmRlZFJlY3QocmVjdCk7CisgICAgY2xpcFBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3Np
dGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2Ug
fSkKLSAgICAgICAgJiYgKG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgIT0gc3RhdGUuY29tcG9z
aXRlT3BlcmF0b3IgfHwgbV9zdGF0ZS5ibGVuZE1vZGUgIT0gc3RhdGUuYmxlbmRNb2RlKSkgewot
ICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9w
ZXJhdGlvbkNoYW5nZSk7Ci0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRT
dGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXJlY3Qu
aXNSb3VuZGVkKCkpIHsKKyAgICAgICAgY2xpcE91dChyZWN0LnJlY3QoKSk7CisgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaG91bGRBbnRp
YWxpYXNDaGFuZ2UsIHNob3VsZEFudGlhbGlhcyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJP
UEVSVFkoU2hvdWxkU21vb3RoRm9udHNDaGFuZ2UsIHNob3VsZFNtb290aEZvbnRzKTsKLSAgICBD
SEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFu
Z2UsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURf
UFJPUEVSVFkoU2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UsIHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShEcmF3THVtaW5hbmNlTWFz
a0NoYW5nZSwgZHJhd0x1bWluYW5jZU1hc2spOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BF
UlRZKEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UsIGltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkpOwotCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBDSEVDS19GT1Jf
Q0hBTkdFRF9QUk9QRVJUWShVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSwgdXNlRGFya0FwcGVhcmFu
Y2UpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gY2hhbmdlRmxhZ3M7CisgICAgUGF0aCBwYXRoOwor
ICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7CisgICAgY2xpcE91dChwYXRoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIGZsYWdzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7
Ci0gICAgbV9zdGF0ZS5tZXJnZUNoYW5nZXMoc3RhdGUsIGZsYWdzKTsKLQotICAgIGF1dG8gc3Ry
b2tlRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShz
dHJva2VGbGFncykpCi0gICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3ZlKHN0cm9rZUZsYWdzKTsK
LQotICAgIGF1dG8gZmlsbEZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnNBbnkoZmlsbEZsYWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoZmlsbEZsYWdz
KTsKLQotICAgIGF1dG8gY29tcG9zaXRlT3BlcmF0b3JGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJs
ZW5kTW9kZUNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShjb21wb3NpdGVPcGVy
YXRvckZsYWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoY29tcG9zaXRlT3BlcmF0
b3JGbGFncyk7Ci0KLSAgICBtX2NoYW5nZUZsYWdzLmFkZChmbGFncyk7CisgICAgaW1hZ2VCdWZm
ZXIuY2xpcFRvTWFzaygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcGVyYXRpb24sIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRT
dHJva2VHcmFkaWVudCgqbV9zdGF0ZS5zdHJva2VHcmFkaWVudCwgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29udGV4
dC5zZXRTdHJva2VQYXR0ZXJuKCptX3N0YXRlLnN0cm9rZVBhdHRlcm4pOwotCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENo
YW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KCptX3N0YXRlLmZpbGxHcmFk
aWVudCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxQYXR0ZXJuKCptX3N0YXRlLmZpbGxQYXR0ZXJu
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hh
ZG93Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZz
ZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAgYXV0byBwcmV2
aW91c0NvbXBvc2l0ZU1vZGUgPSBjb21wb3NpdGVNb2RlKCk7CiAKLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdl
KSkKLSAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUobV9zdGF0ZS50ZXh0RHJhd2lu
Z01vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cihtX3N0YXRlLnN0cm9rZUNvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihtX3N0YXRlLmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAg
ICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKG1fc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxl
Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsUnVsZShtX3N0YXRlLmZpbGxSdWxlKTsK
LQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpB
bHBoYUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1v
ZGVDaGFuZ2UgfSkpCi0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3IsIG1fc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChtX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXND
aGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhtX3N0YXRlLnNob3Vs
ZEFudGlhbGlhcyk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dFNob3VsZFNtb290aEZvbnRzKG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLQot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3
THVtaW5hbmNlTWFza0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RHJhd0x1bWluYW5jZU1h
c2sobV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNo
YW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotCi0jaWYgSEFWRShPU19EQVJLX01PREVf
U1VQUE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFVzZURh
cmtBcHBlYXJhbmNlKG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlmCisgICAgc2V0
Q29tcG9zaXRlTW9kZSh7IG9wZXJhdGlvbiwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICBzZXRDb21wb3NpdGVNb2RlKHByZXZpb3VzQ29tcG9zaXRlTW9kZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4dFN0cmVhbSYg
dHMpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjaGFu
Z2UtZmxhZ3MiLCBtX2NoYW5nZUZsYWdzLnRvUmF3KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkK
LSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50LmdldCgpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzdHJva2UtcGF0dGVybiIsIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSk7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bEdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWdyYWRpZW50
IiwgbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdl
dCgpKTsKKyAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKK30KIAotICAgIGlmIChtX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRvd0Js
dXIpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRlLnNo
YWRvd09mZnNldCk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWNvbG9yIiwgbV9z
dGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2Ut
bGVnYWN5LXJhZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCit7CisgICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAgIGZpbGxS
ZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7
CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgICAgIAorICAgIENvbXBvc2l0ZU9wZXJhdG9y
IHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICBzZXRDb21wb3Np
dGVNb2RlKHsgcHJldmlvdXNPcGVyYXRvciwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxSb3VuZGVk
UmVjdChyZWN0LCBjb2xvcik7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3Bl
cmF0b3IpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgic3Ryb2tlLXRoaWNrbmVzcyIsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRleHQtZHJhd2luZy1tb2Rl
IiwgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQot
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1jb2xvciIsIG1fc3RhdGUuc3Ryb2tlQ29s
b3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xv
ciIsIG1fc3RhdGUuZmlsbENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgic3Ryb2tlLXN0eWxlIiwgbV9zdGF0ZS5zdHJva2VTdHlsZSk7Cit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwogCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxS
dWxlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXJ1bGUiLCBtX3N0YXRl
LmZpbGxSdWxlKTsKKyAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVybygpKQor
ICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7CisgICAgZWxzZQor
ICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2Up
KQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImFscGhhIiwgbV9zdGF0ZS5hbHBoYSk7CisgICAg
V2luZFJ1bGUgb2xkRmlsbFJ1bGUgPSBmaWxsUnVsZSgpOworICAgIENvbG9yIG9sZEZpbGxDb2xv
ciA9IGZpbGxDb2xvcigpOworICAgIAorICAgIHNldEZpbGxSdWxlKFdpbmRSdWxlOjpFdmVuT2Rk
KTsKKyAgICBzZXRGaWxsQ29sb3IoY29sb3IpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdG9yIiwgbV9zdGF0ZS5jb21w
b3NpdGVPcGVyYXRvcik7CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgCisgICAgc2V0RmlsbFJ1
bGUob2xkRmlsbFJ1bGUpOworICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOworfQogCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5k
TW9kZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIG1fc3Rh
dGUuYmxlbmRNb2RlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZUFzUGF0aChj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRk
RWxsaXBzZShlbGxpcHNlKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXND
aGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1hbnRpYWxpYXMiLCBtX3N0
YXRlLnNob3VsZEFudGlhbGlhcyk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBz
ZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAg
IHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOworfQogCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtc21v
b3RoLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Cit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCit7CisgICAgYXV0byBv
bGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKKyAgICBhdXRvIG9sZFN0cm9rZUNvbG9yID0gc3Ry
b2tlQ29sb3IoKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsIG1fc3RhdGUu
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29s
b3IpOworICAgIHNldFN0cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKKyAgICBkcmF3RWxsaXBzZShG
bG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKSk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJv
cGVydHkoInNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMiLCBtX3N0YXRlLnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKTsKKyAgICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBzZXRTdHJv
a2VDb2xvcihlbGxpcHNlQ29sb3IpOworICAgIGRyYXdFbGxpcHNlKHJlY3QpOwogCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFu
Y2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJkcmF3LWx1bWluYW5jZS1t
YXNrIiwgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayk7CisgICAgc2V0RmlsbENvbG9yKG9sZEZp
bGxDb2xvcik7CisgICAgc2V0U3Ryb2tlQ29sb3Iob2xkU3Ryb2tlQ29sb3IpOworfQogCi0jaWYg
SEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInVzZS1kYXJrLWFwcGVhcmFuY2UiLCBtX3N0YXRlLnVzZURhcmtB
cHBlYXJhbmNlKTsKLSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCit7CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgc3Ryb2tlUGF0aChwYXRo
KTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09w
dGlvbnMpCiB7Ci0gICAgc3RhdGVDaGFuZ2UuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOworICAg
IGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5sb2dp
Y2FsU2l6ZSgpKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFp
bnRpbmdPcHRpb25zKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgp
KTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7CisgICAgZHJhd0ltYWdl
QnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNp
emUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNhdmUoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0
YWNrLmFwcGVuZChtX3N0YXRlKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIg
aW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xh
dGlvblF1YWxpdHkoKSk7CisgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJj
ZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBpZiAobV9zdGFjay5p
c0VtcHR5KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CisgICAgaWYgKCFpbWFnZSkKICAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fc3RhdGUgPSBtX3N0YWNrLmxhc3QoKTsKLSAgICBtX3N0
YWNrLnJlbW92ZUxhc3QoKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZWFsbG9jYXRlIHRoZSBz
dGF0ZSBzdGFjayBidWZmZXIgd2hlbiBpdCBnb2VzIGVtcHR5LgotICAgIC8vIENhbnZhcyBlbGVt
ZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2FpbiwgYnV0IHRoYXQgZ29lcyBpbnRvIGlu
bGluZSBjYXBhY2l0eS4KLSAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3Rh
Y2suY2xlYXIoKTsKKyAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNp
emUoKTsKKyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIEZsb2F0
UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0sIGltYWdl
TG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0Ojp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5tZXJnZUNoYW5nZXMo
c3RhdGUsIGZsYWdzKTsKLSAgICBkaWRVcGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOworICAgIGlm
ICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBp
bWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92
ZShpbWFnZSksIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwg
aW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Jh
aXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBzZUNv
bG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzYXZlKCk7Ci0KLSAgICBzZXRTdHJv
a2VDb2xvcihzaGFkb3dDb2xvcik7Ci0gICAgc2V0RmlsbENvbG9yKHNoYWRvd0NvbG9yKTsKLQot
ICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLQotICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xv
cik7Ci0gICAgc2V0RmlsbENvbG9yKGVsbGlwc2VDb2xvcik7Ci0KLSAgICBkcmF3RWxsaXBzZShy
ZWN0KTsgIAotCi0gICAgcmVzdG9yZSgpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVy
bjsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxp
dHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Cisg
ICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYg
cmVzdWx0cykKIHsKLSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0
ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0g
bnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyLmFwcGx5KHNv
dXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMpOworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHJlc3VsdC0+aW1h
Z2VCdWZmZXIoKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZp
bHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7CisgICAgZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
ciwgcmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKKyAgICBzY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxv
YXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hhZG93UmFk
aXVzTW9kZSByYWRpdXNNb2RlKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0
YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVy
OwotICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnNoYWRvd1Jh
ZGl1c01vZGUgPSByYWRpdXNNb2RlOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOworICAgIHJldHVybiBkcmF3SW1hZ2UoaW1h
Z2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQog
ewotICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7Ci0gICAgbV9zdGF0ZS5z
aGFkb3dCbHVyID0gMDsKLSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKLSAgICBt
X3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0OwotICAg
IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpOworICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZShpbWFn
ZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlvbigpKSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShp
bWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3QsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQm
IGJsdXIsIENvbG9yJiBjb2xvcikgY29uc3QKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKLSAgICBvZmZzZXQgPSBtX3N0YXRlLnNoYWRvd09mZnNldDsKLSAgICBibHVyID0g
bV9zdGF0ZS5zaGFkb3dCbHVyOwotICAgIGNvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKLQot
ICAgIHJldHVybiBoYXNTaGFkb3coKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJw
b2xhdGlvblF1YWxpdHkoKSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXpl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0ZS5m
aWxsR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRy
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBv
bGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwg
c291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCitJbWFnZURy
YXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKKyAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBXVEZNb3Zl
KHBhdHRlcm4pOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKTsKKyAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0
Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgeworICAgICAgICAvLyBKdXN0
IGRvIGEgc2NhbGUuCisgICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIG9wdGlvbnMpOworICAgIH0KKworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5p
bnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0
aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7IH07Ci0g
ICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuZmlsbFBhdHRl
cm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgc3lzdGVtSW1hZ2UuZHJh
dygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBt
X3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBX
VEZNb3ZlKGdyYWRpZW50KTsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0
dGVybiA9IG51bGxwdHI7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsKKyAgICBpbWFnZS5kcmF3UGF0dGVybigq
dGhpcywgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQo
UmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxHcmFk
aWVudFNwYWNlVHJhbnNmb3JtKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBt
X3N0YXRlLmZpbGxHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwotICAgIG1fc3RhdGUuZmls
bEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAg
ICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKTsKLSAgICAvLyBG
SVhNRTogYWxzbyBmaWxsIHBhdHRlcm4/CisgICAgcGxheWVyLnBsYXllclByaXZhdGUoKS0+cGFp
bnRDdXJyZW50RnJhbWVJbkNvbnRleHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRpZgog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290
aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgKyttX3RyYW5zcGFyZW5jeUxheWVy
Q291bnQ7CisgICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywg
YWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290
aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5
TGF5ZXJDb3VudCA+IDApOwotICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworICAgIGRy
YXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNt
b290aGluZ01vZGUpOwogfQogCiBGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCkBA
IC01MTEsMTEgKzM0Nyw2IEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgcmV0dXJuIGZv
bnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKLXsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhp
cywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGlu
Z01vZGUpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHRvKQogewogICAgIGZvbnQuZHJhd0VtcGhhc2lzTWFya3MoKnRoaXMs
IHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKQEAgLTU0OSw3ICszODAsNDUgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgVGV4dFJ1biYgcnVuLAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwogICAg
IH0KIAotICAgIGJpZGlSdW5zLmNsZWFyKCk7CisgICAgYmlkaVJ1bnMuY2xlYXIoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5
bGUpCit7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0
KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJs
aW5lcywgc3R5bGUpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5k
ZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcp
Cit7CisgICAgQ29sb3IgZHVtbXlDb2xvcjsKKyAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNB
bmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xvcik7Cit9
CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFs
aWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBD
b2xvciYgY29sb3IpCit7CisgICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7
CisgICAgZmxvYXQgdGhpY2tuZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7Cisg
ICAgaWYgKHByaW50aW5nKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRT
aXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5z
aW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCisgICAgZmxvYXQgc2NhbGUg
PSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigp
KSA6IHRyYW5zZm9ybS5hKCk7CisgICAgaWYgKHNjYWxlIDwgMS4wKSB7CisgICAgICAgIC8vIFRo
aXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxp
bmUgaGlnaCwKKyAgICAgICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRl
eHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8gZWZmZWN0LCBh
biBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0
IHNtYWxsIHNjYWxlcy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1VbmRlcmxp
bmVBbHBoYSA9IDAuNGY7CisgICAgICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVtVW5k
ZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1VbmRlcmxpbmVBbHBoYTsKKyAgICAgICAgY29s
b3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShzaGFkZSk7CisgICAgfQorCisg
ICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRyYW5zZm9ybS5tYXBQb2ludChyZWN0LmxvY2F0
aW9uKCkpOworICAgIC8vIFZpc3VhbCBvdmVyZmxvdyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0byBp
bnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRqdXN0
cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVybGluZSBkZWNvcmF0aW9uLgorICAgIEZsb2F0
UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2ludChyb3VuZGYoZGV2aWNlUG9pbnQueCgpKSwg
Y2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7CisgICAgaWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9y
bS5pbnZlcnNlKCkpCisgICAgICAgIG9yaWdpbiA9IGludmVyc2UudmFsdWUoKS5tYXBQb2ludChk
ZXZpY2VPcmlnaW4pOworICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVj
dC53aWR0aCgpLCB0aGlja25lc3MpKTsKIH0KIAogc3RhdGljIEludFNpemUgc2NhbGVkSW1hZ2VC
dWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSkK
QEAgLTYzOSwxODcgKzUwOCw5IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0
OjpjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByCiAgICAgcmV0dXJu
IGNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3BhY2Us
IHJlbmRlcmluZ01vZGUoKSwgcmVuZGVyaW5nTWV0aG9kKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIHN5c3RlbUltYWdlLmRyYXcoKnRoaXMs
IGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAg
cmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXpl
KCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5n
T3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3Qg
c3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoaW1hZ2VQYWludGluZ09wdGlvbnMub3Jp
ZW50YXRpb24oKSkpOwotICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBz
cmNSZWN0LCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKLXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50
ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlv
blF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1
YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7
Ci0gICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwg
dGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwKLSAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVs
ZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYg
KGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRp
bGUpIHsKLSAgICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgotICAgICAgICByZXR1cm4gZHJhd0lt
YWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICB9Ci0KLSAgICBJ
bnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlz
U2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJu
IGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFj
dG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBj
b25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgRmxv
YXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0KHsgfSwg
aW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0
aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09w
dGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRo
aXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBpbWFn
ZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0g
ICAgICAgIHJldHVybjsKLSAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNh
bFNpemUoKTsKLSAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIEZs
b2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0sIGlt
YWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAg
IHJldHVybjsKLSAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUo
KTsKLSAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIGRlc3RpbmF0
aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlv
bnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgSW50ZXJwb2xh
dGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0
aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIEltYWdlQnVmZmVyOjpk
cmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKLXsKLSAgICBh
dXRvIHJlc3VsdCA9IGZpbHRlci5hcHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBy
ZXN1bHRzKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1
dG8gaW1hZ2VCdWZmZXIgPSByZXN1bHQtPmltYWdlQnVmZmVyKCk7Ci0gICAgaWYgKCFpbWFnZUJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNj
YWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOwotICAg
IGRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFnZVJlY3Qo
KSk7Ci0gICAgc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQotewot
ICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAgIGNsaXBQ
YXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0LmlzUm91bmRl
ZCgpKSB7Ci0gICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0g
ICAgY2xpcE91dChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCi17Ci0gICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVzdGluYXRp
b25SZWN0KTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25z
dAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKLXsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29t
cG9zaXRlT3BlcmF0aW9uKCk7Ci0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1v
ZGUpOwotICAgIGZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRp
b24ocHJldmlvdXNPcGVyYXRvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKSB7Ci0g
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRN
b2RlKTsKLSAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgICAg
IHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9u
KCksIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFBhdGggcGF0aDsK
LSAgICBwYXRoLmFkZFJlY3QocmVjdCk7Ci0KLSAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRp
aSgpLmlzWmVybygpKQotICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVj
dCk7Ci0gICAgZWxzZQotICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3Qo
KSk7CiAKLSAgICBXaW5kUnVsZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7Ci0gICAgQ29sb3Ig
b2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUoV2luZFJ1
bGU6OkV2ZW5PZGQpOwotICAgIHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBmaWxsUGF0aChw
YXRoKTsKLSAgICAKLSAgICBzZXRGaWxsUnVsZShvbGRGaWxsUnVsZSk7Ci0gICAgc2V0RmlsbENv
bG9yKG9sZEZpbGxDb2xvcik7Ci19CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQotewotICAgIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3Np
dGVPcGVyYXRpb247Ci0gICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVuZE1vZGU7Ci0gICAgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJh
dGlvbkNoYW5nZSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhl
bEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VX
aWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBAIC04NTAsNzcgKzU0MSw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYg
cDEsIEZsb2F0UG9pbnQmIHAyCiAgICAgfQogfQogCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0
OjpzY2FsZUZhY3RvcigpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9
IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwot
ICAgIHJldHVybiBGbG9hdFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxl
KCkpOwotfQotICAgIAotRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JE
cmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBo
aWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byB0cmFu
c2Zvcm1lZERlc3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOwotICAgIHJldHVy
biB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBmaWxs
UGF0aChwYXRoKTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAg
IFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgZmlsbFBhdGgo
cGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKGNv
bnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRF
bGxpcHNlKGVsbGlwc2UpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAg
IGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCBEYXNoQXJy
YXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0eWxl
KTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5k
c0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQotewotICAgIENv
bG9yIGR1bW15Q29sb3I7Ci0gICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQocmVjdCwgcHJpbnRpbmcsIGR1bW15Q29sb3IpOwotfQotCi1GbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVG
b3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgQ29sb3ImIGNvbG9y
KQotewotICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gcmVjdC5sb2NhdGlvbigpOwotICAgIGZsb2F0
IHRoaWNrbmVzcyA9IHN0ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIDAuNWYpOwotICAgIGlmIChwcmlu
dGluZykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0Lndp
ZHRoKCksIHRoaWNrbmVzcykpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAg
IC8vIEp1c3QgY29tcHV0ZSBzY2FsZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcgeCBhbmQgeSBz
Y2FsZXMgYXJlIGVxdWFsLgotICAgIGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLmIoKSA/IHN0ZDo6
aHlwb3QodHJhbnNmb3JtLmEoKSwgdHJhbnNmb3JtLmIoKSkgOiB0cmFuc2Zvcm0uYSgpOwotICAg
IGlmIChzY2FsZSA8IDEuMCkgewotICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRyYXdzIGEg
bGluZSB0aGF0IGlzIGF0IGxlYXN0IG9uZS1waXhlbCBsaW5lIGhpZ2gsCi0gICAgICAgIC8vIHdo
aWNoIHRlbmRzIHRvIHZpc3VhbGx5IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxlcy4gVG8g
Y291bnRlciB0aGlzCi0gICAgICAgIC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGllZCB0byB0
aGUgdW5kZXJsaW5lIGNvbG9yIHdoZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMuCi0gICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdCBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPSAwLjRmOwotICAgICAg
ICBmbG9hdCBzaGFkZSA9IHNjYWxlID4gbWluaW11bVVuZGVybGluZUFscGhhID8gc2NhbGUgOiBt
aW5pbXVtVW5kZXJsaW5lQWxwaGE7Ci0gICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxw
aGFNdWx0aXBsaWVkQnkoc2hhZGUpOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9p
bnQgPSB0cmFuc2Zvcm0ubWFwUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKLSAgICAvLyBWaXN1YWwg
b3ZlcmZsb3cgbWlnaHQgb2NjdXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2
aXN1YWxPdmVyZmxvd0ZvckRlY29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZv
ciB1bmRlcmxpbmUgZGVjb3JhdGlvbi4KLSAgICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZs
b2F0UG9pbnQocm91bmRmKGRldmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkp
OwotICAgIGlmIChhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQotICAgICAgICBv
cmlnaW4gPSBpbnZlcnNlLnZhbHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKLSAgICByZXR1
cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7
Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ry
b2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxvYXQgdGhpY2tuZXNz
ID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC05NzIsMTUgKzU5Miw0IEBAIFZlY3RvcjxGbG9hdFBv
aW50PiBHcmFwaGljc0NvbnRleHQ6OmNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNW
ZXJ0aWNhbExpCiAgICAgcmV0dXJuIHsgcG9pbnQxLCBwb2ludDIgfTsKIH0KIAotI2lmIEVOQUJM
RShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBwbGF5
ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVz
dGluYXRpb24pOwotfQotI2VuZGlmCi0KLXZvaWQgTnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Nv
bnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsKLX0KLQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAppbmRleCBmYjk1ZGQyNWIyNzFkZWI5ZmE4NWZmMmQ5ZjFmNzQ3MTZhMDY2YmFlLi5iMzlj
ZDgyNDgwMGE5NDI3MzFmNzc0YWJkMGE5OGNkZmJhNzRmOGE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIElu
Yy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMwLDQ5ICszMCwxOCBAQAogI2luY2x1ZGUgIkRlc3Rp
bmF0aW9uQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9y
aWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9PcHRpb25TZXQuaD4KIAotI2lmIFVTRShDRykKLXR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbGlmIFVTRShDQUlSTykKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOwotfQotdHlwZWRlZiBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbHNlCi10eXBl
ZGVmIHZvaWQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JN
KFdJTikKLSNpbmNsdWRlICJESUJQaXhlbERhdGEuaCIKLXR5cGVkZWYgc3RydWN0IEhEQ19fKiBI
REM7Ci0jaWYgIVVTRShDRykKLS8vIFVJbnQ4IGlzIGRlZmluZWQgaW4gQ29yZUZvdW5kYXRpb24v
Q0ZCYXNlLmgKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBVSW50ODsKLSNlbmRpZgotI2VuZGlmCi0K
LS8vIFgxMSBoZWFkZXJzIGRlZmluZSBhIGJ1bmNoIG9mIG1hY3JvcyB3aXRoIGNvbW1vbiB0ZXJt
cywgaW50ZXJmZXJpbmcgd2l0aCBXZWJDb3JlIGFuZCBXVEYgZW51bSB2YWx1ZXMuCi0vLyBBcyBh
IHdvcmthcm91bmQsIHdlIGV4cGxpY2l0bHkgdW5kZWYgdGhlbSBoZXJlLgotI2lmIGRlZmluZWQo
Tm9uZSkKLSN1bmRlZiBOb25lCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEJlbG93KQotI3VuZGVmIEJl
bG93Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKFN1Y2Nlc3MpCi0jdW5kZWYgU3VjY2VzcwotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwpAQCAtODIs
NyArNTEsNiBAQCBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNs
YXNzIEludFJlY3Q7CiBjbGFzcyBNZWRpYVBsYXllcjsKIGNsYXNzIFJvdW5kZWRSZWN0OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0w7CkBAIC05MSwxNzQgKzU5LDEyIEBAIGNsYXNzIFN5c3RlbUlt
YWdlOwogY2xhc3MgVGV4dFJ1bjsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCi1uYW1l
c3BhY2UgRGlzcGxheUxpc3QgewotY2xhc3MgUmVjb3JkZXI7Ci19Ci0KLWVudW0gY2xhc3MgVGV4
dERyYXdpbmdNb2RlIDogdWludDhfdCB7Ci0gICAgRmlsbCA9IDEgPDwgMCwKLSAgICBTdHJva2Ug
PSAxIDw8IDEsCi19OwotdXNpbmcgVGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4
dERyYXdpbmdNb2RlPjsKLQotLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZv
ciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0vLyBJdCBoYXMgZGlmZmVyZW50IHRy
ZWF0bWVudCBvZiByYWRpaSA+IDhweC4KLWVudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9kZSA6IGJv
b2wgewotICAgIERlZmF1bHQsCi0gICAgTGVnYWN5Ci19OwotCi1lbnVtIFN0cm9rZVN0eWxlIHsK
LSAgICBOb1N0cm9rZSwKLSAgICBTb2xpZFN0cm9rZSwKLSAgICBEb3R0ZWRTdHJva2UsCi0gICAg
RGFzaGVkU3Ryb2tlLAotICAgIERvdWJsZVN0cm9rZSwKLSAgICBXYXZ5U3Ryb2tlLAotfTsKLQot
c3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKLSAgICBlbnVtIGNsYXNzIE1vZGUgOiB1
aW50OF90IHsKLSAgICAgICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0
aXZlcywKLSAgICAgICAgU3BlbGxpbmcsCi0gICAgICAgIEdyYW1tYXIsCi0gICAgICAgIEF1dG9j
b3JyZWN0aW9uUmVwbGFjZW1lbnQsCi0gICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcwotICAg
IH0gbW9kZTsKLSAgICBib29sIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2UgfTsKLQot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Ci12b2lkIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1vZGU7Ci0gICAgZW5jb2RlciA8PCBz
aG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0
ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPE1vZGU+
IG1vZGU7Ci0gICAgZGVjb2RlciA+PiBtb2RlOwotICAgIGlmICghbW9kZSkKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkVXNlRGFy
a0FwcGVhcmFuY2U7Ci0gICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLSAg
ICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgcmV0dXJuIHt7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfX07
Ci19Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTsKLQotc3RydWN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlIHsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0
ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotCi0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYm
KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
b3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0gICAgZW51bSBDaGFuZ2UgOiB1
aW50MzJfdCB7Ci0gICAgICAgIFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgMCwKLSAgICAgICAgU3Ryb2tlUGF0dGVybkNoYW5nZSAgICAgICAgICAgICAgICAg
ICAgID0gMSA8PCAxLAotICAgICAgICBGaWxsR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDIsCi0gICAgICAgIEZpbGxQYXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMywKLSAgICAgICAgU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlICAgICAgICAg
ICAgICAgICAgID0gMSA8PCA0LAotICAgICAgICBTdHJva2VDb2xvckNoYW5nZSAgICAgICAgICAg
ICAgICAgICAgICAgPSAxIDw8IDUsCi0gICAgICAgIFN0cm9rZVN0eWxlQ2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgNiwKLSAgICAgICAgRmlsbENvbG9yQ2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMSA8PCA3LAotICAgICAgICBGaWxsUnVsZUNoYW5nZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDgsCi0gICAgICAgIFNoYWRvd0NoYW5nZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOSwKLSAgICAgICAgU2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXNDaGFuZ2UgICAgICAgICAgID0gMSA8PCAxMCwKLSAgICAgICAgQWxwaGFDaGFuZ2UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxMSwKLSAgICAgICAgQ29tcG9zaXRlT3Bl
cmF0aW9uQ2hhbmdlICAgICAgICAgICAgICAgID0gMSA8PCAxMiwKLSAgICAgICAgQmxlbmRNb2Rl
Q2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxMywKLSAgICAgICAgVGV4dERy
YXdpbmdNb2RlQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNCwKLSAgICAgICAgU2hv
dWxkQW50aWFsaWFzQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNSwKLSAgICAgICAg
U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAxNiwKLSAgICAg
ICAgU2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlICAgICAgID0gMSA8PCAxNywKLSAg
ICAgICAgRHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAxOCwK
LSAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSAgICAgICAgID0gMSA8PCAx
OSwKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgICAgICBVc2VEYXJrQXBwZWFy
YW5jZUNoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDIwLAotI2VuZGlmCi0gICAgfTsKLSAg
ICB1c2luZyBTdGF0ZUNoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47Ci0KLSAgICB2b2lk
IG1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tl
R3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47Ci0gICAgCi0gICAg
UmVmUHRyPEdyYWRpZW50PiBmaWxsR3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+IGZpbGxQ
YXR0ZXJuOwotCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLQotICAgIENvbG9yIHN0cm9r
ZUNvbG9yIHsgQ29sb3I6OmJsYWNrIH07Ci0gICAgQ29sb3IgZmlsbENvbG9yIHsgQ29sb3I6OmJs
YWNrIH07Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gc3Ry
b2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZmlsbEdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm07Ci0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgeyAwIH07Ci0g
ICAgZmxvYXQgc2hhZG93Qmx1ciB7IDAgfTsKLSAgICBmbG9hdCBhbHBoYSB7IDEgfTsKLQotICAg
IFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBXaW5kUnVsZSBm
aWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07Ci0KLSAgICBUZXh0RHJhd2luZ01vZGVGbGFn
cyB0ZXh0RHJhd2luZ01vZGUgeyBUZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKLSAgICBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyIH07Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07Ci0g
ICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IEludGVy
cG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07Ci0gICAgU2hhZG93UmFkaXVzTW9kZSBzaGFkb3dS
YWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwotCi0gICAgYm9vbCBzaG91
bGRBbnRpYWxpYXMgOiAxOwotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwotICAgIGJv
b2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKLSAgICBib29sIHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zIDogMTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDogMTsKLSNpZiBI
QVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgOiAx
OwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgewotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKCkgPSBkZWZhdWx0OwotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgICAgIDogbV9zdGF0
ZShzdGF0ZSkKLSAgICAgICAgLCBtX2NoYW5nZUZsYWdzKGZsYWdzKQotICAgIHsKLSAgICB9Ci0K
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgY29uc3Q7Ci0KLSAgICB2b2lkIGFjY3Vt
dWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyk7Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKLSAgICAKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzIG1fY2hhbmdlRmxhZ3M7Ci19OwotCi1XVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmKTsKLQogY2xhc3MgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShHcmFwaGljc0NvbnRleHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzogICAK
KyAgICBmcmllbmQgY2xhc3MgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKK3B1YmxpYzoKKyAgICBXRUJD
T1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZUZsYWdzJiA9IHsgfSwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5HcmFwaGljc0NvbnRleHQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMjcwLDI3MCArNzYsMjczIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rl
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGRldGVjdGluZ0Nv
bnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBDb250ZXh0
IFN0YXRlCisgICAgYm9vbCBjb250ZW5mdWxQYWludERldGVjdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50
RGV0ZWN0ZWQoKSB7IG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9CisgICAgCisg
ICAgdmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKLSAgICB2b2lkIHNldFN0cm9rZVRoaWNr
bmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25l
c3M7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UpOyB9Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KKyAgICAvLyBDb250ZXh0IFN0YXRlCiAK
LSAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ry
b2tlU3R5bGUgPSBzdHlsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKTsgfQotICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VTdHlsZTsgfQorICAgIGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2
b2lkIG1lcmdlU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikg
eyBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhvdGhlcik7IH0KKyAgICB2b2lkIG1lcmdlU3RhdGVEaWZm
cyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpIHsgbV9zdGF0ZS5tZXJnZURpZmZz
KG90aGVyKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VDb2xvcihjb25z
dCBDb2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuc3Ryb2tlQ29sb3I7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5nZXRDVE0oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pIHsgbV9zdGF0ZS5zZXRDVE0oY3RtLCBtX2xhc3RB
cHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBjdG0pIHsgc2V0Q1RNKGdldENUTSgpICogY3RtKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0IHgsIGZsb2F0IHkpIHsgc2V0Q1RNKGdldENUTSgpLnRyYW5zbGF0ZSh4LCB5KSk7IH0KKyAg
ICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNsYXRlKHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9h
dFBvaW50JiBwKSB7IHRyYW5zbGF0ZShwLngoKSwgcC55KCkpOyB9CisgICAgdm9pZCBzY2FsZShm
bG9hdCBzeCwgZmxvYXQgc3kpIHsgc2V0Q1RNKGdldENUTSgpLnNjYWxlKHN4LCBzeSkpOyB9Cisg
ICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHMsIHMpOyB9CisgICAgdm9pZCBzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNpemUpIHsgc2NhbGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsgfQorICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSB7IHNldENUTShnZXRD
VE0oKS5yb3RhdGUocmFkMmRlZyhhbmdsZUluUmFkaWFucykpKTsgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQYXR0ZXJu
KiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdl
dCgpOyB9CisgICAgY29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuZmlsbEJydXNoKCkuY29sb3IoKTsgfQorICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxCcnVzaCgpLmdyYWRpZW50KCk7IH0KKyAgICBQYXR0
ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkucGF0
dGVybigpOyB9CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsU3BhY2VUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCk7IH0K
KyAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9zdGF0ZS5zZXRG
aWxsQ29sb3IoY29sb3IsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldEZpbGxH
cmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
c3BhY2VUcmFuc2Zvcm0gPSB7IH0pIHsgbV9zdGF0ZS5zZXRGaWxsR3JhZGllbnQoV1RGTW92ZShn
cmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9y
bSA9IHsgfSkgeyBtX3N0YXRlLnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNl
VHJhbnNmb3JtKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VHcmFkaWVu
dChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwotICAgIEdy
YWRpZW50KiBzdHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQuZ2V0KCk7IH0KKyAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuZmlsbFJ1bGUoKTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1
bGUpIHsgbV9zdGF0ZS5zZXRGaWxsUnVsZShmaWxsUnVsZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsg
fQogCi0gICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZp
bGxSdWxlID0gZmlsbFJ1bGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KLSAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KKyAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29s
b3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsgfQorICAg
IEdyYWRpZW50KiBzdHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tl
QnJ1c2goKS5ncmFkaWVudCgpOyB9CisgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5wYXR0ZXJuKCk7IH0KKyAgICBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5zdHJva2VCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNldFN0cm9r
ZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldFN0cm9rZUNvbG9yKGNvbG9y
LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8
R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoZ3Jh
ZGllbnQpLCBncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlUGF0
dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5TcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldFN0cm9rZVBhdHRlcm4oV1RGTW92
ZShwYXR0ZXJuKSwgcGF0dGVyblNwYWNlVHJhbnNmb3JtKTsgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBjb25zdCBDb2xvciYgZmls
bENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQ29sb3I7IH0KKyAgICBmbG9hdCBz
dHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcygp
OyB9CisgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3Rh
dGUuc2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7
Ci0gICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxQ
YXR0ZXJuLmdldCgpOyB9CisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnN0cm9rZVN0eWxlKCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0
cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc2V0U3Ryb2tlU3R5bGUoc3R5bGUsIG1fbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50
KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3Jh
ZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50
LmdldCgpOyB9CisgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5s
aW5lQ2FwKCk7IH0KKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKSB7IG1fc3Rh
dGUuc2V0TGluZUNhcChsaW5lQ2FwLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lk
IHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
IHsgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0K
KyAgICBjb25zdCBMaW5lRGFzaCBsaW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubGlu
ZURhc2goKTsgfQorICAgIHZvaWQgc2V0TGluZURhc2goTGluZURhc2gmJiBsaW5lRGFzaCkgeyBt
X3N0YXRlLnNldExpbmVEYXNoKFdURk1vdmUobGluZURhc2gpLCBtX2xhc3RBcHBsaWVkU3RhdGUp
OyB9CiAKLSAgICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykg
eyBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlhczsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7
IH0KLSAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hv
dWxkQW50aWFsaWFzOyB9CisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmxpbmVKb2luKCk7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVK
b2luKSB7IG1fc3RhdGUuc2V0TGluZUpvaW4obGluZUpvaW4sIG1fbGFzdEFwcGxpZWRTdGF0ZSk7
IH0KIAotICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250
cykgeyBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7IGRpZFVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250
c0NoYW5nZSk7IH0KLSAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zaG91bGRTbW9vdGhGb250czsgfQorICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLm1pdGVyTGltaXQoKTsgfQorICAgIHZvaWQgc2V0TWl0ZXJMaW1p
dChmbG9hdCBtaXRlckxpbWl0KSB7IG1fc3RhdGUuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0LCBt
X2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBp
eGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBh
bGlnbmluZyBnbHlwaHMuCi0gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUg
dG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgotICAgIHZv
aWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsgfQotICAgIGJv
b2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IH0KKyAgICBDb21wb3NpdGVNb2RlIGNvbXBvc2l0
ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU1vZGUoKTsgfQorICAgIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbXBv
c2l0ZU1vZGUoKS5vcGVyYXRpb247IH0KKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3Qg
eyByZXR1cm4gY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZTsgfQorICAgIHZvaWQgc2V0Q29tcG9z
aXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUpIHsgbV9zdGF0ZS5zZXRDb21wb3Np
dGVNb2RlKGNvbXBvc2l0ZU1vZGUsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcGVyYXRpb24pIHsgc2V0Q29t
cG9zaXRlTW9kZSh7IG9wZXJhdGlvbiwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7IH0KIAotICAgIHZv
aWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFs
aXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IGRpZFVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5Q2hhbmdlKTsgfQotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHk7IH0KKyAgICBjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5kcm9wU2hhZG93KCk7IH0KKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLm9mZnNldDsgfQorICAgIGZsb2F0IHNoYWRv
d0JsdXIoKSBjb25zdCB7IHJldHVybiBkcm9wU2hhZG93KCkuYmx1clJhZGl1czsgfQorICAgIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5jb2xv
cjsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93
KSB7IG1fc3RhdGUuc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93LCBtX2xhc3RBcHBsaWVkU3RhdGUp
OyB9CisgICAgdm9pZCBjbGVhclNoYWRvdygpIHsgc2V0RHJvcFNoYWRvdyh7IH0pOyB9CiAKLSAg
ICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuYWxwaGEgPSBhbHBoYTsgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKTsg
fQotICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYTsgfQorICAg
IGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5pc1Zp
c2libGUoKTsgfQorICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRy
b3BTaGFkb3coKS5pc0JsdXJyZWQoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gZHJvcFNoYWRvdygpLmhhc091dHNldHMoKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVy
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOyB9Ci0gICAg
QmxlbmRNb2RlIGJsZW5kTW9kZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYmxl
bmRNb2RlOyB9CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhh
KCk7IH0KKyAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuc2V0QWxwaGEo
YWxwaGEsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0RHJhd0x1bWluYW5j
ZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNr
ID0gZHJhd0x1bWluYW5jZU1hc2s7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7IH0KLSAgICBib29sIGRyYXdMdW1p
bmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzazsgfQor
ICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsgfQorICAgIHZv
aWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KSB7IG1fc3RhdGUuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShpbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAK
LSAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKSB7
IG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSk7IH0KLSAgICBUZXh0
RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnRleHREcmF3aW5nTW9kZTsgfQorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKCk7IH0KKyAgICB2
b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01v
ZGUpIHsgbV9zdGF0ZS5zZXRUZXh0RHJhd2luZ01vZGUodGV4dERyYXdpbmdNb2RlLCBtX2xhc3RB
cHBsaWVkU3RhdGUpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRvdyhjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYsIFNoYWRvd1JhZGl1c01vZGUg
PSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgY2xlYXJTaGFkb3coKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldFNoYWRvdyhG
bG9hdFNpemUmLCBmbG9hdCYsIENvbG9yJikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRBbnRpYWxp
YXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhcygpOyB9CisgICAgdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zZXRT
aG91bGRBbnRpYWxpYXMoc2hvdWxkQW50aWFsaWFzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAK
LSAgICBib29sIGhhc1Zpc2libGVTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRv
d0NvbG9yLmlzVmlzaWJsZSgpOyB9Ci0gICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVy
biBoYXNWaXNpYmxlU2hhZG93KCkgJiYgKG1fc3RhdGUuc2hhZG93Qmx1ciB8fCBtX3N0YXRlLnNo
YWRvd09mZnNldC53aWR0aCgpIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsgfQot
ICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFk
b3coKSAmJiBtX3N0YXRlLnNoYWRvd0JsdXI7IH0KKyAgICBib29sIHNob3VsZFNtb290aEZvbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cygpOyB9CisgICAgdm9p
ZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1fc3RhdGUu
c2V0U2hvdWxkU21vb3RoRm9udHMoc2hvdWxkU21vb3RoRm9udHMsIG1fbGFzdEFwcGxpZWRTdGF0
ZSk7IH0KIAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgdm9pZCBzZXRVc2VE
YXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlKSB7IG1fc3RhdGUudXNlRGFya0Fw
cGVhcmFuY2UgPSB1c2VEYXJrQXBwZWFyYW5jZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKTsgfQotICAgIGJvb2wg
dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJh
bmNlOyB9Ci0jZW5kaWYKKyAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBpeGVsLXF1YW50
aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBn
bHlwaHMuCisgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUgdG8gdG8gZW5z
dXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgorICAgIGJvb2wgc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMoKTsgfQorICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2V0U2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgbV9s
YXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgYm9vbCBzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoKTsgfQorICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBz
aGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0YXRlLnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAg
ICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrKCk7IH0KKyAgICB2
b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spIHsgbV9zdGF0
ZS5zZXREcmF3THVtaW5hbmNlTWFzayhkcmF3THVtaW5hbmNlTWFzaywgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgLy8gQ2FsbGVkICphZnRlciogYW55IGNoYW5nZSB0byBHcmFwaGljc0Nv
bnRleHRTdGF0ZTsgZ2VuZXJhbGx5IHVzZWQgdG8gcHJvcGFnYXRlIGNoYW5nZXMKLSAgICAvLyB0
byB0aGUgcGxhdGZvcm0gY29udGV4dCdzIHN0YXRlLgotICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkK
KyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS51c2VE
YXJrQXBwZWFyYW5jZSgpOyB9CisgICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVz
ZURhcmtBcHBlYXJhbmNlKSB7IG1fc3RhdGUuc2V0VXNlRGFya0FwcGVhcmFuY2UodXNlRGFya0Fw
cGVhcmFuY2UsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyNlbmRpZgogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHNhdmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgcmVzdG9yZSgpOwotICAgIAorICAgIHZvaWQgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAg
ICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQog
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgPSAwOwogI2lmIFVTRShDRykK
ICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIHJlYWxseSBiZSBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0IG1ldGhvZHM/Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOworI2VuZGlmCiAKLSAgICAvLyBGSVhNRTogQ2Fu
IHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRoZW4gaGF2ZSBpdCBl
eGlzdCBjcm9zcy1wbGF0Zm9ybT8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4
dChib29sKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OwogCi0g
ICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3Ig
cGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQgb2ZmIHRoZSBjb250ZXh0PwotICAgIHZpcnR1YWwg
dm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSA9IDA7Ci0jZW5kaWYKKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNvbnRl
eHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCisgICAgLy8gYWN0aW5nIGFzIGEgYmFz
ZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgorICAgIHZpcnR1YWwgdm9p
ZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3IpOyB9
CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KKyAgICAvLyBUcmFuc3BhcmVuY3kg
TGF5ZXJzCiAKLSAgICAvLyBQaXhlbCBTbmFwcGluZworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wg
aXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gc3VwcG9ydHNUcmFuc3BhcmVu
Y3lMYXllcnMoKSAmJiBtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7IH0KIAotICAgIGVudW0gUm91
bmRpbmdNb2RlIHsKLSAgICAgICAgUm91bmRBbGxTaWRlcywKLSAgICAgICAgUm91bmRPcmlnaW5B
bmREaW1lbnNpb25zCi0gICAgfTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0g
MDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5k
YXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwg
U3Ryb2tlU3R5bGUpOworICAgIC8vIENsaXBwaW5nCiAKLSAgICAvLyBTaGFwZXMKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0g
V2luZFJ1bGU6OkV2ZW5PZGQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9k
cyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxpbmcuCi0gICAgLy8gRklYTUU6IC4uLmV4
Y2VwdCBkcmF3UmVjdCgpLCB3aGljaCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9rZXMK
LSAgICAvLyB1c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9yZGVy
cyAob2YgdGhlIGNvcnJlY3QKLSAgICAvLyBzdHJva2UgY29sb3IpLgotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9y
JiBzaGFkb3dDb2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
OwogCi0gICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOworICAgIEludFJlY3QgY2xpcEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9zdGF0ZS5jbGlwQm91bmRz
KCkpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBl
bGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlwc2VB
c1BhdGgoZWxsaXBzZSk7IH0KKyAgICAvLyBTaGFwZXMKKworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCiAgICAgdmlydHVh
bCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdmlydHVhbCB2b2lkIGZp
bGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
PSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
OjpOb3JtYWwpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBj
b25zdCBDb2xvciYsIEJsZW5kTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgPSAwOwotCi0gICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywg
YW5kIE1lZGlhCisgICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkgeyBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsgfQorICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwogCi0gICAgSW50U2l6
ZSBjb21wYXRpYmxlSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
PSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
b2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3Rk
OjpudWxsb3B0KSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRT
aXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4g
PSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVs
bG9wdCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNj
YWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6
bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBj
b25zdDsKKyAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBib3RoIHN0cm9raW5nIGFu
ZCBmaWxsaW5nLgorICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1JlY3QoKSwgd2hpY2ggZmls
bHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCisgICAgLy8gdXNpbmcgYSAxLXBpeGVsIHN0
cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBjb3JyZWN0CisgICAgLy8g
c3Ryb2tlIGNvbG9yKS4KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdl
QnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBz
dGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVk
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmlu
Z01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVs
bGlwc2UpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29u
c3QgUGF0aCYpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikg
PSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShT
eXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9y
LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmly
dHVhbCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURy
YXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAg
Ly8gRm9jdXMgUmluZ3MKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVz
dWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVs
ZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBp
biB0aGUgQ0cgaW1wbGVtZW50YXRpb24/IE9yIGVsc2V3aGVyZT8KKyNpZiBQTEFURk9STShNQUMp
CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGlt
ZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOworI2VuZGlmCiAK
KyAgICAvLyBJbWFnZXMKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFn
ZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VC
dWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVm
UHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwg
RmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50
YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQg
ZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsK
IAorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJj
ZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIElt
YWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVT
Y2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsK
ICNlbmRpZgotCi0gICAgLy8gQ2xpcHBpbmcKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBj
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChj
b25zdCBQYXRoJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBj
bGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50
UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7Ci0KKyAgICAKICAgICAvLyBUZXh0CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVu
c2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9w
dCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2Nh
ZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZG
b250Tm90UmVhZHkpOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAg
ICB7Ci0gICAgICAgIGRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
cmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAs
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0
IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJh
d0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7CiAgICAgdmlydHVhbCB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMg
PSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlKSA9IDA7CiAKLSAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCi0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKLSAgICBib29sIGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJu
IChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxh
eWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVC
b3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwogCi0gICAgLy8g
Rm9jdXMgUmluZ3MKKyAgICAvLyBDb21wYXRpYmxlIEltYWdlQnVmZmVyCiAKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYpID0gMDsKLSAgICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGlt
cGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1
YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9v
bCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJv
b2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKLSNlbmRpZgorICAgIEludFNpemUg
Y29tcGF0aWJsZUltYWdlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKIAotICAg
IC8vIFRyYW5zZm9ybXMKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxs
b3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0
OwogCi0gICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsgcywgcyB9KTsgfQotICAgIHZp
cnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwotICAgIHZvaWQgdHJhbnNsYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsgfQotICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgdHJhbnNs
YXRlKHAueCgpLCBwLnkoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZVNjYWxlZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
c2NhbGUgPSB7IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3Rk
OjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2Nh
bGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9
IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxv
cHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxp
Z25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpu
dWxsb3B0KSBjb25zdDsKIAotICAgIGVudW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVmaW5pdGVs
eUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsKLSAgICB2
aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2li
bHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0ID0gMDsKKyAgICAvLyBQaXhlbCBTbmFwcGluZwog
Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRv
IHRoZSBjb250ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgotICAgIC8vIGFjdGlu
ZyBhcyBhIGJhc2UtbGV2ZWwgY29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KLSAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2NhbGUo
ZmFjdG9yKTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNv
bnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmco
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dDsKKyAgICBlbnVtIFJvdW5kaW5nTW9kZSB7CisgICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAg
ICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucworICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJl
Y3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBS
b3VuZEFsbFNpZGVzKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0
TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxv
YXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKIAogICAgIC8vIExpbmtzCiAKKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KwogICAgIHZpcnR1YWwgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0
UmVjdCYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25z
dCBTdHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRkRGVz
dGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KIAot
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotCi0gICAgLy8gQ29udGVudGZ1bCBQYWludCBEZXRlY3Rpb24KKyNpZiBVU0UoQ0cp
CisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdoYXQs
IGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2b2lk
IHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgeyB9CisgICAgdmlydHVhbCBib29sIGlzQ0FMYXll
ckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBzZXRDb250ZW50
ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0K
LSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRmdWxQYWludERldGVjdGVkOyB9CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEgR3JhcGhp
Y3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQgb2ZmIHRo
ZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29s
KSB7IH0KKyNlbmRpZgogCiAgICAgLy8gRklYTUU6IE5vdGhpbmcgaW4gdGhpcyBzZWN0aW9uIGJl
bG9uZ3MgaGVyZSwgYW5kIHNob3VsZCBiZSBtb3ZlZCBlbHNld2hlcmUuCiAjaWYgT1MoV0lORE9X
UykKQEAgLTU0NiwxMCArMzU1LDcgQEAgcHVibGljOgogICAgIC8vIHB1dCBjb2RlIHNoYXJlZCBi
ZXR3ZWVuIFdpbmRvd3MgQ0cgYW5kIFdpbmRvd3MgQ2Fpcm8gYmFja2VuZHMuCiAgICAgdmlydHVh
bCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgotCi1wcml2YXRlOgotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KLQorICAgIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29u
c3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0
UmVjdCYpOwpAQCAtNTYxLDE5MSArMzY3LDE3IEBAIHByb3RlY3RlZDoKICAgICBmbG9hdCBkYXNo
ZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJu
V2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdDsKICAgICBWZWN0b3I8RmxvYXRQb2ludD4g
Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29y
bmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29uc3Q7CiAK
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwotCiBwcml2YXRlOgorICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisgICAgc3RkOjpvcHRpb25h
bDxHcmFwaGljc0NvbnRleHRTdGF0ZT4gbV9sYXN0QXBwbGllZFN0YXRlOwogICAgIFZlY3RvcjxH
cmFwaGljc0NvbnRleHRTdGF0ZSwgMT4gbV9zdGFjazsKIAogICAgIHVuc2lnbmVkIG1fdHJhbnNw
YXJlbmN5TGF5ZXJDb3VudCB7IDAgfTsKICAgICBib29sIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0
ZWQgeyBmYWxzZSB9OwogfTsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUg
PSB0cnVlKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NhdmVBbmRSZXN0b3Jl
KHNhdmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0g
ICAgICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOwotICAgIH0KLSAgICAKLSAgICB+R3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcigpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkK
LSAgICAgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c2F2ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAg
ICBtX2NvbnRleHQuc2F2ZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFu
ZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAgICAgICBtX3NhdmVB
bmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX2NvbnRleHQ7IH0KLQotcHJpdmF0ZToKLSAgICBHcmFw
aGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Ci19Owot
Ci1jbGFzcyBUcmFuc3BhcmVuY3lMYXllclNjb3BlIHsKLXB1YmxpYzoKLSAgICBUcmFuc3BhcmVu
Y3lMYXllclNjb3BlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxwaGEsIGJvb2wg
YmVnaW5MYXllciA9IHRydWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAg
ICwgbV9hbHBoYShhbHBoYSkKLSAgICAgICAgLCBtX2JlZ2FuTGF5ZXIoYmVnaW5MYXllcikKLSAg
ICB7Ci0gICAgICAgIGlmIChiZWdpbkxheWVyKQotICAgICAgICAgICAgbV9jb250ZXh0LmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYmVnaW5M
YXllcihmbG9hdCBhbHBoYSkKLSAgICB7Ci0gICAgICAgIG1fYWxwaGEgPSBhbHBoYTsKLSAgICAg
ICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7Ci0gICAgICAgIG1f
YmVnYW5MYXllciA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIH5UcmFuc3BhcmVuY3lMYXllclNj
b3BlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2JlZ2FuTGF5ZXIpCi0gICAgICAgICAgICBtX2Nv
bnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3Jh
cGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Ci0gICAgZmxvYXQgbV9hbHBoYTsKLSAgICBib29sIG1f
YmVnYW5MYXllcjsKLX07Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2Vy
IHsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAg
ICwgbV9zdGFja1NpemUoY29udGV4dC5zdGFja1NpemUoKSkKLSAgICB7IH0KLSAgICAKLSAgICB+
R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
Y29udGV4dC5zdGFja1NpemUoKSAhPSBtX3N0YWNrU2l6ZSkKLSAgICAgICAgICAgIFdURkxvZ0Fs
d2F5cygiR3JhcGhpY3NDb250ZXh0ICVwIHN0YWNrIGNoYW5nZWQgYnkgJWQiLCAmbV9jb250ZXh0
LCAoaW50KW1fY29udGV4dC5zdGFja1NpemUoKSAtIChpbnQpbV9zdGFja1NpemUpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICB1bnNpZ25l
ZCBtX3N0YWNrU2l6ZTsKLX07Ci0KLWNsYXNzIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5l
ciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBp
bnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgICAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdy
YXBoaWNzQ29udGV4dCkKLSAgICAgICAgLCBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eShn
cmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQotICAgICAgICAsIG1f
aW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UgIT0g
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgJiYgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1
YWxpdHkgIT0gaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKLSAgICB7Ci0gICAgICAgIGlmICht
X2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250
ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1Vz
ZSk7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBzdGQ6Om9wdGlvbmFsPEludGVycG9s
YXRpb25RdWFsaXR5PiBpbnRlcnBvbGF0aW9uUXVhbGl0eSkKLSAgICAgICAgOiBJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXIoZ3JhcGhpY3NDb250ZXh0LCBpbnRlcnBvbGF0aW9uUXVhbGl0
eSA/IGludGVycG9sYXRpb25RdWFsaXR5LnZhbHVlKCkgOiBncmFwaGljc0NvbnRleHQuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICB+SW50ZXJwb2xhdGlv
blF1YWxpdHlNYWludGFpbmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkobV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0OwotICAg
IEludGVycG9sYXRpb25RdWFsaXR5IG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5OwotICAg
IGJvb2wgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQ7Ci19OwotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLW5hbWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlPiB7Ci0gICAgdXNpbmcg
dmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHls
ZTo6TW9kZSwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4
dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKLSAgICBXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcsCi0gICAgV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIsCi0gICAgV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCi0gICAg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcwotICAgID47Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlLAot
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VHcmFk
aWVudENoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6RmlsbEdyYWRpZW50Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsUGF0dGVybkNoYW5nZSwKLSAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
LAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VD
b2xvckNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkZpbGxDb2xvckNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbFJ1bGVDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNoYWRvd0NoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXND
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkFs
cGhhQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkJsZW5kTW9kZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlLAotICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXND
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNo
b3VsZFNtb290aEZvbnRzQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNr
Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKLSAgICAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpV
c2VEYXJrQXBwZWFyYW5jZUNoYW5nZQotI2VuZGlmCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6U3Ryb2tlU3R5bGU+IHsKLSAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlLAotICAgIFdlYkNvcmU6
OlN0cm9rZVN0eWxlOjpOb1N0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6U29saWRT
dHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdHRlZFN0cm9rZSwKLSAgICBXZWJD
b3JlOjpTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxl
OjpEb3VibGVTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OldhdnlTdHJva2UKLSAg
ICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpUZXh0RHJh
d2luZ01vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAgICBXZWJD
b3JlOjpUZXh0RHJhd2luZ01vZGUsCi0gICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZTo6
RmlsbCwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpTdHJva2UKLSAgICA+Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0U3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjOWU1ODFkY2MyMjAzYWQyMWE3
ZjQ4ZjM1NzgxNGRlZmMzY2ZmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAKQEAgLTAsMCArMSwyNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEZsb2F0UmVjdCYg
aW5pdGlhbENsaXAsIGNvbnN0IENoYW5nZUZsYWdzJiBjaGFuZ2VGbGFncywgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBpbml0aWFsQ1RNKQorICAgIDogbV9jbGlwQm91bmRzKGluaXRpYWxDVE0ubWFw
UmVjdChpbml0aWFsQ2xpcCkpCisgICAgLCBtX2NoYW5nZUZsYWdzKGNoYW5nZUZsYWdzKQorICAg
ICwgbV9jdG0oaW5pdGlhbENUTSkKK3sKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpjbGlwQm91bmRzKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gbV9jdG0u
aW52ZXJzZSgpKQorICAgICAgICByZXR1cm4gaW52ZXJzZS0+bWFwUmVjdChtX2NsaXBCb3VuZHMp
OworCisgICAgLy8gSWYgdGhlIENUTSBpcyBub3QgaW52ZXJ0aWJsZSwgcmV0dXJuIHRoZSBvcmln
aW5hbCByZWN0LgorICAgIC8vIFRoaXMgbWF0Y2hlcyBDR1JlY3RBcHBseUludmVyc2VBZmZpbmVU
cmFuc2Zvcm0gYmVoYXZpb3IuCisgICAgcmV0dXJuIG1fY2xpcEJvdW5kczsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSBjb25zdAorewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQ2hhbmdlRmxhZ3MgcHJpbWl0aXZlQ2hhbmdlRmxhZ3MgeyBD
aGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgQ2hhbmdlOjpTdHJva2VCcnVzaCwgQ2hhbmdlOjpGaWxs
QnJ1c2ggfTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdzICE9IChtX2NoYW5nZUZsYWdzICYgcHJp
bWl0aXZlQ2hhbmdlRmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhDaGFuZ2U6OlN0cm9rZUJydXNoKSAmJiAhbV9zdHJva2VCcnVz
aC5pc1ByaW1pdGl2ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhDaGFuZ2U6OkZpbGxCcnVzaCkgJiYgIW1fZmlsbEJydXNoLmlzUHJp
bWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIG90aGVyKQoreworICAgIGF1dG8gbWVyZ2VDaGFuZ2UgPSBbJl0oQ2hhbmdl
IGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAg
IGlmIChvdGhlci5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpIHsKKyAgICAgICAgICAg
IHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9wZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdl
RmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgQVNTRVJUKG1fY2xp
cEJvdW5kcyA9PSBvdGhlci5tX2NsaXBCb3VuZHMpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdl
OjpDVE0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9jdG0pOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJv
a2VCcnVzaCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJv
a2VCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpOworICAg
IG1lcmdlQ2hhbmdlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hh
bmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAgICBt
ZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Ok1p
dGVyTGltaXQsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21p
dGVyTGltaXQpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAg
ICBtZXJnZUNoYW5nZShDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hh
bmdlOjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9hbHBoYSk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5LCAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSk7CisKKyAg
ICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7CisgICAgbWVyZ2VDaGFuZ2Uo
Q2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RHJhd0x1bWluYW5j
ZU1hc2ssICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5j
ZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgbWVyZ2VDaGFuZ2Uo
Q2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bWVyZ2VEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIp
Cit7CisgICAgYXV0byBtZXJnZURpZmYgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmICh0aGlzLT4qcHJvcGVydHkg
IT0gb3RoZXIuKnByb3BlcnR5KSB7CisgICAgICAgICAgICB0aGlzLT4qcHJvcGVydHkgPSBvdGhl
ci4qcHJvcGVydHk7CisgICAgICAgICAgICBtX2NoYW5nZUZsYWdzLmFkZChjaGFuZ2UpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkNUTSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworICAgIAorICAgIG1l
cmdlRGlmZihDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkZpbGxSdWxl
LCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7
CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIG1lcmdlRGlmZihDaGFu
Z2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zdHJva2VUaGlja25lc3MpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZVN0eWxlLCAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisK
KyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TGlu
ZURhc2gsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVE
YXNoKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlRGlmZihDaGFu
Z2U6Ok1pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9taXRlckxpbWl0KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpB
bHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxw
aGEpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdlRGlmZihDaGFu
Z2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9zaG91bGRBbnRpYWxpYXMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZFNtb290aEZv
bnRzLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250
cyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7Cisg
ICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtZXJnZURp
ZmYoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQor
CitzdGF0aWMgY29uc3QgY2hhciogc3RhdGVDaGFuZ2VOYW1lKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2UgY2hhbmdlKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzdGF0ZUNo
YW5nZU5hbWVzW10gPSB7CisgICAgICAgICJjdG0iLAorCisgICAgICAgICJmaWxsLWJydXNoIiwK
KyAgICAgICAgImZpbGwtcnVsZSIsCisKKyAgICAgICAgInN0cm9rZS1icnVzaCIsCisgICAgICAg
ICJzdHJva2UtdGhpY2tuZXNzIiwKKyAgICAgICAgInN0cm9rZS1zdHlsZSIsCisKKyAgICAgICAg
ImxpbmUtY2FwIiwKKyAgICAgICAgImxpbmUtZGFzaCIsCisgICAgICAgICJsaW5lLWpvaW4iLAor
ICAgICAgICAibWl0ZXItbGltaXQiLAorCisgICAgICAgICJjb21wb3NpdGUtbW9kZSIsCisgICAg
ICAgICJkcm9wLXNoYWRvdyIsCisKKyAgICAgICAgImFscGhhIiwKKyAgICAgICAgImltYWdlLWlu
dGVycG9sYXRpb24tcXVhbGl0eSIsCisgICAgICAgICJ0ZXh0LWRyYXdpbmctbW9kZSIsCisKKyAg
ICAgICAgInNob3VsZC1hbnRpYWxpYXMiLAorICAgICAgICAic2hvdWxkLXNtb290aC1mb250cyIs
CisgICAgICAgICJzaG91bGQtc3VicGl4ZWwtcXVhbnRpemUtZm9udHMiLAorICAgICAgICAic2hh
ZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsCisgICAgICAgICJkcmF3LWx1bWluYW5jZS1tYXNrIgor
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgICwgInVzZS1kYXJrLWFwcGVh
cmFuY2UiCisjZW5kaWYKKyAgICB9OworCisgICAgdW5zaWduZWQgbWFzayA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjaGFuZ2UpOworICAgIEFTU0VSVCghKChtYXNrIC0gMSkgJiBtYXNrKSk7Cisg
ICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihtYXNr
KSk7CisgICAgcmV0dXJuIHN0YXRlQ2hhbmdlTmFtZXNbaW5kZXhdOworfQorCitUZXh0U3RyZWFt
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAg
ICBhdXRvIGR1bXAgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6KnByb3BlcnR5LCBjb25zdCBTdHJpbmcmIG5hbWUpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eShuYW1l
LCB0aGlzLT4qcHJvcGVydHkpOworICAgIH07CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImNoYW5n
ZS1mbGFncyIsIG1fY2hhbmdlRmxhZ3MpOworCisgICAgZHVtcChDaGFuZ2U6OkNUTSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkNUTSkpOworCisgICAg
ZHVtcChDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fZmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFt
ZShDaGFuZ2U6OkZpbGxCcnVzaCkpOworICAgIGR1bXAoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlLCAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpGaWxsUnVsZSkpOworCisgICAg
ZHVtcChDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFt
ZShDaGFuZ2U6OlN0cm9rZUJydXNoKSk7CisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZVRoaWNrbmVz
cywgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNz
LCAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcykp
OworICAgIGR1bXAoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICBzdGF0ZUNo
YW5nZU5hbWUoQ2hhbmdlOjpTdHJva2VTdHlsZSkpOworCisgICAgZHVtcChDaGFuZ2U6OkxpbmVD
YXAsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNh
cCwgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkxpbmVDYXAp
KTsKKyAgICBkdW1wKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVD
aGFuZ2VOYW1lKENoYW5nZTo6TGluZURhc2gpKTsKKyAgICBkdW1wKENoYW5nZTo6TGluZUpvaW4s
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbiwg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUpvaW4pKTsK
KyAgICBkdW1wKENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFu
Z2VOYW1lKENoYW5nZTo6TWl0ZXJMaW1pdCkpOworCisgICAgZHVtcChDaGFuZ2U6OkNvbXBvc2l0
ZU1vZGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY29tcG9zaXRl
TW9kZSwgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkNvbXBvc2l0ZU1v
ZGUpKTsKKyAgICBkdW1wKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgc3Rh
dGVDaGFuZ2VOYW1lKENoYW5nZTo6RHJvcFNoYWRvdykpOworCisgICAgZHVtcChDaGFuZ2U6OkFs
cGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxw
aGEsICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkFscGhh
KSk7CisgICAgZHVtcChDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgIHN0YXRl
Q2hhbmdlTmFtZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKyAgICBkdW1w
KENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENo
YW5nZTo6VGV4dERyYXdpbmdNb2RlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxkQW50aWFs
aWFzLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxp
YXMsICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkQW50aWFsaWFz
KSk7CisgICAgZHVtcChDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgIHN0YXRl
Q2hhbmdlTmFtZShDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzKSk7CisgICAgZHVtcChDaGFuZ2U6
OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykpOworICAgIGR1bXAoQ2hhbmdlOjpTaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcywgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zLCAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcykpOworICAgIGR1bXAoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAg
ICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaykpOworI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgZHVtcChDaGFuZ2U6OlVzZURhcmtBcHBlYXJh
bmNlLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFu
Y2UsICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNl
KSk7CisjZW5kaWYKKyAgICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UgY2hhbmdlKQorewor
ICAgIHRzIDw8IHN0YXRlQ2hhbmdlTmFtZShjaGFuZ2UpOworICAgIHJldHVybiB0czsKK30KKwor
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiBzdGF0ZS5kdW1wKHRzKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZlNGNlYTNjMmQ1
OGM4N2I0OTIzODQ3NWU0NjhiNWRmZDVlZTNhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmgKQEAgLTAsMCAr
MSwzODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKyNpbmNsdWRlICJXaW5k
UnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CitwdWJsaWM6CisgICAgZW51bSBjbGFz
cyBDaGFuZ2UgOiB1aW50MzJfdCB7CisgICAgICAgIENUTSAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgMCwKKworICAgICAgICBGaWxsQnJ1c2ggICAgICAgICAgICAgICAgICAgPSAxIDw8
IDEsCisgICAgICAgIEZpbGxSdWxlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwKKworICAg
ICAgICBTdHJva2VCcnVzaCAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCisgICAgICAgIFN0cm9r
ZVRoaWNrbmVzcyAgICAgICAgICAgICA9IDEgPDwgNCwKKyAgICAgICAgU3Ryb2tlU3R5bGUgICAg
ICAgICAgICAgICAgID0gMSA8PCA1LAorCisgICAgICAgIExpbmVDYXAgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgNiwKKyAgICAgICAgTGluZURhc2ggICAgICAgICAgICAgICAgICAgID0gMSA8
PCA3LAorICAgICAgICBMaW5lSm9pbiAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDgsCisgICAg
ICAgIE1pdGVyTGltaXQgICAgICAgICAgICAgICAgICA9IDEgPDwgOSwKKworICAgICAgICBDb21w
b3NpdGVNb2RlICAgICAgICAgICAgICAgPSAxIDw8IDEwLAorICAgICAgICBEcm9wU2hhZG93ICAg
ICAgICAgICAgICAgICAgPSAxIDw8IDExLAorCisgICAgICAgIEFscGhhICAgICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMTIsCisgICAgICAgIEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgICA9
IDEgPDwgMTMsCisgICAgICAgIFRleHREcmF3aW5nTW9kZSAgICAgICAgICAgICA9IDEgPDwgMTQs
CisKKyAgICAgICAgU2hvdWxkQW50aWFsaWFzICAgICAgICAgICAgID0gMSA8PCAxNSwKKyAgICAg
ICAgU2hvdWxkU21vb3RoRm9udHMgICAgICAgICAgID0gMSA8PCAxNiwKKyAgICAgICAgU2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gMSA8PCAxNywKKyAgICAgICAgU2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMgICAgID0gMSA8PCAxOCwKKyAgICAgICAgRHJhd0x1bWluYW5jZU1hc2sgICAgICAg
ICAgID0gMSA8PCAxOSwKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgICAgICBV
c2VEYXJrQXBwZWFyYW5jZSAgICAgICAgICAgPSAxIDw8IDIwLAorI2VuZGlmCisgICAgfTsKKyAg
ICB1c2luZyBDaGFuZ2VGbGFncyA9IE9wdGlvblNldDxDaGFuZ2U+OworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBDaGFuZ2VGbGFncyBpbml0aWFsQ2hhbmdlRmxhZ3MgPSB7IENoYW5nZTo6RmlsbEJy
dXNoLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcyB9OworCisg
ICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBp
bml0aWFsQ2xpcEJvdW5kcywgY29uc3QgQ2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0pOworCisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRS
ZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KSB7IG1fY2xpcEJvdW5kcy5pbnRlcnNlY3QobV9jdG0ubWFwUmVjdChyZWN0KSk7IH0KKwor
ICAgIENoYW5nZUZsYWdzIGNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZUZsYWdzOyB9
CisgICAgdm9pZCBkaWRBcHBseVN0YXRlQ2hhbmdlcygpIHsgbV9jaGFuZ2VGbGFncyA9IHsgfTsg
fQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTSgpIGNvbnN0IHsgcmV0dXJuIG1fY3RtOyB9
CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0sIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFBy
b3BlcnR5KENoYW5nZTo6Q1RNLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtLCBjdG0sIGxh
c3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgZmlsbEJydXNoKCkg
Y29uc3QgeyByZXR1cm4gbV9maWxsQnJ1c2g7IH0KKyAgICB2b2lkIHNldEZpbGxDb2xvcihjb25z
dCBDb2xvciYgY29sb3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+
JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbEJydXNoLCAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbEJydXNoLCB7IGNvbG9yIH0sIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisgICAgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fZmlsbEJydXNoLnNl
dEdyYWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxh
Z3MuYWRkKENoYW5nZTo6RmlsbEJydXNoKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9y
bSkgeyBtX2ZpbGxCcnVzaC5zZXRQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNm
b3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisKKyAgICBXaW5k
UnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbFJ1bGU7IH0KKyAgICB2b2lkIHNl
dEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNz
Q29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkZp
bGxSdWxlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsIGZpbGxSdWxlLCBsYXN0
QXBwbGllZFN0YXRlKTsgfQorCisgICAgY29uc3QgU291cmNlQnJ1c2gmIHN0cm9rZUJydXNoKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJva2VCcnVzaDsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZUJydXNo
LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4m
JiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX3N0
cm9rZUJydXNoLnNldEdyYWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7
IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6U3Ryb2tlQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRT
dHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9zdHJva2VCcnVzaC5zZXRQYXR0ZXJuKFdURk1vdmUocGF0
dGVybiksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VC
cnVzaCk7IH0KKworICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1f
c3Ryb2tlVGhpY2tuZXNzOyB9CisgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgc3Ry
b2tlVGhpY2tuZXNzLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYg
bGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tuZXNz
LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0cm9rZVN0eWxlOyB9CisgICAgdm9pZCBzZXRTdHJva2VTdHlsZShT
dHJva2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRl
eHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTdHJva2VT
dHlsZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlLCBzdHJva2VTdHlsZSwg
bGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGluZUNhcDsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRl
KSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZUNhcCwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2xpbmVDYXAsIGxpbmVDYXAsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBjb25zdCBMaW5l
RGFzaCYgbGluZURhc2goKSBjb25zdCB7IHJldHVybiBtX2xpbmVEYXNoOyB9CisgICAgdm9pZCBz
ZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVEYXNoLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBo
aWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6
OkxpbmVEYXNoLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gsIFdURk1vdmUobGlu
ZURhc2gpLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBj
b25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbiwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxh
c3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpMaW5lSm9pbiwgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2xpbmVKb2luLCBsaW5lSm9pbiwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KworICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7IH0K
KyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCwgY29uc3Qgc3RkOjpvcHRp
b25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVy
dHkoQ2hhbmdlOjpNaXRlckxpbWl0LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1p
dCwgbWl0ZXJMaW1pdCwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBDb21wb3NpdGVN
b2RlIGNvbXBvc2l0ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU1vZGU7IH0KKyAg
ICB2b2lkIHNldENvbXBvc2l0ZU1vZGUoQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2RlLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkg
eyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9jb21wb3NpdGVNb2RlLCBjb21wb3NpdGVNb2RlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
ICAgIAorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBt
X2Ryb3BTaGFkb3c7IH0KKyAgICB2b2lkIHNldERyb3BTaGFkb3coY29uc3QgRHJvcFNoYWRvdyYg
ZHJvcFNoYWRvdywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxh
c3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpEcm9wU2hhZG93LCAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdywgZHJvcFNoYWRvdywgbGFzdEFwcGxpZWRTdGF0
ZSk7IH0KKworICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYTsgfQorICAg
IHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3ND
b250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6QWxw
aGEsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgYWxwaGEsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisgICAgCisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsgfQor
ICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNz
Q29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6Oklt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5LCBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBsYXN0QXBwbGll
ZFN0YXRlKTsgfQorICAgIAorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9CisgICAgdm9pZCBzZXRUZXh0
RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBz
ZXRQcm9wZXJ0eShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3RleHREcmF3aW5nTW9kZSwgdGV4dERyYXdpbmdNb2RlLCBsYXN0QXBwbGllZFN0YXRlKTsg
fQorCisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEFu
dGlhbGlhczsgfQorICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFs
aWFzLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcywgc2hvdWxkQW50aWFsaWFzLCBsYXN0QXBw
bGllZFN0YXRlKTsgfQorCisgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0
dXJuIG1fc2hvdWxkU21vb3RoRm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRz
KGJvb2wgc2hvdWxkU21vb3RoRm9udHMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250
ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxk
U21vb3RoRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywg
c2hvdWxkU21vb3RoRm9udHMsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBib29sIHNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMo
Ym9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3Jh
cGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5n
ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMs
IGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIHZvaWQg
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcywg
Y29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3Rh
dGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBib29sIGRyYXdMdW1p
bmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3THVtaW5hbmNlTWFzazsgfQorICAgIHZv
aWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaywgY29uc3Qgc3Rk
OjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0
UHJvcGVydHkoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2RyYXdMdW1pbmFuY2VNYXNrLCBkcmF3THVtaW5hbmNlTWFzaywgbGFzdEFwcGxpZWRTdGF0
ZSk7IH0KKworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlRGFya0FwcGVhcmFuY2U7IH0KKyAgICB2
b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNl
dFByb3BlcnR5KENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgdXNlRGFya0FwcGVhcmFuY2UsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisjZW5kaWYKKworICAgIGJvb2wgaGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSBjb25z
dDsKKyAgICB2b2lkIG1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3Ro
ZXIpOworICAgIHZvaWQgbWVyZ2VEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3Ro
ZXIpOworCisgICAgV1RGOjpUZXh0U3RyZWFtJiBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0
OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZXRQcm9wZXJ0eShDaGFuZ2UgY2hhbmdlLCBU
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHksIGNvbnN0IFQmIHZhbHVlLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzLT4qcHJvcGVydHkgPT0gdmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IHZhbHVlOworICAgICAgICBtX2NoYW5n
ZUZsYWdzLnNldChjaGFuZ2UsICFsYXN0QXBwbGllZFN0YXRlIHx8ICgqbGFzdEFwcGxpZWRTdGF0
ZSkuKnByb3BlcnR5ICE9IHRoaXMtPipwcm9wZXJ0eSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgVCYmIHZhbHVlLCBjb25zdCBzdGQ6Om9wdGlvbmFs
PEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkKKyAgICB7CisgICAgICAg
IGlmICh0aGlzLT4qcHJvcGVydHkgPT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHRoaXMtPipwcm9wZXJ0eSA9IFdURk1vdmUodmFsdWUpOworICAgICAgICBtX2NoYW5nZUZs
YWdzLnNldChjaGFuZ2UsICFsYXN0QXBwbGllZFN0YXRlIHx8ICgqbGFzdEFwcGxpZWRTdGF0ZSku
KnByb3BlcnR5ICE9IHRoaXMtPipwcm9wZXJ0eSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IG1f
Y2xpcEJvdW5kczsKKworICAgIENoYW5nZUZsYWdzIG1fY2hhbmdlRmxhZ3M7CisKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gbV9jdG07CisKKyAgICBTb3VyY2VCcnVzaCBtX2ZpbGxCcnVzaCB7IENvbG9y
OjpibGFjayB9OworICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGUgeyBXaW5kUnVsZTo6Tm9uWmVybyB9
OworCisgICAgU291cmNlQnJ1c2ggbV9zdHJva2VCcnVzaCB7IENvbG9yOjpibGFjayB9OworICAg
IGZsb2F0IG1fc3Ryb2tlVGhpY2tuZXNzIHsgMCB9OworICAgIFN0cm9rZVN0eWxlIG1fc3Ryb2tl
U3R5bGUgeyBTb2xpZFN0cm9rZSB9OworCisgICAgTGluZUNhcCBtX2xpbmVDYXAgeyBMaW5lQ2Fw
OjpCdXR0IH07CisgICAgTGluZURhc2ggbV9saW5lRGFzaDsKKyAgICBMaW5lSm9pbiBtX2xpbmVK
b2luIHsgTGluZUpvaW46Ok1pdGVyIH07CisgICAgZmxvYXQgbV9taXRlckxpbWl0IHsgMCB9Owor
CisgICAgQ29tcG9zaXRlTW9kZSBtX2NvbXBvc2l0ZU1vZGUgeyBDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlT3ZlciwgQmxlbmRNb2RlOjpOb3JtYWwgfTsKKyAgICBEcm9wU2hhZG93IG1fZHJvcFNo
YWRvdzsKKworICAgIGZsb2F0IG1fYWxwaGEgeyAxIH07CisgICAgSW50ZXJwb2xhdGlvblF1YWxp
dHkgbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRl
ZmF1bHQgfTsKKyAgICBUZXh0RHJhd2luZ01vZGVGbGFncyBtX3RleHREcmF3aW5nTW9kZSB7IFRl
eHREcmF3aW5nTW9kZTo6RmlsbCB9OworCisgICAgYm9vbCBtX3Nob3VsZEFudGlhbGlhcyB7IHRy
dWUgfTsKKyAgICBib29sIG1fc2hvdWxkU21vb3RoRm9udHMgeyB0cnVlIH07CisgICAgYm9vbCBt
X3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kcmF3THVtaW5hbmNlTWFz
ayB7IGZhbHNlIH07CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIG1f
dXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgordm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgYXV0byBlbmNvZGUgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0
byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHRoaXMtPipw
cm9wZXJ0eTsKKyAgICB9OworCisgICAgZW5jb2RlciA8PCBtX2NsaXBCb3VuZHM7CisKKyAgICBl
bmNvZGVyIDw8IG1fY2hhbmdlRmxhZ3M7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpDVE0sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKTsKKwor
ICAgIGVuY29kZShDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAgIGVuY29kZShDaGFuZ2U6OkZpbGxS
dWxlLCAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxs
UnVsZSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIGVuY29kZShD
aGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zdHJva2VUaGlja25lc3MpOworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZVN0eWxl
LCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHls
ZSk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCk7CisgICAgZW5jb2RlKENoYW5nZTo6
TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2xpbmVEYXNoKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIGVuY29kZShD
aGFuZ2U6Ok1pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9taXRlckxpbWl0KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUs
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2Rl
KTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBlbmNvZGUoQ2hhbmdl
OjpBbHBoYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fYWxwaGEpOworICAgIGVuY29kZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHks
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIGVuY29kZShD
aGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMpOworICAgIGVuY29kZShDaGFuZ2U6OlNob3VsZFNtb290
aEZvbnRzLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9v
dGhGb250cyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
LCAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBl
bmNvZGUoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCisgICAgZW5jb2RlKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRp
ZgorfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxHcmFwaGljc0Nv
bnRleHRTdGF0ZT4gR3JhcGhpY3NDb250ZXh0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIGF1dG8gZGVjb2RlID0gWyZdKEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
Q2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7Cisg
ICAgICAgIGlmICghc3RhdGUubV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgdXNpbmcgUHJvcGVydHlUeXBlID0gdHlwZW5h
bWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxHcmFwaGljc0Nv
bnRleHRTdGF0ZT4oKS4qcHJvcGVydHkpPjo6dHlwZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxQ
cm9wZXJ0eVR5cGU+IHZhbHVlOworICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICBp
ZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN0YXRlLipw
cm9wZXJ0eSA9ICp2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIHN0
ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBjbGlwQm91bmRzOworICAgIGRlY29kZXIgPj4gY2xpcEJv
dW5kczsKKyAgICBpZiAoIWNsaXBCb3VuZHMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPENoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKKyAgICBkZWNv
ZGVyID4+IGNoYW5nZUZsYWdzOworICAgIGlmICghY2hhbmdlRmxhZ3MpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZSgqY2xpcEJv
dW5kcywgKmNoYW5nZUZsYWdzKTsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNU
TSwgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsQnJ1c2gpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICgh
ZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTdHJv
a2VUaGlja25lc3MsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VU
aGlja25lc3MpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2Rl
KHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXApKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVEYXNoLCAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdl
OjpMaW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9s
aW5lSm9pbikpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUo
c3RhdGUsIENoYW5nZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcm9wU2hh
ZG93LCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRl
LCBDaGFuZ2U6OkFscGhhLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2FscGhhKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRl
Y29kZShzdGF0ZSwgQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpUZXh0RHJh
d2luZ01vZGUsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2lu
Z01vZGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUo
c3RhdGUsIENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cykpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcywg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6RHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
ZHJhd0x1bWluYW5jZU1hc2spKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNl
RGFya0FwcGVhcmFuY2UpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworI2VuZGlmCisK
KyAgICByZXR1cm4gc3RhdGU7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51
bVRyYWl0czxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlPiB7CisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6Q1RNLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkZpbGxCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6RmlsbFJ1bGUsCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6U3Ryb2tlQnJ1c2gsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGUsCisKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcCwKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2gsCisgICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luLAorICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0LAorCisgICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsCisgICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRyb3BTaGFkb3csCisKKyAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGEsCisgICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlRleHREcmF3aW5nTW9kZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLAorICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCisgICAgICAgICwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VXNl
RGFya0FwcGVhcmFuY2UKKyNlbmRpZgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzIxMzI4NTI2MWU2OTBjYTMwNjBk
N2UwMjZlNTBlNTJlZWE1OTBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCkBAIC0wLDAgKzEsMTQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29sIHNh
dmVBbmRSZXN0b3JlID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAg
ICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQorICAgIHsKKyAgICAgICAgaWYg
KG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOworICAgIH0K
KyAgICAKKyAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcigpCisgICAgeworICAgICAgICBp
ZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2F2ZSgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2F2
ZUFuZFJlc3RvcmUpOworICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOworICAgICAgICBtX3NhdmVB
bmRSZXN0b3JlID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmUoKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAgICBtX2NvbnRleHQucmVzdG9y
ZSgpOworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAg
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX2NvbnRleHQ7IH0K
KworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBib29sIG1f
c2F2ZUFuZFJlc3RvcmU7Cit9OworCitjbGFzcyBUcmFuc3BhcmVuY3lMYXllclNjb3BlIHsKK3B1
YmxpYzoKKyAgICBUcmFuc3BhcmVuY3lMYXllclNjb3BlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgZmxvYXQgYWxwaGEsIGJvb2wgYmVnaW5MYXllciA9IHRydWUpCisgICAgICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9hbHBoYShhbHBoYSkKKyAgICAgICAgLCBtX2JlZ2Fu
TGF5ZXIoYmVnaW5MYXllcikKKyAgICB7CisgICAgICAgIGlmIChiZWdpbkxheWVyKQorICAgICAg
ICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYmVnaW5MYXllcihmbG9hdCBhbHBoYSkKKyAgICB7CisgICAgICAgIG1f
YWxwaGEgPSBhbHBoYTsKKyAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
bV9hbHBoYSk7CisgICAgICAgIG1fYmVnYW5MYXllciA9IHRydWU7CisgICAgfQorICAgIAorICAg
IH5UcmFuc3BhcmVuY3lMYXllclNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2JlZ2FuTGF5
ZXIpCisgICAgICAgICAgICBtX2NvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CisgICAgZmxvYXQg
bV9hbHBoYTsKKyAgICBib29sIG1fYmVnYW5MYXllcjsKK307CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU3RhY2tDaGVja2VyIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVN0YWNrQ2hlY2tlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCisgICAgICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9zdGFja1NpemUoY29udGV4dC5zdGFja1NpemUoKSkK
KyAgICB7IH0KKworICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCisgICAg
eworICAgICAgICBpZiAobV9jb250ZXh0LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQorICAg
ICAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBi
eSAlZCIsICZtX2NvbnRleHQsIChpbnQpbV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0
YWNrU2l6ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250
ZXh0OworICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOworfTsKKworY2xhc3MgSW50ZXJwb2xhdGlv
blF1YWxpdHlNYWludGFpbmVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9u
UXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVy
cG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgICAgIDogbV9n
cmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0KQorICAgICAgICAsIG1fY3VycmVudEludGVy
cG9sYXRpb25RdWFsaXR5KGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KCkpCisgICAgICAgICwgbV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlv
blF1YWxpdHlUb1VzZSAhPSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJl
bnRJbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQorICAg
IHsKKyAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQorICAgICAgICAg
ICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBv
bGF0aW9uUXVhbGl0eVRvVXNlKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9u
UXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6
b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5KQorICAg
ICAgICA6IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGlu
dGVycG9sYXRpb25RdWFsaXR5ID8gaW50ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBo
aWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCisgICAgeworICAgIH0KKwor
ICAgIH5JbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoKQorICAgIHsKKyAgICAgICAgaWYg
KG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQorICAgICAgICAgICAgbV9ncmFwaGljc0Nv
bnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9u
UXVhbGl0eSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFw
aGljc0NvbnRleHQ7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xh
dGlvblF1YWxpdHk7CisgICAgYm9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKaW5kZXggMTVkZjFkZmRiNmYzYTE2YWQ1ZWFm
NjQ3MjYxZmNmYzRiN2E5M2FiNC4uNjJmOWY0NjRjM2Q2ZDlkNWEwOWNhNWE0YjdiZDhhMTAzNjE1
OTFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5jcHAKQEAgLTEyNiwyNyArMTI2LDUxIEBAIFN0cmluZyBibGVuZE1vZGVOYW1lKEJs
ZW5kTW9kZSBibGVuZE9wKQogICAgIHJldHVybiBibGVuZE9wZXJhdG9yTmFtZXNbc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGJsZW5kT3ApIC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEJsZW5kTW9kZTo6
Tm9ybWFsKV07CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgcmV0dXJuIHRzIDw8IGJsZW5kTW9kZU5hbWUoYmxl
bmRNb2RlKTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29t
cG9zaXRlTW9kZSBjb21wb3NpdGVNb2RlKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9z
aXRlLW9wZXJhdGlvbiIsIGNvbXBvc2l0ZU1vZGUub3BlcmF0aW9uKTsKKyAgICB0cy5kdW1wUHJv
cGVydHkoImJsZW5kLW1vZGUiLCBjb21wb3NpdGVNb2RlLmJsZW5kTW9kZSk7CisgICAgcmV0dXJu
IHRzOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3Np
dGVPcGVyYXRvciBvcCkKIHsKICAgICByZXR1cm4gdHMgPDwgY29tcG9zaXRlT3BlcmF0b3JOYW1l
KG9wLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIEJsZW5kTW9kZSBibGVuZE1vZGUpCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KQogewotICAgIHJl
dHVybiB0cyA8PCBibGVuZE1vZGVOYW1lKGJsZW5kTW9kZSk7CisgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3ctb2Zmc2V0IiwgZHJvcFNoYWRvdy5vZmZzZXQpOworICAgIHRzLmR1bXBQcm9wZXJ0
eSgic2hhZG93LWJsdXIiLCBkcm9wU2hhZG93LmJsdXJSYWRpdXMpOworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic2hhZG93LWNvbG9yIiwgZHJvcFNoYWRvdy5jb2xvcik7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09
IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CisgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBXaW5kUnVsZSBydWxlKQorVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJw
b2xhdGlvblF1YWxpdHkpCiB7Ci0gICAgc3dpdGNoIChydWxlKSB7Ci0gICAgY2FzZSBXaW5kUnVs
ZTo6Tm9uWmVybzoKLSAgICAgICAgdHMgPDwgIk5PTi1aRVJPIjsKKyAgICBzd2l0Y2ggKGludGVy
cG9sYXRpb25RdWFsaXR5KSB7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVs
dDoKKyAgICAgICAgdHMgPDwgIkRFRkFVTFQiOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdp
bmRSdWxlOjpFdmVuT2RkOgotICAgICAgICB0cyA8PCAiRVZFTi1PREQiOworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6CisgICAgICAgIHRzIDw8ICJETy1O
T1QtSU5URVJQT0xBVEUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVycG9sYXRpb25R
dWFsaXR5OjpMb3c6CisgICAgICAgIHRzIDw8ICJMT1ciOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgIHRzIDw8ICJNRURJVU0i
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgor
ICAgICAgICB0cyA8PCAiSEVJR0giOwogICAgICAgICBicmVhazsKICAgICB9Ci0KICAgICByZXR1
cm4gdHM7CiB9CiAKQEAgLTE2Niw2ICsxOTAsMTEgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgTGluZUNhcCBjYXBTdHlsZSkKICAgICByZXR1cm4gdHM7CiB9CiAKK1Rl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVEYXNoKQoreworICAgIHJl
dHVybiB0czsKK30KKwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGlu
ZUpvaW4gam9pblN0eWxlKQogewogICAgIHN3aXRjaCAoam9pblN0eWxlKSB7CkBAIC0xODIsNCAr
MjExLDU2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVKb2lu
IGpvaW5TdHlsZSkKICAgICByZXR1cm4gdHM7CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQoreworICAgIHN3aXRjaCAo
c3Ryb2tlU3R5bGUpIHsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpOb1N0cm9rZToKKyAgICAgICAg
dHMgPDwgIk5PLVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5bGU6
OlNvbGlkU3Ryb2tlOgorICAgICAgICB0cyA8PCAiU09MSUQtU1RST0tFIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlOgorICAgICAgICB0cyA8PCAi
RE9UVEVELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5bGU6OkRh
c2hlZFN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRBU0hFRC1TVFJPS0UiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpEb3VibGVTdHJva2U6CisgICAgICAgIHRzIDw8ICJE
T1VCTEUtU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6V2F2
eVN0cm9rZToKKyAgICAgICAgdHMgPDwgIldBVlktU1RST0tFIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgVGV4dERyYXdpbmdNb2RlIHRleHREcmF3aW5nTW9kZSkKK3sKKyAgICBzd2l0Y2gg
KHRleHREcmF3aW5nTW9kZSkgeworICAgIGNhc2UgVGV4dERyYXdpbmdNb2RlOjpGaWxsOgorICAg
ICAgICB0cyA8PCAiRklMTCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dERyYXdpbmdN
b2RlOjpTdHJva2U6CisgICAgICAgIHRzIDw8ICJTVFJPS0UiOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBXaW5kUnVsZSBydWxlKQoreworICAgIHN3aXRjaCAocnVsZSkgeworICAgIGNhc2Ug
V2luZFJ1bGU6Ok5vblplcm86CisgICAgICAgIHRzIDw8ICJOT04tWkVSTyI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV2luZFJ1bGU6OkV2ZW5PZGQ6CisgICAgICAgIHRzIDw8ICJFVkVOLU9E
RCI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0czsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oCmluZGV4IDRkMjA0ZTk3ZTVjNTQ0ZDc3NmJmYTdmMzBhYWNjMWI3YzQ2
M2UwZTAuLjBmOGIyZDAyNzU1YmZhZWM2NWQ5NWMwNGYyYzQ1YjUyNDk0ZjI2MzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTI1
LDYgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkRhc2hBcnJheS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIldpbmRS
dWxlLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgpAQCAtNzMsNiArNzYsNzkgQEAgZW51bSBjbGFzcyBCbGVuZE1vZGUgOiB1aW50OF90IHsK
ICAgICBQbHVzTGlnaHRlcgogfTsKIAorc3RydWN0IENvbXBvc2l0ZU1vZGUgeworICAgIENvbXBv
c2l0ZU9wZXJhdG9yIG9wZXJhdGlvbjsKKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlOworCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENvbXBvc2l0ZU1vZGUmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbiA9PSBvdGhlci5vcGVyYXRpb24gJiYgYmxlbmRNb2RlID09IG90
aGVyLmJsZW5kTW9kZTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU1vZGU+IGRlY29kZShEZWNvZGVyJik7Cit9
OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBDb21wb3NpdGVNb2RlOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG9wZXJhdGlvbjsKKyAg
ICBlbmNvZGVyIDw8IGJsZW5kTW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0
ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gQ29tcG9zaXRlTW9kZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3BlcmF0
aW9uOworICAgIGRlY29kZXIgPj4gb3BlcmF0aW9uOworICAgIGlmICghb3BlcmF0aW9uKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+
IGJsZW5kTW9kZTsKKyAgICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKKyAgICBpZiAoIWJsZW5kTW9k
ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm9wZXJh
dGlvbiwgKmJsZW5kTW9kZSB9IH07Cit9CisKK3N0cnVjdCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSB7CisgICAgZW51bSBjbGFzcyBNb2RlIDogdWludDhfdCB7CisgICAgICAgIFRleHRDaGVja2lu
Z0RpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMsCisgICAgICAgIFNwZWxsaW5nLAorICAg
ICAgICBHcmFtbWFyLAorICAgICAgICBBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAorICAgICAg
ICBEaWN0YXRpb25BbHRlcm5hdGl2ZXMKKyAgICB9IG1vZGU7CisgICAgYm9vbCBzaG91bGRVc2VE
YXJrQXBwZWFyYW5jZSB7IGZhbHNlIH07CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIHN0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IGRlY29kZShEZWNv
ZGVyJik7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rl
ciA8PCBtb2RlOworICAgIGVuY29kZXIgPDwgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Cit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlPiBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Cit7CisgICAgc3RkOjpvcHRpb25hbDxNb2RlPiBtb2RlOworICAgIGRlY29kZXIgPj4gbW9kZTsK
KyAgICBpZiAoIW1vZGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6
Om9wdGlvbmFsPGJvb2w+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOworICAgIGRlY29kZXIgPj4g
c2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7CisgICAgaWYgKCFzaG91bGRVc2VEYXJrQXBwZWFyYW5j
ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm1vZGUs
ICpzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9IH07Cit9CisKIGVudW0gY2xhc3MgR3JhZGllbnRT
cHJlYWRNZXRob2QgOiB1aW50OF90IHsKICAgICBQYWQsCiAgICAgUmVmbGVjdCwKQEAgLTkzLDYg
KzE2OSw0MiBAQCBlbnVtIGNsYXNzIExpbmVDYXAgOiB1aW50OF90IHsKICAgICBTcXVhcmUKIH07
CiAKK3N0cnVjdCBMaW5lRGFzaCB7CisgICAgRGFzaEFycmF5IGRhc2hlczsKKyAgICBmbG9hdCBv
ZmZzZXQ7CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOworfTsKKworaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBMaW5lRGFzaCYgYSwgY29uc3QgTGluZURhc2gmIGIpCit7CisgICAgcmV0
dXJuIGEuZGFzaGVzID09IGIuZGFzaGVzICYmIGEub2Zmc2V0ID09IGIub2Zmc2V0OworfQorCit0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBMaW5lRGFzaDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBkYXNoZXM7CisgICAgZW5jb2RlciA8PCBv
ZmZzZXQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPExpbmVE
YXNoPiBMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRp
b25hbDxEYXNoQXJyYXk+IGRhc2hlczsKKyAgICBkZWNvZGVyID4+IGRhc2hlczsKKyAgICBpZiAo
IWRhc2hlcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8ZmxvYXQ+IG9mZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNl
dCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgV1RGTW92
ZSgqZGFzaGVzKSwgKm9mZnNldCB9IH07Cit9CisKIGVudW0gY2xhc3MgTGluZUpvaW4gOiB1aW50
OF90IHsKICAgICBNaXRlciwKICAgICBSb3VuZCwKQEAgLTEwNSw2ICsyMTcsNzYgQEAgZW51bSBI
b3Jpem9udGFsQWxpZ25tZW50IHsKICAgICBBbGlnbkhDZW50ZXIKIH07CiAKKy8vIExlZ2FjeSBz
aGFkb3cgYmx1ciByYWRpdXMgaXMgdXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hh
ZG93LgorLy8gSXQgaGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCitlbnVt
IGNsYXNzIFNoYWRvd1JhZGl1c01vZGUgOiBib29sIHsKKyAgICBEZWZhdWx0LAorICAgIExlZ2Fj
eQorfTsKKworc3RydWN0IERyb3BTaGFkb3cgeworICAgIEZsb2F0U2l6ZSBvZmZzZXQ7CisgICAg
ZmxvYXQgYmx1clJhZGl1cyB7IDAgfTsKKyAgICBDb2xvciBjb2xvcjsKKyAgICBTaGFkb3dSYWRp
dXNNb2RlIHJhZGl1c01vZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07CisgICAgCisg
ICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBjb2xvci5pc1Zpc2libGUoKTsgfQor
ICAgIGJvb2wgaXNCbHVycmVkKCkgY29uc3QgeyByZXR1cm4gaXNWaXNpYmxlKCkgJiYgYmx1clJh
ZGl1czsgfQorICAgIGJvb2wgaGFzT3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIGlzQmx1cnJlZCgp
IHx8IChpc1Zpc2libGUoKSAmJiAhb2Zmc2V0LmlzWmVybygpKTsgfQorICAgIAorICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEcm9wU2hhZG93PiBkZWNv
ZGUoRGVjb2RlciYpOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEcm9wU2hh
ZG93JiBhLCBjb25zdCBEcm9wU2hhZG93JiBiKQoreworICAgIHJldHVybiBhLm9mZnNldCA9PSBi
Lm9mZnNldCAmJiBhLmJsdXJSYWRpdXMgPT0gYi5ibHVyUmFkaXVzICYmIGEuY29sb3IgPT0gYi5j
b2xvciAmJiBhLnJhZGl1c01vZGUgPT0gYi5yYWRpdXNNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgordm9pZCBEcm9wU2hhZG93OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsKKyAgICBlbmNvZGVyIDw8IGJsdXJSYWRpdXM7
CisgICAgZW5jb2RlciA8PCBjb2xvcjsKKyAgICBlbmNvZGVyIDw8IHJhZGl1c01vZGU7Cit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IERyb3BT
aGFkb3c6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRTaXplPiBvZmZzZXQ7CisgICAgZGVjb2RlciA+PiBvZmZzZXQ7CisgICAgaWYgKCFvZmZzZXQp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBibHVyUmFkaXVzOworICAgIGRlY29kZXIgPj4gYmx1clJhZGl1czsKKyAgICBpZiAoIWJsdXJS
YWRpdXMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29sb3IpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFNoYWRvd1Jh
ZGl1c01vZGU+IHJhZGl1c01vZGU7CisgICAgZGVjb2RlciA+PiByYWRpdXNNb2RlOworICAgIGlm
ICghcmFkaXVzTW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVy
biB7IHsgKm9mZnNldCwgKmJsdXJSYWRpdXMsICpjb2xvciwgKnJhZGl1c01vZGUgfSB9OworfQor
CitlbnVtIFN0cm9rZVN0eWxlIHsKKyAgICBOb1N0cm9rZSwKKyAgICBTb2xpZFN0cm9rZSwKKyAg
ICBEb3R0ZWRTdHJva2UsCisgICAgRGFzaGVkU3Ryb2tlLAorICAgIERvdWJsZVN0cm9rZSwKKyAg
ICBXYXZ5U3Ryb2tlLAorfTsKKwogZW51bSBUZXh0QmFzZWxpbmUgewogICAgIEFscGhhYmV0aWNU
ZXh0QmFzZWxpbmUsCiAgICAgVG9wVGV4dEJhc2VsaW5lLApAQCAtMTIyLDE2ICszMDQsMjkgQEAg
ZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9OwogCi1TdHJpbmcgY29tcG9z
aXRlT3BlcmF0b3JOYW1lKFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVu
ZE1vZGUpOwotU3RyaW5nIGJsZW5kTW9kZU5hbWUoV2ViQ29yZTo6QmxlbmRNb2RlKTsKLWJvb2wg
cGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7Ci1ib29s
IHBhcnNlQ29tcG9zaXRlQW5kQmxlbmRPcGVyYXRvcihjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpD
b21wb3NpdGVPcGVyYXRvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSYpOworZW51bSBjbGFzcyBUZXh0
RHJhd2luZ01vZGUgOiB1aW50OF90IHsKKyAgICBGaWxsID0gMSA8PCAwLAorICAgIFN0cm9rZSA9
IDEgPDwgMSwKK307CiAKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwotV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkNv
bXBvc2l0ZU9wZXJhdG9yKTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXaW5kUnVsZSk7Cit1c2luZyBUZXh0RHJhd2luZ01vZGVG
bGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OworCitTdHJpbmcgY29tcG9zaXRlT3Bl
cmF0b3JOYW1lKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworU3RyaW5nIGJsZW5kTW9k
ZU5hbWUoQmxlbmRNb2RlKTsKK2Jvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwgQmxl
bmRNb2RlJik7Citib29sIHBhcnNlQ29tcG9zaXRlQW5kQmxlbmRPcGVyYXRvcihjb25zdCBTdHJp
bmcmLCBDb21wb3NpdGVPcGVyYXRvciYsIEJsZW5kTW9kZSYpOworCitXRUJDT1JFX0VYUE9SVCBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQmxlbmRNb2RlKTsK
K1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBDb21wb3NpdGVPcGVyYXRvcik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29tcG9zaXRlTW9kZSk7CitXRUJDT1JFX0VY
UE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3Qg
RHJvcFNoYWRvdyYpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIEludGVycG9sYXRpb25RdWFsaXR5KTsKIFdFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lQ2FwKTsK
K1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBMaW5lRGFzaCk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUpvaW4pOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFN0cm9rZVN0eWxlKTsKK1dFQkNP
UkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBU
ZXh0RHJhd2luZ01vZGUpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkBAIC0yMTksNCArNDE0LDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6TGluZUpvaW4+IHsKICAgICA+OwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8CisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6
Ok5vU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwKKyAgICBX
ZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0
eWxlOjpEYXNoZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9r
ZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQorICAgID47Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlRleHREcmF3
aW5nTW9kZSwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAorICAgICAg
ICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQorICAgID47Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpN
b2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpEb2N1
bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxp
bmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZl
cywKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcs
CisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIsCisg
ICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0aW9u
UmVwbGFjZW1lbnQsCisgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6
OkRpY3RhdGlvbkFsdGVybmF0aXZlcworICAgID47Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VH
ZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYW1l
ZEltYWdlR2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IDRlMDcxZjcyZjM1YmU4YTU4ZmM0Y2Q1Nzdh
MTQ1NmRlMTc0NjY4MmMuLjQxYjA1MTFhOGY3OGExNzliMzA0Y2Y4OWQ0MTAzZTM1ZGUzZTEyNWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VH
ZW5lcmF0ZWRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcApAQCAtNDQsNyArNDQsNyBAQCBJbWFnZURyYXdS
ZXN1bHQgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRgogewogI2lmIFVTRShORVdfVEhFTUUpIHx8IFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwot
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2Rl
KHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwog
ICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0
LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGlj
c0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGlj
c0NvbnRleHQuaAppbmRleCBiNjIzNjc4ODBlM2U1MzU0YjYxNzExMzQ3YzlhMTFiNDIyNDY4ODVl
Li5kNjdkM2VhMTE1ZDI0ZWZkOTA5ZTAzYWM5YWRlOTNhOGI0NzY0ZmM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM4LDg3ICszOCw1NyBAQCBwdWJsaWM6CiAgICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWlu
dAogICAgIH07CiAKLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVh
c29ucyByZWFzb25zKQotICAgICAgICA6IG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKHJlYXNv
bnMpCisgICAgTnVsbEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlw
LCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgcmVhc29ucykKKyAgICAgICAgOiBHcmFwaGljc0Nv
bnRleHQoaW5pdGlhbENsaXApCisgICAgICAgICwgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMo
cmVhc29ucykKICAgICB7CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFVTRShDRykKLSAgICB2b2lk
IHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9Ci0gICAgYm9vbCBpc0NBTGF5ZXJD
b250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotCiAgICAgYm9v
bCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJv
b2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25l
OyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsgfQogICAgIGJvb2wgaW52YWxpZGF0aW5nSW1h
Z2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nSW1h
Z2VzV2l0aEFzeW5jRGVjb2RlczsgfQogICAgIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQ7IH0KIAotICAg
IHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWwgeyB9Ci0KLSNpZiBVU0UoQ0cp
Ci0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSNlbmRp
ZgotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVt
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH07Ci0KLSAgICB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9Ci0KLSAgICBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KLQorICAgIHZvaWQgc2F2ZSgp
IGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgYXBwbHlT
dGF0ZUNoYW5nZXMoKSBmaW5hbCB7IH07CiAjaWYgVVNFKENHKQogICAgIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCkgZmluYWwgeyB9CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWwg
eyB9Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAjZW5kaWYKIAot
ICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgPSAxKSBmaW5hbCB7IH0K
LSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikg
ZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHN0
cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLSAgICB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQg
Y2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFs
IHsgfQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWwgeyByZXR1cm4gcmVjdDsg
fQotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNv
bnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0
cm9rZSkgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsIHsgfQot
ICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZpbmFsIHsgfQot
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TWl0
ZXJMaW1pdChmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsIHsgfQotICAg
IHZvaWQgcm90YXRlKGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwg
ZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZp
bmFsIHsgfQotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0g
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQot
ICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBlbmRUcmFu
c3BhcmVuY3lMYXllcigpIGZpbmFsIHsgfQorCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0g
V2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQogICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHNhdmUoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHJl
c3RvcmUoKSBmaW5hbCB7IH0KLQotICAgIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQg
Y2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQogCi0gICAgRmxvYXRT
aXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpu
dWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQogCi0g
ICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQpIGZpbmFsIHsgfQotICAgIHZv
aWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9u
dENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWwgeyB9CisgICAgdm9pZCBm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICAKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5h
bCB7IH0KKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KIAotICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246
OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7
IH0KKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbCB7IH0K
KyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikg
ZmluYWwgeyB9CiAKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7
IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KLSAgICBJbWFnZURyYXdSZXN1
bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFNpemUmLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURy
YXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsg
fQogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQogICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQpAQCAt
MTI3LDI4ICs5NywyNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9
CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQ
dHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotCi0gICAgdm9pZCBjbGlwUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xp
cE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jikg
ZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmlu
YWwgeyB9Ci0KLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9
Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLQorICAgIHZvaWQg
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0Jiwg
RmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd05hdGl2ZUlt
YWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWwgeyB9CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAj
ZW5kaWYKIAorICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9h
dFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2ws
IGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFs
IHsgfQorCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0
OyB9CisKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQogICAgIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKLXByaXZhdGU6CiAgICAgY29uc3QgUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJbnZh
bGlkYXRpb25SZWFzb25zOjpOb25lIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZTAxZmQzOTQ2NDMzOWQyZDRkNTRiYTkzNjRjNTk0NWNmYWQ3ZDVhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oV0lOKQorI2lu
Y2x1ZGUgIkRJQlBpeGVsRGF0YS5oIgordHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKKyNpZiAh
VVNFKENHKQorLy8gVUludDggaXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2UuaAor
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OworI2VuZGlmCisjZW5kaWYKKworI2lmIFVTRShD
RykKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gc3RydWN0IENHQ29udGV4dDsKKyNl
bGlmIFVTRShDQUlSTykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dENhaXJvOworfQordXNpbmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9
IHZvaWQ7CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHAKaW5kZXggYmIxMzhiNTI5N2E1MjFmYmY3ZDY5M2NkMTE0MTA0NDAwZmNhYmM0
ZS4uOTAyNGY1ZDFhYmZjZTM4MDgxODNhM2IyMzFmYmNlMGZmYjJmZjQxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTE5MSwxNyAr
MTkxLDE3IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMs
IGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDCiAgICAgdXBkYXRlU2hhZG93Qmx1clZh
bHVlcygpOwogfQogCi1TaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSkKLSAgICA6IG1fY29sb3Ioc3RhdGUuc2hhZG93Q29sb3IpCi0gICAgLCBt
X2JsdXJSYWRpdXMoc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Qmx1cikKLSAgICAsIG1f
b2Zmc2V0KHN0YXRlLnNoYWRvd09mZnNldCkKLSAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVy
KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3csIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpCisgICAgOiBtX2NvbG9yKGRyb3BTaGFkb3cuY29sb3IpCisgICAgLCBtX2JsdXJSYWRpdXMo
ZHJvcFNoYWRvdy5ibHVyUmFkaXVzLCBkcm9wU2hhZG93LmJsdXJSYWRpdXMpCisgICAgLCBtX29m
ZnNldChkcm9wU2hhZG93Lm9mZnNldCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCiB7CiAjaWYgVVNFKENHKQogICAgIC8vIENvcmUgR3Jh
cGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRh
cjovL3Byb2JsZW0vODEwMzQ0Mj4pLAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRo
aXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAg
IGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkg
ewotICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUu
c2hhZG93Qmx1cik7CisgICAgaWYgKGRyb3BTaGFkb3cucmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRp
dXNNb2RlOjpMZWdhY3kpIHsKKyAgICAgICAgZmxvYXQgc2hhZG93Qmx1ciA9IHJhZGl1c1RvTGVn
YWN5UmFkaXVzKGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9
IEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAppbmRleCAxNGZkODNl
ZGUxYTFiYWNmMTc3ZjMzMWVjYWQxYTQzMDI5M2Y2MDNhLi40NWQwZTU4MzI5Y2RlZWFiZmI3OGE0
ZDVlNjdhYjhkODgxYWU1NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2hhZG93Qmx1ci5oCkBAIC0zOCw4ICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owotc3RydWN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlOworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGU7CiBjbGFzcyBJ
bWFnZUJ1ZmZlcjsKK3N0cnVjdCBEcm9wU2hhZG93OwogCiBjbGFzcyBTaGFkb3dCbHVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFkb3dCbHVyKTsKQEAgLTUyLDcgKzUzLDcgQEAgcHVi
bGljOgogCiAgICAgU2hhZG93Qmx1cigpOwogICAgIFNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXpl
JiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYsIGJvb2wgc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7Ci0gICAgU2hhZG93Qmx1cihjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpOworICAgIFNoYWRvd0JsdXIoY29uc3QgRHJvcFNoYWRvdyYsIGJv
b2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAKICAgICB2b2lkIHNldFNoYWRv
d1ZhbHVlcyhjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmICwgY29uc3QgQ29sb3Im
LCBib29sIGlnbm9yZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzZhYzEzZmQy
NWM2ZjBmODAxNTg3MmZmMTllZDI4YTFmYTUyYmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCkBAIC0wLDAgKzEsODQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvdXJjZUJydXNoLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworU291cmNlQnJ1c2g6OlNvdXJjZUJydXNoKGNvbnN0IENvbG9yJiBjb2xvciwgc3Rk
OjpvcHRpb25hbDxCcnVzaD4mJiBicnVzaCkKKyAgICA6IG1fY29sb3IoY29sb3IpCisgICAgLCBt
X2JydXNoKFdURk1vdmUoYnJ1c2gpKQoreworfQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFNv
dXJjZUJydXNoOjpzcGFjZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEFmZmluZVRyYW5zZm9ybT4gaWRlbnRpdHk7CisgICAgcmV0dXJuIG1fYnJ1c2ggPyBt
X2JydXNoLT5zcGFjZVRyYW5zZm9ybSA6IGlkZW50aXR5LmdldCgpOworfQorCitHcmFkaWVudCog
U291cmNlQnJ1c2g6OmdyYWRpZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChhdXRvKiBncmFkaWVudCA9IHN0ZDo6Z2V0X2lm
PFJlZjxHcmFkaWVudD4+KCZtX2JydXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBncmFkaWVu
dC0+cHRyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1BhdHRlcm4qIFNvdXJjZUJydXNo
OjpwYXR0ZXJuKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmIChhdXRvKiBwYXR0ZXJuID0gc3RkOjpnZXRfaWY8UmVmPFBhdHRlcm4+
PigmbV9icnVzaC0+YnJ1c2gpKQorICAgICAgICByZXR1cm4gcGF0dGVybi0+cHRyKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgU291cmNlQnJ1c2g6OnNldEdyYWRpZW50KFJlZjxH
cmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9y
bSkKK3sKKyAgICBtX2JydXNoID0geyBXVEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0g
fTsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0UGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0
ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQoreworICAgIG1fYnJ1
c2ggPSB7IFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtIH07Cit9CisKK1dURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU291cmNlQnJ1c2gmIGJy
dXNoKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBicnVzaC5jb2xvcigpKTsKKwor
ICAgIGlmIChhdXRvIGdyYWRpZW50ID0gYnJ1c2guZ3JhZGllbnQoKSkKKyAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJncmFkaWVudCIsIGdyYWRpZW50KTsKKworICAgIGlmIChhdXRvIHBhdHRlcm4g
PSBicnVzaC5wYXR0ZXJuKCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVybiIsIHBh
dHRlcm4pOworCisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43MTEwZjIxZmRiZWFjYmYzNWQ3ODkwYzc4ZjczOTk3OTY0YWRmZWExCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaApA
QCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3Jh
ZGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU291cmNlQnJ1c2ggeworcHVibGljOgorICAgIHN0cnVjdCBCcnVzaCB7CisgICAgICAg
IHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0dGVybj4+IGJydXNoOworICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gc3BhY2VUcmFuc2Zvcm07CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxCcnVzaD4gZGVjb2Rl
KERlY29kZXImKTsKKyAgICB9OworCisgICAgU291cmNlQnJ1c2goKSA9IGRlZmF1bHQ7CisgICAg
V0VCQ09SRV9FWFBPUlQgU291cmNlQnJ1c2goY29uc3QgQ29sb3ImLCBzdGQ6Om9wdGlvbmFsPEJy
dXNoPiYmID0gc3RkOjpudWxsb3B0KTsKKworICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0
IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICB2b2lkIHNldENvbG9yKGNvbnN0IENvbG9yIGNvbG9y
KSB7IG1fY29sb3IgPSBjb2xvcjsgfQorCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxCcnVzaD4m
IGJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9icnVzaDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQg
R3JhZGllbnQqIGdyYWRpZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUGF0dGVybiog
cGF0dGVybigpIGNvbnN0OworICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zv
cm0oKSBjb25zdDsKKworICAgIHZvaWQgc2V0R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KTsKKyAgICB2b2lkIHNldFBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zv
cm0gPSB7IH0pOworCisgICAgYm9vbCBpc1ByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2Jy
dXNoICYmIG1fY29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCk7IH0KKworICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTb3VyY2VCcnVzaD4gZGVjb2RlKERl
Y29kZXImKTsKKworcHJpdmF0ZToKKyAgICBDb2xvciBtX2NvbG9yIHsgQ29sb3I6OmJsYWNrIH07
CisgICAgc3RkOjpvcHRpb25hbDxCcnVzaD4gbV9icnVzaDsKK307CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4m
IGEsIGNvbnN0IHN0ZDo6dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0dGVybj4+JiBiKQor
eworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGEsCisgICAgICAgIFsmXSAoY29uc3QgUmVmPEdy
YWRpZW50PiYgYUdyYWRpZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byogYkdyYWRpZW50ID0g
c3RkOjpnZXRfaWY8UmVmPEdyYWRpZW50Pj4oJmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBh
R3JhZGllbnQucHRyKCkgPT0gYkdyYWRpZW50LT5wdHIoKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8UGF0dGVybj4mIGFQYXR0
ZXJuKSB7CisgICAgICAgICAgICBpZiAoYXV0byogYlBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8
UGF0dGVybj4+KCZiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYVBhdHRlcm4ucHRyKCkgPT0g
YlBhdHRlcm4tPnB0cigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaDo6QnJ1
c2gmIGEsIGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYikKK3sKKyAgICByZXR1cm4gYS5icnVz
aCA9PSBiLmJydXNoICYmIGEuc3BhY2VUcmFuc2Zvcm0gPT0gYi5zcGFjZVRyYW5zZm9ybTsKK30K
KworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaCYgYSwgY29uc3QgU291
cmNlQnJ1c2gmIGIpCit7CisgICAgcmV0dXJuIGEuY29sb3IoKSA9PSBiLmNvbG9yKCkgJiYgYS5i
cnVzaCgpID09IGIuYnJ1c2goKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KK3Zv
aWQgU291cmNlQnJ1c2g6OkJydXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sK
KyAgICBlbmNvZGVyIDw8IHNwYWNlVHJhbnNmb3JtOworICAgIFdURjo6c3dpdGNoT24oYnJ1c2gs
CisgICAgICAgIFsmXSAoY29uc3QgUmVmPEdyYWRpZW50PiYgZ3JhZGllbnQpIHsKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgdHJ1ZSA8PCBncmFkaWVudC5nZXQoKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyZdIChjb25zdCBSZWY8UGF0dGVybj4mIHBhdHRlcm4pIHsKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgZmFsc2UgPDwgcGF0dGVybi5nZXQoKTsKKyAgICAgICAgfQorICAgICk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoOjpCcnVz
aD4gU291cmNlQnJ1c2g6OkJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBz
dGQ6Om9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gc3BhY2VUcmFuc2Zvcm07CisgICAgZGVjb2Rl
ciA+PiBzcGFjZVRyYW5zZm9ybTsKKyAgICBpZiAoIXNwYWNlVHJhbnNmb3JtKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBoYXNHcmFkaWVu
dDsKKyAgICBkZWNvZGVyID4+IGhhc0dyYWRpZW50OworICAgIGlmICghaGFzR3JhZGllbnQpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgCisgICAgaWYgKCpoYXNHcmFkaWVudCkg
eworICAgICAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKKyAg
ICAgICAgaWYgKCFncmFkaWVudCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgIHJldHVybiB7IHsgV1RGTW92ZSgqZ3JhZGllbnQpLCAqc3BhY2VUcmFuc2Zvcm0gfSB9
OworICAgIH0KKworICAgIGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsK
KyAgICBpZiAoIXBhdHRlcm4pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHsgeyBXVEZNb3ZlKCpwYXR0ZXJuKSwgKnNwYWNlVHJhbnNmb3JtIH0gfTsKK30KKwordGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgU291cmNlQnJ1c2g6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVyIDw8
IG1fYnJ1c2g7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNv
dXJjZUJydXNoPiBTb3VyY2VCcnVzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
c3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7CisgICAgZGVjb2RlciA+PiBjb2xvcjsKKyAgICBp
ZiAoIWNvbG9yKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRp
b25hbDxzdGQ6Om9wdGlvbmFsPEJydXNoPj4gYnJ1c2g7CisgICAgZGVjb2RlciA+PiBicnVzaDsK
KyAgICBpZiAoIWJydXNoKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0
dXJuIFNvdXJjZUJydXNoKCpjb2xvciwgV1RGTW92ZSgqYnJ1c2gpKTsKK30KKworV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFNvdXJjZUJydXNoJik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RleHRCb3hJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzdlNjhlMzhmMDIzN2Iw
MjIwY2Y2NWJhMmMxMGU4ODg4ZGQ0OTg1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRCb3hJdGVyYXRvci5oCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgVGV4dEJveEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94SXRlcmF0b3IoKQorICAg
ICAgICA6IG1fdGV4dFJ1bigwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0K
KworICAgIFRleHRCb3hJdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBv
ZmZzZXQpCisgICAgICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCisgICAgICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX29mZnNldDsgfQorICAgIHZvaWQgaW5jcmVtZW50KCkgeyBtX29mZnNldCsrOyB9Cisg
ICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHRSdW4gfHwgbV9vZmZzZXQgPj0g
bV90ZXh0UnVuLT5sZW5ndGgoKTsgfQorICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdCB7IHJldHVy
biAoKm1fdGV4dFJ1bilbbV9vZmZzZXRdOyB9CisgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gYXRFbmQoKSA/IFVfT1RIRVJfTkVVVFJBTCA6IHVfY2hhckRpcmVj
dGlvbihjdXJyZW50KCkpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBv
dGhlci5tX29mZnNldCAmJiBtX3RleHRSdW4gPT0gb3RoZXIubV90ZXh0UnVuOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7
IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUZXh0
UnVuKiBtX3RleHRSdW47CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA3MjhkM2JlYTBhMTcyMzUwMTRmMGYxMmNm
M2Q2ZDdkYTE5M2MzNWE1Li4xNWU4NDU1N2FjODFhNzY3YTAwNzQ2ZTMwMTYxNTM1NDRmMjE1Njdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTE4MzQsNyArMTgzNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29u
c3QgVHJhCiAgICAgICAgIAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3Jp
Z2luKCksIHNpemUoKSk7CiAKLSAgICAgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCBjb250
ZXh0KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwg
QWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNv
bnRleHQoKm1fZGlzcGxheUxpc3QsIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CiAg
ICAgICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IDE1
NTIzNTZhMjNhNWZkZmIxMGFmZWNhMmNjOTJhNzI3OTQ1ODEwMmUuLjQzN2I3NjRmNDA3YWRlYzBl
YjI4Y2RkZjVlZmRhNmNhNGFmNjkwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtMjI3LDcg
KzIyNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UGF0aFNoYWRvdyhHcmFwaGljc0NvbnRl
eHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGCiAgICAgICAgIHNvbGlkRmlndXJlRXh0
ZW50cy51bml0ZShmaWxsRXh0ZW50cyk7CiAgICAgfQogCi0gICAgc2hhZG93LmRyYXdTaGFkb3dM
YXllcihTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRz
KHBsYXRmb3JtQ29udGV4dCksIHNvbGlkRmlndXJlRXh0ZW50cywKKyAgICBzaGFkb3cuZHJhd1No
YWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0LmNyKCkpLCBTdGF0ZTo6Z2V0
Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBzb2xpZEZpZ3VyZUV4dGVudHMsCiAgICAgICAg
IFtjYWlyb0NvbnRleHQsIGRyYXdpbmdTdHlsZSwgJnBhdGgsICZmaWxsU291cmNlLCAmc3Ryb2tl
U291cmNlXShHcmFwaGljc0NvbnRleHQmIHNoYWRvd0NvbnRleHQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGNhaXJvX3QqIGNhaXJvU2hhZG93Q29udGV4dCA9IHNoYWRvd0NvbnRleHQucGxhdGZv
cm1Db250ZXh0KCktPmNyKCk7CkBAIC0zNDEsNyArMzQxLDcgQEAgc3RhdGljIHZvaWQgZHJhd0ds
eXBoc1NoYWRvdyhHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBT
aGFkb3cKICAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKHNjYWxlZEZvbnQsIGds
eXBocy5kYXRhKCksIGdseXBocy5zaXplKCksICZleHRlbnRzKTsKICAgICBGbG9hdFJlY3QgZm9u
dEV4dGVudHNSZWN0KHBvaW50LngoKSArIGV4dGVudHMueF9iZWFyaW5nLCBwb2ludC55KCkgKyBl
eHRlbnRzLnlfYmVhcmluZywgZXh0ZW50cy53aWR0aCwgZXh0ZW50cy5oZWlnaHQpOwogCi0gICAg
c2hhZG93LmRyYXdTaGFkb3dMYXllcihTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0
YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGZvbnRFeHRlbnRzUmVjdCwKKyAg
ICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0LmNy
KCkpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBmb250RXh0ZW50c1Jl
Y3QsCiAgICAgICAgIFtzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCAmZ2x5cGhzLCBm
b250U21vb3RoaW5nTW9kZV0oR3JhcGhpY3NDb250ZXh0JiBzaGFkb3dDb250ZXh0KQogICAgICAg
ICB7CiAgICAgICAgICAgICBkcmF3R2x5cGhzVG9Db250ZXh0KHNoYWRvd0NvbnRleHQucGxhdGZv
cm1Db250ZXh0KCktPmNyKCksIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBo
cywgZm9udFNtb290aGluZ01vZGUpOwpAQCAtMzY3LDcgKzM2Nyw3IEBAIEZsb2F0UmVjdCBjb21w
dXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEdyYXBoaWNzQ29udGV4dENh
aXJvJiBwbGF0CiAgICAgaWYgKHByaW50aW5nKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9y
aWdpbiwgRmxvYXRTaXplKHdpZHRoLCB0aGlja25lc3MpKTsKIAotICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm0gPSBDYWlybzo6U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpOworICAg
IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDYWlybzo6U3RhdGU6OmdldENUTShwbGF0Zm9y
bUNvbnRleHQuY3IoKSk7CiAgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9u
LCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCiAgICAgZmxvYXQgc2NhbGUgPSB0
cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6
IHRyYW5zZm9ybS5hKCk7CiAgICAgaWYgKHNjYWxlIDwgMS4wKSB7CkBAIC00NDYsMTcgKzQ0Niwx
NiBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJz
KGJvb2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAKLXZvaWQg
c2V0U3Ryb2tlVGhpY2tuZXNzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQs
IGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJvX3Qq
IGNyIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQogewotICAgIGNhaXJv
X3NldF9saW5lX3dpZHRoKHBsYXRmb3JtQ29udGV4dC5jcigpLCBzdHJva2VUaGlja25lc3MpOwor
ICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MpOwogfQogCi12b2lk
IHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIFN0
cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiBjciwg
U3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkYXNo
UGF0dGVybltdID0geyA1LjAsIDUuMCB9OwogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG90UGF0
dGVybltdID0geyAxLjAsIDEuMCB9OwogCi0gICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRl
eHQuY3IoKTsKICAgICBzd2l0Y2ggKHN0cm9rZVN0eWxlKSB7CiAgICAgY2FzZSBOb1N0cm9rZToK
ICAgICAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB3YXkgdG8gZW11bGF0ZSBOb1N0cm9r
ZT8KQEAgLTQ3NywyOSArNDc2LDI5IEBAIHZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5CiAgICAgfQog
fQogCi12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxh
dGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5k
TW9kZSBibGVuZE1vZGUpCit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiBjciwg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIGNhaXJvX3NldF9vcGVyYXRvcihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgdG9DYWly
b09wZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CisgICAgY2Fpcm9fc2V0
X29wZXJhdG9yKGNyLCB0b0NhaXJvT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBibGVuZE1v
ZGUpKTsKIH0KIAotdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgYm9vbCBlbmFibGUpCit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhj
YWlyb190KiBjciwgYm9vbCBlbmFibGUpCiB7CiAgICAgLy8gV2hlbiB0cnVlLCB1c2UgdGhlIGRl
ZmF1bHQgQ2Fpcm8gYmFja2VuZCBhbnRpYWxpYXMgbW9kZSAodXN1YWxseSB0aGlzCiAgICAgLy8g
ZW5hYmxlcyBzdGFuZGFyZCAnZ3JheXNjYWxlJyBhbnRpYWxpYXNpbmcpOyBmYWxzZSB0byBleHBs
aWNpdGx5IGRpc2FibGUKICAgICAvLyBhbnRpYWxpYXNpbmcuCi0gICAgY2Fpcm9fc2V0X2FudGlh
bGlhcyhwbGF0Zm9ybUNvbnRleHQuY3IoKSwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFV
TFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhjciwg
ZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7
CiB9CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBzZXRDVE0oY2Fpcm9fdCog
Y3IsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGNvbnN0IGNhaXJv
X21hdHJpeF90IG1hdHJpeCA9IHRvQ2Fpcm9NYXRyaXgodHJhbnNmb3JtKTsKLSAgICBjYWlyb19z
ZXRfbWF0cml4KHBsYXRmb3JtQ29udGV4dC5jcigpLCAmbWF0cml4KTsKKyAgICBjYWlyb19zZXRf
bWF0cml4KGNyLCAmbWF0cml4KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQorQWZmaW5lVHJhbnNmb3JtIGdldENUTShj
YWlyb190KiBjcikKIHsKICAgICBjYWlyb19tYXRyaXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRy
aXgocGxhdGZvcm1Db250ZXh0LmNyKCksICZtKTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAm
bSk7CiAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybShtLnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBt
LngwLCBtLnkwKTsKIH0KIApAQCAtNTU2LDQ1ICs1NTUsNDUgQEAgYm9vbCBpc0FjY2VsZXJhdGVk
Q29udGV4dChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQogfSAvLyBuYW1l
c3BhY2UgU3RhdGUKIAogRmlsbFNvdXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUpCi0gICAgOiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGZp
bGxSdWxlKHN0YXRlLmZpbGxSdWxlKQorICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEoKSkK
KyAgICAsIGZpbGxSdWxlKHN0YXRlLmZpbGxSdWxlKCkpCiB7Ci0gICAgaWYgKHN0YXRlLmZpbGxQ
YXR0ZXJuKSB7Ci0gICAgICAgIHBhdHRlcm4ub2JqZWN0ID0gYWRvcHRSZWYoc3RhdGUuZmlsbFBh
dHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgIGlm
IChhdXRvIGZpbGxQYXR0ZXJuID0gc3RhdGUuZmlsbEJydXNoKCkucGF0dGVybigpKSB7CisgICAg
ICAgIHBhdHRlcm4ub2JqZWN0ID0gYWRvcHRSZWYoZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3Jt
UGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOwogCi0gICAgICAgIGF1dG8mIHBhdHRlcm5JbWFn
ZSA9IHN0YXRlLmZpbGxQYXR0ZXJuLT50aWxlSW1hZ2UoKTsKKyAgICAgICAgYXV0byYgcGF0dGVy
bkltYWdlID0gZmlsbFBhdHRlcm4tPnRpbGVJbWFnZSgpOwogICAgICAgICBwYXR0ZXJuLnNpemUg
PSBwYXR0ZXJuSW1hZ2Uuc2l6ZSgpOwotICAgICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9IHN0YXRl
LmZpbGxQYXR0ZXJuLT5wYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKTsKLSAgICAgICAgcGF0dGVybi5y
ZXBlYXRYID0gc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKTsKLSAgICAgICAgcGF0dGVybi5y
ZXBlYXRZID0gc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKTsKLSAgICB9IGVsc2UgaWYgKHN0
YXRlLmZpbGxHcmFkaWVudCkgewotICAgICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuZmlsbEdy
YWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3Jt
KTsKLSAgICAgICAgaWYgKHN0YXRlLmFscGhhICE9IDEpCi0gICAgICAgICAgICBncmFkaWVudC5h
bHBoYUFkanVzdGVkID0gc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFs
cGhhLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIHBhdHRlcm4u
dHJhbnNmb3JtID0gZmlsbFBhdHRlcm4tPnBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpOworICAgICAg
ICBwYXR0ZXJuLnJlcGVhdFggPSBmaWxsUGF0dGVybi0+cmVwZWF0WCgpOworICAgICAgICBwYXR0
ZXJuLnJlcGVhdFkgPSBmaWxsUGF0dGVybi0+cmVwZWF0WSgpOworICAgIH0gZWxzZSBpZiAoYXV0
byBmaWxsR3JhZGllbnQgPSBzdGF0ZS5maWxsQnJ1c2goKS5ncmFkaWVudCgpKSB7CisgICAgICAg
IGdyYWRpZW50LmJhc2UgPSBmaWxsR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3RhdGUuZmls
bEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgIGlmIChzdGF0ZS5hbHBoYSgpICE9
IDEpCisgICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gZmlsbEdyYWRpZW50LT5j
cmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhKCksIHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNm
b3JtKCkpOwogICAgIH0gZWxzZQotICAgICAgICBjb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsKKyAg
ICAgICAgY29sb3IgPSBzdGF0ZS5maWxsQnJ1c2goKS5jb2xvcigpOwogfQogCiBTdHJva2VTb3Vy
Y2U6OlN0cm9rZVNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCi0gICAg
OiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLXsKLSAgICBpZiAoc3RhdGUuc3Ryb2tlUGF0dGVy
bikKLSAgICAgICAgcGF0dGVybiA9IGFkb3B0UmVmKHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0
ZVBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotICAgIGVsc2UgaWYgKHN0YXRl
LnN0cm9rZUdyYWRpZW50KSB7Ci0gICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdGF0ZS5zdHJva2VH
cmFkaWVudC0+Y3JlYXRlUGF0dGVybigxLCBzdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNm
b3JtKTsKLSAgICAgICAgaWYgKHN0YXRlLmFscGhhICE9IDEpCi0gICAgICAgICAgICBncmFkaWVu
dC5hbHBoYUFkanVzdGVkID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oc3Rh
dGUuYWxwaGEsIHN0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIDogZ2xv
YmFsQWxwaGEoc3RhdGUuYWxwaGEoKSkKK3sKKyAgICBpZiAoYXV0byBzdHJva2VQYXR0ZXJuID0g
c3RhdGUuc3Ryb2tlQnJ1c2goKS5wYXR0ZXJuKCkpCisgICAgICAgIHBhdHRlcm4gPSBhZG9wdFJl
ZihzdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkp
KTsKKyAgICBlbHNlIGlmIChhdXRvIHN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ryb2tlQnJ1c2go
KS5ncmFkaWVudCgpKSB7CisgICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdHJva2VHcmFkaWVudC0+
Y3JlYXRlUGF0dGVybigxLCBzdGF0ZS5zdHJva2VCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCkpOwor
ICAgICAgICBpZiAoc3RhdGUuYWxwaGEoKSAhPSAxKQorICAgICAgICAgICAgZ3JhZGllbnQuYWxw
aGFBZGp1c3RlZCA9IHN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhKCks
IHN0YXRlLnN0cm9rZUJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIGNvbG9yID0gc3RhdGUuc3Ryb2tlQ29sb3I7CisgICAgICAgIGNvbG9yID0gc3RhdGUuc3Ry
b2tlQnJ1c2goKS5jb2xvcigpOwogfQogCiBTaGFkb3dTdGF0ZTo6U2hhZG93U3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogb2Zmc2V0KHN0YXRlLnNoYWRvd09m
ZnNldCkKLSAgICAsIGJsdXIoc3RhdGUuc2hhZG93Qmx1cikKLSAgICAsIGNvbG9yKHN0YXRlLnNo
YWRvd0NvbG9yKQotICAgICwgaWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcykKLSAgICAsIGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKQotICAgICwgZ2xvYmFsQ29t
cG9zaXRlT3BlcmF0b3Ioc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpCisgICAgOiBvZmZzZXQoc3Rh
dGUuZHJvcFNoYWRvdygpLm9mZnNldCkKKyAgICAsIGJsdXIoc3RhdGUuZHJvcFNoYWRvdygpLmJs
dXJSYWRpdXMpCisgICAgLCBjb2xvcihzdGF0ZS5kcm9wU2hhZG93KCkuY29sb3IpCisgICAgLCBp
Z25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpCisgICAgLCBn
bG9iYWxBbHBoYShzdGF0ZS5hbHBoYSgpKQorICAgICwgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3Io
c3RhdGUuY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbikKIHsKIH0KIApAQCAtNjE1LDE0ICs2MTQs
MTQgQEAgYm9vbCBTaGFkb3dTdGF0ZTo6aXNSZXF1aXJlZChHcmFwaGljc0NvbnRleHRDYWlybyYg
cGxhdGZvcm1Db250ZXh0KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBX
ZSBjYW4gYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlcmUgYXJlIG5vIHRyYW5zZm9ybWF0aW9u
cyB0byBhcHBseSB0byB0aGUgY2FudmFzLgotICAgIGlmIChTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3Jt
Q29udGV4dCkuaXNJZGVudGl0eSgpKQorICAgIGlmIChTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29u
dGV4dC5jcigpKS5pc0lkZW50aXR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IE90aGVyd2lzZSwgbm8gY2hhbmNlIGF2b2lkaW5nIFNoYWRvd0JsdXIuCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1D
b250ZXh0LCBMaW5lQ2FwIGxpbmVDYXApCit2b2lkIHNldExpbmVDYXAoY2Fpcm9fdCogY3IsIExp
bmVDYXAgbGluZUNhcCkKIHsKICAgICBjYWlyb19saW5lX2NhcF90IGNhaXJvQ2FwIHsgfTsKICAg
ICBzd2l0Y2ggKGxpbmVDYXApIHsKQEAgLTYzNiwxOCArNjM1LDE4IEBAIHZvaWQgc2V0TGluZUNh
cChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxpbmVDYXAp
CiAgICAgICAgIGNhaXJvQ2FwID0gQ0FJUk9fTElORV9DQVBfU1FVQVJFOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xpbmVfY2FwKHBsYXRmb3JtQ29udGV4dC5jcigpLCBj
YWlyb0NhcCk7CisgICAgY2Fpcm9fc2V0X2xpbmVfY2FwKGNyLCBjYWlyb0NhcCk7CiB9CiAKLXZv
aWQgc2V0TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29u
c3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIHNldExpbmVEYXNo
KGNhaXJvX3QqIGNyLCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkK
IHsKICAgICBpZiAoc3RkOjphbGxfb2YoZGFzaGVzLmJlZ2luKCksIGRhc2hlcy5lbmQoKSwgW10o
YXV0byYgZGFzaCkgeyByZXR1cm4gIWRhc2g7IH0pKQotICAgICAgICBjYWlyb19zZXRfZGFzaChw
bGF0Zm9ybUNvbnRleHQuY3IoKSwgMCwgMCwgMCk7CisgICAgICAgIGNhaXJvX3NldF9kYXNoKGNy
LCAwLCAwLCAwKTsKICAgICBlbHNlCi0gICAgICAgIGNhaXJvX3NldF9kYXNoKHBsYXRmb3JtQ29u
dGV4dC5jcigpLCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKKyAg
ICAgICAgY2Fpcm9fc2V0X2Rhc2goY3IsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCksIGRh
c2hPZmZzZXQpOwogfQogCi12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiBw
bGF0Zm9ybUNvbnRleHQsIExpbmVKb2luIGxpbmVKb2luKQordm9pZCBzZXRMaW5lSm9pbihjYWly
b190KiBjciwgTGluZUpvaW4gbGluZUpvaW4pCiB7CiAgICAgY2Fpcm9fbGluZV9qb2luX3QgY2Fp
cm9Kb2luIHsgfTsKICAgICBzd2l0Y2ggKGxpbmVKb2luKSB7CkBAIC02NjEsMTIgKzY2MCwxMiBA
QCB2b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQs
IExpbmVKb2luIGxpbmVKb2luKQogICAgICAgICBjYWlyb0pvaW4gPSBDQUlST19MSU5FX0pPSU5f
QkVWRUw7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYWlyb19zZXRfbGluZV9qb2luKHBs
YXRmb3JtQ29udGV4dC5jcigpLCBjYWlyb0pvaW4pOworICAgIGNhaXJvX3NldF9saW5lX2pvaW4o
Y3IsIGNhaXJvSm9pbik7CiB9CiAKLXZvaWQgc2V0TWl0ZXJMaW1pdChHcmFwaGljc0NvbnRleHRD
YWlybyYgcGxhdGZvcm1Db250ZXh0LCBmbG9hdCBtaXRlckxpbWl0KQordm9pZCBzZXRNaXRlckxp
bWl0KGNhaXJvX3QqIGNyLCBmbG9hdCBtaXRlckxpbWl0KQogewotICAgIGNhaXJvX3NldF9taXRl
cl9saW1pdChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgbWl0ZXJMaW1pdCk7CisgICAgY2Fpcm9fc2V0
X21pdGVyX2xpbWl0KGNyLCBtaXRlckxpbWl0KTsKIH0KIAogdm9pZCBmaWxsUmVjdChHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0
ZSkKQEAgLTY4Miw3ICs2ODEsNyBAQCB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29ucwogewogICAgIGlm
IChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAgICAgICBTaGFkb3dCbHVyIHNoYWRvdyh7
IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwgc2hhZG93U3RhdGUub2Zmc2V0
LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAg
ICAgIHNoYWRvdy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCks
IFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIEZsb2F0Um91bmRlZFJlY3Qo
cmVjdCksCisgICAgICAgIHNoYWRvdy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRm
b3JtQ29udGV4dC5jcigpKSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwg
RmxvYXRSb3VuZGVkUmVjdChyZWN0KSwKICAgICAgICAgICAgIFsmcGxhdGZvcm1Db250ZXh0LCAm
c2hhZG93U3RhdGVdKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBs
YXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIGxheWVySW1h
Z2UsIGxheWVyT3JpZ2luLCBsYXllclNpemUsIHNoYWRvd1N0YXRlKTsKQEAgLTcxMyw3ICs3MTIs
NyBAQCB2b2lkIGZpbGxSb3VuZGVkUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1D
b250ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZQogewogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zp
c2libGUoKSkgewogICAgICAgICBTaGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIs
IHNoYWRvd1N0YXRlLmJsdXIgfSwgc2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xv
ciwgc2hhZG93U3RhdGUuaWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5kcmF3UmVj
dFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91
bmRzKHBsYXRmb3JtQ29udGV4dCksIHJlY3QsCisgICAgICAgIHNoYWRvdy5kcmF3UmVjdFNoYWRv
dyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigpKSwgU3RhdGU6OmdldENsaXBCb3Vu
ZHMocGxhdGZvcm1Db250ZXh0KSwgcmVjdCwKICAgICAgICAgICAgIFsmcGxhdGZvcm1Db250ZXh0
LCAmc2hhZG93U3RhdGVdKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50
JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIGxheWVy
SW1hZ2UsIGxheWVyT3JpZ2luLCBsYXllclNpemUsIHNoYWRvd1N0YXRlKTsKQEAgLTc0Niw3ICs3
NDUsNyBAQCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKEdyYXBoaWNzQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UgogCiAgICAgaWYgKHNoYWRvd1N0YXRlLmlz
VmlzaWJsZSgpKSB7CiAgICAgICAgIFNoYWRvd0JsdXIgc2hhZG93KHsgc2hhZG93U3RhdGUuYmx1
ciwgc2hhZG93U3RhdGUuYmx1ciB9LCBzaGFkb3dTdGF0ZS5vZmZzZXQsIHNoYWRvd1N0YXRlLmNv
bG9yLCBzaGFkb3dTdGF0ZS5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICAgICAgc2hhZG93LmRyYXdJ
bnNldFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlw
Qm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwKKyAgICAgICAg
c2hhZG93LmRyYXdJbnNldFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigp
KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgcmVjdCwgcm91bmRlZEhv
bGVSZWN0LAogICAgICAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHQsICZzaGFkb3dTdGF0ZV0oSW1h
Z2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBjb25z
dCBGbG9hdFNpemUmIGxheWVyU2l6ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBm
aWxsU2hhZG93QnVmZmVyKHBsYXRmb3JtQ29udGV4dCwgbGF5ZXJJbWFnZSwgbGF5ZXJPcmlnaW4s
IGxheWVyU2l6ZSwgc2hhZG93U3RhdGUpOwpAQCAtODYzLDkgKzg2Miw5IEBAIHZvaWQgZHJhd1Bs
YXRmb3JtSW1hZ2UoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY2Fpcm9f
c3VyZmFjZV90KiBzCiAKICAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KICAg
ICBpZiAob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpID09IENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VPdmVyICYmIG9wdGlvbnMuYmxlbmRNb2RlKCkgPT0gQmxlbmRNb2RlOjpOb3JtYWwgJiYg
IWNhaXJvU3VyZmFjZUhhc0FscGhhKHN1cmZhY2UpKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9yOjpD
b3B5LCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dC5jcigpLCBDb21wb3NpdGVPcGVyYXRvcjo6Q29w
eSwgQmxlbmRNb2RlOjpOb3JtYWwpOwogICAgIGVsc2UKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBvcHRpb25zLmNvbXBvc2l0ZU9w
ZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgb3B0aW9ucy5jb21wb3Np
dGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIEZsb2F0UmVjdCBkc3Qg
PSBkZXN0UmVjdDsKICAgICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigpICE9IEltYWdlT3JpZW50
YXRpb246Ok5vbmUpIHsKQEAgLTk2NCw3ICs5NjMsNyBAQCB2b2lkIGRyYXdTdXJmYWNlKEdyYXBo
aWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFj
ZQogCiAgICAgU2hhZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFkb3dTdGF0
ZS5ibHVyIH0sIHNoYWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0
YXRlLmlnbm9yZVRyYW5zZm9ybXMpOwogICAgIGlmIChzaGFkb3cudHlwZSgpICE9IFNoYWRvd0Js
dXI6Ok5vU2hhZG93KSB7Ci0gICAgICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6Omdl
dENUTShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRl
eHQpLCBkZXN0UmVjdCwKKyAgICAgICAgc2hhZG93LmRyYXdTaGFkb3dMYXllcihTdGF0ZTo6Z2V0
Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigpKSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1D
b250ZXh0KSwgZGVzdFJlY3QsCiAgICAgICAgICAgICBbJnBhdHRlcm4sICZkZXN0UmVjdF0oR3Jh
cGhpY3NDb250ZXh0JiBzaGFkb3dDb250ZXh0KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGRyYXdQYXR0ZXJuVG9DYWlyb0NvbnRleHQoc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgcGF0dGVybi5nZXQoKSwgZGVzdFJlY3QsIDEpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaApp
bmRleCA1NDk4NTYzY2U0OWMxNWUzNWQwODI1OWMyZDI2ZGM3YjE3Y2VhODg1Li5lNWEzNDI0YWU2
MTE3MDdhYzk3ZDBkMTllN2NjMzA2MWFiNzA2MWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaApAQCAtNDYs
MjIgKzQ2LDIxIEBAIGNsYXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRmxvYXRS
b3VuZGVkUmVjdDsKIGNsYXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRl
OwogY2xhc3MgUGF0aDsKIAotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOwotCiBuYW1lc3Bh
Y2UgQ2Fpcm8gewogCiBuYW1lc3BhY2UgU3RhdGUgewogCi12b2lkIHNldFN0cm9rZVRoaWNrbmVz
cyhHcmFwaGljc0NvbnRleHRDYWlybyYsIGZsb2F0KTsKLXZvaWQgc2V0U3Ryb2tlU3R5bGUoR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8mLCBTdHJva2VTdHlsZSk7Cit2b2lkIHNldFN0cm9rZVRoaWNrbmVz
cyhjYWlyb190KiwgZmxvYXQpOwordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiwgU3Ryb2tl
U3R5bGUpOwogCi12b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWly
byYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwotdm9pZCBzZXRTaG91bGRBbnRpYWxp
YXMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBib29sKTsKK3ZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKGNhaXJvX3QqLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKK3ZvaWQgc2V0U2hv
dWxkQW50aWFsaWFzKGNhaXJvX3QqLCBib29sKTsKIAotdm9pZCBzZXRDVE0oR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLUFmZmluZVRyYW5zZm9ybSBnZXRD
VE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mKTsKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCopOwogCiBJ
bnRSZWN0IGdldENsaXBCb3VuZHMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mKTsKIEZsb2F0UmVjdCBy
b3VuZFRvRGV2aWNlUGl4ZWxzKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0
Jik7CkBAIC0xMjUsMTAgKzEyNCwxMCBAQCBzdHJ1Y3QgU2hhZG93U3RhdGUgewogICAgIENvbXBv
c2l0ZU9wZXJhdG9yIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZU92ZXIgfTsKIH07CiAKLXZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWly
byYsIExpbmVDYXApOwotdm9pZCBzZXRMaW5lRGFzaChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0KTsKLXZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mLCBMaW5lSm9pbik7Ci12b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fp
cm8mLCBmbG9hdCk7Cit2b2lkIHNldExpbmVDYXAoY2Fpcm9fdCosIExpbmVDYXApOwordm9pZCBz
ZXRMaW5lRGFzaChjYWlyb190KiwgY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpOwordm9pZCBzZXRM
aW5lSm9pbihjYWlyb190KiwgTGluZUpvaW4pOwordm9pZCBzZXRNaXRlckxpbWl0KGNhaXJvX3Qq
LCBmbG9hdCk7CiAKIHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKIHZvaWQg
ZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYsIGNvbnN0IFNoYWRvd1N0YXRlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAppbmRleCBhN2FmMGNlYjUyNDkwNDA0
MWVlMTJkNTFmODljNmRmMTZjYjM2MDM3Li4zZDE5NzU3OWEyY2MyMjk5MzM4ODVhMWExNTk1YzYz
OTZjYTg2ZGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6
ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEcKICAgICBhdXRvJiBzdGF0ZSA9IGNvbnRleHQuc3RhdGUoKTsKICAgICBDYWlybzo6ZHJh
d0dseXBocygqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJv
R2x5cGhzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKKyAg
ICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlKCksIHN0YXRlLnN0cm9rZVRoaWNrbmVzcygpLCBz
dGF0ZS5kcm9wU2hhZG93KCkub2Zmc2V0LCBzdGF0ZS5kcm9wU2hhZG93KCkuY29sb3IsCiAgICAg
ICAgIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAppbmRleCA5MDA5NmFj
NjQ1MjI0ZGJmZGM2MGJmYTZjYWNhZDAzMDc2Y2IyOTdkLi5iZTJjMjk1Y2E1MDdkOWI1NjNmODVk
NWJjYjg3MDk3MmYwZGFkOGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBA
IFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IEdyYWRpZW50OjpjcmVhdGVQYXR0ZXJuKGZsb2F0IGds
b2JhbEFscGhhLCBjb25zdCBBZmZpbmVUCiAKIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXV0byBwYXR0
ZXJuID0gY3JlYXRlUGF0dGVybigxLjAsIGNvbnRleHQuc3RhdGUoKS5maWxsR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSk7CisgICAgYXV0byBwYXR0ZXJuID0gY3JlYXRlUGF0dGVybigxLjAsIGNvbnRl
eHQuZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0
dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYzMyMzA0NDUzNTFiMDNm
MmFhODczNmFlZTJiY2U3OGJjNDM2MWY0OS4uODRkMDM5ZGRlNjU4ZDc3ZGI4YTI4NDU1YTg5YjQz
YTcxMWRjM2QyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNv
bT4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgpAQCAtNjgsNyArNjgsOCBA
QCBwdWJsaWM6CiB9OwogCiBHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm8oUmVmUHRyPGNhaXJvX3Q+JiYgY29udGV4dCkKLSAgICA6IG1fY3IoV1RGTW92ZShjb250ZXh0
KSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpKQorICAg
ICwgbV9jcihXVEZNb3ZlKGNvbnRleHQpKQogewogICAgIG1fY2Fpcm9TdGF0ZVN0YWNrLmFwcGVu
ZChDYWlyb1N0YXRlKCkpOwogICAgIG1fY2Fpcm9TdGF0ZSA9ICZtX2NhaXJvU3RhdGVTdGFjay5s
YXN0KCk7CkBAIC04NiwxMCArODcsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dENhaXJvOjpoYXNQ
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1BZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5j
bHVkZVNjYWxlKSBjb25zdAorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVu
ZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTY2FsZSk7Ci0g
ICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
cmV0dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4
dCgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdApAQCAtMTM0LDUzICsxMzQsMTEwIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogICAgIGNhaXJvX3Jlc3RvcmUobV9jci5nZXQo
KSk7CiB9CiAKLS8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3Jk
ZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KCp0aGlz
LCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5
bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gY2hhbmdlIDogc3RhdGUoKS5jaGFuZ2VzKCkp
IHsKKyAgICAgICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpDVE06CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENUTSht
X2NyLmdldCgpLCBzdGF0ZSgpLmdldENUTSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgor
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9jci5nZXQoKSwg
c3RkOjptYXgoc3RhdGUoKS5zdHJva2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9r
ZVN0eWxlOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX2NyLmdl
dCgpLCBzdGF0ZSgpLnN0cm9rZVN0eWxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAgICAgICAg
ICAgQ2Fpcm86OnNldExpbmVDYXAobV9jci5nZXQoKSwgc3RhdGUoKS5saW5lQ2FwKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpMaW5lSm9pbjoKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihtX2NyLmdldCgp
LCBzdGF0ZSgpLmxpbmVKb2luKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaDoKKyAgICAgICAgICAgIENh
aXJvOjpzZXRMaW5lRGFzaChtX2NyLmdldCgpLCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBz
dGF0ZSgpLmxpbmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoKKyAgICAgICAg
ICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fY3IuZ2V0KCksIHN0YXRlKCkubWl0ZXJMaW1pdCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZToKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG1fY3IuZ2V0KCksIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9w
ZXJhdGlvbiwgc3RhdGUoKS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJv
cFNoYWRvdzoKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
KSB7CisgICAgICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4
dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAg
ICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2
ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cgPSB0aGlz
LT5kcm9wU2hhZG93KCk7CisgICAgICAgICAgICAgICAgZHJvcFNoYWRvdy5vZmZzZXQgPSB7IGRy
b3BTaGFkb3cub2Zmc2V0LndpZHRoKCksIC1kcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQoKSB9Owor
ICAgICAgICAgICAgICAgIHNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0
U2hvdWxkQW50aWFsaWFzKG1fY3IuZ2V0KCksIHN0YXRlKCkuc2hvdWxkQW50aWFsaWFzKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBu
YXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAg
Q2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdl
KCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsK
KyAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7CiB9CiAK
LS8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBk
cmF3IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAoc3Ryb2tl
U3R5bGUoKSA9PSBOb1N0cm9rZSkKLSAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4
dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKnRoaXMpOworfQogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENh
aXJvOjpkcmF3TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBz
dGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRp
YWxpYXMpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIENhaXJvOjpj
bGlwKCp0aGlzLCByZWN0KTsKIH0KIAotLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRy
YXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVs
ZSkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdF
bGxpcHNlKCp0aGlzLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBz
dGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKKyAgICBDYWlybzo6Y2xpcFBhdGgoKnRo
aXMsIHBhdGgsIGNsaXBSdWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKK30KIAotICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMs
IHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgp
Cit7CisgICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1
ZmZlcigqdGhpcywgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3Qp
OworfQogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJv
a2VQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIENhaXJvOjpjbGVhclJlY3QoKnRoaXMsIHJl
Y3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCkBAIC0xOTYsOCArMjUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUu
ZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50
LmNyZWF0ZVBhdHRlcm4oMS4wLCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgaWYgKCFwYXR0
ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTIwNiwzNSArMjYyLDY0IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGdyYWRpZW50KQogICAgIHJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKKyAgICBDYWlybzo6ZmlsbFJv
dW5kZWRSZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
SG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwot
ICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVP
cGVyYXRvcjsKKyAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJlY3Qs
IHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKIAotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCp0aGlzLCBj
b21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMs
IHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqdGhpcywgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRN
b2RlOjpOb3JtYWwpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWly
bzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNs
aXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAgICBD
YWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OworICAgIENhaXJvOjpzdHJva2VSZWN0KCp0aGlzLCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpT
dHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ2Fpcm86OmNsaXBQYXRoKCp0aGlzLCBwYXRoLCBjbGlwUnVs
ZSk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnRoaXMsIHBh
dGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcygpIGNvbnN0
CisvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xp
cEJvdW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOworICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkp
OworICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBmaWxs
Q29sb3IoKSwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCisvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJv
cmRlcnMsIHNvIHdlIHNob3VsZCBub3QgZHJhdyBzaGFkb3dzLgordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludDIpCiB7Ci0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0lt
YWdlQnVmZmVyKCp0aGlzLCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0
UmVjdCk7CisgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0cm9rZVN0
eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzaG91bGRBbnRpYWxpYXMo
KSk7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUg
Y2lyY2xlcyB1c2VkIGluIGxpc3RzLgordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0Vs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIENhaXJvOjpkcmF3RWxsaXBzZSgq
dGhpcywgcmVjdCwgZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0
cm9rZVRoaWNrbmVzcygpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCkBAIC0yNjEsMTM4ICszNDYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgdwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ry
b2tlU3R5bGUpCi17Ci0gICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lk
dGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsK
LSAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUp
OwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQotewot
ICAgIFVOVVNFRF9QQVJBTShyb3VuZGluZ01vZGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnRoaXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDYWlybzo6dHJh
bnNsYXRlKCp0aGlzLCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlk
VXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAgICBDYWly
bzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcygqdGhpcywgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
KTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNo
YW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZSgqdGhpcywgc3RhdGUu
c3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
YWRvd0NoYW5nZSkgewotICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
IHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMg
YXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8g
V2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0
ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09m
ZnNldDsKLSAgICAgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQu
d2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNo
YW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMs
IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAg
ICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnRoaXMsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6Y29uY2F0Q1RNKCp0
aGlzLCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0YXRlOjpz
ZXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgQ2Fpcm86OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0
OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXll
cigqdGhpcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFyUmVjdCgqdGhpcywgcmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VSZWN0KCp0aGlzLCByZWN0LCBsaW5lV2lkdGgsIENh
aXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAp
Ci17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAoKnRoaXMsIGxpbmVDYXApOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywg
ZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBDYWlybzo6c2V0TGluZURhc2goKnRoaXMsIGRhc2hl
cywgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVK
b2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIENhaXJvOjpzZXRMaW5lSm9pbigqdGhpcywg
bGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRlckxpbWl0
KGZsb2F0IG1pdGVyKQotewotICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCp0aGlzLCBtaXRlcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0
aCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnJvdGF0ZShmbG9hdCByYWRpYW5zKQotewotICAgIENhaXJvOjpyb3Rh
dGUoKnRoaXMsIHJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2Fs
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgQ2Fpcm86OnNjYWxlKCp0aGlzLCBzaXpl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHJlY3QpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgQ2Fpcm86
OmZpbGxSb3VuZGVkUmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKCFjb2xvci5p
c1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKLSAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJlY3QsIHJv
dW5kZWRIb2xlUmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKKyAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnRoaXMsIG5hdGl2ZUlt
YWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywg
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIH0sIGFscGhhKCksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSgpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKQEAgLTQwNCwxMSArMzYwLDYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5h
dGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QKICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnRoaXMs
IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgbmF0aXZlSW1hZ2Uuc2l6ZSgpLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0K
IAotUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBs
YXRmb3JtQ29udGV4dCgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcp
CiB7CiAgICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTQzNCwxMiArMzg1
LDMxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCoKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKnRoaXMsIENhaXJvOjpGaWxsU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWly
b0dseXBocywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5z
dHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisg
ICAgICAgIHRleHREcmF3aW5nTW9kZSgpLCBzdHJva2VUaGlja25lc3MoKSwgc2hhZG93T2Zmc2V0
KCksIHNoYWRvd0NvbG9yKCksCiAgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQoreworICAgIGlmICh3aWR0
aHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRl
eHQoKnRoaXMsIHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVy
bGluZXMsIHN0cm9rZUNvbG9yKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUgc3R5bGUpCit7CisgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoKnRoaXMsIHJlY3QsIHN0eWxlKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4
dENhaXJvOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRp
bmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocm91bmRpbmdNb2RlKTsK
KyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCp0aGlzLCByZWN0
KTsKK30KKwogY2Fpcm9fdCogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNyKCkgY29uc3QKIHsKKyAg
ICBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dENhaXJvJj4oKnRoaXMpLmFwcGx5U3RhdGVDaGFu
Z2VzKCk7CiAgICAgcmV0dXJuIG1fY3IuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5oCmluZGV4IDU2NDYxYzE1OWE1ODNjODljNjFlOGYwMmU0ZTBiZWU3YjA1OTMyZWYuLjZmY2Rl
M2E4YmIxZGY5ZjU1YmY2OWJiYmY0ZmM2NDY1Zjg1ZTlhYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDYxICs1MSw0OSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICAgICBHcmFwaGljc0Nv
bnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRp
ZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0
b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogCi0gICAg
dm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpv
aW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAgdm9p
ZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwor
ICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIGNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3Q7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOwotICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsOwotICAgIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgQ29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFs
OworCiAgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOwogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZv
aWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lk
IGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
ZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCkgZmluYWw7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29s
LCBTdHJva2VTdHlsZSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKKwogICAg
IHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKICAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9h
dCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsK
LSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBm
bG9hdCkgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFsOwotICAgIHVzaW5nIEdy
YXBoaWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBm
aW5hbDsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsK
LSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBj
b25zdCBmaW5hbDsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmlu
YWw7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworICAgIHZvaWQgZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwogCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMo
KSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFs
OworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7
CisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKIAogICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2Rl
KSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IDk2Yzc2
MTM1NDFiZGM2NThhNzg3YWIwM2U3NzgxODgzNGQzMTg1YzQuLmRjMjY3OTdlMGJjZGI2M2MyZjVh
YWNkYjgwNjQ4MjU2NTk4ODVkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5j
cHAKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAgICBjb25zdCBh
dXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CiAKICAg
ICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRl
eHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAg
IGRyYXdQbGF0Zm9ybUltYWdlKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2Ut
PnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVz
dGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3Rp
bmF0aW9uQ29udGV4dFN0YXRlKSk7CisgICAgICAgIGRyYXdQbGF0Zm9ybUltYWdlKCpkZXN0Q29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVz
dFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSgpLCBX
ZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKIH0K
IAogdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE4NTZhMDQzOTNmZDI0ZTk2MjhmNmZlOTM0NjllZWJlYTRhYmI1OTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNh
dmVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7CitwdWJsaWM6CisgICAg
Q0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVz
dG9yZSA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9z
YXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVB
bmRSZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOwor
ICAgIH0KKyAgICAKKyAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCisgICAgeworICAgICAgICBp
ZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUo
bV9jb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUo
bV9jb250ZXh0KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7CisgICAgfQorCisg
ICAgdm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NhdmVBbmRSZXN0b3Jl
KTsKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOworICAgICAgICBt
X3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgZGlkU2F2ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9yZTsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7CisgICAgYm9vbCBtX3Nh
dmVBbmRSZXN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDMyNDVjNjAwNDMxNTUyZDUxM2I3NGVlYmMw
OWYzMThlZWMzZGQ3MmEuLjdlZmM3MmM5ZTdkMjhhZTI2ZDAxNmUwNmNiNzE4OGJhNjgwOGM3MmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CkBAIC0xODUsMTQgKzE4NSwxMyBAQCBzdGF0aWMgdm9pZCBzZXRDR0JsZW5kTW9kZShDR0Nv
bnRleHRSZWYgY29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZQogfQogCiBH
cmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY2dD
b250ZXh0KSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmluaXRpYWxDaGFuZ2VGbGFncywgQ0dDb250
ZXh0R2V0Q1RNKGNnQ29udGV4dCkpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUo
Y2dDb250ZXh0KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMg
d2l0aCBvdXIgc3RhdGUuCi0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgeyBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
Q29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2Ug
fSk7Ci0gICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29yZUludGVycG9s
YXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29u
dGV4dCgpKSk7CisgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb3JlSW50ZXJwb2xh
dGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJuYWxQbGF0
Zm9ybUNvbnRleHQoKSkpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRl
eHRDRygpCkBAIC0yMDYsNiArMjA1LDE0IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0Q0c6Omhhc1Bs
YXRmb3JtQ29udGV4dCgpIGNvbnN0CiB9CiAKIENHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRD
Rzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICAvLyBTb21lIGNhbGxlcnMgdG8gdGhp
cyBtZXRob2QgdXNlcyB0aGUgcGxhdGZvcm0gY29udGV4dCBvdXRzaWRlIHRoZSBzY29wZQorICAg
IC8vIG9mIHRoaXMgY2xhc3MuIENvbW1pdCBhbnkgY2hhbmdlcyBiZWZvcmUgcmV0dXJuaW5nIHRo
ZSBwbGF0Zm9ybSBjb250ZXh0LgorICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0Q0cmPigq
dGhpcykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1cm4gaW50ZXJuYWxQbGF0Zm9ybUNv
bnRleHQoKTsKK30KKworQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENHOjppbnRlcm5hbFBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQp
OwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwpAQCAtMzM4LDcgKzM0NSw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6CiAjZW5kaWYKIAogICAgIGF1dG8gb2xkQ29tcG9z
aXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKLSAgICBhdXRvIG9sZEJsZW5kTW9k
ZSA9IGJsZW5kTW9kZU9wZXJhdGlvbigpOworICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRN
b2RlKCk7CiAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgb3B0aW9ucy5jb21wb3NpdGVPcGVy
YXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIC8vIE1ha2UgdGhlIG9yaWdpbiBi
ZSBhdCBhZGp1c3RlZERlc3RSZWN0LmxvY2F0aW9uKCkKQEAgLTM5Niw3ICs0MDMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZAogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKIAot
ICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9w
dGlvbnMuYmxlbmRNb2RlKCkpOworICAgIHNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBv
c2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAKICAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0UmVj
dC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwpAQCAt
NTU1LDEzICs1NjIsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9r
ZVBhdHRlcm4oKQogewotICAgIGlmICghbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgIGlmICgh
c3Ryb2tlUGF0dGVybigpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY2dD
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jh
c2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIAot
ICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQ
bGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CisgICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4g
PSBzdHJva2VQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsK
ICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01NzQsMTMg
KzU4MSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRlcm4oKQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBpZiAo
IW1fc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKCFmaWxsUGF0dGVybigpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0
VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIAotICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0g
bV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0p
OworICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gZmlsbFBhdHRlcm4oKS0+Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTU5MSwxMSArNTk4LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIENHQ29udGV4dFNldEZpbGxQYXR0ZXJuKGNnQ29u
dGV4dCwgcGxhdGZvcm1QYXR0ZXJuLmdldCgpLCAmcGF0dGVybkFscGhhKTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCitzdGF0aWMgaW5saW5lIGJvb2wg
Y2FsY3VsYXRlRHJhd2luZ01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDR1Bh
dGhEcmF3aW5nTW9kZSYgbW9kZSkKIHsKLSAgICBib29sIHNob3VsZEZpbGwgPSBzdGF0ZS5maWxs
UGF0dGVybiB8fCBzdGF0ZS5maWxsQ29sb3IuaXNWaXNpYmxlKCk7Ci0gICAgYm9vbCBzaG91bGRT
dHJva2UgPSBzdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IChzdGF0ZS5zdHJva2VTdHlsZSAhPSBOb1N0
cm9rZSAmJiBzdGF0ZS5zdHJva2VDb2xvci5pc1Zpc2libGUoKSk7Ci0gICAgYm9vbCB1c2VFT0Zp
bGwgPSBzdGF0ZS5maWxsUnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZDsKKyAgICBib29sIHNob3Vs
ZEZpbGwgPSBjb250ZXh0LmZpbGxQYXR0ZXJuKCkgfHwgY29udGV4dC5maWxsQ29sb3IoKS5pc1Zp
c2libGUoKTsKKyAgICBib29sIHNob3VsZFN0cm9rZSA9IGNvbnRleHQuc3Ryb2tlUGF0dGVybigp
IHx8IChjb250ZXh0LnN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UgJiYgY29udGV4dC5zdHJva2VD
b2xvcigpLmlzVmlzaWJsZSgpKTsKKyAgICBib29sIHVzZUVPRmlsbCA9IGNvbnRleHQuZmlsbFJ1
bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZDsKIAogICAgIGlmIChzaG91bGRGaWxsKSB7CiAgICAg
ICAgIGlmIChzaG91bGRTdHJva2UpIHsKQEAgLTYyNCw5ICs2MzEsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKLSAgICBpZiAoc3RhdGUu
ZmlsbEdyYWRpZW50IHx8IHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxHcmFk
aWVudCgpIHx8IHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBh
bnkgb3B0aW1pemVkIHdheSB0byBmaWxsICYgc3Ryb2tlIGEgcGF0aCB1c2luZyBncmFkaWVudHMK
ICAgICAgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KICAgICAgICAgZmlsbFBh
dGgocGF0aCk7CkBAIC02MzQsMTMgKzY0MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKHN0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigpKQogICAgICAgICBh
cHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYg
KHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICAgICBD
R1BhdGhEcmF3aW5nTW9kZSBkcmF3aW5nTW9kZTsKLSAgICBpZiAoY2FsY3VsYXRlRHJhd2luZ01v
ZGUoc3RhdGUsIGRyYXdpbmdNb2RlKSkgeworICAgIGlmIChjYWxjdWxhdGVEcmF3aW5nTW9kZSgq
dGhpcywgZHJhd2luZ01vZGUpKSB7CiAjaWYgSEFWRShDR19DT05URVhUX0RSQVdfUEFUSF9ESVJF
Q1QpCiAgICAgICAgIENHQ29udGV4dERyYXdQYXRoRGlyZWN0KGNvbnRleHQsIGRyYXdpbmdNb2Rl
LCBwYXRoLnBsYXRmb3JtUGF0aCgpLCBudWxscHRyKTsKICNlbHNlCkBAIC02NTgsNyArNjY0LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIAog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAo
bV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkpIHsKICAgICAg
ICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IHBhdGgu
ZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgRmxvYXRTaXplIGxheWVyU2l6ZSA9IGdl
dENUTSgpLm1hcFNpemUocmVjdC5zaXplKCkpOwpAQCAtNjcwLDMzICs2NzYsMzMgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgICAg
IENHQ29udGV4dFRyYW5zbGF0ZUNUTShsYXllckNvbnRleHQsIC1yZWN0LngoKSwgLXJlY3QueSgp
KTsKICAgICAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChsYXllckNvbnRleHQpOwogICAgICAg
ICAgICAgQ0dDb250ZXh0QWRkUGF0aChsYXllckNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkp
OwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9zdGF0ZS5m
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRD
VE0obGF5ZXJDb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAgICAgIGlm
IChmaWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgICAgIENHQ29u
dGV4dEVPQ2xpcChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAgICAgbV9zdGF0ZS5m
aWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBmaWxsR3JhZGll
bnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXll
ckluUmVjdChjb250ZXh0LCByZWN0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0Nv
bnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogICAgICAgICAgICAg
Q0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgICAgICAgICAgQ0dD
b250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIGZpbGxTcGFjZVRy
YW5zZm9ybSgpKTsKIAogICAgICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2
ZW5PZGQpCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7CiAKLSAg
ICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAg
ICBmaWxsR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxs
UGF0dGVybigpKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAjaWYgSEFWRShDR19DT05U
RVhUX0RSQVdfUEFUSF9ESVJFQ1QpCiAgICAgQ0dDb250ZXh0RHJhd1BhdGhEaXJlY3QoY29udGV4
dCwgZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCA/IGtDR1BhdGhFT0ZpbGwgOiBrQ0dQ
YXRoRmlsbCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CkBAIC03MTcsNyArNzIzLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQog
CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlm
IChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKHN0cm9rZUdyYWRpZW50KCkpIHsK
ICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3QgcmVjdCA9
IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgZmxvYXQgbGluZVdpZHRoID0g
c3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC03NDIsOCArNzQ4LDggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0
QWRkUGF0aChsYXllckNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogICAgICAgICAgICAg
Q0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgobGF5ZXJDb250ZXh0KTsKICAgICAg
ICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4
dENvbmNhdENUTShsYXllckNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludChsYXllckNv
bnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgc3Ry
b2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWlu
dChsYXllckNvbnRleHQpOwogCiAgICAgICAgICAgICBmbG9hdCBkZXN0aW5hdGlvblggPSByb3Vu
ZGYocmVjdC54KCkgLSBsaW5lV2lkdGgpOwogICAgICAgICAgICAgZmxvYXQgZGVzdGluYXRpb25Z
ID0gcm91bmRmKHJlY3QueSgpIC0gbGluZVdpZHRoKTsKQEAgLTc1NCwxMyArNzYwLDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAg
ICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAg
ICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsK
ICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAgICAgICBDR0NvbnRl
eHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3Jt
KTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKKyAg
ICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlUGF0
dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBseVN0cm9rZVBhdHRl
cm4oKTsKIAogI2lmIFVTRShDR19DT05URVhUX1NUUk9LRV9MSU5FX1NFR01FTlRTX1dIRU5fU1RS
T0tJTkdfUEFUSCkKQEAgLTc4NSw3ICs3OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkg
eworICAgIGlmIChmaWxsR3JhZGllbnQoKSkgewogICAgICAgICBDR0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAg
ICAgICAgRmxvYXRTaXplIGxheWVyU2l6ZSA9IGdldENUTSgpLm1hcFNpemUocmVjdC5zaXplKCkp
OwpAQCAtNzk4LDI3ICs4MDQsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUmVjdChsYXll
ckNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNvbnRleHQp
OwogCi0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRl
LmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0
Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgZmls
bEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRE
cmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByZWN0KTsKLSAg
ICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWlu
dCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgZmlsbFNw
YWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KCp0aGlz
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUu
ZmlsbFBhdHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5RmlsbFBh
dHRlcm4oKTsKIAogICAgIGJvb2wgZHJhd093blNoYWRvdyA9IGNhblVzZVNoYWRvd0JsdXIoKTsK
ICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRv
dyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hh
ZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4
dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENv
bG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29u
dGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRy
b3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRT
aGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3QocmVjdCkpOwogICAg
IH0KIApAQCAtODM3LDkgKzg0Myw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIENHQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAo
ZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAg
ICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVpl
cm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwg
Q0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1f
c3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBz
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVj
dFNoYWRvdygqdGhpcywgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSk7CiAgICAgfQogCkBAIC04NTIs
NyArODU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNv
bnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxS
b3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIG9sZEZpbGxDb2xv
ciA9IGZpbGxDb2xvcigpOwpAQCAtODY0LDkgKzg3MCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNo
YWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cg
c2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29u
dGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0
aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIg
Y29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93
KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRl
eHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIHJlY3QpOwogICAgIH0KIApAQCAtODc0LDcg
Kzg4MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QKICAgICBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0OjpSYWRpaSYgcmFkaWkgPSByZWN0LnJhZGlpKCk7CiAgICAgYm9vbCBlcXVhbFdpZHRocyA9
IChyYWRpaS50b3BMZWZ0KCkud2lkdGgoKSA9PSByYWRpaS50b3BSaWdodCgpLndpZHRoKCkgJiYg
cmFkaWkudG9wUmlnaHQoKS53aWR0aCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpICYm
IHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpID09IHJhZGlpLmJvdHRvbVJpZ2h0KCkud2lkdGgo
KSk7CiAgICAgYm9vbCBlcXVhbEhlaWdodHMgPSAocmFkaWkudG9wTGVmdCgpLmhlaWdodCgpID09
IHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0
KCkgPT0gcmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSAmJiByYWRpaS50b3BSaWdodCgpLmhlaWdo
dCgpID09IHJhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkpOwotICAgIGJvb2wgaGFzQ3VzdG9t
RmlsbCA9IG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm47CisgICAg
Ym9vbCBoYXNDdXN0b21GaWxsID0gZmlsbEdyYWRpZW50KCkgfHwgZmlsbFBhdHRlcm4oKTsKICAg
ICBpZiAoIWhhc0N1c3RvbUZpbGwgJiYgZXF1YWxXaWR0aHMgJiYgZXF1YWxIZWlnaHRzICYmIHJh
ZGlpLnRvcExlZnQoKS53aWR0aCgpICogMiA9PSByLndpZHRoKCkgJiYgcmFkaWkudG9wTGVmdCgp
LmhlaWdodCgpICogMiA9PSByLmhlaWdodCgpKQogICAgICAgICBDR0NvbnRleHRGaWxsRWxsaXBz
ZUluUmVjdChjb250ZXh0LCByKTsKICAgICBlbHNlIHsKQEAgLTkxMyw5ICs5MTksOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IEZsbwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAg
ICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRo
Q29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBDR0Nv
bnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAg
ICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
KTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3SW5zZXRTaGFkb3coKnRoaXMsIHJlY3QsIHJv
dW5kZWRIb2xlUmVjdCk7CiAgICAgfQogCkBAIC05MzAsNiArOTM2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG8KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOwogICAgIENHQ29u
dGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAgIG1fZGF0YS0+Y2xp
cChyZWN0KTsKIH0KQEAgLTk0MCwzMSArOTQ3LDM1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIC8vIHRvIDxyZGFyOi8vcHJvYmxl
bS8xMjU4NDQ5Mj4sIENHUmVjdEluZmluaXRlIGNhbid0IGJlIHVzZWQgd2l0aCBhbiBhY2NlbGVy
YXRlZCBjb250ZXh0IHRoYXQKICAgICAvLyBoYXMgY2VydGFpbiB0cmFuc2Zvcm1zIHRoYXQgYXJl
bid0IGp1c3QgYSB0cmFuc2xhdGlvbiBvciBhIHNjYWxlLiBBbmQgZHVlIHRvIDxyZGFyOi8vcHJv
YmxlbS8xNDYzNDQ1Mz4KICAgICAvLyB3ZSBjYW5ub3QgdXNlIGl0IGluIGZvciBhIHByaW50aW5n
IGNvbnRleHQgZWl0aGVyLgorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRDVE0oKTsKLSAgICBi
b29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9ybUNvbnRl
eHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOwotICAgIENH
UmVjdCByZWN0c1syXSA9IHsgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZpbml0ZSA6
IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSksIHJlY3QgfTsK
LSAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENHQ29udGV4
dEFkZFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgMik7Ci0gICAgQ0dDb250ZXh0RU9D
bGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0g
Q0dDb250ZXh0R2V0VHlwZShjb250ZXh0KSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVuZGVy
aW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYm
ICFjdG0uYygpKSk7CisgICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0
ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQp
LCByZWN0IH07CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENHQ29udGV4
dEFkZFJlY3RzKGNvbnRleHQsIHJlY3RzLCAyKTsKKyAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENH
Q29udGV4dEFkZFJlY3QocGxhdGZvcm1Db250ZXh0KCksIENHQ29udGV4dEdldENsaXBCb3VuZGlu
Z0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENH
Q29udGV4dEFkZFJlY3QoY29udGV4dCwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRl
eHQpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQotICAgICAgICBDR0NvbnRleHRBZGRQYXRo
KHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICBDR0NvbnRleHRF
T0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOworICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRl
eHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOworICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUgY2xpcFJ1bGUpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRo
LCBjbGlwUnVsZSk7CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LCBDR1JlY3RaZXJvKTsKICAgICBlbHNlIHsKLSAgICAgICAgQ0dDb250ZXh0QmVn
aW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChwbGF0
Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisgICAgICAgIENHQ29udGV4dEJl
Z2luUGF0aChjb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRo
LnBsYXRmb3JtUGF0aCgpKTsKIAogICAgICAgICBpZiAoY2xpcFJ1bGUgPT0gV2luZFJ1bGU6OkV2
ZW5PZGQpCiAgICAgICAgICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CkBAIC05NzUsMTEg
Kzk4Niw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+Y2xpcChwYXRoKTsKIH0KIAotSW50
UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QoQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29u
dGV4dCgpKSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIob3BhY2l0eSk7CkBAIC0xMDAyLDE3ICsxMDA4LDE0IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICByZXN0b3JlKCk7CiB9CiAK
LXN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYgeU9mZnNl
dCkKK3N0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKENHQ29u
dGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQogewog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKICAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKHhPZmZzZXQpOwogICAgIFVOVVNFRF9QQVJB
TSh5T2Zmc2V0KTsKICNlbHNlCi0gICAgaWYgKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpID09IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoQ0dD
b250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKSkpCisgICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNv
bnRleHQpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXb3JrIGFyb3VuZCA8cmRhcjovL3By
b2JsZW0vNTUzOTM4OD4gYnkgZW5zdXJpbmcgdGhhdCB0aGUgb2Zmc2V0cyB3aWxsIGdldCB0cnVu
Y2F0ZWQKQEAgLTEwMzAsMTAgKzEwMzMsNTUgQEAgc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZz
ZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAogI2Vu
ZGlmCiB9CiAKLXN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0Q0dMaW5lQ2FwKENHQ29udGV4dFJlZiBj
b250ZXh0LCBMaW5lQ2FwIGNhcCkKIHsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGdyYXBo
aWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzd2l0Y2ggKGNhcCkgeworICAgIGNh
c2UgTGluZUNhcDo6QnV0dDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChjb250ZXh0LCBr
Q0dMaW5lQ2FwQnV0dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUNhcDo6Um91bmQ6
CisgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcFJvdW5kKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQ2FwOjpTcXVhcmU6CisgICAgICAgIENHQ29u
dGV4dFNldExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcFNxdWFyZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KIAorc3RhdGljIHZvaWQgc2V0Q0dMaW5lSm9pbihDR0NvbnRleHRSZWYgY29u
dGV4dCwgTGluZUpvaW4gam9pbikKK3sKKyAgICBzd2l0Y2ggKGpvaW4pIHsKKyAgICBjYXNlIExp
bmVKb2luOjpNaXRlcjoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4dCwga0NH
TGluZUpvaW5NaXRlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUpvaW46OlJvdW5k
OgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pblJvdW5k
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6CisgICAgICAgIENH
Q29udGV4dFNldExpbmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luQmV2ZWwpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNldENHTWl0ZXJMaW1pdChDR0NvbnRleHRS
ZWYgY29udGV4dCwgZmxvYXQgbGltaXQpCit7CisgICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChj
b250ZXh0LCBsaW1pdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHTGluZURhc2goQ0dDb250ZXh0
UmVmIGNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQor
eworICAgIGlmIChkYXNoT2Zmc2V0IDwgMCkgeworICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIGxlbmd0aCArPSBzdGF0aWNfY2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKKyAgICAgICAg
aWYgKGxlbmd0aCkKKyAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxl
bmd0aCkgKyBsZW5ndGg7CisgICAgfQorICAgIENHQ29udGV4dFNldExpbmVEYXNoKGNvbnRleHQs
IGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkpOworfQorCitzdGF0aWMg
dm9pZCBzZXRDR1NoYWRvdyhDR0NvbnRleHRSZWYgY29udGV4dCwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29s
b3ImIGNvbG9yLCBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQorewogICAgIGlmIChvZmZz
ZXQuaXNaZXJvKCkgJiYgIWJsdXIpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENv
bG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogICAgICAgICByZXR1cm47CkBAIC0xMDQ1
LDcgKzEwOTMsNyBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJgogICAgIENHRmxvYXQgeU9mZnNl
dCA9IG9mZnNldC5oZWlnaHQoKTsKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVyOwogCi0g
ICAgaWYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSkgeworICAg
IGlmICghc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gdXNlclRvQmFzZUNUTSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAKICAgICAgICAg
Q0dGbG9hdCBBID0gdXNlclRvQmFzZUNUTS5hICogdXNlclRvQmFzZUNUTS5hICsgdXNlclRvQmFz
ZUNUTS5iICogdXNlclRvQmFzZUNUTS5iOwpAQCAtMTA2Niw3ICsxMTE0LDggQEAgc3RhdGljIHZv
aWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IEZsb2F0U2l6ZSYKICAgICAvLyBFeHRyZW1lICJibHVyIiB2YWx1ZXMgY2FuIG1ha2UgdGV4
dCBkcmF3aW5nIGNyYXNoIG9yIHRha2UgY3JhenkgbG9uZyB0aW1lcywgc28gY2xhbXAKICAgICBi
bHVyUmFkaXVzID0gc3RkOjptaW4oYmx1clJhZGl1cywgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0
KDEwMDAuMCkpOwogCi0gICAgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoZ3Jh
cGhpY3NDb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICBpZiAocmVuZGVyaW5nTW9kZSAh
PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKKyAgICAgICAgYXBwbHlTaGFkb3dPZmZzZXRX
b3JrYXJvdW5kSWZOZWVkZWQoY29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7CiAKICAgICAvLyBD
aGVjayBmb3IgYW4gaW52YWxpZCBjb2xvciwgYXMgdGhpcyBtZWFucyB0aGF0IHRoZSBjb2xvciB3
YXMgbm90IHNldCBmb3IgdGhlIHNoYWRvdwogICAgIC8vIGFuZCB3ZSBzaG91bGQgdGhlcmVmb3Jl
IGp1c3QgdXNlIHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KQEAgLTEwNzYsNDQgKzExMjUsODEg
QEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0
aENvbG9yKGNvbnRleHQsIENHU2l6ZU1ha2UoeE9mZnNldCwgeU9mZnNldCksIGJsdXJSYWRpdXMs
IGNhY2hlZENHQ29sb3IoY29sb3IpLmdldCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQorICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0
LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlja25lc3MsIDAuZikpOworICAgIGF1dG8gY29udGV4
dCA9IGludGVybmFsUGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250
ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZS5z
dHJva2VDb2xvcikuZ2V0KCkpOworICAgIGZvciAoYXV0byBjaGFuZ2UgOiBzdGF0ZSgpLmNoYW5n
ZXMoKSkgeworICAgICAgICBzd2l0Y2ggKGNoYW5nZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTToKKyAgICAgICAgICAgIENHQ29udGV4dFNldENUTShj
b250ZXh0LCBzdGF0ZSgpLmdldENUTSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQot
ICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZS5maWxsQ29sb3IpOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaDoKKyAgICAgICAg
ICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0YXRlKCkuZmlsbEJydXNoKCkuY29sb3IoKSk7
CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250
ZXh0LCBzdGF0ZS5hbHBoYSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRo
KGNvbnRleHQsIHN0ZDo6bWF4KHN0YXRlKCkuc3Ryb2tlVGhpY2tuZXNzKCksIDAuZikpOworICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKQotICAgICAgICBzZXRDR0JsZW5kTW9kZShjb250ZXh0LCBz
dGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaDoKKyAgICAgICAgICAgIENH
Q29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3Ioc3Rh
dGUoKS5zdHJva2VCcnVzaCgpLmNvbG9yKCkpLmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4
dCwgY2dUZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKSk7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcDoKKyAgICAgICAgICAgIHNl
dENHTGluZUNhcChjb250ZXh0LCBzdGF0ZSgpLmxpbmVDYXAoKSk7CisgICAgICAgICAgICBicmVh
azsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxk
QW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNv
bnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW46CisgICAgICAgICAgICBzZXRDR0xpbmVKb2luKGNv
bnRleHQsIHN0YXRlKCkubGluZUpvaW4oKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHND
aGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250ZXh0LCBz
dGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6TGluZURhc2g6CisgICAgICAgICAgICBzZXRDR0xpbmVEYXNoKGNvbnRleHQs
IHN0YXRlKCkubGluZURhc2goKS5kYXNoZXMsIHN0YXRlKCkubGluZURhc2goKS5vZmZzZXQpOwor
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBDR0Nv
bnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFs
aXR5KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0OgorICAgICAgICAgICAgc2V0Q0dN
aXRlckxpbWl0KGNvbnRleHQsIHN0YXRlKCkubWl0ZXJMaW1pdCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpKQotICAgICAgICBzZXRDR1NoYWRvdygqdGhpcywgc3RhdGUuc2hhZG93T2Zmc2V0
LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotfQorICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGU6CisgICAgICAg
ICAgICBzZXRDR0JsZW5kTW9kZShjb250ZXh0LCBzdGF0ZSgpLmNvbXBvc2l0ZU1vZGUoKS5vcGVy
YXRpb24sIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZSk7CisgICAgICAgICAgICBi
cmVhazsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1p
dCkKLXsKLSAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1p
dCk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRv
dzoKKyAgICAgICAgICAgIHNldENHU2hhZG93KGNvbnRleHQsIHJlbmRlcmluZ01vZGUoKSwgc3Rh
dGUoKS5kcm9wU2hhZG93KCkub2Zmc2V0LCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5ibHVyUmFkaXVz
LCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5jb2xvciwgc3RhdGUoKS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGE6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRBbHBoYShj
b250ZXh0LCBzdGF0ZSgpLmFscGhhKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5OgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4
dCwgY2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZSgpLmltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGU6CisgICAgICAgICAgICBDR0NvbnRleHRT
ZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUoc3RhdGUoKS50ZXh0
RHJhd2luZ01vZGUoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXM6CisgICAgICAgICAgICBD
R0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUoKS5zaG91bGRBbnRpYWxp
YXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzOgorICAgICAgICAgICAgQ0dDb250ZXh0
U2V0U2hvdWxkU21vb3RoRm9udHMoY29udGV4dCwgc3RhdGUoKS5zaG91bGRTbW9vdGhGb250cygp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHIp
CkBAIC0xMTI1LDcgKzEyMTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJv
a2VHcmFkaWVudCkgeworICAgIGlmIChzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIGlmICho
YXNTaGFkb3coKSkgewogICAgICAgICAgICAgY29uc3QgZmxvYXQgZG91YmxlTGluZVdpZHRoID0g
bGluZVdpZHRoICogMjsKICAgICAgICAgICAgIGZsb2F0IGFkanVzdGVkV2lkdGggPSBjZWlsZihy
ZWN0LndpZHRoKCkgKyBkb3VibGVMaW5lV2lkdGgpOwpAQCAtMTEzNSw3ICsxMjIxLDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIGF1dG8gbGF5ZXIgPSBhZG9wdENGKENHTGF5ZXJD
cmVhdGVXaXRoQ29udGV4dChjb250ZXh0LCBsYXllclNpemUsIDApKTsKIAogICAgICAgICAgICAg
Q0dDb250ZXh0UmVmIGxheWVyQ29udGV4dCA9IENHTGF5ZXJHZXRDb250ZXh0KGxheWVyLmdldCgp
KTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0gbGluZVdpZHRoOwogICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGxheWVyQ29udGV4dCwgbGluZVdpZHRoKTsK
IAogICAgICAgICAgICAgLy8gQ29tcGVuc2F0ZSBmb3IgdGhlIGxpbmUgd2lkdGgsIG90aGVyd2lz
ZSB0aGUgbGF5ZXIncyB0b3AtbGVmdCBjb3JuZXIgd291bGQgYmUKQEAgLTExNDksOCArMTIzNCw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGxheWVy
Q29udGV4dCwgcmVjdCk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJv
a2VkUGF0aChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChsYXllckNv
bnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBDR0NvbnRl
eHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAg
ICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAKICAgICAgICAg
ICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0LngoKSAtIGxpbmVXaWR0
aCk7CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkZXN0aW5hdGlvblkgPSByb3VuZGYocmVjdC55
KCkgLSBsaW5lV2lkdGgpOwpAQCAtMTE2MSwxMyArMTI0NiwxMyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCByZWN0KTsKICAgICAgICAg
ICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAg
ICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNh
dENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAg
ICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAg
ICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOwor
ICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQor
ICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwog
CiAgICAgLy8gVXNpbmcgQ0dDb250ZXh0QWRkUmVjdCBhbmQgQ0dDb250ZXh0U3Ryb2tlUGF0aCB0
byBzdHJva2UgcmVjdCByYXRoZXIgdGhhbgpAQCAtMTE4Miw5NCArMTI2Nyw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
aW5lV2lkdGgpCiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKLXsKLSAgICBzd2l0Y2gg
KGNhcCkgewotICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcEJ1dHQpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIExpbmVDYXA6OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBs
YXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwUm91bmQpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIExpbmVDYXA6OlNxdWFyZToKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChwbGF0Zm9y
bUNvbnRleHQoKSwga0NHTGluZUNhcFNxdWFyZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBk
YXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7Ci0g
ICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZGFzaGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbGVuZ3RoICs9IHN0YXRpY19jYXN0PGZs
b2F0PihkYXNoZXNbaV0pOwotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAgICAgICAgZGFzaE9m
ZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsKLSAgICB9Ci0gICAgQ0dD
b250ZXh0U2V0TGluZURhc2gocGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5k
YXRhKCksIGRhc2hlcy5zaXplKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRM
aW5lSm9pbihMaW5lSm9pbiBqb2luKQotewotICAgIHN3aXRjaCAoam9pbikgewotICAgIGNhc2Ug
TGluZUpvaW46Ok1pdGVyOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNv
bnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGlu
ZUpvaW46OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRl
eHQoKSwga0NHTGluZUpvaW5Sb3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUpv
aW46OkJldmVsOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRleHQo
KSwga0NHTGluZUpvaW5CZXZlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIENH
Q29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpOwotICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0Rl
dmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBDR0NvbnRleHRSb3RhdGVD
VE0ocGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKLSAgICBtX2RhdGEtPnJvdGF0ZShhbmdsZSk7
Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQotewotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwg
eCwgeSk7Ci0gICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKLXsKLSAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9y
bSk7Ci0gICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPm1fdXNl
clRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQotewotICAgIENHQ29udGV4dFNldENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
LSAgICBtX2RhdGEtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZp
Y2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi1BZmZpbmVUcmFuc2Zv
cm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNj
YWxlKSBjb25zdAotewotICAgIC8vIFRoZSBDVE0gdXN1YWxseSBpbmNsdWRlcyB0aGUgZGV2aWNl
U2NhbGVGYWN0b3IgZXhjZXB0IGluIFdlYktpdCAxIHdoZW4gdGhlCi0gICAgLy8gY29udGVudCBp
cyBub24tY29tcG9zaXRlZCwgc2luY2UgdGhlIHNjYWxlIGZhY3RvciBpcyBpbnRlZ3JhdGVkIGF0
IGEgbG93ZXIKLSAgICAvLyBsZXZlbC4gVG8gZ3VhcmFudGVlIHRoZSBkZXZpY2VTY2FsZSBpcyBp
bmNsdWRlZCwgd2UgY2FuIHVzZSB0aGlzIENHIEFQSS4KLSAgICBpZiAoaW5jbHVkZVNjYWxlID09
IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpCi0gICAgICAgIHJldHVybiBDR0NvbnRleHRH
ZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3JtKHBsYXRmb3JtQ29udGV4dCgpKTsKLQot
ICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwotfQotCiBGbG9h
dFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewogICAgIC8vIEl0IGlzIG5v
dCBlbm91Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2aWNlIHNwYWNlLiBUaGUgcm90
YXRpb24gcGFydCBvZiB0aGUKQEAgLTEyODAsNyArMTI3Nyw5IEBAIEZsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJv
dW5kaW5nCiAgICAgaWYgKG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJ
ZGVudGl0eSkKICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3QpOwogCi0gICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZp
Y2VTcGFjZVRyYW5zZm9ybShwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIENHQWZmaW5lVHJhbnNmb3JtIGRldmlj
ZU1hdHJpeCA9IENHQ29udGV4dEdldFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFuc2Zvcm0oY29u
dGV4dCk7CiAgICAgaWYgKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShkZXZpY2VNYXRyaXgp
KSB7CiAgICAgICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVu
dGl0eSA9IHRydWU7CiAgICAgICAgIHJldHVybiByb3VuZGVkSW50UmVjdChyZWN0KTsKQEAgLTEz
MTksNiArMTMxOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAgICAgaWYgKCF3aWR0aHMu
c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIGxvY2FsU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3Io
KSk7CiAKICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxp
YXNpbmdNb2RlRm9yVGV4dChGbG9hdFJlY3QocG9pbnQsIEZsb2F0U2l6ZSh3aWR0aHMubGFzdCgp
LCB0aGlja25lc3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3IpOwpAQCAtMTM2NCwxMiAr
MTM2NCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lcwogICAgIH0KIAogICAgIGlmIChmaWxs
Q29sb3JJc05vdEVxdWFsVG9TdHJva2VDb2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxh
dGZvcm1Db250ZXh0KCksIGxvY2FsU3Ryb2tlQ29sb3IpOworICAgICAgICBzZXRDR0ZpbGxDb2xv
cihjb250ZXh0LCBsb2NhbFN0cm9rZUNvbG9yKTsKIAotICAgIENHQ29udGV4dEZpbGxSZWN0cyhw
bGF0Zm9ybUNvbnRleHQoKSwgZGFzaEJvdW5kcy5kYXRhKCksIGRhc2hCb3VuZHMuc2l6ZSgpKTsK
KyAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwgZGFzaEJvdW5kcy5kYXRhKCksIGRhc2hC
b3VuZHMuc2l6ZSgpKTsKIAogICAgIGlmIChmaWxsQ29sb3JJc05vdEVxdWFsVG9TdHJva2VDb2xv
cikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGZpbGxDb2xvcigp
KTsKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgZmlsbENvbG9yKCkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKQEAgLTE0MTIsMTcgKzE0MTIsMTggQEAgUmVuZGVyaW5n
TW9kZSBHcmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKQogewogICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZp
Y2VTY2FsZUZhY3Rvcik7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBiYXNlIENUTSBvZiBhIEhp
RFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQuCiAgICAg
Ly8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2UgY2VydGFp
biBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKICAgICAvLyB0byBkcmF3IHdpdGgg
YSBzY2FsZSBmYWN0b3Igb2YgMSByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIHNjYWxlIGZhY3Rvci4K
LSAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBDR0FmZmluZVRyYW5z
Zm9ybVNjYWxlKENHQ29udGV4dEdldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCkpLCBkZXZpY2VT
Y2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBDR0NvbnRleHRTZXRCYXNlQ1RN
KGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShjb250
ZXh0KSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkK
IHsKICAgICAvLyBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlk
IGNvbG9ycy4KLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0
dGVybikgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBmaWxsUGF0dGVybigpKSB7CiAgICAg
ICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTQzNCw3ICsxNDM1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7CiAgICAgLy8gQ0dDb250ZXh0U3Ry
b2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KLSAgICBpZiAobV9z
dGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKKyAgICBpZiAo
c3Ryb2tlR3JhZGllbnQoKSB8fCBzdHJva2VQYXR0ZXJuKCkpIHsKICAgICAgICAgc3Ryb2tlRWxs
aXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0NjgsOSAr
MTQ2OSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphZGREZXN0aW5hdGlvbkF0UG9pbnQo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaQogCiBib29sIEdyYXBoaWNzQ29udGV4
dENHOjpjYW5Vc2VTaGFkb3dCbHVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHJlbmRlcmluZ01v
ZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93
KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgcmV0dXJuIChyZW5k
ZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJl
ZFNoYWRvdygpICYmICFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpOwogfQogCi19CiAKLSNlbmRp
ZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmgKaW5kZXggNDY4YTQ0YmFhODZlZTUyNjE5ZDI1NWY5Mzk0M2E5NzU1YmFjOWZhYi4uZjk5YzNk
OWI5YmQyODI1ODY1ZmRmN2VhODBiMmFmMDBlMzRiNTJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMCwgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI1LDUzICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFVTRShD
RykKKwogI2luY2x1ZGUgIkNvbG9yU3BhY2VDRy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNHQWZmaW5lVHJhbnNmb3JtIGdldFVzZXJU
b0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKLQotY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7Ci1w
dWJsaWM6Ci0gICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwgYm9v
bCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0g
ICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKLSAgICB7Ci0gICAgICAg
IGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSht
X2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCi0gICAg
ewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIENHQ29udGV4
dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7
Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3Nh
dmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQp
OwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9y
ZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7Ci0g
ICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOwotfTsKLQogY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0Q0cgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKIHB1YmxpYzoKICAgICBH
cmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYpOwpAQCAtODUsNjkgKzQ1LDQ4IEBAIHB1Ymxp
YzoKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogICAgIENHQ29u
dGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgc2F2ZSgp
IGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIHZvaWQgc2V0SXNDQUxheWVy
Q29udGV4dChib29sKSBmaW5hbDsKKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBm
aW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29u
c3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsK
IAorICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAg
IHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0
dGVybigpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwotICAgIHZv
aWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0K
LSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7Ci0g
ICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCiAgICAgdm9pZCBhcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0OwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgbGluZVdpZHRoKSBmaW5hbDsKLQotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKSBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29s
KSBmaW5hbDsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbDsKLQotICAg
IHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7Ci0gICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKSBmaW5hbDsKIAogICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
LSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAgICB2b2lkIGNs
aXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotCiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CiAKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0TGluZUNh
cChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYs
IGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4p
IGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7CiAKLSAgICB2
b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQ
YXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRo
JikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQg
c2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpIGZpbmFsOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
IGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmlj
ZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKIAotICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9
IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxv
YXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CkBAIC0xNTYsMTggKzk1LDIx
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlmCiAKLSAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMs
IFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsOwogCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CiAgICAgdm9pZCBkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
KSBmaW5hbDsKIAotICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGREZXN0aW5h
dGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7
CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91
bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CiAKICAgICBib29sIHN1cHBvcnRzSW50
ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgYWRkRGVz
dGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZp
bmFsOwogCiAgICAgdmlydHVhbCBib29sIGNhblVzZVNoYWRvd0JsdXIoKSBjb25zdDsKIApAQCAt
MTc1LDkgKzExNywxNiBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisg
ICAgQ0dDb250ZXh0UmVmIGludGVybmFsUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisKIHByaXZh
dGU6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRy
IH07CiB9OwogCi19CitDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4
dFJlZik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIkNHQ29udGV4dFN0
YXRlU2F2ZXIuaCIKIAorI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggZTZj
ZTJmYjk3MjQ3YTZiODZjMDliMWFkMzYxNzAxYzJlYzNlODYyNS4uYWYwMGEwMTMzNDdlMGNkODVh
MzBiODg0ZWJjNzlmMzJmMWUyMzEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTEyNyw3ICsxMjcs
NyBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYQogCiAgICAgLy8gT2xkIGFuZCBuZXcgY29udGV4
dCBzY2FsaW5nIGZhY3RvcnMgaGF2ZSB0byBtYXRjaCBhcyB3ZWxsLgogICAgIEFmZmluZVRyYW5z
Zm9ybTo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFRyYW5zZm9ybTsKLSAgICBjb250ZXh0Lmdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpLmRlY29t
cG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKKyAgICBjb250ZXh0LmdldENUTSgpLmRlY29tcG9z
ZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybTo6RGVjb21wb3Nl
ZFR5cGUgY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybTsKICAgICBtX2NhY2hlZFRyYW5zZm9ybS5k
ZWNvbXBvc2UoY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybSk7CkBAIC0yNTUsNyArMjU1LDcgQEAg
dm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICB0cmFuc2Zvcm1Db250ZXh0Rm9yUGFpbnRpbmco
YnVmZmVyQ29udGV4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KG1fY2FjaGVkSW1hZ2VSZWN0LmxvY2F0
aW9uKCksIHNyY1JlY3Quc2l6ZSgpKSk7CiAgICAgZHJhd1BERlBhZ2UoYnVmZmVyQ29udGV4dCk7
CiAKLSAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4
dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9jYWNoZWRUcmFuc2Zvcm0g
PSBjb250ZXh0LmdldENUTSgpOwogICAgIG1fY2FjaGVkRGVzdGluYXRpb25SZWN0ID0gZHN0UmVj
dDsKICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogICAgICsrbV9jYWNoaW5nQ291
bnRGb3JUZXN0aW5nOwpAQCAtMzYzLDYgKzM2Myw4IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6
ZHJhd1BERlBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogCiAgICAgY29udGV4dC50cmFu
c2xhdGUoLW1fY3JvcEJveC5sb2NhdGlvbigpKTsKIAorICAgIGNvbnRleHQuYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKwogICAgIC8vIENHUERGIHBhZ2VzIGFyZSBpbmRleGVkIGZyb20gMS4KICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBDR0NvbnRleHREcmF3UERGUGFnZVdpdGhBbm5vdGF0aW9ucyhj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1BERkRvY3VtZW50R2V0UGFnZShtX2RvY3VtZW50
LmdldCgpLCAxKSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0aENHLmNwcAppbmRleCBkNjg5YTUxYTg5MTAyYTUwOTA0NTU5YjQ0MjIzNjlkZTE0
NzAzMzM1Li5mZGVlZjZiMzhkMGM1YjU1NTY3MzdlYjdmNDRhZjJmMmZjOWE0NDQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTI0Nyw3
ICsyNDcsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgIEdyYXBoaWNzQ29udGV4dENH
IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhp
Y3NDb250ZXh0KTsKIAotICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhDb250YWlu
c1BvaW50KGNvbnRleHQsIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKKyAgICBib29sIGhpdFN1Y2Nl
c3MgPSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChncmFwaGljc0NvbnRleHQucGxhdGZvcm1D
b250ZXh0KCksIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOwogCiAgICAgcmV0dXJuIGhpdFN1Y2Nlc3M7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJD
b3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9E
cmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggZWZiYzFlNDk1NDQxYmVkZTczNGU5
NDhkZDI2ZDM3MTQ0MTY1NTNlMC4uZTliN2FjNGQ3ZjRjYmY3NDEyODkzOWJmYThjMDRlNzY1YTBk
YmQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEcmF3R2x5
cGhzUmVjb3JkZXIuaCIKIAotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQ29s
b3IuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgpAQCAtMzUs
NDkgKzM0LDQxIEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KICNpbmNsdWRlIDxDb3Jl
VGV4dC9Db3JlVGV4dC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIFBMQVRGT1JN
KFdJTikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGJlZ2lu
TGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYg
cnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDRkRpY3Rpb25hcnlSZWYs
IENHQ29udGV4dERlbGVnYXRlUmVmKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGJlZ2lu
TGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYs
IENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0LCBDRkRpY3Rpb25hcnlSZWYsIENHQ29udGV4dERl
bGVnYXRlUmVmKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAqc3RhdGlj
X2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVn
YXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihyc3RhdGUsIGdzdGF0ZSwgcmVj
dCk7CisgICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihnc3RhdGUpOwogICAgIHJldHVybiBk
ZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExheWVyKENHQ29u
dGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dH
U3RhdGVSZWYgZ3N0YXRlKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExheWVyKENH
Q29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0
ZVJlZiBnc3RhdGUpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0
aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVs
ZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmRFbmRMYXllcihyc3RhdGUsIGdzdGF0ZSk7Cisg
ICAgcmVjb3JkZXIucmVjb3JkRW5kTGF5ZXIoZ3N0YXRlKTsKICAgICByZXR1cm4gZGVsZWdhdGU7
CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVs
ZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNv
bnN0IENHQWZmaW5lVHJhbnNmb3JtKiB0bSwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3Qg
Q0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIENHRXJyb3IgZHJhd0ds
eXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5
cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKIHsK
LSAgICBpZiAoQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpID4gMCkgewotICAgICAgICBEcmF3R2x5
cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+
KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgICAgICByZWNvcmRlci5y
ZWNvcmREcmF3R2x5cGhzKHJzdGF0ZSwgZ3N0YXRlLCB0bSwgZ2x5cGhzLCBwb3NpdGlvbnMsIGNv
dW50KTsKLSAgICB9CisgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNf
Y2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdh
dGUpKTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3R2x5cGhzKGdzdGF0ZSwgZ2x5cGhzLCBwb3Np
dGlvbnMsIGNvdW50KTsKICAgICByZXR1cm4ga0NHRXJyb3JTdWNjZXNzOwogfQogCi1zdGF0aWMg
Q0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVy
aW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0lt
YWdlUmVmIGltYWdlKQorc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERlbGVnYXRl
UmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENH
UmVjdCByZWN0LCBDR0ltYWdlUmVmIGltYWdlKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYg
cmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVs
ZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRHJhd0ltYWdlKHJz
dGF0ZSwgZ3N0YXRlLCByZWN0LCBpbWFnZSk7CisgICAgcmVjb3JkZXIucmVjb3JkRHJhd0ltYWdl
KGdzdGF0ZSwgcmVjdCwgaW1hZ2UpOwogICAgIHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAK
LVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50
ZXJuYWxDb250ZXh0KCkKK3N0YXRpYyBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJ
bnRlcm5hbENvbnRleHQoRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlcikKIHsKLSAgICBhdXRv
IGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdhdGVDcmVhdGUodGhpcykp
OworICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNy
ZWF0ZSgmcmVjb3JkZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRl
eHREZWxlZ2F0ZS5nZXQoKSwgZGVCZWdpbkxheWVyLCByZWludGVycHJldF9jYXN0PENHQ29udGV4
dERlbGVnYXRlQ2FsbGJhY2s+KCZiZWdpbkxheWVyKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVT
ZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRW5kTGF5ZXIsIHJlaW50ZXJwcmV0
X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmVuZExheWVyKSk7CiAgICAgQ0dDb250
ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0dseXBo
cywgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmV2ViQ29yZTo6
ZHJhd0dseXBocykpOwpAQCAtODYsNjcgKzc3LDE1IEBAIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRl
eHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAgICByZXR1
cm4gbWFrZVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHRDRz4oY29udGV4dC5nZXQoKSk7CiB9CiAK
LURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYg
b3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2
ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293bmVyKG93
bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250
ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVj
dERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNvbnRleHQp
CisgICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiAgICAgLCBt
X2RlY29uc3RydWN0RHJhd0dseXBocyhkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAgICAgLCBtX2Rl
cml2ZUZvbnRGcm9tQ29udGV4dChkZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgLCBtX2ludGVy
bmFsQ29udGV4dChjcmVhdGVJbnRlcm5hbENvbnRleHQoKSkKKyAgICAsIG1faW50ZXJuYWxDb250
ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4dCgqdGhpcykpCiB7CiB9CiAKLXZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9y
ID0gY29udGV4dFN0YXRlLmZpbGxDb2xvcjsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxl
LmdyYWRpZW50ID0gY29udGV4dFN0YXRlLmZpbGxHcmFkaWVudDsKLSAgICBtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUuZmlsbEdy
YWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0
ZXJuID0gY29udGV4dFN0YXRlLmZpbGxQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5hbFN0YXRlLnN0
cm9rZVN0eWxlLmNvbG9yID0gY29udGV4dFN0YXRlLnN0cm9rZUNvbG9yOwotICAgIG1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5zdHJva2VHcmFkaWVu
dDsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bSA9IGNvbnRleHRTdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLnN0cm9rZVBhdHRl
cm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuY3RtID0gbV9vd25lci5nZXRDVE0oKTsgLy8gRklY
TUU6IERlYWwgd2l0aCBiYXNlIENUTS4KLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zm
c2V0ID0gY29udGV4dFN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBtX29yaWdpbmFsU3RhdGUuc2hh
ZG93LmJsdXIgPSBjb250ZXh0U3RhdGUuc2hhZG93Qmx1cjsKLSAgICBtX29yaWdpbmFsU3RhdGUu
c2hhZG93LmNvbG9yID0gY29udGV4dFN0YXRlLnNoYWRvd0NvbG9yOwotICAgIG1fb3JpZ2luYWxT
dGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA9IGNvbnRleHRTdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtczsKLQotICAgIG1fY3VycmVudFN0YXRlID0gbV9vcmlnaW5hbFN0YXRlOwotfQot
Ci12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAgICBpZiAobV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWxDb250
ZXh0LT5zZXRGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvcik7Ci0gICAg
ZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9p
bnRlcm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNm
b3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5
bGUucGF0dGVybik7Ci0gICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRl
cm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4oKm1fb3Jp
Z2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYgKG1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWxD
b250ZXh0LT5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3Ip
OwotICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCkKLSAg
ICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdpbmFsU3Rh
dGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFk
aWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKLSAgICAgICAgaWYgKG1fb3JpZ2luYWxTdGF0
ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNl
dFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKLSAg
ICB9Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0p
OwotCi0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgbV9pbnRlcm5hbENv
bnRleHQtPnNldFNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5h
bFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBjb250ZXh0
U3RhdGUuc2hhZG93UmFkaXVzTW9kZSk7Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0VGV4
dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwotfQotCi12b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBmb250
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OnNldEludGVybmFsRm9udChjb25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQogewogICAgIEFTU0VSVChDR0FmZmluZVRyYW5zZm9ybUlzSWRlbnRpdHko
Q1RGb250R2V0TWF0cml4KGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKSk7CiAKQEAgLTE1
NiwxMDQgKzk1LDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNCiAgICAgbV9vcmlnaW5hbFRl
eHRNYXRyaXggPSBjb21wdXRlT3ZlcmFsbFRleHRNYXRyaXgoZm9udCk7CiAgICAgaWYgKGZvbnQu
cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2Fs
KQogICAgICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRy
aXgoZm9udCwgbV9vcmlnaW5hbFRleHRNYXRyaXgpOwotCi0gICAgYXV0byYgY29udGV4dFN0YXRl
ID0gbV9vd25lci5zdGF0ZSgpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb250ZXh0U3Rh
dGUpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnRleHRTdGF0ZSk7CiB9CiAKLXZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29udGV4dCgpCitHcmFwaGlj
c0NvbnRleHRTdGF0ZSBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQo
KQogewotICAgIHVwZGF0ZUNUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKLSAgICB1cGRhdGVGaWxs
Q29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJu
LmdldCgpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5
bGUuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0ZVNoYWRv
dyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5i
bHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93
Lmlnbm9yZVRyYW5zZm9ybXMgPyBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzIDogU2hhZG93
c0lnbm9yZVRyYW5zZm9ybXM6Ok5vKTsKKyAgICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBtX2Rlc3Rp
bmF0aW9uQ29udGV4dC5zdGF0ZSgpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5tZXJnZVN0YXRl
RGlmZnMob3JpZ2luYWxTdGF0ZSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPmFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGU7CiB9CiAKLXZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjp1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImIG5ld0NvbG9yLCBHcmFkaWVu
dCogbmV3R3JhZGllbnQsIFBhdHRlcm4qIG5ld1BhdHRlcm4pCit2b2lkIERyYXdHbHlwaHNSZWNv
cmRlcjo6cmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgb3JpZ2luYWxTdGF0ZSkKIHsKLSAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBp
dCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVzZS4KLSAgICAvLyBDVCB3aWxsIG9u
bHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3Jy
ZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNl
dCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29y
a3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRl
LmZpbGxTdHlsZS5jb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0
U3RhdGUgbmV3U3RhdGU7Ci0gICAgbmV3U3RhdGUuZmlsbENvbG9yID0gbmV3Q29sb3I7Ci0gICAg
aWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5maWxsR3JhZGllbnQgPSBuZXdHcmFk
aWVudDsKLSAgICBpZiAobmV3UGF0dGVybikKLSAgICAgICAgbmV3U3RhdGUuZmlsbFBhdHRlcm4g
PSBuZXdQYXR0ZXJuOwotICAgIG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1cnJlbnRTdGF0
ZS5maWxsU3R5bGUuY29sb3IgPSBuZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5t
ZXJnZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjp1cGRhdGVTdHJva2VDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBu
ZXdHcmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpyZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICAvLyBUaGlzIGNo
ZWNrIGxvb2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVz
ZS4KLSAgICAvLyBDVCB3aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3
aGljaCB0aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUlu
dGVybmFsQ29udGV4dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHks
IHdoaWNoIHRoaXMgY2hlY2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0Nv
bG9yID09IG1fY3VycmVudFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBuZXdTdGF0ZS5zdHJv
a2VDb2xvciA9IG5ld0NvbG9yOwotICAgIGlmIChuZXdHcmFkaWVudCkKLSAgICAgICAgbmV3U3Rh
dGUuc3Ryb2tlR3JhZGllbnQgPSBuZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0dGVybikKLSAg
ICAgICAgbmV3U3RhdGUuc3Ryb2tlUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAgbV9vd25lci5k
aWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29s
b3JDaGFuZ2UgfSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IgPSBuZXdD
b2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdz
dGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
Q0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6
OnVwZGF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKK3ZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpyZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7Ci0gICAgaWYgKGN0
bSA9PSBtX2N1cnJlbnRTdGF0ZS5jdG0pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb3duZXIu
c2V0Q1RNKGN0bSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuY3RtID0gY3RtOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0
aW5hdGlvbkNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotc3RhdGljIGJvb2wg
c2hhZG93SXNDbGVhcmVkKGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFk
b3dCbHVyKQotewotICAgIHJldHVybiBzaGFkb3dPZmZzZXQgPT0gRmxvYXRTaXplKCkgJiYgIXNo
YWRvd0JsdXI7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFkb3coY29u
c3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0IENvbG9y
JiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMpCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyBpZiBub2JvZHkgaGFzIGFueSBzaGFkb3dzLgotICAgIGlmIChzaGFkb3dJc0Ns
ZWFyZWQoc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyKSAmJiBzaGFkb3dJc0NsZWFyZWQobV9jdXJy
ZW50U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBzdGF0ZUNoYW5nZUZsYWdzOwot
Ci0gICAgaWYgKHNoYWRvd09mZnNldCAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0IHx8
IHNoYWRvd0JsdXIgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgfHwgc2hhZG93Q29sb3Ig
IT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmNvbG9yKSB7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRv
d09mZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93Qmx1ciA9IHNo
YWRvd0JsdXI7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd0NvbG9yID0gc2hhZG93Q29sb3I7Ci0g
ICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dD
aGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgIT0gU2hhZG93
c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkICYmIChzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKSAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFk
b3cuaWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtczo6WWVzKTsKLSAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKLSAgICB9Ci0gICAgaWYgKHN0
YXRlQ2hhbmdlRmxhZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9vd25lci5k
aWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgc3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBtX2N1cnJl
bnRTdGF0ZS5zaGFkb3cub2Zmc2V0ID0gc2hhZG93T2Zmc2V0OwotICAgIG1fY3VycmVudFN0YXRl
LnNoYWRvdy5ibHVyID0gc2hhZG93Qmx1cjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuY29s
b3IgPSBzaGFkb3dDb2xvcjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNm
b3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czo6WWVzKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0
eWxlUmVmIHN0eWxlKQorc3RhdGljIHZvaWQgc2V0RHJvcFNoYWRvdyhHcmFwaGljc0NvbnRleHQm
IGRlc3RpbmF0aW9uQ29udGV4dCwgQ0dTdHlsZVJlZiBzdHlsZSkKIHsKICAgICBpZiAoQ0dTdHls
ZUdldFR5cGUoc3R5bGUpICE9IGtDR1N0eWxlU2hhZG93KSB7CiAgICAgICAgIC8vIEZJWE1FOiBT
dXBwb3J0IG1vcmUga2luZHMgb2YgQ0dTdHlsZXMuCi0gICAgICAgIHVwZGF0ZVNoYWRvdyh7MCwg
MH0sIDAsIENvbG9yKCksIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpVbnNwZWNpZmllZCk7Cisg
ICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0yNjEsMjAgKzEzNCw5IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1
cGRhdGVTaGFkb3coQ0dTdHlsZVJlZiBzdHlsZSkKICAgICBhdXRvIHJhZCA9IGRlZzJyYWQoc2hh
ZG93U3R5bGUuYXppbXV0aCAtIDE4MCk7CiAgICAgYXV0byBzaGFkb3dPZmZzZXQgPSBGbG9hdFNp
emUoc3RkOjpjb3MocmFkKSwgc3RkOjpzaW4ocmFkKSkgKiBzaGFkb3dTdHlsZS5oZWlnaHQ7CiAg
ICAgYXV0byBzaGFkb3dDb2xvciA9IENHU3R5bGVHZXRDb2xvcihzdHlsZSk7Ci0gICAgdXBkYXRl
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93U3R5bGUucmFkaXVzLCBDb2xvcjo6Y3JlYXRlQW5k
UHJlc2VydmVDb2xvclNwYWNlKHNoYWRvd0NvbG9yKSwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6
Olllcyk7Ci19CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVyKENH
UmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0KQotewotICAgIHVw
ZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgYXV0byBhbHBoYSA9IENHR1N0
YXRlR2V0QWxwaGEoZ3N0YXRlKTsKLSAgICBtX293bmVyLmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
YWxwaGEpOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIoQ0dS
ZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQotewotICAgIHVwZGF0ZUNUTSgq
Q0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgbV9vd25lci5lbmRUcmFuc3BhcmVuY3lMYXll
cigpOworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0
LCBzdGF0aWNfY2FzdDxmbG9hdD4oc2hhZG93U3R5bGUucmFkaXVzKSwgQ29sb3I6OmNyZWF0ZUFu
ZFByZXNlcnZlQ29sb3JTcGFjZShzaGFkb3dDb2xvcikgfSk7CisgICAgZGVzdGluYXRpb25Db250
ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRydWUpOwogfQogCiBzdGF0aWMgVmVjdG9y
PENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhjb25zdCBDR1BvaW50IHBvc2l0
aW9uc1tdLCBzaXplX3QgY291bnQsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4
KQpAQCAtMjkwLDE4ICsxNTIsMTggQEAgc3RhdGljIFZlY3RvcjxDR1NpemU+IGNvbXB1dGVBZHZh
bmNlc0Zyb21Qb3NpdGlvbnMoY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2kKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBo
cyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENHQWZmaW5l
VHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlv
bnNbXSwgc2l6ZV90IGNvdW50KQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdH
bHlwaHMoQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBD
R1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCiB7CiAgICAgQVNTRVJUX0lNUExJRVMo
bV9kZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObywgbV9v
cmlnaW5hbEZvbnQpOwogCi0gICAgaWYgKCFjb3VudCkKKyAgICBpZiAoIWNvdW50IHx8IENHR1N0
YXRlR2V0QWxwaGEoZ3N0YXRlKSA8PSAwKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0ZvbnRS
ZWYgdXNlZEZvbnQgPSBDR0dTdGF0ZUdldEZvbnQoZ3N0YXRlKTsKICAgICBpZiAobV9kZXJpdmVG
b250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyAmJiB1c2VkRm9udCAh
PSBhZG9wdENGKENURm9udENvcHlHcmFwaGljc0ZvbnQobV9vcmlnaW5hbEZvbnQtPnBsYXRmb3Jt
RGF0YSgpLmN0Rm9udCgpLCBudWxscHRyKSkuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNv
bnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKIAogICAgIC8vIFdlIHdhbnQg
dGhlIHJlcGxheWVyJ3MgQ1RNIGFuZCB0ZXh0IG1hdHJpeCB0byBtYXRjaCB0aGUgY3VycmVudCBD
VE0gYW5kIHRleHQgbWF0cml4LgogICAgIC8vIFRoZSBjdXJyZW50IHRleHQgbWF0cml4IGlzIGEg
Y29uY2F0ZW5hdGlvbiBvZiB3aGF0ZXZlciBXZWJLaXQgc2V0cyBpdCB0byBhbmQgd2hhdGV2ZXIK
QEAgLTMyNCwxMyArMTg2LDE2IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3
R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgICAgIGlu
dmVyc2VDVE1GaXh1cCA9IGludmVyc2UudmFsdWUoKTsKICAgICBlbHNlCiAgICAgICAgIGN0bUZp
eHVwID0gQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgbV9vd25lci5jb25jYXRDVE0oY3RtRml4dXAp
OworCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RNKGN0bUZpeHVwKTsKIAogICAg
IGF1dG8gZmlsbENvbG9yID0gQ0dHU3RhdGVHZXRGaWxsQ29sb3IoZ3N0YXRlKTsKKyAgICBtX2Rl
c3RpbmF0aW9uQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29s
b3JTcGFjZShmaWxsQ29sb3IpKTsKKwogICAgIGF1dG8gc3Ryb2tlQ29sb3IgPSBDR0dTdGF0ZUdl
dFN0cm9rZUNvbG9yKGdzdGF0ZSk7Ci0gICAgdXBkYXRlRmlsbENvbG9yKENvbG9yOjpjcmVhdGVB
bmRQcmVzZXJ2ZUNvbG9yU3BhY2UoZmlsbENvbG9yKSk7Ci0gICAgdXBkYXRlU3Ryb2tlQ29sb3Io
Q29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOwotICAgIHVw
ZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25D
b250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uo
c3Ryb2tlQ29sb3IpKTsKKworICAgIHNldERyb3BTaGFkb3cobV9kZXN0aW5hdGlvbkNvbnRleHQs
IENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAgICBhdXRvIGZvbnRTaXplID0gQ0dHU3Rh
dGVHZXRGb250U2l6ZShnc3RhdGUpOwogICAgIFJlZiBmb250ID0gbV9kZXJpdmVGb250RnJvbUNv
bnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyA/ICptX29yaWdpbmFsRm9udCA6IEZv
bnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBo
aWNzRm9udCh1c2VkRm9udCwgZm9udFNpemUsIG51bGxwdHIsIG51bGxwdHIpKSwgZm9udFNpemUp
KTsKQEAgLTM0NSwzMCArMjEwLDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRE
cmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgICAg
IC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjMyOTE3PiAoYERyYXdHbHlwaHNSZWNv
cmRlcmAgc2hvdWxkIGJlIGFibGUgdG8gcmVjb3JkK3JlcGxheSB2ZXJ0aWNhbCB0ZXh0KQogICAg
IH0KIAotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGNv
bXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3VudCwgdGV4dE1hdHJpeCku
ZGF0YSgpLCBjb3VudCwgdGV4dE1hdHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBtX3Ntb290
aGluZ01vZGUpOwotCi0gICAgbV9vd25lci5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBo
cywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCB0ZXh0TWF0
cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1f
c21vb3RoaW5nTW9kZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RNKGludmVy
c2VDVE1GaXh1cCk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1h
Z2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwg
Q0dJbWFnZVJlZiBjZ0ltYWdlKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJ
bWFnZShDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNnSW1hZ2Up
CiB7Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICB1cGRhdGVT
aGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4
dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIHNldERyb3BTaGFkb3cobV9k
ZXN0aW5hdGlvbkNvbnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAgICAvLyBD
b3JlIEdyYXBoaWNzIGFzc3VtZXMgYSAieSB1cCIgY29vcmRpbmF0ZSBzeXN0ZW0sIGJ1dCBpbiBX
ZWJLaXQsIHdlIHVzZSBhICJ5LWRvd24iIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgIC8vIFRoaXMg
bWVhbnMgdGhhdCBXZWJLaXQncyBkcmF3aW5nIHJvdXRpbmVzIChHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZSgpKSBpbnRlbnRpb25hbGx5IGRyYXcgaW1hZ2VzIHVwc2lkZS1kb3duIGZyb20gQ29y
ZSBHcmFwaGljcydzIHBvaW50IG9mIHZpZXcuCiAgICAgLy8gKFRoZXJlJ3MgYSB5LWZsaXAgaW5z
aWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSgpLikK
ICAgICAvLyBUaGUgcmVjdCBoYXMgdGhlIHJpZ2h0IGJvdW5kcywgYnV0IHdlIG5lZWQgdG8gdHJh
bnNmb3JtIGZyb20gQ0cncyBjb29yZGluYXRlIHN5c3RlbSB0byBXZWJLaXQncyBieSBwZXJmb3Jt
aW5nIG91ciBvd24geS1mbGlwIHNvIGltYWdlcyBhcmUgZHJhd24gdGhlIHJpZ2h0LXNpZGUtdXAu
CiAgICAgLy8gV2UgZG8gdGhpcyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGUgdHdvIEFQSXMs
IHdoaWNoIGlzIHJpZ2h0IGhlcmUuCi0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgcmVjdC5zaXpl
LmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKLSAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6
ZSgxLCAtMSkpOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRlKDAsIHJlY3Qu
c2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRl
eHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgCiAgICAgYXV0byBpbWFnZSA9IE5hdGl2
ZUltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5kcmF3TmF0aXZlSW1hZ2UoKmlt
YWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBpbWFn
ZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmln
aW5Ub3BMZWZ0IH0pOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd05hdGl2ZUltYWdl
KCppbWFnZSwgaW1hZ2UtPnNpemUoKSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9hdFJlY3QgeyB7IH0s
IGltYWdlLT5zaXplKCkgfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9u
OjpPcmlnaW5Ub3BMZWZ0IH0pOworICAgIAogICAgIC8vIFVuZG8gdGhlIGFib3ZlIHktZmxpcCB0
byByZXN0b3JlIHRoZSBjb250ZXh0LgotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0x
KSk7Ci0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgLShyZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJl
Y3Qub3JpZ2luLnkpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgLShyZWN0LnNp
emUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpKTsKK30KKwordm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdOb25PVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBzZXRJbnRlcm5hbEZvbnQoZm9udCwgc21vb3Ro
aW5nTW9kZSk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUludGVybmFs
Q29udGV4dCgpOworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxDb250ZXh0
LCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGlu
Z01vZGUpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0ZSk7CiB9
CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0
UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0zNzksMjUgKzI1Miwx
OSBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIGF1dG8gYm91bmRzID0gZm9udC5i
b3VuZHNGb3JHbHlwaChnbHlwaHNbaV0pOwogCiAgICAgICAgIC8vIENyZWF0ZSBhIGxvY2FsIElt
YWdlQnVmZmVyIGJlY2F1c2UgZGVjb2RpbmcgdGhlIFNWRyBmb250cyBoYXMgdG8gaGFwcGVuIGlu
IFdlYlByb2Nlc3MuCi0gICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9vd25lci5jcmVh
dGVBbGlnbmVkSW1hZ2VCdWZmZXIoYm91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSwgUmVuZGVyaW5nTWV0aG9kOjpMb2NhbCkpIHsKKyAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZm
ZXIgPSBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoYm91bmRz
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9kOjpMb2NhbCkp
IHsKKyAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKICAgICAgICAgICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKGltYWdlQnVmZmVyLT5jb250
ZXh0KCksIGZvbnQsIGdseXBocyArIGksIGFkdmFuY2VzICsgaSwgMSwgRmxvYXRQb2ludCgpLCBz
bW9vdGhpbmdNb2RlKTsKIAogICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9uUmVjdC5t
b3ZlQnkocGVuUG9zaXRpb24pOwotICAgICAgICAgICAgbV9vd25lci5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICAgICAgbV9kZXN0aW5hdGlv
bkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsK
ICAgICAgICAgfQogCiAgICAgICAgIHBlblBvc2l0aW9uLm1vdmUoc2l6ZShhZHZhbmNlc1tpXSkp
OwogICAgIH0KIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bihj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsK
LSAgICBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGZvbnQsIHNtb290aGluZ01vZGUpOwotICAgIEZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxDb250ZXh0LCBmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwotICAgIGNvbmNs
dWRlSW50ZXJuYWxDb250ZXh0KCk7Ci19Ci0KIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3
QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgYXV0byBvdHN2Z0dseXBo
cyA9IGZvbnQuZmluZE9UU1ZHR2x5cGhzKGdseXBocywgbnVtR2x5cGhzKTsKQEAgLTQ0MCw3ICsz
MDcsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZH
QW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmIGZvbgogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6
OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290
aGluZ01vZGUpCiB7CiAgICAgaWYgKG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzID09IERlY29uc3Ry
dWN0RHJhd0dseXBoczo6Tm8pIHsKLSAgICAgICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVG
b250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3Ro
aW5nTW9kZSk7CisgICAgICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNo
ZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9v
dGhpbmdNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDUzLDE1ICszMjAsMTcg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KENURm9udFJlZiBmb250
LCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmUKIHsKICAgICBBU1NFUlQobV9kZWNvbnN0cnVjdERy
YXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzYXZlcihtX293bmVyKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHNhdmVyKG1fZGVzdGluYXRpb25Db250ZXh0KTsKIAotICAgIG1fb3duZXIudHJhbnNs
YXRlKGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0LnNpemUu
aGVpZ2h0KTsKLSAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIG1fZGVz
dGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZShsaW5lUmVjdC5vcmlnaW4ueCwgbGluZVJlY3Qub3Jp
Z2luLnkgKyBsaW5lUmVjdC5zaXplLmhlaWdodCk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQu
c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAKLSAgICBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KEZv
bnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGZvbnQsIGZvbnRTaXplKSksIEZvbnRTbW9vdGhp
bmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKKyAgICBzZXRJbnRlcm5hbEZvbnQoRm9udDo6
Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNtb290aGluZ01v
ZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIAorICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9
IHByZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24o
bV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAwLCAwKTsKICAgICBDVExpbmVE
cmF3KGxpbmUsIG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgY29u
Y2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKKyAgICByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KG9y
aWdpbmFsU3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
YXNjYWRlQ29yZVRleHQuY3BwCmluZGV4IDUxMWUwOWI5NmNlZjAzMjUwOTBlMjNhZjkxNGFlMzVm
MmFiOGVkMmUuLmU1MzRjYzU1YWYyNmI3ZmI4MjgwZTYzYjdkYzI1YTNkNGE0MTYzNzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNj
YWRlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC0xNTIsMjUgKzE1MiwyNyBAQCBzdGF0
aWMgdm9pZCBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENHUG9p
bnQsIDI1Nj4mIHBvc2l0aW9ucwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgc2hvd0dseXBoc1dp
dGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgQ0dD
b250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBh
ZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4dE1hdHJp
eCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
Q0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQogewogICAgIGlmICghY291bnQpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0
YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisKICAgICBWZWN0b3I8Q0dQb2ludCwgMjU2PiBwb3Np
dGlvbnMoY291bnQpOwogICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250
T3JpZW50YXRpb246OlZlcnRpY2FsKSB7Ci0gICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRN
YXRyaXgoY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCB0ZXh0TWF0cml4KSwgY29udGV4
dCk7CisgICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgoY29tcHV0ZVZlcnRpY2Fs
VGV4dE1hdHJpeChmb250LCB0ZXh0TWF0cml4KSwgY2dDb250ZXh0KTsKIAogICAgICAgICBWZWN0
b3I8Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhjb3VudCk7CiAgICAgICAgIENURm9udEdldFZl
cnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhz
LCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7CiAKICAgICAgICAgYXV0byBhc2NlbnREZWx0
YSA9IGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAt
IGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpOwotICAgICAgICBmaWxsVmVjdG9yV2l0
aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjb250ZXh0LCB0cmFuc2xhdGlvbnMu
ZGF0YSgpLCBhZHZhbmNlcywgY291bnQsIHBvaW50LCBhc2NlbnREZWx0YSk7Ci0gICAgICAgIENU
Rm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5k
YXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICAgICAgZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEds
eXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY2dDb250ZXh0LCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBh
ZHZhbmNlcywgY291bnQsIHBvaW50LCBhc2NlbnREZWx0YSk7CisgICAgICAgIENURm9udERyYXdH
bHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNv
dW50LCBjZ0NvbnRleHQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpbGxWZWN0b3JXaXRoSG9y
aXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgYWR2YW5jZXMsIGNvdW50
LCBwb2ludCk7Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgp
LCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICAgICAgZmls
bFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjZ0NvbnRleHQs
IGFkdmFuY2VzLCBjb3VudCwgcG9pbnQpOworICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRm
b3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY2dDb250
ZXh0KTsKICAgICB9CiB9CiAKQEAgLTI0MiwxMCArMjQ0LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6
ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEcKICAgICBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOwogICAgIENHQ29udGV4
dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAKLSAgICBGbG9h
dFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hh
ZG93Q29sb3I7Ci0gICAgY29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVy
LCBzaGFkb3dDb2xvcik7CisgICAgYXV0byBkcm9wU2hhZG93ID0gY29udGV4dC5kcm9wU2hhZG93
KCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQuZ2V0Q1RNKCk7
CiAgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNl
dCgpOwpAQCAtMjU4LDI5ICsyNTcsMjkgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQudGV4dERy
YXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFs
aWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkg
JiYgKCFjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lk
ZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKKyAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQudGV4dERyYXdp
bmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIGRyb3BTaGFkb3cuY29sb3IuaXNW
YWxpZCgpICYmICFkcm9wU2hhZG93LmJsdXJSYWRpdXMgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9y
Qml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGNv
bnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRleHQu
aXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewogICAg
ICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5n
IG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAg
ICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0g
Y29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hh
ZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9h
dCgpKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gZHJvcFNoYWRvdy5jb2xvci5j
b2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwogICAg
ICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9h
dCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOworICAgICAg
ICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIGRyb3BTaGFkb3cub2Zmc2V0LndpZHRo
KCk7CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4g
d2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMg
bmVnYXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93
T2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0x
IDogMSk7Ci0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dU
ZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51
bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQu
eSgpICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhG
bG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNvbnRleHQsIGdseXBo
cywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGlmIChzeW50aGV0
aWNCb2xkT2Zmc2V0KQotICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBv
aW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250
LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7Cisg
ICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFgg
KyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNvbnRleHQsIGdseXBo
cywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKGZpbGxDb2xvcik7CiAgICAgfQogCi0gICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhwb2ludCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRl
eHRNYXRyaXgpOworICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNvbnRl
eHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAKICAgICBpZiAo
c3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9h
dFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQs
IGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAg
ICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRo
ZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNvbnRleHQsIGdseXBocywgYWR2YW5j
ZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQot
ICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRv
d0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3cpOwogCiAj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9y
aWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCmlu
ZGV4IDJlMmY0ZjRmMmNiNTVkMzY1ZTVhZTM5OTMyNWQwNWYyYzE3MzYxZmQuLmNjZjQwY2VhNjJi
MTY3NDM2NmQ3NDg0MTYyYjFiYzRlOTM3NzA3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNw
cApAQCAtOTAsMTAgKzkwLDcgQEAgYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdz
KEFzVGV4dEZsYWdzIGZsYWdzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIGlmICghKGZsYWdz
ICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMpKSB7CiAgICAgICAgICAg
ICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBmb3Igbm93LCBvbmx5IGRyb3AgdGhlIGl0ZW0gaWYgdGhlIG9ubHkgc3Rh
dGUtY2hhbmdlIGZsYWdzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4KLSAgICAgICAgICAgIGlmIChz
dGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCku
bV9jaGFuZ2VGbGFncyA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzQ2hhbmdlKQorICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZSgpLmNoYW5n
ZXMoKSA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwpAQCAtMjAyLDE2ICsxOTksNiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQo
SXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPFNhdmU+KGl0ZW0uZ2V0PFNh
dmU+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVybiBhcHBl
bmQ8UmVzdG9yZT4oaXRlbS5nZXQ8UmVzdG9yZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJh
bnNsYXRlOgotICAgICAgICByZXR1cm4gYXBwZW5kPFRyYW5zbGF0ZT4oaXRlbS5nZXQ8VHJhbnNs
YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBhcHBl
bmQ8Um90YXRlPihpdGVtLmdldDxSb3RhdGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxl
OgotICAgICAgICByZXR1cm4gYXBwZW5kPFNjYWxlPihpdGVtLmdldDxTY2FsZT4oKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8Q29u
Y2F0ZW5hdGVDVE0+KGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVtLmdldDxTZXRD
VE0+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAg
cmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0uZ2V0PFNldElubGluZUZpbGxD
b2xvcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CkBAIC0y
MjAsMTYgKzIwNyw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0p
CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtLmdldDxTZXRT
dHJva2VUaGlja25lc3M+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAg
ICByZXR1cm4gYXBwZW5kPFNldFN0YXRlPihpdGVtLmdldDxTZXRTdGF0ZT4oKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lQ2Fw
PihpdGVtLmdldDxTZXRMaW5lQ2FwPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFz
aDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lRGFzaD4oaXRlbS5nZXQ8U2V0TGluZURh
c2g+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4g
YXBwZW5kPFNldExpbmVKb2luPihpdGVtLmdldDxTZXRMaW5lSm9pbj4oKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRNaXRlckxp
bWl0PihpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clNoYWRvdzoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGVhclNoYWRvdz4oaXRlbS5nZXQ8Q2xl
YXJTaGFkb3c+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHJldHVybiBh
cHBlbmQ8Q2xpcD4oaXRlbS5nZXQ8Q2xpcD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91
dDoKQEAgLTI3NCw4ICsyNTEsNiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRs
ZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9yPihpdGVtLmdl
dDxGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
R3JhZGllbnQ6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0
ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
Q29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0
PihpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KGl0
ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5jcHAKaW5kZXggMGMyNTIyNjRhZjQxNjY1NjIxNzUxNjA0MTA0MmE4YmRkM2JmYWJi
NS4uZGVmY2U4NGVmMzU4N2JlYTA2ZDIwN2RiNWI4MDJhYTdjODI1NjUwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcApAQCAtMzQsNyArMzQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCiBEcmF3
aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDogbV9jb250ZXh0KG1fZGlz
cGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxT
aXplKSwgaW5pdGlhbENUTSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0LCBGbG9hdFJl
Y3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0pCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggNDU3NzU1MTg5YmRhZGQ3MTlkMjQ1
YTRlNmQyYzgxYmRkYjFmN2RmMy4uMGRiMTUwMzk2MDQwMzJmMzMwM2ZiY2I2NTIxZTUzZTRlMzRm
OTE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKQEAg
LTUyLDIxICs1Miw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIGdldDxSZXN0b3Jl
PigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6
VHJhbnNsYXRlOgotICAgICAgICBnZXQ8VHJhbnNsYXRlPigpLmFwcGx5KGNvbnRleHQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBnZXQ8Um90
YXRlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2NhbGU6Ci0gICAgICAgIGdldDxTY2FsZT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICBnZXQ8
Q29uY2F0ZW5hdGVDVE0+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGdldDxTZXRDVE0+KCkuYXBwbHkoY29udGV4
dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29s
b3I6CiAgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTc5LDIxICs2NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIGdldDxTZXRMaW5lQ2FwPigpLmFwcGx5KGNv
bnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6
Ci0gICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBnZXQ8U2V0TGlu
ZUpvaW4+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICBnZXQ8U2V0TWl0ZXJMaW1pdD4oKS5hcHBseShj
b250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93
OgotICAgICAgICBnZXQ8Q2xlYXJTaGFkb3c+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICBnZXQ8Q2xpcD4oKS5hcHBs
eShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTYwLDkgKzEzMCw2IEBAIHZvaWQgSXRl
bUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCku
YXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
Um91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkuYXBwbHkoY29udGV4
dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI3MCw5ICsyMzcsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6
OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICBnZXQ8RHJh
d1BhdGg+KCkufkRyYXdQYXRoKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCku
fkZpbGxDb21wb3NpdGVkUmVjdCgpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFBhdGg6CiAgICAgICAgIGdldDxGaWxsUGF0aD4oKS5+RmlsbFBhdGgoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjg4LDkgKzI1Miw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgp
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBnZXQ8RmlsbFJv
dW5kZWRSZWN0PigpLn5GaWxsUm91bmRlZFJlY3QoKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBnZXQ8U2V0TGluZURhc2g+KCkuflNl
dExpbmVEYXNoKCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZToKICAgICAgICAgZ2V0PFNldFN0YXRlPigpLn5TZXRTdGF0ZSgpOwogICAgICAgICByZXR1cm47
CkBAIC0zMTQsOSArMjc1LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPENsZWFyUmVjdD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclNoYWRvdz46OnZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsaXA+Ojp2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTMyNiw5ICsyODQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwVG9JbWFnZUJ1ZmZlcj46OnZh
bHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxD
b25jYXRlbmF0ZUNUTT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+Ojp2
YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTM4NywzMyArMzQyLDE1IEBAIHZvaWQgSXRlbUhh
bmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UmVzdG9yZT46OnZhbHVl
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Um90YXRlPjo6dmFs
dWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKICAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2F2ZT46OnZhbHVl
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTY2FsZT46OnZhbHVl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0Q1RNPjo6dmFs
dWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENv
bG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxTZXRJbmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lU3Ryb2tlQ29sb3I+Ojp2YWx1
ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRMaW5l
Q2FwPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZUpvaW46Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFNldExpbmVKb2luPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8U2V0TWl0ZXJMaW1pdD46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0U3Ryb2tlVGhpY2tuZXNz
Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC00MzcsOSArMzc0LDYgQEAgdm9pZCBJdGVt
SGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTdHJva2VMaW5l
Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRl
OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxU
cmFuc2xhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKQEAgLTUwMSw4
ICs0MzUsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJ
dGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88RHJh
d1BhdHRlcm4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0
aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4g
Y29weUludG88RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsUGF0aD4o
aXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9y
OgpAQCAtNTEzLDggKzQ0NSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUg
aXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBj
b3B5SW50bzxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PEZpbGxSb3VuZGVkUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGluZURhc2g+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFNldFN0YXRlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlUGF0aDoKQEAgLTUzMSwxNiArNDYxLDEyIEBAIGJvb2wgSXRlbUhhbmRsZTo6
c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAgICAgICByZXR1
cm4gY29weUludG88Q2xlYXJSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclNoYWRvdz4o
aXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHJl
dHVybiBjb3B5SW50bzxDbGlwPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcE91dDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBPdXQ+KGl0ZW1PZmZzZXQs
ICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPENsaXBUb0ltYWdlQnVmZmVyPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBjb3B5SW50
bzxDb25jYXRlbmF0ZUNUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6CkBAIC01NzMsMjQgKzQ5OSwxMiBAQCBib29sIEl0ZW1IYW5kbGU6
OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25z
dAogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPFJlc3RvcmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpS
b3RhdGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxSb3RhdGU+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICByZXR1cm4gY29weUludG88U2F2
ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAg
ICByZXR1cm4gY29weUludG88U2NhbGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRDVE0+KGl0ZW1PZmZz
ZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAg
ICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW1PZmZzZXQsICp0aGlz
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNl
dExpbmVDYXA+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Sm9pbjoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVKb2luPihpdGVtT2Zmc2V0LCAq
dGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJu
IGNvcHlJbnRvPFNldE1pdGVyTGltaXQ+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRT
dHJva2VUaGlja25lc3M+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VFbGxpcHNlOgpAQCAtNjA3LDggKzUyMSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNv
cHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAgICAg
ICAgIHJldHVybiBjb3B5SW50bzxTdHJva2VSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFN0cm9r
ZUxpbmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6
Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxUcmFuc2xhdGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuY3BwCmluZGV4IDU0ZWExYzg2ODJjMDc0NDJlMmU4NDE0YjczMjhhYTMyNDgwMjVh
NzUuLmJhMGQ5NTFjMjJjZjQ5Y2U0MTdlMzM1NTNiMDBlMGE1YjhhYjIwOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1UeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKQEAgLTM4LDE2ICszOCw2IEBAIHN0YXRp
YyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAgcmV0dXJu
IHNpemVvZihTYXZlKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICByZXR1
cm4gc2l6ZW9mKFJlc3RvcmUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihUcmFuc2xhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToK
LSAgICAgICAgcmV0dXJuIHNpemVvZihSb3RhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxl
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNjYWxlKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihDb25jYXRlbmF0ZUNUTSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldENUTSk7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1cm4gc2l6
ZW9mKFNldElubGluZUZpbGxDb2xvcik7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6CkBAIC01NiwxNiArNDYsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5
dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0U3Ryb2tlVGhpY2tu
ZXNzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgcmV0dXJuIHNpemVv
ZihTZXRTdGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihTZXRMaW5lQ2FwKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lRGFzaCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZUpvaW4pOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TWl0
ZXJMaW1pdCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoQ2xlYXJTaGFkb3cpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAg
IHJldHVybiBzaXplb2YoQ2xpcCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKQEAgLTEx
MCw4ICs5MCw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlw
ZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhDb2xvcik7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHJldHVybiBzaXplb2YoRmls
bFJlY3RXaXRoR3JhZGllbnQpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsQ29tcG9zaXRlZFJlY3QpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUm91
bmRlZFJlY3QpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgpA
QCAtMTgyLDI4ICsxNjAsMTggQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKICAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRv
dzoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcE91dFRvUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVzaENvbnRl
eHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURh
c2g6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRl
OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CkBAIC0yMjIsNyArMTkw
LDYgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgY2FzZSBJdGVt
VHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBv
c2l0ZWRSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgogI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxMaW5lOgpAQCAtMjg4LDEz
ICsyNTUsMTEgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3R2x5cGhzOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENv
bXBvc2l0ZWRSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aEdyYWRpZW50OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdTeXN0ZW1JbWFnZToKQEAg
LTMwNiwxMSArMjcxLDkgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICNlbmRp
ZgogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
OgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgogICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyOgpAQCAtMzMzLDE1ICsyOTYsOSBAQCBib29sIGlzSW5saW5l
SXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRp
YToKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2NhbGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZUZpbGxDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xv
cjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVKb2luOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVs
bGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCkBAIC0zNTEsNyArMzA4LDYgQEAg
Ym9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5
cGU6OlN0cm9rZVJlY3Q6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToKLSAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5o
CmluZGV4IGQ2ODNiMmFjZjc4NDVmOTljM2NkMDk1ZWI5MTFlNTRmMWY4Y2UxMTEuLjE2NjBiOThm
ZGE1ZWYyN2IzZjc1ZDIyYTU3OWEzYTlhZTNjYzcwZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbVR5cGUuaApAQCAtMzEsMjAgKzMxLDEwIEBAIG5hbWVzcGFjZSBEaXNwbGF5TGlz
dCB7CiBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CiAgICAgU2F2ZSwKICAgICBSZXN0
b3JlLAotICAgIFRyYW5zbGF0ZSwKLSAgICBSb3RhdGUsCi0gICAgU2NhbGUsCi0gICAgQ29uY2F0
ZW5hdGVDVE0sCi0gICAgU2V0Q1RNLAogICAgIFNldElubGluZUZpbGxDb2xvciwKICAgICBTZXRJ
bmxpbmVTdHJva2VDb2xvciwKICAgICBTZXRTdHJva2VUaGlja25lc3MsCiAgICAgU2V0U3RhdGUs
Ci0gICAgU2V0TGluZUNhcCwKLSAgICBTZXRMaW5lRGFzaCwKLSAgICBTZXRMaW5lSm9pbiwKLSAg
ICBTZXRNaXRlckxpbWl0LAotICAgIENsZWFyU2hhZG93LAogICAgIENsaXAsCiAgICAgQ2xpcE91
dCwKICAgICBDbGlwVG9JbWFnZUJ1ZmZlciwKQEAgLTY3LDcgKzU3LDYgQEAgZW51bSBjbGFzcyBJ
dGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIEZpbGxSZWN0LAogICAgIEZpbGxSZWN0V2l0aENvbG9y
LAogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50LAotICAgIEZpbGxDb21wb3NpdGVkUmVjdCwKICAg
ICBGaWxsUm91bmRlZFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCiAjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
aW5kZXggMjNkMGJiY2M3MWMyODFjNTJjMzVhOGMyNTJkYTk2YzBhYjEyYTk4Yy4uMzZmYTZhMTI3
ZmYwNzkzY2VmMjMwZWRmN2E2NDFkZGUwMmZlMzc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVw
bGF5ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgpA
QCAtNTQsNjcgKzU1LDYgQEAgdm9pZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgVHJhbnNsYXRl
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC50
cmFuc2xhdGUobV94LCBtX3kpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNsYXRlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgieCIsIGl0ZW0ueCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInkiLCBpdGVtLnkoKSk7
Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgUm90YXRlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yb3RhdGUobV9hbmdsZSk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSb3Rh
dGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmdsZSIsIGl0ZW0uYW5nbGUoKSk7
Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7Ci19Ci0KLXN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY2FsZSYg
aXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNpemUiLCBpdGVtLmFtb3VudCgpKTsKLQot
ICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldENUTShtX3RyYW5zZm9ybSk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRD
VE0mIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzZXQtY3RtIiwgaXRlbS50cmFuc2Zv
cm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ29uY2F0ZW5hdGVDVE06OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNvbmNhdENU
TShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImN0bSIsIGl0ZW0udHJhbnNmb3JtKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCiB2
b2lkIFNldElubGluZUZpbGxDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKCkpOwpAQCAtMTQ4LDc3ICs4
OCwyMiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2V0U3Ryb2tlVGhpY2tuZXNzJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldFN0
YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIDogbV9zdGF0ZUNoYW5n
ZShzdGF0ZSwgZmxhZ3MpCi17Ci19Ci0KLVNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCi0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0
YXRlQ2hhbmdlKQorU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSkKKyAgICA6IG1fc3RhdGUoc3RhdGUpCiB7CiB9CiAKIHZvaWQgU2V0U3RhdGU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBtX3N0YXRlQ2hhbmdlLmFwcGx5
KGNvbnRleHQpOworICAgIGNvbnRleHQubWVyZ2VTdGF0ZUNoYW5nZXMobV9zdGF0ZSk7CiB9CiAK
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRT
dGF0ZSYgc3RhdGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU2V0U3RhdGUmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGUuc3RhdGVDaGFuZ2Uo
KTsKKyAgICB0cyA8PCBpdGVtLnN0YXRlKCk7CiAgICAgcmV0dXJuIHRzOwogfQogCi12b2lkIFNl
dExpbmVDYXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LnNldExpbmVDYXAobV9saW5lQ2FwKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXApCi17Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWNhcCIsIGxpbmVDYXAubGluZUNhcCgpKTsKLSAgICBy
ZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5LCBt
X2Rhc2hPZmZzZXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQotewotICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiZGFzaC1hcnJheSIsIGxpbmVEYXNoLmRhc2hBcnJheSgpKTsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImRhc2gtb2Zmc2V0IiwgbGluZURhc2guZGFzaE9mZnNldCgpKTsKLSAgICByZXR1cm4g
dHM7Ci19Ci0KLXZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGlu
ZUpvaW4mIGxpbmVKb2luKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1qb2luIiwgbGlu
ZUpvaW4ubGluZUpvaW4oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldE1pdGVyTGlt
aXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0
LnNldE1pdGVyTGltaXQobV9taXRlckxpbWl0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVyTGltaXQmIG1pdGVyTGltaXQp
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJtaXRyZS1saW1pdCIsIG1pdGVyTGltaXQubWl0ZXJM
aW1pdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJTaGFkb3c6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFyU2hhZG93
KCk7Ci19Ci0KIHZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwpAQCAtNjU3LDMwICs1NDIsMTUgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0
V2l0aEdyYWRpZW50JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotdm9pZCBGaWxsQ29tcG9z
aXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwotfQot
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmls
bENvbXBvc2l0ZWRSZWN0JiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0
ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsK
LSAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNvbXBvc2l0
ZU9wZXJhdG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxl
bmRNb2RlKCkpOwotICAgIHJldHVybiB0czsKLX0KLQogdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBjb250ZXh0LmZpbGxS
b3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKKyAgICBjb250ZXh0LmZp
bGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQog
ewogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVtcFByb3Bl
cnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7CiAgICAgcmV0dXJuIHRzOwogfQog
CkBAIC03NjgsOCArNjM4LDggQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQogfQogCiAjaWYgRU5BQkxFKFZJREVP
KQotUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBs
YXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLSAgICA6IG1faWRlbnRpZmllcihw
bGF5ZXIuaWRlbnRpZmllcigpKQorUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fZGVzdGlu
YXRpb24oZGVzdGluYXRpb24pCiB7CiB9CkBAIC0xMDExLDE5ICs4ODEsMTAgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7IGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7IGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRDVE06IHRzIDw8ICJzZXQtY3RtIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q29uY2F0ZW5hdGVDVE06IHRzIDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB0cyA8PCAic2V0LWlubGluZS1maWxs
LWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6
IHRzIDw8ICJzZXQtaW5saW5lLXN0cm9rZS1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldFN0cm9rZVRoaWNrbmVzczogdHMgPDwgInNldC1zdHJva2UtdGhpY2tuZXNzIjsgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHRzIDw8ICJzZXQtc3RhdGUiOyBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB0cyA8PCAic2V0LWxpbmUtY2FwIjsg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6IHRzIDw8ICJzZXQtbGluZS1k
YXNoIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHRzIDw8ICJzZXQt
bGluZS1qb2luIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogdHMg
PDwgInNldC1taXRlci1saW1pdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHRz
IDw8ICJjbGlwIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDogdHMgPDwgImNs
aXAtb3V0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6IHRz
IDw8ICJjbGlwLXRvLWltYWdlLWJ1ZmZlciI7IGJyZWFrOwpAQCAtMTA0Niw3ICs5MDcsNiBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlw
ZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogdHMgPDwgImZpbGwtcmVjdCI7IGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8PCAiZmlsbC1yZWN0
LXdpdGgtY29sb3IiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFk
aWVudDogdHMgPDwgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IjsgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21wb3NpdGVkLXJlY3Qi
OyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6IHRzIDw8ICJmaWxs
LXJvdW5kZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIjsgYnJlYWs7CiAj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCkBAIC0xMDc4LDcgKzkzOCw2IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHRzIDw8ICJhcHBseS1maWxsLXBhdHRl
cm4iOyBicmVhazsKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6IHRzIDw8ICJhcHBseS1kZXZpY2Utc2NhbGUtZmFjdG9yIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHRzIDw8ICJjbGVhci1zaGFkb3ciOyBicmVhazsKICAg
ICB9CiAgICAgcmV0dXJuIHRzOwogfQpAQCAtMTA4OCwyMSArOTQ3LDYgQEAgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIHRzIDw8IGl0
ZW0udHlwZSgpOwogCiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSXRlbVR5
cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8VHJhbnNsYXRlPigpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFJvdGF0ZT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2Nh
bGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNjYWxlPigpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldENUTT4o
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0g
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpOwotICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTE1LDE4
ICs5NTksNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFu
ZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lQ2FwPigpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVKb2luOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lSm9pbj4oKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKLSAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcD4oKTsKICAg
ICAgICAgYnJlYWs7CkBAIC0xMTkzLDkgKzEwMjUsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdy
YWRpZW50PigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKTsK
LSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAg
ICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMTI3MSw3ICsxMTAwLDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVy
bjoKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgogI2VuZGlmCi0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1
cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCA5N2NiNWZjOGQwNGJh
ODY2MmI3MmM3ZGRlZWJjNDQxNTVjMjgyNWI3Li5lODFiYjM0NmM5ZWZlYmU5NmE2NTBkNzU0NWE4
MWY2MTZiN2Q2YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTg1LDEw
NCArODUsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIH07CiAKLWNsYXNzIFRyYW5zbGF0ZSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFuc2xhdGU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgICAgICA6IG1feCh4KQotICAgICAgICAsIG1feSh5KQot
ICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9Ci0gICAg
ZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9hdCBt
X3ggeyAwIH07Ci0gICAgZmxvYXQgbV95IHsgMCB9OwotfTsKLQotY2xhc3MgUm90YXRlIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OlJvdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAg
Um90YXRlKGZsb2F0IGFuZ2xlKQotICAgICAgICA6IG1fYW5nbGUoYW5nbGUpCi0gICAgewotICAg
IH0KLQotICAgIGZsb2F0IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQotCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICBmbG9hdCBtX2FuZ2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgotfTsKLQotY2xh
c3MgU2NhbGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6U2NhbGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKLQotICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICAgICAgOiBtX3Np
emUoc2l6ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRTaXplIG1fc2l6
ZTsKLX07Ci0KLWNsYXNzIFNldENUTSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRDVE07Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLSAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgewotICAg
IH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2Zvcm07IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJh
bnNmb3JtOwotfTsKLQotY2xhc3MgQ29uY2F0ZW5hdGVDVE0gewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE07
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIENvbmNhdGVu
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAgICA6IG1fdHJh
bnNmb3JtKHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCiBjbGFzcyBTZXRJbmxp
bmVGaWxsQ29sb3IgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOwpAQCAtMjQ3LDEwICsxNDksOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGVDaGFuZ2U7IH0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2Uo
KSB7IHJldHVybiBtX3N0YXRlQ2hhbmdlOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQg
U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAKICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IGRl
Y29kZShEZWNvZGVyJik7CkBAIC0yNTgsNDA0ICsxNTgsMjYgQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGVDaGFuZ2U7CisgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+CiB2b2lkIFNldFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAg
ICBhdXRvIGNoYW5nZUZsYWdzID0gbV9zdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzOwotICAgIGVu
Y29kZXIgPDwgY2hhbmdlRmxhZ3M7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVDaGFuZ2Uu
bV9zdGF0ZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5zdHJv
a2VHcmFkaWVudCk7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLnN0cm9rZUdyYWRpZW50Owot
ICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0cm9rZVBh
dHRlcm4pOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5zdHJva2VQYXR0ZXJuOwotICAgIH0K
LQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bEdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuZmlsbEdyYWRpZW50KTsK
LSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuZmlsbEdyYWRpZW50OwotICAgIH0KLQotICAgIGlm
IChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5D
aGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5maWxsUGF0dGVybik7Ci0gICAgICAgIGVu
Y29kZXIgPDwgKnN0YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0
ZS5zaGFkb3dCbHVyOwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9yOwotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7Ci0gICAgfQotCi0gICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25l
c3NDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZVRoaWNrbmVzczsKLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERy
YXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS50ZXh0RHJhd2luZ01v
ZGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VDb2xv
cjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWxsQ29sb3I7Ci0K
LSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VTdHlsZTsKLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1
bGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmZpbGxSdWxlOwotCi0gICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9y
OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmJsZW5kTW9kZTsKLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0
YXRlLmFscGhhOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LnNob3VsZEFudGlhbGlhczsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFu
Z2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
czsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIGVuY29kZXIgPDwgbV9zdGF0ZTsKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IFNldFN0YXRl
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKLSAgICBkZWNvZGVy
ID4+IGNoYW5nZUZsYWdzOwotICAgIGlmICghY2hhbmdlRmxhZ3MpCisgICAgc3RkOjpvcHRpb25h
bDxHcmFwaGljc0NvbnRleHRTdGF0ZT4gc3RhdGU7CisgICAgZGVjb2RlciA+PiBzdGF0ZTsKKyAg
ICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2U7Ci0gICAgc3RhdGVDaGFuZ2UubV9jaGFu
Z2VGbGFncyA9ICpjaGFuZ2VGbGFnczsKLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSkp
IHsKLSAgICAgICAgYXV0byBzdHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpkZWNvZGUoZGVjb2Rl
cik7Ci0gICAgICAgIGlmICghc3Ryb2tlR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlR3JhZGllbnQg
PSBXVEZNb3ZlKCpzdHJva2VHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdl
Lm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRl
cm5DaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlUGF0dGVybiA9IFBhdHRlcm46OmRlY29k
ZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFzdHJva2VQYXR0ZXJuKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVBh
dHRlcm4gPSBXVEZNb3ZlKCpzdHJva2VQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVD
aGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdy
YWRpZW50Q2hhbmdlKSkgewotICAgICAgICBhdXRvIGZpbGxHcmFkaWVudCA9IEdyYWRpZW50Ojpk
ZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghZmlsbEdyYWRpZW50KQotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxH
cmFkaWVudCA9IFdURk1vdmUoKmZpbGxHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQ
YXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBhdXRvIGZpbGxQYXR0ZXJuID0gUGF0dGVybjo6ZGVj
b2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIWZpbGxQYXR0ZXJuKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxQYXR0
ZXJuID0gV1RGTW92ZSgqZmlsbFBhdHRlcm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiBzaGFkb3dPZmZzZXQ7Ci0g
ICAgICAgIGRlY29kZXIgPj4gc2hhZG93T2Zmc2V0OwotICAgICAgICBpZiAoIXNoYWRvd09mZnNl
dCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFu
Z2UubV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSAqc2hhZG93T2Zmc2V0OwotCi0gICAgICAgIHN0ZDo6
b3B0aW9uYWw8ZmxvYXQ+IHNoYWRvd0JsdXI7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93Qmx1
cjsKLSAgICAgICAgaWYgKCFzaGFkb3dCbHVyKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0JsdXIgPSAqc2hhZG93
Qmx1cjsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzaGFkb3dDb2xvcjsKLSAgICAg
ICAgZGVjb2RlciA+PiBzaGFkb3dDb2xvcjsKLSAgICAgICAgaWYgKCFzaGFkb3dDb2xvcikKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5zaGFkb3dDb2xvciA9ICpzaGFkb3dDb2xvcjsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFs
PFNoYWRvd1JhZGl1c01vZGU+IHNoYWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4g
c2hhZG93UmFkaXVzTW9kZTsKLSAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRl
LnNoYWRvd1JhZGl1c01vZGUgPSBXVEZNb3ZlKCpzaGFkb3dSYWRpdXNNb2RlKTsKLSAgICB9Ci0K
LSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFs
PGZsb2F0PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGRlY29kZXIgPj4gc3Ryb2tlVGhpY2tu
ZXNzOwotICAgICAgICBpZiAoIXN0cm9rZVRoaWNrbmVzcykKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VUaGlja25l
c3MgPSAqc3Ryb2tlVGhpY2tuZXNzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVD
aGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8VGV4dERyYXdpbmdNb2RlRmxhZ3M+IHRl
eHREcmF3aW5nTW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiB0ZXh0RHJhd2luZ01vZGU7Ci0gICAg
ICAgIGlmICghdGV4dERyYXdpbmdNb2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IFdURk1v
dmUoKnRleHREcmF3aW5nTW9kZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdl
KSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzdHJva2VDb2xvcjsKLSAgICAgICAg
ZGVjb2RlciA+PiBzdHJva2VDb2xvcjsKLSAgICAgICAgaWYgKCFzdHJva2VDb2xvcikKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5zdHJva2VDb2xvciA9ICpzdHJva2VDb2xvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFu
Z2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBmaWxsQ29sb3I7Ci0gICAg
ICAgIGRlY29kZXIgPj4gZmlsbENvbG9yOwotICAgICAgICBpZiAoIWZpbGxDb2xvcikKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5maWxsQ29sb3IgPSAqZmlsbENvbG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5t
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNo
YW5nZSkpIHsKLSAgICAgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGU7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc3Ryb2tlU3R5bGUpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVN0eWxlID0gc3Ryb2tl
U3R5bGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6
Om9wdGlvbmFsPFdpbmRSdWxlPiBmaWxsUnVsZTsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxsUnVs
ZTsKLSAgICAgICAgaWYgKCFmaWxsUnVsZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5maWxsUnVsZSA9ICpmaWxsUnVsZTsK
LSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkgewotICAgICAgICBz
dGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBjb21wb3NpdGVPcGVyYXRvcjsKLSAgICAg
ICAgZGVjb2RlciA+PiBjb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgaWYgKCFjb21wb3NpdGVP
cGVyYXRvcikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3Rh
dGVDaGFuZ2UubV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9ICpjb21wb3NpdGVPcGVyYXRvcjsK
LSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlv
bmFsPEJsZW5kTW9kZT4gYmxlbmRNb2RlOwotICAgICAgICBkZWNvZGVyID4+IGJsZW5kTW9kZTsK
LSAgICAgICAgaWYgKCFibGVuZE1vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuYmxlbmRNb2RlID0gKmJsZW5kTW9kZTsK
LSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKLSAg
ICAgICAgc3RkOjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eTsKLSAgICAgICAgZGVjb2RlciA+PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
OwotICAgICAgICBpZiAoIWltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9ICppbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgIH0K
LQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4g
YWxwaGE7Ci0gICAgICAgIGRlY29kZXIgPj4gYWxwaGE7Ci0gICAgICAgIGlmICghYWxwaGEpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1f
c3RhdGUuYWxwaGEgPSAqYWxwaGE7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0No
YW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRBbnRpYWxpYXM7Ci0g
ICAgICAgIGRlY29kZXIgPj4gc2hvdWxkQW50aWFsaWFzOwotICAgICAgICBpZiAoIXNob3VsZEFu
dGlhbGlhcykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3Rh
dGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSAqc2hvdWxkQW50aWFsaWFzOwotICAg
IH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpv
cHRpb25hbDxib29sPiBzaG91bGRTbW9vdGhGb250czsKLSAgICAgICAgZGVjb2RlciA+PiBzaG91
bGRTbW9vdGhGb250czsKLSAgICAgICAgaWYgKCFzaG91bGRTbW9vdGhGb250cykKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5z
aG91bGRTbW9vdGhGb250cyA9ICpzaG91bGRTbW9vdGhGb250czsKLSAgICB9Ci0KLSAgICBpZiAo
c3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlv
bmFsPGJvb2w+IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICAgICAgZGVjb2RlciA+
PiBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
ICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9ICpz
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdl
Lm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOwotICAgICAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgIH0K
LQotICAgIHJldHVybiB7IHsgc3RhdGVDaGFuZ2UgfSB9OwotfQotCi1jbGFzcyBTZXRMaW5lQ2Fw
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlNldExpbmVDYXA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxz
ZTsKLQotICAgIFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotICAgICAgICA6IG1fbGluZUNh
cChsaW5lQ2FwKQotICAgIHsKLSAgICB9Ci0KLSAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7
IHJldHVybiBtX2xpbmVDYXA7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZUNhcCBtX2xpbmVDYXA7
Ci19OwotCi1jbGFzcyBTZXRMaW5lRGFzaCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExpbmVEYXNoKGNvbnN0IERh
c2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotICAgICAgICA6IG1fZGFzaEFy
cmF5KGRhc2hBcnJheSkKLSAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKLSAgICB7
Ci0gICAgfQotCi0gICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJldHVy
biBtX2Rhc2hBcnJheTsgfQotICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X2Rhc2hPZmZzZXQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8U2V0TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0g
ICAgRGFzaEFycmF5IG1fZGFzaEFycmF5OwotICAgIGZsb2F0IG1fZGFzaE9mZnNldDsKLX07Ci0K
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldExpbmVEYXNoOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fZGFzaEFycmF5OwotICAgIGVu
Y29kZXIgPDwgbV9kYXNoT2Zmc2V0OworICAgIHJldHVybiBTZXRTdGF0ZSgqc3RhdGUpOwogfQog
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFzaD4gU2V0
TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8
RGFzaEFycmF5PiBkYXNoQXJyYXk7Ci0gICAgZGVjb2RlciA+PiBkYXNoQXJyYXk7Ci0gICAgaWYg
KCFkYXNoQXJyYXkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBkYXNoT2Zmc2V0OwotICAgIGRlY29kZXIgPj4gZGFzaE9mZnNldDsKLSAg
ICBpZiAoIWRhc2hPZmZzZXQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBy
ZXR1cm4ge3sgKmRhc2hBcnJheSwgKmRhc2hPZmZzZXQgfX07Ci19Ci0KLWNsYXNzIFNldExpbmVK
b2luIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OlNldExpbmVKb2luOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
ZmFsc2U7Ci0KLSAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAgICAgICAgOiBt
X2xpbmVKb2luKGxpbmVKb2luKQotICAgIHsKLSAgICB9Ci0KLSAgICBMaW5lSm9pbiBsaW5lSm9p
bigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZUpv
aW4gbV9saW5lSm9pbjsKLX07Ci0KLWNsYXNzIFNldE1pdGVyTGltaXQgewotcHVibGljOgotICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TWl0ZXJM
aW1pdDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0
TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotICAgICAgICA6IG1fbWl0ZXJMaW1pdChtaXRl
ckxpbWl0KQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyBy
ZXR1cm4gbV9taXRlckxpbWl0OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fbWl0ZXJMaW1p
dDsKLX07Ci0KLWNsYXNzIENsZWFyU2hhZG93IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyU2hhZG93OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotfTsKLQogLy8gRklYTUU6IHRyZWF0IGFz
IGRyYXdpbmcgaXRlbT8KIGNsYXNzIENsaXAgewogcHVibGljOgpAQCAtMTYxMiw5MSArMTEzNCwy
MCBAQCBzdGQ6Om9wdGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdpdGhHcmFk
aWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZQogICAgIHJldHVybiB7eyAqcmVjdCwgZ3JhZGll
bnQtPmdldCgpIH19OwogfQogCi1jbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgewotcHVibGljOgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbENv
bXBvc2l0ZWRSZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBm
YWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7Ci0K
LSAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAg
ICAgICA6IG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgICAgICwg
bV9vcChvcCkKLSAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCi0gICAgewotICAgIH0K
LQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgY29u
c3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQotICAg
IEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBzdGQ6Om51bGxvcHQ7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbENvbXBv
c2l0ZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIEZsb2F0UmVjdCBt
X3JlY3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBtX29wOwot
ICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Ci12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAg
IGVuY29kZXIgPDwgbV9vcDsKLSAgICBlbmNvZGVyIDw8IG1fYmxlbmRNb2RlOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IEZp
bGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpv
cHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICgh
cmVjdCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8
Q29sb3I+IGNvbG9yOwotICAgIGRlY29kZXIgPj4gY29sb3I7Ci0gICAgaWYgKCFjb2xvcikKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRl
T3BlcmF0b3I+IG9wOwotICAgIGRlY29kZXIgPj4gb3A7Ci0gICAgaWYgKCFvcCkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVu
ZE1vZGU7Ci0gICAgZGVjb2RlciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xv
ciwgKm9wLCAqYmxlbmRNb2RlIH19OwotfQotCiBjbGFzcyBGaWxsUm91bmRlZFJlY3QgewogcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RmlsbFJvdW5kZWRSZWN0OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7
CiAKLSAgICBGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIEZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAg
ICAgIDogbV9yZWN0KHJlY3QpCiAgICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBt
X2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29u
c3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIEJsZW5kTW9k
ZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCiAgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbGxSb3VuZGVkUmVjdD4g
ZGVjb2RlKERlY29kZXImKTsKQEAgLTE3MDksNyArMTE2MCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgRmxvYXRSb3VuZGVkUmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKLSAgICBC
bGVuZE1vZGUgbV9ibGVuZE1vZGU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAt
MTcxNyw3ICsxMTY3LDYgQEAgdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9yZWN0OwogICAgIGVuY29kZXIgPDwg
bV9jb2xvcjsKLSAgICBlbmNvZGVyIDw8IG1fYmxlbmRNb2RlOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgpAQCAtMTczMywxMiArMTE4Miw3IEBAIHN0ZDo6b3B0aW9uYWw8RmlsbFJvdW5k
ZWRSZWN0PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlm
ICghY29sb3IpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6Om9wdGlv
bmFsPEJsZW5kTW9kZT4gYmxlbmRNb2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAg
IGlmICghYmxlbmRNb2RlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0
dXJuIHt7ICpyZWN0LCAqY29sb3IsICpibGVuZE1vZGUgfX07CisgICAgcmV0dXJuIHsgeyAqcmVj
dCwgKmNvbG9yIH0gfTsKIH0KIAogY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgewpAQCAt
MTk2MSw3ICsxNDA1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKIAotICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24pOworICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
cklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogCiAgICAgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0K
ICAgICBNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1f
aWRlbnRpZmllcjsgfQpAQCAtMjI1NiwxMyArMTcwMCwxMSBAQCB1c2luZyBEaXNwbGF5TGlzdEl0
ZW0gPSBzdGQ6OnZhcmlhbnQKICAgICA8IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IKICAgICAsIEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIKICAgICAsIENsZWFyUmVjdAotICAgICwgQ2xlYXJTaGFkb3cK
ICAgICAsIENsaXAKICAgICAsIENsaXBPdXQKICAgICAsIENsaXBPdXRUb1BhdGgKICAgICAsIENs
aXBQYXRoCiAgICAgLCBDbGlwVG9JbWFnZUJ1ZmZlcgotICAgICwgQ29uY2F0ZW5hdGVDVE0KICAg
ICAsIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIKICAgICAsIERyYXdFbGxpcHNlCiAgICAgLCBE
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcgpAQCAtMjI3OCw3ICsxNzIwLDYgQEAgdXNpbmcgRGlzcGxh
eUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgLCBEcmF3UmVjdAogICAgICwgRHJhd1N5c3Rl
bUltYWdlCiAgICAgLCBFbmRUcmFuc3BhcmVuY3lMYXllcgotICAgICwgRmlsbENvbXBvc2l0ZWRS
ZWN0CiAgICAgLCBGaWxsRWxsaXBzZQogICAgICwgRmlsbFBhdGgKICAgICAsIEZpbGxSZWN0CkBA
IC0yMjg4LDIzICsxNzI5LDE1IEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFu
dAogICAgICwgRmlsbFJvdW5kZWRSZWN0CiAgICAgLCBGbHVzaENvbnRleHQKICAgICAsIFJlc3Rv
cmUKLSAgICAsIFJvdGF0ZQogICAgICwgU2F2ZQotICAgICwgU2NhbGUKLSAgICAsIFNldENUTQog
ICAgICwgU2V0SW5saW5lRmlsbENvbG9yCiAgICAgLCBTZXRJbmxpbmVTdHJva2VDb2xvcgotICAg
ICwgU2V0TGluZUNhcAotICAgICwgU2V0TGluZURhc2gKLSAgICAsIFNldExpbmVKb2luCi0gICAg
LCBTZXRNaXRlckxpbWl0CiAgICAgLCBTZXRTdGF0ZQogICAgICwgU2V0U3Ryb2tlVGhpY2tuZXNz
CiAgICAgLCBTdHJva2VFbGxpcHNlCiAgICAgLCBTdHJva2VMaW5lCiAgICAgLCBTdHJva2VQYXRo
CiAgICAgLCBTdHJva2VSZWN0Ci0gICAgLCBUcmFuc2xhdGUKIAogI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQogICAgICwgRmlsbExpbmUKQEAgLTIzNDEsMjAgKzE3NzQsMTAgQEAgdGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU+IHsK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUsCiAgICAgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpTYXZlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6UmVzdG9yZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0
ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZSwKLSAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNjYWxlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2V0Q1RNLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Q29uY2F0ZW5hdGVDVE0sCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
ZXRJbmxpbmVTdHJva2VDb2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlNldFN0cm9rZVRoaWNrbmVzcywKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlNldFN0YXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUNh
cCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNoLAotICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW4sCi0gICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0LAotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJTaGFkb3csCiAgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpDbGlwLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xpcE91dCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBUb0ltYWdl
QnVmZmVyLApAQCAtMjM3Niw3ICsxNzk5LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkZpbGxSb3VuZGVkUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVlZTQ0NzFk
MzU0ZTc1MTUzMTI1MTg5ZGZjYzk0MThhMzk0NTE0YTEuLmE1MzUwOTk4MGE5MzE0MDdlOTFlNTRm
OWY5MjMyNWNlNWU1ZDA1ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHAKQEAgLTQyLDM1MCArNDIsMTg5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3RE
cmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKLSAgICA6IG1fZHJhd0dseXBoc1JlY29y
ZGVyKCp0aGlzLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi17Ci0gICAgbV9zdGF0ZVN0YWNrLmFw
cGVuZCh7IHN0YXRlLCBpbml0aWFsQ1RNLCBpbml0aWFsQ1RNLm1hcFJlY3QoaW5pdGlhbENsaXAp
IH0pOwotfQorUmVjb3JkZXI6OlJlY29yZGVyKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpE
ZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDogR3JhcGhp
Y3NDb250ZXh0KGluaXRpYWxDbGlwLCB7IH0sICBpbml0aWFsQ1RNKQorICAgICwgbV9kcmF3R2x5
cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3RydWN0RHJhd0dseXBocykKIAotUmVjb3JkZXI6On5S
ZWNvcmRlcigpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPT0gMSk7IC8vIElm
IHRoaXMgZmlyZXMsIGl0IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4KIH0KIAot
c3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKLXsKLSAgICBzdGF0aWMgY29uc3RleHByIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGlubGluZVN0YXRlQ2hhbmdlRmxhZ3Mgewot
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLAotICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsCi0gICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsCi0gICAgfTsKLQotICAgIGlmIChj
aGFuZ2VGbGFncyAhPSAoY2hhbmdlRmxhZ3MgJiBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdzKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5z
dHJva2VDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
UmVjb3JkZXI6On5SZWNvcmRlcigpID0gZGVmYXVsdDsKIAotICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdl
cy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0
YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCit2b2lk
IFJlY29yZGVyOjpzYXZlKCkKIHsKLSAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hh
bmdlcyhjaGFuZ2VzLCBjaGFuZ2VGbGFncykpIHsKLSAgICAgICAgaWYgKGF1dG8gcGF0dGVybiA9
IGNoYW5nZXMubV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQotICAgICAgICAgICAgcmVjb3JkUmVzb3Vy
Y2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOwotICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0g
Y2hhbmdlcy5tX3N0YXRlLmZpbGxQYXR0ZXJuKQotICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VV
c2UocGF0dGVybi0+dGlsZUltYWdlKCkpOwotICAgICAgICByZWNvcmRTZXRTdGF0ZShjaGFuZ2Vz
Lm1fc3RhdGUsIGNoYW5nZUZsYWdzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JD
aGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcigqY2hhbmdlcy5tX3N0
YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKTsKLQotICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
KSkKLSAgICAgICAgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGNoYW5nZXMubV9zdGF0ZS5zdHJv
a2VUaGlja25lc3MpOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRJbmxpbmVGaWxs
Q29sb3IoKmNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOworICAgIHJlY29yZFNhdmUoKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKQordm9pZCBSZWNv
cmRlcjo6cmVzdG9yZSgpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IGludm9r
ZWQgaW4gYW4gYWQtaG9jIG1hbm5lciB3aGVuIHJlY29yZGluZyBkcmF3aW5nIGl0ZW1zLiBXZSBz
aG91bGQgY29uc2lkZXIgZWl0aGVyCi0gICAgLy8gc3BsaXR0aW5nIEdyYXBoaWNzQ29udGV4dCBz
dGF0ZSBjaGFuZ2VzIGludG8gaW5kaXZpZHVhbCBkaXNwbGF5IGxpc3QgaXRlbXMsIG9yIHJlZmFj
dG9yaW5nIHRoZSBjb2RlIHN1Y2ggdGhhdAotICAgIC8vIHRoaXMgbWV0aG9kIGlzIGF1dG9tYXRp
Y2FsbHkgaW52b2tlZCB3aGVuIHJlY29yZGluZyBhIGRyYXdpbmcgaXRlbS4KLSAgICBhdXRvJiBz
dGF0ZUNoYW5nZXMgPSBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZTsKLSAgICBhdXRvIGNoYW5n
ZXNGcm9tTGFzdFN0YXRlID0gc3RhdGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3VycmVudFN0
YXRlKCkubGFzdERyYXdpbmdTdGF0ZSk7Ci0gICAgaWYgKCFjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkK
KyAgICBpZiAoIXN0YWNrU2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0dfV0lUSF9T
VFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZpbmcgc3RhdGUg
IiA8PCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0ZSwgY2hh
bmdlc0Zyb21MYXN0U3RhdGUpKTsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oc3RhdGVDaGFu
Z2VzLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSk7Ci0gICAgc3RhdGVDaGFuZ2VzLm1fY2hhbmdlRmxh
Z3MgPSB7IH07Ci0gICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hh
bmdlcy5tX3N0YXRlOwotfQotCi1jb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgUmVjb3JkZXI6
OnN0YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2Uu
bV9zdGF0ZTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBmbGFncykKLXsKLSAgICBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5hY2N1bXVsYXRl
KHN0YXRlLCBmbGFncyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKQotewotICAgIHJlY29yZFNldExpbmVDYXAobGluZUNhcCk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNo
T2Zmc2V0KQotewotICAgIHJlY29yZFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCk7
Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewot
ICAgIHJlY29yZFNldExpbmVKb2luKGxpbmVKb2luKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0
TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewotICAgIHJlY29yZFNldE1pdGVyTGltaXQo
bWl0ZXJMaW1pdCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CisgICAgcmVjb3Jk
UmVzdG9yZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKK3ZvaWQgUmVjb3JkZXI6
OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXIuZWZmZWN0c09mVHlwZShG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpKSB7Ci0gICAgICAgIGF1dG8mIGZlSW1hZ2UgPSBk
b3duY2FzdDxGRUltYWdlPihlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoIXJlY29yZFJlc291
cmNlVXNlKGZlSW1hZ2Uuc291cmNlSW1hZ2UoKSkpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVj
dCwgZmlsdGVyLCByZXN1bHRzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICghc291cmNlSW1hZ2UpIHsKLSAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIobnVsbHB0ciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgIGlmICgh
c3RhdGUoKS5jaGFuZ2VzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXJl
Y29yZFJlc291cmNlVXNlKCpzb3VyY2VJbWFnZSkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0
OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBm
aWx0ZXIsIHJlc3VsdHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVjb3JkRHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVy
KTsKLX0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwg
Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBtX2RyYXdHbHlwaHNSZWNv
cmRlci5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQ
b2ludCwgc21vb3RoaW5nTW9kZSk7Ci19CisgICAgaWYgKHN0YXRlKCkuaGFzT25seVByaW1pdGl2
ZUNoYW5nZXMoKSkgeworICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoKSkKKyAgICAgICAgICAgIHJlY29y
ZFNldElubGluZUZpbGxDb2xvcigqZmlsbENvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwog
Ci12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9y
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3RfY2FzdDxG
b250Jj4oZm9udCkpOwotICAgIHJlY29yZERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKTsKLX0KKyAgICAgICAgaWYgKHN0
YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0
cm9rZUJydXNoKSkKKyAgICAgICAgICAgIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKCpzdHJv
a2VDb2xvcigpLnRyeUdldEFzU1JHQkFCeXRlcygpKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwor
ICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSkKKyAgICAgICAgICAgIHJlY29yZFNldFN0cm9r
ZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7CiAKLSAgICBpZiAoIXJlY29yZFJlc291cmNl
VXNlKGltYWdlQnVmZmVyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1
ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICBk
aWRBcHBseVN0YXRlQ2hhbmdlcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmVj
b3JkRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAg
cmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwotICAgIHJlY29yZERyYXdOYXRpdmVJbWFnZShpbWFn
ZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFnZShTeXN0
ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQot
ewotICAgIHJlY29yZERyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0
KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwotICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdl
LnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBpZiAoIXJlY29y
ZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXR0ZXJuKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChz
dGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpG
aWxsQnJ1c2gpKSB7CisgICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBmaWxsUGF0dGVybigpKQor
ICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOwogICAg
IH0KIAotICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCi17Ci0gICAg
cmVjb3JkU2F2ZSgpOwotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3Qo
KS5jbG9uZUZvclNhdmUoKSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQotewotICAg
IGlmICghbV9zdGF0ZVN0YWNrLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChzdGF0
ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VCcnVzaCkpIHsKKyAgICAgICAgaWYgKGF1dG8gcGF0dGVybiA9IHN0cm9rZVBhdHRlcm4oKSkK
KyAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKKyAg
ICB9CiAKLSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIHJlY29yZFJlc3RvcmUo
KTsKKyAgICByZWNvcmRTZXRTdGF0ZShzdGF0ZSgpKTsKKyAgICBkaWRBcHBseVN0YXRlQ2hhbmdl
cygpOwogfQogCi12b2lkIFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsK
LSAgICBjdXJyZW50U3RhdGUoKS50cmFuc2xhdGUoeCwgeSk7Ci0gICAgcmVjb3JkVHJhbnNsYXRl
KHgsIHkpOwotfQotCi12b2lkIFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
CisjaWYgVVNFKENHKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAg
ICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgIHJlY29yZFJvdGF0
ZShhbmdsZUluUmFkaWFucyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRB
cHBseVN0cm9rZVBhdHRlcm4oKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQordm9pZCBSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAg
Y3VycmVudFN0YXRlKCkuc2NhbGUoc2l6ZSk7Ci0gICAgcmVjb3JkU2NhbGUoc2l6ZSk7CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCk7CiB9Cisj
ZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQordm9pZCBSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihkZXZpY2VTY2FsZUZhY3Rvcik7CiAKLSAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRDVE0odHJh
bnNmb3JtKTsKLSAgICByZWNvcmRDb25jYXRlbmF0ZUNUTSh0cmFuc2Zvcm0pOworICAgIC8vIEZJ
WE1FOiB0aGlzIGNoYW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwg
b2Ygb3VyIGNhY2hlZCBleHRlbnRzLgorICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBjYWxs
ZWQgZWFybHkgb24/CisgICAgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2Fs
ZUZhY3Rvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKK3ZvaWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5zZXRDVE0odHJhbnNmb3JtKTsKLSAg
ICByZWNvcmRTZXRDVE0odHJhbnNmb3JtKTsKLX0KKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwog
Ci1BZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOwot
fQorICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKIAotdm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7CisgICAgc2V0QWxwaGEob3BhY2l0eSk7CiAgICAgcmVjb3JkQmVnaW5U
cmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3Rh
dGVTdGFjay5sYXN0KCkuY2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllcigpKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdl
SXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAg
ICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5
KCk7Ci0gICAgcmVjb3JkRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotdm9p
ZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLSAgICByZWNvcmREcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci19CisgICAgR3JhcGhpY3ND
b250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVz
dG9yZSgpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdMaW5lc0ZvclRleHQo
RmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmlu
dGluZywgZG91YmxlTGluZXMpOworICAgIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgUmVjb3JkZXI6
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0
LCBzdHlsZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6
OmNsaXAocmVjdCk7CisgICAgcmVjb3JkQ2xpcChyZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7Ci0gICAgYXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3RWxsaXBzZShyZWN0KTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgo
cGF0aCwgd2luZFJ1bGUpOworICAgIHJlY29yZENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVjb3Jk
ZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd1BhdGgocGF0aCk7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlwT3V0KHJlY3QpOwogfQogCi12b2lkIFJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OwotICAgIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsaXBPdXRUb1BhdGgocGF0
aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3Rz
KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Ci19CisgICAgaWYgKCFyZWNvcmRSZXNvdXJj
ZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xpcFRvSW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wm
LCBjb25zdCBDb2xvciYpCit2b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICByZWNvcmRDbGVhclJlY3QocmVjdCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBSZWNvcmRl
cjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZWNv
cmRGaWxsUmVjdChyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHJlY29y
ZEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOwogICAgIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50KTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQor
dm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3As
IGJsZW5kTW9kZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRGaWxsUm91
bmRlZFJlY3QocmVjdCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9s
ZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwgYmxl
bmRNb2RlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi12b2lkIFJl
Y29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQordm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRGaWxsRWxsaXBzZShyZWN0KTsKIH0KIAogdm9p
ZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0
ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7
CiAgICAgICAgIGlmIChwYXRoLmhhc0lubGluZURhdGE8TGluZURhdGE+KCkpCkBAIC00MDIsMjEg
KzI0MSwyMSBAQCB2b2lkIFJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAg
IHJlY29yZEZpbGxQYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZFN0YXRl
Q2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmlsbEVsbGlwc2UocmVjdCk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRTdHJva2VSZWN0KHJlY3QsIGJvcmRl
clRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOwotICAgIHJlY29yZFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZFN0cm9rZUVsbGlwc2UocmVjdCk7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0
YSgpKSB7CiAgICAgICAgIGlmIChwYXRoLmhhc0lubGluZURhdGE8TGluZURhdGE+KCkpCkBAIC00
MzMsMTQ4ICsyNzIsMTY4IEBAIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKICAgICByZWNvcmRTdHJva2VQYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVyOjpz
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAg
IGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkU3Ryb2tlRWxs
aXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdSZWN0
KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZENsZWFyUmVjdChyZWN0KTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdMaW5lKHBvaW50MSwgcG9p
bnQyKTsKIH0KIAotI2lmIFVTRShDRykKLXZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVy
bigpCit2b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRBcHBs
eVN0cm9rZVBhdHRlcm4oKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERy
YXdFbGxpcHNlKHJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5k
U3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRBcHBseUZpbGxQYXR0ZXJu
KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0aChwYXRoKTsK
IH0KLSNlbmRpZgogCi12b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGN1cnJlbnRTdGF0
ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KGN1cnJlbnRTdGF0ZSgpLmN0bS5tYXBSZWN0KHJlY3Qp
KTsKLSAgICByZWNvcmRDbGlwKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQog
Ci12b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVj
b3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmVjb3Jk
Q2xpcE91dChyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdG
b2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCi12b2lkIFJl
Y29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCisjaWYgUExBVEZPUk0oTUFDKQordm9p
ZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29u
c3QgQ29sb3ImKQogewotICAgIHJlY29yZENsaXBPdXRUb1BhdGgocGF0aCk7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0
aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQogewotICAg
IGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KGN1cnJlbnRTdGF0ZSgpLmN0bS5t
YXBSZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKSk7Ci0gICAgcmVjb3JkQ2xpcFBhdGgocGF0
aCwgd2luZFJ1bGUpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisjZW5kaWYKIAotSW50UmVj
dCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIGlmIChhdXRvIGludmVyc2UgPSBjdXJyZW50U3RhdGUoKS5jdG0uaW52
ZXJzZSgpKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChpbnZlcnNlLT5tYXBSZWN0
KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpKTsKKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNl
KGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZl
cihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICByZXR1
cm47CisgICAgfQogCi0gICAgLy8gSWYgdGhlIENUTSBpcyBub3QgaW52ZXJ0aWJsZSwgcmV0dXJu
IHRoZSBvcmlnaW5hbCByZWN0LgotICAgIC8vIFRoaXMgbWF0Y2hlcyBDR1JlY3RBcHBseUludmVy
c2VBZmZpbmVUcmFuc2Zvcm0gYmVoYXZpb3IuCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
Y3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICByZWNvcmREcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBSZWNvcmRl
cjo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3Vs
dHMmIHJlc3VsdHMpCiB7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpOwotICAg
IHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCk7Ci19CisgICAg
Zm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXIuZWZmZWN0c09mVHlwZShGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFSW1hZ2UpKSB7CisgICAgICAgIGF1dG8mIGZlSW1hZ2UgPSBkb3duY2FzdDxGRUltYWdl
PihlZmZlY3QuZ2V0KCkpOworICAgICAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGZlSW1hZ2Uu
c291cmNlSW1hZ2UoKSkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1
bHRzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAotUmVmUHRyPElt
YWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2RlLCBz
dGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAotewot
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nTWV0aG9kLnZh
bHVlX29yKFJlbmRlcmluZ01ldGhvZDo6RGlzcGxheUxpc3QpKTsKLX0KKyAgICBpZiAoIXNvdXJj
ZUltYWdlKSB7CisgICAgICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgICAgIHJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKG51bGxwdHIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgUmVjb3Jk
ZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKQotewotICAgIGlmICghcGxheWVyLmlkZW50aWZpZXIoKSkgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0
aW9uKTsKKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKCpzb3VyY2VJbWFnZSkpIHsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwg
c291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIEFTU0VSVChwbGF5ZXIuaWRlbnRpZmllcigpKTsKLSAgICByZWNvcmRQYWludEZyYW1l
Rm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJ
bWFnZVJlY3QsIGZpbHRlcik7CiB9Ci0jZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6YXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIC8vIFdlIG1vZGlm
eSB0aGUgc3RhdGUgZGlyZWN0bHkgaGVyZSBpbnN0ZWFkIG9mIGNhbGxpbmcgR3JhcGhpY3NDb250
ZXh0OjpzY2FsZSgpCi0gICAgLy8gYmVjYXVzZSB0aGUgcmVjb3JkZWQgaXRlbSB3aWxsIHNjYWxl
KCkgd2hlbiByZXBsYXllZC4KLSAgICBjdXJyZW50U3RhdGUoKS5zY2FsZSh7IGRldmljZVNjYWxl
RmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvciB9KTsKKyAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFn
ZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TmF0aXZlSW1hZ2Uo
aW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wdGlvbnMpOworfQogCi0gICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUg
YmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMu
Ci0gICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KLSAgICByZWNv
cmRBcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
cmVjb3JkRHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwogfQog
Ci1GbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBXVEZMb2dB
bHdheXMoIkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5vdCB5ZXQg
Y29tcGF0aWJsZSB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1cm4gcmVj
dDsKKyAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7CiB9CiAKLWNvbnN0IFJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJlY29yZGVy
OjpjdXJyZW50U3RhdGUoKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2VC
dWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIEFTU0VSVChtX3N0YXRlU3Rh
Y2suc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoIXJl
Y29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OmRyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2VC
dWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi1SZWNvcmRl
cjo6Q29udGV4dFN0YXRlJiBSZWNvcmRlcjo6Y3VycmVudFN0YXRlKCkKKyNpZiBFTkFCTEUoVklE
RU8pCit2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBBU1NFUlQobV9zdGF0ZVN0
YWNrLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAgaWYgKCFw
bGF5ZXIuaWRlbnRpZmllcigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFt
ZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEo
cGxheWVyLmlkZW50aWZpZXIoKSwgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLWNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgUmVjb3JkZXI6OmN0bSgpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3
R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQogewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICBtX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzKGZvbnQsIGdseXBo
cywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Cit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9y
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIGN0bS50cmFuc2xhdGUo
eCwgeSk7CisgICAgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0dseXBocyhmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpOwogfQogCi12
b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKQogewotICAgIGRvdWJsZSBhbmdsZUluRGVn
cmVlcyA9IHJhZDJkZWcoc3RhdGljX2Nhc3Q8ZG91YmxlPihhbmdsZUluUmFkaWFucykpOwotICAg
IGN0bS5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOwotICAgIAotICAgIEFmZmluZVRyYW5zZm9ybSBy
b3RhdGlvbjsKLSAgICByb3RhdGlvbi5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tu
ZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6
OkNvbnRleHRTdGF0ZTo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBSZWNvcmRl
cjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGN0bS5zY2FsZShzaXplKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
cmVjdCwgc3R5bGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVjb3Jk
ZXI6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkgY29uc3QKIHsKLSAgICBjdG0gPSBtYXRyaXg7
CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2Qu
dmFsdWVfb3IoUmVuZGVyaW5nTWV0aG9kOjpEaXNwbGF5TGlzdCkpOwogfQogCi12b2lkIFJlY29y
ZGVyOjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJp
eCkKK0Zsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQogewotICAgIGN0bSAqPSBt
YXRyaXg7CisgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIu
Iik7CisgICAgcmV0dXJuIHJlY3Q7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA4NDVlYzAwNzcyZWQyYzU0
YTFlNmNiMjZiMjE1MWRhYmFhNmVjMDc1Li5hZTM0Mzc5YmU2N2YwNWUxMDQyZjZhZGM1YWFiZjg4
YzI3MGMxNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTI5
LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCiAjaW5jbHVkZSAiRHJh
d0dseXBoc1JlY29yZGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4KICNpbmNsdWRlICJJbmxpbmVQYXRo
RGF0YS5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgpAQCAtNTEsNyArNTAsNyBAQCBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0Nv
bnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3RE
cmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olll
cyk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVy
KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpID0gMDsKQEAg
LTYxLDQ3ICs2MCwzNSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJl
Y29yZFNhdmUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFJlc3RvcmUoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRTY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsK
KwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhf
dD4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoU1JH
QkE8dWludDhfdD4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3Ryb2tlVGhpY2tu
ZXNzKGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZs
b2F0IGRhc2hPZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGluZUpvaW4o
TGluZUpvaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9h
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclNoYWRvdygpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9
IDA7CisKKyNpZiBVU0UoQ0cpCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0
dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpID0g
MDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5k
UnVsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2Nr
TG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb25SZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0V2l0
aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVu
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmRGaWxsQXJjKGNvbnN0IEFyY0RhdGEmKSA9IDA7CkBAIC0xMDksMTEgKzk2LDEwIEBA
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0
IEJlemllckN1cnZlRGF0YSYpID0gMDsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRG
aWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKSA9IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
U3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tu
ZXNzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdmlydHVh
bCB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25zdCBBcmNEYXRhJikgPSAwOwpAQCAtMTIxLDExNiAr
MTA3LDgxIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlQmV6aWVy
Q3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgPSAwOwogI2VuZGlmCiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0jaWYgVVNFKENHKQot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0Zv
Y3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSA9IDA7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgdm9pZCByZWNvcmRQYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKSA9IDA7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdH
bHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNo
b3IsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpID0gMDsKIAogICAgIHZpcnR1
YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJbWFnZSYpID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1hZ2VCdWZmZXImKSA9IDA7CiAgICAgdmlydHVhbCBi
b29sIHJlY29yZFJlc291cmNlVXNlKGNvbnN0IFNvdXJjZUltYWdlJikgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShGb250JikgPSAwOwogCi0gICAgc3RydWN0IENvbnRl
eHRTdGF0ZSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0gICAgICAgIEZsb2F0UmVj
dCBjbGlwQm91bmRzOwotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBzdGF0ZUNo
YW5nZTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbGFzdERyYXdpbmdTdGF0ZTsKLQot
ICAgICAgICBDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwKQot
ICAgICAgICAgICAgOiBjdG0odHJhbnNmb3JtKQotICAgICAgICAgICAgLCBjbGlwQm91bmRzKGNs
aXApCi0gICAgICAgICAgICAsIGxhc3REcmF3aW5nU3RhdGUoc3RhdGUpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZvclNhdmUoKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBDb250ZXh0U3RhdGUgc3RhdGUobGFzdERyYXdpbmdTdGF0ZSwg
Y3RtLCBjbGlwQm91bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLnN0YXRlQ2hhbmdlID0gc3RhdGVD
aGFuZ2U7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAgICAgICBD
b250ZXh0U3RhdGUgY2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIGF1dG8gc3RhdGUgPSBjbG9uZUZvclNhdmUoKTsKLSAgICAgICAgICAgIHN0
YXRlLmxhc3REcmF3aW5nU3RhdGUuYWxwaGEgPSAxOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRl
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7
Ci0gICAgICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKLSAgICAgICAgdm9p
ZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICAgICAgdm9pZCBjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpOwotICAgIH07Ci0KLSAgICBjb25zdCBWZWN0b3I8Q29udGV4dFN0YXRlLCA0PiYgc3Rh
dGVTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVTdGFjazsgfQotCi0gICAgY29uc3QgQ29u
dGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKSBjb25zdDsKLSAgICBDb250ZXh0U3RhdGUmIGN1cnJl
bnRTdGF0ZSgpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4s
IHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPikgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAw
OwogCiBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1D
b250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3Jl
KCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZp
bmFsOwogI2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmlu
YWwgeyB9Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsg
fQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAjZW5kaWYK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZp
bmFsOwogCi0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLQotICAg
IFdFQkNPUkVfRVhQT1JUIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZFVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOwogCi0jaWYgVVNFKENHKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUZp
bGxQYXR0ZXJuKCkgZmluYWw7Ci0jZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMm
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwog
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKQEAgLTI0MSw0
MCArMTkyLDIzIEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUo
KSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xl
SW5SYWRpYW5zKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIEFmZmlu
ZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUgPSBQ
b3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsK
LSAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVy
JiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdT
eXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICNpZiBFTkFCTEUoVklE
RU8pCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSkg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250
U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKIAotICAgIHZvaWQg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGFwcGVuZFN0YXRl
Q2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgY3RtKCkgY29uc3Q7Ci0KLSAgICBWZWN0b3I8Q29udGV4dFN0YXRlLCA0PiBtX3N0YXRlU3Rh
Y2s7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyIG1fZHJhd0dseXBoc1JlY29yZGVyOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKaW5kZXggMWZk
YzZiYTU2YmZkYjI2MzZlZmIzNDYyYWRhMmE5OTBkMzM4OTk0NS4uMWZiNGRkNzk1YWUxMGFhOGNj
Y2JjZGQ4MzE0ZWVhODA4NmU4ZGI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlckltcGwuY3BwCkBAIC00MiwxOCArNDIsMTMgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLVJlY29yZGVySW1wbDo6UmVjb3JkZXJJbXBs
KERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRl
Y29uc3RydWN0RHJhd0dseXBocykKLSAgICA6IFJlY29yZGVyKHN0YXRlLCBpbml0aWFsQ2xpcCwg
aW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorUmVjb3JkZXJJbXBsOjpSZWNvcmRl
ckltcGwoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRl
cjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKKyAgICA6IFJl
Y29yZGVyKGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAg
ICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQogewogICAgIExPR19XSVRIX1NUUkVBTShE
aXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiXG5SZWNvcmRpbmcgd2l0aCBjbGlwICIgPDwgaW5pdGlh
bENsaXApOwogfQogCi1SZWNvcmRlckltcGw6On5SZWNvcmRlckltcGwoKQotewotICAgIEFTU0VS
VChzdGF0ZVN0YWNrKCkuc2l6ZSgpID09IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBpdCBpbmRpY2F0
ZXMgbWlzbWF0Y2hlZCBzYXZlL3Jlc3RvcmUuCi19Ci0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRTYXZlKCkKIHsKICAgICBhcHBlbmQ8U2F2ZT4oKTsKQEAgLTY0LDMxICs1OSw2IEBAIHZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRSZXN0b3JlKCkKICAgICBhcHBlbmQ8UmVzdG9yZT4oKTsKIH0K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQot
ewotICAgIGFwcGVuZDxUcmFuc2xhdGU+KHgsIHkpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIGFwcGVuZDxSb3RhdGU+KGFuZ2xlKTsK
LX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2Nh
bGUpCi17Ci0gICAgYXBwZW5kPFNjYWxlPihzY2FsZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAg
YXBwZW5kPFNldENUTT4odHJhbnNmb3JtKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAg
IGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4odHJhbnNmb3JtKTsKLX0KLQogdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBpbmxpbmVDb2xvcikK
IHsKICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihpbmxpbmVDb2xvcik7CkBAIC0xMDQs
OTIgKzc0LDI2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdHJva2VUaGlja25lc3Mo
ZmxvYXQgdGhpY2tuZXNzKQogICAgIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KHRoaWNrbmVz
cyk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzIGNoYW5nZUZsYWdzKQotewotICAgIGFwcGVuZDxTZXRTdGF0ZT4oc3RhdGUsIGNoYW5nZUZs
YWdzKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKQotewotICAgIGFwcGVuZDxTZXRMaW5lQ2FwPihsaW5lQ2FwKTsKLX0KLQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgYXJyYXksIGZs
b2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgYXBwZW5kPFNldExpbmVEYXNoPihhcnJheSwgZGFzaE9m
ZnNldCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lSm9pbihMaW5lSm9p
biBqb2luKQotewotICAgIGFwcGVuZDxTZXRMaW5lSm9pbj4oam9pbik7Ci19Ci0KLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGFwcGVu
ZDxTZXRNaXRlckxpbWl0PihsaW1pdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRD
bGVhclNoYWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQotewotICAg
IGFwcGVuZDxDbGlwPihjbGlwUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRD
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewotICAgIGFw
cGVuZDxDbGlwT3V0PihjbGlwUmVjdCk7CisgICAgYXBwZW5kPFNldFN0YXRlPihzdGF0ZSk7CiB9
CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAg
IGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXBwZW5kPENsaXBP
dXRUb1BhdGg+KHBhdGgpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKLXsKLSAgICBhcHBlbmQ8Q2xpcFBhdGg+
KHBhdGgsIHJ1bGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdl
KQotICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcigpOwotICAgIGFwcGVuZDxEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcj4oV1RGTW92ZShp
ZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUgbW9kZSkKLXsKLSAgICBhcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaW1h
Z2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRpdmVJbWFn
ZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKKyNpZiBV
U0UoQ0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsK
LSAgICBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRl
cm4+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lz
dGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkK
K3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBhcHBl
bmQ8RHJhd1N5c3RlbUltYWdlPihzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBh
cHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4oKTsKIH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAKLXZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIHsKLSAgICBhcHBlbmQ8RHJhd1Bh
dHRlcm4+KGltYWdlSWRlbnRpZmllciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cj4oc2NhbGVGYWN0b3IpOwogfQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQpAQCAtMjAyLDQ0ICsxMDYsMzQgQEAgdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBhcHBlbmQ8RW5k
VHJhbnNwYXJlbmN5TGF5ZXI+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBhcHBl
bmQ8RHJhd1JlY3Q+KHJlY3QsIGxpbmVXaWR0aCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MikKLXsKLSAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYg
Y2xpcFJlY3QpCiB7Ci0gICAgYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KGJsb2NrTG9jYXRpb24s
IGxvY2FsQW5jaG9yLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsK
KyAgICBhcHBlbmQ8Q2xpcD4oY2xpcFJlY3QpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQogewotICAgIGFwcGVu
ZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihyZWN0LCBzdHlsZSk7CisgICAgYXBwZW5kPENs
aXBQYXRoPihwYXRoLCBydWxlKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRD
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgYXBwZW5kPERyYXdFbGxp
cHNlPihyZWN0KTsKKyAgICBhcHBlbmQ8Q2xpcE91dD4oY2xpcFJlY3QpOwogfQogCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBw
ZW5kPERyYXdQYXRoPihwYXRoKTsKKyAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0aCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBhcHBl
bmQ8RHJhd0ZvY3VzUmluZ1BhdGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKKyAgICBh
cHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBw
ZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKKyAg
ICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI1NywyMyArMTUxLDIyIEBAIHZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIEdyYWRpZW50JiBnCiAgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50Pihy
ZWN0LCBncmFkaWVudCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQ29tcG9z
aXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KHJlY3QsIGNvbG9y
LCBvcCwgbW9kZSk7CisgICAgYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29sb3IpOwog
fQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIG1vZGUpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3QsIGNvbG9y
LCBtb2RlKTsKKyAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5k
ZWRSZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZDxG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKTsKKyAgICBh
cHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCi0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYg
bGluZSkKIHsKICAgICBhcHBlbmQ8RmlsbExpbmU+KGxpbmUpOwpAQCAtMjkzLDcgKzE4Niw2IEBA
IHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3Vy
dmVEYXRhJiBjdXJ2ZSkKIHsKICAgICBhcHBlbmQ8RmlsbEJlemllckN1cnZlPihjdXJ2ZSk7CiB9
Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zMDEsMjUgKzE5MywxNyBA
QCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAg
ICBhcHBlbmQ8RmlsbFBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGFwcGVuZDxGaWxsRWxs
aXBzZT4ocmVjdCk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24pCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBhcHBl
bmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICBhcHBlbmQ8
U3Ryb2tlUmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KLSNlbmRpZiAvLyBFTkFCTEUo
VklERU8pCiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPFN0cm9rZVJlY3Q+
KHJlY3QsIHdpZHRoKTsKKyAgICBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CiB9CiAKICNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0
cm9rZUxpbmUoY29uc3QgTGluZURhdGEmIGxpbmUpCiB7CiAgICAgYXBwZW5kPFN0cm9rZUxpbmU+
KGxpbmUpOwpAQCAtMzM5LDcgKzIyMyw2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJv
a2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewogICAgIGFwcGVu
ZDxTdHJva2VCZXppZXJDdXJ2ZT4oY3VydmUpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCkBAIC0zNDcsMzMgKzIzMCw4NCBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxTdHJva2VQYXRoPihw
YXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZDxT
dHJva2VFbGxpcHNlPihyZWN0KTsKKyAgICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRo
aWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGFw
cGVuZDxDbGVhclJlY3Q+KHJlY3QpOworICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2lu
dDIpOwogfQogCi0jaWYgVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJl
Y3QpOworfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkK
K3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+KCk7CisgICAgYXBwZW5kPERyYXdQYXRoPihw
YXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKQor
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4oKTsKKyAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1Bh
dGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotI2VuZGlmIC8vIFVTRShDRykK
K3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit7CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKK30KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihzY2FsZUZh
Y3Rvcik7CisgICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2VJZGVudGlmaWVyLCBpbWFn
ZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIGFwcGVuZDxEcmF3U3lzdGVtSW1h
Z2U+KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworfQorCit2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVy
PihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7CisgICAgaWYgKHNvdXJjZUlt
YWdlKQorICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpOworICAgIGFwcGVuZDxEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcj4oV1RGTW92
ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworfQorCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2VJZGVu
dGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1l
ZGlhPihpZGVudGlmaWVyLCBkZXN0aW5hdGlvbik7Cit9CisjZW5kaWYKKwordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdN
b2RlIG1vZGUpCit7CisgICAgYXBwZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBocywgYWR2YW5j
ZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZUxpbmVzKQoreworICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihGbG9hdFBvaW50KCksIHRv
RmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5l
cyk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUm
IHN0eWxlKQoreworICAgIGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihyZWN0LCBz
dHlsZSk7CiB9CiAKIGJvb2wgUmVjb3JkZXJJbXBsOjpyZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJ
bWFnZSYgbmF0aXZlSW1hZ2UpCkBAIC00MTcsMjAgKzM1MSwxNiBAQCBzdGF0aWMgaW5saW5lIGZs
b2F0IHNoYWRvd1BhaW50aW5nRXh0ZW50KGZsb2F0IGJsdXJSYWRpdXMpCiAKIEZsb2F0UmVjdCBS
ZWNvcmRlckltcGw6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
IGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IHJlY3Q7Ci0gICAgYXV0byYgc3RhdGUg
PSBjdXJyZW50U3RhdGUoKTsKKyAgICBhdXRvIGJvdW5kcyA9IHJlY3Q7CiAKLSAgICBGbG9hdFNp
emUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd1JhZGl1czsKLSAgICBDb2xvciBzaGFk
b3dDb2xvcjsKLSAgICBpZiAoZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3dDb2xvcikpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5kczsK
LSAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKLSAgICAgICAgc2hhZG93
RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CisgICAg
aWYgKGhhc1NoYWRvdygpKSB7CisgICAgICAgIGF1dG8gc2hhZG93RXh0ZW50ID0gYm91bmRzOwor
ICAgICAgICBzaGFkb3dFeHRlbnQubW92ZShkcm9wU2hhZG93KCkub2Zmc2V0KTsKKyAgICAgICAg
c2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoZHJvcFNoYWRvdygpLmJs
dXJSYWRpdXMpKTsKICAgICAgICAgYm91bmRzLnVuaXRlKHNoYWRvd0V4dGVudCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIGludGVyc2VjdGlvbihzdGF0ZS5jbGlwQm91bmRzLCBzdGF0ZS5jdG0ubWFw
UmVjdChib3VuZHMpKTsKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKGNsaXBCb3VuZHMoKSwgZ2V0
Q1RNKCkubWFwUmVjdChib3VuZHMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKaW5kZXggNjQyMjY1
ZjA5ODAyMmNmMmIwNWYxODBjMTc0ZmEwMzQ2MmYyZGQ0MC4uNmRlNmFlZGZmY2IxN2RiMmQwODFi
NDJjMWRlNmJjMzI5YTM4YmY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXJJbXBsLmgKQEAgLTM1LDkgKzM1LDggQEAgY2xhc3MgUmVjb3JkZXJJbXBsIDogcHVibGlj
IFJlY29yZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZWNvcmRlckltcGwpOwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFJl
Y29yZGVySW1wbChEaXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29u
c3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRHJhd0ds
eXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5SZWNvcmRlckltcGwoKTsKLQorICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVySW1wbChEaXNw
bGF5TGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgaW5pdGlhbENUTSA9IHsgfSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERy
YXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVz
KTsKKyAgICAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0
LmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgZmluYWwg
eyB9CkBAIC00Nyw0NyArNDYsMzUgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHJlY29y
ZFNhdmUoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFJlc3RvcmUoKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZFJvdGF0ZShmbG9hdCBhbmdsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTY2FsZShjb25zdCBG
bG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3Io
U1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29s
b3IoU1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0U3Ryb2tlVGhpY2tu
ZXNzKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVh
clNoYWRvdygpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmKSBmaW5hbDsKKworI2lmIFVTRShDRykKKyAgICB2b2lkIHJlY29yZEFwcGx5
U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigp
IGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5h
bDsKKwogICAgIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CiAgICAgdm9p
ZCByZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
Q2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1N5
c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJs
b2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVz
cywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGlu
ZXMpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3
Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCiAgICAgdm9pZCByZWNv
cmRGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxS
ZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAg
dm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVu
dCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAg
ICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IEFyY0RhdGEmKSBmaW5hbDsKQEAg
LTk1LDExICs4MiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZl
KGNvbnN0IEJlemllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRG
aWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCByZWNv
cmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKSBmaW5hbDsKLSNlbmRpZgotICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURh
dGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25zdCBBcmNEYXRhJikgZmlu
YWw7CkBAIC0xMDcsMTMgKzkzLDI4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRTdHJva2VC
ZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgogICAgIHZv
aWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRT
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJl
Y29yZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxs
UGF0dGVybigpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpICBm
aW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgCisg
ICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdG
b2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIEZpbHRlciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVj
b3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRE
cmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVP
KQorICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKLSAgICB2b2lk
IHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQm
IGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmRE
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKIAogICAgIGJvb2wg
cmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmKSBmaW5hbDsKICAgICBib29sIHJlY29yZFJl
c291cmNlVXNlKEltYWdlQnVmZmVyJikgZmluYWw7CkBAIC0xMzksNiArMTQwLDggQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCkgZmluYWw7CisKICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRz
KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCiAgICAgRGlzcGxheUxpc3QmIG1fZGlzcGxheUxp
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXggOGZmMTlk
MDAzNTRjZGJlZGUzYTViYTFhZjc1OGNmZjAyM2EyNWEyMi4uNjZmYzlkODgyYTRkM2Y3ZGU4ZTg5
MTJhMWYzMGFmMTk4ZDAzNTI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcApAQCAtOTcsMTAgKzk3LDEwIEBAIGlubGluZSBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGFwcGx5U2V0U3RhdGVJdGVtKEdyYXBoCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfTsKIAotICAgIGlmIChhdXRvIGltYWdlSWRl
bnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCku
bV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZp
ZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgp
LnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybiAqaW1hZ2VJZGVudGlmaWVyOwogCi0gICAgaWYg
KGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0u
c3RhdGVDaGFuZ2UoKS5tX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoYXV0byBp
bWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZSgp
LmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybiAqaW1hZ2VJZGVudGlmaWVy
OwogCiAgICAgc2V0U3RhdGVJdGVtLmFwcGx5KGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFy
ZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJh
d0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCmluZGV4IGQwOWMxMzczZWE5YWFhZjRhMTg1MTM2
ZWU4ODUzZDc4OGZjNDE3OGQuLmZjYWRlZjIzOGUwOWZlMDI4MmFjZWVjOWExZjI1Zjg3MzM5ZDlj
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKQEAg
LTI5LDE3ICsyOSwxOCBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlw
aHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMs
IERlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9u
Q29udGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCisg
ICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9CiAKIHZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBG
b250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBo
c0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9p
bnQsIHNtb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNB
bmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50
LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lh
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRl
eCA5MTE0NmRmYzZmZDg0ZGY4ZTI5NTRmMDM3N2QwMDY2YTc3MjMzY2M5Li41MTU0N2FlNmRmYTEw
NGI1ZGQ2NTRhOTMwYjk3MjQxZDk3NzhkMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHly
aWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzcsMTYwICs3OCwzODkgQEAgYXV0byBjcmVhdGVDb21tYW5kKCkgLT4gc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8T3BlcmF0aW9uRGF0YTw+LCBUPjo6dmEKIH0KIAogQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09wZXJhdGlv
bnMmIGNvbW1hbmRMaXN0KQotICAgIDogbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKKyAgICA6
IEdyYXBoaWNzQ29udGV4dChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpKQorICAgICwgbV9jb21t
YW5kTGlzdChjb21tYW5kTGlzdCkKIHsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgeyB9LCB7
IH0sIEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkgfSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2ZSgpCit7CisgICAgc3RydWN0IFNhdmUgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmlydHVhbCB+
U2F2ZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5zYXZlKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiU2F2ZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIEdyYXBo
aWNzQ29udGV4dDo6c2F2ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNhdmU+KCkpOwor
fQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJlc3RvcmUoKQoreworICAgIHN0cnVj
dCBSZXN0b3JlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7Cisg
ICAgICAgIHZpcnR1YWwgflJlc3RvcmUoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikucmVzdG9yZSgpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAg
ICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlJlc3RvcmU8PlxuIjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBpZiAoIXN0YWNrU2l6ZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxSZXN0b3JlPigpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseVN0
YXRlQ2hhbmdlcygpCiB7Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVRoaWNrbmVzc0NoYW5nZSkgeworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE0pKSB7CisgICAgICAgIHN0cnVjdCBT
ZXRDVE0gZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFu
c2Zvcm0+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldENUTSgpID0gZGVmYXVsdDsKKworICAg
ICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dENUTShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTTw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9
OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldENUTT4oZ2V0Q1RNKCkpKTsKKyAg
ICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSkgewogICAgICAgICBzdHJ1Y3QgU3Ryb2tl
VGhpY2tuZXNzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
ZmxvYXQ+IHsKICAgICAgICAgICAgIHZpcnR1YWwgflN0cm9rZVRoaWNrbmVzc0NoYW5nZSgpID0g
ZGVmYXVsdDsKIAogICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVw
bGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBD
YWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCkpOworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhp
Y2tuZXNzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU3Ryb2tl
VGhpY2tuZXNzQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3M8PlxuIjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJv
a2VUaGlja25lc3NDaGFuZ2U+KHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgICAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxTdHJva2VUaGlja25lc3NDaGFuZ2U+KHN0cm9rZVRoaWNrbmVzcygp
KSk7CiAgICAgfQogCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVN0eWxlQ2hhbmdlKSB7CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlKSkgewogICAgICAgICBzdHJ1Y3Qg
U3Ryb2tlU3R5bGVDaGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxTdHJva2VTdHlsZT4gewogICAgICAgICAgICAgdmlydHVhbCB+U3Ryb2tlU3R5bGVDaGFuZ2Uo
KSA9IGRlZmF1bHQ7CiAKICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlv
blJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCkpOworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5
bGUoY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZTw+XG4iOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVN0eWxlQ2hhbmdl
PihzdHJva2VTdHlsZSgpKSk7CisgICAgfQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXApKSB7CisgICAgICAg
IHN0cnVjdCBTZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8TGluZUNhcD4geworICAgICAgICAgICAgdmlydHVhbCB+U2V0TGluZUNhcCgpID0gZGVmYXVs
dDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6
c2V0TGluZUNhcChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3Zl
cnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXA8PlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lQ2FwPihs
aW5lQ2FwKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2gpKSB7CisgICAgICAgIHN0cnVj
dCBTZXRMaW5lRGFzaCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPERh
c2hBcnJheSwgZmxvYXQ+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldExpbmVEYXNoKCkgPSBk
ZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENh
aXJvOjpzZXRMaW5lRGFzaChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4o
KSwgYXJnPDE+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaDw+XG4i
OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPFNldExpbmVEYXNoPihsaW5lRGFzaCgpLmRhc2hlcywgbGluZURhc2goKS5vZmZzZXQpKTsK
KyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4pKSB7CisgICAgICAgIHN0cnVjdCBTZXRMaW5lSm9p
biBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPExpbmVKb2luPiB7Cisg
ICAgICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lSm9pbigpID0gZGVmYXVsdDsKKworICAgICAgICAg
ICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJp
ZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6c2V0TGluZUpvaW4oY29u
dGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVKb2luPihsaW5lSm9pbigpKSk7
CisgICAgfQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQpKSB7CisgICAgICAgIHN0cnVjdCBTZXRNaXRl
ckxpbWl0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsK
KyAgICAgICAgICAgIHZpcnR1YWwgflNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7CisKKyAgICAg
ICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92
ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNldE1pdGVyTGlt
aXQoY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VTdHls
ZUNoYW5nZTw+XG4iOworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDw+XG4iOwogICAgICAgICAgICAgfQogICAg
ICAgICB9OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVN0eWxlQ2hhbmdl
PihzdGF0ZS5zdHJva2VTdHlsZSkpOworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRN
aXRlckxpbWl0PihtaXRlckxpbWl0KCkpKTsKICAgICB9CiAKLSAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSB7CisgICAgaWYgKHN0
YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNv
bXBvc2l0ZU1vZGUpKSB7CiAgICAgICAgIHN0cnVjdCBDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2Ug
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlPiB7CiAgICAgICAgICAgICB2aXJ0dWFsIH5Db21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICAgICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dEZvclJlcGxheShyZXBsYXll
cikuY3IoKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlPD5c
biI7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpDb21wb3NpdGVNb2RlPD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07
CiAKLSAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
PihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CisgICAgICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZT4oY29tcG9zaXRlTW9k
ZSgpLm9wZXJhdGlvbiwgY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZSkpOwogICAgIH0KLQotICAg
IGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2Up
IHsKKyAgICAKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzKSkgewogICAgICAgICBzdHJ1Y3QgU2hv
dWxkQW50aWFsaWFzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8Ym9vbD4gewogICAgICAgICAgICAgdmlydHVhbCB+U2hvdWxkQW50aWFsaWFzQ2hhbmdlKCkg
PSBkZWZhdWx0OwogCiAgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25S
ZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRB
bnRpYWxpYXMoY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJy
aWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTaG91
bGRBbnRpYWxpYXNDaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwg
IkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczw+XG4iOwogICAg
ICAgICAgICAgfQogICAgICAgICB9OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNo
b3VsZEFudGlhbGlhc0NoYW5nZT4oc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7CisgICAgICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPFNob3VsZEFudGlhbGlhc0NoYW5nZT4oc2hvdWxkQW50aWFsaWFz
KCkpKTsKICAgICB9CisKKyAgICBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOworfQorCit2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0
eSkKK3sKKyAgICBzdHJ1Y3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0PiB7CisgICAgICAgIHZpcnR1YWwgfkJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJCZWdpblRyYW5zcGFyZW5jeUxheWVyPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxCZWdpblRy
YW5zcGFyZW5jeUxheWVyPihvcGFjaXR5KSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQoreworICAgIHN0cnVjdCBFbmRUcmFuc3BhcmVu
Y3lMYXllciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4geworICAg
ICAgICB2aXJ0dWFsIH5FbmRUcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKKworICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29u
dGV4dEZvclJlcGxheShyZXBsYXllcikpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1w
KFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBp
bmRlbnQgPDwgIkVuZFRyYW5zcGFyZW5jeUxheWVyPD5cbiI7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQ6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RW5kVHJhbnNw
YXJlbmN5TGF5ZXI+KCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXAo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHN0cnVjdCBDbGlwIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7CisgICAgICAgIHZpcnR1YWwg
fkNsaXAoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0
aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fp
cm86OmNsaXAoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwPD5cbiI7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcChyZWN0KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwPihyZWN0KSk7Cit9CisK
K3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUgd2luZFJ1bGUpCit7CisgICAgc3RydWN0IENsaXBQYXRoIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgV2luZFJ1bGU+IHsKKyAgICAgICAgdmly
dHVhbCB+Q2xpcFBhdGgoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50
aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAg
ICAgICAgQ2Fpcm86OmNsaXBQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4o
KSwgYXJnPDE+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
IHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNs
aXBQYXRoPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOworICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSkpOwogfQogCi12
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQor
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBzdHJ1Y3QgU2V0TGluZUNhcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPExpbmVDYXA+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZUNhcCgpID0g
ZGVmYXVsdDsKKyAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwT3V0KCkgPSBk
ZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRMaW5l
Q2FwKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICBD
YWlybzo6Y2xpcE91dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAg
ICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldExpbmVDYXA8PlxuIjsKKyAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOwogICAgICAgICB9CiAgICAg
fTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXApKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+
KHJlY3QpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHN0cnVjdCBT
ZXRMaW5lRGFzaCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPERhc2hB
cnJheSwgZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZURhc2goKSA9IGRlZmF1bHQ7
CisgICAgc3RydWN0IENsaXBPdXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9u
RGF0YTxQYXRoPiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CiAKICAg
ICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3Zl
cnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVEYXNoKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fp
cm86OmNsaXBPdXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAg
ICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRMaW5lRGFzaDw+XG4iOworICAg
ICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7CiAgICAgICAgIH0KICAgICB9
OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZURhc2g+KGRhc2hlcywgZGFzaE9m
ZnNldCkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8Q2xpcE91dD4ocGF0aCkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQogewotICAgIHN0cnVjdCBTZXRMaW5lSm9pbiBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPExpbmVKb2luPiB7Ci0gICAgICAgIHZpcnR1YWwgflNldExp
bmVKb2luKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBDbGlwVG9JbWFnZUJ1ZmZlciBmaW5hbDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4s
IEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwVG9JbWFnZUJ1ZmZlcigpID0gZGVm
YXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c2V0TGluZUpv
aW4oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENh
aXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCkuZ2V0KCksIGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJTZXRMaW5lSm9pbjw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlw
VG9JbWFnZUJ1ZmZlcjw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFNldExpbmVKb2luPihsaW5lSm9pbikpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisKKyAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlw
VG9JbWFnZUJ1ZmZlcj4obmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QpKTsK
IH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1p
dGVyTGltaXQpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5T
ZXRNaXRlckxpbWl0KCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBDbGVhclJlY3QgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmly
dHVhbCB+Q2xlYXJSZWN0KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6Y2xlYXJSZWN0KGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVu
dCA8PCAiU2V0TWl0ZXJMaW1pdDw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJD
bGVhclJlY3Q8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxTZXRNaXRlckxpbWl0PihtaXRlckxpbWl0KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGVhclJlY3Q+KHJlY3QpKTsKIH0KIAogdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CkBAIC0yNDksNiArNDc5LDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CkBAIC0yNjksNiArNTAxLDggQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworCiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3Qs
IGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIApAQCAtMjkxLDM1ICs1
MjUsMTIgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSkpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17
Ci0gICAgc3RydWN0IEZpbGxSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8RmxvYXRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgQ2Fp
cm86OlNoYWRvd1N0YXRlLCBDb21wb3NpdGVPcGVyYXRvcj4gewotICAgICAgICB2aXJ0dWFsIH5G
aWxsUmVjdCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBh
dXRvJiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKTsKLQotICAg
ICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250
ZXh0LCBhcmc8Mj4oKSwgYXJnPDM+KCkpOwotICAgICAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KHBs
YXRmb3JtQ29udGV4dCwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8ND4oKSk7Ci0gICAgICAgICAg
ICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFy
Zzw1PigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1
bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8
IGluZGVudCA8PCAiRmlsbFJlY3Q8PlxuIjsKLSAgICAgICAgfQotICAgIH07CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIGNvbXBvc2l0ZU9wZXJh
dG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHN0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdy
YWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSkpKTsKIH0KIAot
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
CiAgICAgc3RydWN0IEZpbGxSb3VuZGVkUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPEZsb2F0Um91bmRlZFJlY3QsIENvbG9yLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKICAgICAgICAgdmlydHVhbCB+RmlsbFJv
dW5kZWRSZWN0KCkgPSBkZWZhdWx0OwpAQCAtMzI4LDcgKzUzOSw3IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRSZWN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9
IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpOwogCi0gICAgICAgICAgICBDYWlybzo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBhcmc8Mz4o
KSk7CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0
Zm9ybUNvbnRleHQuY3IoKSwgYXJnPDI+KCksIGFyZzwzPigpKTsKIAogICAgICAgICAgICAgYXV0
byYgcmVjdCA9IGFyZzwwPigpOwogICAgICAgICAgICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpCkBA
IC0zMzYsNyArNTQ3LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRl
ZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBDYWlybzo6ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0LCByZWN0
LnJlY3QoKSwgYXJnPDE+KCksIGFyZzw0PigpKTsKIAotICAgICAgICAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBhcmc8Mj4oKSwgQmxlbmRN
b2RlOjpOb3JtYWwpOworICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVy
YXRpb24ocGxhdGZvcm1Db250ZXh0LmNyKCksIGFyZzwyPigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7
CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRl
CkBAIC0zNDUsOCArNTU2LDkgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwgY29sb3IsIHN0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Rmls
bFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBi
bGVuZE1vZGUoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKQEAgLTM2NSwxMCArNTc3LDM2IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zCiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAg
IFVOVVNFRF9QQVJBTShjb2xvcik7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKCkpKSk7CiB9CiAKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHN0cnVjdCBGaWxsRWxsaXBzZSBmaW5h
bCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ2Fpcm86OkZp
bGxTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5GaWxsRWxs
aXBzZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBQYXRo
IHBhdGg7CisgICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2UoYXJnPDA+KCkpOworICAgICAgICAg
ICAgQ2Fpcm86OmZpbGxQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBwYXRoLCBhcmc8
MT4oKSwgYXJnPDI+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwg
IkZpbGxFbGxpcHNlPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxGaWxsRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUp
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7Cit9CisKIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBzdHJ1Y3QgRmlsbFBh
dGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBDYWlybzo6
RmlsbFNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CkBAIC0zODgsMzIgKzYyNiwxMiBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAg
ICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPEZpbGxQYXRoPihwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSks
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3RydWN0
IEZpbGxFbGxpcHNlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Rmxv
YXRSZWN0LCBDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAg
IHZpcnR1YWwgfkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFBhdGggcGF0aDsKLSAgICAgICAgICAgIHBhdGguYWRkRWxsaXBzZShhcmc8
MD4oKSk7Ci0gICAgICAgICAgICBDYWlybzo6ZmlsbFBhdGgoY29udGV4dEZvclJlcGxheShyZXBs
YXllciksIHBhdGgsIGFyZzwxPigpLCBhcmc8Mj4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiRmlsbEVsbGlwc2U8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RmlsbEVsbGlwc2U+KHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSkpOwotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAg
c3RydWN0IFN0cm9rZVJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxGbG9hdFJlY3QsIGZsb2F0LCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3Rh
dGU+IHsKQEAgLTQzMCwzMSArNjQ4LDEwIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ry
b2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwotfQotCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsK
LSAgICBzdHJ1Y3QgU3Ryb2tlUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPFBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewot
ICAgICAgICB2aXJ0dWFsIH5TdHJva2VQYXRoKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzdHJva2VQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAg
ICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VQYXRoPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKIAogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNl
KHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTQ3
OSwxMDcgKzY3NiwyOSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9r
ZUVsbGlwc2U+KHJlY3QsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgQ2xlYXJSZWN0IGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7Ci0gICAgICAg
IHZpcnR1YWwgfkNsZWFyUmVjdCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6Y2xlYXJSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xlYXJS
ZWN0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
Q2xlYXJSZWN0PihyZWN0KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcp
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBzdHJ1Y3QgRHJhd0dseXBocyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWly
bzo6U2hhZG93U3RhdGUsIEZsb2F0UG9pbnQsIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90Piwg
ZmxvYXQsIFZlY3RvcjxjYWlyb19nbHlwaF90PiwgZmxvYXQsIFRleHREcmF3aW5nTW9kZUZsYWdz
LCBmbG9hdCwgRmxvYXRTaXplLCBDb2xvciwgRm9udFNtb290aGluZ01vZGU+IHsKLSAgICAgICAg
dmlydHVhbCB+RHJhd0dseXBocygpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgU3Ryb2tlUGF0aCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpTdHJv
a2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5TdHJva2VQ
YXRoKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlv
blJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJv
OjpkcmF3R2x5cGhzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+
KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCkuZ2V0KCksCi0gICAgICAgICAgICAgICAg
YXJnPDU+KCksIGFyZzw2PigpLCBhcmc8Nz4oKSwgYXJnPDg+KCksIGFyZzw5PigpLCBhcmc8MTA+
KCksIGFyZzwxMT4oKSwgYXJnPDEyPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpzdHJva2VQYXRo
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigp
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3R2x5cGhzPD5c
biI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVBhdGg8PlxuIjsKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAg
IGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byB4T2Zmc2V0
ID0gcG9pbnQueCgpOwotICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0dseXBocyhudW1H
bHlwaHMpOwotICAgIHsKLSAgICAgICAgYXV0byB5T2Zmc2V0ID0gcG9pbnQueSgpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICBj
YWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH07Ci0gICAgICAg
ICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RHJhd0dseXBocz4oQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwKLSAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCi0g
ICAgICAgIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNj
YWxlZEZvbnQoKSksCi0gICAgICAgIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBXVEZNb3Zl
KGNhaXJvR2x5cGhzKSwgeE9mZnNldCwgc3RhdGUudGV4dERyYXdpbmdNb2RlLAotICAgICAgICBz
dGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29s
b3IsIGZvbnRTbW9vdGhpbmcpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCi17Ci0gICAgLy8gRklYTUU6IE5v
dCBpbXBsZW1lbnRlZC4KLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzdHJ1Y3QgRHJh
d05hdGl2ZUltYWdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBJbWFnZVBhaW50aW5n
T3B0aW9ucywgZmxvYXQsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewotICAgICAgICB2aXJ0dWFsIH5E
cmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50
aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAg
ICAgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCks
IGFyZzw1PigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3
TmF0aXZlSW1hZ2U8PlxuIjsKLSAgICAgICAgfQotICAgIH07CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKIAotICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TmF0aXZlSW1hZ2U+
KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIEltYWdlUGFp
bnRpbmdPcHRpb25zKG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpLCBz
dGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwotfQotCi12b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBzdHJ1Y3QgRHJhd1BhdHRlcm4gZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgSW50U2l6ZSwg
RmxvYXRSZWN0LCBGbG9hdFJlY3QsIEFmZmluZVRyYW5zZm9ybSwgRmxvYXRQb2ludCwgSW1hZ2VQ
YWludGluZ09wdGlvbnM+IHsKLSAgICAgICAgdmlydHVhbCB+RHJhd1BhdHRlcm4oKSA9IGRlZmF1
bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJu
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFy
ZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFyZzw1PigpLCBhcmc8Nj4oKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd1BhdHRlcm48PlxuIjsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBVTlVTRURfUEFSQU0oc3BhY2luZyk7Ci0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RHJhd1BhdHRlcm4+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgbmF0
aXZlSW1hZ2Uuc2l6ZSgpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBvcHRpb25zKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0aD4ocGF0
aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
KTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKQEAgLTU5OCw4ICs3MTcsOCBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UmVjdD4o
cmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxl
LCBzdGF0ZS5zdHJva2VDb2xvcikpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywgZmlsbENv
bG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCkpKTsKIH0KIAogdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKQEAgLTYyMSw1MCArNzQwLDggQEAgdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0
YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlh
bGlhcykpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tl
U3R5bGUpCi17Ci0gICAgc3RydWN0IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29s
LCBib29sLCBDb2xvcj4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBk
ZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCks
IGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFyZzw1PigpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAg
ICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TGluZXNGb3JUZXh0PD5cbiI7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xvcikpOwotfQotCi12b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBzdHJ1Y3Qg
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPEZsb2F0UmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHsKLSAgICAgICAg
dmlydHVhbCB+RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKLQotICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAg
ICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBv
aW50Miwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHNo
b3VsZEFudGlhbGlhcygpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNjgzLDExICs3NjAsMTEgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxs
Q29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxEcmF3RWxsaXBzZT4ocmVjdCwgZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0
cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShH
VEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7CkBA
IC03MDcsMTIgKzc4NCwxMiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0CiAgICAgICAgIH0KICAg
ICB9OwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxEcmF3Rm9jdXNSaW5nPihwYXRoLCB3aWR0aCwgY29sb3IpKTsKICNlbmRpZgotICAgIFVOVVNF
RF9QQVJBTShvZmZzZXQpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICNpZiBQTEFURk9STShXUEUpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3Rz
LCBjb2xvcik7CkBAIC03MzIsMzY4ICs4MDksMTQ2IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
CiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxEcmF3Rm9jdXNSaW5nPihyZWN0cywgd2lkdGgsIGNvbG9yKSk7CiAj
ZW5kaWYKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzYXZlKCkKLXsKLSAgICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPD4gewotICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBkZWZh
dWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLnNhdmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3Ry
ZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJTYXZlPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR3JhcGhpY3NDb250ZXh0Ojpz
YXZlKCk7Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTYXZlPigpKTsKLQotICAgIG1fc3Rh
dGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6cmVzdG9yZSgpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBzdHJ1Y3QgUmVzdG9yZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPD4gewotICAgICAgICB2aXJ0dWFsIH5SZXN0b3JlKCkgPSBkZWZh
dWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLnJlc3RvcmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJSZXN0b3JlPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKCFzdGFja1Np
emUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7
Ci0KLSAgICBpZiAobV9zdGF0ZVN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8UmVzdG9yZT4oKSk7Ci0KLSAgICBtX3N0YXRlU3RhY2su
cmVtb3ZlTGFzdCgpOwotICAgIGlmIChtX3N0YXRlU3RhY2suaXNFbXB0eSgpKQotICAgICAgICBt
X3N0YXRlU3RhY2suY2xlYXIoKTsKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAg
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgc291
cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjp0cmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzdHJ1Y3QgVHJhbnNsYXRlIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQsIGZsb2F0PiB7Ci0g
ICAgICAgIHZpcnR1YWwgflRyYW5zbGF0ZSgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd05h
dGl2ZUltYWdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBJbWFnZVBhaW50aW5nT3B0
aW9ucywgZmxvYXQsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5EcmF3
TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5n
T3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAg
ICAgQ2Fpcm86OnRyYW5zbGF0ZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCks
IGFyZzwxPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZShjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwg
YXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiVHJhbnNsYXRlPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkRyYXdOYXRpdmVJbWFnZTw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFRyYW5zbGF0ZT4oeCwgeSkpOwotCi0gICAgewotICAgICAgICBhdXRv
JiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmN0bS50cmFuc2xh
dGUoeCwgeSk7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHQ7Ci0gICAgICAgIHQudHJhbnNs
YXRlKC14LCAteSk7Ci0gICAgICAgIHN0YXRlLmN0bUludmVyc2UgPSB0ICogc3RhdGUuY3RtSW52
ZXJzZTsKLSAgICB9CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgZGVz
dFJlY3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSksIGFscGhhKCksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkp
OwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUlu
UmFkaWFucykKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzdHJ1Y3QgUm90YXRlIGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+
Um90YXRlKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENh
aXJvOjpyb3RhdGUoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAg
ICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJSb3RhdGU8PlxuIjsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxSb3RhdGU+KGFuZ2xlSW5SYWRp
YW5zKSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3Qo
KTsKLSAgICAgICAgc3RhdGUuY3RtLnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0KLSAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIHQ7Ci0gICAgICAgIHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAg
ICAgICAgc3RhdGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0KLX0K
LQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCi17Ci0gICAgc3RydWN0IFNjYWxlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8RmxvYXRTaXplPiB7Ci0gICAgICAgIHZpcnR1YWwgflNjYWxlKCkgPSBkZWZhdWx0
OworICAgIHN0cnVjdCBEcmF3UGF0dGVybiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBJbnRTaXplLCBGbG9hdFJlY3QsIEZs
b2F0UmVjdCwgQWZmaW5lVHJhbnNmb3JtLCBGbG9hdFBvaW50LCBJbWFnZVBhaW50aW5nT3B0aW9u
cz4geworICAgICAgICB2aXJ0dWFsIH5EcmF3UGF0dGVybigpID0gZGVmYXVsdDsKIAogICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c2NhbGUoY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybihjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8Mj4o
KSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSwgYXJnPDY+KCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0g
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNjYWxlPD5cbiI7CisgICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkRyYXdQYXR0ZXJuPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2NhbGU+KHNpemUpKTsKLQotICAgIHsKLSAgICAgICAgYXV0
byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZS5jdG0uc2NhbGUo
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
dDsKLSAgICAgICAgdC5zY2FsZSgxIC8gc2l6ZS53aWR0aCgpLCAxIC8gc2l6ZS5oZWlnaHQoKSk7
Ci0gICAgICAgIHN0YXRlLmN0bUludmVyc2UgPSB0ICogc3RhdGUuY3RtSW52ZXJzZTsKLSAgICB9
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3
UGF0dGVybj4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBuYXRpdmVJbWFnZS5zaXplKCks
IGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpKTsK
IH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBzdHJ1Y3QgQ29uY2F0Q1RNIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8QWZmaW5lVHJhbnNmb3JtPiB7Ci0g
ICAgICAgIHZpcnR1YWwgfkNvbmNhdENUTSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4
ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDYWlybzo6Y29uY2F0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
Q29uY2F0Q1RNPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXV0byBpbnZlcnNlID0g
dHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBpZiAoIWludmVyc2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENvbmNhdENUTT4odHJhbnNmb3JtKSk7Ci0KLSAg
ICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgc3RhdGUuY3RtICo9IHRy
YW5zZm9ybTsKLSAgICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpICogc3RhdGUu
Y3RtSW52ZXJzZTsKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIEdyYXBoaWNz
Q29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwogfQorI2Vu
ZGlmCiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsK
LSAgICBzdHJ1Y3QgU2V0Q1RNIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8QWZmaW5lVHJhbnNmb3JtPiB7Ci0gICAgICAgIHZpcnR1YWwgflNldENUTSgpID0gZGVmYXVs
dDsKKyAgICBzdHJ1Y3QgRHJhd0dseXBocyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6
U2hhZG93U3RhdGUsIEZsb2F0UG9pbnQsIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiwgZmxv
YXQsIFZlY3RvcjxjYWlyb19nbHlwaF90PiwgZmxvYXQsIFRleHREcmF3aW5nTW9kZUZsYWdzLCBm
bG9hdCwgRmxvYXRTaXplLCBDb2xvciwgRm9udFNtb290aGluZ01vZGU+IHsKKyAgICAgICAgdmly
dHVhbCB+RHJhd0dseXBocygpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAg
ICAgICAgICBDYWlybzo6U3RhdGU6OnNldENUTShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
YXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoY29udGV4dEZvclJlcGxh
eShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8
ND4oKS5nZXQoKSwKKyAgICAgICAgICAgICAgICBhcmc8NT4oKSwgYXJnPDY+KCksIGFyZzw3Pigp
LCBhcmc8OD4oKSwgYXJnPDk+KCksIGFyZzwxMD4oKSwgYXJnPDExPigpLCBhcmc8MTI+KCkpOwog
ICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQog
ICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldENUTTw+XG4iOworICAg
ICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3R2x5cGhzPD5cbiI7CiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBpZiAo
IWludmVyc2UpCisgICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pKTsK
LQotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICBzdGF0ZS5jdG0g
PSB0cmFuc2Zvcm07Ci0gICAgc3RhdGUuY3RtSW52ZXJzZSA9IGludmVyc2UudmFsdWUoKTsKLX0K
LQotQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTShHcmFwaGlj
c0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0
ZVN0YWNrLmxhc3QoKS5jdG07Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIHN0cnVjdCBCZWdpblRy
YW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
ZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigpID0gZGVm
YXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAg
ICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxC
ZWdpblRyYW5zcGFyZW5jeUxheWVyPihvcGFjaXR5KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIHN0cnVjdCBFbmRUcmFu
c3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4g
ewotICAgICAgICB2aXJ0dWFsIH5FbmRUcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQot
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllcikpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkVuZFRyYW5zcGFyZW5jeUxheWVyPD5cbiI7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0g
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCkpOwotfQotCi12
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIHN0cnVjdCBDbGlwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8RmxvYXRSZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXAoKSA9IGRlZmF1bHQ7Ci0KLSAg
ICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3Zl
cnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsaXAoY29udGV4dEZvclJlcGxh
eShyZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJDbGlwPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8Q2xpcD4ocmVjdCkpOwotCisgICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOwor
ICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOwogICAgIHsK
LSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0
ZS5jbGlwQm91bmRzLmludGVyc2VjdChzdGF0ZS5jdG0ubWFwUmVjdChyZWN0KSk7Ci0gICAgfQot
fQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIHN0cnVjdCBDbGlwT3V0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9
IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBP
dXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAg
ICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocmVjdCkpOwotfQotCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAg
ICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PFBhdGg+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKLQotICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAg
ICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsK
KyAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKICAgICAgICAgfQor
ICAgIH0KIAotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOwotICAgICAg
ICB9Ci0gICAgfTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8Q2xpcE91dD4ocGF0aCkpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3R2x5cGhzPihDYWlybzo6RmlsbFNvdXJj
ZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAorICAgICAgICBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpLCBwb2ludCwKKyAgICAgICAgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250
X3Q+KGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpKSwKKyAgICAgICAgZm9udC5zeW50
aGV0aWNCb2xkT2Zmc2V0KCksIFdURk1vdmUoY2Fpcm9HbHlwaHMpLCB4T2Zmc2V0LCB0ZXh0RHJh
d2luZ01vZGUoKSwKKyAgICAgICAgc3Ryb2tlVGhpY2tuZXNzKCksIHNoYWRvd09mZnNldCgpLCBz
aGFkb3dDb2xvcigpLCBmb250U21vb3RoaW5nKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAg
c3RydWN0IENsaXBQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
UGF0aCwgV2luZFJ1bGU+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcFBhdGgoKSA9IGRlZmF1bHQ7
CisgICAgc3RydWN0IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBD
b2xvcj4geworICAgICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0Owog
CiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlwUGF0aChjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgIENh
aXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4o
KSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFyZzw1PigpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAg
ICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwUGF0aDw+XG4iOworICAg
ICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TGluZXNGb3JUZXh0PD5cbiI7CiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcFBhdGg+KHBhdGgsIGNs
aXBSdWxlKSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxh
c3QoKTsKLSAgICAgICAgc3RhdGUuY2xpcEJvdW5kcy5pbnRlcnNlY3Qoc3RhdGUuY3RtLm1hcFJl
Y3QocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpKTsKLSAgICB9Ci19CisgICAgaWYgKHdpZHRocy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotSW50UmVjdCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFj
ay5sYXN0KCk7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qoc3RhdGUuY3RtSW52ZXJzZS5t
YXBSZWN0KHN0YXRlLmNsaXBCb3VuZHMpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRleHQ+KHBvaW50LCB0aGlja25lc3Ms
IHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0cm9rZUNvbG9yKCkpKTsKIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgc3RydWN0IENsaXBU
b0ltYWdlQnVmZmVyIGZpbmFsOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiwgRmxvYXRSZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBU
b0ltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4geworICAgICAgICB2aXJ0dWFsIH5EcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwg
YXJnPDE+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRz
KSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBU
b0ltYWdlQnVmZmVyPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXI8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0g
ICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gbmF0aXZlSW1h
Z2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKLSAgICAgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUlt
YWdlKCksIGRlc3RSZWN0KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkKLXsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3Qs
IHN0eWxlKSk7CiB9CiAKIEZsb2F0UmVjdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3Vu
ZGluZ01vZGUpCkBAIC0xMTA2LDEyICs5NjEsNCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRpbmdPcGVyYXRpb24+JiYgY29tbWFuZAog
ICAgIG1fY29tbWFuZExpc3QuYXBwZW5kKFdURk1vdmUoY29tbWFuZCkpOwogfQogCi0jaWYgRU5B
QkxFKFZJREVPKQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsK
LSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotICAgIEdyYXBoaWNzQ29udGV4dDo6cGFp
bnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwotfQotI2VuZGlmCi0KIH0gLy8g
bmFtZXNwYWNlIE5pY29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJv
T3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCA4M2M2ZDI3ZDZlYTM2Yzc5YmViZDc4MjVmOTliN2M0
MzkwOGVlNTRiLi5hZjQ3OGZjNDM3ZThiNGVlOTdhN2MwMWI3N2JjMjJhMDM1NDQ3OTU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5o
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3OCArNDIsNTggQEAgcHJpdmF0ZToKICAgICBib29s
IGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7CisgICAgdm9pZCBzYXZlKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseVN0YXRlQ2hh
bmdlcygpIG92ZXJyaWRlOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
KSBvdmVycmlkZTsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAg
dm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92
ZXJyaWRlOworICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0TGluZUNhcChXZWJD
b3JlOjpMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IFdlYkNv
cmU6OkRhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExpbmVKb2luKFdl
YkNvcmU6OkxpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQp
IG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGUgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5k
TW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlk
ZTsKKwogICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZs
b2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29u
c3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYs
IFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZVJl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3UGF0dGVybihXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJy
aWRlOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9h
dCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHls
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVy
cmlkZTsKKwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYs
IGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNhdmUo
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJh
bnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgV2ViQ29yZTo6QWZm
aW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
IGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29u
c3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92
ZXJyaWRlOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAg
V2ViQ29yZTo6SW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
bGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6Oklt
YWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdP
cHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6TmF0
aXZlSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6
TmF0aXZlSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAg
dm9pZCBwYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXImLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgdm9p
ZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdH
bHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5
cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9k
ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJv
b2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogCiAgICAgV2ViQ29yZTo6RmxvYXRS
ZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBh
cHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50aW5nT3BlcmF0aW9uPiYmKTsKICAgICBQYWludGlu
Z09wZXJhdGlvbnMmIG1fY29tbWFuZExpc3Q7Ci0KLSAgICBzdHJ1Y3QgU3RhdGUgewotICAgICAg
ICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3RtOwotICAgICAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gY3RtSW52ZXJzZTsKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNsaXBCb3Vu
ZHM7Ci0gICAgfTsKLSAgICBWZWN0b3I8U3RhdGUsIDMyPiBtX3N0YXRlU3RhY2s7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCmluZGV4IDVk
NjZlYjcyYWQxM2MyNGRhYzA5NWE5NDVmNjE0YTZmNTUyMjI0OTIuLjA3YzAzMzlmNThiZjMyYzdk
NWY4ZjgxN2RiZGQzZWI3ZjFlZTczNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCkBA
IC0yOSwxNyArMjksMTggQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9u
dC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5
cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3R2x5cGhz
LCBEZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293bmVyKG93bmVyKQorRHJhd0dseXBo
c1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlv
bkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQor
ICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQoZGVzdGluYXRpb25Db250ZXh0KQogewogfQogCiB2
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwg
Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBtX293bmVyLmRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBv
aW50LCBtX3Ntb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBv
aW50LCBtX3Ntb290aGluZ01vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCmlu
ZGV4IGMxOWU3NDE1NTdjMzA4Yzk0MWU0ZWY3MTVlM2RiNDY1OTRkMTg1YjYuLjJjZDc4NjVlY2E4
MjllYjQ1NzgwZTlmYjBlNzI0N2EzNzEyYmNjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCkBAIC0xNzYsMjUgKzE3NiwyMiBA
QCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGb250JiBmb250LAogICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29u
dGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAgICAgRm9udENhc2NhZGU6OnNldENHQ29udGV4
dEZvbnRSZW5kZXJpbmdTdHlsZShjZ0NvbnRleHQsIGZvbnQucGxhdGZvcm1EYXRhKCkuaXNTeXN0
ZW1Gb250KCksIGZhbHNlLCBmb250LnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpKTsKIAotICAgIEZs
b2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBz
aGFkb3dDb2xvcjsKLSAgICBncmFwaGljc0NvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgIGF1dG8gZHJvcFNoYWRvdyA9IGdyYXBoaWNz
Q29udGV4dC5kcm9wU2hhZG93KCk7CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGdyYXBo
aWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYg
c2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICghZ3JhcGhpY3NDb250ZXh0
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0LmdldENUTSgpLmlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworICAgIGJvb2wgaGFzU2ltcGxlU2hh
ZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9k
ZTo6RmlsbCAmJiBkcm9wU2hhZG93LmNvbG9yLmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRvdy5ibHVy
UmFkaXVzICYmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwg
Z3JhcGhpY3NDb250ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVk
KCkpOwogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKICAgICAgICAgLy8gUGFpbnQgc2ltcGxl
IHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBh
dm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgICAgICBncmFwaGljc0NvbnRl
eHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250
ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dD
b2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkp
OworICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBkcm9wU2hhZG93LmNvbG9yLmNvbG9y
V2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAg
ZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAg
ICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNldC53
aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0
aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3du
IGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNo
YWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSA/IC0xIDogMSk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgp
ICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwogICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9z
aXRpb24oY2dDb250ZXh0LCBzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpOwogICAgICAgICBDR0Nv
bnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzKTsKICAgICAgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKSB7Ci0g
ICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBwb2ludC54KCkg
KyBzaGFkb3dPZmZzZXQud2lkdGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2lu
dC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgQ0dDb250ZXh0U2V0
VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgZHJvcFNoYWRvdy5vZmZzZXQud2lk
dGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyBkcm9wU2hhZG93
Lm9mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFk
dmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzKTsKICAgICAgICAg
fQogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CkBAIC0y
MDgsNyArMjA1LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwKICAgICB9CiAKICAgICBpZiAo
aGFzU2ltcGxlU2hhZG93KQotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRv
d09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93KTsKIAogICAgIEZvbnRDYXNjYWRlOjpzZXRGb250
U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBvbGRGb250U21vb3RoaW5nU3R5bGUpOwogICAgIENH
Q29udGV4dFNldFRleHRNYXRyaXgoY2dDb250ZXh0LCBzYXZlZE1hdHJpeCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2Uu
Y3BwCmluZGV4IDNjZjc0NjBjODBlM2JlMWQ1YmEzZjBjZWQ3YzE5YjI1ZGYyOWFiZjIuLjc4NWU5
NGJlY2YwN2NkNGE4NGM5YzM0ZDljZWNjODM4NTdlMDY5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBA
IC0yOTIsMTIgKzI5MiwxMiBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpkcmF3Qm94
ZXMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QoMiwg
Miwgc2l6ZS53aWR0aCgpIC0gMywgc2l6ZS5oZWlnaHQoKSAtIDMpOwogICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVz
cygzKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaFdpZHRocywgMCk7CisgICAgY29u
dGV4dC5zZXRMaW5lRGFzaCh7IG1fZGFzaFdpZHRocywgMCB9KTsKICAgICBtX3BhdGguYWRkUmVj
dChmcmFtZVJlY3QpOwogICAgIG1fcGF0aC5jbG9zZVN1YnBhdGgoKTsKICAgICBjb250ZXh0LnN0
cm9rZVBhdGgobV9wYXRoKTsKIAotICAgIGNvbnRleHQuc2V0TGluZURhc2goRGFzaEFycmF5KCks
IDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IH0sIDAgfSk7CiAgICAgbV9wYXRoLmNs
ZWFyKCk7CiAgICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIGJveFRvcCArIGJveFNpemUp
KTsKICAgICBtX3BhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoc2l6ZS53aWR0aCgpLCBib3hUb3Ag
KyBib3hTaXplKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVu
dGZ1bFBhaW50Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1
bFBhaW50Q2hlY2tlci5jcHAKaW5kZXggMWIxODJhMWQzNmI3Y2ZhYWEwYjE2OWQwZDhjODU0MzVm
NDNiNzY3ZC4uZTgwZjJlZTg5MTkzOTE0NDE4ZTg3OGJmMGE0YTI4NDBlZTY4OWQwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNw
cApAQCAtMzksNyArMzksNyBAQCBib29sIENvbnRlbnRmdWxQYWludENoZWNrZXI6OnF1YWxpZmll
c0ZvckNvbnRlbnRmdWxQYWludChGcmFtZVZpZXcmIGZyYW1lVmlldykKICAgICBmcmFtZVZpZXcu
c2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMp
OwogICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyh0cnVlKTsKIAotICAgIE51
bGxHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOworICAgIE51
bGxHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoZnJhbWVWaWV3LnJlbmRlclZpZXcoKS0+
ZG9jdW1lbnRSZWN0KCksIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVh
c29uczo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KTsKICAgICBmcmFtZVZpZXcucGFpbnQoY2hl
Y2tlckNvbnRleHQsIGZyYW1lVmlldy5yZW5kZXJWaWV3KCktPmRvY3VtZW50UmVjdCgpKTsKIAog
ICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyhvbGRFbnRpcmVDb250ZW50cyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcAppbmRl
eCBjOWFiMjE3NjE0MWZhN2EzMzlhMjA5N2IzYWJmOTc2NTA3ODdlNGYxLi40YmZmOGQwMDgzOTI1
MTRjYmU2MmNhOTVkNGU3NDNmYzE5N2YwMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBMZWdhY3lF
bGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnMKICAgICBib29sIHNldFNoYWRvdyA9IGZhbHNlOwogICAgIGlmIChsaW5lU3R5
bGUudGV4dFNoYWRvdygpKSB7CiAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0gbGluZVN0eWxl
LmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPmNvbG9y
KCkpOwotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0
U2hhZG93KCktPngoKS52YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUo
KSksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9y
KTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgTGF5b3V0U2l6ZShsaW5lU3R5bGUu
dGV4dFNoYWRvdygpLT54KCkudmFsdWUoKSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+eSgpLnZh
bHVlKCkpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFkb3dD
b2xvciB9KTsKICAgICAgICAgc2V0U2hhZG93ID0gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDI0Yzgy
YzlkNmJkNDNmNzRiYTA1YWI1YWM3Njc5M2Q3NWQxNWU1NzcuLjhkOTdkMjU3MWUyNDUzZGYxOTI4
YmRlNmM3N2M3NjMxNWZiYzg4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNzA1LDcgKzcwNSw3IEBAIHN0YXRpYyB2b2lk
IGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCgpOwogCiAg
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFkb3ctPngoKS52YWx1ZSgpLCBib3hTaGFk
b3ctPnkoKS52YWx1ZSgpKTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJv
eFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0
ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8g
U2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Cisg
ICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1
cygpLnZhbHVlKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+
Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01v
ZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiB9CiAKIEludGVycG9s
YXRpb25RdWFsaXR5IFJlbmRlckJveE1vZGVsT2JqZWN0OjpjaG9vc2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEltYWdlJiBpbWFnZSwgY29uc3Qgdm9pZCog
bGF5ZXIsIGNvbnN0IExheW91dFNpemUmIHNpemUpCkBAIC0yMDg3LDcgKzIwODcsNyBAQCB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhdXRvIGxp
bmVEYXNoID0gRGFzaEFycmF5Ojpmcm9tKGRhc2hMZW5ndGgsIGdhcExlbmd0aCk7Ci0gICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIGRhc2hM
ZW5ndGgpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92
ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRp
Z2h0IGNvcm5lcnM6CkBAIC0yNDU2LDcgKzI0NTYsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJl
YwogICAgICAgICAgICAgRmxvYXRQb2ludCBzbmFwcGVkU2hhZG93T3JpZ2luID0gRmxvYXRQb2lu
dChyb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi54KCksIGRldmljZVNjYWxlRmFj
dG9yKSwgcm91bmRUb0RldmljZVBpeGVsKHNoYWRvd1JlY3RPcmlnaW4ueSgpLCBkZXZpY2VTY2Fs
ZUZhY3RvcikpOwogICAgICAgICAgICAgRmxvYXRTaXplIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSBz
bmFwcGVkU2hhZG93T3JpZ2luIC0gcGl4ZWxTbmFwcGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9u
KCk7CiAKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/
IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwor
ICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc25hcHBlZFNoYWRvd09mZnNldCwg
c2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8g
U2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsK
IAogICAgICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4g
SG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMjU1OCw3ICsyNTU4LDcgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNl
dDsKIAogICAgICAgICAgICAgYXV0byBzbmFwcGVkU2hhZG93T2Zmc2V0ID0gcm91bmRTaXplVG9E
ZXZpY2VQaXhlbHMoc2hhZG93T2Zmc2V0LCBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNo
YWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2Rl
OjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICAgICAgICAgIGNvbnRl
eHQuc2V0RHJvcFNoYWRvdyh7IHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAgICAgICAgICAgICBjb250
ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxT
bmFwcGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA4NTBiZGU0OGU0OTI4ZTg2ZGMxNzZi
NjIzMjFmZWVkOWI2ODZjM2NkLi44Y2Y5NjFlMGJjMjM2NGU5NjJjZGE4ODFmODU5ZTRmMzFhM2M5
ODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTIyNTMs
MTQgKzIyNTMsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcnMo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclAKICNpZiBFTkFCTEUoQ1NTX0NP
TVBPU0lUSU5HKQogICAgICAgICBib29sIHVzZXNDb21wb3NpdGVPcGVyYXRpb24gPSBoYXNCbGVu
ZE1vZGUoKSAmJiAhKHJlbmRlcmVyKCkuaXNMZWdhY3lTVkdSb290KCkgJiYgcGFyZW50KCkgJiYg
cGFyZW50KCktPmlzUmVuZGVyVmlld0xheWVyKCkpOwogICAgICAgICBpZiAodXNlc0NvbXBvc2l0
ZU9wZXJhdGlvbikKLSAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNv
bnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpKTsKKyAgICAgICAgICAgIGNv
bnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIGJs
ZW5kTW9kZSgpIH0pOwogI2VuZGlmCiAKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5j
eUxheWVyKHJlbmRlcmVyKCkub3BhY2l0eSgpKTsKIAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJ
TkcpCiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAgICAgICAgY29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwg
QmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2Rl
KHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAj
ZW5kaWYKIAogI2lmZGVmIFJFVkVBTF9UUkFOU1BBUkVOQ1lfTEFZRVJTCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDVmOThiOTEyNGEz
NDlhYzc1NTc5ZjcxMTM1ZWUwZjM4YWJiNGYxMmQuLjNlMmU2YmYxZGU1ZDU0ZWIzOGQ5MjdhNTFm
MDdjODkxMGFlNmMxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCkBAIC0xODMxLDcgKzE4MzEsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50
UmVnaW9uRm9yTGF5ZXIgPSBbJl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAg
ICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgICAgIGF1dG8gZGlydHlSZWN0
ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoZ3JhcGhpY3NMYXllci5vZmZzZXRGcm9tUmVuZGVyZXIo
KSksIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKTsKKyAgICAKKyAgICAgICAgTnVsbEdyYXBoaWNzQ29u
dGV4dCBudWxsQ29udGV4dChkaXJ0eVJlY3QsIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52
YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgICAgIEV2ZW50UmVnaW9uIGV2ZW50UmVnaW9u
OwogI2lmIEVOQUJMRShFRElUQUJMRV9SRUdJT04pCiAgICAgICAgIGlmIChyZW5kZXJlcigpLnBh
Z2UoKS5zaG91bGRCdWlsZEVkaXRhYmxlUmVnaW9uKCkpCkBAIC0xODUzLDggKzE4NTUsNyBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgICAgICAgICAg
ZXZlbnRSZWdpb25Db250ZXh0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KC1sYXll
ck9mZnNldCwgZ3JhcGhpY3NMYXllci5zaXplKCkpKSwgcmVuZGVyZXIoKS5zdHlsZSgpKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGF1dG8gZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChGbG9h
dFJlY3QoRmxvYXRQb2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3Jh
cGhpY3NMYXllci5zaXplKCkpKTsKLSAgICAgICAgcGFpbnRJbnRvTGF5ZXIoJmdyYXBoaWNzTGF5
ZXIsIG51bGxDb250ZXh0LCBkaXJ0eVJlY3QsIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7Cisg
ICAgICAgIHBhaW50SW50b0xheWVyKCZncmFwaGljc0xheWVyLCBudWxsQ29udGV4dCwgZW5jbG9z
aW5nSW50UmVjdChkaXJ0eVJlY3QpLCB7IH0sICZldmVudFJlZ2lvbkNvbnRleHQpOwogCiAgICAg
ICAgIGV2ZW50UmVnaW9uLnRyYW5zbGF0ZSh0b0ludFNpemUobGF5ZXJPZmZzZXQpKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDMwY2QzNDNlYTdk
ZjkxNjhjYzNjZGU0N2RiZWY4Zjc1OWU4OGY3MzEuLjI1NmZjNzQ5NTZkYTMzODZhNTRkMzUyZGUx
MWI2ZmY3MzY2OWExZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MubW0KQEAgLTYwNSw3ICs2MDUsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludFRleHRG
aWVsZElubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdAogICAgIGNv
bnN0IEZsb2F0U2l6ZSBpbm5lclNoYWRvd09mZnNldCB7IDAsIDUgfTsKICAgICBjb25zdGV4cHIg
YXV0byBpbm5lclNoYWRvd0JsdXIgPSAxMC4wZjsKICAgICBhdXRvIGlubmVyU2hhZG93Q29sb3Ig
PSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMCwgMCwgMCwgMC4wNGYgfTsKLSAgICBjb250ZXh0LnNldFNo
YWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRvd0NvbG9y
KTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBpbm5lclNoYWRvd09mZnNldCwgaW5uZXJT
aGFkb3dCbHVyLCBpbm5lclNoYWRvd0NvbG9yIH0pOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVyU2hhZG93UGF0aDsKQEAgLTIwODAsNyAr
MjA4MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKElt
YWdlJiBpbWFnZSwgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgLy8gVXNlIHRoZSBHcmFwaGlj
c0NvbnRleHQgZnVuY3Rpb24sIGJlY2F1c2UgaXQgY2FsY3VsYXRlcyB0aGUgYmx1ciByYWRpdXMg
aW4gY29udGV4dCBzcGFjZSwKICAgICAvLyByYXRoZXIgdGhhbiBzY3JlZW4gc3BhY2UuCiAgICAg
Y29uc3RleHByIGF1dG8gc2hhZG93Q29sb3IgPSBDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxwaGFC
eXRlKDI2KTsKLSAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IH0sIDE2
LCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3coeyBGbG9h
dFNpemUgeyB9LCAxNiwgc2hhZG93Q29sb3IgfSk7CiAKICAgICAvLyBUaGUgY2lyY2xlIG11c3Qg
aGF2ZSBhbiBhbHBoYSBjaGFubmVsIHZhbHVlIG9mIDEgZm9yIHRoZSBzaGFkb3cgY29sb3IgdG8g
YXBwZWFyLgogICAgIENHRmxvYXQgY2lyY2xlQ29sb3JDb21wb25lbnRzWzRdID0geyAwLCAwLCAw
LCAxIH07CkBAIC0yMjczLDcgKzIyNzMsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludENo
ZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgYwogCiAg
ICAgYm9vbCBpc0VtcHR5ID0gIXN0YXRlcy5jb250YWluc0FueSh7IENvbnRyb2xTdGF0ZXM6OlN0
YXRlczo6Q2hlY2tlZCwgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpJbmRldGVybWluYXRlIH0pOwog
ICAgIGF1dG8gZmlyc3RTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4geyAwLCAwLCAwLCBp
c0VtcHR5ID8gMC4wNWYgOiAwLjFmIH07Ci0gICAgY29udGV4dC5zZXRTaGFkb3coaW5uZXJTaGFk
b3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgZmlyc3RTaGFkb3dDb2xvcik7CisgICAgY29udGV4
dC5zZXREcm9wU2hhZG93KHsgaW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgZmly
c3RTaGFkb3dDb2xvciB9KTsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2sp
OwogCiAgICAgUGF0aCBpbm5lclNoYWRvd1BhdGg7CkBAIC0yMjkwLDcgKzIyOTAsNyBAQCB2b2lk
IFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgYwogICAgIGNvbnRleHQuZmlsbFBhdGgoaW5uZXJTaGFkb3dQYXRo
KTsKIAogICAgIGNvbnN0ZXhwciBhdXRvIHNlY29uZFNoYWRvd0NvbG9yID0gRGlzcGxheVAzPGZs
b2F0PiB7IDEsIDEsIDEsIDAuNWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUg
eyAwLCAwIH0sIDEsIHNlY29uZFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFk
b3coeyBGbG9hdFNpemUgeyAwLCAwIH0sIDEsIHNlY29uZFNoYWRvd0NvbG9yIH0pOwogCiAgICAg
Y29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDAxMGVjYmFlZDg3YTczYTQyMGFmYjk3ZThl
ODBmZWE2Mzc5ZmVkM2UuLjEwZGM5MGU1N2U1YWUwZjQyNWEwZGFhYTM2NGY4MTRlNDQ5NDk5MDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI4MTYs
NyArMjgxNiw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVy
KGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQsCiAgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihwbGFjZWhvbGRlckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJXaWR0aCk7CiAgICAgY29udGV4dC5z
ZXRTdHJva2VTdHlsZShEYXNoZWRTdHJva2UpOwotICAgIGNvbnRleHQuc2V0TGluZURhc2goe2F0
dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGh9LCAwKTsKKyAgICBjb250ZXh0LnNl
dExpbmVEYXNoKHsgeyBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNoTGVuZ3RoIH0sIDAg
fSk7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKGJvcmRlclBhdGgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDY3
NTU2OGFmZjYxMThmMDEzYmQxZDRmNTVhNmMzNjRmYThhZjM4ZTguLjgzMDliMmY4ZDRhMzFmYTAz
YjFhYmY4NDM5ZGEwZjNlZjE2Mjg0MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBAIC0yNzEsNyArMjcxLDcgQEAgdm9pZCBU
ZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKGNvbnN0IFRl
eHRSdW4mIHRleHRSdW4sIGMKICAgICAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93
LT5jb2xvcigpOwogICAgICAgICAgICAgaWYgKG1fc2hhZG93Q29sb3JGaWx0ZXIpCiAgICAgICAg
ICAgICAgICAgbV9zaGFkb3dDb2xvckZpbHRlci0+dHJhbnNmb3JtQ29sb3Ioc2hhZG93Q29sb3Ip
OwotICAgICAgICAgICAgbV9jb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93WCwgc2hh
ZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFkb3dDb2xv
cik7CisgICAgICAgICAgICBtX2NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZShzaGFk
b3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQpLCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHNo
YWRvd0NvbG9yIH0pOwogICAgICAgICAgICAgc2hhZG93ID0gc2hhZG93LT5uZXh0KCk7CiAgICAg
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKaW5kZXggODg1
ZDgyNmVlOWU3OTZmNGI1YzViNTgzM2Y3MWEwMjhjNDU0MWE3YS4uZmU4ODY5YzE5ZTVmOGQ0M2I3
ZmExNmU0MDFiNGZiYzZkY2Y3ZWVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBh
aW50ZXIuY3BwCkBAIC03NCw3ICs3NCw3IEBAIFNoYWRvd0FwcGxpZXI6OlNoYWRvd0FwcGxpZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csCiAgICAg
fQogCiAgICAgaWYgKCFtX2F2b2lkRHJhd2luZ1NoYWRvdykKLSAgICAgICAgY29udGV4dC5zZXRT
aGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93Q29sb3IpOwor
ICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cy52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsKIH0KIAogaW5saW5lIGJvb2wgU2hhZG93QXBwbGll
cjo6aXNMYXN0U2hhZG93SXRlcmF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1BhdGguY3BwCmluZGV4IDdlZDUzN2M5Mjc5Mzc3MGY0NDg4YWUyOWRmNDA3
MjdkN2ViMWEzYTkuLjZjNzMwZWYwN2U0OGM3ZWNmOGM0MGUzN2UwMDM0NWNmYWI1NmM2OGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcApAQCAt
NjksNyArNjksNyBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlVXBkYXRlZFN0
cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKIHN0YXRpYyB2b2lkIHVzZVN0cm9rZVN0eWxlVG9GaWxs
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoYXV0byBncmFkaWVudCA9IGNv
bnRleHQuc3Ryb2tlR3JhZGllbnQoKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQo
KmdyYWRpZW50LCBjb250ZXh0LnN0YXRlKCkuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7
CisgICAgICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KCpncmFkaWVudCwgY29udGV4dC5zdHJv
a2VTcGFjZVRyYW5zZm9ybSgpKTsKICAgICBlbHNlIGlmIChQYXR0ZXJuKiBwYXR0ZXJuID0gY29u
dGV4dC5zdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGNvbnRleHQuc2V0RmlsbFBhdHRlcm4oKnBh
dHRlcm4pOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IGNjMzhlYzcwMzBlNjBjZTE3NTliMTMyODdkZTI1Zjcz
ZDU2NWM4NTguLmI2NTg2OGQxYmQzNGM5MGQ0YmJmZGQ0NzdhZDJjNzQyODJhMDU2YWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApA
QCAtNTAxLDEwICs1MDEsMTIgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0cm9rZVN0
eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChjYW5TZXRMaW5lRGFzaCkKLSAgICAgICAgICAgIGNvbnRleHQuc2V0TGlu
ZURhc2goZGFzaEFycmF5LCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0eWxlLnN0
cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBjb250ZXh0LnNl
dExpbmVEYXNoKHsgV1RGTW92ZShkYXNoQXJyYXkpLCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVu
Z3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZhY3RvciB9KTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7
CiAgICAgfQorCisgICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCiB2b2lkIFNW
R1JlbmRlclN1cHBvcnQ6OnN0eWxlQ2hhbmdlZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMmZiOGYzM2E4NzBkZmNjZWI2
MmUxNDk2NTZiMTQ0MzcyMmViZWEyZC4uZjU3OWU1YTc1ZmU5MTBmNmU1YjU4YTlhZWZiNjgzNTg5
NjIyMTBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xMTUsMTIgKzExNSwxMiBAQCB2b2lkIFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIFBhaQogICAgICAgICBpZiAob3BhY2l0eSA8IDEgfHwgaGFzQmxlbmRNb2RlIHx8IGlzb2xh
dGVNYXNrRm9yQmxlbmRpbmcgfHwgaGFzSXNvbGF0aW9uKSB7CiAKICAgICAgICAgICAgIGlmICho
YXNCbGVuZE1vZGUpCi0gICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRp
b24oKSwgc3R5bGUuYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5j
b250ZXh0KCkuc2V0Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY29tcG9z
aXRlT3BlcmF0aW9uKCksIHN0eWxlLmJsZW5kTW9kZSgpIH0pOwogCiAgICAgICAgICAgICBtX3Bh
aW50SW5mby0+Y29udGV4dCgpLmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAKICAg
ICAgICAgICAgIGlmIChoYXNCbGVuZE1vZGUpCi0gICAgICAgICAgICAgICAgbV9wYWludEluZm8t
PmNvbnRleHQoKS5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9wYWludEluZm8tPmNvbnRleHQoKS5j
b21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAgICAgICAgICAg
IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJbmZvLT5j
b250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsIH0pOwogCiAg
ICAgICAgICAgICBtX3JlbmRlcmluZ0ZsYWdzIHw9IEVuZE9wYWNpdHlMYXllcjsKICAgICAgICAg
fQpAQCAtMjczLDcgKzI3Myw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9y
ZWdyb3VuZChSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikKIAogICAgIC8vIEludmFs
aWRhdGUgYW4gZXhpc3RpbmcgYnVmZmVyIGlmIHRoZSBzY2FsZSBpcyBub3QgY29ycmVjdC4KICAg
ICBpZiAoaW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9
IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVs
eUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTSgpOwogICAgICAgICBJbnRTaXplIGV4cGFu
ZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKTsKICAg
ICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJv
dW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGljX2Nhc3Q8aW50
PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxlKCkp
KSk7CiAgICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggNGRkN2Y4MGUz
Nzc3OTg3ZGNiNzBjMWEzYzhhODdjZDhhNGZkNmZiOS4uY2Q4OGFkZjA4ZGRhODAzYmZkOTNmODk1
Nzc0MDc2ODZhYzRjNTQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCkBAIC0yNjksMTQgKzI2OSwxNCBAQCBJbWFnZURyYXdSZXN1bHQgU1ZHSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlYwogICAgIEFT
U0VSVCh2aWV3KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKLSAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBv
c2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGNvbnRleHQuc2V0Q29t
cG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1v
ZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSk7CiAK
ICAgICBmbG9hdCBhbHBoYSA9IGNvbnRleHQuYWxwaGEoKTsKICAgICBib29sIGNvbXBvc2l0aW5n
UmVxdWlyZXNUcmFuc3BhcmVuY3lMYXllciA9IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSAh
PSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciB8fCBvcHRpb25zLmJsZW5kTW9kZSgpICE9
IEJsZW5kTW9kZTo6Tm9ybWFsIHx8IGFscGhhIDwgMTsKICAgICBpZiAoY29tcG9zaXRpbmdSZXF1
aXJlc1RyYW5zcGFyZW5jeUxheWVyKSB7CiAgICAgICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihhbHBoYSk7Ci0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVy
LCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGhvbm9yIG9wdGlvbnMub3JpZW50YXRpb24oKSwgc2luY2UgSW1hZ2VCaXRtYXAncyBmbGlwWSBo
YW5kbGluZyByZWxpZXMgb24gaXQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzEwMDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCA1NDM4MTgyZGRl
ODc2M2ViYWQzOGYxOTJkZjc5NWFhMDYwYjY1MWJiLi44ZGEzOTBmNmRhNzBlMzc5NTUwYTU3MmUw
OWUwODQxMTg5YzJkZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC03NCwz
MSArNzQsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJlc3RvcmUoKQogICAg
IGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgaGFu
ZGxlSXRlbShEaXNwbGF5TGlzdDo6VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6Um90YXRlKGFuZ2xlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBoYW5kbGVJ
dGVtKERpc3BsYXlMaXN0OjpTY2FsZShzY2FsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBo
YW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRDVE0oY3RtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBj
dG0pCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE0oY3RtKSk7
Ci19Ci0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0SW5saW5lRmlsbENvbG9y
KERpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3ImJiBpdGVtKQogewogICAgIGhhbmRsZUl0
ZW0oV1RGTW92ZShpdGVtKSk7CkBAIC0xMjgsNDAgKzEwMywxNSBAQCB2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OnNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSYmIGl0ZW0pCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH07CiAKLSAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1h
Z2UoaXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkpCisgICAg
aWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGUoKS5zdHJva2VCcnVzaCgpLnBhdHRl
cm4oKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShp
dGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKCFm
aXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwogfQogCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2Fw
KQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVDYXAobGluZUNhcCkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVEYXNoKERpc3BsYXlM
aXN0OjpTZXRMaW5lRGFzaCYmIGl0ZW0pCi17Ci0gICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0p
KTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5l
Sm9pbiBsaW5lSm9pbikKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRMaW5lSm9p
bihsaW5lSm9pbikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldE1p
dGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2V0
TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OmNsZWFyU2hhZG93KCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDbGVhclNoYWRv
dygpKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGlwKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKICAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDbGlwKHJlY3Qp
KTsKQEAgLTM3MSwxNCArMzIxLDkgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpm
aWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3IKICAgICBoYW5k
bGVJdGVtKFdURk1vdmUoaXRlbSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OmZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0g
ICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9y
LCBvcCwgYmxlbmRNb2RlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpGaWxsUm91bmRl
ZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOworICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxp
c3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcikpOwogfQogCiB2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCAzYmJhZjc2NWQwNWY0NGFi
ZjRkOTYxZTc2NmNlNjU0Njk4ZWRlMjk0Li44MTg4OTY2YWZmYTcwOWU2ZmQwYTMxYmZjYTZjM2U3
MTg1NjVjNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTU5LDIwICs1OSwxMCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUoKTsKLSAgICB2
b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBh
bmdsZSk7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNjYWxlKTsK
LSAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2
b2lkIGNvbmNhdGVuYXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwogICAg
IHZvaWQgc2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVG
aWxsQ29sb3ImJik7CiAgICAgdm9pZCBzZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3ImJik7CiAgICAgdm9pZCBzZXRTdHJva2VUaGlj
a25lc3MoZmxvYXQpOwogICAgIHZvaWQgc2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlJiYpOwotICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKTsKLSAgICB2
b2lkIHNldExpbmVEYXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmKTsKLSAg
ICB2b2lkIHNldExpbmVKb2luKFdlYkNvcmU6OkxpbmVKb2luKTsKLSAgICB2b2lkIHNldE1pdGVy
TGltaXQoZmxvYXQpOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKTsKICAgICB2b2lkIGNsaXAoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCk7CkBAIC05Nyw4ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoQ29sb3IoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lk
IGZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhH
cmFkaWVudCYmKTsKLSAgICB2b2lkIGZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJh
dG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNv
cmU6OkJsZW5kTW9kZSk7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAgICAgdm9pZCBmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIGZpbGxMaW5lKGNvbnN0IFdlYkNvcmU6Okxp
bmVEYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCmlu
ZGV4IDI4MDJmZmU4ZjgzOTdjMGVkNGRmMTIxYTAxN2ZlNzgxMDhmZjZjMjAuLjQxNGMzMWExMzIw
YzBiMmU3ODZiYzhkOWY2NTk4MTAyZDg3MGY0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLm1lc3NhZ2VzLmluCkBAIC0yNSw0NyArMjUsMzUgQEAKIG1lc3NhZ2VzIC0+IFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIFNhdmUo
KQogICAgIFJlc3RvcmUoKQotICAgIFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgIFJv
dGF0ZShmbG9hdCBhbmdsZSkKLSAgICBTY2FsZShXZWJDb3JlOjpGbG9hdFNpemUgc2NhbGUpCi0g
ICAgU2V0Q1RNKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG0pCi0gICAgQ29uY2F0ZW5hdGVD
VE0oV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bSkKKwogICAgIFNldElubGluZUZpbGxDb2xv
cihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yIGl0ZW0pCiAgICAgU2V0
SW5saW5lU3Ryb2tlQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNv
bG9yIGl0ZW0pCiAgICAgU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBT
ZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUgaXRlbSkKLSAgICBTZXRMaW5l
Q2FwKGVudW06dWludDhfdCBXZWJDb3JlOjpMaW5lQ2FwIGxpbmVDYXApCi0gICAgU2V0TGluZURh
c2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIGl0ZW0pCi0gICAgU2V0TGluZUpv
aW4oZW51bTp1aW50OF90IFdlYkNvcmU6OkxpbmVKb2luIGxpbmVKb2luKQotICAgIFNldE1pdGVy
TGltaXQoZmxvYXQgbGltaXQpCi0gICAgQ2xlYXJTaGFkb3coKQorI2lmIFVTRShDRykKKyAgICBB
cHBseVN0cm9rZVBhdHRlcm4oKQorICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorI2VuZGlmCisgICAg
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKworICAgIEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICBFbmRUcmFuc3BhcmVuY3lMYXllcigp
CisKICAgICBDbGlwKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIENsaXBQYXRoKFdlYkNv
cmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQog
ICAgIENsaXBPdXQoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xpcFRvSW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKICAgICBDbGlw
T3V0VG9QYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBDbGlwUGF0aChXZWJDb3JlOjpQYXRo
IHBhdGgsIGVudW06dWludDhfdCBXZWJDb3JlOjpXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICBEcmF3
R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCi0gICAgRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI+IHNvdXJjZUltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IHNv
dXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyKQotICAgIERyYXdJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBXZWJDb3JlOjpG
bG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9w
dGlvbnMpCi0gICAgRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFnZVNpemUsIFdl
YkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0
cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIERyYXdTeXN0
ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVtSW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpG
bG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQotICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVj
dCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBoYXNlLCBXZWJDb3JlOjpG
bG9hdFNpemUgc3BhY2luZywgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9w
dGlvbnMpCi0gICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotICAgIEVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkKLSAgICBEcmF3UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotICAgIERyYXdMaW5lKFdlYkNvcmU6OkZsb2F0UG9p
bnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MikKLSAgICBEcmF3TGluZXNGb3JU
ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0IGl0ZW0pCi0gICAgRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgc3RydWN0IFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgIERyYXdFbGxpcHNlKFdl
YkNvcmU6OkZsb2F0UmVjdCByZWN0KQotICAgIERyYXdQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkK
LSAgICBEcmF3Rm9jdXNSaW5nUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQotICAgIERyYXdGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisgICAgQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKKworICAgIENsZWFyUmVjdChX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKwogICAgIEZpbGxSZWN0KFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0KQogICAgIEZpbGxSZWN0V2l0aENvbG9yKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBX
ZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQgaXRlbSkKLSAgICBGaWxsQ29tcG9zaXRl
ZFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGVudW06dWludDhfdCBXZWJD
b3JlOjpCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpG
bG9hdFJvdW5kZWRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6QmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBGaWxsUm91bmRlZFJlY3QoV2ViQ29y
ZTo6RmxvYXRSb3VuZGVkUmVjdCByZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdCByb3VuZGVkSG9sZVJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorCisg
ICAgRmlsbEVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCiAgICAgRmlsbExpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRhdGEp
CiAgICAgRmlsbEFyYyhzdHJ1Y3QgV2ViQ29yZTo6QXJjRGF0YSBkYXRhKQpAQCAtNzMsMTEgKzYx
LDEwIEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRl
ZCBTdHJlYW0gewogICAgIEZpbGxCZXppZXJDdXJ2ZShzdHJ1Y3QgV2ViQ29yZTo6QmV6aWVyQ3Vy
dmVEYXRhIGRhdGEpCiAjZW5kaWYKICAgICBGaWxsUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0g
ICAgRmlsbEVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ29udmVydFRvTHVt
aW5hbmNlTWFzaygpCi0gICAgVHJhbnNmb3JtVG9Db2xvclNwYWNlKFdlYkNvcmU6OkRlc3RpbmF0
aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3Jl
OjpNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRl
c3RpbmF0aW9uKQorCiAgICAgU3Ryb2tlUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxv
YXQgbGluZVdpZHRoKQorCisgICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBTdHJva2VMaW5lKHN0cnVjdCBX
ZWJDb3JlOjpMaW5lRGF0YSBkYXRhKQogICAgIFN0cm9rZUFyYyhzdHJ1Y3QgV2ViQ29yZTo6QXJj
RGF0YSBkYXRhKQpAQCAtODUsMTMgKzcyLDMxIEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIFN0cm9rZUJlemllckN1cnZl
KHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRpZgogICAgIFN0cm9r
ZVBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIFN0cm9rZUVsbGlwc2UoV2ViQ29yZTo6Rmxv
YXRSZWN0IHJlY3QpCi0gICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotI2lm
IFVTRShDRykKLSAgICBBcHBseVN0cm9rZVBhdHRlcm4oKQotICAgIEFwcGx5RmlsbFBhdHRlcm4o
KQorCisgICAgRHJhd1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykKKyAgICBEcmF3TGluZShXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MSwgV2ViQ29y
ZTo6RmxvYXRQb2ludCBwb2ludDIpCisKKyAgICBEcmF3RWxsaXBzZShXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCkKKyAgICBEcmF3UGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCisKKyAgICBEcmF3Rm9j
dXNSaW5nUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorICAgIERyYXdGb2N1c1JpbmdSZWN0cyhWZWN0b3I8V2Vi
Q29yZTo6RmxvYXRSZWN0PiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29y
ZTo6Q29sb3IgY29sb3IpCisKKyAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNlSW1hZ2VJZGVu
dGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJl
ZmVyZW5jZSBmaWx0ZXIpCisgICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVj
dCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3U3lzdGVtSW1hZ2Uo
UmVmPFdlYkNvcmU6OlN5c3RlbUltYWdlPiBzeXN0ZW1JbWFnZSwgV2ViQ29yZTo6RmxvYXRSZWN0
IGRlc3RpbmF0aW9uUmVjdCkKKyAgICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGlt
YWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qg
c3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCisg
ICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdl
SWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJl
Y3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0sIFdlYkNvcmU6
OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBzdHJ1Y3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyNpZiBFTkFCTEUoVklERU8pCisg
ICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciBpZGVu
dGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCiAjZW5kaWYKLSAgICBBcHBs
eURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgRHJhd0dseXBocyhX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocyBpdGVtKQorICAgIERyYXdMaW5lc0ZvclRl
eHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKKyAgICBEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisKKyAgICBDb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKKyAgICBUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRp
b25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKaW5kZXggODU3N2NiYmRlNmQzOTAxZDM0
NzA3NjFlZDMwZjc5ZDk4ZTgyYjk4ZC4uNmNmYmFiY2E3YmNmYmVkYzU5NTQ4M2U4ZWViMWQ1YWIx
MjA5NjZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNw
cApAQCAtMzIsMzYgKzMyLDIxIEBACiAjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
bWFnZUJ1ZmZlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5ZXIuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZl
ciwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiByZW5kZXJpbmdCYWNrZW5kLCBjb25zdCBG
bG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0s
IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJh
d0dseXBocykKLSAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcih7IH0sIGluaXRpYWxDbGlwLCBp
bml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBEaXNwbGF5TGlzdDo6UmVj
b3JkZXIoaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKICAg
ICAsIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpKQogICAgICwgbV9pbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikKICAg
ICAsIG1fcmVuZGVyaW5nQmFja2VuZChyZW5kZXJpbmdCYWNrZW5kKQogewogfQogCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q29udmVydFRv
THVtaW5hbmNlTWFzaygpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIGNvbG9yU3BhY2UpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKLX0KLQogUmVu
ZGVyaW5nTW9kZSBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlbmRlcmluZ01vZGUo
KSBjb25zdAogewogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyID8gbV9pbWFnZUJ1ZmZlci0+cmVu
ZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKQEAgLTc3LDMxICs2
Miw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSZXN0b3Jl
KCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSZXN0b3Jl
KCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkVHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSb3RhdGUoYW5nbGUpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYgc2NhbGUpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6U2NhbGUoc2NhbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpT
ZXRDVE0odHJhbnNmb3JtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb25j
YXRlbmF0ZUNUTSh0cmFuc2Zvcm0pKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikK
IHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRJbmxp
bmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciB7IGNvbG9yIH0pKTsK
QEAgLTExNyw5MiArNzcsMjYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNr
bmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUg
eyBzdGF0ZSwgZmxhZ3MgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmIGFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldExpbmVEYXNoKERpc3BsYXlM
aXN0OjpTZXRMaW5lRGFzaCB7IGFycmF5LCBkYXNoT2Zmc2V0IH0pKTsKLX0KLQotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGxp
bmVKb2luKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldE1pdGVyTGltaXQobGltaXQp
KTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFy
U2hhZG93KCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpDbGVhclNoYWRvdygpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAocmVjdCkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Q2xpcE91dChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpDbGlwT3V0VG9QYXRoKHBhdGgpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxl
IHJ1bGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsKLX0K
LQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChzb3VyY2VJbWFn
ZSkKLSAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFn
ZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3RhdGUoRGlz
cGxheUxpc3Q6OlNldFN0YXRlIHsgc3RhdGUgfSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9u
dFNtb290aGluZ01vZGUgbW9kZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Ci17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJbWFnZShp
bWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseVN0cm9r
ZVBhdHRlcm4oKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3Rp
bmF0aW9uUmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkFwcGx5RmlsbFBhdHRlcm4oKSk7CiB9CisjZW5kaWYgLy8gVVNFKENHKQogCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQg
c2NhbGVGYWN0b3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFj
dG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRC
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBAIC0yMTUsNDQgKzEwOSwzNCBA
QCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkVuZFRyYW5zcGFyZW5jeUxheWVyKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3
aWR0aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpE
cmF3UmVjdChyZWN0LCB3aWR0aCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKLX0KLQotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZXNGb3JUZXh0KERpc3BsYXlMaXN0OjpEcmF3
TGluZXNGb3JUZXh0IHsgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lk
dGhzLCBwcmludGluZywgZG91YmxlTGluZXMgfSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAocmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5
bGUpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlw
UGF0aChwYXRoLCBydWxlKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd0VsbGlwc2UocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkNsaXBPdXQocmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd1BhdGgocGF0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3Vz
UmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KSk7CiB9CiAK
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5n
UmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVj
dHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xlYXJSZWN0KHJlY3QpKTsKIH0KIAogdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKQEAgLTI3MCwyMyArMTU0LDIyIEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmCiAg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJlY3RXaXRo
R3JhZGllbnQoRGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50IHsgcmVjdCwgZ3JhZGll
bnQgfSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbENvbXBvc2l0ZWRSZWN0
KHJlY3QsIGNvbG9yLCBvcCwgbW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkZpbGxSb3VuZGVkUmVjdChyb3VuZGVkUmVjdCwgY29sb3IpKTsKIH0K
IAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5k
ZWRSZWN0KHJvdW5kZWRSZWN0LCBjb2xvciwgbW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJv
dW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkUmVj
dCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpGaWxsRWxsaXBzZShyZWN0KSk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
LQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxMaW5lKGNv
bnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkZpbGxMaW5lKGRhdGEpKTsKQEAgLTMwNiw3ICsxODksNiBAQCB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0
IEJlemllckN1cnZlRGF0YQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkZpbGxCZXppZXJDdXJ2ZShkYXRhKSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zMTQsMjMgKzE5NiwxNyBAQCB2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpGaWxsUGF0aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEVsbGlwc2UocmVjdCkp
OwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9y
TWVkaWEocGxheWVyLmlkZW50aWZpZXIoKSwgZGVzdGluYXRpb24pKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VSZWN0KHJlY3QsIGJvcmRlclRo
aWNrbmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlN0cm9rZVJlY3QocmVjdCwgd2lkdGgpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VFbGxpcHNlKHJlY3QpKTsKIH0KIAogI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYgZGF0YSkKIHsKICAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VMaW5lKGRhdGEp
KTsKQEAgLTM1MCw3ICsyMjYsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYQogewogICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUJlemllckN1cnZl
KGRhdGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQpAQCAtMzU4LDMzICsyMzMsODQgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VQYXRoKHBhdGgpKTsK
IH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OlN0cm9rZUVsbGlwc2UocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogfQog
Ci12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpDbGVhclJlY3QocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKSk7CiB9CiAKLSNpZiBVU0UoQ0cp
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkRyYXdFbGxpcHNlKHJlY3QpKTsKK30KIAotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpB
cHBseVN0cm9rZVBhdHRlcm4oKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RHJhd1BhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYg
cGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RmlsbFBh
dHRlcm4oKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKIH0KIAotI2Vu
ZGlmIC8vIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1JlY3RzKHJl
Y3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZh
Y3RvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZm
ZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAo
c291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV1RGTW92ZShpZGVudGlmaWVyKSwg
c291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZShSZWY8RmlsdGVyPiB7IGZpbHRl
ciB9KSkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZp
ZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkRyYXdOYXRpdmVJbWFnZShpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGlu
YXRpb25SZWN0KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKK30KKworI2lmIEVOQUJMRShWSURFTykK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24pCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6UGFpbnRGcmFtZUZvck1lZGlhKGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKSk7Cit9Cisj
ZW5kaWYKKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdH
bHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3Qg
RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCit7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNw
bGF5TGlzdDo6RHJhd0dseXBocyB7IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2Nh
bEFuY2hvciwgbW9kZSB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkRyYXdMaW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBG
bG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50
aW5nLCBkb3VibGVMaW5lcyB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQoreworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIocmVjdCwgc3R5bGUpKTsKIH0KIAogYm9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBpbWFnZSkKQEAgLTQzNCwxMSAr
MzYwLDYgQEAgYm9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291
cmNlVXNlKEZvbnQmIGZvbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQoR3JhcGhpY3NDb250ZXh0Rmx1c2hJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6Rmx1c2hDb250ZXh0KGlkZW50aWZpZXIpKTsKLX0KLQogUmVmUHRyPElt
YWdlQnVmZmVyPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRl
cmluZ01ldGhvZCkgY29uc3QKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2Vu
ZCkpIHsKQEAgLTQ2NCw2ICszODUsMjEgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb24KICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBzY2Fs
ZUZhY3RvcigpLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QpOwog
fQogCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5h
bmNlTWFzaygpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Q29udmVydFRvTHVtaW5hbmNlTWFzaygpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2Up
KTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29udGV4
dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRleHQoaWRlbnRp
ZmllcikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaApp
bmRleCA5YjMzYTA2N2ZkMTZiY2NmMTQwNDJjMTk3NGRkNjkxOTQyMjYyNDY4Li5mMmFkOGQwYWE0
NTg1ODlhZWU4MTkwN2Q5YzkwODk2ZDM0YjZmNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiAKIGNsYXNzIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXIgeworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7CiBwdWJs
aWM6CiAgICAgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KFdlYkNvcmU6OkltYWdlQnVm
ZmVyJiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgV2ViQ29y
ZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBXZWJDb3JlOjpE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKICAgICB+UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KCkgPSBkZWZhdWx0OwpAQCAtNTAsNjMgKzUxLDM5
IEBAIHB1YmxpYzoKICAgICB2b2lkIGZsdXNoQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRGbHVzaElkZW50aWZpZXIpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgdm9pZCBzZW5kKFQmJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgaWYgKFVO
TElLRUxZKCFtX3JlbmRlcmluZ0JhY2tlbmQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG1fbmVlZHNGbHVzaCA9IHRydWU7Ci0gICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+c2Vu
ZFRvU3RyZWFtKFdURk1vdmUobWVzc2FnZSksIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVy
KTsKLSAgICB9Ci0KLSAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OwotCiAgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmlu
YWw7CiAKICAgICB2b2lkIHJlY29yZFNhdmUoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFJlc3Rv
cmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRTY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bSYpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6
U1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29s
b3IoV2ViQ29yZTo6U1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0U3Ry
b2tlVGhpY2tuZXNzKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUNh
cChXZWJDb3JlOjpMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNv
bnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkU2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclNo
YWRvdygpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGUmKSBmaW5hbDsKKworI2lmIFVTRShDRykKKyAgICB2b2lkIHJlY29y
ZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0
dGVybigpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBX
ZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFdl
YkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdlYkNv
cmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3
RmlsdGVyZWRJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciosIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBXZWJDb3JlOjpGaWx0ZXImKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNv
cmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2Uq
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3Is
IFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdJ
bWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdO
YXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRHJhd1N5c3RlbUltYWdlKFdlYkNvcmU6OlN5c3RlbUltYWdlJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9jYWxBbmNo
b3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKworICAgIHZv
aWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworCiAg
ICAgdm9pZCByZWNvcmRGaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsK
ICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVj
dFdpdGhHcmFkaWVudChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVu
dCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRl
T3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxs
Um91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEZp
bGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRG
aWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IFdlYkNvcmU6
OkxpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IFdlYkNvcmU6
OkFyY0RhdGEmKSBmaW5hbDsKQEAgLTExNCw5ICs5MSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSYpIGZp
bmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRGaWxsUGF0aChjb25zdCBXZWJDb3JlOjpQYXRo
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3Jl
OjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29u
c3QgV2ViQ29yZTo6TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFN0cm9rZUFyYyhj
b25zdCBXZWJDb3JlOjpBcmNEYXRhJikgZmluYWw7CkBAIC0xMjQsMTMgKzEwMiwyOCBAQCBwcml2
YXRlOgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgV2ViQ29yZTo6QmV6
aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgo
Y29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBz
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFy
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cpCi0gICAg
dm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEFw
cGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2
b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJlY29y
ZERyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkRHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJl
Y29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7
CisKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdl
QnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIFdlYkNv
cmU6OkZpbHRlciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3U3lzdGVt
SW1hZ2UoV2ViQ29yZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCk7CisgICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcmVjb3Jk
UGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKLSAgICB2b2lk
IHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmREcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWdu
ZWQgY291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJDb3Jl
OjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdl
YkNvcmU6OkRhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUmKSBmaW5hbDsKIAogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6TmF0aXZl
SW1hZ2UmKSBmaW5hbDsKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6OkltYWdl
QnVmZmVyJikgZmluYWw7CkBAIC0xNDEsNiArMTM0LDE4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdNZXRob2Q+KSBjb25zdCBmaW5hbDsKICAg
ICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IGZp
bmFsOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNlbmQoVCYmIG1lc3Nh
Z2UpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsKKyAgICAg
ICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwgbV9k
ZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkQXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKICAgICBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXI7CiAgICAg
V2Vha1B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKICAgICBXZWFrUHRy
PFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW5kZXJpbmdCYWNrZW5kOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmlu
ZGV4IDFkNjQzYjZiNDI4OGQwOGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcuLjA3OTkzYjM4MGYx
ZWE3ZDM0OWRkN2ViZmMxNjBjODA0ZGFkNDNlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTUzNCw3ICs1MzQsNyBA
QCB2b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjbwogCiAgICAgLy8gRHJhdyB3aGl0ZSBmcmFtZXMgYXJv
dW5kIHRoZSBob2xlcy4KICAgICAvLyBXZSBkb3VibGUgdGhlIHRoaWNrbmVzcyBiZWNhdXNlIGhh
bGYgb2YgdGhlIHN0cm9rZSB3aWxsIGJlIGVyYXNlZCB3aGVuIHdlIGNsZWFyIHRoZSBob2xlcy4K
LSAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBz
aGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBo
aWNzQ29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRv
d09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAgICBncmFwaGlj
c0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKICAgICBncmFwaGljc0NvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoICogMik7CiAgICAgZm9yIChhdXRvJiBw
YXRoIDogd2hpdGVGcmFtZVBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKaW5k
ZXggZjE2Zjc5NmUwNDdlOTkxOTcyYzBlZDFmNGFlMTEzY2UxNjU2NWMxMC4uNDllMDBiZTMzN2Vh
ZmVlMTI5M2VmMDc3YWRmNjE3Y2RhZTNkNGExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xs
ZXIuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xs
ZXI6OmRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGgKIAogICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0Nv
bnRleHQpOwogCi0gICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhXZWJDb3JlOjpGbG9hdFNp
emUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRv
d0NvbG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IFdlYkNvcmU6OkZs
b2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywg
c2hhZG93Q29sb3IgfSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKGZvdW5k
Q29sb3IpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoaW5kaWNhdG9y
Qm9yZGVyV2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiBmb3VuZEZyYW1lUGF0aHMp
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTk3
YzIwYTRmZjViZTQxZDljMzIwNTdjNTA4MWNmZmM0YjgxYTRhNi4uMmFmODFjMmExZmM1ZjY4YmEw
NDBmM2QwMTRmNDIxN2Y0ZWIzNjFlMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAzLTE0ICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3JhcGhp
Y3NDb250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9ybSBj
b250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mzc3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
VGVzdHNDRy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMi0wMy0x
NCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2dpdC13
ZWJraXRdIEhhbmRsZSBjb21wYXJpbmcgVXNlciBhbmQgQ29udHJpYnV0b3IgdG8gTm9uZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5kZXggOGU0MWM1
YTczYWUzNjg0Y2VkZGYxZjk0ZjlmMTcxODk1MzUxNGM5Zi4uZWJlNjQ0ODcxZTI4ZjUxOWNkMjYx
MjBiOGE4Mjc4ODZjMDE5MDJiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dFRlc3RzQ0cuY3BwCkBAIC01NCw3ICs1NCw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dFRlc3RzLCBCYXNpYykKICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmltYXJ5Q29udGV4
dChwcmltYXJ5Q0dDb250ZXh0LmdldCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlz
cGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3Qs
IHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7
CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIEZsb2F0UmVj
dCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApA
QCAtOTAsMTAgKzkwLDEwIEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBC
YXNpYykKIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUZXh0KQogewogICAg
IEluTWVtb3J5RGlzcGxheUxpc3QgcHJpbWFyeURpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1w
bCBwcmltYXJ5Q29udGV4dChwcmltYXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAs
IGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHBy
aW1hcnlDb250ZXh0KHByaW1hcnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRX
aWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBzZWNvbmRh
cnlEaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRh
cnlEaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0
SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRh
cnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdo
dCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQs
IHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAgVEVTVChCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0VGVzdHMsIEJvcmRlcnMpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgcHJp
bWFyeUNvbnRleHQocHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAKICAgICBJbk1lbW9yeURpc3Bs
YXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRp
c3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWln
aHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0
LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29u
dGV4dCk7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHRUZXN0cywgVHJhbnNmb3JtZWRDbGlwKQogICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNv
bnRleHQgPSBwcmltYXJ5Q29udGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNw
bGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0
LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBs
IHNlY29uZGFyeUNvbnRleHRETChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAw
KSk7CiAgICAgR3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5Q29u
dGV4dERMOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRl
eHQsIHNlY29uZGFyeUNvbnRleHQpOwpAQCAtMjg3LDE1ICsyODcsMTUgQEAgVEVTVChCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgR3Jh
cGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCA9IHByaW1hcnlDb250ZXh0Q0c7CiAKICAgICBJ
bk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRh
cnlDb250ZXh0REwoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwg
eyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCBG
bG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBHcmFwaGljc0NvbnRleHQmIHNlY29uZGFy
eUNvbnRleHQgPSBzZWNvbmRhcnlDb250ZXh0REw7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKICAgICBjdHgu
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcigyKTsKIAotICAgIGF1dG8gcHJpbWFyeUNUTSA9IHByaW1h
cnlDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVm
aW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNv
bmRhcnlDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6
RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgYXV0byBwcmltYXJ5Q1RNID0gcHJp
bWFyeUNvbnRleHQuZ2V0Q1RNKCk7CisgICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlD
b250ZXh0LmdldENUTSgpOwogCiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueFNjYWxlKCksIHNl
Y29uZGFyeUNUTS54U2NhbGUoKSk7CiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueVNjYWxlKCks
IHNlY29uZGFyeUNUTS55U2NhbGUoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvY2cvR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5k
ZXggMjQ3MzU4MGYxOTBlMGZkNjc0YzM2N2RhNDdjOWYxOTJiYTI0ODVlNC4uMjE1YzE3YzY2NTdh
ZWRhNmE2ZTJjZDBhZTBjOWM5MjZmM2JkODJiMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NnL0dyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0c0NH
LmNwcApAQCAtNTIsNyArNTIsNyBAQCBURVNUKEdyYXBoaWNzQ29udGV4dFRlc3RzLCBEcmF3TmF0
aXZlSW1hZ2VEb2VzTm90TGVha0NvbXBvc2l0ZU9wZXJhdG9yKQogICAgIEdyYXBoaWNzQ29udGV4
dENHIGN0eChjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgRVhQRUNUX0VRKGN0eC5jb21wb3NpdGVP
cGVyYXRpb24oKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIpOwotICAgIEVYUEVDVF9F
UShjdHguYmxlbmRNb2RlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICBFWFBF
Q1RfRVEoY3R4LmJsZW5kTW9kZSgpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiAKICAgICBhdXRvIGdy
ZWVuUGl4ZWxDRyA9IGdyZWVuSW1hZ2UoKTsKICAgICBhdXRvIGdyZWVuUGl4ZWxOYXRpdmUgPSBO
YXRpdmVJbWFnZTo6Y3JlYXRlKGdyZWVuUGl4ZWxDRy5nZXQoKSk7CkBAIC03MSw3ICs3MSw3IEBA
IFRFU1QoR3JhcGhpY3NDb250ZXh0VGVzdHMsIERyYXdOYXRpdmVJbWFnZURvZXNOb3RMZWFrQ29t
cG9zaXRlT3BlcmF0b3IpCiAgICAgRVhQRUNUX0VRKHByaW1hcnlEYXRhWzJdLCAwKTsKIAogICAg
IEVYUEVDVF9FUShjdHguY29tcG9zaXRlT3BlcmF0aW9uKCksIENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VPdmVyKTsKLSAgICBFWFBFQ1RfRVEoY3R4LmJsZW5kTW9kZU9wZXJhdGlvbigpLCBCbGVu
ZE1vZGU6Ok5vcm1hbCk7CisgICAgRVhQRUNUX0VRKGN0eC5ibGVuZE1vZGUoKSwgQmxlbmRNb2Rl
OjpOb3JtYWwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTE3
N2VkOTI5ODBkZDhkNGJhNGJmM2FmM2QxNDEwNmE2MmZkNmI4Ny4uYzRmOTZjMWI4Yzg3MmNkOGE4
MDU4ZDIxYzQ0YTZkZTdlMTIzMzlhNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAzLTE0
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJv
Y2Vzc10gR3JhcGhpY3NDb250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRo
ZSBwbGF0Zm9ybSBjb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzc3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQt
cmVjdC1leHBlY3RlZC50eHQ6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRz
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNu
J3QgYWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4
dAppbmRleCA1MTFiN2MwYzU0ZDMzMjE2YjdjNmVhZjA0M2E3NWMxNjc2NmQwNDI3Li5kYmY1NGIz
ZWEyMDRlMTkyNGJkNDM1ZDUxNzM2ZGM3MzQ3NzAyY2ZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQu
dHh0CkBAIC0xLDE3ICsxLDEzIEBACiAKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4w
MCkpCiAoc2F2ZSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyA1MTIpCi0gIChzaGFkb3ct
Ymx1ciAxMi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hh
ZG93LWNvbG9yICMwMDAwMDApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQotKGZp
bGwtY29tcG9zaXRlZC1yZWN0CisgIChjaGFuZ2UtZmxhZ3MgW2Ryb3Atc2hhZG93XSkKKyAgKGRy
b3Atc2hhZG93CisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChz
aGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LWNvbG9yICMwMDAwMDApCisgICAgKHNoYWRv
d3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0
IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQotICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0
ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0
ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQorICAoY29sb3IgIzAwMDBGRikgZXh0ZW50IGF0ICg0Myw1
MCkgc2l6ZSAxMzR4MTM3KQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4
dAppbmRleCAzODZlMzk0MTE4NWYwOWEzYzY4ZWM2YzJhZTg4ZGYxMWM3MGIwYTY5Li41Zjc4Yjhj
MzUwNWM5ZTgwMzk5YmQ2MDVhOWJlOTU1YWIwOWI3MDVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1l
eHBlY3RlZC50eHQKQEAgLTEsMjEgKzEsMTQgQEAKIAotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQot
ICAoeSAyMi4wMCkpCi0oY29uY2F0ZW50YXRlLWN0bQotICAoY3RtIHttPSgoMC44NywwLjUwKSgt
MC41MCwwLjg3KSkgdD0oODEuNzAsLTE4LjMwKX0pKQogKHNhdmUpCiAoc2V0LXN0YXRlCi0gIChj
aGFuZ2UtZmxhZ3MgNTEyKQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0
IHdpZHRoPTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvdy1jb2xvciAjMDAwMDAwKQotICAoc2hhZG93
cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkKLShmaWxsLWNvbXBvc2l0ZWQtcmVjdAorICAoY2hhbmdl
LWZsYWdzIFtjdG0sIGRyb3Atc2hhZG93XSkKKyAgKGN0bSB7bT0oKDAuODcsMC41MCkoLTAuNTAs
MC44NykpIHQ9KDgxLjcwLDMuNzApfSkKKyAgKGRyb3Atc2hhZG93CisgICAgKHNoYWRvdy1vZmZz
ZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hh
ZG93LWNvbG9yICMwMDAwMDApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQor
KGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKLSAg
KGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAo
YmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUu
NjUpCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4
MTg1LjY1KQogKHJlc3RvcmUpCi0oc2V0LWN0bQotICAoc2V0LWN0bSB7bT0oKDEuMDAsMC4wMCko
MC4wMCwxLjAwKSkgdD0oMC4wMCwyMi4wMCl9KSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9k
aXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGJjMTdiNTEx
NDk5ZjgyNTZjOTkyOTBkYWU4NjE0ZDQ4OTRjYWY5Y2MuLjU0NmRjNDkxMmY1MmQwM2E4OWFkOTA2
ODU3MmIyOGVkYzgwMzIyNTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9s
YXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSwxNiArMSwxMiBAQAogCi0o
dHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5IDAuMDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0
CisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQot
ICAoY29sb3IgIzAwODAwMCkKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0g
IChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKKyAgKGNv
bG9yICMwMDgwMDApIGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAoc2V0LXN0YXRlCi0g
IChjaGFuZ2UtZmxhZ3MgMzI5NjApCi0gIChmaWxsLWNvbG9yICMwMDAwRkYpCi0gIChzdHJva2Ut
c3R5bGUgMCkKKyAgKGNoYW5nZS1mbGFncyBbZmlsbC1icnVzaCwgc3Ryb2tlLXN0eWxlLCBzaG91
bGQtYW50aWFsaWFzXSkKKyAgKGZpbGwtYnJ1c2gKKyAgICAoY29sb3IgIzAwMDBGRikpCisgIChz
dHJva2Utc3R5bGUgTk8tU1RST0tFKQogICAoc2hvdWxkLWFudGlhbGlhcyAwKSkKIChkcmF3LXJl
Y3QKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50
eHQKaW5kZXggYmI1OTNkMjBmNmRhNjQ4NjI5MmQzNmMwMjIwZTJhOWQ4NzJmODJiOS4uYjg2MDQ4
Y2MwOGM5OTM3ZWYwMDc4MmU3MTA4OWNhY2JjOTljNTMzMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBl
Y3RlZC50eHQKQEAgLTEsMTYgKzEsOCBAQAogcmVjb3JkZWQ6Ci0odHJhbnNsYXRlCi0gICh4IDAu
MDApCi0gICh5IDAuMDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisoZmlsbC1yZWN0LXdpdGgt
Y29sb3IKICAgKHJlY3QgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAwMEZG
KQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9y
bWFsKSBleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCisgIChjb2xvciAjMDAwMEZGKSBl
eHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAKIHJlcGxheWVkOgogKAogICAoY2xpcCBh
dCAoNTEyLDApIHNpemUgNTEyeDIwMCkKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4w
MCkpCg==
</data>
<flag name="commit-queue"
          id="482514"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454765</attachid>
            <date>2022-03-15 15:44:51 -0700</date>
            <delta_ts>2022-03-15 17:26:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220315154449.patch</filename>
            <type>text/plain</type>
            <size>669969</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uNTc2NTk5OGIxYWE0OTU1MzQxOTMyNDA3Yjk2ZGQ1
YzYzZjg0OWI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzNSBAQAorMjAyMi0wMy0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
QXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZy
b21QYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25Q
YWludGVyOjpwYWludEJveFNoYWRvdyBjb25zdCk6CisgICAgICAgICogaHRtbC9DdXN0b21QYWlu
dEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0
VW5jaGVja2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3TGF5b3V0U3RpcHBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdMYXlvdXRIYXRjaGluZyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6QmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVy
aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjphcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZp
bGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50
RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNl
UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZp
bGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNo
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNjYWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0Ojp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0VtcGhhc2lzTWFya3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNvcmRlci5oOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkZWNvbnN0cnVjdERyYXdHbHlwaHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4gY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnRJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudEltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdy
YXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdU
aWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3Rl
bUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBoc0FuZENhY2hlRm9udCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRB
bnRpYWxpYXNpbmdNb2RlRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0
b3I6OlRleHRCb3hJdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmluY3JlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmF0RW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRCb3hJdGVyYXRvcjo6Y3VycmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Qm94SXRlcmF0b3I6OmRpcmVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvciE9IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bWVyZ2VDaGFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBs
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZTo6ZHVtcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dXBkYXRl
U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Z2V0U2hhZG93IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0RmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRl
eHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6Om1lcmdlU3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6bWVyZ2VTdGF0ZURpZmZzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Z2V0Q1RNIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpmaWxsQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsR3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0dGVybiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxTcGFjZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldEZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJ1bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRG
aWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9y
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlR3JhZGll
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXR0
ZXJuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3Bh
Y2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ry
b2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVRo
aWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ry
b2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjppbmVDYXAgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bGluZURhc2ggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVKb2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjptaXRlckxpbWl0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNvbXBvc2l0ZU1vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Ojpjb21wb3NpdGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpibGVuZE1vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRDb21wb3NpdGVNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJvcFNoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNoYWRvd09mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNoYWRvd0JsdXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzaGFkb3dDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGVhclNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1Zpc2li
bGVTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNC
bHVycmVkU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
aGFzU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWxw
aGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2hvdWxkQW50aWFsaWFzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2hvdWxkU21vb3RoRm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRTaG91bGRTbW9vdGhGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3THVtaW5hbmNlTWFzayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0luVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5
TGF5ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZUVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6fkdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRleHQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6VHJhbnNwYXJlbmN5
TGF5ZXJTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXll
clNjb3BlOjpiZWdpbkxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFy
ZW5jeUxheWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3BlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6fkludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25seVByaW1pdGl2ZUNoYW5nZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VEaWZm
cyk6CisgICAgICAgIChXZWJDb3JlOjpzdGF0ZUNoYW5nZU5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNo
YW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRp
ZEFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Zmls
bEJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNl
dEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmZpbGxSdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpzZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
c3Ryb2tlQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpzZXRTdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6c2V0U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUNhcCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZURhc2ggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5lSm9pbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1pdGVyTGltaXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNvbXBvc2l0ZU1vZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENvbXBvc2l0ZU1vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyb3BTaGFkb3cgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldERyb3BTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmFscGhhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRBbHBoYSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRUZXh0RHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3VsZEFudGlhbGlhcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91bGRTbW9vdGhGb250cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU21v
b3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpzZXREcmF3THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFVzZURhcmtBcHBlYXJhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkZWNvZGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6
On5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFy
ZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6YmVnaW5MYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjp+VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6R3JhcGhpY3ND
b250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6OkludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVEYXNoOjplbmNvZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEcm9w
U2hhZG93Ojppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6
aXNCbHVycmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6Omhhc091dHNl
dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvdzo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdy
YXBoaWNzQ29udGV4dDo6TnVsbEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpO
dWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpOdWxs
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFn
ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6U291cmNlQnJ1c2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJydXNoOjpncmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCcnVzaDo6cGF0dGVybiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
cnVzaDo6c2V0R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldFBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCcnVzaDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNl
dENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpicnVzaCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnJ1c2g6OmlzUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNoOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNoOjpkZWNvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnJ1c2g6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0Qm94
SXRlcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEJveEl0ZXJhdG9yOjpvZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJv
eEl0ZXJhdG9yOjppbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9y
OjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94SXRlcmF0b3I6OmN1cnJl
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpkaXJlY3Rpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvcGVyYXRvcj09IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b3BlcmF0b3IhPSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q2Fpcm86OlN0YXRlOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OlN0YXRlOjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OkZpbGxTb3VyY2U6OkZp
bGxTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0cm9rZVNvdXJjZTo6U3Ryb2tl
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZTo6U2hhZG93U3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnNldExpbmVDYXApOgorICAgICAgICAoV2Vi
Q29yZTo6Q2Fpcm86OnNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRM
aW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TWl0ZXJMaW1pdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFwcGx5U3RhdGVDaGFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpl
bmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xp
cFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZp
bGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5k
VG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpnZXRD
VE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0Q1RNKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lRGFzaCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGlu
ZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2lu
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OkNHQ29udGV4dFN0
YXRlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6fkNHQ29u
dGV4dFN0YXRlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6OmRpZFNhdmUgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjppbnRlcm5hbFBsYXRmb3Jt
Q29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJv
a2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseUZp
bGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdpbmdNb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpj
bGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjphcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0xpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6c2V0
Q0dMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR01pdGVyTGltaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0Q0dMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR1NoYWRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdGF0ZUNoYW5n
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjYW5Vc2VTaGFkb3dCbHVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJl
Y3RJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpDR0NvbnRleHRTdGF0ZVNhdmVyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2ZXI6On5DR0NvbnRl
eHRTdGF0ZVNhdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRl
U2F2ZXI6OnNhdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVT
YXZlcjo6cmVzdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0
ZVNhdmVyOjpkaWRTYXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3Vt
ZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZHJhd1BERlBhZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJv
a2VDb250YWlucyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmVnaW5M
YXllcik6CisgICAgICAgIChXZWJDb3JlOjplbmRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpk
cmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0ds
eXBoc1JlY29yZGVyOjpzZXRJbnRlcm5hbEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0ds
eXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXREcm9wU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdPVFNWR1J1bik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3TmF0aXZlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6
OmNyZWF0ZUludGVybmFsQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3
R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6Y29uY2x1ZGVJ
bnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1Jl
Y29yZGVyOjp1cGRhdGVGaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjp1cGRhdGVTdHJva2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpzaGFkb3dJc0NsZWFyZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd0dseXBoc1dpdGhBZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJv
eSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6c2FmZUNvcHkg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1UeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJ
dGVtSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6U2V0U3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjphcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9y
TWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6YXBwbHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNj
YWxlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0Q1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmFwcGx5IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6
YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dE1pdGVyTGltaXQ6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0
YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OkZp
bGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0Ojpjb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJvdW5kZWRSZWN0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OnkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmFuZ2xlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2NhbGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjphbW91bnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6U2V0Q1RNKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OnRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVD
VE06OkNvbmNhdGVuYXRlQ1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDb25jYXRlbmF0ZUNUTTo6dHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6c3RhdGVDaGFuZ2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpzdGF0ZUNoYW5n
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6
U2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZUNhcDo6bGluZUNhcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaEFycmF5IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGFzaE9mZnNl
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2g6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZURhc2g6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6bGluZUpvaW4gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1p
dGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1p
dGVyTGltaXQ6Om1pdGVyTGltaXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6
OnJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdDo6Y29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y29tcG9zaXRlT3BlcmF0b3IgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6YmxlbmRNb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojps
b2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmJsZW5k
TW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6bV9kcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFw
cGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hl
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5l
c0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6flJlY29yZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojpjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmRT
dGF0ZUNoYW5nZUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0YXRlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZGlkVXBkYXRl
U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp0cmFuc2xhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzY2FsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNvbmNhdENUTSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6Omdl
dENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpjdXJyZW50U3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdXJyZW50U3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjdG0gY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0
U3RhdGU6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzY2FsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0
ZTo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpDb250
ZXh0U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpDb250ZXh0U3RhdGU6OmNsb25lRm9yU2F2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y2xvbmVGb3JU
cmFuc3BhcmVuY3lMYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnN0YXRlU3RhY2sgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpSZWNvcmRl
ckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVj
b3JkU2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNv
cmRDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZENsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcklt
cGw6OnJlY29yZENsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJvdW5k
ZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFN0
cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0Zv
Y3VzUmluZ1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6
OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6flJl
Y29yZGVySW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkUm90YXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNjYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZFNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldExp
bmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFNldE1pdGVyTGltaXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJT
aGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OlJlY29yZGVySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmFwcGx5
U2V0U3RhdGVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3
R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5
cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwOgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcik6
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzYXZlKToKKyAgICAg
ICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJlc3RvcmUpOgorICAgICAgICAo
Tmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFu
c3BhcmVuY3lMYXllcik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQ
YXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQp
OgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJS
ZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0
KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzdHJva2VSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnN0cm9rZVBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd1JlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d0xpbmUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0Vs
bGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0Zv
Y3VzUmluZyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChOaWNv
c2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVE
YXNoKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6dHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29z
aWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAg
IChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjb25jYXRDVE0pOiBEZWxldGVkLgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRl
ZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVj
b3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29y
ZGVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0ds
eXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6ZHJh
d0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgICog
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6ZHJhd0JveGVzKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250ZW50ZnVsUGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
ZWdhY3lFbGxpcHNpc0JveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseUJveFNoYWRvd0ZvckJhY2tn
cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmRyYXdCb3hT
aWRlRnJvbVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50Qm94U2hhZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
SU9TOjpwYWludFRleHRGaWVsZElubmVyU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lSU9TOjpwYWludFN5c3RlbVByZXZpZXdCYWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveFJhZGlvSW5uZXJTaGFkb3cpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0
YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dERlY29y
YXRpb25QYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREZWNvcmF0aW9uUGFpbnRl
cjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0
UGFpbnRlci5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnVzZVN0cm9rZVN0eWxlVG9GaWxsKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVu
ZGVyU3VwcG9ydDo6YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
bmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpk
cmF3KToKKwogMjAyMi0wMy0xNCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4K
IAogICAgICAgICBbbW9kZWxdIDxtb2RlbCBpbnRlcmFjdGl2ZT4gZG9lc24ndCBhbGxvdyBtb2Rl
bCB0byBiZSByb3RhdGVkIG9uIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkOWNjM2M0ZmU2OWU4YmNlNWUwMWM4
OWFmNGQwN2M3NWFjODBjM2U2Li4yM2M2MDdhNmYyMmQ1NDI2YzgyMGM5NjUyYTE1YzYwZDZiYTU5
YjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDIyLTAzLTE0ICBTYWlkIEFib3UtSGFs
bGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gR3JhcGhpY3ND
b250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0Zm9ybSBjb250
ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3
MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldFN0YXRlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6dHJhbnNsYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpjb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVKb2lu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OmNsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaDoK
KyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldFN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZENsaXApOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0VG9QYXRoKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwVG9J
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQ2xlYXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEJlemllckN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VF
bGxpcHNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBz
ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd1BhdGgpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJ
bWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdOYXRpdmVJbWFnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d1N5c3RlbUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3R2x5cGhz
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Om1fcmVu
ZGVyaW5nQmFja2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkVHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSb3RhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENvbmNhdGVuYXRlQ1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUpv
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZFNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyU2hhZG93KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpzZW5kKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6OmRyYXdSZWN0KToKKwogMjAyMi0wMy0x
NCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbbW9kZWxd
IDxtb2RlbCBpbnRlcmFjdGl2ZT4gZG9lc24ndCBhbGxvdyBtb2RlbCB0byBiZSByb3RhdGVkIG9u
IGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNzM2NDQyYTA4YTc0NTAwYTM1MmYwNGMyZTEwNmQ4
YzQxZTdhNGZjNS4uZTM3YzQ4NmQ4NTk3Mzk0MGU1ZTU3NzdjMTk2ZWI5MmI3ZDBiMGNmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCkBAIC0xNDkxLDYgKzE0OTEsOCBAQCBzZXQoV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0wuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xTdGF0ZS5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDb250ZW50
c0Rpc3BsYXlEZWxlZ2F0ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNs
aWVudC5oCkBAIC0xNTUwLDYgKzE1NTIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1BdWRpb1RyYWNrQ29uZmln
dXJhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1Db2xvclNwYWNlLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0x
NTY4LDYgKzE1NzEsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUm91bmRlZFJlY3QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Nob3VsZExvY2FsaXplQXhp
c05hbWVzLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNl
SW1hZ2UuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggNjJkNDNlNmEz
YTkzMjE1ZmYwNzU3YTQ3ODg0YThiNmM4NDRiODk2ZC4uZDA1NjViZWM5MjFmMGNkOTE1ZTQ4ODVm
ZGY2YmEzMmEzYTZiZDNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBs
ZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBA
IC0xNTYsNiArMTU2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0Q2xp
ZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgK
IAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yU3BhY2VDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhZGllbnRSZW5kZXJlckNHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDVkZWU3NTQwNTM1Nzlm
NTViNTVmMmZlNGFkMGRkMGE2OWRlYmZkNGEuLmU0ZjYyNzE5MGNjODliZTg2ZDA2OTgxZjMxZDAx
MzM2NTkyZTk2OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC02NDAsNiArNjQwLDcg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlZpZGVvQ29udGFpbmVyTGF5ZXIuaAogCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvQ29sb3JTcGFjZUNHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IDVjN2I3M2ViMjA1ZTA5ZWMyNDZlMDExZDBhNTAyZGNkNGMxZGNhNTAu
LmViNzZhMTg2ZDM0OGQ0YjM2ODlmMjM0ZjNkYmY2MjgyYWFhZGUwNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CkBAIC0yMDQ1LDYgKzIwNDUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRHTEltYWdlRXh0cmFjdG9yLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
U3RhdGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5jcHAKQEAgLTIwODQsNiArMjA4NSw3
IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJy
dXNoLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL1NvdXJjZUltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1
bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDgyOTYyYmEwNGUyZmZkN2ZmYTBjNmU2MWQ5YzljMmMxN2E1ZjY0Njcu
LmI1NWM1YzFjNDJlMzI5NTU3MGVkMjRjODQwZGMzZTRmMmZkMzAyZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIzMzEsMTAg
KzIzMzEsMTIgQEAKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVj
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNF
RDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5
MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5
QW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzFGQ0IxNzAyN0JBQjNGRTAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRkNCMTZEMjdCQUIz
REYwMEUwNjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIwMTc4M0IyN0Q1N0Y5RjAwOUJFQjFCIC8qIENH
Q29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0NvbnRleHRTdGF0ZVNhdmVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIx
NDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyog
U1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNC
MkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyog
SW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5n
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIy
ODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2
ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3Jh
cGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
NDY5NjNCMjc1QzVGQTYwMEE5MTU2QSAvKiBDU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBD
U1NGaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjQ2OTYzRDI3NUM2MTQ0MDBBOTE1NkEgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjE0QjlCNzI3NDQ1
OEZBMDAzQkU2REYgLyogRmlsdGVyRWZmZWN0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0Njk2M0UyNzVDNjE2NzAwQTkxNTZBIC8q
IEZpbHRlckltYWdlVmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmlsdGVySW1hZ2VWZWN0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjM0
Miw2ICsyMzQ0LDkgQEAKIAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3Rh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVF
NTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZC
IC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2
aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcyNTYwNzhFMjc5RDM0QjYwMDdEMkREMyAvKiBGRUltYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkY3RTc0RjI3
OUNFREU4MDBEODJEMkQgLyogRkVJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyNTgxODU0MjdDREE2OUEwMEMzRDk3RSAvKiBTb3VyY2VC
cnVzaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJC
MzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdF
IC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkIzNTEwQzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5N0UgLyogR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjZDREUy
MDI3NTk3MzUwMDBBNDQ1QjIgLyogRmlsdGVyRWZmZWN0R2VvbWV0cnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOTY2MUEyMjc1OTYwQTUwMEU3REY5
QiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQbGF0Zm9y
bUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNkQ1NkUzMjUzQUUzNjYwMDAy
RUY5MCAvKiBOYXRpdmVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMzE4LDYg
KzExMzIzLDggQEAKIAkJNzFGQ0IxNkQyN0JBQjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWdu
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVSYXRlQWxpZ25lci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZDQjE2RjI3QkFCM0UwMDBFMDYzMUMg
LyogRnJhbWVSYXRlQWxpZ25lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGcmFtZVJhdGVBbGlnbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0Nv
bnRleHRTdGF0ZVNhdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENHQ29udGV4dFN0YXRlU2F2ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8q
IFRleHRCb3hJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Qm94SXRlcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxMUI1RDYyNzY1MzY4MjAwNzZGRUY4IC8qIEZp
bHRlclJlc3VsdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVyUmVzdWx0cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0
ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJG
RjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTMyNyw2ICsxMTMzNCw4IEBACiAJ
CTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyNDM1RUY0MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWx0ZXJJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjQzNUVG
NTI3M0QwNzY3MDAwNUU3RUUgLyogRmlsdGVySW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RmlsdGVySW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjQ2MERENTI3
Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjQ2MERENjI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTND
IC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVY
VEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEz
QTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEz
ODksNiArMTEzOTgsMTAgQEAKIAkJNzJBMTNBRDUyNzRERTU0RTAwRTJBODhFIC8qIFNvdXJjZUFs
cGhhU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUFscGhhU29mdHdhcmVB
cHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQTEzQUQ2Mjc0REU1Nzgw
MEUyQTg4RSAvKiBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MkExM0FENzI3NERFNTc4MDBFMkE4OEUgLyogU291cmNlR3JhcGhpY1Nv
ZnR3YXJlQXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBs
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQjM1MTBDMjdDOUY5M0UwMEQy
N0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkIzNTEw
RDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQjM1MTBFMjdDQjQyRkQwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTb3VyY2VCcnVzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBTb3VyY2VCcnVzaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTb3VyY2VCcnVzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI0
RUY3NDI3NEUyMzMzMDAyOTNDMkYgLyogRkVCbGVuZFNvZnR3YXJlQXBwbGllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyQjRFRjc1Mjc0RTIzMzQwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkI0RUY3QzI3NEVFMzdGMDAyOTNDMkYgLyogRmls
dGVySW1hZ2VWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsdGVySW1hZ2VWZWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4ODEwLDYgKzI4ODIzLDcgQEAKIAkJQjI3NTM1
MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQk3MjAxNzgzQTI3RDU3M0IyMDA5QkVCMUIgLyogQ0dDb250ZXh0U3Rh
dGVTYXZlci5oICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNw
cCAqLywKIAkJCQlCQ0FGRURCMzI1OTY4RDBCMDAzMEU2QUEgLyogQ29sb3JTcGFjZUNHLmNwcCAq
LywKIAkJCQlCQ0FGRURCMjI1OTY4RDBCMDAzMEU2QUEgLyogQ29sb3JTcGFjZUNHLmggKi8sCkBA
IC0yOTA0Myw2ICsyOTA1Nyw5IEBACiAJCQkJN0JCMzRBNDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdy
YXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2
QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmggKi8sCiAJCQkJ
N0I5NUNGRTkyNzU0RkY2RTAwMDA2MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUuaCAqLywK
KwkJCQk3MjQ2MERENTI3Qzg1RDAxMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuY3Bw
ICovLAorCQkJCTcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0
ZS5oICovLAorCQkJCTcyQjM1MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmggKi8sCiAJCQkJMEY1ODBCMDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNz
TGF5ZXIuY3BwICovLAogCQkJCTBGNTgwQjBBMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xh
eWVyLmggKi8sCiAJCQkJMEY1ODBCMEIwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJD
bGllbnQuaCAqLywKQEAgLTI5MTQzLDYgKzI5MTYwLDcgQEAKIAkJCQlCQ0E1NTkxMjI2M0RCRDc5
MDA3RjE5QjMgLyogUGl4ZWxGb3JtYXQuaCAqLywKIAkJCQlDREQwOEFCRjI3N0U1NEYwMDBFQTM3
NTUgLyogUGxhdGZvcm1BdWRpb1RyYWNrQ29uZmlndXJhdGlvbi5oICovLAogCQkJCUJDM0U2MjQy
MjY1OTc5MTcwMDU0OEFDRCAvKiBQbGF0Zm9ybUNvbG9yU3BhY2UuaCAqLywKKwkJCQk3MkIzNTEw
QzI3QzlGOTNFMDBEMjdBRTAgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQk3
MjZENTZFMTI1M0FFMDQzMDAwMkVGOTAgLyogUGxhdGZvcm1JbWFnZS5oICovLAogCQkJCTcyQkFD
M0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJNTUw
NjQwQUQyNDA3NTZEQTAwQUFFMDQ1IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8s
CkBAIC0yOTE2Niw2ICsyOTE4NCw4IEBACiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8q
IFNoYWRvd0JsdXIuY3BwICovLAogCQkJCTBGM0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFk
b3dCbHVyLmggKi8sCiAJCQkJMUM0REIwMjQyNzMzOUU1RTAwN0IwQUQxIC8qIFNob3VsZExvY2Fs
aXplQXhpc05hbWVzLmggKi8sCisJCQkJNzJCMzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJj
ZUJydXNoLmNwcCAqLywKKwkJCQk3MkIzNTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1
c2guaCAqLywKIAkJCQkxREQxMjdBQzI1NkUzQTg3MDBCMjI3RDcgLyogU291cmNlQnVmZmVyUHJp
dmF0ZS5jcHAgKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudC5oICovLApAQCAtMjkxNzcsNiArMjkxOTcsNyBAQAogCQkJCTA4NzU1
OEM0MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCAq
LywKIAkJCQk5NUU5RjQ0NDI3QzlBMzlCMDA5NDUzMzcgLyogU3lzdGVtSW1hZ2UuaCAqLywKIAkJ
CQkzQkI2QjgwRjIyQTdEMzExMDAzQTJBNjkgLyogVGFiU2l6ZS5oICovLAorCQkJCTcyMDZENDM1
MjdEQURFQ0EwMDQwRkVCMiAvKiBUZXh0Qm94SXRlcmF0b3IuaCAqLywKIAkJCQkzNzZEQ0NFMDEz
QjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8sCiAJCQkJQTgyNEI0NjQwRTJFRjJFQTAw
ODFBN0I3IC8qIFRleHRSdW4uaCAqLywKIAkJCQlDRDFFNzM0NjE2N0JDNzhFMDA5QTg4NUQgLyog
VGV4dFRyYWNrUmVwcmVzZW50YXRpb24uY3BwICovLApAQCAtMzM4NzMsNiArMzM4OTQsNyBAQAog
CQkJCUNERTNBRTEyMjRCNDkxNkEwMDEyOEU3RSAvKiBDRE1VdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVGQTkwNENBMTc4RTYxRjUwMDRDOEEyRCAvKiBDZXJ0aWZpY2F0ZUluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCTkxQjhGMEI1MjE5NTNENjUwMDBDMkIwMCAvKiBDZXJ0aWZpY2F0
ZVN1bW1hcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDE3ODNCMjdENTdGOUYwMDlCRUIxQiAv
KiBDR0NvbnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM2RkQxNTE2Qzc4
MjY1MDBGODg3QzEgLyogQ2hhbmdlVmVyc2lvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
QkM2OUREMTUwNUYwNzYwMDFCNzRBQyAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTc4NUQ5MTUyNEI0RDFDQTAwMTREQjIxIC8qIENoYW5uZWxDb3VudE1vZGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMzQ3OTgsNiArMzQ4MjAsOCBAQAogCQkJCTQ5QzdCOUZDMTA0
MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0I5NUNGRUIyNzU0RkY2RTAwMDA2MENFIC8qIEdyYXBoaWNzQ29udGV4dEdMU3RhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI0NjBERDcy
N0M4NkRBRDAwRDVGOUY0IC8qIEdyYXBoaWNzQ29udGV4dFN0YXRlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MjU4MTg1NjI3Q0RBRkQ1MDBDM0Q5N0UgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBo
aWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAv
KiBHcmFwaGljc0xheWVyQ0EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwQjBFMEYxMkEyNjkw
MDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzA1
LDYgKzM2NzI5LDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1F
dmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhD
NkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUx
OTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzI1ODE4NTUyN0NEQTgwRTAwQzNEOTdFIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MjZENTZFMjI1M0FFMjhEMDAwMkVGOTAgLyogUGxhdGZvcm1J
bWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3NzA1QzcyNTUyNzZDRDAwMUQwQzk0IC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1MDY0MEFGMjQwNzU4MkQw
MEFBRTA0NSAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNzM4Niw2ICszNzQxMSw3IEBACiAJCQkJNTEwRDRBMzgxMDMxNjVFRTAwNDlFQTU0IC8qIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUUxMDND
MTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg0QTgxRjNFMEZDN0RGRjAwMDk1NTMwMCAvKiBTb3VyY2VBbHBoYS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8qIFNvdXJjZUJydXNoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRDNBNDk2MjE3QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVmZmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDRDNBNDk2NTE3QTlEMDFCMDAyNzRFNDIgLyogU291cmNlQnVm
ZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGMTM1MDkyNEM5RkNBMzAwNDMyRTFFIC8q
IFNvdXJjZUJ1ZmZlclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcApp
bmRleCA4NTZhM2RlNTA0ZGVjMGJiZmE5MGFjMTdkZTM3ZjUxNWUxNGQ5MjA0Li45ZDkzNWE2ZmYz
MjMwZjNmNDZhMmVmNWQ3ZWExMDAxMGFlOWUxMGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAg
LTM3Miw3ICszNzIsNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGgo
UGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0CiAgICAgICAgICAgICBEYXNo
QXJyYXkgbGluZURhc2g7CiAgICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZGFzaExlbmd0aCk7
CiAgICAgICAgICAgICBsaW5lRGFzaC5hcHBlbmQoZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIHBh
aW50aW5nQ29udGV4dC5jb250ZXh0LnNldExpbmVEYXNoKGxpbmVEYXNoLCBkYXNoTGVuZ3RoKTsK
KyAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92
ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3aXRoIHRp
Z2h0IGNvcm5lcnM6CkBAIC0xMjk0LDcgKzEyOTQsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWlu
dGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hh
ZAogICAgICAgICBhdXRvIHNoYWRvd1JlY3RPcmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRp
b24oKSArIHNoYWRvd09mZnNldDsKICAgICAgICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9
IHNoYWRvd1JlY3RPcmlnaW4gLSBhZGp1c3RlZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwog
Ci0gICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRv
d09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNX
ZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1
c01vZGU6OkRlZmF1bHQpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9w
U2hhZG93KHsgYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFk
b3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2Rl
OjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwogCiAgICAgICAgIGlmICho
YXNCb3JkZXJSYWRpdXMpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBp
dCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMg
dGltZQpAQCAtMTQwNSw3ICsxNDA1LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFp
bnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAg
ICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAg
ICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCi0gICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBz
aGFkb3cuY29sb3IoKSwgc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFk
aXVzLnZhbHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/
IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7
CiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KHNoYWRvd0Nhc3RpbmdSZWN0LCByb3VuZGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKaW5kZXggZjRiOThiYTYy
ZTExOWEwNzcxMzEyZDNiODhjNDkxOTM2ODM2ZWUzNy4uZWU1MDRmMDhjNDlmYzhkNWI1YWVkNzAy
YmUyMTdmMWIwNmZkNGUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21Q
YWludEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1hZ2Uu
Y3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6
OmRvQ3VzdG9tUGFpbnQoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY28KIEltYWdlRHJh
d1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsKLSAgICBkZXN0Q29udGV4dC5z
ZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25z
LmJsZW5kTW9kZSgpKTsKKyAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGRlc3RD
b250ZXh0LmNsaXAoZGVzdFJlY3QpOwogICAgIGRlc3RDb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVj
dC5sb2NhdGlvbigpKTsKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgp
KQpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgQ3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0CiAgICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CiAKICAgICAvLyBGYWN0b3IgaW4gdGhlIGRl
c3RpbmF0aW9uIGNvbnRleHQncyBzY2FsZSB0byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0
aW9uCi0gICAgQWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAg
QWZmaW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAg
ICAgZG91YmxlIHhTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueFNjYWxlKCkpOwogICAgIGRv
dWJsZSB5U2NhbGUgPSBmYWJzKGRlc3RDb250ZXh0Q1RNLnlTY2FsZSgpKTsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gYWRqdXN0ZWRQYXR0ZXJuQ1RNID0gcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKaW5kZXggMGU3ODA2M2UzYTQxY2JjNjkwZjBkMGNjYjc4ODExN2RlNjkzOGEw
Mi4uZGJjOTU3YzUzZDA0YTM5NmVhYzY0ZDY3ZmU2YTJiMTdlNDQ4YzY2MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmFwcGx5TGluZURhc2goKSBjb25zdAogICAgIERhc2hBcnJheSBjb252ZXJ0ZWRM
aW5lRGFzaChzdGF0ZSgpLmxpbmVEYXNoLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdGF0ZSgpLmxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAgICBjb252ZXJ0ZWRMaW5l
RGFzaFtpXSA9IHN0YXRpY19jYXN0PERhc2hBcnJheUVsZW1lbnQ+KHN0YXRlKCkubGluZURhc2hb
aV0pOwotICAgIGMtPnNldExpbmVEYXNoKGNvbnZlcnRlZExpbmVEYXNoLCBzdGF0ZSgpLmxpbmVE
YXNoT2Zmc2V0KTsKKyAgICBjLT5zZXRMaW5lRGFzaCh7IFdURk1vdmUoY29udmVydGVkTGluZURh
c2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUoKS5saW5lRGFzaE9mZnNldCkgfSk7CiB9CiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0R2xvYmFsQWxwaGEoZG91Ymxl
IGFscGhhKQpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2V0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKGNvbnN0IFN0cmluZyYgb3BlCiAgICAg
R3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAg
ICAgIHJldHVybjsKLSAgICBjLT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7
CisgICAgYy0+c2V0Q29tcG9zaXRlTW9kZSh7IG9wLCBibGVuZE1vZGUgfSk7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2NhbGUoZG91YmxlIHN4LCBkb3VibGUgc3kp
CkBAIC0xMTg2LDcgKzExODYsNyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmlzUG9pbnRJblN0cm9rZUludGVybmFsKGNvbnN0IFBhdGgmIHBhdGgsIGRvdQogICAgICAgICBE
YXNoQXJyYXkgY29udmVydGVkTGluZURhc2gobGluZURhc2guc2l6ZSgpKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaW5lRGFzaC5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGNv
bnZlcnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4obGluZURh
c2hbaV0pOwotICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKGNvbnZlcnRlZExpbmVEYXNoLCBz
dGF0ZS5saW5lRGFzaE9mZnNldCk7CisgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZN
b3ZlKGNvbnZlcnRlZExpbmVEYXNoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRlLmxpbmVEYXNo
T2Zmc2V0KSB9KTsKICAgICB9KTsKIH0KIApAQCAtMTIwNSw3ICsxMjA1LDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclJlY3QoZG91YmxlIHgsIGRvdWJsZSB5LCBk
b3VibGUgd2lkdGgsIGQKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBj
b250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNhdmVkID0gdHJ1ZTsKLSAgICAgICAgY29udGV4dC0+
c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICAgICAgY29udGV4dC0+c2V0RHJvcFNoYWRvdyh7IEZs
b2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IH0pOwogICAgIH0KICAgICBpZiAoc3RhdGUoKS5nbG9iYWxBbHBoYSAhPSAxKSB7CiAg
ICAgICAgIGlmICghc2F2ZWQpIHsKQEAgLTEzNjMsOSArMTM2Myw5IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlTaGFkb3coKQogICAgIGlmIChzaG91bGREcmF3U2hh
ZG93cygpKSB7CiAgICAgICAgIGZsb2F0IHdpZHRoID0gc3RhdGUoKS5zaGFkb3dPZmZzZXQud2lk
dGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0
KCk7Ci0gICAgICAgIGMtPnNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0
ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSk7CisgICAgICAgIGMtPnNldERyb3BTaGFkb3coeyBGbG9hdFNpemUod2lkdGgsIC1oZWln
aHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1
c01vZGU6OkxlZ2FjeSB9KTsKICAgICB9IGVsc2UKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0
U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVn
YWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogfQogCiBib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QK
QEAgLTI0MzIsMTkgKzI0MzIsMTYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBkb3UKIAogICAgICAg
ICAgICAgRmxvYXRTaXplIG9mZnNldCgwLCAyICogbWFza1JlY3QuaGVpZ2h0KCkpOwogCi0gICAg
ICAgICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgZmxvYXQgc2hhZG93
UmFkaXVzOwotICAgICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgICAgICAgICBjLT5n
ZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLQogICAg
ICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd1JlY3QobWFza1JlY3QpOwotICAgICAgICAgICAgc2hh
ZG93UmVjdC5pbmZsYXRlKHNoYWRvd1JhZGl1cyAqIDEuNCk7Ci0gICAgICAgICAgICBzaGFkb3dS
ZWN0Lm1vdmUoc2hhZG93T2Zmc2V0ICogLTEpOworICAgICAgICAgICAgYXV0byBkcm9wU2hhZG93
ID0gYy0+ZHJvcFNoYWRvdygpOworCisgICAgICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUoZHJv
cFNoYWRvdy5ibHVyUmFkaXVzICogMS40KTsKKyAgICAgICAgICAgIHNoYWRvd1JlY3QubW92ZShk
cm9wU2hhZG93Lm9mZnNldCAqIC0xKTsKICAgICAgICAgICAgIGMtPmNsaXAoc2hhZG93UmVjdCk7
CiAKLSAgICAgICAgICAgIHNoYWRvd09mZnNldCArPSBvZmZzZXQ7CisgICAgICAgICAgICBkcm9w
U2hhZG93Lm9mZnNldCArPSBvZmZzZXQ7CiAKLSAgICAgICAgICAgIGMtPnNldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSk7CisgICAgICAgICAgICBjLT5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3cpOwogCiAgICAg
ICAgICAgICBpZiAoZmlsbCkKICAgICAgICAgICAgICAgICBjLT5zZXRGaWxsQ29sb3IoQ29sb3I6
OmJsYWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JP
dmVybGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNw
cAppbmRleCA0ZjYzYWRjZTkzOTE2ZGIyMzIwZTk2NzhhYWJmZTBmM2NkOTk3NjJiLi45YTgwM2E0
MDhkODhjMmZmNDhkZDNiZWEwMjk1MWI4NzU4MDk4ZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCBzdGF0
aWMgdm9pZCBkcmF3TGF5b3V0U3RpcHBsaW5nKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRRdWFkJiBxdWFkLAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIo
Y29udGV4dCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMSk7CiAgICAgY29udGV4
dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlKTsKLSAgICBjb250ZXh0
LnNldExpbmVEYXNoKHsgMSwgZGVuc2l0eSB9LCAxKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNo
KHsgeyAxLCBkZW5zaXR5IH0sIDEgfSk7CiAKICAgICBkcmF3TGF5b3V0UGF0dGVybihjb250ZXh0
LCBxdWFkLCBkZW5zaXR5LCBGbGlwOjpObyk7CiB9CkBAIC0xMjU0LDcgKzEyNTQsNyBAQCBzdGF0
aWMgdm9pZCBkcmF3TGF5b3V0SGF0Y2hpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihj
b250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygwLjUpOwogICAgIGNvbnRl
eHQuc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGU6OkRhc2hlZFN0cm9rZSk7Ci0gICAgY29udGV4
dC5zZXRMaW5lRGFzaCh7IDIsIDIgfSwgMik7CisgICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IHsg
MiwgMiB9LCAyIH0pOwogCiAgICAgY29uc3RleHByIGF1dG8gZGVmYXVsdExheW91dEhhdGNoU3Bh
Y2luZyA9IDEyOwogICAgIGRyYXdMYXlvdXRQYXR0ZXJuKGNvbnRleHQsIHF1YWQsIGRlZmF1bHRM
YXlvdXRIYXRjaFNwYWNpbmcsIGZsaXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4
IGI1ODhmNmZhNGExMWQ3NzBjM2M4NDk5OTY3MmQ3ZDdlZmY0MzJjNGYuLjhhMTdhZTM3MGFlMzZi
MDBlYmI3YTliMmUwNzU1MTgwNmJlZDE2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
QEAgLTQzMDMsNyArNDMwMyw3IEBAIHZvaWQgRnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52
YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0CiAgICAgaWYgKG5l
ZWRzTGF5b3V0KCkpCiAgICAgICAgIGxheW91dENvbnRleHQoKS5sYXlvdXQoKTsKIAotICAgIE51
bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAg
IE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChmcmFtZVJlY3QoKSwgcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zKTsKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgewogICAgICAgICAvLyBGSVhN
RTogY29uc3VsdCBwYWludHNFbnRpcmVDb250ZW50cygpLgogICAgICAgICBwYWludENvbnRlbnRz
KGNvbnRleHQsIHZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0
KSk7CkBAIC00ODU0LDcgKzQ4NTQsNyBAQCB2b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdo
dERlcHJlY2F0ZWQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdAogCiAgICAg
fQogICAgIC8vIFVzZSBhIGNvbnRleHQgd2l0aCBwYWludGluZyBkaXNhYmxlZC4KLSAgICBOdWxs
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoZnJh
bWVSZWN0KCksIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0VHJ1bmNhdGVkQXQoc3RhdGljX2Nhc3Q8aW50Pihm
bG9vcmYob2xkQm90dG9tKSkpOwogICAgIEludFJlY3QgZGlydHlSZWN0KDAsIHN0YXRpY19jYXN0
PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5kZXJWaWV3LT5sYXlvdXRPdmVyZmxvd1JlY3QoKS5t
YXhYKCksIHN0YXRpY19jYXN0PGludD4oY2VpbGYob2xkQm90dG9tIC0gb2xkVG9wKSkpOwogICAg
IHJlbmRlclZpZXctPnNldFByaW50UmVjdChkaXJ0eVJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCmluZGV4IGRjNjBlNzViMjk1YmM1
M2E1OWE0NzAyYTE5OTg3YzAzYTExZjk1YTEuLmFjOTA5MTEzNzNhZmU1ZjYyNjk3NTQwNmJjY2Mz
ODM1MGQ5ZDM0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fkd2FpdGEv
VGhlbWVBZHdhaXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Ro
ZW1lQWR3YWl0YS5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFRoZW1lQWR3YWl0YTo6cGFp
bnRGb2N1cyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0
aAogCiAgICAgZ3JhcGhpY3NDb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoY29sb3IuYWxw
aGFBc0Zsb2F0KCkpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoZm9j
dXNMaW5lV2lkdGgpOwotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lRGFzaCh7IGZvY3VzTGlu
ZVdpZHRoLCAyICogZm9jdXNMaW5lV2lkdGggfSwgMCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dExpbmVEYXNoKHsgeyBmb2N1c0xpbmVXaWR0aCwgMiAqIGZvY3VzTGluZVdpZHRoIH0sIDAgfSk7
CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVDYXAoTGluZUNhcDo6U3F1YXJlKTsKICAgICBn
cmFwaGljc0NvbnRleHQuc2V0TGluZUpvaW4oTGluZUpvaW46Ok1pdGVyKTsKICAgICBncmFwaGlj
c0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoY29sb3Iub3BhcXVlQ29sb3IoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuY3BwCmluZGV4IDlmZDI1ZDgwYWQxMmRjOTFkZDExZjkxNTk4ZmM2YzhlZmE0
Y2IyYTIuLjI4OTU3NGI5YzFlNDBjZDcxMmI0ZTJiNmU5ZWIzNGIwMTcyOWRmY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQuY3BwCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCwgR3JhcGhpY3NDb250ZXh0JiBzZWNv
bmRhcnlDb250ZXh0KQotICAgIDogbV9wcmltYXJ5Q29udGV4dChwcmltYXJ5Q29udGV4dCkKKyAg
ICA6IEdyYXBoaWNzQ29udGV4dChwcmltYXJ5Q29udGV4dC5jbGlwQm91bmRzKCksIHsgfSwgcHJp
bWFyeUNvbnRleHQuZ2V0Q1RNKCkpCisgICAgLCBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250
ZXh0KQogICAgICwgbV9zZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeUNvbnRleHQpCiB7CiB9CkBA
IC00OCw2ICs0OSwzMCBAQCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9wcmltYXJ5
Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIAorI2lmIFVTRShDRykKK2Jvb2wgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgpOworfQorCit2b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0NBTGF5ZXJD
b250ZXh0KQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NB
TGF5ZXJDb250ZXh0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4
dChpc0NBTGF5ZXJDb250ZXh0KTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KQorewor
ICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRl
ZENvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7Cit9CisjZW5kaWYKKworUmVuZGVyaW5nTW9kZSBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcmltYXJ5Q29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Cit9CisKIHZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpCiB7CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG5vdCB1
c2luZyB0aGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCdzIHN0YXRlIHN0YWNrIGF0IGFsbCwK
QEAgLTY0LDIyICs4OSwxMCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0
LCBib3JkZXJUaGlja25lc3MpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVjdChyZWN0
LCBib3JkZXJUaGlja25lc3MpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIGZyb20sIGNvbnN0IEZsb2F0UG9pbnQmIHRvKQot
ewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOwotICAgIG1fc2Vjb25k
YXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJh
d0VsbGlwc2UocmVjdCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCiAjaWYg
VVNFKENHKQpAQCAtOTYsMjIgKzEwOSwxMCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogfQogI2VuZGlmCiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3ByaW1hcnlD
b250ZXh0LmRyYXdQYXRoKHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0aChw
YXRoKTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25z
dCBQYXRoJiBwYXRoKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0
b3IpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwotICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOworICAgIG1fcHJpbWFyeUNvbnRleHQuYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBs
eURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQpAQCAtMTI2LDIy
MiArMTI3LDEyNiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0IGZhY3RvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmFjdG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmYWN0b3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LmZpbGxSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsK
LX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0
LmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3Qo
cmVjdCwgY29sb3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxS
b3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0
LCBjb2xvcik7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdEltcGwocmVj
dCwgY29sb3IpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmlt
YXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3Qs
IGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
cmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3By
aW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuY2xl
YXJSZWN0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgbV9w
cmltYXJ5Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgbV9zZWNvbmRh
cnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
Ci17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
Ci17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotfQotCi0jaWYgVVNFKENH
KQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJv
b2wgaXNDQUxheWVyQ29udGV4dCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQ0FMYXll
ckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElz
Q0FMYXllckNvbnRleHQoaXNDQUxheWVyQ29udGV4dCk7Ci19Ci0KLWJvb2wgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cHJpbWFyeUNvbnRleHQuaXNDQUxheWVyQ29udGV4dCgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRl
ZENvbnRleHQpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChpc0FjY2VsZXJhdGVkQ29udGV4dCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKLX0KLSNlbmRpZgotCi1SZW5k
ZXJpbmdNb2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25z
dAotewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLX0KLQog
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7CiAgICAgbV9wcmltYXJ5Q29u
dGV4dC5jbGlwKHJlY3QpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwKHJlY3QpOwogfQog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKLSAgICBtX3Nl
Y29uZGFyeUNvbnRleHQuY2xpcE91dChyZWN0KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29u
dGV4dC5jbGlwT3V0KHBhdGgpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgp
OwotfQotCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFBhdGgocGF0aCwgd2luZFJ1bGUpOwogICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFBhdGgocGF0
aCwgd2luZFJ1bGUpOwogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwUGF0aChwYXRoLCB3aW5k
UnVsZSk7CiB9CiAKLUludFJlY3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5k
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuY2xpcEJvdW5kcygpOwot
fQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVDYXAobGluZUNh
cCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVDYXAobGluZUNhcCk7CisgICAgbV9w
cmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlw
T3V0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZzZXQp
OworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcE91dChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNv
bnRleHQuY2xpcE91dChwYXRoKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNl
dExpbmVKb2luKGxpbmVKb2luKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZUpvaW4o
bGluZUpvaW4pOworICAgIG1fcHJpbWFyeUNvbnRleHQuY2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VC
dWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBUb0lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldE1pdGVyTGltaXQobWl0ZXJMaW1pdCk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5jbGVhclJlY3QocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LmNsZWFyUmVjdChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUm
IHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobmF0aXZlSW1hZ2UsIHNlbGZTaXpl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRy
YXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwgc2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRl
c3RpbmF0aW9uUmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShz
eXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxS
ZWN0KHJlY3QsIGNvbG9yKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwg
Y29sb3IpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYg
Z3JhZGllbnQpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihuYXRpdmVJbWFn
ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5hdGl2ZUltYWdl
LCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50KTsK
KyAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgZ3JhZGllbnQpOwogfQogCi1J
bWFnZURyYXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmlt
YXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMp
OwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmltYXJ5Q29udGV4
dC5maWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOwogfQogCi1JbWFnZURyYXdSZXN1bHQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgYXV0byByZXN1bHQgPSBtX3ByaW1hcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgbV9z
ZWNvbmRhcnlDb250ZXh0LmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBt
X3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xl
UmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAotSW1hZ2VEcmF3UmVzdWx0
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIElt
YWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJh
d1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3Rvciwg
aFJ1bGUsIHZSdWxlLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RpbGVk
SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUs
IHZSdWxlLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZmlsbEVsbGlwc2UoZWxsaXBzZSk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxFbGxp
cHNlKGVsbGlwc2UpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnBh
aW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIG1fcHJp
bWFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxQ
YXRoKHBhdGgpOwogfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxlKQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2NhbGUoc2Nh
bGUpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zY2FsZShzY2FsZSk7CisgICAgbV9wcmltYXJ5
Q29udGV4dC5zdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CisgICAgbV9zZWNvbmRh
cnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQucm90YXRlKGFuZ2xlSW5SYWRp
YW5zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKKyAg
ICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgbV9zZWNvbmRh
cnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBt
X3ByaW1hcnlDb250ZXh0LnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
dHJhbnNsYXRlKHgsIHkpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsK
KyAgICBtX3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIG1fcHJpbWFy
eUNvbnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNv
bmNhdENUTSh0cmFuc2Zvcm0pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwg
Ym9yZGVyVGhpY2tuZXNzKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1JlY3QocmVjdCwg
Ym9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIGZyb20sIGNvbnN0IEZs
b2F0UG9pbnQmIHRvKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldENUTSh0cmFuc2Zvcm0pOworICAgIG1fcHJpbWFy
eUNvbnRleHQuZHJhd0xpbmUoZnJvbSwgdG8pOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3
TGluZShmcm9tLCB0byk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVEZXZpY2VTY2FsZSkgY29u
c3QKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LmdldENUTShpbmNs
dWRlRGV2aWNlU2NhbGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7
CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOwogfQogCi1GbG9hdFJl
Y3QgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCit2b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgcmV0
dXJuIG1fcHJpbWFyeUNvbnRleHQucm91bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01v
ZGUpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7CisgICAgbV9zZWNvbmRh
cnlDb250ZXh0LmRyYXdQYXRoKHBhdGgpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0zNzAsMjkgKzI3
NSw1NCBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBkbwogfQogI2VuZGlmCiAKLUZsb2F0U2l6ZSBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgY2Fz
Y2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWdu
ZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCit2b2lkIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXV0byBzaXplID0gbV9wcmltYXJ5Q29u
dGV4dC5kcmF3VGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAg
ICByZXR1cm4gc2l6ZTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFn
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAot
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCit2b2lkIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVy
LCBGaWx0ZXJSZXN1bHRzJiBmaWx0ZXJSZXN1bHRzKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQu
ZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250
U21vb3RoaW5nTW9kZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwor
ICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2Us
IHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRzKTsKKyAgICBtX3NlY29uZGFy
eUNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdl
UmVjdCwgZmlsdGVyLCBmaWx0ZXJSZXN1bHRzKTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0VtcGhhc2lzTWFya3Mo
Y2FzY2FkZSwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3RW1waGFzaXNNYXJrcyhjYXNjYWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0
byk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChj
b25zdCBGb250Q2FzY2FkZSYgY2FzY2FkZSwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0
b21Gb250Tm90UmVhZHlBY3Rpb24pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0JpZGlUZXh0KGNh
c2NhZGUsIHJ1biwgcG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdCaWRpVGV4dChjYXNjYWRlLCBydW4sIHBvaW50LCBjdXN0b21Gb250
Tm90UmVhZHlBY3Rpb24pOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1N5c3RlbUltYWdlKHN5
c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3
U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdHRlcm4oaW1hZ2UsIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9
CisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZm
ZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd1BhdHRl
cm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UGF0dGVybihpbWFn
ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQucGFpbnRGcmFt
ZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5w
YWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Cit9CisjZW5kaWYgLy8gRU5B
QkxFKFZJREVPKQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3sK
KyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOworICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQs
IGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKQEAgLTQwNywxNiArMzM3LDkgQEAgdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwKICAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihyZWN0LCBtYXJrZXJTdHlsZSk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVybCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmwsIHJlY3Qp
OwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVybCwgcmVjdCk7Ci19Ci0K
LXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAogewotICAgIG1f
cHJpbWFyeUNvbnRleHQuc2V0RGVzdGluYXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOwotICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAg
cmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuc3VwcG9ydHNJbnRlcm5hbExpbmtzKCk7CiB9CiAKIHZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCkBAIC00MjUsMTggKzM0OCwx
NiBAQCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2lu
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFkZERl
c3RpbmF0aW9uQXRQb2ludChuYW1lLCBwb2ludCk7CiB9CiAKLWJvb2wgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0
LnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0RGVzdGlu
YXRpb25Gb3JSZWN0KG5hbWUsIHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXREZXN0
aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIHVybCwgY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIC8vIFRoaXMgY2FsbHMgdXBkYXRlU3RhdGUoKSBp
bnN0ZWFkIG9mIGRpZFVwZGF0ZVN0YXRlKCkgc28gdGhhdCBjaGFuZ2VzCi0gICAgLy8gYXJlIGFs
c28gYXBwbGllZCB0byBlYWNoIGNvbnRleHQncyBHcmFwaGljc0NvbnRleHRTdGF0ZSwgc28gdGhh
dCBjb2RlCi0gICAgLy8gaW50ZXJuYWwgdG8gdGhlIGNoaWxkIGNvbnRleHRzIHRoYXQgcmVhZHMg
ZnJvbSB0aGUgc3RhdGUgZ2V0cyB0aGUgcmlnaHQgdmFsdWVzLgotICAgIG1fcHJpbWFyeUNvbnRl
eHQudXBkYXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQudXBk
YXRlU3RhdGUoc3RhdGUsIGZsYWdzKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LnNldFVSTEZvclJl
Y3QodXJsLCByZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0VVJMRm9yUmVjdCh1cmws
IHJlY3QpOwogfQogCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShDQUlSTykKQEAgLTQ0Niw1ICsz
NjcsMTAgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnQKIH0KICNlbmRpZgogCitGbG9hdFJlY3Qg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCit7CisgICAgcmV0dXJuIG1f
cHJpbWFyeUNvbnRleHQucm91bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAppbmRl
eCBmNThiMzRjOTE0MzQyYjczNzc3MjdjMTFhNzNiNmQ4MjE4ZTE1NTZmLi43YTM3YTExM2RkODE1
ZWIzYjk1NjA3NTJkOWRjNzBlYjVhODk3YzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oCkBA
IC00Myw4MyArNDMsNTQgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkg
Y29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkg
ZmluYWw7CisjaWYgVVNFKENHKQorICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKIAotICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkg
ZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKKyNlbmRp
ZgorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwogCisgICAg
dm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBh
cHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogI2lmIFVTRShDRykKICAgICB2b2lkIGFwcGx5U3Ry
b2tlUGF0dGVybigpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwog
I2VuZGlmCi0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBm
aWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBh
dGgmKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9y
KSBmaW5hbDsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KSBmaW5hbDsKICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKLSAgICB2
b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKLQotICAgIHVz
aW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwotCi0gICAgdm9pZCBmaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwotCi0jaWYgVVNFKENHKQotICAgIHZvaWQg
c2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBib29sIGlzQ0FMYXllckNvbnRl
eHQoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9v
bCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNv
bnN0IGZpbmFsOwotCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQp
IGZpbmFsOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQogICAg
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5h
bDsKIAotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6
OkV2ZW5PZGQpIGZpbmFsOwotCi0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7
Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lk
IHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxv
YXQpIGZpbmFsOwotCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWw7Ci0gICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWw7
Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNp
emUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZElt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1
bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBm
aW5hbDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotI2lm
IEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotI2VuZGlmCisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQg
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAg
dm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwotICAgIHZvaWQgdHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5
SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lk
ZXMpIGZpbmFsOworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKIAorICAgIHZvaWQgZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25z
dCBQYXRoJikgZmluYWw7CisgICAgCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYp
IGZpbmFsOwogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTEyNywyMyArOTgsMjYgQEAgcHVibGljOgog
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwg
Ym9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIEZsb2F0U2l6ZSBkcmF3
VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50
JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpu
dWxsb3B0KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAg
dm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KSBmaW5hbDsK
LSAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
biA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFsOworICAgIHZv
aWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IGZpbmFsOworICAgIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmls
dGVyUmVzdWx0cyYpIGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbDsKKyAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBFTkFCTEUo
VklERU8pCisgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKKyNlbmRpZgogCisgICAgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9y
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CiAgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7Ci0K
ICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNv
bnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCi0gICAgdm9pZCBzZXREZXN0aW5h
dGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
LSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IEZsb2F0UG9pbnQmKSBmaW5hbDsKLQogICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBzZXREZXN0aW5hdGlv
bkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9
IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwogCiAjaWYgT1MoV0lORE9XUykgJiYgIVVTRShDQUlSTykK
ICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29u
dGV4dCgpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCmluZGV4IGJiNGRhYzAx
OWM1YjllMTNiMTM3YWU2OTRlNGJmNmIyNzZiZmNjMGQuLjFjMWI5NmVjNWI5ODNjYzVmMThkNmZm
MWZkMjU4NTdmYTk0M2M0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKQEAgLTkwLDcgKzkw
LDcgQEAgdm9pZCBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhd0Nyb3NzZmFkZShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCiBJbWFnZURyYXdSZXN1bHQgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNv
bnRleHQpOwotICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21w
b3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9k
ZSgpIH0pOwogICAgIGNvbnRleHQuY2xpcChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRyYW5zbGF0
ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0
LnNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Ry
YXdHbHlwaHNSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJh
d0dseXBoc1JlY29yZGVyLmgKaW5kZXggMjVhM2QzZmU4NzczMzFkZGEzOTU3ODAxMWI2ZDg5MGYy
MTJjNzJlNi4uM2JjYjUwNWFmM2MyODJmNDIyMzI1Y2Q3ZTMwMDUzNGZkOWY5OWNiOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29y
ZGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiwyNCArMjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgi
CiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCi0j
aWYgVVNFKENPUkVfVEVYVCkKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
Ci0jaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpZiBQTEFURk9STShXSU4pCi0jaW5j
bHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KLSNlbHNlCi0jaW5jbHVkZSA8cGFs
L3NwaS9jZi9Db3JlVGV4dFNQSS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZs
b2F0UG9pbnQ7CkBAIC02Miw3NiArNDksMzIgQEAgcHVibGljOgogI2lmIFVTRShDT1JFX1RFWFQp
ICYmICFQTEFURk9STShXSU4pCiAgICAgdm9pZCBkcmF3TmF0aXZlVGV4dChDVEZvbnRSZWYsIENH
RmxvYXQgZm9udFNpemUsIENUTGluZVJlZiwgQ0dSZWN0IGxpbmVSZWN0KTsKIAotICAgIHZvaWQg
cmVjb3JkQmVnaW5MYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0
KTsKLSAgICB2b2lkIHJlY29yZEVuZExheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRl
UmVmKTsKLSAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dH
U3RhdGVSZWYsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaFtdLCBjb25z
dCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpOwotICAgIHZvaWQgcmVjb3JkRHJh
d0ltYWdlKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBDR1JlY3QsIENHSW1hZ2VS
ZWYpOworICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR0dTdGF0ZVJlZik7CisgICAgdm9pZCBy
ZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJlZik7CisgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENH
R1N0YXRlUmVmLCBjb25zdCBDR0dseXBoW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNp
emVfdCBjb3VudCk7CisgICAgdm9pZCByZWNvcmREcmF3SW1hZ2UoQ0dHU3RhdGVSZWYsIENHUmVj
dCwgQ0dJbWFnZVJlZik7CiAjZW5kaWYKIAotICAgIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNv
bnN0cnVjdERyYXdHbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2RlY29uc3RydWN0RHJhd0dseXBo
czsgfQotCiBwcml2YXRlOgotI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0g
ICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7Ci0j
ZW5kaWYKLQotICAgIHZvaWQgZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5z
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2lu
dCwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUp
OwotCi0gICAgdm9pZCBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmKTsKLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJik7Ci0gICAgdm9pZCBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZv
bnQmLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBjb25jbHVkZUludGVybmFsQ29udGV4
dCgpOworICAgIHZvaWQgc2V0SW50ZXJuYWxGb250KGNvbnN0IEZvbnQmLCBGb250U21vb3RoaW5n
TW9kZSk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgcHJlcGFyZUludGVybmFsQ29udGV4dCgp
OworICAgIHZvaWQgcmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSk7CiAKLSAgICB2b2lkIHVwZGF0ZUZpbGxDb2xvcihjb25z
dCBDb2xvciYsIEdyYWRpZW50KiA9IG51bGxwdHIsIFBhdHRlcm4qID0gbnVsbHB0cik7Ci0gICAg
dm9pZCB1cGRhdGVTdHJva2VDb2xvcihjb25zdCBDb2xvciYsIEdyYWRpZW50KiA9IG51bGxwdHIs
IFBhdHRlcm4qID0gbnVsbHB0cik7Ci0gICAgdm9pZCB1cGRhdGVDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJik7Ci0gICAgZW51bSBjbGFzcyBTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyB7Ci0gICAg
ICAgIFVuc3BlY2lmaWVkLAotICAgICAgICBZZXMsCi0gICAgICAgIE5vCi0gICAgfTsKLSAgICB2
b2lkIHVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hh
ZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyk7Ci0KLSNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQotICAgIHZvaWQgdXBk
YXRlU2hhZG93KENHU3R5bGVSZWYpOwotI2VuZGlmCisgICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4o
Y29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2b2lkIGRyYXdPVFNWR1J1bihjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGlu
Z01vZGUpOworICAgIHZvaWQgZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5z
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50
LCBGb250U21vb3RoaW5nTW9kZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fb3duZXI7Cisg
ICAgR3JhcGhpY3NDb250ZXh0JiBtX2Rlc3RpbmF0aW9uQ29udGV4dDsKICAgICBEZWNvbnN0cnVj
dERyYXdHbHlwaHMgbV9kZWNvbnN0cnVjdERyYXdHbHlwaHM7CiAgICAgRGVyaXZlRm9udEZyb21D
b250ZXh0IG1fZGVyaXZlRm9udEZyb21Db250ZXh0OwogCi0jaWYgVVNFKENPUkVfVEVYVCkgJiYg
IVBMQVRGT1JNKFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFs
Q29udGV4dDsKLSNlbmRpZgotCiAgICAgY29uc3QgRm9udCogbV9vcmlnaW5hbEZvbnQgeyBudWxs
cHRyIH07CiAgICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlIHsgRm9udFNtb290
aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9vcmlnaW5h
bFRleHRNYXRyaXg7CiAKLSAgICBzdHJ1Y3QgU3RhdGUgewotICAgICAgICBzdHJ1Y3QgU3R5bGUg
ewotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBSZWZQdHI8R3JhZGllbnQ+
IGdyYWRpZW50OwotICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFu
c2Zvcm07Ci0gICAgICAgICAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybjsKLSAgICAgICAgfTsK
LSAgICAgICAgU3R5bGUgZmlsbFN0eWxlOwotICAgICAgICBTdHlsZSBzdHJva2VTdHlsZTsKLQot
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotCi0gICAgICAgIHN0cnVjdCBTaGFkb3dTdGF0
ZSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0OwotICAgICAgICAgICAgZmxvYXQgYmx1
ciB7IDAgfTsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAgICAgICAgYm9vbCBpZ25v
cmVUcmFuc2Zvcm1zIHsgZmFsc2UgfTsKLSAgICAgICAgfTsKLSAgICAgICAgU2hhZG93U3RhdGUg
c2hhZG93OwotICAgIH07Ci0gICAgU3RhdGUgbV9vcmlnaW5hbFN0YXRlOwotICAgIFN0YXRlIG1f
Y3VycmVudFN0YXRlOworI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAg
VW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA4NTE4MGFkMTA5ZmQ4MThlOWJiMTU4OGNl
OTYyYWI0NjMwODE2YTA5Li4zNjExYjEyY2E5YWIyOWViOTIxZjIzMjVlMWY5NmQyOTUyNTNjN2Nm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFy
a3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4KIAogc3RkOjp1
bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6
ZGlzcGxheUxpc3RGb3JUZXh0UnVuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bywgQ3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikgY29uc3QKIHsK
LSAgICBBU1NFUlQoIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKTsKKyAgICBBU1NFUlRfVU5V
U0VEKGNvbnRleHQsICFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSk7CiAgICAgdW5zaWduZWQg
ZGVzdGluYXRpb24gPSB0by52YWx1ZV9vcihydW4ubGVuZ3RoKCkpOwogICAgIAogICAgIC8vIEZJ
WE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMg
d2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1
MApAQCAtMjE0LDcgKzIxNCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5NZW1v
cnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6SW5N
ZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpJ
bk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgcmVj
b3JkaW5nQ29udGV4dCgqZGlzcGxheUxpc3QsIGNvbnRleHQuc3RhdGUoKSwgRmxvYXRSZWN0KCks
IEFmZmluZVRyYW5zZm9ybSgpLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0ds
eXBoczo6Tm8pOworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgcmVjb3JkaW5nQ29udGV4
dCgqZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgRHJhd0dseXBo
c1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKTsKICAgICAKICAgICBGbG9hdFBv
aW50IHN0YXJ0UG9pbnQgPSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5p
bml0aWFsQWR2YW5jZSgpKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQs
IGdseXBoQnVmZmVyLCBzdGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcApp
bmRleCA2NDU4NGU1Y2ZlMDExODgyZWZhYjJlMjNjM2E1OTRlMTc4MmYyODkwLi4yZjgyN2Y2MjVm
NjRiNTljYTFhNjY0OTYwNzMwZjAzYzIzYmMzN2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcApAQCAtNDMsNyArNDMsNyBAQCBH
cmFkaWVudEltYWdlOjp+R3JhZGllbnRJbWFnZSgpID0gZGVmYXVsdDsKIEltYWdlRHJhd1Jlc3Vs
dCBHcmFkaWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGRlc3RDb250ZXh0KTsKLSAgICBkZXN0Q29udGV4dC5zZXRDb21wb3Np
dGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9k
ZSgpKTsKKyAgICBkZXN0Q29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3Np
dGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGRlc3RDb250ZXh0LmNs
aXAoZGVzdFJlY3QpOwogICAgIGRlc3RDb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC5sb2NhdGlv
bigpKTsKICAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpAQCAtNjIs
NyArNjIsNyBAQCB2b2lkIEdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZAogICAgIG1fZ3JhZGllbnQtPmFkanVz
dFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoYWRqdXN0ZWRTaXplLCBhZGp1c3RlZFNyY1JlY3Qs
IHNwYWNpbmcpOwogCiAgICAgLy8gRmFjdG9yIGluIHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0J3Mg
c2NhbGUgdG8gZ2VuZXJhdGUgYXQgdGhlIGJlc3QgcmVzb2x1dGlvbgotICAgIEFmZmluZVRyYW5z
Zm9ybSBkZXN0Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6
OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIEFmZmluZVRyYW5zZm9ybSBkZXN0
Q29udGV4dENUTSA9IGRlc3RDb250ZXh0LmdldENUTSgpOwogICAgIGRvdWJsZSB4U2NhbGUgPSBm
YWJzKGRlc3RDb250ZXh0Q1RNLnhTY2FsZSgpKTsKICAgICBkb3VibGUgeVNjYWxlID0gZmFicyhk
ZXN0Q29udGV4dENUTS55U2NhbGUoKSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGFkanVzdGVkUGF0
dGVybkNUTSA9IHBhdHRlcm5UcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCAwYmIxMzU5N2NlYTczNjlk
YmJjNmUxNzI3ZjI2YzkyYjhmYjc1MTc2Li5jZjhjNzE4YjgxMmM3OTc5MWYyYmUzZWI3ZDhiZThk
NTVhMmMzM2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAKICNpbmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckltYWdlLmgi
CiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgpAQCAtMzYsNDczICszNSwzMTAgQEAKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGUuaCIKLSNpbmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJTeXN0ZW1JbWFnZS5oIgotI2luY2x1
ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0Qm94SXRlcmF0b3IuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGV4
dEJveEl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBUZXh0Qm94SXRlcmF0b3IoKQotICAgICAgICA6
IG1fdGV4dFJ1bigwKQotICAgICAgICAsIG1fb2Zmc2V0KDApCi0gICAgewotICAgIH0KLQotICAg
IFRleHRCb3hJdGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBvZmZzZXQp
Ci0gICAgICAgIDogbV90ZXh0UnVuKHRleHRSdW4pCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0
KQotICAgIHsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldDsgfQotICAgIHZvaWQgaW5jcmVtZW50KCkgeyBtX29mZnNldCsrOyB9Ci0gICAgYm9v
bCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHRSdW4gfHwgbV9vZmZzZXQgPj0gbV90ZXh0
UnVuLT5sZW5ndGgoKTsgfQotICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoKm1f
dGV4dFJ1bilbbV9vZmZzZXRdOyB9Ci0gICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gYXRFbmQoKSA/IFVfT1RIRVJfTkVVVFJBTCA6IHVfY2hhckRpcmVjdGlvbihj
dXJyZW50KCkpOyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5t
X29mZnNldCAmJiBtX3RleHRSdW4gPT0gb3RoZXIubV90ZXh0UnVuOwotICAgIH0KLQotICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVy
biAhb3BlcmF0b3I9PShvdGhlcik7IH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBUZXh0UnVuKiBt
X3RleHRSdW47Ci0gICAgdW5zaWduZWQgbV9vZmZzZXQ7Ci19OwotCi0jZGVmaW5lIENIRUNLX0ZP
Ul9DSEFOR0VEX1BST1BFUlRZKGZsYWcsIHByb3BlcnR5KSBcCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OmZsYWcpICYmIChtX3N0YXRlLnByb3Bl
cnR5ICE9IHN0YXRlLnByb3BlcnR5KSkgXAotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmZsYWcpOwotCi1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGUoKQotICAgIDogc2hvdWxkQW50aWFsaWFzKHRydWUpCi0gICAgLCBzaG91bGRT
bW9vdGhGb250cyh0cnVlKQotICAgICwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHRydWUp
Ci0gICAgLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkKLSAgICAsIGRyYXdMdW1pbmFu
Y2VNYXNrKGZhbHNlKQorR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZUZs
YWdzJiBjaGFuZ2VGbGFncywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQorICAg
IDogbV9zdGF0ZShpbml0aWFsQ2xpcCwgY2hhbmdlRmxhZ3MsIGluaXRpYWxDVE0pCiB7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dFN0YXRlOjp+R3JhcGhpY3NDb250ZXh0U3RhdGUoKSA9IGRlZmF1bHQ7
Ci1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJikgPSBkZWZhdWx0OwotR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVyYXRvcj0oY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7Ci1HcmFwaGljc0NvbnRleHRTdGF0ZSYgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKSA9IGRl
ZmF1bHQ7Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyhjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGZsYWdzKQorR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKIHsK
LSAgICBhdXRvIHN0cm9rZUZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29s
b3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3Mu
Y29udGFpbnNBbnkoc3Ryb2tlRmxhZ3MpKSB7Ci0gICAgICAgIHN0cm9rZUNvbG9yID0gc3RhdGUu
c3Ryb2tlQ29sb3I7Ci0gICAgICAgIHN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ryb2tlR3JhZGll
bnQ7Ci0gICAgICAgIHN0cm9rZVBhdHRlcm4gPSBzdGF0ZS5zdHJva2VQYXR0ZXJuOwotICAgIH0K
LQotICAgIGF1dG8gZmlsbEZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnNBbnkoZmlsbEZsYWdzKSkgewotICAgICAgICBmaWxsQ29sb3IgPSBzdGF0ZS5maWxsQ29sb3I7
Ci0gICAgICAgIGZpbGxHcmFkaWVudCA9IHN0YXRlLmZpbGxHcmFkaWVudDsKLSAgICAgICAgZmls
bFBhdHRlcm4gPSBzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgc2hh
ZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICBzaGFkb3dCbHVyID0gc3Rh
dGUuc2hhZG93Qmx1cjsKLSAgICAgICAgc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsK
LSAgICAgICAgc2hhZG93UmFkaXVzTW9kZSA9IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7Ci0gICAg
fQotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UpKQotICAgICAgICBzdHJva2VUaGlja25lc3MgPSBzdGF0ZS5zdHJva2VU
aGlja25lc3M7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIHRleHREcmF3aW5nTW9kZSA9IHN0YXRl
LnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBzdHJva2VTdHlsZSA9IHN0YXRl
LnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAgIGZpbGxSdWxlID0gc3RhdGUuZmlsbFJ1bGU7
CisgICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fdHJhbnNwYXJl
bmN5TGF5ZXJDb3VudCk7Cit9CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgYWxwaGEgPSBzdGF0ZS5hbHBoYTsKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKK3sKKyAgICBtX3N0YWNrLmFwcGVuZChtX3N0YXRl
KTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1v
ZGVDaGFuZ2UgfSkpIHsKLSAgICAgICAgY29tcG9zaXRlT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3Np
dGVPcGVyYXRvcjsKLSAgICAgICAgYmxlbmRNb2RlID0gc3RhdGUuYmxlbmRNb2RlOwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQoreworICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkg
eworICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3Jl
KCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdl
KSkKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gc3RhdGUuc2hvdWxkQW50aWFsaWFzOworICAg
IG1fc3RhdGUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgbV9sYXN0QXBwbGllZFN0YXRlID0g
c3RkOjpudWxsb3B0OwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIHNob3VsZFNtb290aEZvbnRz
ID0gc3RhdGUuc2hvdWxkU21vb3RoRm9udHM7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0g
ICAgICAgIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHN0YXRlLnNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250czsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyA9IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIC8vIE1h
a2Ugc3VyZSB3ZSBkZWFsbG9jYXRlIHRoZSBzdGF0ZSBzdGFjayBidWZmZXIgd2hlbiBpdCBnb2Vz
IGVtcHR5LgorICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBh
Z2FpbiwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KKyAgICBpZiAobV9zdGFj
ay5pc0VtcHR5KCkpCisgICAgICAgIG1fc3RhY2suY2xlYXIoKTsKK30KIAotICAgIGlmIChmbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2Up
KQotICAgICAgICBkcmF3THVtaW5hbmNlTWFzayA9IHN0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRpZEFwcGx5U3RhdGVDaGFuZ2VzKCkKK3sKKyAgICBtX3N0
YXRlLmRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgbV9sYXN0QXBwbGllZFN0YXRlID0gbV9z
dGF0ZTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIGltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkgPSBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OworRmxvYXRTaXpl
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oKTsKKyAgICByZXR1cm4gRmxvYXRTaXplKHRyYW5zZm9y
bS54U2NhbGUoKSwgdHJhbnNmb3JtLnlTY2FsZSgpKTsKK30KKyAgICAKK0Zsb2F0U2l6ZSBHcmFw
aGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIGF1dG8gdHJhbnNmb3JtZWREZXN0UmVjdCA9
IHRyYW5zZm9ybS5tYXBSZWN0KGRlc3RSZWN0KTsKKyAgICByZXR1cm4gdHJhbnNmb3JtZWREZXN0
UmVjdC5zaXplKCkgLyBzcmNSZWN0LnNpemUoKTsKK30KIAotI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpV
c2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIHVzZURhcmtBcHBlYXJhbmNlID0gc3Rh
dGUudXNlRGFya0FwcGVhcmFuY2U7Ci0jZW5kaWYKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQoreworICAgICsrbV90cmFuc3BhcmVuY3lMYXllckNv
dW50OwogfQogCi1HcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUpIGNvbnN0Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKQogewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IGNoYW5nZUZsYWdzOworICAgIEFTU0VSVChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsK
KyAgICAtLW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKK30KIAotICAgIENIRUNLX0ZPUl9DSEFO
R0VEX1BST1BFUlRZKFN0cm9rZUdyYWRpZW50Q2hhbmdlLCBzdHJva2VHcmFkaWVudCk7Ci0gICAg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlUGF0dGVybkNoYW5nZSwgc3Ryb2tlUGF0
dGVybik7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoRmlsbEdyYWRpZW50Q2hhbmdl
LCBmaWxsR3JhZGllbnQpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxQYXR0
ZXJuQ2hhbmdlLCBmaWxsUGF0dGVybik7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9zdGF0ZS5jbGlwKHJlY3QpOworfQogCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSkKLSAgICAgICAgJiYgKG1fc3RhdGUuc2hhZG93T2Zmc2V0ICE9IHN0YXRlLnNoYWRvd09m
ZnNldAotICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dCbHVyICE9IHN0YXRlLnNoYWRvd0Js
dXIKLSAgICAgICAgICAgIHx8IG1fc3RhdGUuc2hhZG93Q29sb3IgIT0gc3RhdGUuc2hhZG93Q29s
b3IpKQotICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d0NoYW5nZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0
aCwgV2luZFJ1bGUpCit7CisgICAgbV9zdGF0ZS5jbGlwKHBhdGguZmFzdEJvdW5kaW5nUmVjdCgp
KTsKK30KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFN0cm9rZVRoaWNrbmVzc0No
YW5nZSwgc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShU
ZXh0RHJhd2luZ01vZGVDaGFuZ2UsIHRleHREcmF3aW5nTW9kZSk7Ci0gICAgQ0hFQ0tfRk9SX0NI
QU5HRURfUFJPUEVSVFkoU3Ryb2tlQ29sb3JDaGFuZ2UsIHN0cm9rZUNvbG9yKTsKLSAgICBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsQ29sb3JDaGFuZ2UsIGZpbGxDb2xvcik7Ci0gICAg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlU3R5bGVDaGFuZ2UsIHN0cm9rZVN0eWxl
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsUnVsZUNoYW5nZSwgZmlsbFJ1
bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEFscGhhQ2hhbmdlLCBhbHBoYSk7
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91bmRlZFJlY3Qo
cmVjdCk7CisgICAgY2xpcFBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFu
Z2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkKLSAgICAgICAgJiYg
KG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgIT0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgfHwg
bV9zdGF0ZS5ibGVuZE1vZGUgIT0gc3RhdGUuYmxlbmRNb2RlKSkgewotICAgICAgICBjaGFuZ2VG
bGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSk7
Ci0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2Rl
Q2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsK
KyAgICAgICAgY2xpcE91dChyZWN0LnJlY3QoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTaG91bGRBbnRpYWxpYXNDaGFuZ2UsIHNo
b3VsZEFudGlhbGlhcyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hvdWxkU21v
b3RoRm9udHNDaGFuZ2UsIHNob3VsZFNtb290aEZvbnRzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdF
RF9QUk9QRVJUWShTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UsIHNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU2hhZG93
c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBD
SEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShEcmF3THVtaW5hbmNlTWFza0NoYW5nZSwgZHJhd0x1
bWluYW5jZU1hc2spOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2UsIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotCi0jaWYg
SEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSwgdXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlmCi0K
LSAgICByZXR1cm4gY2hhbmdlRmxhZ3M7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkUm91
bmRlZFJlY3QocmVjdCk7CisgICAgY2xpcE91dChwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9zdGF0ZS5t
ZXJnZUNoYW5nZXMoc3RhdGUsIGZsYWdzKTsKLQotICAgIGF1dG8gc3Ryb2tlRmxhZ3MgPSB7IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0
dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShzdHJva2VGbGFncykpCi0g
ICAgICAgIG1fY2hhbmdlRmxhZ3MucmVtb3ZlKHN0cm9rZUZsYWdzKTsKLQotICAgIGF1dG8gZmls
bEZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbFBhdHRlcm5DaGFuZ2UgfTsKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoZmlsbEZsYWdz
KSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoZmlsbEZsYWdzKTsKLQotICAgIGF1dG8g
Y29tcG9zaXRlT3BlcmF0b3JGbGFncyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0
ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9
OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShjb21wb3NpdGVPcGVyYXRvckZsYWdzKSkKLSAg
ICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoY29tcG9zaXRlT3BlcmF0b3JGbGFncyk7Ci0KLSAg
ICBtX2NoYW5nZUZsYWdzLmFkZChmbGFncyk7CisgICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygq
dGhpcywgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7
Ci0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VHcmFkaWVudCgq
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNm
b3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VQYXR0
ZXJuKCptX3N0YXRlLnN0cm9rZVBhdHRlcm4pOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpCi0gICAgICAg
IGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KCptX3N0YXRlLmZpbGxHcmFkaWVudCwgbV9zdGF0ZS5m
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKQotICAgICAgICBj
b250ZXh0LnNldEZpbGxQYXR0ZXJuKCptX3N0YXRlLmZpbGxQYXR0ZXJuKTsKLQotICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKLSAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsK
LQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVz
cyhtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAgYXV0byBwcmV2aW91c0NvbXBvc2l0ZU1v
ZGUgPSBjb21wb3NpdGVNb2RlKCk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgY29u
dGV4dC5zZXRUZXh0RHJhd2luZ01vZGUobV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNv
bG9yQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihtX3N0YXRlLnN0cm9r
ZUNvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvciht
X3N0YXRlLmZpbGxDb2xvcik7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZVN0eWxlKG1fc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAg
ICAgY29udGV4dC5zZXRGaWxsUnVsZShtX3N0YXRlLmZpbGxSdWxlKTsKLQotICAgIGlmIChtX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0QWxwaGEobV9zdGF0ZS5hbHBoYSk7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IsIG1fc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAg
ICBjb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhtX3N0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFNob3VsZFNtb290aEZv
bnRzKG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLQotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0No
YW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0RHJhd0x1bWluYW5jZU1hc2sobV9zdGF0ZS5kcmF3
THVtaW5hbmNlTWFzayk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAg
IGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpOwotCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0Fw
cGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFVzZURhcmtBcHBlYXJhbmNlKG1f
c3RhdGUudXNlRGFya0FwcGVhcmFuY2UpOwotI2VuZGlmCisgICAgc2V0Q29tcG9zaXRlTW9kZSh7
IG9wZXJhdGlvbiwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKKyAg
ICBzZXRDb21wb3NpdGVNb2RlKHByZXZpb3VzQ29tcG9zaXRlTW9kZSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVu
dCYgZ3JhZGllbnQpCiB7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjaGFuZ2UtZmxhZ3MiLCBtX2No
YW5nZUZsYWdzLnRvUmF3KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJzdHJva2UtZ3JhZGllbnQiLCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgp
KTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJva2Ut
cGF0dGVybiIsIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdl
KSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWdyYWRpZW50IiwgbV9zdGF0ZS5maWxs
R3JhZGllbnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJmaWxsLXBhdHRlcm4iLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKTsKKyAgICBncmFk
aWVudC5maWxsKCp0aGlzLCByZWN0KTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRvd0JsdXIpOwotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRlLnNoYWRvd09mZnNldCk7Ci0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWNvbG9yIiwgbV9zdGF0ZS5zaGFkb3dDb2xv
cik7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyIs
IG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7Cisg
ICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CisgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgp
LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7CisgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgICAgIAorICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0
b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKKyAgICBzZXRDb21wb3NpdGVNb2RlKHsgcHJldmlv
dXNPcGVyYXRvciwgYmxlbmRNb2RlIH0pOworICAgIGZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xv
cik7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKHByZXZpb3VzT3BlcmF0b3IpOworfQogCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLXRoaWNr
bmVzcyIsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQot
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRleHQtZHJhd2luZy1tb2RlIiwgbV9zdGF0ZS50ZXh0
RHJhd2luZ01vZGUudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoInN0cm9rZS1jb2xvciIsIG1fc3RhdGUuc3Ryb2tlQ29sb3IpOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNo
YW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZmlsbC1jb2xvciIsIG1fc3RhdGUuZmls
bENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic3Ry
b2tlLXN0eWxlIiwgbV9zdGF0ZS5zdHJva2VTdHlsZSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAg
ICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwogCi0gICAgaWYgKG1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLXJ1bGUiLCBtX3N0YXRlLmZpbGxSdWxlKTsKKyAg
ICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVybygpKQorICAgICAgICBwYXRoLmFk
ZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7CisgICAgZWxzZQorICAgICAgICBwYXRoLmFk
ZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoImFscGhhIiwgbV9zdGF0ZS5hbHBoYSk7CisgICAgV2luZFJ1bGUgb2xkRmls
bFJ1bGUgPSBmaWxsUnVsZSgpOworICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigp
OworICAgIAorICAgIHNldEZpbGxSdWxlKFdpbmRSdWxlOjpFdmVuT2RkKTsKKyAgICBzZXRGaWxs
Q29sb3IoY29sb3IpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdG9yIiwgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvcik7
CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgCisgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUp
OworICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOworfQogCi0gICAgaWYgKG1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIG1fc3RhdGUuYmxlbmRNb2RlKTsK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNl
KTsKKyAgICBmaWxsUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1hbnRpYWxpYXMiLCBtX3N0YXRlLnNob3VsZEFudGlh
bGlhcyk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpCit7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBz
ZShlbGxpcHNlKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaG91bGQtc21vb3RoLWZvbnRzIiwgbV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNl
ZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9y
LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCit7CisgICAgYXV0byBvbGRGaWxsQ29sb3IgPSBm
aWxsQ29sb3IoKTsKKyAgICBhdXRvIG9sZFN0cm9rZUNvbG9yID0gc3Ryb2tlQ29sb3IoKTsKIAot
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHko
InNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsIG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzKTsKKyAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOworICAgIHNldFN0
cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKKyAgICBkcmF3RWxsaXBzZShGbG9hdFJlY3QocmVjdC54
KCksIHJlY3QueSgpICsgMSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CiAKLSAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0ln
bm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvd3Mt
aWdub3JlLXRyYW5zZm9ybXMiLCBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAg
ICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKKyAgICBzZXRTdHJva2VDb2xvcihlbGxpcHNl
Q29sb3IpOworICAgIGRyYXdFbGxpcHNlKHJlY3QpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKSkK
LSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJkcmF3LWx1bWluYW5jZS1tYXNrIiwgbV9zdGF0ZS5k
cmF3THVtaW5hbmNlTWFzayk7CisgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7CisgICAg
c2V0U3Ryb2tlQ29sb3Iob2xkU3Ryb2tlQ29sb3IpOworfQogCi0jaWYgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoInVzZS1kYXJrLWFwcGVhcmFuY2UiLCBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlKTsKLSNl
bmRpZgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7
CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAg
c3RhdGVDaGFuZ2UuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOworICAgIGRyYXdJbWFnZUJ1ZmZl
cihpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxv
YXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsK
IH0KIAotR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGlu
Z09wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQo
IW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7CisgICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBk
ZXN0aW5hdGlvbiwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFp
bnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YWNrLmFwcGVuZChtX3N0
YXRlKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1
YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7
CisgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29u
c3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0
YWNrIGlzIGVtcHR5Iik7CisgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fc3RhdGUgPSBtX3N0YWNrLmxhc3QoKTsKLSAgICBtX3N0YWNrLnJlbW92ZUxhc3Qo
KTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZWFsbG9jYXRlIHRoZSBzdGF0ZSBzdGFjayBidWZm
ZXIgd2hlbiBpdCBnb2VzIGVtcHR5LgotICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVk
aWF0ZWx5IHNhdmUoKSBhZ2FpbiwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4K
LSAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhY2suY2xlYXIoKTsKKyAg
ICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIEZsb2F0UmVjdChkZXN0aW5hdGlv
biwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBp
bWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdD
b25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCiB7Ci0gICAgbV9zdGF0ZS5tZXJnZUNoYW5nZXMoc3RhdGUsIGZsYWdzKTsK
LSAgICBkaWRVcGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOworICAgIGlmICghaW1hZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNp
emUoKTsKKyAgICBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIGRlc3Rp
bmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09w
dGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xv
ciYgc2hhZG93Q29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdl
QnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBzYXZlKCk7Ci0KLSAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dD
b2xvcik7Ci0gICAgc2V0RmlsbENvbG9yKHNoYWRvd0NvbG9yKTsKLQotICAgIGRyYXdFbGxpcHNl
KEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpKTsKLQotICAgIHNldFN0cm9rZUNvbG9yKGVsbGlwc2VDb2xvcik7Ci0gICAgc2V0Rmls
bENvbG9yKGVsbGlwc2VDb2xvcik7Ci0KLSAgICBkcmF3RWxsaXBzZShyZWN0KTsgIAotCi0gICAg
cmVzdG9yZSgpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBJbnRlcnBv
bGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUo
KnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgSW1hZ2VCdWZmZXI6
OmRyYXdDb25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNl
LCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKIHsKLSAg
ICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVu
dCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBk
aWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JD
aGFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBzb3Vy
Y2VJbWFnZVJlY3QsIHJlc3VsdHMpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKTsKKyAg
ICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBzY2FsZSh7IDEgLyBm
aWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVp
Z2h0KCkgfSk7CisgICAgZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgcmVzdWx0LT5hYnNv
bHV0ZUltYWdlUmVjdCgpKTsKKyAgICBzY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQs
IGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hhZG93UmFkaXVzTW9kZSByYWRpdXNN
b2RlKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNl
dCA9IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwotICAgIG1fc3RhdGUu
c2hhZG93Q29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSByYWRp
dXNNb2RlOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dDaGFuZ2UpOworICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChk
ZXN0aW5hdGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uu
c2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJTaGFkb3coKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUu
c2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsK
LSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKLSAgICBtX3N0YXRlLnNoYWRvd1Jh
ZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0OwotICAgIGRpZFVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOworICAgIEZsb2F0
UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZShpbWFnZVBhaW50aW5nT3B0aW9u
cy5vcmllbnRhdGlvbigpKSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRp
b24sIHNyY1JlY3QsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotYm9vbCBHcmFwaGljc0Nv
bnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJsdXIsIENvbG9yJiBj
b2xvcikgY29uc3QKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBv
ZmZzZXQgPSBtX3N0YXRlLnNoYWRvd09mZnNldDsKLSAgICBibHVyID0gbV9zdGF0ZS5zaGFkb3dC
bHVyOwotICAgIGNvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKLQotICAgIHJldHVybiBoYXNT
aGFkb3coKTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlv
blF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHko
KSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9w
dGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZElt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAg
IG1fc3RhdGUuZmlsbENvbG9yID0gY29sb3I7Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBu
dWxscHRyOwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOwor
ICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZv
clRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBy
ZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJv
a2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCitJbWFnZURyYXdSZXN1bHQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwKKyAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVs
ZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9z
dGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVs
bHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAg
IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0
ZXJuQ2hhbmdlKTsKKyAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxl
ID09IEltYWdlOjpTdHJldGNoVGlsZSkgeworICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCisg
ICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlv
bnMpOworICAgIH0KKworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBv
bGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwg
c291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgb3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJl
ZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1N5c3RlbUlt
YWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
blJlY3QpCiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5maWxs
R3JhZGllbnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKHBh
dHRlcm4pOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgc3lzdGVtSW1hZ2UuZHJhdygqdGhpcywgZGVzdGlu
YXRpb25SZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50
KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJu
KEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLnN0cm9rZUNv
bG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50
KTsKLSAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7
Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUdyYWRpZW50Q2hhbmdlKTsKKyAgICBpbWFnZS5kcmF3UGF0dGVybigqdGhpcywgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYm
IGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxHcmFkaWVudFNwYWNlVHJhbnNm
b3JtKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bikKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBtX3N0YXRlLmZpbGxHcmFk
aWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwotICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0gPSBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKLSAgICBtX3N0YXRlLmZpbGxQ
YXR0ZXJuID0gbnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKTsKLSAgICAvLyBGSVhNRTogYWxzbyBmaWxs
IHBhdHRlcm4/CisgICAgcGxheWVyLnBsYXllclByaXZhdGUoKS0+cGFpbnRDdXJyZW50RnJhbWVJ
bkNvbnRleHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRpZgogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZ01vZGUpCiB7Ci0gICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CisgICAgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUds
eXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5
cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZ01vZGUpCiB7Ci0gICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDAp
OwotICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworICAgIGRyYXdHbHlwaHMoZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwog
fQogCiBGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5z
aWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8pCkBAIC01MTEsMTEgKzM0Nyw2
IEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRo
aXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhz
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5n
TW9kZSkKLXsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwotfQotCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHRvKQogewogICAgIGZvbnQuZHJhd0VtcGhhc2lzTWFya3MoKnRoaXMsIHJ1biwgbWFyaywgcG9p
bnQsIGZyb20sIHRvKTsKQEAgLTU0OSw3ICszODAsNDUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVu
LAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4dCgpOwogICAgIH0KIAotICAgIGJpZGlS
dW5zLmNsZWFyKCk7CisgICAgYmlkaVJ1bnMuY2xlYXIoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5bGUpCit7CisgICAgZHJh
d0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7
IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOwor
fQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9y
VGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcpCit7CisgICAgQ29sb3Ig
ZHVtbXlDb2xvcjsKKyAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xvcik7Cit9CisKK0Zsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRl
eHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCit7
CisgICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7CisgICAgZmxvYXQgdGhp
Y2tuZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7CisgICAgaWYgKHByaW50aW5n
KQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgo
KSwgdGhpY2tuZXNzKSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RN
KCk7CisgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4
IGFuZCB5IHNjYWxlcyBhcmUgZXF1YWwuCisgICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigp
ID8gc3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5h
KCk7CisgICAgaWYgKHNjYWxlIDwgMS4wKSB7CisgICAgICAgIC8vIFRoaXMgY29kZSBhbHdheXMg
ZHJhd3MgYSBsaW5lIHRoYXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxpbmUgaGlnaCwKKyAgICAg
ICAgLy8gd2hpY2ggdGVuZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRleHQgYXQgc21hbGwgc2Nh
bGVzLiBUbyBjb3VudGVyIHRoaXMKKyAgICAgICAgLy8gZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBs
aWVkIHRvIHRoZSB1bmRlcmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4K
KyAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA9IDAuNGY7
CisgICAgICAgIGZsb2F0IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPyBz
Y2FsZSA6IG1pbmltdW1VbmRlcmxpbmVBbHBoYTsKKyAgICAgICAgY29sb3IgPSBjb2xvci5jb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeShzaGFkZSk7CisgICAgfQorCisgICAgRmxvYXRQb2ludCBk
ZXZpY2VQb2ludCA9IHRyYW5zZm9ybS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIC8v
IFZpc3VhbCBvdmVyZmxvdyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0byBpbnRlZ3JhbCByb3VuZGYv
Y2VpbGYuIHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRqdXN0cyB0aGUgb3ZlcmZsb3cg
dmFsdWUgZm9yIHVuZGVybGluZSBkZWNvcmF0aW9uLgorICAgIEZsb2F0UG9pbnQgZGV2aWNlT3Jp
Z2luID0gRmxvYXRQb2ludChyb3VuZGYoZGV2aWNlUG9pbnQueCgpKSwgY2VpbGYoZGV2aWNlUG9p
bnQueSgpKSk7CisgICAgaWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCkpCisg
ICAgICAgIG9yaWdpbiA9IGludmVyc2UudmFsdWUoKS5tYXBQb2ludChkZXZpY2VPcmlnaW4pOwor
ICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlj
a25lc3MpKTsKIH0KIAogc3RhdGljIEludFNpemUgc2NhbGVkSW1hZ2VCdWZmZXJTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKQEAgLTYzOSwxODcgKzUw
OCw5IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVBbGlnbmVk
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByCiAgICAgcmV0dXJuIGNyZWF0ZVNjYWxlZElt
YWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUo
KSwgcmVuZGVyaW5nTWV0aG9kKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb25SZWN0KQotewotICAgIHN5c3RlbUltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uUmVj
dCk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgcmV0dXJuIGRyYXdJbWFn
ZShpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0K
LUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBv
aW50KCksIGltYWdlLnNpemUoaW1hZ2VQYWludGluZ09wdGlvbnMub3JpZW50YXRpb24oKSkpOwot
ICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzcmNSZWN0LCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxp
dHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0g
ICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMp
OwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9p
bnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2Nv
cGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGlt
YWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNp
bmcsIG9wdGlvbnMpOwotfQotCi1JbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwK
LSAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGhSdWxlID09IEltYWdl
OjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKLSAgICAgICAg
Ly8gSnVzdCBkbyBhIHNjYWxlLgotICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICB9Ci0KLSAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9w
dGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgcmV0dXJuIGltYWdlLmRyYXdUaWxl
ZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1
bGUsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFBvaW50
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0
aW9uLCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2UubG9naWNhbFNp
emUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9u
cykKLXsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3Qo
eyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEludGVycG9sYXRpb25R
dWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywg
b3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBpbWFnZS5kcmF3KCp0aGlzLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25z
dCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBhdXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKLSAgICBk
cmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIEZsb2F0UmVjdChkZXN0aW5h
dGlvbiwgaW1hZ2VMb2dpY2FsU2l6ZSksIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUp
LCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFp
bnRpbmdPcHRpb25zKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBh
dXRvIGltYWdlTG9naWNhbFNpemUgPSBpbWFnZS0+bG9naWNhbFNpemUoKTsKLSAgICBkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSksIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3Qo
eyB9LCBpbWFnZUxvZ2ljYWxTaXplKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBp
ZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWlu
dGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmlu
dGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdU
Rk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXIm
IGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKLXsKLSAgICBhdXRvIHJlc3VsdCA9IGZp
bHRlci5hcHBseShzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCByZXN1bHRzKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSByZXN1bHQtPmltYWdlQnVmZmVyKCk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwg
MSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOwotICAgIGRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIsIHJlc3VsdC0+YWJzb2x1dGVJbWFnZVJlY3QoKSk7Ci0gICAgc2NhbGUo
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bh
dHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlLmRyYXdQ
YXR0ZXJuKCp0aGlzLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsK
LSAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwotICAgIGNsaXBQYXRoKHBhdGgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7Ci0gICAgICAg
IGNsaXBPdXQocmVjdC5yZWN0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGF0
aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcE91dChwYXRo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0g
ICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKLX0KLQot
SW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFk
aWVudCkKLXsKLSAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAg
ICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9u
KCk7Ci0gICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotICAgIGZpbGxS
ZWN0KHJlY3QsIGNvbG9yKTsKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVy
YXRvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQotewotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKSB7Ci0gICAgICAgIHNldENvbXBv
c2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKLSAgICAgICAg
ZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7Ci0gICAgICAgIHNldENvbXBvc2l0ZU9w
ZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZpbGxS
ZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZFJl
Y3QocmVjdCk7Ci0KLSAgICBpZiAoIXJvdW5kZWRIb2xlUmVjdC5yYWRpaSgpLmlzWmVybygpKQot
ICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJvdW5kZWRIb2xlUmVjdCk7Ci0gICAgZWxzZQot
ICAgICAgICBwYXRoLmFkZFJlY3Qocm91bmRlZEhvbGVSZWN0LnJlY3QoKSk7CiAKLSAgICBXaW5k
UnVsZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7Ci0gICAgQ29sb3Igb2xkRmlsbENvbG9yID0g
ZmlsbENvbG9yKCk7Ci0gICAgCi0gICAgc2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOwot
ICAgIHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBmaWxsUGF0aChwYXRoKTsKLSAgICAKLSAg
ICBzZXRGaWxsUnVsZShvbGRGaWxsUnVsZSk7Ci0gICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xv
cik7Ci19CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ewotICAgIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247Ci0g
ICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVuZE1vZGU7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSk7Ci19
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxv
YXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5
bGUgcGVuU3R5bGUpCiB7CkBAIC04NTAsNzcgKzU0MSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQm
IHAyCiAgICAgfQogfQogCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3Rvcigp
IGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGlj
c0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIHJldHVybiBGbG9h
dFNpemUodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOwotfQotICAgIAot
RmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKLXsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVm
aW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byB0cmFuc2Zvcm1lZERlc3RSZWN0
ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOwotICAgIHJldHVybiB0cmFuc2Zvcm1lZERl
c3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBmaWxsUGF0aChwYXRoKTsKLSAg
ICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlw
c2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIFBhdGggcGF0aDsKLSAg
ICBwYXRoLmFkZEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKGVsbGlwc2Up
OwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIGRyYXdMaW5lc0ZvclRl
eHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0Lndp
ZHRoKCkgfSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0eWxlKTsKLX0KLQotRmxvYXRS
ZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQotewotICAgIENvbG9yIGR1bW15Q29sb3I7
Ci0gICAgcmV0dXJuIGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
cmVjdCwgcHJpbnRpbmcsIGR1bW15Q29sb3IpOwotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250
ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgQ29sb3ImIGNvbG9yKQotewotICAgIEZsb2F0
UG9pbnQgb3JpZ2luID0gcmVjdC5sb2NhdGlvbigpOwotICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0
ZDo6bWF4KHJlY3QuaGVpZ2h0KCksIDAuNWYpOwotICAgIGlmIChwcmludGluZykKLSAgICAgICAg
cmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVz
cykpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIC8vIEp1c3QgY29tcHV0
ZSBzY2FsZSBpbiB4IGRpbWVuc2lvbiwgYXNzdW1pbmcgeCBhbmQgeSBzY2FsZXMgYXJlIGVxdWFs
LgotICAgIGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLmIoKSA/IHN0ZDo6aHlwb3QodHJhbnNmb3Jt
LmEoKSwgdHJhbnNmb3JtLmIoKSkgOiB0cmFuc2Zvcm0uYSgpOwotICAgIGlmIChzY2FsZSA8IDEu
MCkgewotICAgICAgICAvLyBUaGlzIGNvZGUgYWx3YXlzIGRyYXdzIGEgbGluZSB0aGF0IGlzIGF0
IGxlYXN0IG9uZS1waXhlbCBsaW5lIGhpZ2gsCi0gICAgICAgIC8vIHdoaWNoIHRlbmRzIHRvIHZp
c3VhbGx5IG92ZXJ3aGVsbSB0ZXh0IGF0IHNtYWxsIHNjYWxlcy4gVG8gY291bnRlciB0aGlzCi0g
ICAgICAgIC8vIGVmZmVjdCwgYW4gYWxwaGEgaXMgYXBwbGllZCB0byB0aGUgdW5kZXJsaW5lIGNv
bG9yIHdoZW4gdGV4dCBpcyBhdCBzbWFsbCBzY2FsZXMuCi0gICAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdCBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPSAwLjRmOwotICAgICAgICBmbG9hdCBzaGFkZSA9
IHNjYWxlID4gbWluaW11bVVuZGVybGluZUFscGhhID8gc2NhbGUgOiBtaW5pbXVtVW5kZXJsaW5l
QWxwaGE7Ci0gICAgICAgIGNvbG9yID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
c2hhZGUpOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgZGV2aWNlUG9pbnQgPSB0cmFuc2Zvcm0u
bWFwUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKLSAgICAvLyBWaXN1YWwgb3ZlcmZsb3cgbWlnaHQg
b2NjdXIgaGVyZSBkdWUgdG8gaW50ZWdyYWwgcm91bmRmL2NlaWxmLiB2aXN1YWxPdmVyZmxvd0Zv
ckRlY29yYXRpb25zIGFkanVzdHMgdGhlIG92ZXJmbG93IHZhbHVlIGZvciB1bmRlcmxpbmUgZGVj
b3JhdGlvbi4KLSAgICBGbG9hdFBvaW50IGRldmljZU9yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRm
KGRldmljZVBvaW50LngoKSksIGNlaWxmKGRldmljZVBvaW50LnkoKSkpOwotICAgIGlmIChhdXRv
IGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpKQotICAgICAgICBvcmlnaW4gPSBpbnZlcnNl
LnZhbHVlKCkubWFwUG9pbnQoZGV2aWNlT3JpZ2luKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG9y
aWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7Ci19Ci0KIGZsb2F0IEdy
YXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQg
c3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxvYXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tu
ZXNzKCk7CkBAIC05NzIsMTUgKzU5Miw0IEBAIFZlY3RvcjxGbG9hdFBvaW50PiBHcmFwaGljc0Nv
bnRleHQ6OmNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpCiAgICAg
cmV0dXJuIHsgcG9pbnQxLCBwb2ludDIgfTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBwbGF5ZXIucGxheWVyUHJpdmF0
ZSgpLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwotfQot
I2VuZGlmCi0KLXZvaWQgTnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsKLX0KLQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBmYjk1
ZGQyNWIyNzFkZWI5ZmE4NWZmMmQ5ZjFmNzQ3MTZhMDY2YmFlLi5iMzljZDgyNDgwMGE5NDI3MzFm
Nzc0YWJkMGE5OGNkZmJhNzRmOGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTMwLDQ5ICszMCwxOCBAQAogI2luY2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFj
ZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRl
LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4K
IAotI2lmIFVTRShDRykKLXR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDsKLSNlbGlmIFVTRShDQUlSTykKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dENhaXJvOwotfQotdHlwZWRlZiBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbHNlCi10eXBlZGVmIHZvaWQgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQ7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRl
ICJESUJQaXhlbERhdGEuaCIKLXR5cGVkZWYgc3RydWN0IEhEQ19fKiBIREM7Ci0jaWYgIVVTRShD
RykKLS8vIFVJbnQ4IGlzIGRlZmluZWQgaW4gQ29yZUZvdW5kYXRpb24vQ0ZCYXNlLmgKLXR5cGVk
ZWYgdW5zaWduZWQgY2hhciBVSW50ODsKLSNlbmRpZgotI2VuZGlmCi0KLS8vIFgxMSBoZWFkZXJz
IGRlZmluZSBhIGJ1bmNoIG9mIG1hY3JvcyB3aXRoIGNvbW1vbiB0ZXJtcywgaW50ZXJmZXJpbmcg
d2l0aCBXZWJDb3JlIGFuZCBXVEYgZW51bSB2YWx1ZXMuCi0vLyBBcyBhIHdvcmthcm91bmQsIHdl
IGV4cGxpY2l0bHkgdW5kZWYgdGhlbSBoZXJlLgotI2lmIGRlZmluZWQoTm9uZSkKLSN1bmRlZiBO
b25lCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEJlbG93KQotI3VuZGVmIEJlbG93Ci0jZW5kaWYKLSNp
ZiBkZWZpbmVkKFN1Y2Nlc3MpCi0jdW5kZWYgU3VjY2VzcwotI2VuZGlmCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwpAQCAtODIsNyArNTEsNiBAQCBjbGFz
cyBGbG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEludFJlY3Q7CiBj
bGFzcyBNZWRpYVBsYXllcjsKIGNsYXNzIFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0R0w7CkBAIC05MSwxNzQgKzU5LDEyIEBAIGNsYXNzIFN5c3RlbUltYWdlOwogY2xhc3MgVGV4
dFJ1bjsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCi1uYW1lc3BhY2UgRGlzcGxheUxp
c3QgewotY2xhc3MgUmVjb3JkZXI7Ci19Ci0KLWVudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDog
dWludDhfdCB7Ci0gICAgRmlsbCA9IDEgPDwgMCwKLSAgICBTdHJva2UgPSAxIDw8IDEsCi19Owot
dXNpbmcgVGV4dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2RlPjsK
LQotLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAt
d2Via2l0LWJveC1zaGFkb3cuCi0vLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRp
aSA+IDhweC4KLWVudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgewotICAgIERlZmF1
bHQsCi0gICAgTGVnYWN5Ci19OwotCi1lbnVtIFN0cm9rZVN0eWxlIHsKLSAgICBOb1N0cm9rZSwK
LSAgICBTb2xpZFN0cm9rZSwKLSAgICBEb3R0ZWRTdHJva2UsCi0gICAgRGFzaGVkU3Ryb2tlLAot
ICAgIERvdWJsZVN0cm9rZSwKLSAgICBXYXZ5U3Ryb2tlLAotfTsKLQotc3RydWN0IERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHsKLSAgICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKLSAgICAg
ICAgVGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKLSAgICAgICAg
U3BlbGxpbmcsCi0gICAgICAgIEdyYW1tYXIsCi0gICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFj
ZW1lbnQsCi0gICAgICAgIERpY3RhdGlvbkFsdGVybmF0aXZlcwotICAgIH0gbW9kZTsKLSAgICBi
b29sIHNob3VsZFVzZURhcmtBcHBlYXJhbmNlIHsgZmFsc2UgfTsKLQotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHls
ZT4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBlbmNvZGVyIDw8IG1vZGU7Ci0gICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBw
ZWFyYW5jZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8RG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7Ci0gICAgZGVj
b2RlciA+PiBtb2RlOwotICAgIGlmICghbW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Ci0g
ICAgZGVjb2RlciA+PiBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKLSAgICBpZiAoIXNob3VsZFVz
ZURhcmtBcHBlYXJhbmNlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0
dXJuIHt7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfX07Ci19Ci0KLXN0cnVjdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
IHsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotICAgIFdFQkNP
UkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBH
cmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKLQotICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBo
aWNzQ29udGV4dFN0YXRlJiYpOwotCi0gICAgZW51bSBDaGFuZ2UgOiB1aW50MzJfdCB7Ci0gICAg
ICAgIFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKLSAg
ICAgICAgU3Ryb2tlUGF0dGVybkNoYW5nZSAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAxLAot
ICAgICAgICBGaWxsR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDIs
Ci0gICAgICAgIEZpbGxQYXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwg
MywKLSAgICAgICAgU3Ryb2tlVGhpY2tuZXNzQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gMSA8
PCA0LAotICAgICAgICBTdHJva2VDb2xvckNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgPSAx
IDw8IDUsCi0gICAgICAgIFN0cm9rZVN0eWxlQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgNiwKLSAgICAgICAgRmlsbENvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCA3LAotICAgICAgICBGaWxsUnVsZUNoYW5nZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDgsCi0gICAgICAgIFNoYWRvd0NoYW5nZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgOSwKLSAgICAgICAgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UgICAg
ICAgICAgID0gMSA8PCAxMCwKLSAgICAgICAgQWxwaGFDaGFuZ2UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMSA8PCAxMSwKLSAgICAgICAgQ29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlICAg
ICAgICAgICAgICAgID0gMSA8PCAxMiwKLSAgICAgICAgQmxlbmRNb2RlQ2hhbmdlICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMSA8PCAxMywKLSAgICAgICAgVGV4dERyYXdpbmdNb2RlQ2hhbmdl
ICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNCwKLSAgICAgICAgU2hvdWxkQW50aWFsaWFzQ2hh
bmdlICAgICAgICAgICAgICAgICAgID0gMSA8PCAxNSwKLSAgICAgICAgU2hvdWxkU21vb3RoRm9u
dHNDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAxNiwKLSAgICAgICAgU2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlICAgICAgID0gMSA8PCAxNywKLSAgICAgICAgRHJhd0x1bWlu
YW5jZU1hc2tDaGFuZ2UgICAgICAgICAgICAgICAgID0gMSA8PCAxOCwKLSAgICAgICAgSW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSAgICAgICAgID0gMSA8PCAxOSwKLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgICAgICBVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSAgICAg
ICAgICAgICAgICAgPSAxIDw8IDIwLAotI2VuZGlmCi0gICAgfTsKLSAgICB1c2luZyBTdGF0ZUNo
YW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47Ci0KLSAgICB2b2lkIG1lcmdlQ2hhbmdlcyhj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKTsKLQotICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQ7Ci0gICAg
UmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47Ci0gICAgCi0gICAgUmVmUHRyPEdyYWRpZW50
PiBmaWxsR3JhZGllbnQ7Ci0gICAgUmVmUHRyPFBhdHRlcm4+IGZpbGxQYXR0ZXJuOwotCi0gICAg
RmxvYXRTaXplIHNoYWRvd09mZnNldDsKLQotICAgIENvbG9yIHN0cm9rZUNvbG9yIHsgQ29sb3I6
OmJsYWNrIH07Ci0gICAgQ29sb3IgZmlsbENvbG9yIHsgQ29sb3I6OmJsYWNrIH07Ci0gICAgQ29s
b3Igc2hhZG93Q29sb3I7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gc3Ryb2tlR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm07Ci0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgeyAwIH07Ci0gICAgZmxvYXQgc2hhZG93
Qmx1ciB7IDAgfTsKLSAgICBmbG9hdCBhbHBoYSB7IDEgfTsKLQotICAgIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlIHsgU29saWRTdHJva2UgfTsKLSAgICBXaW5kUnVsZSBmaWxsUnVsZSB7IFdpbmRS
dWxlOjpOb25aZXJvIH07Ci0KLSAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01v
ZGUgeyBUZXh0RHJhd2luZ01vZGU6OkZpbGwgfTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07Ci0gICAgQmxl
bmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07Ci0gICAgSW50ZXJwb2xhdGlv
blF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IEludGVycG9sYXRpb25RdWFsaXR5
OjpEZWZhdWx0IH07Ci0gICAgU2hhZG93UmFkaXVzTW9kZSBzaGFkb3dSYWRpdXNNb2RlIHsgU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwotCi0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgOiAx
OwotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwotICAgIGJvb2wgc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzIDogMTsKLSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIDog
MTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDogMTsKLSNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UgOiAxOwotI2VuZGlmCi19Owot
Ci1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgewotICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlKCkgPSBkZWZhdWx0OwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICAg
ICAgLCBtX2NoYW5nZUZsYWdzKGZsYWdzKQotICAgIHsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJikgY29uc3Q7Ci0KLSAgICB2b2lkIGFjY3VtdWxhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyk7Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLSAgICAKLSAgICB2
b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZSBtX3N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IG1fY2hhbmdlRmxhZ3M7Ci19OwotCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKLQogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzogICAKKyAgICBmcmllbmQgY2xh
c3MgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBo
aWNzQ29udGV4dCgpID0gZGVmYXVsdDsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFw
aGljc0NvbnRleHQoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZUZsYWdzJiA9IHsgfSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBp
bml0aWFsQ1RNID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0Nv
bnRleHQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpAQCAtMjcwLDI3MCArNzYsMjczIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvLyBDb250ZXh0IFN0YXRlCisgICAgYm9v
bCBjb250ZW5mdWxQYWludERldGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50ZnVsUGFp
bnREZXRlY3RlZDsgfQorICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1f
Y29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9CisgICAgCisgICAgdmlydHVhbCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOyB9CiAKLSAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlj
a25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7IGRpZFVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2Up
OyB9Ci0gICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHJva2VUaGlja25lc3M7IH0KKyAgICAvLyBDb250ZXh0IFN0YXRlCiAKLSAgICB2b2lkIHNldFN0
cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHls
ZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0
eWxlQ2hhbmdlKTsgfQotICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VTdHlsZTsgfQorICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIG1lcmdlU3RhdGVD
aGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikgeyBtX3N0YXRlLm1lcmdl
Q2hhbmdlcyhvdGhlcik7IH0KKyAgICB2b2lkIG1lcmdlU3RhdGVEaWZmcyhjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgb3RoZXIpIHsgbV9zdGF0ZS5tZXJnZURpZmZzKG90aGVyKTsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwotICAg
IGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tl
Q29sb3I7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5nZXRDVE0oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBjdG0pIHsgbV9zdGF0ZS5zZXRDVE0oY3RtLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9
CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pIHsgc2V0Q1RN
KGdldENUTSgpICogY3RtKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
IHsgc2V0Q1RNKGdldENUTSgpLnRyYW5zbGF0ZSh4LCB5KSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFBvaW50JiBwKSB7IHRy
YW5zbGF0ZShwLngoKSwgcC55KCkpOyB9CisgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQg
c3kpIHsgc2V0Q1RNKGdldENUTSgpLnNjYWxlKHN4LCBzeSkpOyB9CisgICAgdm9pZCBzY2FsZShm
bG9hdCBzKSB7IHNjYWxlKHMsIHMpOyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpIHsgc2NhbGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQg
cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSB7IHNldENUTShnZXRDVE0oKS5yb3RhdGUocmFk
MmRlZyhhbmdsZUluUmFkaWFucykpKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRT
dHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJu
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CisgICAgY29u
c3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCku
Y29sb3IoKTsgfQorICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmZpbGxCcnVzaCgpLmdyYWRpZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBmaWxsUGF0dGVy
bigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkucGF0dGVybigpOyB9CisgICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNldEZp
bGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpIHsgbV9zdGF0ZS5zZXRGaWxsQ29sb3IoY29sb3Is
IG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3Jh
ZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0g
PSB7IH0pIHsgbV9zdGF0ZS5zZXRGaWxsR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNl
VHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0
dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsgfSkgeyBtX3N0
YXRlLnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtKTsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+
JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwotICAgIEdyYWRpZW50KiBzdHJva2VH
cmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCk7IH0K
KyAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGUo
KTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9zdGF0ZS5z
ZXRGaWxsUnVsZShmaWxsUnVsZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBz
ZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1
bGU7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVs
ZUNoYW5nZSk7IH0KLSAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuZmlsbFJ1bGU7IH0KKyAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsgfQorICAgIEdyYWRpZW50KiBzdHJv
a2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5ncmFkaWVu
dCgpOyB9CisgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuc3Ryb2tlQnJ1c2goKS5wYXR0ZXJuKCk7IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVz
aCgpLnNwYWNlVHJhbnNmb3JtKCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldFN0cm9rZUNvbG9yKGNvbG9yLCBtX2xhc3RBcHBsaWVk
U3RhdGUpOyB9CisgICAgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3Jh
ZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHsg
fSkgeyBtX3N0YXRlLnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBncmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5TcGFjZVRyYW5zZm9y
bSA9IHsgfSkgeyBtX3N0YXRlLnNldFN0cm9rZVBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgcGF0
dGVyblNwYWNlVHJhbnNmb3JtKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxs
Q29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5maWxsQ29sb3I7IH0KKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3Mo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcygpOyB9CisgICAgdm9pZCBz
ZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3RhdGUuc2V0U3Ryb2tlVGhp
Y2tuZXNzKHRoaWNrbmVzcywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7Ci0gICAgUGF0dGVybiog
ZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpOyB9
CisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
cm9rZVN0eWxlKCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxl
KSB7IG1fc3RhdGUuc2V0U3Ryb2tlU3R5bGUoc3R5bGUsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4m
JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQqIGZpbGxHcmFk
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9CisgICAg
TGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5saW5lQ2FwKCk7IH0KKyAg
ICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKSB7IG1fc3RhdGUuc2V0TGluZUNhcChs
aW5lQ2FwLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KKyAgICBjb25zdCBMaW5l
RGFzaCBsaW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUubGluZURhc2goKTsgfQorICAg
IHZvaWQgc2V0TGluZURhc2goTGluZURhc2gmJiBsaW5lRGFzaCkgeyBtX3N0YXRlLnNldExpbmVE
YXNoKFdURk1vdmUobGluZURhc2gpLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lk
IHNldFNob3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNob3Vs
ZEFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlhczsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7IH0KLSAgICBib29sIHNo
b3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzOyB9
CisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVKb2lu
KCk7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKSB7IG1fc3RhdGUu
c2V0TGluZUpvaW4obGluZUpvaW4sIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQg
c2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykgeyBtX3N0YXRlLnNo
b3VsZFNtb290aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSk7IH0KLSAg
ICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250czsgfQorICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLm1pdGVyTGltaXQoKTsgfQorICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxp
bWl0KSB7IG1fc3RhdGUuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0LCBtX2xhc3RBcHBsaWVkU3Rh
dGUpOyB9CiAKLSAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXphdGlv
biBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlwaHMu
Ci0gICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJlIGEg
aGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgotICAgIHZvaWQgc2V0U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1f
c3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsgfQotICAgIGJvb2wgc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHM7IH0KKyAgICBDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU1vZGUoKTsgfQorICAgIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbXBvc2l0ZU1vZGUoKS5vcGVy
YXRpb247IH0KKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gY29tcG9z
aXRlTW9kZSgpLmJsZW5kTW9kZTsgfQorICAgIHZvaWQgc2V0Q29tcG9zaXRlTW9kZShDb21wb3Np
dGVNb2RlIGNvbXBvc2l0ZU1vZGUpIHsgbV9zdGF0ZS5zZXRDb21wb3NpdGVNb2RlKGNvbXBvc2l0
ZU1vZGUsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvciBvcGVyYXRpb24pIHsgc2V0Q29tcG9zaXRlTW9kZSh7IG9w
ZXJhdGlvbiwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7IH0KIAotICAgIHZvaWQgc2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IGRpZFVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdl
KTsgfQotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyAg
ICBjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5k
cm9wU2hhZG93KCk7IH0KKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gZHJvcFNoYWRvdygpLm9mZnNldDsgfQorICAgIGZsb2F0IHNoYWRvd0JsdXIoKSBjb25zdCB7
IHJldHVybiBkcm9wU2hhZG93KCkuYmx1clJhZGl1czsgfQorICAgIGNvbnN0IENvbG9yJiBzaGFk
b3dDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5jb2xvcjsgfQorICAgIHZvaWQg
c2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KSB7IG1fc3RhdGUuc2V0
RHJvcFNoYWRvdyhkcm9wU2hhZG93LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9pZCBj
bGVhclNoYWRvdygpIHsgc2V0RHJvcFNoYWRvdyh7IH0pOyB9CiAKLSAgICB2b2lkIHNldEFscGhh
KGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuYWxwaGEgPSBhbHBoYTsgZGlkVXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKTsgfQotICAgIGZsb2F0IGFs
cGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYTsgfQorICAgIGJvb2wgaGFzVmlzaWJs
ZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5pc1Zpc2libGUoKTsgfQorICAg
IGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5pc0Js
dXJyZWQoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRv
dygpLmhhc091dHNldHMoKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDb21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9y
bWFsKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5k
TW9kZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYmxlbmRNb2RlOyB9CisgICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhKCk7IH0KKyAgICB2b2lk
IHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuc2V0QWxwaGEoYWxwaGEsIG1fbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3
THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5j
ZU1hc2s7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3
THVtaW5hbmNlTWFza0NoYW5nZSk7IH0KLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzazsgfQorICAgIEludGVycG9sYXRp
b25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KSB7IG1fc3RhdGUuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5LCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHNldFRl
eHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKSB7IG1fc3RhdGUudGV4dERy
YXdpbmdNb2RlID0gbW9kZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSk7IH0KLSAgICBUZXh0RHJhd2luZ01vZGVGbGFn
cyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9k
ZTsgfQorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlKCk7IH0KKyAgICB2b2lkIHNldFRleHREcmF3
aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUpIHsgbV9zdGF0ZS5z
ZXRUZXh0RHJhd2luZ01vZGUodGV4dERyYXdpbmdNb2RlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYsIFNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNN
b2RlOjpEZWZhdWx0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xlYXJTaGFk
b3coKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldFNoYWRvdyhGbG9hdFNpemUmLCBmbG9h
dCYsIENvbG9yJikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhcygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRBbnRp
YWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zZXRTaG91bGRBbnRpYWxpYXMo
c2hvdWxkQW50aWFsaWFzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBib29sIGhhc1Zp
c2libGVTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRvd0NvbG9yLmlzVmlzaWJs
ZSgpOyB9Ci0gICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hh
ZG93KCkgJiYgKG1fc3RhdGUuc2hhZG93Qmx1ciB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0
aCgpIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsgfQotICAgIGJvb2wgaGFzQmx1
cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiBtX3N0YXRl
LnNoYWRvd0JsdXI7IH0KKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRTbW9v
dGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1fc3RhdGUuc2V0U2hvdWxkU21vb3Ro
Rm9udHMoc2hvdWxkU21vb3RoRm9udHMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShi
b29sIHVzZURhcmtBcHBlYXJhbmNlKSB7IG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UgPSB1c2VE
YXJrQXBwZWFyYW5jZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKTsgfQotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFu
Y2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYK
KyAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNhdXNl
IGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCisgICAgLy8g
SW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFs
aXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgorICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMoKTsgfQorICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2V0U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgbV9sYXN0QXBwbGllZFN0YXRl
KTsgfQogCi0gICAgdmlydHVhbCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKTsgfQor
ICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcykgeyBtX3N0YXRlLnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICB2b2lkIHVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpOworICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrKCk7IH0KKyAgICB2b2lkIHNldERyYXdMdW1p
bmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spIHsgbV9zdGF0ZS5zZXREcmF3THVtaW5h
bmNlTWFzayhkcmF3THVtaW5hbmNlTWFzaywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAg
Ly8gQ2FsbGVkICphZnRlciogYW55IGNoYW5nZSB0byBHcmFwaGljc0NvbnRleHRTdGF0ZTsgZ2Vu
ZXJhbGx5IHVzZWQgdG8gcHJvcGFnYXRlIGNoYW5nZXMKLSAgICAvLyB0byB0aGUgcGxhdGZvcm0g
Y29udGV4dCdzIHN0YXRlLgotICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSA9IDA7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVzZURh
cmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSgp
OyB9CisgICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNl
KSB7IG1fc3RhdGUuc2V0VXNlRGFya0FwcGVhcmFuY2UodXNlRGFya0FwcGVhcmFuY2UsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KKyNlbmRpZgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIHNhdmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwot
ICAgIAorICAgIHZvaWQgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICB1bnNpZ25lZCBzdGFj
a1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQogCisgICAgdmlydHVhbCB2
b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgPSAwOwogI2lmIFVTRShDRykKICAgICAvLyBGSVhNRTog
U2hvdWxkIHRoZXNlIHJlYWxseSBiZSBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IG1ldGhvZHM/Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlGaWxsUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQ
YXR0ZXJuKCkgPSAwOworI2VuZGlmCiAKLSAgICAvLyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBh
IHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRoZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0
Zm9ybT8KLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBP
UlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IENh
biB0aGlzIGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBq
dXN0IGJlIHJlYWQgb2ZmIHRoZSBjb250ZXh0PwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2Vs
ZXJhdGVkQ29udGV4dChib29sKSA9IDA7Ci0jZW5kaWYKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGFw
cGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNvbnRleHQsIG1ha2luZyB0aGUg
Y29udGV4dCBjYXBhYmxlIG9mCisgICAgLy8gYWN0aW5nIGFzIGEgYmFzZS1sZXZlbCBjb250ZXh0
IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgorICAgIHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3IpOyB9CiAKLSAgICB2aXJ0dWFs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KKyAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICAv
LyBQaXhlbCBTbmFwcGluZworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5j
eUxheWVyKCkgY29uc3QgeyByZXR1cm4gc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKSAmJiBt
X3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7IH0KIAotICAgIGVudW0gUm91bmRpbmdNb2RlIHsKLSAg
ICAgICAgUm91bmRBbGxTaWRlcywKLSAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCi0g
ICAgfTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2lu
dCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwor
ICAgIC8vIENsaXBwaW5nCiAKLSAgICAvLyBTaGFwZXMKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5P
ZGQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmKTsKIAotICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGgg
c3Ryb2tpbmcgYW5kIGZpbGxpbmcuCi0gICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgp
LCB3aGljaCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKLSAgICAvLyB1c2luZyBh
IDEtcGl4ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJl
Y3QKLSAgICAvLyBzdHJva2UgY29sb3IpLgotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpOwogCi0gICAgdmlydHVh
bCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdGgoY29uc3QgUGF0aCYpOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9zdGF0ZS5jbGlwQm91bmRzKCkpOyB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxF
bGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7
IH0KKyAgICAvLyBTaGFwZXMKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJikgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
PSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdElt
cGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBH
cmFkaWVudCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJs
ZW5kTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TGluZUpvaW4oTGluZUpvaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWl0ZXJMaW1p
dChmbG9hdCkgPSAwOwotCi0gICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1lZGlhCisgICAg
dmlydHVhbCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBmaWxs
RWxsaXBzZUFzUGF0aChlbGxpcHNlKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBmaWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwogCi0gICAgSW50U2l6ZSBjb21wYXRpYmxlSW1h
Z2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSA9IDEsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVs
bG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25z
dDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVk
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsg
MSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQs
IHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAxIH0s
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpv
cHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICAvLyBU
aGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBib3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgorICAg
IC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1JlY3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0
IGFsd2F5cyBzdHJva2VzCisgICAgLy8gdXNpbmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9t
IHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBjb3JyZWN0CisgICAgLy8gc3Ryb2tlIGNvbG9yKS4K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVB
bGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6
Om51bGxvcHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsK
IAotICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBG
bG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MgPSAxKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgPSAwOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBDb2xvciYg
c2hhZG93Q29sb3IpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlydHVhbCBkcmF3UGF0aChj
b25zdCBQYXRoJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0lt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdF
QkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdl
T3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIElt
YWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgLy8gRm9jdXMgUmluZ3MK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZElt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2lu
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVS
dWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVt
ZW50YXRpb24/IE9yIGVsc2V3aGVyZT8KKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBu
ZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYg
bmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOworI2VuZGlmCiAKKyAgICAvLyBJbWFnZXMK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8
SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25z
dW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJj
ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVy
UmVzdWx0cyYpOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFn
ZSB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKIAorICAgIFdFQkNPUkVf
RVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRT
aXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBk
cmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd05hdGl2ZUlt
YWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
blJlY3QpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAjaWYgRU5BQkxFKFZJREVP
KQogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKICNlbmRpZgotCi0gICAg
Ly8gQ2xpcHBpbmcKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAw
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQ
YXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91bmRz
KCkgY29uc3Q7Ci0KKyAgICAKICAgICAvLyBUZXh0CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAw
LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIGRy
YXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNt
b290aGluZ01vZGUpOwotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJh
d0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCos
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNp
emUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IHN0ZDo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RW1waGFzaXNNYXJr
cyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9h
dFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNj
YWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJv
b2wgcHJpbnRpbmcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNv
bnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwg
U3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tl
U3R5bGUgPSBTb2xpZFN0cm9rZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9
IDA7CiAKLSAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCi0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBi
b29sIGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJuIChtX3RyYW5zcGFyZW5j
eUxheWVyQ291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOyB9CisgICAg
V0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNv
bnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwogCi0gICAgLy8gRm9jdXMgUmluZ3MKKyAg
ICAvLyBDb21wYXRpYmxlIEltYWdlQnVmZmVyCiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLSAg
ICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBP
ciBlbHNld2hlcmU/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcs
IGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3
LCBjb25zdCBDb2xvciYpID0gMDsKLSNlbmRpZgorICAgIEludFNpemUgY29tcGF0aWJsZUltYWdl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsKIAotICAgIC8vIFRyYW5zZm9ybXMK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlv
bmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogCi0gICAgdm9pZCBz
Y2FsZShmbG9hdCBzKSB7IHNjYWxlKHsgcywgcyB9KTsgfQotICAgIHZpcnR1YWwgdm9pZCBzY2Fs
ZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBh
bmdsZUluUmFkaWFucykgPSAwOwotICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQotICAgIHZv
aWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnko
KSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsK
KyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxlZEltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7IDEsIDEg
fSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0LCBzdGQ6
Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2NhbGVkSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9IHsgMSwgMSB9LCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCks
IHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9u
YWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0g
c3RkOjpudWxsb3B0KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsK
IAotICAgIGVudW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VT
Y2FsZSwgUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsKLSAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNl
U2NhbGUpIGNvbnN0ID0gMDsKKyAgICAvLyBQaXhlbCBTbmFwcGluZwogCi0gICAgLy8gVGhpcyBm
dW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250ZXh0LCBt
YWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgotICAgIC8vIGFjdGluZyBhcyBhIGJhc2UtbGV2
ZWwgY29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsgfQotICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OwotICAgIFdFQkNP
UkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAgICBlbnVtIFJv
dW5kaW5nTW9kZSB7CisgICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAgIFJvdW5kT3JpZ2lu
QW5kRGltZW5zaW9ucworICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3Vu
ZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgs
IFN0cm9rZVN0eWxlKTsKIAogICAgIC8vIExpbmtzCiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHZpcnR1YWwg
dm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmLCBjb25z
dCBGbG9hdFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KIAotICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAg
Ly8gQ29udGVudGZ1bCBQYWludCBEZXRlY3Rpb24KKyNpZiBVU0UoQ0cpCisgICAgLy8gRklYTUU6
IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdoYXQsIGFuZCB0aGVuIGhhdmUg
aXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2b2lkIHNldElzQ0FMYXllckNv
bnRleHQoYm9vbCkgeyB9CisgICAgdmlydHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3Rl
ZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRl
bmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRmdWxQYWludERldGVj
dGVkOyB9CisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29u
c3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQgb2ZmIHRoZSBjb250ZXh0PworICAg
IHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSB7IH0KKyNlbmRpZgog
CiAgICAgLy8gRklYTUU6IE5vdGhpbmcgaW4gdGhpcyBzZWN0aW9uIGJlbG9uZ3MgaGVyZSwgYW5k
IHNob3VsZCBiZSBtb3ZlZCBlbHNld2hlcmUuCiAjaWYgT1MoV0lORE9XUykKQEAgLTU0NiwxMCAr
MzU1LDcgQEAgcHVibGljOgogICAgIC8vIHB1dCBjb2RlIHNoYXJlZCBiZXR3ZWVuIFdpbmRvd3Mg
Q0cgYW5kIFdpbmRvd3MgQ2Fpcm8gYmFja2VuZHMuCiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG51bGxwdHI7IH0KICNlbmRpZgotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQorICAgIAog
cHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7
CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtNTYx
LDE5MSArMzY3LDE3IEBAIHByb3RlY3RlZDoKICAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9m
ZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0
cm9rZVdpZHRoKSBjb25zdDsKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1
dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0
UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29uc3Q7CiAKLSAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZSBtX3N0YXRlOwotCiBwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisgICAgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRl
eHRTdGF0ZT4gbV9sYXN0QXBwbGllZFN0YXRlOwogICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHRT
dGF0ZSwgMT4gbV9zdGFjazsKIAogICAgIHVuc2lnbmVkIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3Vu
dCB7IDAgfTsKICAgICBib29sIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgeyBmYWxzZSB9Owog
fTsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NhdmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3Jl
KQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAgICBtX2Nv
bnRleHQuc2F2ZSgpOwotICAgIH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
cigpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIG1f
Y29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2F2ZSgpCi0gICAgewot
ICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwotICAgICAgICBtX2NvbnRleHQuc2F2
ZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lk
IHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOwotICAg
ICAgICBtX2NvbnRleHQucmVzdG9yZSgpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuICZtX2NvbnRleHQ7IH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQmIG1f
Y29udGV4dDsKLSAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7Ci19OwotCi1jbGFzcyBUcmFuc3Bh
cmVuY3lMYXllclNjb3BlIHsKLXB1YmxpYzoKLSAgICBUcmFuc3BhcmVuY3lMYXllclNjb3BlKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxwaGEsIGJvb2wgYmVnaW5MYXllciA9IHRy
dWUpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9hbHBoYShhbHBo
YSkKLSAgICAgICAgLCBtX2JlZ2FuTGF5ZXIoYmVnaW5MYXllcikKLSAgICB7Ci0gICAgICAgIGlm
IChiZWdpbkxheWVyKQotICAgICAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIobV9hbHBoYSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYmVnaW5MYXllcihmbG9hdCBhbHBo
YSkKLSAgICB7Ci0gICAgICAgIG1fYWxwaGEgPSBhbHBoYTsKLSAgICAgICAgbV9jb250ZXh0LmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7Ci0gICAgICAgIG1fYmVnYW5MYXllciA9IHRy
dWU7Ci0gICAgfQotICAgIAotICAgIH5UcmFuc3BhcmVuY3lMYXllclNjb3BlKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX2JlZ2FuTGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQuZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBt
X2NvbnRleHQ7Ci0gICAgZmxvYXQgbV9hbHBoYTsKLSAgICBib29sIG1fYmVnYW5MYXllcjsKLX07
Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyIHsKLXB1YmxpYzoKLSAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgICwgbV9zdGFja1NpemUo
Y29udGV4dC5zdGFja1NpemUoKSkKLSAgICB7IH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250ZXh0
U3RhdGVTdGFja0NoZWNrZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC5zdGFja1Np
emUoKSAhPSBtX3N0YWNrU2l6ZSkKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3ND
b250ZXh0ICVwIHN0YWNrIGNoYW5nZWQgYnkgJWQiLCAmbV9jb250ZXh0LCAoaW50KW1fY29udGV4
dC5zdGFja1NpemUoKSAtIChpbnQpbV9zdGFja1NpemUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKLSAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsK
LX07Ci0KLWNsYXNzIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVh
bGl0eVRvVXNlKQotICAgICAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4dCkK
LSAgICAgICAgLCBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eShncmFwaGljc0NvbnRleHQu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKQotICAgICAgICAsIG1faW50ZXJwb2xhdGlvblF1
YWxpdHlDaGFuZ2VkKGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UgIT0gSW50ZXJwb2xhdGlvblF1
YWxpdHk6OkRlZmF1bHQgJiYgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gaW50ZXJw
b2xhdGlvblF1YWxpdHlUb1VzZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSk7Ci0gICAgfQotCi0g
ICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBzdGQ6Om9wdGlvbmFsPEludGVycG9sYXRpb25RdWFsaXR5PiBp
bnRlcnBvbGF0aW9uUXVhbGl0eSkKLSAgICAgICAgOiBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIoZ3JhcGhpY3NDb250ZXh0LCBpbnRlcnBvbGF0aW9uUXVhbGl0eSA/IGludGVycG9sYXRp
b25RdWFsaXR5LnZhbHVlKCkgOiBncmFwaGljc0NvbnRleHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKQotICAgIHsKLSAgICB9Ci0KLSAgICB+SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZCkK
LSAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkobV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0OwotICAgIEludGVycG9sYXRpb25R
dWFsaXR5IG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5OwotICAgIGJvb2wgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZWQ7Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLW5h
bWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZh
bHVlczwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSwKLSAgICBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0
aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxp
bmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGU6Ok1vZGU6OkdyYW1tYXIsCi0gICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU6OkF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCi0gICAgV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlcwotICAgID47Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlLAotICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VHcmFkaWVudENoYW5nZSwKLSAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlUGF0dGVy
bkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
RmlsbEdyYWRpZW50Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpGaWxsUGF0dGVybkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlLAotICAgICAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VDb2xvckNoYW5nZSwKLSAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGVD
aGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZp
bGxDb2xvckNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6RmlsbFJ1bGVDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlNoYWRvd0NoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkFscGhhQ2hhbmdlLAotICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkJsZW5kTW9kZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRz
Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlLAotICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5Q2hhbmdlCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICAgICAg
LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5j
ZUNoYW5nZQotI2VuZGlmCi0gICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6U3Ryb2tlU3R5bGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVz
PAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpO
b1N0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6U29saWRTdHJva2UsCi0gICAgV2Vi
Q29yZTo6U3Ryb2tlU3R5bGU6OkRvdHRlZFN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHls
ZTo6RGFzaGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEb3VibGVTdHJva2Us
Ci0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OldhdnlTdHJva2UKLSAgICA+OwotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU+IHsKLSAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2lu
Z01vZGUsCi0gICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZTo6RmlsbCwKLSAgICAgICAg
V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpTdHJva2UKLSAgICA+OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV1RGCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
U3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjOWU1ODFkY2MyMjAzYWQyMWE3ZjQ4ZjM1NzgxNGRlZmMz
Y2ZmMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNv
bnN0IENoYW5nZUZsYWdzJiBjaGFuZ2VGbGFncywgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0
aWFsQ1RNKQorICAgIDogbV9jbGlwQm91bmRzKGluaXRpYWxDVE0ubWFwUmVjdChpbml0aWFsQ2xp
cCkpCisgICAgLCBtX2NoYW5nZUZsYWdzKGNoYW5nZUZsYWdzKQorICAgICwgbV9jdG0oaW5pdGlh
bENUTSkKK3sKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpjbGlwQm91bmRz
KCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gbV9jdG0uaW52ZXJzZSgpKQorICAg
ICAgICByZXR1cm4gaW52ZXJzZS0+bWFwUmVjdChtX2NsaXBCb3VuZHMpOworCisgICAgLy8gSWYg
dGhlIENUTSBpcyBub3QgaW52ZXJ0aWJsZSwgcmV0dXJuIHRoZSBvcmlnaW5hbCByZWN0LgorICAg
IC8vIFRoaXMgbWF0Y2hlcyBDR1JlY3RBcHBseUludmVyc2VBZmZpbmVUcmFuc2Zvcm0gYmVoYXZp
b3IuCisgICAgcmV0dXJuIG1fY2xpcEJvdW5kczsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6aGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25z
dGV4cHIgQ2hhbmdlRmxhZ3MgcHJpbWl0aXZlQ2hhbmdlRmxhZ3MgeyBDaGFuZ2U6OlN0cm9rZVRo
aWNrbmVzcywgQ2hhbmdlOjpTdHJva2VCcnVzaCwgQ2hhbmdlOjpGaWxsQnJ1c2ggfTsKKworICAg
IGlmIChtX2NoYW5nZUZsYWdzICE9IChtX2NoYW5nZUZsYWdzICYgcHJpbWl0aXZlQ2hhbmdlRmxh
Z3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhDaGFuZ2U6OlN0cm9rZUJydXNoKSAmJiAhbV9zdHJva2VCcnVzaC5pc1ByaW1pdGl2ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhDaGFuZ2U6OkZpbGxCcnVzaCkgJiYgIW1fZmlsbEJydXNoLmlzUHJpbWl0aXZlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90
aGVyKQoreworICAgIGF1dG8gbWVyZ2VDaGFuZ2UgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmIChvdGhlci5tX2No
YW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0
eSA9IG90aGVyLipwcm9wZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5n
ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgQVNTRVJUKG1fY2xpcEJvdW5kcyA9PSBvdGhl
ci5tX2NsaXBCb3VuZHMpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpDVE0sICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAg
bWVyZ2VDaGFuZ2UoQ2hhbmdlOjpGaWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6
RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
ZmlsbFJ1bGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAg
bWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpOworICAgIG1lcmdlQ2hhbmdlKENo
YW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc3Ryb2tlU3R5bGUpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpMaW5lQ2FwLCAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsK
KyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAgICBtZXJnZUNoYW5nZShDaGFu
Z2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2xpbmVKb2luKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Ok1pdGVyTGltaXQsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVyTGltaXQpOworCisg
ICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBtZXJnZUNoYW5nZShD
aGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2Ryb3BTaGFkb3cpOworCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpBbHBoYSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7Cisg
ICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBt
ZXJnZUNoYW5nZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSk7CisKKyAgICBtZXJnZUNoYW5nZShD
aGFuZ2U6OlNob3VsZEFudGlhbGlhcywgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX3Nob3VsZEFudGlhbGlhcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRT
bW9vdGhGb250cywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
bW9vdGhGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMsICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMsICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpVc2VEYXJr
QXBwZWFyYW5jZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJr
QXBwZWFyYW5jZSk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVy
Z2VEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBt
ZXJnZURpZmYgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
KnByb3BlcnR5KSB7CisgICAgICAgIGlmICh0aGlzLT4qcHJvcGVydHkgIT0gb3RoZXIuKnByb3Bl
cnR5KSB7CisgICAgICAgICAgICB0aGlzLT4qcHJvcGVydHkgPSBvdGhlci4qcHJvcGVydHk7Cisg
ICAgICAgICAgICBtX2NoYW5nZUZsYWdzLmFkZChjaGFuZ2UpOworICAgICAgICB9CisgICAgfTsK
KworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworICAgIAorICAgIG1lcmdlRGlmZihDaGFuZ2U6
OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9m
aWxsQnJ1c2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZURp
ZmYoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZVRoaWNr
bmVzcywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25l
c3MpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZURpZmYo
Q2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fbGluZUNhcCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TGluZURhc2gsICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAgICBtZXJn
ZURpZmYoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlRGlmZihDaGFuZ2U6Ok1pdGVyTGltaXQs
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0KTsK
KworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBtZXJnZURpZmYoQ2hh
bmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpBbHBoYSwgICAgICAgICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBtZXJnZURpZmYoQ2hh
bmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZEFudGlh
bGlhcywgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxp
YXMpOworICAgIG1lcmdlRGlmZihDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAgbWVyZ2VE
aWZmKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VEaWZmKENo
YW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpEcmF3
THVtaW5hbmNlTWFzaywgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1
bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgbWVyZ2VE
aWZmKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCitzdGF0aWMgY29uc3Qg
Y2hhciogc3RhdGVDaGFuZ2VOYW1lKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UgY2hhbmdl
KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzdGF0ZUNoYW5nZU5hbWVzW10gPSB7
CisgICAgICAgICJjdG0iLAorCisgICAgICAgICJmaWxsLWJydXNoIiwKKyAgICAgICAgImZpbGwt
cnVsZSIsCisKKyAgICAgICAgInN0cm9rZS1icnVzaCIsCisgICAgICAgICJzdHJva2UtdGhpY2tu
ZXNzIiwKKyAgICAgICAgInN0cm9rZS1zdHlsZSIsCisKKyAgICAgICAgImxpbmUtY2FwIiwKKyAg
ICAgICAgImxpbmUtZGFzaCIsCisgICAgICAgICJsaW5lLWpvaW4iLAorICAgICAgICAibWl0ZXIt
bGltaXQiLAorCisgICAgICAgICJjb21wb3NpdGUtbW9kZSIsCisgICAgICAgICJkcm9wLXNoYWRv
dyIsCisKKyAgICAgICAgImFscGhhIiwKKyAgICAgICAgImltYWdlLWludGVycG9sYXRpb24tcXVh
bGl0eSIsCisgICAgICAgICJ0ZXh0LWRyYXdpbmctbW9kZSIsCisKKyAgICAgICAgInNob3VsZC1h
bnRpYWxpYXMiLAorICAgICAgICAic2hvdWxkLXNtb290aC1mb250cyIsCisgICAgICAgICJzaG91
bGQtc3VicGl4ZWwtcXVhbnRpemUtZm9udHMiLAorICAgICAgICAic2hhZG93cy1pZ25vcmUtdHJh
bnNmb3JtcyIsCisgICAgICAgICJkcmF3LWx1bWluYW5jZS1tYXNrIgorI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCisgICAgICAgICwgInVzZS1kYXJrLWFwcGVhcmFuY2UiCisjZW5kaWYK
KyAgICB9OworCisgICAgdW5zaWduZWQgbWFzayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGFu
Z2UpOworICAgIEFTU0VSVCghKChtYXNrIC0gMSkgJiBtYXNrKSk7CisgICAgCisgICAgdW5zaWdu
ZWQgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihtYXNrKSk7CisgICAgcmV0dXJu
IHN0YXRlQ2hhbmdlTmFtZXNbaW5kZXhdOworfQorCitUZXh0U3RyZWFtJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICBhdXRvIGR1bXAgPSBb
Jl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5LCBj
b25zdCBTdHJpbmcmIG5hbWUpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
Y2hhbmdlKSkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eShuYW1lLCB0aGlzLT4qcHJvcGVy
dHkpOworICAgIH07CisKKyAgICB0cy5kdW1wUHJvcGVydHkoImNoYW5nZS1mbGFncyIsIG1fY2hh
bmdlRmxhZ3MpOworCisgICAgZHVtcChDaGFuZ2U6OkNUTSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkNUTSkpOworCisgICAgZHVtcChDaGFuZ2U6OkZp
bGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmls
bEJydXNoLCAgICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkZpbGxC
cnVzaCkpOworICAgIGR1bXAoQ2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpGaWxsUnVsZSkpOworCisgICAgZHVtcChDaGFuZ2U6OlN0
cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ry
b2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlN0cm9r
ZUJydXNoKSk7CisgICAgZHVtcChDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAg
IHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcykpOworICAgIGR1bXAoQ2hh
bmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3N0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdl
OjpTdHJva2VTdHlsZSkpOworCisgICAgZHVtcChDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCwgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkxpbmVDYXApKTsKKyAgICBkdW1wKENo
YW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9saW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6TGluZURhc2gpKTsKKyAgICBkdW1wKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbiwgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUpvaW4pKTsKKyAgICBkdW1wKENoYW5n
ZTo6TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9taXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6
TWl0ZXJMaW1pdCkpOworCisgICAgZHVtcChDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY29tcG9zaXRlTW9kZSwgICAgICAgICAg
ICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUpKTsKKyAgICBkdW1w
KENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9kcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENo
YW5nZTo6RHJvcFNoYWRvdykpOworCisgICAgZHVtcChDaGFuZ2U6OkFscGhhLCAgICAgICAgICAg
ICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEsICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkFscGhhKSk7CisgICAgZHVtcChD
aGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFu
Z2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKyAgICBkdW1wKENoYW5nZTo6VGV4dERy
YXdpbmdNb2RlLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJh
d2luZ01vZGUsICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6VGV4dERyYXdp
bmdNb2RlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAg
ICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzKSk7CisgICAgZHVtcChD
aGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFu
Z2U6OlNob3VsZFNtb290aEZvbnRzKSk7CisgICAgZHVtcChDaGFuZ2U6OlNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cywgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzLCAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cykpOworICAgIGR1bXAoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcywg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAg
ICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcykpOwor
ICAgIGR1bXAoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICBzdGF0ZUNoYW5n
ZU5hbWUoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaykpOworI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCisgICAgZHVtcChDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAg
IHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlVzZURhcmtBcHBlYXJhbmNlKSk7CisjZW5kaWYKKyAg
ICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UgY2hhbmdlKQoreworICAgIHRzIDw8IHN0YXRl
Q2hhbmdlTmFtZShjaGFuZ2UpOworICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
KQoreworICAgIHJldHVybiBzdGF0ZS5kdW1wKHRzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dFN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZlNGNlYTNjMmQ1OGM4N2I0OTIzODQ3NWU0
NjhiNWRmZDVlZTNhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmgKQEAgLTAsMCArMSwzODEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgi
CisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKyNpbmNsdWRlICJXaW5kUnVsZS5oIgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFw
aGljc0NvbnRleHRTdGF0ZSB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDaGFuZ2UgOiB1aW50
MzJfdCB7CisgICAgICAgIENUTSAgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKKwor
ICAgICAgICBGaWxsQnJ1c2ggICAgICAgICAgICAgICAgICAgPSAxIDw8IDEsCisgICAgICAgIEZp
bGxSdWxlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwKKworICAgICAgICBTdHJva2VCcnVz
aCAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCisgICAgICAgIFN0cm9rZVRoaWNrbmVzcyAgICAg
ICAgICAgICA9IDEgPDwgNCwKKyAgICAgICAgU3Ryb2tlU3R5bGUgICAgICAgICAgICAgICAgID0g
MSA8PCA1LAorCisgICAgICAgIExpbmVDYXAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgNiwK
KyAgICAgICAgTGluZURhc2ggICAgICAgICAgICAgICAgICAgID0gMSA8PCA3LAorICAgICAgICBM
aW5lSm9pbiAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDgsCisgICAgICAgIE1pdGVyTGltaXQg
ICAgICAgICAgICAgICAgICA9IDEgPDwgOSwKKworICAgICAgICBDb21wb3NpdGVNb2RlICAgICAg
ICAgICAgICAgPSAxIDw8IDEwLAorICAgICAgICBEcm9wU2hhZG93ICAgICAgICAgICAgICAgICAg
PSAxIDw8IDExLAorCisgICAgICAgIEFscGhhICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwg
MTIsCisgICAgICAgIEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgICA9IDEgPDwgMTMsCisgICAg
ICAgIFRleHREcmF3aW5nTW9kZSAgICAgICAgICAgICA9IDEgPDwgMTQsCisKKyAgICAgICAgU2hv
dWxkQW50aWFsaWFzICAgICAgICAgICAgID0gMSA8PCAxNSwKKyAgICAgICAgU2hvdWxkU21vb3Ro
Rm9udHMgICAgICAgICAgID0gMSA8PCAxNiwKKyAgICAgICAgU2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzID0gMSA8PCAxNywKKyAgICAgICAgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgICAgID0g
MSA8PCAxOCwKKyAgICAgICAgRHJhd0x1bWluYW5jZU1hc2sgICAgICAgICAgID0gMSA8PCAxOSwK
KyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgICAgICBVc2VEYXJrQXBwZWFyYW5j
ZSAgICAgICAgICAgPSAxIDw8IDIwLAorI2VuZGlmCisgICAgfTsKKyAgICB1c2luZyBDaGFuZ2VG
bGFncyA9IE9wdGlvblNldDxDaGFuZ2U+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBDaGFuZ2VG
bGFncyBpbml0aWFsQ2hhbmdlRmxhZ3MgPSB7IENoYW5nZTo6RmlsbEJydXNoLCBDaGFuZ2U6OlN0
cm9rZUJydXNoLCBDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcyB9OworCisgICAgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcEJvdW5k
cywgY29uc3QgQ2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRp
YWxDVE0gPSB7IH0pOworCisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNsaXBCb3VuZHMo
KSBjb25zdDsKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KSB7IG1fY2xpcEJv
dW5kcy5pbnRlcnNlY3QobV9jdG0ubWFwUmVjdChyZWN0KSk7IH0KKworICAgIENoYW5nZUZsYWdz
IGNoYW5nZXMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZUZsYWdzOyB9CisgICAgdm9pZCBkaWRB
cHBseVN0YXRlQ2hhbmdlcygpIHsgbV9jaGFuZ2VGbGFncyA9IHsgfTsgfQorCisgICAgQWZmaW5l
VHJhbnNmb3JtIGdldENUTSgpIGNvbnN0IHsgcmV0dXJuIG1fY3RtOyB9CisgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0sIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhp
Y3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6
Q1RNLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtLCBjdG0sIGxhc3RBcHBsaWVkU3RhdGUp
OyB9CisKKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgZmlsbEJydXNoKCkgY29uc3QgeyByZXR1cm4g
bV9maWxsQnJ1c2g7IH0KKyAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3Is
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0
YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbEJydXNoLCAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fZmlsbEJydXNoLCB7IGNvbG9yIH0sIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgdm9p
ZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fZmlsbEJydXNoLnNldEdyYWRpZW50KFdURk1v
dmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxhZ3MuYWRkKENoYW5nZTo6
RmlsbEJydXNoKTsgfQorICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0
dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX2ZpbGxCcnVz
aC5zZXRQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VG
bGFncy5hZGQoQ2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisKKyAgICBXaW5kUnVsZSBmaWxsUnVsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsbFJ1bGU7IH0KKyAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRS
dWxlIGZpbGxSdWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYg
bGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkZpbGxSdWxlLCAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsIGZpbGxSdWxlLCBsYXN0QXBwbGllZFN0YXRlKTsg
fQorCisgICAgY29uc3QgU291cmNlQnJ1c2gmIHN0cm9rZUJydXNoKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJva2VCcnVzaDsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZUJydXNoLCAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldEdy
YWRpZW50KFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSk7IG1fY2hhbmdlRmxhZ3Mu
YWRkKENoYW5nZTo6U3Ryb2tlQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJl
ZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zv
cm0pIHsgbV9zdHJva2VCcnVzaC5zZXRQYXR0ZXJuKFdURk1vdmUocGF0dGVybiksIHNwYWNlVHJh
bnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKworICAg
IGZsb2F0IHN0cm9rZVRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlVGhpY2tuZXNz
OyB9CisgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0
ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcywgc3Ryb2tlVGhpY2tuZXNzLCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorCisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0cm9rZVN0eWxlOyB9CisgICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHJv
a2VTdHlsZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RB
cHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTdHJva2VTdHlsZSwgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlLCBzdHJva2VTdHlsZSwgbGFzdEFwcGxpZWRTdGF0
ZSk7IH0KKworICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsg
fQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAsIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5
KENoYW5nZTo6TGluZUNhcCwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVDYXAsIGxpbmVD
YXAsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBjb25zdCBMaW5lRGFzaCYgbGluZURhc2go
KSBjb25zdCB7IHJldHVybiBtX2xpbmVEYXNoOyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChMaW5l
RGFzaCYmIGxpbmVEYXNoLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVEYXNoLCAmR3Jh
cGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gsIFdURk1vdmUobGluZURhc2gpLCBsYXN0QXBw
bGllZFN0YXRlKTsgfQorCisgICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBt
X2xpbmVKb2luOyB9CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbiwgY29u
c3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUp
IHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpMaW5lSm9pbiwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X2xpbmVKb2luLCBsaW5lSm9pbiwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGZsb2F0IG1p
dGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7IH0KKyAgICB2b2lkIHNldE1p
dGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0Nv
bnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpNaXRl
ckxpbWl0LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1pdCwgbWl0ZXJMaW1pdCwg
bGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU1vZGU7IH0KKyAgICB2b2lkIHNldENvbXBv
c2l0ZU1vZGUoQ29tcG9zaXRlTW9kZSBjb21wb3NpdGVNb2RlLCBjb25zdCBzdGQ6Om9wdGlvbmFs
PEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShD
aGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVN
b2RlLCBjb21wb3NpdGVNb2RlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIGNvbnN0
IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX2Ryb3BTaGFkb3c7IH0K
KyAgICB2b2lkIHNldERyb3BTaGFkb3coY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdywgY29u
c3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUp
IHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpEcm9wU2hhZG93LCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6
Om1fZHJvcFNoYWRvdywgZHJvcFNoYWRvdywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGZs
b2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9hbHBoYTsgfQorICAgIHZvaWQgc2V0QWxwaGEo
ZmxvYXQgYWxwaGEsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBs
YXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6QWxwaGEsICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9hbHBoYSwgYWxwaGEsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisg
ICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0
IHsgcmV0dXJuIG1faW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsgfQorICAgIHZvaWQgc2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYg
bGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHksICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5LCBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAg
IAorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dERyYXdpbmdNb2RlOyB9CisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFu
Z2U6OlRleHREcmF3aW5nTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5n
TW9kZSwgdGV4dERyYXdpbmdNb2RlLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAgYm9vbCBz
aG91bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEFudGlhbGlhczsgfQorICAg
IHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQ
cm9wZXJ0eShDaGFuZ2U6OlNob3VsZEFudGlhbGlhcywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZEFudGlhbGlhcywgc2hvdWxkQW50aWFsaWFzLCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU21v
b3RoRm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21v
b3RoRm9udHMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0
QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywgc2hvdWxkU21vb3RoRm9u
dHMsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOyB9
CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3Rh
dGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisKKyAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIHZvaWQgc2V0U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgY29uc3Qgc3RkOjpvcHRp
b25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVy
dHkoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KKyAgICAKKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29u
c3QgeyByZXR1cm4gbV9kcmF3THVtaW5hbmNlTWFzazsgfQorICAgIHZvaWQgc2V0RHJhd0x1bWlu
YW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFw
aGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdl
OjpEcmF3THVtaW5hbmNlTWFzaywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2RyYXdMdW1pbmFu
Y2VNYXNrLCBkcmF3THVtaW5hbmNlTWFzaywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlRGFya0FwcGVhcmFuY2U7IH0KKyAgICB2b2lkIHNldFVzZURhcmtB
cHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3Jh
cGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5n
ZTo6VXNlRGFya0FwcGVhcmFuY2UsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBw
ZWFyYW5jZSwgdXNlRGFya0FwcGVhcmFuY2UsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisjZW5kaWYK
KworICAgIGJvb2wgaGFzT25seVByaW1pdGl2ZUNoYW5nZXMoKSBjb25zdDsKKyAgICB2b2lkIG1l
cmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpOworICAgIHZvaWQg
bWVyZ2VEaWZmcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3RoZXIpOworCisgICAgV1RG
OjpUZXh0U3RyZWFtJiBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OworCisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CisgICAgdm9pZCBzZXRQcm9wZXJ0eShDaGFuZ2UgY2hhbmdlLCBUIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjoqcHJvcGVydHksIGNvbnN0IFQmIHZhbHVlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLT4qcHJvcGVydHkgPT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHRoaXMtPipwcm9wZXJ0eSA9IHZhbHVlOworICAgICAgICBtX2NoYW5nZUZsYWdzLnNldChjaGFu
Z2UsICFsYXN0QXBwbGllZFN0YXRlIHx8ICgqbGFzdEFwcGxpZWRTdGF0ZSkuKnByb3BlcnR5ICE9
IHRoaXMtPipwcm9wZXJ0eSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICB2b2lkIHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhpY3NDb250ZXh0U3RhdGU6
Oipwcm9wZXJ0eSwgVCYmIHZhbHVlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4
dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLT4qcHJv
cGVydHkgPT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMtPipwcm9w
ZXJ0eSA9IFdURk1vdmUodmFsdWUpOworICAgICAgICBtX2NoYW5nZUZsYWdzLnNldChjaGFuZ2Us
ICFsYXN0QXBwbGllZFN0YXRlIHx8ICgqbGFzdEFwcGxpZWRTdGF0ZSkuKnByb3BlcnR5ICE9IHRo
aXMtPipwcm9wZXJ0eSk7CisgICAgfQorCisgICAgRmxvYXRSZWN0IG1fY2xpcEJvdW5kczsKKwor
ICAgIENoYW5nZUZsYWdzIG1fY2hhbmdlRmxhZ3M7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9j
dG07CisKKyAgICBTb3VyY2VCcnVzaCBtX2ZpbGxCcnVzaCB7IENvbG9yOjpibGFjayB9OworICAg
IFdpbmRSdWxlIG1fZmlsbFJ1bGUgeyBXaW5kUnVsZTo6Tm9uWmVybyB9OworCisgICAgU291cmNl
QnJ1c2ggbV9zdHJva2VCcnVzaCB7IENvbG9yOjpibGFjayB9OworICAgIGZsb2F0IG1fc3Ryb2tl
VGhpY2tuZXNzIHsgMCB9OworICAgIFN0cm9rZVN0eWxlIG1fc3Ryb2tlU3R5bGUgeyBTb2xpZFN0
cm9rZSB9OworCisgICAgTGluZUNhcCBtX2xpbmVDYXAgeyBMaW5lQ2FwOjpCdXR0IH07CisgICAg
TGluZURhc2ggbV9saW5lRGFzaDsKKyAgICBMaW5lSm9pbiBtX2xpbmVKb2luIHsgTGluZUpvaW46
Ok1pdGVyIH07CisgICAgZmxvYXQgbV9taXRlckxpbWl0IHsgMCB9OworCisgICAgQ29tcG9zaXRl
TW9kZSBtX2NvbXBvc2l0ZU1vZGUgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgQmxl
bmRNb2RlOjpOb3JtYWwgfTsKKyAgICBEcm9wU2hhZG93IG1fZHJvcFNoYWRvdzsKKworICAgIGZs
b2F0IG1fYWxwaGEgeyAxIH07CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgfTsKKyAgICBU
ZXh0RHJhd2luZ01vZGVGbGFncyBtX3RleHREcmF3aW5nTW9kZSB7IFRleHREcmF3aW5nTW9kZTo6
RmlsbCB9OworCisgICAgYm9vbCBtX3Nob3VsZEFudGlhbGlhcyB7IHRydWUgfTsKKyAgICBib29s
IG1fc2hvdWxkU21vb3RoRm9udHMgeyB0cnVlIH07CisgICAgYm9vbCBtX3Nob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kcmF3THVtaW5hbmNlTWFzayB7IGZhbHNlIH07Cisj
aWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIG1fdXNlRGFya0FwcGVhcmFu
Y2UgeyBmYWxzZSB9OworI2VuZGlmCit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9p
ZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7
CisgICAgYXV0byBlbmNvZGUgPSBbJl0oQ2hhbmdlIGNoYW5nZSwgYXV0byBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KGNoYW5nZSkpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHRoaXMtPipwcm9wZXJ0eTsKKyAgICB9
OworCisgICAgZW5jb2RlciA8PCBtX2NsaXBCb3VuZHM7CisKKyAgICBlbmNvZGVyIDw8IG1fY2hh
bmdlRmxhZ3M7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpDVE0sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKTsKKworICAgIGVuY29kZShDaGFu
Z2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsQnJ1c2gpOworICAgIGVuY29kZShDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBl
bmNvZGUoQ2hhbmdlOjpTdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpOworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZVRo
aWNrbmVzcywgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VU
aGlja25lc3MpOworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBlbmNv
ZGUoQ2hhbmdlOjpMaW5lQ2FwLCAgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZUNhcCk7CisgICAgZW5jb2RlKENoYW5nZTo6TGluZURhc2gsICAgICAg
ICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKTsKKyAg
ICBlbmNvZGUoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIGVuY29kZShDaGFuZ2U6Ok1pdGVyTGlt
aXQsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxp
bWl0KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAg
ICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKTsKKyAgICBlbmNvZGUo
Q2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBlbmNvZGUoQ2hhbmdlOjpBbHBoYSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fYWxwaGEpOworICAg
IGVuY29kZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICBlbmNvZGUo
Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIGVuY29kZShDaGFuZ2U6OlNob3VsZEFu
dGlhbGlhcywgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRB
bnRpYWxpYXMpOworICAgIGVuY29kZShDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cyk7CisgICAg
ZW5jb2RlKENoYW5nZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk7CisgICAgZW5jb2Rl
KENoYW5nZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpE
cmF3THVtaW5hbmNlTWFzaywgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
ZHJhd0x1bWluYW5jZU1hc2spOworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAg
ZW5jb2RlKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4gR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGF1dG8g
ZGVjb2RlID0gWyZdKEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ2hhbmdlIGNoYW5nZSwg
YXV0byBHcmFwaGljc0NvbnRleHRTdGF0ZTo6KnByb3BlcnR5KSB7CisgICAgICAgIGlmICghc3Rh
dGUubV9jaGFuZ2VGbGFncy5jb250YWlucyhjaGFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAgICAgdXNpbmcgUHJvcGVydHlUeXBlID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVf
cmVmZXJlbmNlPGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4oKS4q
cHJvcGVydHkpPjo6dHlwZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxQcm9wZXJ0eVR5cGU+IHZh
bHVlOworICAgICAgICBkZWNvZGVyID4+IHZhbHVlOworICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN0YXRlLipwcm9wZXJ0eSA9ICp2YWx1
ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfTsKKworICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0PiBjbGlwQm91bmRzOworICAgIGRlY29kZXIgPj4gY2xpcEJvdW5kczsKKyAgICBpZiAo
IWNsaXBCb3VuZHMpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPENoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKKyAgICBkZWNvZGVyID4+IGNoYW5nZUZs
YWdzOworICAgIGlmICghY2hhbmdlRmxhZ3MpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBzdGF0ZSgqY2xpcEJvdW5kcywgKmNoYW5nZUZs
YWdzKTsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNUTSwgICAgICAgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpGaWxsQnJ1
c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gp
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBD
aGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRl
OjptX2ZpbGxSdWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICgh
ZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTdHJva2VUaGlja25lc3MsICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0
cm9rZVN0eWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVj
b2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2xpbmVDYXApKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVEYXNoLCAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVEYXNoKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpMaW5lSm9pbiwgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbikpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0
ZXJMaW1pdCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29k
ZShzdGF0ZSwgQ2hhbmdlOjpDb21wb3NpdGVNb2RlLCAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkFscGhh
LCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hh
bmdlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpUZXh0RHJhd2luZ01vZGUsICAgICAg
ICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpKQorICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6
U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hv
dWxkQW50aWFsaWFzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRl
Y29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cykpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29k
ZShzdGF0ZSwgQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6RHJhd0x1bWluYW5j
ZU1hc2ssICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1h
c2spKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6VXNlRGFya0FwcGVhcmFu
Y2UsICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2Up
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworI2VuZGlmCisKKyAgICByZXR1cm4gc3Rh
dGU7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2UpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51
bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSwK
KyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q1RNLAorCisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCwK
KyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbFJ1bGUs
CisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tl
QnJ1c2gsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0
cm9rZVRoaWNrbmVzcywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlU3R5bGUsCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6TGluZUNhcCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6TGluZURhc2gsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkxpbmVKb2luLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0LAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsCisgICAgICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkRyb3BTaGFkb3csCisKKyAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGEsCisgICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksCisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlRleHREcmF3aW5n
TW9kZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpT
aG91bGRBbnRpYWxpYXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsCisgICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcmF3
THVtaW5hbmNlTWFzaworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgICwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UK
KyNlbmRpZgorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mNzIxMzI4NTI2MWU2OTBjYTMwNjBkN2UwMjZlNTBlNTJlZWE1
OTBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0g
dHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3NhdmVBbmRS
ZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3Rv
cmUpCisgICAgICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOworICAgIH0KKyAgICAKKyAgICB+R3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlcigpCisgICAgeworICAgICAgICBpZiAobV9zYXZlQW5kUmVz
dG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2F2ZSgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwor
ICAgICAgICBtX2NvbnRleHQuc2F2ZSgpOworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1
ZTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
c2F2ZUFuZFJlc3RvcmUpOworICAgICAgICBtX2NvbnRleHQucmVzdG9yZSgpOworICAgICAgICBt
X3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuICZtX2NvbnRleHQ7IH0KKworcHJpdmF0ZToKKyAg
ICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7
Cit9OworCitjbGFzcyBUcmFuc3BhcmVuY3lMYXllclNjb3BlIHsKK3B1YmxpYzoKKyAgICBUcmFu
c3BhcmVuY3lMYXllclNjb3BlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgYWxwaGEs
IGJvb2wgYmVnaW5MYXllciA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICwgbV9hbHBoYShhbHBoYSkKKyAgICAgICAgLCBtX2JlZ2FuTGF5ZXIoYmVnaW5MYXll
cikKKyAgICB7CisgICAgICAgIGlmIChiZWdpbkxheWVyKQorICAgICAgICAgICAgbV9jb250ZXh0
LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
YmVnaW5MYXllcihmbG9hdCBhbHBoYSkKKyAgICB7CisgICAgICAgIG1fYWxwaGEgPSBhbHBoYTsK
KyAgICAgICAgbV9jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9hbHBoYSk7CisgICAg
ICAgIG1fYmVnYW5MYXllciA9IHRydWU7CisgICAgfQorICAgIAorICAgIH5UcmFuc3BhcmVuY3lM
YXllclNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2JlZ2FuTGF5ZXIpCisgICAgICAgICAg
ICBtX2NvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CisgICAgZmxvYXQgbV9hbHBoYTsKKyAgICBi
b29sIG1fYmVnYW5MYXllcjsKK307CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICwgbV9zdGFja1NpemUoY29udGV4dC5zdGFja1NpemUoKSkKKyAgICB7IH0KKworICAg
IH5HcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCisgICAgeworICAgICAgICBpZiAo
bV9jb250ZXh0LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQorICAgICAgICAgICAgV1RGTG9n
QWx3YXlzKCJHcmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBieSAlZCIsICZtX2NvbnRl
eHQsIChpbnQpbV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0YWNrU2l6ZSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIHVuc2ln
bmVkIG1fc3RhY2tTaXplOworfTsKKworY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5
IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQo
Z3JhcGhpY3NDb250ZXh0KQorICAgICAgICAsIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5
KGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCisgICAgICAgICwg
bV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSAh
PSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0aW9u
UXVhbGl0eSAhPSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQorICAgIHsKKyAgICAgICAgaWYg
KG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkKQorICAgICAgICAgICAgbV9ncmFwaGljc0Nv
bnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0eVRv
VXNlKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50ZXJw
b2xhdGlvblF1YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5KQorICAgICAgICA6IEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGludGVycG9sYXRpb25RdWFs
aXR5ID8gaW50ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBoaWNzQ29udGV4dC5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KCkpCisgICAgeworICAgIH0KKworICAgIH5JbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlv
blF1YWxpdHlDaGFuZ2VkKQorICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7Cisg
ICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7Cisg
ICAgYm9vbCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NUeXBlcy5jcHAKaW5kZXggMTVkZjFkZmRiNmYzYTE2YWQ1ZWFmNjQ3MjYxZmNmYzRiN2E5
M2FiNC4uNjJmOWY0NjRjM2Q2ZDlkNWEwOWNhNWE0YjdiZDhhMTAzNjE1OTFjNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKQEAg
LTEyNiwyNyArMTI2LDUxIEBAIFN0cmluZyBibGVuZE1vZGVOYW1lKEJsZW5kTW9kZSBibGVuZE9w
KQogICAgIHJldHVybiBibGVuZE9wZXJhdG9yTmFtZXNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJs
ZW5kT3ApIC0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEJsZW5kTW9kZTo6Tm9ybWFsKV07CiB9CiAK
K1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCit7CisgICAgcmV0dXJuIHRzIDw8IGJsZW5kTW9kZU5hbWUoYmxlbmRNb2RlKTsKK30KKwor
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29tcG9zaXRlTW9kZSBjb21w
b3NpdGVNb2RlKQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIs
IGNvbXBvc2l0ZU1vZGUub3BlcmF0aW9uKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1v
ZGUiLCBjb21wb3NpdGVNb2RlLmJsZW5kTW9kZSk7CisgICAgcmV0dXJuIHRzOworfQorCiBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVPcGVyYXRvciBvcCkK
IHsKICAgICByZXR1cm4gdHMgPDwgY29tcG9zaXRlT3BlcmF0b3JOYW1lKG9wLCBCbGVuZE1vZGU6
Ok5vcm1hbCk7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hhZG93KQogewotICAgIHJldHVybiB0cyA8PCBibGVu
ZE1vZGVOYW1lKGJsZW5kTW9kZSk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zmc2V0
IiwgZHJvcFNoYWRvdy5vZmZzZXQpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIi
LCBkcm9wU2hhZG93LmJsdXJSYWRpdXMpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWNv
bG9yIiwgZHJvcFNoYWRvdy5jb2xvcik7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVz
ZS1sZWdhY3ktcmFkaXVzIiwgZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01v
ZGU6OkxlZ2FjeSk7CisgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBXaW5kUnVsZSBydWxlKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkp
CiB7Ci0gICAgc3dpdGNoIChydWxlKSB7Ci0gICAgY2FzZSBXaW5kUnVsZTo6Tm9uWmVybzoKLSAg
ICAgICAgdHMgPDwgIk5PTi1aRVJPIjsKKyAgICBzd2l0Y2ggKGludGVycG9sYXRpb25RdWFsaXR5
KSB7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKKyAgICAgICAgdHMg
PDwgIkRFRkFVTFQiOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdpbmRSdWxlOjpFdmVuT2Rk
OgotICAgICAgICB0cyA8PCAiRVZFTi1PREQiOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxp
dHk6OkRvTm90SW50ZXJwb2xhdGU6CisgICAgICAgIHRzIDw8ICJETy1OT1QtSU5URVJQT0xBVEUi
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Cisg
ICAgICAgIHRzIDw8ICJMT1ciOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVycG9sYXRp
b25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgIHRzIDw8ICJNRURJVU0iOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAgICAgICB0cyA8PCAi
SEVJR0giOwogICAgICAgICBicmVhazsKICAgICB9Ci0KICAgICByZXR1cm4gdHM7CiB9CiAKQEAg
LTE2Niw2ICsxOTAsMTEgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
TGluZUNhcCBjYXBTdHlsZSkKICAgICByZXR1cm4gdHM7CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVEYXNoKQoreworICAgIHJldHVybiB0czsKK30KKwog
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gam9pblN0eWxl
KQogewogICAgIHN3aXRjaCAoam9pblN0eWxlKSB7CkBAIC0xODIsNCArMjExLDU2IEBAIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIExpbmVKb2luIGpvaW5TdHlsZSkKICAg
ICByZXR1cm4gdHM7CiB9CiAKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQoreworICAgIHN3aXRjaCAoc3Ryb2tlU3R5bGUpIHsK
KyAgICBjYXNlIFN0cm9rZVN0eWxlOjpOb1N0cm9rZToKKyAgICAgICAgdHMgPDwgIk5PLVNUUk9L
RSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlOgor
ICAgICAgICB0cyA8PCAiU09MSUQtU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT
dHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlOgorICAgICAgICB0cyA8PCAiRE9UVEVELVNUUk9LRSI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Ryb2tlU3R5bGU6OkRhc2hlZFN0cm9rZToKKyAg
ICAgICAgdHMgPDwgIkRBU0hFRC1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0
cm9rZVN0eWxlOjpEb3VibGVTdHJva2U6CisgICAgICAgIHRzIDw8ICJET1VCTEUtU1RST0tFIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6V2F2eVN0cm9rZToKKyAgICAg
ICAgdHMgPDwgIldBVlktU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVy
biB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVGV4dERy
YXdpbmdNb2RlIHRleHREcmF3aW5nTW9kZSkKK3sKKyAgICBzd2l0Y2ggKHRleHREcmF3aW5nTW9k
ZSkgeworICAgIGNhc2UgVGV4dERyYXdpbmdNb2RlOjpGaWxsOgorICAgICAgICB0cyA8PCAiRklM
TCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dERyYXdpbmdNb2RlOjpTdHJva2U6Cisg
ICAgICAgIHRzIDw8ICJTVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBXaW5kUnVs
ZSBydWxlKQoreworICAgIHN3aXRjaCAocnVsZSkgeworICAgIGNhc2UgV2luZFJ1bGU6Ok5vblpl
cm86CisgICAgICAgIHRzIDw8ICJOT04tWkVSTyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V2luZFJ1bGU6OkV2ZW5PZGQ6CisgICAgICAgIHRzIDw8ICJFVkVOLU9ERCI7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiB0czsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NU
eXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5o
CmluZGV4IDRkMjA0ZTk3ZTVjNTQ0ZDc3NmJmYTdmMzBhYWNjMWI3YzQ2M2UwZTAuLjBmOGIyZDAy
NzU1YmZhZWM2NWQ5NWMwNGYyYzQ1YjUyNDk0ZjI2MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTI1LDYgKzI1LDkgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRhc2hBcnJheS5o
IgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5jbHVk
ZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNzMsNiAr
NzYsNzkgQEAgZW51bSBjbGFzcyBCbGVuZE1vZGUgOiB1aW50OF90IHsKICAgICBQbHVzTGlnaHRl
cgogfTsKIAorc3RydWN0IENvbXBvc2l0ZU1vZGUgeworICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9w
ZXJhdGlvbjsKKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlOworCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENvbXBvc2l0ZU1vZGUmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbiA9PSBvdGhlci5vcGVyYXRpb24gJiYgYmxlbmRNb2RlID09IG90aGVyLmJsZW5kTW9kZTsK
KyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPENvbXBvc2l0ZU1vZGU+IGRlY29kZShEZWNvZGVyJik7Cit9OworCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBDb21wb3NpdGVNb2RlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG9wZXJhdGlvbjsKKyAgICBlbmNvZGVyIDw8IGJs
ZW5kTW9kZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8Q29t
cG9zaXRlTW9kZT4gQ29tcG9zaXRlTW9kZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3BlcmF0aW9uOworICAgIGRlY29k
ZXIgPj4gb3BlcmF0aW9uOworICAgIGlmICghb3BlcmF0aW9uKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKKyAg
ICBkZWNvZGVyID4+IGJsZW5kTW9kZTsKKyAgICBpZiAoIWJsZW5kTW9kZSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm9wZXJhdGlvbiwgKmJsZW5kTW9k
ZSB9IH07Cit9CisKK3N0cnVjdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSB7CisgICAgZW51bSBj
bGFzcyBNb2RlIDogdWludDhfdCB7CisgICAgICAgIFRleHRDaGVja2luZ0RpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXMsCisgICAgICAgIFNwZWxsaW5nLAorICAgICAgICBHcmFtbWFyLAor
ICAgICAgICBBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LAorICAgICAgICBEaWN0YXRpb25BbHRl
cm5hdGl2ZXMKKyAgICB9IG1vZGU7CisgICAgYm9vbCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB7
IGZhbHNlIH07CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0
aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IGRlY29kZShEZWNvZGVyJik7Cit9OworCit0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtb2RlOworICAg
IGVuY29kZXIgPDwgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7Cit9CisKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpv
cHRpb25hbDxNb2RlPiBtb2RlOworICAgIGRlY29kZXIgPj4gbW9kZTsKKyAgICBpZiAoIW1vZGUp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+
IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOworICAgIGRlY29kZXIgPj4gc2hvdWxkVXNlRGFya0Fw
cGVhcmFuY2U7CisgICAgaWYgKCFzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm1vZGUsICpzaG91bGRVc2VEYXJr
QXBwZWFyYW5jZSB9IH07Cit9CisKIGVudW0gY2xhc3MgR3JhZGllbnRTcHJlYWRNZXRob2QgOiB1
aW50OF90IHsKICAgICBQYWQsCiAgICAgUmVmbGVjdCwKQEAgLTkzLDYgKzE2OSw0MiBAQCBlbnVt
IGNsYXNzIExpbmVDYXAgOiB1aW50OF90IHsKICAgICBTcXVhcmUKIH07CiAKK3N0cnVjdCBMaW5l
RGFzaCB7CisgICAgRGFzaEFycmF5IGRhc2hlczsKKyAgICBmbG9hdCBvZmZzZXQ7CisgICAgCisg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExpbmVEYXNo
PiBkZWNvZGUoRGVjb2RlciYpOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBM
aW5lRGFzaCYgYSwgY29uc3QgTGluZURhc2gmIGIpCit7CisgICAgcmV0dXJuIGEuZGFzaGVzID09
IGIuZGFzaGVzICYmIGEub2Zmc2V0ID09IGIub2Zmc2V0OworfQorCit0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgordm9pZCBMaW5lRGFzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7
CisgICAgZW5jb2RlciA8PCBkYXNoZXM7CisgICAgZW5jb2RlciA8PCBvZmZzZXQ7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPExpbmVEYXNoPiBMaW5lRGFzaDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxEYXNoQXJyYXk+
IGRhc2hlczsKKyAgICBkZWNvZGVyID4+IGRhc2hlczsKKyAgICBpZiAoIWRhc2hlcykKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9mZnNl
dDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgV1RGTW92ZSgqZGFzaGVzKSwgKm9m
ZnNldCB9IH07Cit9CisKIGVudW0gY2xhc3MgTGluZUpvaW4gOiB1aW50OF90IHsKICAgICBNaXRl
ciwKICAgICBSb3VuZCwKQEAgLTEwNSw2ICsyMTcsNzYgQEAgZW51bSBIb3Jpem9udGFsQWxpZ25t
ZW50IHsKICAgICBBbGlnbkhDZW50ZXIKIH07CiAKKy8vIExlZ2FjeSBzaGFkb3cgYmx1ciByYWRp
dXMgaXMgdXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorLy8gSXQgaGFz
IGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCitlbnVtIGNsYXNzIFNoYWRvd1Jh
ZGl1c01vZGUgOiBib29sIHsKKyAgICBEZWZhdWx0LAorICAgIExlZ2FjeQorfTsKKworc3RydWN0
IERyb3BTaGFkb3cgeworICAgIEZsb2F0U2l6ZSBvZmZzZXQ7CisgICAgZmxvYXQgYmx1clJhZGl1
cyB7IDAgfTsKKyAgICBDb2xvciBjb2xvcjsKKyAgICBTaGFkb3dSYWRpdXNNb2RlIHJhZGl1c01v
ZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07CisgICAgCisgICAgYm9vbCBpc1Zpc2li
bGUoKSBjb25zdCB7IHJldHVybiBjb2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaXNCbHVy
cmVkKCkgY29uc3QgeyByZXR1cm4gaXNWaXNpYmxlKCkgJiYgYmx1clJhZGl1czsgfQorICAgIGJv
b2wgaGFzT3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIGlzQmx1cnJlZCgpIHx8IChpc1Zpc2libGUo
KSAmJiAhb2Zmc2V0LmlzWmVybygpKTsgfQorICAgIAorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxEcm9wU2hhZG93PiBkZWNvZGUoRGVjb2RlciYpOwor
fTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEcm9wU2hhZG93JiBhLCBjb25zdCBE
cm9wU2hhZG93JiBiKQoreworICAgIHJldHVybiBhLm9mZnNldCA9PSBiLm9mZnNldCAmJiBhLmJs
dXJSYWRpdXMgPT0gYi5ibHVyUmFkaXVzICYmIGEuY29sb3IgPT0gYi5jb2xvciAmJiBhLnJhZGl1
c01vZGUgPT0gYi5yYWRpdXNNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9p
ZCBEcm9wU2hhZG93OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNv
ZGVyIDw8IG9mZnNldDsKKyAgICBlbmNvZGVyIDw8IGJsdXJSYWRpdXM7CisgICAgZW5jb2RlciA8
PCBjb2xvcjsKKyAgICBlbmNvZGVyIDw8IHJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IERyb3BTaGFkb3c6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiBvZmZzZXQ7
CisgICAgZGVjb2RlciA+PiBvZmZzZXQ7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBibHVyUmFkaXVzOwor
ICAgIGRlY29kZXIgPj4gYmx1clJhZGl1czsKKyAgICBpZiAoIWJsdXJSYWRpdXMpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBjb2xvcjsK
KyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29sb3IpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFNoYWRvd1JhZGl1c01vZGU+IHJhZGl1
c01vZGU7CisgICAgZGVjb2RlciA+PiByYWRpdXNNb2RlOworICAgIGlmICghcmFkaXVzTW9kZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IHsgKm9mZnNldCwg
KmJsdXJSYWRpdXMsICpjb2xvciwgKnJhZGl1c01vZGUgfSB9OworfQorCitlbnVtIFN0cm9rZVN0
eWxlIHsKKyAgICBOb1N0cm9rZSwKKyAgICBTb2xpZFN0cm9rZSwKKyAgICBEb3R0ZWRTdHJva2Us
CisgICAgRGFzaGVkU3Ryb2tlLAorICAgIERvdWJsZVN0cm9rZSwKKyAgICBXYXZ5U3Ryb2tlLAor
fTsKKwogZW51bSBUZXh0QmFzZWxpbmUgewogICAgIEFscGhhYmV0aWNUZXh0QmFzZWxpbmUsCiAg
ICAgVG9wVGV4dEJhc2VsaW5lLApAQCAtMTIyLDE2ICszMDQsMjkgQEAgZW51bSBUZXh0QWxpZ24g
ewogICAgIFJpZ2h0VGV4dEFsaWduCiB9OwogCi1TdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1l
KFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwotU3RyaW5n
IGJsZW5kTW9kZU5hbWUoV2ViQ29yZTo6QmxlbmRNb2RlKTsKLWJvb2wgcGFyc2VCbGVuZE1vZGUo
Y29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7Ci1ib29sIHBhcnNlQ29tcG9zaXRl
QW5kQmxlbmRPcGVyYXRvcihjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRv
ciYsIFdlYkNvcmU6OkJsZW5kTW9kZSYpOworZW51bSBjbGFzcyBUZXh0RHJhd2luZ01vZGUgOiB1
aW50OF90IHsKKyAgICBGaWxsID0gMSA8PCAwLAorICAgIFN0cm9rZSA9IDEgPDwgMSwKK307CiAK
LVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9y
KTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBXaW5kUnVsZSk7Cit1c2luZyBUZXh0RHJhd2luZ01vZGVGbGFncyA9IE9wdGlvblNl
dDxUZXh0RHJhd2luZ01vZGU+OworCitTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1lKENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworU3RyaW5nIGJsZW5kTW9kZU5hbWUoQmxlbmRNb2Rl
KTsKK2Jvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwgQmxlbmRNb2RlJik7Citib29s
IHBhcnNlQ29tcG9zaXRlQW5kQmxlbmRPcGVyYXRvcihjb25zdCBTdHJpbmcmLCBDb21wb3NpdGVP
cGVyYXRvciYsIEJsZW5kTW9kZSYpOworCitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQmxlbmRNb2RlKTsKK1dFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDb21wb3NpdGVP
cGVyYXRvcik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgQ29tcG9zaXRlTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRHJvcFNoYWRvdyYpOwor
V0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIEludGVycG9sYXRpb25RdWFsaXR5KTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lQ2FwKTsKK1dFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lRGFzaCk7
CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgTGluZUpvaW4pOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYsIFN0cm9rZVN0eWxlKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBUZXh0RHJhd2luZ01vZGUp
OworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0
cmVhbSYsIFdpbmRSdWxlKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkBAIC0yMTksNCAr
NDE0LDM1IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6TGluZUpvaW4+
IHsKICAgICA+OwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpT
dHJva2VTdHlsZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29y
ZTo6U3Ryb2tlU3R5bGUsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlLAorICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VT
dHlsZTo6RG90dGVkU3Ryb2tlLAorICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpEYXNoZWRTdHJv
a2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZSwKKyAgICBXZWJDb3Jl
OjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVl
cyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6OlRleHREcmF3aW5nTW9kZSwKKyAgICAg
ICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAorICAgICAgICBXZWJDb3JlOjpUZXh0
RHJhd2luZ01vZGU6OlN0cm9rZQorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlPiB7CisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6TW9kZSwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6
VGV4dENoZWNraW5nRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKKyAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcsCisgICAgV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIsCisgICAgV2ViQ29yZTo6RG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisg
ICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVy
bmF0aXZlcworICAgID47Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYW1lZEltYWdlR2VuZXJhdGVk
SW1hZ2UuY3BwCmluZGV4IDRlMDcxZjcyZjM1YmU4YTU4ZmM0Y2Q1NzdhMTQ1NmRlMTc0NjY4MmMu
LjQxYjA1MTFhOGY3OGExNzliMzA0Y2Y4OWQ0MTAzZTM1ZGUzZTEyNWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVy
YXRlZEltYWdlLmNwcApAQCAtNDQsNyArNDQsNyBAQCBJbWFnZURyYXdSZXN1bHQgTmFtZWRJbWFn
ZUdlbmVyYXRlZEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRgog
ewogI2lmIFVTRShORVdfVEhFTUUpIHx8IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRleHQuY2xp
cChkc3RSZWN0KTsKICAgICBjb250ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkpOwog
ICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAppbmRl
eCBiNjIzNjc4ODBlM2U1MzU0YjYxNzExMzQ3YzlhMTFiNDIyNDY4ODVlLi5kNjdkM2VhMTE1ZDI0
ZWZkOTA5ZTAzYWM5YWRlOTNhOGI0NzY0ZmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDg3ICszOCw1NyBA
QCBwdWJsaWM6CiAgICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAogICAgIH07CiAKLSAg
ICBOdWxsR3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQot
ICAgICAgICA6IG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKHJlYXNvbnMpCisgICAgTnVsbEdy
YXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBQYWludEludmFsaWRh
dGlvblJlYXNvbnMgcmVhc29ucykKKyAgICAgICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENs
aXApCisgICAgICAgICwgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKICAgICB7
CiAgICAgfQogCiBwcml2YXRlOgotI2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNv
bnRleHQoYm9vbCkgZmluYWwgeyB9Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotCiAgICAgYm9vbCBwYWludGluZ0Rpc2Fi
bGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wgcGVyZm9ybWluZ1Bh
aW50SW52YWxpZGF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMgIT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lOyB9CiAgICAgYm9vbCBp
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52
YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGlu
Z0NvbnRyb2xUaW50czsgfQogICAgIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVj
b2RlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09
IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVj
b2RlczsgfQogICAgIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQ7IH0KIAotICAgIHZvaWQgZGlkVXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncykgZmluYWwgeyB9Ci0KLSNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJ
c0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsIHsgfQotCi0gICAgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbCB7IH07Ci0KLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWwgeyB9Ci0KLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB7IH07IH0KLQorICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQorICAg
IHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBm
aW5hbCB7IH07CiAjaWYgVVNFKENHKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmlu
YWwgeyB9CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9Ci0gICAgdm9pZCBk
cmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgPSAxKSBmaW5hbCB7IH0KLSAgICB2b2lkIGRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWwgeyB9Ci0gICAg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZp
bGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsIHsgfQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLSAgICB2b2lkIHN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xpcFBhdGgoY29uc3Qg
UGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQotICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdN
b2RlID0gUm91bmRBbGxTaWRlcykgZmluYWwgeyByZXR1cm4gcmVjdDsgfQotICAgIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYs
IGJvb2wsIGJvb2wgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSkgZmluYWwgeyB9
Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TGlu
ZUpvaW4oTGluZUpvaW4pIGZpbmFsIHsgfQotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KLSAgICB2
b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsIHsgfQotICAgIHZvaWQgcm90YXRlKGZs
b2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIGZpbmFsIHsg
fQotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQot
ICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQotICAgIEFm
ZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRl
RGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotICAgIHZvaWQgY2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
IGZpbmFsIHsgfQorCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5P
ZGQpIGZpbmFsIHsgfQogICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIHNhdmUoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbCB7
IH0KLQotICAgIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNp
Z25lZCA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+ID0gc3RkOjpudWxsb3B0KSBmaW5hbCB7
IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bCB7IH0KIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9h
dFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9t
U3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQpIGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbCB7IH0KKyAgICAKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lk
IHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBzdHJv
a2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBm
aW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICB2b2lkIGRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWwgeyB9CiAKLSAg
ICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURy
YXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFNpemUmLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5v
dGhpbmc7IH0KKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsg
fQorICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQogCiAgICAgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25z
dCBDb2xvciYpIGZpbmFsIHsgfQogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQpAQCAtMTI3LDI4ICs5NywyNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAjZW5kaWYKIAotICAg
IHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7
IH0KLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotCi0gICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Ci0KLSAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9Ci0gICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9Ci0KLSAgICB2
b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KLQorICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiwgRmlsdGVyJiwgRmlsdGVy
UmVzdWx0cyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0K
KyAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWwgeyB9CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAjZW5kaWYKIAorICAgIHZv
aWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNt
b290aGluZ01vZGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0
eWxlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsIHsgfQorCisgICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGlu
Z01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisKICNpZiBPUyhX
SU5ET1dTKSAmJiAhVVNFKENBSVJPKQogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0
cjsgfQogI2VuZGlmCiAKLXByaXZhdGU6CiAgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpOb25lIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTAxZmQzOTQ2
NDMzOWQyZDRkNTRiYTkzNjRjNTk0NWNmYWQ3ZDVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaApAQCAt
MCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIkRJQlBpeGVs
RGF0YS5oIgordHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKKyNpZiAhVVNFKENHKQorLy8gVUlu
dDggaXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2UuaAordHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIFVJbnQ4OworI2VuZGlmCisjZW5kaWYKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0ID0gc3RydWN0IENHQ29udGV4dDsKKyNlbGlmIFVTRShDQUlSTykK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dENhaXJvOworfQordXNp
bmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IHZvaWQ7CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5k
ZXggYmIxMzhiNTI5N2E1MjFmYmY3ZDY5M2NkMTE0MTA0NDAwZmNhYmM0ZS4uOTAyNGY1ZDFhYmZj
ZTM4MDgxODNhM2IyMzFmYmNlMGZmYjJmZjQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTE5MSwxNyArMTkxLDE3IEBAIFNoYWRv
d0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0LCBjb25zdCBDCiAgICAgdXBkYXRlU2hhZG93Qmx1clZhbHVlcygpOwogfQogCi1T
aGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkK
LSAgICA6IG1fY29sb3Ioc3RhdGUuc2hhZG93Q29sb3IpCi0gICAgLCBtX2JsdXJSYWRpdXMoc3Rh
dGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Qmx1cikKLSAgICAsIG1fb2Zmc2V0KHN0YXRlLnNo
YWRvd09mZnNldCkKLSAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IERyb3BTaGFk
b3cmIGRyb3BTaGFkb3csIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCisgICAgOiBtX2Nv
bG9yKGRyb3BTaGFkb3cuY29sb3IpCisgICAgLCBtX2JsdXJSYWRpdXMoZHJvcFNoYWRvdy5ibHVy
UmFkaXVzLCBkcm9wU2hhZG93LmJsdXJSYWRpdXMpCisgICAgLCBtX29mZnNldChkcm9wU2hhZG93
Lm9mZnNldCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpCiB7CiAjaWYgVVNFKENHKQogICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0
bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEw
MzQ0Mj4pLAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZp
b3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAgIGlmIChzdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgewotICAgICAgICBmbG9h
dCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7Cisg
ICAgaWYgKGRyb3BTaGFkb3cucmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kp
IHsKKyAgICAgICAgZmxvYXQgc2hhZG93Qmx1ciA9IHJhZGl1c1RvTGVnYWN5UmFkaXVzKGRyb3BT
aGFkb3cuYmx1clJhZGl1cyk7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFk
b3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAppbmRleCAxNGZkODNlZGUxYTFiYWNmMTc3ZjMz
MWVjYWQxYTQzMDI5M2Y2MDNhLi40NWQwZTU4MzI5Y2RlZWFiZmI3OGE0ZDVlNjdhYjhkODgxYWU1
NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5o
CkBAIC0zOCw4ICszOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0Owotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlOworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK3N0
cnVjdCBEcm9wU2hhZG93OwogCiBjbGFzcyBTaGFkb3dCbHVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTaGFkb3dCbHVyKTsKQEAgLTUyLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgU2hh
ZG93Qmx1cigpOwogICAgIFNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYsIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgPSBmYWxzZSk7Ci0gICAgU2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYpOworICAgIFNoYWRvd0JsdXIoY29uc3QgRHJvcFNoYWRvdyYsIGJvb2wgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMgPSBmYWxzZSk7CiAKICAgICB2b2lkIHNldFNoYWRvd1ZhbHVlcyhjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmICwgY29uc3QgQ29sb3ImLCBib29sIGlnbm9yZVRy
YW5zZm9ybXMgPSBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NvdXJjZUJydXNoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJydXNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzZhYzEzZmQyNWM2ZjBmODAxNTg3MmZm
MTllZDI4YTFmYTUyYmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNvdXJjZUJydXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU291cmNl
QnJ1c2g6OlNvdXJjZUJydXNoKGNvbnN0IENvbG9yJiBjb2xvciwgc3RkOjpvcHRpb25hbDxCcnVz
aD4mJiBicnVzaCkKKyAgICA6IG1fY29sb3IoY29sb3IpCisgICAgLCBtX2JydXNoKFdURk1vdmUo
YnJ1c2gpKQoreworfQorCitjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFNvdXJjZUJydXNoOjpzcGFj
ZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEFmZmluZVRy
YW5zZm9ybT4gaWRlbnRpdHk7CisgICAgcmV0dXJuIG1fYnJ1c2ggPyBtX2JydXNoLT5zcGFjZVRy
YW5zZm9ybSA6IGlkZW50aXR5LmdldCgpOworfQorCitHcmFkaWVudCogU291cmNlQnJ1c2g6Omdy
YWRpZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIGlmIChhdXRvKiBncmFkaWVudCA9IHN0ZDo6Z2V0X2lmPFJlZjxHcmFkaWVudD4+
KCZtX2JydXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBncmFkaWVudC0+cHRyKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK1BhdHRlcm4qIFNvdXJjZUJydXNoOjpwYXR0ZXJuKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
IChhdXRvKiBwYXR0ZXJuID0gc3RkOjpnZXRfaWY8UmVmPFBhdHRlcm4+PigmbV9icnVzaC0+YnJ1
c2gpKQorICAgICAgICByZXR1cm4gcGF0dGVybi0+cHRyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgU291cmNlQnJ1c2g6OnNldEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFk
aWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSkKK3sKKyAgICBtX2Jy
dXNoID0geyBXVEZNb3ZlKGdyYWRpZW50KSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKwordm9pZCBT
b3VyY2VCcnVzaDo6c2V0UGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQoreworICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUo
cGF0dGVybiksIHNwYWNlVHJhbnNmb3JtIH07Cit9CisKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU291cmNlQnJ1c2gmIGJydXNoKQoreworICAgIHRz
LmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBicnVzaC5jb2xvcigpKTsKKworICAgIGlmIChhdXRvIGdy
YWRpZW50ID0gYnJ1c2guZ3JhZGllbnQoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJncmFk
aWVudCIsIGdyYWRpZW50KTsKKworICAgIGlmIChhdXRvIHBhdHRlcm4gPSBicnVzaC5wYXR0ZXJu
KCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVybiIsIHBhdHRlcm4pOworCisgICAg
cmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTEwZjIxZmRi
ZWFjYmYzNWQ3ODkwYzc4ZjczOTk3OTY0YWRmZWExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaApAQCAtMCwwICsxLDE2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNs
dWRlICJQYXR0ZXJuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU291cmNlQnJ1
c2ggeworcHVibGljOgorICAgIHN0cnVjdCBCcnVzaCB7CisgICAgICAgIHN0ZDo6dmFyaWFudDxS
ZWY8R3JhZGllbnQ+LCBSZWY8UGF0dGVybj4+IGJydXNoOworICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gc3BhY2VUcmFuc2Zvcm07CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBE
ZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxCcnVzaD4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICB9OworCisgICAgU291cmNlQnJ1c2goKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQg
U291cmNlQnJ1c2goY29uc3QgQ29sb3ImLCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYmID0gc3RkOjpu
dWxsb3B0KTsKKworICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29s
b3I7IH0KKyAgICB2b2lkIHNldENvbG9yKGNvbnN0IENvbG9yIGNvbG9yKSB7IG1fY29sb3IgPSBj
b2xvcjsgfQorCisgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxCcnVzaD4mIGJydXNoKCkgY29uc3Qg
eyByZXR1cm4gbV9icnVzaDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgR3JhZGllbnQqIGdyYWRp
ZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUGF0dGVybiogcGF0dGVybigpIGNvbnN0
OworICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0oKSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHNwYWNlVHJhbnNmb3JtID0geyB9KTsKKyAgICB2b2lkIHNldFBhdHRlcm4oUmVmPFBhdHRl
cm4+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworCisg
ICAgYm9vbCBpc1ByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2JydXNoICYmIG1fY29sb3Iu
dHJ5R2V0QXNTUkdCQUJ5dGVzKCk7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxTb3VyY2VCcnVzaD4gZGVjb2RlKERlY29kZXImKTsKKworcHJp
dmF0ZToKKyAgICBDb2xvciBtX2NvbG9yIHsgQ29sb3I6OmJsYWNrIH07CisgICAgc3RkOjpvcHRp
b25hbDxCcnVzaD4gbV9icnVzaDsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
c3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGEsIGNvbnN0IHN0ZDo6
dmFyaWFudDxSZWY8R3JhZGllbnQ+LCBSZWY8UGF0dGVybj4+JiBiKQoreworICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKGEsCisgICAgICAgIFsmXSAoY29uc3QgUmVmPEdyYWRpZW50PiYgYUdyYWRp
ZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byogYkdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVm
PEdyYWRpZW50Pj4oJmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhR3JhZGllbnQucHRyKCkg
PT0gYkdyYWRpZW50LT5wdHIoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8UGF0dGVybj4mIGFQYXR0ZXJuKSB7CisgICAgICAg
ICAgICBpZiAoYXV0byogYlBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZiKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gYVBhdHRlcm4ucHRyKCkgPT0gYlBhdHRlcm4tPnB0cigp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgKTsKK30KKworaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaDo6QnJ1c2gmIGEsIGNvbnN0IFNv
dXJjZUJydXNoOjpCcnVzaCYgYikKK3sKKyAgICByZXR1cm4gYS5icnVzaCA9PSBiLmJydXNoICYm
IGEuc3BhY2VUcmFuc2Zvcm0gPT0gYi5zcGFjZVRyYW5zZm9ybTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTb3VyY2VCcnVzaCYgYSwgY29uc3QgU291cmNlQnJ1c2gmIGIpCit7
CisgICAgcmV0dXJuIGEuY29sb3IoKSA9PSBiLmNvbG9yKCkgJiYgYS5icnVzaCgpID09IGIuYnJ1
c2goKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4KK3ZvaWQgU291cmNlQnJ1c2g6
OkJydXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IHNwYWNlVHJhbnNmb3JtOworICAgIFdURjo6c3dpdGNoT24oYnJ1c2gsCisgICAgICAgIFsmXSAo
Y29uc3QgUmVmPEdyYWRpZW50PiYgZ3JhZGllbnQpIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
dHJ1ZSA8PCBncmFkaWVudC5nZXQoKTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBS
ZWY8UGF0dGVybj4mIHBhdHRlcm4pIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgZmFsc2UgPDwg
cGF0dGVybi5nZXQoKTsKKyAgICAgICAgfQorICAgICk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoOjpCcnVzaD4gU291cmNlQnJ1c2g6
OkJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPEFm
ZmluZVRyYW5zZm9ybT4gc3BhY2VUcmFuc2Zvcm07CisgICAgZGVjb2RlciA+PiBzcGFjZVRyYW5z
Zm9ybTsKKyAgICBpZiAoIXNwYWNlVHJhbnNmb3JtKQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBoYXNHcmFkaWVudDsKKyAgICBkZWNvZGVy
ID4+IGhhc0dyYWRpZW50OworICAgIGlmICghaGFzR3JhZGllbnQpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgCisgICAgaWYgKCpoYXNHcmFkaWVudCkgeworICAgICAgICBhdXRv
IGdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFncmFk
aWVudCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7
IHsgV1RGTW92ZSgqZ3JhZGllbnQpLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworICAgIH0KKworICAg
IGF1dG8gcGF0dGVybiA9IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsKKyAgICBpZiAoIXBhdHRl
cm4pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHsgeyBXVEZNb3Zl
KCpwYXR0ZXJuKSwgKnNwYWNlVHJhbnNmb3JtIH0gfTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgU291cmNlQnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAor
eworICAgIGVuY29kZXIgPDwgbV9jb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1fYnJ1c2g7Cit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBTb3Vy
Y2VCcnVzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxD
b2xvcj4gY29sb3I7CisgICAgZGVjb2RlciA+PiBjb2xvcjsKKyAgICBpZiAoIWNvbG9yKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlv
bmFsPEJydXNoPj4gYnJ1c2g7CisgICAgZGVjb2RlciA+PiBicnVzaDsKKyAgICBpZiAoIWJydXNo
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIFNvdXJjZUJydXNo
KCpjb2xvciwgV1RGTW92ZSgqYnJ1c2gpKTsKK30KKworV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFNvdXJjZUJydXNoJik7CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1RleHRCb3hJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dEJveEl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzdlNjhlMzhmMDIzN2IwMjIwY2Y2NWJhMmMxMGU4
ODg4ZGQ0OTg1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RleHRCb3hJdGVyYXRvci5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJUZXh0UnVuLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dEJveEl0ZXJh
dG9yIHsKK3B1YmxpYzoKKyAgICBUZXh0Qm94SXRlcmF0b3IoKQorICAgICAgICA6IG1fdGV4dFJ1
bigwKQorICAgICAgICAsIG1fb2Zmc2V0KDApCisgICAgeworICAgIH0KKworICAgIFRleHRCb3hJ
dGVyYXRvcihjb25zdCBUZXh0UnVuKiB0ZXh0UnVuLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgICAg
IDogbV90ZXh0UnVuKHRleHRSdW4pCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorICAgIHZvaWQgaW5jcmVtZW50KCkgeyBtX29mZnNldCsrOyB9CisgICAgYm9vbCBhdEVuZCgp
IGNvbnN0IHsgcmV0dXJuICFtX3RleHRSdW4gfHwgbV9vZmZzZXQgPj0gbV90ZXh0UnVuLT5sZW5n
dGgoKTsgfQorICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAoKm1fdGV4dFJ1bilb
bV9vZmZzZXRdOyB9CisgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gYXRFbmQoKSA/IFVfT1RIRVJfTkVVVFJBTCA6IHVfY2hhckRpcmVjdGlvbihjdXJyZW50KCkp
OyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGV4dEJveEl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldCAm
JiBtX3RleHRSdW4gPT0gb3RoZXIubV90ZXh0UnVuOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBUZXh0Qm94SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiAhb3BlcmF0
b3I9PShvdGhlcik7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUZXh0UnVuKiBtX3RleHRSdW47
CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAppbmRleCA3MjhkM2JlYTBhMTcyMzUwMTRmMGYxMmNmM2Q2ZDdkYTE5M2MzNWE1
Li4xNWU4NDU1N2FjODFhNzY3YTAwNzQ2ZTMwMTYxNTM1NDRmMjE1NjdiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKQEAgLTE4MzQsNyArMTgzNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVD
b21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAgICAg
IAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUoKSk7
CiAKLSAgICAgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCBjb250ZXh0KCptX2Rpc3BsYXlM
aXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3Jt
KCkpOworICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1fZGlzcGxh
eUxpc3QsIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CiAgICAgICAgIHBhaW50R3Jh
cGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUo
KSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IDE1NTIzNTZhMjNhNWZkZmIx
MGFmZWNhMmNjOTJhNzI3OTQ1ODEwMmUuLjQzN2I3NjRmNDA3YWRlYzBlYjI4Y2RkZjVlZmRhNmNh
NGFmNjkwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtMjI3LDcgKzIyNyw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBkcmF3UGF0aFNoYWRvdyhHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBjb25zdCBGCiAgICAgICAgIHNvbGlkRmlndXJlRXh0ZW50cy51bml0ZShmaWxs
RXh0ZW50cyk7CiAgICAgfQogCi0gICAgc2hhZG93LmRyYXdTaGFkb3dMYXllcihTdGF0ZTo6Z2V0
Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4
dCksIHNvbGlkRmlndXJlRXh0ZW50cywKKyAgICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRl
OjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0LmNyKCkpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0
Zm9ybUNvbnRleHQpLCBzb2xpZEZpZ3VyZUV4dGVudHMsCiAgICAgICAgIFtjYWlyb0NvbnRleHQs
IGRyYXdpbmdTdHlsZSwgJnBhdGgsICZmaWxsU291cmNlLCAmc3Ryb2tlU291cmNlXShHcmFwaGlj
c0NvbnRleHQmIHNoYWRvd0NvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNhaXJvX3Qq
IGNhaXJvU2hhZG93Q29udGV4dCA9IHNoYWRvd0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNy
KCk7CkBAIC0zNDEsNyArMzQxLDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBTaGFkb3cKICAgICBjYWly
b19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKHNjYWxlZEZvbnQsIGdseXBocy5kYXRhKCksIGds
eXBocy5zaXplKCksICZleHRlbnRzKTsKICAgICBGbG9hdFJlY3QgZm9udEV4dGVudHNSZWN0KHBv
aW50LngoKSArIGV4dGVudHMueF9iZWFyaW5nLCBwb2ludC55KCkgKyBleHRlbnRzLnlfYmVhcmlu
ZywgZXh0ZW50cy53aWR0aCwgZXh0ZW50cy5oZWlnaHQpOwogCi0gICAgc2hhZG93LmRyYXdTaGFk
b3dMYXllcihTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91
bmRzKHBsYXRmb3JtQ29udGV4dCksIGZvbnRFeHRlbnRzUmVjdCwKKyAgICBzaGFkb3cuZHJhd1No
YWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0LmNyKCkpLCBTdGF0ZTo6Z2V0
Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBmb250RXh0ZW50c1JlY3QsCiAgICAgICAgIFtz
Y2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCAmZ2x5cGhzLCBmb250U21vb3RoaW5nTW9k
ZV0oR3JhcGhpY3NDb250ZXh0JiBzaGFkb3dDb250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAg
ICBkcmF3R2x5cGhzVG9Db250ZXh0KHNoYWRvd0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNy
KCksIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywgZm9udFNtb290aGlu
Z01vZGUpOwpAQCAtMzY3LDcgKzM2Nyw3IEBAIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0Fu
ZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0CiAgICAg
aWYgKHByaW50aW5nKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXpl
KHdpZHRoLCB0aGlja25lc3MpKTsKIAotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBD
YWlybzo6U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpOworICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm0gPSBDYWlybzo6U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSk7
CiAgICAgLy8gSnVzdCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFu
ZCB5IHNjYWxlcyBhcmUgZXF1YWwuCiAgICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8g
c3RkOjpoeXBvdCh0cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7
CiAgICAgaWYgKHNjYWxlIDwgMS4wKSB7CkBAIC00NDYsMTcgKzQ0NiwxNiBAQCBzdGF0aWMgVmVj
dG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNh
bExpbmUsIGZsb2F0CiAKIG5hbWVzcGFjZSBTdGF0ZSB7CiAKLXZvaWQgc2V0U3Ryb2tlVGhpY2tu
ZXNzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcykKK3ZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGNhaXJvX3QqIGNyIHBsYXRmb3JtQ29u
dGV4dCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQogewotICAgIGNhaXJvX3NldF9saW5lX3dpZHRo
KHBsYXRmb3JtQ29udGV4dC5jcigpLCBzdHJva2VUaGlja25lc3MpOworICAgIGNhaXJvX3NldF9s
aW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIHNldFN0cm9rZVN0eWxl
KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiBjciwgU3Ryb2tlU3R5bGUgc3Ry
b2tlU3R5bGUpCiB7CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkYXNoUGF0dGVybltdID0geyA1
LjAsIDUuMCB9OwogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG90UGF0dGVybltdID0geyAxLjAs
IDEuMCB9OwogCi0gICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKICAgICBz
d2l0Y2ggKHN0cm9rZVN0eWxlKSB7CiAgICAgY2FzZSBOb1N0cm9rZToKICAgICAgICAgLy8gRklY
TUU6IGlzIGl0IHRoZSByaWdodCB3YXkgdG8gZW11bGF0ZSBOb1N0cm9rZT8KQEAgLTQ3NywyOSAr
NDc2LDI5IEBAIHZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRm
b3JtQ29udGV4dCwgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5CiAgICAgfQogfQogCi12b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUp
Cit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiBjciwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGNhaXJv
X3NldF9vcGVyYXRvcihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgdG9DYWlyb09wZXJhdG9yKGNvbXBv
c2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCB0
b0NhaXJvT3BlcmF0b3IoY29tcG9zaXRlT3BlcmF0aW9uLCBibGVuZE1vZGUpKTsKIH0KIAotdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgYm9vbCBlbmFibGUpCit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190KiBjciwgYm9v
bCBlbmFibGUpCiB7CiAgICAgLy8gV2hlbiB0cnVlLCB1c2UgdGhlIGRlZmF1bHQgQ2Fpcm8gYmFj
a2VuZCBhbnRpYWxpYXMgbW9kZSAodXN1YWxseSB0aGlzCiAgICAgLy8gZW5hYmxlcyBzdGFuZGFy
ZCAnZ3JheXNjYWxlJyBhbnRpYWxpYXNpbmcpOyBmYWxzZSB0byBleHBsaWNpdGx5IGRpc2FibGUK
ICAgICAvLyBhbnRpYWxpYXNpbmcuCi0gICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhwbGF0Zm9ybUNv
bnRleHQuY3IoKSwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJ
QUxJQVNfTk9ORSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhjciwgZW5hYmxlID8gQ0FJUk9f
QU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CiB9CiAKLXZvaWQgc2V0
Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBzZXRDVE0oY2Fpcm9fdCogY3IsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGNvbnN0IGNhaXJvX21hdHJpeF90IG1hdHJp
eCA9IHRvQ2Fpcm9NYXRyaXgodHJhbnNmb3JtKTsKLSAgICBjYWlyb19zZXRfbWF0cml4KHBsYXRm
b3JtQ29udGV4dC5jcigpLCAmbWF0cml4KTsKKyAgICBjYWlyb19zZXRfbWF0cml4KGNyLCAmbWF0
cml4KTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHRDYWlybyYg
cGxhdGZvcm1Db250ZXh0KQorQWZmaW5lVHJhbnNmb3JtIGdldENUTShjYWlyb190KiBjcikKIHsK
ICAgICBjYWlyb19tYXRyaXhfdCBtOwotICAgIGNhaXJvX2dldF9tYXRyaXgocGxhdGZvcm1Db250
ZXh0LmNyKCksICZtKTsKKyAgICBjYWlyb19nZXRfbWF0cml4KGNyLCAmbSk7CiAgICAgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybShtLnh4LCBtLnl4LCBtLnh5LCBtLnl5LCBtLngwLCBtLnkwKTsKIH0K
IApAQCAtNTU2LDQ1ICs1NTUsNDUgQEAgYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dChHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQogfSAvLyBuYW1lc3BhY2UgU3RhdGUKIAog
RmlsbFNvdXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUp
Ci0gICAgOiBnbG9iYWxBbHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGZpbGxSdWxlKHN0YXRlLmZp
bGxSdWxlKQorICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEoKSkKKyAgICAsIGZpbGxSdWxl
KHN0YXRlLmZpbGxSdWxlKCkpCiB7Ci0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAg
ICAgIHBhdHRlcm4ub2JqZWN0ID0gYWRvcHRSZWYoc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBs
YXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOworICAgIGlmIChhdXRvIGZpbGxQYXR0
ZXJuID0gc3RhdGUuZmlsbEJydXNoKCkucGF0dGVybigpKSB7CisgICAgICAgIHBhdHRlcm4ub2Jq
ZWN0ID0gYWRvcHRSZWYoZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihBZmZpbmVU
cmFuc2Zvcm0oKSkpOwogCi0gICAgICAgIGF1dG8mIHBhdHRlcm5JbWFnZSA9IHN0YXRlLmZpbGxQ
YXR0ZXJuLT50aWxlSW1hZ2UoKTsKKyAgICAgICAgYXV0byYgcGF0dGVybkltYWdlID0gZmlsbFBh
dHRlcm4tPnRpbGVJbWFnZSgpOwogICAgICAgICBwYXR0ZXJuLnNpemUgPSBwYXR0ZXJuSW1hZ2Uu
c2l6ZSgpOwotICAgICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9IHN0YXRlLmZpbGxQYXR0ZXJuLT5w
YXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKTsKLSAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gc3RhdGUu
ZmlsbFBhdHRlcm4tPnJlcGVhdFgoKTsKLSAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gc3RhdGUu
ZmlsbFBhdHRlcm4tPnJlcGVhdFkoKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFkaWVu
dCkgewotICAgICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQ
YXR0ZXJuKDEsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgaWYg
KHN0YXRlLmFscGhhICE9IDEpCi0gICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0g
c3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhLCBzdGF0ZS5maWxs
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIHBhdHRlcm4udHJhbnNmb3JtID0gZmls
bFBhdHRlcm4tPnBhdHRlcm5TcGFjZVRyYW5zZm9ybSgpOworICAgICAgICBwYXR0ZXJuLnJlcGVh
dFggPSBmaWxsUGF0dGVybi0+cmVwZWF0WCgpOworICAgICAgICBwYXR0ZXJuLnJlcGVhdFkgPSBm
aWxsUGF0dGVybi0+cmVwZWF0WSgpOworICAgIH0gZWxzZSBpZiAoYXV0byBmaWxsR3JhZGllbnQg
PSBzdGF0ZS5maWxsQnJ1c2goKS5ncmFkaWVudCgpKSB7CisgICAgICAgIGdyYWRpZW50LmJhc2Ug
PSBmaWxsR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3RhdGUuZmlsbEJydXNoKCkuc3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgICAgIGlmIChzdGF0ZS5hbHBoYSgpICE9IDEpCisgICAgICAgICAg
ICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0
YXRlLmFscGhhKCksIHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCkpOwogICAgIH0g
ZWxzZQotICAgICAgICBjb2xvciA9IHN0YXRlLmZpbGxDb2xvcjsKKyAgICAgICAgY29sb3IgPSBz
dGF0ZS5maWxsQnJ1c2goKS5jb2xvcigpOwogfQogCiBTdHJva2VTb3VyY2U6OlN0cm9rZVNvdXJj
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCi0gICAgOiBnbG9iYWxBbHBoYShz
dGF0ZS5hbHBoYSkKLXsKLSAgICBpZiAoc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAgICAgICAgcGF0
dGVybiA9IGFkb3B0UmVmKHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihBZmZpbmVUcmFuc2Zvcm0oKSkpOwotICAgIGVsc2UgaWYgKHN0YXRlLnN0cm9rZUdyYWRpZW50
KSB7Ci0gICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRl
UGF0dGVybigxLCBzdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAg
aWYgKHN0YXRlLmFscGhhICE9IDEpCi0gICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVk
ID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oc3RhdGUuYWxwaGEsIHN0YXRl
LnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUu
YWxwaGEoKSkKK3sKKyAgICBpZiAoYXV0byBzdHJva2VQYXR0ZXJuID0gc3RhdGUuc3Ryb2tlQnJ1
c2goKS5wYXR0ZXJuKCkpCisgICAgICAgIHBhdHRlcm4gPSBhZG9wdFJlZihzdHJva2VQYXR0ZXJu
LT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpKTsKKyAgICBlbHNlIGlm
IChhdXRvIHN0cm9rZUdyYWRpZW50ID0gc3RhdGUuc3Ryb2tlQnJ1c2goKS5ncmFkaWVudCgpKSB7
CisgICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdHJva2VHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigx
LCBzdGF0ZS5zdHJva2VCcnVzaCgpLnNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICBpZiAoc3Rh
dGUuYWxwaGEoKSAhPSAxKQorICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0
cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhKCksIHN0YXRlLnN0cm9rZUJy
dXNoKCkuc3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbG9yID0gc3Rh
dGUuc3Ryb2tlQ29sb3I7CisgICAgICAgIGNvbG9yID0gc3RhdGUuc3Ryb2tlQnJ1c2goKS5jb2xv
cigpOwogfQogCiBTaGFkb3dTdGF0ZTo6U2hhZG93U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlKQotICAgIDogb2Zmc2V0KHN0YXRlLnNoYWRvd09mZnNldCkKLSAgICAsIGJs
dXIoc3RhdGUuc2hhZG93Qmx1cikKLSAgICAsIGNvbG9yKHN0YXRlLnNoYWRvd0NvbG9yKQotICAg
ICwgaWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLSAgICAs
IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKQotICAgICwgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3Io
c3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpCisgICAgOiBvZmZzZXQoc3RhdGUuZHJvcFNoYWRvdygp
Lm9mZnNldCkKKyAgICAsIGJsdXIoc3RhdGUuZHJvcFNoYWRvdygpLmJsdXJSYWRpdXMpCisgICAg
LCBjb2xvcihzdGF0ZS5kcm9wU2hhZG93KCkuY29sb3IpCisgICAgLCBpZ25vcmVUcmFuc2Zvcm1z
KHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpCisgICAgLCBnbG9iYWxBbHBoYShzdGF0
ZS5hbHBoYSgpKQorICAgICwgZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3Ioc3RhdGUuY29tcG9zaXRl
TW9kZSgpLm9wZXJhdGlvbikKIHsKIH0KIApAQCAtNjE1LDE0ICs2MTQsMTQgQEAgYm9vbCBTaGFk
b3dTdGF0ZTo6aXNSZXF1aXJlZChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0
KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBXZSBjYW4gYXZvaWQgU2hh
ZG93Qmx1ciwgc2luY2UgdGhlcmUgYXJlIG5vIHRyYW5zZm9ybWF0aW9ucyB0byBhcHBseSB0byB0
aGUgY2FudmFzLgotICAgIGlmIChTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCkuaXNJZGVu
dGl0eSgpKQorICAgIGlmIChTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigpKS5pc0lk
ZW50aXR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIE90aGVyd2lzZSwgbm8g
Y2hhbmNlIGF2b2lkaW5nIFNoYWRvd0JsdXIuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
c2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2Fw
IGxpbmVDYXApCit2b2lkIHNldExpbmVDYXAoY2Fpcm9fdCogY3IsIExpbmVDYXAgbGluZUNhcCkK
IHsKICAgICBjYWlyb19saW5lX2NhcF90IGNhaXJvQ2FwIHsgfTsKICAgICBzd2l0Y2ggKGxpbmVD
YXApIHsKQEAgLTYzNiwxOCArNjM1LDE4IEBAIHZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRl
eHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lQ2FwIGxpbmVDYXApCiAgICAgICAgIGNhaXJv
Q2FwID0gQ0FJUk9fTElORV9DQVBfU1FVQVJFOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAg
Y2Fpcm9fc2V0X2xpbmVfY2FwKHBsYXRmb3JtQ29udGV4dC5jcigpLCBjYWlyb0NhcCk7CisgICAg
Y2Fpcm9fc2V0X2xpbmVfY2FwKGNyLCBjYWlyb0NhcCk7CiB9CiAKLXZvaWQgc2V0TGluZURhc2go
R3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRGFzaEFycmF5JiBk
YXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIHNldExpbmVEYXNoKGNhaXJvX3QqIGNyLCBj
b25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsKICAgICBpZiAoc3Rk
OjphbGxfb2YoZGFzaGVzLmJlZ2luKCksIGRhc2hlcy5lbmQoKSwgW10oYXV0byYgZGFzaCkgeyBy
ZXR1cm4gIWRhc2g7IH0pKQotICAgICAgICBjYWlyb19zZXRfZGFzaChwbGF0Zm9ybUNvbnRleHQu
Y3IoKSwgMCwgMCwgMCk7CisgICAgICAgIGNhaXJvX3NldF9kYXNoKGNyLCAwLCAwLCAwKTsKICAg
ICBlbHNlCi0gICAgICAgIGNhaXJvX3NldF9kYXNoKHBsYXRmb3JtQ29udGV4dC5jcigpLCBkYXNo
ZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKKyAgICAgICAgY2Fpcm9fc2V0
X2Rhc2goY3IsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCksIGRhc2hPZmZzZXQpOwogfQog
Ci12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQs
IExpbmVKb2luIGxpbmVKb2luKQordm9pZCBzZXRMaW5lSm9pbihjYWlyb190KiBjciwgTGluZUpv
aW4gbGluZUpvaW4pCiB7CiAgICAgY2Fpcm9fbGluZV9qb2luX3QgY2Fpcm9Kb2luIHsgfTsKICAg
ICBzd2l0Y2ggKGxpbmVKb2luKSB7CkBAIC02NjEsMTIgKzY2MCwxMiBAQCB2b2lkIHNldExpbmVK
b2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIExpbmVKb2luIGxpbmVK
b2luKQogICAgICAgICBjYWlyb0pvaW4gPSBDQUlST19MSU5FX0pPSU5fQkVWRUw7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBjYWlyb19zZXRfbGluZV9qb2luKHBsYXRmb3JtQ29udGV4dC5j
cigpLCBjYWlyb0pvaW4pOworICAgIGNhaXJvX3NldF9saW5lX2pvaW4oY3IsIGNhaXJvSm9pbik7
CiB9CiAKLXZvaWQgc2V0TWl0ZXJMaW1pdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1D
b250ZXh0LCBmbG9hdCBtaXRlckxpbWl0KQordm9pZCBzZXRNaXRlckxpbWl0KGNhaXJvX3QqIGNy
LCBmbG9hdCBtaXRlckxpbWl0KQogewotICAgIGNhaXJvX3NldF9taXRlcl9saW1pdChwbGF0Zm9y
bUNvbnRleHQuY3IoKSwgbWl0ZXJMaW1pdCk7CisgICAgY2Fpcm9fc2V0X21pdGVyX2xpbWl0KGNy
LCBtaXRlckxpbWl0KTsKIH0KIAogdm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYg
cGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZpbGxTb3VyY2Um
IGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKQEAgLTY4Miw3ICs2
ODEsNyBAQCB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29ucwogewogICAgIGlmIChzaGFkb3dTdGF0ZS5p
c1Zpc2libGUoKSkgewogICAgICAgICBTaGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJs
dXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwgc2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5j
b2xvciwgc2hhZG93U3RhdGUuaWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5kcmF3
UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlw
Qm91bmRzKHBsYXRmb3JtQ29udGV4dCksIEZsb2F0Um91bmRlZFJlY3QocmVjdCksCisgICAgICAg
IHNoYWRvdy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigp
KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgRmxvYXRSb3VuZGVkUmVj
dChyZWN0KSwKICAgICAgICAgICAgIFsmcGxhdGZvcm1Db250ZXh0LCAmc2hhZG93U3RhdGVdKElt
YWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29u
c3QgRmxvYXRTaXplJiBsYXllclNpemUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIGxheWVySW1hZ2UsIGxheWVyT3JpZ2lu
LCBsYXllclNpemUsIHNoYWRvd1N0YXRlKTsKQEAgLTcxMyw3ICs3MTIsNyBAQCB2b2lkIGZpbGxS
b3VuZGVkUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZQogewogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAg
ICAgICBTaGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJs
dXIgfSwgc2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUu
aWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6
Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29u
dGV4dCksIHJlY3QsCisgICAgICAgIHNoYWRvdy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RN
KHBsYXRmb3JtQ29udGV4dC5jcigpKSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250
ZXh0KSwgcmVjdCwKICAgICAgICAgICAgIFsmcGxhdGZvcm1Db250ZXh0LCAmc2hhZG93U3RhdGVd
KEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwg
Y29uc3QgRmxvYXRTaXplJiBsYXllclNpemUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIGxheWVySW1hZ2UsIGxheWVyT3Jp
Z2luLCBsYXllclNpemUsIHNoYWRvd1N0YXRlKTsKQEAgLTc0Niw3ICs3NDUsNyBAQCB2b2lkIGZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIGNvbnN0IEZsb2F0UgogCiAgICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7CiAg
ICAgICAgIFNoYWRvd0JsdXIgc2hhZG93KHsgc2hhZG93U3RhdGUuYmx1ciwgc2hhZG93U3RhdGUu
Ymx1ciB9LCBzaGFkb3dTdGF0ZS5vZmZzZXQsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0
ZS5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICAgICAgc2hhZG93LmRyYXdJbnNldFNoYWRvdyhTdGF0
ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3Jt
Q29udGV4dCksIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwKKyAgICAgICAgc2hhZG93LmRyYXdJbnNl
dFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dC5jcigpKSwgU3RhdGU6OmdldENs
aXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LAogICAgICAg
ICAgICAgWyZwbGF0Zm9ybUNvbnRleHQsICZzaGFkb3dTdGF0ZV0oSW1hZ2VCdWZmZXImIGxheWVy
SW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNpemUmIGxh
eWVyU2l6ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBmaWxsU2hhZG93QnVmZmVy
KHBsYXRmb3JtQ29udGV4dCwgbGF5ZXJJbWFnZSwgbGF5ZXJPcmlnaW4sIGxheWVyU2l6ZSwgc2hh
ZG93U3RhdGUpOwpAQCAtODYzLDkgKzg2Miw5IEBAIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY2Fpcm9fc3VyZmFjZV90KiBzCiAK
ICAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KICAgICBpZiAob3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpID09IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyICYmIG9w
dGlvbnMuYmxlbmRNb2RlKCkgPT0gQmxlbmRNb2RlOjpOb3JtYWwgJiYgIWNhaXJvU3VyZmFjZUhh
c0FscGhhKHN1cmZhY2UpKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihwbGF0Zm9ybUNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5LCBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBs
YXRmb3JtQ29udGV4dC5jcigpLCBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSwgQmxlbmRNb2RlOjpO
b3JtYWwpOwogICAgIGVsc2UKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVy
YXRpb24ocGxhdGZvcm1Db250ZXh0LCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlv
bnMuYmxlbmRNb2RlKCkpOworICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBv
cHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIEZsb2F0UmVjdCBkc3QgPSBkZXN0UmVjdDsKICAg
ICBpZiAob3B0aW9ucy5vcmllbnRhdGlvbigpICE9IEltYWdlT3JpZW50YXRpb246Ok5vbmUpIHsK
QEAgLTk2NCw3ICs5NjMsNyBAQCB2b2lkIGRyYXdTdXJmYWNlKEdyYXBoaWNzQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZQogCiAgICAgU2hhZG93
Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFkb3dTdGF0ZS5ibHVyIH0sIHNoYWRv
d1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLmlnbm9yZVRyYW5z
Zm9ybXMpOwogICAgIGlmIChzaGFkb3cudHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7
Ci0gICAgICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNv
bnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBkZXN0UmVjdCwK
KyAgICAgICAgc2hhZG93LmRyYXdTaGFkb3dMYXllcihTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29u
dGV4dC5jcigpKSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZGVzdFJl
Y3QsCiAgICAgICAgICAgICBbJnBhdHRlcm4sICZkZXN0UmVjdF0oR3JhcGhpY3NDb250ZXh0JiBz
aGFkb3dDb250ZXh0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGRyYXdQYXR0ZXJu
VG9DYWlyb0NvbnRleHQoc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcGF0
dGVybi5nZXQoKSwgZGVzdFJlY3QsIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAppbmRleCA1NDk4NTYzY2U0
OWMxNWUzNWQwODI1OWMyZDI2ZGM3YjE3Y2VhODg1Li5lNWEzNDI0YWU2MTE3MDdhYzk3ZDBkMTll
N2NjMzA2MWFiNzA2MWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaApAQCAtNDYsMjIgKzQ2LDIxIEBAIGNs
YXNzIENvbG9yOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNs
YXNzIEZsb2F0U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlOwogY2xhc3MgUGF0aDsK
IAotc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlOwotCiBuYW1lc3BhY2UgQ2Fpcm8gewogCiBu
YW1lc3BhY2UgU3RhdGUgewogCi12b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhHcmFwaGljc0NvbnRl
eHRDYWlybyYsIGZsb2F0KTsKLXZvaWQgc2V0U3Ryb2tlU3R5bGUoR3JhcGhpY3NDb250ZXh0Q2Fp
cm8mLCBTdHJva2VTdHlsZSk7Cit2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhjYWlyb190KiwgZmxv
YXQpOwordm9pZCBzZXRTdHJva2VTdHlsZShjYWlyb190KiwgU3Ryb2tlU3R5bGUpOwogCi12b2lk
IHNldENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHRDYWlybyYsIENvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUpOwotdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mLCBib29sKTsKK3ZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNhaXJvX3QqLCBD
b21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKK3ZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGNh
aXJvX3QqLCBib29sKTsKIAotdm9pZCBzZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKTsKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mKTsKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KTsKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCopOwogCiBJbnRSZWN0IGdldENsaXBC
b3VuZHMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mKTsKIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4
ZWxzKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0Jik7CkBAIC0xMjUsMTAg
KzEyNCwxMCBAQCBzdHJ1Y3QgU2hhZG93U3RhdGUgewogICAgIENvbXBvc2l0ZU9wZXJhdG9yIGds
b2JhbENvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsK
IH07CiAKLXZvaWQgc2V0TGluZUNhcChHcmFwaGljc0NvbnRleHRDYWlybyYsIExpbmVDYXApOwot
dm9pZCBzZXRMaW5lRGFzaChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IERhc2hBcnJheSYs
IGZsb2F0KTsKLXZvaWQgc2V0TGluZUpvaW4oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5lSm9p
bik7Ci12b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBmbG9hdCk7Cit2
b2lkIHNldExpbmVDYXAoY2Fpcm9fdCosIExpbmVDYXApOwordm9pZCBzZXRMaW5lRGFzaChjYWly
b190KiwgY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpOwordm9pZCBzZXRMaW5lSm9pbihjYWlyb190
KiwgTGluZUpvaW4pOwordm9pZCBzZXRNaXRlckxpbWl0KGNhaXJvX3QqLCBmbG9hdCk7CiAKIHZv
aWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKIHZvaWQgZmlsbFJlY3QoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IFNo
YWRvd1N0YXRlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vRm9udENhaXJvLmNwcAppbmRleCBhN2FmMGNlYjUyNDkwNDA0MWVlMTJkNTFmODljNmRm
MTZjYjM2MDM3Li4zZDE5NzU3OWEyY2MyMjk5MzM4ODVhMWExNTk1YzYzOTZjYTg2ZGZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
by5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAgICBhdXRv
JiBzdGF0ZSA9IGNvbnRleHQuc3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0dseXBocygqY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKSwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ry
b2tlU291cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9p
bnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0
LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywg
c3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKKyAgICAgICAgc3RhdGUudGV4
dERyYXdpbmdNb2RlKCksIHN0YXRlLnN0cm9rZVRoaWNrbmVzcygpLCBzdGF0ZS5kcm9wU2hhZG93
KCkub2Zmc2V0LCBzdGF0ZS5kcm9wU2hhZG93KCkuY29sb3IsCiAgICAgICAgIGZvbnRTbW9vdGhp
bmdNb2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAppbmRleCA5MDA5NmFjNjQ1MjI0ZGJmZGM2MGJm
YTZjYWNhZDAzMDc2Y2IyOTdkLi5iZTJjMjk1Y2E1MDdkOWI1NjNmODVkNWJjYjg3MDk3MmYwZGFk
OGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFkaWVudENhaXJvLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIFJlZlB0cjxjYWlyb19w
YXR0ZXJuX3Q+IEdyYWRpZW50OjpjcmVhdGVQYXR0ZXJuKGZsb2F0IGdsb2JhbEFscGhhLCBjb25z
dCBBZmZpbmVUCiAKIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXV0byBwYXR0ZXJuID0gY3JlYXRlUGF0
dGVybigxLjAsIGNvbnRleHQuc3RhdGUoKS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Cisg
ICAgYXV0byBwYXR0ZXJuID0gY3JlYXRlUGF0dGVybigxLjAsIGNvbnRleHQuZmlsbFNwYWNlVHJh
bnNmb3JtKCkpOwogICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYzMyMzA0NDUzNTFiMDNmMmFhODczNmFlZTJiY2U3
OGJjNDM2MWY0OS4uODRkMDM5ZGRlNjU4ZDc3ZGI4YTI4NDU1YTg5YjQzYTcxMWRjM2QyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgpAQCAtNjgsNyArNjgsOCBAQCBwdWJsaWM6CiB9Owog
CiBHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUmVmUHRyPGNhaXJv
X3Q+JiYgY29udGV4dCkKLSAgICA6IG1fY3IoV1RGTW92ZShjb250ZXh0KSkKKyAgICA6IEdyYXBo
aWNzQ29udGV4dChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpKQorICAgICwgbV9jcihXVEZNb3Zl
KGNvbnRleHQpKQogewogICAgIG1fY2Fpcm9TdGF0ZVN0YWNrLmFwcGVuZChDYWlyb1N0YXRlKCkp
OwogICAgIG1fY2Fpcm9TdGF0ZSA9ICZtX2NhaXJvU3RhdGVTdGFjay5sYXN0KCk7CkBAIC04Niwx
MCArODcsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRleHQo
KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25z
dAorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSgpIGNv
bnN0CiB7Ci0gICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTY2FsZSk7Ci0gICAgcmV0dXJuIENhaXJv
OjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIENhaXJvOjpT
dGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKSA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAog
R3JhcGhpY3NDb250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdApAQCAtMTM0LDUzICsxMzQsMTEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnJlc3RvcmUoKQogICAgIGNhaXJvX3Jlc3RvcmUobV9jci5nZXQoKSk7CiB9CiAKLS8vIERy
YXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFwcGx5U3RhdGVDaGFu
Z2VzKCkKIHsKLSAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KCp0aGlzLCByZWN0LCBib3JkZXJU
aGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9r
ZUNvbG9yKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKGF1dG8gY2hhbmdlIDogc3RhdGUoKS5jaGFuZ2VzKCkpIHsKKyAgICAgICAgc3dp
dGNoIChjaGFuZ2UpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpDVE06CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENUTShtX2NyLmdldCgpLCBzdGF0
ZSgpLmdldENUTSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ2Fp
cm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9jci5nZXQoKSwgc3RkOjptYXgoc3RhdGUo
KS5zdHJva2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlOgorICAgICAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX2NyLmdldCgpLCBzdGF0ZSgpLnN0
cm9rZVN0eWxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAgICAgICAgICAgQ2Fpcm86OnNldExp
bmVDYXAobV9jci5nZXQoKSwgc3RhdGUoKS5saW5lQ2FwKCkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjoK
KyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihtX2NyLmdldCgpLCBzdGF0ZSgpLmxpbmVK
b2luKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lRGFz
aChtX2NyLmdldCgpLCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0ZSgpLmxpbmVEYXNo
KCkub2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRN
aXRlckxpbWl0KG1fY3IuZ2V0KCksIHN0YXRlKCkubWl0ZXJMaW1pdCgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29t
cG9zaXRlTW9kZToKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG1fY3IuZ2V0KCksIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbiwgc3RhdGUo
KS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdzoKKyAgICAg
ICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CisgICAgICAgICAg
ICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVk
IHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAgICAgLy8gV2UgZmxp
cCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4
aXMKKyAgICAgICAgICAgICAgICBhdXRvIGRyb3BTaGFkb3cgPSB0aGlzLT5kcm9wU2hhZG93KCk7
CisgICAgICAgICAgICAgICAgZHJvcFNoYWRvdy5vZmZzZXQgPSB7IGRyb3BTaGFkb3cub2Zmc2V0
LndpZHRoKCksIC1kcm9wU2hhZG93Lm9mZnNldC5oZWlnaHQoKSB9OworICAgICAgICAgICAgICAg
IHNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3Vs
ZEFudGlhbGlhczoKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFz
KG1fY3IuZ2V0KCksIHN0YXRlKCkuc2hvdWxkQW50aWFsaWFzKCkpOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkK
IHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0
Zm9ybUltYWdlKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RS
ZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
fSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIEdyYXBoaWNz
Q29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBDYWlybzo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7CiB9CiAKLS8vIFRoaXMgaXMgb25s
eSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0
cm9rZSkKLSAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKKyAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMpOworfQog
Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZSgq
dGhpcywgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xv
ciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIENhaXJvOjpjbGlwKCp0aGlzLCByZWN0
KTsKIH0KIAotLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBj
aXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCp0aGlzLCBy
ZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xv
ciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRo
KHBhdGgsIGNsaXBSdWxlKTsKKyAgICBDYWlybzo6Y2xpcFBhdGgoKnRoaXMsIHBhdGgsIGNsaXBS
dWxlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpG
aWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgQ2Fpcm86
OmNsaXBPdXQoKnRoaXMsIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpj
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KQogewotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywgbmF0
aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOworfQogCi0gICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VQYXRoKCp0aGlzLCBw
YXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIENhaXJvOjpjbGVhclJlY3QoKnRoaXMsIHJlY3QpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBA
IC0xOTYsOCArMjUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhdXRvIHBh
dHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pOworICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4o
MS4wLCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgaWYgKCFwYXR0ZXJuKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTIwNiwzNSArMjYyLDY0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogICAg
IHJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKKyAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KCp0aGlz
LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKKyAgICBD
YWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKK3sKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIENh
aXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCp0aGlzLCBjb21wb3NpdGVPcGVyYXRv
ciwgYmxlbmRNb2RlKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0
ZU9wZXJhdGlvbigqdGhpcywgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwor
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6ZmlsbFBhdGgoKnRo
aXMsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAgICBDYWlybzo6Y2xpcCgqdGhp
cywgcmVjdCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpz
dHJva2VSZWN0KCp0aGlzLCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7
Ci0gICAgQ2Fpcm86OmNsaXBQYXRoKCp0aGlzLCBwYXRoLCBjbGlwUnVsZSk7CisgICAgaWYgKHBh
dGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpTdHJv
a2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotSW50UmVj
dCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcygpIGNvbnN0CisvLyBEcmF3cyBhIGZp
bGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCiB7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcygqcGxhdGZv
cm1Db250ZXh0KCkpOworICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOworICAgIENhaXJvOjpk
cmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBmaWxsQ29sb3IoKSwgc3Ryb2tl
U3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpCisvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNo
b3VsZCBub3QgZHJhdyBzaGFkb3dzLgordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7
Ci0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCp0aGlz
LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7CisgICAgaWYg
KHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVybjsKKworICAgIENhaXJv
OjpkcmF3TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNv
bG9yKCksIHN0cm9rZVRoaWNrbmVzcygpLCBzaG91bGRBbnRpYWxpYXMoKSk7Cit9CisKKy8vIFRo
aXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGlu
IGxpc3RzLgordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQoreworICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqdGhpcywgcmVjdCwgZmls
bENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygp
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CkBAIC0yNjEsMTM4ICszNDYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgdwogI2VuZGlmCiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCi17Ci0g
ICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBDYWlybzo6ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUpOwotfQotCi1GbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQotewotICAgIFVOVVNFRF9QQVJB
TShyb3VuZGluZ01vZGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMoKnRoaXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp0cmFu
c2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDYWlybzo6dHJhbnNsYXRlKCp0aGlzLCB4
LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0
cm9rZVRoaWNrbmVzcygqdGhpcywgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAg
Q2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZSgqdGhpcywgc3RhdGUuc3Ryb2tlU3R5bGUpOwot
Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewot
ICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAg
IC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRo
IGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVp
Z2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAg
ICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAg
ICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRv
d09mZnNldC5oZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAg
Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHN0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRTaG91bGRBbnRpYWxpYXMoKnRoaXMsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6Y29uY2F0Q1RNKCp0aGlzLCB0cmFuc2Zvcm0p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0oKnRoaXMsIHRy
YW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoKnRoaXMsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwotICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigqdGhpcyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFyUmVjdCgqdGhpcywgcmVjdCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENh
aXJvOjpzdHJva2VSZWN0KCp0aGlzLCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3Vy
Y2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgQ2Fpcm86
OnNldExpbmVDYXAoKnRoaXMsIGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNl
dCkKLXsKLSAgICBDYWlybzo6c2V0TGluZURhc2goKnRoaXMsIGRhc2hlcywgZGFzaE9mZnNldCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxp
bmVKb2luKQotewotICAgIENhaXJvOjpzZXRMaW5lSm9pbigqdGhpcywgbGluZUpvaW4pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQot
ewotICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCp0aGlzLCBtaXRlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBDYWly
bzo6Y2xpcE91dCgqdGhpcywgcGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnJvdGF0ZShmbG9hdCByYWRpYW5zKQotewotICAgIENhaXJvOjpyb3RhdGUoKnRoaXMsIHJhZGlh
bnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNp
emUmIHNpemUpCi17Ci0gICAgQ2Fpcm86OnNjYWxlKCp0aGlzLCBzaXplKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgQ2Fpcm86OmZpbGxSb3VuZGVkUmVj
dCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWly
bzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnRoaXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwg
Q2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAg
ICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnRoaXMsIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1h
Z2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSgpIH0sIGFscGhhKCksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBu
YXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKQEAgLTQwNCwxMSArMzYwLDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25z
dCBGbG9hdFJlY3QKICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnRoaXMsIG5hdGl2ZUltYWdlLnBs
YXRmb3JtSW1hZ2UoKS5nZXQoKSwgbmF0aXZlSW1hZ2Uuc2l6ZSgpLCBkZXN0UmVjdCwgdGlsZVJl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAotUmVuZGVyaW5nTW9k
ZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgp
KSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZDsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7CiAgICAgaWYgKCFm
b250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKQEAgLTQzNCwxMiArMzg1LDMxIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCoKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fp
cm86OmRyYXdHbHlwaHMoKnRoaXMsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0
cm9rZVNvdXJjZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBv
aW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNl
dCwKLSAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3Ms
IHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAgIHRleHREcmF3
aW5nTW9kZSgpLCBzdHJva2VUaGlja25lc3MoKSwgc2hhZG93T2Zmc2V0KCksIHNoYWRvd0NvbG9y
KCksCiAgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQoreworICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnRoaXMsIHBvaW50
LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0cm9rZUNv
bG9yKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCit7CisgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKnRoaXMsIHJl
Y3QsIHN0eWxlKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5n
TW9kZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocm91bmRpbmdNb2RlKTsKKyAgICByZXR1cm4gQ2Fp
cm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCp0aGlzLCByZWN0KTsKK30KKwogY2Fpcm9f
dCogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNyKCkgY29uc3QKIHsKKyAgICBjb25zdF9jYXN0PEdy
YXBoaWNzQ29udGV4dENhaXJvJj4oKnRoaXMpLmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmV0
dXJuIG1fY3IuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCmluZGV4IDU2NDYx
YzE1OWE1ODNjODljNjFlOGYwMmU0ZTBiZWU3YjA1OTMyZWYuLjZmY2RlM2E4YmIxZGY5ZjU1YmY2
OWJiYmY0ZmM2NDY1Zjg1ZTlhYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KICAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAy
MDIyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUwLDYxICs1MSw0OSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICAgICBHcmFwaGljc0NvbnRleHRDYWlybyogcGxh
dGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFs
OworCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7Cisg
ICAgdm9pZCBhcHBseVN0YXRlQ2hhbmdlcygpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRMaW5lQ2Fw
KExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5Jiwg
ZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAg
IHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisgICAgdm9pZCBiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkg
ZmluYWw7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9p
ZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOworICAgIHZvaWQgY2xpcE91
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IGZpbmFsOworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7CiAgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2
b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
KTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworCiAgICAgdm9pZCBm
aWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0g
ICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9p
ZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZp
bmFsOwogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7
CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
IGZpbmFsOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkg
ZmluYWw7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKKwogICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0
IENvbG9yJikgZmluYWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlc3Rv
cmUoKSBmaW5hbDsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWw7Ci0g
ICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFsOwotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6
c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQot
ICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOwogCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNs
aXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYs
IFdpbmRSdWxlKSBmaW5hbDsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7Ci0gICAgCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKSBmaW5hbDsKIAogICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IDk2Yzc2MTM1NDFiZGM2NThhNzg3
YWIwM2U3NzgxODgzNGQzMTg1YzQuLmM4ZTU2NzgyNDIzMTVhYzM5MzUxZTAyMDhmZjhhMGVkZWUx
M2Q5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTY1LDcgKzY1
LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlv
bkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CiAKICAgICBpZiAoYXV0byBpbWFn
ZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNr
aW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIGRyYXdQbGF0Zm9ybUlt
YWdlKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UtPnBsYXRmb3JtSW1hZ2Uo
KS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0
U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0
ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0
YXRlKSk7CisgICAgICAgIGRyYXdQbGF0Zm9ybUltYWdlKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKSwgaW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSgpIH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhKCksIFdlYkNvcmU6OkNhaXJv
OjpTaGFkb3dTdGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOwogfQogCiB2b2lkIEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTg1NmEwNDM5M2Zk
MjRlOTYyOGY2ZmU5MzQ2OWVlYmVhNGFiYjU5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaApAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBDR0NvbnRleHRTdGF0ZVNhdmVyIHsKK3B1YmxpYzoKKyAgICBDR0NvbnRleHRTdGF0
ZVNhdmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0b3JlID0gdHJ1ZSkK
KyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3NhdmVBbmRSZXN0b3Jl
KHNhdmVBbmRSZXN0b3JlKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisg
ICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7CisgICAgfQorICAgIAor
ICAgIH5DR0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3NhdmVBbmRS
ZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNhdmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3Nh
dmVBbmRSZXN0b3JlKTsKKyAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShtX2NvbnRleHQpOwor
ICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3Rv
cmUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkaWRTYXZlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dDsKKyAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKaW5kZXggMzI0NWM2MDA0MzE1NTJkNTEzYjc0ZWViYzA5ZjMxOGVlYzNkZDcy
YS4uN2VmYzcyYzllN2QyOGFlMjZkMDE2ZTA2Y2I3MTg4YmE2ODA4YzcyZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAy
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4NSwx
NCArMTg1LDEzIEBAIHN0YXRpYyB2b2lkIHNldENHQmxlbmRNb2RlKENHQ29udGV4dFJlZiBjb250
ZXh0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlCiB9CiAKIEdyYXBoaWNzQ29udGV4
dENHOjpHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYgY2dDb250ZXh0KQorICAgIDogR3Jh
cGhpY3NDb250ZXh0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjZ0NvbnRleHQpLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6aW5pdGlhbENoYW5nZUZsYWdzLCBDR0NvbnRleHRHZXRDVE0oY2dD
b250ZXh0KSkKIHsKICAgICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpOwot
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0
ZS4KLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSB9KTsKLSAgICBtX3N0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb3JlSW50ZXJwb2xhdGlvblF1YWxpdHko
Q0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAg
ICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvcmVJbnRlcnBvbGF0aW9uUXVhbGl0eShD
R0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgp
KSkpOwogfQogCiBHcmFwaGljc0NvbnRleHRDRzo6fkdyYXBoaWNzQ29udGV4dENHKCkKQEAgLTIw
Niw2ICsyMDUsMTQgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6aGFzUGxhdGZvcm1Db250ZXh0
KCkgY29uc3QKIH0KIAogQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENHOjpwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdAoreworICAgIC8vIFNvbWUgY2FsbGVycyB0byB0aGlzIG1ldGhvZCB1c2Vz
IHRoZSBwbGF0Zm9ybSBjb250ZXh0IG91dHNpZGUgdGhlIHNjb3BlCisgICAgLy8gb2YgdGhpcyBj
bGFzcy4gQ29tbWl0IGFueSBjaGFuZ2VzIGJlZm9yZSByZXR1cm5pbmcgdGhlIHBsYXRmb3JtIGNv
bnRleHQuCisgICAgY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRDRyY+KCp0aGlzKS5hcHBseVN0
YXRlQ2hhbmdlcygpOworICAgIHJldHVybiBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpOworfQor
CitDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6OmludGVybmFsUGxhdGZvcm1Db250ZXh0
KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9kYXRhLT5tX2NnQ29udGV4dCk7CiAgICAgcmV0dXJu
IG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCk7CkBAIC0zMzgsNyArMzQ1LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwg
Y29uc3QgRmxvYXRTaXoKICNlbmRpZgogCiAgICAgYXV0byBvbGRDb21wb3NpdGVPcGVyYXRvciA9
IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwotICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRNb2Rl
T3BlcmF0aW9uKCk7CisgICAgYXV0byBvbGRCbGVuZE1vZGUgPSBibGVuZE1vZGUoKTsKICAgICBz
ZXRDR0JsZW5kTW9kZShjb250ZXh0LCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlv
bnMuYmxlbmRNb2RlKCkpOwogCiAgICAgLy8gTWFrZSB0aGUgb3JpZ2luIGJlIGF0IGFkanVzdGVk
RGVzdFJlY3QubG9jYXRpb24oKQpAQCAtMzk2LDcgKzQwMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgZGVzdFJlY3QpOwogCi0gICAgc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1v
ZGUoKSk7CisgICAgc2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3Io
KSwgb3B0aW9ucy5ibGVuZE1vZGUoKSB9KTsKIAogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShj
b250ZXh0LCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpKTsK
ICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CkBAIC01NTUsMTMgKzU2Miwx
MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7
Ci0gICAgaWYgKCFtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKCFzdHJva2VQYXR0ZXJu
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmlu
ZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCi0gICAgYXV0byBwbGF0
Zm9ybVBhdHRlcm4gPSBtX3N0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bih1c2VyVG9CYXNlQ1RNKTsKKyAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IHN0cm9rZVBhdHRl
cm4oKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOwogICAgIGlmICghcGxh
dGZvcm1QYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTU3NCwxMyArNTgxLDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGlmICghbV9zdGF0ZS5maWxs
UGF0dGVybikKKyAgICBpZiAoIWZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNlQ1RN
KGNnQ29udGV4dCkpOwogCi0gICAgYXV0byBwbGF0Zm9ybVBhdHRlcm4gPSBtX3N0YXRlLmZpbGxQ
YXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CisgICAgYXV0byBw
bGF0Zm9ybVBhdHRlcm4gPSBmaWxsUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNl
clRvQmFzZUNUTSk7CiAgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsK
IApAQCAtNTkxLDExICs1OTgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxs
UGF0dGVybigpCiAgICAgQ0dDb250ZXh0U2V0RmlsbFBhdHRlcm4oY2dDb250ZXh0LCBwbGF0Zm9y
bVBhdHRlcm4uZ2V0KCksICZwYXR0ZXJuQWxwaGEpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wg
Y2FsY3VsYXRlRHJhd2luZ01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBD
R1BhdGhEcmF3aW5nTW9kZSYgbW9kZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3
aW5nTW9kZShjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHUGF0aERyYXdpbmdNb2Rl
JiBtb2RlKQogewotICAgIGJvb2wgc2hvdWxkRmlsbCA9IHN0YXRlLmZpbGxQYXR0ZXJuIHx8IHN0
YXRlLmZpbGxDb2xvci5pc1Zpc2libGUoKTsKLSAgICBib29sIHNob3VsZFN0cm9rZSA9IHN0YXRl
LnN0cm9rZVBhdHRlcm4gfHwgKHN0YXRlLnN0cm9rZVN0eWxlICE9IE5vU3Ryb2tlICYmIHN0YXRl
LnN0cm9rZUNvbG9yLmlzVmlzaWJsZSgpKTsKLSAgICBib29sIHVzZUVPRmlsbCA9IHN0YXRlLmZp
bGxSdWxlID09IFdpbmRSdWxlOjpFdmVuT2RkOworICAgIGJvb2wgc2hvdWxkRmlsbCA9IGNvbnRl
eHQuZmlsbFBhdHRlcm4oKSB8fCBjb250ZXh0LmZpbGxDb2xvcigpLmlzVmlzaWJsZSgpOworICAg
IGJvb2wgc2hvdWxkU3Ryb2tlID0gY29udGV4dC5zdHJva2VQYXR0ZXJuKCkgfHwgKGNvbnRleHQu
c3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSAmJiBjb250ZXh0LnN0cm9rZUNvbG9yKCkuaXNWaXNp
YmxlKCkpOworICAgIGJvb2wgdXNlRU9GaWxsID0gY29udGV4dC5maWxsUnVsZSgpID09IFdpbmRS
dWxlOjpFdmVuT2RkOwogCiAgICAgaWYgKHNob3VsZEZpbGwpIHsKICAgICAgICAgaWYgKHNob3Vs
ZFN0cm9rZSkgewpAQCAtNjI0LDkgKzYzMSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAotICAgIGlmIChzdGF0ZS5maWxsR3JhZGllbnQg
fHwgc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkgfHwgc3Ry
b2tlR3JhZGllbnQoKSkgewogICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBvcHRpbWl6ZWQg
d2F5IHRvIGZpbGwgJiBzdHJva2UgYSBwYXRoIHVzaW5nIGdyYWRpZW50cwogICAgICAgICAvLyBG
SVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgogICAgICAgICBmaWxsUGF0aChwYXRoKTsKQEAg
LTYzNCwxMyArNjQwLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc3RhdGUuZmls
bFBhdHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5RmlsbFBhdHRl
cm4oKTsKLSAgICBpZiAoc3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVy
bigpKQogICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKIAogICAgIENHUGF0aERyYXdpbmdN
b2RlIGRyYXdpbmdNb2RlOwotICAgIGlmIChjYWxjdWxhdGVEcmF3aW5nTW9kZShzdGF0ZSwgZHJh
d2luZ01vZGUpKSB7CisgICAgaWYgKGNhbGN1bGF0ZURyYXdpbmdNb2RlKCp0aGlzLCBkcmF3aW5n
TW9kZSkpIHsKICNpZiBIQVZFKENHX0NPTlRFWFRfRFJBV19QQVRIX0RJUkVDVCkKICAgICAgICAg
Q0dDb250ZXh0RHJhd1BhdGhEaXJlY3QoY29udGV4dCwgZHJhd2luZ01vZGUsIHBhdGgucGxhdGZv
cm1QYXRoKCksIG51bGxwdHIpOwogI2Vsc2UKQEAgLTY1OCw3ICs2NjQsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogCiAgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLmZpbGxH
cmFkaWVudCkgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSkgewogICAgICAgICBpZiAoaGFzU2hh
ZG93KCkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdS
ZWN0KCk7CiAgICAgICAgICAgICBGbG9hdFNpemUgbGF5ZXJTaXplID0gZ2V0Q1RNKCkubWFwU2l6
ZShyZWN0LnNpemUoKSk7CkBAIC02NzAsMzMgKzY3NiwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgQ0dDb250ZXh0VHJh
bnNsYXRlQ1RNKGxheWVyQ29udGV4dCwgLXJlY3QueCgpLCAtcmVjdC55KCkpOwogICAgICAgICAg
ICAgQ0dDb250ZXh0QmVnaW5QYXRoKGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRl
eHRBZGRQYXRoKGxheWVyQ29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0gICAgICAgICAg
ICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNw
YWNlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRl
eHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgICAgICAgICAgaWYgKGZpbGxSdWxlKCkg
PT0gV2luZFJ1bGU6OkV2ZW5PZGQpCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGxh
eWVyQ29udGV4dCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0
Q2xpcChsYXllckNvbnRleHQpOwogCi0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+
cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChs
YXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRl
eHQsIHJlY3QsIGxheWVyLmdldCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENH
Q29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgo
Y29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRD
VE0oY29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwog
CiAgICAgICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAg
ICAgICAgICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKIAotICAgICAgICAgICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVu
dCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAg
ICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKICNpZiBIQVZFKENHX0NPTlRFWFRfRFJBV19QQVRI
X0RJUkVDVCkKICAgICBDR0NvbnRleHREcmF3UGF0aERpcmVjdChjb250ZXh0LCBmaWxsUnVsZSgp
ID09IFdpbmRSdWxlOjpFdmVuT2RkID8ga0NHUGF0aEVPRmlsbCA6IGtDR1BhdGhGaWxsLCBwYXRo
LnBsYXRmb3JtUGF0aCgpLCBudWxscHRyKTsKQEAgLTcxNyw3ICs3MjMsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAKICAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuc3Ry
b2tlR3JhZGllbnQpIHsKKyAgICBpZiAoc3Ryb2tlR3JhZGllbnQoKSkgewogICAgICAgICBpZiAo
aGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gcGF0aC5mYXN0Qm91
bmRpbmdSZWN0KCk7CiAgICAgICAgICAgICBmbG9hdCBsaW5lV2lkdGggPSBzdHJva2VUaGlja25l
c3MoKTsKQEAgLTc0Miw4ICs3NDgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGxheWVy
Q29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBs
YWNlUGF0aFdpdGhTdHJva2VkUGF0aChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250
ZXh0Q2xpcChsYXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxh
eWVyQ29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAg
ICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAg
ICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4
dCk7CiAKICAgICAgICAgICAgIGZsb2F0IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0LngoKSAt
IGxpbmVXaWR0aCk7CiAgICAgICAgICAgICBmbG9hdCBkZXN0aW5hdGlvblkgPSByb3VuZGYocmVj
dC55KCkgLSBsaW5lV2lkdGgpOwpAQCAtNzU0LDEzICs3NjAsMTMgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgQ0dDb250
ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAgICAgICAgICAgIENH
Q29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRleHQpOwogICAgICAgICAgICAg
Q0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShj
b250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAg
ICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dD
b250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAg
ICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgIGlm
IChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwogCiAjaWYg
VVNFKENHX0NPTlRFWFRfU1RST0tFX0xJTkVfU0VHTUVOVFNfV0hFTl9TVFJPS0lOR19QQVRIKQpA
QCAtNzg1LDcgKzc5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZp
bGxHcmFkaWVudCgpKSB7CiAgICAgICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFNp
emUgbGF5ZXJTaXplID0gZ2V0Q1RNKCkubWFwU2l6ZShyZWN0LnNpemUoKSk7CkBAIC03OTgsMjcg
KzgwNCwyNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRSZWN0KGxheWVyQ29udGV4dCwgcmVj
dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7CiAKLSAgICAgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50
KGxheWVyQ29udGV4dCk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250
ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+
cGFpbnQobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckluUmVj
dChjb250ZXh0LCByZWN0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHJlY3QpOwotICAgICAgICAgICAgQ0dD
b250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KCp0aGlzKTsKKyAg
ICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikK
KyAgICBpZiAoZmlsbFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogCiAg
ICAgYm9vbCBkcmF3T3duU2hhZG93ID0gY2FuVXNlU2hhZG93Qmx1cigpOwogICAgIENHQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAo
ZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAg
ICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVpl
cm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwg
Q0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1f
c3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBz
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3UmVj
dFNoYWRvdygqdGhpcywgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSk7CiAgICAgfQogCkBAIC04Mzcs
OSArODQzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93
KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNl
dFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7Cisg
ICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAw
LCAwKTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAg
ICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlz
LCBGbG9hdFJvdW5kZWRSZWN0KHJlY3QpKTsKICAgICB9CiAKQEAgLTg1Miw3ICs4NTgsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmls
bENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1w
bChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9y
KCk7CkBAIC04NjQsOSArODcwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAgIENHQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBp
ZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAg
ICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6
ZVplcm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4
dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93
KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygp
LCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3
UmVjdFNoYWRvdygqdGhpcywgcmVjdCk7CiAgICAgfQogCkBAIC04NzQsNyArODgwLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdAogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiBy
YWRpaSA9IHJlY3QucmFkaWkoKTsKICAgICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExl
ZnQoKS53aWR0aCgpID09IHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdo
dCgpLndpZHRoKCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9t
TGVmdCgpLndpZHRoKCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKICAgICBib29s
IGVxdWFsSGVpZ2h0cyA9IChyYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9t
TGVmdCgpLmhlaWdodCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50
b3BSaWdodCgpLmhlaWdodCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWku
Ym90dG9tUmlnaHQoKS5oZWlnaHQoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gbV9zdGF0
ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybjsKKyAgICBib29sIGhhc0N1c3Rv
bUZpbGwgPSBmaWxsR3JhZGllbnQoKSB8fCBmaWxsUGF0dGVybigpOwogICAgIGlmICghaGFzQ3Vz
dG9tRmlsbCAmJiBlcXVhbFdpZHRocyAmJiBlcXVhbEhlaWdodHMgJiYgcmFkaWkudG9wTGVmdCgp
LndpZHRoKCkgKiAyID09IHIud2lkdGgoKSAmJiByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKiAy
ID09IHIuaGVpZ2h0KCkpCiAgICAgICAgIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0KGNvbnRl
eHQsIHIpOwogICAgIGVsc2UgewpAQCAtOTEzLDkgKzkxOSw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdP
d25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2Zm
IENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9y
bUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBj
b250ZXh0U2hhZG93LmRyYXdJbnNldFNoYWRvdygqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0
KTsKICAgICB9CiAKQEAgLTkzMCw2ICs5MzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsbwog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiAgICAgbV9kYXRhLT5jbGlwKHJlY3QpOwogfQpA
QCAtOTQwLDMxICs5NDcsMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwg
Q0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQg
dGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRy
YW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUz
PgogICAgIC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRo
ZXIuCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2FuVXNlQ0dS
ZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dD
b250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7Ci0gICAgQ0dSZWN0IHJlY3RzWzJd
ID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0
Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9OwotICAgIENHQ29udGV4
dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdHMocGxh
dGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKLSAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1D
b250ZXh0KCkpOworICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRU
eXBlKGNvbnRleHQpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkgPT0g
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsK
KyAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0SW5m
aW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCksIHJlY3QgfTsKKyAg
ICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdHMoY29u
dGV4dCwgcmVjdHMsIDIpOworICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENH
Q29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3Jt
Q29udGV4dCgpKSk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVj
dChjb250ZXh0LCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCkpOwogICAgIGlm
ICghcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIENHQ29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250
ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOwotICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0
Zm9ybVBhdGgoKSk7CisgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlw
UnVsZSkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsK
KwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYg
KHBhdGguaXNFbXB0eSgpKQogICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENH
UmVjdFplcm8pOwogICAgIGVsc2UgewotICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZv
cm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgp
LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRl
eHQpOworICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRo
KCkpOwogCiAgICAgICAgIGlmIChjbGlwUnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAg
ICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKQEAgLTk3NSwxMSArOTg2LDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
Y2xpcFJ1bGUpCiAgICAgbV9kYXRhLT5jbGlwKHBhdGgpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNz
Q29udGV4dENHOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQogewogICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihv
cGFjaXR5KTsKQEAgLTEwMDIsMTcgKzEwMDgsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHJlc3RvcmUoKTsKIH0KIAotc3RhdGljIHZvaWQg
YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQorc3RhdGljIHZv
aWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIENHRmxvYXQmIHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
ICAgICBVTlVTRURfUEFSQU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwog
I2Vsc2UKLSAgICBpZiAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChDR0NvbnRleHREcmF3c1dp
dGhDb3JyZWN0U2hhZG93T2Zmc2V0cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICBp
ZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29udGV4dCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIFdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81NTM5Mzg4
PiBieSBlbnN1cmluZyB0aGF0IHRoZSBvZmZzZXRzIHdpbGwgZ2V0IHRydW5jYXRlZApAQCAtMTAz
MCwxMCArMTAzMyw1NSBAQCBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJ
Zk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotc3Rh
dGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29s
b3IpCitzdGF0aWMgdm9pZCBzZXRDR0xpbmVDYXAoQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVD
YXAgY2FwKQogewotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpOworICAgIHN3aXRjaCAoY2FwKSB7CisgICAgY2FzZSBMaW5lQ2FwOjpC
dXR0OgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBCdXR0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQ2FwOjpSb3VuZDoKKyAgICAgICAgQ0dD
b250ZXh0U2V0TGluZUNhcChjb250ZXh0LCBrQ0dMaW5lQ2FwUm91bmQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNh
cChjb250ZXh0LCBrQ0dMaW5lQ2FwU3F1YXJlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQog
CitzdGF0aWMgdm9pZCBzZXRDR0xpbmVKb2luKENHQ29udGV4dFJlZiBjb250ZXh0LCBMaW5lSm9p
biBqb2luKQoreworICAgIHN3aXRjaCAoam9pbikgeworICAgIGNhc2UgTGluZUpvaW46Ok1pdGVy
OgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pbk1pdGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6CisgICAgICAgIENH
Q29udGV4dFNldExpbmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luUm91bmQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIExpbmVKb2luOjpCZXZlbDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZUpvaW4oY29udGV4dCwga0NHTGluZUpvaW5CZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgc2V0Q0dNaXRlckxpbWl0KENHQ29udGV4dFJlZiBjb250ZXh0LCBm
bG9hdCBsaW1pdCkKK3sKKyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KGNvbnRleHQsIGxpbWl0
KTsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dMaW5lRGFzaChDR0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgaWYgKGRh
c2hPZmZzZXQgPCAwKSB7CisgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbGVuZ3Ro
ICs9IHN0YXRpY19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOworICAgICAgICBpZiAobGVuZ3RoKQor
ICAgICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0
aDsKKyAgICB9CisgICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29udGV4dCwgZGFzaE9mZnNldCwg
ZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHU2hh
ZG93KENHQ29udGV4dFJlZiBjb250ZXh0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIGJv
b2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCit7CiAgICAgaWYgKG9mZnNldC5pc1plcm8oKSAm
JiAhYmx1cikgewogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwg
Q0dTaXplWmVybywgMCwgMCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNDUsNyArMTA5Myw3IEBA
IHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgQ0dGbG9hdCB5T2Zmc2V0ID0gb2Zmc2V0Lmhl
aWdodCgpOwogICAgIENHRmxvYXQgYmx1clJhZGl1cyA9IGJsdXI7CiAKLSAgICBpZiAoIWdyYXBo
aWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CisgICAgaWYgKCFzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNl
Q1RNID0gZ2V0VXNlclRvQmFzZUNUTShjb250ZXh0KTsKIAogICAgICAgICBDR0Zsb2F0IEEgPSB1
c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9CYXNlQ1RNLmEgKyB1c2VyVG9CYXNlQ1RNLmIgKiB1c2Vy
VG9CYXNlQ1RNLmI7CkBAIC0xMDY2LDcgKzExMTQsOCBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRv
dyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXpl
JgogICAgIC8vIEV4dHJlbWUgImJsdXIiIHZhbHVlcyBjYW4gbWFrZSB0ZXh0IGRyYXdpbmcgY3Jh
c2ggb3IgdGFrZSBjcmF6eSBsb25nIHRpbWVzLCBzbyBjbGFtcAogICAgIGJsdXJSYWRpdXMgPSBz
dGQ6Om1pbihibHVyUmFkaXVzLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoMTAwMC4wKSk7CiAK
LSAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQs
IHhPZmZzZXQsIHlPZmZzZXQpOworICAgIGlmIChyZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkKQorICAgICAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5l
ZWRlZChjb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKIAogICAgIC8vIENoZWNrIGZvciBhbiBp
bnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0IGZv
ciB0aGUgc2hhZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2UgdGhl
IGRlZmF1bHQgc2hhZG93IGNvbG9yLgpAQCAtMTA3Niw0NCArMTEyNSw4MSBAQCBzdGF0aWMgdm9p
ZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgRmxvYXRTaXplJgogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4
dCwgQ0dTaXplTWFrZSh4T2Zmc2V0LCB5T2Zmc2V0KSwgYmx1clJhZGl1cywgY2FjaGVkQ0dDb2xv
cihjb2xvcikuZ2V0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkaWRVcGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBw
bHlTdGF0ZUNoYW5nZXMoKQogewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OworICAgIGlmICghc3RhdGUoKS5jaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgMC5mKSk7CisgICAgYXV0byBjb250ZXh0ID0gaW50ZXJuYWxQ
bGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VD
b2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKS5n
ZXQoKSk7CisgICAgZm9yIChhdXRvIGNoYW5nZSA6IHN0YXRlKCkuY2hhbmdlcygpKSB7CisgICAg
ICAgIHN3aXRjaCAoY2hhbmdlKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6Q1RNOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q1RNKGNvbnRleHQsIHN0YXRl
KCkuZ2V0Q1RNKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHNldENH
RmlsbENvbG9yKGNvbnRleHQsIHN0YXRlLmZpbGxDb2xvcik7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoOgorICAgICAgICAgICAgc2V0Q0dGaWxs
Q29sb3IoY29udGV4dCwgc3RhdGUoKS5maWxsQnJ1c2goKS5jb2xvcigpKTsKKyAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpB
bHBoYUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlLmFs
cGhhKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VU
aGlja25lc3M6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3Rk
OjptYXgoc3RhdGUoKS5zdHJva2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVh
azsKIAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVD
aGFuZ2UgfSkpCi0gICAgICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQsIHN0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0U3Ry
b2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZSgpLnN0cm9rZUJy
dXNoKCkuY29sb3IoKSkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkp
Ci0gICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3
aW5nTW9kZShzdGF0ZS50ZXh0RHJhd2luZ01vZGUpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAgICAgICAgICAgc2V0Q0dMaW5lQ2FwKGNv
bnRleHQsIHN0YXRlKCkubGluZUNhcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFu
Z2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUu
c2hvdWxkQW50aWFsaWFzKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpMaW5lSm9pbjoKKyAgICAgICAgICAgIHNldENHTGluZUpvaW4oY29udGV4dCwgc3RhdGUo
KS5saW5lSm9pbigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAg
ICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNob3VsZFNt
b290aEZvbnRzKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpM
aW5lRGFzaDoKKyAgICAgICAgICAgIHNldENHTGluZURhc2goY29udGV4dCwgc3RhdGUoKS5saW5l
RGFzaCgpLmRhc2hlcywgc3RhdGUoKS5saW5lRGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBi
cmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEludGVy
cG9sYXRpb25RdWFsaXR5KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQ6CisgICAgICAgICAgICBzZXRDR01pdGVyTGltaXQoY29u
dGV4dCwgc3RhdGUoKS5taXRlckxpbWl0KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBp
ZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCi0g
ICAgICAgIHNldENHU2hhZG93KCp0aGlzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci19CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZToKKyAgICAgICAgICAgIHNldENHQmxl
bmRNb2RlKGNvbnRleHQsIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbiwgc3RhdGUo
KS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi12b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIENH
Q29udGV4dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAgICAg
ICAgc2V0Q0dTaGFkb3coY29udGV4dCwgcmVuZGVyaW5nTW9kZSgpLCBzdGF0ZSgpLmRyb3BTaGFk
b3coKS5vZmZzZXQsIHN0YXRlKCkuZHJvcFNoYWRvdygpLmJsdXJSYWRpdXMsIHN0YXRlKCkuZHJv
cFNoYWRvdygpLmNvbG9yLCBzdGF0ZSgpLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpBbHBoYToKKyAgICAgICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRl
KCkuYWxwaGEoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk6CisgICAgICAg
ICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9s
YXRpb25RdWFsaXR5KHN0YXRlKCkuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlRleHREcmF3aW5nTW9kZToKKyAgICAgICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5n
TW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9kZShzdGF0ZSgpLnRleHREcmF3aW5nTW9kZSgp
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENHQ29udGV4dFNldFNo
b3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZSgpLnNob3VsZEFudGlhbGlhcygpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U2hvdWxkU21vb3RoRm9udHM6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9v
dGhGb250cyhjb250ZXh0LCBzdGF0ZSgpLnNob3VsZFNtb290aEZvbnRzKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTExMjUsNyAr
MTIxMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7
CisgICAgaWYgKHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7
CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkb3VibGVMaW5lV2lkdGggPSBsaW5lV2lkdGggKiAy
OwogICAgICAgICAgICAgZmxvYXQgYWRqdXN0ZWRXaWR0aCA9IGNlaWxmKHJlY3Qud2lkdGgoKSAr
IGRvdWJsZUxpbmVXaWR0aCk7CkBAIC0xMTM1LDcgKzEyMjEsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQogICAgICAgICAgICAgYXV0byBsYXllciA9IGFkb3B0Q0YoQ0dMYXllckNyZWF0ZVdpdGhDb250
ZXh0KGNvbnRleHQsIGxheWVyU2l6ZSwgMCkpOwogCiAgICAgICAgICAgICBDR0NvbnRleHRSZWYg
bGF5ZXJDb250ZXh0ID0gQ0dMYXllckdldENvbnRleHQobGF5ZXIuZ2V0KCkpOwotICAgICAgICAg
ICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSBsaW5lV2lkdGg7CiAgICAgICAgICAgICBDR0Nv
bnRleHRTZXRMaW5lV2lkdGgobGF5ZXJDb250ZXh0LCBsaW5lV2lkdGgpOwogCiAgICAgICAgICAg
ICAvLyBDb21wZW5zYXRlIGZvciB0aGUgbGluZSB3aWR0aCwgb3RoZXJ3aXNlIHRoZSBsYXllcidz
IHRvcC1sZWZ0IGNvcm5lciB3b3VsZCBiZQpAQCAtMTE0OSw4ICsxMjM0LDggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0
KTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxheWVy
Q29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0gICAg
ICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVu
dC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShs
YXllckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tl
R3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgY29uc3QgZmxv
YXQgZGVzdGluYXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAg
ICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0
aCk7CkBAIC0xMTYxLDEzICsxMjQ2LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAg
ICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0
UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0
YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBz
dHJva2VHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9r
ZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICAgICAvLyBVc2lu
ZyBDR0NvbnRleHRBZGRSZWN0IGFuZCBDR0NvbnRleHRTdHJva2VQYXRoIHRvIHN0cm9rZSByZWN0
IHJhdGhlciB0aGFuCkBAIC0xMTgyLDk0ICsxMjY3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAg
ICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQotewotICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAg
Y2FzZSBMaW5lQ2FwOjpCdXR0OgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3Jt
Q29udGV4dCgpLCBrQ0dMaW5lQ2FwQnV0dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGlu
ZUNhcDo6Um91bmQ6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0
KCksIGtDR0xpbmVDYXBSb3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6
U3F1YXJlOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBr
Q0dMaW5lQ2FwU3F1YXJlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKLXsKLSAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKLSAgICAgICAgZmxvYXQg
bGVuZ3RoID0gMDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tp
XSk7Ci0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChk
YXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRMaW5l
RGFzaChwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVz
LnNpemUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKExpbmVK
b2luIGpvaW4pCi17Ci0gICAgc3dpdGNoIChqb2luKSB7Ci0gICAgY2FzZSBMaW5lSm9pbjo6TWl0
ZXI6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dM
aW5lSm9pbk1pdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6
Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5l
Sm9pblJvdW5kKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6Ci0g
ICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9p
bkJldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgQ0dDb250ZXh0U2NhbGVD
VE0ocGxhdGZvcm1Db250ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
bV9kYXRhLT5zY2FsZShzaXplKTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
cm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIENHQ29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHQoKSwgYW5nbGUpOwotICAgIG1fZGF0YS0+cm90YXRlKGFuZ2xlKTsKLSAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0g
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKLSAgICBt
X2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENH
Q29udGV4dENvbmNhdENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAgICBtX2Rh
dGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dD
b250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+
c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0Nv
bnRleHRDRzo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0Ci17
Ci0gICAgLy8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBl
eGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0aGUKLSAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3Np
dGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgotICAg
IC8vIGxldmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBj
YW4gdXNlIHRoaXMgQ0cgQVBJLgotICAgIGlmIChpbmNsdWRlU2NhbGUgPT0gRGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSkKLSAgICAgICAgcmV0dXJuIENHQ29udGV4dEdldFVzZXJTcGFjZVRv
RGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgcmV0dXJuIENH
Q29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KIEZsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJv
dW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7CiAgICAgLy8gSXQgaXMgbm90IGVub3VnaCBqdXN0
IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UuIFRoZSByb3RhdGlvbiBwYXJ0IG9m
IHRoZQpAQCAtMTI4MCw3ICsxMjc3LDkgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmcKICAgICBp
ZiAobV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5KQogICAg
ICAgICByZXR1cm4gcm91bmRlZEludFJlY3QocmVjdCk7CiAKLSAgICBDR0FmZmluZVRyYW5zZm9y
bSBkZXZpY2VNYXRyaXggPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNm
b3JtKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOworCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dD
b250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShjb250ZXh0KTsKICAgICBp
ZiAoQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lkZW50aXR5KGRldmljZU1hdHJpeCkpIHsKICAgICAgICAg
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3QpOwpAQCAtMTMxOSw2ICsxMzE4LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXMKICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgQ29sb3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAogICAgIEZs
b2F0UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JU
ZXh0KEZsb2F0UmVjdChwb2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykp
LCBwcmludGluZywgbG9jYWxTdHJva2VDb2xvcik7CkBAIC0xMzY0LDEyICsxMzY0LDEyIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAgICAgfQogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1
YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQo
KSwgbG9jYWxTdHJva2VDb2xvcik7CisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGxv
Y2FsU3Ryb2tlQ29sb3IpOwogCi0gICAgQ0dDb250ZXh0RmlsbFJlY3RzKHBsYXRmb3JtQ29udGV4
dCgpLCBkYXNoQm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkpOworICAgIENHQ29udGV4
dEZpbGxSZWN0cyhjb250ZXh0LCBkYXNoQm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkp
OwogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9yKCkpOworICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBmaWxsQ29sb3IoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQpAQCAtMTQxMiwxNyArMTQxMiwxOCBAQCBSZW5kZXJpbmdNb2RlIEdyYXBoaWNz
Q29udGV4dENHOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAg
Ly8gQ29yZUdyYXBoaWNzIGV4cGVjdHMgdGhlIGJhc2UgQ1RNIG9mIGEgSGlEUEkgY29udGV4dCB0
byBoYXZlIHRoZSBzY2FsZSBmYWN0b3IgYXBwbGllZCB0byBpdC4KICAgICAvLyBGYWlsaW5nIHRv
IGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBDVE0gd2lsbCBjYXVzZSBjZXJ0YWluIENHIGZlYXR1cmVz
LCBzdWNoIGFzIGZvY3VzIHJpbmdzLAogICAgIC8vIHRvIGRyYXcgd2l0aCBhIHNjYWxlIGZhY3Rv
ciBvZiAxIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2NhbGUgZmFjdG9yLgotICAgIENHQ29udGV4
dFNldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dD
b250ZXh0R2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBk
ZXZpY2VTY2FsZUZhY3RvcikpOworICAgIENHQ29udGV4dFNldEJhc2VDVE0oY29udGV4dCwgQ0dB
ZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKGNvbnRleHQpLCBkZXZpY2VT
Y2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewogICAgIC8vIENH
Q29udGV4dEZpbGxFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAg
IGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAg
aWYgKGZpbGxHcmFkaWVudCgpIHx8IGZpbGxQYXR0ZXJuKCkpIHsKICAgICAgICAgZmlsbEVsbGlw
c2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDM0LDcgKzE0
MzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5S
ZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdy
YWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgIGlmIChzdHJva2VHcmFkaWVu
dCgpIHx8IHN0cm9rZVBhdHRlcm4oKSkgewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVs
bGlwc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ2OCw5ICsxNDY5LDEwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IEZsb2F0UG9pCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0Q0c6OmNhblVzZVNo
YWRvd0JsdXIoKSBjb25zdAogewotICAgIHJldHVybiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICByZXR1cm4gKHJlbmRlcmluZ01vZGUoKSA9
PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYg
IXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCk7CiB9CiAKLX0KIAotI2VuZGlmCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCA0Njhh
NDRiYWE4NmVlNTI2MTlkMjU1ZjkzOTQzYTk3NTViYWM5ZmFiLi5mOTljM2Q5YjliZDI4MjU4NjVm
ZGY3ZWE4MGIyYWYwMGUzNGI1MmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDEwLCAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsNTMgKzI1LDEzIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNFKENHKQorCiAjaW5jbHVk
ZSAiQ29sb3JTcGFjZUNHLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShDR0Nv
bnRleHRSZWYpOwotCi1jbGFzcyBDR0NvbnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAgICBD
R0NvbnRleHRTdGF0ZVNhdmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0
b3JlID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3Nh
dmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFu
ZFJlc3RvcmUpCi0gICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0g
ICAgfQotICAgIAotICAgIH5DR0NvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlm
IChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZSht
X2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSht
X2NvbnRleHQpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUp
OwotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1f
c2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRTYXZlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLSAg
ICAKLXByaXZhdGU6Ci0gICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2
ZUFuZFJlc3RvcmU7Ci19OwotCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRD
RyA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgewogcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4
dENHKENHQ29udGV4dFJlZik7CkBAIC04NSw2OSArNDUsNDggQEAgcHVibGljOgogICAgIGJvb2wg
aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAg
dm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wp
IGZpbmFsOworICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAg
dm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAx
KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwogCisgICAgdm9pZCBz
YXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0
YXRlQ2hhbmdlcygpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7
CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0aChj
b25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7
Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLQotICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3Q7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAg
dm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgp
IGZpbmFsOwotCi0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAg
IGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0Fj
Y2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkgZmluYWw7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFs
OwogCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQotICAgIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgZmluYWw7Ci0KICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9
IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAg
IEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZp
bmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAot
ICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykg
ZmluYWw7Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAg
dm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykg
ZmluYWw7CiAKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5h
bDsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRD
VE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRl
cykgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBm
bG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKQEAgLTE1NiwxOCArOTUsMjEgQEAgcHVibGljOgog
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwg
Ym9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUp
IGZpbmFsOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxv
YXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwor
ICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CiAKKyAg
ICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVz
cywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGlu
ZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0g
ICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwogCi0gICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBGbG9hdFJl
Y3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBS
b3VuZEFsbFNpZGVzKSBmaW5hbDsKIAogICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkg
Y29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFs
OworICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKworICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAKICAgICB2
aXJ0dWFsIGJvb2wgY2FuVXNlU2hhZG93Qmx1cigpIGNvbnN0OwogCkBAIC0xNzUsOSArMTE3LDE2
IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0
ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBDR0NvbnRleHRS
ZWYgaW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKIH07CiAKLX0K
K0NHQWZmaW5lVHJhbnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjaW5jbHVkZSAiQ0dDb250ZXh0U3RhdGVTYXZlci5oIgog
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCBlNmNlMmZiOTcyNDdhNmI4
NmMwOWIxYWQzNjE3MDFjMmVjM2U4NjI1Li5hZjAwYTAxMzM0N2UwY2Q4NWEzMGI4ODRlYmM3OWYz
MmYxZTIzMTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgUERG
RG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hCiAKICAgICAvLyBPbGQgYW5kIG5ldyBjb250ZXh0IHNjYWxpbmcgZmFj
dG9ycyBoYXZlIHRvIG1hdGNoIGFzIHdlbGwuCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBv
c2VkVHlwZSBkZWNvbXBvc2VkVHJhbnNmb3JtOwotICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9z
ZWRUcmFuc2Zvcm0pOworICAgIGNvbnRleHQuZ2V0Q1RNKCkuZGVjb21wb3NlKGRlY29tcG9zZWRU
cmFuc2Zvcm0pOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBjYWNoZWRE
ZWNvbXBvc2VkVHJhbnNmb3JtOwogICAgIG1fY2FjaGVkVHJhbnNmb3JtLmRlY29tcG9zZShjYWNo
ZWREZWNvbXBvc2VkVHJhbnNmb3JtKTsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFBERkRvY3Vt
ZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdAogICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhidWZmZXJDb250ZXh0
LCBkc3RSZWN0LCBGbG9hdFJlY3QobV9jYWNoZWRJbWFnZVJlY3QubG9jYXRpb24oKSwgc3JjUmVj
dC5zaXplKCkpKTsKICAgICBkcmF3UERGUGFnZShidWZmZXJDb250ZXh0KTsKIAotICAgIG1fY2Fj
aGVkVHJhbnNmb3JtID0gY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5
SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0
Q1RNKCk7CiAgICAgbV9jYWNoZWREZXN0aW5hdGlvblJlY3QgPSBkc3RSZWN0OwogICAgIG1fY2Fj
aGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7
CkBAIC0zNjMsNiArMzYzLDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFnZShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtbV9jcm9w
Qm94LmxvY2F0aW9uKCkpOwogCisgICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOworCiAg
ICAgLy8gQ0dQREYgcGFnZXMgYXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIENHQ29udGV4dERyYXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIENHUERGRG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBu
dWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BhdGhDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwCmluZGV4IGQ2ODlhNTFhODkxMDJhNTA5MDQ1NTliNDQyMjM2OWRlMTQ3MDMzMzUuLmZkZWVm
NmIzOGQwYzViNTU1NjczN2ViN2Y0NGFmMmYyZmM5YTQ0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJv
b2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250
ZXh0KGNvbnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwog
Ci0gICAgYm9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4
dCwgcG9pbnQsIGtDR1BhdGhTdHJva2UpOworICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4
dFBhdGhDb250YWluc1BvaW50KGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcG9p
bnQsIGtDR1BhdGhTdHJva2UpOwogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7
CiAKICAgICByZXR1cm4gaGl0U3VjY2VzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNv
cmRlckNvcmVUZXh0LmNwcAppbmRleCBlZmJjMWU0OTU0NDFiZWRlNzM0ZTk0OGRkMjZkMzcxNDQx
NjU1M2UwLi5lOWI3YWM0ZDdmNGNiZjc0MTI4OTM5YmZhOGMwNGU3NjVhMGRiZDg0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhz
UmVjb3JkZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5o
IgogCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0zNSw0OSArMzQsNDEgQEAK
ICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1
ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRl
eHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0
YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVs
ZWdhdGVSZWYpCitzdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRl
eHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYg
Z3N0YXRlLCBDR1JlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCiB7
CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5
cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICBy
ZWNvcmRlci5yZWNvcmRCZWdpbkxheWVyKHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsKKyAgICByZWNv
cmRlci5yZWNvcmRCZWdpbkxheWVyKGdzdGF0ZSk7CiAgICAgcmV0dXJuIGRlbGVnYXRlOwogfQog
Ci1zdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVS
ZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3Rh
dGUpCitzdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdh
dGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSkK
IHsKICAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdH
bHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAg
IHJlY29yZGVyLnJlY29yZEVuZExheWVyKHJzdGF0ZSwgZ3N0YXRlKTsKKyAgICByZWNvcmRlci5y
ZWNvcmRFbmRMYXllcihnc3RhdGUpOwogICAgIHJldHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGlj
IENHRXJyb3IgZHJhd0dseXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVU
cmFuc2Zvcm0qIHRtLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0
aW9uc1tdLCBzaXplX3QgY291bnQpCitzdGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENHQ29udGV4
dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBn
c3RhdGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwg
Y29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQogewotICAgIGlmIChDR0dT
dGF0ZUdldEFscGhhKGdzdGF0ZSkgPiAwKSB7Ci0gICAgICAgIERyYXdHbHlwaHNSZWNvcmRlciYg
cmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVs
ZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlw
aHMocnN0YXRlLCBnc3RhdGUsIHRtLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwotICAgIH0K
KyAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlw
aHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOworICAgIHJl
Y29yZGVyLnJlY29yZERyYXdHbHlwaHMoZ3N0YXRlLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQp
OwogICAgIHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdJ
bWFnZShDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiBy
c3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2Up
CitzdGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUs
IENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENH
SW1hZ2VSZWYgaW1hZ2UpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpz
dGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8o
ZGVsZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UocnN0YXRlLCBnc3RhdGUs
IHJlY3QsIGltYWdlKTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UoZ3N0YXRlLCByZWN0
LCBpbWFnZSk7CiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotVW5pcXVlUmVmPEdy
YXBoaWNzQ29udGV4dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQo
KQorc3RhdGljIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFsQ29udGV4
dChEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyKQogewotICAgIGF1dG8gY29udGV4dERlbGVn
YXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7CisgICAgYXV0byBj
b250ZXh0RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKCZyZWNvcmRl
cikpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdl
dCgpLCBkZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxs
YmFjaz4oJmJlZ2luTGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNv
bnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVFbmRMYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRl
eHREZWxlZ2F0ZUNhbGxiYWNrPigmZW5kTGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNl
dENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWludGVycHJl
dF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZXZWJDb3JlOjpkcmF3R2x5cGhzKSk7
CkBAIC04Niw2NyArNzcsMTUgQEAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogICAgIHJldHVybiBtYWtlVW5pcXVl
UmVmPEdyYXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAotRHJhd0dseXBoc1Jl
Y29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25z
dHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250
ZXh0IGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5
cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0
aW9uQ29udGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywg
RGVyaXZlRm9udEZyb21Db250ZXh0IGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVz
dGluYXRpb25Db250ZXh0KGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICAsIG1fZGVjb25zdHJ1Y3RE
cmF3R2x5cGhzKGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGVyaXZlRm9udEZyb21D
b250ZXh0KGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNy
ZWF0ZUludGVybmFsQ29udGV4dCgpKQorICAgICwgbV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50
ZXJuYWxDb250ZXh0KCp0aGlzKSkKIHsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBv
cHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0
YXRlKQotewotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBjb250ZXh0U3Rh
dGUuZmlsbENvbG9yOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQgPSBj
b250ZXh0U3RhdGUuZmlsbEdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUu
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRy
YW5zZm9ybTsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4gPSBjb250ZXh0
U3RhdGUuZmlsbFBhdHRlcm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29s
b3IgPSBjb250ZXh0U3RhdGUuc3Ryb2tlQ29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLmdyYWRpZW50ID0gY29udGV4dFN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgIG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0
YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0
cm9rZVN0eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUuc3Ryb2tlUGF0dGVybjsKLQotICAgIG1f
b3JpZ2luYWxTdGF0ZS5jdG0gPSBtX293bmVyLmdldENUTSgpOyAvLyBGSVhNRTogRGVhbCB3aXRo
IGJhc2UgQ1RNLgotCi0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBjb250ZXh0
U3RhdGUuc2hhZG93T2Zmc2V0OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciA9IGNv
bnRleHRTdGF0ZS5zaGFkb3dCbHVyOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3Ig
PSBjb250ZXh0U3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5p
Z25vcmVUcmFuc2Zvcm1zID0gY29udGV4dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwot
Ci0gICAgbV9jdXJyZW50U3RhdGUgPSBtX29yaWdpbmFsU3RhdGU7Ci19Ci0KLXZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgY29udGV4dFN0YXRlKQotewotICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0
eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxD
b2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29y
aWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4
dC0+c2V0RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBt
X29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVs
c2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsK
LSAgICAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAgICAgICAg
ICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5wYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0
cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7Ci0gICAgZWxzZSBp
ZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVy
bmFsQ29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHls
ZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0pOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVy
bigqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0KLSAgICBtX2lu
dGVybmFsQ29udGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRl
LnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hh
ZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93
LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dS
YWRpdXNNb2RlKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUo
Y29udGV4dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhp
bmdNb2RlIHNtb290aGluZ01vZGUpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJu
YWxGb250KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUp
CiB7CiAgICAgQVNTRVJUKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRy
aXgoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpKTsKIApAQCAtMTU2LDEwNCArOTUsMzgg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3Qg
Rm9udCYgZm9udCwgRm9udFNtb290aGluZ00KICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNv
bXB1dGVPdmVyYWxsVGV4dE1hdHJpeChmb250KTsKICAgICBpZiAoZm9udC5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCiAgICAgICAgIG1f
b3JpZ2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCBtX29y
aWdpbmFsVGV4dE1hdHJpeCk7Ci0KLSAgICBhdXRvJiBjb250ZXh0U3RhdGUgPSBtX293bmVyLnN0
YXRlKCk7Ci0gICAgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnRleHRTdGF0ZSk7Ci0gICAgcG9w
dWxhdGVJbnRlcm5hbENvbnRleHQoY29udGV4dFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OmNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkKK0dyYXBoaWNzQ29udGV4dFN0YXRl
IERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCgpCiB7Ci0gICAgdXBk
YXRlQ1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwotICAgIHVwZGF0ZUZpbGxDb2xvcihtX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRp
ZW50LmdldCgpLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAg
IHVwZGF0ZVN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciwgbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LmdldCgpLCBtX29yaWdpbmFsU3RhdGUu
c3Ryb2tlU3R5bGUucGF0dGVybi5nZXQoKSk7Ci0gICAgdXBkYXRlU2hhZG93KG1fb3JpZ2luYWxT
dGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2lu
YWxTdGF0ZS5zaGFkb3cuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNm
b3JtcyA/IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMgOiBTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtczo6Tm8pOworICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9IG1fZGVzdGluYXRpb25Db250ZXh0
LnN0YXRlKCk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPm1lcmdlU3RhdGVEaWZmcyhvcmlnaW5h
bFN0YXRlKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICByZXR1cm4gb3JpZ2luYWxTdGF0ZTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVw
ZGF0ZUZpbGxDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVu
dCwgUGF0dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3Jl
RGVzdGluYXRpb25Db250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0
YXRlKQogewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlz
bid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0
aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9y
LgotICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8g
d2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkg
Zm9yIHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuZmlsbFN0eWxlLmNv
bG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0
ZTsKLSAgICBuZXdTdGF0ZS5maWxsQ29sb3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3JhZGll
bnQpCi0gICAgICAgIG5ld1N0YXRlLmZpbGxHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAgIGlm
IChuZXdQYXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5maWxsUGF0dGVybiA9IG5ld1BhdHRlcm47
Ci0gICAgbV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbENvbG9yQ2hhbmdlIH0pOwotICAgIG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5j
b2xvciA9IG5ld0NvbG9yOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0Lm1lcmdlU3RhdGVEaWZm
cyhvcmlnaW5hbFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0
cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQ
YXR0ZXJuKiBuZXdQYXR0ZXJuKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2lu
TGF5ZXIoQ0dHU3RhdGVSZWYgZ3N0YXRlKQogewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3Jv
bmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENU
IHdpbGwgb25seSBldmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMg
dGhlIGNvcnJlY3QgY2hlY2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0
KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBj
aGVjayB3b3JrcyBjb3JyZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJy
ZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9yID0gbmV3
Q29sb3I7Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VHcmFk
aWVudCA9IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBuZXdTdGF0
ZS5zdHJva2VQYXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRl
KG5ld1N0YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9KTsK
LSAgICBtX2N1cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworICAgIG1f
ZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAg
bV9kZXN0aW5hdGlvbkNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihDR0dTdGF0ZUdldEFs
cGhhKGdzdGF0ZSkpOwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZEVuZExheWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICBpZiAoY3RtID09IG1fY3VycmVu
dFN0YXRlLmN0bSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vd25lci5zZXRDVE0oY3RtKTsK
LSAgICBtX2N1cnJlbnRTdGF0ZS5jdG0gPSBjdG07CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQu
c2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4
dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCi1zdGF0aWMgYm9vbCBzaGFkb3dJc0NsZWFy
ZWQoY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIpCi17Ci0g
ICAgcmV0dXJuIHNoYWRvd09mZnNldCA9PSBGbG9hdFNpemUoKSAmJiAhc2hhZG93Qmx1cjsKLX0K
LQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUm
IHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9y
LCBTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsKLSAg
ICAvLyBXZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGlm
IG5vYm9keSBoYXMgYW55IHNoYWRvd3MuCi0gICAgaWYgKHNoYWRvd0lzQ2xlYXJlZChzaGFkb3dP
ZmZzZXQsIHNoYWRvd0JsdXIpICYmIHNoYWRvd0lzQ2xlYXJlZChtX2N1cnJlbnRTdGF0ZS5zaGFk
b3cub2Zmc2V0LCBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuYmx1cikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIHN0YXRlQ2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc2hh
ZG93T2Zmc2V0ICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQgfHwgc2hhZG93Qmx1ciAh
PSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuYmx1ciB8fCBzaGFkb3dDb2xvciAhPSBtX2N1cnJlbnRT
dGF0ZS5zaGFkb3cuY29sb3IpIHsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93T2Zmc2V0ID0gc2hh
ZG93T2Zmc2V0OwotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjsKLSAg
ICAgICAgbmV3U3RhdGUuc2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICAgICAgc3RhdGVD
aGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Ci0gICAg
fQotICAgIGlmIChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAhPSBTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtczo6VW5zcGVjaWZpZWQgJiYgKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOjpZZXMpICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFu
c2Zvcm1zKSB7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwot
ICAgICAgICBzdGF0ZUNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc3RhdGVDaGFuZ2VGbGFn
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRl
KG5ld1N0YXRlLCBzdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIG1fY3VycmVudFN0YXRlLnNoYWRv
dy5vZmZzZXQgPSBzaGFkb3dPZmZzZXQ7Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIg
PSBzaGFkb3dCbHVyOwotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5jb2xvciA9IHNoYWRvd0Nv
bG9yOwotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotfQot
Ci12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUp
CitzdGF0aWMgdm9pZCBzZXREcm9wU2hhZG93KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25D
b250ZXh0LCBDR1N0eWxlUmVmIHN0eWxlKQogewogICAgIGlmIChDR1N0eWxlR2V0VHlwZShzdHls
ZSkgIT0ga0NHU3R5bGVTaGFkb3cpIHsKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBr
aW5kcyBvZiBDR1N0eWxlcy4KLSAgICAgICAgdXBkYXRlU2hhZG93KHswLCAwfSwgMCwgQ29sb3Io
KSwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkKTsKKyAgICAgICAgZGVzdGlu
YXRpb25Db250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTI2MSwyMCArMTM0LDkgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhD
R1N0eWxlUmVmIHN0eWxlKQogICAgIGF1dG8gcmFkID0gZGVnMnJhZChzaGFkb3dTdHlsZS5hemlt
dXRoIC0gMTgwKTsKICAgICBhdXRvIHNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzdGQ6OmNvcyhy
YWQpLCBzdGQ6OnNpbihyYWQpKSAqIHNoYWRvd1N0eWxlLmhlaWdodDsKICAgICBhdXRvIHNoYWRv
d0NvbG9yID0gQ0dTdHlsZUdldENvbG9yKHN0eWxlKTsKLSAgICB1cGRhdGVTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dTdHlsZS5yYWRpdXMsIENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9y
U3BhY2Uoc2hhZG93Q29sb3IpLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KIAot
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0
ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dT
dGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICBhdXRvIGFscGhhID0gQ0dHU3RhdGVHZXRBbHBoYShn
c3RhdGUpOwotICAgIG1fb3duZXIuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci19Ci0K
LXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENU
TShnc3RhdGUpKTsKLSAgICBtX293bmVyLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgZGVz
dGluYXRpb25Db250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHN0YXRpY19jYXN0
PGZsb2F0PihzaGFkb3dTdHlsZS5yYWRpdXMpLCBDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xv
clNwYWNlKHNoYWRvd0NvbG9yKSB9KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXModHJ1ZSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21w
dXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVf
dCBjb3VudCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCkBAIC0yOTAsMTgg
KzE1MiwxOCBAQCBzdGF0aWMgVmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0
aW9ucyhjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBj
b25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3Qg
Y291bnQpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR0dTdGF0
ZVJlZiBnc3RhdGUsIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRp
b25zW10sIHNpemVfdCBjb3VudCkKIHsKICAgICBBU1NFUlRfSU1QTElFUyhtX2Rlcml2ZUZvbnRG
cm9tQ29udGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vLCBtX29yaWdpbmFsRm9udCk7
CiAKLSAgICBpZiAoIWNvdW50KQorICAgIGlmICghY291bnQgfHwgQ0dHU3RhdGVHZXRBbHBoYShn
c3RhdGUpIDw9IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIENHRm9udFJlZiB1c2VkRm9udCA9
IENHR1N0YXRlR2V0Rm9udChnc3RhdGUpOwogICAgIGlmIChtX2Rlcml2ZUZvbnRGcm9tQ29udGV4
dCA9PSBEZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vICYmIHVzZWRGb250ICE9IGFkb3B0Q0YoQ1RG
b250Q29weUdyYXBoaWNzRm9udChtX29yaWdpbmFsRm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250
KCksIG51bGxwdHIpKS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlQ1RNKCpD
R0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0o
KkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwogCiAgICAgLy8gV2Ugd2FudCB0aGUgcmVwbGF5ZXIn
cyBDVE0gYW5kIHRleHQgbWF0cml4IHRvIG1hdGNoIHRoZSBjdXJyZW50IENUTSBhbmQgdGV4dCBt
YXRyaXguCiAgICAgLy8gVGhlIGN1cnJlbnQgdGV4dCBtYXRyaXggaXMgYSBjb25jYXRlbmF0aW9u
IG9mIHdoYXRldmVyIFdlYktpdCBzZXRzIGl0IHRvIGFuZCB3aGF0ZXZlcgpAQCAtMzI0LDEzICsx
ODYsMTYgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgaW52ZXJzZUNUTUZpeHVw
ID0gaW52ZXJzZS52YWx1ZSgpOwogICAgIGVsc2UKICAgICAgICAgY3RtRml4dXAgPSBBZmZpbmVU
cmFuc2Zvcm0oKTsKLSAgICBtX293bmVyLmNvbmNhdENUTShjdG1GaXh1cCk7CisKKyAgICBtX2Rl
c3RpbmF0aW9uQ29udGV4dC5jb25jYXRDVE0oY3RtRml4dXApOwogCiAgICAgYXV0byBmaWxsQ29s
b3IgPSBDR0dTdGF0ZUdldEZpbGxDb2xvcihnc3RhdGUpOworICAgIG1fZGVzdGluYXRpb25Db250
ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxD
b2xvcikpOworCiAgICAgYXV0byBzdHJva2VDb2xvciA9IENHR1N0YXRlR2V0U3Ryb2tlQ29sb3Io
Z3N0YXRlKTsKLSAgICB1cGRhdGVGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29s
b3JTcGFjZShmaWxsQ29sb3IpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRl
QW5kUHJlc2VydmVDb2xvclNwYWNlKHN0cm9rZUNvbG9yKSk7Ci0gICAgdXBkYXRlU2hhZG93KENH
R1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0U3Ry
b2tlQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikp
OworCisgICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVHZXRT
dHlsZShnc3RhdGUpKTsKIAogICAgIGF1dG8gZm9udFNpemUgPSBDR0dTdGF0ZUdldEZvbnRTaXpl
KGdzdGF0ZSk7CiAgICAgUmVmIGZvbnQgPSBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJp
dmVGb250RnJvbUNvbnRleHQ6Ok5vID8gKm1fb3JpZ2luYWxGb250IDogRm9udDo6Y3JlYXRlKEZv
bnRQbGF0Zm9ybURhdGEoYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KHVzZWRG
b250LCBmb250U2l6ZSwgbnVsbHB0ciwgbnVsbHB0cikpLCBmb250U2l6ZSkpOwpAQCAtMzQ1LDMw
ICsyMTAsMzggQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dS
ZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgLy8gRklYTUU6IDxo
dHRwczovL3dlYmtpdC5vcmcvYi8yMzI5MTc+IChgRHJhd0dseXBoc1JlY29yZGVyYCBzaG91bGQg
YmUgYWJsZSB0byByZWNvcmQrcmVwbGF5IHZlcnRpY2FsIHRleHQpCiAgICAgfQogCi0gICAgbV9v
d25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2Vz
RnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCB0ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50
LCB0ZXh0TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7Ci0K
LSAgICBtX293bmVyLmNvbmNhdENUTShpbnZlcnNlQ1RNRml4dXApOworICAgIG1fZGVzdGluYXRp
b25Db250ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2
YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9ucywgY291bnQsIHRleHRNYXRyaXgpLmRhdGEoKSwg
Y291bnQsIHRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2Rl
KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsK
IH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmlu
Z1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNn
SW1hZ2UpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKENHR1N0YXRl
UmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgY2dJbWFnZSkKIHsKLSAgICB1cGRh
dGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0
ZUdldFN0eWxlKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dH
U3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29u
dGV4dCwgQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKIAogICAgIC8vIENvcmUgR3JhcGhpY3Mg
YXNzdW1lcyBhICJ5IHVwIiBjb29yZGluYXRlIHN5c3RlbSwgYnV0IGluIFdlYktpdCwgd2UgdXNl
IGEgInktZG93biIgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgLy8gVGhpcyBtZWFucyB0aGF0IFdl
YktpdCdzIGRyYXdpbmcgcm91dGluZXMgKEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkpIGlu
dGVudGlvbmFsbHkgZHJhdyBpbWFnZXMgdXBzaWRlLWRvd24gZnJvbSBDb3JlIEdyYXBoaWNzJ3Mg
cG9pbnQgb2Ygdmlldy4KICAgICAvLyAoVGhlcmUncyBhIHktZmxpcCBpbnNpZGUgdGhlIGltcGxl
bWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkuKQogICAgIC8vIFRoZSBy
ZWN0IGhhcyB0aGUgcmlnaHQgYm91bmRzLCBidXQgd2UgbmVlZCB0byB0cmFuc2Zvcm0gZnJvbSBD
RydzIGNvb3JkaW5hdGUgc3lzdGVtIHRvIFdlYktpdCdzIGJ5IHBlcmZvcm1pbmcgb3VyIG93biB5
LWZsaXAgc28gaW1hZ2VzIGFyZSBkcmF3biB0aGUgcmlnaHQtc2lkZS11cC4KICAgICAvLyBXZSBk
byB0aGlzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHRoZSB0d28gQVBJcywgd2hpY2ggaXMgcmln
aHQgaGVyZS4KLSAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCByZWN0LnNpemUuaGVpZ2h0ICsgMiAq
IHJlY3Qub3JpZ2luLnkpOwotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0K
KyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhlaWdodCAr
IDIgKiByZWN0Lm9yaWdpbi55KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9h
dFNpemUoMSwgLTEpKTsKKyAgICAKICAgICBhdXRvIGltYWdlID0gTmF0aXZlSW1hZ2U6OmNyZWF0
ZShjZ0ltYWdlKTsKLSAgICBtX293bmVyLmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5z
aXplKCksIEZsb2F0UmVjdChyZWN0KSwgRmxvYXRSZWN0IHt7IH0sIGltYWdlLT5zaXplKCl9LCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7
Ci0KKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFn
ZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2UtPnNpemUo
KSB9LCBJbWFnZVBhaW50aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExl
ZnQgfSk7CisgICAgCiAgICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhl
IGNvbnRleHQuCi0gICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBtX293
bmVyLnRyYW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkp
OworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAy
ICogcmVjdC5vcmlnaW4ueSkpOworfQorCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05v
bk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhp
bmdNb2RlKQoreworICAgIHNldEludGVybmFsRm9udChmb250LCBzbW9vdGhpbmdNb2RlKTsKKyAg
ICAKKyAgICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7Cisg
ICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBo
cywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAg
cmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogdm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMs
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNt
b290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKQEAgLTM3OSwyNSArMjUyLDE5IEBAIHZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCoKICAgICAgICAgYXV0byBib3VuZHMgPSBmb250LmJvdW5kc0ZvckdseXBo
KGdseXBoc1tpXSk7CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgbG9jYWwgSW1hZ2VCdWZmZXIgYmVj
YXVzZSBkZWNvZGluZyB0aGUgU1ZHIGZvbnRzIGhhcyB0byBoYXBwZW4gaW4gV2ViUHJvY2Vzcy4K
LSAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX293bmVyLmNyZWF0ZUFsaWduZWRJbWFn
ZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdN
ZXRob2Q6OkxvY2FsKSkgeworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fZGVzdGlu
YXRpb25Db250ZXh0LmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6OkxvY2FsKSkgeworICAgICAgICAg
ICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5hcHBseVN0YXRlQ2hhbmdlcygpOwogICAgICAgICAg
ICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoaW1hZ2VCdWZmZXItPmNvbnRleHQoKSwgZm9udCwg
Z2x5cGhzICsgaSwgYWR2YW5jZXMgKyBpLCAxLCBGbG9hdFBvaW50KCksIHNtb290aGluZ01vZGUp
OwogCiAgICAgICAgICAgICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChib3VuZHMpOwogICAgICAgICAgICAgZGVzdGluYXRpb25SZWN0Lm1vdmVCeShwZW5Qb3Np
dGlvbik7Ci0gICAgICAgICAgICBtX293bmVyLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIs
IGRlc3RpbmF0aW9uUmVjdCk7CisgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogICAgICAgICB9CiAK
ICAgICAgICAgcGVuUG9zaXRpb24ubW92ZShzaXplKGFkdmFuY2VzW2ldKSk7CiAgICAgfQogfQog
Ci12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFy
dFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIHByZXBhcmVJ
bnRlcm5hbENvbnRleHQoZm9udCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgRm9udENhc2NhZGU6OmRy
YXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUds
eXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENv
bnRleHQoKTsKLX0KLQogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGluZ0lu
dG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBhdXRvIG90c3ZnR2x5cGhzID0gZm9udC5maW5k
T1RTVkdHbHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpOwpAQCAtNDQwLDcgKzMwNyw3IEBAIHZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1
bnMoY29uc3QgRm9udCYgZm9uCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsK
ICAgICBpZiAobV9kZWNvbnN0cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhz
OjpObykgewotICAgICAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAg
ICAgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NTMsMTUgKzMyMCwxNyBAQCB2b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQoQ1RGb250UmVmIGZvbnQsIENHRmxvYXQgZm9u
dFNpemUsIENUTGluZQogewogICAgIEFTU0VSVChtX2RlY29uc3RydWN0RHJhd0dseXBocyA9PSBE
ZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHNhdmVyKG1fb3duZXIpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIo
bV9kZXN0aW5hdGlvbkNvbnRleHQpOwogCi0gICAgbV9vd25lci50cmFuc2xhdGUobGluZVJlY3Qu
b3JpZ2luLngsIGxpbmVSZWN0Lm9yaWdpbi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOwotICAg
IG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRl
eHQudHJhbnNsYXRlKGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVS
ZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNp
emUoMSwgLTEpKTsKIAotICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoRm9udDo6Y3JlYXRlKEZv
bnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNtb290aGluZ01vZGU6OlN1YnBp
eGVsQW50aWFsaWFzZWQpOworICAgIHNldEludGVybmFsRm9udChGb250OjpjcmVhdGUoRm9udFBs
YXRmb3JtRGF0YShmb250LCBmb250U2l6ZSkpLCBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxB
bnRpYWxpYXNlZCk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUludGVy
bmFsQ29udGV4dCgpOwogICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIDAsIDApOwogICAgIENUTGluZURyYXcobGluZSwgbV9p
bnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBjb25jbHVkZUludGVybmFs
Q29udGV4dCgpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0ZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4
dC5jcHAKaW5kZXggNTExZTA5Yjk2Y2VmMDMyNTA5MGUyM2FmOTE0YWUzNWYyYWI4ZWQyZS4uZTUz
NGNjNTVhZjI2YjdmYjgyODBlNjNiN2RjMjVhM2Q0YTQxNjM3OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENh
c2NhZGVDb3JlVGV4dC5jcHAKQEAgLTE1MiwyNSArMTUyLDI3IEBAIHN0YXRpYyB2b2lkIGZpbGxW
ZWN0b3JXaXRoVmVydGljYWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9z
aXRpb25zCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29u
dGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNp
Z25lZCBjb3VudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQorc3RhdGljIHZv
aWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
Rm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlw
aHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRleHRNYXRyaXgpCiB7CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJu
OwogCisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0
Zm9ybURhdGEoKTsKKwogICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7
CiAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6
VmVydGljYWwpIHsKLSAgICAgICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRl
VmVydGljYWxUZXh0TWF0cml4KGZvbnQsIHRleHRNYXRyaXgpLCBjb250ZXh0KTsKKyAgICAgICAg
U2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZv
bnQsIHRleHRNYXRyaXgpLCBjZ0NvbnRleHQpOwogCiAgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1
Nj4gdHJhbnNsYXRpb25zKGNvdW50KTsKICAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFuc2xh
dGlvbnNGb3JHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9u
cy5kYXRhKCksIGNvdW50KTsKIAogICAgICAgICBhdXRvIGFzY2VudERlbHRhID0gZm9udC5mb250
TWV0cmljcygpLmZsb2F0QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0
cmljcygpLmZsb2F0QXNjZW50KCk7Ci0gICAgICAgIGZpbGxWZWN0b3JXaXRoVmVydGljYWxHbHlw
aFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFu
Y2VzLCBjb3VudCwgcG9pbnQsIGFzY2VudERlbHRhKTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBo
cyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQs
IGNvbnRleHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMo
cG9zaXRpb25zLCBjZ0NvbnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBjb3Vu
dCwgcG9pbnQsIGFzY2VudERlbHRhKTsKKyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9y
bURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNnQ29udGV4
dCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQ
b3NpdGlvbnMocG9zaXRpb25zLCBjb250ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKLSAg
ICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9z
aXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aEhv
cml6b250YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNnQ29udGV4dCwgYWR2YW5jZXMsIGNv
dW50LCBwb2ludCk7CisgICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9u
dCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0K
IH0KIApAQCAtMjQyLDEwICsyNDQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIHNl
dENHRm9udFJlbmRlcmluZ01vZGUoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUo
Y2dDb250ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAg
ICBjb250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9y
KTsKKyAgICBhdXRvIGRyb3BTaGFkb3cgPSBjb250ZXh0LmRyb3BTaGFkb3coKTsKIAogICAgIEFm
ZmluZVRyYW5zZm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBmbG9hdCBz
eW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CkBAIC0yNTgs
MjkgKzI1NywyOSBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgICAgICB9CiAgICAgfTsK
IAotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9
PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFk
b3dCbHVyICYmICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQu
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uT3JGbGlwcGVkKCkpICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwor
ICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBU
ZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgZHJvcFNoYWRvdy5jb2xvci5pc1ZhbGlkKCkgJiYgIWRy
b3BTaGFkb3cuYmx1clJhZGl1cyAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkg
JiYgKCFjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lk
ZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7CiAgICAgICAgIC8vIFBhaW50
IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93
cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KICAgICAgICAgY29udGV4
dC5jbGVhclNoYWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxD
b2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAg
ICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBkcm9wU2hhZG93LmNvbG9yLmNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRY
ID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHNoYWRv
d1RleHRYID0gcG9pbnQueCgpICsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKTsKICAgICAgICAg
Ly8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFw
cGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAg
ICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0
KCkgKiAoY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAg
ICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dU
ZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0
TWF0cml4KTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hh
ZG93Lm9mZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkg
PyAtMSA6IDEpOworICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hh
ZG93VGV4dFgsIHNoYWRvd1RleHRZKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQp
Ci0gICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4
dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwg
Z2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAgICAgICAgIHNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0Jv
bGRPZmZzZXQsIHNoYWRvd1RleHRZKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmls
bENvbG9yKTsKICAgICB9CiAKLSAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250
LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7Cisg
ICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBh
ZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKIAogICAgIGlmIChzeW50aGV0aWNCb2xk
T2Zmc2V0KQotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQu
eCgpICsgc3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwgY2dDb250ZXh0LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgICAgICBzaG93R2x5
cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNl
dCwgcG9pbnQueSgpKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCB0ZXh0TWF0cml4KTsKIAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAg
ICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRV
c2VGb250U21vb3RoaW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggMmUyZjRmNGYy
Y2I1NWQzNjVlNWFlMzk5MzI1ZDA1ZjJjMTczNjFmZC4uY2NmNDBjZWE2MmIxNjc0MzY2ZDc0ODQx
NjJiMWJjNGU5Mzc3MDc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC05MCwxMCAr
OTAsNyBAQCBib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3Mg
ZmxhZ3MsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgaWYgKCEoZmxhZ3MgJiBBc1RleHRGbGFn
OjpJbmNsdWRlc1BsYXRmb3JtT3BlcmF0aW9ucykpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8m
IHN0YXRlSXRlbSA9IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICAgICAgLy8gRklYTUU6
IGZvciBub3csIG9ubHkgZHJvcCB0aGUgaXRlbSBpZiB0aGUgb25seSBzdGF0ZS1jaGFuZ2UgZmxh
Z3MgYXJlIHBsYXRmb3JtLXNwZWNpZmljLgotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0
ZUNoYW5nZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdz
ID09IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFu
Z2UpCisgICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlKCkuY2hhbmdlcygpID09IEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBA
IC0yMDIsMTYgKzE5OSw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0
ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2F2ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihp
dGVtLmdldDxSZXN0b3JlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAg
ICAgIHJldHVybiBhcHBlbmQ8VHJhbnNsYXRlPihpdGVtLmdldDxUcmFuc2xhdGU+KCkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0
ZW0uZ2V0PFJvdGF0ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJl
dHVybiBhcHBlbmQ8U2NhbGU+KGl0ZW0uZ2V0PFNjYWxlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4o
aXRlbS5nZXQ8Q29uY2F0ZW5hdGVDVE0+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToK
LSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRDVE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1cm4gYXBwZW5k
PFNldElubGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTIyMCwxNiArMjA3LDYg
QEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0
dXJuIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0uZ2V0PFNldFN0cm9rZVRoaWNrbmVz
cz4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBhcHBl
bmQ8U2V0U3RhdGU+KGl0ZW0uZ2V0PFNldFN0YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVDYXA+KGl0ZW0uZ2V0PFNl
dExpbmVDYXA+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPFNldExpbmVEYXNoPihpdGVtLmdldDxTZXRMaW5lRGFzaD4oKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGlu
ZUpvaW4+KGl0ZW0uZ2V0PFNldExpbmVKb2luPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRN
aXRlckxpbWl0OgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldE1pdGVyTGltaXQ+KGl0ZW0uZ2V0
PFNldE1pdGVyTGltaXQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAg
ICAgICByZXR1cm4gYXBwZW5kPENsZWFyU2hhZG93PihpdGVtLmdldDxDbGVhclNoYWRvdz4oKSk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwPihp
dGVtLmdldDxDbGlwPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMjc0LDgg
KzI1MSw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAg
ICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0
aENvbG9yPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAg
ICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJl
Y3RXaXRoR3JhZGllbnQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZp
bGxDb21wb3NpdGVkUmVjdD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0
OgogICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJv
dW5kZWRSZWN0PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcApp
bmRleCAwYzI1MjI2NGFmNDE2NjU2MjE3NTE2MDQxMDQyYThiZGQzYmZhYmI1Li5kZWZjZTg0ZWYz
NTg3YmVhMDZkMjA3ZGI1YjgwMmFhN2M4MjU2NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpE
cmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGluaXRpYWxDVE0pCi0gICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFs
Q1RNKQorICAgIDogbV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEZsb2F0UmVjdCh7IH0sIGxvZ2lj
YWxTaXplKSwgaW5pdGlhbENUTSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmNwcAppbmRleCA0NTc3NTUxODliZGFkZDcxOWQyNDVhNGU2ZDJjODFiZGRi
MWY3ZGYzLi4wZGIxNTAzOTYwNDAzMmYzMzAzZmJjYjY1MjFlNTNlNGUzNGY5MThkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtNTIsMjEgKzUyLDYg
QEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAg
Y2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgZ2V0PFJlc3RvcmU+KCkuYXBwbHkoY29u
dGV4dCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0g
ICAgICAgIGdldDxUcmFuc2xhdGU+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGdldDxSb3RhdGU+KCkuYXBwbHko
Y29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAg
ICAgICAgZ2V0PFNjYWxlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGdldDxDb25jYXRlbmF0ZUNU
TT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldENUTToKLSAgICAgICAgZ2V0PFNldENUTT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAg
Z2V0PFNldElubGluZUZpbGxDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJu
OwpAQCAtNzksMjEgKzY0LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKLSAgICAgICAgZ2V0PFNldExpbmVDYXA+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0
PFNldExpbmVEYXNoPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGdldDxTZXRMaW5lSm9pbj4oKS5hcHBs
eShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQ6Ci0gICAgICAgIGdldDxTZXRNaXRlckxpbWl0PigpLmFwcGx5KGNvbnRleHQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGdl
dDxDbGVhclNoYWRvdz4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIGdldDxDbGlwPigpLmFwcGx5KGNvbnRleHQpOwog
ICAgICAgICByZXR1cm47CkBAIC0xNjAsOSArMTMwLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoR3JhZGllbnQ6CiAgICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5hcHBseShj
b250ZXh0KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3Np
dGVkUmVjdDoKLSAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5hcHBseShjb250ZXh0
KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoK
ICAgICAgICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMjcwLDkgKzIzNyw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgICAgIGdldDxEcmF3UGF0aD4oKS5+RHJh
d1BhdGgoKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3Np
dGVkUmVjdDoKLSAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0
ZWRSZWN0KCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoK
ICAgICAgICAgZ2V0PEZpbGxQYXRoPigpLn5GaWxsUGF0aCgpOwogICAgICAgICByZXR1cm47CkBA
IC0yODgsOSArMjUyLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCku
fkZpbGxSb3VuZGVkUmVjdCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZURhc2g6Ci0gICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBn
ZXQ8U2V0U3RhdGU+KCkuflNldFN0YXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxNCw5ICsy
NzUsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyUmVjdDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8Q2xlYXJSZWN0Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPENsZWFyU2hhZG93Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8Q2xpcD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MzI2LDkgKzI4NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsaXBUb0ltYWdlQnVmZmVyPjo6dmFsdWUpOwogICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENvbmNhdGVuYXRlQ1RN
Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj46OnZhbHVlKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzg3LDMzICszNDIsMTUgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95
KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSZXN0b3JlPjo6dmFsdWUpOwogICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSb3RhdGU+Ojp2YWx1ZSk7Ci0gICAgICAg
IHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTYXZlPjo6dmFsdWUpOwogICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNjYWxlPjo6dmFsdWUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRDVE0+Ojp2YWx1ZSk7Ci0gICAgICAg
IHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZp
bGxDb2xvcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZVN0cm9rZUNvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVTdHJva2VDb2xvcj46OnZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpv
aW4+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRl
ckxpbWl0OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxTZXRNaXRlckxpbWl0Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTQzNyw5ICszNzQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ry
b3koKQogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUxpbmU+Ojp2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIApAQCAtNTAxLDggKzQzNSw2IEBAIGJv
b2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVz
dGluYXRpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3UGF0dGVybj4oaXRl
bU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICBy
ZXR1cm4gY29weUludG88RHJhd1BhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxs
Q29tcG9zaXRlZFJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUGF0aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxQYXRoPihpdGVtT2Zmc2V0LCAq
dGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CkBAIC01MTMsOCAr
NDQ1LDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRl
bUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRS
ZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6
Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRMaW5lRGFzaD4oaXRlbU9mZnNldCwgKnRoaXMp
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gY29weUludG88
U2V0U3RhdGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQ
YXRoOgpAQCAtNTMxLDE2ICs0NjEsMTIgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVt
VHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxD
bGVhclJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsZWFyU2hhZG93PihpdGVtT2Zmc2V0LCAq
dGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PENsaXA+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0Ogog
ICAgICAgICByZXR1cm4gY29weUludG88Q2xpcE91dD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgICAgICByZXR1cm4gY29weUlu
dG88Q2xpcFRvSW1hZ2VCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENvbmNhdGVuYXRl
Q1RNPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxs
aXBzZToKQEAgLTU3MywyNCArNDk5LDEyIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRl
bVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAjZW5kaWYKICAg
ICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICByZXR1cm4gY29weUludG88UmVzdG9y
ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPFJvdGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNhdmU6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTYXZlPihpdGVtT2Zmc2V0
LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBjb3B5
SW50bzxTY2FsZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENU
TToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldENUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPFNldElubGluZUZpbGxDb2xvcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88
U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGluZUNhcD4oaXRl
bU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAg
ICByZXR1cm4gY29weUludG88U2V0TGluZUpvaW4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gY29weUludG88U2V0
TWl0ZXJMaW1pdD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
cm9rZVRoaWNrbmVzczoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0cm9rZVRoaWNrbmVz
cz4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6
CkBAIC02MDcsOCArNTIxLDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBp
dGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPFN0cm9rZVJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTdHJva2VMaW5lOgogICAgICAgICByZXR1cm4gY29weUludG88U3Ryb2tlTGluZT4oaXRlbU9m
ZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFRyYW5zbGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAK
aW5kZXggNTRlYTFjODY4MmMwNzQ0MmUyZTg0MTRiNzMyOGFhMzI0ODAyNWE3NS4uYmEwZDk1MWMy
MmNmNDljZTQxN2UzMzU1M2IwMGUwYTViOGFiMjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmNwcApAQCAtMzgsMTYgKzM4LDYgQEAgc3RhdGljIHNpemVfdCBzaXpl
T2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNhdmUp
OwogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVybiBzaXplb2YoUmVz
dG9yZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFRyYW5zbGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKFJvdGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoU2NhbGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKENvbmNhdGVuYXRlQ1RNKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0Q1RNKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5l
RmlsbENvbG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAg
LTU2LDE2ICs0Niw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUg
dHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihTZXRTdHJva2VUaGlja25lc3MpOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0YXRlKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNl
dExpbmVDYXApOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKFNldExpbmVEYXNoKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lSm9pbik7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRNaXRlckxpbWl0KTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIHNpemVvZihDbGVh
clNoYWRvdyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIHNpemVv
ZihDbGlwKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMTEwLDggKzkwLDYgQEAg
c3RhdGljIHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEZpbGxSZWN0V2l0aENvbG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhHcmFk
aWVudCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEZpbGxDb21wb3NpdGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSb3VuZGVkUmVjdCk7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CkBAIC0xODIsMjggKzE2
MCwxOCBAQCBib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseUZpbGxQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0
dGVybjoKICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9Q
YXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgIGNhc2UgSXRlbVR5cGU6OkNv
bmNhdGVuYXRlQ1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNl
IEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNl
IEl0ZW1UeXBlOjpTYXZlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRl
bVR5cGU6OlNldENUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZUNhcDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0
OgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
cm9rZVRoaWNrbmVzczoKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKQEAgLTIyMiw3ICsxOTAsNiBAQCBib29sIGlz
RHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFu
c3BhcmVuY3lMYXllcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbExpbmU6CkBAIC0yODgsMTMgKzI1NSwxMSBAQCBi
b29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdH
bHlwaHM6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKICAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoQ29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBh
dGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1N5c3RlbUltYWdlOgpAQCAtMzA2LDExICsyNzEs
OSBAQCBib29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJ
dGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clJlY3Q6Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBUb0ltYWdlQnVmZmVyOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0VsbGlwc2U6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXI6CkBAIC0zMzMsMTUgKzI5Niw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBl
IHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgogI2VuZGlmCiAg
ICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENv
bG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dHJva2VUaGlja25lc3M6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKQEAgLTM1MSw3ICszMDgsNiBAQCBib29sIGlzSW5saW5l
SXRlbShJdGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVj
dDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgotICAgIGNhc2UgSXRlbVR5cGU6OlRy
YW5zbGF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5kZXggZDY4M2Iy
YWNmNzg0NWY5OWMzY2QwOTVlYjkxMWU1NGYxZjhjZTExMS4uMTY2MGI5OGZkYTVlZjI3YjNmNzVk
MjJhNTc5YTNhOWFlM2NjNzBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlw
ZS5oCkBAIC0zMSwyMCArMzEsMTAgQEAgbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGVudW0gY2xh
c3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBTYXZlLAogICAgIFJlc3RvcmUsCi0gICAgVHJh
bnNsYXRlLAotICAgIFJvdGF0ZSwKLSAgICBTY2FsZSwKLSAgICBDb25jYXRlbmF0ZUNUTSwKLSAg
ICBTZXRDVE0sCiAgICAgU2V0SW5saW5lRmlsbENvbG9yLAogICAgIFNldElubGluZVN0cm9rZUNv
bG9yLAogICAgIFNldFN0cm9rZVRoaWNrbmVzcywKICAgICBTZXRTdGF0ZSwKLSAgICBTZXRMaW5l
Q2FwLAotICAgIFNldExpbmVEYXNoLAotICAgIFNldExpbmVKb2luLAotICAgIFNldE1pdGVyTGlt
aXQsCi0gICAgQ2xlYXJTaGFkb3csCiAgICAgQ2xpcCwKICAgICBDbGlwT3V0LAogICAgIENsaXBU
b0ltYWdlQnVmZmVyLApAQCAtNjcsNyArNTcsNiBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWlu
dDhfdCB7CiAgICAgRmlsbFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJl
Y3RXaXRoR3JhZGllbnQsCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0LAogICAgIEZpbGxSb3VuZGVk
UmVjdCwKICAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAyM2QwYmJj
YzcxYzI4MWM1MmMzNWE4YzI1MmRhOTZjMGFiMTJhOThjLi4zNmZhNmExMjdmZjA3OTNjZWYyMzBl
ZGY3YTY0MWRkZTAyZmUzNzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
Ik1lZGlhUGxheWVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC01NCw2NyArNTUs
NiBAQCB2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
ICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gs
IG1feSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRl
bS54KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgieSIsIGl0ZW0ueSgpKTsKLQotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBSb3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKLXsKLSAgICBjb250ZXh0LnJvdGF0ZShtX2FuZ2xlKTsKLX0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKLXsK
LSAgICB0cy5kdW1wUHJvcGVydHkoImFuZ2xlIiwgaXRlbS5hbmdsZSgpKTsKLQotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAotewotICAgIGNvbnRleHQuc2NhbGUobV9zaXplKTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVtKQotewotICAg
IHRzLmR1bXBQcm9wZXJ0eSgic2l6ZSIsIGl0ZW0uYW1vdW50KCkpOwotCi0gICAgcmV0dXJuIHRz
OwotfQotCi12b2lkIFNldENUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAotewotICAgIGNvbnRleHQuc2V0Q1RNKG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRlbSkKLXsK
LSAgICB0cy5kdW1wUHJvcGVydHkoInNldC1jdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3Jt
KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IENvbmNhdGVuYXRlQ1RNJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwg
aXRlbS50cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgU2V0SW5saW5l
RmlsbENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3IoKSk7CkBAIC0xNDgsNzcgKzg4LDIyIEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdHJva2VU
aGlja25lc3MmIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0U3RhdGU6OlNldFN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0YXRlLCBmbGFn
cykKLXsKLX0KLQotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlJiBzdGF0ZUNoYW5nZSkKLSAgICA6IG1fc3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2UpCitT
ZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQorICAg
IDogbV9zdGF0ZShzdGF0ZSkKIHsKIH0KIAogdm9pZCBTZXRTdGF0ZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQogewotICAgIG1fc3RhdGVDaGFuZ2UuYXBwbHkoY29udGV4dCk7Cisg
ICAgY29udGV4dC5tZXJnZVN0YXRlQ2hhbmdlcyhtX3N0YXRlKTsKIH0KIAotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBzdGF0ZSkK
K3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRT
dGF0ZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0ZS5zdGF0ZUNoYW5nZSgpOworICAgIHRzIDw8
IGl0ZW0uc3RhdGUoKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLXZvaWQgU2V0TGluZUNhcDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGlu
ZUNhcChtX2xpbmVDYXApOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNhcCkKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkpOwotICAgIHJldHVybiB0czsKLX0K
LQotdm9pZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAotewotICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLWFy
cmF5IiwgbGluZURhc2guZGFzaEFycmF5KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1v
ZmZzZXQiLCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7Ci19Ci0KLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpv
aW4pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpvaW4iLCBsaW5lSm9pbi5saW5lSm9p
bigpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1p
dChtX21pdGVyTGltaXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKLXsKLSAgICB0cy5k
dW1wUHJvcGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1pdC5taXRlckxpbWl0KCkpOwotICAg
IHJldHVybiB0czsKLX0KLQotdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLX0KLQogdm9p
ZCBDbGlwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29u
dGV4dC5jbGlwKG1fcmVjdCk7CkBAIC02NTcsMzAgKzU0MiwxNSBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQm
IGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFJl
Y3QobV9yZWN0LCBtX2NvbG9yLCBtX29wLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJl
Y3QmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwot
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0g
ICAgcmV0dXJuIHRzOwotfQotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1f
cmVjdCwgbV9jb2xvciwgbV9ibGVuZE1vZGUpOworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
KG1fcmVjdCwgbV9jb2xvcik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUm91bmRlZFJlY3QmIGl0ZW0pCiB7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yb3VuZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1v
ZGUiLCBpdGVtLmJsZW5kTW9kZSgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTc2OCw4ICs2
MzgsOCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmlsbEVsbGlwc2UmIGl0ZW0pCiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1QYWludEZyYW1l
Rm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlm
aWVyKCkpCitQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
cklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKKyAg
ICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5h
dGlvbikKIHsKIH0KQEAgLTEwMTEsMTkgKzg4MSwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlwZSkKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OlJlc3RvcmU6IHRzIDw8ICJyZXN0b3JlIjsgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6VHJhbnNsYXRlOiB0cyA8PCAidHJhbnNsYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOiB0cyA8PCAicm90YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2NhbGU6IHRzIDw8ICJzY2FsZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENU
TTogdHMgPDwgInNldC1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTTogdHMgPDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRJbmxpbmVGaWxsQ29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLWZpbGwtY29sb3IiOyBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogdHMgPDwgInNldC1p
bmxpbmUtc3Ryb2tlLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tl
VGhpY2tuZXNzOiB0cyA8PCAic2V0LXN0cm9rZS10aGlja25lc3MiOyBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVDYXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVy
LWxpbWl0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjogdHMgPDwgImNsaXAtdG8t
aW1hZ2UtYnVmZmVyIjsgYnJlYWs7CkBAIC0xMDQ2LDcgKzkwNyw2IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0OiB0cyA8PCAiZmlsbC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciI7
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB0cyA8PCAi
ZmlsbC1yZWN0LXdpdGgtZ3JhZGllbnQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
Q29tcG9zaXRlZFJlY3Q6IHRzIDw8ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogdHMgPDwgImZpbGwtcm91bmRlZC1yZWN0
IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHRz
IDw8ICJmaWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiOyBicmVhazsKICNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKQEAgLTEwNzgsNyArOTM4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlw
ZTo6QXBwbHlGaWxsUGF0dGVybjogdHMgPDwgImFwcGx5LWZpbGwtcGF0dGVybiI7IGJyZWFrOwog
I2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogdHMgPDwg
ImFwcGx5LWRldmljZS1zY2FsZS1mYWN0b3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclNoYWRvdzogdHMgPDwgImNsZWFyLXNoYWRvdyI7IGJyZWFrOwogICAgIH0KICAgICByZXR1
cm4gdHM7CiB9CkBAIC0xMDg4LDIxICs5NDcsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAK
ICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRl
OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxUcmFuc2xhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Um90YXRl
PigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8U2NhbGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldENUTToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8Q29uY2F0ZW5hdGVDVE0+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5s
aW5lRmlsbENvbG9yPigpOwogICAgICAgICBicmVhazsKQEAgLTExMTUsMTggKzk1OSw2IEBAIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3Rh
dGU+KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0g
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVDYXA+KCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRM
aW5lRGFzaD4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpv
aW46Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVKb2luPigpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBpdGVt
LmdldDxTZXRNaXRlckxpbWl0PigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwOgogICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwPigpOwogICAgICAgICBicmVhazsK
QEAgLTExOTMsOSArMTAyNSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFk
aWVudDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCk7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpOwotICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjcxLDcgKzEx
MDAsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxl
IGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogICAgIGNhc2Ug
SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclNoYWRvdzoKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IDk3Y2I1ZmM4ZDA0YmE4NjYyYjcyYzdkZGVl
YmM0NDE1NWMyODI1YjcuLmU4MWJiMzQ2YzllZmViZTk2YTY1MGQ3NTQ1YTgxZjYxNmI3ZDZhOWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtODUsMTA0ICs4NSw2IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogfTsKIAotY2xhc3MgVHJhbnNsYXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlRyYW5zbGF0ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpCi0gICAgICAgIDogbV94KHgpCi0gICAgICAgICwgbV95KHkpCi0gICAgewotICAgIH0K
LQotICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29u
c3QgeyByZXR1cm4gbV95OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1feCB7IDAgfTsKLSAg
ICBmbG9hdCBtX3kgeyAwIH07Ci19OwotCi1jbGFzcyBSb3RhdGUgewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90YXRlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBSb3RhdGUoZmxvYXQg
YW5nbGUpCi0gICAgICAgIDogbV9hbmdsZShhbmdsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxv
YXQgYW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZs
b2F0IG1fYW5nbGUgeyAwIH07IC8vIEluIHJhZGlhbnMuCi19OwotCi1jbGFzcyBTY2FsZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpTY2FsZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAg
U2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgICAgICA6IG1fc2l6ZShzaXplKQotICAg
IHsKLSAgICB9Ci0KLSAgICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBGbG9hdFNpemUgbV9zaXplOwotfTsKLQotY2xh
c3MgU2V0Q1RNIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlNldENUTTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOwotCi0gICAgU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQot
ICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9y
bTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19Owot
Ci1jbGFzcyBDb25jYXRlbmF0ZUNUTSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgQ29uY2F0ZW5hdGVDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNm
b3JtKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKLX07Ci0KIGNsYXNzIFNldElubGluZUZpbGxDb2xvciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I7CkBAIC0yNDcsMTAgKzE0OSw4IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQot
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIHsgcmV0dXJuIG1f
c3RhdGVDaGFuZ2U7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTZXRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXIm
KTsKQEAgLTI1OCw0MDQgKzE1OCwyNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKTsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwotCi0gICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgbV9zdGF0ZUNoYW5nZTsKKyAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZSBtX3N0YXRlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgU2V0
U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGF1dG8gY2hhbmdl
RmxhZ3MgPSBtX3N0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3M7Ci0gICAgZW5jb2RlciA8PCBjaGFu
Z2VGbGFnczsKLQotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZUNoYW5nZS5tX3N0YXRlOwotCi0g
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VH
cmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0cm9rZUdyYWRpZW50KTsK
LSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgfQotCi0gICAg
aWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0
ZXJuQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0gICAg
ICAgIGVuY29kZXIgPDwgKnN0YXRlLnN0cm9rZVBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNo
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFu
Z2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5maWxsR3JhZGllbnQpOwotICAgICAgICBlbmNv
ZGVyIDw8ICpzdGF0ZS5maWxsR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAg
ICAgICAgQVNTRVJUKHN0YXRlLmZpbGxQYXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3Rh
dGUuZmlsbFBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwg
c3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0JsdXI7
Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIGVuY29kZXIg
PDwgc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFu
Z2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlm
IChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JD
aGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZUNvbG9yOwotCi0gICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFu
Z2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmZpbGxDb2xvcjsKLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2Up
KQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuZmlsbFJ1bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkp
Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBpZiAo
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5n
ZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYmxlbmRNb2RlOwotCi0gICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5Q2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYWxwaGE7Ci0K
LSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkQW50aWFs
aWFzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hv
dWxkU21vb3RoRm9udHM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM7CisgICAgZW5jb2RlciA8PCBtX3N0YXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgogc3RkOjpvcHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewotICAgIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOwotICAgIGRlY29kZXIgPj4gY2hhbmdlRmxh
Z3M7Ci0gICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29u
dGV4dFN0YXRlPiBzdGF0ZTsKKyAgICBkZWNvZGVyID4+IHN0YXRlOworICAgIGlmICghc3RhdGUp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZSBzdGF0ZUNoYW5nZTsKLSAgICBzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzID0gKmNo
YW5nZUZsYWdzOwotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBh
dXRvIHN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAg
aWYgKCFzdHJva2VHcmFkaWVudCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoKnN0
cm9rZUdyYWRpZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsK
LSAgICAgICAgYXV0byBzdHJva2VQYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOwot
ICAgICAgICBpZiAoIXN0cm9rZVBhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1v
dmUoKnN0cm9rZVBhdHRlcm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2Up
KSB7Ci0gICAgICAgIGF1dG8gZmlsbEdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVy
KTsKLSAgICAgICAgaWYgKCFmaWxsR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RG
TW92ZSgqZmlsbEdyYWRpZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2Up
KSB7Ci0gICAgICAgIGF1dG8gZmlsbFBhdHRlcm4gPSBQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7
Ci0gICAgICAgIGlmICghZmlsbFBhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3Zl
KCpmaWxsUGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+IHNoYWRvd09mZnNldDsKLSAgICAgICAgZGVjb2Rl
ciA+PiBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgIGlmICghc2hhZG93T2Zmc2V0KQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNo
YWRvd09mZnNldCA9ICpzaGFkb3dPZmZzZXQ7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9h
dD4gc2hhZG93Qmx1cjsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dCbHVyOwotICAgICAgICBp
ZiAoIXNoYWRvd0JsdXIpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93Qmx1ciA9ICpzaGFkb3dCbHVyOwotCi0gICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IHNoYWRvd0NvbG9yOwotICAgICAgICBkZWNvZGVyID4+
IHNoYWRvd0NvbG9yOwotICAgICAgICBpZiAoIXNoYWRvd0NvbG9yKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0Nv
bG9yID0gKnNoYWRvd0NvbG9yOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVz
TW9kZT4gc2hhZG93UmFkaXVzTW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dSYWRpdXNN
b2RlOwotICAgICAgICBpZiAoIXNoYWRvd1JhZGl1c01vZGUpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9IFdURk1vdmUoKnNoYWRvd1JhZGl1c01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VUaGlja25lc3NDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHN0cm9r
ZVRoaWNrbmVzczsKLSAgICAgICAgZGVjb2RlciA+PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAg
IGlmICghc3Ryb2tlVGhpY2tuZXNzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9ICpzdHJva2VU
aGlja25lc3M7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpIHsKLSAg
ICAgICAgc3RkOjpvcHRpb25hbDxUZXh0RHJhd2luZ01vZGVGbGFncz4gdGV4dERyYXdpbmdNb2Rl
OwotICAgICAgICBkZWNvZGVyID4+IHRleHREcmF3aW5nTW9kZTsKLSAgICAgICAgaWYgKCF0ZXh0
RHJhd2luZ01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAg
IHN0YXRlQ2hhbmdlLm1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gV1RGTW92ZSgqdGV4dERyYXdp
bmdNb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8Q29sb3I+IHN0cm9rZUNvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHN0
cm9rZUNvbG9yOwotICAgICAgICBpZiAoIXN0cm9rZUNvbG9yKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZUNvbG9y
ID0gKnN0cm9rZUNvbG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKSB7Ci0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGZpbGxDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+
PiBmaWxsQ29sb3I7Ci0gICAgICAgIGlmICghZmlsbENvbG9yKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxDb2xvciA9
ICpmaWxsQ29sb3I7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkgewotICAg
ICAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdHJva2VTdHlsZSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTsKLSAgICB9
Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8V2lu
ZFJ1bGU+IGZpbGxSdWxlOwotICAgICAgICBkZWNvZGVyID4+IGZpbGxSdWxlOwotICAgICAgICBp
ZiAoIWZpbGxSdWxlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAg
ICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxSdWxlID0gKmZpbGxSdWxlOwotICAgIH0KLQotICAg
IGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8
Q29tcG9zaXRlT3BlcmF0b3I+IGNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBkZWNvZGVyID4+
IGNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBpZiAoIWNvbXBvc2l0ZU9wZXJhdG9yKQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0
YXRlLmNvbXBvc2l0ZU9wZXJhdG9yID0gKmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIH0KLQotICAg
IGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpCbGVuZE1vZGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2Rl
PiBibGVuZE1vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgICAgICBpZiAo
IWJsZW5kTW9kZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAg
c3RhdGVDaGFuZ2UubV9zdGF0ZS5ibGVuZE1vZGUgPSAqYmxlbmRNb2RlOwotICAgIH0KLQotICAg
IGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9w
dGlvbmFsPEludGVycG9sYXRpb25RdWFsaXR5PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5Owot
ICAgICAgICBkZWNvZGVyID4+IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGlm
ICghaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25R
dWFsaXR5ID0gKmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgfQotCi0gICAgaWYgKHN0
YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFs
cGhhQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBhbHBoYTsKLSAgICAg
ICAgZGVjb2RlciA+PiBhbHBoYTsKLSAgICAgICAgaWYgKCFhbHBoYSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5hbHBoYSA9
ICphbHBoYTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkgewotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAgZGVjb2Rl
ciA+PiBzaG91bGRBbnRpYWxpYXM7Ci0gICAgICAgIGlmICghc2hvdWxkQW50aWFsaWFzKQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0
YXRlLnNob3VsZEFudGlhbGlhcyA9ICpzaG91bGRBbnRpYWxpYXM7Ci0gICAgfQotCi0gICAgaWYg
KHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+
IHNob3VsZFNtb290aEZvbnRzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFNtb290aEZvbnRz
OwotICAgICAgICBpZiAoIXNob3VsZFNtb290aEZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFNtb290aEZv
bnRzID0gKnNob3VsZFNtb290aEZvbnRzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5t
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250czsKLSAgICAgICAgaWYgKCFzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gKnNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250czsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXND
aGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAg
ICAgIGlmICghc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMgPSAqc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsgeyBzdGF0ZUNoYW5nZSB9IH07Ci19Ci0KLWNsYXNzIFNldExpbmVDYXAgewotcHVibGljOgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGlu
ZUNhcDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0
TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi0gICAgICAgIDogbV9saW5lQ2FwKGxpbmVDYXApCi0g
ICAgewotICAgIH0KLQotICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
ZUNhcDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMaW5lQ2FwIG1fbGluZUNhcDsKLX07Ci0KLWNsYXNz
IFNldExpbmVEYXNoIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVEYXNoOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNo
QXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgICAgIDogbV9kYXNoQXJyYXkoZGFzaEFycmF5
KQotICAgICAgICAsIG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5
OyB9Ci0gICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsg
fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxT
ZXRMaW5lRGFzaD4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBEYXNoQXJyYXkg
bV9kYXNoQXJyYXk7Ci0gICAgZmxvYXQgbV9kYXNoT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KLXZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAotewotICAgIGVuY29kZXIgPDwgbV9kYXNoQXJyYXk7Ci0gICAgZW5jb2RlciA8PCBtX2Rh
c2hPZmZzZXQ7CisgICAgcmV0dXJuIFNldFN0YXRlKCpzdGF0ZSk7CiB9CiAKLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1zdGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxEYXNoQXJyYXk+IGRh
c2hBcnJheTsKLSAgICBkZWNvZGVyID4+IGRhc2hBcnJheTsKLSAgICBpZiAoIWRhc2hBcnJheSkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+
IGRhc2hPZmZzZXQ7Ci0gICAgZGVjb2RlciA+PiBkYXNoT2Zmc2V0OwotICAgIGlmICghZGFzaE9m
ZnNldCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqZGFz
aEFycmF5LCAqZGFzaE9mZnNldCB9fTsKLX0KLQotY2xhc3MgU2V0TGluZUpvaW4gewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0
TGluZUpvaW47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAg
IFNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotICAgICAgICA6IG1fbGluZUpvaW4obGlu
ZUpvaW4pCi0gICAgewotICAgIH0KLQotICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5lSm9pbjsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMaW5lSm9pbiBtX2xpbmVKb2lu
OwotfTsKLQotY2xhc3MgU2V0TWl0ZXJMaW1pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRNaXRlckxpbWl0KGZs
b2F0IG1pdGVyTGltaXQpCi0gICAgICAgIDogbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi0gICAg
ewotICAgIH0KLQotICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVy
TGltaXQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9taXRlckxpbWl0OwotfTsKLQotY2xh
c3MgQ2xlYXJTaGFkb3cgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7Ci19OwotCiAvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2luZyBpdGVt
PwogY2xhc3MgQ2xpcCB7CiBwdWJsaWM6CkBAIC0xNjEyLDkxICsxMTM0LDIwIEBAIHN0ZDo6b3B0
aW9uYWw8RmlsbFJlY3RXaXRoR3JhZGllbnQ+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlCiAgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0KCkgfX07
CiB9CiAKLWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKLQotICAgIEZpbGxDb21w
b3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgICAgIDogbV9yZWN0
KHJlY3QpCi0gICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBtX29wKG9wKQotICAg
ICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYgY29s
b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9Ci0gICAgQmxlbmRNb2RlIGJs
ZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsgfQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRl
Y29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBD
b2xvciBtX2NvbG9yOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2Rl
IG1fYmxlbmRNb2RlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbENv
bXBvc2l0ZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBt
X29wOwotICAgIGVuY29kZXIgPDwgbV9ibGVuZE1vZGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1zdGQ6Om9wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gRmlsbENvbXBvc2l0ZWRS
ZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7
Ci0gICAgZGVjb2RlciA+PiBjb2xvcjsKLSAgICBpZiAoIWNvbG9yKQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3A7
Ci0gICAgZGVjb2RlciA+PiBvcDsKLSAgICBpZiAoIW9wKQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBk
ZWNvZGVyID4+IGJsZW5kTW9kZTsKLSAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVu
ZE1vZGUgfX07Ci19Ci0KIGNsYXNzIEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJl
Y3Q7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIEZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgOiBtX3JlY3Qo
cmVjdCkKICAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJs
ZW5kTW9kZSkKICAgICB7CiAgICAgfQogCiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29s
b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2Rl
ciYpOwpAQCAtMTcwOSw3ICsxMTYwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGbG9hdFJv
dW5kZWRSZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwotICAgIEJsZW5kTW9kZSBtX2Js
ZW5kTW9kZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xNzE3LDcgKzExNjcs
NiBAQCB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB7CiAgICAgZW5jb2RlciA8PCBtX3JlY3Q7CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAg
IGVuY29kZXIgPDwgbV9ibGVuZE1vZGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBA
IC0xNzMzLDEyICsxMTgyLDcgQEAgc3RkOjpvcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IEZpbGxS
b3VuZGVkUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2Rl
PiBibGVuZE1vZGU7Ci0gICAgZGVjb2RlciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1v
ZGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3Qs
ICpjb2xvciwgKmJsZW5kTW9kZSB9fTsKKyAgICByZXR1cm4geyB7ICpyZWN0LCAqY29sb3IgfSB9
OwogfQogCiBjbGFzcyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSB7CkBAIC0xOTYxLDcgKzE0MDUs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0g
ICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbik7CisgICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxh
eWVySWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9
CkBAIC0yMjU2LDEzICsxNzAwLDExIEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFy
aWFudAogICAgIDwgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcgogICAgICwgQmVnaW5UcmFuc3BhcmVu
Y3lMYXllcgogICAgICwgQ2xlYXJSZWN0Ci0gICAgLCBDbGVhclNoYWRvdwogICAgICwgQ2xpcAog
ICAgICwgQ2xpcE91dAogICAgICwgQ2xpcE91dFRvUGF0aAogICAgICwgQ2xpcFBhdGgKICAgICAs
IENsaXBUb0ltYWdlQnVmZmVyCi0gICAgLCBDb25jYXRlbmF0ZUNUTQogICAgICwgRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcgogICAgICwgRHJhd0VsbGlwc2UKICAgICAsIERyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyCkBAIC0yMjc4LDcgKzE3MjAsNiBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBz
dGQ6OnZhcmlhbnQKICAgICAsIERyYXdSZWN0CiAgICAgLCBEcmF3U3lzdGVtSW1hZ2UKICAgICAs
IEVuZFRyYW5zcGFyZW5jeUxheWVyCi0gICAgLCBGaWxsQ29tcG9zaXRlZFJlY3QKICAgICAsIEZp
bGxFbGxpcHNlCiAgICAgLCBGaWxsUGF0aAogICAgICwgRmlsbFJlY3QKQEAgLTIyODgsMjMgKzE3
MjksMTUgQEAgdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgLCBGaWxs
Um91bmRlZFJlY3QKICAgICAsIEZsdXNoQ29udGV4dAogICAgICwgUmVzdG9yZQotICAgICwgUm90
YXRlCiAgICAgLCBTYXZlCi0gICAgLCBTY2FsZQotICAgICwgU2V0Q1RNCiAgICAgLCBTZXRJbmxp
bmVGaWxsQ29sb3IKICAgICAsIFNldElubGluZVN0cm9rZUNvbG9yCi0gICAgLCBTZXRMaW5lQ2Fw
Ci0gICAgLCBTZXRMaW5lRGFzaAotICAgICwgU2V0TGluZUpvaW4KLSAgICAsIFNldE1pdGVyTGlt
aXQKICAgICAsIFNldFN0YXRlCiAgICAgLCBTZXRTdHJva2VUaGlja25lc3MKICAgICAsIFN0cm9r
ZUVsbGlwc2UKICAgICAsIFN0cm9rZUxpbmUKICAgICAsIFN0cm9rZVBhdGgKICAgICAsIFN0cm9r
ZVJlY3QKLSAgICAsIFRyYW5zbGF0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAg
ICAgLCBGaWxsTGluZQpAQCAtMjM0MSwyMCArMTc3NCwxMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlNhdmUsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlLAot
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlLAotICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2NhbGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTZXRDVE0sCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9r
ZUNvbG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhp
Y2tuZXNzLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGUsCi0g
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwLAotICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZURhc2gsCi0gICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbiwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNldE1pdGVyTGltaXQsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpDbGVhclNoYWRvdywKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkNsaXAsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0LAogICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC0y
Mzc2LDcgKzE3OTksNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RmlsbFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0
V2l0aEdyYWRpZW50LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENv
bXBvc2l0ZWRSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUsCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggZWVlNDQ3MWQzNTRlNzUxNTMxMjUx
ODlkZmNjOTQxOGEzOTQ1MTRhMS4uYTUzNTA5OTgwYTkzMTQwN2U5MWU1NGY5ZjkyMzI1Y2U1ZTVk
MDVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNDIs
MzUwICs0MiwxODkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlz
dCB7CiAKLVJlY29yZGVyOjpSZWNvcmRlcihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
aW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVj
b25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRl
Y29uc3RydWN0RHJhd0dseXBocykKLXsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUs
IGluaXRpYWxDVE0sIGluaXRpYWxDVE0ubWFwUmVjdChpbml0aWFsQ2xpcCkgfSk7Ci19CitSZWNv
cmRlcjo6UmVjb3JkZXIoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJh
d0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBHcmFwaGljc0NvbnRleHQoaW5p
dGlhbENsaXAsIHsgfSwgIGluaXRpYWxDVE0pCisgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigq
dGhpcywgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogCi1SZWNvcmRlcjo6flJlY29yZGVyKCkKIHsK
LSAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywg
aXQgaW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgogfQogCi1zdGF0aWMgYm9vbCBj
b250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNo
YW5nZUZsYWdzKQotewotICAgIHN0YXRpYyBjb25zdGV4cHIgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgaW5saW5lU3RhdGVDaGFuZ2VGbGFncyB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwKLSAgICB9OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzICE9
IChjaGFuZ2VGbGFncyAmIGlubGluZVN0YXRlQ2hhbmdlRmxhZ3MpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRy
eUdldEFzU1JHQkFCeXRlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7CitSZWNvcmRlcjo6flJl
Y29yZGVyKCkgPSBkZWZhdWx0OwogCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUuZmls
bENvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVt
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKK3ZvaWQgUmVjb3JkZXI6OnNh
dmUoKQogewotICAgIGlmICghY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNoYW5nZXMs
IGNoYW5nZUZsYWdzKSkgewotICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gY2hhbmdlcy5tX3N0
YXRlLnN0cm9rZVBhdHRlcm4pCi0gICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJu
LT50aWxlSW1hZ2UoKSk7Ci0gICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3Rh
dGUuZmlsbFBhdHRlcm4pCi0gICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50
aWxlSW1hZ2UoKSk7Ci0gICAgICAgIHJlY29yZFNldFN0YXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hh
bmdlRmxhZ3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAg
ICAgIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29s
b3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBy
ZWNvcmRTZXRTdHJva2VUaGlja25lc3MoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldElubGluZUZpbGxDb2xvcigqY2hhbmdl
cy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0OjpzYXZlKCk7CisgICAgcmVjb3JkU2F2ZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjph
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpCit2b2lkIFJlY29yZGVyOjpyZXN0b3Jl
KCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBjdXJyZW50bHkgaW52b2tlZCBpbiBhbiBhZC1o
b2MgbWFubmVyIHdoZW4gcmVjb3JkaW5nIGRyYXdpbmcgaXRlbXMuIFdlIHNob3VsZCBjb25zaWRl
ciBlaXRoZXIKLSAgICAvLyBzcGxpdHRpbmcgR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5nZXMg
aW50byBpbmRpdmlkdWFsIGRpc3BsYXkgbGlzdCBpdGVtcywgb3IgcmVmYWN0b3JpbmcgdGhlIGNv
ZGUgc3VjaCB0aGF0Ci0gICAgLy8gdGhpcyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBpbnZva2Vk
IHdoZW4gcmVjb3JkaW5nIGEgZHJhd2luZyBpdGVtLgotICAgIGF1dG8mIHN0YXRlQ2hhbmdlcyA9
IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOwotICAgIGF1dG8gY2hhbmdlc0Zyb21MYXN0U3Rh
dGUgPSBzdGF0ZUNoYW5nZXMuY2hhbmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJh
d2luZ1N0YXRlKTsKLSAgICBpZiAoIWNoYW5nZXNGcm9tTGFzdFN0YXRlKQorICAgIGlmICghc3Rh
Y2tTaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5
TGlzdHMsIHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RT
dGF0ZSkpOwotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShzdGF0ZUNoYW5nZXMsIGNoYW5nZXNG
cm9tTGFzdFN0YXRlKTsKLSAgICBzdGF0ZUNoYW5nZXMubV9jaGFuZ2VGbGFncyA9IHsgfTsKLSAg
ICBjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlID0gc3RhdGVDaGFuZ2VzLm1fc3RhdGU7
Ci19Ci0KLWNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBSZWNvcmRlcjo6c3RhdGUoKSBjb25z
dAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5tX3N0YXRlOwotfQot
Ci12b2lkIFJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQot
ewotICAgIGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdz
KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0g
ICAgcmVjb3JkU2V0TGluZUNhcChsaW5lQ2FwKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0g
ICAgcmVjb3JkU2V0TGluZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgcmVjb3JkU2V0
TGluZUpvaW4obGluZUpvaW4pOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZs
b2F0IG1pdGVyTGltaXQpCi17Ci0gICAgcmVjb3JkU2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKKyAgICByZWNvcmRSZXN0b3JlKCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmls
dGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdGF0ZUNo
YW5nZXMoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIGVmZmVjdCA6IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVJbWFnZSkpIHsKLSAgICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1h
Z2U+KGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFn
ZS5zb3VyY2VJbWFnZSgpKSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rmls
dGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJl
c3VsdHMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFzb3VyY2VJbWFnZSkgewotICAgICAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihu
dWxscHRyLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5n
ZXMoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VV
c2UoKnNvdXJjZUltYWdlKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0
cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQogCi12b2lk
IFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlw
aHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhp
bmdNb2RlKTsKLX0KKyAgICBpZiAoc3RhdGUoKS5oYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpKSB7
CisgICAgICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1c2gpKQorICAgICAgICAgICAgcmVjb3JkU2V0SW5saW5lRmls
bENvbG9yKCpmaWxsQ29sb3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CiAKLXZvaWQgUmVjb3Jk
ZXI6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1
bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhp
bmdNb2RlIHNtb290aGluZ01vZGUpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7
Ci0gICAgcmVjb3JkRHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9j
YWxBbmNob3IsIHNtb290aGluZ01vZGUpOwotfQorICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2Vz
KCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKQor
ICAgICAgICAgICAgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoKnN0cm9rZUNvbG9yKCkudHJ5
R2V0QXNTUkdCQUJ5dGVzKCkpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIGlmIChz
dGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpT
dHJva2VUaGlja25lc3MpKQorICAgICAgICAgICAgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKHN0
cm9rZVRoaWNrbmVzcygpKTsKIAotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZm
ZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVm
ZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIGRpZEFwcGx5U3RhdGVD
aGFuZ2VzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZWNvcmREcmF3SW1hZ2VC
dWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0g
ICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJj
ZVVzZShpbWFnZSk7Ci0gICAgcmVjb3JkRHJhd05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0
ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgcmVjb3Jk
RHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lk
IFJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNv
dXJjZVVzZShpbWFnZSk7Ci0gICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVy
bihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2Uo
aW1hZ2VCdWZmZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1h
Z2VCdWZmZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdl
cygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCkpIHsK
KyAgICAgICAgaWYgKGF1dG8gcGF0dGVybiA9IGZpbGxQYXR0ZXJuKCkpCisgICAgICAgICAgICBy
ZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7CiAgICAgfQogCi0gICAgcmVj
b3JkRHJhd1BhdHRlcm4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpzYXZlKCkKLXsKLSAgICByZWNvcmRTYXZlKCk7
Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2
ZSgpKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKCFtX3N0YXRl
U3RhY2suc2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygp
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkgewor
ICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpKQorICAgICAgICAgICAg
cmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOworICAgIH0KIAotICAgIG1f
c3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgcmVjb3JkUmVzdG9yZSgpOworICAgIHJlY29y
ZFNldFN0YXRlKHN0YXRlKCkpOworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIGN1cnJlbnRT
dGF0ZSgpLnRyYW5zbGF0ZSh4LCB5KTsKLSAgICByZWNvcmRUcmFuc2xhdGUoeCwgeSk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyNpZiBVU0UoQ0cp
Cit2b2lkIFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGN1cnJlbnRTdGF0
ZSgpLnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgcmVjb3JkUm90YXRlKGFuZ2xlSW5SYWRp
YW5zKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0
dGVybigpOwogfQogCi12b2lkIFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUp
Cit2b2lkIFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBjdXJyZW50U3RhdGUo
KS5zY2FsZShzaXplKTsKLSAgICByZWNvcmRTY2FsZShzaXplKTsKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKIH0KKyNlbmRpZgogCi12b2lk
IFJlY29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2
b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKQogewotICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm47
CisgICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxl
RmFjdG9yKTsKIAotICAgIGN1cnJlbnRTdGF0ZSgpLmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAg
IHJlY29yZENvbmNhdGVuYXRlQ1RNKHRyYW5zZm9ybSk7CisgICAgLy8gRklYTUU6IHRoaXMgY2hh
bmdlcyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVk
IGV4dGVudHMuCisgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8K
KyAgICByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQordm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQog
ewotICAgIGN1cnJlbnRTdGF0ZSgpLnNldENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29yZFNldENU
TSh0cmFuc2Zvcm0pOwotfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKLUFmZmluZVRyYW5z
Zm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxl
KSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07Ci19CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZSgpOwogCi12b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKKyAgICBzZXRBbHBoYShvcGFjaXR5KTsKICAgICByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxh
eWVyKG9wYWNpdHkpOwotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3Qo
KS5jbG9uZUZvclRyYW5zcGFyZW5jeUxheWVyKCkpOwogfQogCiB2b2lkIFJlY29yZGVyOjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKTsKLSAgICByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIG1fc3RhdGVTdGFj
ay5yZW1vdmVMYXN0KCk7Ci19CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotdm9pZCBSZWNv
cmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25l
c3MpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNv
cmREcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotfQotCi12b2lkIFJlY29yZGVyOjpk
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MikKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29y
ZERyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKLXZv
aWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChGbG9hdFBvaW50KCks
IHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVM
aW5lcyk7CisgICAgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBSZWNv
cmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLSAgICByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKKyAg
ICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsK
KyAgICByZWNvcmRDbGlwKHJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVs
ZSk7CisgICAgcmVjb3JkQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogfQogCi12b2lkIFJlY29y
ZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmREcmF3UGF0aChwYXRoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZENsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3Jk
RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVj
b3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKLX0KKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVm
ZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGltYWdl
QnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0jaWYg
UExBVEZPUk0oTUFDKQotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFn
ZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9y
JikKK3ZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29y
ZENsZWFyUmVjdChyZWN0KTsKIH0KLSNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0KHJl
Y3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3RXaXRo
Q29sb3IocmVjdCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVj
b3JkRmlsbFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29yZGVy
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0
LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCit2b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
Ci0gICAgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
cmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29y
ZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZEZpbGxFbGxpcHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYg
KHBhdGguaGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQwMiwyMSArMjQxLDIxIEBAIHZv
aWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkRmlsbFBh
dGgocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsRWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIHJlY29yZFN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCkKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgcmVjb3JkU3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkU3Ryb2tlRWxsaXBzZShyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdl
SXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAg
ICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQzMywxNDggKzI3Miwx
NjggQEAgdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHJl
Y29yZFN0cm9rZVBhdGgocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVD
aGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3QpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1JlY3QocmVjdCwgYm9yZGVy
VGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQ2xlYXJSZWN0KHJlY3QpOworICAgIGFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwogfQogCi0j
aWYgVVNFKENHKQotdm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVj
b3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVy
bigpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0VsbGlwc2UocmVj
dCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBSZWNvcmRl
cjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQYXRoKHBhdGgpOwogfQotI2VuZGlmCiAK
LXZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRl
cjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5k
cy5pbnRlcnNlY3QoY3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocmVjdCkpOwotICAgIHJlY29y
ZENsaXAocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rm9j
dXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICByZWNvcmRDbGlwT3V0KHJlY3Qp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3Rz
KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIFJlY29yZGVyOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7
Ci0gICAgcmVjb3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3
aW5kUnVsZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAgY3VycmVudFN0YXRl
KCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QoY3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocGF0aC5m
YXN0Qm91bmRpbmdSZWN0KCkpKTsKLSAgICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KKyNlbmRpZgogCi1JbnRSZWN0IFJlY29yZGVyOjpj
bGlwQm91bmRzKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgaWYgKGF1dG8gaW52ZXJzZSA9IGN1cnJlbnRTdGF0ZSgpLmN0bS5pbnZlcnNlKCkpCi0gICAg
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGludmVyc2UtPm1hcFJlY3QoY3VycmVudFN0YXRl
KCkuY2xpcEJvdW5kcykpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIp
KSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICAvLyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFs
IHJlY3QuCi0gICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5z
Zm9ybSBiZWhhdmlvci4KLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUo
KS5jbGlwQm91bmRzKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdJ
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQog
Ci12b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVy
ZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykK
IHsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcik7Ci0gICAgcmVjb3JkQ2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0KTsKLX0KKyAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkp
IHsKKyAgICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQo
KSk7CisgICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3VyY2VJbWFnZSgp
KSkgeworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFJl
Y29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBz
dGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8
UmVuZGVyaW5nTWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QudmFsdWVfb3IoUmVuZGVy
aW5nTWV0aG9kOjpEaXNwbGF5TGlzdCkpOwotfQorICAgIGlmICghc291cmNlSW1hZ2UpIHsKKyAg
ICAgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1h
Z2VCdWZmZXIobnVsbHB0ciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgICAgICByZXR1
cm47CisgICAgfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24pCi17Ci0gICAgaWYgKCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGlm
ICghcmVjb3JkUmVzb3VyY2VVc2UoKnNvdXJjZUltYWdlKSkgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJl
Y3QsIGZpbHRlciwgcmVzdWx0cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQVNTRVJU
KHBsYXllci5pZGVudGlmaWVyKCkpOwotICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5
ZXIsIGRlc3RpbmF0aW9uKTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3Jk
RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmls
dGVyKTsKIH0KLSNlbmRpZgogCi12b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgLy8gV2UgbW9kaWZ5IHRoZSBzdGF0ZSBk
aXJlY3RseSBoZXJlIGluc3RlYWQgb2YgY2FsbGluZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKCkK
LSAgICAvLyBiZWNhdXNlIHRoZSByZWNvcmRlZCBpdGVtIHdpbGwgc2NhbGUoKSB3aGVuIHJlcGxh
eWVkLgotICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHsgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmlj
ZVNjYWxlRmFjdG9yIH0pOworICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdOYXRpdmVJbWFnZShpbWFnZS5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7Cit9CiAKLSAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGlj
aCB3aWxsIGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KLSAgICAvLyBBc3Nl
cnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPwotICAgIHJlY29yZEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwordm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCit7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3U3lz
dGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBS
ZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBo
aWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhp
Y3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdp
dGggRGlzcGxheUxpc3Q6OlJlY29yZGVyLiIpOwotICAgIHJldHVybiByZWN0OworICAgIHJlY29y
ZFJlc291cmNlVXNlKGltYWdlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29y
ZERyYXdQYXR0ZXJuKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
IH0KIAotY29uc3QgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0
ZSgpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwot
ICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VV
c2UoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4o
aW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLVJlY29yZGVyOjpDb250ZXh0U3Rh
dGUmIFJlY29yZGVyOjpjdXJyZW50U3RhdGUoKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVj
b3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKQogewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsK
LSAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoIXBsYXllci5pZGVudGlm
aWVyKCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxh
eWVyLCBkZXN0aW5hdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRp
ZmllcigpLCBkZXN0aW5hdGlvbik7CiB9CisjZW5kaWYKIAotY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBSZWNvcmRlcjo6Y3RtKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAg
cmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAg
IG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBSZWNvcmRl
cjo6Q29udGV4dFN0YXRlOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1
bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhp
bmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICBy
ZWNvcmRSZXNvdXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMs
IGNvdW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6
OkNvbnRleHRTdGF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBSZWNvcmRl
cjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzID0gcmFkMmRl
ZyhzdGF0aWNfY2FzdDxkb3VibGU+KGFuZ2xlSW5SYWRpYW5zKSk7Ci0gICAgY3RtLnJvdGF0ZShh
bmdsZUluRGVncmVlcyk7Ci0gICAgCi0gICAgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uOwotICAg
IHJvdGF0aW9uLnJvdGF0ZShhbmdsZUluRGVncmVlcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICByZWNvcmREcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywg
cHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRl
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIFJlY29yZGVyOjpkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUgc3R5bGUpCiB7Ci0gICAgY3RtLnNjYWxlKHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7
CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgbWF0cml4KQorUmVmUHRyPEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNb2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4g
cmVuZGVyaW5nTWV0aG9kKSBjb25zdAogewotICAgIGN0bSA9IG1hdHJpeDsKKyAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5k
ZXJpbmdNZXRob2Q6OkRpc3BsYXlMaXN0KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRT
dGF0ZTo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorRmxvYXRSZWN0
IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
cGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCiB7Ci0gICAgY3RtICo9IG1hdHJpeDsKKyAgICBX
VEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5v
dCB5ZXQgY29tcGF0aWJsZSB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKKyAgICByZXR1
cm4gcmVjdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDg0NWVjMDA3NzJlZDJjNTRhMWU2Y2IyNmIyMTUx
ZGFiYWE2ZWMwNzUuLmFlMzQzNzliZTY3ZjA1ZTEwNDJmNmFkYzVhYWJmODhjMjcwYzE3MzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjksNyArMjksNiBAQAog
I2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKICNpbmNsdWRlICJEcmF3R2x5cGhzUmVjb3Jk
ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIiAv
LyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIklubGluZVBhdGhEYXRhLmgiCiAjaW5j
bHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MSw3
ICs1MCw3IEBAIGNsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3Jk
ZXIpOwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBSZWNvcmRlcihjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6
Olllcyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOwpAQCAtNjEsNDcgKzYwLDM1
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2F2ZSgpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkUmVzdG9yZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29y
ZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
Q29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworCiAgICAgdmlydHVh
bCB2b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90Pikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNl
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihMaW5lSm9pbikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gMDsKKworI2lmIFVT
RShDRykKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworI2VuZGlmCisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKKwog
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29y
ZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
Q2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2Nh
bEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRE
cmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3Vz
UmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JikgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZp
bGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
ICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmls
bExpbmUoY29uc3QgTGluZURhdGEmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxB
cmMoY29uc3QgQXJjRGF0YSYpID0gMDsKQEAgLTEwOSwxMSArOTYsMTAgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVE
YXRhJikgPSAwOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0
IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCB2b2lkIHJlY29y
ZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pID0gMDsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
U3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
U3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEmKSA9IDA7CkBAIC0xMjEsMTE2ICsxMDcsODEgQEAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBC
ZXppZXJDdXJ2ZURhdGEmKSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ry
b2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCB2
b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkQXBwbHlGaWxsUGF0dGVybigpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0Zv
Y3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMo
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3Rl
bUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyNp
ZiBFTkFCTEUoVklERU8pCisgICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0g
MDsKICNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBG
b250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSos
IHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290
aGluZ01vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHJlY29y
ZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRS
ZXNvdXJjZVVzZShJbWFnZUJ1ZmZlciYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVz
b3VyY2VVc2UoY29uc3QgU291cmNlSW1hZ2UmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29y
ZFJlc291cmNlVXNlKEZvbnQmKSA9IDA7CiAKLSAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKLSAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHM7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZSBsYXN0RHJhd2luZ1N0YXRlOwotCi0gICAgICAgIENvbnRl
eHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsaXApCi0gICAgICAgICAgICA6
IGN0bSh0cmFuc2Zvcm0pCi0gICAgICAgICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKLSAgICAgICAg
ICAgICwgbGFzdERyYXdpbmdTdGF0ZShzdGF0ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgQ29udGV4dFN0YXRlIGNsb25lRm9yU2F2ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIENvbnRleHRTdGF0ZSBzdGF0ZShsYXN0RHJhd2luZ1N0YXRlLCBjdG0sIGNsaXBCb3Vu
ZHMpOwotICAgICAgICAgICAgc3RhdGUuc3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBj
bG9uZUZvclRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
YXV0byBzdGF0ZSA9IGNsb25lRm9yU2F2ZSgpOwotICAgICAgICAgICAgc3RhdGUubGFzdERyYXdp
bmdTdGF0ZS5hbHBoYSA9IDE7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9p
ZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOwotICAgICAgICB2b2lkIHNjYWxlKGNvbnN0
IEZsb2F0U2l6ZSYpOwotICAgICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKTsKLSAgICAgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAg
fTsKLQotICAgIGNvbnN0IFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+JiBzdGF0ZVN0YWNrKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZVN0YWNrOyB9Ci0KLSAgICBjb25zdCBDb250ZXh0U3RhdGUmIGN1
cnJlbnRTdGF0ZSgpIGNvbnN0OwotICAgIENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCk7Ci0K
ICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRp
b25Db2xvclNwYWNlJiwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNZXRob2Q+KSBjb25zdCBvdmVycmlkZTsKKyAgICAKKworICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7CiAKIHByaXZhdGU6
CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBudWxscHRyOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNh
dmUoKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNF
KENHKQotICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBi
b29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgorICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CiAKLSAgICB2
b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotCi0gICAgV0VCQ09SRV9FWFBP
UlQgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgZmluYWw7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBm
aW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cykgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdp
bmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVDYXAoTGlu
ZUNhcCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9rZVBhdHRl
cm4oKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBm
aW5hbDsKLSNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQ
b2ludCwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9h
dFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3lz
dGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9r
ZVN0eWxlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7CiAKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwpAQCAtMjQxLDQwICsxOTIsMjMgQEAg
cHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNv
bnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2
ZSgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVk
ZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKLQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1
bHRzJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5
c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwogI2lmIEVOQUJMRShWSURFTykKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhp
Y3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25z
dDsKLQotICAgIFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+IG1fc3RhdGVTdGFjazsKICAgICBEcmF3
R2x5cGhzUmVjb3JkZXIgbV9kcmF3R2x5cGhzUmVjb3JkZXI7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAppbmRleCAxZmRjNmJhNTZiZmRiMjYz
NmVmYjM0NjJhZGEyYTk5MGQzMzg5OTQ1Li4xZmI0ZGQ3OTVhZTEwYWE4Y2NjYmNkZDgzMTRlZWE4
MDg2ZThkYjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1w
bC5jcHAKQEAgLTQyLDE4ICs0MiwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNl
IERpc3BsYXlMaXN0IHsKIAotUmVjb3JkZXJJbXBsOjpSZWNvcmRlckltcGwoRGlzcGxheUxpc3Qm
IGRpc3BsYXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZs
b2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwg
RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3
R2x5cGhzKQotICAgIDogUmVjb3JkZXIoc3RhdGUsIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBk
ZWNvbnN0cnVjdERyYXdHbHlwaHMpCitSZWNvcmRlckltcGw6OlJlY29yZGVySW1wbChEaXNwbGF5
TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVj
dERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDogUmVjb3JkZXIoaW5pdGlh
bENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGlzcGxh
eUxpc3QoZGlzcGxheUxpc3QpCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywg
c3RyZWFtIDw8ICJcblJlY29yZGluZyB3aXRoIGNsaXAgIiA8PCBpbml0aWFsQ2xpcCk7CiB9CiAK
LVJlY29yZGVySW1wbDo6flJlY29yZGVySW1wbCgpCi17Ci0gICAgQVNTRVJUKHN0YXRlU3RhY2so
KS5zaXplKCkgPT0gMSk7IC8vIElmIHRoaXMgZmlyZXMsIGl0IGluZGljYXRlcyBtaXNtYXRjaGVk
IHNhdmUvcmVzdG9yZS4KLX0KLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNhdmUoKQogewog
ICAgIGFwcGVuZDxTYXZlPigpOwpAQCAtNjQsMzEgKzU5LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZFJlc3RvcmUoKQogICAgIGFwcGVuZDxSZXN0b3JlPigpOwogfQogCi12b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgYXBwZW5k
PFRyYW5zbGF0ZT4oeCwgeSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRSb3RhdGUo
ZmxvYXQgYW5nbGUpCi17Ci0gICAgYXBwZW5kPFJvdGF0ZT4oYW5nbGUpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBh
cHBlbmQ8U2NhbGU+KHNjYWxlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBhcHBlbmQ8U2V0Q1RN
Pih0cmFuc2Zvcm0pOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgYXBwZW5kPENvbmNh
dGVuYXRlQ1RNPih0cmFuc2Zvcm0pOwotfQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0
SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGlubGluZUNvbG9yKQogewogICAgIGFwcGVu
ZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGlubGluZUNvbG9yKTsKQEAgLTEwNCw5MiArNzQsMjYgQEAg
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25l
c3MpCiAgICAgYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4odGhpY2tuZXNzKTsKIH0KIAotdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxh
Z3MpCi17Ci0gICAgYXBwZW5kPFNldFN0YXRlPihzdGF0ZSwgY2hhbmdlRmxhZ3MpOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0g
ICAgYXBwZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBhcnJheSwgZmxvYXQgZGFzaE9mZnNl
dCkKLXsKLSAgICBhcHBlbmQ8U2V0TGluZURhc2g+KGFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0g
ICAgYXBwZW5kPFNldExpbmVKb2luPihqb2luKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZFNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgYXBwZW5kPFNldE1pdGVyTGlt
aXQ+KGxpbWl0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyU2hhZG93KCkK
LXsKLSAgICBhcHBlbmQ8Q2xlYXJTaGFkb3c+KCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXA+
KGNsaXBSZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgYXBwZW5kPENsaXBPdXQ+
KGNsaXBSZWN0KTsKKyAgICBhcHBlbmQ8U2V0U3RhdGU+KHN0YXRlKTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZl
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXBU
b0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwg
ZGVzdGluYXRpb25SZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRU
b1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0
aCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSBydWxlKQotewotICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7
Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcj4gaWRlbnRpZmllcjsKLSAgICBpZiAoc291cmNlSW1hZ2UpCi0gICAgICAgIGlk
ZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7Ci0g
ICAgYXBwZW5kPERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBz
b3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewot
ICAgIGFwcGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9j
YWxBbmNob3IsIG1vZGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwot
fQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGFwcGVuZDxE
cmF3TmF0aXZlSW1hZ2U+KGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7CisgICAgYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKIH0KIAot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lz
dGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3U3lzdGVt
SW1hZ2U+KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIGFwcGVuZDxBcHBseUZp
bGxQYXR0ZXJuPigpOwogfQorI2VuZGlmIC8vIFVTRShDRykKIAotdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogewotICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2VJ
ZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpOworICAgIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihzY2FsZUZhY3Rv
cik7CiB9CiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCkBAIC0yMDIsNDQgKzEwNiwzNCBAQCB2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lM
YXllcj4oKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGFwcGVuZDxEcmF3UmVjdD4o
cmVjdCwgbGluZVdpZHRoKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewot
ICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0
aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsK
LSAgICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3Is
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOworICAgIGFwcGVuZDxD
bGlwPihjbGlwUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUmIHN0eWxlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKGNv
bnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCiB7Ci0gICAgYXBwZW5kPERyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKKyAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBhdGgs
IHJ1bGUpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOwor
ICAgIGFwcGVuZDxDbGlwT3V0PihjbGlwUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8RHJhd1BhdGg+
KHBhdGgpOworICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNS
aW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGlwVG9J
bWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRl
c3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNS
aW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
Q2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0ZvY3Vz
UmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGVh
clJlY3Q+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjU3LDIzICsxNTEsMjIgQEAgdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
ZGllbnQmIGcKICAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KHJlY3QsIGdyYWRpZW50
KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIEJsZW5kTW9kZSBtb2RlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgYXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBtb2RlKTsK
KyAgICBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29sb3IsIG1vZGUpOworICAg
IGFwcGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9y
KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPihyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpOworICAgIGFwcGVuZDxGaWxsRWxs
aXBzZT4ocmVjdCk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewogICAg
IGFwcGVuZDxGaWxsTGluZT4obGluZSk7CkBAIC0yOTMsNyArMTg2LDYgQEAgdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZl
KQogewogICAgIGFwcGVuZDxGaWxsQmV6aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8v
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTMwMSwyNSArMTkzLDE3IEBAIHZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxGaWxs
UGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsK
LX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZDxQYWludEZyYW1l
Rm9yTWVkaWE+KHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGFwcGVuZDxTdHJva2VSZWN0Pihy
ZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAotdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCB3aWR0aCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgd2lkdGgp
OworICAgIGFwcGVuZDxTdHJva2VFbGxpcHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlTGluZShjb25z
dCBMaW5lRGF0YSYgbGluZSkKIHsKICAgICBhcHBlbmQ8U3Ryb2tlTGluZT4obGluZSk7CkBAIC0z
MzksNyArMjIzLDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZl
KGNvbnN0IEJlemllckN1cnZlRGF0YSYgY3VydmUpCiB7CiAgICAgYXBwZW5kPFN0cm9rZUJlemll
ckN1cnZlPihjdXJ2ZSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
IAogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
QEAgLTM0NywzMyArMjMwLDg0IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgYXBwZW5kPFN0cm9rZVBhdGg+KHBhdGgpOwogfQogCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+
KHJlY3QpOworICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kPENsZWFyUmVj
dD4ocmVjdCk7CisgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNp
ZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQoreworICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7Cit9CiAKLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kPEFw
cGx5U3Ryb2tlUGF0dGVybj4oKTsKKyAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOwogfQogCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxBcHBs
eUZpbGxQYXR0ZXJuPigpOworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lk
dGgsIG9mZnNldCwgY29sb3IpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sK
KyAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29s
b3IpOworfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBzY2FsZUZhY3RvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZl
SW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgYXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKKyAgICBh
cHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJh
d1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvblJlY3QpCit7CisgICAgYXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1h
Z2UsIGRlc3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVy
LnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cyk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAg
IGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7
CisgICAgYXBwZW5kPERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIp
LCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RS
ZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisK
KyNpZiBFTkFCTEUoVklERU8pCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZv
ck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKQoreworICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KGlkZW50aWZp
ZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNlbmRpZgorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlw
aHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBj
b25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sK
KyAgICBhcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxv
Y2FsQW5jaG9yLCBtb2RlKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7Cisg
ICAgYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9p
bnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKK30KKwordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7Cisg
ICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKIH0KIAog
Ym9vbCBSZWNvcmRlckltcGw6OnJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBuYXRpdmVJ
bWFnZSkKQEAgLTQxNywyMCArMzUxLDE2IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFp
bnRpbmdFeHRlbnQoZmxvYXQgYmx1clJhZGl1cykKIAogRmxvYXRSZWN0IFJlY29yZGVySW1wbDo6
ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAg
ICBGbG9hdFJlY3QgYm91bmRzID0gcmVjdDsKLSAgICBhdXRvJiBzdGF0ZSA9IGN1cnJlbnRTdGF0
ZSgpOworICAgIGF1dG8gYm91bmRzID0gcmVjdDsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZz
ZXQ7Ci0gICAgZmxvYXQgc2hhZG93UmFkaXVzOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAg
IGlmIChnZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkg
ewotICAgICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50ID0gYm91bmRzOwotICAgICAgICBzaGFk
b3dFeHRlbnQubW92ZShzaGFkb3dPZmZzZXQpOwotICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0
ZShzaGFkb3dQYWludGluZ0V4dGVudChzaGFkb3dSYWRpdXMpKTsKKyAgICBpZiAoaGFzU2hhZG93
KCkpIHsKKyAgICAgICAgYXV0byBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CisgICAgICAgIHNoYWRv
d0V4dGVudC5tb3ZlKGRyb3BTaGFkb3coKS5vZmZzZXQpOworICAgICAgICBzaGFkb3dFeHRlbnQu
aW5mbGF0ZShzaGFkb3dQYWludGluZ0V4dGVudChkcm9wU2hhZG93KCkuYmx1clJhZGl1cykpOwog
ICAgICAgICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKICAgICB9CiAKLSAgICByZXR1cm4g
aW50ZXJzZWN0aW9uKHN0YXRlLmNsaXBCb3VuZHMsIHN0YXRlLmN0bS5tYXBSZWN0KGJvdW5kcykp
OworICAgIHJldHVybiBpbnRlcnNlY3Rpb24oY2xpcEJvdW5kcygpLCBnZXRDVE0oKS5tYXBSZWN0
KGJvdW5kcykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAppbmRleCA2NDIyNjVmMDk4MDIyY2YyYjA1
ZjE4MGMxNzRmYTAzNDYyZjJkZDQwLi42ZGU2YWVkZmZjYjE3ZGIyZDA4MWI0MmMxZGU2YmMzMjlh
MzhiZjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaApA
QCAtMzUsOSArMzUsOCBAQCBjbGFzcyBSZWNvcmRlckltcGwgOiBwdWJsaWMgUmVjb3JkZXIgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJl
Y29yZGVySW1wbCk7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERp
c3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3Qm
IGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3RE
cmF3R2x5cGhzOjpZZXMpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVySW1w
bCgpOwotCisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiwgY29u
c3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFs
Q1RNID0geyB9LCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERy
YXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIAogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9
CiAKICAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBmaW5hbCB7IH0KQEAgLTQ3LDQ3
ICs0NiwzNSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkU2F2ZSgpIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkVHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRlKGZsb2F0
IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
ZmluYWw7CisKICAgICB2b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90
PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50
OF90PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRTZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRN
aXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmlu
YWw7CisgICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYp
IGZpbmFsOworCisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJu
KCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5k
aWYKKworICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7
CisgICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9p
ZCByZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xp
cFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2Nh
bEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lz
dGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQ
YXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwg
Y29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRo
KGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3Io
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZp
bGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
LCBCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3Jk
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogICAgIHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmKSBmaW5hbDsKICAgICB2
b2lkIHJlY29yZEZpbGxBcmMoY29uc3QgQXJjRGF0YSYpIGZpbmFsOwpAQCAtOTUsMTEgKzgyLDEw
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVy
Q3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVG
b3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFs
OwotI2VuZGlmCi0gICAgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQogICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEmKSBmaW5hbDsKQEAgLTEwNywx
MyArOTMsMjggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNv
bnN0IEJlemllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRTdHJv
a2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJv
a2VQYXR0ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmlu
YWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgIGZpbmFsOworCisgICAg
dm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IHJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHJlY29y
ZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3Rz
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVy
JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZl
SW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAg
ICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCBy
ZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlw
aHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3Is
IEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwogCiAgICAgYm9vbCByZWNvcmRSZXNvdXJj
ZVVzZShOYXRpdmVJbWFnZSYpIGZpbmFsOwogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1h
Z2VCdWZmZXImKSBmaW5hbDsKQEAgLTEzOSw2ICsxNDAsOCBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgfQogCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBm
aW5hbDsKKwogICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRS
ZWN0JikgY29uc3Q7CiAKICAgICBEaXNwbGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAppbmRleCA4ZmYxOWQwMDM1NGNkYmVkZTNh
NWJhMWFmNzU4Y2ZmMDIzYTI1YTIyLi42NmZjOWQ4ODJhNGQzZjdkZThlODkxMmExZjMwYWYxOThk
MDM1MjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC05
NywxMCArOTcsMTAgQEAgaW5saW5lIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcj4gYXBwbHlTZXRTdGF0ZUl0ZW0oR3JhcGgKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICB9OwogCi0gICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4
UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLnN0cm9r
ZVBhdHRlcm4uZ2V0KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRl
cm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVybigpKSkK
ICAgICAgICAgcmV0dXJuICppbWFnZUlkZW50aWZpZXI7CiAKLSAgICBpZiAoYXV0byBpbWFnZUlk
ZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgp
Lm1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmll
ciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCku
cGF0dGVybigpKSkKICAgICAgICAgcmV0dXJuICppbWFnZUlkZW50aWZpZXI7CiAKICAgICBzZXRT
dGF0ZUl0ZW0uYXBwbHkoY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3Jk
ZXJIYXJmQnV6ei5jcHAKaW5kZXggZDA5YzEzNzNlYTlhYWFmNGExODUxMzZlZTg4NTNkNzg4ZmM0
MTc4ZC4uZmNhZGVmMjM4ZTA5ZmUwMjgyYWNlZWM5YTFmMjVmODczMzlkOWM3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1Jl
Y29yZGVySGFyZkJ1enouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtMjksMTcgKzI5LDE4
IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdy
YXBoaWNzQ29udGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZy
b21Db250ZXh0KQotICAgIDogbV9vd25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJh
d0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNv
bnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGlu
YXRpb25Db250ZXh0KGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKIH0KIAogdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250
KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5n
TW9kZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01v
ZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCmluZGV4IDkxMTQ2ZGZjNmZk
ODRkZjhlMjk1NGYwMzc3ZDAwNjZhNzcyMzNjYzkuLjUxNTQ3YWU2ZGZhMTA0YjVkZDY1NGE5MzBi
OTcyNDFkOTc3OGQwOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDE4
IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxNjAgKzc4
LDM4OSBAQCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
YmFzZV9vZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2YQogfQogCiBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpDYWlyb09wZXJhdGlvblJlY29yZGVyKFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExp
c3QpCi0gICAgOiBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQorICAgIDogR3JhcGhpY3NDb250
ZXh0KEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkpCisgICAgLCBtX2NvbW1hbmRMaXN0KGNvbW1h
bmRMaXN0KQogewotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7IH0sIHsgfSwgRmxvYXRSZWN0
OjppbmZpbml0ZVJlY3QoKSB9KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzYXZlKCkKK3sKKyAgICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPD4geworICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBkZWZh
dWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLnNhdmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3Ry
ZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJTYXZlPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgR3JhcGhpY3NDb250ZXh0Ojpz
YXZlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2F2ZT4oKSk7Cit9CisKK3ZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6cmVzdG9yZSgpCit7CisgICAgc3RydWN0IFJlc3RvcmUgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmlydHVh
bCB+UmVzdG9yZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdP
cGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5yZXN0b3JlKCk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiUmVzdG9yZTw+XG4iOworICAgICAgICB9CisgICAgfTsK
KworICAgIGlmICghc3RhY2tTaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNz
Q29udGV4dDo6cmVzdG9yZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJlc3RvcmU+KCkp
OworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKCkK
IHsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKSB7CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkNUTSkpIHsKKyAgICAgICAgc3RydWN0IFNldENUTSBmaW5hbCA6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4geworICAg
ICAgICAgICAgdmlydHVhbCB+U2V0Q1RNKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6Q1RNPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0Q1RNPihnZXRDVE0oKSkpOworICAgIH0KKworICAgIGlm
IChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpTdHJva2VUaGlja25lc3MpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VUaGlja25lc3NDaGFu
Z2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewogICAg
ICAgICAgICAgdmlydHVhbCB+U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKCkgPSBkZWZhdWx0OwogCiAg
ICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVy
KSBvdmVycmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6
c2V0U3Ryb2tlVGhpY2tuZXNzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7
CisgICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoY29udGV4
dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VUaGlja25lc3NDaGFu
Z2U8PlxuIjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczw+XG4iOwogICAgICAgICAgICAgfQogICAg
ICAgICB9OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVRoaWNrbmVzc0No
YW5nZT4oc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPFN0cm9rZVRoaWNrbmVzc0NoYW5nZT4oc3Ryb2tlVGhpY2tuZXNzKCkpKTsKICAgICB9CiAK
LSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2Up
IHsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGUpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VTdHlsZUNo
YW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFN0cm9rZVN0eWxl
PiB7CiAgICAgICAgICAgICB2aXJ0dWFsIH5TdHJva2VTdHlsZUNoYW5nZSgpID0gZGVmYXVsdDsK
IAogICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldFN0cm9rZVN0eWxlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7
CisgICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlN0cm9rZVN0eWxlPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAg
ICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0cm9rZVN0eWxl
KCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcCkpIHsKKyAgICAgICAgc3RydWN0IFNldExp
bmVDYXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lQ2FwPiB7
CisgICAgICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OworCisgICAgICAg
ICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVy
cmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6TGluZUNhcDw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXAoKSkpOwor
ICAgIH0KKworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaCkpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVEYXNo
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFzaEFycmF5LCBmbG9h
dD4geworICAgICAgICAgICAgdmlydHVhbCB+U2V0TGluZURhc2goKSA9IGRlZmF1bHQ7CisKKyAg
ICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVE
YXNoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpLCBhcmc8MT4oKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwg
IkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoPD5cbiI7CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZURh
c2g+KGxpbmVEYXNoKCkuZGFzaGVzLCBsaW5lRGFzaCgpLm9mZnNldCkpOworICAgIH0KKworICAg
IGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpMaW5lSm9pbikpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUpvaW4+IHsKKyAgICAgICAgICAgIHZp
cnR1YWwgflNldExpbmVKb2luKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1
dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OkxpbmVKb2luPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKCkpKTsKKyAgICB9CisKKyAg
ICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6TWl0ZXJMaW1pdCkpIHsKKyAgICAgICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICAgICAg
dmlydHVhbCB+U2V0TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBl
eGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVN0eWxlQ2hhbmdlPD5cbiI7
CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpNaXRlckxpbWl0PD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAg
ICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0YXRlLnN0cm9r
ZVN0eWxlKSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVyTGltaXQ+KG1p
dGVyTGltaXQoKSkpOwogICAgIH0KIAotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpIHsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2Vz
KCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSkp
IHsKICAgICAgICAgc3RydWN0IENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+
IHsKICAgICAgICAgICAgIHZpcnR1YWwgfkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSgpID0gZGVm
YXVsdDsKIAogICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8
MD4oKSwgYXJnPDE+KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U8PlxuIjsKKyAgICAgICAg
ICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNv
bXBvc2l0ZU1vZGU8PlxuIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U+KHN0YXRlLmNvbXBv
c2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlPihjb21wb3NpdGVNb2RlKCkub3BlcmF0aW9u
LCBjb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKSk7CiAgICAgfQotCi0gICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkgeworICAgIAorICAg
IGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpTaG91bGRBbnRpYWxpYXMpKSB7CiAgICAgICAgIHN0cnVjdCBTaG91bGRBbnRpYWxpYXND
aGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxib29sPiB7CiAg
ICAgICAgICAgICB2aXJ0dWFsIH5TaG91bGRBbnRpYWxpYXNDaGFuZ2UoKSA9IGRlZmF1bHQ7CiAK
ICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigp
KTsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNob3VsZEFudGlhbGlhc0No
YW5nZTw+XG4iOworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzPD5cbiI7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH07CiAKLSAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2hvdWxkQW50aWFsaWFz
Q2hhbmdlPihzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8U2hvdWxkQW50aWFsaWFzQ2hhbmdlPihzaG91bGRBbnRpYWxpYXMoKSkpOwogICAgIH0K
KworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQoreworICAgIHN0
cnVjdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9w
ZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKKyAgICAgICAgdmlydHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lM
YXllcigpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWly
bzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBv
dmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworCisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KG9wYWNpdHkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI+KG9wYWNpdHkpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFu
c3BhcmVuY3lMYXllcigpCit7CisgICAgc3RydWN0IEVuZFRyYW5zcGFyZW5jeUxheWVyIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7CisgICAgICAgIHZpcnR1YWwg
fkVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRW5k
VHJhbnNwYXJlbmN5TGF5ZXI8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworICAgIAorICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4o
KSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgc3RydWN0IENsaXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xpcCgpID0gZGVm
YXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6Y2xpcChjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkNsaXA8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOwor
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXA+KHJlY3QpKTsKK30KKwordm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5k
UnVsZSkKK3sKKyAgICBzdHJ1Y3QgQ2xpcFBhdGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxQYXRoLCBXaW5kUnVsZT4geworICAgICAgICB2aXJ0dWFsIH5DbGlwUGF0
aCgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25S
ZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6
Y2xpcFBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRl
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFBhdGg8PlxuIjsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8Q2xpcFBhdGg+KHBhdGgsIHdpbmRSdWxlKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHN0
cnVjdCBTZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
TGluZUNhcD4gewotICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OworICAg
IHN0cnVjdCBDbGlwT3V0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
RmxvYXRSZWN0PiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CiAKICAg
ICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3Zl
cnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVDYXAoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2V0TGluZUNhcDw+XG4iOworICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZUNhcD4obGluZUNhcCkpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocmVjdCkpOwogfQog
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc3RydWN0IFNldExpbmVEYXNoIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFzaEFycmF5LCBmbG9hdD4g
ewotICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lRGFzaCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3Qg
Q2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGg+IHsK
KyAgICAgICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4
ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAg
ICB7Ci0gICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2goY29udGV4dEZvclJlcGxheShyZXBs
YXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICBDYWlybzo6Y2xpcE91dChj
b250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9CiAKICAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldExpbmVEYXNoPD5cbiI7CisgICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkNsaXBPdXQ8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lRGFzaD4oZGFzaGVzLCBkYXNoT2Zmc2V0KSk7CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwT3V0Pihw
YXRoKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUpvaW4oTGlu
ZUpvaW4gbGluZUpvaW4pCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7
Ci0gICAgc3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8TGluZUpvaW4+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZUpvaW4oKSA9IGRl
ZmF1bHQ7CisgICAgc3RydWN0IENsaXBUb0ltYWdlQnVmZmVyIGZpbmFsOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgRmxvYXRSZWN0PiB7
CisgICAgICAgIHZpcnR1YWwgfkNsaXBUb0ltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCiAgICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmNsaXBUb0lt
YWdlQnVmZmVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJn
PDE+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBv
dmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldExpbmVK
b2luPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBUb0ltYWdlQnVmZmVy
PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0
TGluZUpvaW4+KGxpbmVKb2luKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIGlm
IChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSkpCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBUb0ltYWdlQnVmZmVy
PihuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCkpOwogfQogCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3Zv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBzdHJ1Y3QgU2V0TWl0ZXJMaW1pdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgflNldE1pdGVyTGltaXQo
KSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IENsZWFyUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGVhclJl
Y3QoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86
OnNldE1pdGVyTGltaXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAg
ICAgICAgICAgIENhaXJvOjpjbGVhclJlY3QoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFy
ZzwwPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRNaXRl
ckxpbWl0PD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsZWFyUmVjdDw+XG4i
OwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVy
TGltaXQ+KG1pdGVyTGltaXQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPENsZWFyUmVjdD4ocmVjdCkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI0OSw2ICs0
NzksOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxSZWN0PihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KQEAgLTI2OSw2ICs1MDEsOCBAQCB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCkBAIC0yOTEsMzUgKzUyNSwxMiBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
R3JhZGllbnQmIGdyYWRpZW50KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVj
dCwgZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJh
bnNmb3JtKSkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBzdHJ1Y3Qg
RmlsbFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJl
Y3QsIENvbG9yLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3Rh
dGUsIENvbXBvc2l0ZU9wZXJhdG9yPiB7Ci0gICAgICAgIHZpcnR1YWwgfkZpbGxSZWN0KCkgPSBk
ZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHBsYXRmb3Jt
Q29udGV4dCA9IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpOwotCi0gICAgICAgICAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigp
LCBhcmc8Mz4oKSk7Ci0gICAgICAgICAgICBDYWlybzo6ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0
LCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzw0PigpKTsKLSAgICAgICAgICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDU+KCksIEJsZW5k
TW9kZTo6Tm9ybWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJG
aWxsUmVjdDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9k
ZSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpKTsK
KyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3JhZGllbnQuY3JlYXRl
UGF0dGVybigxLjAsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKSkpOwogfQogCi12b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBzdHJ1Y3Qg
RmlsbFJvdW5kZWRSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
RmxvYXRSb3VuZGVkUmVjdCwgQ29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIENh
aXJvOjpTaGFkb3dTdGF0ZT4gewogICAgICAgICB2aXJ0dWFsIH5GaWxsUm91bmRlZFJlY3QoKSA9
IGRlZmF1bHQ7CkBAIC0zMjgsNyArNTM5LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAg
ICAgICAgewogICAgICAgICAgICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dEZvclJl
cGxheShyZXBsYXllcik7CiAKLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDI+KCksIGFyZzwzPigpKTsKKyAgICAgICAg
ICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dC5j
cigpLCBhcmc8Mj4oKSwgYXJnPDM+KCkpOwogCiAgICAgICAgICAgICBhdXRvJiByZWN0ID0gYXJn
PDA+KCk7CiAgICAgICAgICAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKQEAgLTMzNiw3ICs1NDcs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIENhaXJvOjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgpLCBhcmc8
MT4oKSwgYXJnPDQ+KCkpOwogCi0gICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0
ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7
CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9y
bUNvbnRleHQuY3IoKSwgYXJnPDI+KCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKICAgICAgICAgfQog
CiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTM0NSw4ICs1
NTYsOSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxG
aWxsUm91bmRlZFJlY3Q+KHJvdW5kZWRSZWN0LCBjb2xvciwgc3RhdGUuY29tcG9zaXRlT3BlcmF0
b3IsIGJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGx5U3Rh
dGVDaGFuZ2VzKCk7CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+
KHJvdW5kZWRSZWN0LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQpAQCAtMzY1LDEwICs1NzcsMzYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAg
fQogICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgVU5VU0VEX1BBUkFN
KGNvbG9yKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZT4ocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsK
IH0KIAordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgc3RydWN0IEZpbGxFbGxpcHNlIGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDYWlybzo6RmlsbFNvdXJjZSwgQ2Fp
cm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxFbGxpcHNlKCkgPSBkZWZh
dWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhdGggcGF0aDsKKyAgICAg
ICAgICAgIHBhdGguYWRkRWxsaXBzZShhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6Zmls
bFBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIHBhdGgsIGFyZzwxPigpLCBhcmc8Mj4o
KSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbEVsbGlwc2U8
PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpKTsKK30KKwogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxs
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIHN0cnVjdCBGaWxsUGF0aCBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpGaWxsU291cmNlLCBD
YWlybzo6U2hhZG93U3RhdGU+IHsKQEAgLTM4OCwzMiArNjI2LDEyIEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RmlsbFBhdGg+KHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgRmlsbEVsbGlwc2Ug
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENhaXJv
OjpGaWxsU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAgICAgICAgdmlydHVhbCB+Rmls
bEVsbGlwc2UoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3Bl
cmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAg
UGF0aCBwYXRoOwotICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKGFyZzwwPigpKTsKLSAgICAg
ICAgICAgIENhaXJvOjpmaWxsUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgcGF0aCwg
YXJnPDE+KCksIGFyZzwyPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJGaWxsRWxsaXBzZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsRWxsaXBz
ZT4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpKSk7Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKICAgICBzdHJ1Y3QgU3Ryb2tl
UmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwg
ZmxvYXQsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewpAQCAtNDMw
LDMxICs2NDgsMTAgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICB9CiAgICAgfTsK
IAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHN0cnVjdCBT
dHJva2VQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwg
Q2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1
YWwgflN0cm9rZVBhdGgoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50
aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAg
ICAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzww
PigpLCBhcmc8MT4oKSwgYXJnPDI+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1w
KFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBp
bmRlbnQgPDwgIlN0cm9rZVBhdGg8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OwogCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPFN0cm9rZVBhdGg+KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tl
UmVjdD4ocmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNDc5LDEwNyArNjc2LDI5
IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxsaXBzZT4ocmVj
dCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIHN0cnVjdCBDbGVhclJlY3QgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xl
YXJSZWN0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENh
aXJvOjpjbGVhclJlY3QoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGVhclJlY3Q8PlxuIjsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGVhclJlY3Q+KHJl
Y3QpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKK3ZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHN0
cnVjdCBEcmF3R2x5cGhzIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
Q2Fpcm86OkZpbGxTb3VyY2UsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0
ZSwgRmxvYXRQb2ludCwgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+LCBmbG9hdCwgVmVjdG9y
PGNhaXJvX2dseXBoX3Q+LCBmbG9hdCwgVGV4dERyYXdpbmdNb2RlRmxhZ3MsIGZsb2F0LCBGbG9h
dFNpemUsIENvbG9yLCBGb250U21vb3RoaW5nTW9kZT4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3
R2x5cGhzKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBTdHJva2VQYXRoIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fp
cm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgflN0cm9rZVBhdGgoKSA9IGRlZmF1
bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdHbHlwaHMo
Y29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCks
IGFyZzwzPigpLCBhcmc8ND4oKS5nZXQoKSwKLSAgICAgICAgICAgICAgICBhcmc8NT4oKSwgYXJn
PDY+KCksIGFyZzw3PigpLCBhcmc8OD4oKSwgYXJnPDk+KCksIGFyZzwxMD4oKSwgYXJnPDExPigp
LCBhcmc8MTI+KCkpOworICAgICAgICAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCkpOwogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7
Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdHbHlwaHM8PlxuIjsKKyAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiU3Ryb2tlUGF0aDw+XG4iOwogICAgICAgICB9CiAgICAgfTsK
IAotICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7
Ci0gICAgVmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7Ci0gICAg
ewotICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ld
ID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAgICAgICAgICAgIHhPZmZzZXQg
Kz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3R2x5cGhz
PihDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAot
ICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwKLSAgICAgICAgUmVmUHRy
PGNhaXJvX3NjYWxlZF9mb250X3Q+KGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpKSwK
LSAgICAgICAgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIFdURk1vdmUoY2Fpcm9HbHlwaHMp
LCB4T2Zmc2V0LCBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsCi0gICAgICAgIHN0YXRlLnN0cm9rZVRo
aWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwgZm9udFNtb290
aGluZykpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVk
LgotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1hZ2Ug
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zLCBmbG9h
dCwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFn
ZSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25S
ZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6
ZHJhd1BsYXRmb3JtSW1hZ2UoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdl
dCgpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdOYXRpdmVJbWFnZTw+
XG4iOwotICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0gICAg
VU5VU0VEX1BBUkFNKGltYWdlU2l6ZSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdOYXRpdmVJbWFnZT4obmF0aXZlSW1hZ2Uu
cGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMo
b3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSksIHN0YXRlLmFscGhhLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIHN0cnVjdCBEcmF3UGF0dGVybiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBJbnRTaXplLCBGbG9hdFJlY3QsIEZs
b2F0UmVjdCwgQWZmaW5lVHJhbnNmb3JtLCBGbG9hdFBvaW50LCBJbWFnZVBhaW50aW5nT3B0aW9u
cz4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3UGF0dGVybigpID0gZGVmYXVsdDsKLQotICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwz
PigpLCBhcmc8ND4oKSwgYXJnPDU+KCksIGFyZzw2PigpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3UGF0dGVybjw+XG4iOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxE
cmF3UGF0dGVybj4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBuYXRpdmVJbWFnZS5zaXpl
KCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMp
KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ry
b2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCiB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQpAQCAtNTk4LDggKzcxNyw4IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3Jk
ZXJUaGlja25lCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJU
aGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9r
ZUNvbG9yKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBmaWxsQ29sb3IoKSwgc3Ryb2tl
U3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQyKQpAQCAtNjIxLDUwICs3NDAsOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludAogICAg
IGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJh
d0xpbmU+KHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29s
b3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7Ci19Ci0K
LXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAg
ICBzdHJ1Y3QgRHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPEZsb2F0UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9y
PiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7Ci0KLSAg
ICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3Zl
cnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29u
dGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFy
ZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkRyYXdMaW5lc0ZvclRleHQ8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYg
c3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5l
c0ZvclRleHQ+KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVy
bGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIHN0cnVjdCBEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Rmxv
YXRSZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnRleHRGb3JS
ZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI8PlxuIjsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyPihyZWN0LCBzdHlsZSkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyLCBzdHJva2VT
dHlsZSgpLCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc2hvdWxkQW50aWFsaWFz
KCkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCkBAIC02ODMsMTEgKzc2MCwxMSBAQCB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAg
fQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUu
c3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdF
bGxpcHNlPihyZWN0LCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwg
c3Ryb2tlVGhpY2tuZXNzKCkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVt
ZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHBhdGgsIGNvbG9yKTsKQEAgLTcwNywxMiArNzg0
LDEyIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICAgICAgfQogICAgIH07CiAKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdGb2N1c1Jp
bmc+KHBhdGgsIHdpZHRoLCBjb2xvcikpOwogI2VuZGlmCi0gICAgVU5VU0VEX1BBUkFNKG9mZnNl
dCk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RL
KQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcmVjdHMsIGNvbG9yKTsKQEAg
LTczMiwzNjggKzgwOSwxNDYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQKICAgICAgICAgfQog
ICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPERyYXdGb2N1c1Jpbmc+KHJlY3RzLCB3aWR0aCwgY29sb3IpKTsKICNlbmRpZgotICAgIFVO
VVNFRF9QQVJBTShvZmZzZXQpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNh
dmUoKQotewotICAgIHN0cnVjdCBTYXZlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8PiB7Ci0gICAgICAgIHZpcnR1YWwgflNhdmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICAg
ICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJp
ZGUKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikuc2F2
ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVy
cmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNhdmU8PlxuIjsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKLQotICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPFNhdmU+KCkpOwotCi0gICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChtX3N0YXRlU3RhY2subGFzdCgpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpyZXN0b3JlKCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIHN0cnVjdCBSZXN0b3JlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8PiB7Ci0gICAgICAgIHZpcnR1YWwgflJlc3RvcmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICAg
ICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJp
ZGUKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikucmVz
dG9yZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBv
dmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlJlc3RvcmU8
PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAoIXN0YWNrU2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKLQotICAgIGlmICht
X3N0YXRlU3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxSZXN0b3JlPigpKTsKLQotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7
Ci0gICAgaWYgKG1fc3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGVTdGFjay5j
bGVhcigpOworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMp
OwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIHN0cnVjdCBUcmFuc2xhdGUgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdCwgZmxvYXQ+IHsKLSAgICAgICAgdmlydHVh
bCB+VHJhbnNsYXRlKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1hZ2UgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zLCBmbG9hdCwg
Q2Fpcm86OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgp
ID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6dHJh
bnNsYXRlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOwor
ICAgICAgICAgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJn
PDQ+KCksIGFyZzw1PigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3Ry
ZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJUcmFuc2xhdGU8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd05hdGl2
ZUltYWdlPD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8VHJhbnNsYXRlPih4LCB5KSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9z
dGF0ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGUuY3RtLnRyYW5zbGF0ZSh4LCB5KTsKLQot
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdDsKLSAgICAgICAgdC50cmFuc2xhdGUoLXgsIC15KTsK
LSAgICAgICAgc3RhdGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0K
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdO
YXRpdmVJbWFnZT4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVj
dCwgSW1hZ2VQYWludGluZ09wdGlvbnMob3B0aW9ucywgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSgpKSwgYWxwaGEoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKLXZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQordm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZl
SW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIHN0cnVjdCBSb3RhdGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlv
biwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5Sb3RhdGUoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnJvdGF0ZShj
b250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIlJvdGF0ZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJvdGF0ZT4oYW5nbGVJblJhZGlhbnMpKTsKLQotICAg
IHsKLSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBz
dGF0ZS5jdG0ucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gdDsKLSAgICAgICAgdC5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgICAgICBzdGF0ZS5j
dG1JbnZlcnNlID0gdCAqIHN0YXRlLmN0bUludmVyc2U7Ci0gICAgfQotfQotCi12b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBz
dHJ1Y3QgU2NhbGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9h
dFNpemU+IHsKLSAgICAgICAgdmlydHVhbCB+U2NhbGUoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0
IERyYXdQYXR0ZXJuIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4sIEludFNpemUsIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZp
bmVUcmFuc2Zvcm0sIEZsb2F0UG9pbnQsIEltYWdlUGFpbnRpbmdPcHRpb25zPiB7CisgICAgICAg
IHZpcnR1YWwgfkRyYXdQYXR0ZXJuKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjpzY2FsZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwg
YXJnPDQ+KCksIGFyZzw1PigpLCBhcmc8Nj4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiU2NhbGU8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
RHJhd1BhdHRlcm48PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxTY2FsZT4oc2l6ZSkpOwotCi0gICAgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1f
c3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmN0bS5zY2FsZShzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0OwotICAgICAgICB0
LnNjYWxlKDEgLyBzaXplLndpZHRoKCksIDEgLyBzaXplLmhlaWdodCgpKTsKLSAgICAgICAgc3Rh
dGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0KKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdQYXR0ZXJuPihuYXRp
dmVJbWFnZS5wbGF0Zm9ybUltYWdlKCksIG5hdGl2ZUltYWdlLnNpemUoKSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucykpOwogfQogCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKQogewotICAgIHN0cnVjdCBDb25jYXRDVE0gZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFuc2Zvcm0+IHsKLSAgICAgICAgdmlydHVh
bCB+Q29uY2F0Q1RNKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGlu
Z09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENhaXJvOjpjb25jYXRDVE0oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDb25jYXRDVE08Plxu
IjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52
ZXJzZSgpOwotICAgIGlmICghaW52ZXJzZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8Q29uY2F0Q1RNPih0cmFuc2Zvcm0pKTsKLQotICAgIGF1dG8mIHN0YXRl
ID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICBzdGF0ZS5jdG0gKj0gdHJhbnNmb3JtOwotICAg
IHN0YXRlLmN0bUludmVyc2UgPSBpbnZlcnNlLnZhbHVlKCkgKiBzdGF0ZS5jdG1JbnZlcnNlOwor
ICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWlu
dEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CisjZW5kaWYKIAotdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0pCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQogewotICAgIHN0cnVjdCBT
ZXRDVE0gZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFu
c2Zvcm0+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0Q1RNKCkgPSBkZWZhdWx0OworICAgIHN0cnVj
dCBEcmF3R2x5cGhzIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Q2Fp
cm86OkZpbGxTb3VyY2UsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZSwg
RmxvYXRQb2ludCwgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+LCBmbG9hdCwgVmVjdG9yPGNh
aXJvX2dseXBoX3Q+LCBmbG9hdCwgVGV4dERyYXdpbmdNb2RlRmxhZ3MsIGZsb2F0LCBGbG9hdFNp
emUsIENvbG9yLCBGb250U21vb3RoaW5nTW9kZT4geworICAgICAgICB2aXJ0dWFsIH5EcmF3R2x5
cGhzKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlv
blJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Cisg
ICAgICAgICAgICBDYWlybzo6ZHJhd0dseXBocyhjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
YXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLmdldCgpLAor
ICAgICAgICAgICAgICAgIGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCksIGFyZzw4PigpLCBh
cmc8OT4oKSwgYXJnPDEwPigpLCBhcmc8MTE+KCksIGFyZzwxMj4oKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2V0Q1RNPD5cbiI7CisgICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkRyYXdHbHlwaHM8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgIGlmICghaW52ZXJzZSkKKyAg
ICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRDVE0+KHRyYW5zZm9ybSkpOwotCi0gICAgYXV0byYg
c3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIHN0YXRlLmN0bSA9IHRyYW5zZm9ybTsK
LSAgICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwotfQotCi1BZmZpbmVUcmFu
c2Zvcm0gQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5j
bHVkZURldmljZVNjYWxlKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgp
LmN0bTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgc3RydWN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewotICAg
ICAgICB2aXJ0dWFsIH5CZWdpblRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCi0gICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiQmVnaW5UcmFuc3BhcmVuY3lMYXllcjw+XG4iOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcihvcGFjaXR5KTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI+KG9wYWNpdHkpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpl
bmRUcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgc3RydWN0IEVuZFRyYW5zcGFyZW5jeUxheWVy
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7Ci0gICAgICAgIHZp
cnR1YWwgfkVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8
PCAiRW5kVHJhbnNwYXJlbmN5TGF5ZXI8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBH
cmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0KLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3RydWN0
IENsaXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+
IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4
ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
YXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRz
KSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXA8
PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlw
PihyZWN0KSk7Ci0KKyAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7CisgICAgVmVjdG9yPGNh
aXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7CiAgICAgewotICAgICAgICBhdXRv
JiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmNsaXBCb3VuZHMu
aW50ZXJzZWN0KHN0YXRlLmN0bS5tYXBSZWN0KHJlY3QpKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgc3RydWN0IENsaXBPdXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxGbG9hdFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKLQot
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkNsaXBPdXQ8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxDbGlwT3V0PihyZWN0KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHN0cnVjdCBDbGlw
T3V0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aD4gewotICAg
ICAgICB2aXJ0dWFsIH5DbGlwT3V0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSk7CisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9H
bHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAg
eE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwogICAgICAgICB9CisgICAgfQogCi0gICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAg
ICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9Owor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlw
T3V0PihwYXRoKSk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSksIHBvaW50LAorICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5wbGF0
Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLAorICAgICAgICBmb250LnN5bnRoZXRpY0JvbGRPZmZz
ZXQoKSwgV1RGTW92ZShjYWlyb0dseXBocyksIHhPZmZzZXQsIHRleHREcmF3aW5nTW9kZSgpLAor
ICAgICAgICBzdHJva2VUaGlja25lc3MoKSwgc2hhZG93T2Zmc2V0KCksIHNoYWRvd0NvbG9yKCks
IGZvbnRTbW9vdGhpbmcpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBzdHJ1Y3QgQ2xpcFBh
dGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBXaW5kUnVs
ZT4gewotICAgICAgICB2aXJ0dWFsIH5DbGlwUGF0aCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3Qg
RHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PEZsb2F0UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yPiB7CisgICAg
ICAgIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAg
ICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5l
c0ZvclRleHQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwg
YXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAg
ICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBQYXRoPD5cbiI7CisgICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkRyYXdMaW5lc0ZvclRleHQ8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAK
LSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwUGF0aD4ocGF0aCwgY2xpcFJ1bGUpKTsKLQot
ICAgIHsKLSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAg
ICBzdGF0ZS5jbGlwQm91bmRzLmludGVyc2VjdChzdGF0ZS5jdG0ubWFwUmVjdChwYXRoLmZhc3RC
b3VuZGluZ1JlY3QoKSkpOwotICAgIH0KLX0KKyAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOwogCi1JbnRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3Vu
ZHMoKSBjb25zdAotewotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzdGF0ZS5jdG1JbnZlcnNlLm1hcFJlY3Qoc3RhdGUu
Y2xpcEJvdW5kcykpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmlu
dGluZywgZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlQ29sb3IoKSkpOwogfQogCi12b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBzdHJ1Y3QgQ2xpcFRvSW1hZ2VCdWZmZXIg
ZmluYWw6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+LCBGbG9hdFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcFRvSW1hZ2VCdWZmZXIo
KSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86
OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5n
ZXQoKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFRvSW1hZ2VCdWZmZXI8
PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcjw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Ug
PSBidWZmZXIuY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICBpZiAoIWltYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKQotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxDbGlwVG9JbWFnZUJ1ZmZlcj4obmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJl
Y3QpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0KQoteworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpKTsKIH0K
IAogRmxvYXRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKQEAg
LTExMDYsMTIgKzk2MSw0IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwZW5kKHN0
ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJiBjb21tYW5kCiAgICAgbV9jb21tYW5k
TGlzdC5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
ciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIC8vIEZJWE1F
OiBOb3QgaW1wbGVtZW50ZWQuCi0gICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVk
aWEocGxheWVyLCBkZXN0aW5hdGlvbik7Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgTmlj
b3NpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5oCmluZGV4IDgzYzZkMjdkNmVhMzZjNzliZWJkNzgyNWY5OWI3YzQzOTA4ZWU1NGIuLmFm
NDc4ZmM0MzdlOGI0ZWU5N2E3YzAxYjc3YmMyMmEwMzU0NDc5NTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQxLDc4ICs0Miw1OCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1D
b250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bnVsbHB0cjsgfQogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSBvdmVycmlkZTsKKyAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKKyAgICB2b2lk
IHJlc3RvcmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xp
cChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZv
aWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlw
VG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXAp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5
JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpv
aW4pIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBjbGVhclJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNv
cmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAg
IHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOworCiAgICAgdm9p
ZCBmaWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2
b2lkIHN0cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRl
OwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRl
OworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViQ29yZTo6Rm9u
dFNtb290aGluZ01vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXdJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3Jl
OjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd05hdGl2ZUlt
YWdlKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQ
YXR0ZXJuKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYs
IGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAg
IHZvaWQgc3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsK
ICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6
OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOworCiAgICAg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQsIGZsb2F0
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQs
IGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0m
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0mKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3Qg
V2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29y
ZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRS
ZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVm
ZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25z
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihXZWJDb3JlOjpOYXRpdmVJbWFnZSYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJh
bWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2b2lkIGFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBX
ZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdl
YkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgV2Vi
Q29yZTo6U3Ryb2tlU3R5bGUpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSkgb3ZlcnJpZGU7CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGFwcGVuZChzdGQ6OnVu
aXF1ZV9wdHI8UGFpbnRpbmdPcGVyYXRpb24+JiYpOwogICAgIFBhaW50aW5nT3BlcmF0aW9ucyYg
bV9jb21tYW5kTGlzdDsKLQotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSBjdG07Ci0gICAgICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG1J
bnZlcnNlOwotICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY2xpcEJvdW5kczsKLSAgICB9Owot
ICAgIFZlY3RvcjxTdGF0ZSwgMzI+IG1fc3RhdGVTdGFjazsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IE5pY29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKaW5kZXggNWQ2NmViNzJhZDEzYzI0
ZGFjMDk1YTk0NWY2MTRhNmY1NTIyMjQ5Mi4uMDdjMDMzOWY1OGJmMzJjN2Q1ZjhmODE3ZGJkZDNl
YjdmMWVlNzM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKQEAgLTI5LDE3ICsyOSwx
OCBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVk
ZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihH
cmFwaGljc0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRG
cm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRy
YXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVj
b25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCisgICAgOiBtX2Rlc3Rp
bmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9CiAKIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9u
dChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3Ro
aW5nTW9kZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9u
dChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3Ro
aW5nTW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggYzE5ZTc0MTU1
N2MzMDhjOTQxZTRlZjcxNWUzZGI0NjU5NGQxODViNi4uMmNkNzg2NWVjYTgyOWViNDU3ODBlOWZi
MGU3MjQ3YTM3MTJiY2MzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKQEAgLTE3NiwyNSArMTc2LDIyIEBAIHZvaWQgRm9udENh
c2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEZvbnQmIGZvbnQsCiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9y
bURhdGEuc2l6ZSgpKTsKICAgICBGb250Q2FzY2FkZTo6c2V0Q0dDb250ZXh0Rm9udFJlbmRlcmlu
Z1N0eWxlKGNnQ29udGV4dCwgZm9udC5wbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZvbnQoKSwgZmFs
c2UsIGZvbnQucGxhdGZvcm1EYXRhKCkudXNlR0RJKCkpOwogCi0gICAgRmxvYXRTaXplIHNoYWRv
d09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwot
ICAgIGdyYXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBz
aGFkb3dDb2xvcik7CisgICAgYXV0byBkcm9wU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LmRyb3BT
aGFkb3coKTsKIAotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRl
eHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5p
c1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJh
bnNsYXRpb25PckZsaXBwZWQoKSk7CisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBncmFwaGlj
c0NvbnRleHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIGRy
b3BTaGFkb3cuY29sb3IuaXNWYWxpZCgpICYmICFkcm9wU2hhZG93LmJsdXJSYWRpdXMgJiYgKCFn
cmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRl
eHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CiAgICAgaWYg
KGhhc1NpbXBsZVNoYWRvdykgewogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJz
ZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBz
dWJwaXhlbCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRv
dygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9y
KCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CisgICAgICAgIENv
bG9yIHNoYWRvd0ZpbGxDb2xvciA9IGRyb3BTaGFkb3cuY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9hdCBzaGFkb3dU
ZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOworICAgICAgICBmbG9hdCBz
aGFkb3dUZXh0WCA9IHBvaW50LngoKSArIGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCk7CiAgICAg
ICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4n
dCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUu
Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0Lmhl
aWdodCgpICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEg
OiAxKTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hhZG93
Lm9mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoKSA/IC0xIDogMSk7CiAgICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRl
eHQsIHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSk7CiAgICAgICAgIENHQ29udGV4dFNob3dHbHlw
aHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOwog
ICAgICAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIENH
Q29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSArIHNoYWRvd09mZnNl
dC53aWR0aCgpICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIHNoYWRv
d09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24o
Y2dDb250ZXh0LCBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNldC53aWR0aCgpICsgZm9udC5z
eW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIGRyb3BTaGFkb3cub2Zmc2V0LmhlaWdo
dCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250
ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOwogICAgICAgICB9CiAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKQEAgLTIwOCw3ICsyMDUsNyBA
QCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGb250JiBmb250LAogICAgIH0KIAogICAgIGlmIChoYXNTaW1wbGVTaGFk
b3cpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dCbHVyLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXREcm9wU2hh
ZG93KGRyb3BTaGFkb3cpOwogCiAgICAgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHls
ZShjZ0NvbnRleHQsIG9sZEZvbnRTbW9vdGhpbmdTdHlsZSk7CiAgICAgQ0dDb250ZXh0U2V0VGV4
dE1hdHJpeChjZ0NvbnRleHQsIHNhdmVkTWF0cml4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggM2Nm
NzQ2MGM4MGUzYmUxZDViYTNmMGNlZDdjMTliMjVkZjI5YWJmMi4uNzg1ZTk0YmVjZjA3Y2Q0YTg0
YzljMzRkOWNlY2M4Mzg1N2UwNjk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTI5MiwxMiArMjky
LDEyIEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCiAgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCgyLCAyLCBzaXplLndpZHRo
KCkgLSAzLCBzaXplLmhlaWdodCgpIC0gMyk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihD
b2xvcjo6d2hpdGUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDMpOwotICAgIGNv
bnRleHQuc2V0TGluZURhc2gobV9kYXNoV2lkdGhzLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVE
YXNoKHsgbV9kYXNoV2lkdGhzLCAwIH0pOwogICAgIG1fcGF0aC5hZGRSZWN0KGZyYW1lUmVjdCk7
CiAgICAgbV9wYXRoLmNsb3NlU3VicGF0aCgpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChtX3Bh
dGgpOwogCi0gICAgY29udGV4dC5zZXRMaW5lRGFzaChEYXNoQXJyYXkoKSwgMCk7CisgICAgY29u
dGV4dC5zZXRMaW5lRGFzaCh7IHsgfSwgMCB9KTsKICAgICBtX3BhdGguY2xlYXIoKTsKICAgICBt
X3BhdGgubW92ZVRvKEZsb2F0UG9pbnQoMCwgYm94VG9wICsgYm94U2l6ZSkpOwogICAgIG1fcGF0
aC5hZGRMaW5lVG8oRmxvYXRQb2ludChzaXplLndpZHRoKCksIGJveFRvcCArIGJveFNpemUpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVj
a2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2Vy
LmNwcAppbmRleCAxYjE4MmExZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0M2I3NjdkLi5lODBm
MmVlODkxOTM5MTQ0MThlODc4YmYwYTRhMjg0MGVlNjg5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCkBAIC0zOSw3ICsz
OSw3IEBAIGJvb2wgQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1
bFBhaW50KEZyYW1lVmlldyYgZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5zZXRQYWludEJlaGF2
aW9yKFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CiAgICAgZnJhbWVW
aWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKHRydWUpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29u
dGV4dCBjaGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29u
dGV4dCBjaGVja2VyQ29udGV4dChmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3Qo
KSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3Rp
bmdDb250ZW50ZnVsUGFpbnQpOwogICAgIGZyYW1lVmlldy5wYWludChjaGVja2VyQ29udGV4dCwg
ZnJhbWVWaWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCkpOwogCiAgICAgZnJhbWVWaWV3
LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKG9sZEVudGlyZUNvbnRlbnRzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCmluZGV4IGM5YWIyMTc2MTQx
ZmE3YTMzOWEyMDk3YjNhYmY5NzY1MDc4N2U0ZjEuLjRiZmY4ZDAwODM5MjUxNGNiZTYyY2E5NWQ0
ZTc0M2ZjMTk3ZjAxOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdh
Y3lFbGxpcHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVs
bGlwc2lzQm94LmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIExlZ2FjeUVsbGlwc2lzQm94Ojpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmcwog
ICAgIGJvb2wgc2V0U2hhZG93ID0gZmFsc2U7CiAgICAgaWYgKGxpbmVTdHlsZS50ZXh0U2hhZG93
KCkpIHsKICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBsaW5lU3R5bGUuY29sb3JCeUFwcGx5
aW5nQ29sb3JGaWx0ZXIobGluZVN0eWxlLnRleHRTaGFkb3coKS0+Y29sb3IoKSk7Ci0gICAgICAg
IGNvbnRleHQuc2V0U2hhZG93KExheW91dFNpemUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgp
LnZhbHVlKCksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxl
LnRleHRTaGFkb3coKS0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBj
b250ZXh0LnNldERyb3BTaGFkb3coeyBMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCkt
PngoKS52YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVT
dHlsZS50ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAg
ICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMjRjODJjOWQ2YmQ0M2Y3NGJh
MDVhYjVhYzc2NzkzZDc1ZDE1ZTU3Ny4uOGQ5N2QyNTcxZTI0NTNkZjE5MjhiZGU2Yzc3Yzc2MzE1
ZmJjODgyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCkBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFk
b3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3QK
ICAgICAgICAgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KCk7CiAKICAgICBGbG9hdFNpemUg
c2hhZG93T2Zmc2V0KGJveFNoYWRvdy0+eCgpLnZhbHVlKCksIGJveFNoYWRvdy0+eSgpLnZhbHVl
KCkpOwotICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRp
dXMoKS52YWx1ZSgpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ct
PmNvbG9yKCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICBjb250ZXh0LnNl
dERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwg
c3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94
U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDog
U2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIH0KIAogSW50ZXJwb2xhdGlvblF1YWxpdHkg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNob29zZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCB2b2lkKiBsYXllciwgY29uc3Qg
TGF5b3V0U2l6ZSYgc2l6ZSkKQEAgLTIwODcsNyArMjA4Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gbGluZURhc2ggPSBEYXNo
QXJyYXk6OmZyb20oZGFzaExlbmd0aCwgZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRMaW5lRGFzaChXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7CisgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwg
ZGFzaExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0
cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoK
QEAgLTI0NTYsNyArMjQ1Niw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94
U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAg
ICBGbG9hdFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZp
Y2VQaXhlbChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRv
RGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAg
ICAgICAgICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dP
cmlnaW4gLSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVz
LCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgICAgICBj
b250ZXh0LnNldERyb3BTaGFkb3coeyBzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMs
IHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwogCiAgICAgICAgICAg
ICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBp
cyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2lu
ZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTU4LDcgKzI1NTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91
dFJlYwogICAgICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCiAgICAgICAg
ICAgICBhdXRvIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSByb3VuZFNpemVUb0RldmljZVBpeGVscyhz
aGFkb3dPZmZzZXQsIGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0
U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNo
YWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNo
YWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hh
ZG93KHsgc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hh
ZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUocGl4ZWxTbmFwcGVkT3V0ZXJSZWN0LCBwaXhlbFNuYXBwZWRIb2xlUmVj
dCwgZmlsbENvbG9yKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCmluZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2MjMyMWZlZWQ5YjY4
NmMzY2QuLjhjZjk2MWUwYmMyMzY0ZTk2MmNkYTg4MWY4NTllNGYzMWEzYzk4M2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjI1MywxNCArMjI1MywxNCBA
QCB2b2lkIFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheWVyUAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAg
ICAgICAgIGJvb2wgdXNlc0NvbXBvc2l0ZU9wZXJhdGlvbiA9IGhhc0JsZW5kTW9kZSgpICYmICEo
cmVuZGVyZXIoKS5pc0xlZ2FjeVNWR1Jvb3QoKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNS
ZW5kZXJWaWV3TGF5ZXIoKSk7CiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQot
ICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3Np
dGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21w
b3NpdGVNb2RlKHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkgfSk7
CiAjZW5kaWYKIAogICAgICAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIocmVuZGVy
ZXIoKS5vcGFjaXR5KCkpOwogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAg
aWYgKHVzZXNDb21wb3NpdGVPcGVyYXRpb24pCi0gICAgICAgICAgICBjb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5v
cm1hbCk7CisgICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0LmNv
bXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICNlbmRpZgogCiAjaWZk
ZWYgUkVWRUFMX1RSQU5TUEFSRU5DWV9MQVlFUlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggNWY5OGI5MTI0YTM0OWFjNzU1NzlmNzEx
MzVlZTBmMzhhYmI0ZjEyZC4uM2UyZTZiZjFkZTVkNTRlYjM4ZDkyN2E1MWYwN2M4OTEwYWU2YzFi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKQEAgLTE4MzEsNyArMTgzMSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVF
dmVudFJlZ2lvbigpCiAgICAgfTsKIAogICAgIGF1dG8gdXBkYXRlRXZlbnRSZWdpb25Gb3JMYXll
ciA9IFsmXShHcmFwaGljc0xheWVyJiBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIE51bGxHcmFw
aGljc0NvbnRleHQgbnVsbENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zOjpOb25lKTsKKyAgICAgICAgYXV0byBkaXJ0eVJlY3QgPSBGbG9hdFJlY3Qo
RmxvYXRQb2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NM
YXllci5zaXplKCkpOworICAgIAorICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250
ZXh0KGRpcnR5UmVjdCwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zOjpOb25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxF
KEVESVRBQkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1
aWxkRWRpdGFibGVSZWdpb24oKSkKQEAgLTE4NTMsOCArMTg1NSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lvbigpCiAgICAgICAgICAgICBldmVudFJlZ2lvbkNv
bnRleHQudW5pdGUoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoLWxheWVyT2Zmc2V0LCBncmFw
aGljc0xheWVyLnNpemUoKSkpLCByZW5kZXJlcigpLnN0eWxlKCkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgYXV0byBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50KGdyYXBoaWNzTGF5ZXIub2Zmc2V0RnJvbVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNp
emUoKSkpOwotICAgICAgICBwYWludEludG9MYXllcigmZ3JhcGhpY3NMYXllciwgbnVsbENvbnRl
eHQsIGRpcnR5UmVjdCwgeyB9LCAmZXZlbnRSZWdpb25Db250ZXh0KTsKKyAgICAgICAgcGFpbnRJ
bnRvTGF5ZXIoJmdyYXBoaWNzTGF5ZXIsIG51bGxDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGRp
cnR5UmVjdCksIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7CiAKICAgICAgICAgZXZlbnRSZWdp
b24udHJhbnNsYXRlKHRvSW50U2l6ZShsYXllck9mZnNldCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggMzBjZDM0M2VhN2RmOTE2OGNjM2NkZTQ3
ZGJlZjhmNzU5ZTg4ZjczMS4uMjU2ZmM3NDk1NmRhMzM4NmE1NGQzNTJkZTExYjZmZjczNjY5YTFm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtNjA1
LDcgKzYwNSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFk
b3coY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0CiAgICAgY29uc3QgRmxvYXRTaXpl
IGlubmVyU2hhZG93T2Zmc2V0IHsgMCwgNSB9OwogICAgIGNvbnN0ZXhwciBhdXRvIGlubmVyU2hh
ZG93Qmx1ciA9IDEwLjBmOwogICAgIGF1dG8gaW5uZXJTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxm
bG9hdD4geyAwLCAwLCAwLCAwLjA0ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KGlubmVyU2hh
ZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3IpOworICAgIGNvbnRl
eHQuc2V0RHJvcFNoYWRvdyh7IGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGlu
bmVyU2hhZG93Q29sb3IgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNr
KTsKIAogICAgIFBhdGggaW5uZXJTaGFkb3dQYXRoOwpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UoSW1hZ2UmIGltYWdlLCBj
b25zdCBQYWludEluZm8mIHBhaW4KICAgICAvLyBVc2UgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5j
dGlvbiwgYmVjYXVzZSBpdCBjYWxjdWxhdGVzIHRoZSBibHVyIHJhZGl1cyBpbiBjb250ZXh0IHNw
YWNlLAogICAgIC8vIHJhdGhlciB0aGFuIHNjcmVlbiBzcGFjZS4KICAgICBjb25zdGV4cHIgYXV0
byBzaGFkb3dDb2xvciA9IENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYUJ5dGUoMjYpOwotICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9y
KTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IH0sIDE2
LCBzaGFkb3dDb2xvciB9KTsKIAogICAgIC8vIFRoZSBjaXJjbGUgbXVzdCBoYXZlIGFuIGFscGhh
IGNoYW5uZWwgdmFsdWUgb2YgMSBmb3IgdGhlIHNoYWRvdyBjb2xvciB0byBhcHBlYXIuCiAgICAg
Q0dGbG9hdCBjaXJjbGVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDAsIDEgfTsKQEAgLTIy
NzMsNyArMjI3Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lu
bmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAKICAgICBib29sIGlzRW1w
dHkgPSAhc3RhdGVzLmNvbnRhaW5zQW55KHsgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpDaGVja2Vk
LCBDb250cm9sU3RhdGVzOjpTdGF0ZXM6OkluZGV0ZXJtaW5hdGUgfSk7CiAgICAgYXV0byBmaXJz
dFNoYWRvd0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIGlzRW1wdHkgPyAwLjA1
ZiA6IDAuMWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5u
ZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFk
b3coeyBpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9y
IH0pOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRo
IGlubmVyU2hhZG93UGF0aDsKQEAgLTIyOTAsNyArMjI5MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjCiAgICAgY29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogCiAgICAgY29u
c3RleHByIGF1dG8gc2Vjb25kU2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMSwgMSwg
MSwgMC41ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwg
c2Vjb25kU2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6
ZSB7IDAsIDAgfSwgMSwgc2Vjb25kU2hhZG93Q29sb3IgfSk7CiAKICAgICBjb250ZXh0LmZpbGxQ
YXRoKGlubmVyU2hhZG93UGF0aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMubW0KaW5kZXggMDEwZWNiYWVkODdhNzNhNDIwYWZiOTdlOGU4MGZlYTYzNzlmZWQz
ZS4uMTBkYzkwZTU3ZTVhZTBmNDI1YTBkYWFhMzY0ZjgxNGU0NDk0OTkwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjgxNiw3ICsyODE2LDcgQEAg
c3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIoY29uc3QgUmVuZGVy
QXR0YWNobWVudCYgYXR0YWNobWVudCwKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHBsYWNl
aG9sZGVyQm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFj
aG1lbnRQbGFjZWhvbGRlckJvcmRlcldpZHRoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxl
KERhc2hlZFN0cm9rZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7YXR0YWNobWVudFBsYWNl
aG9sZGVyQm9yZGVyRGFzaExlbmd0aH0sIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7
IGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGggfSwgMCB9KTsKICAgICBjb250
ZXh0LnN0cm9rZVBhdGgoYm9yZGVyUGF0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXggNjc1NTY4YWZmNjExOGYw
MTNiZDFkNGY1NWE2YzM2NGZhOGFmMzhlOC4uODMwOWIyZjhkNGEzMWZhMDNiMWFiZjg0MzlkYTBm
M2VmMTYyODQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNv
cmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNv
cmF0aW9uUGFpbnRlci5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFRleHREZWNvcmF0aW9u
UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMoY29uc3QgVGV4dFJ1biYgdGV4dFJ1
biwgYwogICAgICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CiAg
ICAgICAgICAgICBpZiAobV9zaGFkb3dDb2xvckZpbHRlcikKICAgICAgICAgICAgICAgICBtX3No
YWRvd0NvbG9yRmlsdGVyLT50cmFuc2Zvcm1Db2xvcihzaGFkb3dDb2xvcik7Ci0gICAgICAgICAg
ICBtX2NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFP
ZmZzZXQpLCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd1gsIHNoYWRvd1kg
LSBleHRyYU9mZnNldCksIHNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7
CiAgICAgICAgICAgICBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKTsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCA4ODVkODI2ZWU5ZTc5NmY0
YjVjNWI1ODMzZjcxYTAyOGM0NTQxYTdhLi5mZTg4NjljMTllNWY4ZDQzYjdmYTE2ZTQwMWI0ZmJj
NmRjZjdlZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAg
LTc0LDcgKzc0LDcgQEAgU2hhZG93QXBwbGllcjo6U2hhZG93QXBwbGllcihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywKICAgICB9CiAKICAgICBpZiAo
IW1fYXZvaWREcmF3aW5nU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRl
eHQuc2V0RHJvcFNoYWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNo
YWRvd0NvbG9yIH0pOwogfQogCiBpbmxpbmUgYm9vbCBTaGFkb3dBcHBsaWVyOjppc0xhc3RTaGFk
b3dJdGVyYXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHAKaW5kZXggN2VkNTM3YzkyNzkzNzcwZjQ0ODhhZTI5ZGY0MDcyN2Q3ZWIxYTNhOS4u
NmM3MzBlZjA3ZTQ4YzdlY2Y4YzQwZTM3ZTAwMzQ1Y2ZhYjU2YzY4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02OSw3ICs2OSw3IEBA
IEZsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVVcGRhdGVkU3Ryb2tlQm91bmRpbmdC
b3goKSBjb25zdAogc3RhdGljIHZvaWQgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQogewogICAgIGlmIChhdXRvIGdyYWRpZW50ID0gY29udGV4dC5zdHJva2VH
cmFkaWVudCgpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqZ3JhZGllbnQsIGNv
bnRleHQuc3RhdGUoKS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgY29u
dGV4dC5zZXRGaWxsR3JhZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0cm9rZVNwYWNlVHJhbnNm
b3JtKCkpOwogICAgIGVsc2UgaWYgKFBhdHRlcm4qIHBhdHRlcm4gPSBjb250ZXh0LnN0cm9rZVBh
dHRlcm4oKSkKICAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqcGF0dGVybik7CiAgICAg
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9y
dC5jcHAKaW5kZXggY2MzOGVjNzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4uYjY1
ODY4ZDFiZDM0YzkwZDRiYmZkZDQ3N2FkMmM3NDI4MmEwNTZhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC01MDEsMTAgKzUw
MSwxMiBAQCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGNhblNldExpbmVEYXNoKQotICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJy
YXksIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNl
dCgpKSAqIHNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBX
VEZNb3ZlKGRhc2hBcnJheSksIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUu
c3Ryb2tlRGFzaE9mZnNldCgpKSAqIHNjYWxlRmFjdG9yIH0pOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICB9CisKKyAg
ICBjb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKIHZvaWQgU1ZHUmVuZGVyU3VwcG9y
dDo6c3R5bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAyZmI4ZjMzYTg3MGRmY2NlYjYyZTE0OTY1NmIxNDQz
NzIyZWJlYTJkLi5mNTc5ZTVhNzVmZTkxMGY2ZTViNThhOWFlZmI2ODM1ODk2MjIxMGU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTExNSwxMiArMTE1LDEyIEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJl
cGFyZVRvUmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUGFpCiAgICAg
ICAgIGlmIChvcGFjaXR5IDwgMSB8fCBoYXNCbGVuZE1vZGUgfHwgaXNvbGF0ZU1hc2tGb3JCbGVu
ZGluZyB8fCBoYXNJc29sYXRpb24pIHsKIAogICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkK
LSAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJh
dGlvbihtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5i
bGVuZE1vZGUoKSk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRD
b21wb3NpdGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24o
KSwgc3R5bGUuYmxlbmRNb2RlKCkgfSk7CiAKICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250
ZXh0KCkuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgICAgICAgICAgaWYg
KGhhc0JsZW5kTW9kZSkKLSAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJh
dGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8t
PmNvbnRleHQoKS5zZXRDb21wb3NpdGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21w
b3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAKICAgICAgICAgICAgIG1f
cmVuZGVyaW5nRmxhZ3MgfD0gRW5kT3BhY2l0eUxheWVyOwogICAgICAgICB9CkBAIC0yNzMsNyAr
MjczLDcgQEAgYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQogCiAgICAgLy8gSW52YWxpZGF0ZSBhbiBleGlz
dGluZyBidWZmZXIgaWYgdGhlIHNjYWxlIGlzIG5vdCBjb3JyZWN0LgogICAgIGlmIChpbWFnZUJ1
ZmZlcikgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8t
PmNvbnRleHQoKS5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmlj
ZVNjYWxlKTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZv
LT5jb250ZXh0KCkuZ2V0Q1RNKCk7CiAgICAgICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0Jv
eCA9IGV4cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXpl
IGJ1ZmZlclNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lk
dGgoKSAqIHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5k
ZWRCb3VuZGluZ0JveC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKICAgICAgICAg
aWYgKGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCA0ZGQ3ZjgwZTM3Nzc5ODdkY2I3MGMx
YTNjOGE4N2NkOGE0ZmQ2ZmI5Li5jZDg4YWRmMDhkZGE4MDNiZmQ5M2Y4OTU3NzQwNzY4NmFjNGM1
NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTI2OSwx
NCArMjY5LDE0IEBAIEltYWdlRHJhd1Jlc3VsdCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjCiAgICAgQVNTRVJUKHZpZXcpOwog
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3Io
KSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsg
b3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAg
IGNvbnRleHQuY2xpcChlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpKTsKIAogICAgIGZsb2F0IGFs
cGhhID0gY29udGV4dC5hbHBoYSgpOwogICAgIGJvb2wgY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5z
cGFyZW5jeUxheWVyID0gb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpICE9IENvbXBvc2l0ZU9w
ZXJhdG9yOjpTb3VyY2VPdmVyIHx8IG9wdGlvbnMuYmxlbmRNb2RlKCkgIT0gQmxlbmRNb2RlOjpO
b3JtYWwgfHwgYWxwaGEgPCAxOwogICAgIGlmIChjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJl
bmN5TGF5ZXIpIHsKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGFscGhh
KTsKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0
b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgY29udGV4dC5zZXRD
b21wb3NpdGVNb2RlKHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6
Tm9ybWFsIH0pOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaG9ub3Igb3B0aW9u
cy5vcmllbnRhdGlvbigpLCBzaW5jZSBJbWFnZUJpdG1hcCdzIGZsaXBZIGhhbmRsaW5nIHJlbGll
cyBvbiBpdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAwMQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDU0MzgxODJkZGU4NzYzZWJhZDM4ZjE5
MmRmNzk1YWEwNjBiNjUxYmIuLjhkYTM5MGY2ZGE3MGUzNzk1NTBhNTcyZTA5ZTA4NDExODljMmRk
ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTc0LDMxICs3NCw2IEBAIHZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgaGFuZGxlSXRlbShE
aXNwbGF5TGlzdDo6UmVzdG9yZSgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3Bs
YXlMaXN0OjpUcmFuc2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0
OjpSb3RhdGUoYW5nbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxp
c3Q6OlNjYWxlKHNjYWxlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlz
cGxheUxpc3Q6OlNldENUTShjdG0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpjb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBo
YW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTShjdG0pKTsKLX0KLQogdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6
OlNldElubGluZUZpbGxDb2xvciYmIGl0ZW0pCiB7CiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0
ZW0pKTsKQEAgLTEyOCw0MCArMTAzLDE1IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6c2V0U3RhdGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlJiYgaXRlbSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfTsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRl
Q2hhbmdlKCkubV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRl
cm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZSgpLnN0cm9rZUJydXNoKCkucGF0dGVybigpKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFu
Z2UoKS5tX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxl
SW1hZ2UoaXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgaGFu
ZGxlSXRlbShEaXNwbGF5TGlzdDo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVE
YXNoJiYgaXRlbSkKLXsKLSAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2lu
KQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVKb2luKGxpbmVKb2luKSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9h
dCBsaW1pdCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0KGxp
bWl0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3co
KQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93KCkpOwotfQotCiB2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewogICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsaXAocmVjdCkpOwpAQCAtMzcxLDE0
ICszMjEsOSBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aEdy
YWRpZW50KERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcgogICAgIGhhbmRsZUl0ZW0oV1RGTW92
ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBv
c2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBoYW5kbGVJdGVt
KERpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1v
ZGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBj
b2xvciwgYmxlbmRNb2RlKSk7CisgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0KHJlY3QsIGNvbG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDNiYmFmNzY1ZDA1ZjQ0YWJmNGQ5NjFlNzY2Y2U2
NTQ2OThlZGUyOTQuLjgxODg5NjZhZmZhNzA5ZTZmZDBhMzFiZmNhNmMzZTcxODU2NWM1OGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtNTksMjAgKzU5LDEwIEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc2F2ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOwotICAgIHZvaWQgdHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlKTsKLSAgICB2
b2lkIHNjYWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHZvaWQgc2V0
Q1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgY29uY2F0ZW5h
dGVDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBzZXRJbmxp
bmVGaWxsQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmKTsK
ICAgICB2b2lkIHNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVTdHJva2VDb2xvciYmKTsKICAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7
CiAgICAgdm9pZCBzZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUmJik7Ci0g
ICAgdm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApOwotICAgIHZvaWQgc2V0TGluZURh
c2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYpOwotICAgIHZvaWQgc2V0TGlu
ZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7
Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpOwogICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7
CiAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKQEAg
LTk3LDggKzg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRo
R3JhZGllbnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50JiYpOwot
ICAgIHZvaWQgZmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6
OkJsZW5kTW9kZSk7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2Rl
KTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQogICAgIHZvaWQgZmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KaW5kZXggMjgwMmZmZThm
ODM5N2MwZWQ0ZGYxMjFhMDE3ZmU3ODEwOGZmNmMyMC4uNDE0YzMxYTEzMjBjMGIyZTc4NmJjOGQ5
ZjY1OTgxMDJkODcwZjQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVz
c2FnZXMuaW4KQEAgLTI1LDQ3ICsyNSwzNSBAQAogbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgU2F2ZSgpCiAgICAgUmVzdG9y
ZSgpCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgUm90YXRlKGZsb2F0IGFu
Z2xlKQotICAgIFNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZSBzY2FsZSkKLSAgICBTZXRDVE0oV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bSkKLSAgICBDb25jYXRlbmF0ZUNUTShXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0gY3RtKQorCiAgICAgU2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3IgaXRlbSkKICAgICBTZXRJbmxpbmVTdHJva2VD
b2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3IgaXRlbSkKICAg
ICBTZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIFNldFN0YXRlKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZSBpdGVtKQotICAgIFNldExpbmVDYXAoZW51bTp1aW50
OF90IFdlYkNvcmU6OkxpbmVDYXAgbGluZUNhcCkKLSAgICBTZXRMaW5lRGFzaChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TGluZURhc2ggaXRlbSkKLSAgICBTZXRMaW5lSm9pbihlbnVtOnVpbnQ4
X3QgV2ViQ29yZTo6TGluZUpvaW4gbGluZUpvaW4pCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBs
aW1pdCkKLSAgICBDbGVhclNoYWRvdygpCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0
dGVybigpCisgICAgQXBwbHlGaWxsUGF0dGVybigpCisjZW5kaWYKKyAgICBBcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KQorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKKwogICAgIENsaXAo
V2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisgICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRo
LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgQ2xpcE91dChX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBX
ZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQogICAgIENsaXBPdXRUb1BhdGgoV2Vi
Q29yZTo6UGF0aCBwYXRoKQotICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1
aW50OF90IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQotICAgIERyYXdHbHlwaHMoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgaXRlbSkKLSAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4g
c291cmNlSW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0
LCBJUEM6OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIpCi0gICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdl
YkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNS
ZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBE
cmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdl
SWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRS
ZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6
OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd1N5c3RlbUltYWdlKFJlZjxX
ZWJDb3JlOjpTeXN0ZW1JbWFnZT4gc3lzdGVtSW1hZ2UsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0
aW5hdGlvblJlY3QpCi0gICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBX
ZWJDb3JlOjpGbG9hdFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0sIFdlYkNvcmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFj
aW5nLCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgRW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKQotICAgIERyYXdSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpCi0gICAgRHJhd0xpbmUoV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDEsIFdl
YkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQyKQotICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKLSAgICBEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgRHJhd0VsbGlwc2UoV2ViQ29yZTo6RmxvYXRS
ZWN0IHJlY3QpCi0gICAgRHJhd1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIERyYXdGb2N1
c1JpbmdQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
V2ViQ29yZTo6Q29sb3IgY29sb3IpCi0gICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJD
b3JlOjpGbG9hdFJlY3Q+IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3Jl
OjpDb2xvciBjb2xvcikKKyAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpG
bG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQorCisgICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0KQorCiAgICAgRmlsbFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAgICAg
RmlsbFJlY3RXaXRoQ29sb3IoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9y
IGNvbG9yKQogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdFdpdGhHcmFkaWVudCBpdGVtKQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJD
b3JlOjpDb21wb3NpdGVPcGVyYXRvciBvcCwgZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9k
ZSBibGVuZE1vZGUpCi0gICAgRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJl
Y3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVu
ZE1vZGUgYmxlbmRNb2RlKQorICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5k
ZWRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0
IHJvdW5kZWRIb2xlUmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBGaWxsRWxsaXBz
ZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
ICAgICBGaWxsTGluZShzdHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBGaWxsQXJj
KHN0cnVjdCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC03MywxMSArNjEsMTAgQEAgbWVzc2Fn
ZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAg
ICAgRmlsbEJlemllckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkK
ICNlbmRpZgogICAgIEZpbGxQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBGaWxsRWxsaXBz
ZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkK
LSAgICBUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNl
IGNvbG9yU3BhY2UpCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVy
SWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCisK
ICAgICBTdHJva2VSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
CisKKyAgICBTdHJva2VFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogICAgIFN0cm9rZUxpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVE
YXRhIGRhdGEpCiAgICAgU3Ryb2tlQXJjKHN0cnVjdCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBA
IC04NSwxMyArNzIsMzEgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBO
b3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgU3Ryb2tlQmV6aWVyQ3VydmUoc3RydWN0IFdlYkNv
cmU6OkJlemllckN1cnZlRGF0YSBkYXRhKQogI2VuZGlmCiAgICAgU3Ryb2tlUGF0aChXZWJDb3Jl
OjpQYXRoIHBhdGgpCi0gICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkK
LSAgICBDbGVhclJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0jaWYgVVNFKENHKQotICAg
IEFwcGx5U3Ryb2tlUGF0dGVybigpCi0gICAgQXBwbHlGaWxsUGF0dGVybigpCisKKyAgICBEcmF3
UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAg
IERyYXdMaW5lKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50
IHBvaW50MikKKworICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAg
IERyYXdQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKKworICAgIERyYXdGb2N1c1JpbmdQYXRoKFdl
YkNvcmU6OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29s
b3IgY29sb3IpCisgICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJl
Y3Q+IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xv
cikKKworICAgIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZpZXIsIFdlYkNv
cmU6OkZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRl
cikKKyAgICBEcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9u
UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBh
aW50aW5nT3B0aW9ucyBvcHRpb25zKQorICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6
U3lzdGVtSW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25S
ZWN0KQorICAgIERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUgaW1hZ2VTaXplLCBXZWJD
b3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1
Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3UGF0dGVy
bihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBX
ZWJDb3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB0aWxlUmVjdCwg
V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6RmxvYXRQb2ludCBw
aGFzZSwgV2ViQ29yZTo6RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBh
aW50aW5nT3B0aW9ucyBvcHRpb25zKQorI2lmIEVOQUJMRShWSURFTykKKyAgICBQYWludEZyYW1l
Rm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNv
cmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvbikKICNlbmRpZgotICAgIEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCisKKyAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCisgICAgRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCBpdGVtKQorICAgIERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKworICAgIENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQor
ICAgIFRyYW5zZm9ybVRvQ29sb3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKICAgICBGbHVzaENvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1
c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5LmNwcAppbmRleCA4NTc3Y2JiZGU2ZDM5MDFkMzQ3MDc2MWVkMzBmNzlk
OThlODJiOThkLi42Y2ZiYWJjYTdiY2ZiZWRjNTk1NDgzZThlZWIxZDVhYjEyMDk2NmE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCkBAIC0zMiwzNiAr
MzIsMjEgQEAKICNpbmNsdWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBsYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHkoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkmIHJlbmRlcmluZ0JhY2tlbmQsIGNvbnN0IEZsb2F0UmVjdCYgaW5p
dGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1Jl
Y29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAg
IDogRGlzcGxheUxpc3Q6OlJlY29yZGVyKHsgfSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRl
Y29uc3RydWN0RHJhd0dseXBocykKKyAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcihpbml0aWFs
Q2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kZXN0aW5h
dGlvbkJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKCkpCiAgICAgLCBtX2ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKQogICAgICwgbV9yZW5kZXJp
bmdCYWNrZW5kKHJlbmRlcmluZ0JhY2tlbmQpCiB7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3Jt
VG9Db2xvclNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JT
cGFjZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpU
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOwotfQotCiBSZW5kZXJpbmdNb2RlIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIgPyBtX2ltYWdlQnVmZmVyLT5yZW5kZXJpbmdNb2RlKCkg
OiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwpAQCAtNzcsMzEgKzYyLDYgQEAgdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc3RvcmUoKQogICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJlc3RvcmUoKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpUcmFuc2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJvdGF0ZShhbmdsZSkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXpl
JiBzY2FsZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpTY2FsZShzY2FsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldENUTSh0cmFuc2Zv
cm0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENv
bmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNvbmNhdGVuYXRlQ1RNKHRy
YW5zZm9ybSkpOwotfQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU2V0SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldElubGluZUZpbGxDb2xvcihE
aXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yIHsgY29sb3IgfSkpOwpAQCAtMTE3LDkyICs3
NywyNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3Ry
b2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKSk7CiB9CiAK
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7IHN0YXRlLCBmbGFn
cyB9KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRT
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpTZXRMaW5lQ2FwKGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYgYXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVE
YXNoIHsgYXJyYXksIGRhc2hPZmZzZXQgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUpvaW4o
bGluZUpvaW4pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyU2hhZG93
KCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xp
cChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6Q2xpcChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0KHJl
Y3QpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6Q2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBP
dXRUb1BhdGgocGF0aCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwotfQotCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVj
dCwgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdlKQotICAgICAgICBp
ZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOwot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJl
ZEltYWdlQnVmZmVyKFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpG
aWx0ZXJSZWZlcmVuY2UoUmVmPEZpbHRlcj4geyBmaWx0ZXIgfSkpKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0
U3RhdGUgeyBzdGF0ZSB9KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9k
ZSBtb2RlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkRyYXdHbHlwaHMoRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgeyBmb250LCBnbHlwaHMsIGFkdmFu
Y2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBp
bWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1h
Z2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRl
bnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCisjaWYgVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmll
ciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsK
IH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0
ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb25SZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFw
cGx5RmlsbFBhdHRlcm4oKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxs
UGF0dGVybigpKTsKIH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAKLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikK
IHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0
dGVybihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKIH0KIAog
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKQEAgLTIxNSw0NCArMTA5LDM0IEBAIHZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQotewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3Qs
IHdpZHRoKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpE
cmF3TGluZShwb2ludDEsIHBvaW50MikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9j
a0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdMaW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQg
eyBibG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVMaW5lcyB9KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6Q2xpcChyZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIHJ1bGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1
bGUpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RWxsaXBzZShy
ZWN0KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xp
cE91dChyZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRo
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91
dFRvUGF0aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdl
QnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRo
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsKIH0KIAotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lk
dGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpDbGVhclJlY3QocmVjdCkpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAt
MjcwLDIzICsxNTQsMjIgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYKICAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhHcmFkaWVudChEaXNw
bGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQgeyByZWN0LCBncmFkaWVudCB9KSk7CiB9CiAK
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQ29tcG9zaXRl
ZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3Is
IG9wLCBtb2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RmlsbFJvdW5kZWRSZWN0KHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9k
ZSBtb2RlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRlZFJlY3Qocm91bmRl
ZFJlY3QsIGNvbG9yLCBtb2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZFJlY3QsIGNv
bG9yKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxFbGxpcHNl
KHJlY3QpKTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEm
IGRhdGEpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RmlsbExpbmUoZGF0YSkpOwpAQCAtMzA2LDcgKzE4OSw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVE
YXRhCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmls
bEJlemllckN1cnZlKGRhdGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTMxNCwyMyArMTk2LDE3IEBAIHZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQog
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxQYXRoKHBh
dGgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7Ci19Ci0KLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIu
aWRlbnRpZmllcigpLCBkZXN0aW5hdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ry
b2tlUmVjdChyZWN0LCB3aWR0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlN0cm9rZUVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCi0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUxpbmUoZGF0YSkpOwpAQCAtMzUwLDcg
KzIyNiw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJv
a2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhCiB7CiAgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlQmV6aWVyQ3VydmUoZGF0YSkpOwogfQot
CiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBA
IC0zNTgsMzMgKzIzMyw4NCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZVBhdGgocGF0aCkpOwogfQogCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tl
RWxsaXBzZShyZWN0KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6RHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQog
ewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyUmVj
dChyZWN0KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd0VsbGlwc2UocmVjdCkpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0
dGVybigpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpE
cmF3UGF0aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5n
UGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogfQogCi0jZW5kaWYgLy8gVVNFKENH
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1Jp
bmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBv
ZmZzZXQsIGNvbG9yKSk7Cit9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkK
KyAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpE
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJl
Y3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7Cit9CisK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1h
Z2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUlt
YWdlKGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cykpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvblJlY3QpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpKTsK
K30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0
ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVy
bihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucykpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
K3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZy
YW1lRm9yTWVkaWEoaWRlbnRpZmllciwgZGVzdGluYXRpb24pKTsKK30KKyNlbmRpZgorCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBs
b2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3
R2x5cGhzIHsgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2Rl
IH0pKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMp
Cit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xp
bmVzRm9yVGV4dChEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IEZsb2F0UG9pbnQoKSwg
dG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxp
bmVzIH0pKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBz
dHlsZSkpOwogfQogCiBib29sIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
UmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmIGltYWdlKQpAQCAtNDM0LDExICszNjAsNiBAQCBib29s
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoRm9udCYg
Zm9udCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OmZsdXNoQ29udGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRl
bnRpZmllcikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpGbHVzaENvbnRleHQoaWRlbnRpZmllcikpOwotfQotCiBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJp
bmdNb2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBj
b25zdAogewogICAgIGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkgewpAQCAtNDY0
LDYgKzM4NSwyMSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6Y3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbgogICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNv
bG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAKK3ZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworfQorCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZsdXNoQ29udGV4dChpZGVudGlmaWVyKSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCmluZGV4IDliMzNhMDY3
ZmQxNmJjY2YxNDA0MmMxOTc0ZGQ2OTE5NDIyNjI0NjguLmYyYWQ4ZDBhYTQ1ODU4OWFlZTgxOTA3
ZDljOTA4OTZkMzRiNmY3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkuaApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIAogY2xhc3MgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlciB7CisgICAgZnJp
ZW5kIGNsYXNzIFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKIHB1YmxpYzoKICAgICBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGluaXRpYWxD
bGlwLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBXZWJDb3JlOjpEcmF3R2x5cGhz
UmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIH5SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHkoKSA9IGRlZmF1bHQ7CkBAIC01MCw2MyArNTEsMzkgQEAgcHVibGljOgog
ICAgIHZvaWQgZmx1c2hDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRp
ZmllcikgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2
b2lkIHNlbmQoVCYmIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVu
ZGVyaW5nQmFja2VuZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9uZWVkc0Zs
dXNoID0gdHJ1ZTsKLSAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RG
TW92ZShtZXNzYWdlKSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwotICAgIH0KLQot
ICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7Ci0KICAgICBXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKIAogICAgIHZv
aWQgcmVjb3JkU2F2ZSgpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0Q1RN
KGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
Q29uY2F0ZW5hdGVDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisK
ICAgICB2b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90
PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpT
UkdCQTx1aW50OF90PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3Mo
ZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKFdlYkNvcmU6Okxp
bmVDYXApIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6
RGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRM
aW5lSm9pbihXZWJDb3JlOjpMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRl
ckxpbWl0KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7
CisgICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZSYpIGZpbmFsOworCisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQ
YXR0ZXJuKCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7
CisjZW5kaWYKKworICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkg
ZmluYWw7CisgICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAg
ICAgdm9pZCByZWNvcmRDbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRS
dWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBm
aW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdl
YkNvcmU6OldpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd0dseXBocyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9u
dFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdl
YkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNv
cmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lz
dGVtSW1hZ2UoV2ViQ29yZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KTsKLSAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1Jp
bmdQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmlu
Z1JlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZENsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVh
clJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29y
ZEZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVj
b3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50JikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2Vi
Q29yZTo6QmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBX
ZWJDb3JlOjpCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYp
IGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQogICAgIHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBm
aW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxBcmMoY29uc3QgV2ViQ29yZTo6QXJjRGF0YSYpIGZp
bmFsOwpAQCAtMTE0LDkgKzkxLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6
aWVyQ3VydmUoY29uc3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYK
ICAgICB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVy
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5h
bDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VF
bGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBXZWJDb3JlOjpM
aW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IFdlYkNvcmU6
OkFyY0RhdGEmKSBmaW5hbDsKQEAgLTEyNCwxMyArMTAyLDI4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEm
KSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBXZWJDb3Jl
OjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJlY29yZEFw
cGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVy
bigpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJh
d0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwb2ludDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0
aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1
c1JpbmdQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3Vz
UmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVyJikg
ZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShXZWJDb3Jl
OjpTeXN0ZW1JbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KTsKKyAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9y
TWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlw
aHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgq
LCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhp
bmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwog
CiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpIGZpbmFs
OwogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5h
bDsKQEAgLTE0MSw2ICsxMzQsMTggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJD
b3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nTWV0aG9kPikgY29uc3QgZmluYWw7CiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2VuZChUJiYgbWVzc2FnZSkKKyAgICB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBtX25lZWRzRmx1c2ggPSB0cnVlOworICAgICAgICBtX3JlbmRlcmlu
Z0JhY2tlbmQtPnNlbmRUb1N0cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rlc3RpbmF0aW9uQnVm
ZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0KSBmaW5hbDsKKwogICAgIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcjsKICAgICBXZWFrUHRyPFdlYkNv
cmU6OkltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwogICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5PiBtX3JlbmRlcmluZ0JhY2tlbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggMWQ2NDNiNmI0
Mjg4ZDA4ZTAzOGM0NjI1ZDA1NDlkZTY4YWYyYWE3Ny4uMDc5OTNiMzgwZjFlYTdkMzQ5ZGQ3ZWJm
YzE2MGM4MDRkYWQ0M2UzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgRmluZENv
bnRyb2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvCiAKICAgICAvLyBEcmF3IHdoaXRlIGZyYW1lcyBhcm91bmQgdGhlIGhvbGVz
LgogICAgIC8vIFdlIGRvdWJsZSB0aGUgdGhpY2tuZXNzIGJlY2F1c2UgaGFsZiBvZiB0aGUgc3Ry
b2tlIHdpbGwgYmUgZXJhc2VkIHdoZW4gd2UgY2xlYXIgdGhlIGhvbGVzLgotICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkp
LCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dERyb3BTaGFkb3coeyBGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNo
YWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRT
dHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VU
aGlja25lc3MoYm9yZGVyV2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiB3aGl0ZUZy
YW1lUGF0aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCBmMTZmNzk2ZTA0
N2U5OTE5NzJjMGVkMWY0YWUxMTNjZTE2NTY1YzEwLi40OWUwMGJlMzM3ZWFmZWUxMjkzZWYwNzdh
ZGY2MTdjZGFlM2Q0YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0
Nyw3ICsyNDcsNyBAQCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3Qo
V2ViQ29yZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogCiAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAg
ICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZz
ZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAg
IGdyYXBoaWNzQ29udGV4dC5zZXREcm9wU2hhZG93KHsgV2ViQ29yZTo6RmxvYXRTaXplKHNoYWRv
d09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9
KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRDb2xvcik7CiAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JCb3JkZXJXaWR0aCAq
IDIpOwogICAgIGZvciAoYXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlOTdjMjBhNGZmNWJlNDFk
OWMzMjA1N2M1MDgxY2ZmYzRiODFhNGE2Li4yYWY4MWMyYTFmYzVmNjhiYTA0MGYzZDAxNGY0MjE3
ZjRlYjM2MWUyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDMtMTQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fp
ZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0
ZSBzaG91bGQgYmUgbGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIyLTAzLTE0ICBKb25hdGhhbiBC
ZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbZ2l0LXdlYmtpdF0gSGFuZGxl
IGNvbXBhcmluZyBVc2VyIGFuZCBDb250cmlidXRvciB0byBOb25lCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dFRlc3RzQ0cuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAppbmRleCA4ZTQxYzVhNzNhZTM2ODRjZWRk
ZjFmOTRmOWYxNzE4OTUzNTE0YzlmLi5lYmU2NDQ4NzFlMjhmNTE5Y2QyNjEyMGI4YTgyNzg4NmMw
MTkwMmJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5j
cHAKQEAgLTU0LDcgKzU0LDcgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMs
IEJhc2ljKQogICAgIEdyYXBoaWNzQ29udGV4dENHIHByaW1hcnlDb250ZXh0KHByaW1hcnlDR0Nv
bnRleHQuZ2V0KCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAg
ICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJl
Y3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRl
ckltcGwgc2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRl
eHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC05MCwxMCArOTAs
MTAgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJhc2ljKQogVEVTVChC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIFRleHQpCiB7CiAgICAgSW5NZW1vcnlEaXNw
bGF5TGlzdCBwcmltYXJ5RGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHByaW1hcnlDb250
ZXh0KHByaW1hcnlEaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRo
LCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgcHJpbWFyeUNvbnRleHQo
cHJpbWFyeURpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0
SGVpZ2h0KSk7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IHNlY29uZGFyeURpc3BsYXlMaXN0
OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeURpc3BsYXlMaXN0
LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0p
OworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeURpc3BsYXlMaXN0
LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29u
dGV4dCk7CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHRUZXN0cywgQm9yZGVycykKICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmltYXJ5Q29udGV4dChw
cmltYXJ5Q0dDb250ZXh0LmdldCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxh
eUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIHsg
fSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7Cisg
ICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgw
LCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAt
MjI4LDcgKzIyOCw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUcmFu
c2Zvcm1lZENsaXApCiAgICAgR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCA9IHByaW1h
cnlDb250ZXh0Q0c7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAg
IFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRS
ZWN0KDAsIDAsIDEwMCwgMTAwKSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29u
dGV4dERMKGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBHcmFw
aGljc0NvbnRleHQmIHNlY29uZGFyeUNvbnRleHQgPSBzZWNvbmRhcnlDb250ZXh0REw7CiAKICAg
ICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5
Q29udGV4dCk7CkBAIC0yODcsMTUgKzI4NywxNSBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHRUZXN0cywgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKICAgICBHcmFwaGljc0NvbnRleHQm
IHByaW1hcnlDb250ZXh0ID0gcHJpbWFyeUNvbnRleHRDRzsKIAogICAgIEluTWVtb3J5RGlzcGxh
eUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRETChk
aXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApLCB7IH0pOworICAgIFJl
Y29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAw
LCAxMDAsIDEwMCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5Q29udGV4dCA9IHNl
Y29uZGFyeUNvbnRleHRETDsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHBy
aW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIAogICAgIGN0eC5hcHBseURldmljZVNj
YWxlRmFjdG9yKDIpOwogCi0gICAgYXV0byBwcmltYXJ5Q1RNID0gcHJpbWFyeUNvbnRleHQuZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlOjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKLSAgICBhdXRvIHNlY29uZGFyeUNUTSA9IHNlY29uZGFyeUNvbnRleHQu
Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlOjpEZWZpbml0ZWx5SW5j
bHVkZURldmljZVNjYWxlKTsKKyAgICBhdXRvIHByaW1hcnlDVE0gPSBwcmltYXJ5Q29udGV4dC5n
ZXRDVE0oKTsKKyAgICBhdXRvIHNlY29uZGFyeUNUTSA9IHNlY29uZGFyeUNvbnRleHQuZ2V0Q1RN
KCk7CiAKICAgICBFWFBFQ1RfRVEocHJpbWFyeUNUTS54U2NhbGUoKSwgc2Vjb25kYXJ5Q1RNLnhT
Y2FsZSgpKTsKICAgICBFWFBFQ1RfRVEocHJpbWFyeUNUTS55U2NhbGUoKSwgc2Vjb25kYXJ5Q1RN
LnlTY2FsZSgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAppbmRleCAyNDczNTgwZjE5
MGUwZmQ2NzRjMzY3ZGE0N2M5ZjE5MmJhMjQ4NWU0Li4yMTVjMTdjNjY1N2FlZGE2YTZlMmNkMGFl
MGM5YzkyNmYzYmQ4MmIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvY2cvR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NnL0dyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCkBAIC01Miw3
ICs1Miw3IEBAIFRFU1QoR3JhcGhpY3NDb250ZXh0VGVzdHMsIERyYXdOYXRpdmVJbWFnZURvZXNO
b3RMZWFrQ29tcG9zaXRlT3BlcmF0b3IpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY3R4KGNnQ29u
dGV4dC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfRVEoY3R4LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBD
b21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zlcik7Ci0gICAgRVhQRUNUX0VRKGN0eC5ibGVuZE1v
ZGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIEVYUEVDVF9FUShjdHguYmxl
bmRNb2RlKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKIAogICAgIGF1dG8gZ3JlZW5QaXhlbENHID0g
Z3JlZW5JbWFnZSgpOwogICAgIGF1dG8gZ3JlZW5QaXhlbE5hdGl2ZSA9IE5hdGl2ZUltYWdlOjpj
cmVhdGUoZ3JlZW5QaXhlbENHLmdldCgpKTsKQEAgLTcxLDcgKzcxLDcgQEAgVEVTVChHcmFwaGlj
c0NvbnRleHRUZXN0cywgRHJhd05hdGl2ZUltYWdlRG9lc05vdExlYWtDb21wb3NpdGVPcGVyYXRv
cikKICAgICBFWFBFQ1RfRVEocHJpbWFyeURhdGFbMl0sIDApOwogCiAgICAgRVhQRUNUX0VRKGN0
eC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIpOwot
ICAgIEVYUEVDVF9FUShjdHguYmxlbmRNb2RlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFs
KTsKKyAgICBFWFBFQ1RfRVEoY3R4LmJsZW5kTW9kZSgpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1MTc3ZWQ5Mjk4MGRkOGQ0
YmE0YmYzYWYzZDE0MTA2YTYyZmQ2Yjg3Li5jNGY5NmMxYjhjODcyY2Q4YTgwNThkMjFjNDRhNmRl
N2UxMjMzOWE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDMtMTQgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGlj
c0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
ZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBkaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVk
LnR4dDoKKwogMjAyMi0wMy0xNCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4K
IAogICAgICAgICBbbW9kZWxdIDxtb2RlbCBpbnRlcmFjdGl2ZT4gZG9lc24ndCBhbGxvdyBtb2Rl
bCB0byBiZSByb3RhdGVkIG9uIGlPUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CmluZGV4IDUxMWI3
YzBjNTRkMzMyMTZiN2M2ZWFmMDQzYTc1YzE2NzY2ZDA0MjcuLmRiZjU0YjNlYTIwNGUxOTI0YmQ0
MzVkNTE3MzZkYzczNDc3MDJjZmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9k
aXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTEsMTcg
KzEsMTMgQEAKIAotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAwLjAwKSkKIChzYXZlKQog
KHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDUxMikKLSAgKHNoYWRvdy1ibHVyIDEyLjAwKQot
ICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCi0gIChzaGFkb3ctY29sb3IgIzAw
MDAwMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCi0oZmlsbC1jb21wb3NpdGVk
LXJlY3QKKyAgKGNoYW5nZS1mbGFncyBbZHJvcC1zaGFkb3ddKQorICAoZHJvcC1zaGFkb3cKKyAg
ICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvdy1ibHVyIDEy
LjAwKQorICAgIChzaGFkb3ctY29sb3IgIzAwMDAwMCkKKyAgICAoc2hhZG93cy11c2UtbGVnYWN5
LXJhZGl1cyAwKSkpCisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDUwLDUwKSBz
aXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBz
b3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDQzLDUwKSBzaXpl
IDEzNHgxMzcpCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgx
MzcpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRl
bnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5
bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDM4NmUz
OTQxMTg1ZjA5YTNjNjhlYzZjMmFlODhkZjExYzcwYjBhNjkuLjVmNzhiOGMzNTA1YzllODAzOTli
ZDYwNWE5YmU5NTVhYjA5YjcwNWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dApA
QCAtMSwyMSArMSwxNCBAQAogCi0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5IDIyLjAwKSkK
LShjb25jYXRlbnRhdGUtY3RtCi0gIChjdG0ge209KCgwLjg3LDAuNTApKC0wLjUwLDAuODcpKSB0
PSg4MS43MCwtMTguMzApfSkpCiAoc2F2ZSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyA1
MTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVp
Z2h0PTIwKQotICAoc2hhZG93LWNvbG9yICMwMDAwMDApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3kt
cmFkaXVzIDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisgIChjaGFuZ2UtZmxhZ3MgW2N0bSwg
ZHJvcC1zaGFkb3ddKQorICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEu
NzAsMy43MCl9KQorICAoZHJvcC1zaGFkb3cKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBo
ZWlnaHQ9MjApCisgICAgKHNoYWRvdy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ctY29sb3IgIzAw
MDAwMCkKKyAgICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkpCisoZmlsbC1yZWN0LXdp
dGgtY29sb3IKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDB4MTAwKQotICAoY29sb3IgIzAwMDBG
RikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5v
cm1hbCkgZXh0ZW50IGF0ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKKyAgKGNvbG9y
ICMwMDAwRkYpIGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAocmVz
dG9yZSkKLShzZXQtY3RtCi0gIChzZXQtY3RtIHttPSgoMS4wMCwwLjAwKSgwLjAwLDEuMDApKSB0
PSgwLjAwLDIyLjAwKX0pKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xh
eWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9s
YXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggYmMxN2I1MTE0OTlmODI1NmM5OTI5
MGRhZTg2MTRkNDg5NGNhZjljYy4uNTQ2ZGM0OTEyZjUyZDAzYTg5YWQ5MDY4NTcyYjI4ZWRjODAz
MjI1MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1s
aXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlz
cGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDE2ICsxLDEyIEBACiAKLSh0cmFuc2xhdGUKLSAg
KHggMC4wMCkKLSAgKHkgMC4wMCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QKKyhmaWxsLXJlY3Qt
d2l0aC1jb2xvcgogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCi0gIChjb2xvciAjMDA4
MDAwKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUg
bm9ybWFsKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQorICAoY29sb3IgIzAwODAwMCkg
ZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFn
cyAzMjk2MCkKLSAgKGZpbGwtY29sb3IgIzAwMDBGRikKLSAgKHN0cm9rZS1zdHlsZSAwKQorICAo
Y2hhbmdlLWZsYWdzIFtmaWxsLWJydXNoLCBzdHJva2Utc3R5bGUsIHNob3VsZC1hbnRpYWxpYXNd
KQorICAoZmlsbC1icnVzaAorICAgIChjb2xvciAjMDAwMEZGKSkKKyAgKHN0cm9rZS1zdHlsZSBO
Ty1TVFJPS0UpCiAgIChzaG91bGQtYW50aWFsaWFzIDApKQogKGRyYXctcmVjdAogICAocmVjdCBh
dCAoMCwwKSBzaXplIDEwNHgyKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAppbmRleCBiYjU5
M2QyMGY2ZGE2NDg2MjkyZDM2YzAyMjBlMmE5ZDg3MmY4MmI5Li5iODYwNDhjYzA4Yzk5MzdlZjAw
NzgyZTcxMDg5Y2FjYmM5OWM1MzMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAt
MSwxNiArMSw4IEBACiByZWNvcmRlZDoKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4w
MCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QKKyhmaWxsLXJlY3Qtd2l0aC1jb2xvcgogICAocmVj
dCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKLSAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3Np
dGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBh
dCAoNDEyLDApIHNpemUgMTAweDEwMCkKKyAgKGNvbG9yICMwMDAwRkYpIGV4dGVudCBhdCAoNDEy
LDApIHNpemUgMTAweDEwMCkKIAogcmVwbGF5ZWQ6CiAoCiAgIChjbGlwIGF0ICg1MTIsMCkgc2l6
ZSA1MTJ4MjAwKQotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAwLjAwKSkK
</data>
<flag name="commit-queue"
          id="482531"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454776</attachid>
            <date>2022-03-15 16:57:18 -0700</date>
            <delta_ts>2022-03-15 18:21:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220315165716.patch</filename>
            <type>text/plain</type>
            <size>672429</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uNjcwMTcwMzVhMjgzZWVkMzkzM2Y2OTQzNGI5YWI3
NmU2ZTczMTUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1NSBAQAorMjAyMi0wMy0xNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
QXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZy
b21QYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25Q
YWludGVyOjpwYWludEJveFNoYWRvdyBjb25zdCk6CisgICAgICAgICogaHRtbC9DdXN0b21QYWlu
dEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0
VW5jaGVja2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3TGF5b3V0U3RpcHBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdMYXlvdXRIYXRjaGluZyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c2V0SXNDQUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Up
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5h
bExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlw
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
QmlkaVRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRHJhd0dseXBoc1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRlY29uc3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkaWRBcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNjYWxlRmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGly
ZWN0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5n
ZXNGcm9tU3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQ
YXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbFBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdl
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnRE
ZXRlY3RlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENv
bnRlbnRmdWxQYWludERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVy
Z2VTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJn
ZVN0YXRlRGlmZnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNm
b3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6bGluZURhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmxpbmVKb2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptaXRlckxpbWl0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU1vZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb21wb3NpdGVPcGVyYXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpibGVuZE1vZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJvcFNoYWRvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd09mZnNldCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dDb2xvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyb3BTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1Zpc2libGVTaGFkb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNCbHVycmVkU2hhZG93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzU2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWxwaGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkQW50aWFsaWFz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50
aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU21vb3Ro
Rm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91
bGRTbW9vdGhGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3THVtaW5hbmNlTWFz
ayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyYXdMdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dXNlRGFya0Fw
cGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRV
c2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojppc0luVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5h
bExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXND
QUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ0FM
YXllckNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJT
Y29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpiZWdpbkxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3Bl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNz
Q29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lcjo6fkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25s
eVByaW1pdGl2ZUNoYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bWVyZ2VEaWZmcyk6CisgICAgICAgIChXZWJDb3JlOjpzdGF0ZUNoYW5nZU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmR1bXAgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmNoYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmRpZEFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6ZmlsbEJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmZpbGxSdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VUaGlja25lc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZVN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUNhcCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUNh
cCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZURhc2ggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5lSm9pbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUpvaW4p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1pdGVyTGltaXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldE1pdGVyTGlt
aXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNvbXBvc2l0ZU1v
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENv
bXBvc2l0ZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRy
b3BTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRUZXh0RHJhd2luZ01vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3VsZEFudGlhbGlhcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxk
QW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91
bGRTbW9vdGhGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0U2hvdWxkU21vb3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXREcmF3THVtaW5hbmNlTWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6dXNlRGFya0FwcGVhcmFuY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFVzZURh
cmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkZWNv
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
OjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6YmVnaW5MYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjp+VHJhbnNwYXJlbmN5
TGF5ZXJTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNr
Q2hlY2tlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXI6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
TW9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVEYXNoOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJvcFNoYWRvdzo6aXNCbHVycmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
b3BTaGFkb3c6Omhhc091dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRv
dzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmRlY29kZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6TnVsbEdyYXBoaWNzQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1
enouY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJydXNoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6U291
cmNlQnJ1c2gpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3Jt
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpncmFkaWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6cGF0dGVybiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQnJ1c2g6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpicnVzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmlzUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNo
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UZXh0Qm94SXRlcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvZmZzZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjppbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveEl0ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmN1cnJlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0
ZXJhdG9yOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJh
dG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3UGF0aFNo
YWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd0dseXBoc1NoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpTdGF0ZTo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpGaWxsU291
cmNlOjpGaWxsU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdHJva2VTb3VyY2U6
OlN0cm9rZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGU6OlNo
YWRvd1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZTo6aXNSZXF1
aXJlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUNhcCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fp
cm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1BsYXRm
b3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZp
bGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGlj
c0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlw
aHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0Zv
clRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0Q1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2Fw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNS
ZWNvcmRlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpD
R0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2
ZXI6On5DR0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0
YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZl
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250
ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3aW5n
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5k
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lQ2FwKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENHTGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q0dTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5
U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJv
a2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGlu
ZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseURl
dmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpm
aWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tl
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2FuVXNlU2hh
ZG93Qmx1ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9pbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6Q0dDb250ZXh0U3Rh
dGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVy
Ojp+Q0dDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29u
dGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dD
b250ZXh0U3RhdGVTYXZlcjo6ZGlkU2F2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6c3Ryb2tlQ29udGFpbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJlZ2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3SW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250KToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFs
Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6
OmNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlRmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVDVE0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93SXNDbGVhcmVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6
OnNhZmVDb3B5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6c2l6ZU9mSXRlbUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Omlz
RHJhd2luZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzSW5saW5lSXRl
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Rh
dGU6OlNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFp
bnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xh
dGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSb3RhdGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTY2FsZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldENUTTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6YXBwbHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjph
cHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZUpvaW46OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRNaXRlckxpbWl0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlOjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSb3VuZGVkUmVjdDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjphbmdsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YW1vdW50IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjp0cmFu
c2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNv
bmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
c3RhdGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXA6OmxpbmVDYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRhc2hBcnJheSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6
OmRhc2hPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVEYXNoOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxpbmVKb2luIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxp
bWl0OjpTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRNaXRlckxpbWl0OjptaXRlckxpbWl0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVk
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBv
c2l0ZWRSZWN0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbXBvc2l0ZU9w
ZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpnbG9iYWxCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRS
ZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6UmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Om1fZHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjphcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZv
ck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ds
eXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6On5SZWNvcmRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Y29udGFpbnNPbmx5SW5saW5lU3RhdGVD
aGFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
b25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3Rt
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6Q29udGV4dFN0YXRlOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpD
b250ZXh0U3RhdGU6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZWNvcmREcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRT
dGF0ZTo6Q29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjbG9uZUZvclNhdmUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6
OmNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZVN0YWNrIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6UmVjb3JkZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZEZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3Vy
dmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
U3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBs
OjpyZWNvcmRTdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERy
YXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1l
Rm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6ZXh0ZW50RnJvbUxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6On5SZWNvcmRlckltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkVHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRT
Y2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmRTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRNaXRlckxpbWl0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZENsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpSZWNv
cmRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjphcHBseVNldFN0YXRlSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2
ZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0b3JlKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFu
Z2VzKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Y2xpcCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwT3V0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNs
aXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGlu
ZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0Q1RNKTog
RGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpn
ZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09w
ZXJhdGlvblJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdH
bHlwaHNSZWNvcmRlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFk
b3dGb3JCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGRJbm5lclNoYWRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5n
L1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VTdHJva2VTdHlsZVRvRmlsbCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZTo6ZHJhdyk6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3Qg
YWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZDljYzNjNGZlNjll
OGJjZTVlMDFjODlhZjRkMDdjNzVhYzgwYzNlNi4uZTE2MmJlOGJmMTJiMzA4ZDA3MTIxZDg0OWQ0
YTczMzc4NDRmZTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAyMi0wMy0xNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRTdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5z
bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpz
ZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdCk6IERl
bGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBs
eURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0
aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1Jl
Y3RzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0dseXBocyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjptX3JlbmRlcmluZ0JhY2tlbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0
ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZURhc2gpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclNoYWRv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6c2VuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6CisK
IDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUg
cm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA2YmUwNjRlMzgz
ODkzN2ZkZTVlODUyODY5NWY0MTQwYzJkODNiMmRhLi44ODEzYmNkMWUxYmVhMzNmZTVkOTBhZTdk
NjY3NzhiMjdhYTdkMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjItMDMtMTUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6
aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJW
aWV3OjpwYWludEludG9CYWNraW5nU3RvcmUpOgorCiAyMDIyLTAzLTA0ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSG9tZSBsaW5rIG9uIHdlYXRoZXIuZ292IGlz
IG5vdCB3b3JraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA3MzY0NDJhMDhhNzQ1MDBhMzUyZjA0
YzJlMTA2ZDhjNDFlN2E0ZmM1Li5lMzdjNDg2ZDg1OTczOTQwZTVlNTc3N2MxOTZlYjkyYjdkMGIw
Y2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0OTEsNiArMTQ5MSw4IEBAIHNldChXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyQ2xpZW50LmgKQEAgLTE1NTAsNiArMTU1Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUF1ZGlvVHJh
Y2tDb25maWd1cmF0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUNvbG9yU3Bh
Y2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
LmgKQEAgLTE1NjgsNiArMTU3MSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hvdWxkTG9j
YWxpemVBeGlzTmFtZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Tb3VyY2VJbWFnZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA2
MmQ0M2U2YTNhOTMyMTVmZjA3NTdhNDc4ODRhOGI2Yzg0NGI4OTZkLi5kMDU2NWJlYzkyMWYwY2Q5
MTVlNDg4NWZkZjZiYTMyYTNhNmJkM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTE1Niw2ICsxNTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJl
ZUhvc3RDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW4uaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JTcGFjZUNHLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNWRlZTc1
NDA1MzU3OWY1NWI1NWYyZmU0YWQwZGQwYTY5ZGViZmQ0YS4uZTRmNjI3MTkwY2M4OWJlODZkMDY5
ODFmMzFkMDEzMzY1OTJlOTY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTY0MCw2
ICs2NDAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViVmlkZW9Db250YWluZXJMYXllci5oCiAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQ
b29sLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggNWM3YjczZWIyMDVlMDllYzI0NmUwMTFkMGE1MDJkY2Q0
YzFkY2E1MC4uZWI3NmExODZkMzQ4ZDRiMzY4OWYyMzRmM2RiZjYyODJhYWFkZTA1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTIwNDUsNiArMjA0NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcApAQCAtMjA4NCw2
ICsyMDg1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3Qu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnJ1c2guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9T
dHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggODI5NjJiYTA0ZTJmZmQ3ZmZhMGM2ZTYxZDljOWMyYzE3
YTVmNjQ2Ny4uYjU1YzVjMWM0MmUzMjk1NTcwZWQyNGM4NDBkYzNlNGYyZmQzMDJlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MjMzMSwxMCArMjMzMSwxMiBAQAogCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGMDVGODAyNTEyNDQy
RTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NT
UHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MUZDQjE3MDI3QkFCM0ZFMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQ0Ix
NkQyN0JBQjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAxNzgzQjI3RDU3RjlGMDA5QkVC
MUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0
YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZC
QTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVF
NTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMUI0OTc0MjUxMkJBM0IwMEZF
OUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1h
cEJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMw
QjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNDYwREQ3MjdDODZEQUQwMEQ1RjlG
NCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI0Njk2M0IyNzVDNUZBNjAwQTkxNTZBIC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1M0ZCODMyMTNCMUJCODAwQzQw
RDM0IC8qIENTU0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyNDY5NjNEMjc1QzYxNDQwMEE5MTU2QSAvKiBGaWx0ZXJFZmZlY3RWZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMTRC
OUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRTI3NUM2MTY3MDBB
OTE1NkEgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjRFRjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBGaWx0ZXJJbWFn
ZVZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yMzQyLDYgKzIzNDQsOSBAQAogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgwRDg0
MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIg
LyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI1NjA3OEUyNzlEMzRCNjAwN0QyREQzIC8qIEZF
SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
RjdFNzRGMjc5Q0VERTgwMEQ4MkQyRCAvKiBGRUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8q
IFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkIzNTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NTI3Q0RBODBF
MDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcyNkNERTIwMjc1OTczNTAwMEE0NDVCMiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NjYxQTIyNzU5NjBB
NTAwRTdERjlCIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8q
IFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNB
RTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1h
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTEzMTgsNiArMTEzMjMsOCBAQAogCQk3MUZDQjE2RDI3QkFCM0RGMDBFMDYzMUMgLyogRnJhbWVS
YXRlQWxpZ25lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZVJhdGVB
bGlnbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkNCMTZGMjdCQUIzRTAw
MEUwNjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZyYW1lUmF0ZUFsaWduZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2lu
dHMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFC
IC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0dDb250ZXh0U3RhdGVT
YXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjA2RDQzNTI3REFERUNBMDA0
MEZFQjIgLyogVGV4dEJveEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hJdGVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjExQjVENjI3NjUzNjgyMDA3NkZF
RjggLyogRmlsdGVyUmVzdWx0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBT
VkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1
ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENB
RDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVl
UHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzI3LDYgKzExMzM0
LDggQEAKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXJJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
NDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRN
aW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRN
aW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0
MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0
RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTM4OSw2ICsxMTM5OCwxMCBAQAogCQk3MkExM0FENTI3NERFNTRFMDBFMkE4OEUgLyog
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQWxwaGFT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBMTNBRDYy
NzRERTU3ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQTEzQUQ3Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VH
cmFwaGljU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0
d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEMyN0M5
RjkzRTAwRDI3QUUwIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQjM1MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUJydXNoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNvdXJjZUJydXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQjRFRjc0Mjc0RTIzMzMwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJCNEVGNzUyNzRFMjMzNDAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2Fy
ZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjdDMjc0RUUzN0YwMDI5M0My
RiAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZVZlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4MTAsNiArMjg4MjMsNyBAQAog
CQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0Nv
bnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENv
bG9yQ0cuY3BwICovLAogCQkJCUJDQUZFREIzMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNl
Q0cuY3BwICovLAogCQkJCUJDQUZFREIyMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cu
aCAqLywKQEAgLTI5MDQzLDYgKzI5MDU3LDkgQEAKIAkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlE
MDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRB
NDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAq
LywKIAkJCQk3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oICovLAorCQkJCTcyNDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZS5jcHAgKi8sCisJCQkJNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi8sCisJCQkJNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyog
R3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5IC8qIEdy
YXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhp
Y3NMYXllckNsaWVudC5oICovLApAQCAtMjkxNDMsNiArMjkxNjAsNyBAQAogCQkJCUJDQTU1OTEy
MjYzREJENzkwMDdGMTlCMyAvKiBQaXhlbEZvcm1hdC5oICovLAogCQkJCUNERDA4QUJGMjc3RTU0
RjAwMEVBMzc1NSAvKiBQbGF0Zm9ybUF1ZGlvVHJhY2tDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJ
QkMzRTYyNDIyNjU5NzkxNzAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oICovLAorCQkJ
CTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICov
LAogCQkJCTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJ
CQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywK
IAkJCQk1NTA2NDBBRDI0MDc1NkRBMDBBQUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tl
bmQuaCAqLywKQEAgLTI5MTY2LDYgKzI5MTg0LDggQEAKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAw
RDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkw
IC8qIFNoYWRvd0JsdXIuaCAqLywKIAkJCQkxQzREQjAyNDI3MzM5RTVFMDA3QjBBRDEgLyogU2hv
dWxkTG9jYWxpemVBeGlzTmFtZXMuaCAqLywKKwkJCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAg
LyogU291cmNlQnJ1c2guY3BwICovLAorCQkJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBT
b3VyY2VCcnVzaC5oICovLAogCQkJCTFERDEyN0FDMjU2RTNBODcwMEIyMjdENyAvKiBTb3VyY2VC
dWZmZXJQcml2YXRlLmNwcCAqLywKIAkJCQlDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291
cmNlQnVmZmVyUHJpdmF0ZS5oICovLAogCQkJCUNEQzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi8sCkBAIC0yOTE3Nyw2ICsyOTE5Nyw3IEBACiAJ
CQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVy
YXRvci5oICovLAogCQkJCTk1RTlGNDQ0MjdDOUEzOUIwMDk0NTMzNyAvKiBTeXN0ZW1JbWFnZS5o
ICovLAogCQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCisJCQkJ
NzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovLAogCQkJCTM3
NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLywKIAkJCQlBODI0QjQ2NDBF
MkVGMkVBMDA4MUE3QjcgLyogVGV4dFJ1bi5oICovLAogCQkJCUNEMUU3MzQ2MTY3QkM3OEUwMDlB
ODg1RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAgKi8sCkBAIC0zMzg3Myw2ICszMzg5
NCw3IEBACiAJCQkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRl
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8qIENl
cnRpZmljYXRlU3VtbWFyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5RjAw
OUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZG
RDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNzg1RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5lbENv
dW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDc5OCw2ICszNDgyMCw4IEBACiAJCQkJNDlD
N0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Qjk1Q0ZFQjI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAw
RTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUw
RjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzY3MDUsNiArMzY3MjksNyBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0
Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjU4MTg1NTI3Q0RBODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQ
bGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc3MDVDNzI1NTI3NkNEMDAxRDBD
OTQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQUYy
NDA3NTgyRDAwQUFFMDQ1IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM3Mzg2LDYgKzM3NDExLDcgQEAKIAkJCQk1MTBENEEzODEwMzE2NUVFMDA0OUVB
NTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFC
QUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1c2gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTY1MTdBOUQwMUIwMDI3NEU0MiAvKiBT
b3VyY2VCdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYxMzUwOTI0QzlGQ0EzMDA0
MzJFMUUgLyogU291cmNlQnVmZmVyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50
ZXIuY3BwCmluZGV4IDg1NmEzZGU1MDRkZWMwYmJmYTkwYWMxN2RlMzdmNTE1ZTE0ZDkyMDQuLjlk
OTM1YTZmZjMyMzBmM2Y0NmEyZWY1ZDdlYTEwMDEwYWU5ZTEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVy
LmNwcApAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVG
cm9tUGF0aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICAgICAg
ICAgIERhc2hBcnJheSBsaW5lRGFzaDsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNo
TGVuZ3RoKTsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hM
ZW5ndGgpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2go
eyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVz
IHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgQm94RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250
ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdpbiA9IGZpbGxSZWN0LnJlY3Qo
KS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBhdXRvIGFkanVzdGVkU2hhZG93
T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0
aW9uKCk7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVz
dGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNo
YWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldERyb3BTaGFkb3coeyBhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVl
KCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAKICAgICAg
ICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBv
cGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBz
byBzYXZlcyB0aW1lCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWlu
dGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hh
ZAogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQp
OwogICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZh
bHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNo
YWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVm
YXVsdCB9KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsK
ICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAppbmRleCBm
NGI5OGJhNjJlMTE5YTA3NzEzMTJkM2I4OGM0OTE5MzY4MzZlZTM3Li5lZTUwNGYwOGM0OWZjOGQ1
YjVhZWQ3MDJiZTIxN2YxYjA2ZmQ0ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRJbWFnZS5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFp
bnRJbWFnZTo6ZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjbwog
SW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RD
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUo
eyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAg
ICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRl
KGRlc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVj
dC5zaXplKCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKIAogICAgIC8vIEZhY3RvciBp
biB0aGUgZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0
IHJlc29sdXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29u
dGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRD
VE0oKTsKICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7
CiAgICAgZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAg
IEFmZmluZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCAwZTc4MDYzZTNhNDFjYmM2OTBmMGQwY2NiNzg4MTE3
ZGU2OTM4YTAyLi5kYmM5NTdjNTNkMDRhMzk2ZWFjNjRkNjdmZTZhMmIxN2U0NDhjNjYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcApAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCgpIGNvbnN0CiAgICAgRGFzaEFycmF5IGNv
bnZlcnRlZExpbmVEYXNoKHN0YXRlKCkubGluZURhc2guc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRlKCkubGluZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbnZl
cnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4oc3RhdGUoKS5s
aW5lRGFzaFtpXSk7Ci0gICAgYy0+c2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRl
KCkubGluZURhc2hPZmZzZXQpOworICAgIGMtPnNldExpbmVEYXNoKHsgV1RGTW92ZShjb252ZXJ0
ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KSB9
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxBbHBo
YShkb3VibGUgYWxwaGEpCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBv
cGUKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICgh
YykKICAgICAgICAgcmV0dXJuOwotICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxl
bmRNb2RlKTsKKyAgICBjLT5zZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzY2FsZShkb3VibGUgc3gsIGRv
dWJsZSBzeSkKQEAgLTExODYsNyArMTE4Niw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZG91CiAg
ICAgICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50
PihsaW5lRGFzaFtpXSk7Ci0gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goY29udmVydGVkTGlu
ZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICAgICAgY29udGV4dC5zZXRMaW5lRGFz
aCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUu
bGluZURhc2hPZmZzZXQpIH0pOwogICAgIH0pOwogfQogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChkb3VibGUgeCwgZG91
YmxlIHksIGRvdWJsZSB3aWR0aCwgZAogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAg
ICAgICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBj
b250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBjb250ZXh0LT5zZXREcm9wU2hh
ZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRp
dXNNb2RlOjpMZWdhY3kgfSk7CiAgICAgfQogICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9
IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTM2Myw5ICsxMzYzLDkgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3Vs
ZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09m
ZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNl
dC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdo
dCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRTaGFk
b3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kpOworICAgICAgICBjLT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAs
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiB9
CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3Mo
KSBjb25zdApAQCAtMjQzMiwxOSArMjQzMiwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGRvdQog
CiAgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0KDAsIDIgKiBtYXNrUmVjdC5oZWlnaHQoKSk7
CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBmbG9h
dCBzaGFkb3dSYWRpdXM7Ci0gICAgICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICAgICAg
ICAgIGMtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3Ip
OwotCiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChtYXNrUmVjdCk7Ci0gICAgICAg
ICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hhZG93UmFkaXVzICogMS40KTsKLSAgICAgICAgICAg
IHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQgKiAtMSk7CisgICAgICAgICAgICBhdXRvIGRy
b3BTaGFkb3cgPSBjLT5kcm9wU2hhZG93KCk7CisKKyAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5m
bGF0ZShkcm9wU2hhZG93LmJsdXJSYWRpdXMgKiAxLjQpOworICAgICAgICAgICAgc2hhZG93UmVj
dC5tb3ZlKGRyb3BTaGFkb3cub2Zmc2V0ICogLTEpOwogICAgICAgICAgICAgYy0+Y2xpcChzaGFk
b3dSZWN0KTsKIAotICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKKyAgICAgICAg
ICAgIGRyb3BTaGFkb3cub2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgICAgIGMtPnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7
CiAKICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xv
cihDb2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXkuY3BwCmluZGV4IDRmNjNhZGNlOTM5MTZkYjIzMjBlOTY3OGFhYmZlMGYzY2Q5OTc2MmIu
LjlhODAzYTQwOGQ4OGMyZmY0OGRkM2JlYTAyOTUxYjg3NTgwOThlMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTEyNDQsNyArMTI0NCw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRTdGlwcGxpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAg
ICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAg
IGNvbnRleHQuc2V0TGluZURhc2goeyAxLCBkZW5zaXR5IH0sIDEpOworICAgIGNvbnRleHQuc2V0
TGluZURhc2goeyB7IDEsIGRlbnNpdHkgfSwgMSB9KTsKIAogICAgIGRyYXdMYXlvdXRQYXR0ZXJu
KGNvbnRleHQsIHF1YWQsIGRlbnNpdHksIEZsaXA6Ok5vKTsKIH0KQEAgLTEyNTQsNyArMTI1NCw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHNhdmVyKGNvbnRleHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNSk7CiAg
ICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlKTsKLSAg
ICBjb250ZXh0LnNldExpbmVEYXNoKHsgMiwgMiB9LCAyKTsKKyAgICBjb250ZXh0LnNldExpbmVE
YXNoKHsgeyAyLCAyIH0sIDIgfSk7CiAKICAgICBjb25zdGV4cHIgYXV0byBkZWZhdWx0TGF5b3V0
SGF0Y2hTcGFjaW5nID0gMTI7CiAgICAgZHJhd0xheW91dFBhdHRlcm4oY29udGV4dCwgcXVhZCwg
ZGVmYXVsdExheW91dEhhdGNoU3BhY2luZywgZmxpcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKaW5kZXggYjU4OGY2ZmE0YTExZDc3MGMzYzg0OTk5NjcyZDdkN2VmZjQzMmM0Zi4uOGExN2Fl
MzcwYWUzNmIwMGViYjdhOWIyZTA3NTUxODA2YmVkMTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcApAQCAtNDMwMyw3ICs0MzAzLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXQKICAg
ICBpZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwog
Ci0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGZyYW1lUmVjdCgpLCBwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRlbnRzKCkuCiAgICAgICAgIHBhaW50
Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50Vmlz
aWJsZVJlY3QpKTsKQEAgLTQ4NTQsNyArNDg1NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQ
YWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0
CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgot
ICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29u
dGV4dChmcmFtZVJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAKaW5kZXggZGM2MGU3
NWIyOTViYzUzYTU5YTQ3MDJhMTk5ODdjMDNhMTFmOTVhMS4uYWM5MDkxMTM3M2FmZTVmNjI2OTc1
NDA2YmNjYzM4MzUwZDlkMzQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fk
d2FpdGEvVGhlbWVBZHdhaXRhLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgVGhlbWVBZHdh
aXRhOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBQ
YXRoJiBwYXRoCiAKICAgICBncmFwaGljc0NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihj
b2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNr
bmVzcyhmb2N1c0xpbmVXaWR0aCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsg
Zm9jdXNMaW5lV2lkdGgsIDIgKiBmb2N1c0xpbmVXaWR0aCB9LCAwKTsKKyAgICBncmFwaGljc0Nv
bnRleHQuc2V0TGluZURhc2goeyB7IGZvY3VzTGluZVdpZHRoLCAyICogZm9jdXNMaW5lV2lkdGgg
fSwgMCB9KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZUNhcChMaW5lQ2FwOjpTcXVhcmUp
OwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lSm9pbihMaW5lSm9pbjo6TWl0ZXIpOwogICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xvci5vcGFxdWVDb2xvcigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOWZkMjVkODBhZDEyZGM5MWRkMTFmOTE1OThm
YzZjOGVmYTRjYjJhMi4uMjg5NTc0YjljMWU0MGNkNzEyYjRlMmI2ZTllYjM0YjAxNzI5ZGZjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTI5LDcgKzI5LDggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0LCBHcmFwaGljc0NvbnRl
eHQmIHNlY29uZGFyeUNvbnRleHQpCi0gICAgOiBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250
ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KHByaW1hcnlDb250ZXh0LmNsaXBCb3VuZHMoKSwg
eyB9LCBwcmltYXJ5Q29udGV4dC5nZXRDVE0oKSkKKyAgICAsIG1fcHJpbWFyeUNvbnRleHQocHJp
bWFyeUNvbnRleHQpCiAgICAgLCBtX3NlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5Q29udGV4dCkK
IHsKIH0KQEAgLTQ4LDYgKzQ5LDMwIEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBt
X3ByaW1hcnlDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogfQogCisjaWYgVVNFKENHKQorYm9v
bCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Cit9CisKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlz
Q0FMYXllckNvbnRleHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250
ZXh0KGlzQ0FMYXllckNvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJc0NBTGF5
ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRl
eHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0Fj
Y2VsZXJhdGVkQ29udGV4dCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKK30KKyNlbmRpZgorCitSZW5kZXJpbmdN
b2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKK30KKwogdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKIHsKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgbm90IHVzaW5nIHRoZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0J3Mgc3RhdGUgc3RhY2sg
YXQgYWxsLApAQCAtNjQsMjIgKzg5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQb2lu
dCYgdG8pCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9
CiAKICNpZiBVU0UoQ0cpCkBAIC05NiwyMiArMTA5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCiB9CiAjZW5kaWYKIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRy
YXdQYXRoKHBhdGgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChw
YXRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IGZhY3RvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9wcmltYXJ5Q29u
dGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBA
IC0xMjYsMjIyICsxMjcsMTI2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBs
eURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0
KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUmVjdChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3RJ
bXBsKHJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
SW1wbChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIG1fcHJpbWFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5jbGVhclJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLSNp
ZiBVU0UoQ0cpCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNv
bnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRl
eHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLX0KLQotYm9vbCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Ci19Ci0KLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOwotfQotI2VuZGlm
Ci0KLVJlbmRlcmluZ01vZGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9k
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgp
OwotfQotCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKICAgICBtX3By
aW1hcnlDb250ZXh0LmNsaXAocmVjdCk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXAocmVj
dCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3By
aW1hcnlDb250ZXh0LmNsaXBPdXQocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBP
dXQocGF0aCk7Ci19Ci0KIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7CisgICAgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlw
UGF0aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBQYXRoKHBh
dGgsIHdpbmRSdWxlKTsKIH0KIAotSW50UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5jbGlwQm91
bmRzKCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZUNh
cChsaW5lQ2FwKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZUNhcChsaW5lQ2FwKTsK
KyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXQocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmNsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9m
ZnNldCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFz
aE9mZnNldCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQuc2V0TGluZUpvaW4obGluZUpvaW4pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRM
aW5lSm9pbihsaW5lSm9pbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZl
cihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxp
bWl0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRl
ckxpbWl0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0
KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFy
eUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwg
c2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKG5hdGl2ZUltYWdlLCBzZWxmU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCk7Cisg
ICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1J
bWFnZSwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVj
dChyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5h
dGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdHRlcm4obmF0
aXZlSW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgZ3Jh
ZGllbnQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBncmFkaWVudCk7
CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtX3ByaW1hcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGlu
YXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1h
cnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CiB9CiAKLUltYWdlRHJhd1Jlc3Vs
dCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2Uo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91
bmRlZEhvbGVSZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi1JbWFnZURy
YXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBo
UnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29u
dGV4dC5kcmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxl
RmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9y
LCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZmlsbEVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwotICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZmlsbFBhdGgocGF0aCk7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5z
Y2FsZShzY2FsZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNjYWxlKHNjYWxlKTsKKyAgICBt
X3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5yb3RhdGUoYW5n
bGVJblJhZGlhbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yb3RhdGUoYW5nbGVJblJhZGlh
bnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQog
ewotICAgIG1fcHJpbWFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOwotICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC50cmFuc2xhdGUoeCwgeSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRo
KHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwogfQogCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
bV9wcmltYXJ5Q29udGV4dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwg
Y29uc3QgRmxvYXRQb2ludCYgdG8pCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRDVE0odHJh
bnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZURldmljZVNj
YWxlKSBjb25zdAordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuZ2V0
Q1RNKGluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBz
ZShyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAK
LUZsb2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsK
LSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJv
dW5kaW5nTW9kZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM3
MCwyOSArMjc1LDU0IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvCiB9CiAjZW5kaWYKIAotRmxv
YXRTaXplIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKK3ZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhdXRvIHNpemUgPSBtX3By
aW1hcnlDb250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgZnJvbSwg
dG8pOwotICAgIHJldHVybiBzaXplOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVy
JiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIGZpbHRlclJlc3VsdHMpCiB7Ci0gICAgbV9wcmltYXJ5
Q29udGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9p
bnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3Vy
Y2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291
cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBj
YXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiB0bykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RW1waGFz
aXNNYXJrcyhjYXNjYWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdFbXBoYXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQs
IGZyb20sIHRvKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Jp
ZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3Qmlk
aVRleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVt
SW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihp
bWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJ
bWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5k
cmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0
ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5w
YWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CisgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQpAQCAtNDA3LDE2ICszMzcsOSBA
QCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LAogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIG1hcmtlclN0eWxlKTsKIH0KIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVy
bCwgcmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0
KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZv
clJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0CiB7
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0
KTsKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsK
IH0KIAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKQEAgLTQyNSwx
OCArMzQ4LDE2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QKICAgICBtX3NlY29uZGFyeUNvbnRl
eHQuYWRkRGVzdGluYXRpb25BdFBvaW50KG5hbWUsIHBvaW50KTsKIH0KIAotYm9vbCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAordm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFy
eUNvbnRleHQuc3VwcG9ydHNJbnRlcm5hbExpbmtzKCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5z
ZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgLy8gVGhpcyBjYWxscyB1cGRhdGVT
dGF0ZSgpIGluc3RlYWQgb2YgZGlkVXBkYXRlU3RhdGUoKSBzbyB0aGF0IGNoYW5nZXMKLSAgICAv
LyBhcmUgYWxzbyBhcHBsaWVkIHRvIGVhY2ggY29udGV4dCdzIEdyYXBoaWNzQ29udGV4dFN0YXRl
LCBzbyB0aGF0IGNvZGUKLSAgICAvLyBpbnRlcm5hbCB0byB0aGUgY2hpbGQgY29udGV4dHMgdGhh
dCByZWFkcyBmcm9tIHRoZSBzdGF0ZSBnZXRzIHRoZSByaWdodCB2YWx1ZXMuCi0gICAgbV9wcmlt
YXJ5Q29udGV4dC51cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC51cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
VVJMRm9yUmVjdCh1cmwsIHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JS
ZWN0KHVybCwgcmVjdCk7CiB9CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQpAQCAt
NDQ2LDUgKzM2NywxMCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRlcHJlY2F0ZWRQcml2YXRlQ29udAogfQogI2VuZGlmCiAKK0Zs
b2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5n
TW9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dC5oCmluZGV4IGY1OGIzNGM5MTQzNDJiNzM3NzcyN2MxMWE3M2I2ZDgyMThlMTU1NmYuLjdhMzdh
MTEzZGQ4MTVlYjNiOTU2MDc1MmQ5ZGM3MGViNWE4OTdjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0LmgKQEAgLTQzLDgzICs0Myw1NCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdDsKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250
ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJl
c3RvcmUoKSBmaW5hbDsKKyNpZiBVU0UoQ0cpCisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwog
Ci0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25l
c3MgPSAxKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFs
OworI2VuZGlmCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7
CiAKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAg
ICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQogICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
ZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBmYWN0b3IpIGZpbmFsOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpIGZpbmFsOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
IAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwot
Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0KLSNpZiBVU0UoQ0cpCi0g
ICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKCkgY29uc3QgZmluYWw7Ci0KICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6
RXZlbk9kZCkgZmluYWw7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotCiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpIGZpbmFsOwogCi0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBX
aW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7Ci0KLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25z
dCBmaW5hbDsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwot
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgZmluYWw7Ci0KLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9
KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdl
OjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pIGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0g
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91
bmRBbGxTaWRlcykgZmluYWw7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwogCisgICAg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7
CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0
IENvbG9yJikgZmluYWw7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTI3LDIzICs5OCwyNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jiwg
ZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgRmxvYXRT
aXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8g
PSBzdGQ6Om51bGxvcHQpIGZpbmFsOwotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNp
Z25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQp
IGZpbmFsOwotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWw7
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0
ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lm
IEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOworI2VuZGlmCiAKKyAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBm
aW5hbDsKLQogICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZv
clJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAgICB2b2lkIHNl
dERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotCiAgICAgYm9vbCBzdXBwb3J0c0ludGVybmFs
TGlua3MoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIHNldERl
c3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Cisg
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRp
bmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNF
KENBSVJPKQogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXgg
YmI0ZGFjMDE5YzViOWUxM2IxMzdhZTY5NGU0YmY2YjI3NmJmY2MwZC4uMWMxYjk2ZWM1Yjk4M2Nj
NWYxOGQ2ZmYxZmQyNTg1N2ZhOTQzYzQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcApAQCAt
OTAsNyArOTAsNyBAQCB2b2lkIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3Q3Jvc3NmYWRl
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIEltYWdlRHJhd1Jlc3VsdCBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQu
dHJhbnNsYXRlKGRzdFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9
IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAyNWEzZDNmZTg3NzMzMWRkYTM5NTc4MDEx
YjZkODkwZjIxMmM3MmU2Li4zYmNiNTA1YWYzYzI4MmY0MjIzMjVjZDdlMzAwNTM0ZmQ5Zjk5Y2I5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhz
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5
cGhzUmVjb3JkZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDI0ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdy
YWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVy
bi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
U3RhdGUuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CiAKLSNpZiBVU0UoQ09SRV9URVhUKQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KLSNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2lmIFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2Vsc2UKLSNpbmNs
dWRlIDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRmxvYXRQb2ludDsKQEAgLTYyLDc2ICs0OSwzMiBAQCBwdWJsaWM6CiAjaWYgVVNFKENP
UkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKICAgICB2b2lkIGRyYXdOYXRpdmVUZXh0KENURm9u
dFJlZiwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lUmVmLCBDR1JlY3QgbGluZVJlY3QpOwogCi0g
ICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVm
LCBDR1JlY3QpOwotICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYpOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBo
W10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIENHUmVjdCwg
Q0dJbWFnZVJlZik7CisgICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmKTsKKyAg
ICB2b2lkIHJlY29yZEVuZExheWVyKENHR1N0YXRlUmVmKTsKKyAgICB2b2lkIHJlY29yZERyYXdH
bHlwaHMoQ0dHU3RhdGVSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlv
bnNbXSwgc2l6ZV90IGNvdW50KTsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZShDR0dTdGF0ZVJl
ZiwgQ0dSZWN0LCBDR0ltYWdlUmVmKTsKICNlbmRpZgogCi0gICAgRGVjb25zdHJ1Y3REcmF3R2x5
cGhzIGRlY29uc3RydWN0RHJhd0dseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb25zdHJ1Y3RE
cmF3R2x5cGhzOyB9Ci0KIHByaXZhdGU6Ci0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JN
KFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRl
eHQoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25P
VFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFu
Y2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3T1RTVkdSdW4oY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBG
b250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSk7Ci0KLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYpOwotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHByZXBhcmVJbnRlcm5hbENvbnRleHQo
Y29uc3QgRm9udCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGNvbmNsdWRlSW50ZXJu
YWxDb250ZXh0KCk7CisgICAgdm9pZCBzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYsIEZvbnRT
bW9vdGhpbmdNb2RlKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KCk7CisgICAgdm9pZCByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKTsKIAotICAgIHZvaWQgdXBkYXRlRmlsbENv
bG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRy
KTsKLSAgICB2b2lkIHVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0g
bnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRyKTsKLSAgICB2b2lkIHVwZGF0ZUNUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBlbnVtIGNsYXNzIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
IHsKLSAgICAgICAgVW5zcGVjaWZpZWQsCi0gICAgICAgIFllcywKLSAgICAgICAgTm8KLSAgICB9
OwotICAgIHZvaWQgdXBkYXRlU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBm
bG9hdCBzaGFkb3dCbHVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKTsKLQotI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAg
dm9pZCB1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZik7Ci0jZW5kaWYKKyAgICB2b2lkIGRyYXdOb25P
VFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25P
VFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9v
d25lcjsKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fZGVzdGluYXRpb25Db250ZXh0OwogICAgIERl
Y29uc3RydWN0RHJhd0dseXBocyBtX2RlY29uc3RydWN0RHJhd0dseXBoczsKICAgICBEZXJpdmVG
b250RnJvbUNvbnRleHQgbV9kZXJpdmVGb250RnJvbUNvbnRleHQ7CiAKLSNpZiBVU0UoQ09SRV9U
RVhUKSAmJiAhUExBVEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1f
aW50ZXJuYWxDb250ZXh0OwotI2VuZGlmCi0KICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9u
dCB7IG51bGxwdHIgfTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X29yaWdpbmFsVGV4dE1hdHJpeDsKIAotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIHN0cnVj
dCBTdHlsZSB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIFJlZlB0cjxH
cmFkaWVudD4gZ3JhZGllbnQ7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybTsKLSAgICAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuOwotICAg
ICAgICB9OwotICAgICAgICBTdHlsZSBmaWxsU3R5bGU7Ci0gICAgICAgIFN0eWxlIHN0cm9rZVN0
eWxlOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0KLSAgICAgICAgc3RydWN0IFNo
YWRvd1N0YXRlIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAgICAgICAgICBm
bG9hdCBibHVyIHsgMCB9OwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBi
b29sIGlnbm9yZVRyYW5zZm9ybXMgeyBmYWxzZSB9OwotICAgICAgICB9OwotICAgICAgICBTaGFk
b3dTdGF0ZSBzaGFkb3c7Ci0gICAgfTsKLSAgICBTdGF0ZSBtX29yaWdpbmFsU3RhdGU7Ci0gICAg
U3RhdGUgbV9jdXJyZW50U3RhdGU7CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJ
TikKKyAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg1MTgwYWQxMDlmZDgxOGU5
YmIxNTg4Y2U5NjJhYjQ2MzA4MTZhMDkuLjM2MTFiMTJjYTlhYjI5ZWI5MjFmMjMyNWUxZjk2ZDI5
NTI1M2M3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5jcHAKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1bgog
CiBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRD
YXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBj
b25zdAogewotICAgIEFTU0VSVCghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpOworICAgIEFT
U0VSVF9VTlVTRUQoY29udGV4dCwgIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICB1
bnNpZ25lZCBkZXN0aW5hdGlvbiA9IHRvLnZhbHVlX29yKHJ1bi5sZW5ndGgoKSk7CiAgICAgCiAg
ICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRp
YWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTAwMDUwCkBAIC0yMTQsNyArMjE0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0
OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlM
aXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxh
eUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+KCk7Ci0gICAgRGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbCByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9h
dFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpObyk7CisgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRp
bmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pOwogICAgIAogICAg
IEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBo
QnVmZmVyLmluaXRpYWxBZHZhbmNlKCkpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5n
Q29udGV4dCwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1h
Z2UuY3BwCmluZGV4IDY0NTg0ZTVjZmUwMTE4ODJlZmFiMmUyM2MzYTU5NGUxNzgyZjI4OTAuLjJm
ODI3ZjYyNWY2NGI1OWNhMWE2NjQ5NjA3MzBmMDNjMjNiYzM3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCkBAIC00Myw3ICs0
Myw3IEBAIEdyYWRpZW50SW1hZ2U6On5HcmFkaWVudEltYWdlKCkgPSBkZWZhdWx0OwogSW1hZ2VE
cmF3UmVzdWx0IEdyYWRpZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25z
LmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENv
bnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0
LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkp
CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgR3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgbV9ncmFkaWVu
dC0+YWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVk
U3JjUmVjdCwgc3BhY2luZyk7CiAKICAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNv
bnRleHQncyBzY2FsZSB0byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNm
b3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhT
Y2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUg
PSBmYWJzKGRlc3RDb250ZXh0Q1RNLnlTY2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRq
dXN0ZWRQYXR0ZXJuQ1RNID0gcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDBiYjEzNTk3
Y2VhNzM2OWRiYmM2ZTE3MjdmMjZjOTJiOGZiNzUxNzYuLmNmOGM3MThiODEyYzc5NzkxZjJiZTNl
YjdkOGJlOGQ1NWEyYzMzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVy
SW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCkBAIC0zNiw0NzMgKzM1LDMx
MCBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIlN5c3RlbUltYWdlLmgi
Ci0jaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlRleHRCb3hJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBUZXh0Qm94SXRlcmF0b3IgewotcHVibGljOgotICAgIFRleHRCb3hJdGVyYXRvcigpCi0g
ICAgICAgIDogbV90ZXh0UnVuKDApCi0gICAgICAgICwgbV9vZmZzZXQoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVk
IG9mZnNldCkKLSAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKLSAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCi0gICAgewotICAgIH0KLQotICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0K
LSAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+
PSBtX3RleHRSdW4tPmxlbmd0aCgpOyB9Ci0gICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0
dXJuICgqbV90ZXh0UnVuKVttX29mZnNldF07IH0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGly
ZWN0aW9uKGN1cnJlbnQoKSk7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94
SXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09
IG90aGVyLm1fb2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47Ci0gICAgfQot
Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFRl
eHRSdW4qIG1fdGV4dFJ1bjsKLSAgICB1bnNpZ25lZCBtX29mZnNldDsKLX07Ci0KLSNkZWZpbmUg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoZmxhZywgcHJvcGVydHkpIFwKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZykgJiYgKG1fc3Rh
dGUucHJvcGVydHkgIT0gc3RhdGUucHJvcGVydHkpKSBcCi0gICAgICAgIGNoYW5nZUZsYWdzLmFk
ZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZyk7Ci0KLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAs
IHNob3VsZFNtb290aEZvbnRzKHRydWUpCi0gICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHModHJ1ZSkKLSAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotICAgICwgZHJh
d0x1bWluYW5jZU1hc2soZmFsc2UpCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0pCisgICAgOiBtX3N0YXRlKGluaXRpYWxDbGlwLCBjaGFuZ2VGbGFncywgaW5pdGlhbENUTSkK
IHsKIH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6On5HcmFwaGljc0NvbnRleHRTdGF0ZSgpID0g
ZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKSA9IGRlZmF1bHQ7
Ci1HcmFwaGljc0NvbnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0
YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpID0gZGVmYXVsdDsKLQotdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2Vz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRl
eHQoKQogewotICAgIGF1dG8gc3Ryb2tlRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSB9OwotICAgIGlm
IChmbGFncy5jb250YWluc0FueShzdHJva2VGbGFncykpIHsKLSAgICAgICAgc3Ryb2tlQ29sb3Ig
PSBzdGF0ZS5zdHJva2VDb2xvcjsKLSAgICAgICAgc3Ryb2tlR3JhZGllbnQgPSBzdGF0ZS5zdHJv
a2VHcmFkaWVudDsKLSAgICAgICAgc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZVBhdHRlcm47
Ci0gICAgfQotCi0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFn
cy5jb250YWluc0FueShmaWxsRmxhZ3MpKSB7Ci0gICAgICAgIGZpbGxDb2xvciA9IHN0YXRlLmZp
bGxDb2xvcjsKLSAgICAgICAgZmlsbEdyYWRpZW50ID0gc3RhdGUuZmlsbEdyYWRpZW50OwotICAg
ICAgICBmaWxsUGF0dGVybiA9IHN0YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAg
ICAgICBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIHNoYWRvd0Js
dXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwotICAgICAgICBzaGFkb3dDb2xvciA9IHN0YXRlLnNoYWRv
d0NvbG9yOwotICAgICAgICBzaGFkb3dSYWRpdXNNb2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHN0cm9rZVRoaWNrbmVzcyA9IHN0YXRl
LnN0cm9rZVRoaWNrbmVzczsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdGV4dERyYXdpbmdNb2Rl
ID0gc3RhdGUudGV4dERyYXdpbmdNb2RlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHN0cm9rZVN0eWxl
ID0gc3RhdGUuc3Ryb2tlU3R5bGU7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZmlsbFJ1bGUgPSBzdGF0ZS5m
aWxsUnVsZTsKKyAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV90
cmFuc3BhcmVuY3lMYXllckNvdW50KTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBhbHBoYSA9IHN0YXRlLmFs
cGhhOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQoreworICAgIG1fc3RhY2suYXBwZW5k
KG1fc3RhdGUpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkJsZW5kTW9kZUNoYW5nZSB9KSkgewotICAgICAgICBjb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBibGVuZE1vZGUgPSBzdGF0ZS5ibGVuZE1vZGU7
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCit7CisgICAgaWYgKG1fc3RhY2suaXNF
bXB0eSgpKSB7CisgICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxp
YXNDaGFuZ2UpKQotICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBzdGF0ZS5zaG91bGRBbnRpYWxp
YXM7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBtX2xhc3RBcHBsaWVk
U3RhdGUgPSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkU21v
b3RoRm9udHMgPSBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKLQotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKSkKLSAgICAgICAgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc3RhdGUuc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Cisg
ICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0YWNrIGJ1ZmZlciB3aGVu
IGl0IGdvZXMgZW1wdHkuCisgICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkg
c2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5LgorICAgIGlm
IChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGFjay5jbGVhcigpOworfQogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFz
a0NoYW5nZSkpCi0gICAgICAgIGRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWluYW5j
ZU1hc2s7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKQorewor
ICAgIG1fc3RhdGUuZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX2xhc3RBcHBsaWVkU3Rh
dGUgPSBtX3N0YXRlOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAgaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7CitG
bG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIHJldHVybiBGbG9hdFNpemUo
dHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworfQorICAgIAorRmxvYXRT
aXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgYXV0byB0cmFuc2Zvcm1lZERl
c3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOworICAgIHJldHVybiB0cmFuc2Zv
cm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOworfQogCi0jaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAgdXNlRGFya0FwcGVhcmFu
Y2UgPSBzdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsKLSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpCit7CisgICAgKyttX3RyYW5zcGFyZW5j
eUxheWVyQ291bnQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CisgICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3Vu
dCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworfQogCi0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlR3JhZGllbnRDaGFuZ2UsIHN0cm9rZUdyYWRpZW50
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VQYXR0ZXJuQ2hhbmdlLCBz
dHJva2VQYXR0ZXJuKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsR3JhZGll
bnRDaGFuZ2UsIGZpbGxHcmFkaWVudCk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
RmlsbFBhdHRlcm5DaGFuZ2UsIGZpbGxQYXR0ZXJuKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3N0YXRlLmNsaXAocmVjdCk7Cit9
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKQotICAgICAgICAmJiAobV9zdGF0ZS5zaGFkb3dPZmZzZXQgIT0gc3RhdGUu
c2hhZG93T2Zmc2V0Ci0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0JsdXIgIT0gc3RhdGUu
c2hhZG93Qmx1cgotICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dDb2xvciAhPSBzdGF0ZS5z
aGFkb3dDb2xvcikpCi0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSkKK3sKKyAgICBtX3N0YXRlLmNsaXAocGF0aC5mYXN0Qm91bmRp
bmdSZWN0KCkpOworfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BS
T1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4dERyYXdpbmdNb2RlKTsKLSAgICBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xvckNoYW5nZSwgc3Ryb2tlQ29sb3IpOwot
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxDb2xvckNoYW5nZSwgZmlsbENvbG9y
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VTdHlsZUNoYW5nZSwgc3Ry
b2tlU3R5bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdl
LCBmaWxsUnVsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoQWxwaGFDaGFuZ2Us
IGFscGhhKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3Vu
ZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJh
dGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KQotICAg
ICAgICAmJiAobV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciAhPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciB8fCBtX3N0YXRlLmJsZW5kTW9kZSAhPSBzdGF0ZS5ibGVuZE1vZGUpKSB7Ci0gICAgICAg
IGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlKTsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIGlmICghcmVjdC5pc1JvdW5k
ZWQoKSkgeworICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3VsZEFudGlhbGlhc0No
YW5nZSwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShT
aG91bGRTbW9vdGhGb250c0NoYW5nZSwgc2hvdWxkU21vb3RoRm9udHMpOwotICAgIENIRUNLX0ZP
Ul9DSEFOR0VEX1BST1BFUlRZKFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
OwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdl
LCBkcmF3THVtaW5hbmNlTWFzayk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoSW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSwgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7
Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlLCB1c2VEYXJrQXBwZWFyYW5jZSk7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiBjaGFuZ2VGbGFnczsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0
aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBt
X3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3MpOwotCi0gICAgYXV0byBzdHJva2VGbGFn
cyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0cm9rZUZs
YWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoc3Ryb2tlRmxhZ3MpOwotCi0gICAg
YXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShm
aWxsRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShmaWxsRmxhZ3MpOwotCi0g
ICAgYXV0byBjb21wb3NpdGVPcGVyYXRvckZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2Rl
Q2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGNvbXBvc2l0ZU9wZXJhdG9yRmxh
Z3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShjb21wb3NpdGVPcGVyYXRvckZsYWdz
KTsKLQotICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGZsYWdzKTsKKyAgICBpbWFnZUJ1ZmZlci5jbGlw
VG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUdy
YWRpZW50KCptX3N0YXRlLnN0cm9rZUdyYWRpZW50LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0
cm9rZVBhdHRlcm4oKm1fc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoKm1fc3RhdGUuZmlsbEdyYWRpZW50LCBt
X3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9z
dGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1
c01vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvIHByZXZpb3VzQ29t
cG9zaXRlTW9kZSA9IGNvbXBvc2l0ZU1vZGUoKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAg
ICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9kZShtX3N0YXRlLnRleHREcmF3aW5nTW9kZSk7
Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3Rh
dGUuc3Ryb2tlQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKG1fc3RhdGUuZmlsbENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlU3R5bGUobV9zdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2Up
KQotICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRBbHBoYShtX3N0YXRlLmFscGhhKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5n
ZSB9KSkKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9zdGF0ZS5jb21w
b3NpdGVPcGVyYXRvciwgbV9zdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkp
Ci0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKG1fc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxk
U21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFu
Y2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpV
c2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VXNlRGFya0FwcGVh
cmFuY2UobV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKKyAgICBzZXRDb21wb3Np
dGVNb2RlKHsgb3BlcmF0aW9uLCBibGVuZE1vZGUgfSk7CisgICAgZmlsbFJlY3QocmVjdCwgY29s
b3IpOworICAgIHNldENvbXBvc2l0ZU1vZGUocHJldmlvdXNDb21wb3NpdGVNb2RlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29u
c3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNoYW5nZS1mbGFn
cyIsIG1fY2hhbmdlRmxhZ3MudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1ncmFkaWVudCIsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHko
InN0cm9rZS1wYXR0ZXJuIiwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0
YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoImZpbGwtcGF0dGVybiIsIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOwor
ICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctYmx1ciIsIG1fc3RhdGUuc2hhZG93Qmx1cik7Ci0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LW9mZnNldCIsIG1fc3RhdGUuc2hhZG93T2Zm
c2V0KTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctY29sb3IiLCBtX3N0YXRlLnNo
YWRvd0NvbG9yKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3kt
cmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKK3sKKyAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKKyAgICAgICAgZmlsbFJlY3QocmVj
dC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICAgICAgCisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOworICAgIHNldENvbXBvc2l0ZU1vZGUo
eyBwcmV2aW91c09wZXJhdG9yLCBibGVuZE1vZGUgfSk7CisgICAgZmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7
Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJv
a2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNo
YW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgidGV4dC1kcmF3aW5nLW1vZGUiLCBtX3N0
YXRlLnRleHREcmF3aW5nTW9kZS50b1JhdygpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWNvbG9yIiwgbV9z
dGF0ZS5maWxsQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzdHJva2Utc3R5bGUiLCBtX3N0YXRlLnN0cm9rZVN0eWxlKTsKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQoreworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFu
Z2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtcnVsZSIsIG1fc3RhdGUuZmlsbFJ1
bGUpOworICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCisgICAgICAg
IHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKKyAgICBlbHNlCisgICAgICAg
IHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEiLCBtX3N0YXRlLmFscGhhKTsKKyAgICBXaW5kUnVs
ZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7CisgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmls
bENvbG9yKCk7CisgICAgCisgICAgc2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOworICAg
IHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0b3IiLCBtX3N0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShvbGRG
aWxsUnVsZSk7CisgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgbV9zdGF0ZS5ibGVu
ZE1vZGUpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNl
KGVsbGlwc2UpOworICAgIGZpbGxQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hv
dWxkQW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRo
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5h
ZGRFbGxpcHNlKGVsbGlwc2UpOworICAgIHN0cm9rZVBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3Ro
Rm9udHNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgtZm9u
dHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxp
cHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikKK3sKKyAgICBhdXRvIG9sZEZpbGxD
b2xvciA9IGZpbGxDb2xvcigpOworICAgIGF1dG8gb2xkU3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xv
cigpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIHNldEZpbGxDb2xvcihzaGFkb3dDb2xvcik7Cisg
ICAgc2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IpOworICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVj
dChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
IAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9y
KGVsbGlwc2VDb2xvcik7CisgICAgZHJhd0VsbGlwc2UocmVjdCk7CiAKLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tD
aGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImRyYXctbHVtaW5hbmNlLW1hc2siLCBt
X3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9y
KTsKKyAgICBzZXRTdHJva2VDb2xvcihvbGRTdHJva2VDb2xvcik7Cit9CiAKLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgidXNlLWRhcmstYXBwZWFyYW5jZSIsIG1fc3RhdGUudXNlRGFya0FwcGVhcmFu
Y2UpOwotI2VuZGlmCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3sKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQog
Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
IHsKLSAgICBzdGF0ZUNoYW5nZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7CisgICAgZHJhd0lt
YWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXpl
KCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09w
dGlvbnMpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAg
IEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwg
aW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhY2suYXBw
ZW5kKG1fc3RhdGUpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBv
bGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKKyAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIGlmIChtX3N0YWNrLmlzRW1wdHko
KSkgewotICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOwotICAgIG1fc3RhY2sucmVt
b3ZlTGFzdCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0
YWNrIGJ1ZmZlciB3aGVuIGl0IGdvZXMgZW1wdHkuCi0gICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdp
bGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNh
cGFjaXR5LgotICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGFjay5jbGVh
cigpOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwor
ICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0KGRl
c3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2Fs
U2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwg
ZmxhZ3MpOwotICAgIGRpZFVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5s
b2dpY2FsU2l6ZSgpOworICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdl
KSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHNhdmUoKTsKLQotICAgIHNldFN0cm9rZUNvbG9y
KHNoYWRvd0NvbG9yKTsKLSAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOwotCi0gICAgZHJh
d0VsbGlwc2UoRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSkpOwotCi0gICAgc2V0U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKLSAg
ICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKLQotICAgIGRyYXdFbGxpcHNlKHJlY3QpOyAg
Ci0KLSAgICByZXN0b3JlKCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAg
IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRo
aXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRz
KQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRy
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSk7CisgICAgYXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1h
Z2UsIHNvdXJjZUltYWdlUmVjdCwgcmVzdWx0cyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHNjYWxl
KHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKS5oZWlnaHQoKSB9KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1
bHQtPmFic29sdXRlSW1hZ2VSZWN0KCkpOworICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUm
IG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dSYWRpdXNNb2Rl
IHJhZGl1c01vZGUpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUuc2hh
ZG93T2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZSA9IHJhZGl1c01vZGU7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxv
YXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclNoYWRvdygpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKLSAgICBtX3N0YXRlLnNoYWRvd0Js
dXIgPSAwOwotICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwotICAgIG1fc3RhdGUu
c2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQ7Ci0gICAgZGlkVXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Cisg
ICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKGltYWdlUGFpbnRp
bmdPcHRpb25zLm9yaWVudGF0aW9uKCkpKTsKKyAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc3JjUmVjdCwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwg
Q29sb3ImIGNvbG9yKSBjb25zdAorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIG9mZnNldCA9IG1fc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgIGJsdXIgPSBtX3N0YXRl
LnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwotCi0gICAgcmV0
dXJuIGhhc1NoYWRvdygpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRl
cnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9u
UXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLmZpbGxHcmFk
aWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNo
YW5nZSk7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25R
dWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkp
OworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK0ltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAorICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUocGF0dGVy
bik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVBhdHRlcm5DaGFuZ2UpOworICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUg
JiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CisgICAgICAgIC8vIEp1c3QgZG8gYSBz
Y2FsZS4KKyAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJj
ZSwgb3B0aW9ucyk7CisgICAgfQorCisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zLmNv
bXBvc2l0ZU9wZXJhdG9yKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBtX3N0
YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdU
Rk1vdmUocGF0dGVybik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKKyAgICBzeXN0ZW1JbWFnZS5kcmF3KCp0aGlz
LCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUu
c3Ryb2tlQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUo
Z3JhZGllbnQpOwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHN0
cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0g
bnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOworICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3Jh
ZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwotICAgIG1fc3RhdGUu
ZmlsbEdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3Rh
dGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwotICAgIC8vIEZJWE1FOiBh
bHNvIGZpbGwgcGF0dGVybj8KKyAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsK
KyAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNv
dW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CisgICAgZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CiB9CiAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKQEAgLTUxMSwx
MSArMzQ3LDYgQEAgRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICByZXR1cm4gZm9udC5kcmF3
VGV4dCgqdGhpcywgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmdNb2RlKQotewotICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gdG8pCiB7CiAgICAgZm9udC5kcmF3RW1waGFzaXNNYXJrcygqdGhpcywgcnVuLCBt
YXJrLCBwb2ludCwgZnJvbSwgdG8pOwpAQCAtNTQ5LDcgKzM4MCw0NSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sCiAgICAgICAgIGJpZGlSdW4gPSBiaWRpUnVuLT5uZXh0KCk7CiAgICAgfQogCi0g
ICAgYmlkaVJ1bnMuY2xlYXIoKTsKKyAgICBiaWRpUnVucy5jbGVhcigpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHlsZSkKK3sK
KyAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFz
aEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBz
dHlsZSk7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVC
b3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykKK3sKKyAg
ICBDb2xvciBkdW1teUNvbG9yOworICAgIHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KHJlY3QsIHByaW50aW5nLCBkdW1teUNvbG9yKTsKK30KKworRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIENvbG9yJiBj
b2xvcikKK3sKKyAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBm
bG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKKyAgICBpZiAo
cHJpbnRpbmcpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVj
dC53aWR0aCgpLCB0aGlja25lc3MpKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBnZXRDVE0oKTsKKyAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFz
c3VtaW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KKyAgICBmbG9hdCBzY2FsZSA9IHRyYW5z
Zm9ybS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJh
bnNmb3JtLmEoKTsKKyAgICBpZiAoc2NhbGUgPCAxLjApIHsKKyAgICAgICAgLy8gVGhpcyBjb2Rl
IGFsd2F5cyBkcmF3cyBhIGxpbmUgdGhhdCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdo
LAorICAgICAgICAvLyB3aGljaCB0ZW5kcyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBz
bWFsbCBzY2FsZXMuIFRvIGNvdW50ZXIgdGhpcworICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhh
IGlzIGFwcGxpZWQgdG8gdGhlIHVuZGVybGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwg
c2NhbGVzLgorICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhh
ID0gMC40ZjsKKyAgICAgICAgZmxvYXQgc2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVB
bHBoYSA/IHNjYWxlIDogbWluaW11bVVuZGVybGluZUFscGhhOworICAgICAgICBjb2xvciA9IGNv
bG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KHNoYWRlKTsKKyAgICB9CisKKyAgICBGbG9h
dFBvaW50IGRldmljZVBvaW50ID0gdHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7
CisgICAgLy8gVmlzdWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFs
IHJvdW5kZi9jZWlsZi4gdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBv
dmVyZmxvdyB2YWx1ZSBmb3IgdW5kZXJsaW5lIGRlY29yYXRpb24uCisgICAgRmxvYXRQb2ludCBk
ZXZpY2VPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihk
ZXZpY2VQb2ludC55KCkpKTsKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVy
c2UoKSkKKyAgICAgICAgb3JpZ2luID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9y
aWdpbik7CisgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRo
KCksIHRoaWNrbmVzcykpOwogfQogCiBzdGF0aWMgSW50U2l6ZSBzY2FsZWRJbWFnZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlKQpAQCAtNjM5
LDE4NyArNTA4LDkgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0
ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHIKICAgICByZXR1cm4gY3JlYXRl
U2NhbGVkSW1hZ2VCdWZmZXIocmVjdCwgc2NhbGVGYWN0b3IoKSwgY29sb3JTcGFjZSwgcmVuZGVy
aW5nTW9kZSgpLCByZW5kZXJpbmdNZXRob2QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgc3lzdGVtSW1hZ2UuZHJhdygqdGhpcywgZGVzdGlu
YXRpb25SZWN0KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICByZXR1cm4g
ZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSksIEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25z
KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBzcmNSZWN0
KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlv
bigpKSk7Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3Qs
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0
aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0
eSgpKTsKLSAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZv
clRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBy
ZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLAotICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoaFJ1bGUg
PT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewot
ICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgq
dGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1hZ2Uu
ZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhS
dWxlLCB2UnVsZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCi17Ci0gICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3Qo
ZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5s
b2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZs
b2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3Bl
KCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIGltYWdlLmRyYXco
KnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgp
OwotICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0
KGRlc3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dp
Y2FsU2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
aW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwotICAg
IGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgZGVzdGluYXRpb24sIEZs
b2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9w
dGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25z
dW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25z
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQotewotICAgIGF1dG8gcmVz
dWx0ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53
aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7Ci0gICAgZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgcmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKLSAg
ICBzY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1h
Z2UuZHJhd1BhdHRlcm4oKnRoaXMsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0
aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcFBhdGgocGF0
aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsK
LSAgICAgICAgY2xpcE91dChyZWN0LnJlY3QoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKLSAgICBjbGlw
T3V0KHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKLXsKLSAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3Qp
OwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQotewotICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotewotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVP
cGVyYXRpb24oKTsKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7Ci0g
ICAgZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2
aW91c09wZXJhdG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpIHsKLSAgICAgICAg
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwot
ICAgICAgICBmaWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKLSAgICAgICAgc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZmlsbFJlY3QocmVjdC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxl
bmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBh
dGguYWRkUmVjdChyZWN0KTsKLQotICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNa
ZXJvKCkpCi0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAot
ICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxlID0gZmlsbFJ1bGUoKTsKLSAgICBDb2xvciBvbGRGaWxs
Q29sb3IgPSBmaWxsQ29sb3IoKTsKLSAgICAKLSAgICBzZXRGaWxsUnVsZShXaW5kUnVsZTo6RXZl
bk9kZCk7Ci0gICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAotICAgIGZpbGxQYXRoKHBhdGgpOwot
ICAgIAotICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKLSAgICBzZXRGaWxsQ29sb3Iob2xk
RmlsbENvbG9yKTsKLX0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCi17Ci0gICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJh
dGlvbjsKLSAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IGJsZW5kTW9kZTsKLSAgICBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hh
bmdlKTsKLX0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRh
cmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBT
dHJva2VTdHlsZSBwZW5TdHlsZSkKIHsKQEAgLTg1MCw3NyArNTQxLDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxv
YXRQb2ludCYgcDIKICAgICB9CiB9CiAKLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yKCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgcmV0
dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci19
Ci0gICAgCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmco
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dAotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAgICBhdXRvIHRyYW5zZm9ybWVk
RGVzdFJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIHRyYW5z
Zm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGZpbGxQYXRoKHBh
dGgpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBw
YXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKLSAgICBmaWxsUGF0aChwYXRoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2Uo
ZWxsaXBzZSk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgZHJhd0xp
bmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAs
IHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOwotfQot
Ci1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgQ29sb3IgZHVt
bXlDb2xvcjsKLSAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xvcik7Ci19Ci0KLUZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgZmxvYXQgdGhpY2tu
ZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7Ci0gICAgaWYgKHByaW50aW5nKQot
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwg
dGhpY2tuZXNzKSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgLy8gSnVz
dCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBh
cmUgZXF1YWwuCi0gICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0
cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7Ci0gICAgaWYgKHNj
YWxlIDwgMS4wKSB7Ci0gICAgICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRo
YXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxpbmUgaGlnaCwKLSAgICAgICAgLy8gd2hpY2ggdGVu
ZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVy
IHRoaXMKLSAgICAgICAgLy8gZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRl
cmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KLSAgICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA9IDAuNGY7Ci0gICAgICAgIGZsb2F0
IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1V
bmRlcmxpbmVBbHBoYTsKLSAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeShzaGFkZSk7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRy
YW5zZm9ybS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOwotICAgIC8vIFZpc3VhbCBvdmVyZmxv
dyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92
ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVy
bGluZSBkZWNvcmF0aW9uLgotICAgIEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2lu
dChyb3VuZGYoZGV2aWNlUG9pbnQueCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7Ci0gICAg
aWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCkpCi0gICAgICAgIG9yaWdpbiA9
IGludmVyc2UudmFsdWUoKS5tYXBQb2ludChkZXZpY2VPcmlnaW4pOwotICAgIHJldHVybiBGbG9h
dFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKLX0KLQog
ZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0
aChmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKIHsKICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJv
a2VUaGlja25lc3MoKTsKQEAgLTk3MiwxNSArNTkyLDQgQEAgVmVjdG9yPEZsb2F0UG9pbnQ+IEdy
YXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2Fs
TGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9OwogfQogCi0jaWYgRU5BQkxFKFZJREVP
KQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYg
cGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHBsYXllci5wbGF5
ZXJQcml2YXRlKCktPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlv
bik7Ci19Ci0jZW5kaWYKLQotdm9pZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5n
SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQotewotfQotCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IGZiOTVkZDI1YjI3MWRlYjlmYTg1ZmYyZDlmMWY3NDcxNmEwNjZiYWUuLmIzOWNkODI0ODAw
YTk0MjczMWY3NzRhYmQwYTk4Y2RmYmE3NGY4YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtMzAsNDkgKzMwLDE4IEBACiAjaW5jbHVkZSAiRGVzdGluYXRpb25D
b2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRp
b24uaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgogCi0jaWYgVVNFKENHKQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0OwotI2VsaWYgVVNFKENBSVJPKQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87Ci19Ci10eXBlZGVmIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2Vsc2UKLXR5cGVkZWYgdm9p
ZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQot
I2luY2x1ZGUgIkRJQlBpeGVsRGF0YS5oIgotdHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKLSNp
ZiAhVVNFKENHKQotLy8gVUludDggaXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2Uu
aAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwotI2VuZGlmCi0jZW5kaWYKLQotLy8gWDEx
IGhlYWRlcnMgZGVmaW5lIGEgYnVuY2ggb2YgbWFjcm9zIHdpdGggY29tbW9uIHRlcm1zLCBpbnRl
cmZlcmluZyB3aXRoIFdlYkNvcmUgYW5kIFdURiBlbnVtIHZhbHVlcy4KLS8vIEFzIGEgd29ya2Fy
b3VuZCwgd2UgZXhwbGljaXRseSB1bmRlZiB0aGVtIGhlcmUuCi0jaWYgZGVmaW5lZChOb25lKQot
I3VuZGVmIE5vbmUKLSNlbmRpZgotI2lmIGRlZmluZWQoQmVsb3cpCi0jdW5kZWYgQmVsb3cKLSNl
bmRpZgotI2lmIGRlZmluZWQoU3VjY2VzcykKLSN1bmRlZiBTdWNjZXNzCi0jZW5kaWYKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CkBAIC04Miw3ICs1MSw2
IEBAIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW50
UmVjdDsKIGNsYXNzIE1lZGlhUGxheWVyOwogY2xhc3MgUm91bmRlZFJlY3Q7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHRHTDsKQEAgLTkxLDE3NCArNTksMTIgQEAgY2xhc3MgU3lzdGVtSW1hZ2U7CiBj
bGFzcyBUZXh0UnVuOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKLW5hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7Ci1jbGFzcyBSZWNvcmRlcjsKLX0KLQotZW51bSBjbGFzcyBUZXh0RHJhd2lu
Z01vZGUgOiB1aW50OF90IHsKLSAgICBGaWxsID0gMSA8PCAwLAotICAgIFN0cm9rZSA9IDEgPDwg
MSwKLX07Ci11c2luZyBUZXh0RHJhd2luZ01vZGVGbGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2lu
Z01vZGU+OwotCi0vLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZh
cywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLS8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50
IG9mIHJhZGlpID4gOHB4LgotZW51bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7Ci0g
ICAgRGVmYXVsdCwKLSAgICBMZWdhY3kKLX07Ci0KLWVudW0gU3Ryb2tlU3R5bGUgewotICAgIE5v
U3Ryb2tlLAotICAgIFNvbGlkU3Ryb2tlLAotICAgIERvdHRlZFN0cm9rZSwKLSAgICBEYXNoZWRT
dHJva2UsCi0gICAgRG91YmxlU3Ryb2tlLAotICAgIFdhdnlTdHJva2UsCi19OwotCi1zdHJ1Y3Qg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgewotICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4X3Qg
ewotICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAot
ICAgICAgICBTcGVsbGluZywKLSAgICAgICAgR3JhbW1hciwKLSAgICAgICAgQXV0b2NvcnJlY3Rp
b25SZXBsYWNlbWVudCwKLSAgICAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAgfSBtb2Rl
OwotICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OwotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2Vy
TGluZVN0eWxlPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbW9kZTsKLSAgICBlbmNvZGVyIDw8IHNob3VsZFVz
ZURhcmtBcHBlYXJhbmNlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRp
b25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9kZTsK
LSAgICBkZWNvZGVyID4+IG1vZGU7Ci0gICAgaWYgKCFtb2RlKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZTsKLSAgICBkZWNvZGVyID4+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmICgh
c2hvdWxkVXNlRGFya0FwcGVhcmFuY2UpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4ge3sgKm1vZGUsICpzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9fTsKLX0KLQot
c3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUgewotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRv
cj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7Ci0KLSAgICBlbnVtIENoYW5nZSA6IHVpbnQzMl90
IHsKLSAgICAgICAgU3Ryb2tlR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAotICAgICAgICBTdHJva2VQYXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgPSAx
IDw8IDEsCi0gICAgICAgIEZpbGxHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMiwKLSAgICAgICAgRmlsbFBhdHRlcm5DaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAzLAotICAgICAgICBTdHJva2VUaGlja25lc3NDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDQsCi0gICAgICAgIFN0cm9rZUNvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgNSwKLSAgICAgICAgU3Ryb2tlU3R5bGVDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgID0gMSA8PCA2LAotICAgICAgICBGaWxsQ29sb3JDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDcsCi0gICAgICAgIEZpbGxSdWxlQ2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgOCwKLSAgICAgICAgU2hhZG93Q2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCA5LAotICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0No
YW5nZSAgICAgICAgICAgPSAxIDw8IDEwLAotICAgICAgICBBbHBoYUNoYW5nZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAotICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDEyLAotICAgICAgICBCbGVuZE1vZGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAotICAgICAgICBUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAotICAgICAgICBTaG91bGRBbnRp
YWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAotICAgICAgICBTaG91bGRT
bW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAotICAgICAgICBTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAgPSAxIDw8IDE3LAotICAgICAgICBE
cmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE4LAotICAgICAg
ICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAgICAgICAgPSAxIDw8IDE5LAotI2lm
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgICAgIFVzZURhcmtBcHBlYXJhbmNlQ2hh
bmdlICAgICAgICAgICAgICAgICA9IDEgPDwgMjAsCi0jZW5kaWYKLSAgICB9OwotICAgIHVzaW5n
IFN0YXRlQ2hhbmdlRmxhZ3MgPSBPcHRpb25TZXQ8Q2hhbmdlPjsKLQotICAgIHZvaWQgbWVyZ2VD
aGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVu
dDsKLSAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKLSAgICAKLSAgICBSZWZQdHI8
R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKLSAgICBSZWZQdHI8UGF0dGVybj4gZmlsbFBhdHRlcm47
Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotCi0gICAgQ29sb3Igc3Ryb2tlQ29sb3Ig
eyBDb2xvcjo6YmxhY2sgfTsKLSAgICBDb2xvciBmaWxsQ29sb3IgeyBDb2xvcjo6YmxhY2sgfTsK
LSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBzdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtOwotICAgIEFmZmluZVRyYW5zZm9ybSBmaWxsR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybTsKLQotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyB7IDAgfTsKLSAgICBmbG9h
dCBzaGFkb3dCbHVyIHsgMCB9OwotICAgIGZsb2F0IGFscGhhIHsgMSB9OwotCi0gICAgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUgeyBTb2xpZFN0cm9rZSB9OwotICAgIFdpbmRSdWxlIGZpbGxSdWxl
IHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKLQotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRE
cmF3aW5nTW9kZSB7IFRleHREcmF3aW5nTW9kZTo6RmlsbCB9OwotICAgIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsK
LSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlIHsgQmxlbmRNb2RlOjpOb3JtYWwgfTsKLSAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlv
blF1YWxpdHk6OkRlZmF1bHQgfTsKLSAgICBTaGFkb3dSYWRpdXNNb2RlIHNoYWRvd1JhZGl1c01v
ZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07Ci0KLSAgICBib29sIHNob3VsZEFudGlh
bGlhcyA6IDE7Ci0gICAgYm9vbCBzaG91bGRTbW9vdGhGb250cyA6IDE7Ci0gICAgYm9vbCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMgOiAxOwotICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgOiAxOwotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwotI2lmIEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCi0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSA6IDE7Ci0jZW5k
aWYKLX07Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSB7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVDaGFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRl
KQotICAgICAgICAsIG1fY2hhbmdlRmxhZ3MoZmxhZ3MpCi0gICAgewotICAgIH0KLQotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBjb25zdDsKLQotICAgIHZvaWQgYWNjdW11bGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKTsKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAg
IAotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKLQotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlIG1fc3RhdGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKLX07Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwot
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBo
aWNzQ29udGV4dCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOiAgIAorICAgIGZy
aWVuZCBjbGFzcyBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworcHVibGljOgorICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdy
YXBoaWNzQ29udGV4dCgpOwogCiAgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNzAsMjcwICs3NiwyNzMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1
bFBhaW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIC8vIENvbnRleHQgU3RhdGUK
KyAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRmdWxQYWludERldGVjdGVkOyB9CisgICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3Rl
ZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZs
b2F0IHRoaWNrbmVzcykgeyBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSk7IH0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZVRoaWNrbmVzczsgfQorICAgIC8vIENvbnRleHQgU3RhdGUKIAotICAgIHZv
aWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHls
ZSA9IHN0eWxlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9Ci0gICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0eWxlOyB9CisgICAgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgbWVy
Z2VTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1fc3Rh
dGUubWVyZ2VDaGFuZ2VzKG90aGVyKTsgfQorICAgIHZvaWQgbWVyZ2VTdGF0ZURpZmZzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikgeyBtX3N0YXRlLm1lcmdlRGlmZnMob3RoZXIp
OyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
Jik7Ci0gICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zdHJva2VDb2xvcjsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmdldENUTSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGN0bSkgeyBtX3N0YXRlLnNldENUTShjdG0sIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkg
eyBzZXRDVE0oZ2V0Q1RNKCkgKiBjdG0pOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkgeyBzZXRDVE0oZ2V0Q1RNKCkudHJhbnNsYXRlKHgsIHkpKTsgfQorICAgIHZvaWQg
dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQm
IHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4
LCBmbG9hdCBzeSkgeyBzZXRDVE0oZ2V0Q1RNKCkuc2NhbGUoc3gsIHN5KSk7IH0KKyAgICB2b2lk
IHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkgeyBzY2FsZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9Cisg
ICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIHsgc2V0Q1RNKGdldENUTSgpLnJv
dGF0ZShyYWQyZGVnKGFuZ2xlSW5SYWRpYW5zKSkpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOwotICAgIFBhdHRlcm4qIHN0cm9r
ZVBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0K
KyAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxs
QnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIGZp
bGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5wYXR0ZXJuKCk7
IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxTcGFjZVRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZv
aWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldEZpbGxDb2xv
cihjb2xvciwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0RmlsbEdyYWRpZW50
KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50
KSwgc3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9
KSB7IG1fc3RhdGUuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zv
cm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxH
cmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQq
IHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5n
ZXQoKTsgfQorICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5m
aWxsUnVsZSgpOyB9CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBt
X3N0YXRlLnNldEZpbGxSdWxlKGZpbGxSdWxlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAg
ICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuZmlsbFJ1bGUg
PSBmaWxsUnVsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxSdWxlQ2hhbmdlKTsgfQotICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQorICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGll
bnQqIHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgp
LmdyYWRpZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
cm9rZUJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fc3RhdGUuc2V0U3Ryb2tlQ29sb3IoY29sb3IsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVu
dD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNm
b3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCks
IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJl
ZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblNwYWNl
VHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlUGF0dGVybihXVEZNb3ZlKHBhdHRl
cm4pLCBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsgfQorICAgIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKCk7IH0KKyAg
ICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zZXRT
dHJva2VUaGlja25lc3ModGhpY2tuZXNzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQ
YXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4u
Z2V0KCk7IH0KKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuc3Ryb2tlU3R5bGUoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5
bGUgc3R5bGUpIHsgbV9zdGF0ZS5zZXRTdHJva2VTdHlsZShzdHlsZSwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdy
YWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKLSAgICBHcmFkaWVudCog
ZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7
IH0KKyAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVDYXAo
KTsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsgbV9zdGF0ZS5zZXRM
aW5lQ2FwKGxpbmVDYXAsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IGRp
ZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtc0NoYW5nZSk7IH0KLSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIGNv
bnN0IExpbmVEYXNoIGxpbmVEYXNoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5saW5lRGFzaCgp
OyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVEYXNoKSB7IG1fc3RhdGUu
c2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAot
ICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3Rh
dGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQotICAg
IGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRp
YWxpYXM7IH0KKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
bGluZUpvaW4oKTsgfQorICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pIHsg
bV9zdGF0ZS5zZXRMaW5lSm9pbihsaW5lSm9pbiwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0g
ICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1f
c3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KTsgfQotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNob3VsZFNtb290aEZvbnRzOyB9CisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUubWl0ZXJMaW1pdCgpOyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyTGltaXQpIHsgbV9zdGF0ZS5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQsIG1fbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KIAotICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVh
bnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5n
IGdseXBocy4KLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBl
bnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBzZXRT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMpIHsgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsgfQorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlTW9kZSgpOyB9CisgICAgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9k
ZSgpLm9wZXJhdGlvbjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVy
biBjb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVNb2Rl
KENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX3N0YXRlLnNldENvbXBvc2l0ZU1vZGUo
Y29tcG9zaXRlTW9kZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbikgeyBzZXRDb21wb3NpdGVN
b2RlKHsgb3BlcmF0aW9uLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsgfQogCi0gICAgdm9pZCBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsg
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2UpOyB9Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eTsgfQorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmRyb3BTaGFkb3coKTsgfQorICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBkcm9wU2hhZG93KCkub2Zmc2V0OyB9CisgICAgZmxvYXQgc2hhZG93Qmx1cigp
IGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5ibHVyUmFkaXVzOyB9CisgICAgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yKCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmNvbG9yOyB9Cisg
ICAgdm9pZCBzZXREcm9wU2hhZG93KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpIHsgbV9z
dGF0ZS5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3csIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAg
ICB2b2lkIGNsZWFyU2hhZG93KCkgeyBzZXREcm9wU2hhZG93KHsgfSk7IH0KIAotICAgIHZvaWQg
c2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOyBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOyB9Ci0gICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CisgICAgYm9vbCBo
YXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmlzVmlzaWJsZSgp
OyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRv
dygpLmlzQmx1cnJlZCgpOyB9CisgICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBk
cm9wU2hhZG93KCkuaGFzT3V0c2V0cygpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRN
b2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KLSAgICBCbGVuZE1v
ZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7
IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGEoKTsgfQor
ICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5zZXRBbHBoYShhbHBoYSwg
bV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3
THVtaW5hbmNlTWFzazsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsgfQotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOyB9CisgICAgdm9pZCBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpIHsgbV9zdGF0ZS5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZv
aWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV9zdGF0
ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsgfQotICAgIFRleHREcmF3aW5n
TW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERy
YXdpbmdNb2RlOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUoKTsgfQorICAgIHZvaWQgc2V0
VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSkgeyBt
X3N0YXRlLnNldFRleHREcmF3aW5nTW9kZSh0ZXh0RHJhd2luZ01vZGUsIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRv
d1JhZGl1c01vZGU6OkRlZmF1bHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBj
bGVhclNoYWRvdygpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6
ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25zdDsKKyAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKCk7IH0KKyAgICB2b2lkIHNldFNo
b3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNldFNob3VsZEFu
dGlhbGlhcyhzaG91bGRBbnRpYWxpYXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIGJv
b2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3Iu
aXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zp
c2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zm
c2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9v
bCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYm
IG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKCk7IH0KKyAgICB2b2lkIHNldFNo
b3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91
bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQog
Ci0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtBcHBl
YXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5j
ZSA9IHVzZURhcmtBcHBlYXJhbmNlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9Ci0gICAgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0K
LSNlbmRpZgorICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVhbnRpemF0aW9u
IGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5nIGdseXBocy4K
KyAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBlbnN1cmUgYSBo
aWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCisgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMo
Ym9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMoc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBtX2xhc3RBcHBs
aWVkU3RhdGUpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpOyB9CisgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQg
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2soKTsgfQorICAgIHZvaWQgc2V0
RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLnNldERy
YXdMdW1pbmFuY2VNYXNrKGRyYXdMdW1pbmFuY2VNYXNrLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9
CiAKLSAgICAvLyBDYWxsZWQgKmFmdGVyKiBhbnkgY2hhbmdlIHRvIEdyYXBoaWNzQ29udGV4dFN0
YXRlOyBnZW5lcmFsbHkgdXNlZCB0byBwcm9wYWdhdGUgY2hhbmdlcwotICAgIC8vIHRvIHRoZSBw
bGF0Zm9ybSBjb250ZXh0J3Mgc3RhdGUuCi0gICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MpID0gMDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBl
YXJhbmNlKCk7IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UpIHsgbV9zdGF0ZS5zZXRVc2VEYXJrQXBwZWFyYW5jZSh1c2VEYXJrQXBwZWFyYW5j
ZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorI2VuZGlmCiAKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0
b3JlKCk7Ci0gICAgCisgICAgdm9pZCBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHVuc2ln
bmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSA9IDA7CiAjaWYgVVNFKENHKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0
aG9kcz8KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSA9IDA7CisjZW5kaWYKIAotICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFr
ZSB0aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNy
b3NzLXBsYXRmb3JtPwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CiAKLSAgICAvLyBG
SVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0
ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/Ci0gICAgdmlydHVhbCB2b2lkIHNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpID0gMDsKLSNlbmRpZgorICAgIC8vIFRoaXMgZnVu
Y3Rpb24gYXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFr
aW5nIHRoZSBjb250ZXh0IGNhcGFibGUgb2YKKyAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVs
IGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KIAotICAg
IHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMK
IAotICAgIC8vIFBpeGVsIFNuYXBwaW5nCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBpc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVy
cygpICYmIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsgfQogCi0gICAgZW51bSBSb3VuZGluZ01v
ZGUgewotICAgICAgICBSb3VuZEFsbFNpZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVu
c2lvbnMKLSAgICB9OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgPSAwOwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhG
bG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VT
dHlsZSk7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIC8vIFNoYXBlcworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogCi0gICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwg
ZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KLSAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRy
YXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwotICAgIC8v
IHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0
aGUgY29ycmVjdAotICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdmlydHVhbCB2b2lkIGRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX3N0YXRlLmNsaXBCb3VuZHMoKSk7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IHsgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgc3Ryb2tlRWxsaXBzZUFzUGF0aChl
bGxpcHNlKTsgfQorICAgIC8vIFNoYXBlcworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1h
bCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJiwgQmxlbmRNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOwogCi0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRN
aXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0KLSAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVk
aWEKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICBJbnRTaXplIGNvbXBh
dGlibGVJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0g
c3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxv
cHQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmIHNj
YWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6
bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxl
ZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7
IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0Owor
ICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxp
bmcuCisgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGljaCBmaWxscyBwcm9w
ZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKKyAgICAvLyB1c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGlu
c2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKKyAgICAvLyBzdHJva2Ug
Y29sb3IpLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9k
PiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aXJ0dWFsIGRy
YXdQYXRoKGNvbnN0IFBhdGgmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICAvLyBGb2N1
cyBSaW5ncwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFn
ZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImKSA9IDA7CisgICAgLy8gRklYTUU6IENhbiB3ZSBoaWRlIHRoZXNlIGluIHRoZSBD
RyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQs
IGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisjZW5kaWYKIAorICAgIC8v
IEltYWdlcwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihS
ZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXIm
LCBGaWx0ZXJSZXN1bHRzJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6
RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCisgICAg
V0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFj
dG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICNpZiBFTkFC
TEUoVklERU8pCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogI2VuZGlm
Ci0KLSAgICAvLyBDbGlwcGluZwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSA9IDA7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdDsKLQorICAgIAogICAgIC8vIFRleHQKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQg
ZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RS
ZWFkeSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIHsKLSAg
ICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JU
IEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0g
Rm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZv
clRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9
IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNl
LCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUpID0gMDsKIAotICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
OwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0Zv
clRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7CiAKLSAgICAvLyBGb2N1cyBS
aW5ncworICAgIC8vIENvbXBhdGlibGUgSW1hZ2VCdWZmZXIKIAotICAgIHZpcnR1YWwgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikg
PSAwOwotICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50
YXRpb24/IE9yIGVsc2V3aGVyZT8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVl
ZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotI2VuZGlmCisgICAgSW50U2l6ZSBjb21wYXRp
YmxlSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwogCi0gICAgLy8gVHJh
bnNmb3JtcworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUoeyBzLCBzIH0pOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKSB7IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9
Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54
KCksIHAueSgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2Nh
bGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9
IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxv
cHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAx
IH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3Rk
OjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAg
IHZpcnR1YWwgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01l
dGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
UmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQp
IGNvbnN0OwogCi0gICAgZW51bSBJbmNsdWRlRGV2aWNlU2NhbGUgeyBEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlLCBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSB9OwotICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3QgPSAwOworICAgIC8vIFBpeGVsIFNuYXBwaW5nCiAKLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCi0gICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIHZpcnR1YWwg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3Ip
OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OworICAg
IGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAgICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91
bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAgfTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxs
U2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9Q
aXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJv
a2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwogCiAgICAgLy8gTGlua3MKIAorICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAg
dmlydHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0Jikg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIHsgfQogCi0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICAvLyBDb250ZW50ZnVsIFBhaW50IERldGVjdGlvbgorI2lmIFVTRShDRykKKyAgICAv
LyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRo
ZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQotICAgIGJv
b2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBh
aW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRl
eHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRl
eHQ/CisgICAgdmlydHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIHsgfQor
I2VuZGlmCiAKICAgICAvLyBGSVhNRTogTm90aGluZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBo
ZXJlLCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVsc2V3aGVyZS4KICNpZiBPUyhXSU5ET1dTKQpAQCAt
NTQ2LDEwICszNTUsNyBAQCBwdWJsaWM6CiAgICAgLy8gcHV0IGNvZGUgc2hhcmVkIGJldHdlZW4g
V2luZG93cyBDRyBhbmQgV2luZG93cyBDYWlybyBiYWNrZW5kcy4KICAgICB2aXJ0dWFsIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9h
dFJlY3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7
CkBAIC01NjEsMTkxICszNjcsMTcgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IGRhc2hlZExpbmVQ
YXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCwg
ZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OwogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJM
aW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0
aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKSBjb25zdDsKIAotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7Ci0KIHByaXZhdGU6CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBo
aWNzQ29udGV4dFN0YXRlPiBtX2xhc3RBcHBsaWVkU3RhdGU7CiAgICAgVmVjdG9yPEdyYXBoaWNz
Q29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCiAgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lM
YXllckNvdW50IHsgMCB9OwogICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZh
bHNlIH07CiB9OwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUp
Ci0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFu
ZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAg
ICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgfQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAg
ICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29u
dGV4dC5zYXZlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQot
ICAgIHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9y
ZSk7Ci0gICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dCYgbV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KLWNsYXNz
IFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgewotcHVibGljOgotICAgIFRyYW5zcGFyZW5jeUxheWVy
U2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxh
eWVyID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX2Fs
cGhhKGFscGhhKQotICAgICAgICAsIG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQotICAgIHsKLSAg
ICAgICAgaWYgKGJlZ2luTGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihtX2FscGhhKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBiZWdpbkxheWVyKGZs
b2F0IGFscGhhKQotICAgIHsKLSAgICAgICAgbV9hbHBoYSA9IGFscGhhOwotICAgICAgICBtX2Nv
bnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKLSAgICAgICAgbV9iZWdhbkxh
eWVyID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKLSAgICAgICAgICAgIG1fY29udGV4dC5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0Nv
bnRleHQmIG1fY29udGV4dDsKLSAgICBmbG9hdCBtX2FscGhhOwotICAgIGJvb2wgbV9iZWdhbkxh
eWVyOwotfTsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgewotcHVi
bGljOgotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3N0
YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQotICAgIHsgfQotICAgIAotICAgIH5HcmFwaGlj
c0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0
LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJH
cmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBieSAlZCIsICZtX2NvbnRleHQsIChpbnQp
bV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0YWNrU2l6ZSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1fc3Rh
Y2tTaXplOwotfTsKLQotY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9s
YXRpb25RdWFsaXR5VG9Vc2UpCi0gICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3ND
b250ZXh0KQotICAgICAgICAsIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KGdyYXBoaWNz
Q29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAgICAgICwgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSAhPSBJbnRlcnBv
bGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSAh
PSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKTsKLSAg
ICB9Ci0KLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1
YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5KQotICAgICAgICA6IEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGludGVycG9sYXRpb25RdWFsaXR5ID8gaW50
ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpCi0gICAgewotICAgIH0KLQotICAgIH5JbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgYm9vbCBt
X2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
LAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tp
bmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAotICAgIFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKLSAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0g
ICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpGaWxsR3JhZGllbnRDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUNvbG9yQ2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VTdHlsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpGaWxsUnVsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGFDaGFu
Z2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6QmxlbmRNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhc0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21v
b3RoRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2Us
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQot
ICAgICAgICAsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtB
cHBlYXJhbmNlQ2hhbmdlCi0jZW5kaWYKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCi0gICAgV2ViQ29yZTo6U3Ryb2tl
U3R5bGU6Ok5vU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwK
LSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0
cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJs
ZVN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQotICAgID47Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9k
ZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6OlRl
eHREcmF3aW5nTW9kZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAot
ICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQotICAgID47Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM5ZTU4MWRjYzIyMDNhZDIxYTdmNDhmMzU3
ODE0ZGVmYzNjZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKKworI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgQ2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2NsaXBCb3VuZHMoaW5pdGlhbENUTS5tYXBSZWN0KGlu
aXRpYWxDbGlwKSkKKyAgICAsIG1fY2hhbmdlRmxhZ3MoY2hhbmdlRmxhZ3MpCisgICAgLCBtX2N0
bShpbml0aWFsQ1RNKQoreworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmNs
aXBCb3VuZHMoKSBjb25zdAoreworICAgIGlmIChhdXRvIGludmVyc2UgPSBtX2N0bS5pbnZlcnNl
KCkpCisgICAgICAgIHJldHVybiBpbnZlcnNlLT5tYXBSZWN0KG1fY2xpcEJvdW5kcyk7CisKKyAg
ICAvLyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJl
Y3QuCisgICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9y
bSBiZWhhdmlvci4KKyAgICByZXR1cm4gbV9jbGlwQm91bmRzOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0Cit7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBwcmltaXRpdmVDaGFuZ2VGbGFncyB7IENoYW5nZTo6
U3Ryb2tlVGhpY2tuZXNzLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6OkZpbGxCcnVzaCB9
OworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgIT0gKG1fY2hhbmdlRmxhZ3MgJiBwcmltaXRpdmVD
aGFuZ2VGbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKENoYW5nZTo6U3Ryb2tlQnJ1c2gpICYmICFtX3N0cm9rZUJydXNoLmlzUHJp
bWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKENoYW5nZTo6RmlsbEJydXNoKSAmJiAhbV9maWxsQnJ1c2guaXNQcmltaXRpdmUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZUNoYW5nZSA9IFsmXShDaGFuZ2UgY2hhbmdl
LCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG90
aGVyLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkgeworICAgICAgICAgICAgdGhpcy0+
KnByb3BlcnR5ID0gb3RoZXIuKnByb3BlcnR5OworICAgICAgICAgICAgbV9jaGFuZ2VGbGFncy5h
ZGQoY2hhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBBU1NFUlQobV9jbGlwQm91bmRz
ID09IG90aGVyLm1fY2xpcEJvdW5kcyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNUTSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7
CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2Uo
Q2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZUJydXNo
LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNo
KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VD
aGFuZ2UoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Okxp
bmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xp
bmVDYXApOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TWl0ZXJMaW1p
dCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1p
dCk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkFs
cGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Fs
cGhhKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHks
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cywgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcywgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjptZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikKK3sKKyAg
ICBhdXRvIG1lcmdlRGlmZiA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSAhPSBvdGhl
ci4qcHJvcGVydHkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9w
ZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisgICAgCisgICAgbWVyZ2VEaWZm
KENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbFJ1bGUsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAg
IG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ry
b2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9r
ZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIG1l
cmdlRGlmZihDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lRGFzaCwg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOwor
ICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TWl0
ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVy
TGltaXQpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkFscGhhLCAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7Cisg
ICAgbWVyZ2VEaWZmKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hv
dWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3Vs
ZEFudGlhbGlhcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBtZXJn
ZURpZmYoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlRGlmZihDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBzdGF0ZUNoYW5nZU5hbWUoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZSBjaGFuZ2UpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHN0YXRlQ2hhbmdlTmFt
ZXNbXSA9IHsKKyAgICAgICAgImN0bSIsCisKKyAgICAgICAgImZpbGwtYnJ1c2giLAorICAgICAg
ICAiZmlsbC1ydWxlIiwKKworICAgICAgICAic3Ryb2tlLWJydXNoIiwKKyAgICAgICAgInN0cm9r
ZS10aGlja25lc3MiLAorICAgICAgICAic3Ryb2tlLXN0eWxlIiwKKworICAgICAgICAibGluZS1j
YXAiLAorICAgICAgICAibGluZS1kYXNoIiwKKyAgICAgICAgImxpbmUtam9pbiIsCisgICAgICAg
ICJtaXRlci1saW1pdCIsCisKKyAgICAgICAgImNvbXBvc2l0ZS1tb2RlIiwKKyAgICAgICAgImRy
b3Atc2hhZG93IiwKKworICAgICAgICAiYWxwaGEiLAorICAgICAgICAiaW1hZ2UtaW50ZXJwb2xh
dGlvbi1xdWFsaXR5IiwKKyAgICAgICAgInRleHQtZHJhd2luZy1tb2RlIiwKKworICAgICAgICAi
c2hvdWxkLWFudGlhbGlhcyIsCisgICAgICAgICJzaG91bGQtc21vb3RoLWZvbnRzIiwKKyAgICAg
ICAgInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsCisgICAgICAgICJzaGFkb3dzLWln
bm9yZS10cmFuc2Zvcm1zIiwKKyAgICAgICAgImRyYXctbHVtaW5hbmNlLW1hc2siCisjaWYgSEFW
RShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAgICAgLCAidXNlLWRhcmstYXBwZWFyYW5jZSIK
KyNlbmRpZgorICAgIH07CisKKyAgICB1bnNpZ25lZCBtYXNrID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNoYW5nZSk7CisgICAgQVNTRVJUKCEoKG1hc2sgLSAxKSAmIG1hc2spKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2cyKG1hc2spKTsKKyAg
ICByZXR1cm4gc3RhdGVDaGFuZ2VOYW1lc1tpbmRleF07Cit9CisKK1RleHRTdHJlYW0mIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGF1dG8g
ZHVtcCA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJv
cGVydHksIGNvbnN0IFN0cmluZyYgbmFtZSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhjaGFuZ2UpKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KG5hbWUsIHRoaXMt
Pipwcm9wZXJ0eSk7CisgICAgfTsKKworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdlLWZsYWdz
IiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBkdW1wKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q1RNKSk7CisKKyAgICBkdW1wKENo
YW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6RmlsbEJydXNoKSk7CisgICAgZHVtcChDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkZpbGxSdWxlKSk7CisKKyAgICBkdW1wKENo
YW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6U3Ryb2tlQnJ1c2gpKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MsICAgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSk7CisgICAg
ZHVtcChDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFt
ZShDaGFuZ2U6OlN0cm9rZVN0eWxlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6TGluZUNhcCwgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwLCAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUNhcCkpOworICAg
IGR1bXAoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2xpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5h
bWUoQ2hhbmdlOjpMaW5lRGFzaCkpOworICAgIGR1bXAoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luLCAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpMaW5lSm9pbikpOworICAgIGR1
bXAoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX21pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUo
Q2hhbmdlOjpNaXRlckxpbWl0KSk7CisKKyAgICBkdW1wKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCAg
ICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q29tcG9zaXRlTW9kZSkpOwor
ICAgIGR1bXAoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5n
ZU5hbWUoQ2hhbmdlOjpEcm9wU2hhZG93KSk7CisKKyAgICBkdW1wKENoYW5nZTo6QWxwaGEsICAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6QWxwaGEpKTsKKyAg
ICBkdW1wKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAgIGR1bXAoQ2hhbmdl
OjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3RleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpU
ZXh0RHJhd2luZ01vZGUpKTsKKworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcywgICAg
ICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMpKTsKKyAg
ICBkdW1wKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMpKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKSk7CisgICAgZHVtcChDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zLCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMsICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKSk7CisgICAgZHVtcChDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgIHN0
YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrKSk7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBkdW1wKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UpKTsKKyNl
bmRpZgorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSBjaGFuZ2UpCit7CisgICAgdHMg
PDwgc3RhdGVDaGFuZ2VOYW1lKGNoYW5nZSk7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIHN0YXRlLmR1bXAodHMpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmU0Y2VhM2MyZDU4Yzg3YjQ5
MjM4NDc1ZTQ2OGI1ZGZkNWVlM2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApAQCAtMCwwICsxLDM4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VCcnVzaC5oIgorI2luY2x1ZGUgIldpbmRSdWxlLmgi
CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENoYW5n
ZSA6IHVpbnQzMl90IHsKKyAgICAgICAgQ1RNICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAorCisgICAgICAgIEZpbGxCcnVzaCAgICAgICAgICAgICAgICAgICA9IDEgPDwgMSwKKyAg
ICAgICAgRmlsbFJ1bGUgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAorCisgICAgICAgIFN0
cm9rZUJydXNoICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICAgICAgU3Ryb2tlVGhpY2tu
ZXNzICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAgICBTdHJva2VTdHlsZSAgICAgICAgICAg
ICAgICAgPSAxIDw8IDUsCisKKyAgICAgICAgTGluZUNhcCAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCA2LAorICAgICAgICBMaW5lRGFzaCAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisg
ICAgICAgIExpbmVKb2luICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgTWl0
ZXJMaW1pdCAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorCisgICAgICAgIENvbXBvc2l0ZU1v
ZGUgICAgICAgICAgICAgICA9IDEgPDwgMTAsCisgICAgICAgIERyb3BTaGFkb3cgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMTEsCisKKyAgICAgICAgQWxwaGEgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAxMiwKKyAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSAgID0gMSA8PCAx
MywKKyAgICAgICAgVGV4dERyYXdpbmdNb2RlICAgICAgICAgICAgID0gMSA8PCAxNCwKKworICAg
ICAgICBTaG91bGRBbnRpYWxpYXMgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAgICAgICBTaG91
bGRTbW9vdGhGb250cyAgICAgICAgICAgPSAxIDw8IDE2LAorICAgICAgICBTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMgPSAxIDw8IDE3LAorICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyAgICAgPSAxIDw8IDE4LAorICAgICAgICBEcmF3THVtaW5hbmNlTWFzayAgICAgICAgICAgPSAx
IDw8IDE5LAorI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgIFVzZURhcmtB
cHBlYXJhbmNlICAgICAgICAgICA9IDEgPDwgMjAsCisjZW5kaWYKKyAgICB9OworICAgIHVzaW5n
IENoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IENoYW5nZUZsYWdzIGluaXRpYWxDaGFuZ2VGbGFncyA9IHsgQ2hhbmdlOjpGaWxsQnJ1c2gsIENo
YW5nZTo6U3Ryb2tlQnJ1c2gsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzIH07CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwQm91bmRzLCBjb25zdCBDaGFuZ2VGbGFncyYgPSB7IH0sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgaW5pdGlhbENUTSA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0OworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsg
bV9jbGlwQm91bmRzLmludGVyc2VjdChtX2N0bS5tYXBSZWN0KHJlY3QpKTsgfQorCisgICAgQ2hh
bmdlRmxhZ3MgY2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlRmxhZ3M7IH0KKyAgICB2
b2lkIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCkgeyBtX2NoYW5nZUZsYWdzID0geyB9OyB9CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9jdG07IH0KKyAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSwgY29uc3Qgc3RkOjpvcHRpb25h
bDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHko
Q2hhbmdlOjpDVE0sICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sIGN0bSwgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IFNvdXJjZUJydXNoJiBmaWxsQnJ1c2goKSBjb25zdCB7
IHJldHVybiBtX2ZpbGxCcnVzaDsgfQorICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvciwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RB
cHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpGaWxsQnJ1c2gsICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxsQnJ1c2guc2V0R3JhZGll
bnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQo
Q2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1f
ZmlsbEJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyBt
X2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVzaCk7IH0KKworICAgIFdpbmRSdWxlIGZp
bGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbFJ1bGUs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSwgZmlsbFJ1bGUsIGxhc3RBcHBsaWVk
U3RhdGUpOyB9CisKKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1c2goKSBjb25zdCB7
IHJldHVybiBtX3N0cm9rZUJydXNoOyB9CisgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBD
b2xvciYgY29sb3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBs
YXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlQnJ1c2gsICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgeyBjb2xvciB9LCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRp
ZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1
c2guc2V0R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFu
Z2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFj
ZVRyYW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwg
c3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsg
fQorCisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VU
aGlja25lc3M7IH0KKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlj
a25lc3MsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBw
bGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MsIGxhc3RB
cHBsaWVkU3RhdGUpOyB9CisKKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3Ryb2tlU3R5bGU7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsIHN0cm9rZVN0eWxlLCBsYXN0QXBw
bGllZFN0YXRlKTsgfQorCisgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5lQ2FwOyB9CisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0
UHJvcGVydHkoQ2hhbmdlOjpMaW5lQ2FwLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNh
cCwgbGluZUNhcCwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IExpbmVEYXNoJiBs
aW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZURhc2g7IH0KKyAgICB2b2lkIHNldExpbmVE
YXNoKExpbmVEYXNoJiYgbGluZURhc2gsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250
ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZURh
c2gsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCwgV1RGTW92ZShsaW5lRGFzaCks
IGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUpvaW47IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVK
b2luLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVKb2luLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUpvaW4sIGxpbmVKb2luLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAg
ZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQorICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFu
Z2U6Ok1pdGVyTGltaXQsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCBtaXRl
ckxpbWl0LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIENvbXBvc2l0ZU1vZGUgY29t
cG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlTW9kZTsgfQorICAgIHZvaWQg
c2V0Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFBy
b3BlcnR5KENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Nv
bXBvc2l0ZU1vZGUsIGNvbXBvc2l0ZU1vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisg
ICAgY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcFNo
YWRvdzsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hh
ZG93LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkRyb3BTaGFkb3csICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9kcm9wU2hhZG93LCBkcm9wU2hhZG93LCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2FscGhhOyB9CisgICAgdm9pZCBz
ZXRBbHBoYShmbG9hdCBhbHBoYSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRT
dGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpBbHBoYSwgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhLCBhbHBoYSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICAKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisgICAgdm9p
ZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIGxhc3RBcHBsaWVkU3RhdGUp
OyB9CisgICAgCisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5n
TW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3Bl
cnR5KENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4
dERyYXdpbmdNb2RlLCB0ZXh0RHJhd2luZ01vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAg
ICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQW50aWFsaWFz
OyB9CisgICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRl
KSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzLCBzaG91bGRBbnRpYWxpYXMsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9z
aG91bGRTbW9vdGhGb250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBz
aG91bGRTbW9vdGhGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRTbW9vdGhG
b250cywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzLCBzaG91bGRT
bW9vdGhGb250cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0Nv
bnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25z
dCB7IHJldHVybiBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CisgICAgdm9pZCBzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBz
ZXRQcm9wZXJ0eShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX2RyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgdm9pZCBzZXRE
cmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0
eShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJh
d0x1bWluYW5jZU1hc2ssIGRyYXdMdW1pbmFuY2VNYXNrLCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBlYXJh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV91c2VEYXJrQXBwZWFyYW5jZTsgfQorICAgIHZvaWQgc2V0
VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSwgY29uc3Qgc3RkOjpvcHRp
b25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVy
dHkoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Vz
ZURhcmtBcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyNlbmRpZgorCisgICAgYm9vbCBoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0OworICAg
IHZvaWQgbWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7Cisg
ICAgdm9pZCBtZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7CisK
KyAgICBXVEY6OlRleHRTdHJlYW0mIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3ND
b250ZXh0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgY29uc3QgVCYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gdmFsdWU7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Mu
c2V0KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJv
cGVydHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgc2V0UHJvcGVydHkoQ2hhbmdlIGNoYW5nZSwgVCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6KnByb3BlcnR5LCBUJiYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhp
Y3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhp
cy0+KnByb3BlcnR5ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Muc2V0
KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJvcGVy
dHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgbV9jbGlwQm91
bmRzOworCisgICAgQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBtX2N0bTsKKworICAgIFNvdXJjZUJydXNoIG1fZmlsbEJydXNoIHsgQ29sb3I6OmJsYWNr
IH07CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07CisKKyAg
ICBTb3VyY2VCcnVzaCBtX3N0cm9rZUJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgZmxvYXQg
bV9zdHJva2VUaGlja25lc3MgeyAwIH07CisgICAgU3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZSB7
IFNvbGlkU3Ryb2tlIH07CisKKyAgICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1dHQg
fTsKKyAgICBMaW5lRGFzaCBtX2xpbmVEYXNoOworICAgIExpbmVKb2luIG1fbGluZUpvaW4geyBM
aW5lSm9pbjo6TWl0ZXIgfTsKKyAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAwIH07CisKKyAgICBD
b21wb3NpdGVNb2RlIG1fY29tcG9zaXRlTW9kZSB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9OworICAgIERyb3BTaGFkb3cgbV9kcm9wU2hhZG93Owor
CisgICAgZmxvYXQgbV9hbHBoYSB7IDEgfTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2lt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9
OworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdp
bmdNb2RlOjpGaWxsIH07CisKKyAgICBib29sIG1fc2hvdWxkQW50aWFsaWFzIHsgdHJ1ZSB9Owor
ICAgIGJvb2wgbV9zaG91bGRTbW9vdGhGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RyYXdMdW1pbmFuY2VNYXNrIHsgZmFs
c2UgfTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgbV91c2VEYXJr
QXBwZWFyYW5jZSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBhdXRvIGVuY29kZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdGhpcy0+KnByb3BlcnR5
OworICAgIH07CisKKyAgICBlbmNvZGVyIDw8IG1fY2xpcEJvdW5kczsKKworICAgIGVuY29kZXIg
PDwgbV9jaGFuZ2VGbGFnczsKKworICAgIGVuY29kZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgZW5j
b2RlKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6RmlsbFJ1bGUsICAg
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsK
KworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6
U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3N0cm9rZVRoaWNrbmVzcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKwor
ICAgIGVuY29kZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lRGFz
aCwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURh
c2gpOworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgZW5jb2RlKENoYW5nZTo6
TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X21pdGVyTGltaXQpOworCisgICAgZW5jb2RlKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAg
IGVuY29kZShDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkFscGhh
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBo
YSk7CisgICAgZW5jb2RlKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAg
IGVuY29kZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6
U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZEFudGlhbGlhcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMs
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRz
KTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAg
ICBlbmNvZGUoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIGVuY29kZShD
aGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9S
VCkKKyAgICBlbmNvZGUoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgYXV0byBkZWNvZGUgPSBbJl0oR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDaGFuZ2Ug
Y2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAg
aWYgKCFzdGF0ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICB1c2luZyBQcm9wZXJ0eVR5cGUgPSB0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9yZWZlcmVuY2U8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPigpLipwcm9wZXJ0eSk+Ojp0eXBlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFByb3BlcnR5
VHlwZT4gdmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RhdGUuKnByb3BlcnR5
ID0gKnZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGNsaXBCb3VuZHM7CisgICAgZGVjb2RlciA+PiBjbGlwQm91bmRzOwor
ICAgIGlmICghY2xpcEJvdW5kcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOworICAgIGRlY29kZXIgPj4g
Y2hhbmdlRmxhZ3M7CisgICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlKCpjbGlwQm91bmRzLCAq
Y2hhbmdlRmxhZ3MpOworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6Q1RNLCAgICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Zp
bGxCcnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUo
c3RhdGUsIENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVRoaWNr
bmVzcywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVz
cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUs
IENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc3Ryb2tlU3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZURhc2gsICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVK
b2luLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2lu
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9taXRlckxpbWl0KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyb3BTaGFkb3csICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
YWxwaGEpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0
YXRlLCBDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlRleHREcmF3aW5nTW9k
ZSwgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zaG91bGRBbnRpYWxpYXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcmF3
THVtaW5hbmNlTWFzaywgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVt
aW5hbmNlTWFzaykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpVc2VEYXJr
QXBwZWFyYW5jZSwgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBw
ZWFyYW5jZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKKworICAgIHJl
dHVybiBzdGF0ZTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSk7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpD
VE0sCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Rmls
bEJydXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpG
aWxsUnVsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpTdHJva2VCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlVGhpY2tuZXNzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4sCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQsCisKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdywKKworICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYSwKKyAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4
dERyYXdpbmdNb2RlLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZEFudGlhbGlhcywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywKKyAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBw
ZWFyYW5jZQorI2VuZGlmCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3MjEzMjg1MjYxZTY5MGNhMzA2MGQ3ZTAyNmU1
MGU1MmVlYTU5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJl
c3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1f
c2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAgICBpZiAobV9zYXZl
QW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgfQorICAgIAor
ICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3Nh
dmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVz
dG9yZSk7CisgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBB
U1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Cisg
ICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQorCitwcml2
YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIGJvb2wgbV9zYXZlQW5k
UmVzdG9yZTsKK307CisKK2NsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgeworcHVibGljOgor
ICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9h
dCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgLCBtX2FscGhhKGFscGhhKQorICAgICAgICAsIG1fYmVnYW5MYXllcihi
ZWdpbkxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKGJlZ2luTGF5ZXIpCisgICAgICAgICAgICBt
X2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQorICAgIHsKKyAgICAgICAgbV9hbHBoYSA9
IGFscGhhOworICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhh
KTsKKyAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgflRyYW5z
cGFyZW5jeUxheWVyU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKKyAg
ICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBmbG9hdCBtX2FscGhh
OworICAgIGJvb2wgbV9iZWdhbkxheWVyOworfTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTdGFja0NoZWNrZXIgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQorICAgIHsg
fQorCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9zdGFja1NpemUpCisgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBzdGFjayBjaGFuZ2VkIGJ5ICVkIiwg
Jm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXplKCkgLSAoaW50KW1fc3RhY2tTaXpl
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Cisg
ICAgdW5zaWduZWQgbV9zdGFja1NpemU7Cit9OworCitjbGFzcyBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW50ZXJwb2xhdGlv
blF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICAgICAgOiBtX2dyYXBoaWNz
Q29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgICAgICwgbV9jdXJyZW50SW50ZXJwb2xhdGlv
blF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAg
ICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZChpbnRlcnBvbGF0aW9uUXVhbGl0
eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0ICYmIG1fY3VycmVudEludGVy
cG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgeworICAg
ICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dy
YXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGludGVycG9sYXRpb25R
dWFsaXR5VG9Vc2UpOworICAgIH0KKworICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgc3RkOjpvcHRpb25h
bDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkpCisgICAgICAgIDog
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBoaWNzQ29udGV4dCwgaW50ZXJwb2xh
dGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52YWx1ZSgpIDogZ3JhcGhpY3NDb250
ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICB7CisgICAgfQorCisgICAgfklu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCisgICAgeworICAgICAgICBpZiAobV9pbnRl
cnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5z
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29u
dGV4dDsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVh
bGl0eTsKKyAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCAxNWRmMWRmZGI2ZjNhMTZhZDVlYWY2NDcyNjFm
Y2ZjNGI3YTkzYWI0Li42MmY5ZjQ2NGMzZDZkOWQ1YTA5Y2E1YTRiN2JkOGExMDM2MTU5MWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmNwcApAQCAtMTI2LDI3ICsxMjYsNTEgQEAgU3RyaW5nIGJsZW5kTW9kZU5hbWUoQmxlbmRNb2Rl
IGJsZW5kT3ApCiAgICAgcmV0dXJuIGJsZW5kT3BlcmF0b3JOYW1lc1tzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oYmxlbmRPcCkgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQmxlbmRNb2RlOjpOb3JtYWwp
XTsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKK3sKKyAgICByZXR1cm4gdHMgPDwgYmxlbmRNb2RlTmFtZShibGVuZE1vZGUp
OworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVN
b2RlIGNvbXBvc2l0ZU1vZGUpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3Bl
cmF0aW9uIiwgY29tcG9zaXRlTW9kZS5vcGVyYXRpb24pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
YmxlbmQtbW9kZSIsIGNvbXBvc2l0ZU1vZGUuYmxlbmRNb2RlKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQogewogICAgIHJldHVybiB0cyA8PCBjb21wb3NpdGVPcGVyYXRvck5hbWUob3AsIEJs
ZW5kTW9kZTo6Tm9ybWFsKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpCiB7Ci0gICAgcmV0dXJuIHRz
IDw8IGJsZW5kTW9kZU5hbWUoYmxlbmRNb2RlKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRv
dy1vZmZzZXQiLCBkcm9wU2hhZG93Lm9mZnNldCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFk
b3ctYmx1ciIsIGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJz
aGFkb3ctY29sb3IiLCBkcm9wU2hhZG93LmNvbG9yKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBkcm9wU2hhZG93LnJhZGl1c01vZGUgPT0gU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdpbmRSdWxlIHJ1bGUpCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9u
UXVhbGl0eSkKIHsKLSAgICBzd2l0Y2ggKHJ1bGUpIHsKLSAgICBjYXNlIFdpbmRSdWxlOjpOb25a
ZXJvOgotICAgICAgICB0cyA8PCAiTk9OLVpFUk8iOworICAgIHN3aXRjaCAoaW50ZXJwb2xhdGlv
blF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAg
ICAgICB0cyA8PCAiREVGQVVMVCI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2luZFJ1bGU6
OkV2ZW5PZGQ6Ci0gICAgICAgIHRzIDw8ICJFVkVOLU9ERCI7CisgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgdHMgPDwgIkRPLU5PVC1JTlRF
UlBPTEFURSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkxvdzoKKyAgICAgICAgdHMgPDwgIkxPVyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgdHMgPDwgIk1FRElVTSI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAg
IHRzIDw8ICJIRUlHSCI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQogICAgIHJldHVybiB0czsK
IH0KIApAQCAtMTY2LDYgKzE5MCwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBMaW5lQ2FwIGNhcFN0eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZURhc2gpCit7CisgICAgcmV0dXJuIHRz
OworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBq
b2luU3R5bGUpCiB7CiAgICAgc3dpdGNoIChqb2luU3R5bGUpIHsKQEAgLTE4Miw0ICsyMTEsNTYg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gam9pblN0
eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit7CisgICAgc3dpdGNoIChzdHJva2VT
dHlsZSkgeworICAgIGNhc2UgU3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlOgorICAgICAgICB0cyA8PCAi
Tk8tU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6U29saWRT
dHJva2U6CisgICAgICAgIHRzIDw8ICJTT0xJRC1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2U6CisgICAgICAgIHRzIDw8ICJET1RURUQt
U1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RGFzaGVkU3Ry
b2tlOgorICAgICAgICB0cyA8PCAiREFTSEVELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRPVUJMRS1T
VFJPS0UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tl
OgorICAgICAgICB0cyA8PCAiV0FWWS1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBUZXh0RHJhd2luZ01vZGUgdGV4dERyYXdpbmdNb2RlKQoreworICAgIHN3aXRjaCAodGV4dERy
YXdpbmdNb2RlKSB7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OkZpbGw6CisgICAgICAgIHRz
IDw8ICJGSUxMIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OlN0
cm9rZToKKyAgICAgICAgdHMgPDwgIlNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFdpbmRSdWxlIHJ1bGUpCit7CisgICAgc3dpdGNoIChydWxlKSB7CisgICAgY2FzZSBXaW5kUnVs
ZTo6Tm9uWmVybzoKKyAgICAgICAgdHMgPDwgIk5PTi1aRVJPIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXaW5kUnVsZTo6RXZlbk9kZDoKKyAgICAgICAgdHMgPDwgIkVWRU4tT0REIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmgKaW5kZXggNGQyMDRlOTdlNWM1NDRkNzc2YmZhN2YzMGFhY2MxYjdjNDYzZTBlMC4u
MGY4YjJkMDI3NTViZmFlYzY1ZDk1YzA0ZjJjNDViNTI0OTRmMjYzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGFz
aEFycmF5LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIK
ICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC03Myw2ICs3Niw3OSBAQCBlbnVtIGNsYXNzIEJsZW5kTW9kZSA6IHVpbnQ4X3QgewogICAgIFBs
dXNMaWdodGVyCiB9OwogCitzdHJ1Y3QgQ29tcG9zaXRlTW9kZSB7CisgICAgQ29tcG9zaXRlT3Bl
cmF0b3Igb3BlcmF0aW9uOworICAgIEJsZW5kTW9kZSBibGVuZE1vZGU7CisKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ29tcG9zaXRlTW9kZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1
cm4gb3BlcmF0aW9uID09IG90aGVyLm9wZXJhdGlvbiAmJiBibGVuZE1vZGUgPT0gb3RoZXIuYmxl
bmRNb2RlOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3Rl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENvbXBvc2l0ZU1vZGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgb3BlcmF0aW9uOworICAgIGVuY29k
ZXIgPDwgYmxlbmRNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRp
b25hbDxDb21wb3NpdGVNb2RlPiBDb21wb3NpdGVNb2RlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBvcGVyYXRpb247Cisg
ICAgZGVjb2RlciA+PiBvcGVyYXRpb247CisgICAgaWYgKCFvcGVyYXRpb24pCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRN
b2RlOworICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOworICAgIGlmICghYmxlbmRNb2RlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb3BlcmF0aW9uLCAq
YmxlbmRNb2RlIH0gfTsKK30KKworc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAg
ICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgVGV4dENoZWNraW5nRGljdGF0
aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKKyAgICAgICAgU3BlbGxpbmcsCisgICAgICAgIEdy
YW1tYXIsCisgICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgICAgIERpY3Rh
dGlvbkFsdGVybmF0aXZlcworICAgIH0gbW9kZTsKKyAgICBib29sIHNob3VsZFVzZURhcmtBcHBl
YXJhbmNlIHsgZmFsc2UgfTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsK
K307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0
eWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1v
ZGU7CisgICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+
IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlm
ICghbW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRV
c2VEYXJrQXBwZWFyYW5jZTsKKyAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqbW9kZSwgKnNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlIH0gfTsKK30KKwogZW51bSBjbGFzcyBHcmFkaWVudFNwcmVhZE1l
dGhvZCA6IHVpbnQ4X3QgewogICAgIFBhZCwKICAgICBSZWZsZWN0LApAQCAtOTMsNiArMTY5LDQy
IEBAIGVudW0gY2xhc3MgTGluZUNhcCA6IHVpbnQ4X3QgewogICAgIFNxdWFyZQogfTsKIAorc3Ry
dWN0IExpbmVEYXNoIHsKKyAgICBEYXNoQXJyYXkgZGFzaGVzOworICAgIGZsb2F0IG9mZnNldDsK
KyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IExpbmVEYXNoJiBhLCBjb25zdCBMaW5lRGFzaCYgYikKK3sKKyAgICByZXR1cm4gYS5k
YXNoZXMgPT0gYi5kYXNoZXMgJiYgYS5vZmZzZXQgPT0gYi5vZmZzZXQ7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGRhc2hlczsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGluZURhc2g+IExp
bmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERh
c2hBcnJheT4gZGFzaGVzOworICAgIGRlY29kZXIgPj4gZGFzaGVzOworICAgIGlmICghZGFzaGVz
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9h
dD4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpkYXNo
ZXMpLCAqb2Zmc2V0IH0gfTsKK30KKwogZW51bSBjbGFzcyBMaW5lSm9pbiA6IHVpbnQ4X3Qgewog
ICAgIE1pdGVyLAogICAgIFJvdW5kLApAQCAtMTA1LDYgKzIxNyw3NiBAQCBlbnVtIEhvcml6b250
YWxBbGlnbm1lbnQgewogICAgIEFsaWduSENlbnRlcgogfTsKIAorLy8gTGVnYWN5IHNoYWRvdyBi
bHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisv
LyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xhc3Mg
U2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9Owor
CitzdHJ1Y3QgRHJvcFNoYWRvdyB7CisgICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICBmbG9hdCBi
bHVyUmFkaXVzIHsgMCB9OworICAgIENvbG9yIGNvbG9yOworICAgIFNoYWRvd1JhZGl1c01vZGUg
cmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKKyAgICAKKyAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9v
bCBpc0JsdXJyZWQoKSBjb25zdCB7IHJldHVybiBpc1Zpc2libGUoKSAmJiBibHVyUmFkaXVzOyB9
CisgICAgYm9vbCBoYXNPdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gaXNCbHVycmVkKCkgfHwgKGlz
VmlzaWJsZSgpICYmICFvZmZzZXQuaXNaZXJvKCkpOyB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IGRlY29kZShEZWNv
ZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERyb3BTaGFkb3cmIGEs
IGNvbnN0IERyb3BTaGFkb3cmIGIpCit7CisgICAgcmV0dXJuIGEub2Zmc2V0ID09IGIub2Zmc2V0
ICYmIGEuYmx1clJhZGl1cyA9PSBiLmJsdXJSYWRpdXMgJiYgYS5jb2xvciA9PSBiLmNvbG9yICYm
IGEucmFkaXVzTW9kZSA9PSBiLnJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIERyb3BTaGFkb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgb2Zmc2V0OworICAgIGVuY29kZXIgPDwgYmx1clJhZGl1czsKKyAgICBl
bmNvZGVyIDw8IGNvbG9yOworICAgIGVuY29kZXIgPDwgcmFkaXVzTW9kZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gRHJvcFNoYWRvdzo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+
IG9mZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJsdXJS
YWRpdXM7CisgICAgZGVjb2RlciA+PiBibHVyUmFkaXVzOworICAgIGlmICghYmx1clJhZGl1cykK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+
IGNvbG9yOworICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9k
ZT4gcmFkaXVzTW9kZTsKKyAgICBkZWNvZGVyID4+IHJhZGl1c01vZGU7CisgICAgaWYgKCFyYWRp
dXNNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAq
b2Zmc2V0LCAqYmx1clJhZGl1cywgKmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07Cit9CisKK2VudW0g
U3Ryb2tlU3R5bGUgeworICAgIE5vU3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tlLAorICAgIERvdHRl
ZFN0cm9rZSwKKyAgICBEYXNoZWRTdHJva2UsCisgICAgRG91YmxlU3Ryb2tlLAorICAgIFdhdnlT
dHJva2UsCit9OworCiBlbnVtIFRleHRCYXNlbGluZSB7CiAgICAgQWxwaGFiZXRpY1RleHRCYXNl
bGluZSwKICAgICBUb3BUZXh0QmFzZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwyOSBAQCBlbnVtIFRl
eHRBbGlnbiB7CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLVN0cmluZyBjb21wb3NpdGVPcGVy
YXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7
Ci1TdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwotYm9vbCBwYXJzZUJs
ZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKLWJvb2wgcGFyc2VD
b21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0
ZU9wZXJhdG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CitlbnVtIGNsYXNzIFRleHREcmF3aW5n
TW9kZSA6IHVpbnQ4X3QgeworICAgIEZpbGwgPSAxIDw8IDAsCisgICAgU3Ryb2tlID0gMSA8PCAx
LAorfTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRl
T3BlcmF0b3IpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKK3VzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0g
T3B0aW9uU2V0PFRleHREcmF3aW5nTW9kZT47CisKK1N0cmluZyBjb21wb3NpdGVPcGVyYXRvck5h
bWUoQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CitTdHJpbmcgYmxlbmRNb2RlTmFtZShC
bGVuZE1vZGUpOworYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBCbGVuZE1vZGUm
KTsKK2Jvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENv
bXBvc2l0ZU9wZXJhdG9yJiwgQmxlbmRNb2RlJik7CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBCbGVuZE1vZGUpOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENv
bXBvc2l0ZU9wZXJhdG9yKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDb21wb3NpdGVNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEcm9wU2hh
ZG93Jik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExp
bmVEYXNoKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgU3Ryb2tlU3R5bGUpOworV0VCQ09SRV9FWFBP
UlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFRleHREcmF3
aW5nTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKQEAg
LTIxOSw0ICs0MTQsMzUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpM
aW5lSm9pbj4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlN0cm9rZVN0eWxlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICBXZWJDb3JlOjpTdHJva2VTdHlsZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6Tm9TdHJv
a2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAorICAgIFdlYkNvcmU6
OlN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRh
c2hlZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG91YmxlU3Ryb2tlLAorICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlPiB7CisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2Rl
LAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OkZpbGwsCisgICAgICAgIFdlYkNv
cmU6OlRleHREcmF3aW5nTW9kZTo6U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpNb2RlLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
OjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAorICAg
IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKKyAgICBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNl
bWVudCwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVzCisgICAgPjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VH
ZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggNGUwNzFmNzJmMzViZThhNThmYzRjZDU3N2ExNDU2ZGUx
NzQ2NjgyYy4uNDFiMDUxMWE4Zjc4YTE3OWIzMDRjZjg5ZDQxMDNlMzVkZTNlMTI1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYW1lZElt
YWdlR2VuZXJhdGVkSW1hZ2UuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBO
YW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGCiB7CiAjaWYgVVNFKE5FV19USEVNRSkgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBv
cHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRp
b25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29u
dGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QubG9jYXRp
b24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oCmluZGV4IGI2MjM2Nzg4MGUzZTUzNTRiNjE3MTEzNDdjOWExMWI0MjI0Njg4NWUuLmQ2N2Qz
ZWExMTVkMjRlZmQ5MDllMDNhYzlhZGU5M2E4YjQ3NjRmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsODcg
KzM4LDU3IEBAIHB1YmxpYzoKICAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CiAgICAg
fTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJl
YXNvbnMpCi0gICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAg
ICBOdWxsR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIFBhaW50
SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQorICAgICAgICA6IEdyYXBoaWNzQ29udGV4dChp
bml0aWFsQ2xpcCkKKyAgICAgICAgLCBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25z
KQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0KICAgICBib29sIHBhaW50
aW5nRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBwZXJm
b3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52
YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KICAg
ICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJl
YXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzOyB9CiAgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQogCi0gICAgdm9pZCBk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KLQotI2lmIFVTRShDRykKLSAgICB2
b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQotI2VuZGlmCi0KLSAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfTsKLQotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KLQotICAgIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotCisgICAgdm9pZCBzYXZlKCkgZmluYWwg
eyB9CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVN0YXRlQ2hh
bmdlcygpIGZpbmFsIHsgfTsKICNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRl
cm4oKSBmaW5hbCB7IH0KICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KLSAg
ICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgdm9p
ZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQotICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAg
IHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9Ci0g
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBS
b3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9Ci0gICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFz
aEFycmF5JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWwgeyB9Ci0gICAgdm9p
ZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0
KGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsIHsg
fQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWwgeyB9Ci0gICAgdm9pZCBy
b3RhdGUoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmlu
YWwgeyB9Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwgeyB9
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJs
eUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWwgeyB9CisKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCkgZmluYWwgeyB9CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsIHsgfQotICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgcmVzdG9yZSgp
IGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBGbG9hdFNpemUgZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQp
IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsg
fQorICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAKLSAgICB2b2lk
IGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21TdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3
QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2Fk
ZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQorICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsIHsgfQor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQogCi0gICAgSW1hZ2VEcmF3UmVz
dWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAg
IHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7
IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxv
YXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CkBAIC0xMjcsMjgg
Kzk3LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KICNlbmRp
ZgogCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0KLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0Um91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0K
LQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0K
LQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotCisgICAgdm9pZCBkcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBGaWx0ZXIm
LCBGaWx0ZXJSZXN1bHRzJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbCB7IH0KICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KICNlbmRpZgog
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwg
U3Ryb2tlU3R5bGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisK
KyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KKwog
I2lmIE9TKFdJTkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotcHJpdmF0ZToKICAgICBjb25zdCBQYWludEludmFsaWRh
dGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgeyBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6Ok5vbmUgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdl
MDFmZDM5NDY0MzM5ZDJkNGQ1NGJhOTM2NGM1OTQ1Y2ZhZDdkNWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAi
RElCUGl4ZWxEYXRhLmgiCit0eXBlZGVmIHN0cnVjdCBIRENfXyogSERDOworI2lmICFVU0UoQ0cp
CisvLyBVSW50OCBpcyBkZWZpbmVkIGluIENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oCit0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgVUludDg7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFKENHKQordXNp
bmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBzdHJ1Y3QgQ0dDb250ZXh0OworI2VsaWYgVVNF
KENBSVJPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87
Cit9Cit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOworI2Vsc2UKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gdm9pZDsK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcAppbmRleCBiYjEzOGI1Mjk3YTUyMWZiZjdkNjkzY2QxMTQxMDQ0MDBmY2FiYzRlLi45MDI0
ZjVkMWFiZmNlMzgwODE4M2EzYjIzMWZiY2UwZmZiMmZmNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkxLDE3ICsxOTEsMTcg
QEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICB1cGRhdGVTaGFkb3dCbHVyVmFsdWVzKCk7
CiB9CiAKLVNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlKQotICAgIDogbV9jb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIG1fYmx1clJh
ZGl1cyhzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dCbHVyKQotICAgICwgbV9vZmZzZXQo
c3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3Qg
RHJvcFNoYWRvdyYgZHJvcFNoYWRvdywgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKKyAg
ICA6IG1fY29sb3IoZHJvcFNoYWRvdy5jb2xvcikKKyAgICAsIG1fYmx1clJhZGl1cyhkcm9wU2hh
ZG93LmJsdXJSYWRpdXMsIGRyb3BTaGFkb3cuYmx1clJhZGl1cykKKyAgICAsIG1fb2Zmc2V0KGRy
b3BTaGFkb3cub2Zmc2V0KQorICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gQ29yZSBHcmFwaGljcyBp
bmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJv
YmxlbS84MTAzNDQyPiksCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdn
eSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgaWYgKHN0
YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KSB7Ci0gICAg
ICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0ZS5zaGFkb3dC
bHVyKTsKKyAgICBpZiAoZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSkgeworICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRp
dXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVzKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRT
aXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCmluZGV4IDE0ZmQ4M2VkZTFhMWJh
Y2YxNzdmMzMxZWNhZDFhNDMwMjkzZjYwM2EuLjQ1ZDBlNTgzMjljZGVlYWJmYjc4YTRkNWU2N2Fi
OGQ4ODFhZTU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmgKQEAgLTM4LDggKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBB
ZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1zdHJ1Y3QgR3JhcGhpY3ND
b250ZXh0U3RhdGU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIEltYWdlQnVm
ZmVyOworc3RydWN0IERyb3BTaGFkb3c7CiAKIGNsYXNzIFNoYWRvd0JsdXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNoYWRvd0JsdXIpOwpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAK
ICAgICBTaGFkb3dCbHVyKCk7CiAgICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgYm9vbCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKLSAgICBTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJik7CisgICAgU2hhZG93Qmx1cihjb25zdCBEcm9wU2hhZG93JiwgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93VmFsdWVz
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIGJvb2wg
aWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNmFjMTNmZDI1YzZmMGY4
MDE1ODcyZmYxOWVkMjhhMWZhNTJiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTb3VyY2VCcnVzaDo6U291cmNlQnJ1c2goY29uc3QgQ29sb3ImIGNvbG9yLCBzdGQ6Om9wdGlv
bmFsPEJydXNoPiYmIGJydXNoKQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAsIG1fYnJ1c2go
V1RGTW92ZShicnVzaCkpCit7Cit9CisKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgU291cmNlQnJ1
c2g6OnNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QWZmaW5lVHJhbnNmb3JtPiBpZGVudGl0eTsKKyAgICByZXR1cm4gbV9icnVzaCA/IG1fYnJ1c2gt
PnNwYWNlVHJhbnNmb3JtIDogaWRlbnRpdHkuZ2V0KCk7Cit9CisKK0dyYWRpZW50KiBTb3VyY2VC
cnVzaDo6Z3JhZGllbnQoKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8qIGdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdy
YWRpZW50Pj4oJm1fYnJ1c2gtPmJydXNoKSkKKyAgICAgICAgcmV0dXJuIGdyYWRpZW50LT5wdHIo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGF0dGVybiogU291cmNlQnJ1c2g6OnBhdHRl
cm4oKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKGF1dG8qIHBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZtX2Jy
dXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBwYXR0ZXJuLT5wdHIoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQoUmVmPEdyYWRpZW50
PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQorewor
ICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSB9OworfQor
Cit2b2lkIFNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pCit7CisgICAgbV9icnVzaCA9IHsg
V1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKworV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTb3VyY2VCcnVzaCYgYnJ1c2gpCit7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGJydXNoLmNvbG9yKCkpOworCisgICAgaWYg
KGF1dG8gZ3JhZGllbnQgPSBicnVzaC5ncmFkaWVudCgpKQorICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoImdyYWRpZW50IiwgZ3JhZGllbnQpOworCisgICAgaWYgKGF1dG8gcGF0dGVybiA9IGJydXNo
LnBhdHRlcm4oKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuIiwgcGF0dGVybik7
CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcx
MTBmMjFmZGJlYWNiZjM1ZDc4OTBjNzhmNzM5OTc5NjRhZGZlYTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCkBAIC0wLDAg
KzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5o
IgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
b3VyY2VCcnVzaCB7CitwdWJsaWM6CisgICAgc3RydWN0IEJydXNoIHsKKyAgICAgICAgc3RkOjp2
YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4gYnJ1c2g7CisgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBzcGFjZVRyYW5zZm9ybTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEJydXNoPiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIH07CisKKyAgICBTb3VyY2VCcnVzaCgpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBTb3VyY2VCcnVzaChjb25zdCBDb2xvciYsIHN0ZDo6b3B0aW9uYWw8QnJ1c2g+JiYg
PSBzdGQ6Om51bGxvcHQpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3IgY29sb3IpIHsgbV9j
b2xvciA9IGNvbG9yOyB9CisKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYgYnJ1c2go
KSBjb25zdCB7IHJldHVybiBtX2JydXNoOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFkaWVu
dCogZ3JhZGllbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXR0ZXJuKiBwYXR0ZXJu
KCkgY29uc3Q7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSgpIGNv
bnN0OworCisgICAgdm9pZCBzZXRHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworICAgIHZvaWQgc2V0UGF0dGVybihS
ZWY8UGF0dGVybj4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsg
fSk7CisKKyAgICBib29sIGlzUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gIW1fYnJ1c2ggJiYg
bV9jb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBkZWNvZGUoRGVjb2RlciYp
OworCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBz
dGQ6Om9wdGlvbmFsPEJydXNoPiBtX2JydXNoOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50PiwgUmVmPFBhdHRlcm4+PiYgYSwgY29u
c3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGIpCit7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24oYSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+
JiBhR3JhZGllbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBiR3JhZGllbnQgPSBzdGQ6Omdl
dF9pZjxSZWY8R3JhZGllbnQ+PigmYikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFHcmFkaWVu
dC5wdHIoKSA9PSBiR3JhZGllbnQtPnB0cigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgYVBhdHRlcm4pIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBiUGF0dGVybiA9IHN0ZDo6Z2V0X2lmPFJlZjxQYXR0ZXJu
Pj4oJmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhUGF0dGVybi5wdHIoKSA9PSBiUGF0dGVy
bi0+cHRyKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICApOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYSwg
Y29uc3QgU291cmNlQnJ1c2g6OkJydXNoJiBiKQoreworICAgIHJldHVybiBhLmJydXNoID09IGIu
YnJ1c2ggJiYgYS5zcGFjZVRyYW5zZm9ybSA9PSBiLnNwYWNlVHJhbnNmb3JtOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoJiBhLCBjb25zdCBTb3VyY2VCcnVz
aCYgYikKK3sKKyAgICByZXR1cm4gYS5jb2xvcigpID09IGIuY29sb3IoKSAmJiBhLmJydXNoKCkg
PT0gYi5icnVzaCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBTb3Vy
Y2VCcnVzaDo6QnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgc3BhY2VUcmFuc2Zvcm07CisgICAgV1RGOjpzd2l0Y2hPbihicnVzaCwKKyAgICAg
ICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+JiBncmFkaWVudCkgeworICAgICAgICAgICAgZW5j
b2RlciA8PCB0cnVlIDw8IGdyYWRpZW50LmdldCgpOworICAgICAgICB9LAorICAgICAgICBbJl0g
KGNvbnN0IFJlZjxQYXR0ZXJuPiYgcGF0dGVybikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBm
YWxzZSA8PCBwYXR0ZXJuLmdldCgpOworICAgICAgICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g6OkJydXNoPiBTb3Vy
Y2VCcnVzaDo6QnJ1c2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBzcGFjZVRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHNw
YWNlVHJhbnNmb3JtOworICAgIGlmICghc3BhY2VUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGhhc0dyYWRpZW50OworICAg
IGRlY29kZXIgPj4gaGFzR3JhZGllbnQ7CisgICAgaWYgKCFoYXNHcmFkaWVudCkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBpZiAoKmhhc0dyYWRpZW50KSB7CisgICAg
ICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBp
ZiAoIWdyYWRpZW50KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIHsgeyBXVEZNb3ZlKCpncmFkaWVudCksICpzcGFjZVRyYW5zZm9ybSB9IH07CisgICAg
fQorCisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOworICAgIGlm
ICghcGF0dGVybikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7
IFdURk1vdmUoKnBhdHRlcm4pLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBTb3VyY2VCcnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9icnVz
aDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1
c2g+IFNvdXJjZUJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29s
b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0
ZDo6b3B0aW9uYWw8QnJ1c2g+PiBicnVzaDsKKyAgICBkZWNvZGVyID4+IGJydXNoOworICAgIGlm
ICghYnJ1c2gpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU291
cmNlQnJ1c2goKmNvbG9yLCBXVEZNb3ZlKCpicnVzaCkpOworfQorCitXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgU291cmNlQnJ1c2gmKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UZXh0Qm94SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBjZjY1
YmEyYzEwZTg4ODhkZDQ5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRleHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0
Qm94SXRlcmF0b3IgeworcHVibGljOgorICAgIFRleHRCb3hJdGVyYXRvcigpCisgICAgICAgIDog
bV90ZXh0UnVuKDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAg
VGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkK
KyAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CisgICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBib29s
IGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRS
dW4tPmxlbmd0aCgpOyB9CisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90
ZXh0UnVuKVttX29mZnNldF07IH0KKyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1
cnJlbnQoKSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1f
b2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
ICFvcGVyYXRvcj09KG90aGVyKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1f
dGV4dFJ1bjsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDcyOGQzYmVhMGExNzIzNTAxNGYwZjEyY2YzZDZkN2Rh
MTkzYzM1YTUuLjE1ZTg0NTU3YWM4MWE3NjdhMDA3NDZlMzAxNjE1MzU0NGYyMTU2N2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcApAQCAtMTgzNCw3ICsxODM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJl
Y3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmEK
ICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwg
c2l6ZSgpKTsKIAotICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1f
ZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVU
cmFuc2Zvcm0oKSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4dCgq
bV9kaXNwbGF5TGlzdCwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAgICAg
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1NmEy
M2E1ZmRmYjEwYWZlY2EyY2M5MmE3Mjc5NDU4MTAyZS4uNGU2MjFkNWQ0MWJhMzE0NTkxOWM5N2Iy
OTlmNDRhNjgwOWI1ZDQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0yMjcsNyArMjI3LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEYKICAgICAgICAgc29saWRGaWd1cmVFeHRlbnRzLnVu
aXRlKGZpbGxFeHRlbnRzKTsKICAgICB9CiAKLSAgICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0
YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZv
cm1Db250ZXh0KSwgc29saWRGaWd1cmVFeHRlbnRzLAorICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5
ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91
bmRzKHBsYXRmb3JtQ29udGV4dCksIHNvbGlkRmlndXJlRXh0ZW50cywKICAgICAgICAgW2NhaXJv
Q29udGV4dCwgZHJhd2luZ1N0eWxlLCAmcGF0aCwgJmZpbGxTb3VyY2UsICZzdHJva2VTb3VyY2Vd
KEdyYXBoaWNzQ29udGV4dCYgc2hhZG93Q29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAg
Y2Fpcm9fdCogY2Fpcm9TaGFkb3dDb250ZXh0ID0gc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKTsKQEAgLTM0MSw3ICszNDEsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hh
ZG93KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFNoYWRvdwog
ICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMoc2NhbGVkRm9udCwgZ2x5cGhzLmRh
dGEoKSwgZ2x5cGhzLnNpemUoKSwgJmV4dGVudHMpOwogICAgIEZsb2F0UmVjdCBmb250RXh0ZW50
c1JlY3QocG9pbnQueCgpICsgZXh0ZW50cy54X2JlYXJpbmcsIHBvaW50LnkoKSArIGV4dGVudHMu
eV9iZWFyaW5nLCBleHRlbnRzLndpZHRoLCBleHRlbnRzLmhlaWdodCk7CiAKLSAgICBzaGFkb3cu
ZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6Omdl
dENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZm9udEV4dGVudHNSZWN0LAorICAgIHNoYWRv
dy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0
YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGZvbnRFeHRlbnRzUmVjdCwKICAg
ICAgICAgW3NjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsICZnbHlwaHMsIGZvbnRTbW9v
dGhpbmdNb2RlXShHcmFwaGljc0NvbnRleHQmIHNoYWRvd0NvbnRleHQpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGRyYXdHbHlwaHNUb0NvbnRleHQoc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBmb250
U21vb3RoaW5nTW9kZSk7CkBAIC0zNjcsNyArMzY3LDcgQEAgRmxvYXRSZWN0IGNvbXB1dGVMaW5l
Qm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBs
YXQKICAgICBpZiAocHJpbnRpbmcpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBG
bG9hdFNpemUod2lkdGgsIHRoaWNrbmVzcykpOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCk7CisgICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSA9IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4
dC5jcigpKTsKICAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3Vt
aW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KICAgICBmbG9hdCBzY2FsZSA9IHRyYW5zZm9y
bS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJhbnNm
b3JtLmEoKTsKICAgICBpZiAoc2NhbGUgPCAxLjApIHsKQEAgLTQ0NiwxNyArNDQ2LDE2IEBAIHN0
YXRpYyBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBp
c1ZlcnRpY2FsTGluZSwgZmxvYXQKIAogbmFtZXNwYWNlIFN0YXRlIHsKIAotdm9pZCBzZXRTdHJv
a2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQg
c3Ryb2tlVGhpY2tuZXNzKQordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCogY3IsIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcykKIHsKLSAgICBjYWlyb19zZXRfbGluZV93aWR0aChwbGF0Zm9y
bUNvbnRleHQuY3IoKSwgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBjYWlyb19zZXRfbGluZV93aWR0
aChjciwgc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBzZXRTdHJva2VTdHlsZShHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkK
K3ZvaWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCogY3IsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KQogewogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGFzaFBhdHRlcm5bXSA9IHsgNS4wLCA1LjAg
fTsKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRvdFBhdHRlcm5bXSA9IHsgMS4wLCAxLjAgfTsK
IAotICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAgICAgc3dpdGNoIChz
dHJva2VTdHlsZSkgewogICAgIGNhc2UgTm9TdHJva2U6CiAgICAgICAgIC8vIEZJWE1FOiBpcyBp
dCB0aGUgcmlnaHQgd2F5IHRvIGVtdWxhdGUgTm9TdHJva2U/CkBAIC00NzcsMjkgKzQ3NiwyOSBA
QCB2b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eQogICAgIH0KIH0KIAotdm9pZCBzZXRDb21wb3NpdGVP
cGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBz
ZXRDb21wb3NpdGVPcGVyYXRpb24oY2Fpcm9fdCogY3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBjYWlyb19zZXRfb3Bl
cmF0b3IocGxhdGZvcm1Db250ZXh0LmNyKCksIHRvQ2Fpcm9PcGVyYXRvcihjb21wb3NpdGVPcGVy
YXRpb24sIGJsZW5kTW9kZSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgdG9DYWlyb09w
ZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CiB9CiAKLXZvaWQgc2V0U2hv
dWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGJvb2wg
ZW5hYmxlKQordm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoY2Fpcm9fdCogY3IsIGJvb2wgZW5hYmxl
KQogewogICAgIC8vIFdoZW4gdHJ1ZSwgdXNlIHRoZSBkZWZhdWx0IENhaXJvIGJhY2tlbmQgYW50
aWFsaWFzIG1vZGUgKHVzdWFsbHkgdGhpcwogICAgIC8vIGVuYWJsZXMgc3RhbmRhcmQgJ2dyYXlz
Y2FsZScgYW50aWFsaWFzaW5nKTsgZmFsc2UgdG8gZXhwbGljaXRseSBkaXNhYmxlCiAgICAgLy8g
YW50aWFsaWFzaW5nLgotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0LmNy
KCksIGVuYWJsZSA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05P
TkUpOworICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY3IsIGVuYWJsZSA/IENBSVJPX0FOVElBTElB
U19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05PTkUpOwogfQogCi12b2lkIHNldENUTShHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqIGNyLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKIHsKICAgICBjb25zdCBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSB0b0Nh
aXJvTWF0cml4KHRyYW5zZm9ybSk7Ci0gICAgY2Fpcm9fc2V0X21hdHJpeChwbGF0Zm9ybUNvbnRl
eHQuY3IoKSwgJm1hdHJpeCk7CisgICAgY2Fpcm9fc2V0X21hdHJpeChjciwgJm1hdHJpeCk7CiB9
CiAKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCkKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCogY3IpCiB7CiAgICAgY2Fp
cm9fbWF0cml4X3QgbTsKLSAgICBjYWlyb19nZXRfbWF0cml4KHBsYXRmb3JtQ29udGV4dC5jcigp
LCAmbSk7CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwogICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0obS54eCwgbS55eCwgbS54eSwgbS55eSwgbS54MCwgbS55MCk7CiB9CiAKQEAgLTU1
Niw0NSArNTU1LDQ1IEBAIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKIH0gLy8gbmFtZXNwYWNlIFN0YXRlCiAKIEZpbGxTb3Vy
Y2U6OkZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDog
Z2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEpCi0gICAgLCBmaWxsUnVsZShzdGF0ZS5maWxsUnVsZSkK
KyAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkpCisgICAgLCBmaWxsUnVsZShzdGF0ZS5m
aWxsUnVsZSgpKQogewotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikgewotICAgICAgICBwYXR0
ZXJuLm9iamVjdCA9IGFkb3B0UmVmKHN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpKTsKKyAgICBpZiAoYXV0byBmaWxsUGF0dGVybiA9IHN0
YXRlLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkgeworICAgICAgICBwYXR0ZXJuLm9iamVjdCA9IGFk
b3B0UmVmKGZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3Jt
KCkpKTsKIAotICAgICAgICBhdXRvJiBwYXR0ZXJuSW1hZ2UgPSBzdGF0ZS5maWxsUGF0dGVybi0+
dGlsZUltYWdlKCk7CisgICAgICAgIGF1dG8mIHBhdHRlcm5JbWFnZSA9IGZpbGxQYXR0ZXJuLT50
aWxlSW1hZ2UoKTsKICAgICAgICAgcGF0dGVybi5zaXplID0gcGF0dGVybkltYWdlLnNpemUoKTsK
LSAgICAgICAgcGF0dGVybi50cmFuc2Zvcm0gPSBzdGF0ZS5maWxsUGF0dGVybi0+cGF0dGVyblNw
YWNlVHJhbnNmb3JtKCk7Ci0gICAgICAgIHBhdHRlcm4ucmVwZWF0WCA9IHN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRYKCk7Ci0gICAgICAgIHBhdHRlcm4ucmVwZWF0WSA9IHN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRZKCk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQpIHsKLSAg
ICAgICAgZ3JhZGllbnQuYmFzZSA9IHN0YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigx
LCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmIChzdGF0ZS5h
bHBoYSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRlLmZp
bGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSwgc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9IGZpbGxQYXR0ZXJu
LT5wYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gZmls
bFBhdHRlcm4tPnJlcGVhdFgoKTsKKyAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gZmlsbFBhdHRl
cm4tPnJlcGVhdFkoKTsKKyAgICB9IGVsc2UgaWYgKGF1dG8gZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEJydXNoKCkuZ3JhZGllbnQoKSkgeworICAgICAgICBncmFkaWVudC5iYXNlID0gZmlsbEdy
YWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEsIHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3Jt
KCkpOworICAgICAgICBpZiAoc3RhdGUuYWxwaGEoKSAhPSAxKQorICAgICAgICAgICAgZ3JhZGll
bnQuYWxwaGFBZGp1c3RlZCA9IGZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBo
YSgpLCBzdGF0ZS5maWxsQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgY29sb3IgPSBzdGF0ZS5maWxsQ29sb3I7CisgICAgICAgIGNvbG9yID0gc3RhdGUuZmls
bEJydXNoKCkuY29sb3IoKTsKIH0KIAogU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxw
aGEpCi17Ci0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pCi0gICAgICAgIHBhdHRlcm4gPSBh
ZG9wdFJlZihzdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5l
VHJhbnNmb3JtKCkpKTsKLSAgICBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkgewotICAg
ICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4o
MSwgc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmIChzdGF0
ZS5hbHBoYSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRl
LnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhLCBzdGF0ZS5zdHJva2VH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkp
Cit7CisgICAgaWYgKGF1dG8gc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZUJydXNoKCkucGF0
dGVybigpKQorICAgICAgICBwYXR0ZXJuID0gYWRvcHRSZWYoc3Ryb2tlUGF0dGVybi0+Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgZWxzZSBpZiAoYXV0byBz
dHJva2VHcmFkaWVudCA9IHN0YXRlLnN0cm9rZUJydXNoKCkuZ3JhZGllbnQoKSkgeworICAgICAg
ICBncmFkaWVudC5iYXNlID0gc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3RhdGUu
c3Ryb2tlQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgaWYgKHN0YXRlLmFscGhh
KCkgIT0gMSkKKyAgICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBzdHJva2VHcmFk
aWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSgpLCBzdGF0ZS5zdHJva2VCcnVzaCgpLnNw
YWNlVHJhbnNmb3JtKCkpOwogICAgIH0gZWxzZQotICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9r
ZUNvbG9yOworICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsKIH0K
IAogU2hhZG93U3RhdGU6OlNoYWRvd1N0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSkKLSAgICA6IG9mZnNldChzdGF0ZS5zaGFkb3dPZmZzZXQpCi0gICAgLCBibHVyKHN0YXRl
LnNoYWRvd0JsdXIpCi0gICAgLCBjb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIGlnbm9y
ZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgLCBnbG9iYWxB
bHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yKQorICAgIDogb2Zmc2V0KHN0YXRlLmRyb3BTaGFkb3coKS5vZmZzZXQp
CisgICAgLCBibHVyKHN0YXRlLmRyb3BTaGFkb3coKS5ibHVyUmFkaXVzKQorICAgICwgY29sb3Io
c3RhdGUuZHJvcFNoYWRvdygpLmNvbG9yKQorICAgICwgaWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKQorICAgICwgZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEo
KSkKKyAgICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNvbXBvc2l0ZU1vZGUoKS5v
cGVyYXRpb24pCiB7CiB9CiAKQEAgLTYxNSwxNCArNjE0LDE0IEBAIGJvb2wgU2hhZG93U3RhdGU6
OmlzUmVxdWlyZWQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2UgY2FuIGF2b2lkIFNoYWRvd0JsdXIs
IHNpbmNlIHRoZXJlIGFyZSBubyB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGNhbnZh
cy4KLSAgICBpZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLmlzSWRlbnRpdHkoKSkK
KyAgICBpZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSkuaXNJZGVudGl0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBPdGhlcndpc2UsIG5vIGNoYW5jZSBh
dm9pZGluZyBTaGFkb3dCbHVyLgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIHNldExpbmVD
YXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2Fw
KQordm9pZCBzZXRMaW5lQ2FwKGNhaXJvX3QqIGNyLCBMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAg
Y2Fpcm9fbGluZV9jYXBfdCBjYWlyb0NhcCB7IH07CiAgICAgc3dpdGNoIChsaW5lQ2FwKSB7CkBA
IC02MzYsMTggKzYzNSwxOCBAQCB2b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQogICAgICAgICBjYWlyb0NhcCA9IENB
SVJPX0xJTkVfQ0FQX1NRVUFSRTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3Nl
dF9saW5lX2NhcChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fpcm9DYXApOworICAgIGNhaXJvX3Nl
dF9saW5lX2NhcChjciwgY2Fpcm9DYXApOwogfQogCi12b2lkIHNldExpbmVEYXNoKEdyYXBoaWNz
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQordm9pZCBzZXRMaW5lRGFzaChjYWlyb190KiBjciwgY29uc3QgRGFz
aEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7CiAgICAgaWYgKHN0ZDo6YWxsX29m
KGRhc2hlcy5iZWdpbigpLCBkYXNoZXMuZW5kKCksIFtdKGF1dG8mIGRhc2gpIHsgcmV0dXJuICFk
YXNoOyB9KSkKLSAgICAgICAgY2Fpcm9fc2V0X2Rhc2gocGxhdGZvcm1Db250ZXh0LmNyKCksIDAs
IDAsIDApOworICAgICAgICBjYWlyb19zZXRfZGFzaChjciwgMCwgMCwgMCk7CiAgICAgZWxzZQot
ICAgICAgICBjYWlyb19zZXRfZGFzaChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgZGFzaGVzLmRhdGEo
KSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7CisgICAgICAgIGNhaXJvX3NldF9kYXNoKGNy
LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBz
ZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9p
biBsaW5lSm9pbikKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCogY3IsIExpbmVKb2luIGxpbmVK
b2luKQogewogICAgIGNhaXJvX2xpbmVfam9pbl90IGNhaXJvSm9pbiB7IH07CiAgICAgc3dpdGNo
IChsaW5lSm9pbikgewpAQCAtNjYxLDEyICs2NjAsMTIgQEAgdm9pZCBzZXRMaW5lSm9pbihHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikKICAg
ICAgICAgY2Fpcm9Kb2luID0gQ0FJUk9fTElORV9KT0lOX0JFVkVMOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xpbmVfam9pbihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fp
cm9Kb2luKTsKKyAgICBjYWlyb19zZXRfbGluZV9qb2luKGNyLCBjYWlyb0pvaW4pOwogfQogCi12
b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
ZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiBjciwgZmxvYXQg
bWl0ZXJMaW1pdCkKIHsKLSAgICBjYWlyb19zZXRfbWl0ZXJfbGltaXQocGxhdGZvcm1Db250ZXh0
LmNyKCksIG1pdGVyTGltaXQpOworICAgIGNhaXJvX3NldF9taXRlcl9saW1pdChjciwgbWl0ZXJM
aW1pdCk7CiB9CiAKIHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291
cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCkBAIC02ODIsNyArNjgxLDcgQEAg
dm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnMKIHsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxl
KCkpIHsKICAgICAgICAgU2hhZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFk
b3dTdGF0ZS5ibHVyIH0sIHNoYWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNo
YWRvd1N0YXRlLmlnbm9yZVRyYW5zZm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFk
b3coU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhw
bGF0Zm9ybUNvbnRleHQpLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3QpLAorICAgICAgICBzaGFkb3cu
ZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRl
OjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIEZsb2F0Um91bmRlZFJlY3QocmVjdCks
CiAgICAgICAgICAgICBbJnBsYXRmb3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1ZmZl
ciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0
U2l6ZSYgbGF5ZXJTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxTaGFk
b3dCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5ZXJT
aXplLCBzaGFkb3dTdGF0ZSk7CkBAIC03MTMsNyArNzEyLDcgQEAgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmUKIHsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgU2hh
ZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFkb3dTdGF0ZS5ibHVyIH0sIHNo
YWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLmlnbm9yZVRy
YW5zZm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShw
bGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBy
ZWN0LAorICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShwbGF0Zm9y
bUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHJl
Y3QsCiAgICAgICAgICAgICBbJnBsYXRmb3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1
ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZs
b2F0U2l6ZSYgbGF5ZXJTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxT
aGFkb3dCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5
ZXJTaXplLCBzaGFkb3dTdGF0ZSk7CkBAIC03NDYsNyArNzQ1LDcgQEAgdm9pZCBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFIKIAogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAgICAgICBT
aGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwg
c2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3Jl
VHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5kcmF3SW5zZXRTaGFkb3coU3RhdGU6OmdldENU
TShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQp
LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsCisgICAgICAgIHNoYWRvdy5kcmF3SW5zZXRTaGFkb3co
U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRz
KHBsYXRmb3JtQ29udGV4dCksIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwKICAgICAgICAgICAgIFsm
cGxhdGZvcm1Db250ZXh0LCAmc2hhZG93U3RhdGVdKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBj
b25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9y
bUNvbnRleHQsIGxheWVySW1hZ2UsIGxheWVyT3JpZ2luLCBsYXllclNpemUsIHNoYWRvd1N0YXRl
KTsKQEAgLTg2Myw5ICs4NjIsOSBAQCB2b2lkIGRyYXdQbGF0Zm9ybUltYWdlKEdyYXBoaWNzQ29u
dGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNhaXJvX3N1cmZhY2VfdCogcwogCiAgICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCiAgICAgaWYgKG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciAmJiBvcHRpb25zLmJs
ZW5kTW9kZSgpID09IEJsZW5kTW9kZTo6Tm9ybWFsICYmICFjYWlyb1N1cmZhY2VIYXNBbHBoYShz
dXJmYWNlKSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxh
dGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSwgQmxlbmRNb2RlOjpOb3JtYWwp
OworICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNv
bnRleHQuY3IoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHksIEJsZW5kTW9kZTo6Tm9ybWFsKTsK
ICAgICBlbHNlCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBs
YXRmb3JtQ29udGV4dCwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5k
TW9kZSgpKTsKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxh
dGZvcm1Db250ZXh0LmNyKCksIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSk7CiAKICAgICBGbG9hdFJlY3QgZHN0ID0gZGVzdFJlY3Q7CiAgICAgaWYgKG9w
dGlvbnMub3JpZW50YXRpb24oKSAhPSBJbWFnZU9yaWVudGF0aW9uOjpOb25lKSB7CkBAIC05NjQs
NyArOTYzLDcgQEAgdm9pZCBkcmF3U3VyZmFjZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UKIAogICAgIFNoYWRvd0JsdXIgc2hh
ZG93KHsgc2hhZG93U3RhdGUuYmx1ciwgc2hhZG93U3RhdGUuYmx1ciB9LCBzaGFkb3dTdGF0ZS5v
ZmZzZXQsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5pZ25vcmVUcmFuc2Zvcm1zKTsK
ICAgICBpZiAoc2hhZG93LnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgewotICAgICAg
ICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwg
U3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZGVzdFJlY3QsCisgICAgICAg
IHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3Io
KSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGRlc3RSZWN0LAogICAg
ICAgICAgICAgWyZwYXR0ZXJuLCAmZGVzdFJlY3RdKEdyYXBoaWNzQ29udGV4dCYgc2hhZG93Q29u
dGV4dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBkcmF3UGF0dGVyblRvQ2Fpcm9D
b250ZXh0KHNoYWRvd0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHBhdHRlcm4uZ2V0
KCksIGRlc3RSZWN0LCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKaW5kZXggNTQ5ODU2M2NlNDljMTVlMzVk
MDgyNTljMmQyNmRjN2IxN2NlYTg4NS4uZTVhMzQyNGFlNjExNzA3YWM5N2QwZDE5ZTdjYzMwNjFh
YjcwNjFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKQEAgLTQ2LDIyICs0NiwyMSBAQCBjbGFzcyBDb2xv
cjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBGbG9h
dFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIFBhdGg7CiAKLXN0cnVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKLQogbmFtZXNwYWNlIENhaXJvIHsKIAogbmFtZXNwYWNl
IFN0YXRlIHsKIAotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
LCBmbG9hdCk7Ci12b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgU3Ry
b2tlU3R5bGUpOwordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCosIGZsb2F0KTsKK3Zv
aWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCosIFN0cm9rZVN0eWxlKTsKIAotdm9pZCBzZXRDb21w
b3NpdGVPcGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJv
JiwgYm9vbCk7Cit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSk7Cit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190Kiwg
Ym9vbCk7CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJv
Jik7Cit2b2lkIHNldENUTShjYWlyb190KiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CitBZmZp
bmVUcmFuc2Zvcm0gZ2V0Q1RNKGNhaXJvX3QqKTsKIAogSW50UmVjdCBnZXRDbGlwQm91bmRzKEdy
YXBoaWNzQ29udGV4dENhaXJvJik7CiBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhHcmFw
aGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtMTI1LDEwICsxMjQsMTAg
QEAgc3RydWN0IFNoYWRvd1N0YXRlIHsKICAgICBDb21wb3NpdGVPcGVyYXRvciBnbG9iYWxDb21w
b3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07CiB9OwogCi12
b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5lQ2FwKTsKLXZvaWQgc2V0
TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7
Ci12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgTGluZUpvaW4pOwotdm9p
ZCBzZXRNaXRlckxpbWl0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgZmxvYXQpOwordm9pZCBzZXRM
aW5lQ2FwKGNhaXJvX3QqLCBMaW5lQ2FwKTsKK3ZvaWQgc2V0TGluZURhc2goY2Fpcm9fdCosIGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0KTsKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCosIExpbmVK
b2luKTsKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiwgZmxvYXQpOwogCiB2b2lkIGZpbGxS
ZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmlsbFNv
dXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7CiB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4
dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRDYWlyby5jcHAKaW5kZXggYTdhZjBjZWI1MjQ5MDQwNDFlZTEyZDUxZjg5YzZkZjE2Y2IzNjAz
Ny4uM2QxOTc1NzlhMmNjMjI5OTMzODg1YTFhMTU5NWM2Mzk2Y2E4NmRmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBA
IC03Miw3ICs3Miw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgYXV0byYgc3RhdGUg
PSBjb250ZXh0LnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKmNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2Fs
ZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAg
ICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNo
YWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAgIHN0YXRlLnRleHREcmF3aW5n
TW9kZSgpLCBzdGF0ZS5zdHJva2VUaGlja25lc3MoKSwgc3RhdGUuZHJvcFNoYWRvdygpLm9mZnNl
dCwgc3RhdGUuZHJvcFNoYWRvdygpLmNvbG9yLAogICAgICAgICBmb250U21vb3RoaW5nTW9kZSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhZGllbnRDYWlyby5jcHAKaW5kZXggOTAwOTZhYzY0NTIyNGRiZmRjNjBiZmE2Y2FjYWQw
MzA3NmNiMjk3ZC4uYmUyYzI5NWNhNTA3ZDliNTYzZjg1ZDViY2I4NzA5NzJmMGRhZDhlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90
PiBHcmFkaWVudDo6Y3JlYXRlUGF0dGVybihmbG9hdCBnbG9iYWxBbHBoYSwgY29uc3QgQWZmaW5l
VAogCiB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGF1dG8gcGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4w
LCBjb250ZXh0LnN0YXRlKCkuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGF1dG8g
cGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4wLCBjb250ZXh0LmZpbGxTcGFjZVRyYW5zZm9ybSgp
KTsKICAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCmluZGV4IGMzMjMwNDQ1MzUxYjAzZjJhYTg3MzZhZWUyYmNlNzhiYzQzNjFm
NDkuLmJlZWJhNjMwNzBhMzU0MDZjZTkwYjE4ZGEyZmE2YmYwYTkwNWQ3ZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDggTnVhbnRpIEx0ZC4KQEAgLTY4LDcgKzY4LDggQEAgcHVibGljOgogfTsKIAogR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKFJlZlB0cjxjYWlyb190PiYmIGNv
bnRleHQpCi0gICAgOiBtX2NyKFdURk1vdmUoY29udGV4dCkpCisgICAgOiBHcmFwaGljc0NvbnRl
eHQoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkKKyAgICAsIG1fY3IoV1RGTW92ZShjb250ZXh0
KSkKIHsKICAgICBtX2NhaXJvU3RhdGVTdGFjay5hcHBlbmQoQ2Fpcm9TdGF0ZSgpKTsKICAgICBt
X2NhaXJvU3RhdGUgPSAmbV9jYWlyb1N0YXRlU3RhY2subGFzdCgpOwpAQCAtODYsMTAgKzg3LDkg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK1JlbmRl
cmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewot
ICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU2NhbGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6Omlz
QWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKIEdyYXBoaWNz
Q29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29u
c3QKQEAgLTEzNCw1MyArMTM0LDExMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZXN0
b3JlKCkKICAgICBjYWlyb19yZXN0b3JlKG1fY3IuZ2V0KCkpOwogfQogCi0vLyBEcmF3cyBhIGZp
bGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7
Ci0gICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNz
LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7
CisKKyAgICBpZiAoIXN0YXRlLmNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChhdXRvIGNoYW5nZSA6IHN0YXRlLmNoYW5nZXMoKSkgeworICAgICAgICBzd2l0Y2ggKGNoYW5n
ZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTToKKyAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKG1fY3IuZ2V0KCksIHN0YXRlLmdldENUTSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRTdHJva2VUaGlja25lc3MobV9jci5nZXQoKSwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKCksIDAuZikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZToKKyAgICAgICAgICAgIENhaXJvOjpT
dGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9jci5nZXQoKSwgc3RhdGUuc3Ryb2tlU3R5bGUoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OkxpbmVDYXA6CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZUNhcChtX2NyLmdldCgp
LCBzdGF0ZS5saW5lQ2FwKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjoKKyAgICAgICAgICAgIENhaXJv
OjpzZXRMaW5lSm9pbihtX2NyLmdldCgpLCBzdGF0ZS5saW5lSm9pbigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGlu
ZURhc2g6CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2gobV9jci5nZXQoKSwgc3RhdGUu
bGluZURhc2goKS5kYXNoZXMsIHN0YXRlLmxpbmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0
ZXJMaW1pdDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fY3IuZ2V0KCksIHN0
YXRlLm1pdGVyTGltaXQoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGU6CisgICAgICAgICAgICBD
YWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX2NyLmdldCgpLCBzdGF0ZS5jb21w
b3NpdGVNb2RlKCkub3BlcmF0aW9uLCBzdGF0ZS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKSB7CisgICAgICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3Jh
cGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0
CisgICAgICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1M
NSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgICAgICBhdXRvJiBkcm9w
U2hhZG93ID0gc3RhdGUuZHJvcFNoYWRvdygpOworICAgICAgICAgICAgICAgIGRyb3BTaGFkb3cu
b2Zmc2V0ID0geyBkcm9wU2hhZG93Lm9mZnNldC53aWR0aCgpLCAtZHJvcFNoYWRvdy5vZmZzZXQu
aGVpZ2h0KCkgfTsKKyAgICAgICAgICAgICAgICBzZXREcm9wU2hhZG93KGRyb3BTaGFkb3cpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXM6CisgICAgICAgICAgICBDYWly
bzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX2NyLmdldCgpLCBzdGF0ZS5zaG91bGRBbnRp
YWxpYXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkaWRBcHBseVN0YXRlQ2hhbmdl
cygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnRoaXMsIG5hdGl2ZUltYWdlLnBs
YXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KG9wYWNpdHkpOworICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCp0aGlzLCBvcGFj
aXR5KTsKIH0KIAotLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLCBzbyB3ZSBz
aG91bGQgbm90IGRyYXcgc2hhZG93cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAg
IGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQotICAgICAgICByZXR1cm47CisgICAgR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIENhaXJvOjplbmRUcmFu
c3BhcmVuY3lMYXllcigqdGhpcyk7Cit9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7Ci0gICAgQ2Fpcm86OmRyYXdMaW5lKCp0aGlzLCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ry
b2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRl
LnNob3VsZEFudGlhbGlhcyk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7Cisg
ICAgQ2Fpcm86OmNsaXAoKnRoaXMsIHJlY3QpOwogfQogCi0vLyBUaGlzIG1ldGhvZCBpcyBvbmx5
IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGNsaXBSdWxlKQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBD
YWlybzo6ZHJhd0VsbGlwc2UoKnRoaXMsIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ry
b2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOworICAg
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOworICAgIENhaXJvOjpj
bGlwUGF0aCgqdGhpcywgcGF0aCwgY2xpcFJ1bGUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhdGguaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHJlY3Qp
OworfQogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxs
UGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3Qg
UGF0aCYgcGF0aCkKK3sKKyAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcGF0aCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBi
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhdGguaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIu
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNs
aXBUb0ltYWdlQnVmZmVyKCp0aGlzLCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgp
LCBkZXN0UmVjdCk7Cit9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAg
Q2Fpcm86OnN0cm9rZVBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUp
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgQ2Fpcm86OmNsZWFyUmVj
dCgqdGhpcywgcmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTE5Niw4ICsyNTUsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwotICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4o
MS4wLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgYXV0byBwYXR0ZXJu
ID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKICAg
ICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApAQCAtMjA2LDM1ICsyNjQsNjQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBHcmFkaWVudCYgZ3JhZGllbnQpCiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogeworICAgIENh
aXJvOjpmaWxsUm91bmRlZFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUoKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmICghY29s
b3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOworICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgq
dGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENh
aXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRp
b24oKnRoaXMsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOwotICAgIENhaXJvOjpmaWxs
UmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotICAg
IENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCp0aGlzLCBwcmV2aW91c09wZXJh
dG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OworICAgIENhaXJvOjpmaWxsUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQogewotICAgIENhaXJvOjpjbGlwKCp0aGlzLCByZWN0KTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0cm9rZVJlY3QoKnRoaXMsIHJlY3QsIGxpbmVXaWR0
aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBDYWlybzo6Y2xpcFBhdGgoKnRoaXMsIHBh
dGgsIGNsaXBSdWxlKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWlybzo6c3Ryb2tlUGF0
aCgqdGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwQm91
bmRzKCkgY29uc3QKKy8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBi
b3JkZXIuCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICByZXR1cm4gQ2Fpcm86OlN0
YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQVNTRVJUKCFyZWN0
LmlzRW1wdHkoKSk7CisgICAgQ2Fpcm86OmRyYXdSZWN0KCp0aGlzLCByZWN0LCBib3JkZXJUaGlj
a25lc3MsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKKy8vIFRoaXMgaXMgb25seSB1c2Vk
IHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1
ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICBDYWly
bzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnRoaXMsIG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCku
Z2V0KCksIGRlc3RSZWN0KTsKKyAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQ2Fpcm86OmRyYXdMaW5lKCp0aGlzLCBwb2ludDEsIHBvaW50
Miwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHNob3Vs
ZEFudGlhbGlhcygpKTsKK30KKworLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcg
dGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgQ2Fpcm86OmRy
YXdFbGxpcHNlKCp0aGlzLCByZWN0LCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tl
Q29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTI2MSwxMzggKzM0OCw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHJlY3RzLCBmbG9hdCB3CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRl
cmxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KCp0aGlzLCBwb2ludCwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9r
ZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
IHN0eWxlKQotewotICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCp0aGlzLCBy
ZWN0LCBzdHlsZSk7Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm91bmRU
b0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGlu
Z01vZGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHJvdW5kaW5nTW9kZSk7Ci0gICAgcmV0dXJuIENh
aXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscygqdGhpcywgcmVjdCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAg
IENhaXJvOjp0cmFuc2xhdGUoKnRoaXMsIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlm
IChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0g
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKCp0aGlzLCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKCp0
aGlzLCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3Mg
Y29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAg
ICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBo
YXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3Rh
dGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNo
YWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRl
T3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbigqdGhpcywgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0K
LSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hh
bmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcygqdGhpcywgc3Rh
dGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENhaXJvOjpj
b25jYXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWly
bzo6U3RhdGU6OnNldENUTSgqdGhpcywgdHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAg
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBD
YWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgQ2Fpcm86OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCp0aGlzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xlYXJSZWN0KCp0
aGlzLCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVJlY3QoKnRoaXMsIHJlY3QsIGxp
bmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2FwKExpbmVD
YXAgbGluZUNhcCkKLXsKLSAgICBDYWlybzo6c2V0TGluZUNhcCgqdGhpcywgbGluZUNhcCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIENhaXJvOjpzZXRMaW5lRGFzaCgq
dGhpcywgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgQ2Fpcm86OnNldExpbmVK
b2luKCp0aGlzLCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNl
dE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCi17Ci0gICAgQ2Fpcm86OnNldE1pdGVyTGltaXQoKnRo
aXMsIG1pdGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25z
dCBQYXRoJiBwYXRoKQotewotICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCBwYXRoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCi17Ci0gICAg
Q2Fpcm86OnJvdGF0ZSgqdGhpcywgcmFkaWFucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBDYWlybzo6c2NhbGUo
KnRoaXMsIHNpemUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFn
ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBp
ZiAoIWNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgqdGhp
cywgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqdGhp
cywgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwg
eyBvcHRpb25zLCBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgfSwgYWxwaGEoKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpAQCAtNDA0
LDExICszNjIsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdAogICAgIENhaXJvOjpkcmF3UGF0
dGVybigqdGhpcywgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBuYXRpdmVJbWFn
ZS5zaXplKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9w
dGlvbnMpOwogfQogCi1SZW5kZXJpbmdNb2RlIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJp
bmdNb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjppc0FjY2VsZXJhdGVk
Q29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQg
OiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9u
dFNtb290aGluZykKIHsKICAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQpAQCAt
NDM0LDEyICszODcsMzEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKgogICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0dseXBocygqdGhpcywgQ2Fpcm86OkZp
bGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRP
ZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01v
ZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFk
b3dDb2xvciwKKyAgICAgICAgdGV4dERyYXdpbmdNb2RlKCksIHN0cm9rZVRoaWNrbmVzcygpLCBz
aGFkb3dPZmZzZXQoKSwgc2hhZG93Q29sb3IoKSwKICAgICAgICAgZm9udFNtb290aGluZyk7CiB9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCit7Cisg
ICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlQ29sb3IoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3sKKyAgICBDYWlybzo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5bGUpOworfQorCitGbG9hdFJlY3QgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQoreworICAgIFVOVVNFRF9QQVJBTShyb3Vu
ZGluZ01vZGUpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
KnRoaXMsIHJlY3QpOworfQorCiBjYWlyb190KiBHcmFwaGljc0NvbnRleHRDYWlybzo6Y3IoKSBj
b25zdAogeworICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0Q2Fpcm8mPigqdGhpcykuYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZXR1cm4gbV9jci5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmgKaW5kZXggNTY0NjFjMTU5YTU4M2M4OWM2MWU4ZjAyZTRlMGJlZTdiMDU5
MzJlZi4uNmZjZGUzYThiYjFkZjlmNTViZjY5YmJiZjRmYzY0NjVmODVlOWFiNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNjEgKzUxLDQ5IEBA
IHB1YmxpYzoKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogICAg
IEdyYXBoaWNzQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAot
ICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAg
ICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmlu
YWw7CiAKLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRM
aW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5l
Sm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5h
bDsKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZv
aWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSkgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIAorICAgIHZv
aWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdXNpbmcgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdDsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
KSBmaW5hbDsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jikg
ZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWw7
Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBj
b25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWw7CisKICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAg
ICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwotICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmlu
YWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsK
IAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYs
IGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZp
bmFsOworCiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAog
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHZvaWQgc2F2
ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwotCi0gICAgdm9pZCB0cmFuc2xh
dGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWw7Ci0g
ICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFs
OwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2
aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Cisg
ICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAKLSAgICB2b2lkIGNs
aXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAg
dm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIEludFJlY3Qg
Y2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICAKLSAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5n
TW9kZSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0
eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCiAgICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpS
b3VuZGluZ01vZGUpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAK
aW5kZXggOTZjNzYxMzU0MWJkYzY1OGE3ODdhYjAzZTc3ODE4ODM0ZDMxODVjNC4uYzhlNTY3ODI0
MjMxNWFjMzkzNTFlMDIwOGZmOGEwZWRlZTEzZDliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kLmNwcApAQCAtNjUsNyArNjUsNyBAQCB2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdAog
ICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdENvbnRleHQuc3Rh
dGUoKTsKIAogICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4
dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3Jl
KSkKLSAgICAgICAgZHJhd1BsYXRmb3JtSW1hZ2UoKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCBpbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBv
cHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93
U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKKyAgICAgICAgZHJhd1BsYXRmb3JtSW1h
Z2UoKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS0+cGxhdGZvcm1JbWFnZSgp
LmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRT
dGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgfSwgZGVzdGluYXRpb25Db250ZXh0U3Rh
dGUuYWxwaGEoKSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4
dFN0YXRlKSk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xODU2YTA0MzkzZmQyNGU5NjI4ZjZmZTkzNDY5ZWViZWE0YWJiNTk4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dD
b250ZXh0U3RhdGVTYXZlci5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENH
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENHQ29udGV4dFN0YXRlU2F2ZXIgewor
cHVibGljOgorICAgIENHQ29udGV4dFN0YXRlU2F2ZXIoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGJv
b2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQor
ICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAg
ICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUo
bV9jb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgfkNHQ29udGV4dFN0YXRlU2F2ZXIoKQorICAg
IHsKKyAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCisgICAgICAgICAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2F2ZSgpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOworICAgICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKG1fY29udGV4dCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVl
OworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9z
YXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0
KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBi
b29sIGRpZFNhdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2F2ZUFuZFJlc3Rv
cmU7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBDR0NvbnRleHRSZWYgbV9jb250ZXh0Owor
ICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCAzMjQ1YzYwMDQzMTU1
MmQ1MTNiNzRlZWJjMDlmMzE4ZWVjM2RkNzJhLi43ZWZjNzJjOWU3ZDI4YWUyNmQwMTZlMDZjYjcx
ODhiYTY4MDhjNzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dApAQCAtMTg1LDE0ICsxODUsMTMgQEAgc3RhdGljIHZvaWQgc2V0Q0dC
bGVuZE1vZGUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVu
ZE1vZGUKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4
dFJlZiBjZ0NvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHQoQ0dDb250ZXh0R2V0Q2xpcEJv
dW5kaW5nQm94KGNnQ29udGV4dCksIEdyYXBoaWNzQ29udGV4dFN0YXRlOjppbml0aWFsQ2hhbmdl
RmxhZ3MsIENHQ29udGV4dEdldENUTShjZ0NvbnRleHQpKQogewogICAgIGlmICghY2dDb250ZXh0
KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0
YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUs
IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlIH0pOwotICAgIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9
IGNvcmVJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0
eShwbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
Y29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5
KGludGVybmFsUGxhdGZvcm1Db250ZXh0KCkpKSk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dENHOjp+
R3JhcGhpY3NDb250ZXh0Q0coKQpAQCAtMjA2LDYgKzIwNSwxNCBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dENHOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogfQogCiBDR0NvbnRleHRSZWYgR3Jh
cGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgLy8gU29tZSBj
YWxsZXJzIHRvIHRoaXMgbWV0aG9kIHVzZXMgdGhlIHBsYXRmb3JtIGNvbnRleHQgb3V0c2lkZSB0
aGUgc2NvcGUKKyAgICAvLyBvZiB0aGlzIGNsYXNzLiBDb21taXQgYW55IGNoYW5nZXMgYmVmb3Jl
IHJldHVybmluZyB0aGUgcGxhdGZvcm0gY29udGV4dC4KKyAgICBjb25zdF9jYXN0PEdyYXBoaWNz
Q29udGV4dENHJj4oKnRoaXMpLmFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmV0dXJuIGludGVy
bmFsUGxhdGZvcm1Db250ZXh0KCk7Cit9CisKK0NHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRD
Rzo6aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewogICAgIEFTU0VSVChtX2RhdGEt
Pm1fY2dDb250ZXh0KTsKICAgICByZXR1cm4gbV9kYXRhLT5tX2NnQ29udGV4dC5nZXQoKTsKQEAg
LTMzOCw3ICszNDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpegogI2VuZGlmCiAKICAgICBh
dXRvIG9sZENvbXBvc2l0ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7Ci0gICAgYXV0
byBvbGRCbGVuZE1vZGUgPSBibGVuZE1vZGVPcGVyYXRpb24oKTsKKyAgICBhdXRvIG9sZEJsZW5k
TW9kZSA9IGJsZW5kTW9kZSgpOwogICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQsIG9wdGlvbnMu
Y29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiAKICAgICAvLyBNYWtl
IHRoZSBvcmlnaW4gYmUgYXQgYWRqdXN0ZWREZXN0UmVjdC5sb2NhdGlvbigpCkBAIC0zOTYsNyAr
NDAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
IG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBk
ZXN0UmVjdCk7CiAKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVNb2RlKHsg
b3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogCiAg
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3Qu
eSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQs
IDEsIC0xKTsKQEAgLTU1NSwxMyArNTYyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAoIW1fc3RhdGUuc3Ryb2tlUGF0dGVy
bikKKyAgICBpZiAoIXN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5z
Zm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dD
b250ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUuc3Ryb2tlUGF0
dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOworICAgIGF1dG8gcGxh
dGZvcm1QYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNl
clRvQmFzZUNUTSk7CiAgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsK
IApAQCAtNTc0LDEzICs1ODEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJv
a2VQYXR0ZXJuKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVybigp
CiB7Ci0gICAgaWYgKCFtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmICghZmlsbFBhdHRlcm4o
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5l
VHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRm
b3JtUGF0dGVybiA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1
c2VyVG9CYXNlQ1RNKTsKKyAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IGZpbGxQYXR0ZXJuKCkt
PmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKICAgICBpZiAoIXBsYXRmb3Jt
UGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01OTEsMTEgKzU5OCwxMSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBDR0NvbnRleHRTZXRGaWxs
UGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5BbHBoYSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0aERyYXdpbmdNb2RlJiBtb2RlKQorc3RhdGlj
IGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCiB7Ci0gICAgYm9vbCBzaG91bGRGaWxs
ID0gc3RhdGUuZmlsbFBhdHRlcm4gfHwgc3RhdGUuZmlsbENvbG9yLmlzVmlzaWJsZSgpOwotICAg
IGJvb2wgc2hvdWxkU3Ryb2tlID0gc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCAoc3RhdGUuc3Ryb2tl
U3R5bGUgIT0gTm9TdHJva2UgJiYgc3RhdGUuc3Ryb2tlQ29sb3IuaXNWaXNpYmxlKCkpOwotICAg
IGJvb2wgdXNlRU9GaWxsID0gc3RhdGUuZmlsbFJ1bGUgPT0gV2luZFJ1bGU6OkV2ZW5PZGQ7Cisg
ICAgYm9vbCBzaG91bGRGaWxsID0gY29udGV4dC5maWxsUGF0dGVybigpIHx8IGNvbnRleHQuZmls
bENvbG9yKCkuaXNWaXNpYmxlKCk7CisgICAgYm9vbCBzaG91bGRTdHJva2UgPSBjb250ZXh0LnN0
cm9rZVBhdHRlcm4oKSB8fCAoY29udGV4dC5zdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlICYmIGNv
bnRleHQuc3Ryb2tlQ29sb3IoKS5pc1Zpc2libGUoKSk7CisgICAgYm9vbCB1c2VFT0ZpbGwgPSBj
b250ZXh0LmZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQ7CiAKICAgICBpZiAoc2hvdWxk
RmlsbCkgewogICAgICAgICBpZiAoc2hvdWxkU3Ryb2tlKSB7CkBAIC02MjQsOSArNjMxLDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogCi0g
ICAgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAg
IGlmIChmaWxsR3JhZGllbnQoKSB8fCBzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIC8vIFdl
IGRvbid0IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8gZmlsbCAmIHN0cm9rZSBhIHBhdGggdXNp
bmcgZ3JhZGllbnRzCiAgICAgICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCiAg
ICAgICAgIGZpbGxQYXRoKHBhdGgpOwpAQCAtNjM0LDEzICs2NDAsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4o
KSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIGlmIChzdGF0ZS5zdHJva2VQYXR0
ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVy
bigpOwogCiAgICAgQ0dQYXRoRHJhd2luZ01vZGUgZHJhd2luZ01vZGU7Ci0gICAgaWYgKGNhbGN1
bGF0ZURyYXdpbmdNb2RlKHN0YXRlLCBkcmF3aW5nTW9kZSkpIHsKKyAgICBpZiAoY2FsY3VsYXRl
RHJhd2luZ01vZGUoKnRoaXMsIGRyYXdpbmdNb2RlKSkgewogI2lmIEhBVkUoQ0dfQ09OVEVYVF9E
UkFXX1BBVEhfRElSRUNUKQogICAgICAgICBDR0NvbnRleHREcmF3UGF0aERpcmVjdChjb250ZXh0
LCBkcmF3aW5nTW9kZSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CiAjZWxzZQpAQCAt
NjU4LDcgKzY2NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgaWYgKGZpbGxHcmFkaWVu
dCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0
IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBs
YXllclNpemUgPSBnZXRDVE0oKS5tYXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTY3MCwzMyArNjc2
LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0obGF5ZXJDb250ZXh0LCAtcmVjdC54
KCksIC1yZWN0LnkoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgobGF5ZXJDb250
ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBwYXRoLnBs
YXRmb3JtUGF0aCgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRl
eHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICAgICAgQ0dD
b250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogCiAg
ICAgICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAgICAg
ICAgICAgICBDR0NvbnRleHRFT0NsaXAobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7CiAKLSAgICAgICAg
ICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAg
ICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0Nv
bnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAg
ICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsK
ICAgICAgICAgICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAg
ICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0
LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAgICAgIGlmIChmaWxsUnVsZSgpID09
IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250
ZXh0KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNv
bnRleHQpOwogCi0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMp
OworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsKICAgICAgICAgfQog
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikK
KyAgICBpZiAoZmlsbFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogI2lm
IEhBVkUoQ0dfQ09OVEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgIENHQ29udGV4dERyYXdQYXRo
RGlyZWN0KGNvbnRleHQsIGZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2ZW5PZGQgPyBrQ0dQYXRo
RU9GaWxsIDoga0NHUGF0aEZpbGwsIHBhdGgucGxhdGZvcm1QYXRoKCksIG51bGxwdHIpOwpAQCAt
NzE3LDcgKzcyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChzdHJva2VH
cmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgRmxv
YXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKICAgICAgICAgICAgIGZsb2F0
IGxpbmVXaWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtNzQyLDggKzc0OCw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAg
ICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsK
ICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxheWVyQ29u
dGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0gICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+
cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXll
ckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3Jh
ZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgZmxvYXQgZGVzdGlu
YXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAgICAgIGZsb2F0
IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0aCk7CkBAIC03NTQsMTMg
Kzc2MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZv
cm1QYXRoKCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBh
dGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotICAgICAg
ICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRT
cGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWlu
dCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgc3Ryb2tl
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludCgq
dGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0
YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBw
bHlTdHJva2VQYXR0ZXJuKCk7CiAKICNpZiBVU0UoQ0dfQ09OVEVYVF9TVFJPS0VfTElORV9TRUdN
RU5UU19XSEVOX1NUUk9LSU5HX1BBVEgpCkBAIC03ODUsNyArNzkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5m
aWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkpIHsKICAgICAgICAgQ0dDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBpZiAoaGFzU2hhZG93
KCkpIHsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXllclNpemUgPSBnZXRDVE0oKS5tYXBTaXpl
KHJlY3Quc2l6ZSgpKTsKQEAgLTc5OCwyNyArODA0LDI3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgICAgIENHQ29udGV4
dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAo
bGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29u
dGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBt
X3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENH
Q29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogICAgICAgICAg
ICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRleHQsIHJlY3QsIGxheWVyLmdldCgpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4
dCwgcmVjdCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0
ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLmZpbGxH
cmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNv
bnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgp
LT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigpKQogICAgICAg
ICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKICAgICBib29sIGRyYXdPd25TaGFkb3cgPSBjYW5Vc2VT
aGFkb3dCbHVyKCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQs
IGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1
cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihw
bGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNl
dFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBT
aGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29u
dGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAg
ICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCBGbG9hdFJvdW5kZWRSZWN0
KHJlY3QpKTsKICAgICB9CiAKQEAgLTgzNyw5ICs4NDMsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
ICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRv
dyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hh
ZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4
dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENv
bG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29u
dGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRy
b3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRT
aGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3QocmVjdCkpOwogICAg
IH0KIApAQCAtODUyLDcgKzg1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICBzZXRD
R0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xv
ciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKQEAgLTg2NCw5ICs4NzAsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRl
eHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8v
IFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xv
cihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4
dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAg
ICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIg
Y29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwog
ICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93KCp0aGlzLCByZWN0KTsKICAgICB9
CiAKQEAgLTg3NCw3ICs4ODAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRl
ZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0CiAgICAgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpID0gcmVjdC5yYWRpaSgpOwogICAgIGJvb2wg
ZXF1YWxXaWR0aHMgPSAocmFkaWkudG9wTGVmdCgpLndpZHRoKCkgPT0gcmFkaWkudG9wUmlnaHQo
KS53aWR0aCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSA9PSByYWRpaS5ib3R0b21MZWZ0
KCkud2lkdGgoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkud2lkdGgoKSA9PSByYWRpaS5ib3R0b21S
aWdodCgpLndpZHRoKCkpOwogICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gKHJhZGlpLnRvcExlZnQo
KS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgJiYgcmFkaWkuYm90dG9t
TGVmdCgpLmhlaWdodCgpID09IHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgJiYgcmFkaWkudG9w
UmlnaHQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgpKTsKLSAgICBi
b29sIGhhc0N1c3RvbUZpbGwgPSBtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQ
YXR0ZXJuOworICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IGZpbGxHcmFkaWVudCgpIHx8IGZpbGxQ
YXR0ZXJuKCk7CiAgICAgaWYgKCFoYXNDdXN0b21GaWxsICYmIGVxdWFsV2lkdGhzICYmIGVxdWFs
SGVpZ2h0cyAmJiByYWRpaS50b3BMZWZ0KCkud2lkdGgoKSAqIDIgPT0gci53aWR0aCgpICYmIHJh
ZGlpLnRvcExlZnQoKS5oZWlnaHQoKSAqIDIgPT0gci5oZWlnaHQoKSkKICAgICAgICAgQ0dDb250
ZXh0RmlsbEVsbGlwc2VJblJlY3QoY29udGV4dCwgcik7CiAgICAgZWxzZSB7CkBAIC05MTMsOSAr
OTE5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG8KICAgICBDR0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFk
b3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0
U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsK
KyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8s
IDAsIDApOwogCi0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAg
ICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd0luc2V0U2hhZG93KCp0
aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3QpOwogICAgIH0KIApAQCAtOTMwLDYgKzkzNiw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXAo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0
KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKICAg
ICBtX2RhdGEtPmNsaXAocmVjdCk7CiB9CkBAIC05NDAsMzEgKzk0NywzNSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAvLyB0byA8
cmRhcjovL3Byb2JsZW0vMTI1ODQ0OTI+LCBDR1JlY3RJbmZpbml0ZSBjYW4ndCBiZSB1c2VkIHdp
dGggYW4gYWNjZWxlcmF0ZWQgY29udGV4dCB0aGF0CiAgICAgLy8gaGFzIGNlcnRhaW4gdHJhbnNm
b3JtcyB0aGF0IGFyZW4ndCBqdXN0IGEgdHJhbnNsYXRpb24gb3IgYSBzY2FsZS4gQW5kIGR1ZSB0
byA8cmRhcjovL3Byb2JsZW0vMTQ2MzQ0NTM+CiAgICAgLy8gd2UgY2Fubm90IHVzZSBpdCBpbiBm
b3IgYSBwcmludGluZyBjb250ZXh0IGVpdGhlci4KKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtID0gZ2V0
Q1RNKCk7Ci0gICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUo
cGxhdGZvcm1Db250ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2Rl
KCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5j
KCkpKTsKLSAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dS
ZWN0SW5maW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0
KCkpLCByZWN0IH07Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICBDR0NvbnRleHRBZGRSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdHMsIDIpOwotICAg
IENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgYm9vbCBjYW5Vc2VDR1Jl
Y3RJbmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUoY29udGV4dCkgIT0ga0NHQ29udGV4dFR5cGVQ
REYgJiYgKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIHx8
ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOworICAgIENHUmVjdCByZWN0c1syXSA9IHsgY2FuVXNl
Q0dSZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZpbml0ZSA6IENHQ29udGV4dEdldENsaXBCb3VuZGlu
Z0JveChjb250ZXh0KSwgcmVjdCB9OworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsK
KyAgICBDR0NvbnRleHRBZGRSZWN0cyhjb250ZXh0LCByZWN0cywgMik7CisgICAgQ0dDb250ZXh0
RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNv
bnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBDR0NvbnRleHRH
ZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIENHQ29udGV4dEdldENsaXBCb3Vu
ZGluZ0JveChjb250ZXh0KSk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgQ0dD
b250ZXh0QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Ci0g
ICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAgQ0dDb250ZXh0
QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBDR0NvbnRleHRFT0Ns
aXAoY29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENHQ29u
dGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENHQ29udGV4
dEFkZFBhdGgocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOworICAgICAg
ICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4dEFkZFBhdGgo
Y29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAKICAgICAgICAgaWYgKGNsaXBSdWxlID09
IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQp
OwpAQCAtOTc1LDExICs5ODYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICBtX2RhdGEtPmNsaXAocGF0
aCk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMoKSBjb25zdAot
ewotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0Jv
eChwbGF0Zm9ybUNvbnRleHQoKSkpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwpAQCAtMTAwMiwxNyArMTAwOCwxNCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgcmVz
dG9yZSgpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5l
ZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHRmxvYXQmIHhPZmZzZXQsIENH
RmxvYXQmIHlPZmZzZXQpCitzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJ
Zk5lZWRlZChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYg
eU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCiAg
ICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwogICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0KTsKICAg
ICBVTlVTRURfUEFSQU0oeU9mZnNldCk7CiAjZWxzZQotICAgIGlmIChjb250ZXh0LnJlbmRlcmlu
Z01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCkpKQorICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hh
ZG93T2Zmc2V0cyhjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV29yayBhcm91
bmQgPHJkYXI6Ly9wcm9ibGVtLzU1MzkzODg+IGJ5IGVuc3VyaW5nIHRoYXQgdGhlIG9mZnNldHMg
d2lsbCBnZXQgdHJ1bmNhdGVkCkBAIC0xMDMwLDEwICsxMDMzLDU1IEBAIHN0YXRpYyB2b2lkIGFw
cGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZs
b2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNldENHTGluZUNhcChD
R0NvbnRleHRSZWYgY29udGV4dCwgTGluZUNhcCBjYXApCiB7Ci0gICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgc3dpdGNoIChj
YXApIHsKKyAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6CisgICAgICAgIENHQ29udGV4dFNldExpbmVD
YXAoY29udGV4dCwga0NHTGluZUNhcEJ1dHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExp
bmVDYXA6OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xp
bmVDYXBSb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUNhcDo6U3F1YXJlOgor
ICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBTcXVhcmUpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CiAKK3N0YXRpYyB2b2lkIHNldENHTGluZUpvaW4oQ0dD
b250ZXh0UmVmIGNvbnRleHQsIExpbmVKb2luIGpvaW4pCit7CisgICAgc3dpdGNoIChqb2luKSB7
CisgICAgY2FzZSBMaW5lSm9pbjo6TWl0ZXI6CisgICAgICAgIENHQ29udGV4dFNldExpbmVKb2lu
KGNvbnRleHQsIGtDR0xpbmVKb2luTWl0ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExp
bmVKb2luOjpSb3VuZDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oY29udGV4dCwga0NH
TGluZUpvaW5Sb3VuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGluZUpvaW46OkJldmVs
OgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pbkJldmVs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXRDR01pdGVyTGlt
aXQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGZsb2F0IGxpbWl0KQoreworICAgIENHQ29udGV4dFNl
dE1pdGVyTGltaXQoY29udGV4dCwgbGltaXQpOworfQorCitzdGF0aWMgdm9pZCBzZXRDR0xpbmVE
YXNoKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKK3sKKyAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKKyAgICAgICAgZmxvYXQg
bGVuZ3RoID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tp
XSk7CisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChk
YXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOworICAgIH0KKyAgICBDR0NvbnRleHRTZXRMaW5l
RGFzaChjb250ZXh0LCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsK
K30KKworc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coQ0dDb250ZXh0UmVmIGNvbnRleHQsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJs
dXIsIGNvbnN0IENvbG9yJiBjb2xvciwgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK3sK
ICAgICBpZiAob2Zmc2V0LmlzWmVybygpICYmICFibHVyKSB7CiAgICAgICAgIENHQ29udGV4dFNl
dFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMTA0NSw3ICsxMDkzLDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICBD
R0Zsb2F0IHlPZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9hdCBibHVyUmFkaXVz
ID0gYmx1cjsKIAotICAgIGlmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKCkpIHsKKyAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CiAgICAgICAgIENH
QWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQp
OwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0u
YSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTEwNjYsNyArMTExNCw4
IEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgLy8gRXh0cmVtZSAiYmx1ciIgdmFsdWVz
IGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcgdGltZXMsIHNv
IGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5hcnJvd1ByZWNp
c2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3Vu
ZElmTmVlZGVkKGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7CisgICAgaWYgKHJl
bmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisgICAgICAgIGFwcGx5
U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnRleHQsIHhPZmZzZXQsIHlPZmZzZXQp
OwogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMgbWVhbnMgdGhh
dCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBhbmQgd2Ugc2hv
dWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3IuCkBAIC0xMDc2
LDQ0ICsxMTI1LDgxIEBAIHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgICAgIENHQ29udGV4
dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlPZmZzZXQp
LCBibHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKS5nZXQoKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgYXV0byBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRMaW5l
V2lkdGgoY29udGV4dCwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCAwLmYpKTsKKyAg
ICBhdXRvIGNvbnRleHQgPSBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKGZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0g
ICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENH
Q29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpLmdldCgpKTsKKyAgICBmb3IgKGF1dG8gY2hhbmdlIDog
c3RhdGUoKS5jaGFuZ2VzKCkpIHsKKyAgICAgICAgc3dpdGNoIChjaGFuZ2UpIHsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE06CisgICAgICAgICAgICBDR0Nv
bnRleHRTZXRDVE0oY29udGV4dCwgc3RhdGUoKS5nZXRDVE0oKSk7CisgICAgICAgICAgICBicmVh
azsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKSkKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUuZmlsbENv
bG9yKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpGaWxsQnJ1
c2g6CisgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZSgpLmZpbGxCcnVz
aCgpLmNvbG9yKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0
U2V0QWxwaGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgICAgIENHQ29udGV4
dFNldExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZSgpLnN0cm9rZVRoaWNrbmVzcygp
LCAwLmYpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55
KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKLSAgICAgICAgc2V0Q0dCbGVuZE1v
ZGUoY29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2g6Cisg
ICAgICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNo
ZWRDR0NvbG9yKHN0YXRlKCkuc3Ryb2tlQnJ1c2goKS5jb2xvcigpKS5nZXQoKSk7CisgICAgICAg
ICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdp
bmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSkp
OworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXA6Cisg
ICAgICAgICAgICBzZXRDR0xpbmVDYXAoY29udGV4dCwgc3RhdGUoKS5saW5lQ2FwKCkpOworICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldFNob3Vs
ZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luOgorICAgICAgICAgICAgc2V0
Q0dMaW5lSm9pbihjb250ZXh0LCBzdGF0ZSgpLmxpbmVKb2luKCkpOworICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9u
dHMoY29udGV4dCwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoOgorICAgICAgICAgICAgc2V0Q0dMaW5l
RGFzaChjb250ZXh0LCBzdGF0ZSgpLmxpbmVEYXNoKCkuZGFzaGVzLCBzdGF0ZSgpLmxpbmVEYXNo
KCkub2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkK
LSAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwgY2dJbnRl
cnBvbGF0aW9uUXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSk7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDoKKyAgICAg
ICAgICAgIHNldENHTWl0ZXJMaW1pdChjb250ZXh0LCBzdGF0ZSgpLm1pdGVyTGltaXQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKLSAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMsIHN0YXRl
LnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsK
LX0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVN
b2RlOgorICAgICAgICAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgc3RhdGUoKS5jb21wb3Np
dGVNb2RlKCkub3BlcmF0aW9uLCBzdGF0ZSgpLmNvbXBvc2l0ZU1vZGUoKS5ibGVuZE1vZGUpOwor
ICAgICAgICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldE1pdGVyTGlt
aXQoZmxvYXQgbGltaXQpCi17Ci0gICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNv
bnRleHQoKSwgbGltaXQpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkRyb3BTaGFkb3c6CisgICAgICAgICAgICBzZXRDR1NoYWRvdyhjb250ZXh0LCByZW5kZXJp
bmdNb2RlKCksIHN0YXRlKCkuZHJvcFNoYWRvdygpLm9mZnNldCwgc3RhdGUoKS5kcm9wU2hhZG93
KCkuYmx1clJhZGl1cywgc3RhdGUoKS5kcm9wU2hhZG93KCkuY29sb3IsIHN0YXRlKCkuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkFscGhhOgorICAgICAgICAgICAgQ0dDb250
ZXh0U2V0QWxwaGEoY29udGV4dCwgc3RhdGUoKS5hbHBoYSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eToKKyAgICAgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25R
dWFsaXR5KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUoKS5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4dERyYXdpbmdNb2RlOgorICAgICAgICAg
ICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2Rl
KHN0YXRlKCkudGV4dERyYXdpbmdNb2RlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzOgor
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHN0YXRlKCku
c2hvdWxkQW50aWFsaWFzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTbW9vdGhGb250czoKKyAgICAgICAg
ICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRlKCkuc2hvdWxk
U21vb3RoRm9udHMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkaWRBcHBseVN0YXRl
Q2hhbmdlcygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByKQpAQCAtMTEyNSw3ICsxMjExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYg
KG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICBpZiAoc3Ryb2tlR3JhZGllbnQoKSkgewog
ICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRvdWJs
ZUxpbmVXaWR0aCA9IGxpbmVXaWR0aCAqIDI7CiAgICAgICAgICAgICBmbG9hdCBhZGp1c3RlZFdp
ZHRoID0gY2VpbGYocmVjdC53aWR0aCgpICsgZG91YmxlTGluZVdpZHRoKTsKQEAgLTExMzUsNyAr
MTIyMSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBhdXRvIGxheWVyID0gYWRv
cHRDRihDR0xheWVyQ3JlYXRlV2l0aENvbnRleHQoY29udGV4dCwgbGF5ZXJTaXplLCAwKSk7CiAK
ICAgICAgICAgICAgIENHQ29udGV4dFJlZiBsYXllckNvbnRleHQgPSBDR0xheWVyR2V0Q29udGV4
dChsYXllci5nZXQoKSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IGxp
bmVXaWR0aDsKICAgICAgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChsYXllckNvbnRleHQs
IGxpbmVXaWR0aCk7CiAKICAgICAgICAgICAgIC8vIENvbXBlbnNhdGUgZm9yIHRoZSBsaW5lIHdp
ZHRoLCBvdGhlcndpc2UgdGhlIGxheWVyJ3MgdG9wLWxlZnQgY29ybmVyIHdvdWxkIGJlCkBAIC0x
MTQ5LDggKzEyMzQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICAgICAgQ0dDb250ZXh0
QWRkUmVjdChsYXllckNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFj
ZVBhdGhXaXRoU3Ryb2tlZFBhdGgobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4
dENsaXAobGF5ZXJDb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXll
ckNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAg
ICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAg
ICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFkaWVudCgpLT5wYWludChsYXllckNvbnRleHQp
OwogCiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkZXN0aW5hdGlvblggPSByb3VuZGYocmVjdC54
KCkgLSBsaW5lV2lkdGgpOwogICAgICAgICAgICAgY29uc3QgZmxvYXQgZGVzdGluYXRpb25ZID0g
cm91bmRmKHJlY3QueSgpIC0gbGluZVdpZHRoKTsKQEAgLTExNjEsMTMgKzEyNDYsMTMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgcmVj
dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250
ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAgICAgICBD
R0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJh
bnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KCp0aGlz
KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBzdHJva2VTcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KCp0aGlzKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3RhdGUuc3Ry
b2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBseVN0cm9r
ZVBhdHRlcm4oKTsKIAogICAgIC8vIFVzaW5nIENHQ29udGV4dEFkZFJlY3QgYW5kIENHQ29udGV4
dFN0cm9rZVBhdGggdG8gc3Ryb2tlIHJlY3QgcmF0aGVyIHRoYW4KQEAgLTExODIsOTQgKzEyNjcs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCi17
Ci0gICAgc3dpdGNoIChjYXApIHsKLSAgICBjYXNlIExpbmVDYXA6OkJ1dHQ6Ci0gICAgICAgIENH
Q29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lQ2FwOjpSb3VuZDoKLSAgICAgICAgQ0dDb250ZXh0
U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFJvdW5kKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBMaW5lQ2FwOjpTcXVhcmU6Ci0gICAgICAgIENHQ29udGV4dFNldExp
bmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBTcXVhcmUpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGlmIChkYXNoT2Zm
c2V0IDwgMCkgewotICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGxlbmd0aCArPSBz
dGF0aWNfY2FzdDxmbG9hdD4oZGFzaGVzW2ldKTsKLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAg
ICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7Ci0g
ICAgfQotICAgIENHQ29udGV4dFNldExpbmVEYXNoKHBsYXRmb3JtQ29udGV4dCgpLCBkYXNoT2Zm
c2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBzd2l0Y2ggKGpvaW4p
IHsKLSAgICBjYXNlIExpbmVKb2luOjpNaXRlcjoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpv
aW4ocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luTWl0ZXIpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIExpbmVKb2luOjpSb3VuZDoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4o
cGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luUm91bmQpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIExpbmVKb2luOjpCZXZlbDoKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxh
dGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luQmV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKLXsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwotICAgIG1fZGF0
YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgQ0dD
b250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7Ci0gICAgbV9kYXRhLT5y
b3RhdGUoYW5nbGUpOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRv
QmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZv
cm1Db250ZXh0KCksIHgsIHkpOwotICAgIG1fZGF0YS0+dHJhbnNsYXRlKHgsIHkpOwotICAgIG1f
ZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dDb250ZXh0Q29uY2F0Q1RNKHBsYXRmb3JtQ29udGV4
dCgpLCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZvcm1Db250ZXh0KCks
IHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQot
QWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0oSW5jbHVkZURldmljZVNj
YWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKLXsKLSAgICAvLyBUaGUgQ1RNIHVzdWFsbHkgaW5jbHVk
ZXMgdGhlIGRldmljZVNjYWxlRmFjdG9yIGV4Y2VwdCBpbiBXZWJLaXQgMSB3aGVuIHRoZQotICAg
IC8vIGNvbnRlbnQgaXMgbm9uLWNvbXBvc2l0ZWQsIHNpbmNlIHRoZSBzY2FsZSBmYWN0b3IgaXMg
aW50ZWdyYXRlZCBhdCBhIGxvd2VyCi0gICAgLy8gbGV2ZWwuIFRvIGd1YXJhbnRlZSB0aGUgZGV2
aWNlU2NhbGUgaXMgaW5jbHVkZWQsIHdlIGNhbiB1c2UgdGhpcyBDRyBBUEkuCi0gICAgaWYgKGlu
Y2x1ZGVTY2FsZSA9PSBEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKQotICAgICAgICByZXR1
cm4gQ0dDb250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShwbGF0Zm9ybUNv
bnRleHQoKSk7Ci0KLSAgICByZXR1cm4gQ0dDb250ZXh0R2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgp
KTsKLX0KLQogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsKICAg
ICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBz
cGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCkBAIC0xMjgwLDcgKzEyNzcsOSBAQCBGbG9h
dFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBSb3VuZGluZwogICAgIGlmIChtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkpCiAgICAgICAgIHJldHVybiByb3VuZGVkSW50UmVjdChyZWN0
KTsKIAotICAgIENHQWZmaW5lVHJhbnNmb3JtIGRldmljZU1hdHJpeCA9IENHQ29udGV4dEdldFVz
ZXJTcGFjZVRvRGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxhdGZvcm1Db250ZXh0KCkpOworICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBDR0FmZmluZVRy
YW5zZm9ybSBkZXZpY2VNYXRyaXggPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNl
VHJhbnNmb3JtKGNvbnRleHQpOwogICAgIGlmIChDR0FmZmluZVRyYW5zZm9ybUlzSWRlbnRpdHko
ZGV2aWNlTWF0cml4KSkgewogICAgICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSB0cnVlOwogICAgICAgICByZXR1cm4gcm91bmRlZEludFJlY3Qo
cmVjdCk7CkBAIC0xMzE5LDYgKzEzMTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lcwogICAg
IGlmICghd2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9y
KHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91
bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoRmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUo
d2lkdGhzLmxhc3QoKSwgdGhpY2tuZXNzKSksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsK
QEAgLTEzNjQsMTIgKzEzNjQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXMKICAgICB9CiAK
ICAgICBpZiAoZmlsbENvbG9ySXNOb3RFcXVhbFRvU3Ryb2tlQ29sb3IpCi0gICAgICAgIHNldENH
RmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBsb2NhbFN0cm9rZUNvbG9yKTsKKyAgICAgICAg
c2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgbG9jYWxTdHJva2VDb2xvcik7CiAKLSAgICBDR0NvbnRl
eHRGaWxsUmVjdHMocGxhdGZvcm1Db250ZXh0KCksIGRhc2hCb3VuZHMuZGF0YSgpLCBkYXNoQm91
bmRzLnNpemUoKSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3RzKGNvbnRleHQsIGRhc2hCb3VuZHMu
ZGF0YSgpLCBkYXNoQm91bmRzLnNpemUoKSk7CiAKICAgICBpZiAoZmlsbENvbG9ySXNOb3RFcXVh
bFRvU3Ryb2tlQ29sb3IpCi0gICAgICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgp
LCBmaWxsQ29sb3IoKSk7CisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGZpbGxDb2xv
cigpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0VVJMRm9yUmVjdChjb25zdCBV
UkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkBAIC0xNDEyLDE3ICsxNDEyLDE4
IEBAIFJlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q0c6OnJlbmRlcmluZ01vZGUoKSBjb25z
dAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvcikKIHsKICAgICBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICAvLyBDb3JlR3JhcGhpY3MgZXhwZWN0cyB0aGUgYmFz
ZSBDVE0gb2YgYSBIaURQSSBjb250ZXh0IHRvIGhhdmUgdGhlIHNjYWxlIGZhY3RvciBhcHBsaWVk
IHRvIGl0LgogICAgIC8vIEZhaWxpbmcgdG8gY2hhbmdlIHRoZSBiYXNlIGxldmVsIENUTSB3aWxs
IGNhdXNlIGNlcnRhaW4gQ0cgZmVhdHVyZXMsIHN1Y2ggYXMgZm9jdXMgcmluZ3MsCiAgICAgLy8g
dG8gZHJhdyB3aXRoIGEgc2NhbGUgZmFjdG9yIG9mIDEgcmF0aGVyIHRoYW4gdGhlIGFjdHVhbCBz
Y2FsZSBmYWN0b3IuCi0gICAgQ0dDb250ZXh0U2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwg
Q0dBZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4
dCgpKSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgQ0dDb250
ZXh0U2V0QmFzZUNUTShjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdl
dEJhc2VDVE0oY29udGV4dCksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3Rvcikp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiB7CiAgICAgLy8gQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3Qgb25seSBz
dXBwb3J0cyBzb2xpZCBjb2xvcnMuCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1f
c3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50KCkgfHwgZmlsbFBhdHRl
cm4oKSkgewogICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTE0MzQsNyArMTQzNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewogICAgIC8v
IENHQ29udGV4dFN0cm9rZUVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0cyBzb2xpZCBjb2xvcnMu
Ci0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
KSB7CisgICAgaWYgKHN0cm9rZUdyYWRpZW50KCkgfHwgc3Ryb2tlUGF0dGVybigpKSB7CiAgICAg
ICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xNDY4LDkgKzE0NjksMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGlu
YXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2kKIAogYm9vbCBH
cmFwaGljc0NvbnRleHRDRzo6Y2FuVXNlU2hhZG93Qmx1cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFz
Qmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAg
IHJldHVybiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
ICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKTsKIH0K
IAotfQogCi0jZW5kaWYKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5oCmluZGV4IDQ2OGE0NGJhYTg2ZWU1MjYxOWQyNTVmOTM5NDNhOTc1NWJh
YzlmYWIuLmY5OWMzZDliOWJkMjgyNTg2NWZkZjdlYTgwYjJhZjAwZTM0YjUyZGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMTAsIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw1MyArMjUsMTMgQEAKIAogI3ByYWdtYSBvbmNl
CiAKKyNpZiBVU0UoQ0cpCisKICNpbmNsdWRlICJDb2xvclNwYWNlQ0cuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DR0FmZmluZVRyYW5z
Zm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZik7Ci0KLWNsYXNzIENHQ29udGV4dFN0
YXRlU2F2ZXIgewotcHVibGljOgotICAgIENHQ29udGV4dFN0YXRlU2F2ZXIoQ0dDb250ZXh0UmVm
IGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQotICAgICAgICA6IG1fY29udGV4
dChjb250ZXh0KQotICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCi0g
ICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAgIENHQ29udGV4
dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgfkNHQ29udGV4dFN0YXRl
U2F2ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUpCi0gICAgICAgICAg
ICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgc2F2ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJlc3RvcmUpOwotICAg
ICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJl
c3RvcmUgPSB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3Rh
dGUobV9jb250ZXh0KTsKLSAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZhbHNlOwotICAgIH0K
LSAgICAKLSAgICBib29sIGRpZFNhdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
c2F2ZUFuZFJlc3RvcmU7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBDR0NvbnRleHRSZWYg
bV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KIGNsYXNzIFdFQkNP
UkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiBw
dWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmKTsKQEAgLTg1LDY5ICs0
NSw0OCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5h
bDsKICAgICBDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAg
ICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICB2b2lk
IHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7CisgICAgYm9vbCBpc0NBTGF5ZXJDb250
ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOwotICAgIHZvaWQgZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQo
Ym9vbCkgZmluYWw7CiAKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUo
KSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAgICAgdm9pZCBh
cHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBm
aW5hbDsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIGZp
bGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNp
dHkpIGZpbmFsOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAogICAg
IHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwogCi0gICAg
dXNpbmcgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0KLSAgICB2b2lkIHNldElzQ0FMYXll
ckNvbnRleHQoYm9vbCkgZmluYWw7Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwot
ICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICB2b2lkIGVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwot
Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLQogICAgIHZvaWQgY2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOworICAg
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmlu
YWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2
b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVK
b2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFs
OworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZp
bmFsOwogCi0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0g
ICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2
b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2Fs
ZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcm90
YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBmaW5hbDsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIHZvaWQgY29uY2F0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwog
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJs
eUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7
CiAKLSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBS
b3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYp
IGZpbmFsOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwpAQCAt
MTU2LDE4ICs5NSwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNl
bmRpZgogCi0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1h
Z2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKIAorICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwogICAgIHZv
aWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJM
JiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9y
UmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZv
aWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQ
b2ludCYpIGZpbmFsOworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwogCiAgICAgYm9v
bCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBk
YXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0
IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBzZXREZXN0aW5hdGlv
bkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZs
b2F0UG9pbnQmKSBmaW5hbDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5Vc2VTaGFkb3dCbHVyKCkg
Y29uc3Q7CiAKQEAgLTE3NSw5ICsxMTcsMTYgQEAgcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7
CiAjZW5kaWYKIAorICAgIENHQ29udGV4dFJlZiBpbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0OworCiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogbV9k
YXRhIHsgbnVsbHB0ciB9OwogfTsKIAotfQorQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFz
ZUNUTShDR0NvbnRleHRSZWYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNpbmNsdWRl
ICJDR0NvbnRleHRTdGF0ZVNhdmVyLmgiCiAKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwCmluZGV4IGU2Y2UyZmI5NzI0N2E2Yjg2YzA5YjFhZDM2MTcwMWMyZWMzZTg2MjUuLmFmMDBh
MDEzMzQ3ZTBjZDg1YTMwYjg4NGViYzc5ZjMyZjFlMjMxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBA
IC0xMjcsNyArMTI3LDcgQEAgYm9vbCBQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNN
YXRjaChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2EKIAogICAgIC8vIE9sZCBh
bmQgbmV3IGNvbnRleHQgc2NhbGluZyBmYWN0b3JzIGhhdmUgdG8gbWF0Y2ggYXMgd2VsbC4KICAg
ICBBZmZpbmVUcmFuc2Zvcm06OkRlY29tcG9zZWRUeXBlIGRlY29tcG9zZWRUcmFuc2Zvcm07Ci0g
ICAgY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmlj
ZVNjYWxlKS5kZWNvbXBvc2UoZGVjb21wb3NlZFRyYW5zZm9ybSk7CisgICAgY29udGV4dC5nZXRD
VE0oKS5kZWNvbXBvc2UoZGVjb21wb3NlZFRyYW5zZm9ybSk7CiAKICAgICBBZmZpbmVUcmFuc2Zv
cm06OkRlY29tcG9zZWRUeXBlIGNhY2hlZERlY29tcG9zZWRUcmFuc2Zvcm07CiAgICAgbV9jYWNo
ZWRUcmFuc2Zvcm0uZGVjb21wb3NlKGNhY2hlZERlY29tcG9zZWRUcmFuc2Zvcm0pOwpAQCAtMjU1
LDcgKzI1NSw3IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5l
ZWRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgdHJhbnNmb3JtQ29udGV4
dEZvclBhaW50aW5nKGJ1ZmZlckNvbnRleHQsIGRzdFJlY3QsIEZsb2F0UmVjdChtX2NhY2hlZElt
YWdlUmVjdC5sb2NhdGlvbigpLCBzcmNSZWN0LnNpemUoKSkpOwogICAgIGRyYXdQREZQYWdlKGJ1
ZmZlckNvbnRleHQpOwogCi0gICAgbV9jYWNoZWRUcmFuc2Zvcm0gPSBjb250ZXh0LmdldENUTShH
cmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIG1fY2Fj
aGVkVHJhbnNmb3JtID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBtX2NhY2hlZERlc3RpbmF0aW9u
UmVjdCA9IGRzdFJlY3Q7CiAgICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0gc3JjUmVjdDsKICAgICAr
K21fY2FjaGluZ0NvdW50Rm9yVGVzdGluZzsKQEAgLTM2Myw2ICszNjMsOCBAQCB2b2lkIFBERkRv
Y3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIAogICAg
IGNvbnRleHQudHJhbnNsYXRlKC1tX2Nyb3BCb3gubG9jYXRpb24oKSk7CiAKKyAgICBjb250ZXh0
LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKICAgICAvLyBDR1BERiBwYWdlcyBhcmUgaW5kZXhlZCBm
cm9tIDEuCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgQ0dDb250ZXh0RHJhd1BERlBhZ2VXaXRo
QW5ub3RhdGlvbnMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dQREZEb2N1bWVudEdldFBh
Z2UobV9kb2N1bWVudC5nZXQoKSwgMSksIG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKaW5kZXggZDY4OWE1MWE4OTEwMmE1MDkwNDU1
OWI0NDIyMzY5ZGUxNDcwMzMzNS4uZmRlZWY2YjM4ZDBjNWI1NTU2NzM3ZWI3ZjQ0YWYyZjJmYzlh
NDQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0
aENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICBHcmFw
aGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgc3Ryb2tlU3R5bGVB
cHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBib29sIGhpdFN1Y2Nlc3MgPSBDR0NvbnRl
eHRQYXRoQ29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9rZSk7CisgICAg
Ym9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoZ3JhcGhpY3NDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwga0NHUGF0aFN0cm9rZSk7CiAgICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIAogICAgIHJldHVybiBoaXRTdWNjZXNzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRHJhd0ds
eXBoc1JlY29yZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGVmYmMxZTQ5
NTQ0MWJlZGU3MzRlOTQ4ZGQyNmQzNzE0NDE2NTUzZTAuLmU5YjdhYzRkN2Y0Y2JmNzQxMjg5Mzli
ZmE4YzA0ZTc2NWEwZGJkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJD
b3JlVGV4dC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwLTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
LTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRHJhd0dseXBoc1JlY29yZGVyLmgiCiAKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgog
I2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZv
bnQuaCIKQEAgLTM1LDQ5ICszNCw0MSBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCiAj
aW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4u
aD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBDR0NvbnRleHREZWxl
Z2F0ZVJlZiBiZWdpbkxheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRl
cmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0ZE
aWN0aW9uYXJ5UmVmLCBDR0NvbnRleHREZWxlZ2F0ZVJlZikKK3N0YXRpYyBDR0NvbnRleHREZWxl
Z2F0ZVJlZiBiZWdpbkxheWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCwgQ0ZEaWN0aW9uYXJ5UmVm
LCBDR0NvbnRleHREZWxlZ2F0ZVJlZikKIHsKICAgICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29y
ZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRl
R2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29yZEJlZ2luTGF5ZXIocnN0YXRl
LCBnc3RhdGUsIHJlY3QpOworICAgIHJlY29yZGVyLnJlY29yZEJlZ2luTGF5ZXIoZ3N0YXRlKTsK
ICAgICByZXR1cm4gZGVsZWdhdGU7CiB9CiAKLXN0YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJlZiBl
bmRMYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSkKK3N0YXRpYyBDR0NvbnRleHREZWxlZ2F0ZVJl
ZiBlbmRMYXllcihDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0
ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVj
b3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdh
dGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRW5kTGF5ZXIocnN0YXRl
LCBnc3RhdGUpOworICAgIHJlY29yZGVyLnJlY29yZEVuZExheWVyKGdzdGF0ZSk7CiAgICAgcmV0
dXJuIGRlbGVnYXRlOwogfQogCi1zdGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENHQ29udGV4dERl
bGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVS
ZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSogdG0sIGNvbnN0IENHR2x5cGggZ2x5
cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKK3N0YXRpYyBD
R0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVy
aW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0q
LCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXpl
X3QgY291bnQpCiB7Ci0gICAgaWYgKENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSA+IDApIHsKLSAg
ICAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5
cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICAg
ICAgcmVjb3JkZXIucmVjb3JkRHJhd0dseXBocyhyc3RhdGUsIGdzdGF0ZSwgdG0sIGdseXBocywg
cG9zaXRpb25zLCBjb3VudCk7Ci0gICAgfQorICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3Jk
ZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVH
ZXRJbmZvKGRlbGVnYXRlKSk7CisgICAgcmVjb3JkZXIucmVjb3JkRHJhd0dseXBocyhnc3RhdGUs
IGdseXBocywgcG9zaXRpb25zLCBjb3VudCk7CiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsK
IH0KIAotc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVn
YXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1Jl
Y3QgcmVjdCwgQ0dJbWFnZVJlZiBpbWFnZSkKK3N0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShDR0Nv
bnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVS
ZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFnZVJlZiBpbWFnZSkKIHsKICAgICBEcmF3R2x5
cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNvcmRlcio+
KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29yZGVyLnJlY29y
ZERyYXdJbWFnZShyc3RhdGUsIGdzdGF0ZSwgcmVjdCwgaW1hZ2UpOworICAgIHJlY29yZGVyLnJl
Y29yZERyYXdJbWFnZShnc3RhdGUsIHJlY3QsIGltYWdlKTsKICAgICByZXR1cm4ga0NHRXJyb3JT
dWNjZXNzOwogfQogCi1VbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCitzdGF0aWMgVW5pcXVlUmVmPEdyYXBoaWNzQ29u
dGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIp
CiB7Ci0gICAgYXV0byBjb250ZXh0RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRl
Q3JlYXRlKHRoaXMpKTsKKyAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250
ZXh0RGVsZWdhdGVDcmVhdGUoJnJlY29yZGVyKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRD
YWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlQmVnaW5MYXllciwgcmVpbnRlcnByZXRf
Y2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmYmVnaW5MYXllcikpOwogICAgIENHQ29u
dGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZUVuZExheWVy
LCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZlbmRMYXllcikp
OwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgp
LCBkZURyYXdHbHlwaHMsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFj
az4oJldlYkNvcmU6OmRyYXdHbHlwaHMpKTsKQEAgLTg2LDY3ICs3NywxNSBAQCBVbmlxdWVSZWY8
R3JhcGhpY3NDb250ZXh0PiBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4
dCgpCiAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0Q0c+KGNvbnRleHQu
Z2V0KCkpOwogfQogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFw
aGljc0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3
R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQgZGVyaXZlRm9udEZyb21Db250ZXh0KQotICAg
IDogbV9vd25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVy
KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVjdERyYXdHbHlw
aHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQgZGVyaXZlRm9u
dEZyb21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQoZGVzdGluYXRpb25Db250
ZXh0KQogICAgICwgbV9kZWNvbnN0cnVjdERyYXdHbHlwaHMoZGVjb25zdHJ1Y3REcmF3R2x5cGhz
KQogICAgICwgbV9kZXJpdmVGb250RnJvbUNvbnRleHQoZGVyaXZlRm9udEZyb21Db250ZXh0KQot
ICAgICwgbV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50ZXJuYWxDb250ZXh0KCkpCisgICAgLCBt
X2ludGVybmFsQ29udGV4dChjcmVhdGVJbnRlcm5hbENvbnRleHQoKnRoaXMpKQogewogfQogCi12
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCi17Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5maWxsQ29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0
YXRlLmZpbGxTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnQ7Ci0gICAg
bV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4
dFN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5m
aWxsU3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0ZS5maWxsUGF0dGVybjsKLQotICAgIG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IGNvbnRleHRTdGF0ZS5zdHJva2VDb2xvcjsK
LSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQgPSBjb250ZXh0U3RhdGUu
c3Ryb2tlR3JhZGllbnQ7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9y
bTsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybiA9IGNvbnRleHRTdGF0
ZS5zdHJva2VQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5hbFN0YXRlLmN0bSA9IG1fb3duZXIuZ2V0
Q1RNKCk7IC8vIEZJWE1FOiBEZWFsIHdpdGggYmFzZSBDVE0uCi0KLSAgICBtX29yaWdpbmFsU3Rh
dGUuc2hhZG93Lm9mZnNldCA9IGNvbnRleHRTdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgbV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5ibHVyID0gY29udGV4dFN0YXRlLnNoYWRvd0JsdXI7Ci0gICAgbV9v
cmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciA9IGNvbnRleHRTdGF0ZS5zaGFkb3dDb2xvcjsKLSAg
ICBtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPSBjb250ZXh0U3RhdGUu
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0KLSAgICBtX2N1cnJlbnRTdGF0ZSA9IG1fb3JpZ2lu
YWxTdGF0ZTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxD
b250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCi17Ci0gICAg
aWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAgICAgICBt
X2ludGVybmFsQ29udGV4dC0+c2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUu
Y29sb3IpOwotICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQp
Ci0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoKm1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxQ
YXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAg
IGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAgICAg
ICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUu
Z3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudCgq
bV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ry
b2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFT
U0VSVChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7Ci0gICAgICAgIGlmICht
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUu
cGF0dGVybik7Ci0gICAgfQotCi0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldENUTShtX29yaWdp
bmFsU3RhdGUuY3RtKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOwotICAg
IG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZz
ZXQsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5j
b2xvciwgY29udGV4dFN0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwotCi0gICAgbV9pbnRlcm5hbENv
bnRleHQtPnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdNb2RlKTsK
LX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29u
c3QgRm9udCYgZm9udCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYgZm9udCwgRm9udFNt
b290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBBU1NFUlQoQ0dBZmZpbmVUcmFuc2Zv
cm1Jc0lkZW50aXR5KENURm9udEdldE1hdHJpeChmb250LnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgp
KSkpOwogCkBAIC0xNTYsMTA0ICs5NSwzOCBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJl
cGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5nTQogICAg
IG1fb3JpZ2luYWxUZXh0TWF0cml4ID0gY29tcHV0ZU92ZXJhbGxUZXh0TWF0cml4KGZvbnQpOwog
ICAgIGlmIChmb250LnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0
aW9uOjpWZXJ0aWNhbCkKICAgICAgICAgbV9vcmlnaW5hbFRleHRNYXRyaXggPSBjb21wdXRlVmVy
dGljYWxUZXh0TWF0cml4KGZvbnQsIG1fb3JpZ2luYWxUZXh0TWF0cml4KTsKLQotICAgIGF1dG8m
IGNvbnRleHRTdGF0ZSA9IG1fb3duZXIuc3RhdGUoKTsKLSAgICBwb3B1bGF0ZUludGVybmFsU3Rh
dGUoY29udGV4dFN0YXRlKTsKLSAgICBwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb250ZXh0U3Rh
dGUpOwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6Y29uY2x1ZGVJbnRlcm5hbENvbnRl
eHQoKQorR3JhcGhpY3NDb250ZXh0U3RhdGUgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50
ZXJuYWxDb250ZXh0KCkKIHsKLSAgICB1cGRhdGVDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0g
ICAgdXBkYXRlRmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IsIG1fb3Jp
Z2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQuZ2V0KCksIG1fb3JpZ2luYWxTdGF0ZS5maWxs
U3R5bGUucGF0dGVybi5nZXQoKSk7Ci0gICAgdXBkYXRlU3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGll
bnQuZ2V0KCksIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuLmdldCgpKTsKLSAg
ICB1cGRhdGVTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxT
dGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciwgbV9vcmlnaW5h
bFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID8gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6
OlllcyA6IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpObyk7CisgICAgYXV0byBvcmlnaW5hbFN0
YXRlID0gbV9kZXN0aW5hdGlvbkNvbnRleHQuc3RhdGUoKTsKKyAgICBtX2ludGVybmFsQ29udGV4
dC0+bWVyZ2VTdGF0ZURpZmZzKG9yaWdpbmFsU3RhdGUpOworICAgIG1faW50ZXJuYWxDb250ZXh0
LT5hcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJldHVybiBvcmlnaW5hbFN0YXRlOwogfQogCi12
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlRmlsbENvbG9yKGNvbnN0IENvbG9yJiBuZXdD
b2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJuKiBuZXdQYXR0ZXJuKQordm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIG9yaWdpbmFsU3RhdGUpCiB7Ci0gICAgLy8gVGhpcyBjaGVjayBsb29r
cyB3cm9uZyBidXQgaXQgYWN0dWFsbHkgaXNuJ3QsIGZvciBvdXIgbGltaXRlZCB1c2UuCi0gICAg
Ly8gQ1Qgd2lsbCBvbmx5IGV2ZXIgc2V0IHRoaXMgdG8gYSBzb2xpZCBjb2xvciwgd2hpY2ggdGhp
cyBpcyB0aGUgY29ycmVjdCBjaGVjayBmb3IuCi0gICAgLy8gSW4gY29uY2x1ZGVJbnRlcm5hbENv
bnRleHQoKSB3ZSBzZXQgaXQgYmFjayB0byB3aGF0IGl0IHdhcyBvcmlnaW5hbGx5LCB3aGljaCB0
aGlzIGNoZWNrIHdvcmtzIGNvcnJlY3RseSBmb3IgdG9vLgotICAgIGlmIChuZXdDb2xvciA9PSBt
X2N1cnJlbnRTdGF0ZS5maWxsU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLmZpbGxDb2xvciA9IG5l
d0NvbG9yOwotICAgIGlmIChuZXdHcmFkaWVudCkKLSAgICAgICAgbmV3U3RhdGUuZmlsbEdyYWRp
ZW50ID0gbmV3R3JhZGllbnQ7Ci0gICAgaWYgKG5ld1BhdHRlcm4pCi0gICAgICAgIG5ld1N0YXRl
LmZpbGxQYXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5l
d1N0YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UgfSk7Ci0gICAg
bV9jdXJyZW50U3RhdGUuZmlsbFN0eWxlLmNvbG9yID0gbmV3Q29sb3I7CisgICAgbV9kZXN0aW5h
dGlvbkNvbnRleHQubWVyZ2VTdGF0ZURpZmZzKG9yaWdpbmFsU3RhdGUpOwogfQogCi12b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIG5ld0NvbG9y
LCBHcmFkaWVudCogbmV3R3JhZGllbnQsIFBhdHRlcm4qIG5ld1BhdHRlcm4pCit2b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6cmVjb3JkQmVnaW5MYXllcihDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7Ci0g
ICAgLy8gVGhpcyBjaGVjayBsb29rcyB3cm9uZyBidXQgaXQgYWN0dWFsbHkgaXNuJ3QsIGZvciBv
dXIgbGltaXRlZCB1c2UuCi0gICAgLy8gQ1Qgd2lsbCBvbmx5IGV2ZXIgc2V0IHRoaXMgdG8gYSBz
b2xpZCBjb2xvciwgd2hpY2ggdGhpcyBpcyB0aGUgY29ycmVjdCBjaGVjayBmb3IuCi0gICAgLy8g
SW4gY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKSB3ZSBzZXQgaXQgYmFjayB0byB3aGF0IGl0IHdh
cyBvcmlnaW5hbGx5LCB3aGljaCB0aGlzIGNoZWNrIHdvcmtzIGNvcnJlY3RseSBmb3IgdG9vLgot
ICAgIGlmIChuZXdDb2xvciA9PSBtX2N1cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3U3RhdGU7Ci0gICAg
bmV3U3RhdGUuc3Ryb2tlQ29sb3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3JhZGllbnQpCi0g
ICAgICAgIG5ld1N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbmV3R3JhZGllbnQ7Ci0gICAgaWYgKG5l
d1BhdHRlcm4pCi0gICAgICAgIG5ld1N0YXRlLnN0cm9rZVBhdHRlcm4gPSBuZXdQYXR0ZXJuOwot
ICAgIG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZUNvbG9yQ2hhbmdlIH0pOwotICAgIG1fY3VycmVudFN0YXRlLnN0cm9rZVN0eWxl
LmNvbG9yID0gbmV3Q29sb3I7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dT
dGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5iZWdpblRyYW5z
cGFyZW5jeUxheWVyKENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSk7CiB9CiAKLXZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjp1cGRhdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0pCit2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIoQ0dHU3RhdGVSZWYgZ3N0YXRlKQog
ewotICAgIGlmIChjdG0gPT0gbV9jdXJyZW50U3RhdGUuY3RtKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX293bmVyLnNldENUTShjdG0pOwotICAgIG1fY3VycmVudFN0YXRlLmN0bSA9IGN0bTsK
KyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkp
OworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAK
LXN0YXRpYyBib29sIHNoYWRvd0lzQ2xlYXJlZChjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNl
dCwgZmxvYXQgc2hhZG93Qmx1cikKLXsKLSAgICByZXR1cm4gc2hhZG93T2Zmc2V0ID09IEZsb2F0
U2l6ZSgpICYmICFzaGFkb3dCbHVyOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBk
YXRlU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVy
LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKQotewotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29uc2lkZXIg
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgaWYgbm9ib2R5IGhhcyBhbnkgc2hhZG93cy4KLSAgICBp
ZiAoc2hhZG93SXNDbGVhcmVkKHNoYWRvd09mZnNldCwgc2hhZG93Qmx1cikgJiYgc2hhZG93SXND
bGVhcmVkKG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fY3VycmVudFN0YXRlLnNoYWRv
dy5ibHVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbmV3
U3RhdGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mgc3RhdGVD
aGFuZ2VGbGFnczsKLQotICAgIGlmIChzaGFkb3dPZmZzZXQgIT0gbV9jdXJyZW50U3RhdGUuc2hh
ZG93Lm9mZnNldCB8fCBzaGFkb3dCbHVyICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5ibHVyIHx8
IHNoYWRvd0NvbG9yICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5jb2xvcikgewotICAgICAgICBu
ZXdTdGF0ZS5zaGFkb3dPZmZzZXQgPSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgIG5ld1N0YXRlLnNo
YWRvd0JsdXIgPSBzaGFkb3dCbHVyOwotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dDb2xvciA9IHNo
YWRvd0NvbG9yOwotICAgICAgICBzdGF0ZUNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93Q2hhbmdlKTsKLSAgICB9Ci0gICAgaWYgKHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zICE9IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpVbnNwZWNpZmllZCAmJiAoc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMgPT0gU2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlllcykgIT0gbV9jdXJy
ZW50U3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgbmV3U3RhdGUuc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMgPSAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPT0gU2hhZG93
c0lnbm9yZVRyYW5zZm9ybXM6Olllcyk7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7Ci0gICAg
fQotICAgIGlmIChzdGF0ZUNoYW5nZUZsYWdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUsIHN0YXRlQ2hhbmdlRmxhZ3MpOwot
Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICBt
X2N1cnJlbnRTdGF0ZS5zaGFkb3cuYmx1ciA9IHNoYWRvd0JsdXI7Ci0gICAgbV9jdXJyZW50U3Rh
dGUuc2hhZG93LmNvbG9yID0gc2hhZG93Q29sb3I7Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93
Lmlnbm9yZVRyYW5zZm9ybXMgPSAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPT0gU2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM6Olllcyk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRh
dGVTaGFkb3coQ0dTdHlsZVJlZiBzdHlsZSkKK3N0YXRpYyB2b2lkIHNldERyb3BTaGFkb3coR3Jh
cGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIENHU3R5bGVSZWYgc3R5bGUpCiB7CiAg
ICAgaWYgKENHU3R5bGVHZXRUeXBlKHN0eWxlKSAhPSBrQ0dTdHlsZVNoYWRvdykgewogICAgICAg
ICAvLyBGSVhNRTogU3VwcG9ydCBtb3JlIGtpbmRzIG9mIENHU3R5bGVzLgotICAgICAgICB1cGRh
dGVTaGFkb3coezAsIDB9LCAwLCBDb2xvcigpLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6VW5z
cGVjaWZpZWQpOworICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuY2xlYXJTaGFkb3coKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjYxLDIwICsxMzQsOSBAQCB2b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUpCiAgICAgYXV0byByYWQg
PSBkZWcycmFkKHNoYWRvd1N0eWxlLmF6aW11dGggLSAxODApOwogICAgIGF1dG8gc2hhZG93T2Zm
c2V0ID0gRmxvYXRTaXplKHN0ZDo6Y29zKHJhZCksIHN0ZDo6c2luKHJhZCkpICogc2hhZG93U3R5
bGUuaGVpZ2h0OwogICAgIGF1dG8gc2hhZG93Q29sb3IgPSBDR1N0eWxlR2V0Q29sb3Ioc3R5bGUp
OwotICAgIHVwZGF0ZVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1N0eWxlLnJhZGl1cywgQ29s
b3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzaGFkb3dDb2xvciksIFNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zOjpZZXMpOwotfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3Jk
QmVnaW5MYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVj
dCkKLXsKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIGF1dG8g
YWxwaGEgPSBDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSk7Ci0gICAgbV9vd25lci5iZWdpblRyYW5z
cGFyZW5jeUxheWVyKGFscGhhKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZEVuZExheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSkKLXsKLSAg
ICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIG1fb3duZXIuZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0RHJvcFNoYWRvdyh7
IHNoYWRvd09mZnNldCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNoYWRvd1N0eWxlLnJhZGl1cyksIENv
bG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc2hhZG93Q29sb3IpIH0pOworICAgIGRl
c3RpbmF0aW9uQ29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKIH0KIAog
c3RhdGljIFZlY3RvcjxDR1NpemU+IGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMoY29uc3Qg
Q0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50LCBjb25zdCBDR0FmZmluZVRyYW5zZm9y
bSYgdGV4dE1hdHJpeCkKQEAgLTI5MCwxOCArMTUyLDE4IEBAIHN0YXRpYyBWZWN0b3I8Q0dTaXpl
PiBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10s
IHNpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJl
Y29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBj
b25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENH
UG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCkKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpyZWNvcmREcmF3R2x5cGhzKENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dHbHlwaCBnbHlw
aHNbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQogewogICAgIEFT
U0VSVF9JTVBMSUVTKG1fZGVyaXZlRm9udEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29u
dGV4dDo6Tm8sIG1fb3JpZ2luYWxGb250KTsKIAotICAgIGlmICghY291bnQpCisgICAgaWYgKCFj
b3VudCB8fCBDR0dTdGF0ZUdldEFscGhhKGdzdGF0ZSkgPD0gMCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgQ0dGb250UmVmIHVzZWRGb250ID0gQ0dHU3RhdGVHZXRGb250KGdzdGF0ZSk7CiAgICAg
aWYgKG1fZGVyaXZlRm9udEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29udGV4dDo6Tm8g
JiYgdXNlZEZvbnQgIT0gYWRvcHRDRihDVEZvbnRDb3B5R3JhcGhpY3NGb250KG1fb3JpZ2luYWxG
b250LT5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgbnVsbHB0cikpLmdldCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB1cGRhdGVDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIG1f
ZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CiAKICAg
ICAvLyBXZSB3YW50IHRoZSByZXBsYXllcidzIENUTSBhbmQgdGV4dCBtYXRyaXggdG8gbWF0Y2gg
dGhlIGN1cnJlbnQgQ1RNIGFuZCB0ZXh0IG1hdHJpeC4KICAgICAvLyBUaGUgY3VycmVudCB0ZXh0
IG1hdHJpeCBpcyBhIGNvbmNhdGVuYXRpb24gb2Ygd2hhdGV2ZXIgV2ViS2l0IHNldHMgaXQgdG8g
YW5kIHdoYXRldmVyCkBAIC0zMjQsMTMgKzE4NiwxNiBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3Rh
dAogICAgICAgICBpbnZlcnNlQ1RNRml4dXAgPSBpbnZlcnNlLnZhbHVlKCk7CiAgICAgZWxzZQog
ICAgICAgICBjdG1GaXh1cCA9IEFmZmluZVRyYW5zZm9ybSgpOwotICAgIG1fb3duZXIuY29uY2F0
Q1RNKGN0bUZpeHVwKTsKKworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmNvbmNhdENUTShjdG1G
aXh1cCk7CiAKICAgICBhdXRvIGZpbGxDb2xvciA9IENHR1N0YXRlR2V0RmlsbENvbG9yKGdzdGF0
ZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpjcmVhdGVB
bmRQcmVzZXJ2ZUNvbG9yU3BhY2UoZmlsbENvbG9yKSk7CisKICAgICBhdXRvIHN0cm9rZUNvbG9y
ID0gQ0dHU3RhdGVHZXRTdHJva2VDb2xvcihnc3RhdGUpOwotICAgIHVwZGF0ZUZpbGxDb2xvcihD
b2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikpOwotICAgIHVwZGF0
ZVN0cm9rZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uoc3Ryb2tlQ29s
b3IpKTsKLSAgICB1cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKyAgICBt
X2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2Vy
dmVDb2xvclNwYWNlKHN0cm9rZUNvbG9yKSk7CisKKyAgICBzZXREcm9wU2hhZG93KG1fZGVzdGlu
YXRpb25Db250ZXh0LCBDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOwogCiAgICAgYXV0byBmb250
U2l6ZSA9IENHR1N0YXRlR2V0Rm9udFNpemUoZ3N0YXRlKTsKICAgICBSZWYgZm9udCA9IG1fZGVy
aXZlRm9udEZyb21Db250ZXh0ID09IERlcml2ZUZvbnRGcm9tQ29udGV4dDo6Tm8gPyAqbV9vcmln
aW5hbEZvbnQgOiBGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShhZG9wdENGKENURm9udENy
ZWF0ZVdpdGhHcmFwaGljc0ZvbnQodXNlZEZvbnQsIGZvbnRTaXplLCBudWxscHRyLCBudWxscHRy
KSksIGZvbnRTaXplKSk7CkBAIC0zNDUsMzAgKzIxMCwzOCBAQCB2b2lkIERyYXdHbHlwaHNSZWNv
cmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBn
c3RhdAogICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIzMjkxNz4gKGBE
cmF3R2x5cGhzUmVjb3JkZXJgIHNob3VsZCBiZSBhYmxlIHRvIHJlY29yZCtyZXBsYXkgdmVydGlj
YWwgdGV4dCkKICAgICB9CiAKLSAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9u
dCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9ucywgY291bnQs
IHRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIHRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25z
WzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKLQotICAgIG1fb3duZXIuY29uY2F0Q1RNKGludmVyc2VD
VE1GaXh1cCk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9u
dChmb250LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBj
b3VudCwgdGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgdGV4dE1hdHJpeC5tYXBQb2ludChwb3Np
dGlvbnNbMF0pLCBtX3Ntb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmNv
bmNhdENUTShpbnZlcnNlQ1RNRml4dXApOwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6
cmVjb3JkRHJhd0ltYWdlKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwg
Q0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgY2dJbWFnZSkKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpyZWNvcmREcmF3SW1hZ2UoQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QgcmVjdCwgQ0dJbWFn
ZVJlZiBjZ0ltYWdlKQogewotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7
Ci0gICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CisgICAgbV9kZXN0
aW5hdGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBzZXRE
cm9wU2hhZG93KG1fZGVzdGluYXRpb25Db250ZXh0LCBDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkp
OwogCiAgICAgLy8gQ29yZSBHcmFwaGljcyBhc3N1bWVzIGEgInkgdXAiIGNvb3JkaW5hdGUgc3lz
dGVtLCBidXQgaW4gV2ViS2l0LCB3ZSB1c2UgYSAieS1kb3duIiBjb29yZGluYXRlIHN5c3RlbS4K
ICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgV2ViS2l0J3MgZHJhd2luZyByb3V0aW5lcyAoR3JhcGhp
Y3NDb250ZXh0OjpkcmF3SW1hZ2UoKSkgaW50ZW50aW9uYWxseSBkcmF3IGltYWdlcyB1cHNpZGUt
ZG93biBmcm9tIENvcmUgR3JhcGhpY3MncyBwb2ludCBvZiB2aWV3LgogICAgIC8vIChUaGVyZSdz
IGEgeS1mbGlwIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2UoKS4pCiAgICAgLy8gVGhlIHJlY3QgaGFzIHRoZSByaWdodCBib3VuZHMsIGJ1dCB3
ZSBuZWVkIHRvIHRyYW5zZm9ybSBmcm9tIENHJ3MgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gV2ViS2l0
J3MgYnkgcGVyZm9ybWluZyBvdXIgb3duIHktZmxpcCBzbyBpbWFnZXMgYXJlIGRyYXduIHRoZSBy
aWdodC1zaWRlLXVwLgogICAgIC8vIFdlIGRvIHRoaXMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4g
dGhlIHR3byBBUElzLCB3aGljaCBpcyByaWdodCBoZXJlLgotICAgIG1fb3duZXIudHJhbnNsYXRl
KDAsIHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSk7Ci0gICAgbV9vd25lci5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLQorICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnRyYW5z
bGF0ZSgwLCByZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpOworICAgIG1fZGVz
dGluYXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIAogICAgIGF1dG8g
aW1hZ2UgPSBOYXRpdmVJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAgIG1fb3duZXIuZHJhd05h
dGl2ZUltYWdlKCppbWFnZSwgaW1hZ2UtPnNpemUoKSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9hdFJl
Y3Qge3sgfSwgaW1hZ2UtPnNpemUoKX0sIEltYWdlUGFpbnRpbmdPcHRpb25zIHsgSW1hZ2VPcmll
bnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKLQorICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRy
YXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5zaXplKCksIEZsb2F0UmVjdChyZWN0KSwgRmxv
YXRSZWN0IHsgeyB9LCBpbWFnZS0+c2l6ZSgpIH0sIEltYWdlUGFpbnRpbmdPcHRpb25zIHsgSW1h
Z2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKKyAgICAKICAgICAvLyBVbmRvIHRoZSBh
Ym92ZSB5LWZsaXAgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4KLSAgICBtX293bmVyLnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOwotICAgIG1fb3duZXIudHJhbnNsYXRlKDAsIC0ocmVjdC5zaXplLmhl
aWdodCArIDIgKiByZWN0Lm9yaWdpbi55KSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2Nh
bGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRl
KDAsIC0ocmVjdC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KSk7Cit9CisKK3ZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAgc2V0SW50ZXJuYWxGb250
KGZvbnQsIHNtb290aGluZ01vZGUpOworICAgIAorICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9IHBy
ZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKKyAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2lu
dGVybmFsQ29udGV4dCwgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBv
aW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KG9yaWdp
bmFsU3RhdGUpOwogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQpAQCAt
Mzc5LDI1ICsyNTIsMTkgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdPVFNWR1J1bihj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKgogICAgICAgICBhdXRvIGJv
dW5kcyA9IGZvbnQuYm91bmRzRm9yR2x5cGgoZ2x5cGhzW2ldKTsKIAogICAgICAgICAvLyBDcmVh
dGUgYSBsb2NhbCBJbWFnZUJ1ZmZlciBiZWNhdXNlIGRlY29kaW5nIHRoZSBTVkcgZm9udHMgaGFz
IHRvIGhhcHBlbiBpbiBXZWJQcm9jZXNzLgotICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IG1fb3duZXIuY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGJvdW5kcywgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIFJlbmRlcmluZ01ldGhvZDo6TG9jYWwpKSB7CisgICAgICAgIGlmIChh
dXRvIGltYWdlQnVmZmVyID0gbV9kZXN0aW5hdGlvbkNvbnRleHQuY3JlYXRlQWxpZ25lZEltYWdl
QnVmZmVyKGJvdW5kcywgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFJlbmRlcmluZ01l
dGhvZDo6TG9jYWwpKSB7CisgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmFwcGx5
U3RhdGVDaGFuZ2VzKCk7CiAgICAgICAgICAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpLCBmb250LCBnbHlwaHMgKyBpLCBhZHZhbmNlcyArIGksIDEsIEZs
b2F0UG9pbnQoKSwgc21vb3RoaW5nTW9kZSk7CiAKICAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0
aW5hdGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcyk7CiAgICAgICAgICAgICBkZXN0
aW5hdGlvblJlY3QubW92ZUJ5KHBlblBvc2l0aW9uKTsKLSAgICAgICAgICAgIG1fb3duZXIuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICAgICAgICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRlc3Rp
bmF0aW9uUmVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBwZW5Qb3NpdGlvbi5tb3ZlKHNpemUo
YWR2YW5jZXNbaV0pKTsKICAgICB9CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3
Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290
aGluZ01vZGUpCi17Ci0gICAgcHJlcGFyZUludGVybmFsQ29udGV4dChmb250LCBzbW9vdGhpbmdN
b2RlKTsKLSAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhtX2ludGVybmFsQ29udGV4dCwgZm9u
dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2Rl
KTsKLSAgICBjb25jbHVkZUludGVybmFsQ29udGV4dCgpOwotfQotCiB2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6ZHJhd0J5U3BsaXR0aW5nSW50b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGF1
dG8gb3RzdmdHbHlwaHMgPSBmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBocyk7
CkBAIC00NDAsNyArMzA3LDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0
dGluZ0ludG9PVFNWR0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiBmb24KIHZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGlmIChtX2RlY29uc3RydWN0RHJhd0dseXBo
cyA9PSBEZWNvbnN0cnVjdERyYXdHbHlwaHM6Ok5vKSB7Ci0gICAgICAgIG1fb3duZXIuZHJhd0ds
eXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0
UG9pbnQsIHNtb290aGluZ01vZGUpOworICAgICAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3
R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3Rh
cnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ1
MywxNSArMzIwLDE3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3TmF0aXZlVGV4dChD
VEZvbnRSZWYgZm9udCwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lCiB7CiAgICAgQVNTRVJUKG1f
ZGVjb25zdHJ1Y3REcmF3R2x5cGhzID09IERlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIobV9vd25lcik7CisgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihtX2Rlc3RpbmF0aW9uQ29udGV4dCk7CiAKLSAgICBt
X293bmVyLnRyYW5zbGF0ZShsaW5lUmVjdC5vcmlnaW4ueCwgbGluZVJlY3Qub3JpZ2luLnkgKyBs
aW5lUmVjdC5zaXplLmhlaWdodCk7Ci0gICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEp
KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUobGluZVJlY3Qub3JpZ2luLngs
IGxpbmVSZWN0Lm9yaWdpbi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogCi0gICAgcHJlcGFyZUludGVy
bmFsQ29udGV4dChGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YShmb250LCBmb250U2l6ZSkp
LCBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZCk7CisgICAgc2V0SW50ZXJu
YWxGb250KEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGZvbnQsIGZvbnRTaXplKSksIEZv
bnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKKyAgICAKKyAgICBhdXRvIG9y
aWdpbmFsU3RhdGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U2V0
VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgMCwgMCk7
CiAgICAgQ1RMaW5lRHJhdyhsaW5lLCBtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCkpOwotICAgIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgcmVzdG9yZURlc3RpbmF0
aW9uQ29udGV4dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dENhc2NhZGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAppbmRleCA1MTFlMDliOTZjZWYwMzI1MDkw
ZTIzYWY5MTRhZTM1ZjJhYjhlZDJlLi5lNTM0Y2M1NWFmMjZiN2ZiODI4MGU2M2I3ZGMyNWEzZDRh
NDE2Mzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcApAQCAtMTUyLDI1ICsx
NTIsMjcgQEAgc3RhdGljIHZvaWQgZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25z
KFZlY3RvcjxDR1BvaW50LCAyNTY+JiBwb3NpdGlvbnMKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lk
IHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZv
bnQmIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNv
bnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRleHRNYXRyaXgpCitzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5z
aWduZWQgY291bnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4dE1hdHJpeCkKIHsKICAgICBp
ZiAoIWNvdW50KQogICAgICAgICByZXR1cm47CiAKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOworCiAgICAgVmVjdG9yPENHUG9p
bnQsIDI1Nj4gcG9zaXRpb25zKGNvdW50KTsKICAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewotICAgICAgICBTY29wZWRUZXh0
TWF0cml4IHNhdmVkTWF0cml4KGNvbXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9udCwgdGV4dE1h
dHJpeCksIGNvbnRleHQpOworICAgICAgICBTY29wZWRUZXh0TWF0cml4IHNhdmVkTWF0cml4KGNv
bXB1dGVWZXJ0aWNhbFRleHRNYXRyaXgoZm9udCwgdGV4dE1hdHJpeCksIGNnQ29udGV4dCk7CiAK
ICAgICAgICAgVmVjdG9yPENHU2l6ZSwgMjU2PiB0cmFuc2xhdGlvbnMoY291bnQpOwogICAgICAg
ICBDVEZvbnRHZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhwbGF0Zm9ybURhdGEuY3RG
b250KCksIGdseXBocywgdHJhbnNsYXRpb25zLmRhdGEoKSwgY291bnQpOwogCiAgICAgICAgIGF1
dG8gYXNjZW50RGVsdGEgPSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBo
aWNCYXNlbGluZSkgLSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKTsKLSAgICAgICAg
ZmlsbFZlY3RvcldpdGhWZXJ0aWNhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwg
dHJhbnNsYXRpb25zLmRhdGEoKSwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCwgYXNjZW50RGVsdGEp
OwotICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhz
LCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7CisgICAgICAgIGZpbGxWZWN0b3JX
aXRoVmVydGljYWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNnQ29udGV4dCwgdHJhbnNsYXRp
b25zLmRhdGEoKSwgYWR2YW5jZXMsIGNvdW50LCBwb2ludCwgYXNjZW50RGVsdGEpOworICAgICAg
ICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlv
bnMuZGF0YSgpLCBjb3VudCwgY2dDb250ZXh0KTsKICAgICB9IGVsc2UgewotICAgICAgICBmaWxs
VmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIGFk
dmFuY2VzLCBjb3VudCwgcG9pbnQpOwotICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3Jt
RGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7
CisgICAgICAgIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9u
cywgY2dDb250ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKKyAgICAgICAgQ1RGb250RHJh
d0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwg
Y291bnQsIGNnQ29udGV4dCk7CiAgICAgfQogfQogCkBAIC0yNDIsMTAgKzI0NCw3IEBAIHZvaWQg
Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
b250JiBmb250LCBjb25zdCBHCiAgICAgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShjb250ZXh0KTsK
ICAgICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkp
OwogCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwot
ICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGNvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNl
dCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgIGF1dG8gZHJvcFNoYWRvdyA9IGNvbnRl
eHQuZHJvcFNoYWRvdygpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRDVE0gPSBjb250
ZXh0LmdldENUTSgpOwogICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRo
ZXRpY0JvbGRPZmZzZXQoKTsKQEAgLTI1OCwyOSArMjU3LDI5IEBAIHZvaWQgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBj
b25zdCBHCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBj
b250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFk
b3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9y
Qml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGNv
bnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRleHQu
aXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250
ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBkcm9wU2hh
ZG93LmNvbG9yLmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRvdy5ibHVyUmFkaXVzICYmICFwbGF0Zm9y
bURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkp
ICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmIChoYXNTaW1wbGVT
aGFkb3cpIHsKICAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3Rl
YWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50
aWFsaWFzaW5nLgogICAgICAgICBjb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9y
IGZpbGxDb2xvciA9IGNvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0Zp
bGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xv
ci5hbHBoYUFzRmxvYXQoKSk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IGRyb3BT
aGFkb3cuY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNG
bG9hdCgpKTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsK
LSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lk
dGgoKTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBkcm9wU2hhZG93
Lm9mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFu
c2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0
LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50
LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKCkgPyAtMSA6IDEpOwotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0
UG9pbnQoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgICAgICBmbG9hdCBzaGFkb3dU
ZXh0WSA9IHBvaW50LnkoKSArIGRyb3BTaGFkb3cub2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQu
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisgICAgICAgIHNob3dHbHlwaHNX
aXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBj
b250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogICAgICAg
ICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRv
d1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRl
eHRNYXRyaXgpOworICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50
KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250LCBj
b250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOwogICAgIH0KIAotICAgIHNob3dHbHlw
aHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywg
bnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50
LCBmb250LCBjb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgp
OwogCiAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIHNob3dHbHlwaHNXaXRo
QWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2lu
dC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4
dE1hdHJpeCk7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2lu
dC54KCkgKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBjb250ZXh0LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOwogCiAgICAgaWYgKGhhc1Np
bXBsZVNoYWRvdykKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dCbHVyLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyhkcm9w
U2hhZG93KTsKIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGlmIChzaG91bGRTbW9v
dGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmNwcAppbmRleCAyZTJmNGY0ZjJjYjU1ZDM2NWU1YWUzOTkzMjVkMDVmMmMxNzM2MWZk
Li5jY2Y0MGNlYTYyYjE2NzQzNjZkNzQ4NDE2MmIxYmM0ZTkzNzcwNzU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdC5jcHAKQEAgLTkwLDEwICs5MCw3IEBAIGJvb2wgRGlzcGxheUxpc3Q6OnNob3Vs
ZER1bXBGb3JGbGFncyhBc1RleHRGbGFncyBmbGFncywgSXRlbUhhbmRsZSBpdGVtKQogICAgICAg
ICBpZiAoIShmbGFncyAmIEFzVGV4dEZsYWc6OkluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zKSkg
ewogICAgICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJdGVtID0gaXRlbS5nZXQ8U2V0U3RhdGU+
KCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIG5vdywgb25seSBkcm9wIHRoZSBpdGVtIGlm
IHRoZSBvbmx5IHN0YXRlLWNoYW5nZSBmbGFncyBhcmUgcGxhdGZvcm0tc3BlY2lmaWMuCi0gICAg
ICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5z
dGF0ZUNoYW5nZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKKyAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0u
c3RhdGUoKS5jaGFuZ2VzKCkgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTIwMiwxNiArMTk5LDYgQEAgdm9pZCBEaXNwbGF5
TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTYXZl
PihpdGVtLmdldDxTYXZlPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAg
ICByZXR1cm4gYXBwZW5kPFJlc3RvcmU+KGl0ZW0uZ2V0PFJlc3RvcmU+KCkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxUcmFuc2xhdGU+KGl0
ZW0uZ2V0PFRyYW5zbGF0ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAg
ICByZXR1cm4gYXBwZW5kPFJvdGF0ZT4oaXRlbS5nZXQ8Um90YXRlPigpKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTY2FsZT4oaXRlbS5nZXQ8U2Nh
bGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1
cm4gYXBwZW5kPENvbmNhdGVuYXRlQ1RNPihpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldENUTT4o
aXRlbS5nZXQ8U2V0Q1RNPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29s
b3I6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtLmdldDxT
ZXRJbmxpbmVGaWxsQ29sb3I+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9r
ZUNvbG9yOgpAQCAtMjIwLDE2ICsyMDcsNiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRl
bUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4o
aXRlbS5nZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dGF0ZToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdGF0ZT4oaXRlbS5nZXQ8U2V0U3RhdGU+
KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJldHVybiBhcHBl
bmQ8U2V0TGluZUNhcD4oaXRlbS5nZXQ8U2V0TGluZUNhcD4oKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZURhc2g+KGl0ZW0u
Z2V0PFNldExpbmVEYXNoPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAg
ICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lSm9pbj4oaXRlbS5nZXQ8U2V0TGluZUpvaW4+KCkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBhcHBl
bmQ8U2V0TWl0ZXJMaW1pdD4oaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8Q2xlYXJTaGFkb3c+
KGl0ZW0uZ2V0PENsZWFyU2hhZG93PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAg
ICAgICByZXR1cm4gYXBwZW5kPENsaXA+KGl0ZW0uZ2V0PENsaXA+KCkpOwogICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBPdXQ6CkBAIC0yNzQsOCArMjUxLDYgQEAgdm9pZCBEaXNwbGF5TGlzdDo6YXBw
ZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhD
b2xvcj4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0
aEdyYWRpZW50PihpdGVtLmdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxD
b21wb3NpdGVkUmVjdD4oaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJv
dW5kZWRSZWN0PihpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCkpOwogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDBjMjUyMjY0YWY0MTY2NTYyMTc1MTYwNDEw
NDJhOGJkZDNiZmFiYjUuLmRlZmNlODRlZjM1ODdiZWEwNmQyMDdkYjViODAyYWE3YzgyNTY1MGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAK
QEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlM
aXN0IHsKIAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKLSAgICA6IG1f
Y29udGV4dChtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3Qo
eyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0pCisgICAgOiBtX2NvbnRleHQobV9kaXNwbGF5
TGlzdCwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQogewogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCmluZGV4IDQ1Nzc1NTE4
OWJkYWRkNzE5ZDI0NWE0ZTZkMmM4MWJkZGIxZjdkZjMuLjBkYjE1MDM5NjA0MDMyZjMzMDNmYmNi
NjUyMWU1M2U0ZTM0ZjkxOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuY3BwCkBAIC01MiwyMSArNTIsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAg
ICBnZXQ8UmVzdG9yZT4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgZ2V0PFRyYW5zbGF0ZT4oKS5hcHBseShj
b250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAg
ICAgICAgZ2V0PFJvdGF0ZT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBnZXQ8U2NhbGU+KCkuYXBwbHkoY29udGV4
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToK
LSAgICAgICAgZ2V0PENvbmNhdGVuYXRlQ1RNPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBnZXQ8U2V0Q1RNPigp
LmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOgogICAgICAgICBnZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpLmFwcGx5
KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CkBAIC03OSwyMSArNjQsNiBAQCB2b2lkIEl0ZW1I
YW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRTdGF0ZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBnZXQ8U2V0TGluZUNh
cD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVEYXNoOgotICAgICAgICBnZXQ8U2V0TGluZURhc2g+KCkuYXBwbHkoY29udGV4dCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAg
ICAgZ2V0PFNldExpbmVKb2luPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgZ2V0PFNldE1pdGVyTGlt
aXQ+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDbGVhclNoYWRvdzoKLSAgICAgICAgZ2V0PENsZWFyU2hhZG93PigpLmFwcGx5KGNvbnRleHQp
OwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgZ2V0
PENsaXA+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2MCw5ICsxMzAs
NiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAgZ2V0PEZpbGxS
ZWN0V2l0aEdyYWRpZW50PigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBnZXQ8RmlsbENvbXBv
c2l0ZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0Pigp
LmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47CkBAIC0yNzAsOSArMjM3LDYgQEAgdm9p
ZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAg
ICAgICAgZ2V0PERyYXdQYXRoPigpLn5EcmF3UGF0aCgpOwogICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBnZXQ8RmlsbENvbXBv
c2l0ZWRSZWN0PigpLn5GaWxsQ29tcG9zaXRlZFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAgICBnZXQ8RmlsbFBhdGg+KCkufkZpbGxQ
YXRoKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4OCw5ICsyNTIsNiBAQCB2b2lkIEl0ZW1IYW5k
bGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAg
ICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5+RmlsbFJvdW5kZWRSZWN0KCk7CiAgICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0PFNldExp
bmVEYXNoPigpLn5TZXRMaW5lRGFzaCgpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVt
VHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIGdldDxTZXRTdGF0ZT4oKS5+U2V0U3RhdGUoKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzE0LDkgKzI3NSw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJv
eSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclJlY3Q+Ojp2YWx1ZSk7CiAgICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJTaGFkb3c+Ojp2
YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwPjo6dmFs
dWUpOwogICAgICAgICByZXR1cm47CkBAIC0zMjYsOSArMjg0LDYgQEAgdm9pZCBJdGVtSGFuZGxl
OjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xpcFRvSW1h
Z2VCdWZmZXI+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
b25jYXRlbmF0ZUNUTToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8Q29uY2F0ZW5hdGVDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgogICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC0zODcsMzMgKzM0MiwxNSBA
QCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJl
c3RvcmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PFJvdGF0ZT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNh
dmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PFNhdmU+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2Fs
ZToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
U2NhbGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRD
VE06Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PFNldENUTT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZUZpbGxDb2xvcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8U2V0SW5saW5lRmlsbENvbG9yPjo6dmFsdWUpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CiAgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZVN0cm9r
ZUNvbG9yPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8U2V0TGluZUNhcD46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxTZXRMaW5lSm9pbj46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldE1pdGVyTGltaXQ+Ojp2YWx1ZSk7Ci0g
ICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CiAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldFN0
cm9rZVRoaWNrbmVzcz46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDM3LDkgKzM3NCw2
IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
TGluZToKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8U3Ryb2tlTGluZT46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5
cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8VHJhbnNsYXRlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgfQog
fQogCkBAIC01MDEsOCArNDM1LDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlw
ZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJu
IGNvcHlJbnRvPERyYXdQYXR0ZXJuPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3UGF0aD4oaXRlbU9m
ZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbU9mZnNldCwgKnRo
aXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAgICByZXR1cm4gY29weUlu
dG88RmlsbFBhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhDb2xvcjoKQEAgLTUxMyw4ICs0NDUsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVD
b3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAg
ICAgICByZXR1cm4gY29weUludG88RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW1PZmZzZXQs
ICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJl
dHVybiBjb3B5SW50bzxGaWxsUm91bmRlZFJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExp
bmVEYXNoPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRTdGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CkBAIC01MzEsMTYgKzQ2MSwxMiBAQCBib29s
IEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3Rp
bmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88QmVnaW5UcmFuc3BhcmVuY3lM
YXllcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoK
ICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsZWFyUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gY29weUludG88
Q2xlYXJTaGFkb3c+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
OgogICAgICAgICByZXR1cm4gY29weUludG88Q2xpcD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwT3V0
PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZm
ZXI6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGlwVG9JbWFnZUJ1ZmZlcj4oaXRlbU9mZnNl
dCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICBy
ZXR1cm4gY29weUludG88Q29uY2F0ZW5hdGVDVE0+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgogICAgICAgICByZXR1cm4g
Y29weUludG88RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbU9mZnNldCwgKnRoaXMpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgpAQCAtNTczLDI0ICs0OTksMTIgQEAgYm9v
bCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0
aW5hdGlvbikgY29uc3QKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAg
ICAgIHJldHVybiBjb3B5SW50bzxSZXN0b3JlPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gY29weUludG88Um90YXRlPihpdGVt
T2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKICAgICAgICAgcmV0dXJu
IGNvcHlJbnRvPFNhdmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
Y2FsZToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNjYWxlPihpdGVtT2Zmc2V0LCAqdGhpcyk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0
Q1RNPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bENvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5saW5lRmlsbENvbG9yPihpdGVt
T2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbU9mZnNl
dCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJldHVy
biBjb3B5SW50bzxTZXRMaW5lQ2FwPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRMaW5lSm9pbj4o
aXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0g
ICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRNaXRlckxpbWl0PihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgICAgICByZXR1cm4g
Y29weUludG88U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKQEAgLTYwNyw4ICs1MjEsNiBAQCBib29sIEl0ZW1I
YW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9u
KSBjb25zdAogICAgICAgICByZXR1cm4gY29weUludG88U3Ryb2tlUmVjdD4oaXRlbU9mZnNldCwg
KnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgICAgIHJldHVybiBj
b3B5SW50bzxTdHJva2VMaW5lPihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gY29weUludG88VHJhbnNsYXRlPihpdGVtT2Zm
c2V0LCAqdGhpcyk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCA1NGVhMWM4NjgyYzA3NDQyZTJlODQxNGI3
MzI4YWEzMjQ4MDI1YTc1Li5iYTBkOTUxYzIyY2Y0OWNlNDE3ZTMzNTUzYjAwZTBhNWI4YWIyMDk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCkBAIC0zOCwxNiAr
MzgsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAg
ICAgICAgIHJldHVybiBzaXplb2YoU2F2ZSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToK
ICAgICAgICAgcmV0dXJuIHNpemVvZihSZXN0b3JlKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFu
c2xhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoVHJhbnNsYXRlKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoUm90YXRlKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihTY2FsZSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoQ29uY2F0ZW5h
dGVDVE0pOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihTZXRDVE0pOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAg
ICAgcmV0dXJuIHNpemVvZihTZXRJbmxpbmVGaWxsQ29sb3IpOwogICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZVN0cm9rZUNvbG9yOgpAQCAtNTYsMTYgKzQ2LDYgQEAgc3RhdGljIHNpemVfdCBz
aXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNl
dFN0cm9rZVRoaWNrbmVzcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAg
IHJldHVybiBzaXplb2YoU2V0U3RhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZUNhcCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZURhc2gpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVK
b2luKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4g
c2l6ZW9mKFNldE1pdGVyTGltaXQpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93Ogot
ICAgICAgICByZXR1cm4gc2l6ZW9mKENsZWFyU2hhZG93KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwOgogICAgICAgICByZXR1cm4gc2l6ZW9mKENsaXApOwogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBPdXQ6CkBAIC0xMTAsOCArOTAsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVz
KEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoRmlsbFJlY3RXaXRoQ29sb3Ip
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICByZXR1
cm4gc2l6ZW9mKEZpbGxSZWN0V2l0aEdyYWRpZW50KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
Q29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoRmlsbENvbXBvc2l0ZWRSZWN0
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHJldHVybiBz
aXplb2YoRmlsbFJvdW5kZWRSZWN0KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZToKQEAgLTE4MiwyOCArMTYwLDE4IEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVt
VHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlw
ZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBh
dGg6Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Rmx1c2hDb250ZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVEYXNoOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgIGNh
c2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgIGNhc2UgSXRlbVR5
cGU6OlRyYW5zbGF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgSXRlbVR5cGU6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgpA
QCAtMjIyLDcgKzE5MCw2IEBAIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0Ogog
ICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToK
ICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsTGlu
ZToKQEAgLTI4OCwxMyArMjU1LDExIEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUp
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
TGluZXNGb3JUZXh0OgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZToKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3U3lz
dGVtSW1hZ2U6CkBAIC0zMDYsMTEgKzI3MSw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBl
IHR5cGUpCiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVy
OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clNoYWRvdzoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBPdXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKICAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcjoKQEAgLTMzMywxNSArMjk2LDkgQEAg
Ym9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWlu
dEZyYW1lRm9yTWVkaWE6CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAg
IGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgotICAgIGNh
c2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0
OgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VFbGxpcHNlOgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpAQCAtMzUx
LDcgKzMwOCw2IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUpCiAjZW5kaWYKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxp
bmU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbVR5cGUuaAppbmRleCBkNjgzYjJhY2Y3ODQ1Zjk5YzNjZDA5NWViOTExZTU0ZjFmOGNl
MTExLi4xNjYwYjk4ZmRhNWVmMjdiM2Y3NWQyMmE1NzlhM2E5YWUzY2M3MGZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAgLTMxLDIwICszMSwxMCBAQCBuYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgewogZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIFNh
dmUsCiAgICAgUmVzdG9yZSwKLSAgICBUcmFuc2xhdGUsCi0gICAgUm90YXRlLAotICAgIFNjYWxl
LAotICAgIENvbmNhdGVuYXRlQ1RNLAotICAgIFNldENUTSwKICAgICBTZXRJbmxpbmVGaWxsQ29s
b3IsCiAgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgU2V0U3Ryb2tlVGhpY2tuZXNzLAog
ICAgIFNldFN0YXRlLAotICAgIFNldExpbmVDYXAsCi0gICAgU2V0TGluZURhc2gsCi0gICAgU2V0
TGluZUpvaW4sCi0gICAgU2V0TWl0ZXJMaW1pdCwKLSAgICBDbGVhclNoYWRvdywKICAgICBDbGlw
LAogICAgIENsaXBPdXQsCiAgICAgQ2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC02Nyw3ICs1Nyw2IEBA
IGVudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGaWxsUmVjdCwKICAgICBGaWxs
UmVjdFdpdGhDb2xvciwKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudCwKLSAgICBGaWxsQ29tcG9z
aXRlZFJlY3QsCiAgICAgRmlsbFJvdW5kZWRSZWN0LAogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlLAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwCmluZGV4IDIzZDBiYmNjNzFjMjgxYzUyYzM1YThjMjUyZGE5NmMwYWIxMmE5
OGMuLjM2ZmE2YTEyN2ZmMDc5M2NlZjIzMGVkZjdhNjQxZGRlMDJmZTM3NGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJE
aXNwbGF5TGlzdFJlcGxheWVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRm9u
dENhc2NhZGUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZS5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKQEAgLTU0LDY3ICs1NSw2IEBAIHZvaWQgUmVzdG9yZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQogCi12
b2lkIFRyYW5zbGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQudHJhbnNsYXRlKG1feCwgbV95KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRlbSkKLXsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoIngiLCBpdGVtLngoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ5
IiwgaXRlbS55KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFJvdGF0ZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQucm90YXRlKG1f
YW5nbGUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgUm90YXRlJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5nbGUiLCBp
dGVtLmFuZ2xlKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNjYWxlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zY2FsZShtX3Np
emUpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU2NhbGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzaXplIiwgaXRlbS5h
bW91bnQoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0Q1RNOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRDVE0obV90cmFu
c2Zvcm0pOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU2V0Q1RNJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgic2V0LWN0bSIs
IGl0ZW0udHJhbnNmb3JtKCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENvbmNhdGVu
YXRlQ1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29u
dGV4dC5jb25jYXRDVE0obV90cmFuc2Zvcm0pOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29uY2F0ZW5hdGVDVE0mIGl0ZW0pCi17Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJjdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVy
biB0czsKLX0KLQogdm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihjb2xvcigpKTsK
QEAgLTE0OCw3NyArODgsMjIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFNldFN0cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiAgICAgcmV0dXJuIHRz
OwogfQogCi1TZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICA6
IG1fc3RhdGVDaGFuZ2Uoc3RhdGUsIGZsYWdzKQotewotfQotCi1TZXRTdGF0ZTo6U2V0U3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQotICAgIDogbV9z
dGF0ZUNoYW5nZShzdGF0ZUNoYW5nZSkKK1NldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUpCisgICAgOiBtX3N0YXRlKHN0YXRlKQogewogfQogCiB2b2lk
IFNldFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgbV9zdGF0
ZUNoYW5nZS5hcHBseShjb250ZXh0KTsKKyAgICBjb250ZXh0Lm1lcmdlU3RhdGVDaGFuZ2VzKG1f
c3RhdGUpOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU2V0U3RhdGUmIHN0YXRlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRl
LnN0YXRlQ2hhbmdlKCk7CisgICAgdHMgPDwgaXRlbS5zdGF0ZSgpOwogICAgIHJldHVybiB0czsK
IH0KIAotdm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7Ci19Ci0KLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lQ2FwJiBs
aW5lQ2FwKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1jYXAiLCBsaW5lQ2FwLmxpbmVD
YXAoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVEYXNoOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCht
X2Rhc2hBcnJheSwgbV9kYXNoT2Zmc2V0KTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFzaCkKLXsKLSAg
ICB0cy5kdW1wUHJvcGVydHkoImRhc2gtYXJyYXkiLCBsaW5lRGFzaC5kYXNoQXJyYXkoKSk7Ci0g
ICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLW9mZnNldCIsIGxpbmVEYXNoLmRhc2hPZmZzZXQoKSk7
Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldExpbmVKb2luOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5zZXRMaW5lSm9pbihtX2xpbmVK
b2luKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFNldExpbmVKb2luJiBsaW5lSm9pbikKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImxp
bmUtam9pbiIsIGxpbmVKb2luLmxpbmVKb2luKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBTZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17
Ci0gICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1pdCk7Ci19Ci0KLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRNaXRlckxpbWl0
JiBtaXRlckxpbWl0KQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibWl0cmUtbGltaXQiLCBtaXRl
ckxpbWl0Lm1pdGVyTGltaXQoKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIENsZWFyU2hh
ZG93OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4
dC5jbGVhclNoYWRvdygpOwotfQotCiB2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKQEAgLTY1NywzMCAr
NTQyLDE1IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLXZv
aWQgRmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Ci17Ci0gICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fb3AsIG1fYmxl
bmRNb2RlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVy
dHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0
ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0aW9uIiwg
aXRlbS5jb21wb3NpdGVPcGVyYXRvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1v
ZGUiLCBpdGVtLmJsZW5kTW9kZSgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgRmlsbFJv
dW5kZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAg
Y29udGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5kTW9kZSk7Cisg
ICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yKTsKIH0KIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVk
UmVjdCYgaXRlbSkKIHsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRS
ZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwogICAgIHJl
dHVybiB0czsKIH0KIApAQCAtNzY4LDggKzYzOCw4IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKIH0KIAogI2lm
IEVOQUJMRShWSURFTykKLVBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi0gICAgOiBt
X2lkZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKK1BhaW50RnJhbWVGb3JNZWRpYTo6UGFp
bnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKQorICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAg
ICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogewogfQpAQCAtMTAxMSwxOSArODgxLDEw
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlw
ZSB0eXBlKQogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRz
IDw8ICJzYXZlIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogdHMgPDwgInJl
c3RvcmUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHRzIDw8ICJ0cmFu
c2xhdGUiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHRzIDw8ICJyb3RhdGUi
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogdHMgPDwgInNjYWxlIjsgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB0cyA8PCAic2V0LWN0bSI7IGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB0cyA8PCAiY29uY2F0ZW50YXRlLWN0bSI7
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjogdHMgPDwgInNl
dC1pbmxpbmUtZmlsbC1jb2xvciI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZVN0cm9rZUNvbG9yOiB0cyA8PCAic2V0LWlubGluZS1zdHJva2UtY29sb3IiOyBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHRzIDw8ICJzZXQtc3Ryb2tlLXRo
aWNrbmVzcyI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB0cyA8PCAic2V0
LXN0YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogdHMgPDwgInNl
dC1saW5lLWNhcCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOiB0cyA8
PCAic2V0LWxpbmUtZGFzaCI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2lu
OiB0cyA8PCAic2V0LWxpbmUtam9pbiI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1p
dGVyTGltaXQ6IHRzIDw8ICJzZXQtbWl0ZXItbGltaXQiOyBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwOiB0cyA8PCAiY2xpcCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBP
dXQ6IHRzIDw8ICJjbGlwLW91dCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0lt
YWdlQnVmZmVyOiB0cyA8PCAiY2xpcC10by1pbWFnZS1idWZmZXIiOyBicmVhazsKQEAgLTEwNDYs
NyArOTA3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHRzIDw8ICJmaWxs
LXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjogdHMg
PDwgImZpbGwtcmVjdC13aXRoLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1ncmFkaWVudCI7IGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogdHMgPDwgImZpbGwtY29t
cG9zaXRlZC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0
OiB0cyA8PCAiZmlsbC1yb3VuZGVkLXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogdHMgPDwgImZpbGwtcmVjdC13aXRoLXJvdW5kZWQtaG9s
ZSI7IGJyZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQpAQCAtMTA3OCw3ICs5Mzgs
NiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5
cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB0cyA8PCAiYXBw
bHktZmlsbC1wYXR0ZXJuIjsgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eURldmljZVNjYWxlRmFjdG9yOiB0cyA8PCAiYXBwbHktZGV2aWNlLXNjYWxlLWZhY3RvciI7IGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB0cyA8PCAiY2xlYXItc2hhZG93
IjsgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0czsKIH0KQEAgLTEwODgsMjEgKzk0Nyw2IEBA
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkK
ICAgICB0cyA8PCBpdGVtLnR5cGUoKTsKIAogICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFRyYW5z
bGF0ZT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAg
ICAgICB0cyA8PCBpdGVtLmdldDxSb3RhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTY2FsZT4oKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICB0cyA8PCBpdGVt
LmdldDxTZXRDVE0+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNh
dGVuYXRlQ1RNOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKTsKLSAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAg
ICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTExNSwxOCArOTU5LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAg
ICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZUNh
cD4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0g
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVEYXNoPigpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0
TGluZUpvaW4+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQ6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCk7Ci0gICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PENsaXA+KCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTE5Myw5ICsxMDI1LDYgQEAgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICB0cyA8PCBpdGVtLmdldDxG
aWxsUmVjdFdpdGhHcmFkaWVudD4oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsQ29tcG9z
aXRlZFJlY3Q+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3Vu
ZGVkUmVjdDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpOwogICAg
ICAgICBicmVhazsKQEAgLTEyNzEsNyArMTEwMCw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eVN0cm9rZVBhdHRlcm46CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKICNl
bmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgcmV0dXJuIHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXgg
OTdjYjVmYzhkMDRiYTg2NjJiNzJjN2RkZWViYzQ0MTU1YzI4MjViNy4uZTgxYmIzNDZjOWVmZWJl
OTZhNjUwZDc1NDVhODFmNjE2YjdkNmE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5oCkBAIC04NSwxMDQgKzg1LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiB9OwogCi1jbGFzcyBUcmFuc2xhdGUgewot
cHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0K
LSAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICAgICAgOiBtX3goeCkKLSAgICAg
ICAgLCBtX3koeSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJu
IG1feDsgfQotICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6
Ci0gICAgZmxvYXQgbV94IHsgMCB9OwotICAgIGZsb2F0IG1feSB7IDAgfTsKLX07Ci0KLWNsYXNz
IFJvdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpSb3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKLQotICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICAgICAgOiBtX2FuZ2xlKGFuZ2xl
KQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5n
bGU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9hbmdsZSB7IDAgfTsgLy8gSW4gcmFkaWFu
cy4KLX07Ci0KLWNsYXNzIFNjYWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNjYWxlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi0g
ICAgICAgIDogbV9zaXplKHNpemUpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IEZsb2F0U2l6
ZSYgYW1vdW50KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEZs
b2F0U2l6ZSBtX3NpemU7Ci19OwotCi1jbGFzcyBTZXRDVE0gewotcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0Q1RNOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3Jt
KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmluZVRy
YW5zZm9ybSBtX3RyYW5zZm9ybTsKLX07Ci0KLWNsYXNzIENvbmNhdGVuYXRlQ1RNIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNv
bmNhdGVuYXRlQ1RNOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0K
LSAgICBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAg
ICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwotfTsKLQog
Y2xhc3MgU2V0SW5saW5lRmlsbENvbG9yIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjsKQEAgLTI0
NywxMCArMTQ5LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAg
ICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlQ2hhbmdlOyB9Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
IHN0YXRlQ2hhbmdlKCkgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQorICAgIFdFQkNPUkVfRVhQ
T1JUIGV4cGxpY2l0IFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZTsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFNldFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwpAQCAtMjU4LDQwNCArMTU4LDI2IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpOwogCiBw
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlJik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBtX3N0YXRl
Q2hhbmdlOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CiB9OwogCiB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBTZXRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiB7Ci0gICAgYXV0byBjaGFuZ2VGbGFncyA9IG1fc3RhdGVDaGFuZ2UubV9jaGFuZ2VG
bGFnczsKLSAgICBlbmNvZGVyIDw8IGNoYW5nZUZsYWdzOwotCi0gICAgYXV0byYgc3RhdGUgPSBt
X3N0YXRlQ2hhbmdlLm1fc3RhdGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuc3Ryb2tlR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5zdHJv
a2VHcmFkaWVudDsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChz
dGF0ZS5zdHJva2VQYXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuc3Ryb2tlUGF0
dGVybjsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmZp
bGxHcmFkaWVudCk7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLmZpbGxHcmFkaWVudDsKLSAg
ICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuZmlsbFBhdHRlcm4p
OwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5maWxsUGF0dGVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5n
ZSkpIHsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIGVu
Y29kZXIgPDwgc3RhdGUuc2hhZG93Qmx1cjsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFk
b3dDb2xvcjsKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwotICAg
IH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VU
aGlja25lc3M7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
dGV4dERyYXdpbmdNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuc3Ryb2tlQ29sb3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
ZmlsbENvbG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc3Ry
b2tlU3R5bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWxsUnVs
ZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jb21w
b3NpdGVPcGVyYXRvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5i
bGVuZE1vZGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQotICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0KLSAgICBpZiAoY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKLSAgICAgICAg
ZW5jb2RlciA8PCBzdGF0ZS5hbHBoYTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgZW5j
b2RlciA8PCBzdGF0ZS5zaG91bGRBbnRpYWxpYXM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgZW5j
b2RlciA8PCBzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICBlbmNvZGVyIDw8IG1f
c3RhdGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBzdGQ6Om9wdGlvbmFsPFNldFN0
YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgc3RkOjpvcHRp
b25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncz4gY2hhbmdlRmxhZ3M7
Ci0gICAgZGVjb2RlciA+PiBjaGFuZ2VGbGFnczsKLSAgICBpZiAoIWNoYW5nZUZsYWdzKQorICAg
IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+IHN0YXRlOworICAgIGRlY29kZXIg
Pj4gc3RhdGU7CisgICAgaWYgKCFzdGF0ZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgIHN0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3MgPSAqY2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc3RhdGVDaGFu
Z2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3Jh
ZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVudDo6
ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIXN0cm9rZUdyYWRpZW50KQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0
cm9rZUdyYWRpZW50ID0gV1RGTW92ZSgqc3Ryb2tlR3JhZGllbnQpOwotICAgIH0KLQotICAgIGlm
IChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0cm9rZVBhdHRlcm4gPSBQ
YXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghc3Ryb2tlUGF0dGVybikKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5zdHJva2VQYXR0ZXJuID0gV1RGTW92ZSgqc3Ryb2tlUGF0dGVybik7Ci0gICAgfQotCi0g
ICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmaWxsR3JhZGllbnQg
PSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIWZpbGxHcmFkaWVudCkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKCpmaWxsR3JhZGllbnQpOwotICAgIH0KLQot
ICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgYXV0byBmaWxsUGF0dGVybiA9
IFBhdHRlcm46OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFmaWxsUGF0dGVybikKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5maWxsUGF0dGVybiA9IFdURk1vdmUoKmZpbGxQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0U2l6ZT4gc2hh
ZG93T2Zmc2V0OwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd09mZnNldDsKLSAgICAgICAgaWYg
KCFzaGFkb3dPZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gKnNoYWRvd09mZnNldDsKLQot
ICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzaGFkb3dCbHVyOwotICAgICAgICBkZWNvZGVy
ID4+IHNoYWRvd0JsdXI7Ci0gICAgICAgIGlmICghc2hhZG93Qmx1cikKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dC
bHVyID0gKnNoYWRvd0JsdXI7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc2hhZG93
Q29sb3I7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93Q29sb3I7Ci0gICAgICAgIGlmICghc2hh
ZG93Q29sb3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7Ci0KLSAgICAgICAg
c3RkOjpvcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiBzaGFkb3dSYWRpdXNNb2RlOwotICAgICAg
ICBkZWNvZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGlmICghc2hhZG93UmFkaXVz
TW9kZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gV1RGTW92ZSgqc2hhZG93UmFkaXVzTW9k
ZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpIHsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDxmbG9hdD4gc3Ryb2tlVGhpY2tuZXNzOwotICAgICAgICBkZWNvZGVyID4+
IHN0cm9rZVRoaWNrbmVzczsKLSAgICAgICAgaWYgKCFzdHJva2VUaGlja25lc3MpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzID0gKnN0cm9rZVRoaWNrbmVzczsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4
dERyYXdpbmdNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPFRleHREcmF3aW5n
TW9kZUZsYWdzPiB0ZXh0RHJhd2luZ01vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gdGV4dERyYXdp
bmdNb2RlOwotICAgICAgICBpZiAoIXRleHREcmF3aW5nTW9kZSkKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS50ZXh0RHJhd2lu
Z01vZGUgPSBXVEZNb3ZlKCp0ZXh0RHJhd2luZ01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gc3Ryb2tlQ29s
b3I7Ci0gICAgICAgIGRlY29kZXIgPj4gc3Ryb2tlQ29sb3I7Ci0gICAgICAgIGlmICghc3Ryb2tl
Q29sb3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUuc3Ryb2tlQ29sb3IgPSAqc3Ryb2tlQ29sb3I7Ci0gICAgfQotCi0gICAg
aWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxDb2xvckNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gZmls
bENvbG9yOwotICAgICAgICBkZWNvZGVyID4+IGZpbGxDb2xvcjsKLSAgICAgICAgaWYgKCFmaWxs
Q29sb3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUuZmlsbENvbG9yID0gKmZpbGxDb2xvcjsKLSAgICB9Ci0KLSAgICBpZiAo
c3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlU3R5bGVDaGFuZ2UpKSB7Ci0gICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOwot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cm9rZVN0eWxlKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VT
dHlsZSA9IHN0cm9rZVN0eWxlOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpIHsK
LSAgICAgICAgc3RkOjpvcHRpb25hbDxXaW5kUnVsZT4gZmlsbFJ1bGU7Ci0gICAgICAgIGRlY29k
ZXIgPj4gZmlsbFJ1bGU7Ci0gICAgICAgIGlmICghZmlsbFJ1bGUpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbFJ1bGUg
PSAqZmlsbFJ1bGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkp
IHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gY29tcG9zaXRlT3Bl
cmF0b3I7Ci0gICAgICAgIGRlY29kZXIgPj4gY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgICAgIGlm
ICghY29tcG9zaXRlT3BlcmF0b3IpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IgPSAqY29tcG9z
aXRlT3BlcmF0b3I7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpIHsKLSAgICAg
ICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICAgICAgZGVjb2RlciA+
PiBibGVuZE1vZGU7Ci0gICAgICAgIGlmICghYmxlbmRNb2RlKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmJsZW5kTW9kZSA9
ICpibGVuZE1vZGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1YWxpdHk+IGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGRlY29kZXIgPj4gaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eTsKLSAgICAgICAgaWYgKCFpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5t
X3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSAqaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0
aW9uYWw8ZmxvYXQ+IGFscGhhOwotICAgICAgICBkZWNvZGVyID4+IGFscGhhOwotICAgICAgICBp
ZiAoIWFscGhhKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBz
dGF0ZUNoYW5nZS5tX3N0YXRlLmFscGhhID0gKmFscGhhOwotICAgIH0KLQotICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRBbnRpYWxpYXNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxk
QW50aWFsaWFzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAg
aWYgKCFzaG91bGRBbnRpYWxpYXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gKnNob3VsZEFu
dGlhbGlhczsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7Ci0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgICAgIGRl
Y29kZXIgPj4gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxkU21vb3RoRm9u
dHMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSAqc2hvdWxkU21vb3RoRm9udHM7Ci0gICAg
fQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpIHsKLSAgICAg
ICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAg
ICAgIGRlY29kZXIgPj4gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgICAgICBpZiAo
IXNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMgPSAqc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgIH0KLQotICAgIGlm
IChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25h
bDxib29sPiBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtczsKLSAgICAgICAgaWYgKCFzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFu
Z2UubV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9ICpzaGFkb3dzSWdub3JlVHJhbnNm
b3JtczsKLSAgICB9Ci0KLSAgICByZXR1cm4geyB7IHN0YXRlQ2hhbmdlIH0gfTsKLX0KLQotY2xh
c3MgU2V0TGluZUNhcCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICAg
ICAgOiBtX2xpbmVDYXAobGluZUNhcCkKLSAgICB7Ci0gICAgfQotCi0gICAgTGluZUNhcCBsaW5l
Q2FwKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQ2FwOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIExpbmVD
YXAgbV9saW5lQ2FwOwotfTsKLQotY2xhc3MgU2V0TGluZURhc2ggewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZURhc2g7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLSAgICAg
ICAgOiBtX2Rhc2hBcnJheShkYXNoQXJyYXkpCi0gICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hP
ZmZzZXQpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkg
Y29uc3QgeyByZXR1cm4gbV9kYXNoQXJyYXk7IH0KLSAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9kYXNoT2Zmc2V0OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwot
Ci1wcml2YXRlOgotICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKLSAgICBmbG9hdCBtX2Rhc2hP
ZmZzZXQ7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRMaW5lRGFzaDo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hB
cnJheTsKLSAgICBlbmNvZGVyIDw8IG1fZGFzaE9mZnNldDsKKyAgICByZXR1cm4gU2V0U3RhdGUo
KnN0YXRlKTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8U2V0
TGluZURhc2g+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBz
dGQ6Om9wdGlvbmFsPERhc2hBcnJheT4gZGFzaEFycmF5OwotICAgIGRlY29kZXIgPj4gZGFzaEFy
cmF5OwotICAgIGlmICghZGFzaEFycmF5KQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gZGFzaE9mZnNldDsKLSAgICBkZWNvZGVyID4+IGRh
c2hPZmZzZXQ7Ci0gICAgaWYgKCFkYXNoT2Zmc2V0KQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgcmV0dXJuIHt7ICpkYXNoQXJyYXksICpkYXNoT2Zmc2V0IH19OwotfQotCi1j
bGFzcyBTZXRMaW5lSm9pbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4p
Ci0gICAgICAgIDogbV9saW5lSm9pbihsaW5lSm9pbikKLSAgICB7Ci0gICAgfQotCi0gICAgTGlu
ZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIExpbmVKb2luIG1fbGluZUpvaW47Ci19OwotCi1jbGFzcyBTZXRNaXRlckxpbWl0IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OlNldE1pdGVyTGltaXQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxz
ZTsKLQotICAgIFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLSAgICAgICAgOiBtX21p
dGVyTGltaXQobWl0ZXJMaW1pdCkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgbWl0ZXJMaW1p
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBmbG9h
dCBtX21pdGVyTGltaXQ7Ci19OwotCi1jbGFzcyBDbGVhclNoYWRvdyB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGVhclNoYWRv
dzsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLX07Ci0KIC8vIEZJ
WE1FOiB0cmVhdCBhcyBkcmF3aW5nIGl0ZW0/CiBjbGFzcyBDbGlwIHsKIHB1YmxpYzoKQEAgLTE2
MTIsOTEgKzExMzQsMjAgQEAgc3RkOjpvcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFkaWVudD4gRmls
bFJlY3RXaXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICByZXR1cm4ge3sg
KnJlY3QsIGdyYWRpZW50LT5nZXQoKSB9fTsKIH0KIAotY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOwotCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKLSAgICAgICAgOiBtX3JlY3QocmVjdCkKLSAgICAgICAgLCBtX2NvbG9yKGNvbG9y
KQotICAgICAgICAsIG1fb3Aob3ApCi0gICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0K
LSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJu
IG1fb3A7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVu
ZE1vZGU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9Ci0gICAgc3RkOjpvcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAg
ICBGbG9hdFJlY3QgbV9yZWN0OwotICAgIENvbG9yIG1fY29sb3I7Ci0gICAgQ29tcG9zaXRlT3Bl
cmF0b3IgbV9vcDsKLSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7Ci19OwotCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwg
bV9jb2xvcjsKLSAgICBlbmNvZGVyIDw8IG1fb3A7Ci0gICAgZW5jb2RlciA8PCBtX2JsZW5kTW9k
ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLXN0ZDo6b3B0aW9uYWw8RmlsbENvbXBv
c2l0ZWRSZWN0PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVj
dDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBz
dGQ6Om9wdGlvbmFsPENvbG9yPiBjb2xvcjsKLSAgICBkZWNvZGVyID4+IGNvbG9yOwotICAgIGlm
ICghY29sb3IpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlv
bmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBvcDsKLSAgICBkZWNvZGVyID4+IG9wOwotICAgIGlmICgh
b3ApCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPEJs
ZW5kTW9kZT4gYmxlbmRNb2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgIGlmICgh
YmxlbmRNb2RlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHt7
ICpyZWN0LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSB9fTsKLX0KLQogY2xhc3MgRmlsbFJvdW5k
ZWRSZWN0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOwogCi0gICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBG
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgICAgICAsIG1fY29sb3IoY29sb3Ip
Ci0gICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQogICAgIHsKICAgICB9CiAKICAgICBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0K
LSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0K
IAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxs
Um91bmRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CkBAIC0xNzA5LDcgKzExNjAsNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEZsb2F0Um91bmRlZFJlY3QgbV9yZWN0OwogICAgIENvbG9yIG1f
Y29sb3I7Ci0gICAgQmxlbmRNb2RlIG1fYmxlbmRNb2RlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KQEAgLTE3MTcsNyArMTE2Nyw2IEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fcmVjdDsKICAg
ICBlbmNvZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX2JsZW5kTW9kZTsKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTE3MzMsMTIgKzExODIsNyBAQCBzdGQ6Om9wdGlv
bmFsPEZpbGxSb3VuZGVkUmVjdD4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0g
ICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVyID4+IGJs
ZW5kTW9kZTsKLSAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqYmxlbmRNb2RlIH19OworICAgIHJl
dHVybiB7IHsgKnJlY3QsICpjb2xvciB9IH07CiB9CiAKIGNsYXNzIEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlIHsKQEAgLTE5NjEsNyArMTQwNSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAgICBQYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsK
IAogICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uOyB9CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KQEAgLTIyNTYsMTMgKzE3MDAsMTEgQEAgdXNpbmcg
RGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgPCBBcHBseURldmljZVNjYWxlRmFj
dG9yCiAgICAgLCBCZWdpblRyYW5zcGFyZW5jeUxheWVyCiAgICAgLCBDbGVhclJlY3QKLSAgICAs
IENsZWFyU2hhZG93CiAgICAgLCBDbGlwCiAgICAgLCBDbGlwT3V0CiAgICAgLCBDbGlwT3V0VG9Q
YXRoCiAgICAgLCBDbGlwUGF0aAogICAgICwgQ2xpcFRvSW1hZ2VCdWZmZXIKLSAgICAsIENvbmNh
dGVuYXRlQ1RNCiAgICAgLCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyCiAgICAgLCBEcmF3RWxs
aXBzZQogICAgICwgRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIKQEAgLTIyNzgsNyArMTcyMCw2IEBA
IHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAogICAgICwgRHJhd1JlY3QKICAg
ICAsIERyYXdTeXN0ZW1JbWFnZQogICAgICwgRW5kVHJhbnNwYXJlbmN5TGF5ZXIKLSAgICAsIEZp
bGxDb21wb3NpdGVkUmVjdAogICAgICwgRmlsbEVsbGlwc2UKICAgICAsIEZpbGxQYXRoCiAgICAg
LCBGaWxsUmVjdApAQCAtMjI4OCwyMyArMTcyOSwxNSBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0g
PSBzdGQ6OnZhcmlhbnQKICAgICAsIEZpbGxSb3VuZGVkUmVjdAogICAgICwgRmx1c2hDb250ZXh0
CiAgICAgLCBSZXN0b3JlCi0gICAgLCBSb3RhdGUKICAgICAsIFNhdmUKLSAgICAsIFNjYWxlCi0g
ICAgLCBTZXRDVE0KICAgICAsIFNldElubGluZUZpbGxDb2xvcgogICAgICwgU2V0SW5saW5lU3Ry
b2tlQ29sb3IKLSAgICAsIFNldExpbmVDYXAKLSAgICAsIFNldExpbmVEYXNoCi0gICAgLCBTZXRM
aW5lSm9pbgotICAgICwgU2V0TWl0ZXJMaW1pdAogICAgICwgU2V0U3RhdGUKICAgICAsIFNldFN0
cm9rZVRoaWNrbmVzcwogICAgICwgU3Ryb2tlRWxsaXBzZQogICAgICwgU3Ryb2tlTGluZQogICAg
ICwgU3Ryb2tlUGF0aAogICAgICwgU3Ryb2tlUmVjdAotICAgICwgVHJhbnNsYXRlCiAKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICAsIEZpbGxMaW5lCkBAIC0yMzQxLDIwICsxNzc0
LDEwIEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlPiB7CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlLAogICAgIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2F2ZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlJlc3RvcmUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpUcmFuc2xhdGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSb3Rh
dGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTY2FsZSwKLSAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldENUTSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3MsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRTdGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlNldExpbmVDYXAsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRM
aW5lRGFzaCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVKb2lu
LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCwKLSAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyU2hhZG93LAogICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkNsaXBPdXQsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpDbGlwVG9JbWFnZUJ1ZmZlciwKQEAgLTIzNzYsNyArMTc5OSw2IEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7CiAgICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdCwKICAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yLAogICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQsCi0gICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QsCiAgICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApp
bmRleCBlZWU0NDcxZDM1NGU3NTE1MzEyNTE4OWRmY2M5NDE4YTM5NDUxNGExLi5hNTM1MDk5ODBh
OTMxNDA3ZTkxZTU0ZjlmOTIzMjVjZTVlNWQwNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwCkBAIC00MiwzNTAgKzQyLDE4OSBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotUmVjb3JkZXI6OlJlY29yZGVyKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xp
cCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBtX2Ry
YXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotewotICAgIG1f
c3RhdGVTdGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENUTS5tYXBSZWN0
KGluaXRpYWxDbGlwKSB9KTsKLX0KK1JlY29yZGVyOjpSZWNvcmRlcihjb25zdCBGbG9hdFJlY3Qm
IGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlw
aHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykK
KyAgICA6IEdyYXBoaWNzQ29udGV4dChpbml0aWFsQ2xpcCwgeyB9LCAgaW5pdGlhbENUTSkKKyAg
ICAsIG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAK
LVJlY29yZGVyOjp+UmVjb3JkZXIoKQogewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgp
ID09IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBpdCBpbmRpY2F0ZXMgbWlzbWF0Y2hlZCBzYXZlL3Jl
c3RvcmUuCiB9CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBpbmxpbmVTdGF0ZUNo
YW5nZUZsYWdzIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdl
LAotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgIH07
Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MgIT0gKGNoYW5nZUZsYWdzICYgaW5saW5lU3RhdGVDaGFu
Z2VGbGFncykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpICYmICFjaGFu
Z2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKK1JlY29yZGVyOjp+UmVjb3JkZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBpZiAo
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5n
ZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlY29y
ZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5n
ZUZsYWdzKQordm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7Ci0gICAgaWYgKCFjb250YWluc09ubHlJ
bmxpbmVTdGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7Ci0gICAgICAgIGlmIChh
dXRvIHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlUGF0dGVybikKLSAgICAgICAgICAg
IHJlY29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKLSAgICAgICAgaWYgKGF1
dG8gcGF0dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5maWxsUGF0dGVybikKLSAgICAgICAgICAgIHJl
Y29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgpKTsKLSAgICAgICAgcmVjb3JkU2V0
U3RhdGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3Io
KmNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7Ci0KLSAg
ICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRo
aWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhjaGFuZ2Vz
Lm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgcmVjb3Jk
U2V0SW5saW5lRmlsbENvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLnRyeUdldEFzU1JH
QkFCeXRlcygpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKKyAgICByZWNvcmRTYXZl
KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5
KCkKK3ZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQogewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGN1
cnJlbnRseSBpbnZva2VkIGluIGFuIGFkLWhvYyBtYW5uZXIgd2hlbiByZWNvcmRpbmcgZHJhd2lu
ZyBpdGVtcy4gV2Ugc2hvdWxkIGNvbnNpZGVyIGVpdGhlcgotICAgIC8vIHNwbGl0dGluZyBHcmFw
aGljc0NvbnRleHQgc3RhdGUgY2hhbmdlcyBpbnRvIGluZGl2aWR1YWwgZGlzcGxheSBsaXN0IGl0
ZW1zLCBvciByZWZhY3RvcmluZyB0aGUgY29kZSBzdWNoIHRoYXQKLSAgICAvLyB0aGlzIG1ldGhv
ZCBpcyBhdXRvbWF0aWNhbGx5IGludm9rZWQgd2hlbiByZWNvcmRpbmcgYSBkcmF3aW5nIGl0ZW0u
Ci0gICAgYXV0byYgc3RhdGVDaGFuZ2VzID0gY3VycmVudFN0YXRlKCkuc3RhdGVDaGFuZ2U7Ci0g
ICAgYXV0byBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0
YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUpOwotICAgIGlmICghY2hhbmdlc0Zy
b21MYXN0U3RhdGUpCisgICAgaWYgKCFzdGFja1NpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJwcmUtZHJhd2luZywg
c2F2aW5nIHN0YXRlICIgPDwgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2Vz
Lm1fc3RhdGUsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKSk7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtKHN0YXRlQ2hhbmdlcywgY2hhbmdlc0Zyb21MYXN0U3RhdGUpOwotICAgIHN0YXRlQ2hhbmdl
cy5tX2NoYW5nZUZsYWdzID0geyB9OwotICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3Rh
dGUgPSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsKLX0KLQotY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIFJlY29yZGVyOjpzdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgp
LnN0YXRlQ2hhbmdlLm1fc3RhdGU7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRpZFVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgY3VycmVudFN0YXRlKCkuc3RhdGVDaGFu
Z2UuYWNjdW11bGF0ZShzdGF0ZSwgZmxhZ3MpOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRMaW5l
Q2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICByZWNvcmRTZXRMaW5lQ2FwKGxpbmVDYXApOwot
fQotCi12b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJh
eSwgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICByZWNvcmRTZXRMaW5lRGFzaChkYXNoQXJyYXks
IGRhc2hPZmZzZXQpOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBs
aW5lSm9pbikKLXsKLSAgICByZWNvcmRTZXRMaW5lSm9pbihsaW5lSm9pbik7Ci19Ci0KLXZvaWQg
UmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLXsKLSAgICByZWNvcmRT
ZXRNaXRlckxpbWl0KG1pdGVyTGltaXQpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgp
OworICAgIHJlY29yZFJlc3RvcmUoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIHJlc3VsdHMpCit2
b2lkIFJlY29yZGVyOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVm
ZmVjdHNPZlR5cGUoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgewotICAgICAgICBhdXRv
JiBmZUltYWdlID0gZG93bmNhc3Q8RkVJbWFnZT4oZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYg
KCFyZWNvcmRSZXNvdXJjZVVzZShmZUltYWdlLnNvdXJjZUltYWdlKCkpKSB7Ci0gICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBz
b3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXNvdXJjZUltYWdlKSB7Ci0gICAgICAgIHJlY29y
ZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKG51bGxwdHIsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVy
KTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQogICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZSgqc291cmNlSW1hZ2UpKSB7Ci0gICAgICAgIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJj
ZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFn
ZVJlY3QsIGZpbHRlcik7Ci19CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi17Ci0gICAgbV9k
cmF3R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1H
bHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwotfQorICAgIGlmIChzdGF0ZSgpLmhh
c09ubHlQcmltaXRpdmVDaGFuZ2VzKCkpIHsKKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygp
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCkpCisgICAg
ICAgICAgICByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoKmZpbGxDb2xvcigpLnRyeUdldEFzU1JH
QkFCeXRlcygpKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50
JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFJlc291cmNlVXNl
KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKTsKLSAgICByZWNvcmREcmF3R2x5cGhzKGZvbnQsIGds
eXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSk7Ci19Cisg
ICAgICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaCkpCisgICAgICAgICAgICByZWNvcmRTZXRJbmxpbmVTdHJv
a2VDb2xvcigqc3Ryb2tlQ29sb3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CiAKLXZvaWQgUmVj
b3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZO
ZWNlc3NhcnkoKTsKKyAgICAgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcykpCisgICAgICAgICAgICBy
ZWNvcmRTZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwogCi0gICAgaWYgKCFy
ZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKKyAgICAgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKLSAgICByZWNvcmREcmF3TmF0
aXZlSW1hZ2UoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3U3lz
dGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCkKLXsKLSAgICByZWNvcmREcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRl
c3RpbmF0aW9uUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUlt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOwotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKLSAgICByZWNvcmREcmF3
UGF0dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotCi0g
ICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6RmlsbEJydXNoKSkgeworICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gZmls
bFBhdHRlcm4oKSkKKyAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJ
bWFnZSgpKTsKICAgICB9CiAKLSAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNh
dmUoKQotewotICAgIHJlY29yZFNhdmUoKTsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3Rh
dGVTdGFjay5sYXN0KCkuY2xvbmVGb3JTYXZlKCkpOwotfQotCi12b2lkIFJlY29yZGVyOjpyZXN0
b3JlKCkKLXsKLSAgICBpZiAoIW1fc3RhdGVTdGFjay5zaXplKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKSB7CisgICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBzdHJv
a2VQYXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxl
SW1hZ2UoKSk7CisgICAgfQogCi0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICBy
ZWNvcmRSZXN0b3JlKCk7CisgICAgcmVjb3JkU2V0U3RhdGUoc3RhdGUoKSk7CisgICAgZGlkQXBw
bHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCi17Ci0gICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOwotICAgIHJl
Y29yZFRyYW5zbGF0ZSh4LCB5KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFu
Z2xlSW5SYWRpYW5zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0
dGVybigpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAg
ICByZWNvcmRSb3RhdGUoYW5nbGVJblJhZGlhbnMpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnNj
YWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRl
cm4oKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUpOwotICAgIHJlY29yZFNjYWxl
KHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQXBwbHlGaWxsUGF0
dGVybigpOwogfQorI2VuZGlmCiAKLXZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7Ci0gICAgaWYgKHRyYW5zZm9ybS5pc0lk
ZW50aXR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgY3VycmVudFN0YXRlKCku
Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgcmVjb3JkQ29uY2F0ZW5hdGVDVE0odHJhbnNmb3Jt
KTsKKyAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGlu
dmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KKyAgICAvLyBBc3NlcnQgdGhhdCBp
dCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPworICAgIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuc2V0Q1RNKHRy
YW5zZm9ybSk7Ci0gICAgcmVjb3JkU2V0Q1RNKHRyYW5zZm9ybSk7Ci19CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKIAotQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRT
dGF0ZSgpLmN0bTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAKLXZvaWQgUmVjb3Jk
ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIHNldEFscGhhKG9wYWNpdHkpOwogICAg
IHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgbV9zdGF0ZVN0YWNr
LmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIoKSk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEVuZFRyYW5zcGFyZW5j
eUxheWVyKCk7Ci0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVz
cyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRl
bUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotfQor
ICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBHcmFwaGlj
c0NvbnRleHQ6OnJlc3RvcmUoKTsKIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCi17
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3
TGluZXNGb3JUZXh0KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3Ms
IHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKKyAgICByZWNvcmRFbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2
b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIocmVjdCwgc3R5bGUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIHJlY29yZENsaXAocmVjdCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVj
b3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogewot
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0Vs
bGlwc2UocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAgICByZWNvcmRDbGlwUGF0aChwYXRoLCB3
aW5kUnVsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
Cit2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdQYXRoKHBh
dGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xpcE91dChyZWN0KTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVy
OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVt
SWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcik7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlw
T3V0VG9QYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdG
b2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwotfQorICAgIGlmICgh
cmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSNpZiBQTEFURk9STShNQUMpCi12b2lkIFJlY29yZGVyOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJl
Y29yZENsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogfQog
Ci12b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jiwg
ZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQordm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xlYXJSZWN0KHJlY3QpOwogfQotI2VuZGlmCiAK
IHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CiAgICAgcmVjb3JkRmlsbFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKICAgICByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihyZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRp
ZW50KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChyZWN0LCBn
cmFkaWVudCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3RhdGVD
aGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QocmVj
dCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
cmVjb3JkRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsUm91bmRlZFJlY3QocmVj
dCwgY29sb3IsIGJsZW5kTW9kZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNv
cmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAg
IHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29s
b3IpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbEVsbGlwc2UocmVj
dCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lu
bGluZURhdGEoKSkgewogICAgICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPExpbmVEYXRhPigp
KQpAQCAtNDAyLDIxICsyNDEsMjEgQEAgdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKICAgICByZWNvcmRGaWxsUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6
ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6c3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAg
ICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxFbGxp
cHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkU3Ryb2tlUmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBSZWNvcmRlcjo6
c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVD
aGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRTdHJva2VSZWN0KHJlY3QsIGxpbmVX
aWR0aCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRTdHJva2VFbGxpcHNl
KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRo
Lmhhc0lubGluZURhdGEoKSkgewogICAgICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhPExpbmVE
YXRhPigpKQpAQCAtNDMzLDE0OCArMjcyLDE2OCBAQCB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkU3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJl
Y29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJl
Y29yZFN0cm9rZUVsbGlwc2UocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBy
ZWNvcmREcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVy
OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRDbGVh
clJlY3QocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TGlu
ZShwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0UoQ0cpCi12b2lkIFJlY29yZGVyOjphcHBs
eVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KyAgICByZWNvcmREcmF3RWxsaXBzZShyZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6YXBwbHlG
aWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQog
ewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQXBw
bHlGaWxsUGF0dGVybigpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJh
d1BhdGgocGF0aCk7CiB9Ci0jZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBh
dGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChjdXJyZW50U3RhdGUoKS5jdG0u
bWFwUmVjdChyZWN0KSk7Ci0gICAgcmVjb3JkQ2xpcChyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQs
IGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIHJlY29yZENsaXBPdXQocmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQorI2lmIFBMQVRG
T1JNKE1BQykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJs
ZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKIHsKLSAgICByZWNvcmRDbGlwT3V0VG9QYXRoKHBhdGgp
OworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNv
bnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQordm9pZCBSZWNvcmRlcjo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENv
bG9yJikKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChjdXJyZW50
U3RhdGUoKS5jdG0ubWFwUmVjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSkpOwotICAgIHJlY29y
ZENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQorI2Vu
ZGlmCiAKLUludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAordm9pZCBSZWNvcmRl
cjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoYXV0byBpbnZlcnNlID0gY3VycmVudFN0
YXRlKCkuY3RtLmludmVyc2UoKSkKLSAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoaW52
ZXJzZS0+bWFwUmVjdChjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzKSk7CisgICAgaWYgKCFyZWNv
cmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIC8vIElmIHRoZSBDVE0gaXMgbm90IGludmVy
dGlibGUsIHJldHVybiB0aGUgb3JpZ2luYWwgcmVjdC4KLSAgICAvLyBUaGlzIG1hdGNoZXMgQ0dS
ZWN0QXBwbHlJbnZlcnNlQWZmaW5lVHJhbnNmb3JtIGJlaGF2aW9yLgotICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVy
LCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQogewotICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdl
QnVmZmVyKTsKLSAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJl
Y3QpOwotfQorICAgIGZvciAoYXV0byYgZWZmZWN0IDogZmlsdGVyLmVmZmVjdHNPZlR5cGUoRmls
dGVyRWZmZWN0OjpUeXBlOjpGRUltYWdlKSkgeworICAgICAgICBhdXRvJiBmZUltYWdlID0gZG93
bmNhc3Q8RkVJbWFnZT4oZWZmZWN0LmdldCgpKTsKKyAgICAgICAgaWYgKCFyZWNvcmRSZXNvdXJj
ZVVzZShmZUltYWdlLnNvdXJjZUltYWdlKCkpKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3Qs
IGZpbHRlciwgcmVzdWx0cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVu
ZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhv
ZCkgY29uc3QKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRl
cmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdNZXRob2Q6OkRpc3BsYXlMaXN0KSk7Ci19Cisg
ICAgaWYgKCFzb3VyY2VJbWFnZSkgeworICAgICAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAg
ICAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihudWxscHRyLCBzb3VyY2VJbWFnZVJl
Y3QsIGZpbHRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSNpZiBFTkFCTEUoVklERU8p
Ci12b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBpZiAoIXBsYXllci5pZGVudGlm
aWVyKCkpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxh
eWVyLCBkZXN0aW5hdGlvbik7CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZSgqc291cmNlSW1h
Z2UpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIo
c291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBBU1NFUlQocGxheWVyLmlkZW50aWZpZXIoKSk7Ci0gICAgcmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworCisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJ
bWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwogfQotI2VuZGlmCiAKLXZvaWQgUmVjb3Jk
ZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lk
IFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICAvLyBXZSBtb2RpZnkgdGhlIHN0YXRlIGRpcmVjdGx5IGhlcmUgaW5zdGVhZCBvZiBjYWxsaW5n
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoKQotICAgIC8vIGJlY2F1c2UgdGhlIHJlY29yZGVkIGl0
ZW0gd2lsbCBzY2FsZSgpIHdoZW4gcmVwbGF5ZWQuCi0gICAgY3VycmVudFN0YXRlKCkuc2NhbGUo
eyBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IgfSk7CisgICAgcmVjb3JkUmVz
b3VyY2VVc2UoaW1hZ2UpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJh
d05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBpbWFnZVNp
emUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KIAotICAgIC8vIEZJWE1FOiB0aGlz
IGNoYW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNh
Y2hlZCBleHRlbnRzLgotICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgZWFybHkg
b24/Ci0gICAgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7
Cit2b2lkIFJlY29yZGVyOjpkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3sKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZERyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRp
b25SZWN0KTsKIH0KIAotRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCit2b2lk
IFJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
KSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0g
ICAgcmV0dXJuIHJlY3Q7CisgICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi1jb25zdCBSZWNvcmRlcjo6Q29udGV4dFN0
YXRlJiBSZWNvcmRlcjo6Y3VycmVudFN0YXRlKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQ
YXR0ZXJuKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBBU1NF
UlQobV9zdGF0ZVN0YWNrLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7
CisgICAgaWYgKCFyZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQ
YXR0ZXJuKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
IH0KIAotUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpCisj
aWYgRU5BQkxFKFZJREVPKQordm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgQVNT
RVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgp
OworICAgIGlmICghcGxheWVyLmlkZW50aWZpZXIoKSkgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkUGFpbnRG
cmFtZUZvck1lZGlhKHBsYXllci5pZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uKTsKIH0KKyNlbmRp
ZgogCi1jb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAordm9pZCBS
ZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckds
eXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgbV9kcmF3R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGlu
Z01vZGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KQordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50
JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBj
dG0udHJhbnNsYXRlKHgsIHkpOworICAgIHJlY29yZFJlc291cmNlVXNlKGNvbnN0X2Nhc3Q8Rm9u
dCY+KGZvbnQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdHbHlw
aHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdN
b2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpyb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBkb3Vi
bGUgYW5nbGVJbkRlZ3JlZXMgPSByYWQyZGVnKHN0YXRpY19jYXN0PGRvdWJsZT4oYW5nbGVJblJh
ZGlhbnMpKTsKLSAgICBjdG0ucm90YXRlKGFuZ2xlSW5EZWdyZWVzKTsKLSAgICAKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gcm90YXRpb247Ci0gICAgcm90YXRpb24ucm90YXRlKGFuZ2xlSW5EZWdyZWVz
KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdMaW5lc0ZvclRleHQo
cG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCi12
b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBjdG0uc2NhbGUo
c2l6ZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0
YXRlOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCitSZWZQdHI8SW1hZ2VC
dWZmZXI+IFJlY29yZGVyOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xv
clNwYWNlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0CiB7Ci0gICAg
Y3RtID0gbWF0cml4OworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVu
ZGVyaW5nTWV0aG9kLnZhbHVlX29yKFJlbmRlcmluZ01ldGhvZDo6RGlzcGxheUxpc3QpKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBtYXRyaXgpCitGbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKIHsK
LSAgICBjdG0gKj0gbWF0cml4OworICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0Ojpy
b3VuZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlzcGxheUxp
c3Q6OlJlY29yZGVyLiIpOworICAgIHJldHVybiByZWN0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBE
aXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggODQ1
ZWMwMDc3MmVkMmM1NGExZTZjYjI2YjIxNTFkYWJhYTZlYzA3NS4uYWUzNDM3OWJlNjdmMDVlMTA0
MmY2YWRjNWFhYmY4OGMyNzBjMTczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgog
I2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVk
ZSAiSW5saW5lUGF0aERhdGEuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KQEAgLTUxLDcgKzUwLDcgQEAgY2xhc3MgUmVjb3JkZXIgOiBwdWJs
aWMgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgUmVjb3JkZXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3Qm
IGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3RE
cmF3R2x5cGhzOjpZZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEZsb2F0
UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJh
d0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5SZWNvcmRlcigpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1h
c2soKSA9IDA7CkBAIC02MSw0NyArNjAsMzUgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTYXZlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRSZXN0
b3JlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9y
KFNSR0JBPHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldElubGluZVN0
cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFNl
dFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVDYXAo
TGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29y
ZFNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldE1p
dGVyTGltaXQoZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJTaGFkb3co
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJikgPSAwOworCisjaWYgVVNFKENHKQorICAgIHZpcnR1YWwgdm9pZCByZWNvcmRB
cHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5Rmls
bFBhdHRlcm4oKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRCZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZEVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXAoY29u
c3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0aChjb25z
dCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91dChj
b25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291
bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3
TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4o
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRFbmRU
cmFuc3BhcmVuY3lMYXllcigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0
aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxDb21wb3Np
dGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgQ29sb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25zdCBBcmNEYXRhJikgPSAwOwpAQCAtMTA5
LDExICs5NiwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxCZXpp
ZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotI2lmIEVOQUJMRShWSURF
TykKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgPSAwOwotI2VuZGlmCi0gICAgdmlydHVh
bCB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3QgQXJjRGF0YSYpID0gMDsK
QEAgLTEyMSwxMTYgKzEwNyw4MSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlY29y
ZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpID0gMDsKICNlbmRpZgog
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwot
I2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRl
ciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgPSAwOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgPSAwOwogI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9p
bnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSA9IDA7
CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmKSA9IDA7
CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKEltYWdlQnVmZmVyJikgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShjb25zdCBTb3VyY2VJbWFnZSYpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoRm9udCYpID0gMDsKIAotICAg
IHN0cnVjdCBDb250ZXh0U3RhdGUgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwotICAg
ICAgICBGbG9hdFJlY3QgY2xpcEJvdW5kczsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2Ugc3RhdGVDaGFuZ2U7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIGxhc3REcmF3
aW5nU3RhdGU7Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UmVjdCYgY2xpcCkKLSAgICAgICAgICAgIDogY3RtKHRyYW5zZm9ybSkKLSAgICAgICAgICAgICwg
Y2xpcEJvdW5kcyhjbGlwKQotICAgICAgICAgICAgLCBsYXN0RHJhd2luZ1N0YXRlKHN0YXRlKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JTYXZl
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQ29udGV4dFN0YXRlIHN0YXRlKGxhc3RE
cmF3aW5nU3RhdGUsIGN0bSwgY2xpcEJvdW5kcyk7Ci0gICAgICAgICAgICBzdGF0ZS5zdGF0ZUNo
YW5nZSA9IHN0YXRlQ2hhbmdlOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICB9
Ci0KLSAgICAgICAgQ29udGV4dFN0YXRlIGNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHN0YXRlID0gY2xvbmVGb3JTYXZlKCk7Ci0g
ICAgICAgICAgICBzdGF0ZS5sYXN0RHJhd2luZ1N0YXRlLmFscGhhID0gMTsKLSAgICAgICAgICAg
IHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpOwotICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7
Ci0gICAgICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgICAgICB2b2lkIHNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB9OwotCi0gICAgY29uc3QgVmVjdG9yPENvbnRleHRT
dGF0ZSwgND4mIHN0YXRlU3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlU3RhY2s7IH0KLQot
ICAgIGNvbnN0IENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCkgY29uc3Q7Ci0gICAgQ29udGV4
dFN0YXRlJiBjdXJyZW50U3RhdGUoKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFJl
bmRlcmluZ01vZGU+LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IG92ZXJy
aWRlOworICAgIAorCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQpID0gMDsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KIAor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdGF0
ZUNoYW5nZXMoKSBmaW5hbDsKICNpZiBVU0UoQ0cpCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250
ZXh0KGJvb2wpIGZpbmFsIHsgfQotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChi
b29sKSBmaW5hbCB7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVy
bigpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZp
bmFsOwogI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0KSBmaW5hbDsKIAotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUoKSBjb25zdCBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
bGluZVdpZHRoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOwotI2VuZGlmCisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBG
aWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZv
bnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwg
dW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3Ro
aW5nTW9kZSkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikg
ZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQyKSBmaW5hbDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0aChjb25z
dCBQYXRoJikgZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmlu
YWw7CkBAIC0yNDEsNDAgKzE5MiwyMyBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zm
c2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXN0b3JlKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJvdGF0
ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
Y2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNv
bmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURl
dmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNp
dHkpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5k
UnVsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBjbGlwQm91bmRzKCkgY29u
c3QgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIEZpbHRlciYsIEZpbHRlclJlc3VsdHMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRGcmFtZUZvck1l
ZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAj
ZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNt
b290aGluZ01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0dseXBoc0Fu
ZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2Nh
bEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
U3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkg
ZmluYWw7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7
CiAKLSAgICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9p
ZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwotCi0gICAgVmVjdG9yPENvbnRleHRTdGF0ZSwg
ND4gbV9zdGF0ZVN0YWNrOwogICAgIERyYXdHbHlwaHNSZWNvcmRlciBtX2RyYXdHbHlwaHNSZWNv
cmRlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwu
Y3BwCmluZGV4IDFmZGM2YmE1NmJmZGIyNjM2ZWZiMzQ2MmFkYTJhOTkwZDMzODk5NDUuLjFmYjRk
ZDc5NWFlMTBhYThjY2NiY2RkODMxNGVlYTgwODZlOGRiNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcApAQCAtNDIsMTggKzQyLDEzIEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlckltcGw6
OlJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0
RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBSZWNvcmRlcihzdGF0ZSwg
aW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKK1JlY29yZGVy
SW1wbDo6UmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgRmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3
R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlw
aHMpCisgICAgOiBSZWNvcmRlcihpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3RE
cmF3R2x5cGhzKQogICAgICwgbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKIHsKICAgICBMT0df
V0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgIlxuUmVjb3JkaW5nIHdpdGggY2xp
cCAiIDw8IGluaXRpYWxDbGlwKTsKIH0KIAotUmVjb3JkZXJJbXBsOjp+UmVjb3JkZXJJbXBsKCkK
LXsKLSAgICBBU1NFUlQoc3RhdGVTdGFjaygpLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJl
cywgaXQgaW5kaWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgotfQotCiB2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkU2F2ZSgpCiB7CiAgICAgYXBwZW5kPFNhdmU+KCk7CkBAIC02NCwzMSAr
NTksNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUmVzdG9yZSgpCiAgICAgYXBwZW5kPFJl
c3RvcmU+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSkKLXsKLSAgICBhcHBlbmQ8VHJhbnNsYXRlPih4LCB5KTsKLX0KLQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBhcHBlbmQ8Um90
YXRlPihhbmdsZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTY2FsZShjb25zdCBG
bG9hdFNpemUmIHNjYWxlKQotewotICAgIGFwcGVuZDxTY2FsZT4oc2NhbGUpOwotfQotCi12b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQotewotICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKLXsKLSAgICBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KHRyYW5zZm9ybSk7Ci19Ci0KIHZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4g
aW5saW5lQ29sb3IpCiB7CiAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oaW5saW5lQ29s
b3IpOwpAQCAtMTA0LDkyICs3NCwyNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3Ry
b2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tu
ZXNzPih0aGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0U3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKLXsKLSAgICBhcHBlbmQ8U2V0U3RhdGU+KHN0
YXRlLCBjaGFuZ2VGbGFncyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5l
Q2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBhcHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7
Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmIGFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIGFwcGVuZDxTZXRMaW5lRGFzaD4o
YXJyYXksIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGlu
ZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBhcHBlbmQ8U2V0TGluZUpvaW4+KGpvaW4pOwot
fQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkK
LXsKLSAgICBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4obGltaXQpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsK
LX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBjbGlw
UmVjdCkKLXsKLSAgICBhcHBlbmQ8Q2xpcD4oY2xpcFJlY3QpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSkKIHsKLSAgICBhcHBlbmQ8Q2xpcE91dD4oY2xpcFJlY3QpOworICAgIGFwcGVuZDxTZXRTdGF0
ZT4oc3RhdGUpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkKLXsKLSAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAg
IGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCi17Ci0gICAgYXBw
ZW5kPENsaXBQYXRoPihwYXRoLCBydWxlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQotewotICAgIHN0ZDo6
b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGlm
IChzb3VyY2VJbWFnZSkKLSAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKLSAgICBhcHBlbmQ8RHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXI+KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZv
bnRTbW9vdGhpbmdNb2RlIG1vZGUpCi17Ci0gICAgYXBwZW5kPERyYXdHbHlwaHM+KGZvbnQsIGds
eXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZDxEcmF3SW1h
Z2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCisjaWYgVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tl
UGF0dGVybigpCiB7Ci0gICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2VJZGVudGlmaWVy
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICBhcHBlbmQ8QXBw
bHlTdHJva2VQYXR0ZXJuPigpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5
c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigp
CiB7Ci0gICAgYXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9u
UmVjdCk7CisgICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CiB9CisjZW5kaWYgLy8gVVNF
KENHKQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAg
YXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwg
dHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgYXBwZW5kPEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKQEAgLTIwMiw0NCArMTA2
LDM0IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAg
ICAgYXBwZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
Ci17Ci0gICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBv
aW50Mik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNo
b3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlTGluZXMpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcChjb25z
dCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0Pihi
bG9ja0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBk
b3VibGVMaW5lcyk7CisgICAgYXBwZW5kPENsaXA+KGNsaXBSZWN0KTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkK
IHsKLSAgICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOwor
ICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewotICAgIGFw
cGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7CisgICAgYXBwZW5kPENsaXBPdXQ+KGNsaXBSZWN0KTsK
IH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
Cit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7CisgICAgYXBwZW5kPENsaXBPdXRUb1Bh
dGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1Bh
dGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
CiB7Ci0gICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcik7CisgICAgYXBwZW5kPENsaXBUb0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJlY3RzLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcik7CisgICAgYXBwZW5kPENsZWFyUmVjdD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yNTcsMjMg
KzE1MSwyMiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZwogICAgIGFwcGVuZDxGaWxsUmVjdFdp
dGhHcmFkaWVudD4ocmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0
PihyZWN0LCBjb2xvciwgb3AsIG1vZGUpOworICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJl
Y3QsIGNvbG9yKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5k
TW9kZSBtb2RlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0
PihyZWN0LCBjb2xvciwgbW9kZSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
PihyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVj
b3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRSZWN0LCBj
b2xvcik7CisgICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbExpbmUoY29u
c3QgTGluZURhdGEmIGxpbmUpCiB7CiAgICAgYXBwZW5kPEZpbGxMaW5lPihsaW5lKTsKQEAgLTI5
Myw3ICsxODYsNiBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNv
bnN0IEJlemllckN1cnZlRGF0YSYgY3VydmUpCiB7CiAgICAgYXBwZW5kPEZpbGxCZXppZXJDdXJ2
ZT4oY3VydmUpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzAx
LDI1ICsxOTMsMTcgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiAgICAgYXBwZW5kPEZpbGxQYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBh
cHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
CiB7Ci0gICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4ocGxheWVyLCBkZXN0aW5hdGlvbik7
CisgICAgYXBwZW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9Ci0jZW5k
aWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVu
ZDxTdHJva2VSZWN0PihyZWN0LCB3aWR0aCk7CisgICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJl
Y3QpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0KIHZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRTdHJva2VMaW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVu
ZDxTdHJva2VMaW5lPihsaW5lKTsKQEAgLTMzOSw3ICsyMjMsNiBAQCB2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJiBjdXJ2ZSkK
IHsKICAgICBhcHBlbmQ8U3Ryb2tlQmV6aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8v
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ry
b2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzQ3LDMzICsyMzAsODQgQEAgdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBhcHBlbmQ8
U3Ryb2tlUGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsK
LSAgICBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CisgICAgYXBwZW5kPERyYXdSZWN0Pihy
ZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MikKIHsKLSAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKKyAgICBhcHBlbmQ8RHJhd0xpbmU+
KHBvaW50MSwgcG9pbnQyKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgYXBwZW5kPERy
YXdFbGxpcHNlPihyZWN0KTsKK30KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ry
b2tlUGF0dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpOworICAgIGFwcGVu
ZDxEcmF3UGF0aD4ocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZp
bGxQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7Ci0gICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CisgICAgYXBwZW5kPERy
YXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLSNlbmRp
ZiAvLyBVU0UoQ0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3Rz
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+
KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Cit9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcj4oc2NhbGVGYWN0b3IpOworICAgIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGltYWdlSWRl
bnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3Zv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3Rl
bUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3sKKyAgICBhcHBlbmQ8
RHJhd1N5c3RlbUltYWdlPihzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwordm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgYXBwZW5kPERy
YXdJbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQoreworICAgIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOworICAg
IGlmIChzb3VyY2VJbWFnZSkKKyAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBhcHBlbmQ8RHJhd0ZpbHRlcmVkSW1hZ2VC
dWZmZXI+KFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsKK30K
Kwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhcHBlbmQ8RHJhd1BhdHRl
cm4+KGltYWdlSWRlbnRpZmllciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgYXBwZW5kPFBh
aW50RnJhbWVGb3JNZWRpYT4oaWRlbnRpZmllciwgZGVzdGluYXRpb24pOworfQorI2VuZGlmCisK
K3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBG
b250U21vb3RoaW5nTW9kZSBtb2RlKQoreworICAgIGFwcGVuZDxEcmF3R2x5cGhzPihmb250LCBn
bHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUpOworfQorCit2b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcykKK3sKKyAgICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxv
YXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlTGluZXMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFy
a2VyTGluZVN0eWxlJiBzdHlsZSkKK3sKKyAgICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcj4ocmVjdCwgc3R5bGUpOwogfQogCiBib29sIFJlY29yZGVySW1wbDo6cmVjb3JkUmVzb3Vy
Y2VVc2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlKQpAQCAtNDE3LDIwICszNTEsMTYgQEAgc3Rh
dGljIGlubGluZSBmbG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQog
CiBGbG9hdFJlY3QgUmVjb3JkZXJJbXBsOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxv
YXRSZWN0JiByZWN0KSBjb25zdAogewotICAgIEZsb2F0UmVjdCBib3VuZHMgPSByZWN0OwotICAg
IGF1dG8mIHN0YXRlID0gY3VycmVudFN0YXRlKCk7CisgICAgYXV0byBib3VuZHMgPSByZWN0Owog
Ci0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dSYWRpdXM7Ci0g
ICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRl
bnQgPSBib3VuZHM7Ci0gICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7Ci0g
ICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1Jh
ZGl1cykpOworICAgIGlmIChoYXNTaGFkb3coKSkgeworICAgICAgICBhdXRvIHNoYWRvd0V4dGVu
dCA9IGJvdW5kczsKKyAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoZHJvcFNoYWRvdygpLm9mZnNl
dCk7CisgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KGRy
b3BTaGFkb3coKS5ibHVyUmFkaXVzKSk7CiAgICAgICAgIGJvdW5kcy51bml0ZShzaGFkb3dFeHRl
bnQpOwogICAgIH0KIAotICAgIHJldHVybiBpbnRlcnNlY3Rpb24oc3RhdGUuY2xpcEJvdW5kcywg
c3RhdGUuY3RtLm1hcFJlY3QoYm91bmRzKSk7CisgICAgcmV0dXJuIGludGVyc2VjdGlvbihjbGlw
Qm91bmRzKCksIGdldENUTSgpLm1hcFJlY3QoYm91bmRzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IERpc3BsYXlMaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5o
CmluZGV4IDY0MjI2NWYwOTgwMjJjZjJiMDVmMTgwYzE3NGZhMDM0NjJmMmRkNDAuLjZkZTZhZWRm
ZmNiMTdkYjJkMDgxYjQyYzFkZTZiYzMyOWEzOGJmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVySW1wbC5oCkBAIC0zNSw5ICszNSw4IEBAIGNsYXNzIFJlY29yZGVy
SW1wbCA6IHB1YmxpYyBSZWNvcmRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXJJbXBsKTsKIHB1YmxpYzoKLSAgICBXRUJD
T1JFX0VYUE9SVCBSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0ds
eXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+UmVjb3JkZXJJbXBsKCk7Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCBSZWNv
cmRlckltcGwoRGlzcGxheUxpc3QmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0sIERyYXdHbHlwaHNSZWNvcmRlcjo6
RGVjb25zdHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERy
YXdHbHlwaHM6Olllcyk7CisgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0KIAogICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNl
TWFzaygpIGZpbmFsIHsgfQpAQCAtNDcsNDcgKzQ2LDM1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgdm9pZCByZWNvcmRTYXZlKCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRSZXN0b3JlKCkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
U2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkU2V0SW5s
aW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNldElu
bGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNl
dFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVDYXAoTGluZUNhcCkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBk
YXNoT2Zmc2V0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVKb2luKExpbmVKb2luKSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkQ2xlYXJTaGFkb3coKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgZmluYWw7CisKKyNpZiBVU0UoQ0cpCisgICAgdm9p
ZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEFwcGx5
RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCByZWNvcmRCZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWw7CisKICAgICB2b2lkIHJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZp
bmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dFRvUGF0
aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVy
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291
bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDIpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rm9jdXNS
aW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7
CisKKyAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKwog
ICAgIHZvaWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAgICAgdm9p
ZCByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
JikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsK
KworICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRGaWxsTGluZShjb25z
dCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbEFyYyhjb25zdCBBcmNEYXRh
JikgZmluYWw7CkBAIC05NSwxMSArODIsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZEZp
bGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgogICAg
IHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0jaWYgRU5BQkxFKFZJREVPKQot
ICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKLSAgICB2b2lkIHJlY29yZFN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRT
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7
CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRTdHJva2VMaW5l
KGNvbnN0IExpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTdHJva2VBcmMoY29uc3Qg
QXJjRGF0YSYpIGZpbmFsOwpAQCAtMTA3LDEzICs5MywyOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAj
ZW5kaWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cp
Ci0gICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lk
IHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYpIGZp
bmFsOworICAgIAorICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9p
ZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5
c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lm
IEVOQUJMRShWSURFTykKKyAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2Vu
ZGlmCi0gICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsK
KworICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25z
dCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAg
IHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7
CiAKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJikgZmluYWw7CiAgICAg
Ym9vbCByZWNvcmRSZXNvdXJjZVVzZShJbWFnZUJ1ZmZlciYpIGZpbmFsOwpAQCAtMTM5LDYgKzE0
MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJlY29yZEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCiAgICAgRmxvYXRSZWN0IGV4dGVudEZy
b21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKIAogICAgIERpc3BsYXlMaXN0
JiBtX2Rpc3BsYXlMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
CmluZGV4IDhmZjE5ZDAwMzU0Y2RiZWRlM2E1YmExYWY3NThjZmYwMjNhMjVhMjIuLjY2ZmM5ZDg4
MmE0ZDNmN2RlOGU4OTEyYTFmMzBhZjE5OGQwMzUyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTk3LDEwICs5NywxMCBAQCBpbmxpbmUgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBhcHBseVNldFN0YXRlSXRl
bShHcmFwaAogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH07CiAKLSAgICBpZiAo
YXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5z
dGF0ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkpCisgICAgaWYgKGF1dG8g
aW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGUo
KS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm4gKmltYWdlSWRlbnRpZmll
cjsKIAotICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uo
c2V0U3RhdGVJdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSkpCisg
ICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0
ZUl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm4gKmlt
YWdlSWRlbnRpZmllcjsKIAogICAgIHNldFN0YXRlSXRlbS5hcHBseShjb250ZXh0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0RyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcAppbmRleCBkMDljMTM3M2Vh
OWFhYWY0YTE4NTEzNmVlODg1M2Q3ODhmYzQxNzhkLi5mY2FkZWYyMzhlMDlmZTAyODJhY2VlYzlh
MWYyNWY4NzMzOWQ5YzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFy
ZkJ1enouY3BwCkBAIC0yOSwxNyArMjksMTggQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRHJhd0dseXBoc1JlY29y
ZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1
Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293bmVyKG93bmVy
KQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0
JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZy
b21Db250ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQoZGVzdGluYXRpb25Db250ZXh0
KQogewogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
c3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBtX293
bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4
dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5jcHAKaW5kZXggOTExNDZkZmM2ZmQ4NGRmOGUyOTU0ZjAzNzdkMDA2NmE3NzIzM2NjOS4u
NTE1NDdhZTZkZmExMDRiNWRkNjU0YTkzMGI5NzI0MWQ5Nzc4ZDA4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTEs
NiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc3LDE2MCArNzgsMzg5IEBAIGF1dG8gY3JlYXRlQ29tbWFuZCgpIC0+
IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPE9wZXJhdGlvbkRhdGE8PiwgVD46OnZh
CiB9CiAKIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFp
bnRpbmdPcGVyYXRpb25zJiBjb21tYW5kTGlzdCkKLSAgICA6IG1fY29tbWFuZExpc3QoY29tbWFu
ZExpc3QpCisgICAgOiBHcmFwaGljc0NvbnRleHQoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkK
KyAgICAsIG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCiB7Ci0gICAgbV9zdGF0ZVN0YWNrLmFw
cGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpIH0pOwogfQogCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mg
ZmxhZ3MpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNhdmUoKQoreworICAgIHN0cnVj
dCBTYXZlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7CisgICAg
ICAgIHZpcnR1YWwgflNhdmUoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikuc2F2ZSgpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7Cisg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNhdmU8PlxuIjsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTYXZlPigpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0b3JlKCkK
K3sKKyAgICBzdHJ1Y3QgUmVzdG9yZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPD4geworICAgICAgICB2aXJ0dWFsIH5SZXN0b3JlKCkgPSBkZWZhdWx0OworCisgICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnJl
c3RvcmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJSZXN0b3Jl
PD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgaWYgKCFzdGFja1NpemUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CisgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8UmVzdG9yZT4oKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMoKQogewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpIHsKKyAgICBpZiAoc3RhdGUoKS5jaGFu
Z2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q1RNKSkgeworICAg
ICAgICBzdHJ1Y3QgU2V0Q1RNIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8QWZmaW5lVHJhbnNmb3JtPiB7CisgICAgICAgICAgICB2aXJ0dWFsIH5TZXRDVE0oKSA9IGRl
ZmF1bHQ7CisKKyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxh
eSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fp
cm86OlN0YXRlOjpzZXRDVE0oY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+
KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE08PlxuIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRDVE0+KGdl
dENUTSgpKSk7CisgICAgfQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcykpIHsKICAgICAgICAg
c3RydWN0IFN0cm9rZVRoaWNrbmVzc0NoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPGZsb2F0PiB7CiAgICAgICAgICAgICB2aXJ0dWFsIH5TdHJva2VUaGlja25l
c3NDaGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGlu
Z09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6
OnNldFN0cm9rZVRoaWNrbmVzcyhjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8
MD4oKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIlN0cm9rZVRoaWNrbmVzc0NoYW5nZTw+XG4iOworICAgICAgICAgICAgICAgIHRzIDw8
IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNz
PD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlPihzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsK
KyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlPihzdHJv
a2VUaGlja25lc3MoKSkpOwogICAgIH0KIAotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkgeworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZSkpIHsKICAg
ICAgICAgc3RydWN0IFN0cm9rZVN0eWxlQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8U3Ryb2tlU3R5bGU+IHsKICAgICAgICAgICAgIHZpcnR1YWwgflN0cm9r
ZVN0eWxlQ2hhbmdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUoY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6
OnNldFN0cm9rZVN0eWxlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRz
KSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8
PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlU3R5bGU8PlxuIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJv
a2VTdHlsZUNoYW5nZT4oc3Ryb2tlU3R5bGUoKSkpOworICAgIH0KKworICAgIGlmIChzdGF0ZSgp
LmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2Fw
KSkgeworICAgICAgICBzdHJ1Y3QgU2V0TGluZUNhcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPExpbmVDYXA+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldExpbmVD
YXAoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgQ2Fpcm86OnNldExpbmVDYXAoY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwg
YXJnPDA+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwPD5cbiI7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
U2V0TGluZUNhcD4obGluZUNhcCgpKSk7CisgICAgfQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdl
cygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoKSkgewor
ICAgICAgICBzdHJ1Y3QgU2V0TGluZURhc2ggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxEYXNoQXJyYXksIGZsb2F0PiB7CisgICAgICAgICAgICB2aXJ0dWFsIH5TZXRM
aW5lRGFzaCgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5n
T3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2goY29udGV4dEZvclJlcGxheShyZXBsYXllciku
Y3IoKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
TGluZURhc2g8PlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lRGFzaD4obGluZURhc2goKS5kYXNoZXMsIGxpbmVEYXNo
KCkub2Zmc2V0KSk7CisgICAgfQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luKSkgeworICAgICAgICBzdHJ1
Y3QgU2V0TGluZUpvaW4gZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxM
aW5lSm9pbj4geworICAgICAgICAgICAgdmlydHVhbCB+U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7
CisKKyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNl
dExpbmVKb2luKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVy
cmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW48PlxuIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lSm9pbj4o
bGluZUpvaW4oKSkpOworICAgIH0KKworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0KSkgeworICAgICAgICBz
dHJ1Y3QgU2V0TWl0ZXJMaW1pdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPGZsb2F0PiB7CisgICAgICAgICAgICB2aXJ0dWFsIH5TZXRNaXRlckxpbWl0KCkgPSBkZWZh
dWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJv
OjpzZXRNaXRlckxpbWl0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigp
KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRz
KSBvdmVycmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8
PCAiU3Ryb2tlU3R5bGVDaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQ8PlxuIjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJv
a2VTdHlsZUNoYW5nZT4oc3RhdGUuc3Ryb2tlU3R5bGUpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8U2V0TWl0ZXJMaW1pdD4obWl0ZXJMaW1pdCgpKSk7CiAgICAgfQogCi0gICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkg
eworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpDb21wb3NpdGVNb2RlKSkgewogICAgICAgICBzdHJ1Y3QgQ29tcG9zaXRlT3Bl
cmF0aW9uQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Q29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZT4gewogICAgICAgICAgICAgdmlydHVhbCB+Q29tcG9z
aXRlT3BlcmF0aW9uQ2hhbmdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAgICAgICB2b2lkIGV4ZWN1
dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnRleHRGb3JS
ZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpLCBhcmc8MT4oKSk7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNvbXBvc2l0ZU9wZXJh
dGlvbkNoYW5nZTw+XG4iOworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZTw+XG4iOwogICAgICAgICAgICAg
fQogICAgICAgICB9OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENvbXBvc2l0ZU9w
ZXJhdGlvbkNoYW5nZT4oc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSkp
OworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U+
KGNvbXBvc2l0ZU1vZGUoKS5vcGVyYXRpb24sIGNvbXBvc2l0ZU1vZGUoKS5ibGVuZE1vZGUpKTsK
ICAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50
aWFsaWFzQ2hhbmdlKSB7CisgICAgCisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhcykpIHsKICAgICAg
ICAgc3RydWN0IFNob3VsZEFudGlhbGlhc0NoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPGJvb2w+IHsKICAgICAgICAgICAgIHZpcnR1YWwgflNob3VsZEFudGlh
bGlhc0NoYW5nZSgpID0gZGVmYXVsdDsKIAogICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50
aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0
ZTo6c2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFy
ZzwwPigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzKSBvdmVycmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiU2hvdWxkQW50aWFsaWFzQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxp
YXM8PlxuIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxTaG91bGRBbnRpYWxpYXNDaGFuZ2U+KHN0YXRlLnNob3VsZEFudGlhbGlhcykp
OworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTaG91bGRBbnRpYWxpYXNDaGFuZ2U+KHNo
b3VsZEFudGlhbGlhcygpKSk7CiAgICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsK
K30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCit7CisgICAgc3RydWN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICB2
aXJ0dWFsIH5CZWdpblRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiQmVnaW5UcmFuc3BhcmVuY3lMYXllcjw+XG4iOworICAgICAgICB9
CisgICAgfTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CisgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4ob3BhY2l0eSkpOworfQorCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3sKKyAgICBzdHJ1Y3Qg
RW5kVHJhbnNwYXJlbmN5TGF5ZXIgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9u
RGF0YTw+IHsKKyAgICAgICAgdmlydHVhbCB+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1
bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgQ2Fpcm86OmVuZFRyYW5zcGFy
ZW5jeUxheWVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAg
ICAgICAgdHMgPDwgaW5kZW50IDw8ICJFbmRUcmFuc3BhcmVuY3lMYXllcjw+XG4iOworICAgICAg
ICB9CisgICAgfTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgCisgICAgR3JhcGhp
Y3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBzdHJ1Y3QgQ2xpcCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4geworICAg
ICAgICB2aXJ0dWFsIH5DbGlwKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQ
YWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENhaXJvOjpjbGlwKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4o
KSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcDw+XG4iOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBHcmFw
aGljc0NvbnRleHQ6OmNsaXAocmVjdCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcD4o
cmVjdCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQoreworICAgIHN0cnVjdCBDbGlwUGF0aCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIFdpbmRSdWxlPiB7
CisgICAgICAgIHZpcnR1YWwgfkNsaXBQYXRoKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJDbGlwUGF0aDw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIHdp
bmRSdWxlKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwUGF0aD4ocGF0aCwgd2luZFJ1
bGUpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVD
YXAgbGluZUNhcCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lQ2FwPiB7Ci0gICAgICAgIHZpcnR1YWwgflNl
dExpbmVDYXAoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IENsaXBPdXQgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+
Q2xpcE91dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBD
YWlybzo6c2V0TGluZUNhcChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwor
ICAgICAgICAgICAgQ2Fpcm86OmNsaXBPdXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFy
ZzwwPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRMaW5l
Q2FwPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBPdXQ8PlxuIjsKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lQ2FwPihs
aW5lQ2FwKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxDbGlwT3V0PihyZWN0KSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsK
LSAgICBzdHJ1Y3QgU2V0TGluZURhc2ggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxEYXNoQXJyYXksIGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgflNldExpbmVEYXNo
KCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBDbGlwT3V0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8UGF0aD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwT3V0KCkgPSBk
ZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRMaW5l
RGFzaChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAg
ICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8
MD4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU2V0TGluZURh
c2g8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVEYXNoPihk
YXNoZXMsIGRhc2hPZmZzZXQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+KHBhdGgpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBzdHJ1Y3QgU2V0TGluZUpvaW4gZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lSm9pbj4gewotICAgICAgICB2
aXJ0dWFsIH5TZXRMaW5lSm9pbigpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgQ2xpcFRvSW1hZ2VC
dWZmZXIgZmluYWw6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+LCBGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xpcFRvSW1hZ2VC
dWZmZXIoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0
aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fp
cm86OnNldExpbmVKb2luKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Cisg
ICAgICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dEZvclJlcGxheShyZXBs
YXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiU2V0TGluZUpvaW48PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiQ2xpcFRvSW1hZ2VCdWZmZXI8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5lSm9pbj4obGluZUpvaW4pKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworCisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCks
IGRlc3RSZWN0KSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TWl0ZXJM
aW1pdChmbG9hdCBtaXRlckxpbWl0KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHN0cnVjdCBTZXRNaXRlckxpbWl0
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKLSAgICAg
ICAgdmlydHVhbCB+U2V0TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgQ2xlYXJS
ZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7
CisgICAgICAgIHZpcnR1YWwgfkNsZWFyUmVjdCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAg
ICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmNsZWFyUmVjdChjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIlNldE1pdGVyTGltaXQ8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8
IGluZGVudCA8PCAiQ2xlYXJSZWN0PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TWl0ZXJMaW1pdD4obWl0ZXJMaW1pdCkpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xlYXJSZWN0PihyZWN0
KSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQpAQCAtMjQ5LDYgKzQ3OSw4IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsK
IAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIENhaXJvOjpG
aWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQpAQCAtMjY5
LDYgKzUwMSw4IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIH0KICAgICB9Owog
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZp
bGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAK
QEAgLTI5MSwzNSArNTI1LDEyIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwg
c3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQotewotICAgIHN0cnVjdCBGaWxsUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZSwgQ29tcG9zaXRlT3BlcmF0b3I+IHsKLSAgICAg
ICAgdmlydHVhbCB+RmlsbFJlY3QoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewot
ICAgICAgICAgICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dEZvclJlcGxheShyZXBs
YXllcik7Ci0KLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KHBsYXRmb3JtQ29udGV4dCwgYXJnPDI+KCksIGFyZzwzPigpKTsKLSAgICAgICAgICAgIENhaXJv
OjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQsIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDQ+KCkp
OwotICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZv
cm1Db250ZXh0LCBhcmc8NT4oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAg
ICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxSZWN0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBj
b21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBz
dGF0ZS5jb21wb3NpdGVPcGVyYXRvcikpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxS
ZWN0PihyZWN0LCBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgZmlsbFNwYWNlVHJhbnNmb3Jt
KCkpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogewogICAgIHN0cnVjdCBGaWxsUm91bmRlZFJlY3QgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJvdW5kZWRSZWN0LCBDb2xvciwgQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CiAgICAgICAgIHZp
cnR1YWwgfkZpbGxSb3VuZGVkUmVjdCgpID0gZGVmYXVsdDsKQEAgLTMyOCw3ICs1MzksNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB7CiAgICAgICAgICAgICBhdXRvJiBwbGF0
Zm9ybUNvbnRleHQgPSBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKTsKIAotICAgICAgICAgICAg
Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBhcmc8
Mj4oKSwgYXJnPDM+KCkpOworICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVP
cGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LmNyKCksIGFyZzwyPigpLCBhcmc8Mz4oKSk7CiAKICAg
ICAgICAgICAgIGF1dG8mIHJlY3QgPSBhcmc8MD4oKTsKICAgICAgICAgICAgIGlmIChyZWN0Lmlz
Um91bmRlZCgpKQpAQCAtMzM2LDcgKzU0Nyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3Jt
Q29udGV4dCwgcmVjdC5yZWN0KCksIGFyZzwxPigpLCBhcmc8ND4oKSk7CiAKLSAgICAgICAgICAg
IENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJn
PDI+KCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dC5jcigpLCBhcmc8Mj4oKSwgQmxlbmRN
b2RlOjpOb3JtYWwpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
IHRzKSBvdmVycmlkZQpAQCAtMzQ1LDggKzU1Niw5IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4ocm91bmRlZFJlY3QsIGNv
bG9yLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4ocm91bmRlZFJlY3QsIGNvbG9yLCBjb21wb3NpdGVP
cGVyYXRpb24oKSwgYmxlbmRNb2RlKCksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwog
fQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0zNjUsMTAgKzU3NywzNiBAQCB2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29ucwogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisKICAgICBVTlVTRURfUEFSQU0oY29sb3IpOwogICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBzdHJ1Y3QgRmls
bEVsbGlwc2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJl
Y3QsIENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICAgICAgdmly
dHVhbCB+RmlsbEVsbGlwc2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgUGF0aCBwYXRoOworICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKGFyZzwwPigp
KTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgcGF0aCwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJGaWxsRWxsaXBzZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbEVsbGlwc2U+KHJlY3QsIENhaXJvOjpGaWxs
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworfQorCiB2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAg
c3RydWN0IEZpbGxQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
UGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewpAQCAtMzg4LDMy
ICs2MjYsMTIgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwgQ2Fpcm86OkZpbGxT
b3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKLXZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIHN0cnVjdCBGaWxsRWxsaXBzZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPEZsb2F0UmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0
ZT4gewotICAgICAgICB2aXJ0dWFsIH5GaWxsRWxsaXBzZSgpID0gZGVmYXVsdDsKLQotICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBQYXRoIHBhdGg7Ci0gICAgICAgICAgICBwYXRoLmFk
ZEVsbGlwc2UoYXJnPDA+KCkpOwotICAgICAgICAgICAgQ2Fpcm86OmZpbGxQYXRoKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLCBwYXRoLCBhcmc8MT4oKSwgYXJnPDI+KCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7
Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkZpbGxFbGxpcHNlPD5cbiI7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKLX0KLQogdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdp
ZHRoKQogewogICAgIHN0cnVjdCBTdHJva2VSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBmbG9hdCwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fp
cm86OlNoYWRvd1N0YXRlPiB7CkBAIC00MzAsMzEgKzY0OCwxMCBAQCB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGxpbmVXaWR0
aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
KTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCi17Ci0gICAgc3RydWN0IFN0cm9rZVBhdGggZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hh
ZG93U3RhdGU+IHsKLSAgICAgICAgdmlydHVhbCB+U3Ryb2tlUGF0aCgpID0gZGVmYXVsdDsKLQot
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c3Ryb2tlUGF0aChjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU3Ryb2tlUGF0aDw+XG4iOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86
OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKKyAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpT
dHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCkBAIC00NzksMTA3ICs2NzYsMjkgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3RydWN0IENs
ZWFyUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVj
dD4gewotICAgICAgICB2aXJ0dWFsIH5DbGVhclJlY3QoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
LSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsZWFyUmVjdChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkNsZWFyUmVjdDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPENsZWFyUmVjdD4ocmVjdCkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBm
b250U21vb3RoaW5nKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc3RydWN0IERyYXdHbHlwaHMgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlN0cm9r
ZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlLCBGbG9hdFBvaW50LCBSZWZQdHI8Y2Fpcm9fc2Nh
bGVkX2ZvbnRfdD4sIGZsb2F0LCBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4sIGZsb2F0LCBUZXh0RHJh
d2luZ01vZGVGbGFncywgZmxvYXQsIEZsb2F0U2l6ZSwgQ29sb3IsIEZvbnRTbW9vdGhpbmdNb2Rl
PiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0
IFN0cm9rZVBhdGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRo
LCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICAgICAgdmly
dHVhbCB+U3Ryb2tlUGF0aCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAg
ICAgICAgICBDYWlybzo6ZHJhd0dseXBocyhjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLmdldCgpLAotICAg
ICAgICAgICAgICAgIGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCksIGFyZzw4PigpLCBhcmc8
OT4oKSwgYXJnPDEwPigpLCBhcmc8MTE+KCksIGFyZzwxMj4oKSk7CisgICAgICAgICAgICBDYWly
bzo6c3Ryb2tlUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwx
PigpLCBhcmc8Mj4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
RHJhd0dseXBoczw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VQYXRo
PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgp
LnNpemUoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fp
cm9HbHlwaHMobnVtR2x5cGhzKTsKLSAgICB7Ci0gICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50
LnkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewot
ICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNl
dCB9OwotICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCi0gICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSksIHBvaW50LAotICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5wbGF0
Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLAotICAgICAgICBmb250LnN5bnRoZXRpY0JvbGRPZmZz
ZXQoKSwgV1RGTW92ZShjYWlyb0dseXBocyksIHhPZmZzZXQsIHN0YXRlLnRleHREcmF3aW5nTW9k
ZSwKLSAgICAgICAgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0
YXRlLnNoYWRvd0NvbG9yLCBmb250U21vb3RoaW5nKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQotewotICAg
IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0g
ICAgc3RydWN0IERyYXdOYXRpdmVJbWFnZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwg
SW1hZ2VQYWludGluZ09wdGlvbnMsIGZsb2F0LCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAgICAg
ICAgdmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZShjb250ZXh0Rm9yUmVw
bGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+
KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiRHJhd05hdGl2ZUltYWdlPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CiAKLSAgICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKICAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJh
d05hdGl2ZUltYWdlPihuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCksIGRlc3RSZWN0LCBzcmNS
ZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKLX0K
LQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgc3RydWN0IERyYXdQYXR0ZXJuIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4sIEludFNpemUsIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFuc2Zvcm0sIEZsb2F0
UG9pbnQsIEltYWdlUGFpbnRpbmdPcHRpb25zPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdQYXR0
ZXJuKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlv
blJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJv
OjpkcmF3UGF0dGVybihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCks
IGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSwgYXJnPDY+
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVy
cmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdQYXR0ZXJu
PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgVU5VU0VEX1BBUkFNKHNwYWNpbmcpOwot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdQYXR0ZXJuPihuYXRpdmVJbWFnZS5wbGF0Zm9y
bUltYWdlKCksIG5hdGl2ZUltYWdlLnNpemUoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucykpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0
cm9rZVBhdGg+KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCkBAIC01OTgs
OCArNzE3LDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAgICAgICAgfQogICAgIH07CiAK
LSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0
ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlj
a25lc3MsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpKSk7CiB9CiAK
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCkBAIC02MjEsNTAgKzc0MCw4IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0
ZS5zaG91bGRBbnRpYWxpYXMpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERh
c2hBcnJheSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKLSAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVz
Rm9yVGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBD
YWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xpbmVzRm9yVGV4dDw+
XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lk
dGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKLX0K
LQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi17
Ci0gICAgc3RydWN0IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
PiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9IGRlZmF1
bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8
MT4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKSk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGlu
ZT4ocG9pbnQxLCBwb2ludDIsIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0cm9rZVRo
aWNrbmVzcygpLCBzaG91bGRBbnRpYWxpYXMoKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTY4MywxMSAr
NzYwLDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVj
dCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3Is
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIGZpbGxDb2xvcigpLCBzdHJv
a2VTdHlsZSgpLCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSkpOwogfQogCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0
IHdpZHRoLCBmbG9hdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogI2lmIFBMQVRGT1JNKFdQRSkg
fHwgUExBVEZPUk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0
aCwgY29sb3IpOwpAQCAtNzA3LDEyICs3ODQsMTIgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdAog
ICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8RHJhd0ZvY3VzUmluZz4ocGF0aCwgd2lkdGgsIGNvbG9yKSk7CiAjZW5k
aWYKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAjaWYgUExB
VEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3Vz
KCp0aGlzLCByZWN0cywgY29sb3IpOwpAQCAtNzMyLDM2OCArODA5LDE0NiBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHJlY3RzLCBmbG9hdAogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0ZvY3VzUmluZz4ocmVjdHMsIHdpZHRo
LCBjb2xvcikpOwogI2VuZGlmCi0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci19Ci0KLXZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2ZSgpCi17Ci0gICAgc3RydWN0IFNhdmUgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKLSAgICAgICAgdmlydHVhbCB+
U2F2ZSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5zYXZlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiU2F2ZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIEdyYXBo
aWNzQ29udGV4dDo6c2F2ZSgpOwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2F2ZT4oKSk7
Ci0KLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVTdGFjay5sYXN0KCkpOwogfQogCi12
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJlc3RvcmUoKQordm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc3RydWN0IFJlc3RvcmUgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKLSAgICAgICAgdmlydHVhbCB+UmVz
dG9yZSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5yZXN0b3JlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiUmVzdG9yZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IGlmICghc3RhY2tTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpOwotCi0gICAgaWYgKG1fc3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJlc3RvcmU+KCkpOwotCi0gICAg
bV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICBpZiAobV9zdGF0ZVN0YWNrLmlzRW1wdHko
KSkKLSAgICAgICAgbV9zdGF0ZVN0YWNrLmNsZWFyKCk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBs
ZW1lbnRlZC4KKyAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVz
dGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc3RydWN0
IFRyYW5zbGF0ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0
LCBmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5UcmFuc2xhdGUoKSA9IGRlZmF1bHQ7CisgICAg
c3RydWN0IERyYXdOYXRpdmVJbWFnZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBGbG9hdFJlY3QsIEZsb2F0UmVjdCwgSW1h
Z2VQYWludGluZ09wdGlvbnMsIGZsb2F0LCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICAgICAg
dmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhl
Y3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAg
IHsKLSAgICAgICAgICAgIENhaXJvOjp0cmFuc2xhdGUoY29udGV4dEZvclJlcGxheShyZXBsYXll
ciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZHJhd1BsYXRmb3Jt
SW1hZ2UoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4o
KSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0g
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlRyYW5zbGF0ZTw+XG4iOworICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJEcmF3TmF0aXZlSW1hZ2U8PlxuIjsKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxUcmFuc2xhdGU+KHgsIHkpKTsKLQotICAgIHsK
LSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0
ZS5jdG0udHJhbnNsYXRlKHgsIHkpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0OwotICAg
ICAgICB0LnRyYW5zbGF0ZSgteCwgLXkpOwotICAgICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gdCAq
IHN0YXRlLmN0bUludmVyc2U7Ci0gICAgfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUltYWdlPihuYXRpdmVJbWFnZS5wbGF0Zm9y
bUltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhvcHRpb25z
LCBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpLCBhbHBoYSgpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUoKSkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyb3RhdGUo
ZmxvYXQgYW5nbGVJblJhZGlhbnMpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQ
YXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc3RydWN0IFJvdGF0
ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0PiB7Ci0gICAg
ICAgIHZpcnR1YWwgflJvdGF0ZSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6cm90YXRlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8
MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiUm90YXRlPD5c
biI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Um90YXRl
PihhbmdsZUluUmFkaWFucykpOwotCi0gICAgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1fc3Rh
dGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmN0bS5yb3RhdGUoYW5nbGVJblJhZGlhbnMp
OwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0OwotICAgICAgICB0LnJvdGF0ZShhbmdsZUlu
UmFkaWFucyk7Ci0gICAgICAgIHN0YXRlLmN0bUludmVyc2UgPSB0ICogc3RhdGUuY3RtSW52ZXJz
ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2NhbGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplKQotewotICAgIHN0cnVjdCBTY2FsZSBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0U2l6ZT4gewotICAgICAgICB2aXJ0dWFsIH5TY2Fs
ZSgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd1BhdHRlcm4gZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgSW50U2l6ZSwg
RmxvYXRSZWN0LCBGbG9hdFJlY3QsIEFmZmluZVRyYW5zZm9ybSwgRmxvYXRQb2ludCwgSW1hZ2VQ
YWludGluZ09wdGlvbnM+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd1BhdHRlcm4oKSA9IGRlZmF1
bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNjYWxlKGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZHJh
d1BhdHRlcm4oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8
MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCksIGFyZzw2PigpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTY2FsZTw+XG4iOworICAg
ICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3UGF0dGVybjw+XG4iOwogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNjYWxlPihzaXplKSk7Ci0KLSAgICB7
Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAgc3Rh
dGUuY3RtLnNjYWxlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIHQ7Ci0gICAgICAgIHQuc2NhbGUoMSAvIHNpemUud2lkdGgoKSwgMSAvIHNp
emUuaGVpZ2h0KCkpOwotICAgICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gdCAqIHN0YXRlLmN0bUlu
dmVyc2U7Ci0gICAgfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RHJhd1BhdHRlcm4+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgbmF0aXZl
SW1hZ2Uuc2l6ZSgpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBvcHRpb25zKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQorI2lmIEVOQUJMRShWSURFTykKK3Zv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
JiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgc3RydWN0IENv
bmNhdENUTSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEFmZmluZVRy
YW5zZm9ybT4gewotICAgICAgICB2aXJ0dWFsIH5Db25jYXRDVE0oKSA9IGRlZmF1bHQ7Ci0KLSAg
ICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3Zl
cnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNvbmNhdENUTShjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkNvbmNhdENUTTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGF1
dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgaWYgKCFpbnZlcnNlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDb25jYXRDVE0+KHRyYW5z
Zm9ybSkpOwotCi0gICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIHN0
YXRlLmN0bSAqPSB0cmFuc2Zvcm07Ci0gICAgc3RhdGUuY3RtSW52ZXJzZSA9IGludmVyc2UudmFs
dWUoKSAqIHN0YXRlLmN0bUludmVyc2U7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4K
KyAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0
aW9uKTsKIH0KKyNlbmRpZgogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmcpCiB7Ci0gICAgc3RydWN0IFNldENUTSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4gewotICAgICAgICB2aXJ0dWFsIH5TZXRD
VE0oKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IERyYXdHbHlwaHMgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlN0cm9rZVNv
dXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlLCBGbG9hdFBvaW50LCBSZWZQdHI8Y2Fpcm9fc2NhbGVk
X2ZvbnRfdD4sIGZsb2F0LCBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4sIGZsb2F0LCBUZXh0RHJhd2lu
Z01vZGVGbGFncywgZmxvYXQsIEZsb2F0U2l6ZSwgQ29sb3IsIEZvbnRTbW9vdGhpbmdNb2RlPiB7
CisgICAgICAgIHZpcnR1YWwgfkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAg
ICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0oY29udGV4dEZvclJlcGxh
eShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3R2x5cGhzKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBh
cmc8Mz4oKSwgYXJnPDQ+KCkuZ2V0KCksCisgICAgICAgICAgICAgICAgYXJnPDU+KCksIGFyZzw2
PigpLCBhcmc8Nz4oKSwgYXJnPDg+KCksIGFyZzw5PigpLCBhcmc8MTA+KCksIGFyZzwxMT4oKSwg
YXJnPDEyPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRD
VE08PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0dseXBoczw+XG4iOwog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNl
KCk7Ci0gICAgaWYgKCFpbnZlcnNlKQorICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXpl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldENUTT4o
dHJhbnNmb3JtKSk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0g
ICAgc3RhdGUuY3RtID0gdHJhbnNmb3JtOwotICAgIHN0YXRlLmN0bUludmVyc2UgPSBpbnZlcnNl
LnZhbHVlKCk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpn
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCkuY3RtOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBz
dHJ1Y3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0
aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fp
cm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFy
ZzwwPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJCZWdpblRy
YW5zcGFyZW5jeUxheWVyPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotCi0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4ob3BhY2l0eSkpOwotfQotCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBz
dHJ1Y3QgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTw+IHsKLSAgICAgICAgdmlydHVhbCB+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9
IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmVuZFRy
YW5zcGFyZW5jeUxheWVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewot
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJFbmRUcmFuc3BhcmVuY3lMYXllcjw+XG4iOwot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEVuZFRyYW5zcGFyZW5jeUxheWVy
PigpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgQ2xpcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4gewotICAgICAgICB2aXJ0dWFsIH5DbGlwKCkgPSBk
ZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlwKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXA+KHJlY3QpKTsKLQorICAgIGF1dG8geE9mZnNldCA9
IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5
cGhzKTsKICAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsK
LSAgICAgICAgc3RhdGUuY2xpcEJvdW5kcy5pbnRlcnNlY3Qoc3RhdGUuY3RtLm1hcFJlY3QocmVj
dCkpOwotICAgIH0KLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4gewotICAgICAgICB2aXJ0dWFs
IH5DbGlwT3V0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+KHJlY3Qp
KTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgm
IHBhdGgpCi17Ci0gICAgc3RydWN0IENsaXBPdXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxQYXRoPiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1
bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBPdXQoY29u
dGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgYXV0byB5T2Zmc2V0
ID0gcG9pbnQueSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsg
KytpKSB7CisgICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ldLCB4T2Zmc2V0
LCB5T2Zmc2V0IH07CisgICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7
CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBv
dmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBPdXQ8
PlxuIjsKLSAgICAgICAgfQotICAgIH07CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBPdXQ+KHBhdGgpKTsKKyAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fp
cm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKKyAgICAg
ICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCisgICAgICAgIFJlZlB0cjxjYWly
b19zY2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCisgICAg
ICAgIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBXVEZNb3ZlKGNhaXJvR2x5cGhzKSwgeE9m
ZnNldCwgdGV4dERyYXdpbmdNb2RlKCksCisgICAgICAgIHN0cm9rZVRoaWNrbmVzcygpLCBzaGFk
b3dPZmZzZXQoKSwgc2hhZG93Q29sb3IoKSwgZm9udFNtb290aGluZykpOwogfQogCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxl
IGNsaXBSdWxlKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0
eWxlKQogewotICAgIHN0cnVjdCBDbGlwUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPFBhdGgsIFdpbmRSdWxlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBQYXRo
KCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERhc2hBcnJheSwg
Ym9vbCwgYm9vbCwgQ29sb3I+IHsKKyAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgp
ID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xp
cFBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7Cisg
ICAgICAgICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBh
cmc8NT4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFBh
dGg8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0xpbmVzRm9yVGV4dDw+
XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBQ
YXRoPihwYXRoLCBjbGlwUnVsZSkpOwotCi0gICAgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1f
c3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHN0
YXRlLmN0bS5tYXBSZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKSk7Ci0gICAgfQotfQorICAg
IGlmICh3aWR0aHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLUludFJlY3QgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3RhdGUg
PSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0YXRl
LmN0bUludmVyc2UubWFwUmVjdChzdGF0ZS5jbGlwQm91bmRzKSk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2lu
dCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHJva2VD
b2xvcigpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3Zv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAg
IHN0cnVjdCBDbGlwVG9JbWFnZUJ1ZmZlciBmaW5hbDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdD4gewotICAgICAgICB2
aXJ0dWFsIH5DbGlwVG9JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEZsb2F0UmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHsKKyAgICAgICAgdmlydHVh
bCB+RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAg
ICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICBD
YWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCksIGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJDbGlwVG9JbWFnZUJ1ZmZlcjw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPD5cbiI7CiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChh
dXRvIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpCi0g
ICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBUb0ltYWdlQnVmZmVyPihuYXRpdmVJbWFn
ZS0+cGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCi17CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyPihyZWN0LCBzdHlsZSkpOwogfQogCiBGbG9hdFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNz
Q29udGV4dDo6Um91bmRpbmdNb2RlKQpAQCAtMTEwNiwxMiArOTYxLDQgQEAgdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjphcHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50aW5nT3BlcmF0aW9u
PiYmIGNvbW1hbmQKICAgICBtX2NvbW1hbmRMaXN0LmFwcGVuZChXVEZNb3ZlKGNvbW1hbmQpKTsK
IH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cGFp
bnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLSAgICBHcmFwaGlj
c0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLX0KLSNl
bmRpZgotCiB9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJv
L05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKaW5kZXggODNjNmQyN2Q2ZWEzNmM3OWJl
YmQ3ODI1Zjk5YjdjNDM5MDhlZTU0Yi4uYWY0NzhmYzQzN2U4YjRlZTk3YTdjMDFiNzdiYzIyYTAz
NTQ0Nzk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5M
LgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNzggKzQyLDU4IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICB2b2lkIGRpZFVwZGF0
ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOworICAgIHZvaWQg
c2F2ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOworICAgIHZvaWQg
YXBwbHlTdGF0ZUNoYW5nZXMoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
IG92ZXJyaWRlOworCisgICAgdm9pZCBjbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92
ZXJyaWRlOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6
OldpbmRSdWxlKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OlBhdGgm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVm
ZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNl
dExpbmVDYXAoV2ViQ29yZTo6TGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lRGFz
aChjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRMaW5lSm9pbihXZWJDb3JlOjpMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRNaXRl
ckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6R3JhZGllbnQmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6
OkJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0
IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJy
aWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBX
ZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92
ZXJyaWRlOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBXZWJDb3JlOjpQ
YXRoJikgb3ZlcnJpZGU7CisKICAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFdl
YkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBXZWJD
b3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgV2ViQ29y
ZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3Jl
OjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmLCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBzdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6TmF0aXZlSW1hZ2UmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oV2ViQ29yZTo6TmF0aXZlSW1hZ2UmLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09w
dGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFdlYkNvcmU6
OlBhdGgmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgV2ViQ29y
ZTo6U3Ryb2tlU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSkgb3ZlcnJpZGU7CisKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFdl
YkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJl
Y3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcm90
YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSBnZXRDVE0oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2
aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92
ZXJyaWRlOwotICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZl
cihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdl
KFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0
ZXJuKFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNv
bnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CiAjaWYgRU5BQkxF
KFZJREVPKQogICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVy
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7CiAjZW5k
aWYKIAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViQ29yZTo6Rm9u
dFNtb290aGluZ01vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3JlOjpE
YXNoQXJyYXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKIAogICAgIFdl
YkNvcmU6OkZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsK
IAogICAgIHZvaWQgYXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJik7
CiAgICAgUGFpbnRpbmdPcGVyYXRpb25zJiBtX2NvbW1hbmRMaXN0OwotCi0gICAgc3RydWN0IFN0
YXRlIHsKLSAgICAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bTsKLSAgICAgICAgV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bUludmVyc2U7Ci0gICAgICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBjbGlwQm91bmRzOwotICAgIH07Ci0gICAgVmVjdG9yPFN0YXRlLCAzMj4gbV9zdGF0ZVN0
YWNrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2lu
LmNwcAppbmRleCA1ZDY2ZWI3MmFkMTNjMjRkYWMwOTVhOTQ1ZjYxNGE2ZjU1MjIyNDkyLi4wN2Mw
MzM5ZjU4YmYzMmM3ZDVmOGY4MTdkYmRkM2ViN2YxZWU3MzY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29y
ZGVyV2luLmNwcApAQCAtMjksMTcgKzI5LDE4IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgog
I2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgb3duZXIsIERlY29uc3Ry
dWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0KQotICAgIDogbV9vd25lcihvd25l
cikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRG
cm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25Db250ZXh0KGRlc3RpbmF0aW9uQ29udGV4
dCkKIHsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgbV9v
d25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUds
eXBocywgc3RhcnRQb2ludCwgbV9zbW9vdGhpbmdNb2RlKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29u
dGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUds
eXBocywgc3RhcnRQb2ludCwgbV9zbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENHV2luLmNwcAppbmRleCBjMTllNzQxNTU3YzMwOGM5NDFlNGVmNzE1ZTNkYjQ2NTk0ZDE4NWI2
Li4yY2Q3ODY1ZWNhODI5ZWI0NTc4MGU5ZmIwZTcyNDdhMzcxMmJjYzM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcApAQCAtMTc2
LDI1ICsxNzYsMjIgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwKICAgICBDR0NvbnRleHRTZXRG
b250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkpOwogICAgIEZvbnRDYXNjYWRl
OjpzZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUoY2dDb250ZXh0LCBmb250LnBsYXRmb3Jt
RGF0YSgpLmlzU3lzdGVtRm9udCgpLCBmYWxzZSwgZm9udC5wbGF0Zm9ybURhdGEoKS51c2VHREko
KSk7CiAKLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7
Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LmdldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAgICBhdXRvIGRyb3BTaGFk
b3cgPSBncmFwaGljc0NvbnRleHQuZHJvcFNoYWRvdygpOwogCi0gICAgYm9vbCBoYXNTaW1wbGVT
aGFkb3cgPSBncmFwaGljc0NvbnRleHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdN
b2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAoIWdy
YXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGdyYXBoaWNzQ29udGV4
dC5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsKKyAgICBib29s
IGhhc1NpbXBsZVNoYWRvdyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBU
ZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgZHJvcFNoYWRvdy5jb2xvci5pc1ZhbGlkKCkgJiYgIWRy
b3BTaGFkb3cuYmx1clJhZGl1cyAmJiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcygpIHx8IGdyYXBoaWNzQ29udGV4dC5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xh
dGlvbk9yRmxpcHBlZCgpKTsKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7CiAgICAgICAgIC8v
IFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cg
c2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvciA9
IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENv
bG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFs
cGhhQXNGbG9hdCgpKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gZHJvcFNoYWRv
dy5jb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0
KCkpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xv
cik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0
LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgZHJvcFNo
YWRvdy5vZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3Jpbmcg
dHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlw
IHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBw
b2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0
WSA9IHBvaW50LnkoKSArIGRyb3BTaGFkb3cub2Zmc2V0LmhlaWdodCgpICogKGdyYXBoaWNzQ29u
dGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKICAgICAgICAgQ0dDb250
ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKTsK
ICAgICAgICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjZ0NvbnRleHQsIGdseXBo
cywgYWR2YW5jZXMsIG51bUdseXBocyk7CiAgICAgICAgIGlmIChmb250LnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKSkgewotICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4
dCwgcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCkgKyBmb250LnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKSwgcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKKyAgICAgICAgICAg
IENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSArIGRyb3BTaGFk
b3cub2Zmc2V0LndpZHRoKCkgKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgcG9pbnQueSgp
ICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBo
cyk7CiAgICAgICAgIH0KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihmaWxs
Q29sb3IpOwpAQCAtMjA4LDcgKzIwNSw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMo
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsCiAgICAg
fQogCiAgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICAgICBGb250Q2Fz
Y2FkZTo6c2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwgb2xkRm9udFNtb290aGluZ1N0
eWxlKTsKICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNnQ29udGV4dCwgc2F2ZWRNYXRyaXgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlLmNwcAppbmRleCAzY2Y3NDYwYzgwZTNiZTFkNWJhM2YwY2VkN2MxOWIyNWRm
MjlhYmYyLi43ODVlOTRiZWNmMDdjZDRhODRjOWMzNGQ5Y2VjYzgzODU3ZTA2OTlmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVv
U291cmNlLmNwcApAQCAtMjkyLDEyICsyOTIsMTIgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZTo6ZHJhd0JveGVzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBGbG9hdFJlY3Qg
ZnJhbWVSZWN0KDIsIDIsIHNpemUud2lkdGgoKSAtIDMsIHNpemUuaGVpZ2h0KCkgLSAzKTsKICAg
ICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSk7CiAgICAgY29udGV4dC5zZXRT
dHJva2VUaGlja25lc3MoMyk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaChtX2Rhc2hXaWR0aHMs
IDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBtX2Rhc2hXaWR0aHMsIDAgfSk7CiAgICAg
bV9wYXRoLmFkZFJlY3QoZnJhbWVSZWN0KTsKICAgICBtX3BhdGguY2xvc2VTdWJwYXRoKCk7CiAg
ICAgY29udGV4dC5zdHJva2VQYXRoKG1fcGF0aCk7CiAKLSAgICBjb250ZXh0LnNldExpbmVEYXNo
KERhc2hBcnJheSgpLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsgeyB9LCAwIH0pOwog
ICAgIG1fcGF0aC5jbGVhcigpOwogICAgIG1fcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCgwLCBib3hU
b3AgKyBib3hTaXplKSk7CiAgICAgbV9wYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHNpemUud2lk
dGgoKSwgYm94VG9wICsgYm94U2l6ZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IDFiMTgyYTFkMzZiN2NmYWFhMGIx
NjlkMGQ4Yzg1NDM1ZjQzYjc2N2QuLmU4MGYyZWU4OTE5MzkxNDQxOGU4NzhiZjBhNGEyODQwZWU2
ODlkMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFp
bnRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBh
aW50Q2hlY2tlci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRDaGVj
a2VyOjpxdWFsaWZpZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiAg
ICAgZnJhbWVWaWV3LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBv
c2l0aW5nTGF5ZXJzKTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHModHJ1
ZSk7CiAKLSAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNoZWNrZXJDb250ZXh0KE51bGxHcmFwaGlj
c0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVudGZ1bFBh
aW50KTsKKyAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNoZWNrZXJDb250ZXh0KGZyYW1lVmlldy5y
ZW5kZXJWaWV3KCktPmRvY3VtZW50UmVjdCgpLCBOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludElu
dmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJhbWVW
aWV3LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVu
dFJlY3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xkRW50
aXJlQ29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2Fj
eUVsbGlwc2lzQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNp
c0JveC5jcHAKaW5kZXggYzlhYjIxNzYxNDFmYTdhMzM5YTIwOTdiM2FiZjk3NjUwNzg3ZTRmMS4u
NGJmZjhkMDA4MzkyNTE0Y2JlNjJjYTk1ZDRlNzQzZmMxOTdmMDE5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCkBAIC01NSw3ICs1NSw3IEBA
IHZvaWQgTGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgYm9vbCBzZXRTaGFkb3cgPSBmYWxzZTsKICAg
ICBpZiAobGluZVN0eWxlLnRleHRTaGFkb3coKSkgewogICAgICAgICBDb2xvciBzaGFkb3dDb2xv
ciA9IGxpbmVTdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihsaW5lU3R5bGUudGV4dFNo
YWRvdygpLT5jb2xvcigpKTsKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coTGF5b3V0U2l6ZShs
aW5lU3R5bGUudGV4dFNoYWRvdygpLT54KCkudmFsdWUoKSwgbGluZVN0eWxlLnRleHRTaGFkb3co
KS0+eSgpLnZhbHVlKCkpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT5yYWRpdXMoKS52YWx1ZSgp
LCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IExheW91dFNp
emUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgpLnZhbHVlKCksIGxpbmVTdHlsZS50ZXh0U2hh
ZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+cmFkaXVzKCkudmFs
dWUoKSwgc2hhZG93Q29sb3IgfSk7CiAgICAgICAgIHNldFNoYWRvdyA9IHRydWU7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAppbmRleCAyNGM4MmM5ZDZiZDQzZjc0YmEwNWFiNWFjNzY3OTNkNzVkMTVlNTc3Li44ZDk3ZDI1
NzFlMjQ1M2RmMTkyOGJkZTZjNzdjNzYzMTVmYmM4ODJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTcwNSw3ICs3MDUsNyBA
QCBzdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdAogICAgICAgICBib3hTaGFkb3cgPSBib3hTaGFkb3ct
Pm5leHQoKTsKIAogICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoYm94U2hhZG93LT54KCkudmFs
dWUoKSwgYm94U2hhZG93LT55KCkudmFsdWUoKSk7Ci0gICAgY29udGV4dC5zZXRTaGFkb3coc2hh
ZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHN0eWxlLmNvbG9yQnlBcHBs
eWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRC
b3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNoYWRvd09mZnNldCwgYm94
U2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRl
cihib3hTaGFkb3ctPmNvbG9yKCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBT
aGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwog
fQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hvb3NlSW50
ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJbWFnZSYgaW1hZ2Us
IGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpAQCAtMjA4Nyw3ICsy
MDg3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aChH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgYXV0byBsaW5lRGFzaCA9IERhc2hBcnJheTo6ZnJvbShkYXNoTGVuZ3RoLCBnYXBMZW5n
dGgpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKFdURk1vdmUobGlu
ZURhc2gpLCBkYXNoTGVuZ3RoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5l
RGFzaCh7IFdURk1vdmUobGluZURhc2gpLCBkYXNoTGVuZ3RoIH0pOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICAvLyBGSVhNRTogc3Ryb2tpbmcgdGhlIGJvcmRlciBwYXRoIGNhdXNlcyBp
c3N1ZXMgd2l0aCB0aWdodCBjb3JuZXJzOgpAQCAtMjQ1Niw3ICsyNDU2LDcgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIEZsb2F0UG9pbnQgc25hcHBlZFNoYWRvd09yaWdp
biA9IEZsb2F0UG9pbnQocm91bmRUb0RldmljZVBpeGVsKHNoYWRvd1JlY3RPcmlnaW4ueCgpLCBk
ZXZpY2VTY2FsZUZhY3RvciksIHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dSZWN0T3JpZ2luLnko
KSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBzbmFwcGVkU2hh
ZG93T2Zmc2V0ID0gc25hcHBlZFNoYWRvd09yaWdpbiAtIHBpeGVsU25hcHBlZEZpbGxSZWN0LnJl
Y3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVk
U2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0
Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNuYXBwZWRT
aGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRC
b3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQgfSk7CiAKICAgICAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5uZWNlc3NhcnkgdG8g
Y2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAgLTI1NTgsNyArMjU1
OCw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBzaGFkb3dPZmZzZXQg
LT0gZXh0cmFPZmZzZXQ7CiAKICAgICAgICAgICAgIGF1dG8gc25hcHBlZFNoYWRvd09mZnNldCA9
IHJvdW5kU2l6ZVRvRGV2aWNlUGl4ZWxzKHNoYWRvd09mZnNldCwgZGV2aWNlU2NhbGVGYWN0b3Ip
OwotICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hh
ZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAg
ICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFk
b3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFk
b3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwogICAg
ICAgICAgICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShwaXhlbFNuYXBwZWRPdXRl
clJlY3QsIHBpeGVsU25hcHBlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggODUwYmRlNDhl
NDkyOGU4NmRjMTc2YjYyMzIxZmVlZDliNjg2YzNjZC4uOGNmOTYxZTBiYzIzNjRlOTYyY2RhODgx
Zjg1OWU0ZjMxYTNjOTgzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCkBAIC0yMjUzLDE0ICsyMjUzLDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQCiAjaWYg
RU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgYm9vbCB1c2VzQ29tcG9zaXRlT3BlcmF0
aW9uID0gaGFzQmxlbmRNb2RlKCkgJiYgIShyZW5kZXJlcigpLmlzTGVnYWN5U1ZHUm9vdCgpICYm
IHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1JlbmRlclZpZXdMYXllcigpKTsKICAgICAgICAgaWYg
KHVzZXNDb21wb3NpdGVPcGVyYXRpb24pCi0gICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUoKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0LmNvbXBvc2l0ZU9w
ZXJhdGlvbigpLCBibGVuZE1vZGUoKSB9KTsKICNlbmRpZgogCiAgICAgICAgIGNvbnRleHQuYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihyZW5kZXJlcigpLm9wYWNpdHkoKSk7CiAKICNpZiBFTkFCTEUo
Q1NTX0NPTVBPU0lUSU5HKQogICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZU9wZXJhdGlvbikKLSAg
ICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnRleHQuY29tcG9zaXRl
T3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlTW9kZSh7IGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6
Tm9ybWFsIH0pOwogI2VuZGlmCiAKICNpZmRlZiBSRVZFQUxfVFJBTlNQQVJFTkNZX0xBWUVSUwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRl
eCA1Zjk4YjkxMjRhMzQ5YWM3NTU3OWY3MTEzNWVlMGYzOGFiYjRmMTJkLi4zZTJlNmJmMWRlNWQ1
NGViMzhkOTI3YTUxZjA3Yzg5MTBhZTZjMWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMTgzMSw3ICsxODMxLDkgQEAgdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKCkKICAgICB9OwogCiAgICAgYXV0
byB1cGRhdGVFdmVudFJlZ2lvbkZvckxheWVyID0gWyZdKEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNz
TGF5ZXIpIHsKLSAgICAgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBudWxsQ29udGV4dChOdWxsR3Jh
cGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgICAgICBh
dXRvIGRpcnR5UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KGdyYXBoaWNzTGF5ZXIub2Zmc2V0
RnJvbVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNpemUoKSk7CisgICAgCisgICAgICAgIE51
bGxHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQoZGlydHlSZWN0LCBOdWxsR3JhcGhpY3NDb250
ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOwogICAgICAgICBFdmVudFJlZ2lv
biBldmVudFJlZ2lvbjsKICNpZiBFTkFCTEUoRURJVEFCTEVfUkVHSU9OKQogICAgICAgICBpZiAo
cmVuZGVyZXIoKS5wYWdlKCkuc2hvdWxkQnVpbGRFZGl0YWJsZVJlZ2lvbigpKQpAQCAtMTg1Myw4
ICsxODU1LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKCkK
ICAgICAgICAgICAgIGV2ZW50UmVnaW9uQ29udGV4dC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KEZs
b2F0UmVjdCgtbGF5ZXJPZmZzZXQsIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKSksIHJlbmRlcmVyKCku
c3R5bGUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGRpcnR5UmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoZ3JhcGhpY3NMYXllci5vZmZzZXRGcm9tUmVu
ZGVyZXIoKSksIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKSk7Ci0gICAgICAgIHBhaW50SW50b0xheWVy
KCZncmFwaGljc0xheWVyLCBudWxsQ29udGV4dCwgZGlydHlSZWN0LCB7IH0sICZldmVudFJlZ2lv
bkNvbnRleHQpOworICAgICAgICBwYWludEludG9MYXllcigmZ3JhcGhpY3NMYXllciwgbnVsbENv
bnRleHQsIGVuY2xvc2luZ0ludFJlY3QoZGlydHlSZWN0KSwgeyB9LCAmZXZlbnRSZWdpb25Db250
ZXh0KTsKIAogICAgICAgICBldmVudFJlZ2lvbi50cmFuc2xhdGUodG9JbnRTaXplKGxheWVyT2Zm
c2V0KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRl
eCAzMGNkMzQzZWE3ZGY5MTY4Y2MzY2RlNDdkYmVmOGY3NTllODhmNzMxLi4yNTZmYzc0OTU2ZGEz
Mzg2YTU0ZDM1MmRlMTFiNmZmNzM2NjlhMWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCkBAIC02MDUsNyArNjA1LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRUZXh0RmllbGRJbm5lclNoYWRvdyhjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QKICAgICBjb25zdCBGbG9hdFNpemUgaW5uZXJTaGFkb3dPZmZzZXQgeyAwLCA1IH07CiAg
ICAgY29uc3RleHByIGF1dG8gaW5uZXJTaGFkb3dCbHVyID0gMTAuMGY7CiAgICAgYXV0byBpbm5l
clNoYWRvd0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIDAuMDRmIH07Ci0gICAg
Y29udGV4dC5zZXRTaGFkb3coaW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgaW5u
ZXJTaGFkb3dDb2xvcik7CisgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgaW5uZXJTaGFkb3dP
ZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgaW5uZXJTaGFkb3dDb2xvciB9KTsKICAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCBpbm5lclNoYWRvd1BhdGg7
CkBAIC0yMDgwLDcgKzIwODAsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludFN5c3RlbVBy
ZXZpZXdCYWRnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IFBhaW50SW5mbyYgcGFpbgogICAgIC8vIFVz
ZSB0aGUgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9uLCBiZWNhdXNlIGl0IGNhbGN1bGF0ZXMgdGhl
IGJsdXIgcmFkaXVzIGluIGNvbnRleHQgc3BhY2UsCiAgICAgLy8gcmF0aGVyIHRoYW4gc2NyZWVu
IHNwYWNlLgogICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0gQ29sb3I6OmJsYWNrLmNv
bG9yV2l0aEFscGhhQnl0ZSgyNik7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhGbG9h
dFNpemUgeyB9LCAxNiwgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXREcm9w
U2hhZG93KHsgRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yIH0pOwogCiAgICAgLy8gVGhl
IGNpcmNsZSBtdXN0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCB2YWx1ZSBvZiAxIGZvciB0aGUgc2hh
ZG93IGNvbG9yIHRvIGFwcGVhci4KICAgICBDR0Zsb2F0IGNpcmNsZUNvbG9yQ29tcG9uZW50c1s0
XSA9IHsgMCwgMCwgMCwgMSB9OwpAQCAtMjI3Myw3ICsyMjczLDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRDaGVja2JveFJhZGlvSW5uZXJTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGMKIAogICAgIGJvb2wgaXNFbXB0eSA9ICFzdGF0ZXMuY29udGFpbnNBbnkoeyBDb250
cm9sU3RhdGVzOjpTdGF0ZXM6OkNoZWNrZWQsIENvbnRyb2xTdGF0ZXM6OlN0YXRlczo6SW5kZXRl
cm1pbmF0ZSB9KTsKICAgICBhdXRvIGZpcnN0U2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+
IHsgMCwgMCwgMCwgaXNFbXB0eSA/IDAuMDVmIDogMC4xZiB9OwotICAgIGNvbnRleHQuc2V0U2hh
ZG93KGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGZpcnN0U2hhZG93Q29sb3Ip
OworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNo
YWRvd0JsdXIsIGZpcnN0U2hhZG93Q29sb3IgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Io
Q29sb3I6OmJsYWNrKTsKIAogICAgIFBhdGggaW5uZXJTaGFkb3dQYXRoOwpAQCAtMjI5MCw3ICsy
MjkwLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveFJhZGlvSW5uZXJTaGFk
b3coY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGMKICAgICBjb250ZXh0LmZpbGxQYXRoKGlu
bmVyU2hhZG93UGF0aCk7CiAKICAgICBjb25zdGV4cHIgYXV0byBzZWNvbmRTaGFkb3dDb2xvciA9
IERpc3BsYXlQMzxmbG9hdD4geyAxLCAxLCAxLCAwLjVmIH07Ci0gICAgY29udGV4dC5zZXRTaGFk
b3coRmxvYXRTaXplIHsgMCwgMCB9LCAxLCBzZWNvbmRTaGFkb3dDb2xvcik7CisgICAgY29udGV4
dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplIHsgMCwgMCB9LCAxLCBzZWNvbmRTaGFkb3dDb2xv
ciB9KTsKIAogICAgIGNvbnRleHQuZmlsbFBhdGgoaW5uZXJTaGFkb3dQYXRoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAwMTBlY2JhZWQ4N2E3
M2E0MjBhZmI5N2U4ZTgwZmVhNjM3OWZlZDNlLi4xMGRjOTBlNTdlNWFlMGY0MjVhMGRhYWEzNjRm
ODE0ZTQ0OTQ5OTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCkBAIC0yODE2LDcgKzI4MTYsNyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRQbGFj
ZWhvbGRlckJvcmRlcihjb25zdCBSZW5kZXJBdHRhY2htZW50JiBhdHRhY2htZW50LAogICAgIGNv
bnRleHQuc2V0U3Ryb2tlQ29sb3IocGxhY2Vob2xkZXJCb3JkZXJDb2xvcik7CiAgICAgY29udGV4
dC5zZXRTdHJva2VUaGlja25lc3MoYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyV2lkdGgpOwog
ICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoRGFzaGVkU3Ryb2tlKTsKLSAgICBjb250ZXh0LnNl
dExpbmVEYXNoKHthdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNoTGVuZ3RofSwgMCk7Cisg
ICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IHsgYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyRGFz
aExlbmd0aCB9LCAwIH0pOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChib3JkZXJQYXRoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9uUGFp
bnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVy
LmNwcAppbmRleCA2NzU1NjhhZmY2MTE4ZjAxM2JkMWQ0ZjU1YTZjMzY0ZmE4YWYzOGU4Li44MzA5
YjJmOGQ0YTMxZmEwM2IxYWJmODQzOWRhMGYzZWYxNjI4NDBjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNwcApAQCAtMjcxLDcgKzI3
MSw3IEBAIHZvaWQgVGV4dERlY29yYXRpb25QYWludGVyOjpwYWludEJhY2tncm91bmREZWNvcmF0
aW9ucyhjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjCiAgICAgICAgICAgICBDb2xvciBzaGFkb3dD
b2xvciA9IHNoYWRvdy0+Y29sb3IoKTsKICAgICAgICAgICAgIGlmIChtX3NoYWRvd0NvbG9yRmls
dGVyKQogICAgICAgICAgICAgICAgIG1fc2hhZG93Q29sb3JGaWx0ZXItPnRyYW5zZm9ybUNvbG9y
KHNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIG1fY29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXpl
KHNoYWRvd1gsIHNoYWRvd1kgLSBleHRyYU9mZnNldCksIHNoYWRvdy0+cmFkaXVzKCkudmFsdWUo
KSwgc2hhZG93Q29sb3IpOworICAgICAgICAgICAgbV9jb250ZXh0LnNldERyb3BTaGFkb3coeyBG
bG9hdFNpemUoc2hhZG93WCwgc2hhZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5yYWRpdXMo
KS52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsKICAgICAgICAgICAgIHNoYWRvdyA9IHNoYWRvdy0+
bmV4dCgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIu
Y3BwCmluZGV4IDg4NWQ4MjZlZTllNzk2ZjRiNWM1YjU4MzNmNzFhMDI4YzQ1NDFhN2EuLmZlODg2
OWMxOWU1ZjhkNDNiN2ZhMTZlNDAxYjRmYmM2ZGNmN2VlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAtNzQsNyArNzQsNyBAQCBTaGFkb3dBcHBsaWVyOjpT
aGFkb3dBcHBsaWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgU2hhZG93RGF0YSog
c2hhZG93LAogICAgIH0KIAogICAgIGlmICghbV9hdm9pZERyYXdpbmdTaGFkb3cpCi0gICAgICAg
IGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNo
YWRvd0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0
LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiB9CiAKIGlubGluZSBib29s
IFNoYWRvd0FwcGxpZXI6OmlzTGFzdFNoYWRvd0l0ZXJhdGlvbigpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAppbmRleCA3ZWQ1MzdjOTI3OTM3NzBm
NDQ4OGFlMjlkZjQwNzI3ZDdlYjFhM2E5Li42YzczMGVmMDdlNDhjN2VjZjhjNDBlMzdlMDAzNDVj
ZmFiNTZjNjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1
bGF0ZVVwZGF0ZWRTdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0CiBzdGF0aWMgdm9pZCB1c2VTdHJv
a2VTdHlsZVRvRmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgaWYgKGF1dG8g
Z3JhZGllbnQgPSBjb250ZXh0LnN0cm9rZUdyYWRpZW50KCkpCi0gICAgICAgIGNvbnRleHQuc2V0
RmlsbEdyYWRpZW50KCpncmFkaWVudCwgY29udGV4dC5zdGF0ZSgpLnN0cm9rZUdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pOworICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqZ3JhZGllbnQs
IGNvbnRleHQuc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgZWxzZSBpZiAoUGF0dGVybiog
cGF0dGVybiA9IGNvbnRleHQuc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBjb250ZXh0LnNldEZp
bGxQYXR0ZXJuKCpwYXR0ZXJuKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCBjYzM4ZWM3MDMwZTYwY2UxNzU5
YjEzMjg3ZGUyNWY3M2Q1NjVjODU4Li5iNjU4NjhkMWJkMzRjOTBkNGJiZmRkNDc3YWQyYzc0Mjgy
YTA1NmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHAKQEAgLTUwMSwxMCArNTAxLDEyIEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6
YXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY2FuU2V0TGluZURhc2gpCi0gICAgICAgICAgICBj
b250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgbGVuZ3RoQ29udGV4dC52YWx1ZUZvckxlbmd0
aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zmc2V0KCkpICogc2NhbGVGYWN0b3IpOworICAgICAgICAg
ICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IFdURk1vdmUoZGFzaEFycmF5KSwgbGVuZ3RoQ29udGV4
dC52YWx1ZUZvckxlbmd0aChzdmdTdHlsZS5zdHJva2VEYXNoT2Zmc2V0KCkpICogc2NhbGVGYWN0
b3IgfSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUo
U29saWRTdHJva2UpOwogICAgIH0KKworICAgIGNvbnRleHQuYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
IH0KIAogdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjpzdHlsZUNoYW5nZWQoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDJmYjhm
MzNhODcwZGZjY2ViNjJlMTQ5NjU2YjE0NDM3MjJlYmVhMmQuLmY1NzllNWE3NWZlOTEwZjZlNWI1
OGE5YWVmYjY4MzU4OTYyMjEwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTE1LDEyICsxMTUsMTIgQEAgdm9p
ZCBTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBQYWkKICAgICAgICAgaWYgKG9wYWNpdHkgPCAxIHx8IGhhc0JsZW5k
TW9kZSB8fCBpc29sYXRlTWFza0ZvckJsZW5kaW5nIHx8IGhhc0lzb2xhdGlvbikgewogCiAgICAg
ICAgICAgICBpZiAoaGFzQmxlbmRNb2RlKQotICAgICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5j
b250ZXh0KCkuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuY29t
cG9zaXRlT3BlcmF0aW9uKCksIHN0eWxlLmJsZW5kTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBt
X3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU1vZGUoeyBtX3BhaW50SW5mby0+Y29u
dGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5ibGVuZE1vZGUoKSB9KTsKIAogICAg
ICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpOwogCiAgICAgICAgICAgICBpZiAoaGFzQmxlbmRNb2RlKQotICAgICAgICAgICAgICAg
IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGFpbnRJbmZv
LT5jb250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAg
ICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU1vZGUoeyBt
X3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5v
cm1hbCB9KTsKIAogICAgICAgICAgICAgbV9yZW5kZXJpbmdGbGFncyB8PSBFbmRPcGFjaXR5TGF5
ZXI7CiAgICAgICAgIH0KQEAgLTI3Myw3ICsyNzMsNyBAQCBib29sIFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlckZvcmVncm91bmQoUmVmUHRyPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIpCiAK
ICAgICAvLyBJbnZhbGlkYXRlIGFuIGV4aXN0aW5nIGJ1ZmZlciBpZiB0aGUgc2NhbGUgaXMgbm90
IGNvcnJlY3QuCiAgICAgaWYgKGltYWdlQnVmZmVyKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTShHcmFwaGljc0NvbnRl
eHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRleHQoKS5nZXRDVE0oKTsKICAgICAgICAg
SW50U2l6ZSBleHBhbmRlZEJvdW5kaW5nQm94ID0gZXhwYW5kZWRJbnRTaXplKGJvdW5kaW5nQm94
LnNpemUoKSk7CiAgICAgICAgIEludFNpemUgYnVmZmVyU2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGNl
aWwoZXhwYW5kZWRCb3VuZGluZ0JveC53aWR0aCgpICogdHJhbnNmb3JtLnhTY2FsZSgpKSksIHN0
YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94LmhlaWdodCgpICogdHJhbnNm
b3JtLnlTY2FsZSgpKSkpOwogICAgICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBpbWFnZUJ1ZmZlci0+
YmFja2VuZFNpemUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmlu
ZGV4IDRkZDdmODBlMzc3Nzk4N2RjYjcwYzFhM2M4YTg3Y2Q4YTRmZDZmYjkuLmNkODhhZGYwOGRk
YTgwM2JmZDkzZjg5NTc3NDA3Njg2YWM0YzU0NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcApAQCAtMjY5LDE0ICsyNjksMTQgQEAgSW1hZ2VEcmF3UmVzdWx0IFNW
R0ltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWMKICAgICBBU1NFUlQodmlldyk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24o
b3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBj
b250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9w
dGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4dC5jbGlwKGVuY2xvc2luZ0ludFJlY3Qo
ZHN0UmVjdCkpOwogCiAgICAgZmxvYXQgYWxwaGEgPSBjb250ZXh0LmFscGhhKCk7CiAgICAgYm9v
bCBjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJlbmN5TGF5ZXIgPSBvcHRpb25zLmNvbXBvc2l0
ZU9wZXJhdG9yKCkgIT0gQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfHwgb3B0aW9ucy5i
bGVuZE1vZGUoKSAhPSBCbGVuZE1vZGU6Ok5vcm1hbCB8fCBhbHBoYSA8IDE7CiAgICAgaWYgKGNv
bXBvc2l0aW5nUmVxdWlyZXNUcmFuc3BhcmVuY3lMYXllcikgewogICAgICAgICBjb250ZXh0LmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoYWxwaGEpOwotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgQmxlbmRNb2RlOjpOb3Jt
YWwpOworICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBDb21wb3NpdGVPcGVyYXRv
cjo6U291cmNlT3ZlciwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAgICAgfQogCiAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBob25vciBvcHRpb25zLm9yaWVudGF0aW9uKCksIHNpbmNlIEltYWdlQml0
bWFwJ3MgZmxpcFkgaGFuZGxpbmcgcmVsaWVzIG9uIGl0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5k
ZXggNTQzODE4MmRkZTg3NjNlYmFkMzhmMTkyZGY3OTVhYTA2MGI2NTFiYi4uOGRhMzkwZjZkYTcw
ZTM3OTU1MGE1NzJlMDllMDg0MTE4OWMyZGRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
LmNwcApAQCAtNzQsMzEgKzc0LDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpy
ZXN0b3JlKCkKICAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpSZXN0b3JlKCkpOwogfQogCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlRyYW5zbGF0ZSh4LCB5KSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlKQotewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlJvdGF0ZShhbmdsZSkpOwotfQotCi12b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCi17
Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2NhbGUoc2NhbGUpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBj
dG0pCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6U2V0Q1RNKGN0bSkpOwotfQotCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNvbmNhdGVu
YXRlQ1RNKGN0bSkpOwotfQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldElu
bGluZUZpbGxDb2xvcihEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yJiYgaXRlbSkKIHsK
ICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwpAQCAtMTI4LDQwICsxMDMsMTUgQEAgdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3Rh
dGUmJiBpdGVtKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9OwogCi0gICAgaWYgKCFmaXhQ
YXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLnN0cm9rZVBhdHRlcm4u
Z2V0KCkpKQorICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlKCkuc3Ryb2tl
QnJ1c2goKS5wYXR0ZXJuKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWZpeFBhdHRl
cm5UaWxlSW1hZ2UoaXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkp
KQorICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlKCkuZmlsbEJydXNoKCku
cGF0dGVybigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0
ZW0pKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lQ2FwKExp
bmVDYXAgbGluZUNhcCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRMaW5lQ2Fw
KGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5l
RGFzaChEaXNwbGF5TGlzdDo6U2V0TGluZURhc2gmJiBpdGVtKQotewotICAgIGhhbmRsZUl0ZW0o
V1RGTW92ZShpdGVtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0
TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlz
dDo6U2V0TGluZUpvaW4obGluZUpvaW4pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGhhbmRsZUl0ZW0oRGlz
cGxheUxpc3Q6OlNldE1pdGVyTGltaXQobGltaXQpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlz
dDo6Q2xlYXJTaGFkb3coKSk7Ci19Ci0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlz
dDo6Q2xpcChyZWN0KSk7CkBAIC0zNzEsMTQgKzMyMSw5IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoR3JhZGllbnQoRGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0
aEdyCiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpmaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVj
dChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlz
dDo6RmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKKyAgICBoYW5kbGVJ
dGVtKERpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpKTsKIH0KIAogdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggM2Ji
YWY3NjVkMDVmNDRhYmY0ZDk2MWU3NjZjZTY1NDY5OGVkZTI5NC4uODE4ODk2NmFmZmE3MDllNmZk
MGEzMWJmY2E2YzNlNzE4NTY1YzU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC01
OSwyMCArNTksMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBzYXZlKCk7CiAgICAgdm9pZCByZXN0
b3JlKCk7Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdm9pZCBy
b3RhdGUoZmxvYXQgYW5nbGUpOwotICAgIHZvaWQgc2NhbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBzY2FsZSk7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtJik7Ci0gICAgdm9pZCBjb25jYXRlbmF0ZUNUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0mKTsKICAgICB2b2lkIHNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbENvbG9yJiYpOwogICAgIHZvaWQgc2V0SW5saW5lU3Ryb2tlQ29sb3Io
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yJiYpOwogICAgIHZvaWQg
c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKICAgICB2b2lkIHNldFN0YXRlKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRTdGF0ZSYmKTsKLSAgICB2b2lkIHNldExpbmVDYXAoV2ViQ29yZTo6TGlu
ZUNhcCk7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2gmJik7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihXZWJDb3JlOjpMaW5lSm9pbik7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCk7CiAgICAg
dm9pZCBjbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgY2xpcE91dChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpOwpAQCAtOTcsOCArODcsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2b2lkIGZpbGxSZWN0
V2l0aENvbG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
Jik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhHcmFkaWVudChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJlY3RXaXRoR3JhZGllbnQmJik7Ci0gICAgdm9pZCBmaWxsQ29tcG9zaXRlZFJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpD
b21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKLSAgICB2b2lkIGZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImLCBXZWJDb3JlOjpCbGVuZE1vZGUpOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwog
ICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
Jik7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCBmaWxsTGluZShjb25z
dCBXZWJDb3JlOjpMaW5lRGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5t
ZXNzYWdlcy5pbgppbmRleCAyODAyZmZlOGY4Mzk3YzBlZDRkZjEyMWEwMTdmZTc4MTA4ZmY2YzIw
Li40MTRjMzFhMTMyMGMwYjJlNzg2YmM4ZDlmNjU5ODEwMmQ4NzBmNDg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
ci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbgpAQCAtMjUsNDcgKzI1LDM1IEBACiBt
ZXNzYWdlcyAtPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIE5vdFJlZkNvdW50ZWQgU3RyZWFt
IHsKICAgICBTYXZlKCkKICAgICBSZXN0b3JlKCkKLSAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgU2NhbGUoV2ViQ29yZTo6RmxvYXRT
aXplIHNjYWxlKQotICAgIFNldENUTShXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3RtKQotICAg
IENvbmNhdGVuYXRlQ1RNKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG0pCisKICAgICBTZXRJ
bmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciBp
dGVtKQogICAgIFNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVTdHJva2VDb2xvciBpdGVtKQogICAgIFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlj
a25lc3MpCiAgICAgU2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlIGl0ZW0p
Ci0gICAgU2V0TGluZUNhcChlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6TGluZUNhcCBsaW5lQ2FwKQot
ICAgIFNldExpbmVEYXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCBpdGVtKQot
ICAgIFNldExpbmVKb2luKGVudW06dWludDhfdCBXZWJDb3JlOjpMaW5lSm9pbiBsaW5lSm9pbikK
LSAgICBTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotICAgIENsZWFyU2hhZG93KCkKKyNpZiBV
U0UoQ0cpCisgICAgQXBwbHlTdHJva2VQYXR0ZXJuKCkKKyAgICBBcHBseUZpbGxQYXR0ZXJuKCkK
KyNlbmRpZgorICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCisK
KyAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCisgICAgRW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKQorCiAgICAgQ2xpcChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKyAgICBD
bGlwUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGVudW06dWludDhfdCBXZWJDb3JlOjpXaW5kUnVs
ZSB3aW5kUnVsZSkKICAgICBDbGlwT3V0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotICAgIENs
aXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJl
Y3QpCiAgICAgQ2xpcE91dFRvUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCi0gICAgQ2xpcFBhdGgo
V2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1
bGUpCi0gICAgRHJhd0dseXBocyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocyBpdGVt
KQotICAgIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6
OkZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlcikK
LSAgICBEcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVj
dCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50
aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUg
aW1hZ2VTaXplLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVj
dCBzcmNSZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykK
LSAgICBEcmF3U3lzdGVtSW1hZ2UoUmVmPFdlYkNvcmU6OlN5c3RlbUltYWdlPiBzeXN0ZW1JbWFn
ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKLSAgICBEcmF3UGF0dGVybihX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJD
b3JlOjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB0aWxlUmVjdCwgV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwaGFz
ZSwgV2ViQ29yZTo6RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50
aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKLSAgICBFbmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgRHJhd1JlY3QoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLSAgICBEcmF3TGluZShXZWJD
b3JlOjpGbG9hdFBvaW50IHBvaW50MSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDIpCi0gICAg
RHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCBp
dGVtKQotICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoV2ViQ29yZTo6RmxvYXRSZWN0IHJl
Y3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLSAgICBE
cmF3RWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBEcmF3UGF0aChXZWJDb3Jl
OjpQYXRoIHBhdGgpCi0gICAgRHJhd0ZvY3VzUmluZ1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKLSAgICBEcmF3
Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorICAgIENsaXBUb0ltYWdl
QnVmZmVyKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QpCisKKyAg
ICBDbGVhclJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCisKICAgICBGaWxsUmVjdChXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKICAgICBGaWxsUmVjdFdpdGhDb2xvcihXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCiAgICAgRmlsbFJlY3RXaXRoR3JhZGll
bnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50IGl0ZW0pCi0gICAg
RmlsbENvbXBvc2l0ZWRSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpDb2xv
ciBjb2xvciwgZW51bTp1aW50OF90IFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yIG9wLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6QmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICBGaWxsUm91bmRlZFJl
Y3QoV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCByZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvciwg
ZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgRmlsbFJvdW5k
ZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29s
b3IpCiAgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3Qs
IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Qgcm91bmRlZEhvbGVSZWN0LCBXZWJDb3JlOjpDb2xv
ciBjb2xvcikKKworICAgIEZpbGxFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIEZpbGxMaW5lKHN0cnVjdCBXZWJDb3JlOjpM
aW5lRGF0YSBkYXRhKQogICAgIEZpbGxBcmMoc3RydWN0IFdlYkNvcmU6OkFyY0RhdGEgZGF0YSkK
QEAgLTczLDExICs2MSwxMCBAQCBtZXNzYWdlcyAtPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
IE5vdFJlZkNvdW50ZWQgU3RyZWFtIHsKICAgICBGaWxsQmV6aWVyQ3VydmUoc3RydWN0IFdlYkNv
cmU6OkJlemllckN1cnZlRGF0YSBkYXRhKQogI2VuZGlmCiAgICAgRmlsbFBhdGgoV2ViQ29yZTo6
UGF0aCBwYXRoKQotICAgIEZpbGxFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotICAg
IENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotICAgIFRyYW5zZm9ybVRvQ29sb3JTcGFjZShXZWJD
b3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKLSAgICBQYWludEZyYW1lRm9y
TWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6
OkZsb2F0UmVjdCBkZXN0aW5hdGlvbikKKwogICAgIFN0cm9rZVJlY3QoV2ViQ29yZTo6RmxvYXRS
ZWN0IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKworICAgIFN0cm9rZUVsbGlwc2UoV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QpCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgU3Ryb2tl
TGluZShzdHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBTdHJva2VBcmMoc3RydWN0
IFdlYkNvcmU6OkFyY0RhdGEgZGF0YSkKQEAgLTg1LDEzICs3MiwzMSBAQCBtZXNzYWdlcyAtPiBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyIE5vdFJlZkNvdW50ZWQgU3RyZWFtIHsKICAgICBTdHJv
a2VCZXppZXJDdXJ2ZShzdHJ1Y3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhIGRhdGEpCiAjZW5k
aWYKICAgICBTdHJva2VQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBTdHJva2VFbGxpcHNl
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotICAgIENsZWFyUmVjdChXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCkKLSNpZiBVU0UoQ0cpCi0gICAgQXBwbHlTdHJva2VQYXR0ZXJuKCkKLSAgICBBcHBs
eUZpbGxQYXR0ZXJuKCkKKworICAgIERyYXdSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCisgICAgRHJhd0xpbmUoV2ViQ29yZTo6RmxvYXRQb2ludCBw
b2ludDEsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQyKQorCisgICAgRHJhd0VsbGlwc2UoV2Vi
Q29yZTo6RmxvYXRSZWN0IHJlY3QpCisgICAgRHJhd1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQor
CisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKyAgICBEcmF3Rm9jdXNSaW5nUmVj
dHMoVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorCisgICAgRHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IHNv
dXJjZUltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCwg
SVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyKQorICAgIERyYXdJbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXZWJD
b3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVj
dCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCisgICAgRHJh
d1N5c3RlbUltYWdlKFJlZjxXZWJDb3JlOjpTeXN0ZW1JbWFnZT4gc3lzdGVtSW1hZ2UsIFdlYkNv
cmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QpCisgICAgRHJhd05hdGl2ZUltYWdlKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6
OkZsb2F0U2l6ZSBpbWFnZVNpemUsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29y
ZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyBvcHRpb25zKQorICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2Vi
Q29yZTo6RmxvYXRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNm
b3JtLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBoYXNlLCBXZWJDb3JlOjpGbG9hdFNpemUgc3BhY2lu
Zywgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCisjaWYgRU5B
QkxFKFZJREVPKQorICAgIFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllcklk
ZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uKQogI2Vu
ZGlmCi0gICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKworICAg
IERyYXdHbHlwaHMoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgaXRlbSkKKyAgICBE
cmF3TGluZXNGb3JUZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0IGl0
ZW0pCisgICAgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dCwgc3RydWN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorCisgICAg
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpCisgICAgVHJhbnNmb3JtVG9Db2xvclNwYWNlKFdlYkNv
cmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogICAgIEZsdXNoQ29udGV4dChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCmluZGV4IDg1Nzdj
YmJkZTZkMzkwMWQzNDcwNzYxZWQzMGY3OWQ5OGU4MmI5OGQuLjZjZmJhYmNhN2JjZmJlZGM1OTU0
ODNlOGVlYjFkNWFiMTIwOTY2YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eS5jcHAKQEAgLTMyLDM2ICszMiwyMSBAQAogI2luY2x1ZGUgIlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0SXRlbXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01lZGlhUGxheWVy
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eShJbWFnZUJ1ZmZl
ciYgaW1hZ2VCdWZmZXIsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgcmVuZGVyaW5nQmFj
a2VuZCwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyBk
ZWNvbnN0cnVjdERyYXdHbHlwaHMpCi0gICAgOiBEaXNwbGF5TGlzdDo6UmVjb3JkZXIoeyB9LCBp
bml0aWFsQ2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDogRGlz
cGxheUxpc3Q6OlJlY29yZGVyKGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERy
YXdHbHlwaHMpCiAgICAgLCBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZl
ci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSkKICAgICAsIG1faW1hZ2VCdWZmZXIoaW1h
Z2VCdWZmZXIpCiAgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmQocmVuZGVyaW5nQmFja2VuZCkKIHsK
IH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29uc3QgV2ViQ29yZTo6RGVz
dGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb2xvclNwYWNl
KSk7Ci19Ci0KIFJlbmRlcmluZ01vZGUgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZW5kZXJpbmdNb2RlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlciA/IG1faW1h
Z2VCdWZmZXItPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
CkBAIC03NywzMSArNjIsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkUmVzdG9yZSgpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6UmVzdG9yZSgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlRyYW5zbGF0ZSh4LCB5KSk7Ci19Ci0KLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSb3RhdGUoZmxvYXQgYW5n
bGUpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Um90
YXRlKGFuZ2xlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTY2FsZShjb25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNjYWxlKHNjYWxlKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6U2V0Q1RNKHRyYW5zZm9ybSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6Q29uY2F0ZW5hdGVDVE0odHJhbnNmb3JtKSk7Ci19Ci0KIHZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWlu
dDhfdD4gY29sb3IpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6U2V0SW5saW5lRmlsbENvbG9yKERpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3Ig
eyBjb2xvciB9KSk7CkBAIC0xMTcsOTIgKzc3LDI2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQog
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldFN0cm9rZVRo
aWNrbmVzcyh0aGlja25lc3MpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3RhdGUoRGlzcGxheUxp
c3Q6OlNldFN0YXRlIHsgc3RhdGUsIGZsYWdzIH0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldExpbmVDYXAo
bGluZUNhcCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBhcnJheSwgZmxvYXQgZGFzaE9mZnNldCkK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRMaW5l
RGFzaChEaXNwbGF5TGlzdDo6U2V0TGluZURhc2ggeyBhcnJheSwgZGFzaE9mZnNldCB9KSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lSm9p
bihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTZXRMaW5lSm9pbihsaW5lSm9pbikpOwotfQotCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRNaXRl
ckxpbWl0KGxpbWl0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRDbGVhclNoYWRvdygpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6Q2xlYXJTaGFkb3coKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwKHJlY3QpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkNsaXBPdXQocmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwVG9JbWFnZUJ1ZmZlcihp
bWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0
KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlw
T3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dFRvUGF0aChwYXRoKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSBydWxlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwUGF0aChwYXRo
LCBydWxlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBzdGQ6
Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsKLSAgICBp
ZiAoc291cmNlSW1hZ2UpCi0gICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV1RGTW92ZShpZGVudGlmaWVy
KSwgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZShSZWY8RmlsdGVyPiB7IGZp
bHRlciB9KSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OlNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7IHN0YXRlIH0pKTsKIH0KIAotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNwbGF5TGlzdDo6RHJhd0ds
eXBocyB7IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSB9
KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKLX0KLQotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKKyNpZiBVU0UoQ0cpCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJu
KCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3
TmF0aXZlSW1hZ2UoaW1hZ2VJZGVudGlmaWVyLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6QXBwbHlTdHJva2VQYXR0ZXJuKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1N5c3RlbUltYWdlKHN5c3Rl
bUltYWdlLCBkZXN0aW5hdGlvblJlY3QpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpBcHBseUZpbGxQYXR0ZXJuKCkpOwogfQorI2VuZGlmIC8vIFVTRShD
RykKIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0
ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3Zv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdQYXR0ZXJuKGltYWdlSWRlbnRpZmllciwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihzY2FsZUZhY3RvcikpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQpAQCAtMjE1
LDQ0ICsxMDksMzQgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpFbmRUcmFuc3BhcmVuY3lMYXllcigpKTsKIH0KIAotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgd2lkdGgpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RHJhd1JlY3QocmVjdCwgd2lkdGgpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9j
YWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmVzRm9yVGV4dChEaXNw
bGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IGJsb2NrTG9jYXRpb24sIGxvY2FsQW5jaG9yLCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzIH0pKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwKHJlY3QpKTsKIH0KIAotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSYgc3R5bGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
Q2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKHJlY3QsIHN0eWxlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdFbGxpcHNlKHJlY3QpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0KHJlY3QpKTsKIH0KIAotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdQYXRoKHBhdGgpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0VG9QYXRoKHBhdGgpKTsKIH0KIAotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb25SZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcFRvSW1hZ2VCdWZm
ZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0aW9u
UmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d0ZvY3VzUmluZ1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyUmVjdChyZWN0KSk7CiB9
CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0yNzAsMjMgKzE1NCwyMiBAQCB2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3Qg
RmxvYXRSZWN0JgogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkZpbGxSZWN0V2l0aEdyYWRpZW50KERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudCB7
IHJlY3QsIGdyYWRpZW50IH0pKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlKQor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxD
b21wb3NpdGVkUmVjdChyZWN0LCBjb2xvciwgb3AsIG1vZGUpKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRlZFJlY3Qocm91bmRlZFJlY3Qs
IGNvbG9yKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkZpbGxSb3VuZGVkUmVjdChyb3VuZGVkUmVjdCwgY29sb3IsIG1vZGUpKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVj
dCwgcm91bmRlZFJlY3QsIGNvbG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RmlsbEVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCi0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRGaWxsTGluZShjb25zdCBMaW5lRGF0YSYgZGF0YSkKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsTGluZShkYXRhKSk7CkBAIC0zMDYsNyArMTg5
LDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxCZXpp
ZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsQmV6aWVyQ3VydmUoZGF0YSkpOwogfQotCiAjZW5k
aWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzE0LDIz
ICsxOTYsMTcgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6RmlsbFBhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxF
bGxpcHNlKHJlY3QpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
UGFpbnRGcmFtZUZvck1lZGlhKHBsYXllci5pZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlUmVjdChy
ZWN0LCBib3JkZXJUaGlja25lc3MpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3
aWR0aCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VSZWN0KHJlY3QsIHdpZHRoKSk7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlRWxsaXBzZShyZWN0
KSk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmIGRh
dGEpCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ry
b2tlTGluZShkYXRhKSk7CkBAIC0zNTAsNyArMjI2LDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJlemllckN1cnZl
RGEKIHsKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJv
a2VCZXppZXJDdXJ2ZShkYXRhKSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM1OCwzMyArMjMzLDg0IEBAIHZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tl
UGF0aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VFbGxpcHNlKHJlY3QpKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UmVjdChyZWN0LCBib3JkZXJUaGlj
a25lc3MpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6Q2xlYXJSZWN0KHJlY3QpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZShwb2ludDEsIHBvaW50MikpOwogfQog
Ci0jaWYgVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RWxsaXBzZShyZWN0KSk7Cit9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseVN0cm9rZVBhdHRl
cm4oKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6QXBwbHlTdHJva2VQYXR0ZXJuKCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdQYXRoKHBhdGgpKTsKIH0KIAotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRo
KGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpBcHBseUZpbGxQYXR0ZXJuKCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KSk7CiB9CiAKLSNlbmRpZiAvLyBVU0UoQ0cpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
eworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGb2N1
c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKK30KIAotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgc2NhbGVGYWN0b3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ltYWdlQnVm
ZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucykpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCit7
CisgICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZp
ZXI7CisgICAgaWYgKHNvdXJjZUltYWdlKQorICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1h
Z2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdURk1vdmUo
aWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UoUmVmPEZp
bHRlcj4geyBmaWx0ZXIgfSkpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpEcmF3TmF0aXZlSW1hZ2UoaW1hZ2VJZGVudGlmaWVyLCBpbWFnZVNpemUs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3Rl
bUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKK3sKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3U3lzdGVtSW1hZ2Uoc3lzdGVt
SW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkRyYXdQYXR0ZXJuKGltYWdlSWRlbnRpZmllciwgZGVzdFJlY3QsIHRp
bGVSZWN0LCB0cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7Cit9CisKKyNpZiBF
TkFCTEUoVklERU8pCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JNZWRpYShpZGVudGlmaWVyLCBkZXN0aW5h
dGlvbikpOworfQorI2VuZGlmCisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
Y291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBt
b2RlKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRy
YXdHbHlwaHMoRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgeyBmb250LCBnbHlwaHMsIGFkdmFuY2Vz
LCBjb3VudCwgbG9jYWxBbmNob3IsIG1vZGUgfSkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZXNGb3JUZXh0KERpc3BsYXlMaXN0OjpEcmF3TGlu
ZXNGb3JUZXh0IHsgRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMgfSkpOworfQorCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkK
K3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKSk7CiB9CiAKIGJvb2wgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJbWFnZSYgaW1hZ2Up
CkBAIC00MzQsMTEgKzM2MCw2IEBAIGJvb2wgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRSZXNvdXJjZVVzZShGb250JiBmb250KQogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KEdyYXBoaWNz
Q29udGV4dEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZsdXNoQ29udGV4dChpZGVudGlmaWVyKSk7Ci19
Ci0KIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9wdGlv
bmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0CiB7CiAgICAgaWYgKFVOTElLRUxZKCFtX3Jl
bmRlcmluZ0JhY2tlbmQpKSB7CkBAIC00NjQsNiArMzg1LDIxIEBAIFJlZlB0cjxJbWFnZUJ1ZmZl
cj4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpjcmVhdGVBbGlnbmVkSW1hZ2VCdWZm
ZXIoY29uCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlU2NhbGVkSW1hZ2VCdWZm
ZXIocmVjdCwgc2NhbGVGYWN0b3IoKSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVy
aW5nTWV0aG9kKTsKIH0KIAordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2soKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSk7Cit9CisKK3ZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojp0cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29uc3Qg
V2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQoreworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlRyYW5zZm9ybVRvQ29sb3JTcGFj
ZShjb2xvclNwYWNlKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpmbHVzaENvbnRleHQoR3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIp
Cit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmx1c2hD
b250ZXh0KGlkZW50aWZpZXIpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5LmgKaW5kZXggOWIzM2EwNjdmZDE2YmNjZjE0MDQyYzE5NzRkZDY5MTk0MjI2MjQ2
OC4uZjJhZDhkMGFhNDU4NTg5YWVlODE5MDdkOWM5MDg5NmQzNGI2ZjcwNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OwogCiBjbGFz
cyBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyIHsKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RHJhd0dseXBoc1Jl
Y29yZGVyOwogcHVibGljOgogICAgIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eShXZWJD
b3JlOjpJbWFnZUJ1ZmZlciYsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybSYsIFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhz
ID0gV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olll
cyk7CiAgICAgflJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eSgpID0gZGVmYXVsdDsKQEAg
LTUwLDYzICs1MSwzOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmbHVzaENvbnRleHQoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVudGlmaWVyKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2VuZChUJiYgbWVzc2FnZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBtX25lZWRzRmx1c2ggPSB0cnVlOwotICAgICAgICBtX3JlbmRlcmlu
Z0JhY2tlbmQtPnNlbmRUb1N0cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rlc3RpbmF0aW9uQnVm
ZmVySWRlbnRpZmllcik7Ci0gICAgfQotCi0gICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkRyYXdH
bHlwaHNSZWNvcmRlcjsKLQogICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCByZWNvcmRTYXZlKCkgZmluYWw7CiAgICAgdm9p
ZCByZWNvcmRSZXN0b3JlKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRUcmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRSb3RhdGUoZmxvYXQgYW5nbGUpIGZp
bmFsOwotICAgIHZvaWQgcmVjb3JkU2NhbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRTZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lRmlsbENv
bG9yKFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFNldElu
bGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+KSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRT
ZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSYsIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZFNldExpbmVDYXAoV2ViQ29yZTo6TGluZUNhcCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRT
ZXRMaW5lRGFzaChjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVKb2luKFdlYkNvcmU6OkxpbmVKb2luKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZFNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkQ2xlYXJTaGFkb3coKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJikgZmluYWw7CisKKyNpZiBVU0UoQ0cpCisg
ICAgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZEFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCByZWNvcmRCZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgZmluYWw7CisKICAgICB2b2lkIHJlY29yZENsaXAoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwUGF0aChjb25zdCBXZWJD
b3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xp
cE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENs
aXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkQ2xpcE91dFRv
UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwUGF0
aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVy
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQm
LCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhC
dWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IGxvY2FsQW5jaG9yLCBXZWJDb3JlOjpGb250U21vb3RoaW5nTW9kZSkgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShXZWJDb3JlOjpTeXN0ZW1JbWFnZSYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4o
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3JlOjpJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRFbmRUcmFuc3Bh
cmVuY3lMYXllcigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiBwb2ludDIpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkRHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1h
Z2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmlu
YWw7CisKKyAgICB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOwogICAgIHZvaWQg
cmVjb3JkRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2Vi
Q29yZTo6R3JhZGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxDb21wb3NpdGVkUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNv
cmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSkgZmluYWw7CisgICAg
dm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7
CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRGaWxsTGluZShj
b25zdCBXZWJDb3JlOjpMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbEFyYyhj
b25zdCBXZWJDb3JlOjpBcmNEYXRhJikgZmluYWw7CkBAIC0xMTQsOSArOTEsMTAgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXppZXJD
dXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkRmlsbFBhdGgoY29uc3Qg
V2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbEVsbGlwc2UoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9y
TWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7
CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JikgZmluYWw7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdm9pZCByZWNvcmRT
dHJva2VMaW5lKGNvbnN0IFdlYkNvcmU6OkxpbmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNv
cmRTdHJva2VBcmMoY29uc3QgV2ViQ29yZTo6QXJjRGF0YSYpIGZpbmFsOwpAQCAtMTI0LDEzICsx
MDIsMjggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0
IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNv
cmRTdHJva2VQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZFN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRDbGVhclJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0jaWYg
VVNFKENHKQotICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7Ci0gICAg
dm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERy
YXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykg
ZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MikgIGZpbmFsOworCisg
ICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsK
KworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7
CisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpD
b2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6
SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBXZWJDb3JlOjpGaWx0ZXImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdOYXRp
dmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVj
b3JkRHJhd1N5c3RlbUltYWdlKFdlYkNvcmU6OlN5c3RlbUltYWdlJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpOworICAgIHZvaWQgcmVjb3JkRHJhd1BhdHRlcm4o
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBXZWJDb3JlOjpJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lmIEVOQUJMRShWSURFTykKKyAg
ICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllcklkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2Vu
ZGlmCi0gICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsK
KworICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3Qg
V2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2
YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhbEFu
Y2hvciwgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlJikgZmluYWw7CiAKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKFdl
YkNvcmU6Ok5hdGl2ZUltYWdlJikgZmluYWw7CiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIGZpbmFsOwpAQCAtMTQxLDYgKzEzNCwxOCBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVm
ZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVyaW5nTWV0aG9kPikgY29u
c3QgZmluYWw7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVk
SW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RGVz
dGluYXRpb25Db2xvclNwYWNlJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdNZXRo
b2Q+KSBjb25zdCBmaW5hbDsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBz
ZW5kKFQmJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX3JlbmRlcmlu
Z0JhY2tlbmQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fbmVlZHNGbHVzaCA9
IHRydWU7CisgICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+c2VuZFRvU3RyZWFtKFdURk1vdmUo
bWVzc2FnZSksIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCiAgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1fZGVzdGluYXRpb25CdWZmZXJJZGVu
dGlmaWVyOwogICAgIFdlYWtQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7
CiAgICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVuZGVyaW5nQmFj
a2VuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcAppbmRleCAxZDY0M2I2YjQyODhkMDhlMDM4YzQ2MjVkMDU0OWRlNjhhZjJhYTc3
Li4wNzk5M2IzODBmMWVhN2QzNDlkZDdlYmZjMTYwYzgwNGRhZDQzZTNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC01
MzQsNyArNTM0LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkm
LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY28KIAogICAgIC8vIERyYXcgd2hp
dGUgZnJhbWVzIGFyb3VuZCB0aGUgaG9sZXMuCiAgICAgLy8gV2UgZG91YmxlIHRoZSB0aGlja25l
c3MgYmVjYXVzZSBoYWxmIG9mIHRoZSBzdHJva2Ugd2lsbCBiZSBlcmFzZWQgd2hlbiB3ZSBjbGVh
ciB0aGUgaG9sZXMuCi0gICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hh
ZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9y
KTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZShzaGFkb3dP
ZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IgfSk7
CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSk7CiAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhib3JkZXJXaWR0aCAqIDIpOwogICAg
IGZvciAoYXV0byYgcGF0aCA6IHdoaXRlRnJhbWVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRy
b2xsZXIuY3BwCmluZGV4IGYxNmY3OTZlMDQ3ZTk5MTk3MmMwZWQxZjRhZTExM2NlMTY1NjVjMTAu
LjQ5ZTAwYmUzMzdlYWZlZTEyOTNlZjA3N2FkZjYxN2NkYWUzZDRhMTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0
UmFuZ2VDb250cm9sbGVyLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQgV2ViRm91bmRUZXh0
UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdChXZWJDb3JlOjpQYWdlT3ZlcmxheSYsIFdlYkNvcmU6
OkdyYXBoCiAKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coV2Vi
Q29yZTo6RmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVy
UmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3co
eyBXZWJDb3JlOjpGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRv
d0JsdXJSYWRpdXMsIHNoYWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJv
a2VDb2xvcihmb3VuZENvbG9yKTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlVGhpY2tu
ZXNzKGluZGljYXRvckJvcmRlcldpZHRoICogMik7CiAgICAgZm9yIChhdXRvJiBwYXRoIDogZm91
bmRGcmFtZVBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCBkYjYyZGM2
NTU5MzRmNjYxZTAwN2VlMTJkMGQxOTQ1ZDNiNzhmYzliLi4zN2E4NmNiMWFmYzFmYjNkMThkNTc2
ZjAyOGQ5NzJkZWMyODllMTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAt
MTI3NCw3ICsxMjc0LDcgQEAgdm9pZCBXZWJWaWV3OjpwYWludEludG9CYWNraW5nU3RvcmUoRnJh
bWVWaWV3KiBmcmFtZVZpZXcsIEhEQyBiaXRtYXBEQywgY29uc3QgSW4KICAgICAgICAgZ2MuY2xp
cChsb2dpY2FsRGlydHlSZWN0KTsKICAgICAgICAgZnJhbWVWaWV3LT5wYWludChnYywgbG9naWNh
bERpcnR5UmVjdCk7CiAgICAgICAgIGlmIChtX3Nob3VsZEludmVydENvbG9ycykKLSAgICAgICAg
ICAgIGdjLmZpbGxSZWN0KGxvZ2ljYWxEaXJ0eVJlY3QsIENvbG9yOjp3aGl0ZSwgQ29tcG9zaXRl
T3BlcmF0b3I6OkRpZmZlcmVuY2UpOworICAgICAgICAgICAgZ2MuZmlsbFJlY3QobG9naWNhbERp
cnR5UmVjdCwgQ29sb3I6OndoaXRlLCBDb21wb3NpdGVPcGVyYXRvcjo6RGlmZmVyZW5jZSwgQmxl
bmRNb2RlOjpOb3JtYWwpOwogICAgICAgICBnYy5yZXN0b3JlKCk7CiAgICAgfQogICAgIGdjLnJl
c3RvcmUoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBlOTdjMjBhNGZmNWJlNDFkOWMzMjA1N2M1MDgxY2ZmYzRiODFhNGE2Li43YjA0NDA2N2I2
OWEzNWE2ZmNmZWUwMTY2NDZjYjI5MmE0NTAzZDcxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDMtMTUgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNz
XSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBs
YXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHRUZXN0c0NHLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0
c0NHLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIyLTAzLTE0ICBK
b25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbZ2l0LXdlYmtp
dF0gSGFuZGxlIGNvbXBhcmluZyBVc2VyIGFuZCBDb250cmlidXRvciB0byBOb25lCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dFRlc3RzQ0cuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAppbmRleCA4ZTQxYzVhNzNh
ZTM2ODRjZWRkZjFmOTRmOWYxNzE4OTUzNTE0YzlmLi5lYmU2NDQ4NzFlMjhmNTE5Y2QyNjEyMGI4
YTgyNzg4NmMwMTkwMmJmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
VGVzdHNDRy5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0VGVzdHMsIEJhc2ljKQogICAgIEdyYXBoaWNzQ29udGV4dENHIHByaW1hcnlDb250ZXh0KHBy
aW1hcnlDR0NvbnRleHQuZ2V0KCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5
TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgeyB9
LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAg
ICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAs
IDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC05
MCwxMCArOTAsMTAgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJhc2lj
KQogVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIFRleHQpCiB7CiAgICAgSW5N
ZW1vcnlEaXNwbGF5TGlzdCBwcmltYXJ5RGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHBy
aW1hcnlDb250ZXh0KHByaW1hcnlEaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29u
dGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgcHJpbWFy
eUNvbnRleHQocHJpbWFyeURpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRo
LCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IHNlY29uZGFyeURp
c3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeURp
c3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWln
aHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeURp
c3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7
CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vj
b25kYXJ5Q29udGV4dCk7CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHRUZXN0cywgQm9yZGVycykKICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmltYXJ5
Q29udGV4dChwcmltYXJ5Q0dDb250ZXh0LmdldCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxp
c3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxh
eUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCks
IHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIEZs
b2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0
KTsKIApAQCAtMjI4LDcgKzIyOCw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRl
c3RzLCBUcmFuc2Zvcm1lZENsaXApCiAgICAgR3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4
dCA9IHByaW1hcnlDb250ZXh0Q0c7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlM
aXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIHsg
fSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vj
b25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApKTsK
ICAgICBHcmFwaGljc0NvbnRleHQmIHNlY29uZGFyeUNvbnRleHQgPSBzZWNvbmRhcnlDb250ZXh0
REw7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwg
c2Vjb25kYXJ5Q29udGV4dCk7CkBAIC0yODcsMTUgKzI4NywxNSBAQCBURVNUKEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHRUZXN0cywgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKICAgICBHcmFwaGlj
c0NvbnRleHQmIHByaW1hcnlDb250ZXh0ID0gcHJpbWFyeUNvbnRleHRDRzsKIAogICAgIEluTWVt
b3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNv
bnRleHRETChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApLCB7IH0p
OworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIEZsb2F0
UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5Q29u
dGV4dCA9IHNlY29uZGFyeUNvbnRleHRETDsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIAogICAgIGN0eC5hcHBs
eURldmljZVNjYWxlRmFjdG9yKDIpOwogCi0gICAgYXV0byBwcmltYXJ5Q1RNID0gcHJpbWFyeUNv
bnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlOjpEZWZpbml0
ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAgICBhdXRvIHNlY29uZGFyeUNUTSA9IHNlY29uZGFy
eUNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlOjpEZWZp
bml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBhdXRvIHByaW1hcnlDVE0gPSBwcmltYXJ5
Q29udGV4dC5nZXRDVE0oKTsKKyAgICBhdXRvIHNlY29uZGFyeUNUTSA9IHNlY29uZGFyeUNvbnRl
eHQuZ2V0Q1RNKCk7CiAKICAgICBFWFBFQ1RfRVEocHJpbWFyeUNUTS54U2NhbGUoKSwgc2Vjb25k
YXJ5Q1RNLnhTY2FsZSgpKTsKICAgICBFWFBFQ1RfRVEocHJpbWFyeUNUTS55U2NhbGUoKSwgc2Vj
b25kYXJ5Q1RNLnlTY2FsZSgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAppbmRleCAy
NDczNTgwZjE5MGUwZmQ2NzRjMzY3ZGE0N2M5ZjE5MmJhMjQ4NWU0Li4yMTVjMTdjNjY1N2FlZGE2
YTZlMmNkMGFlMGM5YzkyNmYzYmQ4MmIwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvY2cvR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0dyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3Bw
CkBAIC01Miw3ICs1Miw3IEBAIFRFU1QoR3JhcGhpY3NDb250ZXh0VGVzdHMsIERyYXdOYXRpdmVJ
bWFnZURvZXNOb3RMZWFrQ29tcG9zaXRlT3BlcmF0b3IpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Y3R4KGNnQ29udGV4dC5nZXQoKSk7CiAKICAgICBFWFBFQ1RfRVEoY3R4LmNvbXBvc2l0ZU9wZXJh
dGlvbigpLCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zlcik7Ci0gICAgRVhQRUNUX0VRKGN0
eC5ibGVuZE1vZGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIEVYUEVDVF9F
UShjdHguYmxlbmRNb2RlKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKIAogICAgIGF1dG8gZ3JlZW5Q
aXhlbENHID0gZ3JlZW5JbWFnZSgpOwogICAgIGF1dG8gZ3JlZW5QaXhlbE5hdGl2ZSA9IE5hdGl2
ZUltYWdlOjpjcmVhdGUoZ3JlZW5QaXhlbENHLmdldCgpKTsKQEAgLTcxLDcgKzcxLDcgQEAgVEVT
VChHcmFwaGljc0NvbnRleHRUZXN0cywgRHJhd05hdGl2ZUltYWdlRG9lc05vdExlYWtDb21wb3Np
dGVPcGVyYXRvcikKICAgICBFWFBFQ1RfRVEocHJpbWFyeURhdGFbMl0sIDApOwogCiAgICAgRVhQ
RUNUX0VRKGN0eC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZU92ZXIpOwotICAgIEVYUEVDVF9FUShjdHguYmxlbmRNb2RlT3BlcmF0aW9uKCksIEJsZW5kTW9k
ZTo6Tm9ybWFsKTsKKyAgICBFWFBFQ1RfRVEoY3R4LmJsZW5kTW9kZSgpLCBCbGVuZE1vZGU6Ok5v
cm1hbCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1MTc3ZWQ5
Mjk4MGRkOGQ0YmE0YmYzYWYzZDE0MTA2YTYyZmQ2Yjg3Li40NzQ4ZmY1YmJmYzU0ZTk4ZTkzNTIz
MjdmNmMyNmI4NzMyODdkNGRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjItMDMtMTUgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNz
XSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBs
YXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0
LWV4cGVjdGVkLnR4dDoKKwogMjAyMi0wMy0xNCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBbbW9kZWxdIDxtb2RlbCBpbnRlcmFjdGl2ZT4gZG9lc24ndCBh
bGxvdyBtb2RlbCB0byBiZSByb3RhdGVkIG9uIGlPUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0Cmlu
ZGV4IDUxMWI3YzBjNTRkMzMyMTZiN2M2ZWFmMDQzYTc1YzE2NzY2ZDA0MjcuLmRiZjU0YjNlYTIw
NGUxOTI0YmQ0MzVkNTE3MzZkYzczNDc3MDJjZmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQK
QEAgLTEsMTcgKzEsMTMgQEAKIAotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAwLjAwKSkK
IChzYXZlKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDUxMikKLSAgKHNoYWRvdy1ibHVy
IDEyLjAwKQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCi0gIChzaGFkb3ct
Y29sb3IgIzAwMDAwMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCi0oZmlsbC1j
b21wb3NpdGVkLXJlY3QKKyAgKGNoYW5nZS1mbGFncyBbZHJvcC1zaGFkb3ddKQorICAoZHJvcC1z
aGFkb3cKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRv
dy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ctY29sb3IgIzAwMDAwMCkKKyAgICAoc2hhZG93cy11
c2UtbGVnYWN5LXJhZGl1cyAwKSkpCisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQg
KDUwLDUwKSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9w
ZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDQz
LDUwKSBzaXplIDEzNHgxMzcpCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQgKDQzLDUwKSBz
aXplIDEzNHgxMzcpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0Cmlu
ZGV4IDM4NmUzOTQxMTg1ZjA5YTNjNjhlYzZjMmFlODhkZjExYzcwYjBhNjkuLjVmNzhiOGMzNTA1
YzllODAzOTliZDYwNWE5YmU5NTVhYjA5YjcwNWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVj
dGVkLnR4dApAQCAtMSwyMSArMSwxNCBAQAogCi0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5
IDIyLjAwKSkKLShjb25jYXRlbnRhdGUtY3RtCi0gIChjdG0ge209KCgwLjg3LDAuNTApKC0wLjUw
LDAuODcpKSB0PSg4MS43MCwtMTguMzApfSkpCiAoc2F2ZSkKIChzZXQtc3RhdGUKLSAgKGNoYW5n
ZS1mbGFncyA1MTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lk
dGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93LWNvbG9yICMwMDAwMDApCi0gIChzaGFkb3dzLXVz
ZS1sZWdhY3ktcmFkaXVzIDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisgIChjaGFuZ2UtZmxh
Z3MgW2N0bSwgZHJvcC1zaGFkb3ddKQorICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3
KSkgdD0oODEuNzAsMy43MCl9KQorICAoZHJvcC1zaGFkb3cKKyAgICAoc2hhZG93LW9mZnNldCB3
aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvdy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ct
Y29sb3IgIzAwMDAwMCkKKyAgICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkpCisoZmls
bC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDB4MTAwKQotICAoY29s
b3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVu
ZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkK
KyAgKGNvbG9yICMwMDAwRkYpIGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUu
NjUpCiAocmVzdG9yZSkKLShzZXQtY3RtCi0gIChzZXQtY3RtIHttPSgoMS4wMCwwLjAwKSgwLjAw
LDEuMDApKSB0PSgwLjAwLDIyLjAwKX0pKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggYmMxN2I1MTE0OTlm
ODI1NmM5OTI5MGRhZTg2MTRkNDg5NGNhZjljYy4uNTQ2ZGM0OTEyZjUyZDAzYTg5YWQ5MDY4NTcy
YjI4ZWRjODAzMjI1MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVy
LWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
bGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDE2ICsxLDEyIEBACiAKLSh0cmFu
c2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QKKyhm
aWxsLXJlY3Qtd2l0aC1jb2xvcgogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCi0gIChj
b2xvciAjMDA4MDAwKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJs
ZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQorICAoY29sb3Ig
IzAwODAwMCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKIChzZXQtc3RhdGUKLSAgKGNo
YW5nZS1mbGFncyAzMjk2MCkKLSAgKGZpbGwtY29sb3IgIzAwMDBGRikKLSAgKHN0cm9rZS1zdHls
ZSAwKQorICAoY2hhbmdlLWZsYWdzIFtmaWxsLWJydXNoLCBzdHJva2Utc3R5bGUsIHNob3VsZC1h
bnRpYWxpYXNdKQorICAoZmlsbC1icnVzaAorICAgIChjb2xvciAjMDAwMEZGKSkKKyAgKHN0cm9r
ZS1zdHlsZSBOTy1TVFJPS0UpCiAgIChzaG91bGQtYW50aWFsaWFzIDApKQogKGRyYXctcmVjdAog
ICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgyKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApp
bmRleCBiYjU5M2QyMGY2ZGE2NDg2MjkyZDM2YzAyMjBlMmE5ZDg3MmY4MmI5Li5iODYwNDhjYzA4
Yzk5MzdlZjAwNzgyZTcxMDg5Y2FjYmM5OWM1MzMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9k
aXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVk
LnR4dApAQCAtMSwxNiArMSw4IEBACiByZWNvcmRlZDoKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkK
LSAgKHkgMC4wMCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QKKyhmaWxsLXJlY3Qtd2l0aC1jb2xv
cgogICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKLSAgKGNvbG9yICMwMDAwRkYpCi0g
IChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwp
IGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKKyAgKGNvbG9yICMwMDAwRkYpIGV4dGVu
dCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKIAogcmVwbGF5ZWQ6CiAoCiAgIChjbGlwIGF0ICg1
MTIsMCkgc2l6ZSA1MTJ4MjAwKQotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAwLjAwKSkK
</data>
<flag name="commit-queue"
          id="482534"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454781</attachid>
            <date>2022-03-15 18:06:28 -0700</date>
            <delta_ts>2022-03-15 18:55:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220315180626.patch</filename>
            <type>text/plain</type>
            <size>672003</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uNjcwMTcwMzVhMjgzZWVkMzkzM2Y2OTQzNGI5YWI3
NmU2ZTczMTUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1NSBAQAorMjAyMi0wMy0xNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
QXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZy
b21QYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25Q
YWludGVyOjpwYWludEJveFNoYWRvdyBjb25zdCk6CisgICAgICAgICogaHRtbC9DdXN0b21QYWlu
dEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0
VW5jaGVja2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3TGF5b3V0U3RpcHBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdMYXlvdXRIYXRjaGluZyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c2V0SXNDQUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Up
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5h
bExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlw
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
QmlkaVRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRHJhd0dseXBoc1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRlY29uc3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkaWRBcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNjYWxlRmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGly
ZWN0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5n
ZXNGcm9tU3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQ
YXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbFBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdl
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnRE
ZXRlY3RlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENv
bnRlbnRmdWxQYWludERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVy
Z2VTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJn
ZVN0YXRlRGlmZnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNm
b3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6bGluZURhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmxpbmVKb2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptaXRlckxpbWl0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU1vZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb21wb3NpdGVPcGVyYXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpibGVuZE1vZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJvcFNoYWRvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd09mZnNldCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dDb2xvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyb3BTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1Zpc2libGVTaGFkb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNCbHVycmVkU2hhZG93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzU2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWxwaGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkQW50aWFsaWFz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50
aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU21vb3Ro
Rm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91
bGRTbW9vdGhGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3THVtaW5hbmNlTWFz
ayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyYXdMdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dXNlRGFya0Fw
cGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRV
c2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojppc0luVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5h
bExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXND
QUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ0FM
YXllckNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJT
Y29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpiZWdpbkxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3Bl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNz
Q29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lcjo6fkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25s
eVByaW1pdGl2ZUNoYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bWVyZ2VEaWZmcyk6CisgICAgICAgIChXZWJDb3JlOjpzdGF0ZUNoYW5nZU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmR1bXAgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmNoYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmRpZEFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6ZmlsbEJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmZpbGxSdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VUaGlja25lc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZVN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUNhcCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUNh
cCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZURhc2ggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5lSm9pbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUpvaW4p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1pdGVyTGltaXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldE1pdGVyTGlt
aXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNvbXBvc2l0ZU1v
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENv
bXBvc2l0ZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRy
b3BTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRUZXh0RHJhd2luZ01vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3VsZEFudGlhbGlhcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxk
QW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91
bGRTbW9vdGhGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0U2hvdWxkU21vb3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXREcmF3THVtaW5hbmNlTWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6dXNlRGFya0FwcGVhcmFuY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFVzZURh
cmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkZWNv
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
OjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6YmVnaW5MYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjp+VHJhbnNwYXJlbmN5
TGF5ZXJTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNr
Q2hlY2tlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXI6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
TW9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVEYXNoOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJvcFNoYWRvdzo6aXNCbHVycmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
b3BTaGFkb3c6Omhhc091dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRv
dzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmRlY29kZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6TnVsbEdyYXBoaWNzQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1
enouY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJydXNoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6U291
cmNlQnJ1c2gpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3Jt
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpncmFkaWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6cGF0dGVybiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQnJ1c2g6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpicnVzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmlzUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNo
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UZXh0Qm94SXRlcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvZmZzZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjppbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveEl0ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmN1cnJlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0
ZXJhdG9yOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJh
dG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3UGF0aFNo
YWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd0dseXBoc1NoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpTdGF0ZTo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpGaWxsU291
cmNlOjpGaWxsU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdHJva2VTb3VyY2U6
OlN0cm9rZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGU6OlNo
YWRvd1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZTo6aXNSZXF1
aXJlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUNhcCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fp
cm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1BsYXRm
b3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZp
bGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGlj
c0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlw
aHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0Zv
clRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0Q1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2Fw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNS
ZWNvcmRlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpD
R0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2
ZXI6On5DR0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0
YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZl
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250
ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3aW5n
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5k
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lQ2FwKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENHTGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q0dTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5
U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJv
a2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGlu
ZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseURl
dmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpm
aWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tl
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2FuVXNlU2hh
ZG93Qmx1ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9pbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6Q0dDb250ZXh0U3Rh
dGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVy
Ojp+Q0dDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29u
dGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dD
b250ZXh0U3RhdGVTYXZlcjo6ZGlkU2F2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6c3Ryb2tlQ29udGFpbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJlZ2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3SW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250KToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFs
Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6
OmNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlRmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVDVE0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93SXNDbGVhcmVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6
OnNhZmVDb3B5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6c2l6ZU9mSXRlbUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Omlz
RHJhd2luZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzSW5saW5lSXRl
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Rh
dGU6OlNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFp
bnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xh
dGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSb3RhdGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTY2FsZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldENUTTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6YXBwbHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjph
cHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZUpvaW46OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRNaXRlckxpbWl0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlOjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSb3VuZGVkUmVjdDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjphbmdsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YW1vdW50IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjp0cmFu
c2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNv
bmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
c3RhdGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXA6OmxpbmVDYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRhc2hBcnJheSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6
OmRhc2hPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVEYXNoOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxpbmVKb2luIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxp
bWl0OjpTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRNaXRlckxpbWl0OjptaXRlckxpbWl0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVk
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBv
c2l0ZWRSZWN0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbXBvc2l0ZU9w
ZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpnbG9iYWxCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRS
ZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6UmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Om1fZHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjphcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZv
ck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ds
eXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6On5SZWNvcmRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Y29udGFpbnNPbmx5SW5saW5lU3RhdGVD
aGFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
b25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3Rt
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6Q29udGV4dFN0YXRlOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpD
b250ZXh0U3RhdGU6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZWNvcmREcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRT
dGF0ZTo6Q29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjbG9uZUZvclNhdmUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6
OmNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZVN0YWNrIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6UmVjb3JkZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZEZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3Vy
dmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
U3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBs
OjpyZWNvcmRTdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERy
YXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1l
Rm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6ZXh0ZW50RnJvbUxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6On5SZWNvcmRlckltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkVHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRT
Y2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmRTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRNaXRlckxpbWl0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZENsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpSZWNv
cmRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjphcHBseVNldFN0YXRlSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2
ZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0b3JlKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFu
Z2VzKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Y2xpcCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwT3V0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNs
aXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGlu
ZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0Q1RNKTog
RGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpn
ZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09w
ZXJhdGlvblJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdH
bHlwaHNSZWNvcmRlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFk
b3dGb3JCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGRJbm5lclNoYWRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5n
L1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VTdHJva2VTdHlsZVRvRmlsbCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZTo6ZHJhdyk6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3Qg
YWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZDljYzNjNGZlNjll
OGJjZTVlMDFjODlhZjRkMDdjNzVhYzgwYzNlNi4uZTE2MmJlOGJmMTJiMzA4ZDA3MTIxZDg0OWQ0
YTczMzc4NDRmZTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAyMi0wMy0xNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRTdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5z
bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpz
ZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdCk6IERl
bGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBs
eURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0
aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1Jl
Y3RzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0dseXBocyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjptX3JlbmRlcmluZ0JhY2tlbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0
ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZURhc2gpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclNoYWRv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6c2VuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6CisK
IDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUg
cm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA2YmUwNjRlMzgz
ODkzN2ZkZTVlODUyODY5NWY0MTQwYzJkODNiMmRhLi44ODEzYmNkMWUxYmVhMzNmZTVkOTBhZTdk
NjY3NzhiMjdhYTdkMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjItMDMtMTUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6
aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJW
aWV3OjpwYWludEludG9CYWNraW5nU3RvcmUpOgorCiAyMDIyLTAzLTA0ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSG9tZSBsaW5rIG9uIHdlYXRoZXIuZ292IGlz
IG5vdCB3b3JraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA3MzY0NDJhMDhhNzQ1MDBhMzUyZjA0
YzJlMTA2ZDhjNDFlN2E0ZmM1Li5lMzdjNDg2ZDg1OTczOTQwZTVlNTc3N2MxOTZlYjkyYjdkMGIw
Y2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0OTEsNiArMTQ5MSw4IEBAIHNldChXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyQ2xpZW50LmgKQEAgLTE1NTAsNiArMTU1Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUF1ZGlvVHJh
Y2tDb25maWd1cmF0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUNvbG9yU3Bh
Y2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
LmgKQEAgLTE1NjgsNiArMTU3MSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hvdWxkTG9j
YWxpemVBeGlzTmFtZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Tb3VyY2VJbWFnZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA2
MmQ0M2U2YTNhOTMyMTVmZjA3NTdhNDc4ODRhOGI2Yzg0NGI4OTZkLi5kMDU2NWJlYzkyMWYwY2Q5
MTVlNDg4NWZkZjZiYTMyYTNhNmJkM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTE1Niw2ICsxNTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJl
ZUhvc3RDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW4uaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JTcGFjZUNHLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNWRlZTc1
NDA1MzU3OWY1NWI1NWYyZmU0YWQwZGQwYTY5ZGViZmQ0YS4uZTRmNjI3MTkwY2M4OWJlODZkMDY5
ODFmMzFkMDEzMzY1OTJlOTY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTY0MCw2
ICs2NDAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViVmlkZW9Db250YWluZXJMYXllci5oCiAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQ
b29sLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggNWM3YjczZWIyMDVlMDllYzI0NmUwMTFkMGE1MDJkY2Q0
YzFkY2E1MC4uZWI3NmExODZkMzQ4ZDRiMzY4OWYyMzRmM2RiZjYyODJhYWFkZTA1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTIwNDUsNiArMjA0NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcApAQCAtMjA4NCw2
ICsyMDg1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3Qu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnJ1c2guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9T
dHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggODI5NjJiYTA0ZTJmZmQ3ZmZhMGM2ZTYxZDljOWMyYzE3
YTVmNjQ2Ny4uYjU1YzVjMWM0MmUzMjk1NTcwZWQyNGM4NDBkYzNlNGYyZmQzMDJlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MjMzMSwxMCArMjMzMSwxMiBAQAogCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGMDVGODAyNTEyNDQy
RTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NT
UHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MUZDQjE3MDI3QkFCM0ZFMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQ0Ix
NkQyN0JBQjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAxNzgzQjI3RDU3RjlGMDA5QkVC
MUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0
YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZC
QTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVF
NTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMUI0OTc0MjUxMkJBM0IwMEZF
OUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1h
cEJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMw
QjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNDYwREQ3MjdDODZEQUQwMEQ1RjlG
NCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI0Njk2M0IyNzVDNUZBNjAwQTkxNTZBIC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1M0ZCODMyMTNCMUJCODAwQzQw
RDM0IC8qIENTU0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyNDY5NjNEMjc1QzYxNDQwMEE5MTU2QSAvKiBGaWx0ZXJFZmZlY3RWZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMTRC
OUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRTI3NUM2MTY3MDBB
OTE1NkEgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjRFRjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBGaWx0ZXJJbWFn
ZVZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yMzQyLDYgKzIzNDQsOSBAQAogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgwRDg0
MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIg
LyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI1NjA3OEUyNzlEMzRCNjAwN0QyREQzIC8qIEZF
SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
RjdFNzRGMjc5Q0VERTgwMEQ4MkQyRCAvKiBGRUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8q
IFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkIzNTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NTI3Q0RBODBF
MDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcyNkNERTIwMjc1OTczNTAwMEE0NDVCMiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NjYxQTIyNzU5NjBB
NTAwRTdERjlCIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8q
IFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNB
RTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1h
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTEzMTgsNiArMTEzMjMsOCBAQAogCQk3MUZDQjE2RDI3QkFCM0RGMDBFMDYzMUMgLyogRnJhbWVS
YXRlQWxpZ25lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZVJhdGVB
bGlnbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkNCMTZGMjdCQUIzRTAw
MEUwNjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZyYW1lUmF0ZUFsaWduZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2lu
dHMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFC
IC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0dDb250ZXh0U3RhdGVT
YXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjA2RDQzNTI3REFERUNBMDA0
MEZFQjIgLyogVGV4dEJveEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hJdGVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjExQjVENjI3NjUzNjgyMDA3NkZF
RjggLyogRmlsdGVyUmVzdWx0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBT
VkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1
ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENB
RDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVl
UHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzI3LDYgKzExMzM0
LDggQEAKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXJJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
NDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRN
aW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRN
aW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0
MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0
RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTM4OSw2ICsxMTM5OCwxMCBAQAogCQk3MkExM0FENTI3NERFNTRFMDBFMkE4OEUgLyog
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQWxwaGFT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBMTNBRDYy
NzRERTU3ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQTEzQUQ3Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VH
cmFwaGljU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0
d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEMyN0M5
RjkzRTAwRDI3QUUwIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQjM1MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUJydXNoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNvdXJjZUJydXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQjRFRjc0Mjc0RTIzMzMwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJCNEVGNzUyNzRFMjMzNDAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2Fy
ZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjdDMjc0RUUzN0YwMDI5M0My
RiAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZVZlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4MTAsNiArMjg4MjMsNyBAQAog
CQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0Nv
bnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENv
bG9yQ0cuY3BwICovLAogCQkJCUJDQUZFREIzMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNl
Q0cuY3BwICovLAogCQkJCUJDQUZFREIyMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cu
aCAqLywKQEAgLTI5MDQzLDYgKzI5MDU3LDkgQEAKIAkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlE
MDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRB
NDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAq
LywKIAkJCQk3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oICovLAorCQkJCTcyNDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZS5jcHAgKi8sCisJCQkJNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi8sCisJCQkJNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyog
R3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5IC8qIEdy
YXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhp
Y3NMYXllckNsaWVudC5oICovLApAQCAtMjkxNDMsNiArMjkxNjAsNyBAQAogCQkJCUJDQTU1OTEy
MjYzREJENzkwMDdGMTlCMyAvKiBQaXhlbEZvcm1hdC5oICovLAogCQkJCUNERDA4QUJGMjc3RTU0
RjAwMEVBMzc1NSAvKiBQbGF0Zm9ybUF1ZGlvVHJhY2tDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJ
QkMzRTYyNDIyNjU5NzkxNzAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oICovLAorCQkJ
CTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICov
LAogCQkJCTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJ
CQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywK
IAkJCQk1NTA2NDBBRDI0MDc1NkRBMDBBQUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tl
bmQuaCAqLywKQEAgLTI5MTY2LDYgKzI5MTg0LDggQEAKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAw
RDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkw
IC8qIFNoYWRvd0JsdXIuaCAqLywKIAkJCQkxQzREQjAyNDI3MzM5RTVFMDA3QjBBRDEgLyogU2hv
dWxkTG9jYWxpemVBeGlzTmFtZXMuaCAqLywKKwkJCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAg
LyogU291cmNlQnJ1c2guY3BwICovLAorCQkJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBT
b3VyY2VCcnVzaC5oICovLAogCQkJCTFERDEyN0FDMjU2RTNBODcwMEIyMjdENyAvKiBTb3VyY2VC
dWZmZXJQcml2YXRlLmNwcCAqLywKIAkJCQlDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291
cmNlQnVmZmVyUHJpdmF0ZS5oICovLAogCQkJCUNEQzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi8sCkBAIC0yOTE3Nyw2ICsyOTE5Nyw3IEBACiAJ
CQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVy
YXRvci5oICovLAogCQkJCTk1RTlGNDQ0MjdDOUEzOUIwMDk0NTMzNyAvKiBTeXN0ZW1JbWFnZS5o
ICovLAogCQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCisJCQkJ
NzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovLAogCQkJCTM3
NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLywKIAkJCQlBODI0QjQ2NDBF
MkVGMkVBMDA4MUE3QjcgLyogVGV4dFJ1bi5oICovLAogCQkJCUNEMUU3MzQ2MTY3QkM3OEUwMDlB
ODg1RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAgKi8sCkBAIC0zMzg3Myw2ICszMzg5
NCw3IEBACiAJCQkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRl
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8qIENl
cnRpZmljYXRlU3VtbWFyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5RjAw
OUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZG
RDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNzg1RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5lbENv
dW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDc5OCw2ICszNDgyMCw4IEBACiAJCQkJNDlD
N0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Qjk1Q0ZFQjI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAw
RTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUw
RjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzY3MDUsNiArMzY3MjksNyBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0
Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjU4MTg1NTI3Q0RBODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQ
bGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc3MDVDNzI1NTI3NkNEMDAxRDBD
OTQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQUYy
NDA3NTgyRDAwQUFFMDQ1IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM3Mzg2LDYgKzM3NDExLDcgQEAKIAkJCQk1MTBENEEzODEwMzE2NUVFMDA0OUVB
NTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFC
QUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1c2gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTY1MTdBOUQwMUIwMDI3NEU0MiAvKiBT
b3VyY2VCdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYxMzUwOTI0QzlGQ0EzMDA0
MzJFMUUgLyogU291cmNlQnVmZmVyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50
ZXIuY3BwCmluZGV4IDg1NmEzZGU1MDRkZWMwYmJmYTkwYWMxN2RlMzdmNTE1ZTE0ZDkyMDQuLjlk
OTM1YTZmZjMyMzBmM2Y0NmEyZWY1ZDdlYTEwMDEwYWU5ZTEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVy
LmNwcApAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVG
cm9tUGF0aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICAgICAg
ICAgIERhc2hBcnJheSBsaW5lRGFzaDsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNo
TGVuZ3RoKTsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hM
ZW5ndGgpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2go
eyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVz
IHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgQm94RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250
ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdpbiA9IGZpbGxSZWN0LnJlY3Qo
KS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBhdXRvIGFkanVzdGVkU2hhZG93
T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0
aW9uKCk7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVz
dGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNo
YWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldERyb3BTaGFkb3coeyBhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVl
KCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAKICAgICAg
ICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBv
cGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBz
byBzYXZlcyB0aW1lCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWlu
dGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hh
ZAogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQp
OwogICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZh
bHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNo
YWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVm
YXVsdCB9KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsK
ICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAppbmRleCBm
NGI5OGJhNjJlMTE5YTA3NzEzMTJkM2I4OGM0OTE5MzY4MzZlZTM3Li5lZTUwNGYwOGM0OWZjOGQ1
YjVhZWQ3MDJiZTIxN2YxYjA2ZmQ0ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRJbWFnZS5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFp
bnRJbWFnZTo6ZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjbwog
SW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RD
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUo
eyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAg
ICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRl
KGRlc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVj
dC5zaXplKCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKIAogICAgIC8vIEZhY3RvciBp
biB0aGUgZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0
IHJlc29sdXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29u
dGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRD
VE0oKTsKICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7
CiAgICAgZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAg
IEFmZmluZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCAwZTc4MDYzZTNhNDFjYmM2OTBmMGQwY2NiNzg4MTE3
ZGU2OTM4YTAyLi5kYmM5NTdjNTNkMDRhMzk2ZWFjNjRkNjdmZTZhMmIxN2U0NDhjNjYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcApAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCgpIGNvbnN0CiAgICAgRGFzaEFycmF5IGNv
bnZlcnRlZExpbmVEYXNoKHN0YXRlKCkubGluZURhc2guc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRlKCkubGluZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbnZl
cnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4oc3RhdGUoKS5s
aW5lRGFzaFtpXSk7Ci0gICAgYy0+c2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRl
KCkubGluZURhc2hPZmZzZXQpOworICAgIGMtPnNldExpbmVEYXNoKHsgV1RGTW92ZShjb252ZXJ0
ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KSB9
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxBbHBo
YShkb3VibGUgYWxwaGEpCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBv
cGUKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICgh
YykKICAgICAgICAgcmV0dXJuOwotICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxl
bmRNb2RlKTsKKyAgICBjLT5zZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzY2FsZShkb3VibGUgc3gsIGRv
dWJsZSBzeSkKQEAgLTExODYsNyArMTE4Niw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZG91CiAg
ICAgICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50
PihsaW5lRGFzaFtpXSk7Ci0gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goY29udmVydGVkTGlu
ZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICAgICAgY29udGV4dC5zZXRMaW5lRGFz
aCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUu
bGluZURhc2hPZmZzZXQpIH0pOwogICAgIH0pOwogfQogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChkb3VibGUgeCwgZG91
YmxlIHksIGRvdWJsZSB3aWR0aCwgZAogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAg
ICAgICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBj
b250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBjb250ZXh0LT5zZXREcm9wU2hh
ZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRp
dXNNb2RlOjpMZWdhY3kgfSk7CiAgICAgfQogICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9
IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTM2Myw5ICsxMzYzLDkgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3Vs
ZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09m
ZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNl
dC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdo
dCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRTaGFk
b3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kpOworICAgICAgICBjLT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAs
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiB9
CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3Mo
KSBjb25zdApAQCAtMjQzMiwxOSArMjQzMiwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGRvdQog
CiAgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0KDAsIDIgKiBtYXNrUmVjdC5oZWlnaHQoKSk7
CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBmbG9h
dCBzaGFkb3dSYWRpdXM7Ci0gICAgICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICAgICAg
ICAgIGMtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3Ip
OwotCiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChtYXNrUmVjdCk7Ci0gICAgICAg
ICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hhZG93UmFkaXVzICogMS40KTsKLSAgICAgICAgICAg
IHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQgKiAtMSk7CisgICAgICAgICAgICBhdXRvIGRy
b3BTaGFkb3cgPSBjLT5kcm9wU2hhZG93KCk7CisKKyAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5m
bGF0ZShkcm9wU2hhZG93LmJsdXJSYWRpdXMgKiAxLjQpOworICAgICAgICAgICAgc2hhZG93UmVj
dC5tb3ZlKGRyb3BTaGFkb3cub2Zmc2V0ICogLTEpOwogICAgICAgICAgICAgYy0+Y2xpcChzaGFk
b3dSZWN0KTsKIAotICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKKyAgICAgICAg
ICAgIGRyb3BTaGFkb3cub2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgICAgIGMtPnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7
CiAKICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xv
cihDb2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXkuY3BwCmluZGV4IDRmNjNhZGNlOTM5MTZkYjIzMjBlOTY3OGFhYmZlMGYzY2Q5OTc2MmIu
LjlhODAzYTQwOGQ4OGMyZmY0OGRkM2JlYTAyOTUxYjg3NTgwOThlMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTEyNDQsNyArMTI0NCw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRTdGlwcGxpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAg
ICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAg
IGNvbnRleHQuc2V0TGluZURhc2goeyAxLCBkZW5zaXR5IH0sIDEpOworICAgIGNvbnRleHQuc2V0
TGluZURhc2goeyB7IDEsIGRlbnNpdHkgfSwgMSB9KTsKIAogICAgIGRyYXdMYXlvdXRQYXR0ZXJu
KGNvbnRleHQsIHF1YWQsIGRlbnNpdHksIEZsaXA6Ok5vKTsKIH0KQEAgLTEyNTQsNyArMTI1NCw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHNhdmVyKGNvbnRleHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNSk7CiAg
ICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlKTsKLSAg
ICBjb250ZXh0LnNldExpbmVEYXNoKHsgMiwgMiB9LCAyKTsKKyAgICBjb250ZXh0LnNldExpbmVE
YXNoKHsgeyAyLCAyIH0sIDIgfSk7CiAKICAgICBjb25zdGV4cHIgYXV0byBkZWZhdWx0TGF5b3V0
SGF0Y2hTcGFjaW5nID0gMTI7CiAgICAgZHJhd0xheW91dFBhdHRlcm4oY29udGV4dCwgcXVhZCwg
ZGVmYXVsdExheW91dEhhdGNoU3BhY2luZywgZmxpcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKaW5kZXggYjU4OGY2ZmE0YTExZDc3MGMzYzg0OTk5NjcyZDdkN2VmZjQzMmM0Zi4uOGExN2Fl
MzcwYWUzNmIwMGViYjdhOWIyZTA3NTUxODA2YmVkMTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcApAQCAtNDMwMyw3ICs0MzAzLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXQKICAg
ICBpZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwog
Ci0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGZyYW1lUmVjdCgpLCBwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRlbnRzKCkuCiAgICAgICAgIHBhaW50
Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50Vmlz
aWJsZVJlY3QpKTsKQEAgLTQ4NTQsNyArNDg1NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQ
YWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0
CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgot
ICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29u
dGV4dChmcmFtZVJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAKaW5kZXggZGM2MGU3
NWIyOTViYzUzYTU5YTQ3MDJhMTk5ODdjMDNhMTFmOTVhMS4uYWM5MDkxMTM3M2FmZTVmNjI2OTc1
NDA2YmNjYzM4MzUwZDlkMzQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fk
d2FpdGEvVGhlbWVBZHdhaXRhLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgVGhlbWVBZHdh
aXRhOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBQ
YXRoJiBwYXRoCiAKICAgICBncmFwaGljc0NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihj
b2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNr
bmVzcyhmb2N1c0xpbmVXaWR0aCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsg
Zm9jdXNMaW5lV2lkdGgsIDIgKiBmb2N1c0xpbmVXaWR0aCB9LCAwKTsKKyAgICBncmFwaGljc0Nv
bnRleHQuc2V0TGluZURhc2goeyB7IGZvY3VzTGluZVdpZHRoLCAyICogZm9jdXNMaW5lV2lkdGgg
fSwgMCB9KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZUNhcChMaW5lQ2FwOjpTcXVhcmUp
OwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lSm9pbihMaW5lSm9pbjo6TWl0ZXIpOwogICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xvci5vcGFxdWVDb2xvcigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOWZkMjVkODBhZDEyZGM5MWRkMTFmOTE1OThm
YzZjOGVmYTRjYjJhMi4uMjg5NTc0YjljMWU0MGNkNzEyYjRlMmI2ZTllYjM0YjAxNzI5ZGZjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTI5LDcgKzI5LDggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0LCBHcmFwaGljc0NvbnRl
eHQmIHNlY29uZGFyeUNvbnRleHQpCi0gICAgOiBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250
ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KHByaW1hcnlDb250ZXh0LmNsaXBCb3VuZHMoKSwg
eyB9LCBwcmltYXJ5Q29udGV4dC5nZXRDVE0oKSkKKyAgICAsIG1fcHJpbWFyeUNvbnRleHQocHJp
bWFyeUNvbnRleHQpCiAgICAgLCBtX3NlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5Q29udGV4dCkK
IHsKIH0KQEAgLTQ4LDYgKzQ5LDMwIEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBt
X3ByaW1hcnlDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogfQogCisjaWYgVVNFKENHKQorYm9v
bCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Cit9CisKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlz
Q0FMYXllckNvbnRleHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250
ZXh0KGlzQ0FMYXllckNvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJc0NBTGF5
ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRl
eHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0Fj
Y2VsZXJhdGVkQ29udGV4dCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKK30KKyNlbmRpZgorCitSZW5kZXJpbmdN
b2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKK30KKwogdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKIHsKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgbm90IHVzaW5nIHRoZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0J3Mgc3RhdGUgc3RhY2sg
YXQgYWxsLApAQCAtNjQsMjIgKzg5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQb2lu
dCYgdG8pCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9
CiAKICNpZiBVU0UoQ0cpCkBAIC05NiwyMiArMTA5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCiB9CiAjZW5kaWYKIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRy
YXdQYXRoKHBhdGgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChw
YXRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IGZhY3RvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9wcmltYXJ5Q29u
dGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBA
IC0xMjYsMjIyICsxMjcsMTI2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBs
eURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0
KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUmVjdChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3RJ
bXBsKHJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
SW1wbChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIG1fcHJpbWFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5jbGVhclJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLSNp
ZiBVU0UoQ0cpCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNv
bnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRl
eHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLX0KLQotYm9vbCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Ci19Ci0KLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOwotfQotI2VuZGlm
Ci0KLVJlbmRlcmluZ01vZGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9k
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgp
OwotfQotCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKICAgICBtX3By
aW1hcnlDb250ZXh0LmNsaXAocmVjdCk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXAocmVj
dCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3By
aW1hcnlDb250ZXh0LmNsaXBPdXQocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBP
dXQocGF0aCk7Ci19Ci0KIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7CisgICAgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlw
UGF0aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBQYXRoKHBh
dGgsIHdpbmRSdWxlKTsKIH0KIAotSW50UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5jbGlwQm91
bmRzKCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZUNh
cChsaW5lQ2FwKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZUNhcChsaW5lQ2FwKTsK
KyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXQocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmNsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9m
ZnNldCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFz
aE9mZnNldCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQuc2V0TGluZUpvaW4obGluZUpvaW4pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRM
aW5lSm9pbihsaW5lSm9pbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZl
cihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxp
bWl0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRl
ckxpbWl0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0
KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFy
eUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwg
c2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKG5hdGl2ZUltYWdlLCBzZWxmU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCk7Cisg
ICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1J
bWFnZSwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVj
dChyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5h
dGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdHRlcm4obmF0
aXZlSW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgZ3Jh
ZGllbnQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBncmFkaWVudCk7
CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtX3ByaW1hcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGlu
YXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1h
cnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CiB9CiAKLUltYWdlRHJhd1Jlc3Vs
dCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2Uo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91
bmRlZEhvbGVSZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi1JbWFnZURy
YXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBo
UnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29u
dGV4dC5kcmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxl
RmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9y
LCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZmlsbEVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwotICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZmlsbFBhdGgocGF0aCk7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5z
Y2FsZShzY2FsZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNjYWxlKHNjYWxlKTsKKyAgICBt
X3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5yb3RhdGUoYW5n
bGVJblJhZGlhbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yb3RhdGUoYW5nbGVJblJhZGlh
bnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQog
ewotICAgIG1fcHJpbWFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOwotICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC50cmFuc2xhdGUoeCwgeSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRo
KHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwogfQogCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
bV9wcmltYXJ5Q29udGV4dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwg
Y29uc3QgRmxvYXRQb2ludCYgdG8pCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRDVE0odHJh
bnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZURldmljZVNj
YWxlKSBjb25zdAordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuZ2V0
Q1RNKGluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBz
ZShyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAK
LUZsb2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsK
LSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJv
dW5kaW5nTW9kZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM3
MCwyOSArMjc1LDU0IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvCiB9CiAjZW5kaWYKIAotRmxv
YXRTaXplIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKK3ZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhdXRvIHNpemUgPSBtX3By
aW1hcnlDb250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgZnJvbSwg
dG8pOwotICAgIHJldHVybiBzaXplOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVy
JiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIGZpbHRlclJlc3VsdHMpCiB7Ci0gICAgbV9wcmltYXJ5
Q29udGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9p
bnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3Vy
Y2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291
cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBj
YXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiB0bykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RW1waGFz
aXNNYXJrcyhjYXNjYWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdFbXBoYXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQs
IGZyb20sIHRvKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Jp
ZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3Qmlk
aVRleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVt
SW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihp
bWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJ
bWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5k
cmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0
ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5w
YWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CisgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQpAQCAtNDA3LDE2ICszMzcsOSBA
QCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LAogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIG1hcmtlclN0eWxlKTsKIH0KIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVy
bCwgcmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0
KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZv
clJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0CiB7
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0
KTsKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsK
IH0KIAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKQEAgLTQyNSwx
OCArMzQ4LDE2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QKICAgICBtX3NlY29uZGFyeUNvbnRl
eHQuYWRkRGVzdGluYXRpb25BdFBvaW50KG5hbWUsIHBvaW50KTsKIH0KIAotYm9vbCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAordm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFy
eUNvbnRleHQuc3VwcG9ydHNJbnRlcm5hbExpbmtzKCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5z
ZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgLy8gVGhpcyBjYWxscyB1cGRhdGVT
dGF0ZSgpIGluc3RlYWQgb2YgZGlkVXBkYXRlU3RhdGUoKSBzbyB0aGF0IGNoYW5nZXMKLSAgICAv
LyBhcmUgYWxzbyBhcHBsaWVkIHRvIGVhY2ggY29udGV4dCdzIEdyYXBoaWNzQ29udGV4dFN0YXRl
LCBzbyB0aGF0IGNvZGUKLSAgICAvLyBpbnRlcm5hbCB0byB0aGUgY2hpbGQgY29udGV4dHMgdGhh
dCByZWFkcyBmcm9tIHRoZSBzdGF0ZSBnZXRzIHRoZSByaWdodCB2YWx1ZXMuCi0gICAgbV9wcmlt
YXJ5Q29udGV4dC51cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC51cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
VVJMRm9yUmVjdCh1cmwsIHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JS
ZWN0KHVybCwgcmVjdCk7CiB9CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQpAQCAt
NDQ2LDUgKzM2NywxMCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRlcHJlY2F0ZWRQcml2YXRlQ29udAogfQogI2VuZGlmCiAKK0Zs
b2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5n
TW9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dC5oCmluZGV4IGY1OGIzNGM5MTQzNDJiNzM3NzcyN2MxMWE3M2I2ZDgyMThlMTU1NmYuLjdhMzdh
MTEzZGQ4MTVlYjNiOTU2MDc1MmQ5ZGM3MGViNWE4OTdjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0LmgKQEAgLTQzLDgzICs0Myw1NCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdDsKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250
ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJl
c3RvcmUoKSBmaW5hbDsKKyNpZiBVU0UoQ0cpCisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwog
Ci0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25l
c3MgPSAxKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFs
OworI2VuZGlmCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7
CiAKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAg
ICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQogICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
ZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBmYWN0b3IpIGZpbmFsOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpIGZpbmFsOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
IAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwot
Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0KLSNpZiBVU0UoQ0cpCi0g
ICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKCkgY29uc3QgZmluYWw7Ci0KICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6
RXZlbk9kZCkgZmluYWw7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotCiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpIGZpbmFsOwogCi0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBX
aW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7Ci0KLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25z
dCBmaW5hbDsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwot
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgZmluYWw7Ci0KLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9
KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdl
OjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pIGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0g
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91
bmRBbGxTaWRlcykgZmluYWw7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwogCisgICAg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7
CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0
IENvbG9yJikgZmluYWw7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTI3LDIzICs5OCwyNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jiwg
ZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgRmxvYXRT
aXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8g
PSBzdGQ6Om51bGxvcHQpIGZpbmFsOwotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNp
Z25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQp
IGZpbmFsOwotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWw7
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0
ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lm
IEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOworI2VuZGlmCiAKKyAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBm
aW5hbDsKLQogICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZv
clJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAgICB2b2lkIHNl
dERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotCiAgICAgYm9vbCBzdXBwb3J0c0ludGVybmFs
TGlua3MoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIHNldERl
c3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Cisg
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRp
bmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNF
KENBSVJPKQogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXgg
YmI0ZGFjMDE5YzViOWUxM2IxMzdhZTY5NGU0YmY2YjI3NmJmY2MwZC4uMWMxYjk2ZWM1Yjk4M2Nj
NWYxOGQ2ZmYxZmQyNTg1N2ZhOTQzYzQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcApAQCAt
OTAsNyArOTAsNyBAQCB2b2lkIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3Q3Jvc3NmYWRl
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIEltYWdlRHJhd1Jlc3VsdCBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQu
dHJhbnNsYXRlKGRzdFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9
IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAyNWEzZDNmZTg3NzMzMWRkYTM5NTc4MDEx
YjZkODkwZjIxMmM3MmU2Li4zYmNiNTA1YWYzYzI4MmY0MjIzMjVjZDdlMzAwNTM0ZmQ5Zjk5Y2I5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhz
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5
cGhzUmVjb3JkZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDI0ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdy
YWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVy
bi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
U3RhdGUuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CiAKLSNpZiBVU0UoQ09SRV9URVhUKQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KLSNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2lmIFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2Vsc2UKLSNpbmNs
dWRlIDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRmxvYXRQb2ludDsKQEAgLTYyLDc2ICs0OSwzMiBAQCBwdWJsaWM6CiAjaWYgVVNFKENP
UkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKICAgICB2b2lkIGRyYXdOYXRpdmVUZXh0KENURm9u
dFJlZiwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lUmVmLCBDR1JlY3QgbGluZVJlY3QpOwogCi0g
ICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVm
LCBDR1JlY3QpOwotICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYpOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBo
W10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIENHUmVjdCwg
Q0dJbWFnZVJlZik7CisgICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmKTsKKyAg
ICB2b2lkIHJlY29yZEVuZExheWVyKENHR1N0YXRlUmVmKTsKKyAgICB2b2lkIHJlY29yZERyYXdH
bHlwaHMoQ0dHU3RhdGVSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlv
bnNbXSwgc2l6ZV90IGNvdW50KTsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZShDR0dTdGF0ZVJl
ZiwgQ0dSZWN0LCBDR0ltYWdlUmVmKTsKICNlbmRpZgogCi0gICAgRGVjb25zdHJ1Y3REcmF3R2x5
cGhzIGRlY29uc3RydWN0RHJhd0dseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb25zdHJ1Y3RE
cmF3R2x5cGhzOyB9Ci0KIHByaXZhdGU6Ci0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JN
KFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRl
eHQoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25P
VFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFu
Y2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3T1RTVkdSdW4oY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBG
b250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSk7Ci0KLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYpOwotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHByZXBhcmVJbnRlcm5hbENvbnRleHQo
Y29uc3QgRm9udCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGNvbmNsdWRlSW50ZXJu
YWxDb250ZXh0KCk7CisgICAgdm9pZCBzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYsIEZvbnRT
bW9vdGhpbmdNb2RlKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KCk7CisgICAgdm9pZCByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKTsKIAotICAgIHZvaWQgdXBkYXRlRmlsbENv
bG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRy
KTsKLSAgICB2b2lkIHVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0g
bnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRyKTsKLSAgICB2b2lkIHVwZGF0ZUNUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBlbnVtIGNsYXNzIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
IHsKLSAgICAgICAgVW5zcGVjaWZpZWQsCi0gICAgICAgIFllcywKLSAgICAgICAgTm8KLSAgICB9
OwotICAgIHZvaWQgdXBkYXRlU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBm
bG9hdCBzaGFkb3dCbHVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKTsKLQotI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAg
dm9pZCB1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZik7Ci0jZW5kaWYKKyAgICB2b2lkIGRyYXdOb25P
VFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25P
VFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9v
d25lcjsKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fZGVzdGluYXRpb25Db250ZXh0OwogICAgIERl
Y29uc3RydWN0RHJhd0dseXBocyBtX2RlY29uc3RydWN0RHJhd0dseXBoczsKICAgICBEZXJpdmVG
b250RnJvbUNvbnRleHQgbV9kZXJpdmVGb250RnJvbUNvbnRleHQ7CiAKLSNpZiBVU0UoQ09SRV9U
RVhUKSAmJiAhUExBVEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1f
aW50ZXJuYWxDb250ZXh0OwotI2VuZGlmCi0KICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9u
dCB7IG51bGxwdHIgfTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X29yaWdpbmFsVGV4dE1hdHJpeDsKIAotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIHN0cnVj
dCBTdHlsZSB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIFJlZlB0cjxH
cmFkaWVudD4gZ3JhZGllbnQ7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybTsKLSAgICAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuOwotICAg
ICAgICB9OwotICAgICAgICBTdHlsZSBmaWxsU3R5bGU7Ci0gICAgICAgIFN0eWxlIHN0cm9rZVN0
eWxlOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0KLSAgICAgICAgc3RydWN0IFNo
YWRvd1N0YXRlIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAgICAgICAgICBm
bG9hdCBibHVyIHsgMCB9OwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBi
b29sIGlnbm9yZVRyYW5zZm9ybXMgeyBmYWxzZSB9OwotICAgICAgICB9OwotICAgICAgICBTaGFk
b3dTdGF0ZSBzaGFkb3c7Ci0gICAgfTsKLSAgICBTdGF0ZSBtX29yaWdpbmFsU3RhdGU7Ci0gICAg
U3RhdGUgbV9jdXJyZW50U3RhdGU7CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJ
TikKKyAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg1MTgwYWQxMDlmZDgxOGU5
YmIxNTg4Y2U5NjJhYjQ2MzA4MTZhMDkuLjM2MTFiMTJjYTlhYjI5ZWI5MjFmMjMyNWUxZjk2ZDI5
NTI1M2M3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5jcHAKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1bgog
CiBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRD
YXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBj
b25zdAogewotICAgIEFTU0VSVCghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpOworICAgIEFT
U0VSVF9VTlVTRUQoY29udGV4dCwgIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICB1
bnNpZ25lZCBkZXN0aW5hdGlvbiA9IHRvLnZhbHVlX29yKHJ1bi5sZW5ndGgoKSk7CiAgICAgCiAg
ICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRp
YWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTAwMDUwCkBAIC0yMTQsNyArMjE0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0
OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlM
aXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxh
eUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+KCk7Ci0gICAgRGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbCByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9h
dFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpObyk7CisgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRp
bmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pOwogICAgIAogICAg
IEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBo
QnVmZmVyLmluaXRpYWxBZHZhbmNlKCkpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5n
Q29udGV4dCwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1h
Z2UuY3BwCmluZGV4IDY0NTg0ZTVjZmUwMTE4ODJlZmFiMmUyM2MzYTU5NGUxNzgyZjI4OTAuLjJm
ODI3ZjYyNWY2NGI1OWNhMWE2NjQ5NjA3MzBmMDNjMjNiYzM3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCkBAIC00Myw3ICs0
Myw3IEBAIEdyYWRpZW50SW1hZ2U6On5HcmFkaWVudEltYWdlKCkgPSBkZWZhdWx0OwogSW1hZ2VE
cmF3UmVzdWx0IEdyYWRpZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25z
LmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENv
bnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0
LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkp
CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgR3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgbV9ncmFkaWVu
dC0+YWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVk
U3JjUmVjdCwgc3BhY2luZyk7CiAKICAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNv
bnRleHQncyBzY2FsZSB0byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNm
b3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhT
Y2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUg
PSBmYWJzKGRlc3RDb250ZXh0Q1RNLnlTY2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRq
dXN0ZWRQYXR0ZXJuQ1RNID0gcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDBiYjEzNTk3
Y2VhNzM2OWRiYmM2ZTE3MjdmMjZjOTJiOGZiNzUxNzYuLmNmOGM3MThiODEyYzc5NzkxZjJiZTNl
YjdkOGJlOGQ1NWEyYzMzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVy
SW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCkBAIC0zNiw0NzMgKzM1LDMx
MCBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIlN5c3RlbUltYWdlLmgi
Ci0jaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlRleHRCb3hJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBUZXh0Qm94SXRlcmF0b3IgewotcHVibGljOgotICAgIFRleHRCb3hJdGVyYXRvcigpCi0g
ICAgICAgIDogbV90ZXh0UnVuKDApCi0gICAgICAgICwgbV9vZmZzZXQoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVk
IG9mZnNldCkKLSAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKLSAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCi0gICAgewotICAgIH0KLQotICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0K
LSAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+
PSBtX3RleHRSdW4tPmxlbmd0aCgpOyB9Ci0gICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0
dXJuICgqbV90ZXh0UnVuKVttX29mZnNldF07IH0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGly
ZWN0aW9uKGN1cnJlbnQoKSk7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94
SXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09
IG90aGVyLm1fb2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47Ci0gICAgfQot
Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFRl
eHRSdW4qIG1fdGV4dFJ1bjsKLSAgICB1bnNpZ25lZCBtX29mZnNldDsKLX07Ci0KLSNkZWZpbmUg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoZmxhZywgcHJvcGVydHkpIFwKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZykgJiYgKG1fc3Rh
dGUucHJvcGVydHkgIT0gc3RhdGUucHJvcGVydHkpKSBcCi0gICAgICAgIGNoYW5nZUZsYWdzLmFk
ZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZyk7Ci0KLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAs
IHNob3VsZFNtb290aEZvbnRzKHRydWUpCi0gICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHModHJ1ZSkKLSAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotICAgICwgZHJh
d0x1bWluYW5jZU1hc2soZmFsc2UpCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0pCisgICAgOiBtX3N0YXRlKGluaXRpYWxDbGlwLCBjaGFuZ2VGbGFncywgaW5pdGlhbENUTSkK
IHsKIH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6On5HcmFwaGljc0NvbnRleHRTdGF0ZSgpID0g
ZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKSA9IGRlZmF1bHQ7
Ci1HcmFwaGljc0NvbnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0
YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpID0gZGVmYXVsdDsKLQotdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2Vz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRl
eHQoKQogewotICAgIGF1dG8gc3Ryb2tlRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSB9OwotICAgIGlm
IChmbGFncy5jb250YWluc0FueShzdHJva2VGbGFncykpIHsKLSAgICAgICAgc3Ryb2tlQ29sb3Ig
PSBzdGF0ZS5zdHJva2VDb2xvcjsKLSAgICAgICAgc3Ryb2tlR3JhZGllbnQgPSBzdGF0ZS5zdHJv
a2VHcmFkaWVudDsKLSAgICAgICAgc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZVBhdHRlcm47
Ci0gICAgfQotCi0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFn
cy5jb250YWluc0FueShmaWxsRmxhZ3MpKSB7Ci0gICAgICAgIGZpbGxDb2xvciA9IHN0YXRlLmZp
bGxDb2xvcjsKLSAgICAgICAgZmlsbEdyYWRpZW50ID0gc3RhdGUuZmlsbEdyYWRpZW50OwotICAg
ICAgICBmaWxsUGF0dGVybiA9IHN0YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAg
ICAgICBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIHNoYWRvd0Js
dXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwotICAgICAgICBzaGFkb3dDb2xvciA9IHN0YXRlLnNoYWRv
d0NvbG9yOwotICAgICAgICBzaGFkb3dSYWRpdXNNb2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHN0cm9rZVRoaWNrbmVzcyA9IHN0YXRl
LnN0cm9rZVRoaWNrbmVzczsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdGV4dERyYXdpbmdNb2Rl
ID0gc3RhdGUudGV4dERyYXdpbmdNb2RlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHN0cm9rZVN0eWxl
ID0gc3RhdGUuc3Ryb2tlU3R5bGU7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZmlsbFJ1bGUgPSBzdGF0ZS5m
aWxsUnVsZTsKKyAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV90
cmFuc3BhcmVuY3lMYXllckNvdW50KTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBhbHBoYSA9IHN0YXRlLmFs
cGhhOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQoreworICAgIG1fc3RhY2suYXBwZW5k
KG1fc3RhdGUpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkJsZW5kTW9kZUNoYW5nZSB9KSkgewotICAgICAgICBjb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBibGVuZE1vZGUgPSBzdGF0ZS5ibGVuZE1vZGU7
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCit7CisgICAgaWYgKG1fc3RhY2suaXNF
bXB0eSgpKSB7CisgICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxp
YXNDaGFuZ2UpKQotICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBzdGF0ZS5zaG91bGRBbnRpYWxp
YXM7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBtX2xhc3RBcHBsaWVk
U3RhdGUgPSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkU21v
b3RoRm9udHMgPSBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKLQotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKSkKLSAgICAgICAgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc3RhdGUuc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Cisg
ICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0YWNrIGJ1ZmZlciB3aGVu
IGl0IGdvZXMgZW1wdHkuCisgICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkg
c2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5LgorICAgIGlm
IChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGFjay5jbGVhcigpOworfQogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFz
a0NoYW5nZSkpCi0gICAgICAgIGRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWluYW5j
ZU1hc2s7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKQorewor
ICAgIG1fc3RhdGUuZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX2xhc3RBcHBsaWVkU3Rh
dGUgPSBtX3N0YXRlOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAgaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7CitG
bG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIHJldHVybiBGbG9hdFNpemUo
dHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworfQorICAgIAorRmxvYXRT
aXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgYXV0byB0cmFuc2Zvcm1lZERl
c3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOworICAgIHJldHVybiB0cmFuc2Zv
cm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOworfQogCi0jaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAgdXNlRGFya0FwcGVhcmFu
Y2UgPSBzdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsKLSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpCit7CisgICAgKyttX3RyYW5zcGFyZW5j
eUxheWVyQ291bnQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CisgICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3Vu
dCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworfQogCi0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlR3JhZGllbnRDaGFuZ2UsIHN0cm9rZUdyYWRpZW50
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VQYXR0ZXJuQ2hhbmdlLCBz
dHJva2VQYXR0ZXJuKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsR3JhZGll
bnRDaGFuZ2UsIGZpbGxHcmFkaWVudCk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
RmlsbFBhdHRlcm5DaGFuZ2UsIGZpbGxQYXR0ZXJuKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3N0YXRlLmNsaXAocmVjdCk7Cit9
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKQotICAgICAgICAmJiAobV9zdGF0ZS5zaGFkb3dPZmZzZXQgIT0gc3RhdGUu
c2hhZG93T2Zmc2V0Ci0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0JsdXIgIT0gc3RhdGUu
c2hhZG93Qmx1cgotICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dDb2xvciAhPSBzdGF0ZS5z
aGFkb3dDb2xvcikpCi0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSkKK3sKKyAgICBtX3N0YXRlLmNsaXAocGF0aC5mYXN0Qm91bmRp
bmdSZWN0KCkpOworfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BS
T1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4dERyYXdpbmdNb2RlKTsKLSAgICBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xvckNoYW5nZSwgc3Ryb2tlQ29sb3IpOwot
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxDb2xvckNoYW5nZSwgZmlsbENvbG9y
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VTdHlsZUNoYW5nZSwgc3Ry
b2tlU3R5bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdl
LCBmaWxsUnVsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoQWxwaGFDaGFuZ2Us
IGFscGhhKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3Vu
ZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJh
dGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KQotICAg
ICAgICAmJiAobV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciAhPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciB8fCBtX3N0YXRlLmJsZW5kTW9kZSAhPSBzdGF0ZS5ibGVuZE1vZGUpKSB7Ci0gICAgICAg
IGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlKTsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIGlmICghcmVjdC5pc1JvdW5k
ZWQoKSkgeworICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3VsZEFudGlhbGlhc0No
YW5nZSwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShT
aG91bGRTbW9vdGhGb250c0NoYW5nZSwgc2hvdWxkU21vb3RoRm9udHMpOwotICAgIENIRUNLX0ZP
Ul9DSEFOR0VEX1BST1BFUlRZKFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
OwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdl
LCBkcmF3THVtaW5hbmNlTWFzayk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoSW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSwgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7
Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlLCB1c2VEYXJrQXBwZWFyYW5jZSk7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiBjaGFuZ2VGbGFnczsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0
aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBt
X3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3MpOwotCi0gICAgYXV0byBzdHJva2VGbGFn
cyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0cm9rZUZs
YWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoc3Ryb2tlRmxhZ3MpOwotCi0gICAg
YXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShm
aWxsRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShmaWxsRmxhZ3MpOwotCi0g
ICAgYXV0byBjb21wb3NpdGVPcGVyYXRvckZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2Rl
Q2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGNvbXBvc2l0ZU9wZXJhdG9yRmxh
Z3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShjb21wb3NpdGVPcGVyYXRvckZsYWdz
KTsKLQotICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGZsYWdzKTsKKyAgICBpbWFnZUJ1ZmZlci5jbGlw
VG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUdy
YWRpZW50KCptX3N0YXRlLnN0cm9rZUdyYWRpZW50LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0
cm9rZVBhdHRlcm4oKm1fc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoKm1fc3RhdGUuZmlsbEdyYWRpZW50LCBt
X3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9z
dGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1
c01vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvIHByZXZpb3VzQ29t
cG9zaXRlTW9kZSA9IGNvbXBvc2l0ZU1vZGUoKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAg
ICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9kZShtX3N0YXRlLnRleHREcmF3aW5nTW9kZSk7
Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3Rh
dGUuc3Ryb2tlQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKG1fc3RhdGUuZmlsbENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlU3R5bGUobV9zdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2Up
KQotICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRBbHBoYShtX3N0YXRlLmFscGhhKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5n
ZSB9KSkKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9zdGF0ZS5jb21w
b3NpdGVPcGVyYXRvciwgbV9zdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkp
Ci0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKG1fc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxk
U21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFu
Y2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpV
c2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VXNlRGFya0FwcGVh
cmFuY2UobV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKKyAgICBzZXRDb21wb3Np
dGVNb2RlKHsgb3BlcmF0aW9uLCBibGVuZE1vZGUgfSk7CisgICAgZmlsbFJlY3QocmVjdCwgY29s
b3IpOworICAgIHNldENvbXBvc2l0ZU1vZGUocHJldmlvdXNDb21wb3NpdGVNb2RlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29u
c3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNoYW5nZS1mbGFn
cyIsIG1fY2hhbmdlRmxhZ3MudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1ncmFkaWVudCIsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHko
InN0cm9rZS1wYXR0ZXJuIiwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0
YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoImZpbGwtcGF0dGVybiIsIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOwor
ICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctYmx1ciIsIG1fc3RhdGUuc2hhZG93Qmx1cik7Ci0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LW9mZnNldCIsIG1fc3RhdGUuc2hhZG93T2Zm
c2V0KTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctY29sb3IiLCBtX3N0YXRlLnNo
YWRvd0NvbG9yKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3kt
cmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKK3sKKyAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKKyAgICAgICAgZmlsbFJlY3QocmVj
dC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICAgICAgCisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOworICAgIHNldENvbXBvc2l0ZU1vZGUo
eyBwcmV2aW91c09wZXJhdG9yLCBibGVuZE1vZGUgfSk7CisgICAgZmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7
Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJv
a2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNo
YW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgidGV4dC1kcmF3aW5nLW1vZGUiLCBtX3N0
YXRlLnRleHREcmF3aW5nTW9kZS50b1JhdygpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWNvbG9yIiwgbV9z
dGF0ZS5maWxsQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzdHJva2Utc3R5bGUiLCBtX3N0YXRlLnN0cm9rZVN0eWxlKTsKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQoreworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFu
Z2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtcnVsZSIsIG1fc3RhdGUuZmlsbFJ1
bGUpOworICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCisgICAgICAg
IHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKKyAgICBlbHNlCisgICAgICAg
IHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEiLCBtX3N0YXRlLmFscGhhKTsKKyAgICBXaW5kUnVs
ZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7CisgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmls
bENvbG9yKCk7CisgICAgCisgICAgc2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOworICAg
IHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0b3IiLCBtX3N0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShvbGRG
aWxsUnVsZSk7CisgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgbV9zdGF0ZS5ibGVu
ZE1vZGUpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNl
KGVsbGlwc2UpOworICAgIGZpbGxQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hv
dWxkQW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRo
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5h
ZGRFbGxpcHNlKGVsbGlwc2UpOworICAgIHN0cm9rZVBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3Ro
Rm9udHNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgtZm9u
dHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxp
cHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikKK3sKKyAgICBhdXRvIG9sZEZpbGxD
b2xvciA9IGZpbGxDb2xvcigpOworICAgIGF1dG8gb2xkU3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xv
cigpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIHNldEZpbGxDb2xvcihzaGFkb3dDb2xvcik7Cisg
ICAgc2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IpOworICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVj
dChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
IAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9y
KGVsbGlwc2VDb2xvcik7CisgICAgZHJhd0VsbGlwc2UocmVjdCk7CiAKLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tD
aGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImRyYXctbHVtaW5hbmNlLW1hc2siLCBt
X3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9y
KTsKKyAgICBzZXRTdHJva2VDb2xvcihvbGRTdHJva2VDb2xvcik7Cit9CiAKLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgidXNlLWRhcmstYXBwZWFyYW5jZSIsIG1fc3RhdGUudXNlRGFya0FwcGVhcmFu
Y2UpOwotI2VuZGlmCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3sKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQog
Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
IHsKLSAgICBzdGF0ZUNoYW5nZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7CisgICAgZHJhd0lt
YWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXpl
KCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09w
dGlvbnMpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAg
IEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwg
aW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhY2suYXBw
ZW5kKG1fc3RhdGUpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBv
bGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKKyAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIGlmIChtX3N0YWNrLmlzRW1wdHko
KSkgewotICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOwotICAgIG1fc3RhY2sucmVt
b3ZlTGFzdCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0
YWNrIGJ1ZmZlciB3aGVuIGl0IGdvZXMgZW1wdHkuCi0gICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdp
bGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNh
cGFjaXR5LgotICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGFjay5jbGVh
cigpOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwor
ICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0KGRl
c3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2Fs
U2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwg
ZmxhZ3MpOwotICAgIGRpZFVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5s
b2dpY2FsU2l6ZSgpOworICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdl
KSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHNhdmUoKTsKLQotICAgIHNldFN0cm9rZUNvbG9y
KHNoYWRvd0NvbG9yKTsKLSAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOwotCi0gICAgZHJh
d0VsbGlwc2UoRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSkpOwotCi0gICAgc2V0U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKLSAg
ICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKLQotICAgIGRyYXdFbGxpcHNlKHJlY3QpOyAg
Ci0KLSAgICByZXN0b3JlKCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAg
IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRo
aXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRz
KQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRy
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSk7CisgICAgYXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1h
Z2UsIHNvdXJjZUltYWdlUmVjdCwgcmVzdWx0cyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHNjYWxl
KHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKS5oZWlnaHQoKSB9KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1
bHQtPmFic29sdXRlSW1hZ2VSZWN0KCkpOworICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUm
IG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dSYWRpdXNNb2Rl
IHJhZGl1c01vZGUpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUuc2hh
ZG93T2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZSA9IHJhZGl1c01vZGU7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxv
YXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclNoYWRvdygpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKLSAgICBtX3N0YXRlLnNoYWRvd0Js
dXIgPSAwOwotICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwotICAgIG1fc3RhdGUu
c2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQ7Ci0gICAgZGlkVXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Cisg
ICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKGltYWdlUGFpbnRp
bmdPcHRpb25zLm9yaWVudGF0aW9uKCkpKTsKKyAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc3JjUmVjdCwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwg
Q29sb3ImIGNvbG9yKSBjb25zdAorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIG9mZnNldCA9IG1fc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgIGJsdXIgPSBtX3N0YXRl
LnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwotCi0gICAgcmV0
dXJuIGhhc1NoYWRvdygpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRl
cnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9u
UXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLmZpbGxHcmFk
aWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNo
YW5nZSk7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25R
dWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkp
OworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK0ltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAorICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUocGF0dGVy
bik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVBhdHRlcm5DaGFuZ2UpOworICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUg
JiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CisgICAgICAgIC8vIEp1c3QgZG8gYSBz
Y2FsZS4KKyAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJj
ZSwgb3B0aW9ucyk7CisgICAgfQorCisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zLmNv
bXBvc2l0ZU9wZXJhdG9yKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBtX3N0
YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdU
Rk1vdmUocGF0dGVybik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKKyAgICBzeXN0ZW1JbWFnZS5kcmF3KCp0aGlz
LCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUu
c3Ryb2tlQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUo
Z3JhZGllbnQpOwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHN0
cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0g
bnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOworICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3Jh
ZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwotICAgIG1fc3RhdGUu
ZmlsbEdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3Rh
dGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwotICAgIC8vIEZJWE1FOiBh
bHNvIGZpbGwgcGF0dGVybj8KKyAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsK
KyAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNv
dW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CisgICAgZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CiB9CiAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKQEAgLTUxMSwx
MSArMzQ3LDYgQEAgRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICByZXR1cm4gZm9udC5kcmF3
VGV4dCgqdGhpcywgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmdNb2RlKQotewotICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gdG8pCiB7CiAgICAgZm9udC5kcmF3RW1waGFzaXNNYXJrcygqdGhpcywgcnVuLCBt
YXJrLCBwb2ludCwgZnJvbSwgdG8pOwpAQCAtNTQ5LDcgKzM4MCw0NSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sCiAgICAgICAgIGJpZGlSdW4gPSBiaWRpUnVuLT5uZXh0KCk7CiAgICAgfQogCi0g
ICAgYmlkaVJ1bnMuY2xlYXIoKTsKKyAgICBiaWRpUnVucy5jbGVhcigpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHlsZSkKK3sK
KyAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFz
aEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBz
dHlsZSk7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVC
b3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykKK3sKKyAg
ICBDb2xvciBkdW1teUNvbG9yOworICAgIHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KHJlY3QsIHByaW50aW5nLCBkdW1teUNvbG9yKTsKK30KKworRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIENvbG9yJiBj
b2xvcikKK3sKKyAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBm
bG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKKyAgICBpZiAo
cHJpbnRpbmcpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVj
dC53aWR0aCgpLCB0aGlja25lc3MpKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBnZXRDVE0oKTsKKyAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFz
c3VtaW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KKyAgICBmbG9hdCBzY2FsZSA9IHRyYW5z
Zm9ybS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJh
bnNmb3JtLmEoKTsKKyAgICBpZiAoc2NhbGUgPCAxLjApIHsKKyAgICAgICAgLy8gVGhpcyBjb2Rl
IGFsd2F5cyBkcmF3cyBhIGxpbmUgdGhhdCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdo
LAorICAgICAgICAvLyB3aGljaCB0ZW5kcyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBz
bWFsbCBzY2FsZXMuIFRvIGNvdW50ZXIgdGhpcworICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhh
IGlzIGFwcGxpZWQgdG8gdGhlIHVuZGVybGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwg
c2NhbGVzLgorICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhh
ID0gMC40ZjsKKyAgICAgICAgZmxvYXQgc2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVB
bHBoYSA/IHNjYWxlIDogbWluaW11bVVuZGVybGluZUFscGhhOworICAgICAgICBjb2xvciA9IGNv
bG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KHNoYWRlKTsKKyAgICB9CisKKyAgICBGbG9h
dFBvaW50IGRldmljZVBvaW50ID0gdHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7
CisgICAgLy8gVmlzdWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFs
IHJvdW5kZi9jZWlsZi4gdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBv
dmVyZmxvdyB2YWx1ZSBmb3IgdW5kZXJsaW5lIGRlY29yYXRpb24uCisgICAgRmxvYXRQb2ludCBk
ZXZpY2VPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihk
ZXZpY2VQb2ludC55KCkpKTsKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVy
c2UoKSkKKyAgICAgICAgb3JpZ2luID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9y
aWdpbik7CisgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRo
KCksIHRoaWNrbmVzcykpOwogfQogCiBzdGF0aWMgSW50U2l6ZSBzY2FsZWRJbWFnZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlKQpAQCAtNjM5
LDE4NyArNTA4LDkgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0
ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHIKICAgICByZXR1cm4gY3JlYXRl
U2NhbGVkSW1hZ2VCdWZmZXIocmVjdCwgc2NhbGVGYWN0b3IoKSwgY29sb3JTcGFjZSwgcmVuZGVy
aW5nTW9kZSgpLCByZW5kZXJpbmdNZXRob2QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgc3lzdGVtSW1hZ2UuZHJhdygqdGhpcywgZGVzdGlu
YXRpb25SZWN0KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICByZXR1cm4g
ZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSksIEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25z
KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBzcmNSZWN0
KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlv
bigpKSk7Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3Qs
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0
aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0
eSgpKTsKLSAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZv
clRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBy
ZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLAotICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoaFJ1bGUg
PT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewot
ICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgq
dGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1hZ2Uu
ZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhS
dWxlLCB2UnVsZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCi17Ci0gICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3Qo
ZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5s
b2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZs
b2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3Bl
KCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIGltYWdlLmRyYXco
KnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgp
OwotICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0
KGRlc3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dp
Y2FsU2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
aW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwotICAg
IGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgZGVzdGluYXRpb24sIEZs
b2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9w
dGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25z
dW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25z
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQotewotICAgIGF1dG8gcmVz
dWx0ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53
aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7Ci0gICAgZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgcmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKLSAg
ICBzY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1h
Z2UuZHJhd1BhdHRlcm4oKnRoaXMsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0
aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcFBhdGgocGF0
aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsK
LSAgICAgICAgY2xpcE91dChyZWN0LnJlY3QoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKLSAgICBjbGlw
T3V0KHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKLXsKLSAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3Qp
OwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQotewotICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotewotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVP
cGVyYXRpb24oKTsKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7Ci0g
ICAgZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2
aW91c09wZXJhdG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpIHsKLSAgICAgICAg
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwot
ICAgICAgICBmaWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKLSAgICAgICAgc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZmlsbFJlY3QocmVjdC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxl
bmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBh
dGguYWRkUmVjdChyZWN0KTsKLQotICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNa
ZXJvKCkpCi0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAot
ICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxlID0gZmlsbFJ1bGUoKTsKLSAgICBDb2xvciBvbGRGaWxs
Q29sb3IgPSBmaWxsQ29sb3IoKTsKLSAgICAKLSAgICBzZXRGaWxsUnVsZShXaW5kUnVsZTo6RXZl
bk9kZCk7Ci0gICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAotICAgIGZpbGxQYXRoKHBhdGgpOwot
ICAgIAotICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKLSAgICBzZXRGaWxsQ29sb3Iob2xk
RmlsbENvbG9yKTsKLX0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCi17Ci0gICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJh
dGlvbjsKLSAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IGJsZW5kTW9kZTsKLSAgICBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hh
bmdlKTsKLX0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRh
cmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBT
dHJva2VTdHlsZSBwZW5TdHlsZSkKIHsKQEAgLTg1MCw3NyArNTQxLDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxv
YXRQb2ludCYgcDIKICAgICB9CiB9CiAKLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yKCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgcmV0
dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci19
Ci0gICAgCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmco
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dAotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAgICBhdXRvIHRyYW5zZm9ybWVk
RGVzdFJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIHRyYW5z
Zm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGZpbGxQYXRoKHBh
dGgpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBw
YXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKLSAgICBmaWxsUGF0aChwYXRoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2Uo
ZWxsaXBzZSk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgZHJhd0xp
bmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAs
IHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOwotfQot
Ci1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgQ29sb3IgZHVt
bXlDb2xvcjsKLSAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xvcik7Ci19Ci0KLUZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgZmxvYXQgdGhpY2tu
ZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7Ci0gICAgaWYgKHByaW50aW5nKQot
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwg
dGhpY2tuZXNzKSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgLy8gSnVz
dCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBh
cmUgZXF1YWwuCi0gICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0
cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7Ci0gICAgaWYgKHNj
YWxlIDwgMS4wKSB7Ci0gICAgICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRo
YXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxpbmUgaGlnaCwKLSAgICAgICAgLy8gd2hpY2ggdGVu
ZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVy
IHRoaXMKLSAgICAgICAgLy8gZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRl
cmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KLSAgICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA9IDAuNGY7Ci0gICAgICAgIGZsb2F0
IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1V
bmRlcmxpbmVBbHBoYTsKLSAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeShzaGFkZSk7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRy
YW5zZm9ybS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOwotICAgIC8vIFZpc3VhbCBvdmVyZmxv
dyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92
ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVy
bGluZSBkZWNvcmF0aW9uLgotICAgIEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2lu
dChyb3VuZGYoZGV2aWNlUG9pbnQueCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7Ci0gICAg
aWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCkpCi0gICAgICAgIG9yaWdpbiA9
IGludmVyc2UudmFsdWUoKS5tYXBQb2ludChkZXZpY2VPcmlnaW4pOwotICAgIHJldHVybiBGbG9h
dFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKLX0KLQog
ZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0
aChmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKIHsKICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJv
a2VUaGlja25lc3MoKTsKQEAgLTk3MiwxNSArNTkyLDQgQEAgVmVjdG9yPEZsb2F0UG9pbnQ+IEdy
YXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2Fs
TGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9OwogfQogCi0jaWYgRU5BQkxFKFZJREVP
KQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYg
cGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHBsYXllci5wbGF5
ZXJQcml2YXRlKCktPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlv
bik7Ci19Ci0jZW5kaWYKLQotdm9pZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5n
SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQotewotfQotCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IGZiOTVkZDI1YjI3MWRlYjlmYTg1ZmYyZDlmMWY3NDcxNmEwNjZiYWUuLmIzOWNkODI0ODAw
YTk0MjczMWY3NzRhYmQwYTk4Y2RmYmE3NGY4YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtMzAsNDkgKzMwLDE4IEBACiAjaW5jbHVkZSAiRGVzdGluYXRpb25D
b2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRp
b24uaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgogCi0jaWYgVVNFKENHKQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0OwotI2VsaWYgVVNFKENBSVJPKQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87Ci19Ci10eXBlZGVmIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2Vsc2UKLXR5cGVkZWYgdm9p
ZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQot
I2luY2x1ZGUgIkRJQlBpeGVsRGF0YS5oIgotdHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKLSNp
ZiAhVVNFKENHKQotLy8gVUludDggaXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2Uu
aAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwotI2VuZGlmCi0jZW5kaWYKLQotLy8gWDEx
IGhlYWRlcnMgZGVmaW5lIGEgYnVuY2ggb2YgbWFjcm9zIHdpdGggY29tbW9uIHRlcm1zLCBpbnRl
cmZlcmluZyB3aXRoIFdlYkNvcmUgYW5kIFdURiBlbnVtIHZhbHVlcy4KLS8vIEFzIGEgd29ya2Fy
b3VuZCwgd2UgZXhwbGljaXRseSB1bmRlZiB0aGVtIGhlcmUuCi0jaWYgZGVmaW5lZChOb25lKQot
I3VuZGVmIE5vbmUKLSNlbmRpZgotI2lmIGRlZmluZWQoQmVsb3cpCi0jdW5kZWYgQmVsb3cKLSNl
bmRpZgotI2lmIGRlZmluZWQoU3VjY2VzcykKLSN1bmRlZiBTdWNjZXNzCi0jZW5kaWYKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CkBAIC04Miw3ICs1MSw2
IEBAIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW50
UmVjdDsKIGNsYXNzIE1lZGlhUGxheWVyOwogY2xhc3MgUm91bmRlZFJlY3Q7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHRHTDsKQEAgLTkxLDE3NCArNTksMTIgQEAgY2xhc3MgU3lzdGVtSW1hZ2U7CiBj
bGFzcyBUZXh0UnVuOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKLW5hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7Ci1jbGFzcyBSZWNvcmRlcjsKLX0KLQotZW51bSBjbGFzcyBUZXh0RHJhd2lu
Z01vZGUgOiB1aW50OF90IHsKLSAgICBGaWxsID0gMSA8PCAwLAotICAgIFN0cm9rZSA9IDEgPDwg
MSwKLX07Ci11c2luZyBUZXh0RHJhd2luZ01vZGVGbGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2lu
Z01vZGU+OwotCi0vLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZh
cywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLS8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50
IG9mIHJhZGlpID4gOHB4LgotZW51bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7Ci0g
ICAgRGVmYXVsdCwKLSAgICBMZWdhY3kKLX07Ci0KLWVudW0gU3Ryb2tlU3R5bGUgewotICAgIE5v
U3Ryb2tlLAotICAgIFNvbGlkU3Ryb2tlLAotICAgIERvdHRlZFN0cm9rZSwKLSAgICBEYXNoZWRT
dHJva2UsCi0gICAgRG91YmxlU3Ryb2tlLAotICAgIFdhdnlTdHJva2UsCi19OwotCi1zdHJ1Y3Qg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgewotICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4X3Qg
ewotICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAot
ICAgICAgICBTcGVsbGluZywKLSAgICAgICAgR3JhbW1hciwKLSAgICAgICAgQXV0b2NvcnJlY3Rp
b25SZXBsYWNlbWVudCwKLSAgICAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAgfSBtb2Rl
OwotICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OwotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2Vy
TGluZVN0eWxlPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbW9kZTsKLSAgICBlbmNvZGVyIDw8IHNob3VsZFVz
ZURhcmtBcHBlYXJhbmNlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRp
b25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9kZTsK
LSAgICBkZWNvZGVyID4+IG1vZGU7Ci0gICAgaWYgKCFtb2RlKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZTsKLSAgICBkZWNvZGVyID4+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmICgh
c2hvdWxkVXNlRGFya0FwcGVhcmFuY2UpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4ge3sgKm1vZGUsICpzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9fTsKLX0KLQot
c3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUgewotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRv
cj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7Ci0KLSAgICBlbnVtIENoYW5nZSA6IHVpbnQzMl90
IHsKLSAgICAgICAgU3Ryb2tlR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAotICAgICAgICBTdHJva2VQYXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgPSAx
IDw8IDEsCi0gICAgICAgIEZpbGxHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMiwKLSAgICAgICAgRmlsbFBhdHRlcm5DaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAzLAotICAgICAgICBTdHJva2VUaGlja25lc3NDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDQsCi0gICAgICAgIFN0cm9rZUNvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgNSwKLSAgICAgICAgU3Ryb2tlU3R5bGVDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgID0gMSA8PCA2LAotICAgICAgICBGaWxsQ29sb3JDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDcsCi0gICAgICAgIEZpbGxSdWxlQ2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgOCwKLSAgICAgICAgU2hhZG93Q2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCA5LAotICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0No
YW5nZSAgICAgICAgICAgPSAxIDw8IDEwLAotICAgICAgICBBbHBoYUNoYW5nZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAotICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDEyLAotICAgICAgICBCbGVuZE1vZGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAotICAgICAgICBUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAotICAgICAgICBTaG91bGRBbnRp
YWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAotICAgICAgICBTaG91bGRT
bW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAotICAgICAgICBTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAgPSAxIDw8IDE3LAotICAgICAgICBE
cmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE4LAotICAgICAg
ICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAgICAgICAgPSAxIDw8IDE5LAotI2lm
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgICAgIFVzZURhcmtBcHBlYXJhbmNlQ2hh
bmdlICAgICAgICAgICAgICAgICA9IDEgPDwgMjAsCi0jZW5kaWYKLSAgICB9OwotICAgIHVzaW5n
IFN0YXRlQ2hhbmdlRmxhZ3MgPSBPcHRpb25TZXQ8Q2hhbmdlPjsKLQotICAgIHZvaWQgbWVyZ2VD
aGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVu
dDsKLSAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKLSAgICAKLSAgICBSZWZQdHI8
R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKLSAgICBSZWZQdHI8UGF0dGVybj4gZmlsbFBhdHRlcm47
Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotCi0gICAgQ29sb3Igc3Ryb2tlQ29sb3Ig
eyBDb2xvcjo6YmxhY2sgfTsKLSAgICBDb2xvciBmaWxsQ29sb3IgeyBDb2xvcjo6YmxhY2sgfTsK
LSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBzdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtOwotICAgIEFmZmluZVRyYW5zZm9ybSBmaWxsR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybTsKLQotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyB7IDAgfTsKLSAgICBmbG9h
dCBzaGFkb3dCbHVyIHsgMCB9OwotICAgIGZsb2F0IGFscGhhIHsgMSB9OwotCi0gICAgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUgeyBTb2xpZFN0cm9rZSB9OwotICAgIFdpbmRSdWxlIGZpbGxSdWxl
IHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKLQotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRE
cmF3aW5nTW9kZSB7IFRleHREcmF3aW5nTW9kZTo6RmlsbCB9OwotICAgIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsK
LSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlIHsgQmxlbmRNb2RlOjpOb3JtYWwgfTsKLSAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlv
blF1YWxpdHk6OkRlZmF1bHQgfTsKLSAgICBTaGFkb3dSYWRpdXNNb2RlIHNoYWRvd1JhZGl1c01v
ZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07Ci0KLSAgICBib29sIHNob3VsZEFudGlh
bGlhcyA6IDE7Ci0gICAgYm9vbCBzaG91bGRTbW9vdGhGb250cyA6IDE7Ci0gICAgYm9vbCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMgOiAxOwotICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgOiAxOwotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwotI2lmIEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCi0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSA6IDE7Ci0jZW5k
aWYKLX07Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSB7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVDaGFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRl
KQotICAgICAgICAsIG1fY2hhbmdlRmxhZ3MoZmxhZ3MpCi0gICAgewotICAgIH0KLQotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBjb25zdDsKLQotICAgIHZvaWQgYWNjdW11bGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKTsKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAg
IAotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKLQotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlIG1fc3RhdGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKLX07Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwot
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBo
aWNzQ29udGV4dCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOiAgIAorICAgIGZy
aWVuZCBjbGFzcyBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworcHVibGljOgorICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdy
YXBoaWNzQ29udGV4dCgpOwogCiAgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNzAsMjcwICs3NiwyNzMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1
bFBhaW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIC8vIENvbnRleHQgU3RhdGUK
KyAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRmdWxQYWludERldGVjdGVkOyB9CisgICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3Rl
ZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZs
b2F0IHRoaWNrbmVzcykgeyBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSk7IH0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZVRoaWNrbmVzczsgfQorICAgIC8vIENvbnRleHQgU3RhdGUKIAotICAgIHZv
aWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHls
ZSA9IHN0eWxlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9Ci0gICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0eWxlOyB9CisgICAgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgbWVy
Z2VTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1fc3Rh
dGUubWVyZ2VDaGFuZ2VzKG90aGVyKTsgfQorICAgIHZvaWQgbWVyZ2VTdGF0ZURpZmZzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikgeyBtX3N0YXRlLm1lcmdlRGlmZnMob3RoZXIp
OyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
Jik7Ci0gICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zdHJva2VDb2xvcjsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmdldENUTSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGN0bSkgeyBtX3N0YXRlLnNldENUTShjdG0sIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkg
eyBzZXRDVE0oZ2V0Q1RNKCkgKiBjdG0pOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkgeyBzZXRDVE0oZ2V0Q1RNKCkudHJhbnNsYXRlKHgsIHkpKTsgfQorICAgIHZvaWQg
dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQm
IHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4
LCBmbG9hdCBzeSkgeyBzZXRDVE0oZ2V0Q1RNKCkuc2NhbGUoc3gsIHN5KSk7IH0KKyAgICB2b2lk
IHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkgeyBzY2FsZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9Cisg
ICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIHsgc2V0Q1RNKGdldENUTSgpLnJv
dGF0ZShyYWQyZGVnKGFuZ2xlSW5SYWRpYW5zKSkpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOwotICAgIFBhdHRlcm4qIHN0cm9r
ZVBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0K
KyAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxs
QnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIGZp
bGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5wYXR0ZXJuKCk7
IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxTcGFjZVRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZv
aWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldEZpbGxDb2xv
cihjb2xvciwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0RmlsbEdyYWRpZW50
KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50
KSwgc3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9
KSB7IG1fc3RhdGUuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zv
cm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxH
cmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQq
IHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5n
ZXQoKTsgfQorICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5m
aWxsUnVsZSgpOyB9CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBt
X3N0YXRlLnNldEZpbGxSdWxlKGZpbGxSdWxlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAg
ICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuZmlsbFJ1bGUg
PSBmaWxsUnVsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxSdWxlQ2hhbmdlKTsgfQotICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQorICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGll
bnQqIHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgp
LmdyYWRpZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
cm9rZUJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fc3RhdGUuc2V0U3Ryb2tlQ29sb3IoY29sb3IsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVu
dD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNm
b3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCks
IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJl
ZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblNwYWNl
VHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlUGF0dGVybihXVEZNb3ZlKHBhdHRl
cm4pLCBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsgfQorICAgIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKCk7IH0KKyAg
ICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zZXRT
dHJva2VUaGlja25lc3ModGhpY2tuZXNzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQ
YXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4u
Z2V0KCk7IH0KKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuc3Ryb2tlU3R5bGUoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5
bGUgc3R5bGUpIHsgbV9zdGF0ZS5zZXRTdHJva2VTdHlsZShzdHlsZSwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdy
YWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKLSAgICBHcmFkaWVudCog
ZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7
IH0KKyAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVDYXAo
KTsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsgbV9zdGF0ZS5zZXRM
aW5lQ2FwKGxpbmVDYXAsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IGRp
ZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtc0NoYW5nZSk7IH0KLSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIGNv
bnN0IExpbmVEYXNoIGxpbmVEYXNoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5saW5lRGFzaCgp
OyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVEYXNoKSB7IG1fc3RhdGUu
c2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAot
ICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3Rh
dGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQotICAg
IGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRp
YWxpYXM7IH0KKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
bGluZUpvaW4oKTsgfQorICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pIHsg
bV9zdGF0ZS5zZXRMaW5lSm9pbihsaW5lSm9pbiwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0g
ICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1f
c3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KTsgfQotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNob3VsZFNtb290aEZvbnRzOyB9CisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUubWl0ZXJMaW1pdCgpOyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyTGltaXQpIHsgbV9zdGF0ZS5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQsIG1fbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KIAotICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVh
bnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5n
IGdseXBocy4KLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBl
bnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBzZXRT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMpIHsgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsgfQorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlTW9kZSgpOyB9CisgICAgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9k
ZSgpLm9wZXJhdGlvbjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVy
biBjb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVNb2Rl
KENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX3N0YXRlLnNldENvbXBvc2l0ZU1vZGUo
Y29tcG9zaXRlTW9kZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbikgeyBzZXRDb21wb3NpdGVN
b2RlKHsgb3BlcmF0aW9uLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsgfQogCi0gICAgdm9pZCBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsg
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2UpOyB9Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eTsgfQorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmRyb3BTaGFkb3coKTsgfQorICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBkcm9wU2hhZG93KCkub2Zmc2V0OyB9CisgICAgZmxvYXQgc2hhZG93Qmx1cigp
IGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5ibHVyUmFkaXVzOyB9CisgICAgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yKCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmNvbG9yOyB9Cisg
ICAgdm9pZCBzZXREcm9wU2hhZG93KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpIHsgbV9z
dGF0ZS5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3csIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAg
ICB2b2lkIGNsZWFyU2hhZG93KCkgeyBzZXREcm9wU2hhZG93KHsgfSk7IH0KIAotICAgIHZvaWQg
c2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOyBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOyB9Ci0gICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CisgICAgYm9vbCBo
YXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmlzVmlzaWJsZSgp
OyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRv
dygpLmlzQmx1cnJlZCgpOyB9CisgICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBk
cm9wU2hhZG93KCkuaGFzT3V0c2V0cygpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRN
b2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KLSAgICBCbGVuZE1v
ZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7
IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGEoKTsgfQor
ICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5zZXRBbHBoYShhbHBoYSwg
bV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3
THVtaW5hbmNlTWFzazsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsgfQotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOyB9CisgICAgdm9pZCBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpIHsgbV9zdGF0ZS5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZv
aWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV9zdGF0
ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsgfQotICAgIFRleHREcmF3aW5n
TW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERy
YXdpbmdNb2RlOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUoKTsgfQorICAgIHZvaWQgc2V0
VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSkgeyBt
X3N0YXRlLnNldFRleHREcmF3aW5nTW9kZSh0ZXh0RHJhd2luZ01vZGUsIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRv
d1JhZGl1c01vZGU6OkRlZmF1bHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBj
bGVhclNoYWRvdygpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6
ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25zdDsKKyAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKCk7IH0KKyAgICB2b2lkIHNldFNo
b3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNldFNob3VsZEFu
dGlhbGlhcyhzaG91bGRBbnRpYWxpYXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIGJv
b2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3Iu
aXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zp
c2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zm
c2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9v
bCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYm
IG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKCk7IH0KKyAgICB2b2lkIHNldFNo
b3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91
bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQog
Ci0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtBcHBl
YXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5j
ZSA9IHVzZURhcmtBcHBlYXJhbmNlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9Ci0gICAgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0K
LSNlbmRpZgorICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVhbnRpemF0aW9u
IGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5nIGdseXBocy4K
KyAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBlbnN1cmUgYSBo
aWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCisgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMo
Ym9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMoc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBtX2xhc3RBcHBs
aWVkU3RhdGUpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpOyB9CisgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQg
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2soKTsgfQorICAgIHZvaWQgc2V0
RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLnNldERy
YXdMdW1pbmFuY2VNYXNrKGRyYXdMdW1pbmFuY2VNYXNrLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9
CiAKLSAgICAvLyBDYWxsZWQgKmFmdGVyKiBhbnkgY2hhbmdlIHRvIEdyYXBoaWNzQ29udGV4dFN0
YXRlOyBnZW5lcmFsbHkgdXNlZCB0byBwcm9wYWdhdGUgY2hhbmdlcwotICAgIC8vIHRvIHRoZSBw
bGF0Zm9ybSBjb250ZXh0J3Mgc3RhdGUuCi0gICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MpID0gMDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBl
YXJhbmNlKCk7IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UpIHsgbV9zdGF0ZS5zZXRVc2VEYXJrQXBwZWFyYW5jZSh1c2VEYXJrQXBwZWFyYW5j
ZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorI2VuZGlmCiAKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0
b3JlKCk7Ci0gICAgCisgICAgdm9pZCBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHVuc2ln
bmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSA9IDA7CiAjaWYgVVNFKENHKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0
aG9kcz8KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSA9IDA7CisjZW5kaWYKIAotICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFr
ZSB0aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNy
b3NzLXBsYXRmb3JtPwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CiAKLSAgICAvLyBG
SVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0
ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/Ci0gICAgdmlydHVhbCB2b2lkIHNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpID0gMDsKLSNlbmRpZgorICAgIC8vIFRoaXMgZnVu
Y3Rpb24gYXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFr
aW5nIHRoZSBjb250ZXh0IGNhcGFibGUgb2YKKyAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVs
IGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KIAotICAg
IHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMK
IAotICAgIC8vIFBpeGVsIFNuYXBwaW5nCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBpc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVy
cygpICYmIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsgfQogCi0gICAgZW51bSBSb3VuZGluZ01v
ZGUgewotICAgICAgICBSb3VuZEFsbFNpZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVu
c2lvbnMKLSAgICB9OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgPSAwOwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhG
bG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VT
dHlsZSk7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIC8vIFNoYXBlcworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogCi0gICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwg
ZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KLSAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRy
YXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwotICAgIC8v
IHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0
aGUgY29ycmVjdAotICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdmlydHVhbCB2b2lkIGRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX3N0YXRlLmNsaXBCb3VuZHMoKSk7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IHsgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgc3Ryb2tlRWxsaXBzZUFzUGF0aChl
bGxpcHNlKTsgfQorICAgIC8vIFNoYXBlcworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1h
bCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJiwgQmxlbmRNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOwogCi0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRN
aXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0KLSAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVk
aWEKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICBJbnRTaXplIGNvbXBh
dGlibGVJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0g
c3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxv
cHQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmIHNj
YWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6
bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxl
ZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7
IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0Owor
ICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxp
bmcuCisgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGljaCBmaWxscyBwcm9w
ZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKKyAgICAvLyB1c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGlu
c2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKKyAgICAvLyBzdHJva2Ug
Y29sb3IpLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9k
PiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aXJ0dWFsIGRy
YXdQYXRoKGNvbnN0IFBhdGgmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICAvLyBGb2N1
cyBSaW5ncwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFn
ZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImKSA9IDA7CisgICAgLy8gRklYTUU6IENhbiB3ZSBoaWRlIHRoZXNlIGluIHRoZSBD
RyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQs
IGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisjZW5kaWYKIAorICAgIC8v
IEltYWdlcwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihS
ZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXIm
LCBGaWx0ZXJSZXN1bHRzJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6
RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCisgICAg
V0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFj
dG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICNpZiBFTkFC
TEUoVklERU8pCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogI2VuZGlm
Ci0KLSAgICAvLyBDbGlwcGluZwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSA9IDA7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdDsKLQorICAgIAogICAgIC8vIFRleHQKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQg
ZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RS
ZWFkeSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIHsKLSAg
ICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JU
IEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0g
Rm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZv
clRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9
IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNl
LCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUpID0gMDsKIAotICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
OwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0Zv
clRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7CiAKLSAgICAvLyBGb2N1cyBS
aW5ncworICAgIC8vIENvbXBhdGlibGUgSW1hZ2VCdWZmZXIKIAotICAgIHZpcnR1YWwgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikg
PSAwOwotICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50
YXRpb24/IE9yIGVsc2V3aGVyZT8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVl
ZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotI2VuZGlmCisgICAgSW50U2l6ZSBjb21wYXRp
YmxlSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwogCi0gICAgLy8gVHJh
bnNmb3JtcworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUoeyBzLCBzIH0pOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKSB7IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9
Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54
KCksIHAueSgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2Nh
bGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9
IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxv
cHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAx
IH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3Rk
OjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAg
IHZpcnR1YWwgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01l
dGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
UmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQp
IGNvbnN0OwogCi0gICAgZW51bSBJbmNsdWRlRGV2aWNlU2NhbGUgeyBEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlLCBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSB9OwotICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3QgPSAwOworICAgIC8vIFBpeGVsIFNuYXBwaW5nCiAKLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCi0gICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIHZpcnR1YWwg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3Ip
OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OworICAg
IGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAgICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91
bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAgfTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxs
U2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9Q
aXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJv
a2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwogCiAgICAgLy8gTGlua3MKIAorICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAg
dmlydHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0Jikg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIHsgfQogCi0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICAvLyBDb250ZW50ZnVsIFBhaW50IERldGVjdGlvbgorI2lmIFVTRShDRykKKyAgICAv
LyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRo
ZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQotICAgIGJv
b2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBh
aW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRl
eHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRl
eHQ/CisgICAgdmlydHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIHsgfQor
I2VuZGlmCiAKICAgICAvLyBGSVhNRTogTm90aGluZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBo
ZXJlLCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVsc2V3aGVyZS4KICNpZiBPUyhXSU5ET1dTKQpAQCAt
NTQ2LDEwICszNTUsNyBAQCBwdWJsaWM6CiAgICAgLy8gcHV0IGNvZGUgc2hhcmVkIGJldHdlZW4g
V2luZG93cyBDRyBhbmQgV2luZG93cyBDYWlybyBiYWNrZW5kcy4KICAgICB2aXJ0dWFsIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9h
dFJlY3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7
CkBAIC01NjEsMTkxICszNjcsMTcgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IGRhc2hlZExpbmVQ
YXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCwg
ZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OwogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJM
aW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0
aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKSBjb25zdDsKIAotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7Ci0KIHByaXZhdGU6CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBo
aWNzQ29udGV4dFN0YXRlPiBtX2xhc3RBcHBsaWVkU3RhdGU7CiAgICAgVmVjdG9yPEdyYXBoaWNz
Q29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCiAgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lM
YXllckNvdW50IHsgMCB9OwogICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZh
bHNlIH07CiB9OwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUp
Ci0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFu
ZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAg
ICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgfQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAg
ICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29u
dGV4dC5zYXZlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQot
ICAgIHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9y
ZSk7Ci0gICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dCYgbV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KLWNsYXNz
IFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgewotcHVibGljOgotICAgIFRyYW5zcGFyZW5jeUxheWVy
U2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxh
eWVyID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX2Fs
cGhhKGFscGhhKQotICAgICAgICAsIG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQotICAgIHsKLSAg
ICAgICAgaWYgKGJlZ2luTGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihtX2FscGhhKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBiZWdpbkxheWVyKGZs
b2F0IGFscGhhKQotICAgIHsKLSAgICAgICAgbV9hbHBoYSA9IGFscGhhOwotICAgICAgICBtX2Nv
bnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKLSAgICAgICAgbV9iZWdhbkxh
eWVyID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKLSAgICAgICAgICAgIG1fY29udGV4dC5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0Nv
bnRleHQmIG1fY29udGV4dDsKLSAgICBmbG9hdCBtX2FscGhhOwotICAgIGJvb2wgbV9iZWdhbkxh
eWVyOwotfTsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgewotcHVi
bGljOgotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3N0
YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQotICAgIHsgfQotICAgIAotICAgIH5HcmFwaGlj
c0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0
LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJH
cmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBieSAlZCIsICZtX2NvbnRleHQsIChpbnQp
bV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0YWNrU2l6ZSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1fc3Rh
Y2tTaXplOwotfTsKLQotY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9s
YXRpb25RdWFsaXR5VG9Vc2UpCi0gICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3ND
b250ZXh0KQotICAgICAgICAsIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KGdyYXBoaWNz
Q29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAgICAgICwgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSAhPSBJbnRlcnBv
bGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSAh
PSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKTsKLSAg
ICB9Ci0KLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1
YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5KQotICAgICAgICA6IEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGludGVycG9sYXRpb25RdWFsaXR5ID8gaW50
ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpCi0gICAgewotICAgIH0KLQotICAgIH5JbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgYm9vbCBt
X2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
LAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tp
bmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAotICAgIFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKLSAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0g
ICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpGaWxsR3JhZGllbnRDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUNvbG9yQ2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VTdHlsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpGaWxsUnVsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGFDaGFu
Z2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6QmxlbmRNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhc0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21v
b3RoRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2Us
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQot
ICAgICAgICAsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtB
cHBlYXJhbmNlQ2hhbmdlCi0jZW5kaWYKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCi0gICAgV2ViQ29yZTo6U3Ryb2tl
U3R5bGU6Ok5vU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwK
LSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0
cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJs
ZVN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQotICAgID47Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9k
ZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6OlRl
eHREcmF3aW5nTW9kZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAot
ICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQotICAgID47Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM5ZTU4MWRjYzIyMDNhZDIxYTdmNDhmMzU3
ODE0ZGVmYzNjZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKKworI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgQ2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2NsaXBCb3VuZHMoaW5pdGlhbENUTS5tYXBSZWN0KGlu
aXRpYWxDbGlwKSkKKyAgICAsIG1fY2hhbmdlRmxhZ3MoY2hhbmdlRmxhZ3MpCisgICAgLCBtX2N0
bShpbml0aWFsQ1RNKQoreworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmNs
aXBCb3VuZHMoKSBjb25zdAoreworICAgIGlmIChhdXRvIGludmVyc2UgPSBtX2N0bS5pbnZlcnNl
KCkpCisgICAgICAgIHJldHVybiBpbnZlcnNlLT5tYXBSZWN0KG1fY2xpcEJvdW5kcyk7CisKKyAg
ICAvLyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJl
Y3QuCisgICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9y
bSBiZWhhdmlvci4KKyAgICByZXR1cm4gbV9jbGlwQm91bmRzOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0Cit7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBwcmltaXRpdmVDaGFuZ2VGbGFncyB7IENoYW5nZTo6
U3Ryb2tlVGhpY2tuZXNzLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6OkZpbGxCcnVzaCB9
OworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgIT0gKG1fY2hhbmdlRmxhZ3MgJiBwcmltaXRpdmVD
aGFuZ2VGbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKENoYW5nZTo6U3Ryb2tlQnJ1c2gpICYmICFtX3N0cm9rZUJydXNoLmlzUHJp
bWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKENoYW5nZTo6RmlsbEJydXNoKSAmJiAhbV9maWxsQnJ1c2guaXNQcmltaXRpdmUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZUNoYW5nZSA9IFsmXShDaGFuZ2UgY2hhbmdl
LCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG90
aGVyLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkgeworICAgICAgICAgICAgdGhpcy0+
KnByb3BlcnR5ID0gb3RoZXIuKnByb3BlcnR5OworICAgICAgICAgICAgbV9jaGFuZ2VGbGFncy5h
ZGQoY2hhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBBU1NFUlQobV9jbGlwQm91bmRz
ID09IG90aGVyLm1fY2xpcEJvdW5kcyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNUTSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7
CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2Uo
Q2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZUJydXNo
LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNo
KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VD
aGFuZ2UoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Okxp
bmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xp
bmVDYXApOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TWl0ZXJMaW1p
dCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1p
dCk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkFs
cGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Fs
cGhhKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHks
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cywgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcywgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjptZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikKK3sKKyAg
ICBhdXRvIG1lcmdlRGlmZiA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSAhPSBvdGhl
ci4qcHJvcGVydHkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9w
ZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisgICAgCisgICAgbWVyZ2VEaWZm
KENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbFJ1bGUsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAg
IG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ry
b2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9r
ZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIG1l
cmdlRGlmZihDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lRGFzaCwg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOwor
ICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TWl0
ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVy
TGltaXQpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkFscGhhLCAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7Cisg
ICAgbWVyZ2VEaWZmKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hv
dWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3Vs
ZEFudGlhbGlhcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBtZXJn
ZURpZmYoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlRGlmZihDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBzdGF0ZUNoYW5nZU5hbWUoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZSBjaGFuZ2UpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHN0YXRlQ2hhbmdlTmFt
ZXNbXSA9IHsKKyAgICAgICAgImN0bSIsCisKKyAgICAgICAgImZpbGwtYnJ1c2giLAorICAgICAg
ICAiZmlsbC1ydWxlIiwKKworICAgICAgICAic3Ryb2tlLWJydXNoIiwKKyAgICAgICAgInN0cm9r
ZS10aGlja25lc3MiLAorICAgICAgICAic3Ryb2tlLXN0eWxlIiwKKworICAgICAgICAibGluZS1j
YXAiLAorICAgICAgICAibGluZS1kYXNoIiwKKyAgICAgICAgImxpbmUtam9pbiIsCisgICAgICAg
ICJtaXRlci1saW1pdCIsCisKKyAgICAgICAgImNvbXBvc2l0ZS1tb2RlIiwKKyAgICAgICAgImRy
b3Atc2hhZG93IiwKKworICAgICAgICAiYWxwaGEiLAorICAgICAgICAiaW1hZ2UtaW50ZXJwb2xh
dGlvbi1xdWFsaXR5IiwKKyAgICAgICAgInRleHQtZHJhd2luZy1tb2RlIiwKKworICAgICAgICAi
c2hvdWxkLWFudGlhbGlhcyIsCisgICAgICAgICJzaG91bGQtc21vb3RoLWZvbnRzIiwKKyAgICAg
ICAgInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsCisgICAgICAgICJzaGFkb3dzLWln
bm9yZS10cmFuc2Zvcm1zIiwKKyAgICAgICAgImRyYXctbHVtaW5hbmNlLW1hc2siCisjaWYgSEFW
RShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAgICAgLCAidXNlLWRhcmstYXBwZWFyYW5jZSIK
KyNlbmRpZgorICAgIH07CisKKyAgICB1bnNpZ25lZCBtYXNrID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNoYW5nZSk7CisgICAgQVNTRVJUKCEoKG1hc2sgLSAxKSAmIG1hc2spKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2cyKG1hc2spKTsKKyAg
ICByZXR1cm4gc3RhdGVDaGFuZ2VOYW1lc1tpbmRleF07Cit9CisKK1RleHRTdHJlYW0mIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGF1dG8g
ZHVtcCA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJv
cGVydHksIGNvbnN0IFN0cmluZyYgbmFtZSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhjaGFuZ2UpKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KG5hbWUsIHRoaXMt
Pipwcm9wZXJ0eSk7CisgICAgfTsKKworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdlLWZsYWdz
IiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBkdW1wKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q1RNKSk7CisKKyAgICBkdW1wKENo
YW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6RmlsbEJydXNoKSk7CisgICAgZHVtcChDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkZpbGxSdWxlKSk7CisKKyAgICBkdW1wKENo
YW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6U3Ryb2tlQnJ1c2gpKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MsICAgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSk7CisgICAg
ZHVtcChDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFt
ZShDaGFuZ2U6OlN0cm9rZVN0eWxlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6TGluZUNhcCwgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwLCAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUNhcCkpOworICAg
IGR1bXAoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2xpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5h
bWUoQ2hhbmdlOjpMaW5lRGFzaCkpOworICAgIGR1bXAoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luLCAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpMaW5lSm9pbikpOworICAgIGR1
bXAoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX21pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUo
Q2hhbmdlOjpNaXRlckxpbWl0KSk7CisKKyAgICBkdW1wKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCAg
ICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q29tcG9zaXRlTW9kZSkpOwor
ICAgIGR1bXAoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5n
ZU5hbWUoQ2hhbmdlOjpEcm9wU2hhZG93KSk7CisKKyAgICBkdW1wKENoYW5nZTo6QWxwaGEsICAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6QWxwaGEpKTsKKyAg
ICBkdW1wKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAgIGR1bXAoQ2hhbmdl
OjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3RleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpU
ZXh0RHJhd2luZ01vZGUpKTsKKworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcywgICAg
ICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMpKTsKKyAg
ICBkdW1wKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMpKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKSk7CisgICAgZHVtcChDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zLCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMsICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKSk7CisgICAgZHVtcChDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgIHN0
YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrKSk7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBkdW1wKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UpKTsKKyNl
bmRpZgorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSBjaGFuZ2UpCit7CisgICAgdHMg
PDwgc3RhdGVDaGFuZ2VOYW1lKGNoYW5nZSk7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIHN0YXRlLmR1bXAodHMpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmU0Y2VhM2MyZDU4Yzg3YjQ5
MjM4NDc1ZTQ2OGI1ZGZkNWVlM2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApAQCAtMCwwICsxLDM4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VCcnVzaC5oIgorI2luY2x1ZGUgIldpbmRSdWxlLmgi
CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENoYW5n
ZSA6IHVpbnQzMl90IHsKKyAgICAgICAgQ1RNICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAorCisgICAgICAgIEZpbGxCcnVzaCAgICAgICAgICAgICAgICAgICA9IDEgPDwgMSwKKyAg
ICAgICAgRmlsbFJ1bGUgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAorCisgICAgICAgIFN0
cm9rZUJydXNoICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICAgICAgU3Ryb2tlVGhpY2tu
ZXNzICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAgICBTdHJva2VTdHlsZSAgICAgICAgICAg
ICAgICAgPSAxIDw8IDUsCisKKyAgICAgICAgTGluZUNhcCAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCA2LAorICAgICAgICBMaW5lRGFzaCAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisg
ICAgICAgIExpbmVKb2luICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgTWl0
ZXJMaW1pdCAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorCisgICAgICAgIENvbXBvc2l0ZU1v
ZGUgICAgICAgICAgICAgICA9IDEgPDwgMTAsCisgICAgICAgIERyb3BTaGFkb3cgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMTEsCisKKyAgICAgICAgQWxwaGEgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAxMiwKKyAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSAgID0gMSA8PCAx
MywKKyAgICAgICAgVGV4dERyYXdpbmdNb2RlICAgICAgICAgICAgID0gMSA8PCAxNCwKKworICAg
ICAgICBTaG91bGRBbnRpYWxpYXMgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAgICAgICBTaG91
bGRTbW9vdGhGb250cyAgICAgICAgICAgPSAxIDw8IDE2LAorICAgICAgICBTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMgPSAxIDw8IDE3LAorICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyAgICAgPSAxIDw8IDE4LAorICAgICAgICBEcmF3THVtaW5hbmNlTWFzayAgICAgICAgICAgPSAx
IDw8IDE5LAorI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgIFVzZURhcmtB
cHBlYXJhbmNlICAgICAgICAgICA9IDEgPDwgMjAsCisjZW5kaWYKKyAgICB9OworICAgIHVzaW5n
IENoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IENoYW5nZUZsYWdzIGluaXRpYWxDaGFuZ2VGbGFncyA9IHsgQ2hhbmdlOjpGaWxsQnJ1c2gsIENo
YW5nZTo6U3Ryb2tlQnJ1c2gsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzIH07CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwQm91bmRzLCBjb25zdCBDaGFuZ2VGbGFncyYgPSB7IH0sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgaW5pdGlhbENUTSA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0OworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsg
bV9jbGlwQm91bmRzLmludGVyc2VjdChtX2N0bS5tYXBSZWN0KHJlY3QpKTsgfQorCisgICAgQ2hh
bmdlRmxhZ3MgY2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlRmxhZ3M7IH0KKyAgICB2
b2lkIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCkgeyBtX2NoYW5nZUZsYWdzID0geyB9OyB9CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9jdG07IH0KKyAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSwgY29uc3Qgc3RkOjpvcHRpb25h
bDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHko
Q2hhbmdlOjpDVE0sICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sIGN0bSwgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IFNvdXJjZUJydXNoJiBmaWxsQnJ1c2goKSBjb25zdCB7
IHJldHVybiBtX2ZpbGxCcnVzaDsgfQorICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvciwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RB
cHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpGaWxsQnJ1c2gsICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxsQnJ1c2guc2V0R3JhZGll
bnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQo
Q2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1f
ZmlsbEJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyBt
X2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVzaCk7IH0KKworICAgIFdpbmRSdWxlIGZp
bGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbFJ1bGUs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSwgZmlsbFJ1bGUsIGxhc3RBcHBsaWVk
U3RhdGUpOyB9CisKKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1c2goKSBjb25zdCB7
IHJldHVybiBtX3N0cm9rZUJydXNoOyB9CisgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBD
b2xvciYgY29sb3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBs
YXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlQnJ1c2gsICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgeyBjb2xvciB9LCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRp
ZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1
c2guc2V0R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFu
Z2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFj
ZVRyYW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwg
c3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsg
fQorCisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VU
aGlja25lc3M7IH0KKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlj
a25lc3MsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBw
bGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MsIGxhc3RB
cHBsaWVkU3RhdGUpOyB9CisKKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3Ryb2tlU3R5bGU7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsIHN0cm9rZVN0eWxlLCBsYXN0QXBw
bGllZFN0YXRlKTsgfQorCisgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5lQ2FwOyB9CisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0
UHJvcGVydHkoQ2hhbmdlOjpMaW5lQ2FwLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNh
cCwgbGluZUNhcCwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IExpbmVEYXNoJiBs
aW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZURhc2g7IH0KKyAgICB2b2lkIHNldExpbmVE
YXNoKExpbmVEYXNoJiYgbGluZURhc2gsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250
ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZURh
c2gsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCwgV1RGTW92ZShsaW5lRGFzaCks
IGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUpvaW47IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVK
b2luLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVKb2luLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUpvaW4sIGxpbmVKb2luLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAg
ZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQorICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFu
Z2U6Ok1pdGVyTGltaXQsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCBtaXRl
ckxpbWl0LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIENvbXBvc2l0ZU1vZGUgY29t
cG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlTW9kZTsgfQorICAgIHZvaWQg
c2V0Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFBy
b3BlcnR5KENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Nv
bXBvc2l0ZU1vZGUsIGNvbXBvc2l0ZU1vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisg
ICAgY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcFNo
YWRvdzsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hh
ZG93LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkRyb3BTaGFkb3csICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9kcm9wU2hhZG93LCBkcm9wU2hhZG93LCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2FscGhhOyB9CisgICAgdm9pZCBz
ZXRBbHBoYShmbG9hdCBhbHBoYSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRT
dGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpBbHBoYSwgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhLCBhbHBoYSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICAKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisgICAgdm9p
ZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIGxhc3RBcHBsaWVkU3RhdGUp
OyB9CisgICAgCisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5n
TW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3Bl
cnR5KENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4
dERyYXdpbmdNb2RlLCB0ZXh0RHJhd2luZ01vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAg
ICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQW50aWFsaWFz
OyB9CisgICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRl
KSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzLCBzaG91bGRBbnRpYWxpYXMsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9z
aG91bGRTbW9vdGhGb250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBz
aG91bGRTbW9vdGhGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRTbW9vdGhG
b250cywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzLCBzaG91bGRT
bW9vdGhGb250cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0Nv
bnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25z
dCB7IHJldHVybiBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CisgICAgdm9pZCBzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBz
ZXRQcm9wZXJ0eShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX2RyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgdm9pZCBzZXRE
cmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0
eShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJh
d0x1bWluYW5jZU1hc2ssIGRyYXdMdW1pbmFuY2VNYXNrLCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBlYXJh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV91c2VEYXJrQXBwZWFyYW5jZTsgfQorICAgIHZvaWQgc2V0
VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSwgY29uc3Qgc3RkOjpvcHRp
b25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVy
dHkoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Vz
ZURhcmtBcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyNlbmRpZgorCisgICAgYm9vbCBoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0OworICAg
IHZvaWQgbWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7Cisg
ICAgdm9pZCBtZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7CisK
KyAgICBXVEY6OlRleHRTdHJlYW0mIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3ND
b250ZXh0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgY29uc3QgVCYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gdmFsdWU7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Mu
c2V0KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJv
cGVydHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgc2V0UHJvcGVydHkoQ2hhbmdlIGNoYW5nZSwgVCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6KnByb3BlcnR5LCBUJiYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhp
Y3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhp
cy0+KnByb3BlcnR5ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Muc2V0
KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJvcGVy
dHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgbV9jbGlwQm91
bmRzOworCisgICAgQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBtX2N0bTsKKworICAgIFNvdXJjZUJydXNoIG1fZmlsbEJydXNoIHsgQ29sb3I6OmJsYWNr
IH07CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07CisKKyAg
ICBTb3VyY2VCcnVzaCBtX3N0cm9rZUJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgZmxvYXQg
bV9zdHJva2VUaGlja25lc3MgeyAwIH07CisgICAgU3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZSB7
IFNvbGlkU3Ryb2tlIH07CisKKyAgICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1dHQg
fTsKKyAgICBMaW5lRGFzaCBtX2xpbmVEYXNoOworICAgIExpbmVKb2luIG1fbGluZUpvaW4geyBM
aW5lSm9pbjo6TWl0ZXIgfTsKKyAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAwIH07CisKKyAgICBD
b21wb3NpdGVNb2RlIG1fY29tcG9zaXRlTW9kZSB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9OworICAgIERyb3BTaGFkb3cgbV9kcm9wU2hhZG93Owor
CisgICAgZmxvYXQgbV9hbHBoYSB7IDEgfTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2lt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9
OworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdp
bmdNb2RlOjpGaWxsIH07CisKKyAgICBib29sIG1fc2hvdWxkQW50aWFsaWFzIHsgdHJ1ZSB9Owor
ICAgIGJvb2wgbV9zaG91bGRTbW9vdGhGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RyYXdMdW1pbmFuY2VNYXNrIHsgZmFs
c2UgfTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgbV91c2VEYXJr
QXBwZWFyYW5jZSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBhdXRvIGVuY29kZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdGhpcy0+KnByb3BlcnR5
OworICAgIH07CisKKyAgICBlbmNvZGVyIDw8IG1fY2xpcEJvdW5kczsKKworICAgIGVuY29kZXIg
PDwgbV9jaGFuZ2VGbGFnczsKKworICAgIGVuY29kZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgZW5j
b2RlKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6RmlsbFJ1bGUsICAg
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsK
KworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6
U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3N0cm9rZVRoaWNrbmVzcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKwor
ICAgIGVuY29kZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lRGFz
aCwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURh
c2gpOworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgZW5jb2RlKENoYW5nZTo6
TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X21pdGVyTGltaXQpOworCisgICAgZW5jb2RlKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAg
IGVuY29kZShDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkFscGhh
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBo
YSk7CisgICAgZW5jb2RlKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAg
IGVuY29kZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6
U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZEFudGlhbGlhcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMs
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRz
KTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAg
ICBlbmNvZGUoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIGVuY29kZShD
aGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9S
VCkKKyAgICBlbmNvZGUoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgYXV0byBkZWNvZGUgPSBbJl0oR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDaGFuZ2Ug
Y2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAg
aWYgKCFzdGF0ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICB1c2luZyBQcm9wZXJ0eVR5cGUgPSB0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9yZWZlcmVuY2U8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPigpLipwcm9wZXJ0eSk+Ojp0eXBlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFByb3BlcnR5
VHlwZT4gdmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RhdGUuKnByb3BlcnR5
ID0gKnZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGNsaXBCb3VuZHM7CisgICAgZGVjb2RlciA+PiBjbGlwQm91bmRzOwor
ICAgIGlmICghY2xpcEJvdW5kcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOworICAgIGRlY29kZXIgPj4g
Y2hhbmdlRmxhZ3M7CisgICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlKCpjbGlwQm91bmRzLCAq
Y2hhbmdlRmxhZ3MpOworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6Q1RNLCAgICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Zp
bGxCcnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUo
c3RhdGUsIENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVRoaWNr
bmVzcywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVz
cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUs
IENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc3Ryb2tlU3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZURhc2gsICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVK
b2luLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2lu
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9taXRlckxpbWl0KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyb3BTaGFkb3csICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
YWxwaGEpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0
YXRlLCBDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlRleHREcmF3aW5nTW9k
ZSwgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zaG91bGRBbnRpYWxpYXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcmF3
THVtaW5hbmNlTWFzaywgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVt
aW5hbmNlTWFzaykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpVc2VEYXJr
QXBwZWFyYW5jZSwgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBw
ZWFyYW5jZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKKworICAgIHJl
dHVybiBzdGF0ZTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSk7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpD
VE0sCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Rmls
bEJydXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpG
aWxsUnVsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpTdHJva2VCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlVGhpY2tuZXNzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4sCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQsCisKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdywKKworICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYSwKKyAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4
dERyYXdpbmdNb2RlLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZEFudGlhbGlhcywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywKKyAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBw
ZWFyYW5jZQorI2VuZGlmCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3MjEzMjg1MjYxZTY5MGNhMzA2MGQ3ZTAyNmU1
MGU1MmVlYTU5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJl
c3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1f
c2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAgICBpZiAobV9zYXZl
QW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgfQorICAgIAor
ICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3Nh
dmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVz
dG9yZSk7CisgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBB
U1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Cisg
ICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQorCitwcml2
YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIGJvb2wgbV9zYXZlQW5k
UmVzdG9yZTsKK307CisKK2NsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgeworcHVibGljOgor
ICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9h
dCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgLCBtX2FscGhhKGFscGhhKQorICAgICAgICAsIG1fYmVnYW5MYXllcihi
ZWdpbkxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKGJlZ2luTGF5ZXIpCisgICAgICAgICAgICBt
X2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQorICAgIHsKKyAgICAgICAgbV9hbHBoYSA9
IGFscGhhOworICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhh
KTsKKyAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgflRyYW5z
cGFyZW5jeUxheWVyU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKKyAg
ICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBmbG9hdCBtX2FscGhh
OworICAgIGJvb2wgbV9iZWdhbkxheWVyOworfTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTdGFja0NoZWNrZXIgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQorICAgIHsg
fQorCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9zdGFja1NpemUpCisgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBzdGFjayBjaGFuZ2VkIGJ5ICVkIiwg
Jm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXplKCkgLSAoaW50KW1fc3RhY2tTaXpl
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Cisg
ICAgdW5zaWduZWQgbV9zdGFja1NpemU7Cit9OworCitjbGFzcyBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW50ZXJwb2xhdGlv
blF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICAgICAgOiBtX2dyYXBoaWNz
Q29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgICAgICwgbV9jdXJyZW50SW50ZXJwb2xhdGlv
blF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAg
ICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZChpbnRlcnBvbGF0aW9uUXVhbGl0
eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0ICYmIG1fY3VycmVudEludGVy
cG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgeworICAg
ICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dy
YXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGludGVycG9sYXRpb25R
dWFsaXR5VG9Vc2UpOworICAgIH0KKworICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgc3RkOjpvcHRpb25h
bDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkpCisgICAgICAgIDog
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBoaWNzQ29udGV4dCwgaW50ZXJwb2xh
dGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52YWx1ZSgpIDogZ3JhcGhpY3NDb250
ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICB7CisgICAgfQorCisgICAgfklu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCisgICAgeworICAgICAgICBpZiAobV9pbnRl
cnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5z
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29u
dGV4dDsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVh
bGl0eTsKKyAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCAxNWRmMWRmZGI2ZjNhMTZhZDVlYWY2NDcyNjFm
Y2ZjNGI3YTkzYWI0Li42MmY5ZjQ2NGMzZDZkOWQ1YTA5Y2E1YTRiN2JkOGExMDM2MTU5MWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmNwcApAQCAtMTI2LDI3ICsxMjYsNTEgQEAgU3RyaW5nIGJsZW5kTW9kZU5hbWUoQmxlbmRNb2Rl
IGJsZW5kT3ApCiAgICAgcmV0dXJuIGJsZW5kT3BlcmF0b3JOYW1lc1tzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oYmxlbmRPcCkgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQmxlbmRNb2RlOjpOb3JtYWwp
XTsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKK3sKKyAgICByZXR1cm4gdHMgPDwgYmxlbmRNb2RlTmFtZShibGVuZE1vZGUp
OworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVN
b2RlIGNvbXBvc2l0ZU1vZGUpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3Bl
cmF0aW9uIiwgY29tcG9zaXRlTW9kZS5vcGVyYXRpb24pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
YmxlbmQtbW9kZSIsIGNvbXBvc2l0ZU1vZGUuYmxlbmRNb2RlKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQogewogICAgIHJldHVybiB0cyA8PCBjb21wb3NpdGVPcGVyYXRvck5hbWUob3AsIEJs
ZW5kTW9kZTo6Tm9ybWFsKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpCiB7Ci0gICAgcmV0dXJuIHRz
IDw8IGJsZW5kTW9kZU5hbWUoYmxlbmRNb2RlKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRv
dy1vZmZzZXQiLCBkcm9wU2hhZG93Lm9mZnNldCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFk
b3ctYmx1ciIsIGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJz
aGFkb3ctY29sb3IiLCBkcm9wU2hhZG93LmNvbG9yKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBkcm9wU2hhZG93LnJhZGl1c01vZGUgPT0gU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdpbmRSdWxlIHJ1bGUpCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9u
UXVhbGl0eSkKIHsKLSAgICBzd2l0Y2ggKHJ1bGUpIHsKLSAgICBjYXNlIFdpbmRSdWxlOjpOb25a
ZXJvOgotICAgICAgICB0cyA8PCAiTk9OLVpFUk8iOworICAgIHN3aXRjaCAoaW50ZXJwb2xhdGlv
blF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAg
ICAgICB0cyA8PCAiREVGQVVMVCI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2luZFJ1bGU6
OkV2ZW5PZGQ6Ci0gICAgICAgIHRzIDw8ICJFVkVOLU9ERCI7CisgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgdHMgPDwgIkRPLU5PVC1JTlRF
UlBPTEFURSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkxvdzoKKyAgICAgICAgdHMgPDwgIkxPVyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgdHMgPDwgIk1FRElVTSI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAg
IHRzIDw8ICJIRUlHSCI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQogICAgIHJldHVybiB0czsK
IH0KIApAQCAtMTY2LDYgKzE5MCwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBMaW5lQ2FwIGNhcFN0eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZURhc2gpCit7CisgICAgcmV0dXJuIHRz
OworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBq
b2luU3R5bGUpCiB7CiAgICAgc3dpdGNoIChqb2luU3R5bGUpIHsKQEAgLTE4Miw0ICsyMTEsNTYg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gam9pblN0
eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit7CisgICAgc3dpdGNoIChzdHJva2VT
dHlsZSkgeworICAgIGNhc2UgU3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlOgorICAgICAgICB0cyA8PCAi
Tk8tU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6U29saWRT
dHJva2U6CisgICAgICAgIHRzIDw8ICJTT0xJRC1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2U6CisgICAgICAgIHRzIDw8ICJET1RURUQt
U1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RGFzaGVkU3Ry
b2tlOgorICAgICAgICB0cyA8PCAiREFTSEVELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRPVUJMRS1T
VFJPS0UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tl
OgorICAgICAgICB0cyA8PCAiV0FWWS1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBUZXh0RHJhd2luZ01vZGUgdGV4dERyYXdpbmdNb2RlKQoreworICAgIHN3aXRjaCAodGV4dERy
YXdpbmdNb2RlKSB7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OkZpbGw6CisgICAgICAgIHRz
IDw8ICJGSUxMIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OlN0
cm9rZToKKyAgICAgICAgdHMgPDwgIlNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFdpbmRSdWxlIHJ1bGUpCit7CisgICAgc3dpdGNoIChydWxlKSB7CisgICAgY2FzZSBXaW5kUnVs
ZTo6Tm9uWmVybzoKKyAgICAgICAgdHMgPDwgIk5PTi1aRVJPIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXaW5kUnVsZTo6RXZlbk9kZDoKKyAgICAgICAgdHMgPDwgIkVWRU4tT0REIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmgKaW5kZXggNGQyMDRlOTdlNWM1NDRkNzc2YmZhN2YzMGFhY2MxYjdjNDYzZTBlMC4u
MGY4YjJkMDI3NTViZmFlYzY1ZDk1YzA0ZjJjNDViNTI0OTRmMjYzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGFz
aEFycmF5LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIK
ICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC03Myw2ICs3Niw3OSBAQCBlbnVtIGNsYXNzIEJsZW5kTW9kZSA6IHVpbnQ4X3QgewogICAgIFBs
dXNMaWdodGVyCiB9OwogCitzdHJ1Y3QgQ29tcG9zaXRlTW9kZSB7CisgICAgQ29tcG9zaXRlT3Bl
cmF0b3Igb3BlcmF0aW9uOworICAgIEJsZW5kTW9kZSBibGVuZE1vZGU7CisKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ29tcG9zaXRlTW9kZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1
cm4gb3BlcmF0aW9uID09IG90aGVyLm9wZXJhdGlvbiAmJiBibGVuZE1vZGUgPT0gb3RoZXIuYmxl
bmRNb2RlOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3Rl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENvbXBvc2l0ZU1vZGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgb3BlcmF0aW9uOworICAgIGVuY29k
ZXIgPDwgYmxlbmRNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRp
b25hbDxDb21wb3NpdGVNb2RlPiBDb21wb3NpdGVNb2RlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBvcGVyYXRpb247Cisg
ICAgZGVjb2RlciA+PiBvcGVyYXRpb247CisgICAgaWYgKCFvcGVyYXRpb24pCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRN
b2RlOworICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOworICAgIGlmICghYmxlbmRNb2RlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb3BlcmF0aW9uLCAq
YmxlbmRNb2RlIH0gfTsKK30KKworc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAg
ICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgVGV4dENoZWNraW5nRGljdGF0
aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKKyAgICAgICAgU3BlbGxpbmcsCisgICAgICAgIEdy
YW1tYXIsCisgICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgICAgIERpY3Rh
dGlvbkFsdGVybmF0aXZlcworICAgIH0gbW9kZTsKKyAgICBib29sIHNob3VsZFVzZURhcmtBcHBl
YXJhbmNlIHsgZmFsc2UgfTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsK
K307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0
eWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1v
ZGU7CisgICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+
IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlm
ICghbW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRV
c2VEYXJrQXBwZWFyYW5jZTsKKyAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqbW9kZSwgKnNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlIH0gfTsKK30KKwogZW51bSBjbGFzcyBHcmFkaWVudFNwcmVhZE1l
dGhvZCA6IHVpbnQ4X3QgewogICAgIFBhZCwKICAgICBSZWZsZWN0LApAQCAtOTMsNiArMTY5LDQy
IEBAIGVudW0gY2xhc3MgTGluZUNhcCA6IHVpbnQ4X3QgewogICAgIFNxdWFyZQogfTsKIAorc3Ry
dWN0IExpbmVEYXNoIHsKKyAgICBEYXNoQXJyYXkgZGFzaGVzOworICAgIGZsb2F0IG9mZnNldDsK
KyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IExpbmVEYXNoJiBhLCBjb25zdCBMaW5lRGFzaCYgYikKK3sKKyAgICByZXR1cm4gYS5k
YXNoZXMgPT0gYi5kYXNoZXMgJiYgYS5vZmZzZXQgPT0gYi5vZmZzZXQ7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGRhc2hlczsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGluZURhc2g+IExp
bmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERh
c2hBcnJheT4gZGFzaGVzOworICAgIGRlY29kZXIgPj4gZGFzaGVzOworICAgIGlmICghZGFzaGVz
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9h
dD4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpkYXNo
ZXMpLCAqb2Zmc2V0IH0gfTsKK30KKwogZW51bSBjbGFzcyBMaW5lSm9pbiA6IHVpbnQ4X3Qgewog
ICAgIE1pdGVyLAogICAgIFJvdW5kLApAQCAtMTA1LDYgKzIxNyw3NiBAQCBlbnVtIEhvcml6b250
YWxBbGlnbm1lbnQgewogICAgIEFsaWduSENlbnRlcgogfTsKIAorLy8gTGVnYWN5IHNoYWRvdyBi
bHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisv
LyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xhc3Mg
U2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9Owor
CitzdHJ1Y3QgRHJvcFNoYWRvdyB7CisgICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICBmbG9hdCBi
bHVyUmFkaXVzIHsgMCB9OworICAgIENvbG9yIGNvbG9yOworICAgIFNoYWRvd1JhZGl1c01vZGUg
cmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKKyAgICAKKyAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9v
bCBpc0JsdXJyZWQoKSBjb25zdCB7IHJldHVybiBpc1Zpc2libGUoKSAmJiBibHVyUmFkaXVzOyB9
CisgICAgYm9vbCBoYXNPdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gaXNCbHVycmVkKCkgfHwgKGlz
VmlzaWJsZSgpICYmICFvZmZzZXQuaXNaZXJvKCkpOyB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IGRlY29kZShEZWNv
ZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERyb3BTaGFkb3cmIGEs
IGNvbnN0IERyb3BTaGFkb3cmIGIpCit7CisgICAgcmV0dXJuIGEub2Zmc2V0ID09IGIub2Zmc2V0
ICYmIGEuYmx1clJhZGl1cyA9PSBiLmJsdXJSYWRpdXMgJiYgYS5jb2xvciA9PSBiLmNvbG9yICYm
IGEucmFkaXVzTW9kZSA9PSBiLnJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIERyb3BTaGFkb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgb2Zmc2V0OworICAgIGVuY29kZXIgPDwgYmx1clJhZGl1czsKKyAgICBl
bmNvZGVyIDw8IGNvbG9yOworICAgIGVuY29kZXIgPDwgcmFkaXVzTW9kZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gRHJvcFNoYWRvdzo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+
IG9mZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJsdXJS
YWRpdXM7CisgICAgZGVjb2RlciA+PiBibHVyUmFkaXVzOworICAgIGlmICghYmx1clJhZGl1cykK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+
IGNvbG9yOworICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9k
ZT4gcmFkaXVzTW9kZTsKKyAgICBkZWNvZGVyID4+IHJhZGl1c01vZGU7CisgICAgaWYgKCFyYWRp
dXNNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAq
b2Zmc2V0LCAqYmx1clJhZGl1cywgKmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07Cit9CisKK2VudW0g
U3Ryb2tlU3R5bGUgeworICAgIE5vU3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tlLAorICAgIERvdHRl
ZFN0cm9rZSwKKyAgICBEYXNoZWRTdHJva2UsCisgICAgRG91YmxlU3Ryb2tlLAorICAgIFdhdnlT
dHJva2UsCit9OworCiBlbnVtIFRleHRCYXNlbGluZSB7CiAgICAgQWxwaGFiZXRpY1RleHRCYXNl
bGluZSwKICAgICBUb3BUZXh0QmFzZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwyOSBAQCBlbnVtIFRl
eHRBbGlnbiB7CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLVN0cmluZyBjb21wb3NpdGVPcGVy
YXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7
Ci1TdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwotYm9vbCBwYXJzZUJs
ZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKLWJvb2wgcGFyc2VD
b21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0
ZU9wZXJhdG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CitlbnVtIGNsYXNzIFRleHREcmF3aW5n
TW9kZSA6IHVpbnQ4X3QgeworICAgIEZpbGwgPSAxIDw8IDAsCisgICAgU3Ryb2tlID0gMSA8PCAx
LAorfTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRl
T3BlcmF0b3IpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKK3VzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0g
T3B0aW9uU2V0PFRleHREcmF3aW5nTW9kZT47CisKK1N0cmluZyBjb21wb3NpdGVPcGVyYXRvck5h
bWUoQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CitTdHJpbmcgYmxlbmRNb2RlTmFtZShC
bGVuZE1vZGUpOworYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBCbGVuZE1vZGUm
KTsKK2Jvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENv
bXBvc2l0ZU9wZXJhdG9yJiwgQmxlbmRNb2RlJik7CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBCbGVuZE1vZGUpOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENv
bXBvc2l0ZU9wZXJhdG9yKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDb21wb3NpdGVNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEcm9wU2hh
ZG93Jik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExp
bmVEYXNoKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgU3Ryb2tlU3R5bGUpOworV0VCQ09SRV9FWFBP
UlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFRleHREcmF3
aW5nTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKQEAg
LTIxOSw0ICs0MTQsMzUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpM
aW5lSm9pbj4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlN0cm9rZVN0eWxlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICBXZWJDb3JlOjpTdHJva2VTdHlsZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6Tm9TdHJv
a2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAorICAgIFdlYkNvcmU6
OlN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRh
c2hlZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG91YmxlU3Ryb2tlLAorICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlPiB7CisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2Rl
LAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OkZpbGwsCisgICAgICAgIFdlYkNv
cmU6OlRleHREcmF3aW5nTW9kZTo6U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpNb2RlLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
OjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAorICAg
IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKKyAgICBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNl
bWVudCwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVzCisgICAgPjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VH
ZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggNGUwNzFmNzJmMzViZThhNThmYzRjZDU3N2ExNDU2ZGUx
NzQ2NjgyYy4uNDFiMDUxMWE4Zjc4YTE3OWIzMDRjZjg5ZDQxMDNlMzVkZTNlMTI1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYW1lZElt
YWdlR2VuZXJhdGVkSW1hZ2UuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBO
YW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGCiB7CiAjaWYgVVNFKE5FV19USEVNRSkgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBv
cHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRp
b25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29u
dGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QubG9jYXRp
b24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oCmluZGV4IGI2MjM2Nzg4MGUzZTUzNTRiNjE3MTEzNDdjOWExMWI0MjI0Njg4NWUuLmQ2N2Qz
ZWExMTVkMjRlZmQ5MDllMDNhYzlhZGU5M2E4YjQ3NjRmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsODcg
KzM4LDU3IEBAIHB1YmxpYzoKICAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CiAgICAg
fTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJl
YXNvbnMpCi0gICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAg
ICBOdWxsR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIFBhaW50
SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQorICAgICAgICA6IEdyYXBoaWNzQ29udGV4dChp
bml0aWFsQ2xpcCkKKyAgICAgICAgLCBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25z
KQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0KICAgICBib29sIHBhaW50
aW5nRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBwZXJm
b3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52
YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KICAg
ICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJl
YXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzOyB9CiAgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQogCi0gICAgdm9pZCBk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KLQotI2lmIFVTRShDRykKLSAgICB2
b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQotI2VuZGlmCi0KLSAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfTsKLQotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KLQotICAgIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotCisgICAgdm9pZCBzYXZlKCkgZmluYWwg
eyB9CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVN0YXRlQ2hh
bmdlcygpIGZpbmFsIHsgfTsKICNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRl
cm4oKSBmaW5hbCB7IH0KICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KLSAg
ICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgdm9p
ZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQotICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAg
IHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9Ci0g
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBS
b3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9Ci0gICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFz
aEFycmF5JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWwgeyB9Ci0gICAgdm9p
ZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0
KGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsIHsg
fQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWwgeyB9Ci0gICAgdm9pZCBy
b3RhdGUoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmlu
YWwgeyB9Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwgeyB9
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJs
eUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWwgeyB9CisKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCkgZmluYWwgeyB9CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsIHsgfQotICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgcmVzdG9yZSgp
IGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBGbG9hdFNpemUgZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQp
IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsg
fQorICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAKLSAgICB2b2lk
IGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21TdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3
QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2Fk
ZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQorICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsIHsgfQor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQogCi0gICAgSW1hZ2VEcmF3UmVz
dWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAg
IHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7
IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxv
YXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CkBAIC0xMjcsMjgg
Kzk3LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KICNlbmRp
ZgogCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0KLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0Um91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0K
LQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0K
LQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotCisgICAgdm9pZCBkcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBGaWx0ZXIm
LCBGaWx0ZXJSZXN1bHRzJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbCB7IH0KICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KICNlbmRpZgog
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwg
U3Ryb2tlU3R5bGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisK
KyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KKwog
I2lmIE9TKFdJTkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotcHJpdmF0ZToKICAgICBjb25zdCBQYWludEludmFsaWRh
dGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgeyBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6Ok5vbmUgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdl
MDFmZDM5NDY0MzM5ZDJkNGQ1NGJhOTM2NGM1OTQ1Y2ZhZDdkNWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAi
RElCUGl4ZWxEYXRhLmgiCit0eXBlZGVmIHN0cnVjdCBIRENfXyogSERDOworI2lmICFVU0UoQ0cp
CisvLyBVSW50OCBpcyBkZWZpbmVkIGluIENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oCit0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgVUludDg7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFKENHKQordXNp
bmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBzdHJ1Y3QgQ0dDb250ZXh0OworI2VsaWYgVVNF
KENBSVJPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87
Cit9Cit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOworI2Vsc2UKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gdm9pZDsK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcAppbmRleCBiYjEzOGI1Mjk3YTUyMWZiZjdkNjkzY2QxMTQxMDQ0MDBmY2FiYzRlLi45MDI0
ZjVkMWFiZmNlMzgwODE4M2EzYjIzMWZiY2UwZmZiMmZmNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkxLDE3ICsxOTEsMTcg
QEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICB1cGRhdGVTaGFkb3dCbHVyVmFsdWVzKCk7
CiB9CiAKLVNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlKQotICAgIDogbV9jb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIG1fYmx1clJh
ZGl1cyhzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dCbHVyKQotICAgICwgbV9vZmZzZXQo
c3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3Qg
RHJvcFNoYWRvdyYgZHJvcFNoYWRvdywgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKKyAg
ICA6IG1fY29sb3IoZHJvcFNoYWRvdy5jb2xvcikKKyAgICAsIG1fYmx1clJhZGl1cyhkcm9wU2hh
ZG93LmJsdXJSYWRpdXMsIGRyb3BTaGFkb3cuYmx1clJhZGl1cykKKyAgICAsIG1fb2Zmc2V0KGRy
b3BTaGFkb3cub2Zmc2V0KQorICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gQ29yZSBHcmFwaGljcyBp
bmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJv
YmxlbS84MTAzNDQyPiksCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdn
eSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgaWYgKHN0
YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KSB7Ci0gICAg
ICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0ZS5zaGFkb3dC
bHVyKTsKKyAgICBpZiAoZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSkgeworICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRp
dXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVzKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRT
aXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCmluZGV4IDE0ZmQ4M2VkZTFhMWJh
Y2YxNzdmMzMxZWNhZDFhNDMwMjkzZjYwM2EuLjQ1ZDBlNTgzMjljZGVlYWJmYjc4YTRkNWU2N2Fi
OGQ4ODFhZTU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmgKQEAgLTM4LDggKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBB
ZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1zdHJ1Y3QgR3JhcGhpY3ND
b250ZXh0U3RhdGU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIEltYWdlQnVm
ZmVyOworc3RydWN0IERyb3BTaGFkb3c7CiAKIGNsYXNzIFNoYWRvd0JsdXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNoYWRvd0JsdXIpOwpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAK
ICAgICBTaGFkb3dCbHVyKCk7CiAgICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgYm9vbCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKLSAgICBTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJik7CisgICAgU2hhZG93Qmx1cihjb25zdCBEcm9wU2hhZG93JiwgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93VmFsdWVz
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIGJvb2wg
aWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNmFjMTNmZDI1YzZmMGY4
MDE1ODcyZmYxOWVkMjhhMWZhNTJiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTb3VyY2VCcnVzaDo6U291cmNlQnJ1c2goY29uc3QgQ29sb3ImIGNvbG9yLCBzdGQ6Om9wdGlv
bmFsPEJydXNoPiYmIGJydXNoKQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAsIG1fYnJ1c2go
V1RGTW92ZShicnVzaCkpCit7Cit9CisKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgU291cmNlQnJ1
c2g6OnNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QWZmaW5lVHJhbnNmb3JtPiBpZGVudGl0eTsKKyAgICByZXR1cm4gbV9icnVzaCA/IG1fYnJ1c2gt
PnNwYWNlVHJhbnNmb3JtIDogaWRlbnRpdHkuZ2V0KCk7Cit9CisKK0dyYWRpZW50KiBTb3VyY2VC
cnVzaDo6Z3JhZGllbnQoKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8qIGdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdy
YWRpZW50Pj4oJm1fYnJ1c2gtPmJydXNoKSkKKyAgICAgICAgcmV0dXJuIGdyYWRpZW50LT5wdHIo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGF0dGVybiogU291cmNlQnJ1c2g6OnBhdHRl
cm4oKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKGF1dG8qIHBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZtX2Jy
dXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBwYXR0ZXJuLT5wdHIoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQoUmVmPEdyYWRpZW50
PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQorewor
ICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSB9OworfQor
Cit2b2lkIFNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pCit7CisgICAgbV9icnVzaCA9IHsg
V1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKworV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTb3VyY2VCcnVzaCYgYnJ1c2gpCit7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGJydXNoLmNvbG9yKCkpOworCisgICAgaWYg
KGF1dG8gZ3JhZGllbnQgPSBicnVzaC5ncmFkaWVudCgpKQorICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoImdyYWRpZW50IiwgZ3JhZGllbnQpOworCisgICAgaWYgKGF1dG8gcGF0dGVybiA9IGJydXNo
LnBhdHRlcm4oKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuIiwgcGF0dGVybik7
CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcx
MTBmMjFmZGJlYWNiZjM1ZDc4OTBjNzhmNzM5OTc5NjRhZGZlYTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCkBAIC0wLDAg
KzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5o
IgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
b3VyY2VCcnVzaCB7CitwdWJsaWM6CisgICAgc3RydWN0IEJydXNoIHsKKyAgICAgICAgc3RkOjp2
YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4gYnJ1c2g7CisgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBzcGFjZVRyYW5zZm9ybTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEJydXNoPiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIH07CisKKyAgICBTb3VyY2VCcnVzaCgpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBTb3VyY2VCcnVzaChjb25zdCBDb2xvciYsIHN0ZDo6b3B0aW9uYWw8QnJ1c2g+JiYg
PSBzdGQ6Om51bGxvcHQpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3IgY29sb3IpIHsgbV9j
b2xvciA9IGNvbG9yOyB9CisKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYgYnJ1c2go
KSBjb25zdCB7IHJldHVybiBtX2JydXNoOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFkaWVu
dCogZ3JhZGllbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXR0ZXJuKiBwYXR0ZXJu
KCkgY29uc3Q7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSgpIGNv
bnN0OworCisgICAgdm9pZCBzZXRHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworICAgIHZvaWQgc2V0UGF0dGVybihS
ZWY8UGF0dGVybj4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsg
fSk7CisKKyAgICBib29sIGlzUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gIW1fYnJ1c2ggJiYg
bV9jb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBkZWNvZGUoRGVjb2RlciYp
OworCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBz
dGQ6Om9wdGlvbmFsPEJydXNoPiBtX2JydXNoOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50PiwgUmVmPFBhdHRlcm4+PiYgYSwgY29u
c3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGIpCit7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24oYSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+
JiBhR3JhZGllbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBiR3JhZGllbnQgPSBzdGQ6Omdl
dF9pZjxSZWY8R3JhZGllbnQ+PigmYikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFHcmFkaWVu
dC5wdHIoKSA9PSBiR3JhZGllbnQtPnB0cigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgYVBhdHRlcm4pIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBiUGF0dGVybiA9IHN0ZDo6Z2V0X2lmPFJlZjxQYXR0ZXJu
Pj4oJmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhUGF0dGVybi5wdHIoKSA9PSBiUGF0dGVy
bi0+cHRyKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICApOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYSwg
Y29uc3QgU291cmNlQnJ1c2g6OkJydXNoJiBiKQoreworICAgIHJldHVybiBhLmJydXNoID09IGIu
YnJ1c2ggJiYgYS5zcGFjZVRyYW5zZm9ybSA9PSBiLnNwYWNlVHJhbnNmb3JtOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoJiBhLCBjb25zdCBTb3VyY2VCcnVz
aCYgYikKK3sKKyAgICByZXR1cm4gYS5jb2xvcigpID09IGIuY29sb3IoKSAmJiBhLmJydXNoKCkg
PT0gYi5icnVzaCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBTb3Vy
Y2VCcnVzaDo6QnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgc3BhY2VUcmFuc2Zvcm07CisgICAgV1RGOjpzd2l0Y2hPbihicnVzaCwKKyAgICAg
ICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+JiBncmFkaWVudCkgeworICAgICAgICAgICAgZW5j
b2RlciA8PCB0cnVlIDw8IGdyYWRpZW50LmdldCgpOworICAgICAgICB9LAorICAgICAgICBbJl0g
KGNvbnN0IFJlZjxQYXR0ZXJuPiYgcGF0dGVybikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBm
YWxzZSA8PCBwYXR0ZXJuLmdldCgpOworICAgICAgICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g6OkJydXNoPiBTb3Vy
Y2VCcnVzaDo6QnJ1c2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBzcGFjZVRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHNw
YWNlVHJhbnNmb3JtOworICAgIGlmICghc3BhY2VUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGhhc0dyYWRpZW50OworICAg
IGRlY29kZXIgPj4gaGFzR3JhZGllbnQ7CisgICAgaWYgKCFoYXNHcmFkaWVudCkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBpZiAoKmhhc0dyYWRpZW50KSB7CisgICAg
ICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBp
ZiAoIWdyYWRpZW50KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIHsgeyBXVEZNb3ZlKCpncmFkaWVudCksICpzcGFjZVRyYW5zZm9ybSB9IH07CisgICAg
fQorCisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOworICAgIGlm
ICghcGF0dGVybikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7
IFdURk1vdmUoKnBhdHRlcm4pLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBTb3VyY2VCcnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9icnVz
aDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1
c2g+IFNvdXJjZUJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29s
b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0
ZDo6b3B0aW9uYWw8QnJ1c2g+PiBicnVzaDsKKyAgICBkZWNvZGVyID4+IGJydXNoOworICAgIGlm
ICghYnJ1c2gpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU291
cmNlQnJ1c2goKmNvbG9yLCBXVEZNb3ZlKCpicnVzaCkpOworfQorCitXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgU291cmNlQnJ1c2gmKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UZXh0Qm94SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBjZjY1
YmEyYzEwZTg4ODhkZDQ5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRleHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0
Qm94SXRlcmF0b3IgeworcHVibGljOgorICAgIFRleHRCb3hJdGVyYXRvcigpCisgICAgICAgIDog
bV90ZXh0UnVuKDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAg
VGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkK
KyAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CisgICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBib29s
IGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRS
dW4tPmxlbmd0aCgpOyB9CisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90
ZXh0UnVuKVttX29mZnNldF07IH0KKyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1
cnJlbnQoKSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1f
b2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
ICFvcGVyYXRvcj09KG90aGVyKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1f
dGV4dFJ1bjsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDcyOGQzYmVhMGExNzIzNTAxNGYwZjEyY2YzZDZkN2Rh
MTkzYzM1YTUuLjE1ZTg0NTU3YWM4MWE3NjdhMDA3NDZlMzAxNjE1MzU0NGYyMTU2N2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcApAQCAtMTgzNCw3ICsxODM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJl
Y3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmEK
ICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwg
c2l6ZSgpKTsKIAotICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1f
ZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVU
cmFuc2Zvcm0oKSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4dCgq
bV9kaXNwbGF5TGlzdCwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAgICAg
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1NmEy
M2E1ZmRmYjEwYWZlY2EyY2M5MmE3Mjc5NDU4MTAyZS4uNGU2MjFkNWQ0MWJhMzE0NTkxOWM5N2Iy
OTlmNDRhNjgwOWI1ZDQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0yMjcsNyArMjI3LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEYKICAgICAgICAgc29saWRGaWd1cmVFeHRlbnRzLnVu
aXRlKGZpbGxFeHRlbnRzKTsKICAgICB9CiAKLSAgICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0
YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZv
cm1Db250ZXh0KSwgc29saWRGaWd1cmVFeHRlbnRzLAorICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5
ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91
bmRzKHBsYXRmb3JtQ29udGV4dCksIHNvbGlkRmlndXJlRXh0ZW50cywKICAgICAgICAgW2NhaXJv
Q29udGV4dCwgZHJhd2luZ1N0eWxlLCAmcGF0aCwgJmZpbGxTb3VyY2UsICZzdHJva2VTb3VyY2Vd
KEdyYXBoaWNzQ29udGV4dCYgc2hhZG93Q29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAg
Y2Fpcm9fdCogY2Fpcm9TaGFkb3dDb250ZXh0ID0gc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKTsKQEAgLTM0MSw3ICszNDEsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hh
ZG93KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFNoYWRvdwog
ICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMoc2NhbGVkRm9udCwgZ2x5cGhzLmRh
dGEoKSwgZ2x5cGhzLnNpemUoKSwgJmV4dGVudHMpOwogICAgIEZsb2F0UmVjdCBmb250RXh0ZW50
c1JlY3QocG9pbnQueCgpICsgZXh0ZW50cy54X2JlYXJpbmcsIHBvaW50LnkoKSArIGV4dGVudHMu
eV9iZWFyaW5nLCBleHRlbnRzLndpZHRoLCBleHRlbnRzLmhlaWdodCk7CiAKLSAgICBzaGFkb3cu
ZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6Omdl
dENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZm9udEV4dGVudHNSZWN0LAorICAgIHNoYWRv
dy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0
YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGZvbnRFeHRlbnRzUmVjdCwKICAg
ICAgICAgW3NjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsICZnbHlwaHMsIGZvbnRTbW9v
dGhpbmdNb2RlXShHcmFwaGljc0NvbnRleHQmIHNoYWRvd0NvbnRleHQpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGRyYXdHbHlwaHNUb0NvbnRleHQoc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBmb250
U21vb3RoaW5nTW9kZSk7CkBAIC0zNjcsNyArMzY3LDcgQEAgRmxvYXRSZWN0IGNvbXB1dGVMaW5l
Qm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBs
YXQKICAgICBpZiAocHJpbnRpbmcpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBG
bG9hdFNpemUod2lkdGgsIHRoaWNrbmVzcykpOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCk7CisgICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSA9IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4
dC5jcigpKTsKICAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3Vt
aW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KICAgICBmbG9hdCBzY2FsZSA9IHRyYW5zZm9y
bS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJhbnNm
b3JtLmEoKTsKICAgICBpZiAoc2NhbGUgPCAxLjApIHsKQEAgLTQ0NiwxNyArNDQ2LDE2IEBAIHN0
YXRpYyBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBp
c1ZlcnRpY2FsTGluZSwgZmxvYXQKIAogbmFtZXNwYWNlIFN0YXRlIHsKIAotdm9pZCBzZXRTdHJv
a2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQg
c3Ryb2tlVGhpY2tuZXNzKQordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCogY3IsIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcykKIHsKLSAgICBjYWlyb19zZXRfbGluZV93aWR0aChwbGF0Zm9y
bUNvbnRleHQuY3IoKSwgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBjYWlyb19zZXRfbGluZV93aWR0
aChjciwgc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBzZXRTdHJva2VTdHlsZShHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkK
K3ZvaWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCogY3IsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KQogewogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGFzaFBhdHRlcm5bXSA9IHsgNS4wLCA1LjAg
fTsKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRvdFBhdHRlcm5bXSA9IHsgMS4wLCAxLjAgfTsK
IAotICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAgICAgc3dpdGNoIChz
dHJva2VTdHlsZSkgewogICAgIGNhc2UgTm9TdHJva2U6CiAgICAgICAgIC8vIEZJWE1FOiBpcyBp
dCB0aGUgcmlnaHQgd2F5IHRvIGVtdWxhdGUgTm9TdHJva2U/CkBAIC00NzcsMjkgKzQ3NiwyOSBA
QCB2b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eQogICAgIH0KIH0KIAotdm9pZCBzZXRDb21wb3NpdGVP
cGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBz
ZXRDb21wb3NpdGVPcGVyYXRpb24oY2Fpcm9fdCogY3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBjYWlyb19zZXRfb3Bl
cmF0b3IocGxhdGZvcm1Db250ZXh0LmNyKCksIHRvQ2Fpcm9PcGVyYXRvcihjb21wb3NpdGVPcGVy
YXRpb24sIGJsZW5kTW9kZSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgdG9DYWlyb09w
ZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CiB9CiAKLXZvaWQgc2V0U2hv
dWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGJvb2wg
ZW5hYmxlKQordm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoY2Fpcm9fdCogY3IsIGJvb2wgZW5hYmxl
KQogewogICAgIC8vIFdoZW4gdHJ1ZSwgdXNlIHRoZSBkZWZhdWx0IENhaXJvIGJhY2tlbmQgYW50
aWFsaWFzIG1vZGUgKHVzdWFsbHkgdGhpcwogICAgIC8vIGVuYWJsZXMgc3RhbmRhcmQgJ2dyYXlz
Y2FsZScgYW50aWFsaWFzaW5nKTsgZmFsc2UgdG8gZXhwbGljaXRseSBkaXNhYmxlCiAgICAgLy8g
YW50aWFsaWFzaW5nLgotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0LmNy
KCksIGVuYWJsZSA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05P
TkUpOworICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY3IsIGVuYWJsZSA/IENBSVJPX0FOVElBTElB
U19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05PTkUpOwogfQogCi12b2lkIHNldENUTShHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqIGNyLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKIHsKICAgICBjb25zdCBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSB0b0Nh
aXJvTWF0cml4KHRyYW5zZm9ybSk7Ci0gICAgY2Fpcm9fc2V0X21hdHJpeChwbGF0Zm9ybUNvbnRl
eHQuY3IoKSwgJm1hdHJpeCk7CisgICAgY2Fpcm9fc2V0X21hdHJpeChjciwgJm1hdHJpeCk7CiB9
CiAKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCkKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCogY3IpCiB7CiAgICAgY2Fp
cm9fbWF0cml4X3QgbTsKLSAgICBjYWlyb19nZXRfbWF0cml4KHBsYXRmb3JtQ29udGV4dC5jcigp
LCAmbSk7CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwogICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0obS54eCwgbS55eCwgbS54eSwgbS55eSwgbS54MCwgbS55MCk7CiB9CiAKQEAgLTU1
Niw0NSArNTU1LDQ1IEBAIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKIH0gLy8gbmFtZXNwYWNlIFN0YXRlCiAKIEZpbGxTb3Vy
Y2U6OkZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDog
Z2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEpCi0gICAgLCBmaWxsUnVsZShzdGF0ZS5maWxsUnVsZSkK
KyAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkpCisgICAgLCBmaWxsUnVsZShzdGF0ZS5m
aWxsUnVsZSgpKQogewotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikgewotICAgICAgICBwYXR0
ZXJuLm9iamVjdCA9IGFkb3B0UmVmKHN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpKTsKKyAgICBpZiAoYXV0byBmaWxsUGF0dGVybiA9IHN0
YXRlLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkgeworICAgICAgICBwYXR0ZXJuLm9iamVjdCA9IGFk
b3B0UmVmKGZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3Jt
KCkpKTsKIAotICAgICAgICBhdXRvJiBwYXR0ZXJuSW1hZ2UgPSBzdGF0ZS5maWxsUGF0dGVybi0+
dGlsZUltYWdlKCk7CisgICAgICAgIGF1dG8mIHBhdHRlcm5JbWFnZSA9IGZpbGxQYXR0ZXJuLT50
aWxlSW1hZ2UoKTsKICAgICAgICAgcGF0dGVybi5zaXplID0gcGF0dGVybkltYWdlLnNpemUoKTsK
LSAgICAgICAgcGF0dGVybi50cmFuc2Zvcm0gPSBzdGF0ZS5maWxsUGF0dGVybi0+cGF0dGVyblNw
YWNlVHJhbnNmb3JtKCk7Ci0gICAgICAgIHBhdHRlcm4ucmVwZWF0WCA9IHN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRYKCk7Ci0gICAgICAgIHBhdHRlcm4ucmVwZWF0WSA9IHN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRZKCk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQpIHsKLSAg
ICAgICAgZ3JhZGllbnQuYmFzZSA9IHN0YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigx
LCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmIChzdGF0ZS5h
bHBoYSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRlLmZp
bGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSwgc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9IGZpbGxQYXR0ZXJu
LT5wYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gZmls
bFBhdHRlcm4tPnJlcGVhdFgoKTsKKyAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gZmlsbFBhdHRl
cm4tPnJlcGVhdFkoKTsKKyAgICB9IGVsc2UgaWYgKGF1dG8gZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEJydXNoKCkuZ3JhZGllbnQoKSkgeworICAgICAgICBncmFkaWVudC5iYXNlID0gZmlsbEdy
YWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEsIHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3Jt
KCkpOworICAgICAgICBpZiAoc3RhdGUuYWxwaGEoKSAhPSAxKQorICAgICAgICAgICAgZ3JhZGll
bnQuYWxwaGFBZGp1c3RlZCA9IGZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBo
YSgpLCBzdGF0ZS5maWxsQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgY29sb3IgPSBzdGF0ZS5maWxsQ29sb3I7CisgICAgICAgIGNvbG9yID0gc3RhdGUuZmls
bEJydXNoKCkuY29sb3IoKTsKIH0KIAogU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxw
aGEpCi17Ci0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pCi0gICAgICAgIHBhdHRlcm4gPSBh
ZG9wdFJlZihzdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5l
VHJhbnNmb3JtKCkpKTsKLSAgICBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkgewotICAg
ICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4o
MSwgc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmIChzdGF0
ZS5hbHBoYSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRl
LnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhLCBzdGF0ZS5zdHJva2VH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkp
Cit7CisgICAgaWYgKGF1dG8gc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZUJydXNoKCkucGF0
dGVybigpKQorICAgICAgICBwYXR0ZXJuID0gYWRvcHRSZWYoc3Ryb2tlUGF0dGVybi0+Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgZWxzZSBpZiAoYXV0byBz
dHJva2VHcmFkaWVudCA9IHN0YXRlLnN0cm9rZUJydXNoKCkuZ3JhZGllbnQoKSkgeworICAgICAg
ICBncmFkaWVudC5iYXNlID0gc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3RhdGUu
c3Ryb2tlQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgaWYgKHN0YXRlLmFscGhh
KCkgIT0gMSkKKyAgICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBzdHJva2VHcmFk
aWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSgpLCBzdGF0ZS5zdHJva2VCcnVzaCgpLnNw
YWNlVHJhbnNmb3JtKCkpOwogICAgIH0gZWxzZQotICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9r
ZUNvbG9yOworICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsKIH0K
IAogU2hhZG93U3RhdGU6OlNoYWRvd1N0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSkKLSAgICA6IG9mZnNldChzdGF0ZS5zaGFkb3dPZmZzZXQpCi0gICAgLCBibHVyKHN0YXRl
LnNoYWRvd0JsdXIpCi0gICAgLCBjb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIGlnbm9y
ZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgLCBnbG9iYWxB
bHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yKQorICAgIDogb2Zmc2V0KHN0YXRlLmRyb3BTaGFkb3coKS5vZmZzZXQp
CisgICAgLCBibHVyKHN0YXRlLmRyb3BTaGFkb3coKS5ibHVyUmFkaXVzKQorICAgICwgY29sb3Io
c3RhdGUuZHJvcFNoYWRvdygpLmNvbG9yKQorICAgICwgaWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKQorICAgICwgZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEo
KSkKKyAgICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNvbXBvc2l0ZU1vZGUoKS5v
cGVyYXRpb24pCiB7CiB9CiAKQEAgLTYxNSwxNCArNjE0LDE0IEBAIGJvb2wgU2hhZG93U3RhdGU6
OmlzUmVxdWlyZWQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2UgY2FuIGF2b2lkIFNoYWRvd0JsdXIs
IHNpbmNlIHRoZXJlIGFyZSBubyB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGNhbnZh
cy4KLSAgICBpZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLmlzSWRlbnRpdHkoKSkK
KyAgICBpZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSkuaXNJZGVudGl0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBPdGhlcndpc2UsIG5vIGNoYW5jZSBh
dm9pZGluZyBTaGFkb3dCbHVyLgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIHNldExpbmVD
YXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2Fw
KQordm9pZCBzZXRMaW5lQ2FwKGNhaXJvX3QqIGNyLCBMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAg
Y2Fpcm9fbGluZV9jYXBfdCBjYWlyb0NhcCB7IH07CiAgICAgc3dpdGNoIChsaW5lQ2FwKSB7CkBA
IC02MzYsMTggKzYzNSwxOCBAQCB2b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQogICAgICAgICBjYWlyb0NhcCA9IENB
SVJPX0xJTkVfQ0FQX1NRVUFSRTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3Nl
dF9saW5lX2NhcChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fpcm9DYXApOworICAgIGNhaXJvX3Nl
dF9saW5lX2NhcChjciwgY2Fpcm9DYXApOwogfQogCi12b2lkIHNldExpbmVEYXNoKEdyYXBoaWNz
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQordm9pZCBzZXRMaW5lRGFzaChjYWlyb190KiBjciwgY29uc3QgRGFz
aEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7CiAgICAgaWYgKHN0ZDo6YWxsX29m
KGRhc2hlcy5iZWdpbigpLCBkYXNoZXMuZW5kKCksIFtdKGF1dG8mIGRhc2gpIHsgcmV0dXJuICFk
YXNoOyB9KSkKLSAgICAgICAgY2Fpcm9fc2V0X2Rhc2gocGxhdGZvcm1Db250ZXh0LmNyKCksIDAs
IDAsIDApOworICAgICAgICBjYWlyb19zZXRfZGFzaChjciwgMCwgMCwgMCk7CiAgICAgZWxzZQot
ICAgICAgICBjYWlyb19zZXRfZGFzaChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgZGFzaGVzLmRhdGEo
KSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7CisgICAgICAgIGNhaXJvX3NldF9kYXNoKGNy
LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBz
ZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9p
biBsaW5lSm9pbikKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCogY3IsIExpbmVKb2luIGxpbmVK
b2luKQogewogICAgIGNhaXJvX2xpbmVfam9pbl90IGNhaXJvSm9pbiB7IH07CiAgICAgc3dpdGNo
IChsaW5lSm9pbikgewpAQCAtNjYxLDEyICs2NjAsMTIgQEAgdm9pZCBzZXRMaW5lSm9pbihHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikKICAg
ICAgICAgY2Fpcm9Kb2luID0gQ0FJUk9fTElORV9KT0lOX0JFVkVMOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xpbmVfam9pbihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fp
cm9Kb2luKTsKKyAgICBjYWlyb19zZXRfbGluZV9qb2luKGNyLCBjYWlyb0pvaW4pOwogfQogCi12
b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
ZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiBjciwgZmxvYXQg
bWl0ZXJMaW1pdCkKIHsKLSAgICBjYWlyb19zZXRfbWl0ZXJfbGltaXQocGxhdGZvcm1Db250ZXh0
LmNyKCksIG1pdGVyTGltaXQpOworICAgIGNhaXJvX3NldF9taXRlcl9saW1pdChjciwgbWl0ZXJM
aW1pdCk7CiB9CiAKIHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291
cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCkBAIC02ODIsNyArNjgxLDcgQEAg
dm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnMKIHsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxl
KCkpIHsKICAgICAgICAgU2hhZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFk
b3dTdGF0ZS5ibHVyIH0sIHNoYWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNo
YWRvd1N0YXRlLmlnbm9yZVRyYW5zZm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFk
b3coU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhw
bGF0Zm9ybUNvbnRleHQpLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3QpLAorICAgICAgICBzaGFkb3cu
ZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRl
OjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIEZsb2F0Um91bmRlZFJlY3QocmVjdCks
CiAgICAgICAgICAgICBbJnBsYXRmb3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1ZmZl
ciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0
U2l6ZSYgbGF5ZXJTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxTaGFk
b3dCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5ZXJT
aXplLCBzaGFkb3dTdGF0ZSk7CkBAIC03MTMsNyArNzEyLDcgQEAgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmUKIHsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgU2hh
ZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFkb3dTdGF0ZS5ibHVyIH0sIHNo
YWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLmlnbm9yZVRy
YW5zZm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShw
bGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBy
ZWN0LAorICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShwbGF0Zm9y
bUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHJl
Y3QsCiAgICAgICAgICAgICBbJnBsYXRmb3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1
ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZs
b2F0U2l6ZSYgbGF5ZXJTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxT
aGFkb3dCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5
ZXJTaXplLCBzaGFkb3dTdGF0ZSk7CkBAIC03NDYsNyArNzQ1LDcgQEAgdm9pZCBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFIKIAogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAgICAgICBT
aGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwg
c2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3Jl
VHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5kcmF3SW5zZXRTaGFkb3coU3RhdGU6OmdldENU
TShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQp
LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsCisgICAgICAgIHNoYWRvdy5kcmF3SW5zZXRTaGFkb3co
U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRz
KHBsYXRmb3JtQ29udGV4dCksIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwKICAgICAgICAgICAgIFsm
cGxhdGZvcm1Db250ZXh0LCAmc2hhZG93U3RhdGVdKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBj
b25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9y
bUNvbnRleHQsIGxheWVySW1hZ2UsIGxheWVyT3JpZ2luLCBsYXllclNpemUsIHNoYWRvd1N0YXRl
KTsKQEAgLTg2Myw5ICs4NjIsOSBAQCB2b2lkIGRyYXdQbGF0Zm9ybUltYWdlKEdyYXBoaWNzQ29u
dGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNhaXJvX3N1cmZhY2VfdCogcwogCiAgICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCiAgICAgaWYgKG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciAmJiBvcHRpb25zLmJs
ZW5kTW9kZSgpID09IEJsZW5kTW9kZTo6Tm9ybWFsICYmICFjYWlyb1N1cmZhY2VIYXNBbHBoYShz
dXJmYWNlKSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxh
dGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSwgQmxlbmRNb2RlOjpOb3JtYWwp
OworICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNv
bnRleHQuY3IoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHksIEJsZW5kTW9kZTo6Tm9ybWFsKTsK
ICAgICBlbHNlCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBs
YXRmb3JtQ29udGV4dCwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5k
TW9kZSgpKTsKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxh
dGZvcm1Db250ZXh0LmNyKCksIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSk7CiAKICAgICBGbG9hdFJlY3QgZHN0ID0gZGVzdFJlY3Q7CiAgICAgaWYgKG9w
dGlvbnMub3JpZW50YXRpb24oKSAhPSBJbWFnZU9yaWVudGF0aW9uOjpOb25lKSB7CkBAIC05NjQs
NyArOTYzLDcgQEAgdm9pZCBkcmF3U3VyZmFjZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UKIAogICAgIFNoYWRvd0JsdXIgc2hh
ZG93KHsgc2hhZG93U3RhdGUuYmx1ciwgc2hhZG93U3RhdGUuYmx1ciB9LCBzaGFkb3dTdGF0ZS5v
ZmZzZXQsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5pZ25vcmVUcmFuc2Zvcm1zKTsK
ICAgICBpZiAoc2hhZG93LnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgewotICAgICAg
ICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwg
U3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZGVzdFJlY3QsCisgICAgICAg
IHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3Io
KSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGRlc3RSZWN0LAogICAg
ICAgICAgICAgWyZwYXR0ZXJuLCAmZGVzdFJlY3RdKEdyYXBoaWNzQ29udGV4dCYgc2hhZG93Q29u
dGV4dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBkcmF3UGF0dGVyblRvQ2Fpcm9D
b250ZXh0KHNoYWRvd0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHBhdHRlcm4uZ2V0
KCksIGRlc3RSZWN0LCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKaW5kZXggNTQ5ODU2M2NlNDljMTVlMzVk
MDgyNTljMmQyNmRjN2IxN2NlYTg4NS4uZTVhMzQyNGFlNjExNzA3YWM5N2QwZDE5ZTdjYzMwNjFh
YjcwNjFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKQEAgLTQ2LDIyICs0NiwyMSBAQCBjbGFzcyBDb2xv
cjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBGbG9h
dFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIFBhdGg7CiAKLXN0cnVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKLQogbmFtZXNwYWNlIENhaXJvIHsKIAogbmFtZXNwYWNl
IFN0YXRlIHsKIAotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
LCBmbG9hdCk7Ci12b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgU3Ry
b2tlU3R5bGUpOwordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCosIGZsb2F0KTsKK3Zv
aWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCosIFN0cm9rZVN0eWxlKTsKIAotdm9pZCBzZXRDb21w
b3NpdGVPcGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJv
JiwgYm9vbCk7Cit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSk7Cit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190Kiwg
Ym9vbCk7CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJv
Jik7Cit2b2lkIHNldENUTShjYWlyb190KiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CitBZmZp
bmVUcmFuc2Zvcm0gZ2V0Q1RNKGNhaXJvX3QqKTsKIAogSW50UmVjdCBnZXRDbGlwQm91bmRzKEdy
YXBoaWNzQ29udGV4dENhaXJvJik7CiBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhHcmFw
aGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtMTI1LDEwICsxMjQsMTAg
QEAgc3RydWN0IFNoYWRvd1N0YXRlIHsKICAgICBDb21wb3NpdGVPcGVyYXRvciBnbG9iYWxDb21w
b3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07CiB9OwogCi12
b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5lQ2FwKTsKLXZvaWQgc2V0
TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7
Ci12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgTGluZUpvaW4pOwotdm9p
ZCBzZXRNaXRlckxpbWl0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgZmxvYXQpOwordm9pZCBzZXRM
aW5lQ2FwKGNhaXJvX3QqLCBMaW5lQ2FwKTsKK3ZvaWQgc2V0TGluZURhc2goY2Fpcm9fdCosIGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0KTsKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCosIExpbmVK
b2luKTsKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiwgZmxvYXQpOwogCiB2b2lkIGZpbGxS
ZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmlsbFNv
dXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7CiB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4
dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRDYWlyby5jcHAKaW5kZXggYTdhZjBjZWI1MjQ5MDQwNDFlZTEyZDUxZjg5YzZkZjE2Y2IzNjAz
Ny4uM2QxOTc1NzlhMmNjMjI5OTMzODg1YTFhMTU5NWM2Mzk2Y2E4NmRmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBA
IC03Miw3ICs3Miw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgYXV0byYgc3RhdGUg
PSBjb250ZXh0LnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKmNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2Fs
ZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAg
ICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNo
YWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAgIHN0YXRlLnRleHREcmF3aW5n
TW9kZSgpLCBzdGF0ZS5zdHJva2VUaGlja25lc3MoKSwgc3RhdGUuZHJvcFNoYWRvdygpLm9mZnNl
dCwgc3RhdGUuZHJvcFNoYWRvdygpLmNvbG9yLAogICAgICAgICBmb250U21vb3RoaW5nTW9kZSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhZGllbnRDYWlyby5jcHAKaW5kZXggOTAwOTZhYzY0NTIyNGRiZmRjNjBiZmE2Y2FjYWQw
MzA3NmNiMjk3ZC4uYmUyYzI5NWNhNTA3ZDliNTYzZjg1ZDViY2I4NzA5NzJmMGRhZDhlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90
PiBHcmFkaWVudDo6Y3JlYXRlUGF0dGVybihmbG9hdCBnbG9iYWxBbHBoYSwgY29uc3QgQWZmaW5l
VAogCiB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGF1dG8gcGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4w
LCBjb250ZXh0LnN0YXRlKCkuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGF1dG8g
cGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4wLCBjb250ZXh0LmZpbGxTcGFjZVRyYW5zZm9ybSgp
KTsKICAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCmluZGV4IGMzMjMwNDQ1MzUxYjAzZjJhYTg3MzZhZWUyYmNlNzhiYzQzNjFm
NDkuLmM1ZmFjMjA0MWIzY2Q1ZGJkZGI2NzlhYWU1NTI1ZWM4YjU0MjgxZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDggTnVhbnRpIEx0ZC4KQEAgLTY4LDcgKzY4LDggQEAgcHVibGljOgogfTsKIAogR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKFJlZlB0cjxjYWlyb190PiYmIGNv
bnRleHQpCi0gICAgOiBtX2NyKFdURk1vdmUoY29udGV4dCkpCisgICAgOiBHcmFwaGljc0NvbnRl
eHQoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkKKyAgICAsIG1fY3IoV1RGTW92ZShjb250ZXh0
KSkKIHsKICAgICBtX2NhaXJvU3RhdGVTdGFjay5hcHBlbmQoQ2Fpcm9TdGF0ZSgpKTsKICAgICBt
X2NhaXJvU3RhdGUgPSAmbV9jYWlyb1N0YXRlU3RhY2subGFzdCgpOwpAQCAtODYsMTAgKzg3LDkg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK1JlbmRl
cmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewot
ICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU2NhbGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6Omlz
QWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKIEdyYXBoaWNz
Q29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29u
c3QKQEAgLTEzNCw1MyArMTM0LDExMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZXN0
b3JlKCkKICAgICBjYWlyb19yZXN0b3JlKG1fY3IuZ2V0KCkpOwogfQogCi0vLyBEcmF3cyBhIGZp
bGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7
Ci0gICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNz
LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7
CisKKyAgICBpZiAoIXN0YXRlLmNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChhdXRvIGNoYW5nZSA6IHN0YXRlLmNoYW5nZXMoKSkgeworICAgICAgICBzd2l0Y2ggKGNoYW5n
ZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTToKKyAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKG1fY3IuZ2V0KCksIHN0YXRlLmdldENUTSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRTdHJva2VUaGlja25lc3MobV9jci5nZXQoKSwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKCksIDAuZikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZToKKyAgICAgICAgICAgIENhaXJvOjpT
dGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9jci5nZXQoKSwgc3RhdGUuc3Ryb2tlU3R5bGUoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OkxpbmVDYXA6CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZUNhcChtX2NyLmdldCgp
LCBzdGF0ZS5saW5lQ2FwKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjoKKyAgICAgICAgICAgIENhaXJv
OjpzZXRMaW5lSm9pbihtX2NyLmdldCgpLCBzdGF0ZS5saW5lSm9pbigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGlu
ZURhc2g6CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2gobV9jci5nZXQoKSwgc3RhdGUu
bGluZURhc2goKS5kYXNoZXMsIHN0YXRlLmxpbmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0
ZXJMaW1pdDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fY3IuZ2V0KCksIHN0
YXRlLm1pdGVyTGltaXQoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGU6CisgICAgICAgICAgICBD
YWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX2NyLmdldCgpLCBzdGF0ZS5jb21w
b3NpdGVNb2RlKCkub3BlcmF0aW9uLCBzdGF0ZS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKSB7CisgICAgICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3Jh
cGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0
CisgICAgICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1M
NSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgICAgICBhdXRvIGRyb3BT
aGFkb3cgPSBzdGF0ZS5kcm9wU2hhZG93KCk7CisgICAgICAgICAgICAgICAgZHJvcFNoYWRvdy5v
ZmZzZXQgPSB7IGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCksIC1kcm9wU2hhZG93Lm9mZnNldC5o
ZWlnaHQoKSB9OworICAgICAgICAgICAgICAgIHNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENhaXJv
OjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fY3IuZ2V0KCksIHN0YXRlLnNob3VsZEFudGlh
bGlhcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwotICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqdGhpcywgbmF0aXZlSW1hZ2UucGxh
dGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
b3BhY2l0eSk7CisgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMsIG9wYWNp
dHkpOwogfQogCi0vLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNo
b3VsZCBub3QgZHJhdyBzaGFkb3dzLgotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAg
aWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCi0gICAgICAgIHJldHVybjsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgQ2Fpcm86OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCp0aGlzKTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUu
c2hvdWxkQW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAg
ICBDYWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIGlzIG9ubHkg
dXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgotdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgY2xpcFJ1bGUpCiB7Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENh
aXJvOjpkcmF3RWxsaXBzZSgqdGhpcywgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7CisgICAgQ2Fpcm86OmNs
aXBQYXRoKCp0aGlzLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGF0aC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcmVjdCk7
Cit9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxQ
YXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBQ
YXRoJiBwYXRoKQoreworICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCBwYXRoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBDYWlybzo6Y2xp
cFRvSW1hZ2VCdWZmZXIoKnRoaXMsIG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCks
IGRlc3RSZWN0KTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBD
YWlybzo6c3Ryb2tlUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSks
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBDYWlybzo6Y2xlYXJSZWN0
KCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMTk2LDggKzI1NSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7Ci0gICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigx
LjAsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICBhdXRvIHBhdHRlcm4g
PSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogICAg
IGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDYsMzUgKzI2NCw2NCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CisgICAgQ2Fp
cm86OmZpbGxSb3VuZGVkUmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSgpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKCFjb2xv
ci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3I7CisgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0
aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bigqdGhpcywgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgQ2Fpcm86OmZpbGxS
ZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAg
Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHByZXZpb3VzT3BlcmF0
b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CisgICAgQ2Fpcm86OmZpbGxQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
CiB7Ci0gICAgQ2Fpcm86OmNsaXAoKnRoaXMsIHJlY3QpOworICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKKyAgICBDYWlybzo6c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwgbGluZVdpZHRo
LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENhaXJvOjpjbGlwUGF0aCgqdGhpcywgcGF0
aCwgY2xpcFJ1bGUpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpzdHJva2VQYXRo
KCp0aGlzLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3Vu
ZHMoKSBjb25zdAorLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJv
cmRlci4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHJldHVybiBDYWlybzo6U3Rh
dGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoIXJlY3Qu
aXNFbXB0eSgpKTsKKyAgICBDYWlybzo6ZHJhd1JlY3QoKnRoaXMsIHJlY3QsIGJvcmRlclRoaWNr
bmVzcywgZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
YnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQorLy8gVGhpcyBpcyBvbmx5IHVzZWQg
dG8gZHJhdyBib3JkZXJzLCBzbyB3ZSBzaG91bGQgbm90IGRyYXcgc2hhZG93cy4KK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVm
ZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJv
OjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5n
ZXQoKSwgZGVzdFJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMsIHBvaW50MSwgcG9pbnQy
LCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc2hvdWxk
QW50aWFsaWFzKCkpOworfQorCisvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0
aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBDYWlybzo6ZHJh
d0VsbGlwc2UoKnRoaXMsIHJlY3QsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VD
b2xvcigpLCBzdHJva2VUaGlja25lc3MoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMjYxLDEzOCArMzQ4LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHcKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnRoaXMsIHBvaW50LCB0aGlj
a25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tl
Q29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCi17Ci0gICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKnRoaXMsIHJl
Y3QsIHN0eWxlKTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5n
TW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocm91bmRpbmdNb2RlKTsKLSAgICByZXR1cm4gQ2Fp
cm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCp0aGlzLCByZWN0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAg
Q2Fpcm86OnRyYW5zbGF0ZSgqdGhpcywgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKLSAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoKnRoaXMsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUoKnRo
aXMsIHN0YXRlLnN0cm9rZVN0eWxlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKLSAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBj
b250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAg
ICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhh
dmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBzdGF0
ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hh
ZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKCp0aGlzLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQot
ICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFu
Z2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKCp0aGlzLCBzdGF0
ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OmNv
bmNhdENUTSgqdGhpcywgdHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q1RNKCp0aGlzLCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIENh
aXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCp0aGlzLCBvcGFjaXR5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBDYWlybzo6ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKnRoaXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3QoKnRo
aXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwgbGlu
ZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVDYXAoTGluZUNh
cCBsaW5lQ2FwKQotewotICAgIENhaXJvOjpzZXRMaW5lQ2FwKCp0aGlzLCBsaW5lQ2FwKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNoKCp0
aGlzLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBDYWlybzo6c2V0TGluZUpv
aW4oKnRoaXMsIGxpbmVKb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0
TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKLXsKLSAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdCgqdGhp
cywgbWl0ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHBhdGgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykKLXsKLSAgICBD
YWlybzo6cm90YXRlKCp0aGlzLCByYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIENhaXJvOjpzY2FsZSgq
dGhpcywgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdl
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlm
ICghY29sb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0aGlz
LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCp0aGlz
LCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7
IG9wdGlvbnMsIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSB9LCBhbHBoYSgpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUoKSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkBAIC00MDQs
MTEgKzM2Miw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0CiAgICAgQ2Fpcm86OmRyYXdQYXR0
ZXJuKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIG5hdGl2ZUltYWdl
LnNpemUoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0
aW9ucyk7CiB9CiAKLVJlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmlu
Z01vZGUoKSBjb25zdAotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250
U21vb3RoaW5nKQogewogICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCkBAIC00
MzQsMTIgKzM4NywzMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3R2x5cGhzKCp0aGlzLCBDYWlybzo6Rmls
bFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAogICAgICAgICBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9m
ZnNldCwgY2Fpcm9HbHlwaHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9k
ZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRv
d0NvbG9yLAorICAgICAgICB0ZXh0RHJhd2luZ01vZGUoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHNo
YWRvd09mZnNldCgpLCBzaGFkb3dDb2xvcigpLAogICAgICAgICBmb250U21vb3RoaW5nKTsKIH0K
IAordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3sKKyAg
ICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpkcmF3
TGluZXNGb3JUZXh0KCp0aGlzLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBk
b3VibGVVbmRlcmxpbmVzLCBzdHJva2VDb2xvcigpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQoreworICAgIENhaXJvOjpkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKCp0aGlzLCByZWN0LCBzdHlsZSk7Cit9CisKK0Zsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHJvdW5k
aW5nTW9kZSk7CisgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscygq
dGhpcywgcmVjdCk7Cit9CisKIGNhaXJvX3QqIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjcigpIGNv
bnN0CiB7CisgICAgY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRDYWlybyY+KCp0aGlzKS5hcHBs
eVN0YXRlQ2hhbmdlcygpOwogICAgIHJldHVybiBtX2NyLmdldCgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaAppbmRleCA1NjQ2MWMxNTlhNTgzYzg5YzYxZThmMDJlNGUwYmVlN2IwNTkz
MmVmLi42ZmNkZTNhOGJiMWRmOWY1NWJmNjliYmJmNGZjNjQ2NWY4NWU5YWI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw2MSArNTEsNDkgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAg
R3JhcGhpY3NDb250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0g
ICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAg
IHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5h
bDsKIAotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVK
b2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFs
OworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxl
KSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgCisgICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0OwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBm
aW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbDsK
LSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKwogICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAg
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9p
ZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwog
Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5Jiwg
Ym9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmlu
YWw7CisKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENv
bG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogCi0gICAgdm9pZCBzYXZl
KCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWw7Ci0KLSAgICB2b2lkIHRyYW5zbGF0
ZShmbG9hdCwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBmaW5hbDsKLSAg
ICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxv
YXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZp
Y2VTY2FsZSkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKyAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKIAotICAgIHZvaWQgY2xp
cChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2
b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7Ci0gICAgSW50UmVjdCBj
bGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIAotICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHJhd0dseXBocyhjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdN
b2RlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5
bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKICAgICBGbG9hdFJlY3Qg
cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJv
dW5kaW5nTW9kZSkgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApp
bmRleCA5NmM3NjEzNTQxYmRjNjU4YTc4N2FiMDNlNzc4MTg4MzRkMzE4NWM0Li5jOGU1Njc4MjQy
MzE1YWMzOTM1MWUwMjA4ZmY4YTBlZGVlMTNkOWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuY3BwCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0CiAg
ICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0Q29udGV4dC5zdGF0
ZSgpOwogCiAgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQotICAgICAgICBkcmF3UGxhdGZvcm1JbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0
KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9w
dGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
fSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dT
dGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOworICAgICAgICBkcmF3UGxhdGZvcm1JbWFn
ZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCku
Z2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0
ZS5hbHBoYSgpLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0
U3RhdGUpKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE4NTZhMDQzOTNmZDI0ZTk2MjhmNmZlOTM0NjllZWJlYTRhYmI1OTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0Nv
bnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7Citw
dWJsaWM6CisgICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwgYm9v
bCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKKyAgICB7CisgICAgICAg
IGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSht
X2NvbnRleHQpOworICAgIH0KKyAgICAKKyAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCisgICAg
eworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4
dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7
CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nh
dmVBbmRSZXN0b3JlKTsKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQp
OworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJv
b2wgZGlkU2F2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9y
ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7Cisg
ICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDMyNDVjNjAwNDMxNTUy
ZDUxM2I3NGVlYmMwOWYzMThlZWMzZGQ3MmEuLjQwNWZhODQ2YzYzMmMwNzExYzVlOGE0MDFkNTFi
MTk3ZGI1ZWVmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0xODUsMTQgKzE4NSwxMyBAQCBzdGF0aWMgdm9pZCBzZXRDR0Js
ZW5kTW9kZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZQogfQogCiBHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRHZXRDbGlwQm91
bmRpbmdCb3goY2dDb250ZXh0KSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmluaXRpYWxDaGFuZ2VG
bGFncywgQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCkpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoY2dDb250ZXh0KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3Rh
cnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UgfSk7Ci0gICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0g
Y29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5
KHBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShj
b3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSkpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6On5H
cmFwaGljc0NvbnRleHRDRygpCkBAIC0yMDYsNiArMjA1LDE0IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB9CiAKIENHQ29udGV4dFJlZiBHcmFw
aGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICAvLyBTb21lIGNh
bGxlcnMgdG8gdGhpcyBtZXRob2QgdXNlcyB0aGUgcGxhdGZvcm0gY29udGV4dCBvdXRzaWRlIHRo
ZSBzY29wZQorICAgIC8vIG9mIHRoaXMgY2xhc3MuIENvbW1pdCBhbnkgY2hhbmdlcyBiZWZvcmUg
cmV0dXJuaW5nIHRoZSBwbGF0Zm9ybSBjb250ZXh0LgorICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3ND
b250ZXh0Q0cmPigqdGhpcykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1cm4gaW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQoKTsKK30KKworQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENH
OjppbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZGF0YS0+
bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwpAQCAt
MzM4LDcgKzM0NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZShO
YXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6CiAjZW5kaWYKIAogICAgIGF1
dG8gb2xkQ29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKLSAgICBhdXRv
IG9sZEJsZW5kTW9kZSA9IGJsZW5kTW9kZU9wZXJhdGlvbigpOworICAgIGF1dG8gb2xkQmxlbmRN
b2RlID0gYmxlbmRNb2RlKCk7CiAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgb3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIC8vIE1ha2Ug
dGhlIG9yaWdpbiBiZSBhdCBhZGp1c3RlZERlc3RSZWN0LmxvY2F0aW9uKCkKQEAgLTM5Niw3ICs0
MDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZAogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRl
c3RSZWN0KTsKIAotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9w
ZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIHNldENvbXBvc2l0ZU1vZGUoeyBv
cHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAKICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55
KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwg
MSwgLTEpOwpAQCAtNTU1LDEzICs1NjIsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlmICghbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
KQorICAgIGlmICghc3Ryb2tlUGF0dGVybigpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0Nv
bnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0Nv
bnRleHQpKTsKIAotICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gbV9zdGF0ZS5zdHJva2VQYXR0
ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CisgICAgYXV0byBwbGF0
Zm9ybVBhdHRlcm4gPSBzdHJva2VQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2Vy
VG9CYXNlQ1RNKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwog
CkBAIC01NzQsMTMgKzU4MSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9r
ZVBhdHRlcm4oKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkK
IHsKLSAgICBpZiAoIW1fc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKCFmaWxsUGF0dGVybigp
KQogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVU
cmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIAotICAgIGF1dG8gcGxhdGZv
cm1QYXR0ZXJuID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVz
ZXJUb0Jhc2VDVE0pOworICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gZmlsbFBhdHRlcm4oKS0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOwogICAgIGlmICghcGxhdGZvcm1Q
YXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTU5MSwxMSArNTk4LDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIENHQ29udGV4dFNldEZpbGxQ
YXR0ZXJuKGNnQ29udGV4dCwgcGxhdGZvcm1QYXR0ZXJuLmdldCgpLCAmcGF0dGVybkFscGhhKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBDR1BhdGhEcmF3aW5nTW9kZSYgbW9kZSkKIHsKLSAgICBib29sIHNob3VsZEZpbGwg
PSBzdGF0ZS5maWxsUGF0dGVybiB8fCBzdGF0ZS5maWxsQ29sb3IuaXNWaXNpYmxlKCk7Ci0gICAg
Ym9vbCBzaG91bGRTdHJva2UgPSBzdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IChzdGF0ZS5zdHJva2VT
dHlsZSAhPSBOb1N0cm9rZSAmJiBzdGF0ZS5zdHJva2VDb2xvci5pc1Zpc2libGUoKSk7Ci0gICAg
Ym9vbCB1c2VFT0ZpbGwgPSBzdGF0ZS5maWxsUnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZDsKKyAg
ICBib29sIHNob3VsZEZpbGwgPSBjb250ZXh0LmZpbGxQYXR0ZXJuKCkgfHwgY29udGV4dC5maWxs
Q29sb3IoKS5pc1Zpc2libGUoKTsKKyAgICBib29sIHNob3VsZFN0cm9rZSA9IGNvbnRleHQuc3Ry
b2tlUGF0dGVybigpIHx8IChjb250ZXh0LnN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UgJiYgY29u
dGV4dC5zdHJva2VDb2xvcigpLmlzVmlzaWJsZSgpKTsKKyAgICBib29sIHVzZUVPRmlsbCA9IGNv
bnRleHQuZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZDsKIAogICAgIGlmIChzaG91bGRG
aWxsKSB7CiAgICAgICAgIGlmIChzaG91bGRTdHJva2UpIHsKQEAgLTYyNCw5ICs2MzEsOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKLSAg
ICBpZiAoc3RhdGUuZmlsbEdyYWRpZW50IHx8IHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAg
aWYgKGZpbGxHcmFkaWVudCgpIHx8IHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBmaWxsICYgc3Ryb2tlIGEgcGF0aCB1c2lu
ZyBncmFkaWVudHMKICAgICAgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KICAg
ICAgICAgZmlsbFBhdGgocGF0aCk7CkBAIC02MzQsMTMgKzY0MCwxMyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigp
KQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRl
cm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJu
KCk7CiAKICAgICBDR1BhdGhEcmF3aW5nTW9kZSBkcmF3aW5nTW9kZTsKLSAgICBpZiAoY2FsY3Vs
YXRlRHJhd2luZ01vZGUoc3RhdGUsIGRyYXdpbmdNb2RlKSkgeworICAgIGlmIChjYWxjdWxhdGVE
cmF3aW5nTW9kZSgqdGhpcywgZHJhd2luZ01vZGUpKSB7CiAjaWYgSEFWRShDR19DT05URVhUX0RS
QVdfUEFUSF9ESVJFQ1QpCiAgICAgICAgIENHQ29udGV4dERyYXdQYXRoRGlyZWN0KGNvbnRleHQs
IGRyYXdpbmdNb2RlLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCBudWxscHRyKTsKICNlbHNlCkBAIC02
NTgsNyArNjY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50
KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3Qg
cmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgRmxvYXRTaXplIGxh
eWVyU2l6ZSA9IGdldENUTSgpLm1hcFNpemUocmVjdC5zaXplKCkpOwpAQCAtNjcwLDMzICs2NzYs
MzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
ICAgICAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShsYXllckNvbnRleHQsIC1yZWN0Lngo
KSwgLXJlY3QueSgpKTsKICAgICAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChsYXllckNvbnRl
eHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChsYXllckNvbnRleHQsIHBhdGgucGxh
dGZvcm1QYXRoKCkpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4
dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgICAgICBDR0Nv
bnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAg
ICAgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAg
ICAgICAgIENHQ29udGV4dEVPQ2xpcChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAg
ICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAg
ICBmaWxsR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29u
dGV4dERyYXdMYXllckluUmVjdChjb250ZXh0LCByZWN0LCBsYXllci5nZXQoKSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CiAgICAg
ICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAg
ICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0g
V2luZFJ1bGU6OkV2ZW5PZGQpCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRl
eHQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29u
dGV4dCk7CiAKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludCgqdGhpcyk7
CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQor
ICAgIGlmIChmaWxsUGF0dGVybigpKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAjaWYg
SEFWRShDR19DT05URVhUX0RSQVdfUEFUSF9ESVJFQ1QpCiAgICAgQ0dDb250ZXh0RHJhd1BhdGhE
aXJlY3QoY29udGV4dCwgZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCA/IGtDR1BhdGhF
T0ZpbGwgOiBrQ0dQYXRoRmlsbCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CkBAIC03
MTcsNyArNzIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKHN0cm9rZUdy
YWRpZW50KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9h
dFJlY3QgcmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgZmxvYXQg
bGluZVdpZHRoID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC03NDIsOCArNzQ4LDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICAg
ICAgQ0dDb250ZXh0QWRkUGF0aChsYXllckNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgobGF5ZXJDb250
ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKLSAgICAgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5w
YWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVy
Q29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFk
aWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogCiAgICAgICAgICAgICBmbG9hdCBkZXN0aW5h
dGlvblggPSByb3VuZGYocmVjdC54KCkgLSBsaW5lV2lkdGgpOwogICAgICAgICAgICAgZmxvYXQg
ZGVzdGluYXRpb25ZID0gcm91bmRmKHJlY3QueSgpIC0gbGluZVdpZHRoKTsKQEAgLTc1NCwxMyAr
NzYwLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9y
bVBhdGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0
aChjb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNw
YWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50
KCp0aGlzKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBzdHJva2VT
cGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KCp0
aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3Rh
dGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBs
eVN0cm9rZVBhdHRlcm4oKTsKIAogI2lmIFVTRShDR19DT05URVhUX1NUUk9LRV9MSU5FX1NFR01F
TlRTX1dIRU5fU1RST0tJTkdfUEFUSCkKQEAgLTc4NSw3ICs3OTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLmZp
bGxHcmFkaWVudCkgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSkgewogICAgICAgICBDR0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGlmIChoYXNTaGFkb3co
KSkgewogICAgICAgICAgICAgRmxvYXRTaXplIGxheWVyU2l6ZSA9IGdldENUTSgpLm1hcFNpemUo
cmVjdC5zaXplKCkpOwpAQCAtNzk4LDI3ICs4MDQsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICAgICAgQ0dDb250ZXh0
QWRkUmVjdChsYXllckNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChs
YXllckNvbnRleHQpOwogCi0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250
ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1f
c3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAgQ0dD
b250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOworICAg
ICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAg
ICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0
LCByZWN0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRl
LmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29u
dGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCkt
PnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAg
IGFwcGx5RmlsbFBhdHRlcm4oKTsKIAogICAgIGJvb2wgZHJhd093blNoYWRvdyA9IGNhblVzZVNo
YWRvd0JsdXIoKTsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwg
ZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVy
biBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBs
YXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0
U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNo
YWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250
ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAg
ICAgIGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3Qo
cmVjdCkpOwogICAgIH0KIApAQCAtODM3LDkgKzg0Myw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93
KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFk
b3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0
KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29s
b3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250
ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJv
cFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNo
YWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSk7CiAgICAg
fQogCkBAIC04NTIsNyArODU4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICBzZXRD
R0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBvcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChyZWN0LCBjb2xvciwgb3BlcmF0aW9uLCBibGVuZE1vZGUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9y
KCk7CkBAIC04NjQsOSArODc1LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAgIENHQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBp
ZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAg
ICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6
ZVplcm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4
dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93
KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygp
LCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3
UmVjdFNoYWRvdygqdGhpcywgcmVjdCk7CiAgICAgfQogCkBAIC04NzQsNyArODg1LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdAogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiBy
YWRpaSA9IHJlY3QucmFkaWkoKTsKICAgICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExl
ZnQoKS53aWR0aCgpID09IHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdo
dCgpLndpZHRoKCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9t
TGVmdCgpLndpZHRoKCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKICAgICBib29s
IGVxdWFsSGVpZ2h0cyA9IChyYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9t
TGVmdCgpLmhlaWdodCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50
b3BSaWdodCgpLmhlaWdodCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWku
Ym90dG9tUmlnaHQoKS5oZWlnaHQoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gbV9zdGF0
ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybjsKKyAgICBib29sIGhhc0N1c3Rv
bUZpbGwgPSBmaWxsR3JhZGllbnQoKSB8fCBmaWxsUGF0dGVybigpOwogICAgIGlmICghaGFzQ3Vz
dG9tRmlsbCAmJiBlcXVhbFdpZHRocyAmJiBlcXVhbEhlaWdodHMgJiYgcmFkaWkudG9wTGVmdCgp
LndpZHRoKCkgKiAyID09IHIud2lkdGgoKSAmJiByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKiAy
ID09IHIuaGVpZ2h0KCkpCiAgICAgICAgIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0KGNvbnRl
eHQsIHIpOwogICAgIGVsc2UgewpAQCAtOTEzLDkgKzkyNCw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdP
d25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2Zm
IENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9y
bUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBj
b250ZXh0U2hhZG93LmRyYXdJbnNldFNoYWRvdygqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0
KTsKICAgICB9CiAKQEAgLTkzMCw2ICs5NDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsbwog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiAgICAgbV9kYXRhLT5jbGlwKHJlY3QpOwogfQpA
QCAtOTQwLDMxICs5NTIsMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwg
Q0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQg
dGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRy
YW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUz
PgogICAgIC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRo
ZXIuCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2FuVXNlQ0dS
ZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dD
b250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7Ci0gICAgQ0dSZWN0IHJlY3RzWzJd
ID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0
Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9OwotICAgIENHQ29udGV4
dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdHMocGxh
dGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKLSAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1D
b250ZXh0KCkpOworICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRU
eXBlKGNvbnRleHQpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkgPT0g
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsK
KyAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0SW5m
aW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCksIHJlY3QgfTsKKyAg
ICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdHMoY29u
dGV4dCwgcmVjdHMsIDIpOworICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENH
Q29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3Jt
Q29udGV4dCgpKSk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVj
dChjb250ZXh0LCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCkpOwogICAgIGlm
ICghcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIENHQ29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250
ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOwotICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0
Zm9ybVBhdGgoKSk7CisgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlw
UnVsZSkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsK
KwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYg
KHBhdGguaXNFbXB0eSgpKQogICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENH
UmVjdFplcm8pOwogICAgIGVsc2UgewotICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZv
cm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgp
LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRl
eHQpOworICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRo
KCkpOwogCiAgICAgICAgIGlmIChjbGlwUnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAg
ICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKQEAgLTk3NSwxMSArOTkxLDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
Y2xpcFJ1bGUpCiAgICAgbV9kYXRhLT5jbGlwKHBhdGgpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNz
Q29udGV4dENHOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQogewogICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihv
cGFjaXR5KTsKQEAgLTEwMDIsMTcgKzEwMTMsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHJlc3RvcmUoKTsKIH0KIAotc3RhdGljIHZvaWQg
YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQorc3RhdGljIHZv
aWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIENHRmxvYXQmIHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
ICAgICBVTlVTRURfUEFSQU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwog
I2Vsc2UKLSAgICBpZiAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChDR0NvbnRleHREcmF3c1dp
dGhDb3JyZWN0U2hhZG93T2Zmc2V0cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICBp
ZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29udGV4dCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIFdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81NTM5Mzg4
PiBieSBlbnN1cmluZyB0aGF0IHRoZSBvZmZzZXRzIHdpbGwgZ2V0IHRydW5jYXRlZApAQCAtMTAz
MCwxMCArMTAzOCw1NSBAQCBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJ
Zk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotc3Rh
dGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29s
b3IpCitzdGF0aWMgdm9pZCBzZXRDR0xpbmVDYXAoQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVD
YXAgY2FwKQogewotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpOworICAgIHN3aXRjaCAoY2FwKSB7CisgICAgY2FzZSBMaW5lQ2FwOjpC
dXR0OgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBCdXR0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQ2FwOjpSb3VuZDoKKyAgICAgICAgQ0dD
b250ZXh0U2V0TGluZUNhcChjb250ZXh0LCBrQ0dMaW5lQ2FwUm91bmQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNh
cChjb250ZXh0LCBrQ0dMaW5lQ2FwU3F1YXJlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQog
CitzdGF0aWMgdm9pZCBzZXRDR0xpbmVKb2luKENHQ29udGV4dFJlZiBjb250ZXh0LCBMaW5lSm9p
biBqb2luKQoreworICAgIHN3aXRjaCAoam9pbikgeworICAgIGNhc2UgTGluZUpvaW46Ok1pdGVy
OgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pbk1pdGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6CisgICAgICAgIENH
Q29udGV4dFNldExpbmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luUm91bmQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIExpbmVKb2luOjpCZXZlbDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZUpvaW4oY29udGV4dCwga0NHTGluZUpvaW5CZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgc2V0Q0dNaXRlckxpbWl0KENHQ29udGV4dFJlZiBjb250ZXh0LCBm
bG9hdCBsaW1pdCkKK3sKKyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KGNvbnRleHQsIGxpbWl0
KTsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dMaW5lRGFzaChDR0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgaWYgKGRh
c2hPZmZzZXQgPCAwKSB7CisgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbGVuZ3Ro
ICs9IHN0YXRpY19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOworICAgICAgICBpZiAobGVuZ3RoKQor
ICAgICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0
aDsKKyAgICB9CisgICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29udGV4dCwgZGFzaE9mZnNldCwg
ZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHU2hh
ZG93KENHQ29udGV4dFJlZiBjb250ZXh0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIGJv
b2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCit7CiAgICAgaWYgKG9mZnNldC5pc1plcm8oKSAm
JiAhYmx1cikgewogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwg
Q0dTaXplWmVybywgMCwgMCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNDUsNyArMTA5OCw3IEBA
IHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgQ0dGbG9hdCB5T2Zmc2V0ID0gb2Zmc2V0Lmhl
aWdodCgpOwogICAgIENHRmxvYXQgYmx1clJhZGl1cyA9IGJsdXI7CiAKLSAgICBpZiAoIWdyYXBo
aWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CisgICAgaWYgKCFzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNl
Q1RNID0gZ2V0VXNlclRvQmFzZUNUTShjb250ZXh0KTsKIAogICAgICAgICBDR0Zsb2F0IEEgPSB1
c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9CYXNlQ1RNLmEgKyB1c2VyVG9CYXNlQ1RNLmIgKiB1c2Vy
VG9CYXNlQ1RNLmI7CkBAIC0xMDY2LDcgKzExMTksOCBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRv
dyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXpl
JgogICAgIC8vIEV4dHJlbWUgImJsdXIiIHZhbHVlcyBjYW4gbWFrZSB0ZXh0IGRyYXdpbmcgY3Jh
c2ggb3IgdGFrZSBjcmF6eSBsb25nIHRpbWVzLCBzbyBjbGFtcAogICAgIGJsdXJSYWRpdXMgPSBz
dGQ6Om1pbihibHVyUmFkaXVzLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoMTAwMC4wKSk7CiAK
LSAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQs
IHhPZmZzZXQsIHlPZmZzZXQpOworICAgIGlmIChyZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkKQorICAgICAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5l
ZWRlZChjb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKIAogICAgIC8vIENoZWNrIGZvciBhbiBp
bnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0IGZv
ciB0aGUgc2hhZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2UgdGhl
IGRlZmF1bHQgc2hhZG93IGNvbG9yLgpAQCAtMTA3Niw0NCArMTEzMCw4MSBAQCBzdGF0aWMgdm9p
ZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgRmxvYXRTaXplJgogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4
dCwgQ0dTaXplTWFrZSh4T2Zmc2V0LCB5T2Zmc2V0KSwgYmx1clJhZGl1cywgY2FjaGVkQ0dDb2xv
cihjb2xvcikuZ2V0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkaWRVcGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBw
bHlTdGF0ZUNoYW5nZXMoKQogewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OworICAgIGlmICghc3RhdGUoKS5jaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgMC5mKSk7CisgICAgYXV0byBjb250ZXh0ID0gaW50ZXJuYWxQ
bGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VD
b2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKS5n
ZXQoKSk7CisgICAgZm9yIChhdXRvIGNoYW5nZSA6IHN0YXRlKCkuY2hhbmdlcygpKSB7CisgICAg
ICAgIHN3aXRjaCAoY2hhbmdlKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6Q1RNOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q1RNKGNvbnRleHQsIHN0YXRl
KCkuZ2V0Q1RNKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHNldENH
RmlsbENvbG9yKGNvbnRleHQsIHN0YXRlLmZpbGxDb2xvcik7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoOgorICAgICAgICAgICAgc2V0Q0dGaWxs
Q29sb3IoY29udGV4dCwgc3RhdGUoKS5maWxsQnJ1c2goKS5jb2xvcigpKTsKKyAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpB
bHBoYUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlLmFs
cGhhKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VU
aGlja25lc3M6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3Rk
OjptYXgoc3RhdGUoKS5zdHJva2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVh
azsKIAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVD
aGFuZ2UgfSkpCi0gICAgICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQsIHN0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0U3Ry
b2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZSgpLnN0cm9rZUJy
dXNoKCkuY29sb3IoKSkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkp
Ci0gICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3
aW5nTW9kZShzdGF0ZS50ZXh0RHJhd2luZ01vZGUpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAgICAgICAgICAgc2V0Q0dMaW5lQ2FwKGNv
bnRleHQsIHN0YXRlKCkubGluZUNhcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFu
Z2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUu
c2hvdWxkQW50aWFsaWFzKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpMaW5lSm9pbjoKKyAgICAgICAgICAgIHNldENHTGluZUpvaW4oY29udGV4dCwgc3RhdGUo
KS5saW5lSm9pbigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAg
ICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNob3VsZFNt
b290aEZvbnRzKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpM
aW5lRGFzaDoKKyAgICAgICAgICAgIHNldENHTGluZURhc2goY29udGV4dCwgc3RhdGUoKS5saW5l
RGFzaCgpLmRhc2hlcywgc3RhdGUoKS5saW5lRGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBi
cmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEludGVy
cG9sYXRpb25RdWFsaXR5KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQ6CisgICAgICAgICAgICBzZXRDR01pdGVyTGltaXQoY29u
dGV4dCwgc3RhdGUoKS5taXRlckxpbWl0KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBp
ZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCi0g
ICAgICAgIHNldENHU2hhZG93KCp0aGlzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci19CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZToKKyAgICAgICAgICAgIHNldENHQmxl
bmRNb2RlKGNvbnRleHQsIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbiwgc3RhdGUo
KS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi12b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIENH
Q29udGV4dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAgICAg
ICAgc2V0Q0dTaGFkb3coY29udGV4dCwgcmVuZGVyaW5nTW9kZSgpLCBzdGF0ZSgpLmRyb3BTaGFk
b3coKS5vZmZzZXQsIHN0YXRlKCkuZHJvcFNoYWRvdygpLmJsdXJSYWRpdXMsIHN0YXRlKCkuZHJv
cFNoYWRvdygpLmNvbG9yLCBzdGF0ZSgpLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpBbHBoYToKKyAgICAgICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRl
KCkuYWxwaGEoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk6CisgICAgICAg
ICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9s
YXRpb25RdWFsaXR5KHN0YXRlKCkuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlRleHREcmF3aW5nTW9kZToKKyAgICAgICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5n
TW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9kZShzdGF0ZSgpLnRleHREcmF3aW5nTW9kZSgp
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENHQ29udGV4dFNldFNo
b3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZSgpLnNob3VsZEFudGlhbGlhcygpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U2hvdWxkU21vb3RoRm9udHM6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9v
dGhGb250cyhjb250ZXh0LCBzdGF0ZSgpLnNob3VsZFNtb290aEZvbnRzKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTExMjUsNyAr
MTIxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7
CisgICAgaWYgKHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7
CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkb3VibGVMaW5lV2lkdGggPSBsaW5lV2lkdGggKiAy
OwogICAgICAgICAgICAgZmxvYXQgYWRqdXN0ZWRXaWR0aCA9IGNlaWxmKHJlY3Qud2lkdGgoKSAr
IGRvdWJsZUxpbmVXaWR0aCk7CkBAIC0xMTM1LDcgKzEyMjYsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQogICAgICAgICAgICAgYXV0byBsYXllciA9IGFkb3B0Q0YoQ0dMYXllckNyZWF0ZVdpdGhDb250
ZXh0KGNvbnRleHQsIGxheWVyU2l6ZSwgMCkpOwogCiAgICAgICAgICAgICBDR0NvbnRleHRSZWYg
bGF5ZXJDb250ZXh0ID0gQ0dMYXllckdldENvbnRleHQobGF5ZXIuZ2V0KCkpOwotICAgICAgICAg
ICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSBsaW5lV2lkdGg7CiAgICAgICAgICAgICBDR0Nv
bnRleHRTZXRMaW5lV2lkdGgobGF5ZXJDb250ZXh0LCBsaW5lV2lkdGgpOwogCiAgICAgICAgICAg
ICAvLyBDb21wZW5zYXRlIGZvciB0aGUgbGluZSB3aWR0aCwgb3RoZXJ3aXNlIHRoZSBsYXllcidz
IHRvcC1sZWZ0IGNvcm5lciB3b3VsZCBiZQpAQCAtMTE0OSw4ICsxMjM5LDggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0
KTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxheWVy
Q29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0gICAg
ICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVu
dC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShs
YXllckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tl
R3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgY29uc3QgZmxv
YXQgZGVzdGluYXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAg
ICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0
aCk7CkBAIC0xMTYxLDEzICsxMjUxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAg
ICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0
UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0
YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBz
dHJva2VHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9r
ZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICAgICAvLyBVc2lu
ZyBDR0NvbnRleHRBZGRSZWN0IGFuZCBDR0NvbnRleHRTdHJva2VQYXRoIHRvIHN0cm9rZSByZWN0
IHJhdGhlciB0aGFuCkBAIC0xMTgyLDk0ICsxMjcyLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAg
ICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQotewotICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAg
Y2FzZSBMaW5lQ2FwOjpCdXR0OgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3Jt
Q29udGV4dCgpLCBrQ0dMaW5lQ2FwQnV0dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGlu
ZUNhcDo6Um91bmQ6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0
KCksIGtDR0xpbmVDYXBSb3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6
U3F1YXJlOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBr
Q0dMaW5lQ2FwU3F1YXJlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKLXsKLSAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKLSAgICAgICAgZmxvYXQg
bGVuZ3RoID0gMDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tp
XSk7Ci0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChk
YXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRMaW5l
RGFzaChwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVz
LnNpemUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKExpbmVK
b2luIGpvaW4pCi17Ci0gICAgc3dpdGNoIChqb2luKSB7Ci0gICAgY2FzZSBMaW5lSm9pbjo6TWl0
ZXI6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dM
aW5lSm9pbk1pdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6
Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5l
Sm9pblJvdW5kKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6Ci0g
ICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9p
bkJldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgQ0dDb250ZXh0U2NhbGVD
VE0ocGxhdGZvcm1Db250ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
bV9kYXRhLT5zY2FsZShzaXplKTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
cm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIENHQ29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHQoKSwgYW5nbGUpOwotICAgIG1fZGF0YS0+cm90YXRlKGFuZ2xlKTsKLSAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0g
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKLSAgICBt
X2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENH
Q29udGV4dENvbmNhdENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAgICBtX2Rh
dGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dD
b250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+
c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0Nv
bnRleHRDRzo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0Ci17
Ci0gICAgLy8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBl
eGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0aGUKLSAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3Np
dGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgotICAg
IC8vIGxldmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBj
YW4gdXNlIHRoaXMgQ0cgQVBJLgotICAgIGlmIChpbmNsdWRlU2NhbGUgPT0gRGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSkKLSAgICAgICAgcmV0dXJuIENHQ29udGV4dEdldFVzZXJTcGFjZVRv
RGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgcmV0dXJuIENH
Q29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KIEZsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJv
dW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7CiAgICAgLy8gSXQgaXMgbm90IGVub3VnaCBqdXN0
IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UuIFRoZSByb3RhdGlvbiBwYXJ0IG9m
IHRoZQpAQCAtMTI4MCw3ICsxMjgyLDkgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmcKICAgICBp
ZiAobV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5KQogICAg
ICAgICByZXR1cm4gcm91bmRlZEludFJlY3QocmVjdCk7CiAKLSAgICBDR0FmZmluZVRyYW5zZm9y
bSBkZXZpY2VNYXRyaXggPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNm
b3JtKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOworCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dD
b250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShjb250ZXh0KTsKICAgICBp
ZiAoQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lkZW50aXR5KGRldmljZU1hdHJpeCkpIHsKICAgICAgICAg
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3QpOwpAQCAtMTMxOSw2ICsxMzIzLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXMKICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgQ29sb3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAogICAgIEZs
b2F0UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JU
ZXh0KEZsb2F0UmVjdChwb2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykp
LCBwcmludGluZywgbG9jYWxTdHJva2VDb2xvcik7CkBAIC0xMzY0LDEyICsxMzY5LDEyIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAgICAgfQogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1
YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQo
KSwgbG9jYWxTdHJva2VDb2xvcik7CisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGxv
Y2FsU3Ryb2tlQ29sb3IpOwogCi0gICAgQ0dDb250ZXh0RmlsbFJlY3RzKHBsYXRmb3JtQ29udGV4
dCgpLCBkYXNoQm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkpOworICAgIENHQ29udGV4
dEZpbGxSZWN0cyhjb250ZXh0LCBkYXNoQm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkp
OwogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9yKCkpOworICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBmaWxsQ29sb3IoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQpAQCAtMTQxMiwxNyArMTQxNywxOCBAQCBSZW5kZXJpbmdNb2RlIEdyYXBoaWNz
Q29udGV4dENHOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAg
Ly8gQ29yZUdyYXBoaWNzIGV4cGVjdHMgdGhlIGJhc2UgQ1RNIG9mIGEgSGlEUEkgY29udGV4dCB0
byBoYXZlIHRoZSBzY2FsZSBmYWN0b3IgYXBwbGllZCB0byBpdC4KICAgICAvLyBGYWlsaW5nIHRv
IGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBDVE0gd2lsbCBjYXVzZSBjZXJ0YWluIENHIGZlYXR1cmVz
LCBzdWNoIGFzIGZvY3VzIHJpbmdzLAogICAgIC8vIHRvIGRyYXcgd2l0aCBhIHNjYWxlIGZhY3Rv
ciBvZiAxIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2NhbGUgZmFjdG9yLgotICAgIENHQ29udGV4
dFNldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dD
b250ZXh0R2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBk
ZXZpY2VTY2FsZUZhY3RvcikpOworICAgIENHQ29udGV4dFNldEJhc2VDVE0oY29udGV4dCwgQ0dB
ZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKGNvbnRleHQpLCBkZXZpY2VT
Y2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewogICAgIC8vIENH
Q29udGV4dEZpbGxFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAg
IGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAg
aWYgKGZpbGxHcmFkaWVudCgpIHx8IGZpbGxQYXR0ZXJuKCkpIHsKICAgICAgICAgZmlsbEVsbGlw
c2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDM0LDcgKzE0
NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5S
ZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdy
YWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgIGlmIChzdHJva2VHcmFkaWVu
dCgpIHx8IHN0cm9rZVBhdHRlcm4oKSkgewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVs
bGlwc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ2OCw5ICsxNDc0LDEwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IEZsb2F0UG9pCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0Q0c6OmNhblVzZVNo
YWRvd0JsdXIoKSBjb25zdAogewotICAgIHJldHVybiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICByZXR1cm4gKHJlbmRlcmluZ01vZGUoKSA9
PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYg
IXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCk7CiB9CiAKLX0KIAotI2VuZGlmCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCA0Njhh
NDRiYWE4NmVlNTI2MTlkMjU1ZjkzOTQzYTk3NTViYWM5ZmFiLi4xNTdhMWEwNjgxZGQxY2YxZjdm
YjYzNDdhODhiZjgyYzMwNzBlMGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDEwLCAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsNTMgKzI1LDEzIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNFKENHKQorCiAjaW5jbHVk
ZSAiQ29sb3JTcGFjZUNHLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShDR0Nv
bnRleHRSZWYpOwotCi1jbGFzcyBDR0NvbnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAgICBD
R0NvbnRleHRTdGF0ZVNhdmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0
b3JlID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3Nh
dmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFu
ZFJlc3RvcmUpCi0gICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0g
ICAgfQotICAgIAotICAgIH5DR0NvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlm
IChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZSht
X2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSht
X2NvbnRleHQpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUp
OwotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1f
c2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRTYXZlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLSAg
ICAKLXByaXZhdGU6Ci0gICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2
ZUFuZFJlc3RvcmU7Ci19OwotCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRD
RyA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgewogcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4
dENHKENHQ29udGV4dFJlZik7CkBAIC04NSw2OSArNDUsNDkgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAg
dm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wp
IGZpbmFsOworICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAg
dm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAx
KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwogCisgICAgdm9pZCBz
YXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0
YXRlQ2hhbmdlcygpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7
CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0aChj
b25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7
Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLQotICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3Q7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAg
dm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgp
IGZpbmFsOwotCi0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAg
IGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0Fj
Y2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkgZmluYWw7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFs
OwogCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQotICAgIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgZmluYWw7Ci0KICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9
IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAg
IEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZp
bmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6
Tm9ybWFsKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIHVz
aW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNp
emUmKSBmaW5hbDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7
Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7
CiAKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAg
ICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKKyAgICB2b2lk
IHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5j
bHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzID0gMSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmlu
YWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKQEAgLTE1NiwxOCArOTYsMjEgQEAgcHVibGljOgogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFs
OworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXpl
JiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZv
aWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CiAKKyAgICB2b2lk
IGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0
cm9rZVN0eWxlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9p
ZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0g
ICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBGbG9hdFJlY3Qgcm91
bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFs
bFNpZGVzKSBmaW5hbDsKIAogICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3Qg
ZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAg
IHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KworICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAKICAgICB2aXJ0dWFs
IGJvb2wgY2FuVXNlU2hhZG93Qmx1cigpIGNvbnN0OwogCkBAIC0xNzUsOSArMTE4LDE2IEBAIHB1
YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBDR0NvbnRleHRSZWYgaW50
ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKIH07CiAKLX0KK0NHQWZm
aW5lVHJhbnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjaW5jbHVkZSAiQ0dDb250ZXh0U3RhdGVTYXZlci5oIgogCisjZW5k
aWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCBlNmNlMmZiOTcyNDdhNmI4NmMwOWIx
YWQzNjE3MDFjMmVjM2U4NjI1Li5hZjAwYTAxMzM0N2UwY2Q4NWEzMGI4ODRlYmM3OWYzMmYxZTIz
MTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgUERGRG9jdW1l
bnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hCiAKICAgICAvLyBPbGQgYW5kIG5ldyBjb250ZXh0IHNjYWxpbmcgZmFjdG9ycyBo
YXZlIHRvIG1hdGNoIGFzIHdlbGwuCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlw
ZSBkZWNvbXBvc2VkVHJhbnNmb3JtOwotICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4
dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFu
c2Zvcm0pOworICAgIGNvbnRleHQuZ2V0Q1RNKCkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zv
cm0pOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBjYWNoZWREZWNvbXBv
c2VkVHJhbnNmb3JtOwogICAgIG1fY2FjaGVkVHJhbnNmb3JtLmRlY29tcG9zZShjYWNoZWREZWNv
bXBvc2VkVHJhbnNmb3JtKTsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFBERkRvY3VtZW50SW1h
Z2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdAogICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhidWZmZXJDb250ZXh0LCBkc3RS
ZWN0LCBGbG9hdFJlY3QobV9jYWNoZWRJbWFnZVJlY3QubG9jYXRpb24oKSwgc3JjUmVjdC5zaXpl
KCkpKTsKICAgICBkcmF3UERGUGFnZShidWZmZXJDb250ZXh0KTsKIAotICAgIG1fY2FjaGVkVHJh
bnNmb3JtID0gY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKKyAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7
CiAgICAgbV9jYWNoZWREZXN0aW5hdGlvblJlY3QgPSBkc3RSZWN0OwogICAgIG1fY2FjaGVkU291
cmNlUmVjdCA9IHNyY1JlY3Q7CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CkBAIC0z
NjMsNiArMzYzLDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFnZShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtbV9jcm9wQm94Lmxv
Y2F0aW9uKCkpOwogCisgICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgLy8g
Q0dQREYgcGFnZXMgYXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IENHQ29udGV4dERyYXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIENHUERGRG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBudWxscHRy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmlu
ZGV4IGQ2ODlhNTFhODkxMDJhNTA5MDQ1NTliNDQyMjM2OWRlMTQ3MDMzMzUuLmZkZWVmNmIzOGQw
YzViNTU1NjczN2ViN2Y0NGFmMmYyZmM5YTQ0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgUGF0
aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoR3JhcGhpY3NDCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCi0gICAg
Ym9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9p
bnQsIGtDR1BhdGhTdHJva2UpOworICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhD
b250YWluc1BvaW50KGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIGtD
R1BhdGhTdHJva2UpOwogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAKICAg
ICByZXR1cm4gaGl0U3VjY2VzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNv
cmVUZXh0LmNwcAppbmRleCBlZmJjMWU0OTU0NDFiZWRlNzM0ZTk0OGRkMjZkMzcxNDQxNjU1M2Uw
Li5lOWI3YWM0ZDdmNGNiZjc0MTI4OTM5YmZhOGMwNGU3NjVhMGRiZDg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3Jk
ZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogCi0j
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0zNSw0OSArMzQsNDEgQEAKICNpbmNs
dWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHBh
bC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxl
Z2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVm
IGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVS
ZWYpCitzdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxl
Z2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRl
LCBDR1JlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCiB7CiAgICAg
RHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVj
b3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRl
ci5yZWNvcmRCZWdpbkxheWVyKHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsKKyAgICByZWNvcmRlci5y
ZWNvcmRCZWdpbkxheWVyKGdzdGF0ZSk7CiAgICAgcmV0dXJuIGRlbGVnYXRlOwogfQogCi1zdGF0
aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVs
ZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCitz
dGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYg
ZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKICAg
ICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNS
ZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29y
ZGVyLnJlY29yZEVuZExheWVyKHJzdGF0ZSwgZ3N0YXRlKTsKKyAgICByZWNvcmRlci5yZWNvcmRF
bmRMYXllcihnc3RhdGUpOwogICAgIHJldHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHRXJy
b3IgZHJhd0dseXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdT
dGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zv
cm0qIHRtLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1td
LCBzaXplX3QgY291bnQpCitzdGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENHQ29udGV4dERlbGVn
YXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUs
IGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3Qg
Q0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQogewotICAgIGlmIChDR0dTdGF0ZUdl
dEFscGhhKGdzdGF0ZSkgPiAwKSB7Ci0gICAgICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3Jk
ZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVH
ZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlwaHMocnN0
YXRlLCBnc3RhdGUsIHRtLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwotICAgIH0KKyAgICBE
cmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNv
cmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOworICAgIHJlY29yZGVy
LnJlY29yZERyYXdHbHlwaHMoZ3N0YXRlLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwogICAg
IHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShD
R0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUs
IENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2UpCitzdGF0
aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVu
ZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VS
ZWYgaW1hZ2UpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNf
Y2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdh
dGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UocnN0YXRlLCBnc3RhdGUsIHJlY3Qs
IGltYWdlKTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UoZ3N0YXRlLCByZWN0LCBpbWFn
ZSk7CiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotVW5pcXVlUmVmPEdyYXBoaWNz
Q29udGV4dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQorc3Rh
dGljIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFsQ29udGV4dChEcmF3
R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyKQogewotICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0g
YWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7CisgICAgYXV0byBjb250ZXh0
RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKCZyZWNvcmRlcikpOwog
ICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBk
ZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4o
JmJlZ2luTGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHRE
ZWxlZ2F0ZS5nZXQoKSwgZGVFbmRMYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxl
Z2F0ZUNhbGxiYWNrPigmZW5kTGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxi
YWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0
PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZXZWJDb3JlOjpkcmF3R2x5cGhzKSk7CkBAIC04
Niw2NyArNzcsMTUgQEAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBoc1JlY29y
ZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdy
YXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAotRHJhd0dseXBoc1JlY29yZGVy
OjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3RE
cmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0IGRl
cml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVj
b3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29u
dGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZl
Rm9udEZyb21Db250ZXh0IGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRp
b25Db250ZXh0KGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICAsIG1fZGVjb25zdHJ1Y3REcmF3R2x5
cGhzKGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGVyaXZlRm9udEZyb21Db250ZXh0
KGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUlu
dGVybmFsQ29udGV4dCgpKQorICAgICwgbV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50ZXJuYWxD
b250ZXh0KCp0aGlzKSkKIHsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRl
SW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQot
ewotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBjb250ZXh0U3RhdGUuZmls
bENvbG9yOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQgPSBjb250ZXh0
U3RhdGUuZmlsbEdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bTsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUu
ZmlsbFBhdHRlcm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IgPSBj
b250ZXh0U3RhdGUuc3Ryb2tlQ29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmdyYWRpZW50ID0gY29udGV4dFN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0YXRlLnN0
cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0
eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUuc3Ryb2tlUGF0dGVybjsKLQotICAgIG1fb3JpZ2lu
YWxTdGF0ZS5jdG0gPSBtX293bmVyLmdldENUTSgpOyAvLyBGSVhNRTogRGVhbCB3aXRoIGJhc2Ug
Q1RNLgotCi0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBjb250ZXh0U3RhdGUu
c2hhZG93T2Zmc2V0OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciA9IGNvbnRleHRT
dGF0ZS5zaGFkb3dCbHVyOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IgPSBjb250
ZXh0U3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVU
cmFuc2Zvcm1zID0gY29udGV4dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotCi0gICAg
bV9jdXJyZW50U3RhdGUgPSBtX29yaWdpbmFsU3RhdGU7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgY29udGV4dFN0YXRlKQotewotICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNv
bG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvciht
X29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0
RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVsc2Ugewot
ICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICAg
ICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNv
bG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7Ci0gICAgZWxzZSBpZiAobV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFk
aWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRl
cm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0KLSAgICBtX2ludGVybmFs
Q29udGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRv
dy5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIs
IG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNN
b2RlKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4
dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpw
cmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250
KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAg
ICAgQVNTRVJUKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRyaXgoZm9u
dC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpKTsKIApAQCAtMTU2LDEwNCArOTUsMzggQEAgdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYg
Zm9udCwgRm9udFNtb290aGluZ00KICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVP
dmVyYWxsVGV4dE1hdHJpeChmb250KTsKICAgICBpZiAoZm9udC5wbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCiAgICAgICAgIG1fb3JpZ2lu
YWxUZXh0TWF0cml4ID0gY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCBtX29yaWdpbmFs
VGV4dE1hdHJpeCk7Ci0KLSAgICBhdXRvJiBjb250ZXh0U3RhdGUgPSBtX293bmVyLnN0YXRlKCk7
Ci0gICAgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnRleHRTdGF0ZSk7Ci0gICAgcG9wdWxhdGVJ
bnRlcm5hbENvbnRleHQoY29udGV4dFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkKK0dyYXBoaWNzQ29udGV4dFN0YXRlIERyYXdH
bHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCgpCiB7Ci0gICAgdXBkYXRlQ1RN
KG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwotICAgIHVwZGF0ZUZpbGxDb2xvcihtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50Lmdl
dCgpLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0
ZVN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciwgbV9vcmlnaW5h
bFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LmdldCgpLCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tl
U3R5bGUucGF0dGVybi5nZXQoKSk7Ci0gICAgdXBkYXRlU2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0
ZS5zaGFkb3cuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA/
IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMgOiBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6
Tm8pOworICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9IG1fZGVzdGluYXRpb25Db250ZXh0LnN0YXRl
KCk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPm1lcmdlU3RhdGVEaWZmcyhvcmlnaW5hbFN0YXRl
KTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1
cm4gb3JpZ2luYWxTdGF0ZTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZp
bGxDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0
dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGlu
YXRpb25Db250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKQog
ewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0LCBm
b3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlzIHRv
IGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgotICAg
IC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hhdCBp
dCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9yIHRv
by4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuZmlsbFN0eWxlLmNvbG9yKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAg
ICBuZXdTdGF0ZS5maWxsQ29sb3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3JhZGllbnQpCi0g
ICAgICAgIG5ld1N0YXRlLmZpbGxHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQ
YXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5maWxsUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAg
bV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbENvbG9yQ2hhbmdlIH0pOwotICAgIG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5jb2xvciA9
IG5ld0NvbG9yOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0Lm1lcmdlU3RhdGVEaWZmcyhvcmln
aW5hbFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNv
bG9yKGNvbnN0IENvbG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJu
KiBuZXdQYXR0ZXJuKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIo
Q0dHU3RhdGVSZWYgZ3N0YXRlKQogewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0
IGl0IGFjdHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwg
b25seSBldmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNv
cnJlY3QgY2hlY2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ug
c2V0IGl0IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3
b3JrcyBjb3JyZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3Rh
dGUuc3Ryb2tlU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9yID0gbmV3Q29sb3I7
Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VHcmFkaWVudCA9
IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5zdHJv
a2VQYXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0
YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9KTsKLSAgICBt
X2N1cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0
aW5hdGlvbkNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihDR0dTdGF0ZUdldEFscGhhKGdz
dGF0ZSkpOwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgY3RtKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVuZExh
eWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICBpZiAoY3RtID09IG1fY3VycmVudFN0YXRl
LmN0bSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vd25lci5zZXRDVE0oY3RtKTsKLSAgICBt
X2N1cnJlbnRTdGF0ZS5jdG0gPSBjdG07CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RN
KCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5lbmRU
cmFuc3BhcmVuY3lMYXllcigpOwogfQogCi1zdGF0aWMgYm9vbCBzaGFkb3dJc0NsZWFyZWQoY29u
c3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIpCi17Ci0gICAgcmV0
dXJuIHNoYWRvd09mZnNldCA9PSBGbG9hdFNpemUoKSAmJiAhc2hhZG93Qmx1cjsKLX0KLQotdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRv
d09mZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsKLSAgICAvLyBX
ZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGlmIG5vYm9k
eSBoYXMgYW55IHNoYWRvd3MuCi0gICAgaWYgKHNoYWRvd0lzQ2xlYXJlZChzaGFkb3dPZmZzZXQs
IHNoYWRvd0JsdXIpICYmIHNoYWRvd0lzQ2xlYXJlZChtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zm
c2V0LCBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuYmx1cikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzIHN0YXRlQ2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc2hhZG93T2Zm
c2V0ICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQgfHwgc2hhZG93Qmx1ciAhPSBtX2N1
cnJlbnRTdGF0ZS5zaGFkb3cuYmx1ciB8fCBzaGFkb3dDb2xvciAhPSBtX2N1cnJlbnRTdGF0ZS5z
aGFkb3cuY29sb3IpIHsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93T2Zmc2V0ID0gc2hhZG93T2Zm
c2V0OwotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjsKLSAgICAgICAg
bmV3U3RhdGUuc2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICAgICAgc3RhdGVDaGFuZ2VG
bGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Ci0gICAgfQotICAg
IGlmIChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAhPSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6
VW5zcGVjaWZpZWQgJiYgKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zOjpZZXMpICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1z
KSB7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotICAgICAg
ICBzdGF0ZUNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXNDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc3RhdGVDaGFuZ2VGbGFncy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0
YXRlLCBzdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZz
ZXQgPSBzaGFkb3dPZmZzZXQ7Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgPSBzaGFk
b3dCbHVyOwotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5jb2xvciA9IHNoYWRvd0NvbG9yOwot
ICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotfQotCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUpCitzdGF0
aWMgdm9pZCBzZXREcm9wU2hhZG93KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0
LCBDR1N0eWxlUmVmIHN0eWxlKQogewogICAgIGlmIChDR1N0eWxlR2V0VHlwZShzdHlsZSkgIT0g
a0NHU3R5bGVTaGFkb3cpIHsKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBraW5kcyBv
ZiBDR1N0eWxlcy4KLSAgICAgICAgdXBkYXRlU2hhZG93KHswLCAwfSwgMCwgQ29sb3IoKSwgU2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkKTsKKyAgICAgICAgZGVzdGluYXRpb25D
b250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2MSwy
MCArMTM0LDkgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0eWxl
UmVmIHN0eWxlKQogICAgIGF1dG8gcmFkID0gZGVnMnJhZChzaGFkb3dTdHlsZS5hemltdXRoIC0g
MTgwKTsKICAgICBhdXRvIHNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzdGQ6OmNvcyhyYWQpLCBz
dGQ6OnNpbihyYWQpKSAqIHNoYWRvd1N0eWxlLmhlaWdodDsKICAgICBhdXRvIHNoYWRvd0NvbG9y
ID0gQ0dTdHlsZUdldENvbG9yKHN0eWxlKTsKLSAgICB1cGRhdGVTaGFkb3coc2hhZG93T2Zmc2V0
LCBzaGFkb3dTdHlsZS5yYWRpdXMsIENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uo
c2hhZG93Q29sb3IpLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KIAotdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdl
dENUTShnc3RhdGUpKTsKLSAgICBhdXRvIGFscGhhID0gQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUp
OwotICAgIG1fb3duZXIuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci19Ci0KLXZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBD
R0dTdGF0ZVJlZiBnc3RhdGUpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3Rh
dGUpKTsKLSAgICBtX293bmVyLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgZGVzdGluYXRp
b25Db250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHN0YXRpY19jYXN0PGZsb2F0
PihzaGFkb3dTdHlsZS5yYWRpdXMpLCBDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNl
KHNoYWRvd0NvbG9yKSB9KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXModHJ1ZSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21wdXRlQWR2
YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3Vu
dCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCkBAIC0yOTAsMTggKzE1Miwx
OCBAQCBzdGF0aWMgVmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhj
b25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVS
ZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBD
R0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQp
Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR0dTdGF0ZVJlZiBn
c3RhdGUsIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10s
IHNpemVfdCBjb3VudCkKIHsKICAgICBBU1NFUlRfSU1QTElFUyhtX2Rlcml2ZUZvbnRGcm9tQ29u
dGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vLCBtX29yaWdpbmFsRm9udCk7CiAKLSAg
ICBpZiAoIWNvdW50KQorICAgIGlmICghY291bnQgfHwgQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUp
IDw9IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIENHRm9udFJlZiB1c2VkRm9udCA9IENHR1N0
YXRlR2V0Rm9udChnc3RhdGUpOwogICAgIGlmIChtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBE
ZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vICYmIHVzZWRGb250ICE9IGFkb3B0Q0YoQ1RGb250Q29w
eUdyYXBoaWNzRm9udChtX29yaWdpbmFsRm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG51
bGxwdHIpKS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0
ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0
YXRlR2V0Q1RNKGdzdGF0ZSkpOwogCiAgICAgLy8gV2Ugd2FudCB0aGUgcmVwbGF5ZXIncyBDVE0g
YW5kIHRleHQgbWF0cml4IHRvIG1hdGNoIHRoZSBjdXJyZW50IENUTSBhbmQgdGV4dCBtYXRyaXgu
CiAgICAgLy8gVGhlIGN1cnJlbnQgdGV4dCBtYXRyaXggaXMgYSBjb25jYXRlbmF0aW9uIG9mIHdo
YXRldmVyIFdlYktpdCBzZXRzIGl0IHRvIGFuZCB3aGF0ZXZlcgpAQCAtMzI0LDEzICsxODYsMTYg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdT
dGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgaW52ZXJzZUNUTUZpeHVwID0gaW52
ZXJzZS52YWx1ZSgpOwogICAgIGVsc2UKICAgICAgICAgY3RtRml4dXAgPSBBZmZpbmVUcmFuc2Zv
cm0oKTsKLSAgICBtX293bmVyLmNvbmNhdENUTShjdG1GaXh1cCk7CisKKyAgICBtX2Rlc3RpbmF0
aW9uQ29udGV4dC5jb25jYXRDVE0oY3RtRml4dXApOwogCiAgICAgYXV0byBmaWxsQ29sb3IgPSBD
R0dTdGF0ZUdldEZpbGxDb2xvcihnc3RhdGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNl
dEZpbGxDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikp
OworCiAgICAgYXV0byBzdHJva2VDb2xvciA9IENHR1N0YXRlR2V0U3Ryb2tlQ29sb3IoZ3N0YXRl
KTsKLSAgICB1cGRhdGVGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFj
ZShmaWxsQ29sb3IpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJl
c2VydmVDb2xvclNwYWNlKHN0cm9rZUNvbG9yKSk7Ci0gICAgdXBkYXRlU2hhZG93KENHR1N0YXRl
R2V0U3R5bGUoZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOworCisg
ICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVHZXRTdHlsZShn
c3RhdGUpKTsKIAogICAgIGF1dG8gZm9udFNpemUgPSBDR0dTdGF0ZUdldEZvbnRTaXplKGdzdGF0
ZSk7CiAgICAgUmVmIGZvbnQgPSBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250
RnJvbUNvbnRleHQ6Ok5vID8gKm1fb3JpZ2luYWxGb250IDogRm9udDo6Y3JlYXRlKEZvbnRQbGF0
Zm9ybURhdGEoYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KHVzZWRGb250LCBm
b250U2l6ZSwgbnVsbHB0ciwgbnVsbHB0cikpLCBmb250U2l6ZSkpOwpAQCAtMzQ1LDMwICsyMTAs
MzggQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJp
bmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgLy8gRklYTUU6IDxodHRwczov
L3dlYmtpdC5vcmcvYi8yMzI5MTc+IChgRHJhd0dseXBoc1JlY29yZGVyYCBzaG91bGQgYmUgYWJs
ZSB0byByZWNvcmQrcmVwbGF5IHZlcnRpY2FsIHRleHQpCiAgICAgfQogCi0gICAgbV9vd25lci5k
cmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBv
c2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCB0ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0
TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7Ci0KLSAgICBt
X293bmVyLmNvbmNhdENUTShpbnZlcnNlQ1RNRml4dXApOworICAgIG1fZGVzdGluYXRpb25Db250
ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNG
cm9tUG9zaXRpb25zKHBvc2l0aW9ucywgY291bnQsIHRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQs
IHRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsKIH0KIAot
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNnSW1hZ2Up
Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKENHR1N0YXRlUmVmIGdz
dGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgY2dJbWFnZSkKIHsKLSAgICB1cGRhdGVDVE0o
KkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0
eWxlKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVH
ZXRDVE0oZ3N0YXRlKSk7CisgICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwg
Q0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKIAogICAgIC8vIENvcmUgR3JhcGhpY3MgYXNzdW1l
cyBhICJ5IHVwIiBjb29yZGluYXRlIHN5c3RlbSwgYnV0IGluIFdlYktpdCwgd2UgdXNlIGEgInkt
ZG93biIgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgLy8gVGhpcyBtZWFucyB0aGF0IFdlYktpdCdz
IGRyYXdpbmcgcm91dGluZXMgKEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkpIGludGVudGlv
bmFsbHkgZHJhdyBpbWFnZXMgdXBzaWRlLWRvd24gZnJvbSBDb3JlIEdyYXBoaWNzJ3MgcG9pbnQg
b2Ygdmlldy4KICAgICAvLyAoVGhlcmUncyBhIHktZmxpcCBpbnNpZGUgdGhlIGltcGxlbWVudGF0
aW9uIG9mIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkuKQogICAgIC8vIFRoZSByZWN0IGhh
cyB0aGUgcmlnaHQgYm91bmRzLCBidXQgd2UgbmVlZCB0byB0cmFuc2Zvcm0gZnJvbSBDRydzIGNv
b3JkaW5hdGUgc3lzdGVtIHRvIFdlYktpdCdzIGJ5IHBlcmZvcm1pbmcgb3VyIG93biB5LWZsaXAg
c28gaW1hZ2VzIGFyZSBkcmF3biB0aGUgcmlnaHQtc2lkZS11cC4KICAgICAvLyBXZSBkbyB0aGlz
IGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHRoZSB0d28gQVBJcywgd2hpY2ggaXMgcmlnaHQgaGVy
ZS4KLSAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCByZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qu
b3JpZ2luLnkpOwotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0KKyAgICBt
X2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhlaWdodCArIDIgKiBy
ZWN0Lm9yaWdpbi55KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKKyAgICAKICAgICBhdXRvIGltYWdlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShjZ0lt
YWdlKTsKLSAgICBtX293bmVyLmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5zaXplKCks
IEZsb2F0UmVjdChyZWN0KSwgRmxvYXRSZWN0IHt7IH0sIGltYWdlLT5zaXplKCl9LCBJbWFnZVBh
aW50aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7Ci0KKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6
ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2UtPnNpemUoKSB9LCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7
CisgICAgCiAgICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRl
eHQuCi0gICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBtX293bmVyLnRy
YW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIG1fZGVz
dGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVj
dC5vcmlnaW4ueSkpOworfQorCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZH
UnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2Rl
KQoreworICAgIHNldEludGVybmFsRm9udChmb250LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAKKyAg
ICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgcmVzdG9y
ZURlc3RpbmF0aW9uQ29udGV4dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdPVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKQEAgLTM3OSwyNSArMjUyLDE5IEBAIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCoKICAgICAgICAgYXV0byBib3VuZHMgPSBmb250LmJvdW5kc0ZvckdseXBoKGdseXBo
c1tpXSk7CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgbG9jYWwgSW1hZ2VCdWZmZXIgYmVjYXVzZSBk
ZWNvZGluZyB0aGUgU1ZHIGZvbnRzIGhhcyB0byBoYXBwZW4gaW4gV2ViUHJvY2Vzcy4KLSAgICAg
ICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX293bmVyLmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZl
cihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6
OkxvY2FsKSkgeworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fZGVzdGluYXRpb25D
b250ZXh0LmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6OkxvY2FsKSkgeworICAgICAgICAgICAgaW1h
Z2VCdWZmZXItPmNvbnRleHQoKS5hcHBseVN0YXRlQ2hhbmdlcygpOwogICAgICAgICAgICAgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoaW1hZ2VCdWZmZXItPmNvbnRleHQoKSwgZm9udCwgZ2x5cGhz
ICsgaSwgYWR2YW5jZXMgKyBpLCAxLCBGbG9hdFBvaW50KCksIHNtb290aGluZ01vZGUpOwogCiAg
ICAgICAgICAgICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0ID0gZW5jbG9zaW5nSW50UmVjdChi
b3VuZHMpOwogICAgICAgICAgICAgZGVzdGluYXRpb25SZWN0Lm1vdmVCeShwZW5Qb3NpdGlvbik7
Ci0gICAgICAgICAgICBtX293bmVyLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRlc3Rp
bmF0aW9uUmVjdCk7CisgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogICAgICAgICB9CiAKICAgICAg
ICAgcGVuUG9zaXRpb24ubW92ZShzaXplKGFkdmFuY2VzW2ldKSk7CiAgICAgfQogfQogCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIHByZXBhcmVJbnRlcm5h
bENvbnRleHQoZm9udCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgRm9udENhc2NhZGU6OmRyYXdHbHlw
aHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
c3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQo
KTsKLX0KLQogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGluZ0ludG9PVFNW
R0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUg
c21vb3RoaW5nTW9kZSkKIHsKICAgICBhdXRvIG90c3ZnR2x5cGhzID0gZm9udC5maW5kT1RTVkdH
bHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpOwpAQCAtNDQwLDcgKzMwNyw3IEBAIHZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29u
c3QgRm9udCYgZm9uCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBp
ZiAobV9kZWNvbnN0cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpObykg
ewotICAgICAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAgICAg
bV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC00NTMsMTUgKzMyMCwxNyBAQCB2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQoQ1RGb250UmVmIGZvbnQsIENHRmxvYXQgZm9udFNpemUs
IENUTGluZQogewogICAgIEFTU0VSVChtX2RlY29uc3RydWN0RHJhd0dseXBocyA9PSBEZWNvbnN0
cnVjdERyYXdHbHlwaHM6Olllcyk7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNh
dmVyKG1fb3duZXIpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIobV9kZXN0
aW5hdGlvbkNvbnRleHQpOwogCi0gICAgbV9vd25lci50cmFuc2xhdGUobGluZVJlY3Qub3JpZ2lu
LngsIGxpbmVSZWN0Lm9yaWdpbi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIG1fb3du
ZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJh
bnNsYXRlKGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0LnNp
emUuaGVpZ2h0KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwg
LTEpKTsKIAotICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0
Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50
aWFsaWFzZWQpOworICAgIHNldEludGVybmFsRm9udChGb250OjpjcmVhdGUoRm9udFBsYXRmb3Jt
RGF0YShmb250LCBmb250U2l6ZSkpLCBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxp
YXNlZCk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUludGVybmFsQ29u
dGV4dCgpOwogICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksIDAsIDApOwogICAgIENUTGluZURyYXcobGluZSwgbV9pbnRlcm5h
bENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBjb25jbHVkZUludGVybmFsQ29udGV4
dCgpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0ZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAK
aW5kZXggNTExZTA5Yjk2Y2VmMDMyNTA5MGUyM2FmOTE0YWUzNWYyYWI4ZWQyZS4uZTUzNGNjNTVh
ZjI2YjdmYjgyODBlNjNiN2RjMjVhM2Q0YTQxNjM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVD
b3JlVGV4dC5jcHAKQEAgLTE1MiwyNSArMTUyLDI3IEBAIHN0YXRpYyB2b2lkIGZpbGxWZWN0b3JX
aXRoVmVydGljYWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25z
CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBj
b3VudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQorc3RhdGljIHZvaWQgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYg
Zm9udCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNv
bnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRleHRNYXRyaXgpCiB7CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURh
dGEoKTsKKwogICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7CiAgICAg
aWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGlj
YWwpIHsKLSAgICAgICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGlj
YWxUZXh0TWF0cml4KGZvbnQsIHRleHRNYXRyaXgpLCBjb250ZXh0KTsKKyAgICAgICAgU2NvcGVk
VGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIHRl
eHRNYXRyaXgpLCBjZ0NvbnRleHQpOwogCiAgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJh
bnNsYXRpb25zKGNvdW50KTsKICAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNG
b3JHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRh
KCksIGNvdW50KTsKIAogICAgICAgICBhdXRvIGFzY2VudERlbHRhID0gZm9udC5mb250TWV0cmlj
cygpLmZsb2F0QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygp
LmZsb2F0QXNjZW50KCk7Ci0gICAgICAgIGZpbGxWZWN0b3JXaXRoVmVydGljYWxHbHlwaFBvc2l0
aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBj
b3VudCwgcG9pbnQsIGFzY2VudERlbHRhKTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0
Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRl
eHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRp
b25zLCBjZ0NvbnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBjb3VudCwgcG9p
bnQsIGFzY2VudERlbHRhKTsKKyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNnQ29udGV4dCk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlv
bnMocG9zaXRpb25zLCBjb250ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKLSAgICAgICAg
Q1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25z
LmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aEhvcml6b250
YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNnQ29udGV4dCwgYWR2YW5jZXMsIGNvdW50LCBw
b2ludCk7CisgICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBn
bHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0KIH0KIApA
QCAtMjQyLDEwICsyNDQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIHNldENHRm9u
dFJlbmRlcmluZ01vZGUoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250
ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7
Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBjb250
ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAg
ICBhdXRvIGRyb3BTaGFkb3cgPSBjb250ZXh0LmRyb3BTaGFkb3coKTsKIAogICAgIEFmZmluZVRy
YW5zZm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBmbG9hdCBzeW50aGV0
aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CkBAIC0yNTgsMjkgKzI1
NywyOSBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0
RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVy
ICYmICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9u
T3JGbGlwcGVkKCkpICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJv
b2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJh
d2luZ01vZGU6OkZpbGwgJiYgZHJvcFNoYWRvdy5jb2xvci5pc1ZhbGlkKCkgJiYgIWRyb3BTaGFk
b3cuYmx1clJhZGl1cyAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFj
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5
T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7CiAgICAgICAgIC8vIFBhaW50IHNpbXBs
ZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8g
YXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KICAgICAgICAgY29udGV4dC5jbGVh
clNoYWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxDb2xvcigp
OwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAgICBDb2xv
ciBzaGFkb3dGaWxsQ29sb3IgPSBkcm9wU2hhZG93LmNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9p
bnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRY
ID0gcG9pbnQueCgpICsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYg
c2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQg
dGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAg
ZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAo
Y29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSks
IGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4
KTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9m
ZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6
IDEpOworICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4
dFgsIHNoYWRvd1RleHRZKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCB0ZXh0TWF0cml4KTsKICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAg
ICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBz
eW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAgICAgICAgIHNob3dHbHlw
aHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZz
ZXQsIHNoYWRvd1RleHRZKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCB0ZXh0TWF0cml4KTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9y
KTsKICAgICB9CiAKLSAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0Nv
bnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKIAogICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0
KQotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsg
c3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgICAgICBzaG93R2x5cGhzV2l0
aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNldCwgcG9p
bnQueSgpKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0
TWF0cml4KTsKIAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRleHQuc2V0
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBj
b250ZXh0LnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250
U21vb3RoaW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggMmUyZjRmNGYyY2I1NWQz
NjVlNWFlMzk5MzI1ZDA1ZjJjMTczNjFmZC4uY2NmNDBjZWE2MmIxNjc0MzY2ZDc0ODQxNjJiMWJj
NGU5Mzc3MDc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC05MCwxMCArOTAsNyBA
QCBib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3Ms
IEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgaWYgKCEoZmxhZ3MgJiBBc1RleHRGbGFnOjpJbmNs
dWRlc1BsYXRmb3JtT3BlcmF0aW9ucykpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHN0YXRl
SXRlbSA9IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICAgICAgLy8gRklYTUU6IGZvciBu
b3csIG9ubHkgZHJvcCB0aGUgaXRlbSBpZiB0aGUgb25seSBzdGF0ZS1jaGFuZ2UgZmxhZ3MgYXJl
IHBsYXRmb3JtLXNwZWNpZmljLgotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZUNoYW5n
ZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250c0NoYW5nZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisg
ICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlKCkuY2hhbmdlcygpID09IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yMDIs
MTYgKzE5OSw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAg
ICAgICAgIHJldHVybiBhcHBlbmQ8U2F2ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihpdGVtLmdl
dDxSZXN0b3JlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJl
dHVybiBhcHBlbmQ8VHJhbnNsYXRlPihpdGVtLmdldDxUcmFuc2xhdGU+KCkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0
PFJvdGF0ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBh
cHBlbmQ8U2NhbGU+KGl0ZW0uZ2V0PFNjYWxlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5n
ZXQ8Q29uY2F0ZW5hdGVDVE0+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTZXRDVE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldElu
bGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTIyMCwxNiArMjA3LDYgQEAgdm9p
ZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0uZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKSk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0
U3RhdGU+KGl0ZW0uZ2V0PFNldFN0YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVDYXA+KGl0ZW0uZ2V0PFNldExpbmVD
YXA+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4g
YXBwZW5kPFNldExpbmVEYXNoPihpdGVtLmdldDxTZXRMaW5lRGFzaD4oKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZUpvaW4+
KGl0ZW0uZ2V0PFNldExpbmVKb2luPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxp
bWl0OgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldE1pdGVyTGltaXQ+KGl0ZW0uZ2V0PFNldE1p
dGVyTGltaXQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPENsZWFyU2hhZG93PihpdGVtLmdldDxDbGVhclNoYWRvdz4oKSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwPihpdGVtLmdl
dDxDbGlwPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMjc0LDggKzI1MSw2
IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9y
PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAg
cmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAg
ICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21w
b3NpdGVkUmVjdD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAg
ICAgICByZXR1cm4gYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRS
ZWN0PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAppbmRleCAw
YzI1MjI2NGFmNDE2NjU2MjE3NTE2MDQxMDQyYThiZGQzYmZhYmI1Li5kZWZjZTg0ZWYzNTg3YmVh
MDZkMjA3ZGI1YjgwMmFhN2M4MjU2NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpEcmF3aW5n
Q29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCi0gICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3ND
b250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQor
ICAgIDogbV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXpl
KSwgaW5pdGlhbENUTSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmNwcAppbmRleCA0NTc3NTUxODliZGFkZDcxOWQyNDVhNGU2ZDJjODFiZGRiMWY3ZGYz
Li4wZGIxNTAzOTYwNDAzMmYzMzAzZmJjYjY1MjFlNTNlNGUzNGY5MThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtNTIsMjEgKzUyLDYgQEAgdm9p
ZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgZ2V0PFJlc3RvcmU+KCkuYXBwbHkoY29udGV4dCk7
CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAg
IGdldDxUcmFuc2xhdGU+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGdldDxSb3RhdGU+KCkuYXBwbHkoY29udGV4
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAg
Z2V0PFNjYWxlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGdldDxDb25jYXRlbmF0ZUNUTT4oKS5h
cHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENU
TToKLSAgICAgICAgZ2V0PFNldENUTT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgZ2V0PFNl
dElubGluZUZpbGxDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAt
NzksMjEgKzY0LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKLSAgICAgICAgZ2V0PFNldExpbmVDYXA+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0PFNldExp
bmVEYXNoPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGdldDxTZXRMaW5lSm9pbj4oKS5hcHBseShjb250
ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6
Ci0gICAgICAgIGdldDxTZXRNaXRlckxpbWl0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGdldDxDbGVh
clNoYWRvdz4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXA6CiAgICAgICAgIGdldDxDbGlwPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAg
ICByZXR1cm47CkBAIC0xNjAsOSArMTMwLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6CiAgICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5hcHBseShjb250ZXh0
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDoKLSAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKLSAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAg
ICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjcwLDkgKzIzNyw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgICAgIGdldDxEcmF3UGF0aD4oKS5+RHJhd1BhdGgo
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDoKLSAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0ZWRSZWN0
KCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAg
ICAgZ2V0PEZpbGxQYXRoPigpLn5GaWxsUGF0aCgpOwogICAgICAgICByZXR1cm47CkBAIC0yODgs
OSArMjUyLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxS
b3VuZGVkUmVjdCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKLSAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBnZXQ8U2V0
U3RhdGU+KCkuflNldFN0YXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxNCw5ICsyNzUsNiBA
QCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
Q2xlYXJSZWN0Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6
Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPENsZWFyU2hhZG93Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8Q2xpcD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI2LDkg
KzI4NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPENsaXBUb0ltYWdlQnVmZmVyPjo6dmFsdWUpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENvbmNhdGVuYXRlQ1RNPjo6dmFs
dWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj46OnZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMzg3LDMzICszNDIsMTUgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSZXN0b3JlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSb3RhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTYXZlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNjYWxlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxDb2xv
cj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZVN0cm9rZUNvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRJbmxpbmVTdHJva2VDb2xvcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2
YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0
OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
ZXRNaXRlckxpbWl0Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTQzNyw5ICszNzQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQog
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUxpbmU+Ojp2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZhbHVlKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIApAQCAtNTAxLDggKzQzNSw2IEBAIGJvb2wgSXRl
bUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRp
b24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3UGF0dGVybj4oaXRlbU9mZnNl
dCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICByZXR1cm4g
Y29weUludG88RHJhd1BhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsQ29tcG9z
aXRlZFJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0
aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CkBAIC01MTMsOCArNDQ1LDYg
QEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRs
ZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0Pihp
dGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAg
ICAgIHJldHVybiBjb3B5SW50bzxTZXRMaW5lRGFzaD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0U3Rh
dGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgpA
QCAtNTMxLDE2ICs0NjEsMTIgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBp
dGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclJl
Y3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoK
LSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsZWFyU2hhZG93PihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXA+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgICAg
ICByZXR1cm4gY29weUludG88Q2xpcE91dD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgICAgICByZXR1cm4gY29weUludG88Q2xp
cFRvSW1hZ2VCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
b25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENvbmNhdGVuYXRlQ1RNPihp
dGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToK
QEAgLTU3MywyNCArNDk5LDEyIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUg
aXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAjZW5kaWYKICAgICBjYXNl
IEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICByZXR1cm4gY29weUludG88UmVzdG9yZT4oaXRl
bU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFJvdGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNhdmU6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTYXZlPihpdGVtT2Zmc2V0LCAqdGhp
cyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxT
Y2FsZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldENUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PFNldElubGluZUZpbGxDb2xvcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5s
aW5lU3Ryb2tlQ29sb3I+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGluZUNhcD4oaXRlbU9mZnNl
dCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1
cm4gY29weUludG88U2V0TGluZUpvaW4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TWl0ZXJM
aW1pdD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRl
bU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CkBAIC02
MDcsOCArNTIxLDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlw
ZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PFN0cm9rZVJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VMaW5lOgogICAgICAgICByZXR1cm4gY29weUludG88U3Ryb2tlTGluZT4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPFRyYW5zbGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKaW5kZXgg
NTRlYTFjODY4MmMwNzQ0MmUyZTg0MTRiNzMyOGFhMzI0ODAyNWE3NS4uYmEwZDk1MWMyMmNmNDlj
ZTQxN2UzMzU1M2IwMGUwYTViOGFiMjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1UeXBlLmNwcApAQCAtMzgsMTYgKzM4LDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVt
SW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNhdmUpOwogICAg
IGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVybiBzaXplb2YoUmVzdG9yZSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFRy
YW5zbGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFJvdGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoU2NhbGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKENvbmNhdGVuYXRlQ1RNKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRD
VE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0Q1RNKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5lRmlsbENv
bG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTU2LDE2
ICs0Niw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkK
ICAgICAgICAgcmV0dXJuIHNpemVvZihTZXRTdHJva2VUaGlja25lc3MpOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0YXRlKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVD
YXApOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFNldExpbmVEYXNoKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihTZXRMaW5lSm9pbik7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRNaXRlckxpbWl0KTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIHNpemVvZihDbGVhclNoYWRv
dyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIHNpemVvZihDbGlw
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMTEwLDggKzkwLDYgQEAgc3RhdGlj
IHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxSZWN0V2l0aENvbG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudDoKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhHcmFkaWVudCk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxDb21wb3NpdGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5k
ZWRSZWN0OgogICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSb3VuZGVkUmVjdCk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CkBAIC0xODIsMjggKzE2MCwxOCBA
QCBib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseUZpbGxQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoK
ICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNlIEl0ZW1U
eXBlOjpSZXN0b3JlOgotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1U
eXBlOjpTYXZlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6
OlNldENUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgogICAgIGNh
c2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKQEAgLTIyMiw3ICsxOTAsNiBAQCBib29sIGlzRHJhd2lu
Z0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVu
Y3lMYXllcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbExpbmU6CkBAIC0yODgsMTMgKzI1NSwxMSBAQCBib29sIGlz
SW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UGF0aDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
Q29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJvdW5kZWRSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1N5c3RlbUltYWdlOgpAQCAtMzA2LDExICsyNzEsOSBAQCBi
b29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlw
ZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBU
b0ltYWdlQnVmZmVyOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0VsbGlwc2U6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXI6CkBAIC0zMzMsMTUgKzI5Niw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUp
CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgogI2VuZGlmCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VU
aGlja25lc3M6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKQEAgLTM1MSw3ICszMDgsNiBAQCBib29sIGlzSW5saW5lSXRlbShJ
dGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0
ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5kZXggZDY4M2IyYWNmNzg0
NWY5OWMzY2QwOTVlYjkxMWU1NGYxZjhjZTExMS4uMTY2MGI5OGZkYTVlZjI3YjNmNzVkMjJhNTc5
YTNhOWFlM2NjNzBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCkBA
IC0zMSwyMCArMzEsMTAgQEAgbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGVudW0gY2xhc3MgSXRl
bVR5cGUgOiB1aW50OF90IHsKICAgICBTYXZlLAogICAgIFJlc3RvcmUsCi0gICAgVHJhbnNsYXRl
LAotICAgIFJvdGF0ZSwKLSAgICBTY2FsZSwKLSAgICBDb25jYXRlbmF0ZUNUTSwKLSAgICBTZXRD
VE0sCiAgICAgU2V0SW5saW5lRmlsbENvbG9yLAogICAgIFNldElubGluZVN0cm9rZUNvbG9yLAog
ICAgIFNldFN0cm9rZVRoaWNrbmVzcywKICAgICBTZXRTdGF0ZSwKLSAgICBTZXRMaW5lQ2FwLAot
ICAgIFNldExpbmVEYXNoLAotICAgIFNldExpbmVKb2luLAotICAgIFNldE1pdGVyTGltaXQsCi0g
ICAgQ2xlYXJTaGFkb3csCiAgICAgQ2xpcCwKICAgICBDbGlwT3V0LAogICAgIENsaXBUb0ltYWdl
QnVmZmVyLApAQCAtNjcsNyArNTcsNiBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7
CiAgICAgRmlsbFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJlY3RXaXRo
R3JhZGllbnQsCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0LAogICAgIEZpbGxSb3VuZGVkUmVjdCwK
ICAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAyM2QwYmJjYzcxYzI4
MWM1MmMzNWE4YzI1MmRhOTZjMGFiMTJhOThjLi4zNmZhNmExMjdmZjA3OTNjZWYyMzBlZGY3YTY0
MWRkZTAyZmUzNzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC01NCw2NyArNTUsNiBAQCB2
b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBUcmFuc2xhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkp
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgieSIsIGl0ZW0ueSgpKTsKLQotICAgIHJldHVybiB0czsK
LX0KLQotdm9pZCBSb3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LnJvdGF0ZShtX2FuZ2xlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKLXsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImFuZ2xlIiwgaXRlbS5hbmdsZSgpKTsKLQotICAgIHJldHVybiB0czsK
LX0KLQotdm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuc2NhbGUobV9zaXplKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVtKQotewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2l6ZSIsIGl0ZW0uYW1vdW50KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQot
Ci12b2lkIFNldENUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuc2V0Q1RNKG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRlbSkKLXsKLSAgICB0
cy5kdW1wUHJvcGVydHkoInNldC1jdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENv
bmNhdGVuYXRlQ1RNJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50
cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgU2V0SW5saW5lRmlsbENv
bG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoY29sb3IoKSk7CkBAIC0xNDgsNzcgKzg4LDIyIEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdHJva2VUaGlja25l
c3MmIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0YXRlLCBmbGFncykKLXsK
LX0KLQotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
JiBzdGF0ZUNoYW5nZSkKLSAgICA6IG1fc3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2UpCitTZXRTdGF0
ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQorICAgIDogbV9z
dGF0ZShzdGF0ZSkKIHsKIH0KIAogdm9pZCBTZXRTdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQogewotICAgIG1fc3RhdGVDaGFuZ2UuYXBwbHkoY29udGV4dCk7CisgICAgY29u
dGV4dC5tZXJnZVN0YXRlQ2hhbmdlcyhtX3N0YXRlKTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBzdGF0ZSkKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYg
aXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0ZS5zdGF0ZUNoYW5nZSgpOworICAgIHRzIDw8IGl0ZW0u
c3RhdGUoKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLXZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUNhcCht
X2xpbmVDYXApOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNhcCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRM
aW5lRGFzaCYgbGluZURhc2gpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5Iiwg
bGluZURhc2guZGFzaEFycmF5KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQi
LCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRM
aW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNv
bnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCi17
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpvaW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21p
dGVyTGltaXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1pdC5taXRlckxpbWl0KCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLX0KLQogdm9pZCBDbGlw
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5j
bGlwKG1fcmVjdCk7CkBAIC02NTcsMzAgKzU0MiwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0p
CiAgICAgcmV0dXJuIHRzOwogfQogCi12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFJlY3QobV9y
ZWN0LCBtX2NvbG9yLCBtX29wLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0
ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRz
LmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwg
bV9jb2xvciwgbV9ibGVuZE1vZGUpOworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVj
dCwgbV9jb2xvcik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUm91bmRlZFJlY3QmIGl0ZW0pCiB7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yb3VuZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNv
bG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBp
dGVtLmJsZW5kTW9kZSgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTc2OCw4ICs2MzgsOCBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmls
bEVsbGlwc2UmIGl0ZW0pCiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1QYWludEZyYW1lRm9yTWVk
aWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkp
CitQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKKyAgICA6IG1f
aWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikK
IHsKIH0KQEAgLTEwMTEsMTkgKzg4MSwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlwZSkKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6IHRzIDw8ICJyZXN0b3JlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOiB0cyA8PCAidHJhbnNsYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOiB0cyA8PCAicm90YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2Nh
bGU6IHRzIDw8ICJzY2FsZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogdHMg
PDwgInNldC1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTog
dHMgPDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsQ29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLWZpbGwtY29sb3IiOyBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogdHMgPDwgInNldC1pbmxpbmUt
c3Ryb2tlLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tu
ZXNzOiB0cyA8PCAic2V0LXN0cm9rZS10aGlja25lc3MiOyBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdGF0ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0
IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjogdHMgPDwgImNsaXAtdG8taW1hZ2Ut
YnVmZmVyIjsgYnJlYWs7CkBAIC0xMDQ2LDcgKzkwNyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0OiB0cyA8PCAiZmlsbC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciI7IGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB0cyA8PCAiZmlsbC1y
ZWN0LXdpdGgtZ3JhZGllbnQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6IHRzIDw8ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogdHMgPDwgImZpbGwtcm91bmRlZC1yZWN0IjsgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHRzIDw8ICJm
aWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiOyBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKQEAgLTEwNzgsNyArOTM4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjogdHMgPDwgImFwcGx5LWZpbGwtcGF0dGVybiI7IGJyZWFrOwogI2VuZGlm
CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogdHMgPDwgImFwcGx5
LWRldmljZS1zY2FsZS1mYWN0b3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzogdHMgPDwgImNsZWFyLXNoYWRvdyI7IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7
CiB9CkBAIC0xMDg4LDIxICs5NDcsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKICAgICBz
d2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAg
ICAgICB0cyA8PCBpdGVtLmdldDxUcmFuc2xhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Um90YXRlPigpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8U2NhbGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dENUTToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8Q29uY2F0ZW5hdGVDVE0+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmls
bENvbG9yPigpOwogICAgICAgICBicmVhazsKQEAgLTExMTUsMTggKzk1OSw2IEBAIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3RhdGU+KCk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVDYXA+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lRGFz
aD4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0g
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVKb2luPigpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxT
ZXRNaXRlckxpbWl0PigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
OgogICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwPigpOwogICAgICAgICBicmVhazsKQEAgLTEx
OTMsOSArMTAyNSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0
ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoK
ICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpOwotICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PEZpbGxSb3VuZGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjcxLDcgKzExMDAsNiBA
QCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0p
CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RmlsbFBhdHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IDk3Y2I1ZmM4ZDA0YmE4NjYyYjcyYzdkZGVlYmM0NDE1
NWMyODI1YjcuLmU4MWJiMzQ2YzllZmViZTk2YTY1MGQ3NTQ1YTgxZjYxNmI3ZDZhOWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtODUsMTA0ICs4NSw2IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
fTsKIAotY2xhc3MgVHJhbnNsYXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlRyYW5zbGF0ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Ci0gICAgICAgIDogbV94KHgpCi0gICAgICAgICwgbV95KHkpCi0gICAgewotICAgIH0KLQotICAg
IGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV95OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1feCB7IDAgfTsKLSAgICBmbG9h
dCBtX3kgeyAwIH07Ci19OwotCi1jbGFzcyBSb3RhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90YXRlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUp
Ci0gICAgICAgIDogbV9hbmdsZShhbmdsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgYW5n
bGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1f
YW5nbGUgeyAwIH07IC8vIEluIHJhZGlhbnMuCi19OwotCi1jbGFzcyBTY2FsZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTY2Fs
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBGbG9hdFNpemUgbV9zaXplOwotfTsKLQotY2xhc3MgU2V0
Q1RNIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OlNldENUTTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwotCi0gICAgU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAg
ICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCi1jbGFz
cyBDb25jYXRlbmF0ZUNUTSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKLX07Ci0KIGNsYXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I7CkBAIC0yNDcsMTAgKzE0OSw4IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFNl
dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmIHN0YXRlQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIHsgcmV0dXJuIG1fc3RhdGVD
aGFuZ2U7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTZXRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpOworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKQEAg
LTI1OCw0MDQgKzE1OCwyNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKTsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UgbV9zdGF0ZUNoYW5nZTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZSBtX3N0YXRlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgU2V0U3RhdGU6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGF1dG8gY2hhbmdlRmxhZ3Mg
PSBtX3N0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3M7Ci0gICAgZW5jb2RlciA8PCBjaGFuZ2VGbGFn
czsKLQotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZUNoYW5nZS5tX3N0YXRlOwotCi0gICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVu
dENoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0cm9rZUdyYWRpZW50KTsKLSAgICAg
ICAgZW5jb2RlciA8PCAqc3RhdGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNo
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0gICAgICAgIGVu
Y29kZXIgPDwgKnN0YXRlLnN0cm9rZVBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7
Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5maWxsR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8
ICpzdGF0ZS5maWxsR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAg
QVNTRVJUKHN0YXRlLmZpbGxQYXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuZmls
bFBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
c2hhZG93T2Zmc2V0OwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuc2hhZG93UmFkaXVzTW9kZTsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2Up
KQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZUNvbG9yOwotCi0gICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmZpbGxDb2xvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuZmlsbFJ1bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYmxlbmRNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYWxwaGE7Ci0KLSAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlh
bGlhc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkQW50aWFsaWFzOwot
Ci0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkU21v
b3RoRm9udHM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29k
ZXIgPDwgc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7CisgICAgZW5jb2RlciA8PCBtX3N0YXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgogc3RkOjpvcHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewotICAgIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOwotICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7Ci0g
ICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiBzdGF0ZTsKKyAgICBkZWNvZGVyID4+IHN0YXRlOworICAgIGlmICghc3RhdGUpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSBzdGF0ZUNoYW5nZTsKLSAgICBzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzID0gKmNoYW5nZUZs
YWdzOwotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0
cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFz
dHJva2VHcmFkaWVudCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoKnN0cm9rZUdy
YWRpZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsKLSAgICAg
ICAgYXV0byBzdHJva2VQYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAg
ICBpZiAoIXN0cm9rZVBhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUoKnN0
cm9rZVBhdHRlcm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0g
ICAgICAgIGF1dG8gZmlsbEdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAg
ICAgICAgaWYgKCFmaWxsR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZSgq
ZmlsbEdyYWRpZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKSB7Ci0g
ICAgICAgIGF1dG8gZmlsbFBhdHRlcm4gPSBQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAg
ICAgIGlmICghZmlsbFBhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKCpmaWxs
UGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFNpemU+IHNoYWRvd09mZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBz
aGFkb3dPZmZzZXQ7Ci0gICAgICAgIGlmICghc2hhZG93T2Zmc2V0KQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd09m
ZnNldCA9ICpzaGFkb3dPZmZzZXQ7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2hh
ZG93Qmx1cjsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dCbHVyOwotICAgICAgICBpZiAoIXNo
YWRvd0JsdXIpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93Qmx1ciA9ICpzaGFkb3dCbHVyOwotCi0gICAgICAgIHN0
ZDo6b3B0aW9uYWw8Q29sb3I+IHNoYWRvd0NvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRv
d0NvbG9yOwotICAgICAgICBpZiAoIXNoYWRvd0NvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0NvbG9yID0g
KnNoYWRvd0NvbG9yOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4g
c2hhZG93UmFkaXVzTW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dSYWRpdXNNb2RlOwot
ICAgICAgICBpZiAoIXNoYWRvd1JhZGl1c01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9
IFdURk1vdmUoKnNoYWRvd1JhZGl1c01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHN0cm9rZVRoaWNr
bmVzczsKLSAgICAgICAgZGVjb2RlciA+PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGlmICgh
c3Ryb2tlVGhpY2tuZXNzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
ICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9ICpzdHJva2VUaGlja25l
c3M7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpIHsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDxUZXh0RHJhd2luZ01vZGVGbGFncz4gdGV4dERyYXdpbmdNb2RlOwotICAg
ICAgICBkZWNvZGVyID4+IHRleHREcmF3aW5nTW9kZTsKLSAgICAgICAgaWYgKCF0ZXh0RHJhd2lu
Z01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gV1RGTW92ZSgqdGV4dERyYXdpbmdNb2Rl
KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6
b3B0aW9uYWw8Q29sb3I+IHN0cm9rZUNvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHN0cm9rZUNv
bG9yOwotICAgICAgICBpZiAoIXN0cm9rZUNvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZUNvbG9yID0gKnN0
cm9rZUNvbG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGZpbGxDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxs
Q29sb3I7Ci0gICAgICAgIGlmICghZmlsbENvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxDb2xvciA9ICpmaWxs
Q29sb3I7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkgewotICAgICAgICBT
dHJva2VTdHlsZSBzdHJva2VTdHlsZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJv
a2VTdHlsZSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8V2luZFJ1bGU+
IGZpbGxSdWxlOwotICAgICAgICBkZWNvZGVyID4+IGZpbGxSdWxlOwotICAgICAgICBpZiAoIWZp
bGxSdWxlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLmZpbGxSdWxlID0gKmZpbGxSdWxlOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9z
aXRlT3BlcmF0b3I+IGNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBkZWNvZGVyID4+IGNvbXBv
c2l0ZU9wZXJhdG9yOwotICAgICAgICBpZiAoIWNvbXBvc2l0ZU9wZXJhdG9yKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yID0gKmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVu
ZE1vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgICAgICBpZiAoIWJsZW5k
TW9kZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5ibGVuZE1vZGUgPSAqYmxlbmRNb2RlOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFs
PEludGVycG9sYXRpb25RdWFsaXR5PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgICAg
ICBkZWNvZGVyID4+IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGlmICghaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
ID0gKmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hh
bmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBhbHBoYTsKLSAgICAgICAgZGVj
b2RlciA+PiBhbHBoYTsKLSAgICAgICAgaWYgKCFhbHBoYSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5hbHBoYSA9ICphbHBo
YTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkgewotICAgICAgICBz
dGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAgZGVjb2RlciA+PiBz
aG91bGRBbnRpYWxpYXM7Ci0gICAgICAgIGlmICghc2hvdWxkQW50aWFsaWFzKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNo
b3VsZEFudGlhbGlhcyA9ICpzaG91bGRBbnRpYWxpYXM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFNtb290aEZvbnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3Vs
ZFNtb290aEZvbnRzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFNtb290aEZvbnRzOwotICAg
ICAgICBpZiAoIXNob3VsZFNtb290aEZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0g
KnNob3VsZFNtb290aEZvbnRzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsKLSAgICAgICAgaWYgKCFzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1f
c3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gKnNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250czsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2Up
KSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7
Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAgIGlm
ICghc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMgPSAqc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgeyBz
dGF0ZUNoYW5nZSB9IH07Ci19Ci0KLWNsYXNzIFNldExpbmVDYXAgewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUNhcDsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUNh
cChMaW5lQ2FwIGxpbmVDYXApCi0gICAgICAgIDogbV9saW5lQ2FwKGxpbmVDYXApCi0gICAgewot
ICAgIH0KLQotICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsg
fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKLQotcHJpdmF0ZToKLSAgICBMaW5lQ2FwIG1fbGluZUNhcDsKLX07Ci0KLWNsYXNzIFNldExp
bmVEYXNoIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNldExpbmVEYXNoOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IGZhbHNlOwotCi0gICAgU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXks
IGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgICAgIDogbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAg
ICAgICAsIG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9Ci0g
ICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRMaW5l
RGFzaD4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBEYXNoQXJyYXkgbV9kYXNo
QXJyYXk7Ci0gICAgZmxvYXQgbV9kYXNoT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ewotICAgIGVuY29kZXIgPDwgbV9kYXNoQXJyYXk7Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hPZmZz
ZXQ7CisgICAgcmV0dXJuIFNldFN0YXRlKCpzdGF0ZSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1zdGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJh
eTsKLSAgICBkZWNvZGVyID4+IGRhc2hBcnJheTsKLSAgICBpZiAoIWRhc2hBcnJheSkKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGRhc2hP
ZmZzZXQ7Ci0gICAgZGVjb2RlciA+PiBkYXNoT2Zmc2V0OwotICAgIGlmICghZGFzaE9mZnNldCkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqZGFzaEFycmF5
LCAqZGFzaE9mZnNldCB9fTsKLX0KLQotY2xhc3MgU2V0TGluZUpvaW4gewotcHVibGljOgotICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUpv
aW47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExp
bmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotICAgICAgICA6IG1fbGluZUpvaW4obGluZUpvaW4p
Ci0gICAgewotICAgIH0KLQotICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lSm9pbjsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMaW5lSm9pbiBtX2xpbmVKb2luOwotfTsK
LQotY2xhc3MgU2V0TWl0ZXJMaW1pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1p
dGVyTGltaXQpCi0gICAgICAgIDogbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi0gICAgewotICAg
IH0KLQotICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9taXRlckxpbWl0OwotfTsKLQotY2xhc3MgQ2xl
YXJTaGFkb3cgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci19OwotCiAvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2luZyBpdGVtPwogY2xh
c3MgQ2xpcCB7CiBwdWJsaWM6CkBAIC0xNjEyLDkxICsxMTM0LDIwIEBAIHN0ZDo6b3B0aW9uYWw8
RmlsbFJlY3RXaXRoR3JhZGllbnQ+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlCiAgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0KCkgfX07CiB9CiAK
LWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKLQotICAgIEZpbGxDb21wb3NpdGVk
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgICAgIDogbV9yZWN0KHJlY3Qp
Ci0gICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBtX29wKG9wKQotICAgICAgICAs
IG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQot
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBt
X2NvbG9yOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1fYmxl
bmRNb2RlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbENvbXBvc2l0
ZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8
IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX29wOwot
ICAgIGVuY29kZXIgPDwgbV9ibGVuZE1vZGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1zdGQ6Om9wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gRmlsbENvbXBvc2l0ZWRSZWN0Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7Ci0gICAg
ZGVjb2RlciA+PiBjb2xvcjsKLSAgICBpZiAoIWNvbG9yKQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3A7Ci0gICAg
ZGVjb2RlciA+PiBvcDsKLSAgICBpZiAoIW9wKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVy
ID4+IGJsZW5kTW9kZTsKLSAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUg
fX07Ci19Ci0KIGNsYXNzIEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIEZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCisgICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgOiBtX3JlY3QocmVjdCkK
ICAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9k
ZSkKICAgICB7CiAgICAgfQogCiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwpA
QCAtMTcwOSw3ICsxMTYwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRS
ZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9k
ZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xNzE3LDcgKzExNjcsNiBAQCB2
b2lkIEZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAg
ICAgZW5jb2RlciA8PCBtX3JlY3Q7CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAgIGVuY29k
ZXIgPDwgbV9ibGVuZE1vZGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0xNzMz
LDEyICsxMTgyLDcgQEAgc3RkOjpvcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IEZpbGxSb3VuZGVk
UmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVu
ZE1vZGU7Ci0gICAgZGVjb2RlciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xv
ciwgKmJsZW5kTW9kZSB9fTsKKyAgICByZXR1cm4geyB7ICpyZWN0LCAqY29sb3IgfSB9OwogfQog
CiBjbGFzcyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSB7CkBAIC0xOTYxLDcgKzE0MDUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgUGFp
bnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bik7CisgICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRl
bnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CkBAIC0y
MjU2LDEzICsxNzAwLDExIEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAog
ICAgIDwgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcgogICAgICwgQmVnaW5UcmFuc3BhcmVuY3lMYXll
cgogICAgICwgQ2xlYXJSZWN0Ci0gICAgLCBDbGVhclNoYWRvdwogICAgICwgQ2xpcAogICAgICwg
Q2xpcE91dAogICAgICwgQ2xpcE91dFRvUGF0aAogICAgICwgQ2xpcFBhdGgKICAgICAsIENsaXBU
b0ltYWdlQnVmZmVyCi0gICAgLCBDb25jYXRlbmF0ZUNUTQogICAgICwgRHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcgogICAgICwgRHJhd0VsbGlwc2UKICAgICAsIERyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyCkBAIC0yMjc4LDcgKzE3MjAsNiBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZh
cmlhbnQKICAgICAsIERyYXdSZWN0CiAgICAgLCBEcmF3U3lzdGVtSW1hZ2UKICAgICAsIEVuZFRy
YW5zcGFyZW5jeUxheWVyCi0gICAgLCBGaWxsQ29tcG9zaXRlZFJlY3QKICAgICAsIEZpbGxFbGxp
cHNlCiAgICAgLCBGaWxsUGF0aAogICAgICwgRmlsbFJlY3QKQEAgLTIyODgsMjMgKzE3MjksMTUg
QEAgdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgLCBGaWxsUm91bmRl
ZFJlY3QKICAgICAsIEZsdXNoQ29udGV4dAogICAgICwgUmVzdG9yZQotICAgICwgUm90YXRlCiAg
ICAgLCBTYXZlCi0gICAgLCBTY2FsZQotICAgICwgU2V0Q1RNCiAgICAgLCBTZXRJbmxpbmVGaWxs
Q29sb3IKICAgICAsIFNldElubGluZVN0cm9rZUNvbG9yCi0gICAgLCBTZXRMaW5lQ2FwCi0gICAg
LCBTZXRMaW5lRGFzaAotICAgICwgU2V0TGluZUpvaW4KLSAgICAsIFNldE1pdGVyTGltaXQKICAg
ICAsIFNldFN0YXRlCiAgICAgLCBTZXRTdHJva2VUaGlja25lc3MKICAgICAsIFN0cm9rZUVsbGlw
c2UKICAgICAsIFN0cm9rZUxpbmUKICAgICAsIFN0cm9rZVBhdGgKICAgICAsIFN0cm9rZVJlY3QK
LSAgICAsIFRyYW5zbGF0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgLCBG
aWxsTGluZQpAQCAtMjM0MSwyMCArMTc3NCwxMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNh
dmUsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlLAotICAgIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlLAotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2NhbGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRD
VE0sCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvciwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNz
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGUsCi0gICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwLAotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZURhc2gsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbiwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldE1pdGVyTGltaXQsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpDbGVhclNoYWRvdywKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXAs
CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0LAogICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC0yMzc2LDcg
KzE3OTksNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdy
YWRpZW50LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0
ZWRSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRS
ZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUsCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggZWVlNDQ3MWQzNTRlNzUxNTMxMjUxODlkZmNj
OTQxOGEzOTQ1MTRhMS4uYTUzNTA5OTgwYTkzMTQwN2U5MWU1NGY5ZjkyMzI1Y2U1ZTVkMDVkYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNDIsMzUwICs0
MiwxODkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAK
LVJlY29yZGVyOjpSZWNvcmRlcihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlh
bENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1
Y3REcmF3R2x5cGhzKQotICAgIDogbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3Ry
dWN0RHJhd0dseXBocykKLXsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUsIGluaXRp
YWxDVE0sIGluaXRpYWxDVE0ubWFwUmVjdChpbml0aWFsQ2xpcCkgfSk7Ci19CitSZWNvcmRlcjo6
UmVjb3JkZXIoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBo
cyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENs
aXAsIHsgfSwgIGluaXRpYWxDVE0pCisgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywg
ZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogCi1SZWNvcmRlcjo6flJlY29yZGVyKCkKIHsKLSAgICBB
U1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5k
aWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgogfQogCi1zdGF0aWMgYm9vbCBjb250YWlu
c09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
IGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZs
YWdzKQotewotICAgIHN0YXRpYyBjb25zdGV4cHIgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgaW5saW5lU3RhdGVDaGFuZ2VGbGFncyB7Ci0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSwKLSAgICB9OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFu
Z2VGbGFncyAmIGlubGluZVN0YXRlQ2hhbmdlRmxhZ3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFz
U1JHQkFCeXRlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7CitSZWNvcmRlcjo6flJlY29yZGVy
KCkgPSBkZWZhdWx0OwogCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9y
LnRyeUdldEFzU1JHQkFCeXRlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKK3ZvaWQgUmVjb3JkZXI6OnNhdmUoKQog
ewotICAgIGlmICghY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNoYW5nZXMsIGNoYW5n
ZUZsYWdzKSkgewotICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gY2hhbmdlcy5tX3N0YXRlLnN0
cm9rZVBhdHRlcm4pCi0gICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxl
SW1hZ2UoKSk7Ci0gICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuZmls
bFBhdHRlcm4pCi0gICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1h
Z2UoKSk7Ci0gICAgICAgIHJlY29yZFNldFN0YXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxh
Z3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIHJl
Y29yZFNldElubGluZVN0cm9rZUNvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5
R2V0QXNTUkdCQUJ5dGVzKCkpOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICByZWNvcmRT
ZXRTdHJva2VUaGlja25lc3MoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAg
ICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xv
ckNoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldElubGluZUZpbGxDb2xvcigqY2hhbmdlcy5tX3N0
YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpzYXZlKCk7CisgICAgcmVjb3JkU2F2ZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjphcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpCit2b2lkIFJlY29yZGVyOjpyZXN0b3JlKCkKIHsK
LSAgICAvLyBGSVhNRTogVGhpcyBpcyBjdXJyZW50bHkgaW52b2tlZCBpbiBhbiBhZC1ob2MgbWFu
bmVyIHdoZW4gcmVjb3JkaW5nIGRyYXdpbmcgaXRlbXMuIFdlIHNob3VsZCBjb25zaWRlciBlaXRo
ZXIKLSAgICAvLyBzcGxpdHRpbmcgR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5nZXMgaW50byBp
bmRpdmlkdWFsIGRpc3BsYXkgbGlzdCBpdGVtcywgb3IgcmVmYWN0b3JpbmcgdGhlIGNvZGUgc3Vj
aCB0aGF0Ci0gICAgLy8gdGhpcyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBpbnZva2VkIHdoZW4g
cmVjb3JkaW5nIGEgZHJhd2luZyBpdGVtLgotICAgIGF1dG8mIHN0YXRlQ2hhbmdlcyA9IGN1cnJl
bnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOwotICAgIGF1dG8gY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBz
dGF0ZUNoYW5nZXMuY2hhbmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0
YXRlKTsKLSAgICBpZiAoIWNoYW5nZXNGcm9tTGFzdFN0YXRlKQorICAgIGlmICghc3RhY2tTaXpl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMs
IHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkp
OwotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShzdGF0ZUNoYW5nZXMsIGNoYW5nZXNGcm9tTGFz
dFN0YXRlKTsKLSAgICBzdGF0ZUNoYW5nZXMubV9jaGFuZ2VGbGFncyA9IHsgfTsKLSAgICBjdXJy
ZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlID0gc3RhdGVDaGFuZ2VzLm1fc3RhdGU7Ci19Ci0K
LWNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBSZWNvcmRlcjo6c3RhdGUoKSBjb25zdAotewot
ICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5tX3N0YXRlOwotfQotCi12b2lk
IFJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAg
IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKLX0K
LQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgcmVj
b3JkU2V0TGluZUNhcChsaW5lQ2FwKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgcmVj
b3JkU2V0TGluZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgcmVjb3JkU2V0TGluZUpv
aW4obGluZUpvaW4pOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1p
dGVyTGltaXQpCi17Ci0gICAgcmVjb3JkU2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICBH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKKyAgICByZWNvcmRSZXN0b3JlKCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBG
aWx0ZXJSZXN1bHRzJiByZXN1bHRzKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMo
KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBmb3Ig
KGF1dG8mIGVmZmVjdCA6IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVJbWFnZSkpIHsKLSAgICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVm
ZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3Vy
Y2VJbWFnZSgpKSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFzb3Vy
Y2VJbWFnZSkgewotICAgICAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihudWxscHRy
LCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoKnNv
dXJjZUltYWdlKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQogCi12b2lkIFJlY29y
ZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQotewotICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9u
dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2Rl
KTsKLX0KKyAgICBpZiAoc3RhdGUoKS5oYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpKSB7CisgICAg
ICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpGaWxsQnJ1c2gpKQorICAgICAgICAgICAgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9y
KCpmaWxsQ29sb3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CiAKLXZvaWQgUmVjb3JkZXI6OmRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7Ci0gICAg
cmVjb3JkRHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNo
b3IsIHNtb290aGluZ01vZGUpOwotfQorICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKQorICAgICAg
ICAgICAgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoKnN0cm9rZUNvbG9yKCkudHJ5R2V0QXNT
UkdCQUJ5dGVzKCkpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIGlmIChzdGF0ZSgp
LmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VU
aGlja25lc3MpKQorICAgICAgICAgICAgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRo
aWNrbmVzcygpKTsKIAotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZWNvcmREcmF3SW1hZ2VCdWZmZXIo
aW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNv
cmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShp
bWFnZSk7Ci0gICAgcmVjb3JkRHJhd05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0K
LQotdm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgcmVjb3JkRHJhd1N5
c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29y
ZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVz
ZShpbWFnZSk7Ci0gICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VC
dWZmZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VCdWZm
ZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCkpIHsKKyAgICAg
ICAgaWYgKGF1dG8gcGF0dGVybiA9IGZpbGxQYXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRS
ZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7CiAgICAgfQogCi0gICAgcmVjb3JkRHJh
d1BhdHRlcm4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RS
ZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwotfQotCi12b2lkIFJlY29yZGVyOjpzYXZlKCkKLXsKLSAgICByZWNvcmRTYXZlKCk7Ci0gICAg
bV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsK
LX0KLQotdm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKCFtX3N0YXRlU3RhY2su
c2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkgeworICAgICAg
ICBpZiAoYXV0byBwYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpKQorICAgICAgICAgICAgcmVjb3Jk
UmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOworICAgIH0KIAotICAgIG1fc3RhdGVT
dGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgcmVjb3JkUmVzdG9yZSgpOworICAgIHJlY29yZFNldFN0
YXRlKHN0YXRlKCkpOworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIGN1cnJlbnRTdGF0ZSgp
LnRyYW5zbGF0ZSh4LCB5KTsKLSAgICByZWNvcmRUcmFuc2xhdGUoeCwgeSk7Ci19Ci0KLXZvaWQg
UmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyNpZiBVU0UoQ0cpCit2b2lk
IFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnJv
dGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgcmVjb3JkUm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigp
OwogfQogCi12b2lkIFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lk
IFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5zY2Fs
ZShzaXplKTsKLSAgICByZWNvcmRTY2FsZShzaXplKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKIH0KKyNlbmRpZgogCi12b2lkIFJlY29y
ZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIFJl
Y29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQog
ewotICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm47CisgICAg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKIAotICAgIGN1cnJlbnRTdGF0ZSgpLmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29y
ZENvbmNhdGVuYXRlQ1RNKHRyYW5zZm9ybSk7CisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0
aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVu
dHMuCisgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAgICBy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9p
ZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAg
IGN1cnJlbnRTdGF0ZSgpLnNldENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29yZFNldENUTSh0cmFu
c2Zvcm0pOwotfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKLUFmZmluZVRyYW5zZm9ybSBS
ZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07Ci19CisgICAgR3JhcGhpY3NDb250
ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIEdyYXBoaWNzQ29udGV4
dDo6c2F2ZSgpOwogCi12b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAg
ICBzZXRBbHBoYShvcGFjaXR5KTsKICAgICByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpOwotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9u
ZUZvclRyYW5zcGFyZW5jeUxheWVyKCkpOwogfQogCiB2b2lkIFJlY29yZGVyOjplbmRUcmFuc3Bh
cmVuY3lMYXllcigpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsK
LSAgICByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIG1fc3RhdGVTdGFjay5yZW1v
dmVMYXN0KCk7Ci19CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotdm9pZCBSZWNvcmRlcjo6
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3
UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdM
aW5lKHBvaW50MSwgcG9pbnQyKTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKLXZvaWQgUmVj
b3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChGbG9hdFBvaW50KCksIHRvRmxv
YXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7
CisgICAgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAg
ICByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAgICBy
ZWNvcmRDbGlwKHJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZERyYXdFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7Cisg
ICAgcmVjb3JkQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLSAgICByZWNvcmREcmF3UGF0aChwYXRoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJlY29yZENsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0Zv
Y3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNv
cmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6
OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZz
ZXQsIGNvbG9yKTsKLX0KKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkg
eworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0jaWYgUExBVEZP
Uk0oTUFDKQotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91Ymxl
LCBib29sJiwgY29uc3QgQ29sb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ciwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKK3Zv
aWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsZWFy
UmVjdChyZWN0KTsKIH0KLSNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0KHJlY3QpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3Io
cmVjdCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmls
bFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVyOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29yZGVyOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkRmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xv
cik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2
b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAg
cmVjb3JkRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwg
cm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShy
ZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJlY29yZEZpbGxFbGxpcHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHBhdGgu
aGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQwMiwyMSArMjQxLDIxIEBAIHZvaWQgUmVj
b3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkRmlsbFBhdGgocGF0
aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKTsKLSAgICByZWNvcmRGaWxsRWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZFN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkU3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkU3Ryb2tlRWxsaXBzZShyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ry
b2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYg
KHBhdGguaGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQzMywxNDggKzI3MiwxNjggQEAg
dm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHJlY29yZFN0
cm9rZVBhdGgocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3QpOworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tu
ZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQ2xlYXJSZWN0KHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwogfQogCi0jaWYgVVNF
KENHKQotdm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0VsbGlwc2UocmVjdCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOwotICAgIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIHJlY29yZERyYXdQYXRoKHBhdGgpOwogfQotI2VuZGlmCiAKLXZvaWQg
UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRl
cnNlY3QoY3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocmVjdCkpOwotICAgIHJlY29yZENsaXAo
cmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rm9jdXNSaW5n
UGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNs
aXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICByZWNvcmRDbGlwT3V0KHJlY3QpOworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3Rz
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29u
c3QgUGF0aCYgcGF0aCkKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAg
cmVjb3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12
b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVs
ZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xp
cEJvdW5kcy5pbnRlcnNlY3QoY3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocGF0aC5mYXN0Qm91
bmRpbmdSZWN0KCkpKTsKLSAgICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KKyNlbmRpZgogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91
bmRzKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYg
KGF1dG8gaW52ZXJzZSA9IGN1cnJlbnRTdGF0ZSgpLmN0bS5pbnZlcnNlKCkpCi0gICAgICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KGludmVyc2UtPm1hcFJlY3QoY3VycmVudFN0YXRlKCkuY2xp
cEJvdW5kcykpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAv
LyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlY3Qu
Ci0gICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9ybSBi
ZWhhdmlvci4KLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUoKS5jbGlw
Qm91bmRzKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdJbWFnZUJ1
ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lk
IFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKIHsKLSAg
ICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcik7Ci0gICAgcmVjb3JkQ2xpcFRvSW1hZ2VC
dWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0KTsKLX0KKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6
IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkpIHsKKyAg
ICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQoKSk7Cisg
ICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3VyY2VJbWFnZSgpKSkgewor
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3Vy
Y2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFJlY29yZGVy
OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVy
aW5nTWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QudmFsdWVfb3IoUmVuZGVyaW5nTWV0
aG9kOjpEaXNwbGF5TGlzdCkpOwotfQorICAgIGlmICghc291cmNlSW1hZ2UpIHsKKyAgICAgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIobnVsbHB0ciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1l
ZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17
Ci0gICAgaWYgKCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGlmICghcmVj
b3JkUmVzb3VyY2VVc2UoKnNvdXJjZUltYWdlKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZp
bHRlciwgcmVzdWx0cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQVNTRVJUKHBsYXll
ci5pZGVudGlmaWVyKCkpOwotICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRl
c3RpbmF0aW9uKTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsK
IH0KLSNlbmRpZgogCi12b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yKQordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgLy8gV2UgbW9kaWZ5IHRoZSBzdGF0ZSBkaXJlY3Rs
eSBoZXJlIGluc3RlYWQgb2YgY2FsbGluZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKCkKLSAgICAv
LyBiZWNhdXNlIHRoZSByZWNvcmRlZCBpdGVtIHdpbGwgc2NhbGUoKSB3aGVuIHJlcGxheWVkLgot
ICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHsgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxl
RmFjdG9yIH0pOworICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIHJlY29yZERyYXdOYXRpdmVJbWFnZShpbWFnZS5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
Cit9CiAKLSAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxs
IGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KLSAgICAvLyBBc3NlcnQgdGhh
dCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPwotICAgIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwordm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdl
KFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpCit7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3U3lzdGVtSW1h
Z2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBSZWNvcmRl
cjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29u
dGV4dDo6Um91bmRpbmdNb2RlKQordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250
ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlz
cGxheUxpc3Q6OlJlY29yZGVyLiIpOwotICAgIHJldHVybiByZWN0OworICAgIHJlY29yZFJlc291
cmNlVXNlKGltYWdlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQ
YXR0ZXJuKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAot
Y29uc3QgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpIGNv
bnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJl
dHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1h
Z2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VC
dWZmZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLVJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJl
Y29yZGVyOjpjdXJyZW50U3RhdGUoKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVjb3JkZXI6
OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKQogewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKLSAgICBy
ZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkp
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBk
ZXN0aW5hdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigp
LCBkZXN0aW5hdGlvbik7CiB9CisjZW5kaWYKIAotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZWNv
cmRlcjo6Y3RtKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgcmV0dXJu
IGN1cnJlbnRTdGF0ZSgpLmN0bTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fZHJh
d0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29u
dGV4dFN0YXRlOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCiB7Ci0gICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICByZWNvcmRS
ZXNvdXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZWNvcmREcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50
LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRl
eHRTdGF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBSZWNvcmRlcjo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
U3Ryb2tlU3R5bGUpCiB7Ci0gICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzID0gcmFkMmRlZyhzdGF0
aWNfY2FzdDxkb3VibGU+KGFuZ2xlSW5SYWRpYW5zKSk7Ci0gICAgY3RtLnJvdGF0ZShhbmdsZUlu
RGVncmVlcyk7Ci0gICAgCi0gICAgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uOwotICAgIHJvdGF0
aW9uLnJvdGF0ZShhbmdsZUluRGVncmVlcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICByZWNvcmREcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRp
bmcsIGRvdWJsZUxpbmVzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzY2Fs
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCiB7Ci0gICAgY3RtLnNjYWxlKHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbWF0cml4KQorUmVmUHRyPEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
b2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVy
aW5nTWV0aG9kKSBjb25zdAogewotICAgIGN0bSA9IG1hdHJpeDsKKyAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdN
ZXRob2Q6OkRpc3BsYXlMaXN0KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorRmxvYXRSZWN0IFJlY29y
ZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3ND
b250ZXh0OjpSb3VuZGluZ01vZGUpCiB7Ci0gICAgY3RtICo9IG1hdHJpeDsKKyAgICBXVEZMb2dB
bHdheXMoIkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5vdCB5ZXQg
Y29tcGF0aWJsZSB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKKyAgICByZXR1cm4gcmVj
dDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCmluZGV4IDg0NWVjMDA3NzJlZDJjNTRhMWU2Y2IyNmIyMTUxZGFiYWE2
ZWMwNzUuLmFlMzQzNzliZTY3ZjA1ZTEwNDJmNmFkYzVhYWJmODhjMjcwYzE3MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1
ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKICNpbmNsdWRlICJEcmF3R2x5cGhzUmVjb3JkZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3Ig
SW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIklubGluZVBhdGhEYXRhLmgiCiAjaW5jbHVkZSAi
VGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MSw3ICs1MCw3
IEBAIGNsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwog
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5
cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWNvcmRlcihjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3
R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOwpAQCAtNjEsNDcgKzYwLDM1IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2F2ZSgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkUmVzdG9yZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkUm90YXRlKGZsb2F0IGFuZ2xlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ29uY2F0
ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworCiAgICAgdmlydHVhbCB2b2lk
IHJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRT
ZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gMDsKKworI2lmIFVTRShDRykK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworI2VuZGlmCisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKKwogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb25SZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBP
dXRUb1BhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIEZpbHRlciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3U3lz
dGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxv
YXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1Jl
Y3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAw
OworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0
V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbExpbmUo
Y29uc3QgTGluZURhdGEmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxBcmMoY29u
c3QgQXJjRGF0YSYpID0gMDsKQEAgLTEwOSwxMSArOTYsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikg
PSAwOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24p
ID0gMDsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tl
TGluZShjb25zdCBMaW5lRGF0YSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tl
QXJjKGNvbnN0IEFyY0RhdGEmKSA9IDA7CkBAIC0xMjEsMTE2ICsxMDcsODEgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJD
dXJ2ZURhdGEmKSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZEFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBw
bHlGaWxsUGF0dGVybigpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXRo
KGNvbnN0IFBhdGgmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmlu
Z1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyNpZiBFTkFC
TEUoVklERU8pCisgICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0gMDsKICNl
bmRpZgotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlJikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291
cmNlVXNlKE5hdGl2ZUltYWdlJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJj
ZVVzZShJbWFnZUJ1ZmZlciYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VV
c2UoY29uc3QgU291cmNlSW1hZ2UmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291
cmNlVXNlKEZvbnQmKSA9IDA7CiAKLSAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKLSAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIGN0bTsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHM7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZSBsYXN0RHJhd2luZ1N0YXRlOwotCi0gICAgICAgIENvbnRleHRTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsaXApCi0gICAgICAgICAgICA6IGN0bSh0
cmFuc2Zvcm0pCi0gICAgICAgICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKLSAgICAgICAgICAgICwg
bGFzdERyYXdpbmdTdGF0ZShzdGF0ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
Q29udGV4dFN0YXRlIGNsb25lRm9yU2F2ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IENvbnRleHRTdGF0ZSBzdGF0ZShsYXN0RHJhd2luZ1N0YXRlLCBjdG0sIGNsaXBCb3VuZHMpOwot
ICAgICAgICAgICAgc3RhdGUuc3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKLSAgICAgICAgICAg
IHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZv
clRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBz
dGF0ZSA9IGNsb25lRm9yU2F2ZSgpOwotICAgICAgICAgICAgc3RhdGUubGFzdERyYXdpbmdTdGF0
ZS5hbHBoYSA9IDE7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9pZCByb3Rh
dGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOwotICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpOwotICAgICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsK
LSAgICAgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgfTsKLQot
ICAgIGNvbnN0IFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+JiBzdGF0ZVN0YWNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZVN0YWNrOyB9Ci0KLSAgICBjb25zdCBDb250ZXh0U3RhdGUmIGN1cnJlbnRT
dGF0ZSgpIGNvbnN0OwotICAgIENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCk7Ci0KICAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNZXRob2Q+KSBjb25zdCBvdmVycmlkZTsKKyAgICAKKworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7CiAKIHByaXZhdGU6CiAgICAg
Ym9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBudWxscHRyOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQot
ICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlz
Q0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQg
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxl
ID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNs
aXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1p
dGVyTGltaXQoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNp
ZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsK
LSNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwg
Rm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ds
eXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50
JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3lzdGVtSW1h
Z2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxl
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7CiAKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwpAQCAtMjQxLDQwICsxOTIsMjMgQEAgcHJpdmF0
ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENv
bG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIGdldENUTShH
cmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmlj
ZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOwogI2lmIEVOQUJMRShWSURFTykKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0Jiwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250
ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOwotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLQot
ICAgIFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+IG1fc3RhdGVTdGFjazsKICAgICBEcmF3R2x5cGhz
UmVjb3JkZXIgbV9kcmF3R2x5cGhzUmVjb3JkZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAppbmRleCAxZmRjNmJhNTZiZmRiMjYzNmVmYjM0
NjJhZGEyYTk5MGQzMzg5OTQ1Li4xZmI0ZGQ3OTVhZTEwYWE4Y2NjYmNkZDgzMTRlZWE4MDg2ZThk
YjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAK
QEAgLTQyLDE4ICs0MiwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKIAotUmVjb3JkZXJJbXBsOjpSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0ds
eXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhz
KQotICAgIDogUmVjb3JkZXIoc3RhdGUsIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0
cnVjdERyYXdHbHlwaHMpCitSZWNvcmRlckltcGw6OlJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdH
bHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDogUmVjb3JkZXIoaW5pdGlhbENsaXAs
IGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGlzcGxheUxpc3Qo
ZGlzcGxheUxpc3QpCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFt
IDw8ICJcblJlY29yZGluZyB3aXRoIGNsaXAgIiA8PCBpbml0aWFsQ2xpcCk7CiB9CiAKLVJlY29y
ZGVySW1wbDo6flJlY29yZGVySW1wbCgpCi17Ci0gICAgQVNTRVJUKHN0YXRlU3RhY2soKS5zaXpl
KCkgPT0gMSk7IC8vIElmIHRoaXMgZmlyZXMsIGl0IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUv
cmVzdG9yZS4KLX0KLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNhdmUoKQogewogICAgIGFw
cGVuZDxTYXZlPigpOwpAQCAtNjQsMzEgKzU5LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZFJlc3RvcmUoKQogICAgIGFwcGVuZDxSZXN0b3JlPigpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgYXBwZW5kPFRyYW5z
bGF0ZT4oeCwgeSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRSb3RhdGUoZmxvYXQg
YW5nbGUpCi17Ci0gICAgYXBwZW5kPFJvdGF0ZT4oYW5nbGUpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBhcHBlbmQ8
U2NhbGU+KHNjYWxlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBhcHBlbmQ8U2V0Q1RNPih0cmFu
c2Zvcm0pOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgYXBwZW5kPENvbmNhdGVuYXRl
Q1RNPih0cmFuc2Zvcm0pOwotfQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0SW5saW5l
RmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGlubGluZUNvbG9yKQogewogICAgIGFwcGVuZDxTZXRJ
bmxpbmVGaWxsQ29sb3I+KGlubGluZUNvbG9yKTsKQEAgLTEwNCw5MiArNzQsMjYgQEAgdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAg
ICAgYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4odGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17
Ci0gICAgYXBwZW5kPFNldFN0YXRlPihzdGF0ZSwgY2hhbmdlRmxhZ3MpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgYXBw
ZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBhcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLXsK
LSAgICBhcHBlbmQ8U2V0TGluZURhc2g+KGFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0gICAgYXBw
ZW5kPFNldExpbmVKb2luPihqb2luKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNl
dE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgYXBwZW5kPFNldE1pdGVyTGltaXQ+KGxp
bWl0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyU2hhZG93KCkKLXsKLSAg
ICBhcHBlbmQ8Q2xlYXJTaGFkb3c+KCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRD
bGlwKGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXA+KGNsaXBS
ZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiBjbGlwUmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgYXBwZW5kPENsaXBPdXQ+KGNsaXBS
ZWN0KTsKKyAgICBhcHBlbmQ8U2V0U3RhdGU+KHN0YXRlKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXBUb0ltYWdl
QnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGlu
YXRpb25SZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0aCk7Ci19
Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBX
aW5kUnVsZSBydWxlKQotewotICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0
ZXImIGZpbHRlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcj4gaWRlbnRpZmllcjsKLSAgICBpZiAoc291cmNlSW1hZ2UpCi0gICAgICAgIGlkZW50aWZp
ZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7Ci0gICAgYXBw
ZW5kPERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJ
bWFnZVJlY3QsIGZpbHRlcik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewotICAgIGFw
cGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNo
b3IsIG1vZGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3TmF0
aXZlSW1hZ2U+KGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CisgICAgYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKIH0KIAotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3U3lzdGVtSW1hZ2U+
KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0
ZXJuPigpOwogfQorI2VuZGlmIC8vIFVTRShDRykKIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlRmFjdG9yKQogewotICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2VJZGVudGlm
aWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihzY2FsZUZhY3Rvcik7CiB9
CiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCkBAIC0yMDIsNDQgKzEwNiwzNCBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4o
KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwg
bGluZVdpZHRoKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFw
cGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBh
cHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOworICAgIGFwcGVuZDxDbGlwPihj
bGlwUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUmIHN0eWxlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCiB7Ci0gICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKKyAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBhdGgsIHJ1bGUp
OwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOworICAgIGFw
cGVuZDxDbGlwT3V0PihjbGlwUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBP
dXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgp
OworICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0
aD4ocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1
ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0
aW9uUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVj
dHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1Jl
Y3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGVhclJlY3Q+
KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQpAQCAtMjU3LDIzICsxNTEsMjIgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGcKICAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KHJlY3QsIGdyYWRpZW50KTsKIH0K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJs
ZW5kTW9kZSBtb2RlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
YXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBtb2RlKTsKKyAgICBh
cHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29sb3IsIG1vZGUpOworICAgIGFwcGVu
ZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKTsKIH0K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPihyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpOworICAgIGFwcGVuZDxGaWxsRWxsaXBzZT4o
cmVjdCk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVu
ZDxGaWxsTGluZT4obGluZSk7CkBAIC0yOTMsNyArMTg2LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewog
ICAgIGFwcGVuZDxGaWxsQmV6aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKQEAgLTMwMSwyNSArMTkzLDE3IEBAIHZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxGaWxsUGF0aD4o
cGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKLX0KLQot
I2lmIEVOQUJMRShWSURFTykKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
K3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVk
aWE+KHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBi
b3JkZXJUaGlja25lc3MpOwogfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3
aWR0aCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgd2lkdGgpOworICAg
IGFwcGVuZDxTdHJva2VFbGxpcHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5l
RGF0YSYgbGluZSkKIHsKICAgICBhcHBlbmQ8U3Ryb2tlTGluZT4obGluZSk7CkBAIC0zMzksNyAr
MjIzLDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0
IEJlemllckN1cnZlRGF0YSYgY3VydmUpCiB7CiAgICAgYXBwZW5kPFN0cm9rZUJlemllckN1cnZl
PihjdXJ2ZSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM0
NywzMyArMjMwLDg0IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgYXBwZW5kPFN0cm9rZVBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3Qp
OworICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kPENsZWFyUmVjdD4ocmVj
dCk7CisgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0Uo
Q0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7Cit9CiAKLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kPEFwcGx5U3Ry
b2tlUGF0dGVybj4oKTsKKyAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOwogfQogCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxBcHBseUZpbGxQ
YXR0ZXJuPigpOworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9m
ZnNldCwgY29sb3IpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBh
cHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwor
fQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
YXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKKyAgICBhcHBlbmQ8
RHJhd05hdGl2ZUltYWdlPihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCit7CisgICAgYXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRl
c3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQoreworICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9
CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBG
aWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50
aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAg
YXBwZW5kPERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3Vy
Y2VJbWFnZVJlY3QsIGZpbHRlcik7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0
aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBF
TkFCTEUoVklERU8pCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQoreworICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KGlkZW50aWZpZXIsIGRl
c3RpbmF0aW9uKTsKK30KKyNlbmRpZgorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBh
cHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5j
aG9yLCBtb2RlKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgYXBw
ZW5kPERyYXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKK30KKwordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgYXBw
ZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKIH0KIAogYm9vbCBS
ZWNvcmRlckltcGw6OnJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSkK
QEAgLTQxNywyMCArMzUxLDE2IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdF
eHRlbnQoZmxvYXQgYmx1clJhZGl1cykKIAogRmxvYXRSZWN0IFJlY29yZGVySW1wbDo6ZXh0ZW50
RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBGbG9h
dFJlY3QgYm91bmRzID0gcmVjdDsKLSAgICBhdXRvJiBzdGF0ZSA9IGN1cnJlbnRTdGF0ZSgpOwor
ICAgIGF1dG8gYm91bmRzID0gcmVjdDsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0g
ICAgZmxvYXQgc2hhZG93UmFkaXVzOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGlmIChn
ZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgewotICAg
ICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50ID0gYm91bmRzOwotICAgICAgICBzaGFkb3dFeHRl
bnQubW92ZShzaGFkb3dPZmZzZXQpOwotICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFk
b3dQYWludGluZ0V4dGVudChzaGFkb3dSYWRpdXMpKTsKKyAgICBpZiAoaGFzU2hhZG93KCkpIHsK
KyAgICAgICAgYXV0byBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CisgICAgICAgIHNoYWRvd0V4dGVu
dC5tb3ZlKGRyb3BTaGFkb3coKS5vZmZzZXQpOworICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0
ZShzaGFkb3dQYWludGluZ0V4dGVudChkcm9wU2hhZG93KCkuYmx1clJhZGl1cykpOwogICAgICAg
ICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKICAgICB9CiAKLSAgICByZXR1cm4gaW50ZXJz
ZWN0aW9uKHN0YXRlLmNsaXBCb3VuZHMsIHN0YXRlLmN0bS5tYXBSZWN0KGJvdW5kcykpOworICAg
IHJldHVybiBpbnRlcnNlY3Rpb24oY2xpcEJvdW5kcygpLCBnZXRDVE0oKS5tYXBSZWN0KGJvdW5k
cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAppbmRleCA2NDIyNjVmMDk4MDIyY2YyYjA1ZjE4MGMx
NzRmYTAzNDYyZjJkZDQwLi42ZGU2YWVkZmZjYjE3ZGIyZDA4MWI0MmMxZGU2YmMzMjlhMzhiZjQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaApAQCAtMzUs
OSArMzUsOCBAQCBjbGFzcyBSZWNvcmRlckltcGwgOiBwdWJsaWMgUmVjb3JkZXIgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVy
SW1wbCk7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlM
aXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5
cGhzOjpZZXMpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVySW1wbCgpOwot
CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0g
eyB9LCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlw
aHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIAogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKICAg
ICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBmaW5hbCB7IH0KQEAgLTQ3LDQ3ICs0Niwz
NSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkU2F2ZSgpIGZpbmFsOwogICAg
IHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZs
b2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xl
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7
CisKICAgICB2b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgZmlu
YWw7CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90Pikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRTZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRTZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxp
bWl0KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7Cisg
ICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGZpbmFs
OworCisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmlu
YWw7CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKwor
ICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAg
dm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9pZCByZWNv
cmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKICAg
ICB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJu
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3Qg
RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0
IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2
b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0
V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVu
ZE1vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
IHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZEZpbGxBcmMoY29uc3QgQXJjRGF0YSYpIGZpbmFsOwpAQCAtOTUsMTEgKzgyLDEwIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVE
YXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotI2Vu
ZGlmCi0gICAgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBm
aW5hbDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZv
aWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEmKSBmaW5hbDsKQEAgLTEwNywxMyArOTMs
MjggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJl
emllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRTdHJva2VQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0
ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisK
KyAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZERyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHJlY29yZERyYXdG
b2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgZmlu
YWw7CisgICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lk
IHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQ
YWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRT
bW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwogCiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShO
YXRpdmVJbWFnZSYpIGZpbmFsOwogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1hZ2VCdWZm
ZXImKSBmaW5hbDsKQEAgLTEzOSw2ICsxNDAsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
fQogCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsK
KwogICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0Jikg
Y29uc3Q7CiAKICAgICBEaXNwbGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAppbmRleCA4ZmYxOWQwMDM1NGNkYmVkZTNhNWJhMWFm
NzU4Y2ZmMDIzYTI1YTIyLi42NmZjOWQ4ODJhNGQzZjdkZThlODkxMmExZjMwYWYxOThkMDM1Mjgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC05NywxMCAr
OTcsMTAgQEAgaW5saW5lIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcj4gYXBwbHlTZXRTdGF0ZUl0ZW0oR3JhcGgKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKICAgICB9OwogCi0gICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVy
blRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLnN0cm9rZVBhdHRl
cm4uZ2V0KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxl
SW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVybigpKSkKICAgICAg
ICAgcmV0dXJuICppbWFnZUlkZW50aWZpZXI7CiAKLSAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZp
ZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3Rh
dGUuZmlsbFBhdHRlcm4uZ2V0KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZp
eFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVy
bigpKSkKICAgICAgICAgcmV0dXJuICppbWFnZUlkZW50aWZpZXI7CiAKICAgICBzZXRTdGF0ZUl0
ZW0uYXBwbHkoY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJm
QnV6ei5jcHAKaW5kZXggZDA5YzEzNzNlYTlhYWFmNGExODUxMzZlZTg4NTNkNzg4ZmM0MTc4ZC4u
ZmNhZGVmMjM4ZTA5ZmUwMjgyYWNlZWM5YTFmMjVmODczMzlkOWM3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVy
SGFyZkJ1enouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtMjksMTcgKzI5LDE4IEBACiAj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNz
Q29udGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250
ZXh0KQotICAgIDogbV9vd25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBo
c1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVj
dERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25D
b250ZXh0KGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNt
b290aGluZ01vZGUpCiB7Ci0gICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7
CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8v
Tmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCmluZGV4IDkxMTQ2ZGZjNmZkODRkZjhl
Mjk1NGYwMzc3ZDAwNjZhNzcyMzNjYzkuLjUxNTQ3YWU2ZGZhMTA0YjVkZDY1NGE5MzBiOTcyNDFk
OTc3OGQwOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxNjAgKzc4LDM4OSBA
QCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9v
ZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2YQogfQogCiBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyKFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCi0g
ICAgOiBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KEZs
b2F0UmVjdDo6aW5maW5pdGVSZWN0KCkpCisgICAgLCBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0
KQogewotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7IH0sIHsgfSwgRmxvYXRSZWN0OjppbmZp
bml0ZVJlY3QoKSB9KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkaWRVcGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpzYXZlKCkKK3sKKyAgICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPD4geworICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBkZWZhdWx0Owor
CisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLnNhdmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTYXZl
PD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2F2ZT4oKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6cmVzdG9yZSgpCit7CisgICAgc3RydWN0IFJlc3RvcmUgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmlydHVhbCB+UmVz
dG9yZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5yZXN0b3JlKCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiUmVzdG9yZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAg
IGlmICghc3RhY2tTaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJlc3RvcmU+KCkpOworfQor
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
KSB7CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkNUTSkpIHsKKyAgICAgICAgc3RydWN0IFNldENUTSBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4geworICAgICAgICAg
ICAgdmlydHVhbCB+U2V0Q1RNKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1
dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6Q1RNPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8U2V0Q1RNPihnZXRDVE0oKSkpOworICAgIH0KKworICAgIGlmIChzdGF0
ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VUaGlja25lc3MpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VUaGlja25lc3NDaGFuZ2UgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewogICAgICAgICAg
ICAgdmlydHVhbCB+U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAg
ICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVy
cmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ry
b2tlVGhpY2tuZXNzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAg
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoY29udGV4dEZvclJl
cGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VUaGlja25lc3NDaGFuZ2U8Plxu
IjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczw+XG4iOwogICAgICAgICAgICAgfQogICAgICAgICB9
OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVRoaWNrbmVzc0NoYW5nZT4o
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0
cm9rZVRoaWNrbmVzc0NoYW5nZT4oc3Ryb2tlVGhpY2tuZXNzKCkpKTsKICAgICB9CiAKLSAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpIHsKKyAg
ICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlU3R5bGUpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VTdHlsZUNoYW5nZSBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFN0cm9rZVN0eWxlPiB7CiAg
ICAgICAgICAgICB2aXJ0dWFsIH5TdHJva2VTdHlsZUNoYW5nZSgpID0gZGVmYXVsdDsKIAogICAg
ICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dFN0cm9rZVN0eWxlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAg
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlN0cm9rZVN0eWxlPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0cm9rZVN0eWxlKCkpKTsK
KyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcCkpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVDYXAg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lQ2FwPiB7CisgICAg
ICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2
b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6TGluZUNhcDw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXAoKSkpOworICAgIH0K
KworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpMaW5lRGFzaCkpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVEYXNoIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFzaEFycmF5LCBmbG9hdD4gewor
ICAgICAgICAgICAgdmlydHVhbCB+U2V0TGluZURhc2goKSA9IGRlZmF1bHQ7CisKKyAgICAgICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVEYXNoKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoPD5cbiI7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZURhc2g+KGxp
bmVEYXNoKCkuZGFzaGVzLCBsaW5lRGFzaCgpLm9mZnNldCkpOworICAgIH0KKworICAgIGlmIChz
dGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpM
aW5lSm9pbikpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUpvaW4+IHsKKyAgICAgICAgICAgIHZpcnR1YWwg
flNldExpbmVKb2luKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVK
b2luPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKCkpKTsKKyAgICB9CisKKyAgICBpZiAo
c3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
TWl0ZXJMaW1pdCkpIHsKKyAgICAgICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICAgICAgdmlydHVh
bCB+U2V0TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVN0eWxlQ2hhbmdlPD5cbiI7CisgICAg
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpNaXRlckxpbWl0PD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0YXRlLnN0cm9rZVN0eWxl
KSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVyTGltaXQ+KG1pdGVyTGlt
aXQoKSkpOwogICAgIH0KIAotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpIHsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSkpIHsKICAg
ICAgICAgc3RydWN0IENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+IHsKICAg
ICAgICAgICAgIHZpcnR1YWwgfkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSgpID0gZGVmYXVsdDsK
IAogICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSwg
YXJnPDE+KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0
ZU1vZGU8PlxuIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U+KHN0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlPihjb21wb3NpdGVNb2RlKCkub3BlcmF0aW9uLCBjb21w
b3NpdGVNb2RlKCkuYmxlbmRNb2RlKSk7CiAgICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkgeworICAgIAorICAgIGlmIChz
dGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpT
aG91bGRBbnRpYWxpYXMpKSB7CiAgICAgICAgIHN0cnVjdCBTaG91bGRBbnRpYWxpYXNDaGFuZ2Ug
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxib29sPiB7CiAgICAgICAg
ICAgICB2aXJ0dWFsIH5TaG91bGRBbnRpYWxpYXNDaGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAg
ICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92
ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
aG91bGRBbnRpYWxpYXMoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAg
ICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNob3VsZEFudGlhbGlhc0NoYW5nZTw+
XG4iOworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzPD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH07CiAKLSAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2hvdWxkQW50aWFsaWFzQ2hhbmdl
PihzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
U2hvdWxkQW50aWFsaWFzQ2hhbmdlPihzaG91bGRBbnRpYWxpYXMoKSkpOwogICAgIH0KKworICAg
IGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQoreworICAgIHN0cnVjdCBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8ZmxvYXQ+IHsKKyAgICAgICAgdmlydHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigp
ID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworCisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNp
dHkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9w
YWNpdHkpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFuc3BhcmVu
Y3lMYXllcigpCit7CisgICAgc3RydWN0IEVuZFRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7CisgICAgICAgIHZpcnR1YWwgfkVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRW5kVHJhbnNw
YXJlbmN5TGF5ZXI8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIAorICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7Cit9
CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgc3RydWN0IENsaXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xpcCgpID0gZGVmYXVsdDsK
KworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVy
KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6Y2xpcChjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkNsaXA8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworCisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPENsaXA+KHJlY3QpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkK
K3sKKyAgICBzdHJ1Y3QgQ2xpcFBhdGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxQYXRoLCBXaW5kUnVsZT4geworICAgICAgICB2aXJ0dWFsIH5DbGlwUGF0aCgpID0g
ZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6Y2xpcFBh
dGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFBhdGg8PlxuIjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgR3JhcGhpY3ND
b250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8Q2xpcFBhdGg+KHBhdGgsIHdpbmRSdWxlKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHN0cnVjdCBT
ZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUNh
cD4gewotICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OworICAgIHN0cnVj
dCBDbGlwT3V0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRS
ZWN0PiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVDYXAoY29udGV4dEZvclJlcGxh
eShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiU2V0TGluZUNhcDw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJDbGlwT3V0PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U2V0TGluZUNhcD4obGluZUNhcCkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocmVjdCkpOwogfQogCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc3RydWN0IFNldExpbmVEYXNoIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFzaEFycmF5LCBmbG9hdD4gewotICAg
ICAgICB2aXJ0dWFsIH5TZXRMaW5lRGFzaCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgQ2xpcE91
dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGg+IHsKKyAgICAg
ICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2goY29udGV4dEZvclJlcGxheShyZXBsYXllciks
IGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIlNldExpbmVEYXNoPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkNsaXBPdXQ8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxTZXRMaW5lRGFzaD4oZGFzaGVzLCBkYXNoT2Zmc2V0KSk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwT3V0PihwYXRoKSk7
CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUpvaW4oTGluZUpvaW4g
bGluZUpvaW4pCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAg
c3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8TGluZUpvaW4+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7
CisgICAgc3RydWN0IENsaXBUb0ltYWdlQnVmZmVyIGZpbmFsOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgRmxvYXRSZWN0PiB7CisgICAg
ICAgIHZpcnR1YWwgfkNsaXBUb0ltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCkp
OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldExpbmVKb2luPD5c
biI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBUb0ltYWdlQnVmZmVyPD5cbiI7
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZUpv
aW4+KGxpbmVKb2luKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIGlmIChhdXRv
IG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSkpCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBUb0ltYWdlQnVmZmVyPihuYXRp
dmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCkpOwogfQogCi12b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBzdHJ1Y3QgU2V0TWl0ZXJMaW1pdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgflNldE1pdGVyTGltaXQoKSA9IGRl
ZmF1bHQ7CisgICAgc3RydWN0IENsZWFyUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGVhclJlY3QoKSA9
IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldE1p
dGVyTGltaXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAg
ICAgIENhaXJvOjpjbGVhclJlY3QoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigp
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRNaXRlckxpbWl0
PD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsZWFyUmVjdDw+XG4iOwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVyTGltaXQ+
KG1pdGVyTGltaXQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPENsZWFyUmVjdD4ocmVjdCkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI0OSw2ICs0NzksOCBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PEZpbGxSZWN0PihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKIH0KQEAgLTI2OSw2ICs1MDEsOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCkBAIC0yOTEsMzUgKzUyNSwxMiBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3Jh
ZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3Jt
KSkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBzdHJ1Y3QgRmlsbFJl
Y3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENv
bG9yLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUsIENv
bXBvc2l0ZU9wZXJhdG9yPiB7Ci0gICAgICAgIHZpcnR1YWwgfkZpbGxSZWN0KCkgPSBkZWZhdWx0
OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4
dCA9IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpOwotCi0gICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBhcmc8
Mz4oKSk7Ci0gICAgICAgICAgICBDYWlybzo6ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0LCBhcmc8
MD4oKSwgYXJnPDE+KCksIGFyZzw0PigpKTsKLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDU+KCksIEJsZW5kTW9kZTo6
Tm9ybWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJGaWxsUmVj
dDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PEZpbGxSZWN0PihyZWN0LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpKTsKKyAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3JhZGllbnQuY3JlYXRlUGF0dGVy
bigxLjAsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBzdHJ1Y3QgRmlsbFJv
dW5kZWRSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRS
b3VuZGVkUmVjdCwgQ29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIENhaXJvOjpT
aGFkb3dTdGF0ZT4gewogICAgICAgICB2aXJ0dWFsIH5GaWxsUm91bmRlZFJlY3QoKSA9IGRlZmF1
bHQ7CkBAIC0zMjgsNyArNTM5LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAg
ewogICAgICAgICAgICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dEZvclJlcGxheShy
ZXBsYXllcik7CiAKLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDI+KCksIGFyZzwzPigpKTsKKyAgICAgICAgICAgIENh
aXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dC5jcigpLCBh
cmc8Mj4oKSwgYXJnPDM+KCkpOwogCiAgICAgICAgICAgICBhdXRvJiByZWN0ID0gYXJnPDA+KCk7
CiAgICAgICAgICAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKQEAgLTMzNiw3ICs1NDcsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IENhaXJvOjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgpLCBhcmc8MT4oKSwg
YXJnPDQ+KCkpOwogCi0gICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAg
ICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRl
eHQuY3IoKSwgYXJnPDI+KCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTM0NSw4ICs1NTYsOSBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91
bmRlZFJlY3Q+KHJvdW5kZWRSZWN0LCBjb2xvciwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIGJs
ZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+KHJvdW5k
ZWRSZWN0LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAt
MzY1LDEwICs1NzcsMzYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgfQogICAg
IH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgVU5VU0VEX1BBUkFNKGNvbG9y
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAor
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgc3RydWN0IEZpbGxFbGxpcHNlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNo
YWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0Owor
CisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgICAg
IHBhdGguYWRkRWxsaXBzZShhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZmlsbFBhdGgo
Y29udGV4dEZvclJlcGxheShyZXBsYXllciksIHBhdGgsIGFyZzwxPigpLCBhcmc8Mj4oKSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbEVsbGlwc2U8PlxuIjsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxF
bGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpKTsKK30KKwogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewogICAgIHN0cnVjdCBGaWxsUGF0aCBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6
U2hhZG93U3RhdGU+IHsKQEAgLTM4OCwzMiArNjI2LDEyIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKICAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Rmls
bFBhdGg+KHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgRmlsbEVsbGlwc2UgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENhaXJvOjpGaWxs
U291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAgICAgICAgdmlydHVhbCB+RmlsbEVsbGlw
c2UoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgUGF0aCBw
YXRoOwotICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKGFyZzwwPigpKTsKLSAgICAgICAgICAg
IENhaXJvOjpmaWxsUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgcGF0aCwgYXJnPDE+
KCksIGFyZzwyPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJG
aWxsRWxsaXBzZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsRWxsaXBzZT4ocmVj
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7
Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKICAgICBzdHJ1Y3QgU3Ryb2tlUmVjdCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgZmxvYXQs
IENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewpAQCAtNDMwLDMxICs2
NDgsMTAgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxT
dHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHN0cnVjdCBTdHJva2VQ
YXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86
OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgflN0
cm9rZVBhdGgoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3Bl
cmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAg
Q2Fpcm86OnN0cm9rZVBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBh
cmc8MT4oKSwgYXJnPDI+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIlN0cm9rZVBhdGg8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PFN0cm9rZVBhdGg+KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUmVjdD4o
cmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNDc5LDEwNyArNjc2LDI5IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCwgQ2Fp
cm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIHN0cnVjdCBDbGVhclJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlv
biwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xlYXJSZWN0
KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJl
cGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpj
bGVhclJlY3QoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGVhclJlY3Q8PlxuIjsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGVhclJlY3Q+KHJlY3QpKTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKK3ZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHN0cnVjdCBE
cmF3R2x5cGhzIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Q2Fpcm86
OkZpbGxTb3VyY2UsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZSwgRmxv
YXRQb2ludCwgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+LCBmbG9hdCwgVmVjdG9yPGNhaXJv
X2dseXBoX3Q+LCBmbG9hdCwgVGV4dERyYXdpbmdNb2RlRmxhZ3MsIGZsb2F0LCBGbG9hdFNpemUs
IENvbG9yLCBGb250U21vb3RoaW5nTW9kZT4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3R2x5cGhz
KCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBTdHJva2VQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVy
YXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNo
YWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgflN0cm9rZVBhdGgoKSA9IGRlZmF1bHQ7CiAK
ICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoY29udGV4
dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwz
PigpLCBhcmc8ND4oKS5nZXQoKSwKLSAgICAgICAgICAgICAgICBhcmc8NT4oKSwgYXJnPDY+KCks
IGFyZzw3PigpLCBhcmc8OD4oKSwgYXJnPDk+KCksIGFyZzwxMD4oKSwgYXJnPDExPigpLCBhcmc8
MTI+KCkpOworICAgICAgICAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAg
ICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdHbHlwaHM8PlxuIjsKKyAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiU3Ryb2tlUGF0aDw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAg
VmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7Ci0gICAgewotICAg
ICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBn
bHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2
YW5jZXNbaV0ud2lkdGgoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3R2x5cGhzPihDYWly
bzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAotICAgICAg
ICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwKLSAgICAgICAgUmVmUHRyPGNhaXJv
X3NjYWxlZF9mb250X3Q+KGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpKSwKLSAgICAg
ICAgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIFdURk1vdmUoY2Fpcm9HbHlwaHMpLCB4T2Zm
c2V0LCBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsCi0gICAgICAgIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwgZm9udFNtb290aGluZykp
OwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQot
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1hZ2UgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zLCBmbG9hdCwgQ2Fp
cm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpID0g
ZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd1Bs
YXRmb3JtSW1hZ2UoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBh
cmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAg
ICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdOYXRpdmVJbWFnZTw+XG4iOwot
ICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0gICAgVU5VU0VE
X1BBUkFNKGltYWdlU2l6ZSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdOYXRpdmVJbWFnZT4obmF0aXZlSW1hZ2UucGxhdGZv
cm1JbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMob3B0aW9u
cywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSksIHN0YXRlLmFscGhhLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IHN0cnVjdCBEcmF3UGF0dGVybiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBJbnRTaXplLCBGbG9hdFJlY3QsIEZsb2F0UmVj
dCwgQWZmaW5lVHJhbnNmb3JtLCBGbG9hdFBvaW50LCBJbWFnZVBhaW50aW5nT3B0aW9ucz4gewot
ICAgICAgICB2aXJ0dWFsIH5EcmF3UGF0dGVybigpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBh
cmc8ND4oKSwgYXJnPDU+KCksIGFyZzw2PigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJEcmF3UGF0dGVybjw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UGF0
dGVybj4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBuYXRpdmVJbWFnZS5zaXplKCksIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpKTsKKyAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCiB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQpAQCAtNTk4LDggKzcxNyw4IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25l
c3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9y
KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxE
cmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUo
KSwgc3Ryb2tlQ29sb3IoKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQy
KQpAQCAtNjIxLDUwICs3NDAsOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludAogICAgIGlmIChz
dHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+
KHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7Ci19Ci0KLXZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBzdHJ1
Y3QgRHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEZsb2F0UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yPiB7Ci0g
ICAgICAgIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
LSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigp
LCBhcmc8ND4oKSwgYXJnPDU+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkRyYXdMaW5lc0ZvclRleHQ8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBp
ZiAod2lkdGhzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRl
eHQ+KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMs
IHN0YXRlLnN0cm9rZUNvbG9yKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIHN0cnVjdCBEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI8PlxuIjsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyPihyZWN0LCBzdHlsZSkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyLCBzdHJva2VTdHlsZSgp
LCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc2hvdWxkQW50aWFsaWFzKCkpKTsK
IH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCkBAIC02ODMsMTEgKzc2MCwxMSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tl
U3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdFbGxpcHNl
PihyZWN0LCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tl
VGhpY2tuZXNzKCkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2Fp
dGE6OnBhaW50Rm9jdXMoKnRoaXMsIHBhdGgsIGNvbG9yKTsKQEAgLTcwNywxMiArNzg0LDEyIEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdGb2N1c1Jpbmc+KHBh
dGgsIHdpZHRoLCBjb2xvcikpOwogI2VuZGlmCi0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiB9
CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAg
IFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcmVjdHMsIGNvbG9yKTsKQEAgLTczMiwz
NjggKzgwOSwxNDYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQKICAgICAgICAgfQogICAgIH07
CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERy
YXdGb2N1c1Jpbmc+KHJlY3RzLCB3aWR0aCwgY29sb3IpKTsKICNlbmRpZgotICAgIFVOVVNFRF9Q
QVJBTShvZmZzZXQpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNhdmUoKQot
ewotICAgIHN0cnVjdCBTYXZlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8PiB7Ci0gICAgICAgIHZpcnR1YWwgflNhdmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikuc2F2ZSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNhdmU8PlxuIjsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKLQotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFNhdmU+KCkpOwotCi0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0
YXRlU3RhY2subGFzdCgpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0
b3JlKCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAg
IHN0cnVjdCBSZXN0b3JlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
PiB7Ci0gICAgICAgIHZpcnR1YWwgflJlc3RvcmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikucmVzdG9yZSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlJlc3RvcmU8PlxuIjsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAoIXN0YWNrU2l6ZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKLQotICAgIGlmIChtX3N0YXRl
U3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxSZXN0b3JlPigpKTsKLQotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAg
aWYgKG1fc3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGVTdGFjay5jbGVhcigp
OworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQog
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIHN0cnVjdCBUcmFuc2xhdGUgZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdCwgZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+VHJh
bnNsYXRlKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1hZ2UgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90Piwg
RmxvYXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zLCBmbG9hdCwgQ2Fpcm86
OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpID0gZGVm
YXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6dHJhbnNsYXRl
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAg
ICAgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCks
IGFyZzw1PigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJUcmFu
c2xhdGU8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd05hdGl2ZUltYWdl
PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8VHJh
bnNsYXRlPih4LCB5KSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0
YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGUuY3RtLnRyYW5zbGF0ZSh4LCB5KTsKLQotICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gdDsKLSAgICAgICAgdC50cmFuc2xhdGUoLXgsIC15KTsKLSAgICAg
ICAgc3RhdGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0KKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdOYXRpdmVJ
bWFnZT4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgSW1h
Z2VQYWludGluZ09wdGlvbnMob3B0aW9ucywgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSwg
YWxwaGEoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQogewotICAgIHN0cnVjdCBSb3RhdGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5Sb3RhdGUoKSA9IGRlZmF1bHQ7
Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXll
cikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnJvdGF0ZShjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIlJvdGF0ZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPFJvdGF0ZT4oYW5nbGVJblJhZGlhbnMpKTsKLQotICAgIHsKLSAg
ICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZS5j
dG0ucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdDsK
LSAgICAgICAgdC5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgICAgICBzdGF0ZS5jdG1JbnZl
cnNlID0gdCAqIHN0YXRlLmN0bUludmVyc2U7Ci0gICAgfQotfQotCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBzdHJ1Y3Qg
U2NhbGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFNpemU+
IHsKLSAgICAgICAgdmlydHVhbCB+U2NhbGUoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IERyYXdQ
YXR0ZXJuIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4sIEludFNpemUsIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFu
c2Zvcm0sIEZsb2F0UG9pbnQsIEltYWdlUGFpbnRpbmdPcHRpb25zPiB7CisgICAgICAgIHZpcnR1
YWwgfkRyYXdQYXR0ZXJuKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpzY2FsZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkp
OworICAgICAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+
KCksIGFyZzw1PigpLCBhcmc8Nj4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiU2NhbGU8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd1Bh
dHRlcm48PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTY2FsZT4oc2l6ZSkpOwotCi0gICAgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVT
dGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmN0bS5zY2FsZShzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0OwotICAgICAgICB0LnNjYWxl
KDEgLyBzaXplLndpZHRoKCksIDEgLyBzaXplLmhlaWdodCgpKTsKLSAgICAgICAgc3RhdGUuY3Rt
SW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0KKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdQYXR0ZXJuPihuYXRpdmVJbWFn
ZS5wbGF0Zm9ybUltYWdlKCksIG5hdGl2ZUltYWdlLnNpemUoKSwgZGVzdFJlY3QsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucykpOwogfQogCi12b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQogewotICAgIHN0cnVjdCBDb25jYXRDVE0gZmluYWwgOiBQYWludGluZ09wZXJhdGlv
biwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFuc2Zvcm0+IHsKLSAgICAgICAgdmlydHVhbCB+Q29u
Y2F0Q1RNKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENh
aXJvOjpjb25jYXRDVE0oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDb25jYXRDVE08PlxuIjsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICBhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgp
OwotICAgIGlmICghaW52ZXJzZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8Q29uY2F0Q1RNPih0cmFuc2Zvcm0pKTsKLQotICAgIGF1dG8mIHN0YXRlID0gbV9z
dGF0ZVN0YWNrLmxhc3QoKTsKLSAgICBzdGF0ZS5jdG0gKj0gdHJhbnNmb3JtOwotICAgIHN0YXRl
LmN0bUludmVyc2UgPSBpbnZlcnNlLnZhbHVlKCkgKiBzdGF0ZS5jdG1JbnZlcnNlOworICAgIC8v
IEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1l
Rm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CisjZW5kaWYKIAotdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQogewotICAgIHN0cnVjdCBTZXRDVE0g
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFuc2Zvcm0+
IHsKLSAgICAgICAgdmlydHVhbCB+U2V0Q1RNKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3
R2x5cGhzIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Q2Fpcm86OkZp
bGxTb3VyY2UsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZSwgRmxvYXRQ
b2ludCwgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+LCBmbG9hdCwgVmVjdG9yPGNhaXJvX2ds
eXBoX3Q+LCBmbG9hdCwgVGV4dERyYXdpbmdNb2RlRmxhZ3MsIGZsb2F0LCBGbG9hdFNpemUsIENv
bG9yLCBGb250U21vb3RoaW5nTW9kZT4geworICAgICAgICB2aXJ0dWFsIH5EcmF3R2x5cGhzKCkg
PSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxh
eSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAg
ICAgICBDYWlybzo6ZHJhd0dseXBocyhjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLmdldCgpLAorICAgICAg
ICAgICAgICAgIGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCksIGFyZzw4PigpLCBhcmc8OT4o
KSwgYXJnPDEwPigpLCBhcmc8MTE+KCksIGFyZzwxMj4oKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiU2V0Q1RNPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkRyYXdHbHlwaHM8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvIGlu
dmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgIGlmICghaW52ZXJzZSkKKyAgICBpZiAo
IWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxTZXRDVE0+KHRyYW5zZm9ybSkpOwotCi0gICAgYXV0byYgc3RhdGUg
PSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIHN0YXRlLmN0bSA9IHRyYW5zZm9ybTsKLSAgICBz
dGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0g
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURl
dmljZVNjYWxlKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpLmN0bTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgc3RydWN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2
aXJ0dWFsIH5CZWdpblRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiQmVnaW5UcmFuc3BhcmVuY3lMYXllcjw+XG4iOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihv
cGFjaXR5KTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI+KG9wYWNpdHkpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFu
c3BhcmVuY3lMYXllcigpCi17Ci0gICAgc3RydWN0IEVuZFRyYW5zcGFyZW5jeUxheWVyIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7Ci0gICAgICAgIHZpcnR1YWwg
fkVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRW5k
VHJhbnNwYXJlbmN5TGF5ZXI8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3RydWN0IENsaXAg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKLSAg
ICAgICAgdmlydHVhbCB+Q2xpcCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6Y2xpcChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVy
cmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXA8PlxuIjsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwPihyZWN0
KSk7Ci0KKyAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7CisgICAgVmVjdG9yPGNhaXJvX2ds
eXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7CiAgICAgewotICAgICAgICBhdXRvJiBzdGF0
ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmNsaXBCb3VuZHMuaW50ZXJz
ZWN0KHN0YXRlLmN0bS5tYXBSZWN0KHJlY3QpKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3Ry
dWN0IENsaXBPdXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9h
dFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKLQotICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkNsaXBPdXQ8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxDbGlwT3V0PihyZWN0KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHN0cnVjdCBDbGlwT3V0IGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aD4gewotICAgICAgICB2
aXJ0dWFsIH5DbGlwT3V0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4o
KSk7CisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNb
aV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNl
dCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwT3V0Pihw
YXRoKSk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0
cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBv
aW50LAorICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5wbGF0Zm9ybURh
dGEoKS5zY2FsZWRGb250KCkpLAorICAgICAgICBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwg
V1RGTW92ZShjYWlyb0dseXBocyksIHhPZmZzZXQsIHRleHREcmF3aW5nTW9kZSgpLAorICAgICAg
ICBzdHJva2VUaGlja25lc3MoKSwgc2hhZG93T2Zmc2V0KCksIHNoYWRvd0NvbG9yKCksIGZvbnRT
bW9vdGhpbmcpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBzdHJ1Y3QgQ2xpcFBhdGggZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBXaW5kUnVsZT4gewot
ICAgICAgICB2aXJ0dWFsIH5DbGlwUGF0aCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd0xp
bmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0
UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yPiB7CisgICAgICAgIHZp
cnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAg
ewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRl
eHQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+
KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBQYXRoPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkRyYXdMaW5lc0ZvclRleHQ8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwUGF0aD4ocGF0aCwgY2xpcFJ1bGUpKTsKLQotICAgIHsK
LSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0
ZS5jbGlwQm91bmRzLmludGVyc2VjdChzdGF0ZS5jdG0ubWFwUmVjdChwYXRoLmZhc3RCb3VuZGlu
Z1JlY3QoKSkpOwotICAgIH0KLX0KKyAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOwogCi1JbnRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBj
b25zdAotewotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChzdGF0ZS5jdG1JbnZlcnNlLm1hcFJlY3Qoc3RhdGUuY2xpcEJv
dW5kcykpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlQ29sb3IoKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBzdHJ1Y3QgQ2xpcFRvSW1hZ2VCdWZmZXIgZmluYWw6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
LCBGbG9hdFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcFRvSW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7CisgICAgc3RydWN0IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9
IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBU
b0ltYWdlQnVmZmVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwg
YXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CiAgICAgICAg
IH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFRvSW1hZ2VCdWZmZXI8PlxuIjsK
KyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjw+
XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZm
ZXIuY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICBpZiAoIWltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpKQotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlw
VG9JbWFnZUJ1ZmZlcj4obmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QpKTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KQoteworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpKTsKIH0KIAogRmxv
YXRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKQEAgLTExMDYs
MTIgKzk2MSw0IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5p
cXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJiBjb21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5h
cHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIC8vIEZJWE1FOiBOb3Qg
aW1wbGVtZW50ZWQuCi0gICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxh
eWVyLCBkZXN0aW5hdGlvbik7Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5o
CmluZGV4IDgzYzZkMjdkNmVhMzZjNzliZWJkNzgyNWY5OWI3YzQzOTA4ZWU1NGIuLmFmNDc4ZmM0
MzdlOGI0ZWU5N2E3YzAxYjc3YmMyMmEwMzU0NDc5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDc4ICs0Miw1OCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0
cjsgfQogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBvdmVycmlkZTsKKyAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3Rv
cmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOworICAgIHZv
aWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xpcChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xp
cE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwVG9JbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxv
YXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29s
b3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNv
bXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0g
ICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBmaWxs
RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAg
IHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBkcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViQ29yZTo6Rm9udFNtb290
aGluZ01vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKFdl
YkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJu
KFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0
IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJv
a2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRy
YXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKICAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hB
cnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOworCiAgICAgdm9pZCBk
cmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25z
dCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBv
dmVycmlkZTsKLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29y
ZTo6UGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0
aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdl
YkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dGluYXRpb24pIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBXZWJDb3Jl
OjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6
OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgV2ViQ29yZTo6
U3Ryb2tlU3R5bGUpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSkgb3ZlcnJpZGU7CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGFwcGVuZChzdGQ6OnVuaXF1ZV9w
dHI8UGFpbnRpbmdPcGVyYXRpb24+JiYpOwogICAgIFBhaW50aW5nT3BlcmF0aW9ucyYgbV9jb21t
YW5kTGlzdDsKLQotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSBjdG07Ci0gICAgICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG1JbnZlcnNl
OwotICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY2xpcEJvdW5kczsKLSAgICB9OwotICAgIFZl
Y3RvcjxTdGF0ZSwgMzI+IG1fc3RhdGVTdGFjazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIE5pY29z
aWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3
R2x5cGhzUmVjb3JkZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKaW5kZXggNWQ2NmViNzJhZDEzYzI0ZGFjMDk1
YTk0NWY2MTRhNmY1NTIyMjQ5Mi4uMDdjMDMzOWY1OGJmMzJjN2Q1ZjhmODE3ZGJkZDNlYjdmMWVl
NzM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Ry
YXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKQEAgLTI5LDE3ICsyOSwxOCBAQAog
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGlj
c0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29u
dGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlw
aHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1
Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9u
Q29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9k
ZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9k
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggYzE5ZTc0MTU1N2MzMDhj
OTQxZTRlZjcxNWUzZGI0NjU5NGQxODViNi4uMmNkNzg2NWVjYTgyOWViNDU3ODBlOWZiMGU3MjQ3
YTM3MTJiY2MzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDR1dpbi5jcHAKQEAgLTE3NiwyNSArMTc2LDIyIEBAIHZvaWQgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQm
IGZvbnQsCiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEu
c2l6ZSgpKTsKICAgICBGb250Q2FzY2FkZTo6c2V0Q0dDb250ZXh0Rm9udFJlbmRlcmluZ1N0eWxl
KGNnQ29udGV4dCwgZm9udC5wbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZvbnQoKSwgZmFsc2UsIGZv
bnQucGxhdGZvcm1EYXRhKCkudXNlR0RJKCkpOwogCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNl
dDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGdy
YXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dD
b2xvcik7CisgICAgYXV0byBkcm9wU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LmRyb3BTaGFkb3co
KTsKIAotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3
aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlk
KCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRp
b25PckZsaXBwZWQoKSk7CisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBncmFwaGljc0NvbnRl
eHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIGRyb3BTaGFk
b3cuY29sb3IuaXNWYWxpZCgpICYmICFkcm9wU2hhZG93LmJsdXJSYWRpdXMgJiYgKCFncmFwaGlj
c0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0
Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CiAgICAgaWYgKGhhc1Np
bXBsZVNoYWRvdykgewogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMg
aW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhl
bCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwog
ICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0g
ICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CisgICAgICAgIENvbG9yIHNo
YWRvd0ZpbGxDb2xvciA9IGRyb3BTaGFkb3cuY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9
IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOworICAgICAgICBmbG9hdCBzaGFkb3dU
ZXh0WCA9IHBvaW50LngoKSArIGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIC8v
IElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBs
aWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgp
ICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsK
KyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9mZnNl
dC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/
IC0xIDogMSk7CiAgICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHNo
YWRvd1RleHRYLCBzaGFkb3dUZXh0WSk7CiAgICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRo
QWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOwogICAgICAg
ICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIENHQ29udGV4
dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0
aCgpICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIHNoYWRvd09mZnNl
dC5oZWlnaHQoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250
ZXh0LCBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNldC53aWR0aCgpICsgZm9udC5zeW50aGV0
aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIGRyb3BTaGFkb3cub2Zmc2V0LmhlaWdodCgpKTsK
ICAgICAgICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOwogICAgICAgICB9CiAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKQEAgLTIwOCw3ICsyMDUsNyBAQCB2b2lk
IEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBjb25zdCBGb250JiBmb250LAogICAgIH0KIAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCi0g
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVy
LCBzaGFkb3dDb2xvcik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXREcm9wU2hhZG93KGRy
b3BTaGFkb3cpOwogCiAgICAgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0Nv
bnRleHQsIG9sZEZvbnRTbW9vdGhpbmdTdHlsZSk7CiAgICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJp
eChjZ0NvbnRleHQsIHNhdmVkTWF0cml4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggM2NmNzQ2MGM4
MGUzYmUxZDViYTNmMGNlZDdjMTliMjVkZjI5YWJmMi4uNzg1ZTk0YmVjZjA3Y2Q0YTg0YzljMzRk
OWNlY2M4Mzg1N2UwNjk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTI5MiwxMiArMjkyLDEyIEBA
IHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCiAgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCgyLCAyLCBzaXplLndpZHRoKCkgLSAz
LCBzaXplLmhlaWdodCgpIC0gMyk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6
d2hpdGUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDMpOwotICAgIGNvbnRleHQu
c2V0TGluZURhc2gobV9kYXNoV2lkdGhzLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
bV9kYXNoV2lkdGhzLCAwIH0pOwogICAgIG1fcGF0aC5hZGRSZWN0KGZyYW1lUmVjdCk7CiAgICAg
bV9wYXRoLmNsb3NlU3VicGF0aCgpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChtX3BhdGgpOwog
Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaChEYXNoQXJyYXkoKSwgMCk7CisgICAgY29udGV4dC5z
ZXRMaW5lRGFzaCh7IHsgfSwgMCB9KTsKICAgICBtX3BhdGguY2xlYXIoKTsKICAgICBtX3BhdGgu
bW92ZVRvKEZsb2F0UG9pbnQoMCwgYm94VG9wICsgYm94U2l6ZSkpOwogICAgIG1fcGF0aC5hZGRM
aW5lVG8oRmxvYXRQb2ludChzaXplLndpZHRoKCksIGJveFRvcCArIGJveFNpemUpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApp
bmRleCAxYjE4MmExZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0M2I3NjdkLi5lODBmMmVlODkx
OTM5MTQ0MThlODc4YmYwYTRhMjg0MGVlNjg5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBA
IGJvb2wgQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50
KEZyYW1lVmlldyYgZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5zZXRQYWludEJlaGF2aW9yKFBh
aW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CiAgICAgZnJhbWVWaWV3LnNl
dFBhaW50c0VudGlyZUNvbnRlbnRzKHRydWUpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBj
aGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBj
aGVja2VyQ29udGV4dChmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSwgTnVs
bEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250
ZW50ZnVsUGFpbnQpOwogICAgIGZyYW1lVmlldy5wYWludChjaGVja2VyQ29udGV4dCwgZnJhbWVW
aWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCkpOwogCiAgICAgZnJhbWVWaWV3LnNldFBh
aW50c0VudGlyZUNvbnRlbnRzKG9sZEVudGlyZUNvbnRlbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCmluZGV4IGM5YWIyMTc2MTQxZmE3YTMz
OWEyMDk3YjNhYmY5NzY1MDc4N2U0ZjEuLjRiZmY4ZDAwODM5MjUxNGNiZTYyY2E5NWQ0ZTc0M2Zj
MTk3ZjAxOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxp
cHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lz
Qm94LmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIExlZ2FjeUVsbGlwc2lzQm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGJv
b2wgc2V0U2hhZG93ID0gZmFsc2U7CiAgICAgaWYgKGxpbmVTdHlsZS50ZXh0U2hhZG93KCkpIHsK
ICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBsaW5lU3R5bGUuY29sb3JCeUFwcGx5aW5nQ29s
b3JGaWx0ZXIobGluZVN0eWxlLnRleHRTaGFkb3coKS0+Y29sb3IoKSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KExheW91dFNpemUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgpLnZhbHVl
KCksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxlLnRleHRT
aGFkb3coKS0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0
LnNldERyb3BTaGFkb3coeyBMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPngoKS52
YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVTdHlsZS50
ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAgICBz
ZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMjRjODJjOWQ2YmQ0M2Y3NGJhMDVhYjVh
Yzc2NzkzZDc1ZDE1ZTU3Ny4uOGQ5N2QyNTcxZTI0NTNkZjE5MjhiZGU2Yzc3Yzc2MzE1ZmJjODgy
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCkBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JC
YWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3QKICAgICAg
ICAgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KCk7CiAKICAgICBGbG9hdFNpemUgc2hhZG93
T2Zmc2V0KGJveFNoYWRvdy0+eCgpLnZhbHVlKCksIGJveFNoYWRvdy0+eSgpLnZhbHVlKCkpOwot
ICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKS52
YWx1ZSgpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9y
KCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpM
ZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICBjb250ZXh0LnNldERyb3BT
aGFkb3coeyBzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUu
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93
LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93
UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIH0KIAogSW50ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmNob29zZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCB2b2lkKiBsYXllciwgY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKQEAgLTIwODcsNyArMjA4Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gbGluZURhc2ggPSBEYXNoQXJyYXk6
OmZyb20oZGFzaExlbmd0aCwgZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRMaW5lRGFzaChXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7CisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExl
bmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5n
IHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTI0
NTYsNyArMjQ1Niw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9h
dFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhl
bChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNl
UGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAg
ICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4g
LSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAg
Y29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgICAgICBjb250ZXh0
LnNldERyb3BTaGFkb3coeyBzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpM
ZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwogCiAgICAgICAgICAgICBpZiAo
aGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFx
dWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBz
YXZlcyB0aW1lCkBAIC0yNTU4LDcgKzI1NTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwog
ICAgICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCiAgICAgICAgICAgICBh
dXRvIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSByb3VuZFNpemVUb0RldmljZVBpeGVscyhzaGFkb3dP
ZmZzZXQsIGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93
KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+
aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1Jh
ZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsg
c25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5p
c1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFk
aXVzTW9kZTo6RGVmYXVsdCB9KTsKICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUocGl4ZWxTbmFwcGVkT3V0ZXJSZWN0LCBwaXhlbFNuYXBwZWRIb2xlUmVjdCwgZmls
bENvbG9yKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCmluZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2MjMyMWZlZWQ5YjY4NmMzY2Qu
LjhjZjk2MWUwYmMyMzY0ZTk2MmNkYTg4MWY4NTllNGYzMWEzYzk4M2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjI1MywxNCArMjI1MywxNCBAQCB2b2lk
IFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IExheWVyUAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAg
IGJvb2wgdXNlc0NvbXBvc2l0ZU9wZXJhdGlvbiA9IGhhc0JsZW5kTW9kZSgpICYmICEocmVuZGVy
ZXIoKS5pc0xlZ2FjeVNWR1Jvb3QoKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJW
aWV3TGF5ZXIoKSk7CiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAg
ICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVy
YXRpb24oKSwgYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVN
b2RlKHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkgfSk7CiAjZW5k
aWYKIAogICAgICAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIocmVuZGVyZXIoKS5v
cGFjaXR5KCkpOwogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgaWYgKHVz
ZXNDb21wb3NpdGVPcGVyYXRpb24pCi0gICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7
CisgICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0LmNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICNlbmRpZgogCiAjaWZkZWYgUkVW
RUFMX1RSQU5TUEFSRU5DWV9MQVlFUlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggNWY5OGI5MTI0YTM0OWFjNzU1NzlmNzExMzVlZTBm
MzhhYmI0ZjEyZC4uM2UyZTZiZjFkZTVkNTRlYjM4ZDkyN2E1MWYwN2M4OTEwYWU2YzFiZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAg
LTE4MzEsNyArMTgzMSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJl
Z2lvbigpCiAgICAgfTsKIAogICAgIGF1dG8gdXBkYXRlRXZlbnRSZWdpb25Gb3JMYXllciA9IFsm
XShHcmFwaGljc0xheWVyJiBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgbnVsbENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKKyAgICAgICAgYXV0byBkaXJ0eVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQ
b2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NMYXllci5z
aXplKCkpOworICAgIAorICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KGRp
cnR5UmVjdCwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpO
b25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRB
QkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRp
dGFibGVSZWdpb24oKSkKQEAgLTE4NTMsOCArMTg1NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVFdmVudFJlZ2lvbigpCiAgICAgICAgICAgICBldmVudFJlZ2lvbkNvbnRleHQu
dW5pdGUoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoLWxheWVyT2Zmc2V0LCBncmFwaGljc0xh
eWVyLnNpemUoKSkpLCByZW5kZXJlcigpLnN0eWxlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
YXV0byBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KGdy
YXBoaWNzTGF5ZXIub2Zmc2V0RnJvbVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNpemUoKSkp
OwotICAgICAgICBwYWludEludG9MYXllcigmZ3JhcGhpY3NMYXllciwgbnVsbENvbnRleHQsIGRp
cnR5UmVjdCwgeyB9LCAmZXZlbnRSZWdpb25Db250ZXh0KTsKKyAgICAgICAgcGFpbnRJbnRvTGF5
ZXIoJmdyYXBoaWNzTGF5ZXIsIG51bGxDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVj
dCksIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7CiAKICAgICAgICAgZXZlbnRSZWdpb24udHJh
bnNsYXRlKHRvSW50U2l6ZShsYXllck9mZnNldCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggMzBjZDM0M2VhN2RmOTE2OGNjM2NkZTQ3ZGJlZjhm
NzU5ZTg4ZjczMS4uMjU2ZmM3NDk1NmRhMzM4NmE1NGQzNTJkZTExYjZmZjczNjY5YTFmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtNjA1LDcgKzYw
NSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3coY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0CiAgICAgY29uc3QgRmxvYXRTaXplIGlubmVy
U2hhZG93T2Zmc2V0IHsgMCwgNSB9OwogICAgIGNvbnN0ZXhwciBhdXRvIGlubmVyU2hhZG93Qmx1
ciA9IDEwLjBmOwogICAgIGF1dG8gaW5uZXJTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4g
eyAwLCAwLCAwLCAwLjA0ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KGlubmVyU2hhZG93T2Zm
c2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hh
ZG93Q29sb3IgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAog
ICAgIFBhdGggaW5uZXJTaGFkb3dQYXRoOwpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBQ
YWludEluZm8mIHBhaW4KICAgICAvLyBVc2UgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiwg
YmVjYXVzZSBpdCBjYWxjdWxhdGVzIHRoZSBibHVyIHJhZGl1cyBpbiBjb250ZXh0IHNwYWNlLAog
ICAgIC8vIHJhdGhlciB0aGFuIHNjcmVlbiBzcGFjZS4KICAgICBjb25zdGV4cHIgYXV0byBzaGFk
b3dDb2xvciA9IENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYUJ5dGUoMjYpOwotICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yKTsKKyAg
ICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFk
b3dDb2xvciB9KTsKIAogICAgIC8vIFRoZSBjaXJjbGUgbXVzdCBoYXZlIGFuIGFscGhhIGNoYW5u
ZWwgdmFsdWUgb2YgMSBmb3IgdGhlIHNoYWRvdyBjb2xvciB0byBhcHBlYXIuCiAgICAgQ0dGbG9h
dCBjaXJjbGVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDAsIDEgfTsKQEAgLTIyNzMsNyAr
MjI3Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hh
ZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAKICAgICBib29sIGlzRW1wdHkgPSAh
c3RhdGVzLmNvbnRhaW5zQW55KHsgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpDaGVja2VkLCBDb250
cm9sU3RhdGVzOjpTdGF0ZXM6OkluZGV0ZXJtaW5hdGUgfSk7CiAgICAgYXV0byBmaXJzdFNoYWRv
d0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIGlzRW1wdHkgPyAwLjA1ZiA6IDAu
MWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFk
b3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBp
bm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yIH0pOwog
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVy
U2hhZG93UGF0aDsKQEAgLTIyOTAsNyArMjI5MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBh
aW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
CiAgICAgY29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogCiAgICAgY29uc3RleHBy
IGF1dG8gc2Vjb25kU2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMSwgMSwgMSwgMC41
ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwgc2Vjb25k
U2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IDAs
IDAgfSwgMSwgc2Vjb25kU2hhZG93Q29sb3IgfSk7CiAKICAgICBjb250ZXh0LmZpbGxQYXRoKGlu
bmVyU2hhZG93UGF0aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KaW5kZXggMDEwZWNiYWVkODdhNzNhNDIwYWZiOTdlOGU4MGZlYTYzNzlmZWQzZS4uMTBk
YzkwZTU3ZTVhZTBmNDI1YTBkYWFhMzY0ZjgxNGU0NDk0OTkwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjgxNiw3ICsyODE2LDcgQEAgc3RhdGlj
IHZvaWQgcGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIoY29uc3QgUmVuZGVyQXR0YWNo
bWVudCYgYXR0YWNobWVudCwKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHBsYWNlaG9sZGVy
Qm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQ
bGFjZWhvbGRlckJvcmRlcldpZHRoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKERhc2hl
ZFN0cm9rZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7YXR0YWNobWVudFBsYWNlaG9sZGVy
Qm9yZGVyRGFzaExlbmd0aH0sIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IGF0dGFj
aG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGggfSwgMCB9KTsKICAgICBjb250ZXh0LnN0
cm9rZVBhdGgoYm9yZGVyUGF0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXggNjc1NTY4YWZmNjExOGYwMTNiZDFk
NGY1NWE2YzM2NGZhOGFmMzhlOC4uODMwOWIyZjhkNGEzMWZhMDNiMWFiZjg0MzlkYTBmM2VmMTYy
ODQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9u
UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9u
UGFpbnRlci5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFRleHREZWNvcmF0aW9uUGFpbnRl
cjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgYwog
ICAgICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CiAgICAgICAg
ICAgICBpZiAobV9zaGFkb3dDb2xvckZpbHRlcikKICAgICAgICAgICAgICAgICBtX3NoYWRvd0Nv
bG9yRmlsdGVyLT50cmFuc2Zvcm1Db2xvcihzaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQp
LCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIG1f
Y29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd1gsIHNoYWRvd1kgLSBleHRy
YU9mZnNldCksIHNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiAgICAg
ICAgICAgICBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCA4ODVkODI2ZWU5ZTc5NmY0YjVjNWI1
ODMzZjcxYTAyOGM0NTQxYTdhLi5mZTg4NjljMTllNWY4ZDQzYjdmYTE2ZTQwMWI0ZmJjNmRjZjdl
ZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgU2hhZG93QXBwbGllcjo6U2hhZG93QXBwbGllcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywKICAgICB9CiAKICAgICBpZiAoIW1fYXZv
aWREcmF3aW5nU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvd0Nv
bG9yIH0pOwogfQogCiBpbmxpbmUgYm9vbCBTaGFkb3dBcHBsaWVyOjppc0xhc3RTaGFkb3dJdGVy
YXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAKaW5kZXggN2VkNTM3YzkyNzkzNzcwZjQ0ODhhZTI5ZGY0MDcyN2Q3ZWIxYTNhOS4uNmM3MzBl
ZjA3ZTQ4YzdlY2Y4YzQwZTM3ZTAwMzQ1Y2ZhYjU2YzY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02OSw3ICs2OSw3IEBAIEZsb2F0
UmVjdCBSZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVVcGRhdGVkU3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdAogc3RhdGljIHZvaWQgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQogewogICAgIGlmIChhdXRvIGdyYWRpZW50ID0gY29udGV4dC5zdHJva2VHcmFkaWVu
dCgpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqZ3JhZGllbnQsIGNvbnRleHQu
c3RhdGUoKS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgY29udGV4dC5z
ZXRGaWxsR3JhZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0cm9rZVNwYWNlVHJhbnNmb3JtKCkp
OwogICAgIGVsc2UgaWYgKFBhdHRlcm4qIHBhdHRlcm4gPSBjb250ZXh0LnN0cm9rZVBhdHRlcm4o
KSkKICAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqcGF0dGVybik7CiAgICAgZWxzZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
aW5kZXggY2MzOGVjNzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4uYjY1ODY4ZDFi
ZDM0YzkwZDRiYmZkZDQ3N2FkMmM3NDI4MmEwNTZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC01MDEsMTAgKzUwMSwxMiBA
QCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNhblNl
dExpbmVEYXNoKQotICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGxl
bmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKSAq
IHNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3Zl
KGRhc2hBcnJheSksIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tl
RGFzaE9mZnNldCgpKSAqIHNjYWxlRmFjdG9yIH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICB9CisKKyAgICBjb250
ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6c3R5
bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
cmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJp
bmdDb250ZXh0LmNwcAppbmRleCAyZmI4ZjMzYTg3MGRmY2NlYjYyZTE0OTY1NmIxNDQzNzIyZWJl
YTJkLi5mNTc5ZTVhNzVmZTkxMGY2ZTViNThhOWFlZmI2ODM1ODk2MjIxMGU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAK
QEAgLTExNSwxMiArMTE1LDEyIEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRv
UmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUGFpCiAgICAgICAgIGlm
IChvcGFjaXR5IDwgMSB8fCBoYXNCbGVuZE1vZGUgfHwgaXNvbGF0ZU1hc2tGb3JCbGVuZGluZyB8
fCBoYXNJc29sYXRpb24pIHsKIAogICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkKLSAgICAg
ICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJhdGlvbiht
X3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5ibGVuZE1v
ZGUoKSk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3Np
dGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgc3R5
bGUuYmxlbmRNb2RlKCkgfSk7CiAKICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCku
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgICAgICAgICAgaWYgKGhhc0Js
ZW5kTW9kZSkKLSAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigp
LCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRl
eHQoKS5zZXRDb21wb3NpdGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVP
cGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAKICAgICAgICAgICAgIG1fcmVuZGVy
aW5nRmxhZ3MgfD0gRW5kT3BhY2l0eUxheWVyOwogICAgICAgICB9CkBAIC0yNzMsNyArMjczLDcg
QEAgYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQogCiAgICAgLy8gSW52YWxpZGF0ZSBhbiBleGlzdGluZyBi
dWZmZXIgaWYgdGhlIHNjYWxlIGlzIG5vdCBjb3JyZWN0LgogICAgIGlmIChpbWFnZUJ1ZmZlcikg
ewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRl
eHQoKS5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250
ZXh0KCkuZ2V0Q1RNKCk7CiAgICAgICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0JveCA9IGV4
cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXplIGJ1ZmZl
clNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lkdGgoKSAq
IHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3Vu
ZGluZ0JveC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKICAgICAgICAgaWYgKGJ1
ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCA0ZGQ3ZjgwZTM3Nzc5ODdkY2I3MGMxYTNjOGE4
N2NkOGE0ZmQ2ZmI5Li5jZDg4YWRmMDhkZGE4MDNiZmQ5M2Y4OTU3NzQwNzY4NmFjNGM1NDYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTI2OSwxNCArMjY5
LDE0IEBAIEltYWdlRHJhd1Jlc3VsdCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjCiAgICAgQVNTRVJUKHZpZXcpOwogCiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0
aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRl
eHQuY2xpcChlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpKTsKIAogICAgIGZsb2F0IGFscGhhID0g
Y29udGV4dC5hbHBoYSgpOwogICAgIGJvb2wgY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5zcGFyZW5j
eUxheWVyID0gb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpICE9IENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyIHx8IG9wdGlvbnMuYmxlbmRNb2RlKCkgIT0gQmxlbmRNb2RlOjpOb3JtYWwg
fHwgYWxwaGEgPCAxOwogICAgIGlmIChjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJlbmN5TGF5
ZXIpIHsKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGFscGhhKTsKLSAg
ICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3Np
dGVNb2RlKHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFs
IH0pOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaG9ub3Igb3B0aW9ucy5vcmll
bnRhdGlvbigpLCBzaW5jZSBJbWFnZUJpdG1hcCdzIGZsaXBZIGhhbmRsaW5nIHJlbGllcyBvbiBp
dC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAwMQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDU0MzgxODJkZGU4NzYzZWJhZDM4ZjE5MmRmNzk1
YWEwNjBiNjUxYmIuLjhkYTM5MGY2ZGE3MGUzNzk1NTBhNTcyZTA5ZTA4NDExODljMmRkZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTc0LDMxICs3NCw2IEBAIHZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgaGFuZGxlSXRlbShEaXNwbGF5
TGlzdDo6UmVzdG9yZSgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0
OjpUcmFuc2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpSb3Rh
dGUoYW5nbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNj
YWxlKHNjYWxlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxp
c3Q6OlNldENUTShjdG0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpj
b25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBoYW5kbGVJ
dGVtKERpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTShjdG0pKTsKLX0KLQogdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpzZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxDb2xvciYmIGl0ZW0pCiB7CiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsK
QEAgLTEyOCw0MCArMTAzLDE1IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0
U3RhdGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlJiYgaXRlbSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfTsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlQ2hhbmdl
KCkubV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxl
SW1hZ2UoaXRlbS5zdGF0ZSgpLnN0cm9rZUJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFuZ2UoKS5t
X3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2Uo
aXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYg
aXRlbSkKLXsKLSAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwotfQotCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1p
dCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0KGxpbWl0KSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93KCkpOwotfQotCiB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewog
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsaXAocmVjdCkpOwpAQCAtMzcxLDE0ICszMjEs
OSBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aEdyYWRpZW50
KERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcgogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVt
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBvc2l0ZWRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwg
YmxlbmRNb2RlKSk7CisgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
KHJlY3QsIGNvbG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5oCmluZGV4IDNiYmFmNzY1ZDA1ZjQ0YWJmNGQ5NjFlNzY2Y2U2NTQ2OThl
ZGUyOTQuLjgxODg5NjZhZmZhNzA5ZTZmZDBhMzFiZmNhNmMzZTcxODU2NWM1OGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtNTksMjAgKzU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2F2ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlKTsKLSAgICB2b2lkIHNj
YWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgY29uY2F0ZW5hdGVDVE0o
Y29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBzZXRJbmxpbmVGaWxs
Q29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmKTsKICAgICB2
b2lkIHNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVT
dHJva2VDb2xvciYmKTsKICAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CiAgICAg
dm9pZCBzZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUmJik7Ci0gICAgdm9p
ZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApOwotICAgIHZvaWQgc2V0TGluZURhc2goV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYpOwotICAgIHZvaWQgc2V0TGluZUpvaW4o
V2ViQ29yZTo6TGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0gICAg
dm9pZCBjbGVhclNoYWRvdygpOwogICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAg
dm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKQEAgLTk3LDgg
Kzg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoR3JhZGll
bnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50JiYpOwotICAgIHZv
aWQgZmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5k
TW9kZSk7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogICAgIHZvaWQgZmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KaW5kZXggMjgwMmZmZThmODM5N2Mw
ZWQ0ZGYxMjFhMDE3ZmU3ODEwOGZmNmMyMC4uNDE0YzMxYTEzMjBjMGIyZTc4NmJjOGQ5ZjY1OTgx
MDJkODcwZjQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMu
aW4KQEAgLTI1LDQ3ICsyNSwzNSBAQAogbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgU2F2ZSgpCiAgICAgUmVzdG9yZSgpCi0g
ICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgUm90YXRlKGZsb2F0IGFuZ2xlKQot
ICAgIFNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZSBzY2FsZSkKLSAgICBTZXRDVE0oV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIGN0bSkKLSAgICBDb25jYXRlbmF0ZUNUTShXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gY3RtKQorCiAgICAgU2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVGaWxsQ29sb3IgaXRlbSkKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3IgaXRlbSkKICAgICBTZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIFNldFN0YXRlKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRTdGF0ZSBpdGVtKQotICAgIFNldExpbmVDYXAoZW51bTp1aW50OF90IFdl
YkNvcmU6OkxpbmVDYXAgbGluZUNhcCkKLSAgICBTZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZURhc2ggaXRlbSkKLSAgICBTZXRMaW5lSm9pbihlbnVtOnVpbnQ4X3QgV2Vi
Q29yZTo6TGluZUpvaW4gbGluZUpvaW4pCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkK
LSAgICBDbGVhclNoYWRvdygpCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVybigp
CisgICAgQXBwbHlGaWxsUGF0dGVybigpCisjZW5kaWYKKyAgICBBcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKKwogICAgIENsaXAoV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QpCisgICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgQ2xpcE91dChXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQogICAgIENsaXBPdXRUb1BhdGgoV2ViQ29yZTo6
UGF0aCBwYXRoKQotICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90
IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQotICAgIERyYXdHbHlwaHMoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHMgaXRlbSkKLSAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNl
SW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6
OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIpCi0gICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6
OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBz
dHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBEcmF3TmF0
aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRp
ZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRl
c3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdl
UGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd1N5c3RlbUltYWdlKFJlZjxXZWJDb3Jl
OjpTeXN0ZW1JbWFnZT4gc3lzdGVtSW1hZ2UsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlv
blJlY3QpCi0gICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3Jl
OjpGbG9hdFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0s
IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBz
dHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBCZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KQotICAgIERyYXdSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCi0gICAgRHJhd0xpbmUoV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDEsIFdlYkNvcmU6
OkZsb2F0UG9pbnQgcG9pbnQyKQotICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgRHJhd0VsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJl
Y3QpCi0gICAgRHJhd1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIERyYXdGb2N1c1JpbmdQ
YXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29y
ZTo6Q29sb3IgY29sb3IpCi0gICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpG
bG9hdFJlY3Q+IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xv
ciBjb2xvcikKKyAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJl
Y3QgZGVzdGluYXRpb25SZWN0KQorCisgICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KQorCiAgICAgRmlsbFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAgICAgRmlsbFJl
Y3RXaXRoQ29sb3IoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9y
KQogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhHcmFkaWVudCBpdGVtKQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpD
b21wb3NpdGVPcGVyYXRvciBvcCwgZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9kZSBibGVu
ZE1vZGUpCi0gICAgRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgcmVj
dCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVuZE1vZGUg
YmxlbmRNb2RlKQorICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0
IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJvdW5k
ZWRIb2xlUmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBGaWxsRWxsaXBzZShXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBG
aWxsTGluZShzdHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBGaWxsQXJjKHN0cnVj
dCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC03MywxMSArNjEsMTAgQEAgbWVzc2FnZXMgLT4g
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgRmls
bEJlemllckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRp
ZgogICAgIEZpbGxQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBGaWxsRWxsaXBzZShXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLSAgICBU
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9y
U3BhY2UpCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRp
ZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCisKICAgICBT
dHJva2VSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisKKyAg
ICBTdHJva2VFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogICAgIFN0cm9rZUxpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRh
dGEpCiAgICAgU3Ryb2tlQXJjKHN0cnVjdCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC04NSwx
MyArNzIsMzEgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZD
b3VudGVkIFN0cmVhbSB7CiAgICAgU3Ryb2tlQmV6aWVyQ3VydmUoc3RydWN0IFdlYkNvcmU6OkJl
emllckN1cnZlRGF0YSBkYXRhKQogI2VuZGlmCiAgICAgU3Ryb2tlUGF0aChXZWJDb3JlOjpQYXRo
IHBhdGgpCi0gICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBD
bGVhclJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0jaWYgVVNFKENHKQotICAgIEFwcGx5
U3Ryb2tlUGF0dGVybigpCi0gICAgQXBwbHlGaWxsUGF0dGVybigpCisKKyAgICBEcmF3UmVjdChX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIERyYXdM
aW5lKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50
MikKKworICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIERyYXdQ
YXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKKworICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNvcmU6
OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29s
b3IpCisgICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKwor
ICAgIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZs
b2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlcikKKyAg
ICBEcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCwg
V2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyBvcHRpb25zKQorICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVt
SW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQor
ICAgIERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUgaW1hZ2VTaXplLCBXZWJDb3JlOjpG
bG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3UGF0dGVybihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB0aWxlUmVjdCwgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwaGFzZSwg
V2ViQ29yZTo6RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyBvcHRpb25zKQorI2lmIEVOQUJMRShWSURFTykKKyAgICBQYWludEZyYW1lRm9yTWVk
aWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZs
b2F0UmVjdCBkZXN0aW5hdGlvbikKICNlbmRpZgotICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgc2NhbGVGYWN0b3IpCisKKyAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3R2x5cGhzIGl0ZW0pCisgICAgRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCBpdGVtKQorICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKKworICAgIENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQorICAgIFRy
YW5zZm9ybVRvQ29sb3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JT
cGFjZSkKICAgICBGbHVzaENvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5LmNwcAppbmRleCA4NTc3Y2JiZGU2ZDM5MDFkMzQ3MDc2MWVkMzBmNzlkOThlODJi
OThkLi42Y2ZiYWJjYTdiY2ZiZWRjNTk1NDgzZThlZWIxZDVhYjEyMDk2NmE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCkBAIC0zMiwzNiArMzIsMjEg
QEAKICNpbmNsdWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9NZWRpYVBsYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHkoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkmIHJlbmRlcmluZ0JhY2tlbmQsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVy
OjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogRGlz
cGxheUxpc3Q6OlJlY29yZGVyKHsgfSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3Ry
dWN0RHJhd0dseXBocykKKyAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcihpbml0aWFsQ2xpcCwg
aW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kZXN0aW5hdGlvbkJ1
ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkp
CiAgICAgLCBtX2ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKQogICAgICwgbV9yZW5kZXJpbmdCYWNr
ZW5kKHJlbmRlcmluZ0JhY2tlbmQpCiB7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xv
clNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2Zv
cm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOwotfQotCiBSZW5kZXJpbmdNb2RlIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXIgPyBtX2ltYWdlQnVmZmVyLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwpAQCAtNzcsMzEgKzYyLDYgQEAgdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc3RvcmUoKQogICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpU
cmFuc2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJvdGF0ZShhbmdsZSkpOwotfQotCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2Fs
ZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTY2Fs
ZShzY2FsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldENUTSh0cmFuc2Zvcm0pKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENvbmNhdGVu
YXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNvbmNhdGVuYXRlQ1RNKHRyYW5zZm9y
bSkpOwotfQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0
SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldElubGluZUZpbGxDb2xvcihEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yIHsgY29sb3IgfSkpOwpAQCAtMTE3LDkyICs3NywyNiBA
QCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzIGZsYWdzKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OlNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7IHN0YXRlLCBmbGFncyB9KSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5l
Q2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpTZXRMaW5lQ2FwKGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYg
YXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIHsg
YXJyYXksIGRhc2hPZmZzZXQgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUpvaW4obGluZUpv
aW4pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNl
dE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyU2hhZG93KCkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6Q2xpcChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0KHJlY3QpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6Q2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1Bh
dGgocGF0aCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmls
dGVyJiBmaWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXI+IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdlKQotICAgICAgICBpZGVudGlm
aWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOwotICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKFdURk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJS
ZWZlcmVuY2UoUmVmPEZpbHRlcj4geyBmaWx0ZXIgfSkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUg
eyBzdGF0ZSB9KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291
bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2Rl
KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdH
bHlwaHMoRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMgeyBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBj
b3VudCwgbG9jYWxBbmNob3IsIG1vZGUgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZm
ZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCisjaWYgVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmllciwgaW1h
Z2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKIH0KIAot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFn
ZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5Rmls
bFBhdHRlcm4oKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVy
bigpKTsKIH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIHsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihp
bWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKQEAgLTIxNSw0NCArMTA5LDM0IEBAIHZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIHdpZHRo
KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGlu
ZShwb2ludDEsIHBvaW50MikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0
aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdMaW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBibG9j
a0xvY2F0aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVMaW5lcyB9KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Q2xpcChyZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIHJ1bGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsK
IH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RWxsaXBzZShyZWN0KSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChy
ZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dFRvUGF0
aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9m
ZnNldCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpDbGVhclJlY3QocmVjdCkpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjcwLDIz
ICsxNTQsMjIgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZp
bGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYKICAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlz
dDo6RmlsbFJlY3RXaXRoR3JhZGllbnQgeyByZWN0LCBncmFkaWVudCB9KSk7CiB9CiAKLXZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBt
b2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmls
bFJvdW5kZWRSZWN0KHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBtb2Rl
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRlZFJlY3Qocm91bmRlZFJlY3Qs
IGNvbG9yLCBtb2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxFbGxpcHNlKHJlY3Qp
KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGRhdGEp
CiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbExp
bmUoZGF0YSkpOwpAQCAtMzA2LDcgKzE4OSw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhCiB7
CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEJlemll
ckN1cnZlKGRhdGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
CiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKQEAgLTMxNCwyMyArMTk2LDE3IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxQYXRoKHBhdGgpKTsK
IH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRp
ZmllcigpLCBkZXN0aW5hdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlUmVj
dChyZWN0LCB3aWR0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OlN0cm9rZUVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCi0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJv
a2VMaW5lKGNvbnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUxpbmUoZGF0YSkpOwpAQCAtMzUwLDcgKzIyNiw2
IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VCZXpp
ZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlQmV6aWVyQ3VydmUoZGF0YSkpOwogfQotCiAjZW5k
aWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNTgs
MzMgKzIzMyw4NCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZVBhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlRWxsaXBz
ZShyZWN0KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyUmVjdChyZWN0
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xp
bmUocG9pbnQxLCBwb2ludDIpKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d0VsbGlwc2UocmVjdCkpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigp
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0
aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRBcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChw
YXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0
cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQs
IGNvbG9yKSk7Cit9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihzY2FsZUZhY3RvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIEZpbHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkKKyAgICAg
ICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rmls
dGVyZWRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIElQ
Qzo6RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7Cit9CisKK3ZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGlt
YWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOwor
fQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpKTsKK30KKwor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFn
ZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucykpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklk
ZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9y
TWVkaWEoaWRlbnRpZmllciwgZGVzdGluYXRpb24pKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFu
Y2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
IHsgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsK
K30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmVzRm9y
VGV4dChEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IEZsb2F0UG9pbnQoKSwgdG9GbG9h
dFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzIH0p
KTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkp
OwogfQogCiBib29sIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3Vy
Y2VVc2UoTmF0aXZlSW1hZ2UmIGltYWdlKQpAQCAtNDM0LDExICszNjAsNiBAQCBib29sIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoRm9udCYgZm9udCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OmZsdXNoQ29udGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmll
cikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVz
aENvbnRleHQoaWRlbnRpZmllcikpOwotfQotCiBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2Rl
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAog
ewogICAgIGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkgewpAQCAtNDY0LDYgKzM4
NSwyMSBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6Y3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbgogICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3Bh
Y2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJh
bnNmb3JtVG9Db2xvclNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworfQorCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KEdyYXBoaWNzQ29udGV4dEZs
dXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkZsdXNoQ29udGV4dChpZGVudGlmaWVyKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCmluZGV4IDliMzNhMDY3ZmQxNmJj
Y2YxNDA0MmMxOTc0ZGQ2OTE5NDIyNjI0NjguLmYyYWQ4ZDBhYTQ1ODU4OWFlZTgxOTA3ZDljOTA4
OTZkMzRiNmY3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHku
aApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTsKIAogY2xhc3MgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlciB7CisgICAgZnJpZW5kIGNs
YXNzIFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKIHB1YmxpYzoKICAgICBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHkoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBj
b25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6
RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIH5SZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHkoKSA9IGRlZmF1bHQ7CkBAIC01MCw2MyArNTEsMzkgQEAgcHVibGljOgogICAgIHZv
aWQgZmx1c2hDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllcikg
ZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNl
bmQoVCYmIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5n
QmFja2VuZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9uZWVkc0ZsdXNoID0g
dHJ1ZTsKLSAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZSht
ZXNzYWdlKSwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwotICAgIH0KLQotICAgIGZy
aWVuZCBjbGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7Ci0KICAgICBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgcmVj
b3JkU2F2ZSgpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkUm90YXRlKGZsb2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0
IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ29uY2F0
ZW5hdGVDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKICAgICB2
b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90PikgZmlu
YWw7CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpTUkdCQTx1
aW50OF90PikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXAp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFy
cmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lSm9p
bihXZWJDb3JlOjpMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0
KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7CisgICAg
dm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSYp
IGZpbmFsOworCisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJu
KCkgZmluYWw7CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5k
aWYKKworICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7
CisgICAgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9p
ZCByZWNvcmRDbGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBm
aW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1
ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsK
ICAgICB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6
OldpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KFdlYkNvcmU6OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ds
eXBocyhjb25zdCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9udFNtb290
aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6
OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6Oklt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1h
Z2UoV2ViQ29yZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAg
ICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYmxvY2tMb2NhdGlv
biwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3Rz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBU
b0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmls
bFJlY3RXaXRoQ29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6
QmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3Jl
OjpCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
ICAgIHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBmaW5hbDsK
ICAgICB2b2lkIHJlY29yZEZpbGxBcmMoY29uc3QgV2ViQ29yZTo6QXJjRGF0YSYpIGZpbmFsOwpA
QCAtMTE0LDkgKzkxLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3Vy
dmUoY29uc3QgV2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2
b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRTdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKwor
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQogICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBXZWJDb3JlOjpMaW5lRGF0
YSYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IFdlYkNvcmU6OkFyY0Rh
dGEmKSBmaW5hbDsKQEAgLTEyNCwxMyArMTAyLDI4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNv
cmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEmKSBmaW5h
bDsKICNlbmRpZgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRo
JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJlY29yZEFwcGx5U3Ry
b2tlUGF0dGVybigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZp
bmFsOworCisgICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUo
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBwb2ludDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25z
dCBXZWJDb3JlOjpQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQ
YXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1Jl
Y3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3Jk
RHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVyJikgZmluYWw7
CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlv
bnMmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShXZWJDb3JlOjpTeXN0
ZW1JbWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKKyAg
ICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29u
c3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25z
dCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2Rl
KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQg
cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwogCiAgICAg
Ym9vbCByZWNvcmRSZXNvdXJjZVVzZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpIGZpbmFsOwogICAg
IGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5hbDsKQEAg
LTE0MSw2ICsxMzQsMTggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBj
b25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6UmVuZGVyaW5nTWV0aG9kPikgY29uc3QgZmluYWw7CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2VuZChUJiYgbWVzc2FnZSkKKyAgICB7CisgICAgICAg
IGlmIChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBtX25lZWRzRmx1c2ggPSB0cnVlOworICAgICAgICBtX3JlbmRlcmluZ0JhY2tl
bmQtPnNlbmRUb1N0cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rlc3RpbmF0aW9uQnVmZmVySWRl
bnRpZmllcik7CisgICAgfQorCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KSBmaW5hbDsKKwogICAgIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcjsKICAgICBXZWFrUHRyPFdlYkNvcmU6Oklt
YWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwogICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5PiBtX3JlbmRlcmluZ0JhY2tlbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggMWQ2NDNiNmI0Mjg4ZDA4
ZTAzOGM0NjI1ZDA1NDlkZTY4YWYyYWE3Ny4uMDc5OTNiMzgwZjFlYTdkMzQ5ZGQ3ZWJmYzE2MGM4
MDRkYWQ0M2UzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0ZpbmRDb250cm9sbGVyLmNwcApAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgRmluZENvbnRyb2xs
ZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIGNvCiAKICAgICAvLyBEcmF3IHdoaXRlIGZyYW1lcyBhcm91bmQgdGhlIGhvbGVzLgogICAg
IC8vIFdlIGRvdWJsZSB0aGUgdGhpY2tuZXNzIGJlY2F1c2UgaGFsZiBvZiB0aGUgc3Ryb2tlIHdp
bGwgYmUgZXJhc2VkIHdoZW4gd2UgY2xlYXIgdGhlIGhvbGVzLgotICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFk
b3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BT
aGFkb3coeyBGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0Js
dXJSYWRpdXMsIHNoYWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VD
b2xvcihDb2xvcjo6d2hpdGUpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25l
c3MoYm9yZGVyV2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiB3aGl0ZUZyYW1lUGF0
aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3Vu
ZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCBmMTZmNzk2ZTA0N2U5OTE5
NzJjMGVkMWY0YWUxMTNjZTE2NTY1YzEwLi40OWUwMGJlMzM3ZWFmZWUxMjkzZWYwNzdhZGY2MTdj
ZGFlM2Q0YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0Nyw3ICsy
NDcsNyBAQCB2b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29y
ZTo6UGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogCiAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBncmFw
aGljc0NvbnRleHQuc2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBz
aGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBo
aWNzQ29udGV4dC5zZXREcm9wU2hhZG93KHsgV2ViQ29yZTo6RmxvYXRTaXplKHNoYWRvd09mZnNl
dFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAg
ICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRDb2xvcik7CiAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JCb3JkZXJXaWR0aCAqIDIpOwog
ICAgIGZvciAoYXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlOTdjMjBhNGZmNWJlNDFkOWMzMjA1
N2M1MDgxY2ZmYzRiODFhNGE2Li43YjA0NDA2N2I2OWEzNWE2ZmNmZWUwMTY2NDZjYjI5MmE0NTAz
ZDcxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMjItMDMtMTUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91
bGQgYmUgbGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcDoKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorCiAyMDIyLTAzLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFw
cGxlLmNvbT4KIAogICAgICAgICBbZ2l0LXdlYmtpdF0gSGFuZGxlIGNvbXBhcmluZyBVc2VyIGFu
ZCBDb250cmlidXRvciB0byBOb25lCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHRUZXN0c0NHLmNwcAppbmRleCA4ZTQxYzVhNzNhZTM2ODRjZWRkZjFmOTRmOWYxNzE4OTUzNTE0
YzlmLi5lYmU2NDQ4NzFlMjhmNTE5Y2QyNjEyMGI4YTgyNzg4NmMwMTkwMmJmIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dFRlc3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKQEAgLTU0LDcgKzU0LDcg
QEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJhc2ljKQogICAgIEdyYXBo
aWNzQ29udGV4dENHIHByaW1hcnlDb250ZXh0KHByaW1hcnlDR0NvbnRleHQuZ2V0KCkpOwogCiAg
ICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vj
b25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdp
ZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29u
dGV4dChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhl
aWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRl
eHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC05MCwxMCArOTAsMTAgQEAgVEVTVChCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJhc2ljKQogVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0VGVzdHMsIFRleHQpCiB7CiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBwcmltYXJ5RGlz
cGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHByaW1hcnlDb250ZXh0KHByaW1hcnlEaXNwbGF5
TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwg
eyB9KTsKKyAgICBSZWNvcmRlckltcGwgcHJpbWFyeUNvbnRleHQocHJpbWFyeURpc3BsYXlMaXN0
LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBJ
bk1lbW9yeURpc3BsYXlMaXN0IHNlY29uZGFyeURpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1w
bCBzZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeURpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgw
LCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1w
bCBzZWNvbmRhcnlDb250ZXh0KHNlY29uZGFyeURpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwg
Y29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKQEAgLTIwMSw3
ICsyMDEsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgQm9yZGVycykK
ICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmltYXJ5Q29udGV4dChwcmltYXJ5Q0dDb250ZXh0Lmdl
dCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3Jk
ZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAs
IGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNl
Y29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgs
IGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHBy
aW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtMjI4LDcgKzIyOCw3IEBAIFRF
U1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUcmFuc2Zvcm1lZENsaXApCiAgICAg
R3JhcGhpY3NDb250ZXh0JiBwcmltYXJ5Q29udGV4dCA9IHByaW1hcnlDb250ZXh0Q0c7CiAKICAg
ICBJbk1lbW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNv
bmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAw
KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0
LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBHcmFwaGljc0NvbnRleHQmIHNlY29u
ZGFyeUNvbnRleHQgPSBzZWNvbmRhcnlDb250ZXh0REw7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CkBAIC0yODcs
MTUgKzI4NywxNSBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcikKICAgICBHcmFwaGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0ID0g
cHJpbWFyeUNvbnRleHRDRzsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7
Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRETChkaXNwbGF5TGlzdCwgeyB9LCBG
bG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRh
cnlDb250ZXh0REwoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAg
IEdyYXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5Q29udGV4dCA9IHNlY29uZGFyeUNvbnRleHRETDsK
IAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNv
bmRhcnlDb250ZXh0KTsKIAogICAgIGN0eC5hcHBseURldmljZVNjYWxlRmFjdG9yKDIpOwogCi0g
ICAgYXV0byBwcmltYXJ5Q1RNID0gcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4
dDo6SW5jbHVkZURldmljZVNjYWxlOjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAg
ICBhdXRvIHNlY29uZGFyeUNUTSA9IHNlY29uZGFyeUNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlOjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsK
KyAgICBhdXRvIHByaW1hcnlDVE0gPSBwcmltYXJ5Q29udGV4dC5nZXRDVE0oKTsKKyAgICBhdXRv
IHNlY29uZGFyeUNUTSA9IHNlY29uZGFyeUNvbnRleHQuZ2V0Q1RNKCk7CiAKICAgICBFWFBFQ1Rf
RVEocHJpbWFyeUNUTS54U2NhbGUoKSwgc2Vjb25kYXJ5Q1RNLnhTY2FsZSgpKTsKICAgICBFWFBF
Q1RfRVEocHJpbWFyeUNUTS55U2NhbGUoKSwgc2Vjb25kYXJ5Q1RNLnlTY2FsZSgpKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRl
eHRUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFw
aGljc0NvbnRleHRUZXN0c0NHLmNwcAppbmRleCAyNDczNTgwZjE5MGUwZmQ2NzRjMzY3ZGE0N2M5
ZjE5MmJhMjQ4NWU0Li4yMTVjMTdjNjY1N2FlZGE2YTZlMmNkMGFlMGM5YzkyNmYzYmQ4MmIwIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvR3JhcGhpY3ND
b250ZXh0VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0dyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCkBAIC01Miw3ICs1Miw3IEBAIFRFU1QoR3Jh
cGhpY3NDb250ZXh0VGVzdHMsIERyYXdOYXRpdmVJbWFnZURvZXNOb3RMZWFrQ29tcG9zaXRlT3Bl
cmF0b3IpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY3R4KGNnQ29udGV4dC5nZXQoKSk7CiAKICAg
ICBFWFBFQ1RfRVEoY3R4LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlT3Zlcik7Ci0gICAgRVhQRUNUX0VRKGN0eC5ibGVuZE1vZGVPcGVyYXRpb24oKSwgQmxl
bmRNb2RlOjpOb3JtYWwpOworICAgIEVYUEVDVF9FUShjdHguYmxlbmRNb2RlKCksIEJsZW5kTW9k
ZTo6Tm9ybWFsKTsKIAogICAgIGF1dG8gZ3JlZW5QaXhlbENHID0gZ3JlZW5JbWFnZSgpOwogICAg
IGF1dG8gZ3JlZW5QaXhlbE5hdGl2ZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoZ3JlZW5QaXhlbENH
LmdldCgpKTsKQEAgLTcxLDcgKzcxLDcgQEAgVEVTVChHcmFwaGljc0NvbnRleHRUZXN0cywgRHJh
d05hdGl2ZUltYWdlRG9lc05vdExlYWtDb21wb3NpdGVPcGVyYXRvcikKICAgICBFWFBFQ1RfRVEo
cHJpbWFyeURhdGFbMl0sIDApOwogCiAgICAgRVhQRUNUX0VRKGN0eC5jb21wb3NpdGVPcGVyYXRp
b24oKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIpOwotICAgIEVYUEVDVF9FUShjdHgu
YmxlbmRNb2RlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICBFWFBFQ1RfRVEo
Y3R4LmJsZW5kTW9kZSgpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1MTc3ZWQ5Mjk4MGRkOGQ0YmE0YmYzYWYzZDE0MTA2YTYy
ZmQ2Yjg3Li40NzQ4ZmY1YmJmYzU0ZTk4ZTkzNTIzMjdmNmMyNmI4NzMyODdkNGRiIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMjItMDMtMTUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91
bGQgYmUgbGF6aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVu
dC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9l
eHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxh
eWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5
bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMi0wMy0x
NCAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbbW9kZWxd
IDxtb2RlbCBpbnRlcmFjdGl2ZT4gZG9lc24ndCBhbGxvdyBtb2RlbCB0byBiZSByb3RhdGVkIG9u
IGlPUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRl
cy1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1p
bmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CmluZGV4IDUxMWI3YzBjNTRkMzMyMTZiN2M2ZWFm
MDQzYTc1YzE2NzY2ZDA0MjcuLmRiZjU0YjNlYTIwNGUxOTI0YmQ0MzVkNTE3MzZkYzczNDc3MDJj
ZmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMt
c2hhZG93LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTEsMTcgKzEsMTMgQEAKIAotKHRyYW5z
bGF0ZQotICAoeCAwLjAwKQotICAoeSAwLjAwKSkKIChzYXZlKQogKHNldC1zdGF0ZQotICAoY2hh
bmdlLWZsYWdzIDUxMikKLSAgKHNoYWRvdy1ibHVyIDEyLjAwKQotICAoc2hhZG93LW9mZnNldCB3
aWR0aD0xMCBoZWlnaHQ9MjApCi0gIChzaGFkb3ctY29sb3IgIzAwMDAwMCkKLSAgKHNoYWRvd3Mt
dXNlLWxlZ2FjeS1yYWRpdXMgMCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QKKyAgKGNoYW5nZS1m
bGFncyBbZHJvcC1zaGFkb3ddKQorICAoZHJvcC1zaGFkb3cKKyAgICAoc2hhZG93LW9mZnNldCB3
aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvdy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ct
Y29sb3IgIzAwMDAwMCkKKyAgICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkpCisoZmls
bC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDUwLDUwKSBzaXplIDEwMHgxMDApCi0gIChj
b2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJs
ZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCisgIChjb2xv
ciAjMDAwMEZGKSBleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAocmVzdG9yZSkKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNm
b3Jtcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1
ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDM4NmUzOTQxMTg1ZjA5YTNjNjhlYzZj
MmFlODhkZjExYzcwYjBhNjkuLjVmNzhiOGMzNTA1YzllODAzOTliZDYwNWE5YmU5NTVhYjA5Yjcw
NWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMt
dHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4
dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMSwyMSArMSwxNCBAQAog
Ci0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0gICh5IDIyLjAwKSkKLShjb25jYXRlbnRhdGUtY3Rt
Ci0gIChjdG0ge209KCgwLjg3LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwtMTguMzApfSkp
CiAoc2F2ZSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyA1MTIpCi0gIChzaGFkb3ctYmx1
ciAxMi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93
LWNvbG9yICMwMDAwMDApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQotKGZpbGwt
Y29tcG9zaXRlZC1yZWN0CisgIChjaGFuZ2UtZmxhZ3MgW2N0bSwgZHJvcC1zaGFkb3ddKQorICAo
Y3RtIHttPSgoMC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAsMy43MCl9KQorICAoZHJv
cC1zaGFkb3cKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNo
YWRvdy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ctY29sb3IgIzAwMDAwMCkKKyAgICAoc2hhZG93
cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkpCisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3Qg
YXQgKDAsMCkgc2l6ZSAxMDB4MTAwKQotICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1v
cGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg3
LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKKyAgKGNvbG9yICMwMDAwRkYpIGV4dGVudCBh
dCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAocmVzdG9yZSkKLShzZXQtY3RtCi0g
IChzZXQtY3RtIHttPSgoMS4wMCwwLjAwKSgwLjAwLDEuMDApKSB0PSgwLjAwLDIyLjAwKX0pKQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1l
eHBlY3RlZC50eHQKaW5kZXggYmMxN2I1MTE0OTlmODI1NmM5OTI5MGRhZTg2MTRkNDg5NGNhZjlj
Yy4uNTQ2ZGM0OTEyZjUyZDAzYTg5YWQ5MDY4NTcyYjI4ZWRjODAzMjI1MyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQu
dHh0CkBAIC0xLDE2ICsxLDEyIEBACiAKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4w
MCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QKKyhmaWxsLXJlY3Qtd2l0aC1jb2xvcgogICAocmVj
dCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCi0gIChjb2xvciAjMDA4MDAwKQotICAoY29tcG9zaXRl
LW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQg
KDAsMCkgc2l6ZSAxMDR4MTA0KQorICAoY29sb3IgIzAwODAwMCkgZXh0ZW50IGF0ICgwLDApIHNp
emUgMTA0eDEwNCkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAzMjk2MCkKLSAgKGZpbGwt
Y29sb3IgIzAwMDBGRikKLSAgKHN0cm9rZS1zdHlsZSAwKQorICAoY2hhbmdlLWZsYWdzIFtmaWxs
LWJydXNoLCBzdHJva2Utc3R5bGUsIHNob3VsZC1hbnRpYWxpYXNdKQorICAoZmlsbC1icnVzaAor
ICAgIChjb2xvciAjMDAwMEZGKSkKKyAgKHN0cm9rZS1zdHlsZSBOTy1TVFJPS0UpCiAgIChzaG91
bGQtYW50aWFsaWFzIDApKQogKGRyYXctcmVjdAogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgy
KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBw
ZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNr
aXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAppbmRleCBiYjU5M2QyMGY2ZGE2NDg2MjkyZDM2
YzAyMjBlMmE5ZDg3MmY4MmI5Li5iODYwNDhjYzA4Yzk5MzdlZjAwNzgyZTcxMDg5Y2FjYmM5OWM1
MzMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xp
cHBlZC1yZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVw
bGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtMSwxNiArMSw4IEBACiByZWNv
cmRlZDoKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCi0oZmlsbC1jb21wb3Np
dGVkLXJlY3QKKyhmaWxsLXJlY3Qtd2l0aC1jb2xvcgogICAocmVjdCBhdCAoNDEyLDApIHNpemUg
MTAweDEwMCkKLSAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJj
ZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAw
eDEwMCkKKyAgKGNvbG9yICMwMDAwRkYpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkK
IAogcmVwbGF5ZWQ6CiAoCiAgIChjbGlwIGF0ICg1MTIsMCkgc2l6ZSA1MTJ4MjAwKQotKHRyYW5z
bGF0ZQotICAoeCAwLjAwKQotICAoeSAwLjAwKSkK
</data>
<flag name="commit-queue"
          id="482537"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454785</attachid>
            <date>2022-03-15 18:53:35 -0700</date>
            <delta_ts>2022-03-15 21:45:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220315185334.patch</filename>
            <type>text/plain</type>
            <size>672906</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uNjcwMTcwMzVhMjgzZWVkMzkzM2Y2OTQzNGI5YWI3
NmU2ZTczMTUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1NSBAQAorMjAyMi0wMy0xNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
QXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZy
b21QYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25Q
YWludGVyOjpwYWludEJveFNoYWRvdyBjb25zdCk6CisgICAgICAgICogaHRtbC9DdXN0b21QYWlu
dEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0
VW5jaGVja2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3TGF5b3V0U3RpcHBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdMYXlvdXRIYXRjaGluZyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c2V0SXNDQUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Up
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5h
bExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlw
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
QmlkaVRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRHJhd0dseXBoc1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRlY29uc3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkaWRBcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNjYWxlRmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGly
ZWN0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5n
ZXNGcm9tU3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQ
YXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbFBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdl
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnRE
ZXRlY3RlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENv
bnRlbnRmdWxQYWludERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVy
Z2VTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJn
ZVN0YXRlRGlmZnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNm
b3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6bGluZURhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmxpbmVKb2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptaXRlckxpbWl0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU1vZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb21wb3NpdGVPcGVyYXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpibGVuZE1vZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJvcFNoYWRvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd09mZnNldCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dDb2xvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyb3BTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1Zpc2libGVTaGFkb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNCbHVycmVkU2hhZG93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzU2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWxwaGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkQW50aWFsaWFz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50
aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU21vb3Ro
Rm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91
bGRTbW9vdGhGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3THVtaW5hbmNlTWFz
ayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyYXdMdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dXNlRGFya0Fw
cGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRV
c2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojppc0luVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5h
bExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXND
QUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ0FM
YXllckNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJT
Y29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpiZWdpbkxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3Bl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNz
Q29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lcjo6fkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25s
eVByaW1pdGl2ZUNoYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bWVyZ2VEaWZmcyk6CisgICAgICAgIChXZWJDb3JlOjpzdGF0ZUNoYW5nZU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmR1bXAgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmNoYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmRpZEFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6ZmlsbEJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmZpbGxSdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VUaGlja25lc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZVN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUNhcCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUNh
cCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZURhc2ggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5lSm9pbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUpvaW4p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1pdGVyTGltaXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldE1pdGVyTGlt
aXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNvbXBvc2l0ZU1v
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENv
bXBvc2l0ZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRy
b3BTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRUZXh0RHJhd2luZ01vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3VsZEFudGlhbGlhcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxk
QW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91
bGRTbW9vdGhGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0U2hvdWxkU21vb3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXREcmF3THVtaW5hbmNlTWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6dXNlRGFya0FwcGVhcmFuY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFVzZURh
cmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkZWNv
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
OjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6YmVnaW5MYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjp+VHJhbnNwYXJlbmN5
TGF5ZXJTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNr
Q2hlY2tlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXI6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
TW9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVEYXNoOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJvcFNoYWRvdzo6aXNCbHVycmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
b3BTaGFkb3c6Omhhc091dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRv
dzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmRlY29kZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6TnVsbEdyYXBoaWNzQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1
enouY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJydXNoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6U291
cmNlQnJ1c2gpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3Jt
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpncmFkaWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6cGF0dGVybiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQnJ1c2g6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpicnVzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmlzUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNo
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UZXh0Qm94SXRlcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvZmZzZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjppbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveEl0ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmN1cnJlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0
ZXJhdG9yOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJh
dG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3UGF0aFNo
YWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd0dseXBoc1NoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpTdGF0ZTo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpGaWxsU291
cmNlOjpGaWxsU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdHJva2VTb3VyY2U6
OlN0cm9rZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGU6OlNo
YWRvd1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZTo6aXNSZXF1
aXJlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUNhcCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fp
cm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1BsYXRm
b3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZp
bGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGlj
c0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlw
aHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0Zv
clRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0Q1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2Fw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNS
ZWNvcmRlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpD
R0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2
ZXI6On5DR0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0
YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZl
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250
ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3aW5n
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5k
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lQ2FwKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENHTGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q0dTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5
U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJv
a2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGlu
ZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseURl
dmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpm
aWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tl
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2FuVXNlU2hh
ZG93Qmx1ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9pbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6Q0dDb250ZXh0U3Rh
dGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVy
Ojp+Q0dDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29u
dGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dD
b250ZXh0U3RhdGVTYXZlcjo6ZGlkU2F2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6c3Ryb2tlQ29udGFpbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJlZ2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3SW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250KToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFs
Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6
OmNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlRmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVDVE0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93SXNDbGVhcmVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6
OnNhZmVDb3B5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6c2l6ZU9mSXRlbUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Omlz
RHJhd2luZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzSW5saW5lSXRl
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Rh
dGU6OlNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFp
bnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xh
dGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSb3RhdGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTY2FsZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldENUTTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6YXBwbHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjph
cHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZUpvaW46OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRNaXRlckxpbWl0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlOjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSb3VuZGVkUmVjdDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjphbmdsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YW1vdW50IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjp0cmFu
c2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNv
bmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
c3RhdGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXA6OmxpbmVDYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRhc2hBcnJheSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6
OmRhc2hPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVEYXNoOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxpbmVKb2luIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxp
bWl0OjpTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRNaXRlckxpbWl0OjptaXRlckxpbWl0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVk
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBv
c2l0ZWRSZWN0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbXBvc2l0ZU9w
ZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpnbG9iYWxCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRS
ZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6UmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Om1fZHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjphcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZv
ck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ds
eXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6On5SZWNvcmRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Y29udGFpbnNPbmx5SW5saW5lU3RhdGVD
aGFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
b25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3Rt
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6Q29udGV4dFN0YXRlOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpD
b250ZXh0U3RhdGU6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZWNvcmREcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRT
dGF0ZTo6Q29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjbG9uZUZvclNhdmUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6
OmNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZVN0YWNrIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6UmVjb3JkZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZEZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3Vy
dmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
U3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBs
OjpyZWNvcmRTdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERy
YXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1l
Rm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6ZXh0ZW50RnJvbUxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6On5SZWNvcmRlckltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkVHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRT
Y2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmRTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRNaXRlckxpbWl0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZENsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpSZWNv
cmRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjphcHBseVNldFN0YXRlSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2
ZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0b3JlKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFu
Z2VzKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Y2xpcCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwT3V0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNs
aXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGlu
ZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0Q1RNKTog
RGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpn
ZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09w
ZXJhdGlvblJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdH
bHlwaHNSZWNvcmRlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFk
b3dGb3JCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGRJbm5lclNoYWRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5n
L1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VTdHJva2VTdHlsZVRvRmlsbCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZTo6ZHJhdyk6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3Qg
YWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZDljYzNjNGZlNjll
OGJjZTVlMDFjODlhZjRkMDdjNzVhYzgwYzNlNi4uZTE2MmJlOGJmMTJiMzA4ZDA3MTIxZDg0OWQ0
YTczMzc4NDRmZTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAyMi0wMy0xNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRTdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5z
bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpz
ZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdCk6IERl
bGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBs
eURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0
aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1Jl
Y3RzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0dseXBocyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjptX3JlbmRlcmluZ0JhY2tlbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0
ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZURhc2gpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclNoYWRv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6c2VuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6CisK
IDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUg
cm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA2YmUwNjRlMzgz
ODkzN2ZkZTVlODUyODY5NWY0MTQwYzJkODNiMmRhLi44ODEzYmNkMWUxYmVhMzNmZTVkOTBhZTdk
NjY3NzhiMjdhYTdkMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjItMDMtMTUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6
aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJW
aWV3OjpwYWludEludG9CYWNraW5nU3RvcmUpOgorCiAyMDIyLTAzLTA0ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSG9tZSBsaW5rIG9uIHdlYXRoZXIuZ292IGlz
IG5vdCB3b3JraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA3MzY0NDJhMDhhNzQ1MDBhMzUyZjA0
YzJlMTA2ZDhjNDFlN2E0ZmM1Li5lMzdjNDg2ZDg1OTczOTQwZTVlNTc3N2MxOTZlYjkyYjdkMGIw
Y2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0OTEsNiArMTQ5MSw4IEBAIHNldChXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyQ2xpZW50LmgKQEAgLTE1NTAsNiArMTU1Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUF1ZGlvVHJh
Y2tDb25maWd1cmF0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUNvbG9yU3Bh
Y2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
LmgKQEAgLTE1NjgsNiArMTU3MSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hvdWxkTG9j
YWxpemVBeGlzTmFtZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Tb3VyY2VJbWFnZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA2
MmQ0M2U2YTNhOTMyMTVmZjA3NTdhNDc4ODRhOGI2Yzg0NGI4OTZkLi5kMDU2NWJlYzkyMWYwY2Q5
MTVlNDg4NWZkZjZiYTMyYTNhNmJkM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTE1Niw2ICsxNTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJl
ZUhvc3RDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW4uaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JTcGFjZUNHLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNWRlZTc1
NDA1MzU3OWY1NWI1NWYyZmU0YWQwZGQwYTY5ZGViZmQ0YS4uZTRmNjI3MTkwY2M4OWJlODZkMDY5
ODFmMzFkMDEzMzY1OTJlOTY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTY0MCw2
ICs2NDAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViVmlkZW9Db250YWluZXJMYXllci5oCiAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQ
b29sLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggNWM3YjczZWIyMDVlMDllYzI0NmUwMTFkMGE1MDJkY2Q0
YzFkY2E1MC4uZWI3NmExODZkMzQ4ZDRiMzY4OWYyMzRmM2RiZjYyODJhYWFkZTA1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTIwNDUsNiArMjA0NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcApAQCAtMjA4NCw2
ICsyMDg1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3Qu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnJ1c2guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9T
dHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggODI5NjJiYTA0ZTJmZmQ3ZmZhMGM2ZTYxZDljOWMyYzE3
YTVmNjQ2Ny4uYjU1YzVjMWM0MmUzMjk1NTcwZWQyNGM4NDBkYzNlNGYyZmQzMDJlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MjMzMSwxMCArMjMzMSwxMiBAQAogCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGMDVGODAyNTEyNDQy
RTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NT
UHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MUZDQjE3MDI3QkFCM0ZFMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQ0Ix
NkQyN0JBQjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAxNzgzQjI3RDU3RjlGMDA5QkVC
MUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0
YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZC
QTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVF
NTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMUI0OTc0MjUxMkJBM0IwMEZF
OUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1h
cEJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMw
QjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNDYwREQ3MjdDODZEQUQwMEQ1RjlG
NCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI0Njk2M0IyNzVDNUZBNjAwQTkxNTZBIC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1M0ZCODMyMTNCMUJCODAwQzQw
RDM0IC8qIENTU0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyNDY5NjNEMjc1QzYxNDQwMEE5MTU2QSAvKiBGaWx0ZXJFZmZlY3RWZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMTRC
OUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRTI3NUM2MTY3MDBB
OTE1NkEgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjRFRjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBGaWx0ZXJJbWFn
ZVZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yMzQyLDYgKzIzNDQsOSBAQAogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgwRDg0
MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIg
LyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI1NjA3OEUyNzlEMzRCNjAwN0QyREQzIC8qIEZF
SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
RjdFNzRGMjc5Q0VERTgwMEQ4MkQyRCAvKiBGRUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8q
IFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkIzNTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NTI3Q0RBODBF
MDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcyNkNERTIwMjc1OTczNTAwMEE0NDVCMiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NjYxQTIyNzU5NjBB
NTAwRTdERjlCIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8q
IFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNB
RTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1h
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTEzMTgsNiArMTEzMjMsOCBAQAogCQk3MUZDQjE2RDI3QkFCM0RGMDBFMDYzMUMgLyogRnJhbWVS
YXRlQWxpZ25lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZVJhdGVB
bGlnbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkNCMTZGMjdCQUIzRTAw
MEUwNjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZyYW1lUmF0ZUFsaWduZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2lu
dHMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFC
IC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0dDb250ZXh0U3RhdGVT
YXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjA2RDQzNTI3REFERUNBMDA0
MEZFQjIgLyogVGV4dEJveEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hJdGVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjExQjVENjI3NjUzNjgyMDA3NkZF
RjggLyogRmlsdGVyUmVzdWx0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBT
VkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1
ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENB
RDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVl
UHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzI3LDYgKzExMzM0
LDggQEAKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXJJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
NDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRN
aW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRN
aW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0
MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0
RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTM4OSw2ICsxMTM5OCwxMCBAQAogCQk3MkExM0FENTI3NERFNTRFMDBFMkE4OEUgLyog
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQWxwaGFT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBMTNBRDYy
NzRERTU3ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQTEzQUQ3Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VH
cmFwaGljU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0
d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEMyN0M5
RjkzRTAwRDI3QUUwIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQjM1MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUJydXNoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNvdXJjZUJydXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQjRFRjc0Mjc0RTIzMzMwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJCNEVGNzUyNzRFMjMzNDAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2Fy
ZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjdDMjc0RUUzN0YwMDI5M0My
RiAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZVZlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4MTAsNiArMjg4MjMsNyBAQAog
CQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0Nv
bnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENv
bG9yQ0cuY3BwICovLAogCQkJCUJDQUZFREIzMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNl
Q0cuY3BwICovLAogCQkJCUJDQUZFREIyMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cu
aCAqLywKQEAgLTI5MDQzLDYgKzI5MDU3LDkgQEAKIAkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlE
MDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRB
NDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAq
LywKIAkJCQk3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oICovLAorCQkJCTcyNDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZS5jcHAgKi8sCisJCQkJNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi8sCisJCQkJNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyog
R3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5IC8qIEdy
YXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhp
Y3NMYXllckNsaWVudC5oICovLApAQCAtMjkxNDMsNiArMjkxNjAsNyBAQAogCQkJCUJDQTU1OTEy
MjYzREJENzkwMDdGMTlCMyAvKiBQaXhlbEZvcm1hdC5oICovLAogCQkJCUNERDA4QUJGMjc3RTU0
RjAwMEVBMzc1NSAvKiBQbGF0Zm9ybUF1ZGlvVHJhY2tDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJ
QkMzRTYyNDIyNjU5NzkxNzAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oICovLAorCQkJ
CTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICov
LAogCQkJCTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJ
CQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywK
IAkJCQk1NTA2NDBBRDI0MDc1NkRBMDBBQUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tl
bmQuaCAqLywKQEAgLTI5MTY2LDYgKzI5MTg0LDggQEAKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAw
RDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkw
IC8qIFNoYWRvd0JsdXIuaCAqLywKIAkJCQkxQzREQjAyNDI3MzM5RTVFMDA3QjBBRDEgLyogU2hv
dWxkTG9jYWxpemVBeGlzTmFtZXMuaCAqLywKKwkJCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAg
LyogU291cmNlQnJ1c2guY3BwICovLAorCQkJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBT
b3VyY2VCcnVzaC5oICovLAogCQkJCTFERDEyN0FDMjU2RTNBODcwMEIyMjdENyAvKiBTb3VyY2VC
dWZmZXJQcml2YXRlLmNwcCAqLywKIAkJCQlDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291
cmNlQnVmZmVyUHJpdmF0ZS5oICovLAogCQkJCUNEQzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi8sCkBAIC0yOTE3Nyw2ICsyOTE5Nyw3IEBACiAJ
CQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVy
YXRvci5oICovLAogCQkJCTk1RTlGNDQ0MjdDOUEzOUIwMDk0NTMzNyAvKiBTeXN0ZW1JbWFnZS5o
ICovLAogCQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCisJCQkJ
NzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovLAogCQkJCTM3
NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLywKIAkJCQlBODI0QjQ2NDBF
MkVGMkVBMDA4MUE3QjcgLyogVGV4dFJ1bi5oICovLAogCQkJCUNEMUU3MzQ2MTY3QkM3OEUwMDlB
ODg1RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAgKi8sCkBAIC0zMzg3Myw2ICszMzg5
NCw3IEBACiAJCQkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRl
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8qIENl
cnRpZmljYXRlU3VtbWFyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5RjAw
OUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZG
RDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNzg1RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5lbENv
dW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDc5OCw2ICszNDgyMCw4IEBACiAJCQkJNDlD
N0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Qjk1Q0ZFQjI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAw
RTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUw
RjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzY3MDUsNiArMzY3MjksNyBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0
Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjU4MTg1NTI3Q0RBODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQ
bGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc3MDVDNzI1NTI3NkNEMDAxRDBD
OTQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQUYy
NDA3NTgyRDAwQUFFMDQ1IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM3Mzg2LDYgKzM3NDExLDcgQEAKIAkJCQk1MTBENEEzODEwMzE2NUVFMDA0OUVB
NTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFC
QUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1c2gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTY1MTdBOUQwMUIwMDI3NEU0MiAvKiBT
b3VyY2VCdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYxMzUwOTI0QzlGQ0EzMDA0
MzJFMUUgLyogU291cmNlQnVmZmVyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50
ZXIuY3BwCmluZGV4IDg1NmEzZGU1MDRkZWMwYmJmYTkwYWMxN2RlMzdmNTE1ZTE0ZDkyMDQuLjlk
OTM1YTZmZjMyMzBmM2Y0NmEyZWY1ZDdlYTEwMDEwYWU5ZTEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVy
LmNwcApAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVG
cm9tUGF0aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICAgICAg
ICAgIERhc2hBcnJheSBsaW5lRGFzaDsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNo
TGVuZ3RoKTsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hM
ZW5ndGgpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2go
eyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVz
IHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgQm94RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250
ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdpbiA9IGZpbGxSZWN0LnJlY3Qo
KS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBhdXRvIGFkanVzdGVkU2hhZG93
T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0
aW9uKCk7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVz
dGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNo
YWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldERyb3BTaGFkb3coeyBhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVl
KCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAKICAgICAg
ICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBv
cGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBz
byBzYXZlcyB0aW1lCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWlu
dGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hh
ZAogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQp
OwogICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZh
bHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNo
YWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVm
YXVsdCB9KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsK
ICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAppbmRleCBm
NGI5OGJhNjJlMTE5YTA3NzEzMTJkM2I4OGM0OTE5MzY4MzZlZTM3Li5lZTUwNGYwOGM0OWZjOGQ1
YjVhZWQ3MDJiZTIxN2YxYjA2ZmQ0ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRJbWFnZS5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFp
bnRJbWFnZTo6ZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjbwog
SW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RD
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUo
eyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAg
ICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRl
KGRlc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVj
dC5zaXplKCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKIAogICAgIC8vIEZhY3RvciBp
biB0aGUgZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0
IHJlc29sdXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29u
dGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRD
VE0oKTsKICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7
CiAgICAgZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAg
IEFmZmluZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCAwZTc4MDYzZTNhNDFjYmM2OTBmMGQwY2NiNzg4MTE3
ZGU2OTM4YTAyLi5kYmM5NTdjNTNkMDRhMzk2ZWFjNjRkNjdmZTZhMmIxN2U0NDhjNjYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcApAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCgpIGNvbnN0CiAgICAgRGFzaEFycmF5IGNv
bnZlcnRlZExpbmVEYXNoKHN0YXRlKCkubGluZURhc2guc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRlKCkubGluZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbnZl
cnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4oc3RhdGUoKS5s
aW5lRGFzaFtpXSk7Ci0gICAgYy0+c2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRl
KCkubGluZURhc2hPZmZzZXQpOworICAgIGMtPnNldExpbmVEYXNoKHsgV1RGTW92ZShjb252ZXJ0
ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KSB9
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxBbHBo
YShkb3VibGUgYWxwaGEpCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBv
cGUKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICgh
YykKICAgICAgICAgcmV0dXJuOwotICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxl
bmRNb2RlKTsKKyAgICBjLT5zZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzY2FsZShkb3VibGUgc3gsIGRv
dWJsZSBzeSkKQEAgLTExODYsNyArMTE4Niw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZG91CiAg
ICAgICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50
PihsaW5lRGFzaFtpXSk7Ci0gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goY29udmVydGVkTGlu
ZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICAgICAgY29udGV4dC5zZXRMaW5lRGFz
aCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUu
bGluZURhc2hPZmZzZXQpIH0pOwogICAgIH0pOwogfQogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChkb3VibGUgeCwgZG91
YmxlIHksIGRvdWJsZSB3aWR0aCwgZAogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAg
ICAgICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBj
b250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBjb250ZXh0LT5zZXREcm9wU2hh
ZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRp
dXNNb2RlOjpMZWdhY3kgfSk7CiAgICAgfQogICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9
IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTM2Myw5ICsxMzYzLDkgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3Vs
ZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09m
ZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNl
dC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdo
dCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRTaGFk
b3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kpOworICAgICAgICBjLT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAs
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiB9
CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3Mo
KSBjb25zdApAQCAtMjQzMiwxOSArMjQzMiwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGRvdQog
CiAgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0KDAsIDIgKiBtYXNrUmVjdC5oZWlnaHQoKSk7
CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBmbG9h
dCBzaGFkb3dSYWRpdXM7Ci0gICAgICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICAgICAg
ICAgIGMtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3Ip
OwotCiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChtYXNrUmVjdCk7Ci0gICAgICAg
ICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hhZG93UmFkaXVzICogMS40KTsKLSAgICAgICAgICAg
IHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQgKiAtMSk7CisgICAgICAgICAgICBhdXRvIGRy
b3BTaGFkb3cgPSBjLT5kcm9wU2hhZG93KCk7CisKKyAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5m
bGF0ZShkcm9wU2hhZG93LmJsdXJSYWRpdXMgKiAxLjQpOworICAgICAgICAgICAgc2hhZG93UmVj
dC5tb3ZlKGRyb3BTaGFkb3cub2Zmc2V0ICogLTEpOwogICAgICAgICAgICAgYy0+Y2xpcChzaGFk
b3dSZWN0KTsKIAotICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKKyAgICAgICAg
ICAgIGRyb3BTaGFkb3cub2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgICAgIGMtPnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7
CiAKICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xv
cihDb2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXkuY3BwCmluZGV4IDRmNjNhZGNlOTM5MTZkYjIzMjBlOTY3OGFhYmZlMGYzY2Q5OTc2MmIu
LjlhODAzYTQwOGQ4OGMyZmY0OGRkM2JlYTAyOTUxYjg3NTgwOThlMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTEyNDQsNyArMTI0NCw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRTdGlwcGxpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAg
ICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAg
IGNvbnRleHQuc2V0TGluZURhc2goeyAxLCBkZW5zaXR5IH0sIDEpOworICAgIGNvbnRleHQuc2V0
TGluZURhc2goeyB7IDEsIGRlbnNpdHkgfSwgMSB9KTsKIAogICAgIGRyYXdMYXlvdXRQYXR0ZXJu
KGNvbnRleHQsIHF1YWQsIGRlbnNpdHksIEZsaXA6Ok5vKTsKIH0KQEAgLTEyNTQsNyArMTI1NCw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHNhdmVyKGNvbnRleHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNSk7CiAg
ICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlKTsKLSAg
ICBjb250ZXh0LnNldExpbmVEYXNoKHsgMiwgMiB9LCAyKTsKKyAgICBjb250ZXh0LnNldExpbmVE
YXNoKHsgeyAyLCAyIH0sIDIgfSk7CiAKICAgICBjb25zdGV4cHIgYXV0byBkZWZhdWx0TGF5b3V0
SGF0Y2hTcGFjaW5nID0gMTI7CiAgICAgZHJhd0xheW91dFBhdHRlcm4oY29udGV4dCwgcXVhZCwg
ZGVmYXVsdExheW91dEhhdGNoU3BhY2luZywgZmxpcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKaW5kZXggYjU4OGY2ZmE0YTExZDc3MGMzYzg0OTk5NjcyZDdkN2VmZjQzMmM0Zi4uOGExN2Fl
MzcwYWUzNmIwMGViYjdhOWIyZTA3NTUxODA2YmVkMTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcApAQCAtNDMwMyw3ICs0MzAzLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXQKICAg
ICBpZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwog
Ci0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGZyYW1lUmVjdCgpLCBwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRlbnRzKCkuCiAgICAgICAgIHBhaW50
Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50Vmlz
aWJsZVJlY3QpKTsKQEAgLTQ4NTQsNyArNDg1NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQ
YWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0
CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgot
ICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29u
dGV4dChmcmFtZVJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAKaW5kZXggZGM2MGU3
NWIyOTViYzUzYTU5YTQ3MDJhMTk5ODdjMDNhMTFmOTVhMS4uYWM5MDkxMTM3M2FmZTVmNjI2OTc1
NDA2YmNjYzM4MzUwZDlkMzQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fk
d2FpdGEvVGhlbWVBZHdhaXRhLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgVGhlbWVBZHdh
aXRhOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBQ
YXRoJiBwYXRoCiAKICAgICBncmFwaGljc0NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihj
b2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNr
bmVzcyhmb2N1c0xpbmVXaWR0aCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsg
Zm9jdXNMaW5lV2lkdGgsIDIgKiBmb2N1c0xpbmVXaWR0aCB9LCAwKTsKKyAgICBncmFwaGljc0Nv
bnRleHQuc2V0TGluZURhc2goeyB7IGZvY3VzTGluZVdpZHRoLCAyICogZm9jdXNMaW5lV2lkdGgg
fSwgMCB9KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZUNhcChMaW5lQ2FwOjpTcXVhcmUp
OwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lSm9pbihMaW5lSm9pbjo6TWl0ZXIpOwogICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xvci5vcGFxdWVDb2xvcigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOWZkMjVkODBhZDEyZGM5MWRkMTFmOTE1OThm
YzZjOGVmYTRjYjJhMi4uMjg5NTc0YjljMWU0MGNkNzEyYjRlMmI2ZTllYjM0YjAxNzI5ZGZjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTI5LDcgKzI5LDggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0LCBHcmFwaGljc0NvbnRl
eHQmIHNlY29uZGFyeUNvbnRleHQpCi0gICAgOiBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250
ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KHByaW1hcnlDb250ZXh0LmNsaXBCb3VuZHMoKSwg
eyB9LCBwcmltYXJ5Q29udGV4dC5nZXRDVE0oKSkKKyAgICAsIG1fcHJpbWFyeUNvbnRleHQocHJp
bWFyeUNvbnRleHQpCiAgICAgLCBtX3NlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5Q29udGV4dCkK
IHsKIH0KQEAgLTQ4LDYgKzQ5LDMwIEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBt
X3ByaW1hcnlDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogfQogCisjaWYgVVNFKENHKQorYm9v
bCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Cit9CisKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlz
Q0FMYXllckNvbnRleHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250
ZXh0KGlzQ0FMYXllckNvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJc0NBTGF5
ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRl
eHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0Fj
Y2VsZXJhdGVkQ29udGV4dCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKK30KKyNlbmRpZgorCitSZW5kZXJpbmdN
b2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKK30KKwogdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKIHsKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgbm90IHVzaW5nIHRoZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0J3Mgc3RhdGUgc3RhY2sg
YXQgYWxsLApAQCAtNjQsMjIgKzg5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQb2lu
dCYgdG8pCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9
CiAKICNpZiBVU0UoQ0cpCkBAIC05NiwyMiArMTA5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCiB9CiAjZW5kaWYKIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRy
YXdQYXRoKHBhdGgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChw
YXRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IGZhY3RvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9wcmltYXJ5Q29u
dGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBA
IC0xMjYsMjIyICsxMjcsMTI2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBs
eURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0
KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUmVjdChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3RJ
bXBsKHJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
SW1wbChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIG1fcHJpbWFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5jbGVhclJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLSNp
ZiBVU0UoQ0cpCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNv
bnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRl
eHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLX0KLQotYm9vbCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Ci19Ci0KLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOwotfQotI2VuZGlm
Ci0KLVJlbmRlcmluZ01vZGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9k
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgp
OwotfQotCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKICAgICBtX3By
aW1hcnlDb250ZXh0LmNsaXAocmVjdCk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXAocmVj
dCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3By
aW1hcnlDb250ZXh0LmNsaXBPdXQocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBP
dXQocGF0aCk7Ci19Ci0KIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7CisgICAgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlw
UGF0aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBQYXRoKHBh
dGgsIHdpbmRSdWxlKTsKIH0KIAotSW50UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5jbGlwQm91
bmRzKCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZUNh
cChsaW5lQ2FwKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZUNhcChsaW5lQ2FwKTsK
KyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXQocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmNsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9m
ZnNldCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFz
aE9mZnNldCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQuc2V0TGluZUpvaW4obGluZUpvaW4pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRM
aW5lSm9pbihsaW5lSm9pbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZl
cihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxp
bWl0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRl
ckxpbWl0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0
KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFy
eUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwg
c2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKG5hdGl2ZUltYWdlLCBzZWxmU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCk7Cisg
ICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1J
bWFnZSwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVj
dChyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5h
dGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdHRlcm4obmF0
aXZlSW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgZ3Jh
ZGllbnQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBncmFkaWVudCk7
CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtX3ByaW1hcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGlu
YXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1h
cnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CiB9CiAKLUltYWdlRHJhd1Jlc3Vs
dCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2Uo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91
bmRlZEhvbGVSZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi1JbWFnZURy
YXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBo
UnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29u
dGV4dC5kcmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxl
RmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9y
LCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZmlsbEVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwotICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZmlsbFBhdGgocGF0aCk7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5z
Y2FsZShzY2FsZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNjYWxlKHNjYWxlKTsKKyAgICBt
X3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5yb3RhdGUoYW5n
bGVJblJhZGlhbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yb3RhdGUoYW5nbGVJblJhZGlh
bnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQog
ewotICAgIG1fcHJpbWFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOwotICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC50cmFuc2xhdGUoeCwgeSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRo
KHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwogfQogCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
bV9wcmltYXJ5Q29udGV4dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwg
Y29uc3QgRmxvYXRQb2ludCYgdG8pCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRDVE0odHJh
bnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZURldmljZVNj
YWxlKSBjb25zdAordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuZ2V0
Q1RNKGluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBz
ZShyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAK
LUZsb2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsK
LSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJv
dW5kaW5nTW9kZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM3
MCwyOSArMjc1LDU0IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvCiB9CiAjZW5kaWYKIAotRmxv
YXRTaXplIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKK3ZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhdXRvIHNpemUgPSBtX3By
aW1hcnlDb250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgZnJvbSwg
dG8pOwotICAgIHJldHVybiBzaXplOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVy
JiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIGZpbHRlclJlc3VsdHMpCiB7Ci0gICAgbV9wcmltYXJ5
Q29udGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9p
bnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3Vy
Y2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291
cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBj
YXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiB0bykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RW1waGFz
aXNNYXJrcyhjYXNjYWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdFbXBoYXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQs
IGZyb20sIHRvKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Jp
ZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3Qmlk
aVRleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVt
SW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihp
bWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJ
bWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5k
cmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0
ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5w
YWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CisgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQpAQCAtNDA3LDE2ICszMzcsOSBA
QCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LAogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIG1hcmtlclN0eWxlKTsKIH0KIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVy
bCwgcmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0
KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZv
clJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0CiB7
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0
KTsKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsK
IH0KIAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKQEAgLTQyNSwx
OCArMzQ4LDE2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QKICAgICBtX3NlY29uZGFyeUNvbnRl
eHQuYWRkRGVzdGluYXRpb25BdFBvaW50KG5hbWUsIHBvaW50KTsKIH0KIAotYm9vbCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAordm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFy
eUNvbnRleHQuc3VwcG9ydHNJbnRlcm5hbExpbmtzKCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5z
ZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgLy8gVGhpcyBjYWxscyB1cGRhdGVT
dGF0ZSgpIGluc3RlYWQgb2YgZGlkVXBkYXRlU3RhdGUoKSBzbyB0aGF0IGNoYW5nZXMKLSAgICAv
LyBhcmUgYWxzbyBhcHBsaWVkIHRvIGVhY2ggY29udGV4dCdzIEdyYXBoaWNzQ29udGV4dFN0YXRl
LCBzbyB0aGF0IGNvZGUKLSAgICAvLyBpbnRlcm5hbCB0byB0aGUgY2hpbGQgY29udGV4dHMgdGhh
dCByZWFkcyBmcm9tIHRoZSBzdGF0ZSBnZXRzIHRoZSByaWdodCB2YWx1ZXMuCi0gICAgbV9wcmlt
YXJ5Q29udGV4dC51cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC51cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
VVJMRm9yUmVjdCh1cmwsIHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JS
ZWN0KHVybCwgcmVjdCk7CiB9CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQpAQCAt
NDQ2LDUgKzM2NywxMCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRlcHJlY2F0ZWRQcml2YXRlQ29udAogfQogI2VuZGlmCiAKK0Zs
b2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5n
TW9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dC5oCmluZGV4IGY1OGIzNGM5MTQzNDJiNzM3NzcyN2MxMWE3M2I2ZDgyMThlMTU1NmYuLjdhMzdh
MTEzZGQ4MTVlYjNiOTU2MDc1MmQ5ZGM3MGViNWE4OTdjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0LmgKQEAgLTQzLDgzICs0Myw1NCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdDsKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250
ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJl
c3RvcmUoKSBmaW5hbDsKKyNpZiBVU0UoQ0cpCisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwog
Ci0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25l
c3MgPSAxKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFs
OworI2VuZGlmCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7
CiAKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAg
ICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQogICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
ZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBmYWN0b3IpIGZpbmFsOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpIGZpbmFsOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
IAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwot
Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0KLSNpZiBVU0UoQ0cpCi0g
ICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKCkgY29uc3QgZmluYWw7Ci0KICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6
RXZlbk9kZCkgZmluYWw7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotCiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpIGZpbmFsOwogCi0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBX
aW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7Ci0KLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25z
dCBmaW5hbDsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwot
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgZmluYWw7Ci0KLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9
KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdl
OjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pIGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0g
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91
bmRBbGxTaWRlcykgZmluYWw7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwogCisgICAg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7
CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0
IENvbG9yJikgZmluYWw7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTI3LDIzICs5OCwyNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jiwg
ZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgRmxvYXRT
aXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8g
PSBzdGQ6Om51bGxvcHQpIGZpbmFsOwotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNp
Z25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQp
IGZpbmFsOwotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWw7
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0
ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lm
IEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOworI2VuZGlmCiAKKyAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBm
aW5hbDsKLQogICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZv
clJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAgICB2b2lkIHNl
dERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotCiAgICAgYm9vbCBzdXBwb3J0c0ludGVybmFs
TGlua3MoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIHNldERl
c3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Cisg
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRp
bmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNF
KENBSVJPKQogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXgg
YmI0ZGFjMDE5YzViOWUxM2IxMzdhZTY5NGU0YmY2YjI3NmJmY2MwZC4uMWMxYjk2ZWM1Yjk4M2Nj
NWYxOGQ2ZmYxZmQyNTg1N2ZhOTQzYzQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcApAQCAt
OTAsNyArOTAsNyBAQCB2b2lkIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3Q3Jvc3NmYWRl
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIEltYWdlRHJhd1Jlc3VsdCBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQu
dHJhbnNsYXRlKGRzdFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9
IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAyNWEzZDNmZTg3NzMzMWRkYTM5NTc4MDEx
YjZkODkwZjIxMmM3MmU2Li4zYmNiNTA1YWYzYzI4MmY0MjIzMjVjZDdlMzAwNTM0ZmQ5Zjk5Y2I5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhz
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5
cGhzUmVjb3JkZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDI0ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdy
YWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVy
bi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
U3RhdGUuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CiAKLSNpZiBVU0UoQ09SRV9URVhUKQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KLSNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2lmIFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2Vsc2UKLSNpbmNs
dWRlIDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRmxvYXRQb2ludDsKQEAgLTYyLDc2ICs0OSwzMiBAQCBwdWJsaWM6CiAjaWYgVVNFKENP
UkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKICAgICB2b2lkIGRyYXdOYXRpdmVUZXh0KENURm9u
dFJlZiwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lUmVmLCBDR1JlY3QgbGluZVJlY3QpOwogCi0g
ICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVm
LCBDR1JlY3QpOwotICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYpOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBo
W10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIENHUmVjdCwg
Q0dJbWFnZVJlZik7CisgICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmKTsKKyAg
ICB2b2lkIHJlY29yZEVuZExheWVyKENHR1N0YXRlUmVmKTsKKyAgICB2b2lkIHJlY29yZERyYXdH
bHlwaHMoQ0dHU3RhdGVSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlv
bnNbXSwgc2l6ZV90IGNvdW50KTsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZShDR0dTdGF0ZVJl
ZiwgQ0dSZWN0LCBDR0ltYWdlUmVmKTsKICNlbmRpZgogCi0gICAgRGVjb25zdHJ1Y3REcmF3R2x5
cGhzIGRlY29uc3RydWN0RHJhd0dseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb25zdHJ1Y3RE
cmF3R2x5cGhzOyB9Ci0KIHByaXZhdGU6Ci0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JN
KFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRl
eHQoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25P
VFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFu
Y2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3T1RTVkdSdW4oY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBG
b250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSk7Ci0KLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYpOwotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHByZXBhcmVJbnRlcm5hbENvbnRleHQo
Y29uc3QgRm9udCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGNvbmNsdWRlSW50ZXJu
YWxDb250ZXh0KCk7CisgICAgdm9pZCBzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYsIEZvbnRT
bW9vdGhpbmdNb2RlKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KCk7CisgICAgdm9pZCByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKTsKIAotICAgIHZvaWQgdXBkYXRlRmlsbENv
bG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRy
KTsKLSAgICB2b2lkIHVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0g
bnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRyKTsKLSAgICB2b2lkIHVwZGF0ZUNUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBlbnVtIGNsYXNzIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
IHsKLSAgICAgICAgVW5zcGVjaWZpZWQsCi0gICAgICAgIFllcywKLSAgICAgICAgTm8KLSAgICB9
OwotICAgIHZvaWQgdXBkYXRlU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBm
bG9hdCBzaGFkb3dCbHVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKTsKLQotI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAg
dm9pZCB1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZik7Ci0jZW5kaWYKKyAgICB2b2lkIGRyYXdOb25P
VFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25P
VFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9v
d25lcjsKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fZGVzdGluYXRpb25Db250ZXh0OwogICAgIERl
Y29uc3RydWN0RHJhd0dseXBocyBtX2RlY29uc3RydWN0RHJhd0dseXBoczsKICAgICBEZXJpdmVG
b250RnJvbUNvbnRleHQgbV9kZXJpdmVGb250RnJvbUNvbnRleHQ7CiAKLSNpZiBVU0UoQ09SRV9U
RVhUKSAmJiAhUExBVEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1f
aW50ZXJuYWxDb250ZXh0OwotI2VuZGlmCi0KICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9u
dCB7IG51bGxwdHIgfTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X29yaWdpbmFsVGV4dE1hdHJpeDsKIAotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIHN0cnVj
dCBTdHlsZSB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIFJlZlB0cjxH
cmFkaWVudD4gZ3JhZGllbnQ7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybTsKLSAgICAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuOwotICAg
ICAgICB9OwotICAgICAgICBTdHlsZSBmaWxsU3R5bGU7Ci0gICAgICAgIFN0eWxlIHN0cm9rZVN0
eWxlOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0KLSAgICAgICAgc3RydWN0IFNo
YWRvd1N0YXRlIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAgICAgICAgICBm
bG9hdCBibHVyIHsgMCB9OwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBi
b29sIGlnbm9yZVRyYW5zZm9ybXMgeyBmYWxzZSB9OwotICAgICAgICB9OwotICAgICAgICBTaGFk
b3dTdGF0ZSBzaGFkb3c7Ci0gICAgfTsKLSAgICBTdGF0ZSBtX29yaWdpbmFsU3RhdGU7Ci0gICAg
U3RhdGUgbV9jdXJyZW50U3RhdGU7CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJ
TikKKyAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg1MTgwYWQxMDlmZDgxOGU5
YmIxNTg4Y2U5NjJhYjQ2MzA4MTZhMDkuLjM2MTFiMTJjYTlhYjI5ZWI5MjFmMjMyNWUxZjk2ZDI5
NTI1M2M3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5jcHAKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1bgog
CiBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRD
YXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBj
b25zdAogewotICAgIEFTU0VSVCghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpOworICAgIEFT
U0VSVF9VTlVTRUQoY29udGV4dCwgIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICB1
bnNpZ25lZCBkZXN0aW5hdGlvbiA9IHRvLnZhbHVlX29yKHJ1bi5sZW5ndGgoKSk7CiAgICAgCiAg
ICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRp
YWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTAwMDUwCkBAIC0yMTQsNyArMjE0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0
OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlM
aXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxh
eUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+KCk7Ci0gICAgRGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbCByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9h
dFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpObyk7CisgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRp
bmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pOwogICAgIAogICAg
IEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBo
QnVmZmVyLmluaXRpYWxBZHZhbmNlKCkpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5n
Q29udGV4dCwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1h
Z2UuY3BwCmluZGV4IDY0NTg0ZTVjZmUwMTE4ODJlZmFiMmUyM2MzYTU5NGUxNzgyZjI4OTAuLjJm
ODI3ZjYyNWY2NGI1OWNhMWE2NjQ5NjA3MzBmMDNjMjNiYzM3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCkBAIC00Myw3ICs0
Myw3IEBAIEdyYWRpZW50SW1hZ2U6On5HcmFkaWVudEltYWdlKCkgPSBkZWZhdWx0OwogSW1hZ2VE
cmF3UmVzdWx0IEdyYWRpZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25z
LmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENv
bnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0
LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkp
CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgR3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgbV9ncmFkaWVu
dC0+YWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVk
U3JjUmVjdCwgc3BhY2luZyk7CiAKICAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNv
bnRleHQncyBzY2FsZSB0byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNm
b3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhT
Y2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUg
PSBmYWJzKGRlc3RDb250ZXh0Q1RNLnlTY2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRq
dXN0ZWRQYXR0ZXJuQ1RNID0gcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDBiYjEzNTk3
Y2VhNzM2OWRiYmM2ZTE3MjdmMjZjOTJiOGZiNzUxNzYuLmNmOGM3MThiODEyYzc5NzkxZjJiZTNl
YjdkOGJlOGQ1NWEyYzMzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVy
SW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCkBAIC0zNiw0NzMgKzM1LDMx
MCBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIlN5c3RlbUltYWdlLmgi
Ci0jaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlRleHRCb3hJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBUZXh0Qm94SXRlcmF0b3IgewotcHVibGljOgotICAgIFRleHRCb3hJdGVyYXRvcigpCi0g
ICAgICAgIDogbV90ZXh0UnVuKDApCi0gICAgICAgICwgbV9vZmZzZXQoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVk
IG9mZnNldCkKLSAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKLSAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCi0gICAgewotICAgIH0KLQotICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0K
LSAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+
PSBtX3RleHRSdW4tPmxlbmd0aCgpOyB9Ci0gICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0
dXJuICgqbV90ZXh0UnVuKVttX29mZnNldF07IH0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGly
ZWN0aW9uKGN1cnJlbnQoKSk7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94
SXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09
IG90aGVyLm1fb2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47Ci0gICAgfQot
Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFRl
eHRSdW4qIG1fdGV4dFJ1bjsKLSAgICB1bnNpZ25lZCBtX29mZnNldDsKLX07Ci0KLSNkZWZpbmUg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoZmxhZywgcHJvcGVydHkpIFwKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZykgJiYgKG1fc3Rh
dGUucHJvcGVydHkgIT0gc3RhdGUucHJvcGVydHkpKSBcCi0gICAgICAgIGNoYW5nZUZsYWdzLmFk
ZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZyk7Ci0KLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAs
IHNob3VsZFNtb290aEZvbnRzKHRydWUpCi0gICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHModHJ1ZSkKLSAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotICAgICwgZHJh
d0x1bWluYW5jZU1hc2soZmFsc2UpCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0pCisgICAgOiBtX3N0YXRlKGluaXRpYWxDbGlwLCBjaGFuZ2VGbGFncywgaW5pdGlhbENUTSkK
IHsKIH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6On5HcmFwaGljc0NvbnRleHRTdGF0ZSgpID0g
ZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKSA9IGRlZmF1bHQ7
Ci1HcmFwaGljc0NvbnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0
YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpID0gZGVmYXVsdDsKLQotdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2Vz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRl
eHQoKQogewotICAgIGF1dG8gc3Ryb2tlRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSB9OwotICAgIGlm
IChmbGFncy5jb250YWluc0FueShzdHJva2VGbGFncykpIHsKLSAgICAgICAgc3Ryb2tlQ29sb3Ig
PSBzdGF0ZS5zdHJva2VDb2xvcjsKLSAgICAgICAgc3Ryb2tlR3JhZGllbnQgPSBzdGF0ZS5zdHJv
a2VHcmFkaWVudDsKLSAgICAgICAgc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZVBhdHRlcm47
Ci0gICAgfQotCi0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFn
cy5jb250YWluc0FueShmaWxsRmxhZ3MpKSB7Ci0gICAgICAgIGZpbGxDb2xvciA9IHN0YXRlLmZp
bGxDb2xvcjsKLSAgICAgICAgZmlsbEdyYWRpZW50ID0gc3RhdGUuZmlsbEdyYWRpZW50OwotICAg
ICAgICBmaWxsUGF0dGVybiA9IHN0YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAg
ICAgICBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIHNoYWRvd0Js
dXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwotICAgICAgICBzaGFkb3dDb2xvciA9IHN0YXRlLnNoYWRv
d0NvbG9yOwotICAgICAgICBzaGFkb3dSYWRpdXNNb2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHN0cm9rZVRoaWNrbmVzcyA9IHN0YXRl
LnN0cm9rZVRoaWNrbmVzczsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdGV4dERyYXdpbmdNb2Rl
ID0gc3RhdGUudGV4dERyYXdpbmdNb2RlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHN0cm9rZVN0eWxl
ID0gc3RhdGUuc3Ryb2tlU3R5bGU7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZmlsbFJ1bGUgPSBzdGF0ZS5m
aWxsUnVsZTsKKyAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV90
cmFuc3BhcmVuY3lMYXllckNvdW50KTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBhbHBoYSA9IHN0YXRlLmFs
cGhhOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQoreworICAgIG1fc3RhY2suYXBwZW5k
KG1fc3RhdGUpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkJsZW5kTW9kZUNoYW5nZSB9KSkgewotICAgICAgICBjb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBibGVuZE1vZGUgPSBzdGF0ZS5ibGVuZE1vZGU7
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCit7CisgICAgaWYgKG1fc3RhY2suaXNF
bXB0eSgpKSB7CisgICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxp
YXNDaGFuZ2UpKQotICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBzdGF0ZS5zaG91bGRBbnRpYWxp
YXM7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBtX2xhc3RBcHBsaWVk
U3RhdGUgPSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkU21v
b3RoRm9udHMgPSBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKLQotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKSkKLSAgICAgICAgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc3RhdGUuc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Cisg
ICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0YWNrIGJ1ZmZlciB3aGVu
IGl0IGdvZXMgZW1wdHkuCisgICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkg
c2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5LgorICAgIGlm
IChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGFjay5jbGVhcigpOworfQogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFz
a0NoYW5nZSkpCi0gICAgICAgIGRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWluYW5j
ZU1hc2s7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKQorewor
ICAgIG1fc3RhdGUuZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX2xhc3RBcHBsaWVkU3Rh
dGUgPSBtX3N0YXRlOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAgaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7CitG
bG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIHJldHVybiBGbG9hdFNpemUo
dHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworfQorICAgIAorRmxvYXRT
aXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgYXV0byB0cmFuc2Zvcm1lZERl
c3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOworICAgIHJldHVybiB0cmFuc2Zv
cm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOworfQogCi0jaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAgdXNlRGFya0FwcGVhcmFu
Y2UgPSBzdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsKLSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpCit7CisgICAgKyttX3RyYW5zcGFyZW5j
eUxheWVyQ291bnQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CisgICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3Vu
dCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworfQogCi0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlR3JhZGllbnRDaGFuZ2UsIHN0cm9rZUdyYWRpZW50
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VQYXR0ZXJuQ2hhbmdlLCBz
dHJva2VQYXR0ZXJuKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsR3JhZGll
bnRDaGFuZ2UsIGZpbGxHcmFkaWVudCk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
RmlsbFBhdHRlcm5DaGFuZ2UsIGZpbGxQYXR0ZXJuKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3N0YXRlLmNsaXAocmVjdCk7Cit9
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKQotICAgICAgICAmJiAobV9zdGF0ZS5zaGFkb3dPZmZzZXQgIT0gc3RhdGUu
c2hhZG93T2Zmc2V0Ci0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0JsdXIgIT0gc3RhdGUu
c2hhZG93Qmx1cgotICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dDb2xvciAhPSBzdGF0ZS5z
aGFkb3dDb2xvcikpCi0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSkKK3sKKyAgICBtX3N0YXRlLmNsaXAocGF0aC5mYXN0Qm91bmRp
bmdSZWN0KCkpOworfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BS
T1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4dERyYXdpbmdNb2RlKTsKLSAgICBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xvckNoYW5nZSwgc3Ryb2tlQ29sb3IpOwot
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxDb2xvckNoYW5nZSwgZmlsbENvbG9y
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VTdHlsZUNoYW5nZSwgc3Ry
b2tlU3R5bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdl
LCBmaWxsUnVsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoQWxwaGFDaGFuZ2Us
IGFscGhhKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3Vu
ZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJh
dGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KQotICAg
ICAgICAmJiAobV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciAhPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciB8fCBtX3N0YXRlLmJsZW5kTW9kZSAhPSBzdGF0ZS5ibGVuZE1vZGUpKSB7Ci0gICAgICAg
IGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlKTsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIGlmICghcmVjdC5pc1JvdW5k
ZWQoKSkgeworICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3VsZEFudGlhbGlhc0No
YW5nZSwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShT
aG91bGRTbW9vdGhGb250c0NoYW5nZSwgc2hvdWxkU21vb3RoRm9udHMpOwotICAgIENIRUNLX0ZP
Ul9DSEFOR0VEX1BST1BFUlRZKFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
OwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdl
LCBkcmF3THVtaW5hbmNlTWFzayk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoSW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSwgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7
Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlLCB1c2VEYXJrQXBwZWFyYW5jZSk7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiBjaGFuZ2VGbGFnczsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0
aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBt
X3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3MpOwotCi0gICAgYXV0byBzdHJva2VGbGFn
cyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0cm9rZUZs
YWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoc3Ryb2tlRmxhZ3MpOwotCi0gICAg
YXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShm
aWxsRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShmaWxsRmxhZ3MpOwotCi0g
ICAgYXV0byBjb21wb3NpdGVPcGVyYXRvckZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2Rl
Q2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGNvbXBvc2l0ZU9wZXJhdG9yRmxh
Z3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShjb21wb3NpdGVPcGVyYXRvckZsYWdz
KTsKLQotICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGZsYWdzKTsKKyAgICBpbWFnZUJ1ZmZlci5jbGlw
VG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUdy
YWRpZW50KCptX3N0YXRlLnN0cm9rZUdyYWRpZW50LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0
cm9rZVBhdHRlcm4oKm1fc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoKm1fc3RhdGUuZmlsbEdyYWRpZW50LCBt
X3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9z
dGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1
c01vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvIHByZXZpb3VzQ29t
cG9zaXRlTW9kZSA9IGNvbXBvc2l0ZU1vZGUoKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAg
ICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9kZShtX3N0YXRlLnRleHREcmF3aW5nTW9kZSk7
Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3Rh
dGUuc3Ryb2tlQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKG1fc3RhdGUuZmlsbENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlU3R5bGUobV9zdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2Up
KQotICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRBbHBoYShtX3N0YXRlLmFscGhhKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5n
ZSB9KSkKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9zdGF0ZS5jb21w
b3NpdGVPcGVyYXRvciwgbV9zdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkp
Ci0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKG1fc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxk
U21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFu
Y2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpV
c2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VXNlRGFya0FwcGVh
cmFuY2UobV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKKyAgICBzZXRDb21wb3Np
dGVNb2RlKHsgb3BlcmF0aW9uLCBibGVuZE1vZGUgfSk7CisgICAgZmlsbFJlY3QocmVjdCwgY29s
b3IpOworICAgIHNldENvbXBvc2l0ZU1vZGUocHJldmlvdXNDb21wb3NpdGVNb2RlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29u
c3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNoYW5nZS1mbGFn
cyIsIG1fY2hhbmdlRmxhZ3MudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1ncmFkaWVudCIsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHko
InN0cm9rZS1wYXR0ZXJuIiwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0
YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoImZpbGwtcGF0dGVybiIsIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOwor
ICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctYmx1ciIsIG1fc3RhdGUuc2hhZG93Qmx1cik7Ci0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LW9mZnNldCIsIG1fc3RhdGUuc2hhZG93T2Zm
c2V0KTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctY29sb3IiLCBtX3N0YXRlLnNo
YWRvd0NvbG9yKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3kt
cmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKK3sKKyAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKKyAgICAgICAgZmlsbFJlY3QocmVj
dC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICAgICAgCisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOworICAgIHNldENvbXBvc2l0ZU1vZGUo
eyBwcmV2aW91c09wZXJhdG9yLCBibGVuZE1vZGUgfSk7CisgICAgZmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7
Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJv
a2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNo
YW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgidGV4dC1kcmF3aW5nLW1vZGUiLCBtX3N0
YXRlLnRleHREcmF3aW5nTW9kZS50b1JhdygpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWNvbG9yIiwgbV9z
dGF0ZS5maWxsQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzdHJva2Utc3R5bGUiLCBtX3N0YXRlLnN0cm9rZVN0eWxlKTsKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQoreworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFu
Z2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtcnVsZSIsIG1fc3RhdGUuZmlsbFJ1
bGUpOworICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCisgICAgICAg
IHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKKyAgICBlbHNlCisgICAgICAg
IHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEiLCBtX3N0YXRlLmFscGhhKTsKKyAgICBXaW5kUnVs
ZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7CisgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmls
bENvbG9yKCk7CisgICAgCisgICAgc2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOworICAg
IHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0b3IiLCBtX3N0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShvbGRG
aWxsUnVsZSk7CisgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgbV9zdGF0ZS5ibGVu
ZE1vZGUpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNl
KGVsbGlwc2UpOworICAgIGZpbGxQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hv
dWxkQW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRo
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5h
ZGRFbGxpcHNlKGVsbGlwc2UpOworICAgIHN0cm9rZVBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3Ro
Rm9udHNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgtZm9u
dHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxp
cHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikKK3sKKyAgICBhdXRvIG9sZEZpbGxD
b2xvciA9IGZpbGxDb2xvcigpOworICAgIGF1dG8gb2xkU3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xv
cigpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIHNldEZpbGxDb2xvcihzaGFkb3dDb2xvcik7Cisg
ICAgc2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IpOworICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVj
dChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
IAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9y
KGVsbGlwc2VDb2xvcik7CisgICAgZHJhd0VsbGlwc2UocmVjdCk7CiAKLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tD
aGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImRyYXctbHVtaW5hbmNlLW1hc2siLCBt
X3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9y
KTsKKyAgICBzZXRTdHJva2VDb2xvcihvbGRTdHJva2VDb2xvcik7Cit9CiAKLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgidXNlLWRhcmstYXBwZWFyYW5jZSIsIG1fc3RhdGUudXNlRGFya0FwcGVhcmFu
Y2UpOwotI2VuZGlmCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3sKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQog
Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
IHsKLSAgICBzdGF0ZUNoYW5nZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7CisgICAgZHJhd0lt
YWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXpl
KCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09w
dGlvbnMpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAg
IEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwg
aW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhY2suYXBw
ZW5kKG1fc3RhdGUpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBv
bGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKKyAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIGlmIChtX3N0YWNrLmlzRW1wdHko
KSkgewotICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOwotICAgIG1fc3RhY2sucmVt
b3ZlTGFzdCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0
YWNrIGJ1ZmZlciB3aGVuIGl0IGdvZXMgZW1wdHkuCi0gICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdp
bGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNh
cGFjaXR5LgotICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGFjay5jbGVh
cigpOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwor
ICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0KGRl
c3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2Fs
U2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwg
ZmxhZ3MpOwotICAgIGRpZFVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5s
b2dpY2FsU2l6ZSgpOworICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdl
KSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHNhdmUoKTsKLQotICAgIHNldFN0cm9rZUNvbG9y
KHNoYWRvd0NvbG9yKTsKLSAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOwotCi0gICAgZHJh
d0VsbGlwc2UoRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSkpOwotCi0gICAgc2V0U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKLSAg
ICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKLQotICAgIGRyYXdFbGxpcHNlKHJlY3QpOyAg
Ci0KLSAgICByZXN0b3JlKCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAg
IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRo
aXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRz
KQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRy
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSk7CisgICAgYXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1h
Z2UsIHNvdXJjZUltYWdlUmVjdCwgcmVzdWx0cyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHNjYWxl
KHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKS5oZWlnaHQoKSB9KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1
bHQtPmFic29sdXRlSW1hZ2VSZWN0KCkpOworICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUm
IG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dSYWRpdXNNb2Rl
IHJhZGl1c01vZGUpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUuc2hh
ZG93T2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZSA9IHJhZGl1c01vZGU7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxv
YXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclNoYWRvdygpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKLSAgICBtX3N0YXRlLnNoYWRvd0Js
dXIgPSAwOwotICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwotICAgIG1fc3RhdGUu
c2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQ7Ci0gICAgZGlkVXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Cisg
ICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKGltYWdlUGFpbnRp
bmdPcHRpb25zLm9yaWVudGF0aW9uKCkpKTsKKyAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc3JjUmVjdCwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwg
Q29sb3ImIGNvbG9yKSBjb25zdAorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIG9mZnNldCA9IG1fc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgIGJsdXIgPSBtX3N0YXRl
LnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwotCi0gICAgcmV0
dXJuIGhhc1NoYWRvdygpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRl
cnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9u
UXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLmZpbGxHcmFk
aWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNo
YW5nZSk7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25R
dWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkp
OworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK0ltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAorICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUocGF0dGVy
bik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVBhdHRlcm5DaGFuZ2UpOworICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUg
JiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CisgICAgICAgIC8vIEp1c3QgZG8gYSBz
Y2FsZS4KKyAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJj
ZSwgb3B0aW9ucyk7CisgICAgfQorCisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zLmNv
bXBvc2l0ZU9wZXJhdG9yKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBtX3N0
YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdU
Rk1vdmUocGF0dGVybik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKKyAgICBzeXN0ZW1JbWFnZS5kcmF3KCp0aGlz
LCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUu
c3Ryb2tlQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUo
Z3JhZGllbnQpOwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHN0
cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0g
bnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOworICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3Jh
ZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwotICAgIG1fc3RhdGUu
ZmlsbEdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3Rh
dGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwotICAgIC8vIEZJWE1FOiBh
bHNvIGZpbGwgcGF0dGVybj8KKyAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsK
KyAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNv
dW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CisgICAgZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CiB9CiAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKQEAgLTUxMSwx
MSArMzQ3LDYgQEAgRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICByZXR1cm4gZm9udC5kcmF3
VGV4dCgqdGhpcywgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmdNb2RlKQotewotICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gdG8pCiB7CiAgICAgZm9udC5kcmF3RW1waGFzaXNNYXJrcygqdGhpcywgcnVuLCBt
YXJrLCBwb2ludCwgZnJvbSwgdG8pOwpAQCAtNTQ5LDcgKzM4MCw0NSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sCiAgICAgICAgIGJpZGlSdW4gPSBiaWRpUnVuLT5uZXh0KCk7CiAgICAgfQogCi0g
ICAgYmlkaVJ1bnMuY2xlYXIoKTsKKyAgICBiaWRpUnVucy5jbGVhcigpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHlsZSkKK3sK
KyAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFz
aEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBz
dHlsZSk7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVC
b3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykKK3sKKyAg
ICBDb2xvciBkdW1teUNvbG9yOworICAgIHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KHJlY3QsIHByaW50aW5nLCBkdW1teUNvbG9yKTsKK30KKworRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIENvbG9yJiBj
b2xvcikKK3sKKyAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBm
bG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKKyAgICBpZiAo
cHJpbnRpbmcpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVj
dC53aWR0aCgpLCB0aGlja25lc3MpKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBnZXRDVE0oKTsKKyAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFz
c3VtaW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KKyAgICBmbG9hdCBzY2FsZSA9IHRyYW5z
Zm9ybS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJh
bnNmb3JtLmEoKTsKKyAgICBpZiAoc2NhbGUgPCAxLjApIHsKKyAgICAgICAgLy8gVGhpcyBjb2Rl
IGFsd2F5cyBkcmF3cyBhIGxpbmUgdGhhdCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdo
LAorICAgICAgICAvLyB3aGljaCB0ZW5kcyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBz
bWFsbCBzY2FsZXMuIFRvIGNvdW50ZXIgdGhpcworICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhh
IGlzIGFwcGxpZWQgdG8gdGhlIHVuZGVybGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwg
c2NhbGVzLgorICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhh
ID0gMC40ZjsKKyAgICAgICAgZmxvYXQgc2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVB
bHBoYSA/IHNjYWxlIDogbWluaW11bVVuZGVybGluZUFscGhhOworICAgICAgICBjb2xvciA9IGNv
bG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KHNoYWRlKTsKKyAgICB9CisKKyAgICBGbG9h
dFBvaW50IGRldmljZVBvaW50ID0gdHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7
CisgICAgLy8gVmlzdWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFs
IHJvdW5kZi9jZWlsZi4gdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBv
dmVyZmxvdyB2YWx1ZSBmb3IgdW5kZXJsaW5lIGRlY29yYXRpb24uCisgICAgRmxvYXRQb2ludCBk
ZXZpY2VPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihk
ZXZpY2VQb2ludC55KCkpKTsKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVy
c2UoKSkKKyAgICAgICAgb3JpZ2luID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9y
aWdpbik7CisgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRo
KCksIHRoaWNrbmVzcykpOwogfQogCiBzdGF0aWMgSW50U2l6ZSBzY2FsZWRJbWFnZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlKQpAQCAtNjM5
LDE4NyArNTA4LDkgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0
ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHIKICAgICByZXR1cm4gY3JlYXRl
U2NhbGVkSW1hZ2VCdWZmZXIocmVjdCwgc2NhbGVGYWN0b3IoKSwgY29sb3JTcGFjZSwgcmVuZGVy
aW5nTW9kZSgpLCByZW5kZXJpbmdNZXRob2QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgc3lzdGVtSW1hZ2UuZHJhdygqdGhpcywgZGVzdGlu
YXRpb25SZWN0KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICByZXR1cm4g
ZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSksIEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25z
KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBzcmNSZWN0
KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlv
bigpKSk7Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3Qs
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0
aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0
eSgpKTsKLSAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZv
clRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBy
ZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLAotICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoaFJ1bGUg
PT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewot
ICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgq
dGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1hZ2Uu
ZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhS
dWxlLCB2UnVsZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCi17Ci0gICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3Qo
ZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5s
b2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZs
b2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3Bl
KCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIGltYWdlLmRyYXco
KnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgp
OwotICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0
KGRlc3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dp
Y2FsU2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
aW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwotICAg
IGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgZGVzdGluYXRpb24sIEZs
b2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9w
dGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25z
dW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25z
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQotewotICAgIGF1dG8gcmVz
dWx0ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53
aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7Ci0gICAgZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgcmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKLSAg
ICBzY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1h
Z2UuZHJhd1BhdHRlcm4oKnRoaXMsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0
aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcFBhdGgocGF0
aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsK
LSAgICAgICAgY2xpcE91dChyZWN0LnJlY3QoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKLSAgICBjbGlw
T3V0KHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKLXsKLSAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3Qp
OwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQotewotICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotewotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVP
cGVyYXRpb24oKTsKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7Ci0g
ICAgZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2
aW91c09wZXJhdG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpIHsKLSAgICAgICAg
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwot
ICAgICAgICBmaWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKLSAgICAgICAgc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZmlsbFJlY3QocmVjdC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxl
bmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBh
dGguYWRkUmVjdChyZWN0KTsKLQotICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNa
ZXJvKCkpCi0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAot
ICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxlID0gZmlsbFJ1bGUoKTsKLSAgICBDb2xvciBvbGRGaWxs
Q29sb3IgPSBmaWxsQ29sb3IoKTsKLSAgICAKLSAgICBzZXRGaWxsUnVsZShXaW5kUnVsZTo6RXZl
bk9kZCk7Ci0gICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAotICAgIGZpbGxQYXRoKHBhdGgpOwot
ICAgIAotICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKLSAgICBzZXRGaWxsQ29sb3Iob2xk
RmlsbENvbG9yKTsKLX0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCi17Ci0gICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJh
dGlvbjsKLSAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IGJsZW5kTW9kZTsKLSAgICBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hh
bmdlKTsKLX0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRh
cmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBT
dHJva2VTdHlsZSBwZW5TdHlsZSkKIHsKQEAgLTg1MCw3NyArNTQxLDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxv
YXRQb2ludCYgcDIKICAgICB9CiB9CiAKLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yKCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgcmV0
dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci19
Ci0gICAgCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmco
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dAotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAgICBhdXRvIHRyYW5zZm9ybWVk
RGVzdFJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIHRyYW5z
Zm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGZpbGxQYXRoKHBh
dGgpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBw
YXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKLSAgICBmaWxsUGF0aChwYXRoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2Uo
ZWxsaXBzZSk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgZHJhd0xp
bmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAs
IHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOwotfQot
Ci1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgQ29sb3IgZHVt
bXlDb2xvcjsKLSAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xvcik7Ci19Ci0KLUZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgZmxvYXQgdGhpY2tu
ZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7Ci0gICAgaWYgKHByaW50aW5nKQot
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwg
dGhpY2tuZXNzKSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgLy8gSnVz
dCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBh
cmUgZXF1YWwuCi0gICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0
cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7Ci0gICAgaWYgKHNj
YWxlIDwgMS4wKSB7Ci0gICAgICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRo
YXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxpbmUgaGlnaCwKLSAgICAgICAgLy8gd2hpY2ggdGVu
ZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVy
IHRoaXMKLSAgICAgICAgLy8gZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRl
cmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KLSAgICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA9IDAuNGY7Ci0gICAgICAgIGZsb2F0
IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1V
bmRlcmxpbmVBbHBoYTsKLSAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeShzaGFkZSk7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRy
YW5zZm9ybS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOwotICAgIC8vIFZpc3VhbCBvdmVyZmxv
dyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92
ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVy
bGluZSBkZWNvcmF0aW9uLgotICAgIEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2lu
dChyb3VuZGYoZGV2aWNlUG9pbnQueCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7Ci0gICAg
aWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCkpCi0gICAgICAgIG9yaWdpbiA9
IGludmVyc2UudmFsdWUoKS5tYXBQb2ludChkZXZpY2VPcmlnaW4pOwotICAgIHJldHVybiBGbG9h
dFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKLX0KLQog
ZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0
aChmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKIHsKICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJv
a2VUaGlja25lc3MoKTsKQEAgLTk3MiwxNSArNTkyLDQgQEAgVmVjdG9yPEZsb2F0UG9pbnQ+IEdy
YXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2Fs
TGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9OwogfQogCi0jaWYgRU5BQkxFKFZJREVP
KQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYg
cGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHBsYXllci5wbGF5
ZXJQcml2YXRlKCktPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlv
bik7Ci19Ci0jZW5kaWYKLQotdm9pZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5n
SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQotewotfQotCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IGZiOTVkZDI1YjI3MWRlYjlmYTg1ZmYyZDlmMWY3NDcxNmEwNjZiYWUuLmIzOWNkODI0ODAw
YTk0MjczMWY3NzRhYmQwYTk4Y2RmYmE3NGY4YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtMzAsNDkgKzMwLDE4IEBACiAjaW5jbHVkZSAiRGVzdGluYXRpb25D
b2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRp
b24uaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgogCi0jaWYgVVNFKENHKQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0OwotI2VsaWYgVVNFKENBSVJPKQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87Ci19Ci10eXBlZGVmIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2Vsc2UKLXR5cGVkZWYgdm9p
ZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQot
I2luY2x1ZGUgIkRJQlBpeGVsRGF0YS5oIgotdHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKLSNp
ZiAhVVNFKENHKQotLy8gVUludDggaXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2Uu
aAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwotI2VuZGlmCi0jZW5kaWYKLQotLy8gWDEx
IGhlYWRlcnMgZGVmaW5lIGEgYnVuY2ggb2YgbWFjcm9zIHdpdGggY29tbW9uIHRlcm1zLCBpbnRl
cmZlcmluZyB3aXRoIFdlYkNvcmUgYW5kIFdURiBlbnVtIHZhbHVlcy4KLS8vIEFzIGEgd29ya2Fy
b3VuZCwgd2UgZXhwbGljaXRseSB1bmRlZiB0aGVtIGhlcmUuCi0jaWYgZGVmaW5lZChOb25lKQot
I3VuZGVmIE5vbmUKLSNlbmRpZgotI2lmIGRlZmluZWQoQmVsb3cpCi0jdW5kZWYgQmVsb3cKLSNl
bmRpZgotI2lmIGRlZmluZWQoU3VjY2VzcykKLSN1bmRlZiBTdWNjZXNzCi0jZW5kaWYKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CkBAIC04Miw3ICs1MSw2
IEBAIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW50
UmVjdDsKIGNsYXNzIE1lZGlhUGxheWVyOwogY2xhc3MgUm91bmRlZFJlY3Q7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHRHTDsKQEAgLTkxLDE3NCArNTksMTIgQEAgY2xhc3MgU3lzdGVtSW1hZ2U7CiBj
bGFzcyBUZXh0UnVuOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKLW5hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7Ci1jbGFzcyBSZWNvcmRlcjsKLX0KLQotZW51bSBjbGFzcyBUZXh0RHJhd2lu
Z01vZGUgOiB1aW50OF90IHsKLSAgICBGaWxsID0gMSA8PCAwLAotICAgIFN0cm9rZSA9IDEgPDwg
MSwKLX07Ci11c2luZyBUZXh0RHJhd2luZ01vZGVGbGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2lu
Z01vZGU+OwotCi0vLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZh
cywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLS8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50
IG9mIHJhZGlpID4gOHB4LgotZW51bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7Ci0g
ICAgRGVmYXVsdCwKLSAgICBMZWdhY3kKLX07Ci0KLWVudW0gU3Ryb2tlU3R5bGUgewotICAgIE5v
U3Ryb2tlLAotICAgIFNvbGlkU3Ryb2tlLAotICAgIERvdHRlZFN0cm9rZSwKLSAgICBEYXNoZWRT
dHJva2UsCi0gICAgRG91YmxlU3Ryb2tlLAotICAgIFdhdnlTdHJva2UsCi19OwotCi1zdHJ1Y3Qg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgewotICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4X3Qg
ewotICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAot
ICAgICAgICBTcGVsbGluZywKLSAgICAgICAgR3JhbW1hciwKLSAgICAgICAgQXV0b2NvcnJlY3Rp
b25SZXBsYWNlbWVudCwKLSAgICAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAgfSBtb2Rl
OwotICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OwotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2Vy
TGluZVN0eWxlPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbW9kZTsKLSAgICBlbmNvZGVyIDw8IHNob3VsZFVz
ZURhcmtBcHBlYXJhbmNlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRp
b25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9kZTsK
LSAgICBkZWNvZGVyID4+IG1vZGU7Ci0gICAgaWYgKCFtb2RlKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZTsKLSAgICBkZWNvZGVyID4+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmICgh
c2hvdWxkVXNlRGFya0FwcGVhcmFuY2UpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4ge3sgKm1vZGUsICpzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9fTsKLX0KLQot
c3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUgewotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRv
cj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7Ci0KLSAgICBlbnVtIENoYW5nZSA6IHVpbnQzMl90
IHsKLSAgICAgICAgU3Ryb2tlR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAotICAgICAgICBTdHJva2VQYXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgPSAx
IDw8IDEsCi0gICAgICAgIEZpbGxHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMiwKLSAgICAgICAgRmlsbFBhdHRlcm5DaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAzLAotICAgICAgICBTdHJva2VUaGlja25lc3NDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDQsCi0gICAgICAgIFN0cm9rZUNvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgNSwKLSAgICAgICAgU3Ryb2tlU3R5bGVDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgID0gMSA8PCA2LAotICAgICAgICBGaWxsQ29sb3JDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDcsCi0gICAgICAgIEZpbGxSdWxlQ2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgOCwKLSAgICAgICAgU2hhZG93Q2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCA5LAotICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0No
YW5nZSAgICAgICAgICAgPSAxIDw8IDEwLAotICAgICAgICBBbHBoYUNoYW5nZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAotICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDEyLAotICAgICAgICBCbGVuZE1vZGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAotICAgICAgICBUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAotICAgICAgICBTaG91bGRBbnRp
YWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAotICAgICAgICBTaG91bGRT
bW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAotICAgICAgICBTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAgPSAxIDw8IDE3LAotICAgICAgICBE
cmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE4LAotICAgICAg
ICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAgICAgICAgPSAxIDw8IDE5LAotI2lm
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgICAgIFVzZURhcmtBcHBlYXJhbmNlQ2hh
bmdlICAgICAgICAgICAgICAgICA9IDEgPDwgMjAsCi0jZW5kaWYKLSAgICB9OwotICAgIHVzaW5n
IFN0YXRlQ2hhbmdlRmxhZ3MgPSBPcHRpb25TZXQ8Q2hhbmdlPjsKLQotICAgIHZvaWQgbWVyZ2VD
aGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVu
dDsKLSAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKLSAgICAKLSAgICBSZWZQdHI8
R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKLSAgICBSZWZQdHI8UGF0dGVybj4gZmlsbFBhdHRlcm47
Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotCi0gICAgQ29sb3Igc3Ryb2tlQ29sb3Ig
eyBDb2xvcjo6YmxhY2sgfTsKLSAgICBDb2xvciBmaWxsQ29sb3IgeyBDb2xvcjo6YmxhY2sgfTsK
LSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBzdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtOwotICAgIEFmZmluZVRyYW5zZm9ybSBmaWxsR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybTsKLQotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyB7IDAgfTsKLSAgICBmbG9h
dCBzaGFkb3dCbHVyIHsgMCB9OwotICAgIGZsb2F0IGFscGhhIHsgMSB9OwotCi0gICAgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUgeyBTb2xpZFN0cm9rZSB9OwotICAgIFdpbmRSdWxlIGZpbGxSdWxl
IHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKLQotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRE
cmF3aW5nTW9kZSB7IFRleHREcmF3aW5nTW9kZTo6RmlsbCB9OwotICAgIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsK
LSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlIHsgQmxlbmRNb2RlOjpOb3JtYWwgfTsKLSAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlv
blF1YWxpdHk6OkRlZmF1bHQgfTsKLSAgICBTaGFkb3dSYWRpdXNNb2RlIHNoYWRvd1JhZGl1c01v
ZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07Ci0KLSAgICBib29sIHNob3VsZEFudGlh
bGlhcyA6IDE7Ci0gICAgYm9vbCBzaG91bGRTbW9vdGhGb250cyA6IDE7Ci0gICAgYm9vbCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMgOiAxOwotICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgOiAxOwotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwotI2lmIEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCi0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSA6IDE7Ci0jZW5k
aWYKLX07Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSB7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVDaGFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRl
KQotICAgICAgICAsIG1fY2hhbmdlRmxhZ3MoZmxhZ3MpCi0gICAgewotICAgIH0KLQotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBjb25zdDsKLQotICAgIHZvaWQgYWNjdW11bGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKTsKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAg
IAotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKLQotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlIG1fc3RhdGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKLX07Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwot
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBo
aWNzQ29udGV4dCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOiAgIAorICAgIGZy
aWVuZCBjbGFzcyBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworcHVibGljOgorICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdy
YXBoaWNzQ29udGV4dCgpOwogCiAgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNzAsMjcwICs3NiwyNzMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1
bFBhaW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIC8vIENvbnRleHQgU3RhdGUK
KyAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRmdWxQYWludERldGVjdGVkOyB9CisgICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3Rl
ZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZs
b2F0IHRoaWNrbmVzcykgeyBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSk7IH0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZVRoaWNrbmVzczsgfQorICAgIC8vIENvbnRleHQgU3RhdGUKIAotICAgIHZv
aWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHls
ZSA9IHN0eWxlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9Ci0gICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0eWxlOyB9CisgICAgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgbWVy
Z2VTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1fc3Rh
dGUubWVyZ2VDaGFuZ2VzKG90aGVyKTsgfQorICAgIHZvaWQgbWVyZ2VTdGF0ZURpZmZzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikgeyBtX3N0YXRlLm1lcmdlRGlmZnMob3RoZXIp
OyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
Jik7Ci0gICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zdHJva2VDb2xvcjsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmdldENUTSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGN0bSkgeyBtX3N0YXRlLnNldENUTShjdG0sIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkg
eyBzZXRDVE0oZ2V0Q1RNKCkgKiBjdG0pOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkgeyBzZXRDVE0oZ2V0Q1RNKCkudHJhbnNsYXRlKHgsIHkpKTsgfQorICAgIHZvaWQg
dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQm
IHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4
LCBmbG9hdCBzeSkgeyBzZXRDVE0oZ2V0Q1RNKCkuc2NhbGUoc3gsIHN5KSk7IH0KKyAgICB2b2lk
IHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkgeyBzY2FsZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9Cisg
ICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIHsgc2V0Q1RNKGdldENUTSgpLnJv
dGF0ZShyYWQyZGVnKGFuZ2xlSW5SYWRpYW5zKSkpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOwotICAgIFBhdHRlcm4qIHN0cm9r
ZVBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0K
KyAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxs
QnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIGZp
bGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5wYXR0ZXJuKCk7
IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxTcGFjZVRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZv
aWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldEZpbGxDb2xv
cihjb2xvciwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0RmlsbEdyYWRpZW50
KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50
KSwgc3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9
KSB7IG1fc3RhdGUuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zv
cm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxH
cmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQq
IHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5n
ZXQoKTsgfQorICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5m
aWxsUnVsZSgpOyB9CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBt
X3N0YXRlLnNldEZpbGxSdWxlKGZpbGxSdWxlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAg
ICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuZmlsbFJ1bGUg
PSBmaWxsUnVsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxSdWxlQ2hhbmdlKTsgfQotICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQorICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGll
bnQqIHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgp
LmdyYWRpZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
cm9rZUJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fc3RhdGUuc2V0U3Ryb2tlQ29sb3IoY29sb3IsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVu
dD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNm
b3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCks
IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJl
ZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblNwYWNl
VHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlUGF0dGVybihXVEZNb3ZlKHBhdHRl
cm4pLCBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsgfQorICAgIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKCk7IH0KKyAg
ICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zZXRT
dHJva2VUaGlja25lc3ModGhpY2tuZXNzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQ
YXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4u
Z2V0KCk7IH0KKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuc3Ryb2tlU3R5bGUoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5
bGUgc3R5bGUpIHsgbV9zdGF0ZS5zZXRTdHJva2VTdHlsZShzdHlsZSwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdy
YWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKLSAgICBHcmFkaWVudCog
ZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7
IH0KKyAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVDYXAo
KTsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsgbV9zdGF0ZS5zZXRM
aW5lQ2FwKGxpbmVDYXAsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IGRp
ZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtc0NoYW5nZSk7IH0KLSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIGNv
bnN0IExpbmVEYXNoIGxpbmVEYXNoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5saW5lRGFzaCgp
OyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVEYXNoKSB7IG1fc3RhdGUu
c2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAot
ICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3Rh
dGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQotICAg
IGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRp
YWxpYXM7IH0KKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
bGluZUpvaW4oKTsgfQorICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pIHsg
bV9zdGF0ZS5zZXRMaW5lSm9pbihsaW5lSm9pbiwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0g
ICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1f
c3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KTsgfQotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNob3VsZFNtb290aEZvbnRzOyB9CisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUubWl0ZXJMaW1pdCgpOyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyTGltaXQpIHsgbV9zdGF0ZS5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQsIG1fbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KIAotICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVh
bnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5n
IGdseXBocy4KLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBl
bnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBzZXRT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMpIHsgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsgfQorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlTW9kZSgpOyB9CisgICAgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9k
ZSgpLm9wZXJhdGlvbjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVy
biBjb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVNb2Rl
KENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX3N0YXRlLnNldENvbXBvc2l0ZU1vZGUo
Y29tcG9zaXRlTW9kZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbikgeyBzZXRDb21wb3NpdGVN
b2RlKHsgb3BlcmF0aW9uLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsgfQogCi0gICAgdm9pZCBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsg
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2UpOyB9Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eTsgfQorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmRyb3BTaGFkb3coKTsgfQorICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBkcm9wU2hhZG93KCkub2Zmc2V0OyB9CisgICAgZmxvYXQgc2hhZG93Qmx1cigp
IGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5ibHVyUmFkaXVzOyB9CisgICAgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yKCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmNvbG9yOyB9Cisg
ICAgdm9pZCBzZXREcm9wU2hhZG93KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpIHsgbV9z
dGF0ZS5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3csIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAg
ICB2b2lkIGNsZWFyU2hhZG93KCkgeyBzZXREcm9wU2hhZG93KHsgfSk7IH0KIAotICAgIHZvaWQg
c2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOyBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOyB9Ci0gICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CisgICAgYm9vbCBo
YXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmlzVmlzaWJsZSgp
OyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRv
dygpLmlzQmx1cnJlZCgpOyB9CisgICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBk
cm9wU2hhZG93KCkuaGFzT3V0c2V0cygpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRN
b2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KLSAgICBCbGVuZE1v
ZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7
IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGEoKTsgfQor
ICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5zZXRBbHBoYShhbHBoYSwg
bV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3
THVtaW5hbmNlTWFzazsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsgfQotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOyB9CisgICAgdm9pZCBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpIHsgbV9zdGF0ZS5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZv
aWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV9zdGF0
ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsgfQotICAgIFRleHREcmF3aW5n
TW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERy
YXdpbmdNb2RlOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUoKTsgfQorICAgIHZvaWQgc2V0
VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSkgeyBt
X3N0YXRlLnNldFRleHREcmF3aW5nTW9kZSh0ZXh0RHJhd2luZ01vZGUsIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRv
d1JhZGl1c01vZGU6OkRlZmF1bHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBj
bGVhclNoYWRvdygpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6
ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25zdDsKKyAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKCk7IH0KKyAgICB2b2lkIHNldFNo
b3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNldFNob3VsZEFu
dGlhbGlhcyhzaG91bGRBbnRpYWxpYXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIGJv
b2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3Iu
aXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zp
c2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zm
c2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9v
bCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYm
IG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKCk7IH0KKyAgICB2b2lkIHNldFNo
b3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91
bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQog
Ci0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtBcHBl
YXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5j
ZSA9IHVzZURhcmtBcHBlYXJhbmNlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9Ci0gICAgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0K
LSNlbmRpZgorICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVhbnRpemF0aW9u
IGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5nIGdseXBocy4K
KyAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBlbnN1cmUgYSBo
aWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCisgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMo
Ym9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMoc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBtX2xhc3RBcHBs
aWVkU3RhdGUpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpOyB9CisgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQg
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2soKTsgfQorICAgIHZvaWQgc2V0
RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLnNldERy
YXdMdW1pbmFuY2VNYXNrKGRyYXdMdW1pbmFuY2VNYXNrLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9
CiAKLSAgICAvLyBDYWxsZWQgKmFmdGVyKiBhbnkgY2hhbmdlIHRvIEdyYXBoaWNzQ29udGV4dFN0
YXRlOyBnZW5lcmFsbHkgdXNlZCB0byBwcm9wYWdhdGUgY2hhbmdlcwotICAgIC8vIHRvIHRoZSBw
bGF0Zm9ybSBjb250ZXh0J3Mgc3RhdGUuCi0gICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MpID0gMDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBl
YXJhbmNlKCk7IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UpIHsgbV9zdGF0ZS5zZXRVc2VEYXJrQXBwZWFyYW5jZSh1c2VEYXJrQXBwZWFyYW5j
ZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorI2VuZGlmCiAKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0
b3JlKCk7Ci0gICAgCisgICAgdm9pZCBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHVuc2ln
bmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSA9IDA7CiAjaWYgVVNFKENHKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0
aG9kcz8KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSA9IDA7CisjZW5kaWYKIAotICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFr
ZSB0aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNy
b3NzLXBsYXRmb3JtPwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CiAKLSAgICAvLyBG
SVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0
ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/Ci0gICAgdmlydHVhbCB2b2lkIHNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpID0gMDsKLSNlbmRpZgorICAgIC8vIFRoaXMgZnVu
Y3Rpb24gYXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFr
aW5nIHRoZSBjb250ZXh0IGNhcGFibGUgb2YKKyAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVs
IGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KIAotICAg
IHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMK
IAotICAgIC8vIFBpeGVsIFNuYXBwaW5nCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBpc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVy
cygpICYmIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsgfQogCi0gICAgZW51bSBSb3VuZGluZ01v
ZGUgewotICAgICAgICBSb3VuZEFsbFNpZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVu
c2lvbnMKLSAgICB9OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgPSAwOwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhG
bG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VT
dHlsZSk7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIC8vIFNoYXBlcworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogCi0gICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwg
ZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KLSAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRy
YXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwotICAgIC8v
IHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0
aGUgY29ycmVjdAotICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdmlydHVhbCB2b2lkIGRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX3N0YXRlLmNsaXBCb3VuZHMoKSk7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IHsgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgc3Ryb2tlRWxsaXBzZUFzUGF0aChl
bGxpcHNlKTsgfQorICAgIC8vIFNoYXBlcworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1h
bCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJiwgQmxlbmRNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOwogCi0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRN
aXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0KLSAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVk
aWEKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICBJbnRTaXplIGNvbXBh
dGlibGVJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0g
c3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxv
cHQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmIHNj
YWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6
bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxl
ZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7
IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0Owor
ICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxp
bmcuCisgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGljaCBmaWxscyBwcm9w
ZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKKyAgICAvLyB1c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGlu
c2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKKyAgICAvLyBzdHJva2Ug
Y29sb3IpLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9k
PiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aXJ0dWFsIGRy
YXdQYXRoKGNvbnN0IFBhdGgmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICAvLyBGb2N1
cyBSaW5ncwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFn
ZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImKSA9IDA7CisgICAgLy8gRklYTUU6IENhbiB3ZSBoaWRlIHRoZXNlIGluIHRoZSBD
RyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQs
IGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisjZW5kaWYKIAorICAgIC8v
IEltYWdlcwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihS
ZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXIm
LCBGaWx0ZXJSZXN1bHRzJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6
RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCisgICAg
V0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFj
dG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICNpZiBFTkFC
TEUoVklERU8pCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogI2VuZGlm
Ci0KLSAgICAvLyBDbGlwcGluZwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSA9IDA7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdDsKLQorICAgIAogICAgIC8vIFRleHQKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQg
ZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RS
ZWFkeSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIHsKLSAg
ICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JU
IEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0g
Rm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZv
clRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9
IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNl
LCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUpID0gMDsKIAotICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
OwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0Zv
clRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7CiAKLSAgICAvLyBGb2N1cyBS
aW5ncworICAgIC8vIENvbXBhdGlibGUgSW1hZ2VCdWZmZXIKIAotICAgIHZpcnR1YWwgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikg
PSAwOwotICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50
YXRpb24/IE9yIGVsc2V3aGVyZT8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVl
ZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotI2VuZGlmCisgICAgSW50U2l6ZSBjb21wYXRp
YmxlSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwogCi0gICAgLy8gVHJh
bnNmb3JtcworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUoeyBzLCBzIH0pOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKSB7IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9
Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54
KCksIHAueSgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2Nh
bGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9
IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxv
cHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAx
IH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3Rk
OjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAg
IHZpcnR1YWwgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01l
dGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
UmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQp
IGNvbnN0OwogCi0gICAgZW51bSBJbmNsdWRlRGV2aWNlU2NhbGUgeyBEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlLCBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSB9OwotICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3QgPSAwOworICAgIC8vIFBpeGVsIFNuYXBwaW5nCiAKLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCi0gICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIHZpcnR1YWwg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3Ip
OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OworICAg
IGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAgICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91
bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAgfTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxs
U2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9Q
aXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJv
a2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwogCiAgICAgLy8gTGlua3MKIAorICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAg
dmlydHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0Jikg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIHsgfQogCi0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICAvLyBDb250ZW50ZnVsIFBhaW50IERldGVjdGlvbgorI2lmIFVTRShDRykKKyAgICAv
LyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRo
ZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQotICAgIGJv
b2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBh
aW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRl
eHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRl
eHQ/CisgICAgdmlydHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIHsgfQor
I2VuZGlmCiAKICAgICAvLyBGSVhNRTogTm90aGluZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBo
ZXJlLCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVsc2V3aGVyZS4KICNpZiBPUyhXSU5ET1dTKQpAQCAt
NTQ2LDEwICszNTUsNyBAQCBwdWJsaWM6CiAgICAgLy8gcHV0IGNvZGUgc2hhcmVkIGJldHdlZW4g
V2luZG93cyBDRyBhbmQgV2luZG93cyBDYWlybyBiYWNrZW5kcy4KICAgICB2aXJ0dWFsIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9h
dFJlY3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7
CkBAIC01NjEsMTkxICszNjcsMTcgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IGRhc2hlZExpbmVQ
YXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCwg
ZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OwogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJM
aW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0
aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKSBjb25zdDsKIAotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7Ci0KIHByaXZhdGU6CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBo
aWNzQ29udGV4dFN0YXRlPiBtX2xhc3RBcHBsaWVkU3RhdGU7CiAgICAgVmVjdG9yPEdyYXBoaWNz
Q29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCiAgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lM
YXllckNvdW50IHsgMCB9OwogICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZh
bHNlIH07CiB9OwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUp
Ci0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFu
ZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAg
ICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgfQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAg
ICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29u
dGV4dC5zYXZlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQot
ICAgIHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9y
ZSk7Ci0gICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dCYgbV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KLWNsYXNz
IFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgewotcHVibGljOgotICAgIFRyYW5zcGFyZW5jeUxheWVy
U2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxh
eWVyID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX2Fs
cGhhKGFscGhhKQotICAgICAgICAsIG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQotICAgIHsKLSAg
ICAgICAgaWYgKGJlZ2luTGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihtX2FscGhhKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBiZWdpbkxheWVyKGZs
b2F0IGFscGhhKQotICAgIHsKLSAgICAgICAgbV9hbHBoYSA9IGFscGhhOwotICAgICAgICBtX2Nv
bnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKLSAgICAgICAgbV9iZWdhbkxh
eWVyID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKLSAgICAgICAgICAgIG1fY29udGV4dC5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0Nv
bnRleHQmIG1fY29udGV4dDsKLSAgICBmbG9hdCBtX2FscGhhOwotICAgIGJvb2wgbV9iZWdhbkxh
eWVyOwotfTsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgewotcHVi
bGljOgotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3N0
YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQotICAgIHsgfQotICAgIAotICAgIH5HcmFwaGlj
c0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0
LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJH
cmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBieSAlZCIsICZtX2NvbnRleHQsIChpbnQp
bV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0YWNrU2l6ZSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1fc3Rh
Y2tTaXplOwotfTsKLQotY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9s
YXRpb25RdWFsaXR5VG9Vc2UpCi0gICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3ND
b250ZXh0KQotICAgICAgICAsIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KGdyYXBoaWNz
Q29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAgICAgICwgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSAhPSBJbnRlcnBv
bGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSAh
PSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKTsKLSAg
ICB9Ci0KLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1
YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5KQotICAgICAgICA6IEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGludGVycG9sYXRpb25RdWFsaXR5ID8gaW50
ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpCi0gICAgewotICAgIH0KLQotICAgIH5JbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgYm9vbCBt
X2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
LAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tp
bmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAotICAgIFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKLSAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0g
ICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpGaWxsR3JhZGllbnRDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUNvbG9yQ2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VTdHlsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpGaWxsUnVsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGFDaGFu
Z2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6QmxlbmRNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhc0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21v
b3RoRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2Us
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQot
ICAgICAgICAsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtB
cHBlYXJhbmNlQ2hhbmdlCi0jZW5kaWYKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCi0gICAgV2ViQ29yZTo6U3Ryb2tl
U3R5bGU6Ok5vU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwK
LSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0
cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJs
ZVN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQotICAgID47Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9k
ZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6OlRl
eHREcmF3aW5nTW9kZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAot
ICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQotICAgID47Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM5ZTU4MWRjYzIyMDNhZDIxYTdmNDhmMzU3
ODE0ZGVmYzNjZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKKworI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgQ2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2NsaXBCb3VuZHMoaW5pdGlhbENUTS5tYXBSZWN0KGlu
aXRpYWxDbGlwKSkKKyAgICAsIG1fY2hhbmdlRmxhZ3MoY2hhbmdlRmxhZ3MpCisgICAgLCBtX2N0
bShpbml0aWFsQ1RNKQoreworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmNs
aXBCb3VuZHMoKSBjb25zdAoreworICAgIGlmIChhdXRvIGludmVyc2UgPSBtX2N0bS5pbnZlcnNl
KCkpCisgICAgICAgIHJldHVybiBpbnZlcnNlLT5tYXBSZWN0KG1fY2xpcEJvdW5kcyk7CisKKyAg
ICAvLyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJl
Y3QuCisgICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9y
bSBiZWhhdmlvci4KKyAgICByZXR1cm4gbV9jbGlwQm91bmRzOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0Cit7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBwcmltaXRpdmVDaGFuZ2VGbGFncyB7IENoYW5nZTo6
U3Ryb2tlVGhpY2tuZXNzLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6OkZpbGxCcnVzaCB9
OworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgIT0gKG1fY2hhbmdlRmxhZ3MgJiBwcmltaXRpdmVD
aGFuZ2VGbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKENoYW5nZTo6U3Ryb2tlQnJ1c2gpICYmICFtX3N0cm9rZUJydXNoLmlzUHJp
bWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKENoYW5nZTo6RmlsbEJydXNoKSAmJiAhbV9maWxsQnJ1c2guaXNQcmltaXRpdmUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZUNoYW5nZSA9IFsmXShDaGFuZ2UgY2hhbmdl
LCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG90
aGVyLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkgeworICAgICAgICAgICAgdGhpcy0+
KnByb3BlcnR5ID0gb3RoZXIuKnByb3BlcnR5OworICAgICAgICAgICAgbV9jaGFuZ2VGbGFncy5h
ZGQoY2hhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBBU1NFUlQobV9jbGlwQm91bmRz
ID09IG90aGVyLm1fY2xpcEJvdW5kcyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNUTSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7
CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2Uo
Q2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZUJydXNo
LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNo
KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VD
aGFuZ2UoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Okxp
bmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xp
bmVDYXApOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TWl0ZXJMaW1p
dCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1p
dCk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkFs
cGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Fs
cGhhKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHks
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cywgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcywgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjptZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikKK3sKKyAg
ICBhdXRvIG1lcmdlRGlmZiA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSAhPSBvdGhl
ci4qcHJvcGVydHkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9w
ZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisgICAgCisgICAgbWVyZ2VEaWZm
KENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbFJ1bGUsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAg
IG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ry
b2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9r
ZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIG1l
cmdlRGlmZihDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lRGFzaCwg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOwor
ICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TWl0
ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVy
TGltaXQpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkFscGhhLCAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7Cisg
ICAgbWVyZ2VEaWZmKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hv
dWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3Vs
ZEFudGlhbGlhcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBtZXJn
ZURpZmYoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlRGlmZihDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBzdGF0ZUNoYW5nZU5hbWUoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZSBjaGFuZ2UpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHN0YXRlQ2hhbmdlTmFt
ZXNbXSA9IHsKKyAgICAgICAgImN0bSIsCisKKyAgICAgICAgImZpbGwtYnJ1c2giLAorICAgICAg
ICAiZmlsbC1ydWxlIiwKKworICAgICAgICAic3Ryb2tlLWJydXNoIiwKKyAgICAgICAgInN0cm9r
ZS10aGlja25lc3MiLAorICAgICAgICAic3Ryb2tlLXN0eWxlIiwKKworICAgICAgICAibGluZS1j
YXAiLAorICAgICAgICAibGluZS1kYXNoIiwKKyAgICAgICAgImxpbmUtam9pbiIsCisgICAgICAg
ICJtaXRlci1saW1pdCIsCisKKyAgICAgICAgImNvbXBvc2l0ZS1tb2RlIiwKKyAgICAgICAgImRy
b3Atc2hhZG93IiwKKworICAgICAgICAiYWxwaGEiLAorICAgICAgICAiaW1hZ2UtaW50ZXJwb2xh
dGlvbi1xdWFsaXR5IiwKKyAgICAgICAgInRleHQtZHJhd2luZy1tb2RlIiwKKworICAgICAgICAi
c2hvdWxkLWFudGlhbGlhcyIsCisgICAgICAgICJzaG91bGQtc21vb3RoLWZvbnRzIiwKKyAgICAg
ICAgInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsCisgICAgICAgICJzaGFkb3dzLWln
bm9yZS10cmFuc2Zvcm1zIiwKKyAgICAgICAgImRyYXctbHVtaW5hbmNlLW1hc2siCisjaWYgSEFW
RShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAgICAgLCAidXNlLWRhcmstYXBwZWFyYW5jZSIK
KyNlbmRpZgorICAgIH07CisKKyAgICB1bnNpZ25lZCBtYXNrID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNoYW5nZSk7CisgICAgQVNTRVJUKCEoKG1hc2sgLSAxKSAmIG1hc2spKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2cyKG1hc2spKTsKKyAg
ICByZXR1cm4gc3RhdGVDaGFuZ2VOYW1lc1tpbmRleF07Cit9CisKK1RleHRTdHJlYW0mIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGF1dG8g
ZHVtcCA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJv
cGVydHksIGNvbnN0IFN0cmluZyYgbmFtZSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhjaGFuZ2UpKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KG5hbWUsIHRoaXMt
Pipwcm9wZXJ0eSk7CisgICAgfTsKKworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdlLWZsYWdz
IiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBkdW1wKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q1RNKSk7CisKKyAgICBkdW1wKENo
YW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6RmlsbEJydXNoKSk7CisgICAgZHVtcChDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkZpbGxSdWxlKSk7CisKKyAgICBkdW1wKENo
YW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6U3Ryb2tlQnJ1c2gpKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MsICAgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSk7CisgICAg
ZHVtcChDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFt
ZShDaGFuZ2U6OlN0cm9rZVN0eWxlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6TGluZUNhcCwgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwLCAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUNhcCkpOworICAg
IGR1bXAoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2xpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5h
bWUoQ2hhbmdlOjpMaW5lRGFzaCkpOworICAgIGR1bXAoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luLCAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpMaW5lSm9pbikpOworICAgIGR1
bXAoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX21pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUo
Q2hhbmdlOjpNaXRlckxpbWl0KSk7CisKKyAgICBkdW1wKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCAg
ICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q29tcG9zaXRlTW9kZSkpOwor
ICAgIGR1bXAoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5n
ZU5hbWUoQ2hhbmdlOjpEcm9wU2hhZG93KSk7CisKKyAgICBkdW1wKENoYW5nZTo6QWxwaGEsICAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6QWxwaGEpKTsKKyAg
ICBkdW1wKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAgIGR1bXAoQ2hhbmdl
OjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3RleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpU
ZXh0RHJhd2luZ01vZGUpKTsKKworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcywgICAg
ICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMpKTsKKyAg
ICBkdW1wKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMpKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKSk7CisgICAgZHVtcChDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zLCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMsICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKSk7CisgICAgZHVtcChDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgIHN0
YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrKSk7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBkdW1wKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UpKTsKKyNl
bmRpZgorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSBjaGFuZ2UpCit7CisgICAgdHMg
PDwgc3RhdGVDaGFuZ2VOYW1lKGNoYW5nZSk7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIHN0YXRlLmR1bXAodHMpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmU0Y2VhM2MyZDU4Yzg3YjQ5
MjM4NDc1ZTQ2OGI1ZGZkNWVlM2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApAQCAtMCwwICsxLDM4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VCcnVzaC5oIgorI2luY2x1ZGUgIldpbmRSdWxlLmgi
CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENoYW5n
ZSA6IHVpbnQzMl90IHsKKyAgICAgICAgQ1RNICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAorCisgICAgICAgIEZpbGxCcnVzaCAgICAgICAgICAgICAgICAgICA9IDEgPDwgMSwKKyAg
ICAgICAgRmlsbFJ1bGUgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAorCisgICAgICAgIFN0
cm9rZUJydXNoICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICAgICAgU3Ryb2tlVGhpY2tu
ZXNzICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAgICBTdHJva2VTdHlsZSAgICAgICAgICAg
ICAgICAgPSAxIDw8IDUsCisKKyAgICAgICAgTGluZUNhcCAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCA2LAorICAgICAgICBMaW5lRGFzaCAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisg
ICAgICAgIExpbmVKb2luICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgTWl0
ZXJMaW1pdCAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorCisgICAgICAgIENvbXBvc2l0ZU1v
ZGUgICAgICAgICAgICAgICA9IDEgPDwgMTAsCisgICAgICAgIERyb3BTaGFkb3cgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMTEsCisKKyAgICAgICAgQWxwaGEgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAxMiwKKyAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSAgID0gMSA8PCAx
MywKKyAgICAgICAgVGV4dERyYXdpbmdNb2RlICAgICAgICAgICAgID0gMSA8PCAxNCwKKworICAg
ICAgICBTaG91bGRBbnRpYWxpYXMgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAgICAgICBTaG91
bGRTbW9vdGhGb250cyAgICAgICAgICAgPSAxIDw8IDE2LAorICAgICAgICBTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMgPSAxIDw8IDE3LAorICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyAgICAgPSAxIDw8IDE4LAorICAgICAgICBEcmF3THVtaW5hbmNlTWFzayAgICAgICAgICAgPSAx
IDw8IDE5LAorI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgIFVzZURhcmtB
cHBlYXJhbmNlICAgICAgICAgICA9IDEgPDwgMjAsCisjZW5kaWYKKyAgICB9OworICAgIHVzaW5n
IENoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IENoYW5nZUZsYWdzIGluaXRpYWxDaGFuZ2VGbGFncyA9IHsgQ2hhbmdlOjpGaWxsQnJ1c2gsIENo
YW5nZTo6U3Ryb2tlQnJ1c2gsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzIH07CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwQm91bmRzLCBjb25zdCBDaGFuZ2VGbGFncyYgPSB7IH0sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgaW5pdGlhbENUTSA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0OworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsg
bV9jbGlwQm91bmRzLmludGVyc2VjdChtX2N0bS5tYXBSZWN0KHJlY3QpKTsgfQorCisgICAgQ2hh
bmdlRmxhZ3MgY2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlRmxhZ3M7IH0KKyAgICB2
b2lkIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCkgeyBtX2NoYW5nZUZsYWdzID0geyB9OyB9CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9jdG07IH0KKyAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSwgY29uc3Qgc3RkOjpvcHRpb25h
bDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHko
Q2hhbmdlOjpDVE0sICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sIGN0bSwgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IFNvdXJjZUJydXNoJiBmaWxsQnJ1c2goKSBjb25zdCB7
IHJldHVybiBtX2ZpbGxCcnVzaDsgfQorICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvciwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RB
cHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpGaWxsQnJ1c2gsICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxsQnJ1c2guc2V0R3JhZGll
bnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQo
Q2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1f
ZmlsbEJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyBt
X2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVzaCk7IH0KKworICAgIFdpbmRSdWxlIGZp
bGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbFJ1bGUs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSwgZmlsbFJ1bGUsIGxhc3RBcHBsaWVk
U3RhdGUpOyB9CisKKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1c2goKSBjb25zdCB7
IHJldHVybiBtX3N0cm9rZUJydXNoOyB9CisgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBD
b2xvciYgY29sb3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBs
YXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlQnJ1c2gsICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgeyBjb2xvciB9LCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRp
ZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1
c2guc2V0R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFu
Z2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFj
ZVRyYW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwg
c3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsg
fQorCisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VU
aGlja25lc3M7IH0KKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlj
a25lc3MsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBw
bGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MsIGxhc3RB
cHBsaWVkU3RhdGUpOyB9CisKKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3Ryb2tlU3R5bGU7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsIHN0cm9rZVN0eWxlLCBsYXN0QXBw
bGllZFN0YXRlKTsgfQorCisgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5lQ2FwOyB9CisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0
UHJvcGVydHkoQ2hhbmdlOjpMaW5lQ2FwLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNh
cCwgbGluZUNhcCwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IExpbmVEYXNoJiBs
aW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZURhc2g7IH0KKyAgICB2b2lkIHNldExpbmVE
YXNoKExpbmVEYXNoJiYgbGluZURhc2gsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250
ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZURh
c2gsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCwgV1RGTW92ZShsaW5lRGFzaCks
IGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUpvaW47IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVK
b2luLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVKb2luLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUpvaW4sIGxpbmVKb2luLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAg
ZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQorICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFu
Z2U6Ok1pdGVyTGltaXQsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCBtaXRl
ckxpbWl0LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIENvbXBvc2l0ZU1vZGUgY29t
cG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlTW9kZTsgfQorICAgIHZvaWQg
c2V0Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFBy
b3BlcnR5KENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Nv
bXBvc2l0ZU1vZGUsIGNvbXBvc2l0ZU1vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisg
ICAgY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcFNo
YWRvdzsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hh
ZG93LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkRyb3BTaGFkb3csICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9kcm9wU2hhZG93LCBkcm9wU2hhZG93LCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2FscGhhOyB9CisgICAgdm9pZCBz
ZXRBbHBoYShmbG9hdCBhbHBoYSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRT
dGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpBbHBoYSwgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhLCBhbHBoYSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICAKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisgICAgdm9p
ZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIGxhc3RBcHBsaWVkU3RhdGUp
OyB9CisgICAgCisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5n
TW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3Bl
cnR5KENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4
dERyYXdpbmdNb2RlLCB0ZXh0RHJhd2luZ01vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAg
ICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQW50aWFsaWFz
OyB9CisgICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRl
KSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzLCBzaG91bGRBbnRpYWxpYXMsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9z
aG91bGRTbW9vdGhGb250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBz
aG91bGRTbW9vdGhGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRTbW9vdGhG
b250cywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzLCBzaG91bGRT
bW9vdGhGb250cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0Nv
bnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25z
dCB7IHJldHVybiBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CisgICAgdm9pZCBzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBz
ZXRQcm9wZXJ0eShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX2RyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgdm9pZCBzZXRE
cmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0
eShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJh
d0x1bWluYW5jZU1hc2ssIGRyYXdMdW1pbmFuY2VNYXNrLCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBlYXJh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV91c2VEYXJrQXBwZWFyYW5jZTsgfQorICAgIHZvaWQgc2V0
VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSwgY29uc3Qgc3RkOjpvcHRp
b25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVy
dHkoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Vz
ZURhcmtBcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyNlbmRpZgorCisgICAgYm9vbCBoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0OworICAg
IHZvaWQgbWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7Cisg
ICAgdm9pZCBtZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7CisK
KyAgICBXVEY6OlRleHRTdHJlYW0mIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3ND
b250ZXh0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgY29uc3QgVCYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gdmFsdWU7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Mu
c2V0KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJv
cGVydHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgc2V0UHJvcGVydHkoQ2hhbmdlIGNoYW5nZSwgVCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6KnByb3BlcnR5LCBUJiYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhp
Y3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhp
cy0+KnByb3BlcnR5ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Muc2V0
KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJvcGVy
dHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgbV9jbGlwQm91
bmRzOworCisgICAgQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBtX2N0bTsKKworICAgIFNvdXJjZUJydXNoIG1fZmlsbEJydXNoIHsgQ29sb3I6OmJsYWNr
IH07CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07CisKKyAg
ICBTb3VyY2VCcnVzaCBtX3N0cm9rZUJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgZmxvYXQg
bV9zdHJva2VUaGlja25lc3MgeyAwIH07CisgICAgU3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZSB7
IFNvbGlkU3Ryb2tlIH07CisKKyAgICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1dHQg
fTsKKyAgICBMaW5lRGFzaCBtX2xpbmVEYXNoOworICAgIExpbmVKb2luIG1fbGluZUpvaW4geyBM
aW5lSm9pbjo6TWl0ZXIgfTsKKyAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAwIH07CisKKyAgICBD
b21wb3NpdGVNb2RlIG1fY29tcG9zaXRlTW9kZSB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9OworICAgIERyb3BTaGFkb3cgbV9kcm9wU2hhZG93Owor
CisgICAgZmxvYXQgbV9hbHBoYSB7IDEgfTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2lt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9
OworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdp
bmdNb2RlOjpGaWxsIH07CisKKyAgICBib29sIG1fc2hvdWxkQW50aWFsaWFzIHsgdHJ1ZSB9Owor
ICAgIGJvb2wgbV9zaG91bGRTbW9vdGhGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RyYXdMdW1pbmFuY2VNYXNrIHsgZmFs
c2UgfTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgbV91c2VEYXJr
QXBwZWFyYW5jZSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBhdXRvIGVuY29kZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdGhpcy0+KnByb3BlcnR5
OworICAgIH07CisKKyAgICBlbmNvZGVyIDw8IG1fY2xpcEJvdW5kczsKKworICAgIGVuY29kZXIg
PDwgbV9jaGFuZ2VGbGFnczsKKworICAgIGVuY29kZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgZW5j
b2RlKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6RmlsbFJ1bGUsICAg
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsK
KworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6
U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3N0cm9rZVRoaWNrbmVzcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKwor
ICAgIGVuY29kZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lRGFz
aCwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURh
c2gpOworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgZW5jb2RlKENoYW5nZTo6
TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X21pdGVyTGltaXQpOworCisgICAgZW5jb2RlKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAg
IGVuY29kZShDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkFscGhh
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBo
YSk7CisgICAgZW5jb2RlKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAg
IGVuY29kZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6
U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZEFudGlhbGlhcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMs
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRz
KTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAg
ICBlbmNvZGUoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIGVuY29kZShD
aGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9S
VCkKKyAgICBlbmNvZGUoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgYXV0byBkZWNvZGUgPSBbJl0oR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDaGFuZ2Ug
Y2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAg
aWYgKCFzdGF0ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICB1c2luZyBQcm9wZXJ0eVR5cGUgPSB0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9yZWZlcmVuY2U8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPigpLipwcm9wZXJ0eSk+Ojp0eXBlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFByb3BlcnR5
VHlwZT4gdmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RhdGUuKnByb3BlcnR5
ID0gKnZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGNsaXBCb3VuZHM7CisgICAgZGVjb2RlciA+PiBjbGlwQm91bmRzOwor
ICAgIGlmICghY2xpcEJvdW5kcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOworICAgIGRlY29kZXIgPj4g
Y2hhbmdlRmxhZ3M7CisgICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlKCpjbGlwQm91bmRzLCAq
Y2hhbmdlRmxhZ3MpOworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6Q1RNLCAgICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Zp
bGxCcnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUo
c3RhdGUsIENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVRoaWNr
bmVzcywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVz
cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUs
IENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc3Ryb2tlU3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZURhc2gsICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVK
b2luLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2lu
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9taXRlckxpbWl0KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyb3BTaGFkb3csICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
YWxwaGEpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0
YXRlLCBDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlRleHREcmF3aW5nTW9k
ZSwgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zaG91bGRBbnRpYWxpYXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcmF3
THVtaW5hbmNlTWFzaywgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVt
aW5hbmNlTWFzaykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpVc2VEYXJr
QXBwZWFyYW5jZSwgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBw
ZWFyYW5jZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKKworICAgIHJl
dHVybiBzdGF0ZTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSk7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpD
VE0sCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Rmls
bEJydXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpG
aWxsUnVsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpTdHJva2VCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlVGhpY2tuZXNzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4sCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQsCisKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdywKKworICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYSwKKyAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4
dERyYXdpbmdNb2RlLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZEFudGlhbGlhcywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywKKyAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBw
ZWFyYW5jZQorI2VuZGlmCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3MjEzMjg1MjYxZTY5MGNhMzA2MGQ3ZTAyNmU1
MGU1MmVlYTU5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJl
c3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1f
c2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAgICBpZiAobV9zYXZl
QW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgfQorICAgIAor
ICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3Nh
dmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVz
dG9yZSk7CisgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBB
U1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Cisg
ICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQorCitwcml2
YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIGJvb2wgbV9zYXZlQW5k
UmVzdG9yZTsKK307CisKK2NsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgeworcHVibGljOgor
ICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9h
dCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgLCBtX2FscGhhKGFscGhhKQorICAgICAgICAsIG1fYmVnYW5MYXllcihi
ZWdpbkxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKGJlZ2luTGF5ZXIpCisgICAgICAgICAgICBt
X2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQorICAgIHsKKyAgICAgICAgbV9hbHBoYSA9
IGFscGhhOworICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhh
KTsKKyAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgflRyYW5z
cGFyZW5jeUxheWVyU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKKyAg
ICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBmbG9hdCBtX2FscGhh
OworICAgIGJvb2wgbV9iZWdhbkxheWVyOworfTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTdGFja0NoZWNrZXIgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQorICAgIHsg
fQorCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9zdGFja1NpemUpCisgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBzdGFjayBjaGFuZ2VkIGJ5ICVkIiwg
Jm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXplKCkgLSAoaW50KW1fc3RhY2tTaXpl
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Cisg
ICAgdW5zaWduZWQgbV9zdGFja1NpemU7Cit9OworCitjbGFzcyBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW50ZXJwb2xhdGlv
blF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICAgICAgOiBtX2dyYXBoaWNz
Q29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgICAgICwgbV9jdXJyZW50SW50ZXJwb2xhdGlv
blF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAg
ICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZChpbnRlcnBvbGF0aW9uUXVhbGl0
eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0ICYmIG1fY3VycmVudEludGVy
cG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgeworICAg
ICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dy
YXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGludGVycG9sYXRpb25R
dWFsaXR5VG9Vc2UpOworICAgIH0KKworICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgc3RkOjpvcHRpb25h
bDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkpCisgICAgICAgIDog
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBoaWNzQ29udGV4dCwgaW50ZXJwb2xh
dGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52YWx1ZSgpIDogZ3JhcGhpY3NDb250
ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICB7CisgICAgfQorCisgICAgfklu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCisgICAgeworICAgICAgICBpZiAobV9pbnRl
cnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5z
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29u
dGV4dDsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVh
bGl0eTsKKyAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCAxNWRmMWRmZGI2ZjNhMTZhZDVlYWY2NDcyNjFm
Y2ZjNGI3YTkzYWI0Li42MmY5ZjQ2NGMzZDZkOWQ1YTA5Y2E1YTRiN2JkOGExMDM2MTU5MWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmNwcApAQCAtMTI2LDI3ICsxMjYsNTEgQEAgU3RyaW5nIGJsZW5kTW9kZU5hbWUoQmxlbmRNb2Rl
IGJsZW5kT3ApCiAgICAgcmV0dXJuIGJsZW5kT3BlcmF0b3JOYW1lc1tzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oYmxlbmRPcCkgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQmxlbmRNb2RlOjpOb3JtYWwp
XTsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKK3sKKyAgICByZXR1cm4gdHMgPDwgYmxlbmRNb2RlTmFtZShibGVuZE1vZGUp
OworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVN
b2RlIGNvbXBvc2l0ZU1vZGUpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3Bl
cmF0aW9uIiwgY29tcG9zaXRlTW9kZS5vcGVyYXRpb24pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
YmxlbmQtbW9kZSIsIGNvbXBvc2l0ZU1vZGUuYmxlbmRNb2RlKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQogewogICAgIHJldHVybiB0cyA8PCBjb21wb3NpdGVPcGVyYXRvck5hbWUob3AsIEJs
ZW5kTW9kZTo6Tm9ybWFsKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpCiB7Ci0gICAgcmV0dXJuIHRz
IDw8IGJsZW5kTW9kZU5hbWUoYmxlbmRNb2RlKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRv
dy1vZmZzZXQiLCBkcm9wU2hhZG93Lm9mZnNldCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFk
b3ctYmx1ciIsIGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJz
aGFkb3ctY29sb3IiLCBkcm9wU2hhZG93LmNvbG9yKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBkcm9wU2hhZG93LnJhZGl1c01vZGUgPT0gU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdpbmRSdWxlIHJ1bGUpCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9u
UXVhbGl0eSkKIHsKLSAgICBzd2l0Y2ggKHJ1bGUpIHsKLSAgICBjYXNlIFdpbmRSdWxlOjpOb25a
ZXJvOgotICAgICAgICB0cyA8PCAiTk9OLVpFUk8iOworICAgIHN3aXRjaCAoaW50ZXJwb2xhdGlv
blF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAg
ICAgICB0cyA8PCAiREVGQVVMVCI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2luZFJ1bGU6
OkV2ZW5PZGQ6Ci0gICAgICAgIHRzIDw8ICJFVkVOLU9ERCI7CisgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgdHMgPDwgIkRPLU5PVC1JTlRF
UlBPTEFURSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkxvdzoKKyAgICAgICAgdHMgPDwgIkxPVyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgdHMgPDwgIk1FRElVTSI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAg
IHRzIDw8ICJIRUlHSCI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQogICAgIHJldHVybiB0czsK
IH0KIApAQCAtMTY2LDYgKzE5MCwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBMaW5lQ2FwIGNhcFN0eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZURhc2gpCit7CisgICAgcmV0dXJuIHRz
OworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBq
b2luU3R5bGUpCiB7CiAgICAgc3dpdGNoIChqb2luU3R5bGUpIHsKQEAgLTE4Miw0ICsyMTEsNTYg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gam9pblN0
eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit7CisgICAgc3dpdGNoIChzdHJva2VT
dHlsZSkgeworICAgIGNhc2UgU3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlOgorICAgICAgICB0cyA8PCAi
Tk8tU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6U29saWRT
dHJva2U6CisgICAgICAgIHRzIDw8ICJTT0xJRC1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2U6CisgICAgICAgIHRzIDw8ICJET1RURUQt
U1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RGFzaGVkU3Ry
b2tlOgorICAgICAgICB0cyA8PCAiREFTSEVELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRPVUJMRS1T
VFJPS0UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tl
OgorICAgICAgICB0cyA8PCAiV0FWWS1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBUZXh0RHJhd2luZ01vZGUgdGV4dERyYXdpbmdNb2RlKQoreworICAgIHN3aXRjaCAodGV4dERy
YXdpbmdNb2RlKSB7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OkZpbGw6CisgICAgICAgIHRz
IDw8ICJGSUxMIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OlN0
cm9rZToKKyAgICAgICAgdHMgPDwgIlNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFdpbmRSdWxlIHJ1bGUpCit7CisgICAgc3dpdGNoIChydWxlKSB7CisgICAgY2FzZSBXaW5kUnVs
ZTo6Tm9uWmVybzoKKyAgICAgICAgdHMgPDwgIk5PTi1aRVJPIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXaW5kUnVsZTo6RXZlbk9kZDoKKyAgICAgICAgdHMgPDwgIkVWRU4tT0REIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmgKaW5kZXggNGQyMDRlOTdlNWM1NDRkNzc2YmZhN2YzMGFhY2MxYjdjNDYzZTBlMC4u
MGY4YjJkMDI3NTViZmFlYzY1ZDk1YzA0ZjJjNDViNTI0OTRmMjYzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGFz
aEFycmF5LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIK
ICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC03Myw2ICs3Niw3OSBAQCBlbnVtIGNsYXNzIEJsZW5kTW9kZSA6IHVpbnQ4X3QgewogICAgIFBs
dXNMaWdodGVyCiB9OwogCitzdHJ1Y3QgQ29tcG9zaXRlTW9kZSB7CisgICAgQ29tcG9zaXRlT3Bl
cmF0b3Igb3BlcmF0aW9uOworICAgIEJsZW5kTW9kZSBibGVuZE1vZGU7CisKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ29tcG9zaXRlTW9kZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1
cm4gb3BlcmF0aW9uID09IG90aGVyLm9wZXJhdGlvbiAmJiBibGVuZE1vZGUgPT0gb3RoZXIuYmxl
bmRNb2RlOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3Rl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENvbXBvc2l0ZU1vZGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgb3BlcmF0aW9uOworICAgIGVuY29k
ZXIgPDwgYmxlbmRNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRp
b25hbDxDb21wb3NpdGVNb2RlPiBDb21wb3NpdGVNb2RlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBvcGVyYXRpb247Cisg
ICAgZGVjb2RlciA+PiBvcGVyYXRpb247CisgICAgaWYgKCFvcGVyYXRpb24pCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRN
b2RlOworICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOworICAgIGlmICghYmxlbmRNb2RlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb3BlcmF0aW9uLCAq
YmxlbmRNb2RlIH0gfTsKK30KKworc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAg
ICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgVGV4dENoZWNraW5nRGljdGF0
aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKKyAgICAgICAgU3BlbGxpbmcsCisgICAgICAgIEdy
YW1tYXIsCisgICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgICAgIERpY3Rh
dGlvbkFsdGVybmF0aXZlcworICAgIH0gbW9kZTsKKyAgICBib29sIHNob3VsZFVzZURhcmtBcHBl
YXJhbmNlIHsgZmFsc2UgfTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsK
K307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0
eWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1v
ZGU7CisgICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+
IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlm
ICghbW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRV
c2VEYXJrQXBwZWFyYW5jZTsKKyAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqbW9kZSwgKnNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlIH0gfTsKK30KKwogZW51bSBjbGFzcyBHcmFkaWVudFNwcmVhZE1l
dGhvZCA6IHVpbnQ4X3QgewogICAgIFBhZCwKICAgICBSZWZsZWN0LApAQCAtOTMsNiArMTY5LDQy
IEBAIGVudW0gY2xhc3MgTGluZUNhcCA6IHVpbnQ4X3QgewogICAgIFNxdWFyZQogfTsKIAorc3Ry
dWN0IExpbmVEYXNoIHsKKyAgICBEYXNoQXJyYXkgZGFzaGVzOworICAgIGZsb2F0IG9mZnNldDsK
KyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IExpbmVEYXNoJiBhLCBjb25zdCBMaW5lRGFzaCYgYikKK3sKKyAgICByZXR1cm4gYS5k
YXNoZXMgPT0gYi5kYXNoZXMgJiYgYS5vZmZzZXQgPT0gYi5vZmZzZXQ7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGRhc2hlczsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGluZURhc2g+IExp
bmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERh
c2hBcnJheT4gZGFzaGVzOworICAgIGRlY29kZXIgPj4gZGFzaGVzOworICAgIGlmICghZGFzaGVz
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9h
dD4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpkYXNo
ZXMpLCAqb2Zmc2V0IH0gfTsKK30KKwogZW51bSBjbGFzcyBMaW5lSm9pbiA6IHVpbnQ4X3Qgewog
ICAgIE1pdGVyLAogICAgIFJvdW5kLApAQCAtMTA1LDYgKzIxNyw3NiBAQCBlbnVtIEhvcml6b250
YWxBbGlnbm1lbnQgewogICAgIEFsaWduSENlbnRlcgogfTsKIAorLy8gTGVnYWN5IHNoYWRvdyBi
bHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisv
LyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xhc3Mg
U2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9Owor
CitzdHJ1Y3QgRHJvcFNoYWRvdyB7CisgICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICBmbG9hdCBi
bHVyUmFkaXVzIHsgMCB9OworICAgIENvbG9yIGNvbG9yOworICAgIFNoYWRvd1JhZGl1c01vZGUg
cmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKKyAgICAKKyAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9v
bCBpc0JsdXJyZWQoKSBjb25zdCB7IHJldHVybiBpc1Zpc2libGUoKSAmJiBibHVyUmFkaXVzOyB9
CisgICAgYm9vbCBoYXNPdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gaXNCbHVycmVkKCkgfHwgKGlz
VmlzaWJsZSgpICYmICFvZmZzZXQuaXNaZXJvKCkpOyB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IGRlY29kZShEZWNv
ZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERyb3BTaGFkb3cmIGEs
IGNvbnN0IERyb3BTaGFkb3cmIGIpCit7CisgICAgcmV0dXJuIGEub2Zmc2V0ID09IGIub2Zmc2V0
ICYmIGEuYmx1clJhZGl1cyA9PSBiLmJsdXJSYWRpdXMgJiYgYS5jb2xvciA9PSBiLmNvbG9yICYm
IGEucmFkaXVzTW9kZSA9PSBiLnJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIERyb3BTaGFkb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgb2Zmc2V0OworICAgIGVuY29kZXIgPDwgYmx1clJhZGl1czsKKyAgICBl
bmNvZGVyIDw8IGNvbG9yOworICAgIGVuY29kZXIgPDwgcmFkaXVzTW9kZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gRHJvcFNoYWRvdzo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+
IG9mZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJsdXJS
YWRpdXM7CisgICAgZGVjb2RlciA+PiBibHVyUmFkaXVzOworICAgIGlmICghYmx1clJhZGl1cykK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+
IGNvbG9yOworICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9k
ZT4gcmFkaXVzTW9kZTsKKyAgICBkZWNvZGVyID4+IHJhZGl1c01vZGU7CisgICAgaWYgKCFyYWRp
dXNNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAq
b2Zmc2V0LCAqYmx1clJhZGl1cywgKmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07Cit9CisKK2VudW0g
U3Ryb2tlU3R5bGUgeworICAgIE5vU3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tlLAorICAgIERvdHRl
ZFN0cm9rZSwKKyAgICBEYXNoZWRTdHJva2UsCisgICAgRG91YmxlU3Ryb2tlLAorICAgIFdhdnlT
dHJva2UsCit9OworCiBlbnVtIFRleHRCYXNlbGluZSB7CiAgICAgQWxwaGFiZXRpY1RleHRCYXNl
bGluZSwKICAgICBUb3BUZXh0QmFzZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwyOSBAQCBlbnVtIFRl
eHRBbGlnbiB7CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLVN0cmluZyBjb21wb3NpdGVPcGVy
YXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7
Ci1TdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwotYm9vbCBwYXJzZUJs
ZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKLWJvb2wgcGFyc2VD
b21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0
ZU9wZXJhdG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CitlbnVtIGNsYXNzIFRleHREcmF3aW5n
TW9kZSA6IHVpbnQ4X3QgeworICAgIEZpbGwgPSAxIDw8IDAsCisgICAgU3Ryb2tlID0gMSA8PCAx
LAorfTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRl
T3BlcmF0b3IpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKK3VzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0g
T3B0aW9uU2V0PFRleHREcmF3aW5nTW9kZT47CisKK1N0cmluZyBjb21wb3NpdGVPcGVyYXRvck5h
bWUoQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CitTdHJpbmcgYmxlbmRNb2RlTmFtZShC
bGVuZE1vZGUpOworYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBCbGVuZE1vZGUm
KTsKK2Jvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENv
bXBvc2l0ZU9wZXJhdG9yJiwgQmxlbmRNb2RlJik7CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBCbGVuZE1vZGUpOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENv
bXBvc2l0ZU9wZXJhdG9yKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDb21wb3NpdGVNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEcm9wU2hh
ZG93Jik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExp
bmVEYXNoKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgU3Ryb2tlU3R5bGUpOworV0VCQ09SRV9FWFBP
UlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFRleHREcmF3
aW5nTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKQEAg
LTIxOSw0ICs0MTQsMzUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpM
aW5lSm9pbj4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlN0cm9rZVN0eWxlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICBXZWJDb3JlOjpTdHJva2VTdHlsZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6Tm9TdHJv
a2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAorICAgIFdlYkNvcmU6
OlN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRh
c2hlZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG91YmxlU3Ryb2tlLAorICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlPiB7CisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2Rl
LAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OkZpbGwsCisgICAgICAgIFdlYkNv
cmU6OlRleHREcmF3aW5nTW9kZTo6U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpNb2RlLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
OjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAorICAg
IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKKyAgICBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNl
bWVudCwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVzCisgICAgPjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VH
ZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggNGUwNzFmNzJmMzViZThhNThmYzRjZDU3N2ExNDU2ZGUx
NzQ2NjgyYy4uNDFiMDUxMWE4Zjc4YTE3OWIzMDRjZjg5ZDQxMDNlMzVkZTNlMTI1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYW1lZElt
YWdlR2VuZXJhdGVkSW1hZ2UuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBO
YW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGCiB7CiAjaWYgVVNFKE5FV19USEVNRSkgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBv
cHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRp
b25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29u
dGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QubG9jYXRp
b24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oCmluZGV4IGI2MjM2Nzg4MGUzZTUzNTRiNjE3MTEzNDdjOWExMWI0MjI0Njg4NWUuLmQ2N2Qz
ZWExMTVkMjRlZmQ5MDllMDNhYzlhZGU5M2E4YjQ3NjRmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsODcg
KzM4LDU3IEBAIHB1YmxpYzoKICAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CiAgICAg
fTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJl
YXNvbnMpCi0gICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAg
ICBOdWxsR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIFBhaW50
SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQorICAgICAgICA6IEdyYXBoaWNzQ29udGV4dChp
bml0aWFsQ2xpcCkKKyAgICAgICAgLCBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25z
KQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0KICAgICBib29sIHBhaW50
aW5nRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBwZXJm
b3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52
YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KICAg
ICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJl
YXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzOyB9CiAgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQogCi0gICAgdm9pZCBk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KLQotI2lmIFVTRShDRykKLSAgICB2
b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQotI2VuZGlmCi0KLSAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfTsKLQotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KLQotICAgIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotCisgICAgdm9pZCBzYXZlKCkgZmluYWwg
eyB9CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVN0YXRlQ2hh
bmdlcygpIGZpbmFsIHsgfTsKICNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRl
cm4oKSBmaW5hbCB7IH0KICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KLSAg
ICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgdm9p
ZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQotICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAg
IHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9Ci0g
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBS
b3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9Ci0gICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFz
aEFycmF5JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWwgeyB9Ci0gICAgdm9p
ZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0
KGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsIHsg
fQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWwgeyB9Ci0gICAgdm9pZCBy
b3RhdGUoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmlu
YWwgeyB9Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwgeyB9
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJs
eUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWwgeyB9CisKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCkgZmluYWwgeyB9CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsIHsgfQotICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgcmVzdG9yZSgp
IGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBGbG9hdFNpemUgZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQp
IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsg
fQorICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAKLSAgICB2b2lk
IGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21TdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3
QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2Fk
ZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQorICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsIHsgfQor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQogCi0gICAgSW1hZ2VEcmF3UmVz
dWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAg
IHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7
IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxv
YXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CkBAIC0xMjcsMjgg
Kzk3LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KICNlbmRp
ZgogCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0KLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0Um91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0K
LQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0K
LQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotCisgICAgdm9pZCBkcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBGaWx0ZXIm
LCBGaWx0ZXJSZXN1bHRzJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbCB7IH0KICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KICNlbmRpZgog
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwg
U3Ryb2tlU3R5bGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisK
KyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KKwog
I2lmIE9TKFdJTkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotcHJpdmF0ZToKICAgICBjb25zdCBQYWludEludmFsaWRh
dGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgeyBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6Ok5vbmUgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdl
MDFmZDM5NDY0MzM5ZDJkNGQ1NGJhOTM2NGM1OTQ1Y2ZhZDdkNWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAi
RElCUGl4ZWxEYXRhLmgiCit0eXBlZGVmIHN0cnVjdCBIRENfXyogSERDOworI2lmICFVU0UoQ0cp
CisvLyBVSW50OCBpcyBkZWZpbmVkIGluIENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oCit0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgVUludDg7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFKENHKQordXNp
bmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBzdHJ1Y3QgQ0dDb250ZXh0OworI2VsaWYgVVNF
KENBSVJPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87
Cit9Cit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOworI2Vsc2UKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gdm9pZDsK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcAppbmRleCBiYjEzOGI1Mjk3YTUyMWZiZjdkNjkzY2QxMTQxMDQ0MDBmY2FiYzRlLi45MDI0
ZjVkMWFiZmNlMzgwODE4M2EzYjIzMWZiY2UwZmZiMmZmNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkxLDE3ICsxOTEsMTcg
QEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICB1cGRhdGVTaGFkb3dCbHVyVmFsdWVzKCk7
CiB9CiAKLVNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlKQotICAgIDogbV9jb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIG1fYmx1clJh
ZGl1cyhzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dCbHVyKQotICAgICwgbV9vZmZzZXQo
c3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3Qg
RHJvcFNoYWRvdyYgZHJvcFNoYWRvdywgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKKyAg
ICA6IG1fY29sb3IoZHJvcFNoYWRvdy5jb2xvcikKKyAgICAsIG1fYmx1clJhZGl1cyhkcm9wU2hh
ZG93LmJsdXJSYWRpdXMsIGRyb3BTaGFkb3cuYmx1clJhZGl1cykKKyAgICAsIG1fb2Zmc2V0KGRy
b3BTaGFkb3cub2Zmc2V0KQorICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gQ29yZSBHcmFwaGljcyBp
bmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJv
YmxlbS84MTAzNDQyPiksCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdn
eSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgaWYgKHN0
YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KSB7Ci0gICAg
ICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0ZS5zaGFkb3dC
bHVyKTsKKyAgICBpZiAoZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSkgeworICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRp
dXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVzKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRT
aXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCmluZGV4IDE0ZmQ4M2VkZTFhMWJh
Y2YxNzdmMzMxZWNhZDFhNDMwMjkzZjYwM2EuLjQ1ZDBlNTgzMjljZGVlYWJmYjc4YTRkNWU2N2Fi
OGQ4ODFhZTU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmgKQEAgLTM4LDggKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBB
ZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1zdHJ1Y3QgR3JhcGhpY3ND
b250ZXh0U3RhdGU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIEltYWdlQnVm
ZmVyOworc3RydWN0IERyb3BTaGFkb3c7CiAKIGNsYXNzIFNoYWRvd0JsdXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNoYWRvd0JsdXIpOwpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAK
ICAgICBTaGFkb3dCbHVyKCk7CiAgICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgYm9vbCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKLSAgICBTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJik7CisgICAgU2hhZG93Qmx1cihjb25zdCBEcm9wU2hhZG93JiwgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93VmFsdWVz
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIGJvb2wg
aWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNmFjMTNmZDI1YzZmMGY4
MDE1ODcyZmYxOWVkMjhhMWZhNTJiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTb3VyY2VCcnVzaDo6U291cmNlQnJ1c2goY29uc3QgQ29sb3ImIGNvbG9yLCBzdGQ6Om9wdGlv
bmFsPEJydXNoPiYmIGJydXNoKQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAsIG1fYnJ1c2go
V1RGTW92ZShicnVzaCkpCit7Cit9CisKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgU291cmNlQnJ1
c2g6OnNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QWZmaW5lVHJhbnNmb3JtPiBpZGVudGl0eTsKKyAgICByZXR1cm4gbV9icnVzaCA/IG1fYnJ1c2gt
PnNwYWNlVHJhbnNmb3JtIDogaWRlbnRpdHkuZ2V0KCk7Cit9CisKK0dyYWRpZW50KiBTb3VyY2VC
cnVzaDo6Z3JhZGllbnQoKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8qIGdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdy
YWRpZW50Pj4oJm1fYnJ1c2gtPmJydXNoKSkKKyAgICAgICAgcmV0dXJuIGdyYWRpZW50LT5wdHIo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGF0dGVybiogU291cmNlQnJ1c2g6OnBhdHRl
cm4oKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKGF1dG8qIHBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZtX2Jy
dXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBwYXR0ZXJuLT5wdHIoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQoUmVmPEdyYWRpZW50
PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQorewor
ICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSB9OworfQor
Cit2b2lkIFNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pCit7CisgICAgbV9icnVzaCA9IHsg
V1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKworV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTb3VyY2VCcnVzaCYgYnJ1c2gpCit7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGJydXNoLmNvbG9yKCkpOworCisgICAgaWYg
KGF1dG8gZ3JhZGllbnQgPSBicnVzaC5ncmFkaWVudCgpKQorICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoImdyYWRpZW50IiwgZ3JhZGllbnQpOworCisgICAgaWYgKGF1dG8gcGF0dGVybiA9IGJydXNo
LnBhdHRlcm4oKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuIiwgcGF0dGVybik7
CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcx
MTBmMjFmZGJlYWNiZjM1ZDc4OTBjNzhmNzM5OTc5NjRhZGZlYTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCkBAIC0wLDAg
KzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5o
IgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
b3VyY2VCcnVzaCB7CitwdWJsaWM6CisgICAgc3RydWN0IEJydXNoIHsKKyAgICAgICAgc3RkOjp2
YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4gYnJ1c2g7CisgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBzcGFjZVRyYW5zZm9ybTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEJydXNoPiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIH07CisKKyAgICBTb3VyY2VCcnVzaCgpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBTb3VyY2VCcnVzaChjb25zdCBDb2xvciYsIHN0ZDo6b3B0aW9uYWw8QnJ1c2g+JiYg
PSBzdGQ6Om51bGxvcHQpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3IgY29sb3IpIHsgbV9j
b2xvciA9IGNvbG9yOyB9CisKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYgYnJ1c2go
KSBjb25zdCB7IHJldHVybiBtX2JydXNoOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFkaWVu
dCogZ3JhZGllbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXR0ZXJuKiBwYXR0ZXJu
KCkgY29uc3Q7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSgpIGNv
bnN0OworCisgICAgdm9pZCBzZXRHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworICAgIHZvaWQgc2V0UGF0dGVybihS
ZWY8UGF0dGVybj4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsg
fSk7CisKKyAgICBib29sIGlzUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gIW1fYnJ1c2ggJiYg
bV9jb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBkZWNvZGUoRGVjb2RlciYp
OworCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBz
dGQ6Om9wdGlvbmFsPEJydXNoPiBtX2JydXNoOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50PiwgUmVmPFBhdHRlcm4+PiYgYSwgY29u
c3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGIpCit7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24oYSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+
JiBhR3JhZGllbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBiR3JhZGllbnQgPSBzdGQ6Omdl
dF9pZjxSZWY8R3JhZGllbnQ+PigmYikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFHcmFkaWVu
dC5wdHIoKSA9PSBiR3JhZGllbnQtPnB0cigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgYVBhdHRlcm4pIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBiUGF0dGVybiA9IHN0ZDo6Z2V0X2lmPFJlZjxQYXR0ZXJu
Pj4oJmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhUGF0dGVybi5wdHIoKSA9PSBiUGF0dGVy
bi0+cHRyKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICApOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYSwg
Y29uc3QgU291cmNlQnJ1c2g6OkJydXNoJiBiKQoreworICAgIHJldHVybiBhLmJydXNoID09IGIu
YnJ1c2ggJiYgYS5zcGFjZVRyYW5zZm9ybSA9PSBiLnNwYWNlVHJhbnNmb3JtOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoJiBhLCBjb25zdCBTb3VyY2VCcnVz
aCYgYikKK3sKKyAgICByZXR1cm4gYS5jb2xvcigpID09IGIuY29sb3IoKSAmJiBhLmJydXNoKCkg
PT0gYi5icnVzaCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBTb3Vy
Y2VCcnVzaDo6QnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgc3BhY2VUcmFuc2Zvcm07CisgICAgV1RGOjpzd2l0Y2hPbihicnVzaCwKKyAgICAg
ICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+JiBncmFkaWVudCkgeworICAgICAgICAgICAgZW5j
b2RlciA8PCB0cnVlIDw8IGdyYWRpZW50LmdldCgpOworICAgICAgICB9LAorICAgICAgICBbJl0g
KGNvbnN0IFJlZjxQYXR0ZXJuPiYgcGF0dGVybikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBm
YWxzZSA8PCBwYXR0ZXJuLmdldCgpOworICAgICAgICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g6OkJydXNoPiBTb3Vy
Y2VCcnVzaDo6QnJ1c2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBzcGFjZVRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHNw
YWNlVHJhbnNmb3JtOworICAgIGlmICghc3BhY2VUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGhhc0dyYWRpZW50OworICAg
IGRlY29kZXIgPj4gaGFzR3JhZGllbnQ7CisgICAgaWYgKCFoYXNHcmFkaWVudCkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBpZiAoKmhhc0dyYWRpZW50KSB7CisgICAg
ICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBp
ZiAoIWdyYWRpZW50KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIHsgeyBXVEZNb3ZlKCpncmFkaWVudCksICpzcGFjZVRyYW5zZm9ybSB9IH07CisgICAg
fQorCisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOworICAgIGlm
ICghcGF0dGVybikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7
IFdURk1vdmUoKnBhdHRlcm4pLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBTb3VyY2VCcnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9icnVz
aDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1
c2g+IFNvdXJjZUJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29s
b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0
ZDo6b3B0aW9uYWw8QnJ1c2g+PiBicnVzaDsKKyAgICBkZWNvZGVyID4+IGJydXNoOworICAgIGlm
ICghYnJ1c2gpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU291
cmNlQnJ1c2goKmNvbG9yLCBXVEZNb3ZlKCpicnVzaCkpOworfQorCitXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgU291cmNlQnJ1c2gmKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UZXh0Qm94SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBjZjY1
YmEyYzEwZTg4ODhkZDQ5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRleHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0
Qm94SXRlcmF0b3IgeworcHVibGljOgorICAgIFRleHRCb3hJdGVyYXRvcigpCisgICAgICAgIDog
bV90ZXh0UnVuKDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAg
VGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkK
KyAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CisgICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBib29s
IGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRS
dW4tPmxlbmd0aCgpOyB9CisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90
ZXh0UnVuKVttX29mZnNldF07IH0KKyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1
cnJlbnQoKSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1f
b2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
ICFvcGVyYXRvcj09KG90aGVyKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1f
dGV4dFJ1bjsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDcyOGQzYmVhMGExNzIzNTAxNGYwZjEyY2YzZDZkN2Rh
MTkzYzM1YTUuLjE1ZTg0NTU3YWM4MWE3NjdhMDA3NDZlMzAxNjE1MzU0NGYyMTU2N2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcApAQCAtMTgzNCw3ICsxODM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJl
Y3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmEK
ICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwg
c2l6ZSgpKTsKIAotICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1f
ZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVU
cmFuc2Zvcm0oKSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4dCgq
bV9kaXNwbGF5TGlzdCwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAgICAg
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1NmEy
M2E1ZmRmYjEwYWZlY2EyY2M5MmE3Mjc5NDU4MTAyZS4uNGU2MjFkNWQ0MWJhMzE0NTkxOWM5N2Iy
OTlmNDRhNjgwOWI1ZDQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0yMjcsNyArMjI3LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEYKICAgICAgICAgc29saWRGaWd1cmVFeHRlbnRzLnVu
aXRlKGZpbGxFeHRlbnRzKTsKICAgICB9CiAKLSAgICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0
YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZv
cm1Db250ZXh0KSwgc29saWRGaWd1cmVFeHRlbnRzLAorICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5
ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91
bmRzKHBsYXRmb3JtQ29udGV4dCksIHNvbGlkRmlndXJlRXh0ZW50cywKICAgICAgICAgW2NhaXJv
Q29udGV4dCwgZHJhd2luZ1N0eWxlLCAmcGF0aCwgJmZpbGxTb3VyY2UsICZzdHJva2VTb3VyY2Vd
KEdyYXBoaWNzQ29udGV4dCYgc2hhZG93Q29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAg
Y2Fpcm9fdCogY2Fpcm9TaGFkb3dDb250ZXh0ID0gc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKTsKQEAgLTM0MSw3ICszNDEsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hh
ZG93KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFNoYWRvdwog
ICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMoc2NhbGVkRm9udCwgZ2x5cGhzLmRh
dGEoKSwgZ2x5cGhzLnNpemUoKSwgJmV4dGVudHMpOwogICAgIEZsb2F0UmVjdCBmb250RXh0ZW50
c1JlY3QocG9pbnQueCgpICsgZXh0ZW50cy54X2JlYXJpbmcsIHBvaW50LnkoKSArIGV4dGVudHMu
eV9iZWFyaW5nLCBleHRlbnRzLndpZHRoLCBleHRlbnRzLmhlaWdodCk7CiAKLSAgICBzaGFkb3cu
ZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6Omdl
dENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZm9udEV4dGVudHNSZWN0LAorICAgIHNoYWRv
dy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0
YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGZvbnRFeHRlbnRzUmVjdCwKICAg
ICAgICAgW3NjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsICZnbHlwaHMsIGZvbnRTbW9v
dGhpbmdNb2RlXShHcmFwaGljc0NvbnRleHQmIHNoYWRvd0NvbnRleHQpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGRyYXdHbHlwaHNUb0NvbnRleHQoc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBmb250
U21vb3RoaW5nTW9kZSk7CkBAIC0zNjcsNyArMzY3LDcgQEAgRmxvYXRSZWN0IGNvbXB1dGVMaW5l
Qm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBs
YXQKICAgICBpZiAocHJpbnRpbmcpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBG
bG9hdFNpemUod2lkdGgsIHRoaWNrbmVzcykpOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCk7CisgICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSA9IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4
dC5jcigpKTsKICAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3Vt
aW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KICAgICBmbG9hdCBzY2FsZSA9IHRyYW5zZm9y
bS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJhbnNm
b3JtLmEoKTsKICAgICBpZiAoc2NhbGUgPCAxLjApIHsKQEAgLTQ0NiwxNyArNDQ2LDE2IEBAIHN0
YXRpYyBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBp
c1ZlcnRpY2FsTGluZSwgZmxvYXQKIAogbmFtZXNwYWNlIFN0YXRlIHsKIAotdm9pZCBzZXRTdHJv
a2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQg
c3Ryb2tlVGhpY2tuZXNzKQordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCogY3IsIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcykKIHsKLSAgICBjYWlyb19zZXRfbGluZV93aWR0aChwbGF0Zm9y
bUNvbnRleHQuY3IoKSwgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBjYWlyb19zZXRfbGluZV93aWR0
aChjciwgc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBzZXRTdHJva2VTdHlsZShHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkK
K3ZvaWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCogY3IsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KQogewogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGFzaFBhdHRlcm5bXSA9IHsgNS4wLCA1LjAg
fTsKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRvdFBhdHRlcm5bXSA9IHsgMS4wLCAxLjAgfTsK
IAotICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAgICAgc3dpdGNoIChz
dHJva2VTdHlsZSkgewogICAgIGNhc2UgTm9TdHJva2U6CiAgICAgICAgIC8vIEZJWE1FOiBpcyBp
dCB0aGUgcmlnaHQgd2F5IHRvIGVtdWxhdGUgTm9TdHJva2U/CkBAIC00NzcsMjkgKzQ3NiwyOSBA
QCB2b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eQogICAgIH0KIH0KIAotdm9pZCBzZXRDb21wb3NpdGVP
cGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBz
ZXRDb21wb3NpdGVPcGVyYXRpb24oY2Fpcm9fdCogY3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBjYWlyb19zZXRfb3Bl
cmF0b3IocGxhdGZvcm1Db250ZXh0LmNyKCksIHRvQ2Fpcm9PcGVyYXRvcihjb21wb3NpdGVPcGVy
YXRpb24sIGJsZW5kTW9kZSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgdG9DYWlyb09w
ZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CiB9CiAKLXZvaWQgc2V0U2hv
dWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGJvb2wg
ZW5hYmxlKQordm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoY2Fpcm9fdCogY3IsIGJvb2wgZW5hYmxl
KQogewogICAgIC8vIFdoZW4gdHJ1ZSwgdXNlIHRoZSBkZWZhdWx0IENhaXJvIGJhY2tlbmQgYW50
aWFsaWFzIG1vZGUgKHVzdWFsbHkgdGhpcwogICAgIC8vIGVuYWJsZXMgc3RhbmRhcmQgJ2dyYXlz
Y2FsZScgYW50aWFsaWFzaW5nKTsgZmFsc2UgdG8gZXhwbGljaXRseSBkaXNhYmxlCiAgICAgLy8g
YW50aWFsaWFzaW5nLgotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0LmNy
KCksIGVuYWJsZSA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05P
TkUpOworICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY3IsIGVuYWJsZSA/IENBSVJPX0FOVElBTElB
U19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05PTkUpOwogfQogCi12b2lkIHNldENUTShHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqIGNyLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKIHsKICAgICBjb25zdCBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSB0b0Nh
aXJvTWF0cml4KHRyYW5zZm9ybSk7Ci0gICAgY2Fpcm9fc2V0X21hdHJpeChwbGF0Zm9ybUNvbnRl
eHQuY3IoKSwgJm1hdHJpeCk7CisgICAgY2Fpcm9fc2V0X21hdHJpeChjciwgJm1hdHJpeCk7CiB9
CiAKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCkKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCogY3IpCiB7CiAgICAgY2Fp
cm9fbWF0cml4X3QgbTsKLSAgICBjYWlyb19nZXRfbWF0cml4KHBsYXRmb3JtQ29udGV4dC5jcigp
LCAmbSk7CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwogICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0obS54eCwgbS55eCwgbS54eSwgbS55eSwgbS54MCwgbS55MCk7CiB9CiAKQEAgLTU1
Niw0NSArNTU1LDQ1IEBAIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKIH0gLy8gbmFtZXNwYWNlIFN0YXRlCiAKIEZpbGxTb3Vy
Y2U6OkZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDog
Z2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEpCi0gICAgLCBmaWxsUnVsZShzdGF0ZS5maWxsUnVsZSkK
KyAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkpCisgICAgLCBmaWxsUnVsZShzdGF0ZS5m
aWxsUnVsZSgpKQogewotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikgewotICAgICAgICBwYXR0
ZXJuLm9iamVjdCA9IGFkb3B0UmVmKHN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpKTsKKyAgICBpZiAoYXV0byBmaWxsUGF0dGVybiA9IHN0
YXRlLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkgeworICAgICAgICBwYXR0ZXJuLm9iamVjdCA9IGFk
b3B0UmVmKGZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3Jt
KCkpKTsKIAotICAgICAgICBhdXRvJiBwYXR0ZXJuSW1hZ2UgPSBzdGF0ZS5maWxsUGF0dGVybi0+
dGlsZUltYWdlKCk7CisgICAgICAgIGF1dG8mIHBhdHRlcm5JbWFnZSA9IGZpbGxQYXR0ZXJuLT50
aWxlSW1hZ2UoKTsKICAgICAgICAgcGF0dGVybi5zaXplID0gcGF0dGVybkltYWdlLnNpemUoKTsK
LSAgICAgICAgcGF0dGVybi50cmFuc2Zvcm0gPSBzdGF0ZS5maWxsUGF0dGVybi0+cGF0dGVyblNw
YWNlVHJhbnNmb3JtKCk7Ci0gICAgICAgIHBhdHRlcm4ucmVwZWF0WCA9IHN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRYKCk7Ci0gICAgICAgIHBhdHRlcm4ucmVwZWF0WSA9IHN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRZKCk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQpIHsKLSAg
ICAgICAgZ3JhZGllbnQuYmFzZSA9IHN0YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigx
LCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmIChzdGF0ZS5h
bHBoYSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRlLmZp
bGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSwgc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9IGZpbGxQYXR0ZXJu
LT5wYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gZmls
bFBhdHRlcm4tPnJlcGVhdFgoKTsKKyAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gZmlsbFBhdHRl
cm4tPnJlcGVhdFkoKTsKKyAgICB9IGVsc2UgaWYgKGF1dG8gZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEJydXNoKCkuZ3JhZGllbnQoKSkgeworICAgICAgICBncmFkaWVudC5iYXNlID0gZmlsbEdy
YWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEsIHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3Jt
KCkpOworICAgICAgICBpZiAoc3RhdGUuYWxwaGEoKSAhPSAxKQorICAgICAgICAgICAgZ3JhZGll
bnQuYWxwaGFBZGp1c3RlZCA9IGZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBo
YSgpLCBzdGF0ZS5maWxsQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgY29sb3IgPSBzdGF0ZS5maWxsQ29sb3I7CisgICAgICAgIGNvbG9yID0gc3RhdGUuZmls
bEJydXNoKCkuY29sb3IoKTsKIH0KIAogU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxw
aGEpCi17Ci0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pCi0gICAgICAgIHBhdHRlcm4gPSBh
ZG9wdFJlZihzdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5l
VHJhbnNmb3JtKCkpKTsKLSAgICBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkgewotICAg
ICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4o
MSwgc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmIChzdGF0
ZS5hbHBoYSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRl
LnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhLCBzdGF0ZS5zdHJva2VH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkp
Cit7CisgICAgaWYgKGF1dG8gc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZUJydXNoKCkucGF0
dGVybigpKQorICAgICAgICBwYXR0ZXJuID0gYWRvcHRSZWYoc3Ryb2tlUGF0dGVybi0+Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgZWxzZSBpZiAoYXV0byBz
dHJva2VHcmFkaWVudCA9IHN0YXRlLnN0cm9rZUJydXNoKCkuZ3JhZGllbnQoKSkgeworICAgICAg
ICBncmFkaWVudC5iYXNlID0gc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3RhdGUu
c3Ryb2tlQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgaWYgKHN0YXRlLmFscGhh
KCkgIT0gMSkKKyAgICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBzdHJva2VHcmFk
aWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSgpLCBzdGF0ZS5zdHJva2VCcnVzaCgpLnNw
YWNlVHJhbnNmb3JtKCkpOwogICAgIH0gZWxzZQotICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9r
ZUNvbG9yOworICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsKIH0K
IAogU2hhZG93U3RhdGU6OlNoYWRvd1N0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSkKLSAgICA6IG9mZnNldChzdGF0ZS5zaGFkb3dPZmZzZXQpCi0gICAgLCBibHVyKHN0YXRl
LnNoYWRvd0JsdXIpCi0gICAgLCBjb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIGlnbm9y
ZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgLCBnbG9iYWxB
bHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yKQorICAgIDogb2Zmc2V0KHN0YXRlLmRyb3BTaGFkb3coKS5vZmZzZXQp
CisgICAgLCBibHVyKHN0YXRlLmRyb3BTaGFkb3coKS5ibHVyUmFkaXVzKQorICAgICwgY29sb3Io
c3RhdGUuZHJvcFNoYWRvdygpLmNvbG9yKQorICAgICwgaWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKQorICAgICwgZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEo
KSkKKyAgICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNvbXBvc2l0ZU1vZGUoKS5v
cGVyYXRpb24pCiB7CiB9CiAKQEAgLTYxNSwxNCArNjE0LDE0IEBAIGJvb2wgU2hhZG93U3RhdGU6
OmlzUmVxdWlyZWQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2UgY2FuIGF2b2lkIFNoYWRvd0JsdXIs
IHNpbmNlIHRoZXJlIGFyZSBubyB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGNhbnZh
cy4KLSAgICBpZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLmlzSWRlbnRpdHkoKSkK
KyAgICBpZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSkuaXNJZGVudGl0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBPdGhlcndpc2UsIG5vIGNoYW5jZSBh
dm9pZGluZyBTaGFkb3dCbHVyLgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIHNldExpbmVD
YXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2Fw
KQordm9pZCBzZXRMaW5lQ2FwKGNhaXJvX3QqIGNyLCBMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAg
Y2Fpcm9fbGluZV9jYXBfdCBjYWlyb0NhcCB7IH07CiAgICAgc3dpdGNoIChsaW5lQ2FwKSB7CkBA
IC02MzYsMTggKzYzNSwxOCBAQCB2b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQogICAgICAgICBjYWlyb0NhcCA9IENB
SVJPX0xJTkVfQ0FQX1NRVUFSRTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3Nl
dF9saW5lX2NhcChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fpcm9DYXApOworICAgIGNhaXJvX3Nl
dF9saW5lX2NhcChjciwgY2Fpcm9DYXApOwogfQogCi12b2lkIHNldExpbmVEYXNoKEdyYXBoaWNz
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQordm9pZCBzZXRMaW5lRGFzaChjYWlyb190KiBjciwgY29uc3QgRGFz
aEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7CiAgICAgaWYgKHN0ZDo6YWxsX29m
KGRhc2hlcy5iZWdpbigpLCBkYXNoZXMuZW5kKCksIFtdKGF1dG8mIGRhc2gpIHsgcmV0dXJuICFk
YXNoOyB9KSkKLSAgICAgICAgY2Fpcm9fc2V0X2Rhc2gocGxhdGZvcm1Db250ZXh0LmNyKCksIDAs
IDAsIDApOworICAgICAgICBjYWlyb19zZXRfZGFzaChjciwgMCwgMCwgMCk7CiAgICAgZWxzZQot
ICAgICAgICBjYWlyb19zZXRfZGFzaChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgZGFzaGVzLmRhdGEo
KSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7CisgICAgICAgIGNhaXJvX3NldF9kYXNoKGNy
LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBz
ZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9p
biBsaW5lSm9pbikKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCogY3IsIExpbmVKb2luIGxpbmVK
b2luKQogewogICAgIGNhaXJvX2xpbmVfam9pbl90IGNhaXJvSm9pbiB7IH07CiAgICAgc3dpdGNo
IChsaW5lSm9pbikgewpAQCAtNjYxLDEyICs2NjAsMTIgQEAgdm9pZCBzZXRMaW5lSm9pbihHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikKICAg
ICAgICAgY2Fpcm9Kb2luID0gQ0FJUk9fTElORV9KT0lOX0JFVkVMOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xpbmVfam9pbihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fp
cm9Kb2luKTsKKyAgICBjYWlyb19zZXRfbGluZV9qb2luKGNyLCBjYWlyb0pvaW4pOwogfQogCi12
b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
ZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiBjciwgZmxvYXQg
bWl0ZXJMaW1pdCkKIHsKLSAgICBjYWlyb19zZXRfbWl0ZXJfbGltaXQocGxhdGZvcm1Db250ZXh0
LmNyKCksIG1pdGVyTGltaXQpOworICAgIGNhaXJvX3NldF9taXRlcl9saW1pdChjciwgbWl0ZXJM
aW1pdCk7CiB9CiAKIHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291
cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCkBAIC02ODIsNyArNjgxLDcgQEAg
dm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnMKIHsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxl
KCkpIHsKICAgICAgICAgU2hhZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFk
b3dTdGF0ZS5ibHVyIH0sIHNoYWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNo
YWRvd1N0YXRlLmlnbm9yZVRyYW5zZm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFk
b3coU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhw
bGF0Zm9ybUNvbnRleHQpLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3QpLAorICAgICAgICBzaGFkb3cu
ZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRl
OjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIEZsb2F0Um91bmRlZFJlY3QocmVjdCks
CiAgICAgICAgICAgICBbJnBsYXRmb3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1ZmZl
ciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0
U2l6ZSYgbGF5ZXJTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxTaGFk
b3dCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5ZXJT
aXplLCBzaGFkb3dTdGF0ZSk7CkBAIC03MTMsNyArNzEyLDcgQEAgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmUKIHsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgU2hh
ZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFkb3dTdGF0ZS5ibHVyIH0sIHNo
YWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLmlnbm9yZVRy
YW5zZm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShw
bGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBy
ZWN0LAorICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShwbGF0Zm9y
bUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHJl
Y3QsCiAgICAgICAgICAgICBbJnBsYXRmb3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1
ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZs
b2F0U2l6ZSYgbGF5ZXJTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxT
aGFkb3dCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5
ZXJTaXplLCBzaGFkb3dTdGF0ZSk7CkBAIC03NDYsNyArNzQ1LDcgQEAgdm9pZCBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFIKIAogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAgICAgICBT
aGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwg
c2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3Jl
VHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5kcmF3SW5zZXRTaGFkb3coU3RhdGU6OmdldENU
TShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQp
LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsCisgICAgICAgIHNoYWRvdy5kcmF3SW5zZXRTaGFkb3co
U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRz
KHBsYXRmb3JtQ29udGV4dCksIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwKICAgICAgICAgICAgIFsm
cGxhdGZvcm1Db250ZXh0LCAmc2hhZG93U3RhdGVdKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBj
b25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9y
bUNvbnRleHQsIGxheWVySW1hZ2UsIGxheWVyT3JpZ2luLCBsYXllclNpemUsIHNoYWRvd1N0YXRl
KTsKQEAgLTg2Myw5ICs4NjIsOSBAQCB2b2lkIGRyYXdQbGF0Zm9ybUltYWdlKEdyYXBoaWNzQ29u
dGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNhaXJvX3N1cmZhY2VfdCogcwogCiAgICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCiAgICAgaWYgKG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciAmJiBvcHRpb25zLmJs
ZW5kTW9kZSgpID09IEJsZW5kTW9kZTo6Tm9ybWFsICYmICFjYWlyb1N1cmZhY2VIYXNBbHBoYShz
dXJmYWNlKSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxh
dGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSwgQmxlbmRNb2RlOjpOb3JtYWwp
OworICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNv
bnRleHQuY3IoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHksIEJsZW5kTW9kZTo6Tm9ybWFsKTsK
ICAgICBlbHNlCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBs
YXRmb3JtQ29udGV4dCwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5k
TW9kZSgpKTsKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxh
dGZvcm1Db250ZXh0LmNyKCksIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSk7CiAKICAgICBGbG9hdFJlY3QgZHN0ID0gZGVzdFJlY3Q7CiAgICAgaWYgKG9w
dGlvbnMub3JpZW50YXRpb24oKSAhPSBJbWFnZU9yaWVudGF0aW9uOjpOb25lKSB7CkBAIC05NjQs
NyArOTYzLDcgQEAgdm9pZCBkcmF3U3VyZmFjZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UKIAogICAgIFNoYWRvd0JsdXIgc2hh
ZG93KHsgc2hhZG93U3RhdGUuYmx1ciwgc2hhZG93U3RhdGUuYmx1ciB9LCBzaGFkb3dTdGF0ZS5v
ZmZzZXQsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5pZ25vcmVUcmFuc2Zvcm1zKTsK
ICAgICBpZiAoc2hhZG93LnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgewotICAgICAg
ICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwg
U3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZGVzdFJlY3QsCisgICAgICAg
IHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3Io
KSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGRlc3RSZWN0LAogICAg
ICAgICAgICAgWyZwYXR0ZXJuLCAmZGVzdFJlY3RdKEdyYXBoaWNzQ29udGV4dCYgc2hhZG93Q29u
dGV4dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBkcmF3UGF0dGVyblRvQ2Fpcm9D
b250ZXh0KHNoYWRvd0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHBhdHRlcm4uZ2V0
KCksIGRlc3RSZWN0LCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKaW5kZXggNTQ5ODU2M2NlNDljMTVlMzVk
MDgyNTljMmQyNmRjN2IxN2NlYTg4NS4uZTVhMzQyNGFlNjExNzA3YWM5N2QwZDE5ZTdjYzMwNjFh
YjcwNjFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKQEAgLTQ2LDIyICs0NiwyMSBAQCBjbGFzcyBDb2xv
cjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBGbG9h
dFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIFBhdGg7CiAKLXN0cnVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKLQogbmFtZXNwYWNlIENhaXJvIHsKIAogbmFtZXNwYWNl
IFN0YXRlIHsKIAotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
LCBmbG9hdCk7Ci12b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgU3Ry
b2tlU3R5bGUpOwordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCosIGZsb2F0KTsKK3Zv
aWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCosIFN0cm9rZVN0eWxlKTsKIAotdm9pZCBzZXRDb21w
b3NpdGVPcGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJv
JiwgYm9vbCk7Cit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSk7Cit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190Kiwg
Ym9vbCk7CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJv
Jik7Cit2b2lkIHNldENUTShjYWlyb190KiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CitBZmZp
bmVUcmFuc2Zvcm0gZ2V0Q1RNKGNhaXJvX3QqKTsKIAogSW50UmVjdCBnZXRDbGlwQm91bmRzKEdy
YXBoaWNzQ29udGV4dENhaXJvJik7CiBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhHcmFw
aGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtMTI1LDEwICsxMjQsMTAg
QEAgc3RydWN0IFNoYWRvd1N0YXRlIHsKICAgICBDb21wb3NpdGVPcGVyYXRvciBnbG9iYWxDb21w
b3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07CiB9OwogCi12
b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5lQ2FwKTsKLXZvaWQgc2V0
TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7
Ci12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgTGluZUpvaW4pOwotdm9p
ZCBzZXRNaXRlckxpbWl0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgZmxvYXQpOwordm9pZCBzZXRM
aW5lQ2FwKGNhaXJvX3QqLCBMaW5lQ2FwKTsKK3ZvaWQgc2V0TGluZURhc2goY2Fpcm9fdCosIGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0KTsKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCosIExpbmVK
b2luKTsKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiwgZmxvYXQpOwogCiB2b2lkIGZpbGxS
ZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmlsbFNv
dXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7CiB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4
dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRDYWlyby5jcHAKaW5kZXggYTdhZjBjZWI1MjQ5MDQwNDFlZTEyZDUxZjg5YzZkZjE2Y2IzNjAz
Ny4uM2QxOTc1NzlhMmNjMjI5OTMzODg1YTFhMTU5NWM2Mzk2Y2E4NmRmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBA
IC03Miw3ICs3Miw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgYXV0byYgc3RhdGUg
PSBjb250ZXh0LnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKmNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2Fs
ZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAg
ICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNo
YWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAgIHN0YXRlLnRleHREcmF3aW5n
TW9kZSgpLCBzdGF0ZS5zdHJva2VUaGlja25lc3MoKSwgc3RhdGUuZHJvcFNoYWRvdygpLm9mZnNl
dCwgc3RhdGUuZHJvcFNoYWRvdygpLmNvbG9yLAogICAgICAgICBmb250U21vb3RoaW5nTW9kZSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhZGllbnRDYWlyby5jcHAKaW5kZXggOTAwOTZhYzY0NTIyNGRiZmRjNjBiZmE2Y2FjYWQw
MzA3NmNiMjk3ZC4uYmUyYzI5NWNhNTA3ZDliNTYzZjg1ZDViY2I4NzA5NzJmMGRhZDhlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90
PiBHcmFkaWVudDo6Y3JlYXRlUGF0dGVybihmbG9hdCBnbG9iYWxBbHBoYSwgY29uc3QgQWZmaW5l
VAogCiB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGF1dG8gcGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4w
LCBjb250ZXh0LnN0YXRlKCkuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGF1dG8g
cGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4wLCBjb250ZXh0LmZpbGxTcGFjZVRyYW5zZm9ybSgp
KTsKICAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCmluZGV4IGMzMjMwNDQ1MzUxYjAzZjJhYTg3MzZhZWUyYmNlNzhiYzQzNjFm
NDkuLmM1ZmFjMjA0MWIzY2Q1ZGJkZGI2NzlhYWU1NTI1ZWM4YjU0MjgxZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDggTnVhbnRpIEx0ZC4KQEAgLTY4LDcgKzY4LDggQEAgcHVibGljOgogfTsKIAogR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKFJlZlB0cjxjYWlyb190PiYmIGNv
bnRleHQpCi0gICAgOiBtX2NyKFdURk1vdmUoY29udGV4dCkpCisgICAgOiBHcmFwaGljc0NvbnRl
eHQoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkKKyAgICAsIG1fY3IoV1RGTW92ZShjb250ZXh0
KSkKIHsKICAgICBtX2NhaXJvU3RhdGVTdGFjay5hcHBlbmQoQ2Fpcm9TdGF0ZSgpKTsKICAgICBt
X2NhaXJvU3RhdGUgPSAmbV9jYWlyb1N0YXRlU3RhY2subGFzdCgpOwpAQCAtODYsMTAgKzg3LDkg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK1JlbmRl
cmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewot
ICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU2NhbGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6Omlz
QWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKIEdyYXBoaWNz
Q29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29u
c3QKQEAgLTEzNCw1MyArMTM0LDExMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZXN0
b3JlKCkKICAgICBjYWlyb19yZXN0b3JlKG1fY3IuZ2V0KCkpOwogfQogCi0vLyBEcmF3cyBhIGZp
bGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7
Ci0gICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNz
LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7
CisKKyAgICBpZiAoIXN0YXRlLmNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChhdXRvIGNoYW5nZSA6IHN0YXRlLmNoYW5nZXMoKSkgeworICAgICAgICBzd2l0Y2ggKGNoYW5n
ZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTToKKyAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKG1fY3IuZ2V0KCksIHN0YXRlLmdldENUTSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRTdHJva2VUaGlja25lc3MobV9jci5nZXQoKSwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKCksIDAuZikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZToKKyAgICAgICAgICAgIENhaXJvOjpT
dGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9jci5nZXQoKSwgc3RhdGUuc3Ryb2tlU3R5bGUoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OkxpbmVDYXA6CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZUNhcChtX2NyLmdldCgp
LCBzdGF0ZS5saW5lQ2FwKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjoKKyAgICAgICAgICAgIENhaXJv
OjpzZXRMaW5lSm9pbihtX2NyLmdldCgpLCBzdGF0ZS5saW5lSm9pbigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGlu
ZURhc2g6CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2gobV9jci5nZXQoKSwgc3RhdGUu
bGluZURhc2goKS5kYXNoZXMsIHN0YXRlLmxpbmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0
ZXJMaW1pdDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fY3IuZ2V0KCksIHN0
YXRlLm1pdGVyTGltaXQoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGU6CisgICAgICAgICAgICBD
YWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX2NyLmdldCgpLCBzdGF0ZS5jb21w
b3NpdGVNb2RlKCkub3BlcmF0aW9uLCBzdGF0ZS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKSB7CisgICAgICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3Jh
cGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0
CisgICAgICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1M
NSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgICAgICBhdXRvIGRyb3BT
aGFkb3cgPSBzdGF0ZS5kcm9wU2hhZG93KCk7CisgICAgICAgICAgICAgICAgZHJvcFNoYWRvdy5v
ZmZzZXQgPSB7IGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCksIC1kcm9wU2hhZG93Lm9mZnNldC5o
ZWlnaHQoKSB9OworICAgICAgICAgICAgICAgIHNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENhaXJv
OjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fY3IuZ2V0KCksIHN0YXRlLnNob3VsZEFudGlh
bGlhcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwotICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqdGhpcywgbmF0aXZlSW1hZ2UucGxh
dGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
b3BhY2l0eSk7CisgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMsIG9wYWNp
dHkpOwogfQogCi0vLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNo
b3VsZCBub3QgZHJhdyBzaGFkb3dzLgotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAg
aWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCi0gICAgICAgIHJldHVybjsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgQ2Fpcm86OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCp0aGlzKTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUu
c2hvdWxkQW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAg
ICBDYWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIGlzIG9ubHkg
dXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgotdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgY2xpcFJ1bGUpCiB7Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENh
aXJvOjpkcmF3RWxsaXBzZSgqdGhpcywgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7CisgICAgQ2Fpcm86OmNs
aXBQYXRoKCp0aGlzLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGF0aC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcmVjdCk7
Cit9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxQ
YXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBQ
YXRoJiBwYXRoKQoreworICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCBwYXRoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBDYWlybzo6Y2xp
cFRvSW1hZ2VCdWZmZXIoKnRoaXMsIG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCks
IGRlc3RSZWN0KTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBD
YWlybzo6c3Ryb2tlUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSks
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBDYWlybzo6Y2xlYXJSZWN0
KCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMTk2LDggKzI1NSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7Ci0gICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigx
LjAsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICBhdXRvIHBhdHRlcm4g
PSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogICAg
IGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDYsMzUgKzI2NCw2NCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CisgICAgQ2Fp
cm86OmZpbGxSb3VuZGVkUmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSgpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKCFjb2xv
ci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3I7CisgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0
aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bigqdGhpcywgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgQ2Fpcm86OmZpbGxS
ZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAg
Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHByZXZpb3VzT3BlcmF0
b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CisgICAgQ2Fpcm86OmZpbGxQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
CiB7Ci0gICAgQ2Fpcm86OmNsaXAoKnRoaXMsIHJlY3QpOworICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKKyAgICBDYWlybzo6c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwgbGluZVdpZHRo
LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENhaXJvOjpjbGlwUGF0aCgqdGhpcywgcGF0
aCwgY2xpcFJ1bGUpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpzdHJva2VQYXRo
KCp0aGlzLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3Vu
ZHMoKSBjb25zdAorLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJv
cmRlci4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHJldHVybiBDYWlybzo6U3Rh
dGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoIXJlY3Qu
aXNFbXB0eSgpKTsKKyAgICBDYWlybzo6ZHJhd1JlY3QoKnRoaXMsIHJlY3QsIGJvcmRlclRoaWNr
bmVzcywgZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
YnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQorLy8gVGhpcyBpcyBvbmx5IHVzZWQg
dG8gZHJhdyBib3JkZXJzLCBzbyB3ZSBzaG91bGQgbm90IGRyYXcgc2hhZG93cy4KK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVm
ZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJv
OjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5n
ZXQoKSwgZGVzdFJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMsIHBvaW50MSwgcG9pbnQy
LCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc2hvdWxk
QW50aWFsaWFzKCkpOworfQorCisvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0
aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBDYWlybzo6ZHJh
d0VsbGlwc2UoKnRoaXMsIHJlY3QsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VD
b2xvcigpLCBzdHJva2VUaGlja25lc3MoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMjYxLDEzOCArMzQ4LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHcKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnRoaXMsIHBvaW50LCB0aGlj
a25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tl
Q29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCi17Ci0gICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKnRoaXMsIHJl
Y3QsIHN0eWxlKTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5n
TW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocm91bmRpbmdNb2RlKTsKLSAgICByZXR1cm4gQ2Fp
cm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCp0aGlzLCByZWN0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAg
Q2Fpcm86OnRyYW5zbGF0ZSgqdGhpcywgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKLSAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoKnRoaXMsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUoKnRo
aXMsIHN0YXRlLnN0cm9rZVN0eWxlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKLSAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBj
b250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAg
ICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhh
dmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBzdGF0
ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hh
ZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKCp0aGlzLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQot
ICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFu
Z2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKCp0aGlzLCBzdGF0
ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OmNv
bmNhdENUTSgqdGhpcywgdHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q1RNKCp0aGlzLCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIENh
aXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCp0aGlzLCBvcGFjaXR5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBDYWlybzo6ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKnRoaXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3QoKnRo
aXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwgbGlu
ZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVDYXAoTGluZUNh
cCBsaW5lQ2FwKQotewotICAgIENhaXJvOjpzZXRMaW5lQ2FwKCp0aGlzLCBsaW5lQ2FwKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNoKCp0
aGlzLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBDYWlybzo6c2V0TGluZUpv
aW4oKnRoaXMsIGxpbmVKb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0
TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKLXsKLSAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdCgqdGhp
cywgbWl0ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHBhdGgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykKLXsKLSAgICBD
YWlybzo6cm90YXRlKCp0aGlzLCByYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIENhaXJvOjpzY2FsZSgq
dGhpcywgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdl
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlm
ICghY29sb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0aGlz
LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCp0aGlz
LCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7
IG9wdGlvbnMsIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSB9LCBhbHBoYSgpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUoKSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkBAIC00MDQs
MTEgKzM2Miw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0CiAgICAgQ2Fpcm86OmRyYXdQYXR0
ZXJuKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIG5hdGl2ZUltYWdl
LnNpemUoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0
aW9ucyk7CiB9CiAKLVJlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmlu
Z01vZGUoKSBjb25zdAotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250
U21vb3RoaW5nKQogewogICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCkBAIC00
MzQsMTIgKzM4NywzMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3R2x5cGhzKCp0aGlzLCBDYWlybzo6Rmls
bFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAogICAgICAgICBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9m
ZnNldCwgY2Fpcm9HbHlwaHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9k
ZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRv
d0NvbG9yLAorICAgICAgICB0ZXh0RHJhd2luZ01vZGUoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHNo
YWRvd09mZnNldCgpLCBzaGFkb3dDb2xvcigpLAogICAgICAgICBmb250U21vb3RoaW5nKTsKIH0K
IAordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3sKKyAg
ICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpkcmF3
TGluZXNGb3JUZXh0KCp0aGlzLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBk
b3VibGVVbmRlcmxpbmVzLCBzdHJva2VDb2xvcigpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQoreworICAgIENhaXJvOjpkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKCp0aGlzLCByZWN0LCBzdHlsZSk7Cit9CisKK0Zsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHJvdW5k
aW5nTW9kZSk7CisgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscygq
dGhpcywgcmVjdCk7Cit9CisKIGNhaXJvX3QqIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjcigpIGNv
bnN0CiB7CisgICAgY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRDYWlybyY+KCp0aGlzKS5hcHBs
eVN0YXRlQ2hhbmdlcygpOwogICAgIHJldHVybiBtX2NyLmdldCgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaAppbmRleCA1NjQ2MWMxNTlhNTgzYzg5YzYxZThmMDJlNGUwYmVlN2IwNTkz
MmVmLi42ZmNkZTNhOGJiMWRmOWY1NWJmNjliYmJmNGZjNjQ2NWY4NWU5YWI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw2MSArNTEsNDkgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAg
R3JhcGhpY3NDb250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0g
ICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAg
IHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5h
bDsKIAotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVK
b2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFs
OworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxl
KSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgCisgICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0OwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBm
aW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbDsK
LSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKwogICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAg
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9p
ZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwog
Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5Jiwg
Ym9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmlu
YWw7CisKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENv
bG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogCi0gICAgdm9pZCBzYXZl
KCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWw7Ci0KLSAgICB2b2lkIHRyYW5zbGF0
ZShmbG9hdCwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBmaW5hbDsKLSAg
ICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxv
YXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZp
Y2VTY2FsZSkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKyAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKIAotICAgIHZvaWQgY2xp
cChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2
b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7Ci0gICAgSW50UmVjdCBj
bGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIAotICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHJhd0dseXBocyhjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdN
b2RlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5
bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKICAgICBGbG9hdFJlY3Qg
cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJv
dW5kaW5nTW9kZSkgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApp
bmRleCA5NmM3NjEzNTQxYmRjNjU4YTc4N2FiMDNlNzc4MTg4MzRkMzE4NWM0Li5jOGU1Njc4MjQy
MzE1YWMzOTM1MWUwMjA4ZmY4YTBlZGVlMTNkOWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuY3BwCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0CiAg
ICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0Q29udGV4dC5zdGF0
ZSgpOwogCiAgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQotICAgICAgICBkcmF3UGxhdGZvcm1JbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0
KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9w
dGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
fSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dT
dGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOworICAgICAgICBkcmF3UGxhdGZvcm1JbWFn
ZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCku
Z2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0
ZS5hbHBoYSgpLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0
U3RhdGUpKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE4NTZhMDQzOTNmZDI0ZTk2MjhmNmZlOTM0NjllZWJlYTRhYmI1OTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0Nv
bnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7Citw
dWJsaWM6CisgICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwgYm9v
bCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKKyAgICB7CisgICAgICAg
IGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSht
X2NvbnRleHQpOworICAgIH0KKyAgICAKKyAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCisgICAg
eworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4
dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7
CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nh
dmVBbmRSZXN0b3JlKTsKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQp
OworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJv
b2wgZGlkU2F2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9y
ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7Cisg
ICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDMyNDVjNjAwNDMxNTUy
ZDUxM2I3NGVlYmMwOWYzMThlZWMzZGQ3MmEuLjQwNWZhODQ2YzYzMmMwNzExYzVlOGE0MDFkNTFi
MTk3ZGI1ZWVmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0xODUsMTQgKzE4NSwxMyBAQCBzdGF0aWMgdm9pZCBzZXRDR0Js
ZW5kTW9kZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZQogfQogCiBHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRHZXRDbGlwQm91
bmRpbmdCb3goY2dDb250ZXh0KSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmluaXRpYWxDaGFuZ2VG
bGFncywgQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCkpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoY2dDb250ZXh0KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3Rh
cnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UgfSk7Ci0gICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0g
Y29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5
KHBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShj
b3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSkpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6On5H
cmFwaGljc0NvbnRleHRDRygpCkBAIC0yMDYsNiArMjA1LDE0IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB9CiAKIENHQ29udGV4dFJlZiBHcmFw
aGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICAvLyBTb21lIGNh
bGxlcnMgdG8gdGhpcyBtZXRob2QgdXNlcyB0aGUgcGxhdGZvcm0gY29udGV4dCBvdXRzaWRlIHRo
ZSBzY29wZQorICAgIC8vIG9mIHRoaXMgY2xhc3MuIENvbW1pdCBhbnkgY2hhbmdlcyBiZWZvcmUg
cmV0dXJuaW5nIHRoZSBwbGF0Zm9ybSBjb250ZXh0LgorICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3ND
b250ZXh0Q0cmPigqdGhpcykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1cm4gaW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQoKTsKK30KKworQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENH
OjppbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZGF0YS0+
bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwpAQCAt
MzM4LDcgKzM0NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZShO
YXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6CiAjZW5kaWYKIAogICAgIGF1
dG8gb2xkQ29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKLSAgICBhdXRv
IG9sZEJsZW5kTW9kZSA9IGJsZW5kTW9kZU9wZXJhdGlvbigpOworICAgIGF1dG8gb2xkQmxlbmRN
b2RlID0gYmxlbmRNb2RlKCk7CiAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgb3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIC8vIE1ha2Ug
dGhlIG9yaWdpbiBiZSBhdCBhZGp1c3RlZERlc3RSZWN0LmxvY2F0aW9uKCkKQEAgLTM5Niw3ICs0
MDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZAogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRl
c3RSZWN0KTsKIAotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9w
ZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIHNldENvbXBvc2l0ZU1vZGUoeyBv
cHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAKICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55
KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwg
MSwgLTEpOwpAQCAtNTU1LDEzICs1NjIsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlmICghbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
KQorICAgIGlmICghc3Ryb2tlUGF0dGVybigpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0Nv
bnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0Nv
bnRleHQpKTsKIAotICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gbV9zdGF0ZS5zdHJva2VQYXR0
ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CisgICAgYXV0byBwbGF0
Zm9ybVBhdHRlcm4gPSBzdHJva2VQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2Vy
VG9CYXNlQ1RNKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwog
CkBAIC01NzQsMTMgKzU4MSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9r
ZVBhdHRlcm4oKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkK
IHsKLSAgICBpZiAoIW1fc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKCFmaWxsUGF0dGVybigp
KQogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVU
cmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIAotICAgIGF1dG8gcGxhdGZv
cm1QYXR0ZXJuID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVz
ZXJUb0Jhc2VDVE0pOworICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gZmlsbFBhdHRlcm4oKS0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOwogICAgIGlmICghcGxhdGZvcm1Q
YXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTU5MSwxMSArNTk4LDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIENHQ29udGV4dFNldEZpbGxQ
YXR0ZXJuKGNnQ29udGV4dCwgcGxhdGZvcm1QYXR0ZXJuLmdldCgpLCAmcGF0dGVybkFscGhhKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBDR1BhdGhEcmF3aW5nTW9kZSYgbW9kZSkKIHsKLSAgICBib29sIHNob3VsZEZpbGwg
PSBzdGF0ZS5maWxsUGF0dGVybiB8fCBzdGF0ZS5maWxsQ29sb3IuaXNWaXNpYmxlKCk7Ci0gICAg
Ym9vbCBzaG91bGRTdHJva2UgPSBzdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IChzdGF0ZS5zdHJva2VT
dHlsZSAhPSBOb1N0cm9rZSAmJiBzdGF0ZS5zdHJva2VDb2xvci5pc1Zpc2libGUoKSk7Ci0gICAg
Ym9vbCB1c2VFT0ZpbGwgPSBzdGF0ZS5maWxsUnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZDsKKyAg
ICBib29sIHNob3VsZEZpbGwgPSBjb250ZXh0LmZpbGxQYXR0ZXJuKCkgfHwgY29udGV4dC5maWxs
Q29sb3IoKS5pc1Zpc2libGUoKTsKKyAgICBib29sIHNob3VsZFN0cm9rZSA9IGNvbnRleHQuc3Ry
b2tlUGF0dGVybigpIHx8IChjb250ZXh0LnN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UgJiYgY29u
dGV4dC5zdHJva2VDb2xvcigpLmlzVmlzaWJsZSgpKTsKKyAgICBib29sIHVzZUVPRmlsbCA9IGNv
bnRleHQuZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZDsKIAogICAgIGlmIChzaG91bGRG
aWxsKSB7CiAgICAgICAgIGlmIChzaG91bGRTdHJva2UpIHsKQEAgLTYyNCw5ICs2MzEsOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKLSAg
ICBpZiAoc3RhdGUuZmlsbEdyYWRpZW50IHx8IHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAg
aWYgKGZpbGxHcmFkaWVudCgpIHx8IHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBmaWxsICYgc3Ryb2tlIGEgcGF0aCB1c2lu
ZyBncmFkaWVudHMKICAgICAgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KICAg
ICAgICAgZmlsbFBhdGgocGF0aCk7CkBAIC02MzQsMTMgKzY0MCwxMyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigp
KQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRl
cm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJu
KCk7CiAKICAgICBDR1BhdGhEcmF3aW5nTW9kZSBkcmF3aW5nTW9kZTsKLSAgICBpZiAoY2FsY3Vs
YXRlRHJhd2luZ01vZGUoc3RhdGUsIGRyYXdpbmdNb2RlKSkgeworICAgIGlmIChjYWxjdWxhdGVE
cmF3aW5nTW9kZSgqdGhpcywgZHJhd2luZ01vZGUpKSB7CiAjaWYgSEFWRShDR19DT05URVhUX0RS
QVdfUEFUSF9ESVJFQ1QpCiAgICAgICAgIENHQ29udGV4dERyYXdQYXRoRGlyZWN0KGNvbnRleHQs
IGRyYXdpbmdNb2RlLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCBudWxscHRyKTsKICNlbHNlCkBAIC02
NTgsNyArNjY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50
KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3Qg
cmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgRmxvYXRTaXplIGxh
eWVyU2l6ZSA9IGdldENUTSgpLm1hcFNpemUocmVjdC5zaXplKCkpOwpAQCAtNjcwLDMzICs2NzYs
MzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
ICAgICAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShsYXllckNvbnRleHQsIC1yZWN0Lngo
KSwgLXJlY3QueSgpKTsKICAgICAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChsYXllckNvbnRl
eHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChsYXllckNvbnRleHQsIHBhdGgucGxh
dGZvcm1QYXRoKCkpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4
dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgICAgICBDR0Nv
bnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAg
ICAgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAg
ICAgICAgIENHQ29udGV4dEVPQ2xpcChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAg
ICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAg
ICBmaWxsR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29u
dGV4dERyYXdMYXllckluUmVjdChjb250ZXh0LCByZWN0LCBsYXllci5nZXQoKSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CiAgICAg
ICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAg
ICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0g
V2luZFJ1bGU6OkV2ZW5PZGQpCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRl
eHQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29u
dGV4dCk7CiAKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludCgqdGhpcyk7
CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQor
ICAgIGlmIChmaWxsUGF0dGVybigpKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAjaWYg
SEFWRShDR19DT05URVhUX0RSQVdfUEFUSF9ESVJFQ1QpCiAgICAgQ0dDb250ZXh0RHJhd1BhdGhE
aXJlY3QoY29udGV4dCwgZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCA/IGtDR1BhdGhF
T0ZpbGwgOiBrQ0dQYXRoRmlsbCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CkBAIC03
MTcsNyArNzIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKHN0cm9rZUdy
YWRpZW50KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9h
dFJlY3QgcmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgZmxvYXQg
bGluZVdpZHRoID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC03NDIsOCArNzQ4LDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICAg
ICAgQ0dDb250ZXh0QWRkUGF0aChsYXllckNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgobGF5ZXJDb250
ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKLSAgICAgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5w
YWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVy
Q29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFk
aWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogCiAgICAgICAgICAgICBmbG9hdCBkZXN0aW5h
dGlvblggPSByb3VuZGYocmVjdC54KCkgLSBsaW5lV2lkdGgpOwogICAgICAgICAgICAgZmxvYXQg
ZGVzdGluYXRpb25ZID0gcm91bmRmKHJlY3QueSgpIC0gbGluZVdpZHRoKTsKQEAgLTc1NCwxMyAr
NzYwLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9y
bVBhdGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0
aChjb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNw
YWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50
KCp0aGlzKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBzdHJva2VT
cGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KCp0
aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3Rh
dGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBs
eVN0cm9rZVBhdHRlcm4oKTsKIAogI2lmIFVTRShDR19DT05URVhUX1NUUk9LRV9MSU5FX1NFR01F
TlRTX1dIRU5fU1RST0tJTkdfUEFUSCkKQEAgLTc4NSw3ICs3OTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLmZp
bGxHcmFkaWVudCkgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSkgewogICAgICAgICBDR0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGlmIChoYXNTaGFkb3co
KSkgewogICAgICAgICAgICAgRmxvYXRTaXplIGxheWVyU2l6ZSA9IGdldENUTSgpLm1hcFNpemUo
cmVjdC5zaXplKCkpOwpAQCAtNzk4LDI3ICs4MDQsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICAgICAgQ0dDb250ZXh0
QWRkUmVjdChsYXllckNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChs
YXllckNvbnRleHQpOwogCi0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250
ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1f
c3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAgQ0dD
b250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOworICAg
ICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAg
ICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0
LCByZWN0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRl
LmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29u
dGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCkt
PnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAg
IGFwcGx5RmlsbFBhdHRlcm4oKTsKIAogICAgIGJvb2wgZHJhd093blNoYWRvdyA9IGNhblVzZVNo
YWRvd0JsdXIoKTsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwg
ZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVy
biBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBs
YXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0
U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNo
YWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250
ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAg
ICAgIGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3Qo
cmVjdCkpOwogICAgIH0KIApAQCAtODM3LDkgKzg0Myw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93
KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFk
b3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0
KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29s
b3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250
ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJv
cFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNo
YWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSk7CiAgICAg
fQogCkBAIC04NTIsNyArODU4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICBzZXRD
R0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBvcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChyZWN0LCBjb2xvciwgb3BlcmF0aW9uLCBibGVuZE1vZGUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9y
KCk7CkBAIC04NjQsOSArODc1LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAgIENHQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBp
ZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAg
ICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6
ZVplcm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4
dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93
KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygp
LCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3
UmVjdFNoYWRvdygqdGhpcywgcmVjdCk7CiAgICAgfQogCkBAIC04NzQsNyArODg1LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdAogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiBy
YWRpaSA9IHJlY3QucmFkaWkoKTsKICAgICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExl
ZnQoKS53aWR0aCgpID09IHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdo
dCgpLndpZHRoKCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9t
TGVmdCgpLndpZHRoKCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKICAgICBib29s
IGVxdWFsSGVpZ2h0cyA9IChyYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9t
TGVmdCgpLmhlaWdodCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50
b3BSaWdodCgpLmhlaWdodCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWku
Ym90dG9tUmlnaHQoKS5oZWlnaHQoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gbV9zdGF0
ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybjsKKyAgICBib29sIGhhc0N1c3Rv
bUZpbGwgPSBmaWxsR3JhZGllbnQoKSB8fCBmaWxsUGF0dGVybigpOwogICAgIGlmICghaGFzQ3Vz
dG9tRmlsbCAmJiBlcXVhbFdpZHRocyAmJiBlcXVhbEhlaWdodHMgJiYgcmFkaWkudG9wTGVmdCgp
LndpZHRoKCkgKiAyID09IHIud2lkdGgoKSAmJiByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKiAy
ID09IHIuaGVpZ2h0KCkpCiAgICAgICAgIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0KGNvbnRl
eHQsIHIpOwogICAgIGVsc2UgewpAQCAtOTEzLDkgKzkyNCw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdP
d25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2Zm
IENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9y
bUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBj
b250ZXh0U2hhZG93LmRyYXdJbnNldFNoYWRvdygqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0
KTsKICAgICB9CiAKQEAgLTkzMCw2ICs5NDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsbwog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiAgICAgbV9kYXRhLT5jbGlwKHJlY3QpOwogfQpA
QCAtOTQwLDMxICs5NTIsMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwg
Q0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQg
dGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRy
YW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUz
PgogICAgIC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRo
ZXIuCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2FuVXNlQ0dS
ZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dD
b250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7Ci0gICAgQ0dSZWN0IHJlY3RzWzJd
ID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0
Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9OwotICAgIENHQ29udGV4
dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdHMocGxh
dGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKLSAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1D
b250ZXh0KCkpOworICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRU
eXBlKGNvbnRleHQpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkgPT0g
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsK
KyAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0SW5m
aW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCksIHJlY3QgfTsKKyAg
ICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdHMoY29u
dGV4dCwgcmVjdHMsIDIpOworICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENH
Q29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3Jt
Q29udGV4dCgpKSk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVj
dChjb250ZXh0LCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCkpOwogICAgIGlm
ICghcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIENHQ29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250
ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOwotICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0
Zm9ybVBhdGgoKSk7CisgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlw
UnVsZSkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsK
KwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYg
KHBhdGguaXNFbXB0eSgpKQogICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENH
UmVjdFplcm8pOwogICAgIGVsc2UgewotICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZv
cm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgp
LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRl
eHQpOworICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRo
KCkpOwogCiAgICAgICAgIGlmIChjbGlwUnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAg
ICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKQEAgLTk3NSwxMSArOTkxLDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
Y2xpcFJ1bGUpCiAgICAgbV9kYXRhLT5jbGlwKHBhdGgpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNz
Q29udGV4dENHOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQogewogICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihv
cGFjaXR5KTsKQEAgLTEwMDIsMTcgKzEwMTMsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHJlc3RvcmUoKTsKIH0KIAotc3RhdGljIHZvaWQg
YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQorc3RhdGljIHZv
aWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIENHRmxvYXQmIHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
ICAgICBVTlVTRURfUEFSQU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwog
I2Vsc2UKLSAgICBpZiAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChDR0NvbnRleHREcmF3c1dp
dGhDb3JyZWN0U2hhZG93T2Zmc2V0cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICBp
ZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29udGV4dCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIFdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81NTM5Mzg4
PiBieSBlbnN1cmluZyB0aGF0IHRoZSBvZmZzZXRzIHdpbGwgZ2V0IHRydW5jYXRlZApAQCAtMTAz
MCwxMCArMTAzOCw1NSBAQCBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJ
Zk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotc3Rh
dGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29s
b3IpCitzdGF0aWMgdm9pZCBzZXRDR0xpbmVDYXAoQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVD
YXAgY2FwKQogewotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpOworICAgIHN3aXRjaCAoY2FwKSB7CisgICAgY2FzZSBMaW5lQ2FwOjpC
dXR0OgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBCdXR0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQ2FwOjpSb3VuZDoKKyAgICAgICAgQ0dD
b250ZXh0U2V0TGluZUNhcChjb250ZXh0LCBrQ0dMaW5lQ2FwUm91bmQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNh
cChjb250ZXh0LCBrQ0dMaW5lQ2FwU3F1YXJlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQog
CitzdGF0aWMgdm9pZCBzZXRDR0xpbmVKb2luKENHQ29udGV4dFJlZiBjb250ZXh0LCBMaW5lSm9p
biBqb2luKQoreworICAgIHN3aXRjaCAoam9pbikgeworICAgIGNhc2UgTGluZUpvaW46Ok1pdGVy
OgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pbk1pdGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6CisgICAgICAgIENH
Q29udGV4dFNldExpbmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luUm91bmQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIExpbmVKb2luOjpCZXZlbDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZUpvaW4oY29udGV4dCwga0NHTGluZUpvaW5CZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgc2V0Q0dNaXRlckxpbWl0KENHQ29udGV4dFJlZiBjb250ZXh0LCBm
bG9hdCBsaW1pdCkKK3sKKyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KGNvbnRleHQsIGxpbWl0
KTsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dMaW5lRGFzaChDR0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgaWYgKGRh
c2hPZmZzZXQgPCAwKSB7CisgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbGVuZ3Ro
ICs9IHN0YXRpY19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOworICAgICAgICBpZiAobGVuZ3RoKQor
ICAgICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0
aDsKKyAgICB9CisgICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29udGV4dCwgZGFzaE9mZnNldCwg
ZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHU2hh
ZG93KENHQ29udGV4dFJlZiBjb250ZXh0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIGJv
b2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCit7CiAgICAgaWYgKG9mZnNldC5pc1plcm8oKSAm
JiAhYmx1cikgewogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwg
Q0dTaXplWmVybywgMCwgMCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNDUsNyArMTA5OCw3IEBA
IHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgQ0dGbG9hdCB5T2Zmc2V0ID0gb2Zmc2V0Lmhl
aWdodCgpOwogICAgIENHRmxvYXQgYmx1clJhZGl1cyA9IGJsdXI7CiAKLSAgICBpZiAoIWdyYXBo
aWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CisgICAgaWYgKCFzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNl
Q1RNID0gZ2V0VXNlclRvQmFzZUNUTShjb250ZXh0KTsKIAogICAgICAgICBDR0Zsb2F0IEEgPSB1
c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9CYXNlQ1RNLmEgKyB1c2VyVG9CYXNlQ1RNLmIgKiB1c2Vy
VG9CYXNlQ1RNLmI7CkBAIC0xMDY2LDcgKzExMTksOCBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRv
dyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXpl
JgogICAgIC8vIEV4dHJlbWUgImJsdXIiIHZhbHVlcyBjYW4gbWFrZSB0ZXh0IGRyYXdpbmcgY3Jh
c2ggb3IgdGFrZSBjcmF6eSBsb25nIHRpbWVzLCBzbyBjbGFtcAogICAgIGJsdXJSYWRpdXMgPSBz
dGQ6Om1pbihibHVyUmFkaXVzLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoMTAwMC4wKSk7CiAK
LSAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQs
IHhPZmZzZXQsIHlPZmZzZXQpOworICAgIGlmIChyZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkKQorICAgICAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5l
ZWRlZChjb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKIAogICAgIC8vIENoZWNrIGZvciBhbiBp
bnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0IGZv
ciB0aGUgc2hhZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2UgdGhl
IGRlZmF1bHQgc2hhZG93IGNvbG9yLgpAQCAtMTA3Niw0NCArMTEzMCw4MSBAQCBzdGF0aWMgdm9p
ZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgRmxvYXRTaXplJgogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4
dCwgQ0dTaXplTWFrZSh4T2Zmc2V0LCB5T2Zmc2V0KSwgYmx1clJhZGl1cywgY2FjaGVkQ0dDb2xv
cihjb2xvcikuZ2V0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkaWRVcGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBw
bHlTdGF0ZUNoYW5nZXMoKQogewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OworICAgIGlmICghc3RhdGUoKS5jaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgMC5mKSk7CisgICAgYXV0byBjb250ZXh0ID0gaW50ZXJuYWxQ
bGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VD
b2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKS5n
ZXQoKSk7CisgICAgZm9yIChhdXRvIGNoYW5nZSA6IHN0YXRlKCkuY2hhbmdlcygpKSB7CisgICAg
ICAgIHN3aXRjaCAoY2hhbmdlKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6Q1RNOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q1RNKGNvbnRleHQsIHN0YXRl
KCkuZ2V0Q1RNKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHNldENH
RmlsbENvbG9yKGNvbnRleHQsIHN0YXRlLmZpbGxDb2xvcik7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoOgorICAgICAgICAgICAgc2V0Q0dGaWxs
Q29sb3IoY29udGV4dCwgc3RhdGUoKS5maWxsQnJ1c2goKS5jb2xvcigpKTsKKyAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpB
bHBoYUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlLmFs
cGhhKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VU
aGlja25lc3M6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3Rk
OjptYXgoc3RhdGUoKS5zdHJva2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVh
azsKIAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVD
aGFuZ2UgfSkpCi0gICAgICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQsIHN0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0U3Ry
b2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZSgpLnN0cm9rZUJy
dXNoKCkuY29sb3IoKSkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkp
Ci0gICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3
aW5nTW9kZShzdGF0ZS50ZXh0RHJhd2luZ01vZGUpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAgICAgICAgICAgc2V0Q0dMaW5lQ2FwKGNv
bnRleHQsIHN0YXRlKCkubGluZUNhcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFu
Z2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUu
c2hvdWxkQW50aWFsaWFzKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpMaW5lSm9pbjoKKyAgICAgICAgICAgIHNldENHTGluZUpvaW4oY29udGV4dCwgc3RhdGUo
KS5saW5lSm9pbigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAg
ICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNob3VsZFNt
b290aEZvbnRzKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpM
aW5lRGFzaDoKKyAgICAgICAgICAgIHNldENHTGluZURhc2goY29udGV4dCwgc3RhdGUoKS5saW5l
RGFzaCgpLmRhc2hlcywgc3RhdGUoKS5saW5lRGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBi
cmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEludGVy
cG9sYXRpb25RdWFsaXR5KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQ6CisgICAgICAgICAgICBzZXRDR01pdGVyTGltaXQoY29u
dGV4dCwgc3RhdGUoKS5taXRlckxpbWl0KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBp
ZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCi0g
ICAgICAgIHNldENHU2hhZG93KCp0aGlzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci19CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZToKKyAgICAgICAgICAgIHNldENHQmxl
bmRNb2RlKGNvbnRleHQsIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbiwgc3RhdGUo
KS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi12b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIENH
Q29udGV4dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAgICAg
ICAgc2V0Q0dTaGFkb3coY29udGV4dCwgcmVuZGVyaW5nTW9kZSgpLCBzdGF0ZSgpLmRyb3BTaGFk
b3coKS5vZmZzZXQsIHN0YXRlKCkuZHJvcFNoYWRvdygpLmJsdXJSYWRpdXMsIHN0YXRlKCkuZHJv
cFNoYWRvdygpLmNvbG9yLCBzdGF0ZSgpLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpBbHBoYToKKyAgICAgICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRl
KCkuYWxwaGEoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk6CisgICAgICAg
ICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9s
YXRpb25RdWFsaXR5KHN0YXRlKCkuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlRleHREcmF3aW5nTW9kZToKKyAgICAgICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5n
TW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9kZShzdGF0ZSgpLnRleHREcmF3aW5nTW9kZSgp
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENHQ29udGV4dFNldFNo
b3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZSgpLnNob3VsZEFudGlhbGlhcygpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U2hvdWxkU21vb3RoRm9udHM6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9v
dGhGb250cyhjb250ZXh0LCBzdGF0ZSgpLnNob3VsZFNtb290aEZvbnRzKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTExMjUsNyAr
MTIxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7
CisgICAgaWYgKHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7
CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkb3VibGVMaW5lV2lkdGggPSBsaW5lV2lkdGggKiAy
OwogICAgICAgICAgICAgZmxvYXQgYWRqdXN0ZWRXaWR0aCA9IGNlaWxmKHJlY3Qud2lkdGgoKSAr
IGRvdWJsZUxpbmVXaWR0aCk7CkBAIC0xMTM1LDcgKzEyMjYsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQogICAgICAgICAgICAgYXV0byBsYXllciA9IGFkb3B0Q0YoQ0dMYXllckNyZWF0ZVdpdGhDb250
ZXh0KGNvbnRleHQsIGxheWVyU2l6ZSwgMCkpOwogCiAgICAgICAgICAgICBDR0NvbnRleHRSZWYg
bGF5ZXJDb250ZXh0ID0gQ0dMYXllckdldENvbnRleHQobGF5ZXIuZ2V0KCkpOwotICAgICAgICAg
ICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSBsaW5lV2lkdGg7CiAgICAgICAgICAgICBDR0Nv
bnRleHRTZXRMaW5lV2lkdGgobGF5ZXJDb250ZXh0LCBsaW5lV2lkdGgpOwogCiAgICAgICAgICAg
ICAvLyBDb21wZW5zYXRlIGZvciB0aGUgbGluZSB3aWR0aCwgb3RoZXJ3aXNlIHRoZSBsYXllcidz
IHRvcC1sZWZ0IGNvcm5lciB3b3VsZCBiZQpAQCAtMTE0OSw4ICsxMjM5LDggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0
KTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxheWVy
Q29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0gICAg
ICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVu
dC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShs
YXllckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tl
R3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgY29uc3QgZmxv
YXQgZGVzdGluYXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAg
ICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0
aCk7CkBAIC0xMTYxLDEzICsxMjUxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAg
ICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0
UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0
YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBz
dHJva2VHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9r
ZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICAgICAvLyBVc2lu
ZyBDR0NvbnRleHRBZGRSZWN0IGFuZCBDR0NvbnRleHRTdHJva2VQYXRoIHRvIHN0cm9rZSByZWN0
IHJhdGhlciB0aGFuCkBAIC0xMTgyLDk0ICsxMjcyLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAg
ICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQotewotICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAg
Y2FzZSBMaW5lQ2FwOjpCdXR0OgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3Jt
Q29udGV4dCgpLCBrQ0dMaW5lQ2FwQnV0dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGlu
ZUNhcDo6Um91bmQ6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0
KCksIGtDR0xpbmVDYXBSb3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6
U3F1YXJlOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBr
Q0dMaW5lQ2FwU3F1YXJlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKLXsKLSAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKLSAgICAgICAgZmxvYXQg
bGVuZ3RoID0gMDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tp
XSk7Ci0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChk
YXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRMaW5l
RGFzaChwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVz
LnNpemUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKExpbmVK
b2luIGpvaW4pCi17Ci0gICAgc3dpdGNoIChqb2luKSB7Ci0gICAgY2FzZSBMaW5lSm9pbjo6TWl0
ZXI6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dM
aW5lSm9pbk1pdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6
Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5l
Sm9pblJvdW5kKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6Ci0g
ICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9p
bkJldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgQ0dDb250ZXh0U2NhbGVD
VE0ocGxhdGZvcm1Db250ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
bV9kYXRhLT5zY2FsZShzaXplKTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
cm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIENHQ29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHQoKSwgYW5nbGUpOwotICAgIG1fZGF0YS0+cm90YXRlKGFuZ2xlKTsKLSAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0g
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKLSAgICBt
X2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENH
Q29udGV4dENvbmNhdENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAgICBtX2Rh
dGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dD
b250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+
c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0Nv
bnRleHRDRzo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0Ci17
Ci0gICAgLy8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBl
eGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0aGUKLSAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3Np
dGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgotICAg
IC8vIGxldmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBj
YW4gdXNlIHRoaXMgQ0cgQVBJLgotICAgIGlmIChpbmNsdWRlU2NhbGUgPT0gRGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSkKLSAgICAgICAgcmV0dXJuIENHQ29udGV4dEdldFVzZXJTcGFjZVRv
RGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgcmV0dXJuIENH
Q29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KIEZsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJv
dW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7CiAgICAgLy8gSXQgaXMgbm90IGVub3VnaCBqdXN0
IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UuIFRoZSByb3RhdGlvbiBwYXJ0IG9m
IHRoZQpAQCAtMTI4MCw3ICsxMjgyLDkgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmcKICAgICBp
ZiAobV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5KQogICAg
ICAgICByZXR1cm4gcm91bmRlZEludFJlY3QocmVjdCk7CiAKLSAgICBDR0FmZmluZVRyYW5zZm9y
bSBkZXZpY2VNYXRyaXggPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNm
b3JtKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOworCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dD
b250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShjb250ZXh0KTsKICAgICBp
ZiAoQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lkZW50aXR5KGRldmljZU1hdHJpeCkpIHsKICAgICAgICAg
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3QpOwpAQCAtMTMxOSw2ICsxMzIzLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXMKICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgQ29sb3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAogICAgIEZs
b2F0UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JU
ZXh0KEZsb2F0UmVjdChwb2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykp
LCBwcmludGluZywgbG9jYWxTdHJva2VDb2xvcik7CkBAIC0xMzY0LDEyICsxMzY5LDEyIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAgICAgfQogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1
YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQo
KSwgbG9jYWxTdHJva2VDb2xvcik7CisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGxv
Y2FsU3Ryb2tlQ29sb3IpOwogCi0gICAgQ0dDb250ZXh0RmlsbFJlY3RzKHBsYXRmb3JtQ29udGV4
dCgpLCBkYXNoQm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkpOworICAgIENHQ29udGV4
dEZpbGxSZWN0cyhjb250ZXh0LCBkYXNoQm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkp
OwogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9yKCkpOworICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBmaWxsQ29sb3IoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQpAQCAtMTQxMiwxNyArMTQxNywxOCBAQCBSZW5kZXJpbmdNb2RlIEdyYXBoaWNz
Q29udGV4dENHOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAg
Ly8gQ29yZUdyYXBoaWNzIGV4cGVjdHMgdGhlIGJhc2UgQ1RNIG9mIGEgSGlEUEkgY29udGV4dCB0
byBoYXZlIHRoZSBzY2FsZSBmYWN0b3IgYXBwbGllZCB0byBpdC4KICAgICAvLyBGYWlsaW5nIHRv
IGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBDVE0gd2lsbCBjYXVzZSBjZXJ0YWluIENHIGZlYXR1cmVz
LCBzdWNoIGFzIGZvY3VzIHJpbmdzLAogICAgIC8vIHRvIGRyYXcgd2l0aCBhIHNjYWxlIGZhY3Rv
ciBvZiAxIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2NhbGUgZmFjdG9yLgotICAgIENHQ29udGV4
dFNldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dD
b250ZXh0R2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBk
ZXZpY2VTY2FsZUZhY3RvcikpOworICAgIENHQ29udGV4dFNldEJhc2VDVE0oY29udGV4dCwgQ0dB
ZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKGNvbnRleHQpLCBkZXZpY2VT
Y2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewogICAgIC8vIENH
Q29udGV4dEZpbGxFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAg
IGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAg
aWYgKGZpbGxHcmFkaWVudCgpIHx8IGZpbGxQYXR0ZXJuKCkpIHsKICAgICAgICAgZmlsbEVsbGlw
c2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDM0LDcgKzE0
NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5S
ZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdy
YWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgIGlmIChzdHJva2VHcmFkaWVu
dCgpIHx8IHN0cm9rZVBhdHRlcm4oKSkgewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVs
bGlwc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ2OCw5ICsxNDc0LDEwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IEZsb2F0UG9pCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0Q0c6OmNhblVzZVNo
YWRvd0JsdXIoKSBjb25zdAogewotICAgIHJldHVybiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICByZXR1cm4gKHJlbmRlcmluZ01vZGUoKSA9
PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYg
IXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCk7CiB9CiAKLX0KIAotI2VuZGlmCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCA0Njhh
NDRiYWE4NmVlNTI2MTlkMjU1ZjkzOTQzYTk3NTViYWM5ZmFiLi4xNTdhMWEwNjgxZGQxY2YxZjdm
YjYzNDdhODhiZjgyYzMwNzBlMGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDEwLCAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsNTMgKzI1LDEzIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNFKENHKQorCiAjaW5jbHVk
ZSAiQ29sb3JTcGFjZUNHLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShDR0Nv
bnRleHRSZWYpOwotCi1jbGFzcyBDR0NvbnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAgICBD
R0NvbnRleHRTdGF0ZVNhdmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0
b3JlID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3Nh
dmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFu
ZFJlc3RvcmUpCi0gICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0g
ICAgfQotICAgIAotICAgIH5DR0NvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlm
IChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZSht
X2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSht
X2NvbnRleHQpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUp
OwotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1f
c2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRTYXZlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLSAg
ICAKLXByaXZhdGU6Ci0gICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2
ZUFuZFJlc3RvcmU7Ci19OwotCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRD
RyA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgewogcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4
dENHKENHQ29udGV4dFJlZik7CkBAIC04NSw2OSArNDUsNDkgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAg
dm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wp
IGZpbmFsOworICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAg
dm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAx
KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwogCisgICAgdm9pZCBz
YXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0
YXRlQ2hhbmdlcygpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7
CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0aChj
b25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7
Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLQotICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3Q7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAg
dm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgp
IGZpbmFsOwotCi0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAg
IGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0Fj
Y2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkgZmluYWw7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFs
OwogCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQotICAgIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgZmluYWw7Ci0KICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9
IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAg
IEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZp
bmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6
Tm9ybWFsKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIHVz
aW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNp
emUmKSBmaW5hbDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7
Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7
CiAKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAg
ICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKKyAgICB2b2lk
IHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5j
bHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzID0gMSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmlu
YWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKQEAgLTE1NiwxOCArOTYsMjEgQEAgcHVibGljOgogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFs
OworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXpl
JiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZv
aWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CiAKKyAgICB2b2lk
IGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0
cm9rZVN0eWxlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9p
ZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0g
ICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBGbG9hdFJlY3Qgcm91
bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFs
bFNpZGVzKSBmaW5hbDsKIAogICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3Qg
ZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAg
IHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KworICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAKICAgICB2aXJ0dWFs
IGJvb2wgY2FuVXNlU2hhZG93Qmx1cigpIGNvbnN0OwogCkBAIC0xNzUsOSArMTE4LDE2IEBAIHB1
YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBDR0NvbnRleHRSZWYgaW50
ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKIH07CiAKLX0KK0NHQWZm
aW5lVHJhbnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjaW5jbHVkZSAiQ0dDb250ZXh0U3RhdGVTYXZlci5oIgogCisjZW5k
aWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCBlNmNlMmZiOTcyNDdhNmI4NmMwOWIx
YWQzNjE3MDFjMmVjM2U4NjI1Li5hZjAwYTAxMzM0N2UwY2Q4NWEzMGI4ODRlYmM3OWYzMmYxZTIz
MTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgUERGRG9jdW1l
bnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hCiAKICAgICAvLyBPbGQgYW5kIG5ldyBjb250ZXh0IHNjYWxpbmcgZmFjdG9ycyBo
YXZlIHRvIG1hdGNoIGFzIHdlbGwuCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlw
ZSBkZWNvbXBvc2VkVHJhbnNmb3JtOwotICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4
dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFu
c2Zvcm0pOworICAgIGNvbnRleHQuZ2V0Q1RNKCkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zv
cm0pOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBjYWNoZWREZWNvbXBv
c2VkVHJhbnNmb3JtOwogICAgIG1fY2FjaGVkVHJhbnNmb3JtLmRlY29tcG9zZShjYWNoZWREZWNv
bXBvc2VkVHJhbnNmb3JtKTsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFBERkRvY3VtZW50SW1h
Z2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdAogICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhidWZmZXJDb250ZXh0LCBkc3RS
ZWN0LCBGbG9hdFJlY3QobV9jYWNoZWRJbWFnZVJlY3QubG9jYXRpb24oKSwgc3JjUmVjdC5zaXpl
KCkpKTsKICAgICBkcmF3UERGUGFnZShidWZmZXJDb250ZXh0KTsKIAotICAgIG1fY2FjaGVkVHJh
bnNmb3JtID0gY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKKyAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7
CiAgICAgbV9jYWNoZWREZXN0aW5hdGlvblJlY3QgPSBkc3RSZWN0OwogICAgIG1fY2FjaGVkU291
cmNlUmVjdCA9IHNyY1JlY3Q7CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CkBAIC0z
NjMsNiArMzYzLDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFnZShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtbV9jcm9wQm94Lmxv
Y2F0aW9uKCkpOwogCisgICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgLy8g
Q0dQREYgcGFnZXMgYXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IENHQ29udGV4dERyYXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIENHUERGRG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBudWxscHRy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmlu
ZGV4IGQ2ODlhNTFhODkxMDJhNTA5MDQ1NTliNDQyMjM2OWRlMTQ3MDMzMzUuLmZkZWVmNmIzOGQw
YzViNTU1NjczN2ViN2Y0NGFmMmYyZmM5YTQ0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgUGF0
aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoR3JhcGhpY3NDCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCi0gICAg
Ym9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9p
bnQsIGtDR1BhdGhTdHJva2UpOworICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhD
b250YWluc1BvaW50KGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIGtD
R1BhdGhTdHJva2UpOwogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAKICAg
ICByZXR1cm4gaGl0U3VjY2VzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNv
cmVUZXh0LmNwcAppbmRleCBlZmJjMWU0OTU0NDFiZWRlNzM0ZTk0OGRkMjZkMzcxNDQxNjU1M2Uw
Li5lOWI3YWM0ZDdmNGNiZjc0MTI4OTM5YmZhOGMwNGU3NjVhMGRiZDg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3Jk
ZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogCi0j
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0zNSw0OSArMzQsNDEgQEAKICNpbmNs
dWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHBh
bC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxl
Z2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVm
IGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVS
ZWYpCitzdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxl
Z2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRl
LCBDR1JlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCiB7CiAgICAg
RHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVj
b3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRl
ci5yZWNvcmRCZWdpbkxheWVyKHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsKKyAgICByZWNvcmRlci5y
ZWNvcmRCZWdpbkxheWVyKGdzdGF0ZSk7CiAgICAgcmV0dXJuIGRlbGVnYXRlOwogfQogCi1zdGF0
aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVs
ZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCitz
dGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYg
ZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKICAg
ICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNS
ZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29y
ZGVyLnJlY29yZEVuZExheWVyKHJzdGF0ZSwgZ3N0YXRlKTsKKyAgICByZWNvcmRlci5yZWNvcmRF
bmRMYXllcihnc3RhdGUpOwogICAgIHJldHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHRXJy
b3IgZHJhd0dseXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdT
dGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zv
cm0qIHRtLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1td
LCBzaXplX3QgY291bnQpCitzdGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENHQ29udGV4dERlbGVn
YXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUs
IGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3Qg
Q0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQogewotICAgIGlmIChDR0dTdGF0ZUdl
dEFscGhhKGdzdGF0ZSkgPiAwKSB7Ci0gICAgICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3Jk
ZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVH
ZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlwaHMocnN0
YXRlLCBnc3RhdGUsIHRtLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwotICAgIH0KKyAgICBE
cmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNv
cmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOworICAgIHJlY29yZGVy
LnJlY29yZERyYXdHbHlwaHMoZ3N0YXRlLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwogICAg
IHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShD
R0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUs
IENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2UpCitzdGF0
aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVu
ZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VS
ZWYgaW1hZ2UpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNf
Y2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdh
dGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UocnN0YXRlLCBnc3RhdGUsIHJlY3Qs
IGltYWdlKTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UoZ3N0YXRlLCByZWN0LCBpbWFn
ZSk7CiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotVW5pcXVlUmVmPEdyYXBoaWNz
Q29udGV4dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQorc3Rh
dGljIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFsQ29udGV4dChEcmF3
R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyKQogewotICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0g
YWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7CisgICAgYXV0byBjb250ZXh0
RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKCZyZWNvcmRlcikpOwog
ICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBk
ZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4o
JmJlZ2luTGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHRE
ZWxlZ2F0ZS5nZXQoKSwgZGVFbmRMYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxl
Z2F0ZUNhbGxiYWNrPigmZW5kTGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxi
YWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0
PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZXZWJDb3JlOjpkcmF3R2x5cGhzKSk7CkBAIC04
Niw2NyArNzcsMTUgQEAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBoc1JlY29y
ZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdy
YXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAotRHJhd0dseXBoc1JlY29yZGVy
OjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3RE
cmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0IGRl
cml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVj
b3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29u
dGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZl
Rm9udEZyb21Db250ZXh0IGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRp
b25Db250ZXh0KGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICAsIG1fZGVjb25zdHJ1Y3REcmF3R2x5
cGhzKGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGVyaXZlRm9udEZyb21Db250ZXh0
KGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUlu
dGVybmFsQ29udGV4dCgpKQorICAgICwgbV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50ZXJuYWxD
b250ZXh0KCp0aGlzKSkKIHsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRl
SW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQot
ewotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBjb250ZXh0U3RhdGUuZmls
bENvbG9yOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQgPSBjb250ZXh0
U3RhdGUuZmlsbEdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bTsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUu
ZmlsbFBhdHRlcm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IgPSBj
b250ZXh0U3RhdGUuc3Ryb2tlQ29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmdyYWRpZW50ID0gY29udGV4dFN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0YXRlLnN0
cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0
eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUuc3Ryb2tlUGF0dGVybjsKLQotICAgIG1fb3JpZ2lu
YWxTdGF0ZS5jdG0gPSBtX293bmVyLmdldENUTSgpOyAvLyBGSVhNRTogRGVhbCB3aXRoIGJhc2Ug
Q1RNLgotCi0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBjb250ZXh0U3RhdGUu
c2hhZG93T2Zmc2V0OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciA9IGNvbnRleHRT
dGF0ZS5zaGFkb3dCbHVyOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IgPSBjb250
ZXh0U3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVU
cmFuc2Zvcm1zID0gY29udGV4dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotCi0gICAg
bV9jdXJyZW50U3RhdGUgPSBtX29yaWdpbmFsU3RhdGU7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgY29udGV4dFN0YXRlKQotewotICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNv
bG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvciht
X29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0
RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVsc2Ugewot
ICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICAg
ICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNv
bG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7Ci0gICAgZWxzZSBpZiAobV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFk
aWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRl
cm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0KLSAgICBtX2ludGVybmFs
Q29udGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRv
dy5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIs
IG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNN
b2RlKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4
dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpw
cmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250
KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAg
ICAgQVNTRVJUKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRyaXgoZm9u
dC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpKTsKIApAQCAtMTU2LDEwNCArOTUsMzggQEAgdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYg
Zm9udCwgRm9udFNtb290aGluZ00KICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVP
dmVyYWxsVGV4dE1hdHJpeChmb250KTsKICAgICBpZiAoZm9udC5wbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCiAgICAgICAgIG1fb3JpZ2lu
YWxUZXh0TWF0cml4ID0gY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCBtX29yaWdpbmFs
VGV4dE1hdHJpeCk7Ci0KLSAgICBhdXRvJiBjb250ZXh0U3RhdGUgPSBtX293bmVyLnN0YXRlKCk7
Ci0gICAgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnRleHRTdGF0ZSk7Ci0gICAgcG9wdWxhdGVJ
bnRlcm5hbENvbnRleHQoY29udGV4dFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkKK0dyYXBoaWNzQ29udGV4dFN0YXRlIERyYXdH
bHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCgpCiB7Ci0gICAgdXBkYXRlQ1RN
KG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwotICAgIHVwZGF0ZUZpbGxDb2xvcihtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50Lmdl
dCgpLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0
ZVN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciwgbV9vcmlnaW5h
bFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LmdldCgpLCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tl
U3R5bGUucGF0dGVybi5nZXQoKSk7Ci0gICAgdXBkYXRlU2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0
ZS5zaGFkb3cuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA/
IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMgOiBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6
Tm8pOworICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9IG1fZGVzdGluYXRpb25Db250ZXh0LnN0YXRl
KCk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPm1lcmdlU3RhdGVEaWZmcyhvcmlnaW5hbFN0YXRl
KTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1
cm4gb3JpZ2luYWxTdGF0ZTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZp
bGxDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0
dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGlu
YXRpb25Db250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKQog
ewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0LCBm
b3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlzIHRv
IGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgotICAg
IC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hhdCBp
dCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9yIHRv
by4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuZmlsbFN0eWxlLmNvbG9yKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAg
ICBuZXdTdGF0ZS5maWxsQ29sb3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3JhZGllbnQpCi0g
ICAgICAgIG5ld1N0YXRlLmZpbGxHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQ
YXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5maWxsUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAg
bV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbENvbG9yQ2hhbmdlIH0pOwotICAgIG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5jb2xvciA9
IG5ld0NvbG9yOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0Lm1lcmdlU3RhdGVEaWZmcyhvcmln
aW5hbFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNv
bG9yKGNvbnN0IENvbG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJu
KiBuZXdQYXR0ZXJuKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIo
Q0dHU3RhdGVSZWYgZ3N0YXRlKQogewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0
IGl0IGFjdHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwg
b25seSBldmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNv
cnJlY3QgY2hlY2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ug
c2V0IGl0IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3
b3JrcyBjb3JyZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3Rh
dGUuc3Ryb2tlU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9yID0gbmV3Q29sb3I7
Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VHcmFkaWVudCA9
IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5zdHJv
a2VQYXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0
YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9KTsKLSAgICBt
X2N1cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0
aW5hdGlvbkNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihDR0dTdGF0ZUdldEFscGhhKGdz
dGF0ZSkpOwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgY3RtKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVuZExh
eWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICBpZiAoY3RtID09IG1fY3VycmVudFN0YXRl
LmN0bSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vd25lci5zZXRDVE0oY3RtKTsKLSAgICBt
X2N1cnJlbnRTdGF0ZS5jdG0gPSBjdG07CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RN
KCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5lbmRU
cmFuc3BhcmVuY3lMYXllcigpOwogfQogCi1zdGF0aWMgYm9vbCBzaGFkb3dJc0NsZWFyZWQoY29u
c3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIpCi17Ci0gICAgcmV0
dXJuIHNoYWRvd09mZnNldCA9PSBGbG9hdFNpemUoKSAmJiAhc2hhZG93Qmx1cjsKLX0KLQotdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRv
d09mZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsKLSAgICAvLyBX
ZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGlmIG5vYm9k
eSBoYXMgYW55IHNoYWRvd3MuCi0gICAgaWYgKHNoYWRvd0lzQ2xlYXJlZChzaGFkb3dPZmZzZXQs
IHNoYWRvd0JsdXIpICYmIHNoYWRvd0lzQ2xlYXJlZChtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zm
c2V0LCBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuYmx1cikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzIHN0YXRlQ2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc2hhZG93T2Zm
c2V0ICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQgfHwgc2hhZG93Qmx1ciAhPSBtX2N1
cnJlbnRTdGF0ZS5zaGFkb3cuYmx1ciB8fCBzaGFkb3dDb2xvciAhPSBtX2N1cnJlbnRTdGF0ZS5z
aGFkb3cuY29sb3IpIHsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93T2Zmc2V0ID0gc2hhZG93T2Zm
c2V0OwotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjsKLSAgICAgICAg
bmV3U3RhdGUuc2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICAgICAgc3RhdGVDaGFuZ2VG
bGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Ci0gICAgfQotICAg
IGlmIChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAhPSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6
VW5zcGVjaWZpZWQgJiYgKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zOjpZZXMpICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1z
KSB7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotICAgICAg
ICBzdGF0ZUNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXNDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc3RhdGVDaGFuZ2VGbGFncy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0
YXRlLCBzdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZz
ZXQgPSBzaGFkb3dPZmZzZXQ7Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgPSBzaGFk
b3dCbHVyOwotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5jb2xvciA9IHNoYWRvd0NvbG9yOwot
ICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotfQotCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUpCitzdGF0
aWMgdm9pZCBzZXREcm9wU2hhZG93KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0
LCBDR1N0eWxlUmVmIHN0eWxlKQogewogICAgIGlmIChDR1N0eWxlR2V0VHlwZShzdHlsZSkgIT0g
a0NHU3R5bGVTaGFkb3cpIHsKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBraW5kcyBv
ZiBDR1N0eWxlcy4KLSAgICAgICAgdXBkYXRlU2hhZG93KHswLCAwfSwgMCwgQ29sb3IoKSwgU2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkKTsKKyAgICAgICAgZGVzdGluYXRpb25D
b250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2MSwy
MCArMTM0LDkgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0eWxl
UmVmIHN0eWxlKQogICAgIGF1dG8gcmFkID0gZGVnMnJhZChzaGFkb3dTdHlsZS5hemltdXRoIC0g
MTgwKTsKICAgICBhdXRvIHNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzdGQ6OmNvcyhyYWQpLCBz
dGQ6OnNpbihyYWQpKSAqIHNoYWRvd1N0eWxlLmhlaWdodDsKICAgICBhdXRvIHNoYWRvd0NvbG9y
ID0gQ0dTdHlsZUdldENvbG9yKHN0eWxlKTsKLSAgICB1cGRhdGVTaGFkb3coc2hhZG93T2Zmc2V0
LCBzaGFkb3dTdHlsZS5yYWRpdXMsIENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uo
c2hhZG93Q29sb3IpLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KIAotdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdl
dENUTShnc3RhdGUpKTsKLSAgICBhdXRvIGFscGhhID0gQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUp
OwotICAgIG1fb3duZXIuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci19Ci0KLXZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBD
R0dTdGF0ZVJlZiBnc3RhdGUpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3Rh
dGUpKTsKLSAgICBtX293bmVyLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgZGVzdGluYXRp
b25Db250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHN0YXRpY19jYXN0PGZsb2F0
PihzaGFkb3dTdHlsZS5yYWRpdXMpLCBDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNl
KHNoYWRvd0NvbG9yKSB9KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXModHJ1ZSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21wdXRlQWR2
YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3Vu
dCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCkBAIC0yOTAsMTggKzE1Miwx
OCBAQCBzdGF0aWMgVmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhj
b25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVS
ZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBD
R0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQp
Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR0dTdGF0ZVJlZiBn
c3RhdGUsIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10s
IHNpemVfdCBjb3VudCkKIHsKICAgICBBU1NFUlRfSU1QTElFUyhtX2Rlcml2ZUZvbnRGcm9tQ29u
dGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vLCBtX29yaWdpbmFsRm9udCk7CiAKLSAg
ICBpZiAoIWNvdW50KQorICAgIGlmICghY291bnQgfHwgQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUp
IDw9IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIENHRm9udFJlZiB1c2VkRm9udCA9IENHR1N0
YXRlR2V0Rm9udChnc3RhdGUpOwogICAgIGlmIChtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBE
ZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vICYmIHVzZWRGb250ICE9IGFkb3B0Q0YoQ1RGb250Q29w
eUdyYXBoaWNzRm9udChtX29yaWdpbmFsRm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG51
bGxwdHIpKS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0
ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0
YXRlR2V0Q1RNKGdzdGF0ZSkpOwogCiAgICAgLy8gV2Ugd2FudCB0aGUgcmVwbGF5ZXIncyBDVE0g
YW5kIHRleHQgbWF0cml4IHRvIG1hdGNoIHRoZSBjdXJyZW50IENUTSBhbmQgdGV4dCBtYXRyaXgu
CiAgICAgLy8gVGhlIGN1cnJlbnQgdGV4dCBtYXRyaXggaXMgYSBjb25jYXRlbmF0aW9uIG9mIHdo
YXRldmVyIFdlYktpdCBzZXRzIGl0IHRvIGFuZCB3aGF0ZXZlcgpAQCAtMzI0LDEzICsxODYsMTYg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdT
dGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgaW52ZXJzZUNUTUZpeHVwID0gaW52
ZXJzZS52YWx1ZSgpOwogICAgIGVsc2UKICAgICAgICAgY3RtRml4dXAgPSBBZmZpbmVUcmFuc2Zv
cm0oKTsKLSAgICBtX293bmVyLmNvbmNhdENUTShjdG1GaXh1cCk7CisKKyAgICBtX2Rlc3RpbmF0
aW9uQ29udGV4dC5jb25jYXRDVE0oY3RtRml4dXApOwogCiAgICAgYXV0byBmaWxsQ29sb3IgPSBD
R0dTdGF0ZUdldEZpbGxDb2xvcihnc3RhdGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNl
dEZpbGxDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikp
OworCiAgICAgYXV0byBzdHJva2VDb2xvciA9IENHR1N0YXRlR2V0U3Ryb2tlQ29sb3IoZ3N0YXRl
KTsKLSAgICB1cGRhdGVGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFj
ZShmaWxsQ29sb3IpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJl
c2VydmVDb2xvclNwYWNlKHN0cm9rZUNvbG9yKSk7Ci0gICAgdXBkYXRlU2hhZG93KENHR1N0YXRl
R2V0U3R5bGUoZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOworCisg
ICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVHZXRTdHlsZShn
c3RhdGUpKTsKIAogICAgIGF1dG8gZm9udFNpemUgPSBDR0dTdGF0ZUdldEZvbnRTaXplKGdzdGF0
ZSk7CiAgICAgUmVmIGZvbnQgPSBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250
RnJvbUNvbnRleHQ6Ok5vID8gKm1fb3JpZ2luYWxGb250IDogRm9udDo6Y3JlYXRlKEZvbnRQbGF0
Zm9ybURhdGEoYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KHVzZWRGb250LCBm
b250U2l6ZSwgbnVsbHB0ciwgbnVsbHB0cikpLCBmb250U2l6ZSkpOwpAQCAtMzQ1LDMwICsyMTAs
MzggQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJp
bmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgLy8gRklYTUU6IDxodHRwczov
L3dlYmtpdC5vcmcvYi8yMzI5MTc+IChgRHJhd0dseXBoc1JlY29yZGVyYCBzaG91bGQgYmUgYWJs
ZSB0byByZWNvcmQrcmVwbGF5IHZlcnRpY2FsIHRleHQpCiAgICAgfQogCi0gICAgbV9vd25lci5k
cmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBv
c2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCB0ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0
TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7Ci0KLSAgICBt
X293bmVyLmNvbmNhdENUTShpbnZlcnNlQ1RNRml4dXApOworICAgIG1fZGVzdGluYXRpb25Db250
ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNG
cm9tUG9zaXRpb25zKHBvc2l0aW9ucywgY291bnQsIHRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQs
IHRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsKIH0KIAot
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNnSW1hZ2Up
Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKENHR1N0YXRlUmVmIGdz
dGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgY2dJbWFnZSkKIHsKLSAgICB1cGRhdGVDVE0o
KkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0
eWxlKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVH
ZXRDVE0oZ3N0YXRlKSk7CisgICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwg
Q0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKIAogICAgIC8vIENvcmUgR3JhcGhpY3MgYXNzdW1l
cyBhICJ5IHVwIiBjb29yZGluYXRlIHN5c3RlbSwgYnV0IGluIFdlYktpdCwgd2UgdXNlIGEgInkt
ZG93biIgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgLy8gVGhpcyBtZWFucyB0aGF0IFdlYktpdCdz
IGRyYXdpbmcgcm91dGluZXMgKEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkpIGludGVudGlv
bmFsbHkgZHJhdyBpbWFnZXMgdXBzaWRlLWRvd24gZnJvbSBDb3JlIEdyYXBoaWNzJ3MgcG9pbnQg
b2Ygdmlldy4KICAgICAvLyAoVGhlcmUncyBhIHktZmxpcCBpbnNpZGUgdGhlIGltcGxlbWVudGF0
aW9uIG9mIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkuKQogICAgIC8vIFRoZSByZWN0IGhh
cyB0aGUgcmlnaHQgYm91bmRzLCBidXQgd2UgbmVlZCB0byB0cmFuc2Zvcm0gZnJvbSBDRydzIGNv
b3JkaW5hdGUgc3lzdGVtIHRvIFdlYktpdCdzIGJ5IHBlcmZvcm1pbmcgb3VyIG93biB5LWZsaXAg
c28gaW1hZ2VzIGFyZSBkcmF3biB0aGUgcmlnaHQtc2lkZS11cC4KICAgICAvLyBXZSBkbyB0aGlz
IGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHRoZSB0d28gQVBJcywgd2hpY2ggaXMgcmlnaHQgaGVy
ZS4KLSAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCByZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qu
b3JpZ2luLnkpOwotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0KKyAgICBt
X2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhlaWdodCArIDIgKiBy
ZWN0Lm9yaWdpbi55KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKKyAgICAKICAgICBhdXRvIGltYWdlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShjZ0lt
YWdlKTsKLSAgICBtX293bmVyLmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5zaXplKCks
IEZsb2F0UmVjdChyZWN0KSwgRmxvYXRSZWN0IHt7IH0sIGltYWdlLT5zaXplKCl9LCBJbWFnZVBh
aW50aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7Ci0KKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6
ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2UtPnNpemUoKSB9LCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7
CisgICAgCiAgICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRl
eHQuCi0gICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBtX293bmVyLnRy
YW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIG1fZGVz
dGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVj
dC5vcmlnaW4ueSkpOworfQorCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZH
UnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2Rl
KQoreworICAgIHNldEludGVybmFsRm9udChmb250LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAKKyAg
ICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgcmVzdG9y
ZURlc3RpbmF0aW9uQ29udGV4dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdPVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKQEAgLTM3OSwyNSArMjUyLDE5IEBAIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCoKICAgICAgICAgYXV0byBib3VuZHMgPSBmb250LmJvdW5kc0ZvckdseXBoKGdseXBo
c1tpXSk7CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgbG9jYWwgSW1hZ2VCdWZmZXIgYmVjYXVzZSBk
ZWNvZGluZyB0aGUgU1ZHIGZvbnRzIGhhcyB0byBoYXBwZW4gaW4gV2ViUHJvY2Vzcy4KLSAgICAg
ICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX293bmVyLmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZl
cihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6
OkxvY2FsKSkgeworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fZGVzdGluYXRpb25D
b250ZXh0LmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6OkxvY2FsKSkgeworICAgICAgICAgICAgaW1h
Z2VCdWZmZXItPmNvbnRleHQoKS5hcHBseVN0YXRlQ2hhbmdlcygpOwogICAgICAgICAgICAgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoaW1hZ2VCdWZmZXItPmNvbnRleHQoKSwgZm9udCwgZ2x5cGhz
ICsgaSwgYWR2YW5jZXMgKyBpLCAxLCBGbG9hdFBvaW50KCksIHNtb290aGluZ01vZGUpOwogCiAg
ICAgICAgICAgICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0ID0gZW5jbG9zaW5nSW50UmVjdChi
b3VuZHMpOwogICAgICAgICAgICAgZGVzdGluYXRpb25SZWN0Lm1vdmVCeShwZW5Qb3NpdGlvbik7
Ci0gICAgICAgICAgICBtX293bmVyLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRlc3Rp
bmF0aW9uUmVjdCk7CisgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogICAgICAgICB9CiAKICAgICAg
ICAgcGVuUG9zaXRpb24ubW92ZShzaXplKGFkdmFuY2VzW2ldKSk7CiAgICAgfQogfQogCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIHByZXBhcmVJbnRlcm5h
bENvbnRleHQoZm9udCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgRm9udENhc2NhZGU6OmRyYXdHbHlw
aHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
c3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQo
KTsKLX0KLQogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGluZ0ludG9PVFNW
R0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUg
c21vb3RoaW5nTW9kZSkKIHsKICAgICBhdXRvIG90c3ZnR2x5cGhzID0gZm9udC5maW5kT1RTVkdH
bHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpOwpAQCAtNDQwLDcgKzMwNyw3IEBAIHZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29u
c3QgRm9udCYgZm9uCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBp
ZiAobV9kZWNvbnN0cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpObykg
ewotICAgICAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAgICAg
bV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC00NTMsMTUgKzMyMCwxNyBAQCB2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQoQ1RGb250UmVmIGZvbnQsIENHRmxvYXQgZm9udFNpemUs
IENUTGluZQogewogICAgIEFTU0VSVChtX2RlY29uc3RydWN0RHJhd0dseXBocyA9PSBEZWNvbnN0
cnVjdERyYXdHbHlwaHM6Olllcyk7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNh
dmVyKG1fb3duZXIpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIobV9kZXN0
aW5hdGlvbkNvbnRleHQpOwogCi0gICAgbV9vd25lci50cmFuc2xhdGUobGluZVJlY3Qub3JpZ2lu
LngsIGxpbmVSZWN0Lm9yaWdpbi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIG1fb3du
ZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJh
bnNsYXRlKGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0LnNp
emUuaGVpZ2h0KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwg
LTEpKTsKIAotICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0
Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50
aWFsaWFzZWQpOworICAgIHNldEludGVybmFsRm9udChGb250OjpjcmVhdGUoRm9udFBsYXRmb3Jt
RGF0YShmb250LCBmb250U2l6ZSkpLCBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxp
YXNlZCk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUludGVybmFsQ29u
dGV4dCgpOwogICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksIDAsIDApOwogICAgIENUTGluZURyYXcobGluZSwgbV9pbnRlcm5h
bENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBjb25jbHVkZUludGVybmFsQ29udGV4
dCgpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0ZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAK
aW5kZXggNTExZTA5Yjk2Y2VmMDMyNTA5MGUyM2FmOTE0YWUzNWYyYWI4ZWQyZS4uZTUzNGNjNTVh
ZjI2YjdmYjgyODBlNjNiN2RjMjVhM2Q0YTQxNjM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVD
b3JlVGV4dC5jcHAKQEAgLTE1MiwyNSArMTUyLDI3IEBAIHN0YXRpYyB2b2lkIGZpbGxWZWN0b3JX
aXRoVmVydGljYWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25z
CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBj
b3VudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQorc3RhdGljIHZvaWQgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYg
Zm9udCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNv
bnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRleHRNYXRyaXgpCiB7CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURh
dGEoKTsKKwogICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7CiAgICAg
aWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGlj
YWwpIHsKLSAgICAgICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGlj
YWxUZXh0TWF0cml4KGZvbnQsIHRleHRNYXRyaXgpLCBjb250ZXh0KTsKKyAgICAgICAgU2NvcGVk
VGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIHRl
eHRNYXRyaXgpLCBjZ0NvbnRleHQpOwogCiAgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJh
bnNsYXRpb25zKGNvdW50KTsKICAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNG
b3JHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRh
KCksIGNvdW50KTsKIAogICAgICAgICBhdXRvIGFzY2VudERlbHRhID0gZm9udC5mb250TWV0cmlj
cygpLmZsb2F0QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygp
LmZsb2F0QXNjZW50KCk7Ci0gICAgICAgIGZpbGxWZWN0b3JXaXRoVmVydGljYWxHbHlwaFBvc2l0
aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBj
b3VudCwgcG9pbnQsIGFzY2VudERlbHRhKTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0
Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRl
eHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRp
b25zLCBjZ0NvbnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBjb3VudCwgcG9p
bnQsIGFzY2VudERlbHRhKTsKKyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNnQ29udGV4dCk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlv
bnMocG9zaXRpb25zLCBjb250ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKLSAgICAgICAg
Q1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25z
LmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aEhvcml6b250
YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNnQ29udGV4dCwgYWR2YW5jZXMsIGNvdW50LCBw
b2ludCk7CisgICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBn
bHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0KIH0KIApA
QCAtMjQyLDEwICsyNDQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIHNldENHRm9u
dFJlbmRlcmluZ01vZGUoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250
ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7
Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBjb250
ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAg
ICBhdXRvIGRyb3BTaGFkb3cgPSBjb250ZXh0LmRyb3BTaGFkb3coKTsKIAogICAgIEFmZmluZVRy
YW5zZm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBmbG9hdCBzeW50aGV0
aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CkBAIC0yNTgsMjkgKzI1
NywyOSBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0
RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVy
ICYmICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9u
T3JGbGlwcGVkKCkpICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJv
b2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJh
d2luZ01vZGU6OkZpbGwgJiYgZHJvcFNoYWRvdy5jb2xvci5pc1ZhbGlkKCkgJiYgIWRyb3BTaGFk
b3cuYmx1clJhZGl1cyAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFj
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5
T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7CiAgICAgICAgIC8vIFBhaW50IHNpbXBs
ZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8g
YXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KICAgICAgICAgY29udGV4dC5jbGVh
clNoYWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxDb2xvcigp
OwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAgICBDb2xv
ciBzaGFkb3dGaWxsQ29sb3IgPSBkcm9wU2hhZG93LmNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9p
bnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRY
ID0gcG9pbnQueCgpICsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYg
c2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQg
dGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAg
ZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAo
Y29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSks
IGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4
KTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9m
ZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6
IDEpOworICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4
dFgsIHNoYWRvd1RleHRZKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCB0ZXh0TWF0cml4KTsKICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAg
ICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBz
eW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAgICAgICAgIHNob3dHbHlw
aHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZz
ZXQsIHNoYWRvd1RleHRZKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCB0ZXh0TWF0cml4KTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9y
KTsKICAgICB9CiAKLSAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0Nv
bnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKIAogICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0
KQotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsg
c3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgICAgICBzaG93R2x5cGhzV2l0
aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNldCwgcG9p
bnQueSgpKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0
TWF0cml4KTsKIAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRleHQuc2V0
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBj
b250ZXh0LnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250
U21vb3RoaW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggMmUyZjRmNGYyY2I1NWQz
NjVlNWFlMzk5MzI1ZDA1ZjJjMTczNjFmZC4uY2NmNDBjZWE2MmIxNjc0MzY2ZDc0ODQxNjJiMWJj
NGU5Mzc3MDc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC05MCwxMCArOTAsNyBA
QCBib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3Ms
IEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgaWYgKCEoZmxhZ3MgJiBBc1RleHRGbGFnOjpJbmNs
dWRlc1BsYXRmb3JtT3BlcmF0aW9ucykpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHN0YXRl
SXRlbSA9IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICAgICAgLy8gRklYTUU6IGZvciBu
b3csIG9ubHkgZHJvcCB0aGUgaXRlbSBpZiB0aGUgb25seSBzdGF0ZS1jaGFuZ2UgZmxhZ3MgYXJl
IHBsYXRmb3JtLXNwZWNpZmljLgotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZUNoYW5n
ZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250c0NoYW5nZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisg
ICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlKCkuY2hhbmdlcygpID09IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yMDIs
MTYgKzE5OSw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAg
ICAgICAgIHJldHVybiBhcHBlbmQ8U2F2ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihpdGVtLmdl
dDxSZXN0b3JlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJl
dHVybiBhcHBlbmQ8VHJhbnNsYXRlPihpdGVtLmdldDxUcmFuc2xhdGU+KCkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0
PFJvdGF0ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBh
cHBlbmQ8U2NhbGU+KGl0ZW0uZ2V0PFNjYWxlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5n
ZXQ8Q29uY2F0ZW5hdGVDVE0+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTZXRDVE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldElu
bGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTIyMCwxNiArMjA3LDYgQEAgdm9p
ZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0uZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKSk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0
U3RhdGU+KGl0ZW0uZ2V0PFNldFN0YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVDYXA+KGl0ZW0uZ2V0PFNldExpbmVD
YXA+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4g
YXBwZW5kPFNldExpbmVEYXNoPihpdGVtLmdldDxTZXRMaW5lRGFzaD4oKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZUpvaW4+
KGl0ZW0uZ2V0PFNldExpbmVKb2luPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxp
bWl0OgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldE1pdGVyTGltaXQ+KGl0ZW0uZ2V0PFNldE1p
dGVyTGltaXQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPENsZWFyU2hhZG93PihpdGVtLmdldDxDbGVhclNoYWRvdz4oKSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwPihpdGVtLmdl
dDxDbGlwPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMjc0LDggKzI1MSw2
IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9y
PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAg
cmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAg
ICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21w
b3NpdGVkUmVjdD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAg
ICAgICByZXR1cm4gYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRS
ZWN0PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAppbmRleCAw
YzI1MjI2NGFmNDE2NjU2MjE3NTE2MDQxMDQyYThiZGQzYmZhYmI1Li5kZWZjZTg0ZWYzNTg3YmVh
MDZkMjA3ZGI1YjgwMmFhN2M4MjU2NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpEcmF3aW5n
Q29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCi0gICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3ND
b250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQor
ICAgIDogbV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXpl
KSwgaW5pdGlhbENUTSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmNwcAppbmRleCA0NTc3NTUxODliZGFkZDcxOWQyNDVhNGU2ZDJjODFiZGRiMWY3ZGYz
Li4wZGIxNTAzOTYwNDAzMmYzMzAzZmJjYjY1MjFlNTNlNGUzNGY5MThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtNTIsMjEgKzUyLDYgQEAgdm9p
ZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgZ2V0PFJlc3RvcmU+KCkuYXBwbHkoY29udGV4dCk7
CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAg
IGdldDxUcmFuc2xhdGU+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGdldDxSb3RhdGU+KCkuYXBwbHkoY29udGV4
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAg
Z2V0PFNjYWxlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGdldDxDb25jYXRlbmF0ZUNUTT4oKS5h
cHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENU
TToKLSAgICAgICAgZ2V0PFNldENUTT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgZ2V0PFNl
dElubGluZUZpbGxDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAt
NzksMjEgKzY0LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKLSAgICAgICAgZ2V0PFNldExpbmVDYXA+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0PFNldExp
bmVEYXNoPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGdldDxTZXRMaW5lSm9pbj4oKS5hcHBseShjb250
ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6
Ci0gICAgICAgIGdldDxTZXRNaXRlckxpbWl0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGdldDxDbGVh
clNoYWRvdz4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXA6CiAgICAgICAgIGdldDxDbGlwPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAg
ICByZXR1cm47CkBAIC0xNjAsOSArMTMwLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6CiAgICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5hcHBseShjb250ZXh0
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDoKLSAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKLSAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAg
ICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjcwLDkgKzIzNyw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgICAgIGdldDxEcmF3UGF0aD4oKS5+RHJhd1BhdGgo
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDoKLSAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0ZWRSZWN0
KCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAg
ICAgZ2V0PEZpbGxQYXRoPigpLn5GaWxsUGF0aCgpOwogICAgICAgICByZXR1cm47CkBAIC0yODgs
OSArMjUyLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxS
b3VuZGVkUmVjdCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKLSAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBnZXQ8U2V0
U3RhdGU+KCkuflNldFN0YXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxNCw5ICsyNzUsNiBA
QCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
Q2xlYXJSZWN0Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6
Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPENsZWFyU2hhZG93Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8Q2xpcD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI2LDkg
KzI4NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPENsaXBUb0ltYWdlQnVmZmVyPjo6dmFsdWUpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENvbmNhdGVuYXRlQ1RNPjo6dmFs
dWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj46OnZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMzg3LDMzICszNDIsMTUgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSZXN0b3JlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSb3RhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTYXZlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNjYWxlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxDb2xv
cj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZVN0cm9rZUNvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRJbmxpbmVTdHJva2VDb2xvcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2
YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0
OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
ZXRNaXRlckxpbWl0Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTQzNyw5ICszNzQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQog
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUxpbmU+Ojp2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZhbHVlKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIApAQCAtNTAxLDggKzQzNSw2IEBAIGJvb2wgSXRl
bUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRp
b24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3UGF0dGVybj4oaXRlbU9mZnNl
dCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICByZXR1cm4g
Y29weUludG88RHJhd1BhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsQ29tcG9z
aXRlZFJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0
aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CkBAIC01MTMsOCArNDQ1LDYg
QEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRs
ZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0Pihp
dGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAg
ICAgIHJldHVybiBjb3B5SW50bzxTZXRMaW5lRGFzaD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0U3Rh
dGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgpA
QCAtNTMxLDE2ICs0NjEsMTIgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBp
dGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclJl
Y3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoK
LSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsZWFyU2hhZG93PihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXA+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgICAg
ICByZXR1cm4gY29weUludG88Q2xpcE91dD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgICAgICByZXR1cm4gY29weUludG88Q2xp
cFRvSW1hZ2VCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
b25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENvbmNhdGVuYXRlQ1RNPihp
dGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToK
QEAgLTU3MywyNCArNDk5LDEyIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUg
aXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAjZW5kaWYKICAgICBjYXNl
IEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICByZXR1cm4gY29weUludG88UmVzdG9yZT4oaXRl
bU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFJvdGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNhdmU6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTYXZlPihpdGVtT2Zmc2V0LCAqdGhp
cyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxT
Y2FsZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldENUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PFNldElubGluZUZpbGxDb2xvcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5s
aW5lU3Ryb2tlQ29sb3I+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGluZUNhcD4oaXRlbU9mZnNl
dCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1
cm4gY29weUludG88U2V0TGluZUpvaW4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TWl0ZXJM
aW1pdD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRl
bU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CkBAIC02
MDcsOCArNTIxLDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlw
ZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PFN0cm9rZVJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VMaW5lOgogICAgICAgICByZXR1cm4gY29weUludG88U3Ryb2tlTGluZT4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPFRyYW5zbGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKaW5kZXgg
NTRlYTFjODY4MmMwNzQ0MmUyZTg0MTRiNzMyOGFhMzI0ODAyNWE3NS4uYmEwZDk1MWMyMmNmNDlj
ZTQxN2UzMzU1M2IwMGUwYTViOGFiMjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1UeXBlLmNwcApAQCAtMzgsMTYgKzM4LDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVt
SW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNhdmUpOwogICAg
IGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVybiBzaXplb2YoUmVzdG9yZSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFRy
YW5zbGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFJvdGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoU2NhbGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKENvbmNhdGVuYXRlQ1RNKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRD
VE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0Q1RNKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5lRmlsbENv
bG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTU2LDE2
ICs0Niw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkK
ICAgICAgICAgcmV0dXJuIHNpemVvZihTZXRTdHJva2VUaGlja25lc3MpOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0YXRlKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVD
YXApOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFNldExpbmVEYXNoKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihTZXRMaW5lSm9pbik7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRNaXRlckxpbWl0KTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIHNpemVvZihDbGVhclNoYWRv
dyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIHNpemVvZihDbGlw
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMTEwLDggKzkwLDYgQEAgc3RhdGlj
IHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxSZWN0V2l0aENvbG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudDoKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhHcmFkaWVudCk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxDb21wb3NpdGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5k
ZWRSZWN0OgogICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSb3VuZGVkUmVjdCk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CkBAIC0xODIsMjggKzE2MCwxOCBA
QCBib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseUZpbGxQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoK
ICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNlIEl0ZW1U
eXBlOjpSZXN0b3JlOgotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1U
eXBlOjpTYXZlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6
OlNldENUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgogICAgIGNh
c2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKQEAgLTIyMiw3ICsxOTAsNiBAQCBib29sIGlzRHJhd2lu
Z0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVu
Y3lMYXllcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbExpbmU6CkBAIC0yODgsMTMgKzI1NSwxMSBAQCBib29sIGlz
SW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UGF0aDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
Q29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJvdW5kZWRSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1N5c3RlbUltYWdlOgpAQCAtMzA2LDExICsyNzEsOSBAQCBi
b29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlw
ZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBU
b0ltYWdlQnVmZmVyOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0VsbGlwc2U6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXI6CkBAIC0zMzMsMTUgKzI5Niw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUp
CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgogI2VuZGlmCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VU
aGlja25lc3M6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKQEAgLTM1MSw3ICszMDgsNiBAQCBib29sIGlzSW5saW5lSXRlbShJ
dGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0
ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5kZXggZDY4M2IyYWNmNzg0
NWY5OWMzY2QwOTVlYjkxMWU1NGYxZjhjZTExMS4uMTY2MGI5OGZkYTVlZjI3YjNmNzVkMjJhNTc5
YTNhOWFlM2NjNzBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCkBA
IC0zMSwyMCArMzEsMTAgQEAgbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGVudW0gY2xhc3MgSXRl
bVR5cGUgOiB1aW50OF90IHsKICAgICBTYXZlLAogICAgIFJlc3RvcmUsCi0gICAgVHJhbnNsYXRl
LAotICAgIFJvdGF0ZSwKLSAgICBTY2FsZSwKLSAgICBDb25jYXRlbmF0ZUNUTSwKLSAgICBTZXRD
VE0sCiAgICAgU2V0SW5saW5lRmlsbENvbG9yLAogICAgIFNldElubGluZVN0cm9rZUNvbG9yLAog
ICAgIFNldFN0cm9rZVRoaWNrbmVzcywKICAgICBTZXRTdGF0ZSwKLSAgICBTZXRMaW5lQ2FwLAot
ICAgIFNldExpbmVEYXNoLAotICAgIFNldExpbmVKb2luLAotICAgIFNldE1pdGVyTGltaXQsCi0g
ICAgQ2xlYXJTaGFkb3csCiAgICAgQ2xpcCwKICAgICBDbGlwT3V0LAogICAgIENsaXBUb0ltYWdl
QnVmZmVyLApAQCAtNjcsNyArNTcsNiBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7
CiAgICAgRmlsbFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJlY3RXaXRo
R3JhZGllbnQsCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0LAogICAgIEZpbGxSb3VuZGVkUmVjdCwK
ICAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAyM2QwYmJjYzcxYzI4
MWM1MmMzNWE4YzI1MmRhOTZjMGFiMTJhOThjLi4zNmZhNmExMjdmZjA3OTNjZWYyMzBlZGY3YTY0
MWRkZTAyZmUzNzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC01NCw2NyArNTUsNiBAQCB2
b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBUcmFuc2xhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkp
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgieSIsIGl0ZW0ueSgpKTsKLQotICAgIHJldHVybiB0czsK
LX0KLQotdm9pZCBSb3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LnJvdGF0ZShtX2FuZ2xlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKLXsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImFuZ2xlIiwgaXRlbS5hbmdsZSgpKTsKLQotICAgIHJldHVybiB0czsK
LX0KLQotdm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuc2NhbGUobV9zaXplKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVtKQotewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2l6ZSIsIGl0ZW0uYW1vdW50KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQot
Ci12b2lkIFNldENUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuc2V0Q1RNKG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRlbSkKLXsKLSAgICB0
cy5kdW1wUHJvcGVydHkoInNldC1jdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENv
bmNhdGVuYXRlQ1RNJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50
cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgU2V0SW5saW5lRmlsbENv
bG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoY29sb3IoKSk7CkBAIC0xNDgsNzcgKzg4LDIyIEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdHJva2VUaGlja25l
c3MmIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0YXRlLCBmbGFncykKLXsK
LX0KLQotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
JiBzdGF0ZUNoYW5nZSkKLSAgICA6IG1fc3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2UpCitTZXRTdGF0
ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQorICAgIDogbV9z
dGF0ZShzdGF0ZSkKIHsKIH0KIAogdm9pZCBTZXRTdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQogewotICAgIG1fc3RhdGVDaGFuZ2UuYXBwbHkoY29udGV4dCk7CisgICAgY29u
dGV4dC5tZXJnZVN0YXRlQ2hhbmdlcyhtX3N0YXRlKTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBzdGF0ZSkKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYg
aXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0ZS5zdGF0ZUNoYW5nZSgpOworICAgIHRzIDw8IGl0ZW0u
c3RhdGUoKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLXZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUNhcCht
X2xpbmVDYXApOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNhcCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRM
aW5lRGFzaCYgbGluZURhc2gpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5Iiwg
bGluZURhc2guZGFzaEFycmF5KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQi
LCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRM
aW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNv
bnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCi17
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpvaW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21p
dGVyTGltaXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1pdC5taXRlckxpbWl0KCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLX0KLQogdm9pZCBDbGlw
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5j
bGlwKG1fcmVjdCk7CkBAIC02NTcsMzAgKzU0MiwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0p
CiAgICAgcmV0dXJuIHRzOwogfQogCi12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFJlY3QobV9y
ZWN0LCBtX2NvbG9yLCBtX29wLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0
ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRz
LmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwg
bV9jb2xvciwgbV9ibGVuZE1vZGUpOworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVj
dCwgbV9jb2xvcik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUm91bmRlZFJlY3QmIGl0ZW0pCiB7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yb3VuZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNv
bG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBp
dGVtLmJsZW5kTW9kZSgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTc2OCw4ICs2MzgsOCBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmls
bEVsbGlwc2UmIGl0ZW0pCiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1QYWludEZyYW1lRm9yTWVk
aWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkp
CitQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKKyAgICA6IG1f
aWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikK
IHsKIH0KQEAgLTEwMTEsMTkgKzg4MSwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlwZSkKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6IHRzIDw8ICJyZXN0b3JlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOiB0cyA8PCAidHJhbnNsYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOiB0cyA8PCAicm90YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2Nh
bGU6IHRzIDw8ICJzY2FsZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogdHMg
PDwgInNldC1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTog
dHMgPDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsQ29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLWZpbGwtY29sb3IiOyBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogdHMgPDwgInNldC1pbmxpbmUt
c3Ryb2tlLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tu
ZXNzOiB0cyA8PCAic2V0LXN0cm9rZS10aGlja25lc3MiOyBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdGF0ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0
IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjogdHMgPDwgImNsaXAtdG8taW1hZ2Ut
YnVmZmVyIjsgYnJlYWs7CkBAIC0xMDQ2LDcgKzkwNyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0OiB0cyA8PCAiZmlsbC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciI7IGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB0cyA8PCAiZmlsbC1y
ZWN0LXdpdGgtZ3JhZGllbnQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6IHRzIDw8ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogdHMgPDwgImZpbGwtcm91bmRlZC1yZWN0IjsgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHRzIDw8ICJm
aWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiOyBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKQEAgLTEwNzgsNyArOTM4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjogdHMgPDwgImFwcGx5LWZpbGwtcGF0dGVybiI7IGJyZWFrOwogI2VuZGlm
CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogdHMgPDwgImFwcGx5
LWRldmljZS1zY2FsZS1mYWN0b3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzogdHMgPDwgImNsZWFyLXNoYWRvdyI7IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7
CiB9CkBAIC0xMDg4LDIxICs5NDcsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKICAgICBz
d2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAg
ICAgICB0cyA8PCBpdGVtLmdldDxUcmFuc2xhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Um90YXRlPigpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8U2NhbGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dENUTToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8Q29uY2F0ZW5hdGVDVE0+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmls
bENvbG9yPigpOwogICAgICAgICBicmVhazsKQEAgLTExMTUsMTggKzk1OSw2IEBAIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3RhdGU+KCk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVDYXA+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lRGFz
aD4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0g
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVKb2luPigpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxT
ZXRNaXRlckxpbWl0PigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
OgogICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwPigpOwogICAgICAgICBicmVhazsKQEAgLTEx
OTMsOSArMTAyNSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0
ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoK
ICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpOwotICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PEZpbGxSb3VuZGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjcxLDcgKzExMDAsNiBA
QCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0p
CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RmlsbFBhdHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IDk3Y2I1ZmM4ZDA0YmE4NjYyYjcyYzdkZGVlYmM0NDE1
NWMyODI1YjcuLmU4MWJiMzQ2YzllZmViZTk2YTY1MGQ3NTQ1YTgxZjYxNmI3ZDZhOWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtODUsMTA0ICs4NSw2IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
fTsKIAotY2xhc3MgVHJhbnNsYXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlRyYW5zbGF0ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Ci0gICAgICAgIDogbV94KHgpCi0gICAgICAgICwgbV95KHkpCi0gICAgewotICAgIH0KLQotICAg
IGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV95OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1feCB7IDAgfTsKLSAgICBmbG9h
dCBtX3kgeyAwIH07Ci19OwotCi1jbGFzcyBSb3RhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90YXRlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUp
Ci0gICAgICAgIDogbV9hbmdsZShhbmdsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgYW5n
bGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1f
YW5nbGUgeyAwIH07IC8vIEluIHJhZGlhbnMuCi19OwotCi1jbGFzcyBTY2FsZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTY2Fs
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBGbG9hdFNpemUgbV9zaXplOwotfTsKLQotY2xhc3MgU2V0
Q1RNIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OlNldENUTTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwotCi0gICAgU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAg
ICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCi1jbGFz
cyBDb25jYXRlbmF0ZUNUTSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKLX07Ci0KIGNsYXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I7CkBAIC0yNDcsMTAgKzE0OSw4IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFNl
dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmIHN0YXRlQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIHsgcmV0dXJuIG1fc3RhdGVD
aGFuZ2U7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTZXRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpOworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKQEAg
LTI1OCw0MDQgKzE1OCwyNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKTsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UgbV9zdGF0ZUNoYW5nZTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZSBtX3N0YXRlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgU2V0U3RhdGU6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGF1dG8gY2hhbmdlRmxhZ3Mg
PSBtX3N0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3M7Ci0gICAgZW5jb2RlciA8PCBjaGFuZ2VGbGFn
czsKLQotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZUNoYW5nZS5tX3N0YXRlOwotCi0gICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVu
dENoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0cm9rZUdyYWRpZW50KTsKLSAgICAg
ICAgZW5jb2RlciA8PCAqc3RhdGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNo
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0gICAgICAgIGVu
Y29kZXIgPDwgKnN0YXRlLnN0cm9rZVBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7
Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5maWxsR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8
ICpzdGF0ZS5maWxsR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAg
QVNTRVJUKHN0YXRlLmZpbGxQYXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuZmls
bFBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
c2hhZG93T2Zmc2V0OwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuc2hhZG93UmFkaXVzTW9kZTsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2Up
KQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZUNvbG9yOwotCi0gICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmZpbGxDb2xvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuZmlsbFJ1bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYmxlbmRNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYWxwaGE7Ci0KLSAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlh
bGlhc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkQW50aWFsaWFzOwot
Ci0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkU21v
b3RoRm9udHM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29k
ZXIgPDwgc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7CisgICAgZW5jb2RlciA8PCBtX3N0YXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgogc3RkOjpvcHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewotICAgIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOwotICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7Ci0g
ICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiBzdGF0ZTsKKyAgICBkZWNvZGVyID4+IHN0YXRlOworICAgIGlmICghc3RhdGUpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSBzdGF0ZUNoYW5nZTsKLSAgICBzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzID0gKmNoYW5nZUZs
YWdzOwotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0
cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFz
dHJva2VHcmFkaWVudCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoKnN0cm9rZUdy
YWRpZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsKLSAgICAg
ICAgYXV0byBzdHJva2VQYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAg
ICBpZiAoIXN0cm9rZVBhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUoKnN0
cm9rZVBhdHRlcm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0g
ICAgICAgIGF1dG8gZmlsbEdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAg
ICAgICAgaWYgKCFmaWxsR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZSgq
ZmlsbEdyYWRpZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKSB7Ci0g
ICAgICAgIGF1dG8gZmlsbFBhdHRlcm4gPSBQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAg
ICAgIGlmICghZmlsbFBhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKCpmaWxs
UGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFNpemU+IHNoYWRvd09mZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBz
aGFkb3dPZmZzZXQ7Ci0gICAgICAgIGlmICghc2hhZG93T2Zmc2V0KQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd09m
ZnNldCA9ICpzaGFkb3dPZmZzZXQ7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2hh
ZG93Qmx1cjsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dCbHVyOwotICAgICAgICBpZiAoIXNo
YWRvd0JsdXIpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93Qmx1ciA9ICpzaGFkb3dCbHVyOwotCi0gICAgICAgIHN0
ZDo6b3B0aW9uYWw8Q29sb3I+IHNoYWRvd0NvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRv
d0NvbG9yOwotICAgICAgICBpZiAoIXNoYWRvd0NvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0NvbG9yID0g
KnNoYWRvd0NvbG9yOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4g
c2hhZG93UmFkaXVzTW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dSYWRpdXNNb2RlOwot
ICAgICAgICBpZiAoIXNoYWRvd1JhZGl1c01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9
IFdURk1vdmUoKnNoYWRvd1JhZGl1c01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHN0cm9rZVRoaWNr
bmVzczsKLSAgICAgICAgZGVjb2RlciA+PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGlmICgh
c3Ryb2tlVGhpY2tuZXNzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
ICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9ICpzdHJva2VUaGlja25l
c3M7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpIHsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDxUZXh0RHJhd2luZ01vZGVGbGFncz4gdGV4dERyYXdpbmdNb2RlOwotICAg
ICAgICBkZWNvZGVyID4+IHRleHREcmF3aW5nTW9kZTsKLSAgICAgICAgaWYgKCF0ZXh0RHJhd2lu
Z01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gV1RGTW92ZSgqdGV4dERyYXdpbmdNb2Rl
KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6
b3B0aW9uYWw8Q29sb3I+IHN0cm9rZUNvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHN0cm9rZUNv
bG9yOwotICAgICAgICBpZiAoIXN0cm9rZUNvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZUNvbG9yID0gKnN0
cm9rZUNvbG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGZpbGxDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxs
Q29sb3I7Ci0gICAgICAgIGlmICghZmlsbENvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxDb2xvciA9ICpmaWxs
Q29sb3I7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkgewotICAgICAgICBT
dHJva2VTdHlsZSBzdHJva2VTdHlsZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJv
a2VTdHlsZSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8V2luZFJ1bGU+
IGZpbGxSdWxlOwotICAgICAgICBkZWNvZGVyID4+IGZpbGxSdWxlOwotICAgICAgICBpZiAoIWZp
bGxSdWxlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLmZpbGxSdWxlID0gKmZpbGxSdWxlOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9z
aXRlT3BlcmF0b3I+IGNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBkZWNvZGVyID4+IGNvbXBv
c2l0ZU9wZXJhdG9yOwotICAgICAgICBpZiAoIWNvbXBvc2l0ZU9wZXJhdG9yKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yID0gKmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVu
ZE1vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgICAgICBpZiAoIWJsZW5k
TW9kZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5ibGVuZE1vZGUgPSAqYmxlbmRNb2RlOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFs
PEludGVycG9sYXRpb25RdWFsaXR5PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgICAg
ICBkZWNvZGVyID4+IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGlmICghaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
ID0gKmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hh
bmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBhbHBoYTsKLSAgICAgICAgZGVj
b2RlciA+PiBhbHBoYTsKLSAgICAgICAgaWYgKCFhbHBoYSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5hbHBoYSA9ICphbHBo
YTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkgewotICAgICAgICBz
dGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAgZGVjb2RlciA+PiBz
aG91bGRBbnRpYWxpYXM7Ci0gICAgICAgIGlmICghc2hvdWxkQW50aWFsaWFzKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNo
b3VsZEFudGlhbGlhcyA9ICpzaG91bGRBbnRpYWxpYXM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFNtb290aEZvbnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3Vs
ZFNtb290aEZvbnRzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFNtb290aEZvbnRzOwotICAg
ICAgICBpZiAoIXNob3VsZFNtb290aEZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0g
KnNob3VsZFNtb290aEZvbnRzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsKLSAgICAgICAgaWYgKCFzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1f
c3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gKnNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250czsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2Up
KSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7
Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAgIGlm
ICghc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMgPSAqc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgeyBz
dGF0ZUNoYW5nZSB9IH07Ci19Ci0KLWNsYXNzIFNldExpbmVDYXAgewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUNhcDsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUNh
cChMaW5lQ2FwIGxpbmVDYXApCi0gICAgICAgIDogbV9saW5lQ2FwKGxpbmVDYXApCi0gICAgewot
ICAgIH0KLQotICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsg
fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKLQotcHJpdmF0ZToKLSAgICBMaW5lQ2FwIG1fbGluZUNhcDsKLX07Ci0KLWNsYXNzIFNldExp
bmVEYXNoIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNldExpbmVEYXNoOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IGZhbHNlOwotCi0gICAgU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXks
IGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgICAgIDogbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAg
ICAgICAsIG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9Ci0g
ICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRMaW5l
RGFzaD4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBEYXNoQXJyYXkgbV9kYXNo
QXJyYXk7Ci0gICAgZmxvYXQgbV9kYXNoT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ewotICAgIGVuY29kZXIgPDwgbV9kYXNoQXJyYXk7Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hPZmZz
ZXQ7CisgICAgcmV0dXJuIFNldFN0YXRlKCpzdGF0ZSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1zdGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJh
eTsKLSAgICBkZWNvZGVyID4+IGRhc2hBcnJheTsKLSAgICBpZiAoIWRhc2hBcnJheSkKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGRhc2hP
ZmZzZXQ7Ci0gICAgZGVjb2RlciA+PiBkYXNoT2Zmc2V0OwotICAgIGlmICghZGFzaE9mZnNldCkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqZGFzaEFycmF5
LCAqZGFzaE9mZnNldCB9fTsKLX0KLQotY2xhc3MgU2V0TGluZUpvaW4gewotcHVibGljOgotICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUpv
aW47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExp
bmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotICAgICAgICA6IG1fbGluZUpvaW4obGluZUpvaW4p
Ci0gICAgewotICAgIH0KLQotICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lSm9pbjsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMaW5lSm9pbiBtX2xpbmVKb2luOwotfTsK
LQotY2xhc3MgU2V0TWl0ZXJMaW1pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1p
dGVyTGltaXQpCi0gICAgICAgIDogbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi0gICAgewotICAg
IH0KLQotICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9taXRlckxpbWl0OwotfTsKLQotY2xhc3MgQ2xl
YXJTaGFkb3cgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci19OwotCiAvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2luZyBpdGVtPwogY2xh
c3MgQ2xpcCB7CiBwdWJsaWM6CkBAIC0xNjEyLDkxICsxMTM0LDIwIEBAIHN0ZDo6b3B0aW9uYWw8
RmlsbFJlY3RXaXRoR3JhZGllbnQ+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlCiAgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0KCkgfX07CiB9CiAK
LWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKLQotICAgIEZpbGxDb21wb3NpdGVk
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgICAgIDogbV9yZWN0KHJlY3Qp
Ci0gICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBtX29wKG9wKQotICAgICAgICAs
IG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQot
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBt
X2NvbG9yOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1fYmxl
bmRNb2RlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbENvbXBvc2l0
ZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8
IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX29wOwot
ICAgIGVuY29kZXIgPDwgbV9ibGVuZE1vZGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1zdGQ6Om9wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gRmlsbENvbXBvc2l0ZWRSZWN0Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7Ci0gICAg
ZGVjb2RlciA+PiBjb2xvcjsKLSAgICBpZiAoIWNvbG9yKQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3A7Ci0gICAg
ZGVjb2RlciA+PiBvcDsKLSAgICBpZiAoIW9wKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVy
ID4+IGJsZW5kTW9kZTsKLSAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUg
fX07Ci19Ci0KIGNsYXNzIEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIEZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCisgICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgOiBtX3JlY3QocmVjdCkK
ICAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9k
ZSkKICAgICB7CiAgICAgfQogCiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwpA
QCAtMTcwOSw3ICsxMTYwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRS
ZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9k
ZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xNzE3LDcgKzExNjcsNiBAQCB2
b2lkIEZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAg
ICAgZW5jb2RlciA8PCBtX3JlY3Q7CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAgIGVuY29k
ZXIgPDwgbV9ibGVuZE1vZGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0xNzMz
LDEyICsxMTgyLDcgQEAgc3RkOjpvcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IEZpbGxSb3VuZGVk
UmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVu
ZE1vZGU7Ci0gICAgZGVjb2RlciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xv
ciwgKmJsZW5kTW9kZSB9fTsKKyAgICByZXR1cm4geyB7ICpyZWN0LCAqY29sb3IgfSB9OwogfQog
CiBjbGFzcyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSB7CkBAIC0xOTYxLDcgKzE0MDUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgUGFp
bnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bik7CisgICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRl
bnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CkBAIC0y
MjU2LDEzICsxNzAwLDExIEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAog
ICAgIDwgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcgogICAgICwgQmVnaW5UcmFuc3BhcmVuY3lMYXll
cgogICAgICwgQ2xlYXJSZWN0Ci0gICAgLCBDbGVhclNoYWRvdwogICAgICwgQ2xpcAogICAgICwg
Q2xpcE91dAogICAgICwgQ2xpcE91dFRvUGF0aAogICAgICwgQ2xpcFBhdGgKICAgICAsIENsaXBU
b0ltYWdlQnVmZmVyCi0gICAgLCBDb25jYXRlbmF0ZUNUTQogICAgICwgRHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcgogICAgICwgRHJhd0VsbGlwc2UKICAgICAsIERyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyCkBAIC0yMjc4LDcgKzE3MjAsNiBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZh
cmlhbnQKICAgICAsIERyYXdSZWN0CiAgICAgLCBEcmF3U3lzdGVtSW1hZ2UKICAgICAsIEVuZFRy
YW5zcGFyZW5jeUxheWVyCi0gICAgLCBGaWxsQ29tcG9zaXRlZFJlY3QKICAgICAsIEZpbGxFbGxp
cHNlCiAgICAgLCBGaWxsUGF0aAogICAgICwgRmlsbFJlY3QKQEAgLTIyODgsMjMgKzE3MjksMTUg
QEAgdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgLCBGaWxsUm91bmRl
ZFJlY3QKICAgICAsIEZsdXNoQ29udGV4dAogICAgICwgUmVzdG9yZQotICAgICwgUm90YXRlCiAg
ICAgLCBTYXZlCi0gICAgLCBTY2FsZQotICAgICwgU2V0Q1RNCiAgICAgLCBTZXRJbmxpbmVGaWxs
Q29sb3IKICAgICAsIFNldElubGluZVN0cm9rZUNvbG9yCi0gICAgLCBTZXRMaW5lQ2FwCi0gICAg
LCBTZXRMaW5lRGFzaAotICAgICwgU2V0TGluZUpvaW4KLSAgICAsIFNldE1pdGVyTGltaXQKICAg
ICAsIFNldFN0YXRlCiAgICAgLCBTZXRTdHJva2VUaGlja25lc3MKICAgICAsIFN0cm9rZUVsbGlw
c2UKICAgICAsIFN0cm9rZUxpbmUKICAgICAsIFN0cm9rZVBhdGgKICAgICAsIFN0cm9rZVJlY3QK
LSAgICAsIFRyYW5zbGF0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgLCBG
aWxsTGluZQpAQCAtMjM0MSwyMCArMTc3NCwxMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNh
dmUsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlLAotICAgIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlLAotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2NhbGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRD
VE0sCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvciwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNz
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGUsCi0gICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwLAotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZURhc2gsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbiwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldE1pdGVyTGltaXQsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpDbGVhclNoYWRvdywKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXAs
CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0LAogICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC0yMzc2LDcg
KzE3OTksNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdy
YWRpZW50LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0
ZWRSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRS
ZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUsCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggZWVlNDQ3MWQzNTRlNzUxNTMxMjUxODlkZmNj
OTQxOGEzOTQ1MTRhMS4uYTUzNTA5OTgwYTkzMTQwN2U5MWU1NGY5ZjkyMzI1Y2U1ZTVkMDVkYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNDIsMzUwICs0
MiwxODkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAK
LVJlY29yZGVyOjpSZWNvcmRlcihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlh
bENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1
Y3REcmF3R2x5cGhzKQotICAgIDogbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3Ry
dWN0RHJhd0dseXBocykKLXsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUsIGluaXRp
YWxDVE0sIGluaXRpYWxDVE0ubWFwUmVjdChpbml0aWFsQ2xpcCkgfSk7Ci19CitSZWNvcmRlcjo6
UmVjb3JkZXIoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBo
cyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENs
aXAsIHsgfSwgIGluaXRpYWxDVE0pCisgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywg
ZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogCi1SZWNvcmRlcjo6flJlY29yZGVyKCkKIHsKLSAgICBB
U1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5k
aWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgogfQogCi1zdGF0aWMgYm9vbCBjb250YWlu
c09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
IGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZs
YWdzKQotewotICAgIHN0YXRpYyBjb25zdGV4cHIgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgaW5saW5lU3RhdGVDaGFuZ2VGbGFncyB7Ci0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSwKLSAgICB9OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFu
Z2VGbGFncyAmIGlubGluZVN0YXRlQ2hhbmdlRmxhZ3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFz
U1JHQkFCeXRlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7CitSZWNvcmRlcjo6flJlY29yZGVy
KCkgPSBkZWZhdWx0OwogCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9y
LnRyeUdldEFzU1JHQkFCeXRlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKK3ZvaWQgUmVjb3JkZXI6OnNhdmUoKQog
ewotICAgIGlmICghY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNoYW5nZXMsIGNoYW5n
ZUZsYWdzKSkgewotICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gY2hhbmdlcy5tX3N0YXRlLnN0
cm9rZVBhdHRlcm4pCi0gICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxl
SW1hZ2UoKSk7Ci0gICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuZmls
bFBhdHRlcm4pCi0gICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1h
Z2UoKSk7Ci0gICAgICAgIHJlY29yZFNldFN0YXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxh
Z3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIHJl
Y29yZFNldElubGluZVN0cm9rZUNvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5
R2V0QXNTUkdCQUJ5dGVzKCkpOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICByZWNvcmRT
ZXRTdHJva2VUaGlja25lc3MoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAg
ICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xv
ckNoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldElubGluZUZpbGxDb2xvcigqY2hhbmdlcy5tX3N0
YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpzYXZlKCk7CisgICAgcmVjb3JkU2F2ZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjphcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpCit2b2lkIFJlY29yZGVyOjpyZXN0b3JlKCkKIHsK
LSAgICAvLyBGSVhNRTogVGhpcyBpcyBjdXJyZW50bHkgaW52b2tlZCBpbiBhbiBhZC1ob2MgbWFu
bmVyIHdoZW4gcmVjb3JkaW5nIGRyYXdpbmcgaXRlbXMuIFdlIHNob3VsZCBjb25zaWRlciBlaXRo
ZXIKLSAgICAvLyBzcGxpdHRpbmcgR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5nZXMgaW50byBp
bmRpdmlkdWFsIGRpc3BsYXkgbGlzdCBpdGVtcywgb3IgcmVmYWN0b3JpbmcgdGhlIGNvZGUgc3Vj
aCB0aGF0Ci0gICAgLy8gdGhpcyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBpbnZva2VkIHdoZW4g
cmVjb3JkaW5nIGEgZHJhd2luZyBpdGVtLgotICAgIGF1dG8mIHN0YXRlQ2hhbmdlcyA9IGN1cnJl
bnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOwotICAgIGF1dG8gY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBz
dGF0ZUNoYW5nZXMuY2hhbmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0
YXRlKTsKLSAgICBpZiAoIWNoYW5nZXNGcm9tTGFzdFN0YXRlKQorICAgIGlmICghc3RhY2tTaXpl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMs
IHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkp
OwotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShzdGF0ZUNoYW5nZXMsIGNoYW5nZXNGcm9tTGFz
dFN0YXRlKTsKLSAgICBzdGF0ZUNoYW5nZXMubV9jaGFuZ2VGbGFncyA9IHsgfTsKLSAgICBjdXJy
ZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlID0gc3RhdGVDaGFuZ2VzLm1fc3RhdGU7Ci19Ci0K
LWNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBSZWNvcmRlcjo6c3RhdGUoKSBjb25zdAotewot
ICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5tX3N0YXRlOwotfQotCi12b2lk
IFJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAg
IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKLX0K
LQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgcmVj
b3JkU2V0TGluZUNhcChsaW5lQ2FwKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgcmVj
b3JkU2V0TGluZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgcmVjb3JkU2V0TGluZUpv
aW4obGluZUpvaW4pOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1p
dGVyTGltaXQpCi17Ci0gICAgcmVjb3JkU2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICBH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKKyAgICByZWNvcmRSZXN0b3JlKCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBG
aWx0ZXJSZXN1bHRzJiByZXN1bHRzKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMo
KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBmb3Ig
KGF1dG8mIGVmZmVjdCA6IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVJbWFnZSkpIHsKLSAgICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVm
ZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3Vy
Y2VJbWFnZSgpKSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFzb3Vy
Y2VJbWFnZSkgewotICAgICAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihudWxscHRy
LCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoKnNv
dXJjZUltYWdlKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQogCi12b2lkIFJlY29y
ZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQotewotICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9u
dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2Rl
KTsKLX0KKyAgICBpZiAoc3RhdGUoKS5oYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpKSB7CisgICAg
ICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpGaWxsQnJ1c2gpKQorICAgICAgICAgICAgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9y
KCpmaWxsQ29sb3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CiAKLXZvaWQgUmVjb3JkZXI6OmRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7Ci0gICAg
cmVjb3JkRHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNo
b3IsIHNtb290aGluZ01vZGUpOwotfQorICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKQorICAgICAg
ICAgICAgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoKnN0cm9rZUNvbG9yKCkudHJ5R2V0QXNT
UkdCQUJ5dGVzKCkpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIGlmIChzdGF0ZSgp
LmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VU
aGlja25lc3MpKQorICAgICAgICAgICAgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRo
aWNrbmVzcygpKTsKIAotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZWNvcmREcmF3SW1hZ2VCdWZmZXIo
aW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNv
cmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShp
bWFnZSk7Ci0gICAgcmVjb3JkRHJhd05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0K
LQotdm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgcmVjb3JkRHJhd1N5
c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29y
ZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVz
ZShpbWFnZSk7Ci0gICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VC
dWZmZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VCdWZm
ZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCkpIHsKKyAgICAg
ICAgaWYgKGF1dG8gcGF0dGVybiA9IGZpbGxQYXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRS
ZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7CiAgICAgfQogCi0gICAgcmVjb3JkRHJh
d1BhdHRlcm4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RS
ZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwotfQotCi12b2lkIFJlY29yZGVyOjpzYXZlKCkKLXsKLSAgICByZWNvcmRTYXZlKCk7Ci0gICAg
bV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsK
LX0KLQotdm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKCFtX3N0YXRlU3RhY2su
c2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkgeworICAgICAg
ICBpZiAoYXV0byBwYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpKQorICAgICAgICAgICAgcmVjb3Jk
UmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOworICAgIH0KIAotICAgIG1fc3RhdGVT
dGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgcmVjb3JkUmVzdG9yZSgpOworICAgIHJlY29yZFNldFN0
YXRlKHN0YXRlKCkpOworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIGN1cnJlbnRTdGF0ZSgp
LnRyYW5zbGF0ZSh4LCB5KTsKLSAgICByZWNvcmRUcmFuc2xhdGUoeCwgeSk7Ci19Ci0KLXZvaWQg
UmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyNpZiBVU0UoQ0cpCit2b2lk
IFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnJv
dGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgcmVjb3JkUm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigp
OwogfQogCi12b2lkIFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lk
IFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5zY2Fs
ZShzaXplKTsKLSAgICByZWNvcmRTY2FsZShzaXplKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKIH0KKyNlbmRpZgogCi12b2lkIFJlY29y
ZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIFJl
Y29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQog
ewotICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm47CisgICAg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKIAotICAgIGN1cnJlbnRTdGF0ZSgpLmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29y
ZENvbmNhdGVuYXRlQ1RNKHRyYW5zZm9ybSk7CisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0
aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVu
dHMuCisgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAgICBy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9p
ZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAg
IGN1cnJlbnRTdGF0ZSgpLnNldENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29yZFNldENUTSh0cmFu
c2Zvcm0pOwotfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKLUFmZmluZVRyYW5zZm9ybSBS
ZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07Ci19CisgICAgR3JhcGhpY3NDb250
ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIEdyYXBoaWNzQ29udGV4
dDo6c2F2ZSgpOwogCi12b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAg
ICBzZXRBbHBoYShvcGFjaXR5KTsKICAgICByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpOwotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9u
ZUZvclRyYW5zcGFyZW5jeUxheWVyKCkpOwogfQogCiB2b2lkIFJlY29yZGVyOjplbmRUcmFuc3Bh
cmVuY3lMYXllcigpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsK
LSAgICByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIG1fc3RhdGVTdGFjay5yZW1v
dmVMYXN0KCk7Ci19CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotdm9pZCBSZWNvcmRlcjo6
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3
UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdM
aW5lKHBvaW50MSwgcG9pbnQyKTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKLXZvaWQgUmVj
b3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChGbG9hdFBvaW50KCksIHRvRmxv
YXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7
CisgICAgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAg
ICByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAgICBy
ZWNvcmRDbGlwKHJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZERyYXdFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7Cisg
ICAgcmVjb3JkQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLSAgICByZWNvcmREcmF3UGF0aChwYXRoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJlY29yZENsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0Zv
Y3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNv
cmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6
OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZz
ZXQsIGNvbG9yKTsKLX0KKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkg
eworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0jaWYgUExBVEZP
Uk0oTUFDKQotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91Ymxl
LCBib29sJiwgY29uc3QgQ29sb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ciwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKK3Zv
aWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsZWFy
UmVjdChyZWN0KTsKIH0KLSNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0KHJlY3QpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3Io
cmVjdCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmls
bFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVyOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29yZGVyOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkRmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xv
cik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2
b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAg
cmVjb3JkRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwg
cm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShy
ZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJlY29yZEZpbGxFbGxpcHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHBhdGgu
aGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQwMiwyMSArMjQxLDIxIEBAIHZvaWQgUmVj
b3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkRmlsbFBhdGgocGF0
aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKTsKLSAgICByZWNvcmRGaWxsRWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZFN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkU3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkU3Ryb2tlRWxsaXBzZShyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ry
b2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYg
KHBhdGguaGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQzMywxNDggKzI3MiwxNjggQEAg
dm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHJlY29yZFN0
cm9rZVBhdGgocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3QpOworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tu
ZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQ2xlYXJSZWN0KHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwogfQogCi0jaWYgVVNF
KENHKQotdm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0VsbGlwc2UocmVjdCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOwotICAgIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIHJlY29yZERyYXdQYXRoKHBhdGgpOwogfQotI2VuZGlmCiAKLXZvaWQg
UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRl
cnNlY3QoY3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocmVjdCkpOwotICAgIHJlY29yZENsaXAo
cmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rm9jdXNSaW5n
UGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNs
aXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICByZWNvcmRDbGlwT3V0KHJlY3QpOworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3Rz
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29u
c3QgUGF0aCYgcGF0aCkKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAg
cmVjb3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12
b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVs
ZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xp
cEJvdW5kcy5pbnRlcnNlY3QoY3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocGF0aC5mYXN0Qm91
bmRpbmdSZWN0KCkpKTsKLSAgICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KKyNlbmRpZgogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91
bmRzKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYg
KGF1dG8gaW52ZXJzZSA9IGN1cnJlbnRTdGF0ZSgpLmN0bS5pbnZlcnNlKCkpCi0gICAgICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KGludmVyc2UtPm1hcFJlY3QoY3VycmVudFN0YXRlKCkuY2xp
cEJvdW5kcykpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAv
LyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlY3Qu
Ci0gICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9ybSBi
ZWhhdmlvci4KLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUoKS5jbGlw
Qm91bmRzKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdJbWFnZUJ1
ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lk
IFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKIHsKLSAg
ICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcik7Ci0gICAgcmVjb3JkQ2xpcFRvSW1hZ2VC
dWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0KTsKLX0KKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6
IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkpIHsKKyAg
ICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQoKSk7Cisg
ICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3VyY2VJbWFnZSgpKSkgewor
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3Vy
Y2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFJlY29yZGVy
OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVy
aW5nTWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QudmFsdWVfb3IoUmVuZGVyaW5nTWV0
aG9kOjpEaXNwbGF5TGlzdCkpOwotfQorICAgIGlmICghc291cmNlSW1hZ2UpIHsKKyAgICAgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIobnVsbHB0ciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1l
ZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17
Ci0gICAgaWYgKCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGlmICghcmVj
b3JkUmVzb3VyY2VVc2UoKnNvdXJjZUltYWdlKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZp
bHRlciwgcmVzdWx0cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQVNTRVJUKHBsYXll
ci5pZGVudGlmaWVyKCkpOwotICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRl
c3RpbmF0aW9uKTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsK
IH0KLSNlbmRpZgogCi12b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yKQordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgLy8gV2UgbW9kaWZ5IHRoZSBzdGF0ZSBkaXJlY3Rs
eSBoZXJlIGluc3RlYWQgb2YgY2FsbGluZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKCkKLSAgICAv
LyBiZWNhdXNlIHRoZSByZWNvcmRlZCBpdGVtIHdpbGwgc2NhbGUoKSB3aGVuIHJlcGxheWVkLgot
ICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHsgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxl
RmFjdG9yIH0pOworICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIHJlY29yZERyYXdOYXRpdmVJbWFnZShpbWFnZS5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
Cit9CiAKLSAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxs
IGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KLSAgICAvLyBBc3NlcnQgdGhh
dCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPwotICAgIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwordm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdl
KFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpCit7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3U3lzdGVtSW1h
Z2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBSZWNvcmRl
cjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29u
dGV4dDo6Um91bmRpbmdNb2RlKQordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250
ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlz
cGxheUxpc3Q6OlJlY29yZGVyLiIpOwotICAgIHJldHVybiByZWN0OworICAgIHJlY29yZFJlc291
cmNlVXNlKGltYWdlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQ
YXR0ZXJuKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAot
Y29uc3QgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpIGNv
bnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJl
dHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1h
Z2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VC
dWZmZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLVJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJl
Y29yZGVyOjpjdXJyZW50U3RhdGUoKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVjb3JkZXI6
OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKQogewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKLSAgICBy
ZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkp
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBk
ZXN0aW5hdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigp
LCBkZXN0aW5hdGlvbik7CiB9CisjZW5kaWYKIAotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZWNv
cmRlcjo6Y3RtKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgcmV0dXJu
IGN1cnJlbnRTdGF0ZSgpLmN0bTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fZHJh
d0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29u
dGV4dFN0YXRlOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCiB7Ci0gICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICByZWNvcmRS
ZXNvdXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZWNvcmREcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50
LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRl
eHRTdGF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBSZWNvcmRlcjo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
U3Ryb2tlU3R5bGUpCiB7Ci0gICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzID0gcmFkMmRlZyhzdGF0
aWNfY2FzdDxkb3VibGU+KGFuZ2xlSW5SYWRpYW5zKSk7Ci0gICAgY3RtLnJvdGF0ZShhbmdsZUlu
RGVncmVlcyk7Ci0gICAgCi0gICAgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uOwotICAgIHJvdGF0
aW9uLnJvdGF0ZShhbmdsZUluRGVncmVlcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICByZWNvcmREcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRp
bmcsIGRvdWJsZUxpbmVzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzY2Fs
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCiB7Ci0gICAgY3RtLnNjYWxlKHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbWF0cml4KQorUmVmUHRyPEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
b2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVy
aW5nTWV0aG9kKSBjb25zdAogewotICAgIGN0bSA9IG1hdHJpeDsKKyAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdN
ZXRob2Q6OkRpc3BsYXlMaXN0KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorRmxvYXRSZWN0IFJlY29y
ZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3ND
b250ZXh0OjpSb3VuZGluZ01vZGUpCiB7Ci0gICAgY3RtICo9IG1hdHJpeDsKKyAgICBXVEZMb2dB
bHdheXMoIkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5vdCB5ZXQg
Y29tcGF0aWJsZSB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKKyAgICByZXR1cm4gcmVj
dDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCmluZGV4IDg0NWVjMDA3NzJlZDJjNTRhMWU2Y2IyNmIyMTUxZGFiYWE2
ZWMwNzUuLmFlMzQzNzliZTY3ZjA1ZTEwNDJmNmFkYzVhYWJmODhjMjcwYzE3MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1
ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKICNpbmNsdWRlICJEcmF3R2x5cGhzUmVjb3JkZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3Ig
SW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIklubGluZVBhdGhEYXRhLmgiCiAjaW5jbHVkZSAi
VGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MSw3ICs1MCw3
IEBAIGNsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwog
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5
cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWNvcmRlcihjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3
R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOwpAQCAtNjEsNDcgKzYwLDM1IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2F2ZSgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkUmVzdG9yZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkUm90YXRlKGZsb2F0IGFuZ2xlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ29uY2F0
ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworCiAgICAgdmlydHVhbCB2b2lk
IHJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRT
ZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gMDsKKworI2lmIFVTRShDRykK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworI2VuZGlmCisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKKwogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb25SZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBP
dXRUb1BhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIEZpbHRlciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3U3lz
dGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxv
YXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1Jl
Y3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAw
OworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0
V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbExpbmUo
Y29uc3QgTGluZURhdGEmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxBcmMoY29u
c3QgQXJjRGF0YSYpID0gMDsKQEAgLTEwOSwxMSArOTYsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikg
PSAwOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24p
ID0gMDsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tl
TGluZShjb25zdCBMaW5lRGF0YSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tl
QXJjKGNvbnN0IEFyY0RhdGEmKSA9IDA7CkBAIC0xMjEsMTE2ICsxMDcsODEgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJD
dXJ2ZURhdGEmKSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZEFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBw
bHlGaWxsUGF0dGVybigpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXRo
KGNvbnN0IFBhdGgmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmlu
Z1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyNpZiBFTkFC
TEUoVklERU8pCisgICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0gMDsKICNl
bmRpZgotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlJikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291
cmNlVXNlKE5hdGl2ZUltYWdlJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJj
ZVVzZShJbWFnZUJ1ZmZlciYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VV
c2UoY29uc3QgU291cmNlSW1hZ2UmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291
cmNlVXNlKEZvbnQmKSA9IDA7CiAKLSAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKLSAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIGN0bTsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHM7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZSBsYXN0RHJhd2luZ1N0YXRlOwotCi0gICAgICAgIENvbnRleHRTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsaXApCi0gICAgICAgICAgICA6IGN0bSh0
cmFuc2Zvcm0pCi0gICAgICAgICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKLSAgICAgICAgICAgICwg
bGFzdERyYXdpbmdTdGF0ZShzdGF0ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
Q29udGV4dFN0YXRlIGNsb25lRm9yU2F2ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IENvbnRleHRTdGF0ZSBzdGF0ZShsYXN0RHJhd2luZ1N0YXRlLCBjdG0sIGNsaXBCb3VuZHMpOwot
ICAgICAgICAgICAgc3RhdGUuc3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKLSAgICAgICAgICAg
IHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZv
clRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBz
dGF0ZSA9IGNsb25lRm9yU2F2ZSgpOwotICAgICAgICAgICAgc3RhdGUubGFzdERyYXdpbmdTdGF0
ZS5hbHBoYSA9IDE7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9pZCByb3Rh
dGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOwotICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpOwotICAgICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsK
LSAgICAgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgfTsKLQot
ICAgIGNvbnN0IFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+JiBzdGF0ZVN0YWNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZVN0YWNrOyB9Ci0KLSAgICBjb25zdCBDb250ZXh0U3RhdGUmIGN1cnJlbnRT
dGF0ZSgpIGNvbnN0OwotICAgIENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCk7Ci0KICAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNZXRob2Q+KSBjb25zdCBvdmVycmlkZTsKKyAgICAKKworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7CiAKIHByaXZhdGU6CiAgICAg
Ym9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBudWxscHRyOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQot
ICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlz
Q0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQg
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxl
ID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNs
aXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1p
dGVyTGltaXQoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNp
ZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsK
LSNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwg
Rm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ds
eXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50
JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3lzdGVtSW1h
Z2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxl
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7CiAKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwpAQCAtMjQxLDQwICsxOTIsMjMgQEAgcHJpdmF0
ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENv
bG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIGdldENUTShH
cmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmlj
ZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOwogI2lmIEVOQUJMRShWSURFTykKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0Jiwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250
ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOwotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLQot
ICAgIFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+IG1fc3RhdGVTdGFjazsKICAgICBEcmF3R2x5cGhz
UmVjb3JkZXIgbV9kcmF3R2x5cGhzUmVjb3JkZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAppbmRleCAxZmRjNmJhNTZiZmRiMjYzNmVmYjM0
NjJhZGEyYTk5MGQzMzg5OTQ1Li4xZmI0ZGQ3OTVhZTEwYWE4Y2NjYmNkZDgzMTRlZWE4MDg2ZThk
YjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAK
QEAgLTQyLDE4ICs0MiwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKIAotUmVjb3JkZXJJbXBsOjpSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0ds
eXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhz
KQotICAgIDogUmVjb3JkZXIoc3RhdGUsIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0
cnVjdERyYXdHbHlwaHMpCitSZWNvcmRlckltcGw6OlJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdH
bHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDogUmVjb3JkZXIoaW5pdGlhbENsaXAs
IGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGlzcGxheUxpc3Qo
ZGlzcGxheUxpc3QpCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFt
IDw8ICJcblJlY29yZGluZyB3aXRoIGNsaXAgIiA8PCBpbml0aWFsQ2xpcCk7CiB9CiAKLVJlY29y
ZGVySW1wbDo6flJlY29yZGVySW1wbCgpCi17Ci0gICAgQVNTRVJUKHN0YXRlU3RhY2soKS5zaXpl
KCkgPT0gMSk7IC8vIElmIHRoaXMgZmlyZXMsIGl0IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUv
cmVzdG9yZS4KLX0KLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNhdmUoKQogewogICAgIGFw
cGVuZDxTYXZlPigpOwpAQCAtNjQsMzEgKzU5LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZFJlc3RvcmUoKQogICAgIGFwcGVuZDxSZXN0b3JlPigpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgYXBwZW5kPFRyYW5z
bGF0ZT4oeCwgeSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRSb3RhdGUoZmxvYXQg
YW5nbGUpCi17Ci0gICAgYXBwZW5kPFJvdGF0ZT4oYW5nbGUpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBhcHBlbmQ8
U2NhbGU+KHNjYWxlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBhcHBlbmQ8U2V0Q1RNPih0cmFu
c2Zvcm0pOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgYXBwZW5kPENvbmNhdGVuYXRl
Q1RNPih0cmFuc2Zvcm0pOwotfQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0SW5saW5l
RmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGlubGluZUNvbG9yKQogewogICAgIGFwcGVuZDxTZXRJ
bmxpbmVGaWxsQ29sb3I+KGlubGluZUNvbG9yKTsKQEAgLTEwNCw5MiArNzQsMjYgQEAgdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAg
ICAgYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4odGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17
Ci0gICAgYXBwZW5kPFNldFN0YXRlPihzdGF0ZSwgY2hhbmdlRmxhZ3MpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgYXBw
ZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBhcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLXsK
LSAgICBhcHBlbmQ8U2V0TGluZURhc2g+KGFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0gICAgYXBw
ZW5kPFNldExpbmVKb2luPihqb2luKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNl
dE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgYXBwZW5kPFNldE1pdGVyTGltaXQ+KGxp
bWl0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyU2hhZG93KCkKLXsKLSAg
ICBhcHBlbmQ8Q2xlYXJTaGFkb3c+KCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRD
bGlwKGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXA+KGNsaXBS
ZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiBjbGlwUmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgYXBwZW5kPENsaXBPdXQ+KGNsaXBS
ZWN0KTsKKyAgICBhcHBlbmQ8U2V0U3RhdGU+KHN0YXRlKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXBUb0ltYWdl
QnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGlu
YXRpb25SZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0aCk7Ci19
Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBX
aW5kUnVsZSBydWxlKQotewotICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0
ZXImIGZpbHRlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcj4gaWRlbnRpZmllcjsKLSAgICBpZiAoc291cmNlSW1hZ2UpCi0gICAgICAgIGlkZW50aWZp
ZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7Ci0gICAgYXBw
ZW5kPERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJ
bWFnZVJlY3QsIGZpbHRlcik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewotICAgIGFw
cGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNo
b3IsIG1vZGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3TmF0
aXZlSW1hZ2U+KGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CisgICAgYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKIH0KIAotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3U3lzdGVtSW1hZ2U+
KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0
ZXJuPigpOwogfQorI2VuZGlmIC8vIFVTRShDRykKIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlRmFjdG9yKQogewotICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2VJZGVudGlm
aWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihzY2FsZUZhY3Rvcik7CiB9
CiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCkBAIC0yMDIsNDQgKzEwNiwzNCBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4o
KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwg
bGluZVdpZHRoKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFw
cGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBh
cHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOworICAgIGFwcGVuZDxDbGlwPihj
bGlwUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUmIHN0eWxlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCiB7Ci0gICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKKyAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBhdGgsIHJ1bGUp
OwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOworICAgIGFw
cGVuZDxDbGlwT3V0PihjbGlwUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBP
dXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgp
OworICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0
aD4ocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1
ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0
aW9uUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVj
dHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1Jl
Y3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGVhclJlY3Q+
KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQpAQCAtMjU3LDIzICsxNTEsMjIgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGcKICAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KHJlY3QsIGdyYWRpZW50KTsKIH0K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJs
ZW5kTW9kZSBtb2RlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
YXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBtb2RlKTsKKyAgICBh
cHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29sb3IsIG1vZGUpOworICAgIGFwcGVu
ZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKTsKIH0K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPihyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpOworICAgIGFwcGVuZDxGaWxsRWxsaXBzZT4o
cmVjdCk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVu
ZDxGaWxsTGluZT4obGluZSk7CkBAIC0yOTMsNyArMTg2LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewog
ICAgIGFwcGVuZDxGaWxsQmV6aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKQEAgLTMwMSwyNSArMTkzLDE3IEBAIHZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxGaWxsUGF0aD4o
cGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKLX0KLQot
I2lmIEVOQUJMRShWSURFTykKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
K3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVk
aWE+KHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBi
b3JkZXJUaGlja25lc3MpOwogfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3
aWR0aCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgd2lkdGgpOworICAg
IGFwcGVuZDxTdHJva2VFbGxpcHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5l
RGF0YSYgbGluZSkKIHsKICAgICBhcHBlbmQ8U3Ryb2tlTGluZT4obGluZSk7CkBAIC0zMzksNyAr
MjIzLDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0
IEJlemllckN1cnZlRGF0YSYgY3VydmUpCiB7CiAgICAgYXBwZW5kPFN0cm9rZUJlemllckN1cnZl
PihjdXJ2ZSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM0
NywzMyArMjMwLDg0IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgYXBwZW5kPFN0cm9rZVBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3Qp
OworICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kPENsZWFyUmVjdD4ocmVj
dCk7CisgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0Uo
Q0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7Cit9CiAKLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kPEFwcGx5U3Ry
b2tlUGF0dGVybj4oKTsKKyAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOwogfQogCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxBcHBseUZpbGxQ
YXR0ZXJuPigpOworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9m
ZnNldCwgY29sb3IpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBh
cHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwor
fQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
YXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKKyAgICBhcHBlbmQ8
RHJhd05hdGl2ZUltYWdlPihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCit7CisgICAgYXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRl
c3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQoreworICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9
CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBG
aWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50
aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAg
YXBwZW5kPERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3Vy
Y2VJbWFnZVJlY3QsIGZpbHRlcik7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0
aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBF
TkFCTEUoVklERU8pCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQoreworICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KGlkZW50aWZpZXIsIGRl
c3RpbmF0aW9uKTsKK30KKyNlbmRpZgorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBh
cHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5j
aG9yLCBtb2RlKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgYXBw
ZW5kPERyYXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKK30KKwordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgYXBw
ZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKIH0KIAogYm9vbCBS
ZWNvcmRlckltcGw6OnJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSkK
QEAgLTQxNywyMCArMzUxLDE2IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdF
eHRlbnQoZmxvYXQgYmx1clJhZGl1cykKIAogRmxvYXRSZWN0IFJlY29yZGVySW1wbDo6ZXh0ZW50
RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBGbG9h
dFJlY3QgYm91bmRzID0gcmVjdDsKLSAgICBhdXRvJiBzdGF0ZSA9IGN1cnJlbnRTdGF0ZSgpOwor
ICAgIGF1dG8gYm91bmRzID0gcmVjdDsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0g
ICAgZmxvYXQgc2hhZG93UmFkaXVzOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGlmIChn
ZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgewotICAg
ICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50ID0gYm91bmRzOwotICAgICAgICBzaGFkb3dFeHRl
bnQubW92ZShzaGFkb3dPZmZzZXQpOwotICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFk
b3dQYWludGluZ0V4dGVudChzaGFkb3dSYWRpdXMpKTsKKyAgICBpZiAoaGFzU2hhZG93KCkpIHsK
KyAgICAgICAgYXV0byBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CisgICAgICAgIHNoYWRvd0V4dGVu
dC5tb3ZlKGRyb3BTaGFkb3coKS5vZmZzZXQpOworICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0
ZShzaGFkb3dQYWludGluZ0V4dGVudChkcm9wU2hhZG93KCkuYmx1clJhZGl1cykpOwogICAgICAg
ICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKICAgICB9CiAKLSAgICByZXR1cm4gaW50ZXJz
ZWN0aW9uKHN0YXRlLmNsaXBCb3VuZHMsIHN0YXRlLmN0bS5tYXBSZWN0KGJvdW5kcykpOworICAg
IHJldHVybiBpbnRlcnNlY3Rpb24oY2xpcEJvdW5kcygpLCBnZXRDVE0oKS5tYXBSZWN0KGJvdW5k
cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAppbmRleCA2NDIyNjVmMDk4MDIyY2YyYjA1ZjE4MGMx
NzRmYTAzNDYyZjJkZDQwLi42ZGU2YWVkZmZjYjE3ZGIyZDA4MWI0MmMxZGU2YmMzMjlhMzhiZjQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaApAQCAtMzUs
OSArMzUsOCBAQCBjbGFzcyBSZWNvcmRlckltcGwgOiBwdWJsaWMgUmVjb3JkZXIgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVy
SW1wbCk7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlM
aXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5
cGhzOjpZZXMpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVySW1wbCgpOwot
CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0g
eyB9LCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlw
aHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIAogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKICAg
ICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBmaW5hbCB7IH0KQEAgLTQ3LDQ3ICs0Niwz
NSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkU2F2ZSgpIGZpbmFsOwogICAg
IHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZs
b2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xl
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7
CisKICAgICB2b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgZmlu
YWw7CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90Pikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRTZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRTZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxp
bWl0KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7Cisg
ICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGZpbmFs
OworCisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmlu
YWw7CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKwor
ICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAg
dm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9pZCByZWNv
cmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKICAg
ICB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJu
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3Qg
RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0
IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2
b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0
V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVu
ZE1vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
IHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZEZpbGxBcmMoY29uc3QgQXJjRGF0YSYpIGZpbmFsOwpAQCAtOTUsMTEgKzgyLDEwIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVE
YXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotI2Vu
ZGlmCi0gICAgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBm
aW5hbDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZv
aWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEmKSBmaW5hbDsKQEAgLTEwNywxMyArOTMs
MjggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJl
emllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRTdHJva2VQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0
ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisK
KyAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZERyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHJlY29yZERyYXdG
b2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgZmlu
YWw7CisgICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lk
IHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQ
YWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRT
bW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwogCiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShO
YXRpdmVJbWFnZSYpIGZpbmFsOwogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1hZ2VCdWZm
ZXImKSBmaW5hbDsKQEAgLTEzOSw2ICsxNDAsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
fQogCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsK
KwogICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0Jikg
Y29uc3Q7CiAKICAgICBEaXNwbGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAppbmRleCA4ZmYxOWQwMDM1NGNkYmVkZTNhNWJhMWFm
NzU4Y2ZmMDIzYTI1YTIyLi42NmZjOWQ4ODJhNGQzZjdkZThlODkxMmExZjMwYWYxOThkMDM1Mjgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC05NywxMCAr
OTcsMTAgQEAgaW5saW5lIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcj4gYXBwbHlTZXRTdGF0ZUl0ZW0oR3JhcGgKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKICAgICB9OwogCi0gICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVy
blRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLnN0cm9rZVBhdHRl
cm4uZ2V0KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxl
SW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVybigpKSkKICAgICAg
ICAgcmV0dXJuICppbWFnZUlkZW50aWZpZXI7CiAKLSAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZp
ZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3Rh
dGUuZmlsbFBhdHRlcm4uZ2V0KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZp
eFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVy
bigpKSkKICAgICAgICAgcmV0dXJuICppbWFnZUlkZW50aWZpZXI7CiAKICAgICBzZXRTdGF0ZUl0
ZW0uYXBwbHkoY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJm
QnV6ei5jcHAKaW5kZXggZDA5YzEzNzNlYTlhYWFmNGExODUxMzZlZTg4NTNkNzg4ZmM0MTc4ZC4u
ZmNhZGVmMjM4ZTA5ZmUwMjgyYWNlZWM5YTFmMjVmODczMzlkOWM3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVy
SGFyZkJ1enouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtMjksMTcgKzI5LDE4IEBACiAj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNz
Q29udGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250
ZXh0KQotICAgIDogbV9vd25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBo
c1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVj
dERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25D
b250ZXh0KGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNt
b290aGluZ01vZGUpCiB7Ci0gICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7
CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8v
Tmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCmluZGV4IDkxMTQ2ZGZjNmZkODRkZjhl
Mjk1NGYwMzc3ZDAwNjZhNzcyMzNjYzkuLjUxNTQ3YWU2ZGZhMTA0YjVkZDY1NGE5MzBiOTcyNDFk
OTc3OGQwOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxNjAgKzc4LDM4OSBA
QCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9v
ZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2YQogfQogCiBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyKFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCi0g
ICAgOiBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KEZs
b2F0UmVjdDo6aW5maW5pdGVSZWN0KCkpCisgICAgLCBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0
KQogewotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7IH0sIHsgfSwgRmxvYXRSZWN0OjppbmZp
bml0ZVJlY3QoKSB9KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkaWRVcGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpzYXZlKCkKK3sKKyAgICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPD4geworICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBkZWZhdWx0Owor
CisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLnNhdmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTYXZl
PD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2F2ZT4oKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6cmVzdG9yZSgpCit7CisgICAgc3RydWN0IFJlc3RvcmUgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmlydHVhbCB+UmVz
dG9yZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5yZXN0b3JlKCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiUmVzdG9yZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAg
IGlmICghc3RhY2tTaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJlc3RvcmU+KCkpOworfQor
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
KSB7CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkNUTSkpIHsKKyAgICAgICAgc3RydWN0IFNldENUTSBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4geworICAgICAgICAg
ICAgdmlydHVhbCB+U2V0Q1RNKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1
dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6Q1RNPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8U2V0Q1RNPihnZXRDVE0oKSkpOworICAgIH0KKworICAgIGlmIChzdGF0
ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VUaGlja25lc3MpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VUaGlja25lc3NDaGFuZ2UgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewogICAgICAgICAg
ICAgdmlydHVhbCB+U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAg
ICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVy
cmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ry
b2tlVGhpY2tuZXNzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAg
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoY29udGV4dEZvclJl
cGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VUaGlja25lc3NDaGFuZ2U8Plxu
IjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczw+XG4iOwogICAgICAgICAgICAgfQogICAgICAgICB9
OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVRoaWNrbmVzc0NoYW5nZT4o
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0
cm9rZVRoaWNrbmVzc0NoYW5nZT4oc3Ryb2tlVGhpY2tuZXNzKCkpKTsKICAgICB9CiAKLSAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpIHsKKyAg
ICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlU3R5bGUpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VTdHlsZUNoYW5nZSBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFN0cm9rZVN0eWxlPiB7CiAg
ICAgICAgICAgICB2aXJ0dWFsIH5TdHJva2VTdHlsZUNoYW5nZSgpID0gZGVmYXVsdDsKIAogICAg
ICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dFN0cm9rZVN0eWxlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAg
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlN0cm9rZVN0eWxlPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0cm9rZVN0eWxlKCkpKTsK
KyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcCkpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVDYXAg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lQ2FwPiB7CisgICAg
ICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2
b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6TGluZUNhcDw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXAoKSkpOworICAgIH0K
KworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpMaW5lRGFzaCkpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVEYXNoIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFzaEFycmF5LCBmbG9hdD4gewor
ICAgICAgICAgICAgdmlydHVhbCB+U2V0TGluZURhc2goKSA9IGRlZmF1bHQ7CisKKyAgICAgICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVEYXNoKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoPD5cbiI7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZURhc2g+KGxp
bmVEYXNoKCkuZGFzaGVzLCBsaW5lRGFzaCgpLm9mZnNldCkpOworICAgIH0KKworICAgIGlmIChz
dGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpM
aW5lSm9pbikpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUpvaW4+IHsKKyAgICAgICAgICAgIHZpcnR1YWwg
flNldExpbmVKb2luKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVK
b2luPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKCkpKTsKKyAgICB9CisKKyAgICBpZiAo
c3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
TWl0ZXJMaW1pdCkpIHsKKyAgICAgICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICAgICAgdmlydHVh
bCB+U2V0TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVN0eWxlQ2hhbmdlPD5cbiI7CisgICAg
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpNaXRlckxpbWl0PD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0YXRlLnN0cm9rZVN0eWxl
KSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVyTGltaXQ+KG1pdGVyTGlt
aXQoKSkpOwogICAgIH0KIAotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpIHsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSkpIHsKICAg
ICAgICAgc3RydWN0IENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+IHsKICAg
ICAgICAgICAgIHZpcnR1YWwgfkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSgpID0gZGVmYXVsdDsK
IAogICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSwg
YXJnPDE+KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0
ZU1vZGU8PlxuIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U+KHN0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlPihjb21wb3NpdGVNb2RlKCkub3BlcmF0aW9uLCBjb21w
b3NpdGVNb2RlKCkuYmxlbmRNb2RlKSk7CiAgICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkgeworICAgIAorICAgIGlmIChz
dGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpT
aG91bGRBbnRpYWxpYXMpKSB7CiAgICAgICAgIHN0cnVjdCBTaG91bGRBbnRpYWxpYXNDaGFuZ2Ug
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxib29sPiB7CiAgICAgICAg
ICAgICB2aXJ0dWFsIH5TaG91bGRBbnRpYWxpYXNDaGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAg
ICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92
ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
aG91bGRBbnRpYWxpYXMoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAg
ICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNob3VsZEFudGlhbGlhc0NoYW5nZTw+
XG4iOworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzPD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH07CiAKLSAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2hvdWxkQW50aWFsaWFzQ2hhbmdl
PihzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
U2hvdWxkQW50aWFsaWFzQ2hhbmdlPihzaG91bGRBbnRpYWxpYXMoKSkpOwogICAgIH0KKworICAg
IGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQoreworICAgIHN0cnVjdCBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8ZmxvYXQ+IHsKKyAgICAgICAgdmlydHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigp
ID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworCisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNp
dHkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9w
YWNpdHkpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFuc3BhcmVu
Y3lMYXllcigpCit7CisgICAgc3RydWN0IEVuZFRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7CisgICAgICAgIHZpcnR1YWwgfkVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRW5kVHJhbnNw
YXJlbmN5TGF5ZXI8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIAorICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7Cit9
CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgc3RydWN0IENsaXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xpcCgpID0gZGVmYXVsdDsK
KworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVy
KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6Y2xpcChjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkNsaXA8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworCisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPENsaXA+KHJlY3QpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkK
K3sKKyAgICBzdHJ1Y3QgQ2xpcFBhdGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxQYXRoLCBXaW5kUnVsZT4geworICAgICAgICB2aXJ0dWFsIH5DbGlwUGF0aCgpID0g
ZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6Y2xpcFBh
dGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFBhdGg8PlxuIjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgR3JhcGhpY3ND
b250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8Q2xpcFBhdGg+KHBhdGgsIHdpbmRSdWxlKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHN0cnVjdCBT
ZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUNh
cD4gewotICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OworICAgIHN0cnVj
dCBDbGlwT3V0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRS
ZWN0PiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVDYXAoY29udGV4dEZvclJlcGxh
eShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiU2V0TGluZUNhcDw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJDbGlwT3V0PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U2V0TGluZUNhcD4obGluZUNhcCkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocmVjdCkpOwogfQogCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc3RydWN0IFNldExpbmVEYXNoIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFzaEFycmF5LCBmbG9hdD4gewotICAg
ICAgICB2aXJ0dWFsIH5TZXRMaW5lRGFzaCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgQ2xpcE91
dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGg+IHsKKyAgICAg
ICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2goY29udGV4dEZvclJlcGxheShyZXBsYXllciks
IGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIlNldExpbmVEYXNoPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkNsaXBPdXQ8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxTZXRMaW5lRGFzaD4oZGFzaGVzLCBkYXNoT2Zmc2V0KSk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwT3V0PihwYXRoKSk7
CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUpvaW4oTGluZUpvaW4g
bGluZUpvaW4pCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAg
c3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8TGluZUpvaW4+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7
CisgICAgc3RydWN0IENsaXBUb0ltYWdlQnVmZmVyIGZpbmFsOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgRmxvYXRSZWN0PiB7CisgICAg
ICAgIHZpcnR1YWwgfkNsaXBUb0ltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCkp
OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldExpbmVKb2luPD5c
biI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBUb0ltYWdlQnVmZmVyPD5cbiI7
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZUpv
aW4+KGxpbmVKb2luKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIGlmIChhdXRv
IG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSkpCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBUb0ltYWdlQnVmZmVyPihuYXRp
dmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCkpOwogfQogCi12b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBzdHJ1Y3QgU2V0TWl0ZXJMaW1pdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgflNldE1pdGVyTGltaXQoKSA9IGRl
ZmF1bHQ7CisgICAgc3RydWN0IENsZWFyUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGVhclJlY3QoKSA9
IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldE1p
dGVyTGltaXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAg
ICAgIENhaXJvOjpjbGVhclJlY3QoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigp
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRNaXRlckxpbWl0
PD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsZWFyUmVjdDw+XG4iOwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVyTGltaXQ+
KG1pdGVyTGltaXQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPENsZWFyUmVjdD4ocmVjdCkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI0OSw2ICs0NzksOCBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PEZpbGxSZWN0PihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKIH0KQEAgLTI2OSw2ICs1MDEsOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCkBAIC0yOTEsMzUgKzUyNSwxMiBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3Jh
ZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3Jt
KSkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBzdHJ1Y3QgRmlsbFJl
Y3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENv
bG9yLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUsIENv
bXBvc2l0ZU9wZXJhdG9yPiB7Ci0gICAgICAgIHZpcnR1YWwgfkZpbGxSZWN0KCkgPSBkZWZhdWx0
OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4
dCA9IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpOwotCi0gICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBhcmc8
Mz4oKSk7Ci0gICAgICAgICAgICBDYWlybzo6ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0LCBhcmc8
MD4oKSwgYXJnPDE+KCksIGFyZzw0PigpKTsKLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDU+KCksIEJsZW5kTW9kZTo6
Tm9ybWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJGaWxsUmVj
dDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PEZpbGxSZWN0PihyZWN0LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpKTsKKyAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3JhZGllbnQuY3JlYXRlUGF0dGVy
bigxLjAsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBzdHJ1Y3QgRmlsbFJv
dW5kZWRSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRS
b3VuZGVkUmVjdCwgQ29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIENhaXJvOjpT
aGFkb3dTdGF0ZT4gewogICAgICAgICB2aXJ0dWFsIH5GaWxsUm91bmRlZFJlY3QoKSA9IGRlZmF1
bHQ7CkBAIC0zMjgsNyArNTM5LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAg
ewogICAgICAgICAgICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dEZvclJlcGxheShy
ZXBsYXllcik7CiAKLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDI+KCksIGFyZzwzPigpKTsKKyAgICAgICAgICAgIENh
aXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dC5jcigpLCBh
cmc8Mj4oKSwgYXJnPDM+KCkpOwogCiAgICAgICAgICAgICBhdXRvJiByZWN0ID0gYXJnPDA+KCk7
CiAgICAgICAgICAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKQEAgLTMzNiw3ICs1NDcsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IENhaXJvOjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgpLCBhcmc8MT4oKSwg
YXJnPDQ+KCkpOwogCi0gICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAg
ICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRl
eHQuY3IoKSwgYXJnPDI+KCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTM0NSw4ICs1NTYsOSBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91
bmRlZFJlY3Q+KHJvdW5kZWRSZWN0LCBjb2xvciwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIGJs
ZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+KHJvdW5k
ZWRSZWN0LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAt
MzY1LDEwICs1NzcsMzYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgfQogICAg
IH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgVU5VU0VEX1BBUkFNKGNvbG9y
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAor
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgc3RydWN0IEZpbGxFbGxpcHNlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNo
YWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0Owor
CisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgICAg
IHBhdGguYWRkRWxsaXBzZShhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZmlsbFBhdGgo
Y29udGV4dEZvclJlcGxheShyZXBsYXllciksIHBhdGgsIGFyZzwxPigpLCBhcmc8Mj4oKSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbEVsbGlwc2U8PlxuIjsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxF
bGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpKTsKK30KKwogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewogICAgIHN0cnVjdCBGaWxsUGF0aCBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6
U2hhZG93U3RhdGU+IHsKQEAgLTM4OCwzMiArNjI2LDEyIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKICAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Rmls
bFBhdGg+KHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgRmlsbEVsbGlwc2UgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENhaXJvOjpGaWxs
U291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAgICAgICAgdmlydHVhbCB+RmlsbEVsbGlw
c2UoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgUGF0aCBw
YXRoOwotICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKGFyZzwwPigpKTsKLSAgICAgICAgICAg
IENhaXJvOjpmaWxsUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgcGF0aCwgYXJnPDE+
KCksIGFyZzwyPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJG
aWxsRWxsaXBzZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsRWxsaXBzZT4ocmVj
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7
Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKICAgICBzdHJ1Y3QgU3Ryb2tlUmVjdCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgZmxvYXQs
IENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewpAQCAtNDMwLDMxICs2
NDgsMTAgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxT
dHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHN0cnVjdCBTdHJva2VQ
YXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86
OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgflN0
cm9rZVBhdGgoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3Bl
cmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAg
Q2Fpcm86OnN0cm9rZVBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBh
cmc8MT4oKSwgYXJnPDI+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIlN0cm9rZVBhdGg8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PFN0cm9rZVBhdGg+KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUmVjdD4o
cmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNDc5LDEwNyArNjc2LDI5IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCwgQ2Fp
cm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIHN0cnVjdCBDbGVhclJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlv
biwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xlYXJSZWN0
KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJl
cGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpj
bGVhclJlY3QoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGVhclJlY3Q8PlxuIjsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGVhclJlY3Q+KHJlY3QpKTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKK3ZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHN0cnVjdCBE
cmF3R2x5cGhzIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Q2Fpcm86
OkZpbGxTb3VyY2UsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZSwgRmxv
YXRQb2ludCwgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+LCBmbG9hdCwgVmVjdG9yPGNhaXJv
X2dseXBoX3Q+LCBmbG9hdCwgVGV4dERyYXdpbmdNb2RlRmxhZ3MsIGZsb2F0LCBGbG9hdFNpemUs
IENvbG9yLCBGb250U21vb3RoaW5nTW9kZT4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3R2x5cGhz
KCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBTdHJva2VQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVy
YXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNo
YWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgflN0cm9rZVBhdGgoKSA9IGRlZmF1bHQ7CiAK
ICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoY29udGV4
dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwz
PigpLCBhcmc8ND4oKS5nZXQoKSwKLSAgICAgICAgICAgICAgICBhcmc8NT4oKSwgYXJnPDY+KCks
IGFyZzw3PigpLCBhcmc8OD4oKSwgYXJnPDk+KCksIGFyZzwxMD4oKSwgYXJnPDExPigpLCBhcmc8
MTI+KCkpOworICAgICAgICAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAg
ICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdHbHlwaHM8PlxuIjsKKyAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiU3Ryb2tlUGF0aDw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAg
VmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7Ci0gICAgewotICAg
ICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBn
bHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2
YW5jZXNbaV0ud2lkdGgoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3R2x5cGhzPihDYWly
bzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAotICAgICAg
ICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwKLSAgICAgICAgUmVmUHRyPGNhaXJv
X3NjYWxlZF9mb250X3Q+KGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpKSwKLSAgICAg
ICAgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIFdURk1vdmUoY2Fpcm9HbHlwaHMpLCB4T2Zm
c2V0LCBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsCi0gICAgICAgIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwgZm9udFNtb290aGluZykp
OwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQot
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1hZ2UgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zLCBmbG9hdCwgQ2Fp
cm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpID0g
ZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd1Bs
YXRmb3JtSW1hZ2UoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBh
cmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAg
ICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdOYXRpdmVJbWFnZTw+XG4iOwot
ICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0gICAgVU5VU0VE
X1BBUkFNKGltYWdlU2l6ZSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdOYXRpdmVJbWFnZT4obmF0aXZlSW1hZ2UucGxhdGZv
cm1JbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMob3B0aW9u
cywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSksIHN0YXRlLmFscGhhLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IHN0cnVjdCBEcmF3UGF0dGVybiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBJbnRTaXplLCBGbG9hdFJlY3QsIEZsb2F0UmVj
dCwgQWZmaW5lVHJhbnNmb3JtLCBGbG9hdFBvaW50LCBJbWFnZVBhaW50aW5nT3B0aW9ucz4gewot
ICAgICAgICB2aXJ0dWFsIH5EcmF3UGF0dGVybigpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBh
cmc8ND4oKSwgYXJnPDU+KCksIGFyZzw2PigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJEcmF3UGF0dGVybjw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UGF0
dGVybj4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBuYXRpdmVJbWFnZS5zaXplKCksIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpKTsKKyAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCiB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQpAQCAtNTk4LDggKzcxNyw4IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25l
c3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9y
KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxE
cmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUo
KSwgc3Ryb2tlQ29sb3IoKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQy
KQpAQCAtNjIxLDUwICs3NDAsOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludAogICAgIGlmIChz
dHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+
KHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7Ci19Ci0KLXZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBzdHJ1
Y3QgRHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEZsb2F0UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yPiB7Ci0g
ICAgICAgIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
LSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigp
LCBhcmc8ND4oKSwgYXJnPDU+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkRyYXdMaW5lc0ZvclRleHQ8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBp
ZiAod2lkdGhzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRl
eHQ+KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMs
IHN0YXRlLnN0cm9rZUNvbG9yKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIHN0cnVjdCBEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI8PlxuIjsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyPihyZWN0LCBzdHlsZSkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyLCBzdHJva2VTdHlsZSgp
LCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc2hvdWxkQW50aWFsaWFzKCkpKTsK
IH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCkBAIC02ODMsMTEgKzc2MCwxMSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tl
U3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdFbGxpcHNl
PihyZWN0LCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tl
VGhpY2tuZXNzKCkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2Fp
dGE6OnBhaW50Rm9jdXMoKnRoaXMsIHBhdGgsIGNvbG9yKTsKQEAgLTcwNywxMiArNzg0LDEyIEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdGb2N1c1Jpbmc+KHBh
dGgsIHdpZHRoLCBjb2xvcikpOwogI2VuZGlmCi0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiB9
CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAg
IFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcmVjdHMsIGNvbG9yKTsKQEAgLTczMiwz
NjggKzgwOSwxNDYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQKICAgICAgICAgfQogICAgIH07
CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERy
YXdGb2N1c1Jpbmc+KHJlY3RzLCB3aWR0aCwgY29sb3IpKTsKICNlbmRpZgotICAgIFVOVVNFRF9Q
QVJBTShvZmZzZXQpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNhdmUoKQot
ewotICAgIHN0cnVjdCBTYXZlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8PiB7Ci0gICAgICAgIHZpcnR1YWwgflNhdmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikuc2F2ZSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNhdmU8PlxuIjsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKLQotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFNhdmU+KCkpOwotCi0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0
YXRlU3RhY2subGFzdCgpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0
b3JlKCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAg
IHN0cnVjdCBSZXN0b3JlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
PiB7Ci0gICAgICAgIHZpcnR1YWwgflJlc3RvcmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikucmVzdG9yZSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlJlc3RvcmU8PlxuIjsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAoIXN0YWNrU2l6ZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKLQotICAgIGlmIChtX3N0YXRl
U3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxSZXN0b3JlPigpKTsKLQotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAg
aWYgKG1fc3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGVTdGFjay5jbGVhcigp
OworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQog
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIHN0cnVjdCBUcmFuc2xhdGUgZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdCwgZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+VHJh
bnNsYXRlKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1hZ2UgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90Piwg
RmxvYXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zLCBmbG9hdCwgQ2Fpcm86
OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpID0gZGVm
YXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6dHJhbnNsYXRl
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAg
ICAgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCks
IGFyZzw1PigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJUcmFu
c2xhdGU8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd05hdGl2ZUltYWdl
PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8VHJh
bnNsYXRlPih4LCB5KSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0
YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGUuY3RtLnRyYW5zbGF0ZSh4LCB5KTsKLQotICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gdDsKLSAgICAgICAgdC50cmFuc2xhdGUoLXgsIC15KTsKLSAgICAg
ICAgc3RhdGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0KKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdOYXRpdmVJ
bWFnZT4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgSW1h
Z2VQYWludGluZ09wdGlvbnMob3B0aW9ucywgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSwg
YWxwaGEoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQogewotICAgIHN0cnVjdCBSb3RhdGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5Sb3RhdGUoKSA9IGRlZmF1bHQ7
Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXll
cikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnJvdGF0ZShjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIlJvdGF0ZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPFJvdGF0ZT4oYW5nbGVJblJhZGlhbnMpKTsKLQotICAgIHsKLSAg
ICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZS5j
dG0ucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdDsK
LSAgICAgICAgdC5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgICAgICBzdGF0ZS5jdG1JbnZl
cnNlID0gdCAqIHN0YXRlLmN0bUludmVyc2U7Ci0gICAgfQotfQotCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBzdHJ1Y3Qg
U2NhbGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFNpemU+
IHsKLSAgICAgICAgdmlydHVhbCB+U2NhbGUoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IERyYXdQ
YXR0ZXJuIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4sIEludFNpemUsIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFu
c2Zvcm0sIEZsb2F0UG9pbnQsIEltYWdlUGFpbnRpbmdPcHRpb25zPiB7CisgICAgICAgIHZpcnR1
YWwgfkRyYXdQYXR0ZXJuKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpzY2FsZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkp
OworICAgICAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+
KCksIGFyZzw1PigpLCBhcmc8Nj4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiU2NhbGU8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd1Bh
dHRlcm48PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTY2FsZT4oc2l6ZSkpOwotCi0gICAgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVT
dGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmN0bS5zY2FsZShzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0OwotICAgICAgICB0LnNjYWxl
KDEgLyBzaXplLndpZHRoKCksIDEgLyBzaXplLmhlaWdodCgpKTsKLSAgICAgICAgc3RhdGUuY3Rt
SW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0KKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdQYXR0ZXJuPihuYXRpdmVJbWFn
ZS5wbGF0Zm9ybUltYWdlKCksIG5hdGl2ZUltYWdlLnNpemUoKSwgZGVzdFJlY3QsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucykpOwogfQogCi12b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQogewotICAgIHN0cnVjdCBDb25jYXRDVE0gZmluYWwgOiBQYWludGluZ09wZXJhdGlv
biwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFuc2Zvcm0+IHsKLSAgICAgICAgdmlydHVhbCB+Q29u
Y2F0Q1RNKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENh
aXJvOjpjb25jYXRDVE0oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDb25jYXRDVE08PlxuIjsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICBhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgp
OwotICAgIGlmICghaW52ZXJzZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8Q29uY2F0Q1RNPih0cmFuc2Zvcm0pKTsKLQotICAgIGF1dG8mIHN0YXRlID0gbV9z
dGF0ZVN0YWNrLmxhc3QoKTsKLSAgICBzdGF0ZS5jdG0gKj0gdHJhbnNmb3JtOwotICAgIHN0YXRl
LmN0bUludmVyc2UgPSBpbnZlcnNlLnZhbHVlKCkgKiBzdGF0ZS5jdG1JbnZlcnNlOworICAgIC8v
IEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1l
Rm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CisjZW5kaWYKIAotdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQogewotICAgIHN0cnVjdCBTZXRDVE0g
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFuc2Zvcm0+
IHsKLSAgICAgICAgdmlydHVhbCB+U2V0Q1RNKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3
R2x5cGhzIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Q2Fpcm86OkZp
bGxTb3VyY2UsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZSwgRmxvYXRQ
b2ludCwgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+LCBmbG9hdCwgVmVjdG9yPGNhaXJvX2ds
eXBoX3Q+LCBmbG9hdCwgVGV4dERyYXdpbmdNb2RlRmxhZ3MsIGZsb2F0LCBGbG9hdFNpemUsIENv
bG9yLCBGb250U21vb3RoaW5nTW9kZT4geworICAgICAgICB2aXJ0dWFsIH5EcmF3R2x5cGhzKCkg
PSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxh
eSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAg
ICAgICBDYWlybzo6ZHJhd0dseXBocyhjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLmdldCgpLAorICAgICAg
ICAgICAgICAgIGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCksIGFyZzw4PigpLCBhcmc8OT4o
KSwgYXJnPDEwPigpLCBhcmc8MTE+KCksIGFyZzwxMj4oKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiU2V0Q1RNPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkRyYXdHbHlwaHM8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvIGlu
dmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgIGlmICghaW52ZXJzZSkKKyAgICBpZiAo
IWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxTZXRDVE0+KHRyYW5zZm9ybSkpOwotCi0gICAgYXV0byYgc3RhdGUg
PSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIHN0YXRlLmN0bSA9IHRyYW5zZm9ybTsKLSAgICBz
dGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0g
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURl
dmljZVNjYWxlKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpLmN0bTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgc3RydWN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2
aXJ0dWFsIH5CZWdpblRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiQmVnaW5UcmFuc3BhcmVuY3lMYXllcjw+XG4iOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihv
cGFjaXR5KTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI+KG9wYWNpdHkpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFu
c3BhcmVuY3lMYXllcigpCi17Ci0gICAgc3RydWN0IEVuZFRyYW5zcGFyZW5jeUxheWVyIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7Ci0gICAgICAgIHZpcnR1YWwg
fkVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRW5k
VHJhbnNwYXJlbmN5TGF5ZXI8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3RydWN0IENsaXAg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKLSAg
ICAgICAgdmlydHVhbCB+Q2xpcCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6Y2xpcChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVy
cmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXA8PlxuIjsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwPihyZWN0
KSk7Ci0KKyAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7CisgICAgVmVjdG9yPGNhaXJvX2ds
eXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7CiAgICAgewotICAgICAgICBhdXRvJiBzdGF0
ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmNsaXBCb3VuZHMuaW50ZXJz
ZWN0KHN0YXRlLmN0bS5tYXBSZWN0KHJlY3QpKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3Ry
dWN0IENsaXBPdXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9h
dFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKLQotICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkNsaXBPdXQ8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxDbGlwT3V0PihyZWN0KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHN0cnVjdCBDbGlwT3V0IGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aD4gewotICAgICAgICB2
aXJ0dWFsIH5DbGlwT3V0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4o
KSk7CisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNb
aV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNl
dCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwT3V0Pihw
YXRoKSk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0
cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBv
aW50LAorICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5wbGF0Zm9ybURh
dGEoKS5zY2FsZWRGb250KCkpLAorICAgICAgICBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwg
V1RGTW92ZShjYWlyb0dseXBocyksIHhPZmZzZXQsIHRleHREcmF3aW5nTW9kZSgpLAorICAgICAg
ICBzdHJva2VUaGlja25lc3MoKSwgc2hhZG93T2Zmc2V0KCksIHNoYWRvd0NvbG9yKCksIGZvbnRT
bW9vdGhpbmcpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBzdHJ1Y3QgQ2xpcFBhdGggZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBXaW5kUnVsZT4gewot
ICAgICAgICB2aXJ0dWFsIH5DbGlwUGF0aCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd0xp
bmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0
UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yPiB7CisgICAgICAgIHZp
cnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAg
ewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRl
eHQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+
KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBQYXRoPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkRyYXdMaW5lc0ZvclRleHQ8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwUGF0aD4ocGF0aCwgY2xpcFJ1bGUpKTsKLQotICAgIHsK
LSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0
ZS5jbGlwQm91bmRzLmludGVyc2VjdChzdGF0ZS5jdG0ubWFwUmVjdChwYXRoLmZhc3RCb3VuZGlu
Z1JlY3QoKSkpOwotICAgIH0KLX0KKyAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOwogCi1JbnRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBj
b25zdAotewotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChzdGF0ZS5jdG1JbnZlcnNlLm1hcFJlY3Qoc3RhdGUuY2xpcEJv
dW5kcykpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlQ29sb3IoKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBzdHJ1Y3QgQ2xpcFRvSW1hZ2VCdWZmZXIgZmluYWw6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
LCBGbG9hdFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcFRvSW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7CisgICAgc3RydWN0IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9
IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBU
b0ltYWdlQnVmZmVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwg
YXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CiAgICAgICAg
IH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFRvSW1hZ2VCdWZmZXI8PlxuIjsK
KyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjw+
XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZm
ZXIuY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICBpZiAoIWltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpKQotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlw
VG9JbWFnZUJ1ZmZlcj4obmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QpKTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KQoteworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpKTsKIH0KIAogRmxv
YXRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKQEAgLTExMDYs
MTIgKzk2MSw0IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5p
cXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJiBjb21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5h
cHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIC8vIEZJWE1FOiBOb3Qg
aW1wbGVtZW50ZWQuCi0gICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxh
eWVyLCBkZXN0aW5hdGlvbik7Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5o
CmluZGV4IDgzYzZkMjdkNmVhMzZjNzliZWJkNzgyNWY5OWI3YzQzOTA4ZWU1NGIuLmFmNDc4ZmM0
MzdlOGI0ZWU5N2E3YzAxYjc3YmMyMmEwMzU0NDc5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDc4ICs0Miw1OCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0
cjsgfQogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBvdmVycmlkZTsKKyAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3Rv
cmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOworICAgIHZv
aWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xpcChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xp
cE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwVG9JbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxv
YXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29s
b3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNv
bXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0g
ICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBmaWxs
RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAg
IHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBkcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViQ29yZTo6Rm9udFNtb290
aGluZ01vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKFdl
YkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJu
KFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0
IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJv
a2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRy
YXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKICAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hB
cnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOworCiAgICAgdm9pZCBk
cmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25z
dCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBv
dmVycmlkZTsKLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29y
ZTo6UGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0
aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdl
YkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dGluYXRpb24pIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBXZWJDb3Jl
OjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6
OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgV2ViQ29yZTo6
U3Ryb2tlU3R5bGUpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSkgb3ZlcnJpZGU7CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGFwcGVuZChzdGQ6OnVuaXF1ZV9w
dHI8UGFpbnRpbmdPcGVyYXRpb24+JiYpOwogICAgIFBhaW50aW5nT3BlcmF0aW9ucyYgbV9jb21t
YW5kTGlzdDsKLQotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSBjdG07Ci0gICAgICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG1JbnZlcnNl
OwotICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY2xpcEJvdW5kczsKLSAgICB9OwotICAgIFZl
Y3RvcjxTdGF0ZSwgMzI+IG1fc3RhdGVTdGFjazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIE5pY29z
aWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3
R2x5cGhzUmVjb3JkZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKaW5kZXggNWQ2NmViNzJhZDEzYzI0ZGFjMDk1
YTk0NWY2MTRhNmY1NTIyMjQ5Mi4uMDdjMDMzOWY1OGJmMzJjN2Q1ZjhmODE3ZGJkZDNlYjdmMWVl
NzM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Ry
YXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKQEAgLTI5LDE3ICsyOSwxOCBAQAog
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGlj
c0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29u
dGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlw
aHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1
Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9u
Q29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9k
ZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9k
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggYzE5ZTc0MTU1N2MzMDhj
OTQxZTRlZjcxNWUzZGI0NjU5NGQxODViNi4uMmNkNzg2NWVjYTgyOWViNDU3ODBlOWZiMGU3MjQ3
YTM3MTJiY2MzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDR1dpbi5jcHAKQEAgLTE3NiwyNSArMTc2LDIyIEBAIHZvaWQgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQm
IGZvbnQsCiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEu
c2l6ZSgpKTsKICAgICBGb250Q2FzY2FkZTo6c2V0Q0dDb250ZXh0Rm9udFJlbmRlcmluZ1N0eWxl
KGNnQ29udGV4dCwgZm9udC5wbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZvbnQoKSwgZmFsc2UsIGZv
bnQucGxhdGZvcm1EYXRhKCkudXNlR0RJKCkpOwogCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNl
dDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGdy
YXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dD
b2xvcik7CisgICAgYXV0byBkcm9wU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LmRyb3BTaGFkb3co
KTsKIAotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3
aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlk
KCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRp
b25PckZsaXBwZWQoKSk7CisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBncmFwaGljc0NvbnRl
eHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIGRyb3BTaGFk
b3cuY29sb3IuaXNWYWxpZCgpICYmICFkcm9wU2hhZG93LmJsdXJSYWRpdXMgJiYgKCFncmFwaGlj
c0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0
Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CiAgICAgaWYgKGhhc1Np
bXBsZVNoYWRvdykgewogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMg
aW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhl
bCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwog
ICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0g
ICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CisgICAgICAgIENvbG9yIHNo
YWRvd0ZpbGxDb2xvciA9IGRyb3BTaGFkb3cuY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9
IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOworICAgICAgICBmbG9hdCBzaGFkb3dU
ZXh0WCA9IHBvaW50LngoKSArIGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIC8v
IElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBs
aWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgp
ICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsK
KyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9mZnNl
dC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/
IC0xIDogMSk7CiAgICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHNo
YWRvd1RleHRYLCBzaGFkb3dUZXh0WSk7CiAgICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRo
QWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOwogICAgICAg
ICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIENHQ29udGV4
dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0
aCgpICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIHNoYWRvd09mZnNl
dC5oZWlnaHQoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250
ZXh0LCBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNldC53aWR0aCgpICsgZm9udC5zeW50aGV0
aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIGRyb3BTaGFkb3cub2Zmc2V0LmhlaWdodCgpKTsK
ICAgICAgICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOwogICAgICAgICB9CiAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKQEAgLTIwOCw3ICsyMDUsNyBAQCB2b2lk
IEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBjb25zdCBGb250JiBmb250LAogICAgIH0KIAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCi0g
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVy
LCBzaGFkb3dDb2xvcik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXREcm9wU2hhZG93KGRy
b3BTaGFkb3cpOwogCiAgICAgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0Nv
bnRleHQsIG9sZEZvbnRTbW9vdGhpbmdTdHlsZSk7CiAgICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJp
eChjZ0NvbnRleHQsIHNhdmVkTWF0cml4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggM2NmNzQ2MGM4
MGUzYmUxZDViYTNmMGNlZDdjMTliMjVkZjI5YWJmMi4uNzg1ZTk0YmVjZjA3Y2Q0YTg0YzljMzRk
OWNlY2M4Mzg1N2UwNjk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTI5MiwxMiArMjkyLDEyIEBA
IHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCiAgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCgyLCAyLCBzaXplLndpZHRoKCkgLSAz
LCBzaXplLmhlaWdodCgpIC0gMyk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6
d2hpdGUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDMpOwotICAgIGNvbnRleHQu
c2V0TGluZURhc2gobV9kYXNoV2lkdGhzLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
bV9kYXNoV2lkdGhzLCAwIH0pOwogICAgIG1fcGF0aC5hZGRSZWN0KGZyYW1lUmVjdCk7CiAgICAg
bV9wYXRoLmNsb3NlU3VicGF0aCgpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChtX3BhdGgpOwog
Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaChEYXNoQXJyYXkoKSwgMCk7CisgICAgY29udGV4dC5z
ZXRMaW5lRGFzaCh7IHsgfSwgMCB9KTsKICAgICBtX3BhdGguY2xlYXIoKTsKICAgICBtX3BhdGgu
bW92ZVRvKEZsb2F0UG9pbnQoMCwgYm94VG9wICsgYm94U2l6ZSkpOwogICAgIG1fcGF0aC5hZGRM
aW5lVG8oRmxvYXRQb2ludChzaXplLndpZHRoKCksIGJveFRvcCArIGJveFNpemUpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApp
bmRleCAxYjE4MmExZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0M2I3NjdkLi5lODBmMmVlODkx
OTM5MTQ0MThlODc4YmYwYTRhMjg0MGVlNjg5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBA
IGJvb2wgQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50
KEZyYW1lVmlldyYgZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5zZXRQYWludEJlaGF2aW9yKFBh
aW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CiAgICAgZnJhbWVWaWV3LnNl
dFBhaW50c0VudGlyZUNvbnRlbnRzKHRydWUpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBj
aGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBj
aGVja2VyQ29udGV4dChmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSwgTnVs
bEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250
ZW50ZnVsUGFpbnQpOwogICAgIGZyYW1lVmlldy5wYWludChjaGVja2VyQ29udGV4dCwgZnJhbWVW
aWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCkpOwogCiAgICAgZnJhbWVWaWV3LnNldFBh
aW50c0VudGlyZUNvbnRlbnRzKG9sZEVudGlyZUNvbnRlbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCmluZGV4IGM5YWIyMTc2MTQxZmE3YTMz
OWEyMDk3YjNhYmY5NzY1MDc4N2U0ZjEuLjRiZmY4ZDAwODM5MjUxNGNiZTYyY2E5NWQ0ZTc0M2Zj
MTk3ZjAxOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxp
cHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lz
Qm94LmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIExlZ2FjeUVsbGlwc2lzQm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGJv
b2wgc2V0U2hhZG93ID0gZmFsc2U7CiAgICAgaWYgKGxpbmVTdHlsZS50ZXh0U2hhZG93KCkpIHsK
ICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBsaW5lU3R5bGUuY29sb3JCeUFwcGx5aW5nQ29s
b3JGaWx0ZXIobGluZVN0eWxlLnRleHRTaGFkb3coKS0+Y29sb3IoKSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KExheW91dFNpemUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgpLnZhbHVl
KCksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxlLnRleHRT
aGFkb3coKS0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0
LnNldERyb3BTaGFkb3coeyBMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPngoKS52
YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVTdHlsZS50
ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAgICBz
ZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMjRjODJjOWQ2YmQ0M2Y3NGJhMDVhYjVh
Yzc2NzkzZDc1ZDE1ZTU3Ny4uOGQ5N2QyNTcxZTI0NTNkZjE5MjhiZGU2Yzc3Yzc2MzE1ZmJjODgy
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCkBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JC
YWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3QKICAgICAg
ICAgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KCk7CiAKICAgICBGbG9hdFNpemUgc2hhZG93
T2Zmc2V0KGJveFNoYWRvdy0+eCgpLnZhbHVlKCksIGJveFNoYWRvdy0+eSgpLnZhbHVlKCkpOwot
ICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKS52
YWx1ZSgpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9y
KCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpM
ZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICBjb250ZXh0LnNldERyb3BT
aGFkb3coeyBzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUu
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93
LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93
UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIH0KIAogSW50ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmNob29zZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCB2b2lkKiBsYXllciwgY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKQEAgLTIwODcsNyArMjA4Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gbGluZURhc2ggPSBEYXNoQXJyYXk6
OmZyb20oZGFzaExlbmd0aCwgZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRMaW5lRGFzaChXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7CisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExl
bmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5n
IHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTI0
NTYsNyArMjQ1Niw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9h
dFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhl
bChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNl
UGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAg
ICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4g
LSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAg
Y29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgICAgICBjb250ZXh0
LnNldERyb3BTaGFkb3coeyBzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpM
ZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwogCiAgICAgICAgICAgICBpZiAo
aGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFx
dWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBz
YXZlcyB0aW1lCkBAIC0yNTU4LDcgKzI1NTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwog
ICAgICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCiAgICAgICAgICAgICBh
dXRvIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSByb3VuZFNpemVUb0RldmljZVBpeGVscyhzaGFkb3dP
ZmZzZXQsIGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93
KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+
aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1Jh
ZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsg
c25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5p
c1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFk
aXVzTW9kZTo6RGVmYXVsdCB9KTsKICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUocGl4ZWxTbmFwcGVkT3V0ZXJSZWN0LCBwaXhlbFNuYXBwZWRIb2xlUmVjdCwgZmls
bENvbG9yKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCmluZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2MjMyMWZlZWQ5YjY4NmMzY2Qu
LjhjZjk2MWUwYmMyMzY0ZTk2MmNkYTg4MWY4NTllNGYzMWEzYzk4M2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjI1MywxNCArMjI1MywxNCBAQCB2b2lk
IFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IExheWVyUAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAg
IGJvb2wgdXNlc0NvbXBvc2l0ZU9wZXJhdGlvbiA9IGhhc0JsZW5kTW9kZSgpICYmICEocmVuZGVy
ZXIoKS5pc0xlZ2FjeVNWR1Jvb3QoKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJW
aWV3TGF5ZXIoKSk7CiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAg
ICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVy
YXRpb24oKSwgYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVN
b2RlKHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkgfSk7CiAjZW5k
aWYKIAogICAgICAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIocmVuZGVyZXIoKS5v
cGFjaXR5KCkpOwogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgaWYgKHVz
ZXNDb21wb3NpdGVPcGVyYXRpb24pCi0gICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7
CisgICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0LmNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICNlbmRpZgogCiAjaWZkZWYgUkVW
RUFMX1RSQU5TUEFSRU5DWV9MQVlFUlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggNWY5OGI5MTI0YTM0OWFjNzU1NzlmNzExMzVlZTBm
MzhhYmI0ZjEyZC4uM2UyZTZiZjFkZTVkNTRlYjM4ZDkyN2E1MWYwN2M4OTEwYWU2YzFiZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAg
LTE4MzEsNyArMTgzMSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJl
Z2lvbigpCiAgICAgfTsKIAogICAgIGF1dG8gdXBkYXRlRXZlbnRSZWdpb25Gb3JMYXllciA9IFsm
XShHcmFwaGljc0xheWVyJiBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgbnVsbENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKKyAgICAgICAgYXV0byBkaXJ0eVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQ
b2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NMYXllci5z
aXplKCkpOworICAgIAorICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KGRp
cnR5UmVjdCwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpO
b25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRB
QkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRp
dGFibGVSZWdpb24oKSkKQEAgLTE4NTMsOCArMTg1NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVFdmVudFJlZ2lvbigpCiAgICAgICAgICAgICBldmVudFJlZ2lvbkNvbnRleHQu
dW5pdGUoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoLWxheWVyT2Zmc2V0LCBncmFwaGljc0xh
eWVyLnNpemUoKSkpLCByZW5kZXJlcigpLnN0eWxlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
YXV0byBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KGdy
YXBoaWNzTGF5ZXIub2Zmc2V0RnJvbVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNpemUoKSkp
OwotICAgICAgICBwYWludEludG9MYXllcigmZ3JhcGhpY3NMYXllciwgbnVsbENvbnRleHQsIGRp
cnR5UmVjdCwgeyB9LCAmZXZlbnRSZWdpb25Db250ZXh0KTsKKyAgICAgICAgcGFpbnRJbnRvTGF5
ZXIoJmdyYXBoaWNzTGF5ZXIsIG51bGxDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVj
dCksIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7CiAKICAgICAgICAgZXZlbnRSZWdpb24udHJh
bnNsYXRlKHRvSW50U2l6ZShsYXllck9mZnNldCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggMzBjZDM0M2VhN2RmOTE2OGNjM2NkZTQ3ZGJlZjhm
NzU5ZTg4ZjczMS4uMjU2ZmM3NDk1NmRhMzM4NmE1NGQzNTJkZTExYjZmZjczNjY5YTFmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtNjA1LDcgKzYw
NSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3coY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0CiAgICAgY29uc3QgRmxvYXRTaXplIGlubmVy
U2hhZG93T2Zmc2V0IHsgMCwgNSB9OwogICAgIGNvbnN0ZXhwciBhdXRvIGlubmVyU2hhZG93Qmx1
ciA9IDEwLjBmOwogICAgIGF1dG8gaW5uZXJTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4g
eyAwLCAwLCAwLCAwLjA0ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KGlubmVyU2hhZG93T2Zm
c2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hh
ZG93Q29sb3IgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAog
ICAgIFBhdGggaW5uZXJTaGFkb3dQYXRoOwpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBQ
YWludEluZm8mIHBhaW4KICAgICAvLyBVc2UgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiwg
YmVjYXVzZSBpdCBjYWxjdWxhdGVzIHRoZSBibHVyIHJhZGl1cyBpbiBjb250ZXh0IHNwYWNlLAog
ICAgIC8vIHJhdGhlciB0aGFuIHNjcmVlbiBzcGFjZS4KICAgICBjb25zdGV4cHIgYXV0byBzaGFk
b3dDb2xvciA9IENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYUJ5dGUoMjYpOwotICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yKTsKKyAg
ICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFk
b3dDb2xvciB9KTsKIAogICAgIC8vIFRoZSBjaXJjbGUgbXVzdCBoYXZlIGFuIGFscGhhIGNoYW5u
ZWwgdmFsdWUgb2YgMSBmb3IgdGhlIHNoYWRvdyBjb2xvciB0byBhcHBlYXIuCiAgICAgQ0dGbG9h
dCBjaXJjbGVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDAsIDEgfTsKQEAgLTIyNzMsNyAr
MjI3Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hh
ZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAKICAgICBib29sIGlzRW1wdHkgPSAh
c3RhdGVzLmNvbnRhaW5zQW55KHsgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpDaGVja2VkLCBDb250
cm9sU3RhdGVzOjpTdGF0ZXM6OkluZGV0ZXJtaW5hdGUgfSk7CiAgICAgYXV0byBmaXJzdFNoYWRv
d0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIGlzRW1wdHkgPyAwLjA1ZiA6IDAu
MWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFk
b3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBp
bm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yIH0pOwog
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVy
U2hhZG93UGF0aDsKQEAgLTIyOTAsNyArMjI5MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBh
aW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
CiAgICAgY29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogCiAgICAgY29uc3RleHBy
IGF1dG8gc2Vjb25kU2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMSwgMSwgMSwgMC41
ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwgc2Vjb25k
U2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IDAs
IDAgfSwgMSwgc2Vjb25kU2hhZG93Q29sb3IgfSk7CiAKICAgICBjb250ZXh0LmZpbGxQYXRoKGlu
bmVyU2hhZG93UGF0aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KaW5kZXggMDEwZWNiYWVkODdhNzNhNDIwYWZiOTdlOGU4MGZlYTYzNzlmZWQzZS4uMTBk
YzkwZTU3ZTVhZTBmNDI1YTBkYWFhMzY0ZjgxNGU0NDk0OTkwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjgxNiw3ICsyODE2LDcgQEAgc3RhdGlj
IHZvaWQgcGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIoY29uc3QgUmVuZGVyQXR0YWNo
bWVudCYgYXR0YWNobWVudCwKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHBsYWNlaG9sZGVy
Qm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQ
bGFjZWhvbGRlckJvcmRlcldpZHRoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKERhc2hl
ZFN0cm9rZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7YXR0YWNobWVudFBsYWNlaG9sZGVy
Qm9yZGVyRGFzaExlbmd0aH0sIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IGF0dGFj
aG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGggfSwgMCB9KTsKICAgICBjb250ZXh0LnN0
cm9rZVBhdGgoYm9yZGVyUGF0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXggNjc1NTY4YWZmNjExOGYwMTNiZDFk
NGY1NWE2YzM2NGZhOGFmMzhlOC4uODMwOWIyZjhkNGEzMWZhMDNiMWFiZjg0MzlkYTBmM2VmMTYy
ODQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9u
UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9u
UGFpbnRlci5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFRleHREZWNvcmF0aW9uUGFpbnRl
cjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgYwog
ICAgICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CiAgICAgICAg
ICAgICBpZiAobV9zaGFkb3dDb2xvckZpbHRlcikKICAgICAgICAgICAgICAgICBtX3NoYWRvd0Nv
bG9yRmlsdGVyLT50cmFuc2Zvcm1Db2xvcihzaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQp
LCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIG1f
Y29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd1gsIHNoYWRvd1kgLSBleHRy
YU9mZnNldCksIHNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiAgICAg
ICAgICAgICBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCA4ODVkODI2ZWU5ZTc5NmY0YjVjNWI1
ODMzZjcxYTAyOGM0NTQxYTdhLi5mZTg4NjljMTllNWY4ZDQzYjdmYTE2ZTQwMWI0ZmJjNmRjZjdl
ZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgU2hhZG93QXBwbGllcjo6U2hhZG93QXBwbGllcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywKICAgICB9CiAKICAgICBpZiAoIW1fYXZv
aWREcmF3aW5nU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvd0Nv
bG9yIH0pOwogfQogCiBpbmxpbmUgYm9vbCBTaGFkb3dBcHBsaWVyOjppc0xhc3RTaGFkb3dJdGVy
YXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAKaW5kZXggN2VkNTM3YzkyNzkzNzcwZjQ0ODhhZTI5ZGY0MDcyN2Q3ZWIxYTNhOS4uNmM3MzBl
ZjA3ZTQ4YzdlY2Y4YzQwZTM3ZTAwMzQ1Y2ZhYjU2YzY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02OSw3ICs2OSw3IEBAIEZsb2F0
UmVjdCBSZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVVcGRhdGVkU3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdAogc3RhdGljIHZvaWQgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQogewogICAgIGlmIChhdXRvIGdyYWRpZW50ID0gY29udGV4dC5zdHJva2VHcmFkaWVu
dCgpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqZ3JhZGllbnQsIGNvbnRleHQu
c3RhdGUoKS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgY29udGV4dC5z
ZXRGaWxsR3JhZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0cm9rZVNwYWNlVHJhbnNmb3JtKCkp
OwogICAgIGVsc2UgaWYgKFBhdHRlcm4qIHBhdHRlcm4gPSBjb250ZXh0LnN0cm9rZVBhdHRlcm4o
KSkKICAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqcGF0dGVybik7CiAgICAgZWxzZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
aW5kZXggY2MzOGVjNzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4uYjY1ODY4ZDFi
ZDM0YzkwZDRiYmZkZDQ3N2FkMmM3NDI4MmEwNTZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC01MDEsMTAgKzUwMSwxMiBA
QCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNhblNl
dExpbmVEYXNoKQotICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGxl
bmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKSAq
IHNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3Zl
KGRhc2hBcnJheSksIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tl
RGFzaE9mZnNldCgpKSAqIHNjYWxlRmFjdG9yIH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICB9CisKKyAgICBjb250
ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6c3R5
bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
cmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJp
bmdDb250ZXh0LmNwcAppbmRleCAyZmI4ZjMzYTg3MGRmY2NlYjYyZTE0OTY1NmIxNDQzNzIyZWJl
YTJkLi5mNTc5ZTVhNzVmZTkxMGY2ZTViNThhOWFlZmI2ODM1ODk2MjIxMGU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAK
QEAgLTExNSwxMiArMTE1LDEyIEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRv
UmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUGFpCiAgICAgICAgIGlm
IChvcGFjaXR5IDwgMSB8fCBoYXNCbGVuZE1vZGUgfHwgaXNvbGF0ZU1hc2tGb3JCbGVuZGluZyB8
fCBoYXNJc29sYXRpb24pIHsKIAogICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkKLSAgICAg
ICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJhdGlvbiht
X3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5ibGVuZE1v
ZGUoKSk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3Np
dGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgc3R5
bGUuYmxlbmRNb2RlKCkgfSk7CiAKICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCku
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgICAgICAgICAgaWYgKGhhc0Js
ZW5kTW9kZSkKLSAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigp
LCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRl
eHQoKS5zZXRDb21wb3NpdGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVP
cGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAKICAgICAgICAgICAgIG1fcmVuZGVy
aW5nRmxhZ3MgfD0gRW5kT3BhY2l0eUxheWVyOwogICAgICAgICB9CkBAIC0yNzMsNyArMjczLDcg
QEAgYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQogCiAgICAgLy8gSW52YWxpZGF0ZSBhbiBleGlzdGluZyBi
dWZmZXIgaWYgdGhlIHNjYWxlIGlzIG5vdCBjb3JyZWN0LgogICAgIGlmIChpbWFnZUJ1ZmZlcikg
ewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRl
eHQoKS5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250
ZXh0KCkuZ2V0Q1RNKCk7CiAgICAgICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0JveCA9IGV4
cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXplIGJ1ZmZl
clNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lkdGgoKSAq
IHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3Vu
ZGluZ0JveC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKICAgICAgICAgaWYgKGJ1
ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCA0ZGQ3ZjgwZTM3Nzc5ODdkY2I3MGMxYTNjOGE4
N2NkOGE0ZmQ2ZmI5Li5jZDg4YWRmMDhkZGE4MDNiZmQ5M2Y4OTU3NzQwNzY4NmFjNGM1NDYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTI2OSwxNCArMjY5
LDE0IEBAIEltYWdlRHJhd1Jlc3VsdCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjCiAgICAgQVNTRVJUKHZpZXcpOwogCiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0
aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRl
eHQuY2xpcChlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpKTsKIAogICAgIGZsb2F0IGFscGhhID0g
Y29udGV4dC5hbHBoYSgpOwogICAgIGJvb2wgY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5zcGFyZW5j
eUxheWVyID0gb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpICE9IENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyIHx8IG9wdGlvbnMuYmxlbmRNb2RlKCkgIT0gQmxlbmRNb2RlOjpOb3JtYWwg
fHwgYWxwaGEgPCAxOwogICAgIGlmIChjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJlbmN5TGF5
ZXIpIHsKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGFscGhhKTsKLSAg
ICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3Np
dGVNb2RlKHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFs
IH0pOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaG9ub3Igb3B0aW9ucy5vcmll
bnRhdGlvbigpLCBzaW5jZSBJbWFnZUJpdG1hcCdzIGZsaXBZIGhhbmRsaW5nIHJlbGllcyBvbiBp
dC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAwMQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDU0MzgxODJkZGU4NzYzZWJhZDM4ZjE5MmRmNzk1
YWEwNjBiNjUxYmIuLjhkYTM5MGY2ZGE3MGUzNzk1NTBhNTcyZTA5ZTA4NDExODljMmRkZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTc0LDMxICs3NCw2IEBAIHZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgaGFuZGxlSXRlbShEaXNwbGF5
TGlzdDo6UmVzdG9yZSgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0
OjpUcmFuc2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpSb3Rh
dGUoYW5nbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNj
YWxlKHNjYWxlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxp
c3Q6OlNldENUTShjdG0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpj
b25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBoYW5kbGVJ
dGVtKERpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTShjdG0pKTsKLX0KLQogdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpzZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxDb2xvciYmIGl0ZW0pCiB7CiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsK
QEAgLTEyOCw0MCArMTAzLDE1IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0
U3RhdGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlJiYgaXRlbSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfTsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlQ2hhbmdl
KCkubV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxl
SW1hZ2UoaXRlbS5zdGF0ZSgpLnN0cm9rZUJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFuZ2UoKS5t
X3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2Uo
aXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYg
aXRlbSkKLXsKLSAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwotfQotCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1p
dCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0KGxpbWl0KSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93KCkpOwotfQotCiB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewog
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsaXAocmVjdCkpOwpAQCAtMzcxLDE0ICszMjEs
OSBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aEdyYWRpZW50
KERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcgogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVt
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBvc2l0ZWRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwg
YmxlbmRNb2RlKSk7CisgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
KHJlY3QsIGNvbG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5oCmluZGV4IDNiYmFmNzY1ZDA1ZjQ0YWJmNGQ5NjFlNzY2Y2U2NTQ2OThl
ZGUyOTQuLjgxODg5NjZhZmZhNzA5ZTZmZDBhMzFiZmNhNmMzZTcxODU2NWM1OGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtNTksMjAgKzU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2F2ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlKTsKLSAgICB2b2lkIHNj
YWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgY29uY2F0ZW5hdGVDVE0o
Y29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBzZXRJbmxpbmVGaWxs
Q29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmKTsKICAgICB2
b2lkIHNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVT
dHJva2VDb2xvciYmKTsKICAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CiAgICAg
dm9pZCBzZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUmJik7Ci0gICAgdm9p
ZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApOwotICAgIHZvaWQgc2V0TGluZURhc2goV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYpOwotICAgIHZvaWQgc2V0TGluZUpvaW4o
V2ViQ29yZTo6TGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0gICAg
dm9pZCBjbGVhclNoYWRvdygpOwogICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAg
dm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKQEAgLTk3LDgg
Kzg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoR3JhZGll
bnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50JiYpOwotICAgIHZv
aWQgZmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5k
TW9kZSk7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogICAgIHZvaWQgZmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KaW5kZXggMjgwMmZmZThmODM5N2Mw
ZWQ0ZGYxMjFhMDE3ZmU3ODEwOGZmNmMyMC4uNDE0YzMxYTEzMjBjMGIyZTc4NmJjOGQ5ZjY1OTgx
MDJkODcwZjQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMu
aW4KQEAgLTI1LDQ3ICsyNSwzNSBAQAogbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgU2F2ZSgpCiAgICAgUmVzdG9yZSgpCi0g
ICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgUm90YXRlKGZsb2F0IGFuZ2xlKQot
ICAgIFNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZSBzY2FsZSkKLSAgICBTZXRDVE0oV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIGN0bSkKLSAgICBDb25jYXRlbmF0ZUNUTShXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gY3RtKQorCiAgICAgU2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVGaWxsQ29sb3IgaXRlbSkKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3IgaXRlbSkKICAgICBTZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIFNldFN0YXRlKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRTdGF0ZSBpdGVtKQotICAgIFNldExpbmVDYXAoZW51bTp1aW50OF90IFdl
YkNvcmU6OkxpbmVDYXAgbGluZUNhcCkKLSAgICBTZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZURhc2ggaXRlbSkKLSAgICBTZXRMaW5lSm9pbihlbnVtOnVpbnQ4X3QgV2Vi
Q29yZTo6TGluZUpvaW4gbGluZUpvaW4pCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkK
LSAgICBDbGVhclNoYWRvdygpCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVybigp
CisgICAgQXBwbHlGaWxsUGF0dGVybigpCisjZW5kaWYKKyAgICBBcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKKwogICAgIENsaXAoV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QpCisgICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgQ2xpcE91dChXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQogICAgIENsaXBPdXRUb1BhdGgoV2ViQ29yZTo6
UGF0aCBwYXRoKQotICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90
IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQotICAgIERyYXdHbHlwaHMoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHMgaXRlbSkKLSAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNl
SW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6
OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIpCi0gICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6
OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBz
dHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBEcmF3TmF0
aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRp
ZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRl
c3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdl
UGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd1N5c3RlbUltYWdlKFJlZjxXZWJDb3Jl
OjpTeXN0ZW1JbWFnZT4gc3lzdGVtSW1hZ2UsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlv
blJlY3QpCi0gICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3Jl
OjpGbG9hdFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0s
IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBz
dHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBCZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KQotICAgIERyYXdSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCi0gICAgRHJhd0xpbmUoV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDEsIFdlYkNvcmU6
OkZsb2F0UG9pbnQgcG9pbnQyKQotICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgRHJhd0VsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJl
Y3QpCi0gICAgRHJhd1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIERyYXdGb2N1c1JpbmdQ
YXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29y
ZTo6Q29sb3IgY29sb3IpCi0gICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpG
bG9hdFJlY3Q+IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xv
ciBjb2xvcikKKyAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJl
Y3QgZGVzdGluYXRpb25SZWN0KQorCisgICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KQorCiAgICAgRmlsbFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAgICAgRmlsbFJl
Y3RXaXRoQ29sb3IoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9y
KQogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhHcmFkaWVudCBpdGVtKQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpD
b21wb3NpdGVPcGVyYXRvciBvcCwgZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9kZSBibGVu
ZE1vZGUpCi0gICAgRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgcmVj
dCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVuZE1vZGUg
YmxlbmRNb2RlKQorICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0
IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJvdW5k
ZWRIb2xlUmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBGaWxsRWxsaXBzZShXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBG
aWxsTGluZShzdHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBGaWxsQXJjKHN0cnVj
dCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC03MywxMSArNjEsMTAgQEAgbWVzc2FnZXMgLT4g
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgRmls
bEJlemllckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRp
ZgogICAgIEZpbGxQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBGaWxsRWxsaXBzZShXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLSAgICBU
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9y
U3BhY2UpCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRp
ZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCisKICAgICBT
dHJva2VSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisKKyAg
ICBTdHJva2VFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogICAgIFN0cm9rZUxpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRh
dGEpCiAgICAgU3Ryb2tlQXJjKHN0cnVjdCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC04NSwx
MyArNzIsMzEgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZD
b3VudGVkIFN0cmVhbSB7CiAgICAgU3Ryb2tlQmV6aWVyQ3VydmUoc3RydWN0IFdlYkNvcmU6OkJl
emllckN1cnZlRGF0YSBkYXRhKQogI2VuZGlmCiAgICAgU3Ryb2tlUGF0aChXZWJDb3JlOjpQYXRo
IHBhdGgpCi0gICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBD
bGVhclJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0jaWYgVVNFKENHKQotICAgIEFwcGx5
U3Ryb2tlUGF0dGVybigpCi0gICAgQXBwbHlGaWxsUGF0dGVybigpCisKKyAgICBEcmF3UmVjdChX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIERyYXdM
aW5lKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50
MikKKworICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIERyYXdQ
YXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKKworICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNvcmU6
OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29s
b3IpCisgICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKwor
ICAgIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZs
b2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlcikKKyAg
ICBEcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCwg
V2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyBvcHRpb25zKQorICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVt
SW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQor
ICAgIERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUgaW1hZ2VTaXplLCBXZWJDb3JlOjpG
bG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3UGF0dGVybihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB0aWxlUmVjdCwgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwaGFzZSwg
V2ViQ29yZTo6RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyBvcHRpb25zKQorI2lmIEVOQUJMRShWSURFTykKKyAgICBQYWludEZyYW1lRm9yTWVk
aWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZs
b2F0UmVjdCBkZXN0aW5hdGlvbikKICNlbmRpZgotICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgc2NhbGVGYWN0b3IpCisKKyAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3R2x5cGhzIGl0ZW0pCisgICAgRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCBpdGVtKQorICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKKworICAgIENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQorICAgIFRy
YW5zZm9ybVRvQ29sb3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JT
cGFjZSkKICAgICBGbHVzaENvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2Nh
aXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCAyMzNmMWQ3MDFmMzhkNjYwMWI5YTgz
MmIzMDgzNjBjY2Q5ZDExZTgwLi45N2I1ZTYzZjE1YTgzMWZlNGVlMDVhMWFlYjMyODdjYzBiZDcx
OWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRt
YXBDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0
bWFwQ2Fpcm8uY3BwCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWlu
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNjYWxlRmFjdG9yLCBjb25zdCBJCiAK
ICAgICBBU1NFUlQoY29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3Rh
dGUgPSBjb250ZXh0LnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdTdXJmYWNlKCpjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3U3VyZmFjZSgqY29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHN0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSwgc3RhdGUuYWxwaGEoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSk7CiB9CiAKIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
Q2Fpcm9TdXJmYWNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
LmNwcAppbmRleCA4NTc3Y2JiZGU2ZDM5MDFkMzQ3MDc2MWVkMzBmNzlkOThlODJiOThkLi42Y2Zi
YWJjYTdiY2ZiZWRjNTk1NDgzZThlZWIxZDVhYjEyMDk2NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCkBAIC0zMiwzNiArMzIsMjEgQEAKICNpbmNs
dWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9NZWRpYVBsYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkmIHJlbmRlcmluZ0JhY2tlbmQsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0
cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogRGlzcGxheUxpc3Q6
OlJlY29yZGVyKHsgfSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0ds
eXBocykKKyAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcihpbml0aWFsQ2xpcCwgaW5pdGlhbENU
TSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50
aWZpZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpCiAgICAgLCBt
X2ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKQogICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kKHJlbmRl
cmluZ0JhY2tlbmQpCiB7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNv
bnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2Zvcm1Ub0NvbG9y
U3BhY2UoY29sb3JTcGFjZSkpOwotfQotCiBSZW5kZXJpbmdNb2RlIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXIgPyBtX2ltYWdlQnVmZmVyLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOwpAQCAtNzcsMzEgKzYyLDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFJlc3RvcmUoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2xhdGUo
eCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
Um90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlJvdGF0ZShhbmdsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTY2FsZShzY2FsZSkp
OwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldENUTSh0cmFuc2Zvcm0pKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENvbmNhdGVuYXRlQ1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNvbmNhdGVuYXRlQ1RNKHRyYW5zZm9ybSkpOwotfQot
CiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0SW5saW5lRmls
bENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldElubGluZUZpbGxDb2xvcihEaXNwbGF5TGlzdDo6U2V0
SW5saW5lRmlsbENvbG9yIHsgY29sb3IgfSkpOwpAQCAtMTE3LDkyICs3NywyNiBAQCB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZs
b2F0IHRoaWNrbmVzcykKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpTZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZs
YWdzKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNl
dFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7IHN0YXRlLCBmbGFncyB9KSk7Ci19Ci0KLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lQ2FwKExpbmVD
YXAgbGluZUNhcCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpTZXRMaW5lQ2FwKGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgYXJyYXksIGZs
b2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6U2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIHsgYXJyYXksIGRh
c2hPZmZzZXQgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUpvaW4obGluZUpvaW4pKTsKLX0K
LQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldE1pdGVyTGlt
aXQoZmxvYXQgbGltaXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyU2hhZG93KCkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Q2xpcChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0KHJlY3QpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xp
cFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGRlc3RpbmF0aW9uUmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkp
OwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0
ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlk
ZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdlKQotICAgICAgICBpZGVudGlmaWVyID0gc291
cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOwotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdU
Rk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2Uo
UmVmPEZpbHRlcj4geyBmaWx0ZXIgfSkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUgeyBzdGF0ZSB9
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0
IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdHbHlwaHMoRGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHMgeyBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9j
YWxBbmNob3IsIG1vZGUgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZl
SW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCisj
aWYgVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFw
cGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKIH0KIAotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1J
bWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4o
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdT
eXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKIH0K
KyNlbmRpZiAvLyBVU0UoQ0cpCiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVu
dGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFnZUlkZW50
aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0
aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFw
cGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSkKQEAgLTIxNSw0NCArMTA5LDM0IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIHdpZHRoKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZShwb2ludDEs
IHBvaW50MikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25z
dCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdM
aW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBibG9ja0xvY2F0aW9u
LCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyB9
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcChy
ZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsKIH0KIAotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RWxsaXBzZShyZWN0KSk7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChyZWN0KSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0aChj
b25zdCBQYXRoJiBwYXRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dFRvUGF0aChwYXRoKSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9j
dXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpLCBkZXN0aW5hdGlvblJlY3QpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29s
b3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVh
clJlY3QocmVjdCkpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjcwLDIzICsxNTQsMjIg
QEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0
aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQgeyByZWN0LCBncmFkaWVudCB9KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBC
bGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBtb2RlKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5kZWRS
ZWN0KHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBtb2RlKQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRlZFJlY3Qocm91bmRlZFJlY3QsIGNvbG9yLCBt
b2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxFbGxpcHNlKHJlY3QpKTsKIH0KIAog
I2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGRhdGEpCiB7CiAgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbExpbmUoZGF0YSkp
OwpAQCAtMzA2LDcgKzE4OSw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhCiB7CiAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEJlemllckN1cnZlKGRh
dGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKQEAgLTMxNCwyMyArMTk2LDE3IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxQYXRoKHBhdGgpKTsKIH0KIAotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBs
YXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigpLCBk
ZXN0aW5hdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OlN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlUmVjdChyZWN0LCB3
aWR0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0
cm9rZUVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0K
IHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VMaW5lKGNv
bnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlN0cm9rZUxpbmUoZGF0YSkpOwpAQCAtMzUwLDcgKzIyNiw2IEBAIHZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShj
b25zdCBCZXppZXJDdXJ2ZURhCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6U3Ryb2tlQmV6aWVyQ3VydmUoZGF0YSkpOwogfQotCiAjZW5kaWYgLy8gRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNTgsMzMgKzIzMyw4
NCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlN0cm9rZVBhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlRWxsaXBzZShyZWN0KSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1JlY3Qo
cmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyUmVjdChyZWN0KSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQx
LCBwb2ludDIpKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0VsbGlwc2Uo
cmVjdCkpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
QXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZp
bGxQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcikpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7
Cit9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihz
Y2FsZUZhY3RvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZp
bHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkKKyAgICAgICAgaWRlbnRp
ZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVy
UmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRp
ZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworfQorCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5
c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
Cit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1N5
c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpKTsKK30KKwordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFnZUlkZW50aWZp
ZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cykpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIg
aWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9yTWVkaWEoaWRl
bnRpZmllciwgZGVzdGluYXRpb24pKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9u
dFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsKK30KKwordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmVzRm9yVGV4dChEaXNw
bGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9p
bnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzIH0pKTsKK30KKwor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSYgc3R5bGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOwogfQogCiBi
b29sIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoTmF0
aXZlSW1hZ2UmIGltYWdlKQpAQCAtNDM0LDExICszNjAsNiBAQCBib29sIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoRm9udCYgZm9udCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNo
Q29udGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRleHQo
aWRlbnRpZmllcikpOwotfQotCiBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JT
cGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAogewogICAgIGlm
IChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkgewpAQCAtNDY0LDYgKzM4NSwyMSBAQCBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y3JlYXRl
QWxpZ25lZEltYWdlQnVmZmVyKGNvbgogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0
ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3BhY2UsIHJlbmRl
cmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkp
OworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9D
b2xvclNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFj
ZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFu
c2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KEdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRp
ZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkZsdXNoQ29udGV4dChpZGVudGlmaWVyKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCmluZGV4IDliMzNhMDY3ZmQxNmJjY2YxNDA0MmMx
OTc0ZGQ2OTE5NDIyNjI0NjguLmYyYWQ4ZDBhYTQ1ODU4OWFlZTgxOTA3ZDljOTA4OTZkMzRiNmY3
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaApAQCAtMzgs
NiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTsKIAogY2xhc3MgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5IDogcHVibGlj
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlciB7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKIHB1YmxpYzoKICAgICBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHkoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBocyA9IFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIH5SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHko
KSA9IGRlZmF1bHQ7CkBAIC01MCw2MyArNTEsMzkgQEAgcHVibGljOgogICAgIHZvaWQgZmx1c2hD
b250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllcikgZmluYWw7CiAK
IHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNlbmQoVCYmIG1l
c3NhZ2UpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsKLSAg
ICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwg
bV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwotICAgIH0KLQotICAgIGZyaWVuZCBjbGFz
cyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7Ci0KICAgICBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgcmVjb3JkU2F2ZSgp
IGZpbmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
VHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRl
KGZsb2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0o
Y29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKICAgICB2b2lkIHJlY29y
ZFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90PikgZmluYWw7CiAgICAg
dm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90Pikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxv
YXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihXZWJDb3Jl
OjpMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7CisgICAgdm9pZCByZWNv
cmRTZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGZpbmFsOwor
CisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7
CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKworICAg
IHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9p
ZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRD
bGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xp
cFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBmaW5hbDsKICAg
ICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxl
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNvcmU6
OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25z
dCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGUp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVm
ZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoV2ViQ29y
ZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHJl
Y29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5l
c0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBX
ZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFdlYkNvcmU6
OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFdl
YkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVm
ZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRo
Q29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBm
aW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRG
aWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2Rl
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVuZE1v
ZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOwogICAgIHZv
aWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
JikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQg
cmVjb3JkRmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZEZpbGxBcmMoY29uc3QgV2ViQ29yZTo6QXJjRGF0YSYpIGZpbmFsOwpAQCAtMTE0LDkg
KzkxLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3Qg
V2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29y
ZEZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZp
bGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBXZWJDb3JlOjpMaW5lRGF0YSYpIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IFdlYkNvcmU6OkFyY0RhdGEmKSBmaW5h
bDsKQEAgLTEyNCwxMyArMTAyLDI4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRTdHJva2VC
ZXppZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRp
ZgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVy
bigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworCisg
ICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2lu
dDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBXZWJDb3Jl
OjpQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3Jl
OjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdl
QnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3Jl
OjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVyJikgZmluYWw7CisgICAgdm9p
ZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShXZWJDb3JlOjpTeXN0ZW1JbWFnZSYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKKyAgICB2b2lkIHJl
Y29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgV2ViQ29y
ZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3Jl
OjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwogCiAgICAgYm9vbCByZWNv
cmRSZXNvdXJjZVVzZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpIGZpbmFsOwogICAgIGJvb2wgcmVj
b3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5hbDsKQEAgLTE0MSw2ICsx
MzQsMTggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0
ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJD
b3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRl
cmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZl
cj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6UmVuZGVyaW5nTWV0aG9kPikgY29uc3QgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgc2VuZChUJiYgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBtX25lZWRzRmx1c2ggPSB0cnVlOworICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQtPnNlbmRU
b1N0cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcik7
CisgICAgfQorCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBm
aW5hbDsKKwogICAgIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBtX2Rlc3Rp
bmF0aW9uQnVmZmVySWRlbnRpZmllcjsKICAgICBXZWFrUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVy
PiBtX2ltYWdlQnVmZmVyOwogICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
PiBtX3JlbmRlcmluZ0JhY2tlbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggMWQ2NDNiNmI0Mjg4ZDA4ZTAzOGM0NjI1
ZDA1NDlkZTY4YWYyYWE3Ny4uMDc5OTNiMzgwZjFlYTdkMzQ5ZGQ3ZWJmYzE2MGM4MDRkYWQ0M2Uz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcApAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmRyYXdS
ZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvCiAK
ICAgICAvLyBEcmF3IHdoaXRlIGZyYW1lcyBhcm91bmQgdGhlIGhvbGVzLgogICAgIC8vIFdlIGRv
dWJsZSB0aGUgdGhpY2tuZXNzIGJlY2F1c2UgaGFsZiBvZiB0aGUgc3Ryb2tlIHdpbGwgYmUgZXJh
c2VkIHdoZW4gd2UgY2xlYXIgdGhlIGhvbGVzLgotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFk
b3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFk
aXVzLCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3coeyBG
bG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMs
IHNoYWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xv
cjo6d2hpdGUpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVy
V2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiB3aGl0ZUZyYW1lUGF0aHMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5n
ZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91
bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCBmMTZmNzk2ZTA0N2U5OTE5NzJjMGVkMWY0
YWUxMTNjZTE2NTY1YzEwLi40OWUwMGJlMzM3ZWFmZWUxMjkzZWYwNzdhZGY2MTdjZGFlM2Q0YTE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRl
eHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2
b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92
ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogCiAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBncmFwaGljc0NvbnRl
eHQuc2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZz
ZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29udGV4
dC5zZXREcm9wU2hhZG93KHsgV2ViQ29yZTo6RmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRv
d09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAgICBncmFwaGlj
c0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRDb2xvcik7CiAgICAgZ3JhcGhpY3NDb250ZXh0
LnNldFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JCb3JkZXJXaWR0aCAqIDIpOwogICAgIGZvciAo
YXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlOTdjMjBhNGZmNWJlNDFkOWMzMjA1N2M1MDgxY2Zm
YzRiODFhNGE2Li43YjA0NDA2N2I2OWEzNWE2ZmNmZWUwMTY2NDZjYjI5MmE0NTAzZDcxIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMjItMDMtMTUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6
aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcDoKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9j
Zy9HcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorCiAyMDIyLTAzLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4K
IAogICAgICAgICBbZ2l0LXdlYmtpdF0gSGFuZGxlIGNvbXBhcmluZyBVc2VyIGFuZCBDb250cmli
dXRvciB0byBOb25lCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NH
LmNwcAppbmRleCA4ZTQxYzVhNzNhZTM2ODRjZWRkZjFmOTRmOWYxNzE4OTUzNTE0YzlmLi5lYmU2
NDQ4NzFlMjhmNTE5Y2QyNjEyMGI4YTgyNzg4NmMwMTkwMmJmIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRl
c3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgVEVTVChC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIEJhc2ljKQogICAgIEdyYXBoaWNzQ29udGV4
dENHIHByaW1hcnlDb250ZXh0KHByaW1hcnlDR0NvbnRleHQuZ2V0KCkpOwogCiAgICAgSW5NZW1v
cnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29u
dGV4dChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250
ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChkaXNw
bGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwog
CiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29u
ZGFyeUNvbnRleHQpOwogCkBAIC05MCwxMCArOTAsMTAgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0VGVzdHMsIEJhc2ljKQogVEVTVChCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVz
dHMsIFRleHQpCiB7CiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBwcmltYXJ5RGlzcGxheUxpc3Q7
Ci0gICAgUmVjb3JkZXJJbXBsIHByaW1hcnlDb250ZXh0KHByaW1hcnlEaXNwbGF5TGlzdCwgeyB9
LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAg
ICBSZWNvcmRlckltcGwgcHJpbWFyeUNvbnRleHQocHJpbWFyeURpc3BsYXlMaXN0LCBGbG9hdFJl
Y3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBJbk1lbW9yeURp
c3BsYXlMaXN0IHNlY29uZGFyeURpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRh
cnlDb250ZXh0KHNlY29uZGFyeURpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250
ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRh
cnlDb250ZXh0KHNlY29uZGFyeURpc3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdp
ZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0
eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKQEAgLTIwMSw3ICsyMDEsNyBA
QCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgQm9yZGVycykKICAgICBHcmFw
aGljc0NvbnRleHRDRyBwcmltYXJ5Q29udGV4dChwcmltYXJ5Q0dDb250ZXh0LmdldCgpKTsKIAog
ICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNl
Y29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRX
aWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNv
bnRleHQoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRI
ZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250
ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtMjI4LDcgKzIyOCw3IEBAIFRFU1QoQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUcmFuc2Zvcm1lZENsaXApCiAgICAgR3JhcGhpY3ND
b250ZXh0JiBwcmltYXJ5Q29udGV4dCA9IHByaW1hcnlDb250ZXh0Q0c7CiAKICAgICBJbk1lbW9y
eURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250
ZXh0REwoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgeyB9KTsK
KyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCBGbG9hdFJl
Y3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBHcmFwaGljc0NvbnRleHQmIHNlY29uZGFyeUNvbnRl
eHQgPSBzZWNvbmRhcnlDb250ZXh0REw7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CkBAIC0yODcsMTUgKzI4Nywx
NSBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcikKICAgICBHcmFwaGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0ID0gcHJpbWFyeUNv
bnRleHRDRzsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVj
b3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHRETChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3Qo
MCwgMCwgMTAwLCAxMDApLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0
REwoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIEdyYXBoaWNz
Q29udGV4dCYgc2Vjb25kYXJ5Q29udGV4dCA9IHNlY29uZGFyeUNvbnRleHRETDsKIAogICAgIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250
ZXh0KTsKIAogICAgIGN0eC5hcHBseURldmljZVNjYWxlRmFjdG9yKDIpOwogCi0gICAgYXV0byBw
cmltYXJ5Q1RNID0gcHJpbWFyeUNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVk
ZURldmljZVNjYWxlOjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAgICBhdXRvIHNl
Y29uZGFyeUNUTSA9IHNlY29uZGFyeUNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5j
bHVkZURldmljZVNjYWxlOjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBhdXRv
IHByaW1hcnlDVE0gPSBwcmltYXJ5Q29udGV4dC5nZXRDVE0oKTsKKyAgICBhdXRvIHNlY29uZGFy
eUNUTSA9IHNlY29uZGFyeUNvbnRleHQuZ2V0Q1RNKCk7CiAKICAgICBFWFBFQ1RfRVEocHJpbWFy
eUNUTS54U2NhbGUoKSwgc2Vjb25kYXJ5Q1RNLnhTY2FsZSgpKTsKICAgICBFWFBFQ1RfRVEocHJp
bWFyeUNUTS55U2NhbGUoKSwgc2Vjb25kYXJ5Q1RNLnlTY2FsZSgpKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0c0NH
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRl
eHRUZXN0c0NHLmNwcAppbmRleCAyNDczNTgwZjE5MGUwZmQ2NzRjMzY3ZGE0N2M5ZjE5MmJhMjQ4
NWU0Li4yMTVjMTdjNjY1N2FlZGE2YTZlMmNkMGFlMGM5YzkyNmYzYmQ4MmIwIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvR3JhcGhpY3NDb250ZXh0VGVz
dHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0dyYXBo
aWNzQ29udGV4dFRlc3RzQ0cuY3BwCkBAIC01Miw3ICs1Miw3IEBAIFRFU1QoR3JhcGhpY3NDb250
ZXh0VGVzdHMsIERyYXdOYXRpdmVJbWFnZURvZXNOb3RMZWFrQ29tcG9zaXRlT3BlcmF0b3IpCiAg
ICAgR3JhcGhpY3NDb250ZXh0Q0cgY3R4KGNnQ29udGV4dC5nZXQoKSk7CiAKICAgICBFWFBFQ1Rf
RVEoY3R4LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zl
cik7Ci0gICAgRVhQRUNUX0VRKGN0eC5ibGVuZE1vZGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpO
b3JtYWwpOworICAgIEVYUEVDVF9FUShjdHguYmxlbmRNb2RlKCksIEJsZW5kTW9kZTo6Tm9ybWFs
KTsKIAogICAgIGF1dG8gZ3JlZW5QaXhlbENHID0gZ3JlZW5JbWFnZSgpOwogICAgIGF1dG8gZ3Jl
ZW5QaXhlbE5hdGl2ZSA9IE5hdGl2ZUltYWdlOjpjcmVhdGUoZ3JlZW5QaXhlbENHLmdldCgpKTsK
QEAgLTcxLDcgKzcxLDcgQEAgVEVTVChHcmFwaGljc0NvbnRleHRUZXN0cywgRHJhd05hdGl2ZUlt
YWdlRG9lc05vdExlYWtDb21wb3NpdGVPcGVyYXRvcikKICAgICBFWFBFQ1RfRVEocHJpbWFyeURh
dGFbMl0sIDApOwogCiAgICAgRVhQRUNUX0VRKGN0eC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIpOwotICAgIEVYUEVDVF9FUShjdHguYmxlbmRNb2Rl
T3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICBFWFBFQ1RfRVEoY3R4LmJsZW5k
TW9kZSgpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA1MTc3ZWQ5Mjk4MGRkOGQ0YmE0YmYzYWYzZDE0MTA2YTYyZmQ2Yjg3Li40
NzQ4ZmY1YmJmYzU0ZTk4ZTkzNTIzMjdmNmMyNmI4NzMyODdkNGRiIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMjItMDMtMTUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6
aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRl
cy1zaGFkb3ctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5j
bHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2xh
eWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvcmVw
bGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMi0wMy0xNCAgQW50b2lu
ZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbbW9kZWxdIDxtb2RlbCBp
bnRlcmFjdGl2ZT4gZG9lc24ndCBhbGxvdyBtb2RlbCB0byBiZSByb3RhdGVkIG9uIGlPUwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ct
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CmluZGV4IDUxMWI3YzBjNTRkMzMyMTZiN2M2ZWFmMDQzYTc1YzE2
NzY2ZDA0MjcuLmRiZjU0YjNlYTIwNGUxOTI0YmQ0MzVkNTE3MzZkYzczNDc3MDJjZmYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVz
LXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTEsMTcgKzEsMTMgQEAKIAotKHRyYW5zbGF0ZQotICAo
eCAwLjAwKQotICAoeSAwLjAwKSkKIChzYXZlKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdz
IDUxMikKLSAgKHNoYWRvdy1ibHVyIDEyLjAwKQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBo
ZWlnaHQ9MjApCi0gIChzaGFkb3ctY29sb3IgIzAwMDAwMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2Fj
eS1yYWRpdXMgMCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QKKyAgKGNoYW5nZS1mbGFncyBbZHJv
cC1zaGFkb3ddKQorICAoZHJvcC1zaGFkb3cKKyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBo
ZWlnaHQ9MjApCisgICAgKHNoYWRvdy1ibHVyIDEyLjAwKQorICAgIChzaGFkb3ctY29sb3IgIzAw
MDAwMCkKKyAgICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkpCisoZmlsbC1yZWN0LXdp
dGgtY29sb3IKICAgKHJlY3QgYXQgKDUwLDUwKSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAw
MEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUg
bm9ybWFsKSBleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCisgIChjb2xvciAjMDAwMEZG
KSBleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5z
Zm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IDM4NmUzOTQxMTg1ZjA5YTNjNjhlYzZjMmFlODhkZjEx
YzcwYjBhNjkuLjVmNzhiOGMzNTA1YzllODAzOTliZDYwNWE5YmU5NTVhYjA5YjcwNWUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jt
cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNs
dWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMSwyMSArMSwxNCBAQAogCi0odHJhbnNs
YXRlCi0gICh4IDAuMDApCi0gICh5IDIyLjAwKSkKLShjb25jYXRlbnRhdGUtY3RtCi0gIChjdG0g
e209KCgwLjg3LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwtMTguMzApfSkpCiAoc2F2ZSkK
IChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyA1MTIpCi0gIChzaGFkb3ctYmx1ciAxMi4wMCkK
LSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93LWNvbG9yICMw
MDAwMDApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQotKGZpbGwtY29tcG9zaXRl
ZC1yZWN0CisgIChjaGFuZ2UtZmxhZ3MgW2N0bSwgZHJvcC1zaGFkb3ddKQorICAoY3RtIHttPSgo
MC44NywwLjUwKSgtMC41MCwwLjg3KSkgdD0oODEuNzAsMy43MCl9KQorICAoZHJvcC1zaGFkb3cK
KyAgICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCisgICAgKHNoYWRvdy1ibHVy
IDEyLjAwKQorICAgIChzaGFkb3ctY29sb3IgIzAwMDAwMCkKKyAgICAoc2hhZG93cy11c2UtbGVn
YWN5LXJhZGl1cyAwKSkpCisoZmlsbC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDAsMCkg
c2l6ZSAxMDB4MTAwKQotICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24g
c291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg3LjE0LDAuMjAp
IHNpemUgMTg0LjU1eDE4NS42NSkKKyAgKGNvbG9yICMwMDAwRkYpIGV4dGVudCBhdCAoNy4xNCww
LjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAocmVzdG9yZSkKLShzZXQtY3RtCi0gIChzZXQtY3Rt
IHttPSgoMS4wMCwwLjAwKSgwLjAwLDEuMDApKSB0PSgwLjAwLDIyLjAwKX0pKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50
eHQKaW5kZXggYmMxN2I1MTE0OTlmODI1NmM5OTI5MGRhZTg2MTRkNDg5NGNhZjljYy4uNTQ2ZGM0
OTEyZjUyZDAzYTg5YWQ5MDY4NTcyYjI4ZWRjODAzMjI1MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0x
LDE2ICsxLDEyIEBACiAKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCi0oZmls
bC1jb21wb3NpdGVkLXJlY3QKKyhmaWxsLXJlY3Qtd2l0aC1jb2xvcgogICAocmVjdCBhdCAoMCww
KSBzaXplIDEwNHgxMDQpCi0gIChjb2xvciAjMDA4MDAwKQotICAoY29tcG9zaXRlLW9wZXJhdGlv
biBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDAsMCkgc2l6
ZSAxMDR4MTA0KQorICAoY29sb3IgIzAwODAwMCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEw
NCkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAzMjk2MCkKLSAgKGZpbGwtY29sb3IgIzAw
MDBGRikKLSAgKHN0cm9rZS1zdHlsZSAwKQorICAoY2hhbmdlLWZsYWdzIFtmaWxsLWJydXNoLCBz
dHJva2Utc3R5bGUsIHNob3VsZC1hbnRpYWxpYXNdKQorICAoZmlsbC1icnVzaAorICAgIChjb2xv
ciAjMDAwMEZGKSkKKyAgKHN0cm9rZS1zdHlsZSBOTy1TVFJPS0UpCiAgIChzaG91bGQtYW50aWFs
aWFzIDApKQogKGRyYXctcmVjdAogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgyKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBl
ZC1yZWN0LWV4cGVjdGVkLnR4dAppbmRleCBiYjU5M2QyMGY2ZGE2NDg2MjkyZDM2YzAyMjBlMmE5
ZDg3MmY4MmI5Li5iODYwNDhjYzA4Yzk5MzdlZjAwNzgyZTcxMDg5Y2FjYmM5OWM1MzMyIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAt
Y2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtMSwxNiArMSw4IEBACiByZWNvcmRlZDoKLSh0
cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCi0oZmlsbC1jb21wb3NpdGVkLXJlY3QK
KyhmaWxsLXJlY3Qtd2l0aC1jb2xvcgogICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkK
LSAgKGNvbG9yICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQot
ICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKKyAg
KGNvbG9yICMwMDAwRkYpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKIAogcmVwbGF5
ZWQ6CiAoCiAgIChjbGlwIGF0ICg1MTIsMCkgc2l6ZSA1MTJ4MjAwKQotKHRyYW5zbGF0ZQotICAo
eCAwLjAwKQotICAoeSAwLjAwKSkK
</data>
<flag name="commit-queue"
          id="482563"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454793</attachid>
            <date>2022-03-15 21:00:20 -0700</date>
            <delta_ts>2022-03-15 22:52:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220315210018.patch</filename>
            <type>text/plain</type>
            <size>674593</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uNjcwMTcwMzVhMjgzZWVkMzkzM2Y2OTQzNGI5YWI3
NmU2ZTczMTUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1NSBAQAorMjAyMi0wMy0xNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
QXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZy
b21QYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25Q
YWludGVyOjpwYWludEJveFNoYWRvdyBjb25zdCk6CisgICAgICAgICogaHRtbC9DdXN0b21QYWlu
dEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0
VW5jaGVja2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3TGF5b3V0U3RpcHBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdMYXlvdXRIYXRjaGluZyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c2V0SXNDQUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Up
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5h
bExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlw
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
QmlkaVRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRHJhd0dseXBoc1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRlY29uc3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkaWRBcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNjYWxlRmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGly
ZWN0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5n
ZXNGcm9tU3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQ
YXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbFBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdl
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnRE
ZXRlY3RlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENv
bnRlbnRmdWxQYWludERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVy
Z2VTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJn
ZVN0YXRlRGlmZnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNm
b3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6bGluZURhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmxpbmVKb2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptaXRlckxpbWl0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU1vZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb21wb3NpdGVPcGVyYXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpibGVuZE1vZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJvcFNoYWRvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd09mZnNldCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dDb2xvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyb3BTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1Zpc2libGVTaGFkb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNCbHVycmVkU2hhZG93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzU2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWxwaGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkQW50aWFsaWFz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50
aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU21vb3Ro
Rm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91
bGRTbW9vdGhGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3THVtaW5hbmNlTWFz
ayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyYXdMdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dXNlRGFya0Fw
cGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRV
c2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojppc0luVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5h
bExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXND
QUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ0FM
YXllckNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJT
Y29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpiZWdpbkxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3Bl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNz
Q29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lcjo6fkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25s
eVByaW1pdGl2ZUNoYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bWVyZ2VEaWZmcyk6CisgICAgICAgIChXZWJDb3JlOjpzdGF0ZUNoYW5nZU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmR1bXAgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmNoYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmRpZEFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6ZmlsbEJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmZpbGxSdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VUaGlja25lc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZVN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUNhcCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUNh
cCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZURhc2ggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5lSm9pbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUpvaW4p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1pdGVyTGltaXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldE1pdGVyTGlt
aXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNvbXBvc2l0ZU1v
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENv
bXBvc2l0ZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRy
b3BTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRUZXh0RHJhd2luZ01vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3VsZEFudGlhbGlhcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxk
QW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91
bGRTbW9vdGhGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0U2hvdWxkU21vb3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXREcmF3THVtaW5hbmNlTWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6dXNlRGFya0FwcGVhcmFuY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFVzZURh
cmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkZWNv
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
OjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6YmVnaW5MYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjp+VHJhbnNwYXJlbmN5
TGF5ZXJTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNr
Q2hlY2tlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXI6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
TW9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVEYXNoOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJvcFNoYWRvdzo6aXNCbHVycmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
b3BTaGFkb3c6Omhhc091dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRv
dzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmRlY29kZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6TnVsbEdyYXBoaWNzQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1
enouY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJydXNoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6U291
cmNlQnJ1c2gpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3Jt
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpncmFkaWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6cGF0dGVybiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQnJ1c2g6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpicnVzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmlzUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNo
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UZXh0Qm94SXRlcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvZmZzZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjppbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveEl0ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmN1cnJlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0
ZXJhdG9yOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJh
dG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3UGF0aFNo
YWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd0dseXBoc1NoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpTdGF0ZTo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpGaWxsU291
cmNlOjpGaWxsU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdHJva2VTb3VyY2U6
OlN0cm9rZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGU6OlNo
YWRvd1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZTo6aXNSZXF1
aXJlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUNhcCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fp
cm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1BsYXRm
b3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZp
bGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGlj
c0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlw
aHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0Zv
clRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0Q1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2Fw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNS
ZWNvcmRlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpD
R0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2
ZXI6On5DR0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0
YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZl
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250
ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3aW5n
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5k
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lQ2FwKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENHTGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q0dTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5
U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJv
a2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGlu
ZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseURl
dmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpm
aWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tl
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2FuVXNlU2hh
ZG93Qmx1ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9pbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6Q0dDb250ZXh0U3Rh
dGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVy
Ojp+Q0dDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29u
dGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dD
b250ZXh0U3RhdGVTYXZlcjo6ZGlkU2F2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6c3Ryb2tlQ29udGFpbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJlZ2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3SW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250KToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFs
Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6
OmNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlRmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVDVE0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93SXNDbGVhcmVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6
OnNhZmVDb3B5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6c2l6ZU9mSXRlbUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Omlz
RHJhd2luZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzSW5saW5lSXRl
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Rh
dGU6OlNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFp
bnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xh
dGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSb3RhdGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTY2FsZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldENUTTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6YXBwbHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjph
cHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZUpvaW46OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRNaXRlckxpbWl0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlOjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSb3VuZGVkUmVjdDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjphbmdsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YW1vdW50IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjp0cmFu
c2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNv
bmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
c3RhdGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXA6OmxpbmVDYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRhc2hBcnJheSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6
OmRhc2hPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVEYXNoOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxpbmVKb2luIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxp
bWl0OjpTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRNaXRlckxpbWl0OjptaXRlckxpbWl0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVk
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBv
c2l0ZWRSZWN0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbXBvc2l0ZU9w
ZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpnbG9iYWxCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRS
ZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6UmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Om1fZHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjphcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZv
ck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ds
eXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6On5SZWNvcmRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Y29udGFpbnNPbmx5SW5saW5lU3RhdGVD
aGFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
b25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3Rt
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6Q29udGV4dFN0YXRlOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpD
b250ZXh0U3RhdGU6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZWNvcmREcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRT
dGF0ZTo6Q29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjbG9uZUZvclNhdmUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6
OmNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZVN0YWNrIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6UmVjb3JkZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZEZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3Vy
dmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
U3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBs
OjpyZWNvcmRTdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERy
YXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1l
Rm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6ZXh0ZW50RnJvbUxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6On5SZWNvcmRlckltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkVHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRT
Y2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmRTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRNaXRlckxpbWl0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZENsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpSZWNv
cmRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjphcHBseVNldFN0YXRlSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2
ZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0b3JlKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFu
Z2VzKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Y2xpcCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwT3V0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNs
aXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGlu
ZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0Q1RNKTog
RGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpn
ZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09w
ZXJhdGlvblJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdH
bHlwaHNSZWNvcmRlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFk
b3dGb3JCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGRJbm5lclNoYWRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5n
L1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VTdHJva2VTdHlsZVRvRmlsbCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZTo6ZHJhdyk6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3Qg
YWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZDljYzNjNGZlNjll
OGJjZTVlMDFjODlhZjRkMDdjNzVhYzgwYzNlNi4uZTE2MmJlOGJmMTJiMzA4ZDA3MTIxZDg0OWQ0
YTczMzc4NDRmZTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAyMi0wMy0xNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRTdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5z
bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpz
ZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdCk6IERl
bGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBs
eURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0
aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1Jl
Y3RzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0dseXBocyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjptX3JlbmRlcmluZ0JhY2tlbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0
ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZURhc2gpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclNoYWRv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6c2VuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6CisK
IDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUg
cm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA2YmUwNjRlMzgz
ODkzN2ZkZTVlODUyODY5NWY0MTQwYzJkODNiMmRhLi44ODEzYmNkMWUxYmVhMzNmZTVkOTBhZTdk
NjY3NzhiMjdhYTdkMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjItMDMtMTUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6
aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJW
aWV3OjpwYWludEludG9CYWNraW5nU3RvcmUpOgorCiAyMDIyLTAzLTA0ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSG9tZSBsaW5rIG9uIHdlYXRoZXIuZ292IGlz
IG5vdCB3b3JraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA3MzY0NDJhMDhhNzQ1MDBhMzUyZjA0
YzJlMTA2ZDhjNDFlN2E0ZmM1Li5lMzdjNDg2ZDg1OTczOTQwZTVlNTc3N2MxOTZlYjkyYjdkMGIw
Y2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0OTEsNiArMTQ5MSw4IEBAIHNldChXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyQ2xpZW50LmgKQEAgLTE1NTAsNiArMTU1Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUF1ZGlvVHJh
Y2tDb25maWd1cmF0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUNvbG9yU3Bh
Y2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
LmgKQEAgLTE1NjgsNiArMTU3MSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hvdWxkTG9j
YWxpemVBeGlzTmFtZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Tb3VyY2VJbWFnZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA2
MmQ0M2U2YTNhOTMyMTVmZjA3NTdhNDc4ODRhOGI2Yzg0NGI4OTZkLi5kMDU2NWJlYzkyMWYwY2Q5
MTVlNDg4NWZkZjZiYTMyYTNhNmJkM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTE1Niw2ICsxNTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJl
ZUhvc3RDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW4uaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JTcGFjZUNHLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNWRlZTc1
NDA1MzU3OWY1NWI1NWYyZmU0YWQwZGQwYTY5ZGViZmQ0YS4uZTRmNjI3MTkwY2M4OWJlODZkMDY5
ODFmMzFkMDEzMzY1OTJlOTY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTY0MCw2
ICs2NDAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViVmlkZW9Db250YWluZXJMYXllci5oCiAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQ
b29sLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggNWM3YjczZWIyMDVlMDllYzI0NmUwMTFkMGE1MDJkY2Q0
YzFkY2E1MC4uZWI3NmExODZkMzQ4ZDRiMzY4OWYyMzRmM2RiZjYyODJhYWFkZTA1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTIwNDUsNiArMjA0NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcApAQCAtMjA4NCw2
ICsyMDg1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3Qu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnJ1c2guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9T
dHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggODI5NjJiYTA0ZTJmZmQ3ZmZhMGM2ZTYxZDljOWMyYzE3
YTVmNjQ2Ny4uYjU1YzVjMWM0MmUzMjk1NTcwZWQyNGM4NDBkYzNlNGYyZmQzMDJlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MjMzMSwxMCArMjMzMSwxMiBAQAogCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGMDVGODAyNTEyNDQy
RTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NT
UHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MUZDQjE3MDI3QkFCM0ZFMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQ0Ix
NkQyN0JBQjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAxNzgzQjI3RDU3RjlGMDA5QkVC
MUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0
YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZC
QTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVF
NTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMUI0OTc0MjUxMkJBM0IwMEZF
OUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1h
cEJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMw
QjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNDYwREQ3MjdDODZEQUQwMEQ1RjlG
NCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI0Njk2M0IyNzVDNUZBNjAwQTkxNTZBIC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1M0ZCODMyMTNCMUJCODAwQzQw
RDM0IC8qIENTU0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyNDY5NjNEMjc1QzYxNDQwMEE5MTU2QSAvKiBGaWx0ZXJFZmZlY3RWZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMTRC
OUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRTI3NUM2MTY3MDBB
OTE1NkEgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjRFRjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBGaWx0ZXJJbWFn
ZVZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yMzQyLDYgKzIzNDQsOSBAQAogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgwRDg0
MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIg
LyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI1NjA3OEUyNzlEMzRCNjAwN0QyREQzIC8qIEZF
SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
RjdFNzRGMjc5Q0VERTgwMEQ4MkQyRCAvKiBGRUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8q
IFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkIzNTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NTI3Q0RBODBF
MDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcyNkNERTIwMjc1OTczNTAwMEE0NDVCMiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NjYxQTIyNzU5NjBB
NTAwRTdERjlCIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8q
IFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNB
RTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1h
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTEzMTgsNiArMTEzMjMsOCBAQAogCQk3MUZDQjE2RDI3QkFCM0RGMDBFMDYzMUMgLyogRnJhbWVS
YXRlQWxpZ25lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZVJhdGVB
bGlnbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkNCMTZGMjdCQUIzRTAw
MEUwNjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZyYW1lUmF0ZUFsaWduZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2lu
dHMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFC
IC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0dDb250ZXh0U3RhdGVT
YXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjA2RDQzNTI3REFERUNBMDA0
MEZFQjIgLyogVGV4dEJveEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hJdGVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjExQjVENjI3NjUzNjgyMDA3NkZF
RjggLyogRmlsdGVyUmVzdWx0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBT
VkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1
ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENB
RDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVl
UHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzI3LDYgKzExMzM0
LDggQEAKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXJJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
NDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRN
aW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRN
aW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0
MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0
RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTM4OSw2ICsxMTM5OCwxMCBAQAogCQk3MkExM0FENTI3NERFNTRFMDBFMkE4OEUgLyog
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQWxwaGFT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBMTNBRDYy
NzRERTU3ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQTEzQUQ3Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VH
cmFwaGljU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0
d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEMyN0M5
RjkzRTAwRDI3QUUwIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQjM1MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUJydXNoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNvdXJjZUJydXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQjRFRjc0Mjc0RTIzMzMwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJCNEVGNzUyNzRFMjMzNDAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2Fy
ZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjdDMjc0RUUzN0YwMDI5M0My
RiAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZVZlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4MTAsNiArMjg4MjMsNyBAQAog
CQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0Nv
bnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENv
bG9yQ0cuY3BwICovLAogCQkJCUJDQUZFREIzMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNl
Q0cuY3BwICovLAogCQkJCUJDQUZFREIyMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cu
aCAqLywKQEAgLTI5MDQzLDYgKzI5MDU3LDkgQEAKIAkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlE
MDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRB
NDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAq
LywKIAkJCQk3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oICovLAorCQkJCTcyNDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZS5jcHAgKi8sCisJCQkJNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi8sCisJCQkJNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyog
R3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5IC8qIEdy
YXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhp
Y3NMYXllckNsaWVudC5oICovLApAQCAtMjkxNDMsNiArMjkxNjAsNyBAQAogCQkJCUJDQTU1OTEy
MjYzREJENzkwMDdGMTlCMyAvKiBQaXhlbEZvcm1hdC5oICovLAogCQkJCUNERDA4QUJGMjc3RTU0
RjAwMEVBMzc1NSAvKiBQbGF0Zm9ybUF1ZGlvVHJhY2tDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJ
QkMzRTYyNDIyNjU5NzkxNzAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oICovLAorCQkJ
CTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICov
LAogCQkJCTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJ
CQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywK
IAkJCQk1NTA2NDBBRDI0MDc1NkRBMDBBQUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tl
bmQuaCAqLywKQEAgLTI5MTY2LDYgKzI5MTg0LDggQEAKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAw
RDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkw
IC8qIFNoYWRvd0JsdXIuaCAqLywKIAkJCQkxQzREQjAyNDI3MzM5RTVFMDA3QjBBRDEgLyogU2hv
dWxkTG9jYWxpemVBeGlzTmFtZXMuaCAqLywKKwkJCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAg
LyogU291cmNlQnJ1c2guY3BwICovLAorCQkJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBT
b3VyY2VCcnVzaC5oICovLAogCQkJCTFERDEyN0FDMjU2RTNBODcwMEIyMjdENyAvKiBTb3VyY2VC
dWZmZXJQcml2YXRlLmNwcCAqLywKIAkJCQlDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291
cmNlQnVmZmVyUHJpdmF0ZS5oICovLAogCQkJCUNEQzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi8sCkBAIC0yOTE3Nyw2ICsyOTE5Nyw3IEBACiAJ
CQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVy
YXRvci5oICovLAogCQkJCTk1RTlGNDQ0MjdDOUEzOUIwMDk0NTMzNyAvKiBTeXN0ZW1JbWFnZS5o
ICovLAogCQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCisJCQkJ
NzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovLAogCQkJCTM3
NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLywKIAkJCQlBODI0QjQ2NDBF
MkVGMkVBMDA4MUE3QjcgLyogVGV4dFJ1bi5oICovLAogCQkJCUNEMUU3MzQ2MTY3QkM3OEUwMDlB
ODg1RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAgKi8sCkBAIC0zMzg3Myw2ICszMzg5
NCw3IEBACiAJCQkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRl
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8qIENl
cnRpZmljYXRlU3VtbWFyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5RjAw
OUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZG
RDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNzg1RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5lbENv
dW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDc5OCw2ICszNDgyMCw4IEBACiAJCQkJNDlD
N0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Qjk1Q0ZFQjI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAw
RTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUw
RjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzY3MDUsNiArMzY3MjksNyBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0
Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjU4MTg1NTI3Q0RBODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQ
bGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc3MDVDNzI1NTI3NkNEMDAxRDBD
OTQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQUYy
NDA3NTgyRDAwQUFFMDQ1IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM3Mzg2LDYgKzM3NDExLDcgQEAKIAkJCQk1MTBENEEzODEwMzE2NUVFMDA0OUVB
NTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFC
QUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1c2gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTY1MTdBOUQwMUIwMDI3NEU0MiAvKiBT
b3VyY2VCdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYxMzUwOTI0QzlGQ0EzMDA0
MzJFMUUgLyogU291cmNlQnVmZmVyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50
ZXIuY3BwCmluZGV4IDg1NmEzZGU1MDRkZWMwYmJmYTkwYWMxN2RlMzdmNTE1ZTE0ZDkyMDQuLjlk
OTM1YTZmZjMyMzBmM2Y0NmEyZWY1ZDdlYTEwMDEwYWU5ZTEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVy
LmNwcApAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVG
cm9tUGF0aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICAgICAg
ICAgIERhc2hBcnJheSBsaW5lRGFzaDsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNo
TGVuZ3RoKTsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hM
ZW5ndGgpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2go
eyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVz
IHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgQm94RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250
ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdpbiA9IGZpbGxSZWN0LnJlY3Qo
KS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBhdXRvIGFkanVzdGVkU2hhZG93
T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0
aW9uKCk7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVz
dGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNo
YWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldERyb3BTaGFkb3coeyBhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVl
KCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAKICAgICAg
ICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBv
cGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBz
byBzYXZlcyB0aW1lCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWlu
dGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hh
ZAogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQp
OwogICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZh
bHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNo
YWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVm
YXVsdCB9KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsK
ICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAppbmRleCBm
NGI5OGJhNjJlMTE5YTA3NzEzMTJkM2I4OGM0OTE5MzY4MzZlZTM3Li5lZTUwNGYwOGM0OWZjOGQ1
YjVhZWQ3MDJiZTIxN2YxYjA2ZmQ0ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRJbWFnZS5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFp
bnRJbWFnZTo6ZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjbwog
SW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RD
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUo
eyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAg
ICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRl
KGRlc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVj
dC5zaXplKCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKIAogICAgIC8vIEZhY3RvciBp
biB0aGUgZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0
IHJlc29sdXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29u
dGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRD
VE0oKTsKICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7
CiAgICAgZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAg
IEFmZmluZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCAwZTc4MDYzZTNhNDFjYmM2OTBmMGQwY2NiNzg4MTE3
ZGU2OTM4YTAyLi5kYmM5NTdjNTNkMDRhMzk2ZWFjNjRkNjdmZTZhMmIxN2U0NDhjNjYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcApAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCgpIGNvbnN0CiAgICAgRGFzaEFycmF5IGNv
bnZlcnRlZExpbmVEYXNoKHN0YXRlKCkubGluZURhc2guc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRlKCkubGluZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbnZl
cnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4oc3RhdGUoKS5s
aW5lRGFzaFtpXSk7Ci0gICAgYy0+c2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRl
KCkubGluZURhc2hPZmZzZXQpOworICAgIGMtPnNldExpbmVEYXNoKHsgV1RGTW92ZShjb252ZXJ0
ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KSB9
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxBbHBo
YShkb3VibGUgYWxwaGEpCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBv
cGUKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICgh
YykKICAgICAgICAgcmV0dXJuOwotICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxl
bmRNb2RlKTsKKyAgICBjLT5zZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzY2FsZShkb3VibGUgc3gsIGRv
dWJsZSBzeSkKQEAgLTExODYsNyArMTE4Niw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZG91CiAg
ICAgICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50
PihsaW5lRGFzaFtpXSk7Ci0gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goY29udmVydGVkTGlu
ZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICAgICAgY29udGV4dC5zZXRMaW5lRGFz
aCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUu
bGluZURhc2hPZmZzZXQpIH0pOwogICAgIH0pOwogfQogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChkb3VibGUgeCwgZG91
YmxlIHksIGRvdWJsZSB3aWR0aCwgZAogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAg
ICAgICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBj
b250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBjb250ZXh0LT5zZXREcm9wU2hh
ZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRp
dXNNb2RlOjpMZWdhY3kgfSk7CiAgICAgfQogICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9
IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTM2Myw5ICsxMzYzLDkgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3Vs
ZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09m
ZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNl
dC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdo
dCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRTaGFk
b3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kpOworICAgICAgICBjLT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAs
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiB9
CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3Mo
KSBjb25zdApAQCAtMjQzMiwxOSArMjQzMiwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGRvdQog
CiAgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0KDAsIDIgKiBtYXNrUmVjdC5oZWlnaHQoKSk7
CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBmbG9h
dCBzaGFkb3dSYWRpdXM7Ci0gICAgICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICAgICAg
ICAgIGMtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3Ip
OwotCiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChtYXNrUmVjdCk7Ci0gICAgICAg
ICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hhZG93UmFkaXVzICogMS40KTsKLSAgICAgICAgICAg
IHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQgKiAtMSk7CisgICAgICAgICAgICBhdXRvIGRy
b3BTaGFkb3cgPSBjLT5kcm9wU2hhZG93KCk7CisKKyAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5m
bGF0ZShkcm9wU2hhZG93LmJsdXJSYWRpdXMgKiAxLjQpOworICAgICAgICAgICAgc2hhZG93UmVj
dC5tb3ZlKGRyb3BTaGFkb3cub2Zmc2V0ICogLTEpOwogICAgICAgICAgICAgYy0+Y2xpcChzaGFk
b3dSZWN0KTsKIAotICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKKyAgICAgICAg
ICAgIGRyb3BTaGFkb3cub2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgICAgIGMtPnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7
CiAKICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xv
cihDb2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXkuY3BwCmluZGV4IDRmNjNhZGNlOTM5MTZkYjIzMjBlOTY3OGFhYmZlMGYzY2Q5OTc2MmIu
LjlhODAzYTQwOGQ4OGMyZmY0OGRkM2JlYTAyOTUxYjg3NTgwOThlMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTEyNDQsNyArMTI0NCw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRTdGlwcGxpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAg
ICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAg
IGNvbnRleHQuc2V0TGluZURhc2goeyAxLCBkZW5zaXR5IH0sIDEpOworICAgIGNvbnRleHQuc2V0
TGluZURhc2goeyB7IDEsIGRlbnNpdHkgfSwgMSB9KTsKIAogICAgIGRyYXdMYXlvdXRQYXR0ZXJu
KGNvbnRleHQsIHF1YWQsIGRlbnNpdHksIEZsaXA6Ok5vKTsKIH0KQEAgLTEyNTQsNyArMTI1NCw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHNhdmVyKGNvbnRleHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNSk7CiAg
ICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlKTsKLSAg
ICBjb250ZXh0LnNldExpbmVEYXNoKHsgMiwgMiB9LCAyKTsKKyAgICBjb250ZXh0LnNldExpbmVE
YXNoKHsgeyAyLCAyIH0sIDIgfSk7CiAKICAgICBjb25zdGV4cHIgYXV0byBkZWZhdWx0TGF5b3V0
SGF0Y2hTcGFjaW5nID0gMTI7CiAgICAgZHJhd0xheW91dFBhdHRlcm4oY29udGV4dCwgcXVhZCwg
ZGVmYXVsdExheW91dEhhdGNoU3BhY2luZywgZmxpcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKaW5kZXggYjU4OGY2ZmE0YTExZDc3MGMzYzg0OTk5NjcyZDdkN2VmZjQzMmM0Zi4uOGExN2Fl
MzcwYWUzNmIwMGViYjdhOWIyZTA3NTUxODA2YmVkMTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcApAQCAtNDMwMyw3ICs0MzAzLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXQKICAg
ICBpZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwog
Ci0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGZyYW1lUmVjdCgpLCBwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRlbnRzKCkuCiAgICAgICAgIHBhaW50
Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50Vmlz
aWJsZVJlY3QpKTsKQEAgLTQ4NTQsNyArNDg1NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQ
YWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0
CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgot
ICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29u
dGV4dChmcmFtZVJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAKaW5kZXggZGM2MGU3
NWIyOTViYzUzYTU5YTQ3MDJhMTk5ODdjMDNhMTFmOTVhMS4uYWM5MDkxMTM3M2FmZTVmNjI2OTc1
NDA2YmNjYzM4MzUwZDlkMzQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fk
d2FpdGEvVGhlbWVBZHdhaXRhLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgVGhlbWVBZHdh
aXRhOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBQ
YXRoJiBwYXRoCiAKICAgICBncmFwaGljc0NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihj
b2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNr
bmVzcyhmb2N1c0xpbmVXaWR0aCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsg
Zm9jdXNMaW5lV2lkdGgsIDIgKiBmb2N1c0xpbmVXaWR0aCB9LCAwKTsKKyAgICBncmFwaGljc0Nv
bnRleHQuc2V0TGluZURhc2goeyB7IGZvY3VzTGluZVdpZHRoLCAyICogZm9jdXNMaW5lV2lkdGgg
fSwgMCB9KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZUNhcChMaW5lQ2FwOjpTcXVhcmUp
OwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lSm9pbihMaW5lSm9pbjo6TWl0ZXIpOwogICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xvci5vcGFxdWVDb2xvcigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOWZkMjVkODBhZDEyZGM5MWRkMTFmOTE1OThm
YzZjOGVmYTRjYjJhMi4uMjg5NTc0YjljMWU0MGNkNzEyYjRlMmI2ZTllYjM0YjAxNzI5ZGZjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTI5LDcgKzI5LDggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0LCBHcmFwaGljc0NvbnRl
eHQmIHNlY29uZGFyeUNvbnRleHQpCi0gICAgOiBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250
ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KHByaW1hcnlDb250ZXh0LmNsaXBCb3VuZHMoKSwg
eyB9LCBwcmltYXJ5Q29udGV4dC5nZXRDVE0oKSkKKyAgICAsIG1fcHJpbWFyeUNvbnRleHQocHJp
bWFyeUNvbnRleHQpCiAgICAgLCBtX3NlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5Q29udGV4dCkK
IHsKIH0KQEAgLTQ4LDYgKzQ5LDMwIEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBt
X3ByaW1hcnlDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogfQogCisjaWYgVVNFKENHKQorYm9v
bCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Cit9CisKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlz
Q0FMYXllckNvbnRleHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250
ZXh0KGlzQ0FMYXllckNvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJc0NBTGF5
ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRl
eHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0Fj
Y2VsZXJhdGVkQ29udGV4dCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKK30KKyNlbmRpZgorCitSZW5kZXJpbmdN
b2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKK30KKwogdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKIHsKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgbm90IHVzaW5nIHRoZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0J3Mgc3RhdGUgc3RhY2sg
YXQgYWxsLApAQCAtNjQsMjIgKzg5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQb2lu
dCYgdG8pCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9
CiAKICNpZiBVU0UoQ0cpCkBAIC05NiwyMiArMTA5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCiB9CiAjZW5kaWYKIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRy
YXdQYXRoKHBhdGgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChw
YXRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IGZhY3RvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9wcmltYXJ5Q29u
dGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBA
IC0xMjYsMjIyICsxMjcsMTI2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBs
eURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0
KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUmVjdChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3RJ
bXBsKHJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
SW1wbChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIG1fcHJpbWFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5jbGVhclJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLSNp
ZiBVU0UoQ0cpCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNv
bnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRl
eHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLX0KLQotYm9vbCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Ci19Ci0KLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOwotfQotI2VuZGlm
Ci0KLVJlbmRlcmluZ01vZGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9k
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgp
OwotfQotCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKICAgICBtX3By
aW1hcnlDb250ZXh0LmNsaXAocmVjdCk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXAocmVj
dCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3By
aW1hcnlDb250ZXh0LmNsaXBPdXQocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBP
dXQocGF0aCk7Ci19Ci0KIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7CisgICAgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlw
UGF0aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBQYXRoKHBh
dGgsIHdpbmRSdWxlKTsKIH0KIAotSW50UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5jbGlwQm91
bmRzKCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZUNh
cChsaW5lQ2FwKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZUNhcChsaW5lQ2FwKTsK
KyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXQocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmNsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9m
ZnNldCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFz
aE9mZnNldCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQuc2V0TGluZUpvaW4obGluZUpvaW4pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRM
aW5lSm9pbihsaW5lSm9pbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZl
cihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxp
bWl0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRl
ckxpbWl0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0
KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFy
eUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwg
c2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKG5hdGl2ZUltYWdlLCBzZWxmU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCk7Cisg
ICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1J
bWFnZSwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVj
dChyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5h
dGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdHRlcm4obmF0
aXZlSW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgZ3Jh
ZGllbnQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBncmFkaWVudCk7
CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtX3ByaW1hcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGlu
YXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1h
cnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CiB9CiAKLUltYWdlRHJhd1Jlc3Vs
dCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2Uo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91
bmRlZEhvbGVSZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi1JbWFnZURy
YXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBo
UnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29u
dGV4dC5kcmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxl
RmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9y
LCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZmlsbEVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwotICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZmlsbFBhdGgocGF0aCk7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5z
Y2FsZShzY2FsZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNjYWxlKHNjYWxlKTsKKyAgICBt
X3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5yb3RhdGUoYW5n
bGVJblJhZGlhbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yb3RhdGUoYW5nbGVJblJhZGlh
bnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQog
ewotICAgIG1fcHJpbWFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOwotICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC50cmFuc2xhdGUoeCwgeSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRo
KHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwogfQogCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
bV9wcmltYXJ5Q29udGV4dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwg
Y29uc3QgRmxvYXRQb2ludCYgdG8pCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRDVE0odHJh
bnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZURldmljZVNj
YWxlKSBjb25zdAordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuZ2V0
Q1RNKGluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBz
ZShyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAK
LUZsb2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsK
LSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJv
dW5kaW5nTW9kZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM3
MCwyOSArMjc1LDU0IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvCiB9CiAjZW5kaWYKIAotRmxv
YXRTaXplIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKK3ZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhdXRvIHNpemUgPSBtX3By
aW1hcnlDb250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgZnJvbSwg
dG8pOwotICAgIHJldHVybiBzaXplOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVy
JiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIGZpbHRlclJlc3VsdHMpCiB7Ci0gICAgbV9wcmltYXJ5
Q29udGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9p
bnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3Vy
Y2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291
cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBj
YXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiB0bykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RW1waGFz
aXNNYXJrcyhjYXNjYWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdFbXBoYXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQs
IGZyb20sIHRvKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Jp
ZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3Qmlk
aVRleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVt
SW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihp
bWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJ
bWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5k
cmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0
ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5w
YWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CisgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQpAQCAtNDA3LDE2ICszMzcsOSBA
QCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LAogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIG1hcmtlclN0eWxlKTsKIH0KIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVy
bCwgcmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0
KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZv
clJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0CiB7
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0
KTsKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsK
IH0KIAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKQEAgLTQyNSwx
OCArMzQ4LDE2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QKICAgICBtX3NlY29uZGFyeUNvbnRl
eHQuYWRkRGVzdGluYXRpb25BdFBvaW50KG5hbWUsIHBvaW50KTsKIH0KIAotYm9vbCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAordm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFy
eUNvbnRleHQuc3VwcG9ydHNJbnRlcm5hbExpbmtzKCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5z
ZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgLy8gVGhpcyBjYWxscyB1cGRhdGVT
dGF0ZSgpIGluc3RlYWQgb2YgZGlkVXBkYXRlU3RhdGUoKSBzbyB0aGF0IGNoYW5nZXMKLSAgICAv
LyBhcmUgYWxzbyBhcHBsaWVkIHRvIGVhY2ggY29udGV4dCdzIEdyYXBoaWNzQ29udGV4dFN0YXRl
LCBzbyB0aGF0IGNvZGUKLSAgICAvLyBpbnRlcm5hbCB0byB0aGUgY2hpbGQgY29udGV4dHMgdGhh
dCByZWFkcyBmcm9tIHRoZSBzdGF0ZSBnZXRzIHRoZSByaWdodCB2YWx1ZXMuCi0gICAgbV9wcmlt
YXJ5Q29udGV4dC51cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC51cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
VVJMRm9yUmVjdCh1cmwsIHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JS
ZWN0KHVybCwgcmVjdCk7CiB9CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQpAQCAt
NDQ2LDUgKzM2NywxMCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRlcHJlY2F0ZWRQcml2YXRlQ29udAogfQogI2VuZGlmCiAKK0Zs
b2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5n
TW9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dC5oCmluZGV4IGY1OGIzNGM5MTQzNDJiNzM3NzcyN2MxMWE3M2I2ZDgyMThlMTU1NmYuLjdhMzdh
MTEzZGQ4MTVlYjNiOTU2MDc1MmQ5ZGM3MGViNWE4OTdjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0LmgKQEAgLTQzLDgzICs0Myw1NCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdDsKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250
ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJl
c3RvcmUoKSBmaW5hbDsKKyNpZiBVU0UoQ0cpCisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwog
Ci0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25l
c3MgPSAxKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFs
OworI2VuZGlmCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7
CiAKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAg
ICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQogICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
ZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBmYWN0b3IpIGZpbmFsOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpIGZpbmFsOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
IAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwot
Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0KLSNpZiBVU0UoQ0cpCi0g
ICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKCkgY29uc3QgZmluYWw7Ci0KICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6
RXZlbk9kZCkgZmluYWw7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotCiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpIGZpbmFsOwogCi0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBX
aW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7Ci0KLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25z
dCBmaW5hbDsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwot
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgZmluYWw7Ci0KLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9
KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdl
OjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pIGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0g
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91
bmRBbGxTaWRlcykgZmluYWw7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwogCisgICAg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7
CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0
IENvbG9yJikgZmluYWw7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTI3LDIzICs5OCwyNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jiwg
ZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgRmxvYXRT
aXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8g
PSBzdGQ6Om51bGxvcHQpIGZpbmFsOwotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNp
Z25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQp
IGZpbmFsOwotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWw7
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0
ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lm
IEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOworI2VuZGlmCiAKKyAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBm
aW5hbDsKLQogICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZv
clJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAgICB2b2lkIHNl
dERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotCiAgICAgYm9vbCBzdXBwb3J0c0ludGVybmFs
TGlua3MoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIHNldERl
c3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Cisg
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRp
bmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNF
KENBSVJPKQogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXgg
YmI0ZGFjMDE5YzViOWUxM2IxMzdhZTY5NGU0YmY2YjI3NmJmY2MwZC4uMWMxYjk2ZWM1Yjk4M2Nj
NWYxOGQ2ZmYxZmQyNTg1N2ZhOTQzYzQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcApAQCAt
OTAsNyArOTAsNyBAQCB2b2lkIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3Q3Jvc3NmYWRl
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIEltYWdlRHJhd1Jlc3VsdCBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQu
dHJhbnNsYXRlKGRzdFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9
IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAyNWEzZDNmZTg3NzMzMWRkYTM5NTc4MDEx
YjZkODkwZjIxMmM3MmU2Li4zYmNiNTA1YWYzYzI4MmY0MjIzMjVjZDdlMzAwNTM0ZmQ5Zjk5Y2I5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhz
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5
cGhzUmVjb3JkZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDI0ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdy
YWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVy
bi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
U3RhdGUuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CiAKLSNpZiBVU0UoQ09SRV9URVhUKQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KLSNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2lmIFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2Vsc2UKLSNpbmNs
dWRlIDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRmxvYXRQb2ludDsKQEAgLTYyLDc2ICs0OSwzMiBAQCBwdWJsaWM6CiAjaWYgVVNFKENP
UkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKICAgICB2b2lkIGRyYXdOYXRpdmVUZXh0KENURm9u
dFJlZiwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lUmVmLCBDR1JlY3QgbGluZVJlY3QpOwogCi0g
ICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVm
LCBDR1JlY3QpOwotICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYpOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBo
W10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIENHUmVjdCwg
Q0dJbWFnZVJlZik7CisgICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmKTsKKyAg
ICB2b2lkIHJlY29yZEVuZExheWVyKENHR1N0YXRlUmVmKTsKKyAgICB2b2lkIHJlY29yZERyYXdH
bHlwaHMoQ0dHU3RhdGVSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlv
bnNbXSwgc2l6ZV90IGNvdW50KTsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZShDR0dTdGF0ZVJl
ZiwgQ0dSZWN0LCBDR0ltYWdlUmVmKTsKICNlbmRpZgogCi0gICAgRGVjb25zdHJ1Y3REcmF3R2x5
cGhzIGRlY29uc3RydWN0RHJhd0dseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb25zdHJ1Y3RE
cmF3R2x5cGhzOyB9Ci0KIHByaXZhdGU6Ci0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JN
KFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRl
eHQoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25P
VFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFu
Y2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3T1RTVkdSdW4oY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBG
b250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSk7Ci0KLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYpOwotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHByZXBhcmVJbnRlcm5hbENvbnRleHQo
Y29uc3QgRm9udCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGNvbmNsdWRlSW50ZXJu
YWxDb250ZXh0KCk7CisgICAgdm9pZCBzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYsIEZvbnRT
bW9vdGhpbmdNb2RlKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KCk7CisgICAgdm9pZCByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKTsKIAotICAgIHZvaWQgdXBkYXRlRmlsbENv
bG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRy
KTsKLSAgICB2b2lkIHVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0g
bnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRyKTsKLSAgICB2b2lkIHVwZGF0ZUNUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBlbnVtIGNsYXNzIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
IHsKLSAgICAgICAgVW5zcGVjaWZpZWQsCi0gICAgICAgIFllcywKLSAgICAgICAgTm8KLSAgICB9
OwotICAgIHZvaWQgdXBkYXRlU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBm
bG9hdCBzaGFkb3dCbHVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKTsKLQotI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAg
dm9pZCB1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZik7Ci0jZW5kaWYKKyAgICB2b2lkIGRyYXdOb25P
VFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25P
VFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9v
d25lcjsKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fZGVzdGluYXRpb25Db250ZXh0OwogICAgIERl
Y29uc3RydWN0RHJhd0dseXBocyBtX2RlY29uc3RydWN0RHJhd0dseXBoczsKICAgICBEZXJpdmVG
b250RnJvbUNvbnRleHQgbV9kZXJpdmVGb250RnJvbUNvbnRleHQ7CiAKLSNpZiBVU0UoQ09SRV9U
RVhUKSAmJiAhUExBVEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1f
aW50ZXJuYWxDb250ZXh0OwotI2VuZGlmCi0KICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9u
dCB7IG51bGxwdHIgfTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X29yaWdpbmFsVGV4dE1hdHJpeDsKIAotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIHN0cnVj
dCBTdHlsZSB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIFJlZlB0cjxH
cmFkaWVudD4gZ3JhZGllbnQ7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybTsKLSAgICAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuOwotICAg
ICAgICB9OwotICAgICAgICBTdHlsZSBmaWxsU3R5bGU7Ci0gICAgICAgIFN0eWxlIHN0cm9rZVN0
eWxlOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0KLSAgICAgICAgc3RydWN0IFNo
YWRvd1N0YXRlIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAgICAgICAgICBm
bG9hdCBibHVyIHsgMCB9OwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBi
b29sIGlnbm9yZVRyYW5zZm9ybXMgeyBmYWxzZSB9OwotICAgICAgICB9OwotICAgICAgICBTaGFk
b3dTdGF0ZSBzaGFkb3c7Ci0gICAgfTsKLSAgICBTdGF0ZSBtX29yaWdpbmFsU3RhdGU7Ci0gICAg
U3RhdGUgbV9jdXJyZW50U3RhdGU7CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJ
TikKKyAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg1MTgwYWQxMDlmZDgxOGU5
YmIxNTg4Y2U5NjJhYjQ2MzA4MTZhMDkuLjM2MTFiMTJjYTlhYjI5ZWI5MjFmMjMyNWUxZjk2ZDI5
NTI1M2M3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5jcHAKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1bgog
CiBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRD
YXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBj
b25zdAogewotICAgIEFTU0VSVCghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpOworICAgIEFT
U0VSVF9VTlVTRUQoY29udGV4dCwgIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICB1
bnNpZ25lZCBkZXN0aW5hdGlvbiA9IHRvLnZhbHVlX29yKHJ1bi5sZW5ndGgoKSk7CiAgICAgCiAg
ICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRp
YWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTAwMDUwCkBAIC0yMTQsNyArMjE0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0
OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlM
aXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxh
eUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+KCk7Ci0gICAgRGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbCByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9h
dFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpObyk7CisgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRp
bmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pOwogICAgIAogICAg
IEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBo
QnVmZmVyLmluaXRpYWxBZHZhbmNlKCkpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5n
Q29udGV4dCwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1h
Z2UuY3BwCmluZGV4IDY0NTg0ZTVjZmUwMTE4ODJlZmFiMmUyM2MzYTU5NGUxNzgyZjI4OTAuLjJm
ODI3ZjYyNWY2NGI1OWNhMWE2NjQ5NjA3MzBmMDNjMjNiYzM3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCkBAIC00Myw3ICs0
Myw3IEBAIEdyYWRpZW50SW1hZ2U6On5HcmFkaWVudEltYWdlKCkgPSBkZWZhdWx0OwogSW1hZ2VE
cmF3UmVzdWx0IEdyYWRpZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25z
LmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENv
bnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0
LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkp
CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgR3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgbV9ncmFkaWVu
dC0+YWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVk
U3JjUmVjdCwgc3BhY2luZyk7CiAKICAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNv
bnRleHQncyBzY2FsZSB0byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNm
b3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhT
Y2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUg
PSBmYWJzKGRlc3RDb250ZXh0Q1RNLnlTY2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRq
dXN0ZWRQYXR0ZXJuQ1RNID0gcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDBiYjEzNTk3
Y2VhNzM2OWRiYmM2ZTE3MjdmMjZjOTJiOGZiNzUxNzYuLmNmOGM3MThiODEyYzc5NzkxZjJiZTNl
YjdkOGJlOGQ1NWEyYzMzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVy
SW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCkBAIC0zNiw0NzMgKzM1LDMx
MCBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIlN5c3RlbUltYWdlLmgi
Ci0jaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlRleHRCb3hJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBUZXh0Qm94SXRlcmF0b3IgewotcHVibGljOgotICAgIFRleHRCb3hJdGVyYXRvcigpCi0g
ICAgICAgIDogbV90ZXh0UnVuKDApCi0gICAgICAgICwgbV9vZmZzZXQoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVk
IG9mZnNldCkKLSAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKLSAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCi0gICAgewotICAgIH0KLQotICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0K
LSAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+
PSBtX3RleHRSdW4tPmxlbmd0aCgpOyB9Ci0gICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0
dXJuICgqbV90ZXh0UnVuKVttX29mZnNldF07IH0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGly
ZWN0aW9uKGN1cnJlbnQoKSk7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94
SXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09
IG90aGVyLm1fb2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47Ci0gICAgfQot
Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFRl
eHRSdW4qIG1fdGV4dFJ1bjsKLSAgICB1bnNpZ25lZCBtX29mZnNldDsKLX07Ci0KLSNkZWZpbmUg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoZmxhZywgcHJvcGVydHkpIFwKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZykgJiYgKG1fc3Rh
dGUucHJvcGVydHkgIT0gc3RhdGUucHJvcGVydHkpKSBcCi0gICAgICAgIGNoYW5nZUZsYWdzLmFk
ZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZyk7Ci0KLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAs
IHNob3VsZFNtb290aEZvbnRzKHRydWUpCi0gICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHModHJ1ZSkKLSAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotICAgICwgZHJh
d0x1bWluYW5jZU1hc2soZmFsc2UpCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0pCisgICAgOiBtX3N0YXRlKGluaXRpYWxDbGlwLCBjaGFuZ2VGbGFncywgaW5pdGlhbENUTSkK
IHsKIH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6On5HcmFwaGljc0NvbnRleHRTdGF0ZSgpID0g
ZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKSA9IGRlZmF1bHQ7
Ci1HcmFwaGljc0NvbnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0
YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpID0gZGVmYXVsdDsKLQotdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2Vz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRl
eHQoKQogewotICAgIGF1dG8gc3Ryb2tlRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSB9OwotICAgIGlm
IChmbGFncy5jb250YWluc0FueShzdHJva2VGbGFncykpIHsKLSAgICAgICAgc3Ryb2tlQ29sb3Ig
PSBzdGF0ZS5zdHJva2VDb2xvcjsKLSAgICAgICAgc3Ryb2tlR3JhZGllbnQgPSBzdGF0ZS5zdHJv
a2VHcmFkaWVudDsKLSAgICAgICAgc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZVBhdHRlcm47
Ci0gICAgfQotCi0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFn
cy5jb250YWluc0FueShmaWxsRmxhZ3MpKSB7Ci0gICAgICAgIGZpbGxDb2xvciA9IHN0YXRlLmZp
bGxDb2xvcjsKLSAgICAgICAgZmlsbEdyYWRpZW50ID0gc3RhdGUuZmlsbEdyYWRpZW50OwotICAg
ICAgICBmaWxsUGF0dGVybiA9IHN0YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAg
ICAgICBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIHNoYWRvd0Js
dXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwotICAgICAgICBzaGFkb3dDb2xvciA9IHN0YXRlLnNoYWRv
d0NvbG9yOwotICAgICAgICBzaGFkb3dSYWRpdXNNb2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHN0cm9rZVRoaWNrbmVzcyA9IHN0YXRl
LnN0cm9rZVRoaWNrbmVzczsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdGV4dERyYXdpbmdNb2Rl
ID0gc3RhdGUudGV4dERyYXdpbmdNb2RlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHN0cm9rZVN0eWxl
ID0gc3RhdGUuc3Ryb2tlU3R5bGU7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZmlsbFJ1bGUgPSBzdGF0ZS5m
aWxsUnVsZTsKKyAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV90
cmFuc3BhcmVuY3lMYXllckNvdW50KTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBhbHBoYSA9IHN0YXRlLmFs
cGhhOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQoreworICAgIG1fc3RhY2suYXBwZW5k
KG1fc3RhdGUpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkJsZW5kTW9kZUNoYW5nZSB9KSkgewotICAgICAgICBjb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBibGVuZE1vZGUgPSBzdGF0ZS5ibGVuZE1vZGU7
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCit7CisgICAgaWYgKG1fc3RhY2suaXNF
bXB0eSgpKSB7CisgICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxp
YXNDaGFuZ2UpKQotICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBzdGF0ZS5zaG91bGRBbnRpYWxp
YXM7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBtX2xhc3RBcHBsaWVk
U3RhdGUgPSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkU21v
b3RoRm9udHMgPSBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKLQotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKSkKLSAgICAgICAgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc3RhdGUuc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Cisg
ICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0YWNrIGJ1ZmZlciB3aGVu
IGl0IGdvZXMgZW1wdHkuCisgICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkg
c2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5LgorICAgIGlm
IChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGFjay5jbGVhcigpOworfQogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFz
a0NoYW5nZSkpCi0gICAgICAgIGRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWluYW5j
ZU1hc2s7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKQorewor
ICAgIG1fc3RhdGUuZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX2xhc3RBcHBsaWVkU3Rh
dGUgPSBtX3N0YXRlOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAgaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7CitG
bG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIHJldHVybiBGbG9hdFNpemUo
dHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworfQorICAgIAorRmxvYXRT
aXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgYXV0byB0cmFuc2Zvcm1lZERl
c3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOworICAgIHJldHVybiB0cmFuc2Zv
cm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOworfQogCi0jaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAgdXNlRGFya0FwcGVhcmFu
Y2UgPSBzdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsKLSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpCit7CisgICAgKyttX3RyYW5zcGFyZW5j
eUxheWVyQ291bnQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CisgICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3Vu
dCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworfQogCi0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlR3JhZGllbnRDaGFuZ2UsIHN0cm9rZUdyYWRpZW50
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VQYXR0ZXJuQ2hhbmdlLCBz
dHJva2VQYXR0ZXJuKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsR3JhZGll
bnRDaGFuZ2UsIGZpbGxHcmFkaWVudCk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
RmlsbFBhdHRlcm5DaGFuZ2UsIGZpbGxQYXR0ZXJuKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3N0YXRlLmNsaXAocmVjdCk7Cit9
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKQotICAgICAgICAmJiAobV9zdGF0ZS5zaGFkb3dPZmZzZXQgIT0gc3RhdGUu
c2hhZG93T2Zmc2V0Ci0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0JsdXIgIT0gc3RhdGUu
c2hhZG93Qmx1cgotICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dDb2xvciAhPSBzdGF0ZS5z
aGFkb3dDb2xvcikpCi0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSkKK3sKKyAgICBtX3N0YXRlLmNsaXAocGF0aC5mYXN0Qm91bmRp
bmdSZWN0KCkpOworfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BS
T1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4dERyYXdpbmdNb2RlKTsKLSAgICBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xvckNoYW5nZSwgc3Ryb2tlQ29sb3IpOwot
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxDb2xvckNoYW5nZSwgZmlsbENvbG9y
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VTdHlsZUNoYW5nZSwgc3Ry
b2tlU3R5bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdl
LCBmaWxsUnVsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoQWxwaGFDaGFuZ2Us
IGFscGhhKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3Vu
ZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJh
dGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KQotICAg
ICAgICAmJiAobV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciAhPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciB8fCBtX3N0YXRlLmJsZW5kTW9kZSAhPSBzdGF0ZS5ibGVuZE1vZGUpKSB7Ci0gICAgICAg
IGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlKTsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIGlmICghcmVjdC5pc1JvdW5k
ZWQoKSkgeworICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3VsZEFudGlhbGlhc0No
YW5nZSwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShT
aG91bGRTbW9vdGhGb250c0NoYW5nZSwgc2hvdWxkU21vb3RoRm9udHMpOwotICAgIENIRUNLX0ZP
Ul9DSEFOR0VEX1BST1BFUlRZKFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
OwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdl
LCBkcmF3THVtaW5hbmNlTWFzayk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoSW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSwgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7
Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlLCB1c2VEYXJrQXBwZWFyYW5jZSk7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiBjaGFuZ2VGbGFnczsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0
aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBt
X3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3MpOwotCi0gICAgYXV0byBzdHJva2VGbGFn
cyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0cm9rZUZs
YWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoc3Ryb2tlRmxhZ3MpOwotCi0gICAg
YXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShm
aWxsRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShmaWxsRmxhZ3MpOwotCi0g
ICAgYXV0byBjb21wb3NpdGVPcGVyYXRvckZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2Rl
Q2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGNvbXBvc2l0ZU9wZXJhdG9yRmxh
Z3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShjb21wb3NpdGVPcGVyYXRvckZsYWdz
KTsKLQotICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGZsYWdzKTsKKyAgICBpbWFnZUJ1ZmZlci5jbGlw
VG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUdy
YWRpZW50KCptX3N0YXRlLnN0cm9rZUdyYWRpZW50LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0
cm9rZVBhdHRlcm4oKm1fc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoKm1fc3RhdGUuZmlsbEdyYWRpZW50LCBt
X3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9z
dGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1
c01vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvIHByZXZpb3VzQ29t
cG9zaXRlTW9kZSA9IGNvbXBvc2l0ZU1vZGUoKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAg
ICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9kZShtX3N0YXRlLnRleHREcmF3aW5nTW9kZSk7
Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3Rh
dGUuc3Ryb2tlQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKG1fc3RhdGUuZmlsbENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlU3R5bGUobV9zdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2Up
KQotICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRBbHBoYShtX3N0YXRlLmFscGhhKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5n
ZSB9KSkKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9zdGF0ZS5jb21w
b3NpdGVPcGVyYXRvciwgbV9zdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkp
Ci0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKG1fc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxk
U21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFu
Y2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpV
c2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VXNlRGFya0FwcGVh
cmFuY2UobV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKKyAgICBzZXRDb21wb3Np
dGVNb2RlKHsgb3BlcmF0aW9uLCBibGVuZE1vZGUgfSk7CisgICAgZmlsbFJlY3QocmVjdCwgY29s
b3IpOworICAgIHNldENvbXBvc2l0ZU1vZGUocHJldmlvdXNDb21wb3NpdGVNb2RlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29u
c3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNoYW5nZS1mbGFn
cyIsIG1fY2hhbmdlRmxhZ3MudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1ncmFkaWVudCIsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHko
InN0cm9rZS1wYXR0ZXJuIiwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0
YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoImZpbGwtcGF0dGVybiIsIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOwor
ICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctYmx1ciIsIG1fc3RhdGUuc2hhZG93Qmx1cik7Ci0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LW9mZnNldCIsIG1fc3RhdGUuc2hhZG93T2Zm
c2V0KTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctY29sb3IiLCBtX3N0YXRlLnNo
YWRvd0NvbG9yKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3kt
cmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKK3sKKyAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKKyAgICAgICAgZmlsbFJlY3QocmVj
dC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICAgICAgCisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOworICAgIHNldENvbXBvc2l0ZU1vZGUo
eyBwcmV2aW91c09wZXJhdG9yLCBibGVuZE1vZGUgfSk7CisgICAgZmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7
Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJv
a2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNo
YW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgidGV4dC1kcmF3aW5nLW1vZGUiLCBtX3N0
YXRlLnRleHREcmF3aW5nTW9kZS50b1JhdygpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWNvbG9yIiwgbV9z
dGF0ZS5maWxsQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzdHJva2Utc3R5bGUiLCBtX3N0YXRlLnN0cm9rZVN0eWxlKTsKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQoreworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFu
Z2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtcnVsZSIsIG1fc3RhdGUuZmlsbFJ1
bGUpOworICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCisgICAgICAg
IHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKKyAgICBlbHNlCisgICAgICAg
IHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEiLCBtX3N0YXRlLmFscGhhKTsKKyAgICBXaW5kUnVs
ZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7CisgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmls
bENvbG9yKCk7CisgICAgCisgICAgc2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOworICAg
IHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0b3IiLCBtX3N0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShvbGRG
aWxsUnVsZSk7CisgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgbV9zdGF0ZS5ibGVu
ZE1vZGUpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNl
KGVsbGlwc2UpOworICAgIGZpbGxQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hv
dWxkQW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRo
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5h
ZGRFbGxpcHNlKGVsbGlwc2UpOworICAgIHN0cm9rZVBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3Ro
Rm9udHNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgtZm9u
dHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxp
cHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikKK3sKKyAgICBhdXRvIG9sZEZpbGxD
b2xvciA9IGZpbGxDb2xvcigpOworICAgIGF1dG8gb2xkU3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xv
cigpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIHNldEZpbGxDb2xvcihzaGFkb3dDb2xvcik7Cisg
ICAgc2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IpOworICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVj
dChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
IAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9y
KGVsbGlwc2VDb2xvcik7CisgICAgZHJhd0VsbGlwc2UocmVjdCk7CiAKLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tD
aGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImRyYXctbHVtaW5hbmNlLW1hc2siLCBt
X3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9y
KTsKKyAgICBzZXRTdHJva2VDb2xvcihvbGRTdHJva2VDb2xvcik7Cit9CiAKLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgidXNlLWRhcmstYXBwZWFyYW5jZSIsIG1fc3RhdGUudXNlRGFya0FwcGVhcmFu
Y2UpOwotI2VuZGlmCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3sKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQog
Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
IHsKLSAgICBzdGF0ZUNoYW5nZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7CisgICAgZHJhd0lt
YWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXpl
KCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09w
dGlvbnMpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAg
IEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwg
aW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhY2suYXBw
ZW5kKG1fc3RhdGUpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBv
bGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKKyAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIGlmIChtX3N0YWNrLmlzRW1wdHko
KSkgewotICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOwotICAgIG1fc3RhY2sucmVt
b3ZlTGFzdCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0
YWNrIGJ1ZmZlciB3aGVuIGl0IGdvZXMgZW1wdHkuCi0gICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdp
bGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNh
cGFjaXR5LgotICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGFjay5jbGVh
cigpOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwor
ICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0KGRl
c3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2Fs
U2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwg
ZmxhZ3MpOwotICAgIGRpZFVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5s
b2dpY2FsU2l6ZSgpOworICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdl
KSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHNhdmUoKTsKLQotICAgIHNldFN0cm9rZUNvbG9y
KHNoYWRvd0NvbG9yKTsKLSAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOwotCi0gICAgZHJh
d0VsbGlwc2UoRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSkpOwotCi0gICAgc2V0U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKLSAg
ICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKLQotICAgIGRyYXdFbGxpcHNlKHJlY3QpOyAg
Ci0KLSAgICByZXN0b3JlKCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAg
IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRo
aXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRz
KQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRy
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSk7CisgICAgYXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1h
Z2UsIHNvdXJjZUltYWdlUmVjdCwgcmVzdWx0cyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHNjYWxl
KHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKS5oZWlnaHQoKSB9KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1
bHQtPmFic29sdXRlSW1hZ2VSZWN0KCkpOworICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUm
IG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dSYWRpdXNNb2Rl
IHJhZGl1c01vZGUpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUuc2hh
ZG93T2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZSA9IHJhZGl1c01vZGU7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxv
YXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclNoYWRvdygpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKLSAgICBtX3N0YXRlLnNoYWRvd0Js
dXIgPSAwOwotICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwotICAgIG1fc3RhdGUu
c2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQ7Ci0gICAgZGlkVXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Cisg
ICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKGltYWdlUGFpbnRp
bmdPcHRpb25zLm9yaWVudGF0aW9uKCkpKTsKKyAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc3JjUmVjdCwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwg
Q29sb3ImIGNvbG9yKSBjb25zdAorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIG9mZnNldCA9IG1fc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgIGJsdXIgPSBtX3N0YXRl
LnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwotCi0gICAgcmV0
dXJuIGhhc1NoYWRvdygpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRl
cnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9u
UXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLmZpbGxHcmFk
aWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNo
YW5nZSk7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25R
dWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkp
OworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK0ltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAorICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUocGF0dGVy
bik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVBhdHRlcm5DaGFuZ2UpOworICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUg
JiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CisgICAgICAgIC8vIEp1c3QgZG8gYSBz
Y2FsZS4KKyAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJj
ZSwgb3B0aW9ucyk7CisgICAgfQorCisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zLmNv
bXBvc2l0ZU9wZXJhdG9yKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBtX3N0
YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdU
Rk1vdmUocGF0dGVybik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKKyAgICBzeXN0ZW1JbWFnZS5kcmF3KCp0aGlz
LCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUu
c3Ryb2tlQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUo
Z3JhZGllbnQpOwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHN0
cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0g
bnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOworICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3Jh
ZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwotICAgIG1fc3RhdGUu
ZmlsbEdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3Rh
dGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwotICAgIC8vIEZJWE1FOiBh
bHNvIGZpbGwgcGF0dGVybj8KKyAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsK
KyAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNv
dW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CisgICAgZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CiB9CiAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKQEAgLTUxMSwx
MSArMzQ3LDYgQEAgRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICByZXR1cm4gZm9udC5kcmF3
VGV4dCgqdGhpcywgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmdNb2RlKQotewotICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gdG8pCiB7CiAgICAgZm9udC5kcmF3RW1waGFzaXNNYXJrcygqdGhpcywgcnVuLCBt
YXJrLCBwb2ludCwgZnJvbSwgdG8pOwpAQCAtNTQ5LDcgKzM4MCw0NSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sCiAgICAgICAgIGJpZGlSdW4gPSBiaWRpUnVuLT5uZXh0KCk7CiAgICAgfQogCi0g
ICAgYmlkaVJ1bnMuY2xlYXIoKTsKKyAgICBiaWRpUnVucy5jbGVhcigpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHlsZSkKK3sK
KyAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFz
aEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBz
dHlsZSk7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVC
b3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykKK3sKKyAg
ICBDb2xvciBkdW1teUNvbG9yOworICAgIHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KHJlY3QsIHByaW50aW5nLCBkdW1teUNvbG9yKTsKK30KKworRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIENvbG9yJiBj
b2xvcikKK3sKKyAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBm
bG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKKyAgICBpZiAo
cHJpbnRpbmcpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVj
dC53aWR0aCgpLCB0aGlja25lc3MpKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBnZXRDVE0oKTsKKyAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFz
c3VtaW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KKyAgICBmbG9hdCBzY2FsZSA9IHRyYW5z
Zm9ybS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJh
bnNmb3JtLmEoKTsKKyAgICBpZiAoc2NhbGUgPCAxLjApIHsKKyAgICAgICAgLy8gVGhpcyBjb2Rl
IGFsd2F5cyBkcmF3cyBhIGxpbmUgdGhhdCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdo
LAorICAgICAgICAvLyB3aGljaCB0ZW5kcyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBz
bWFsbCBzY2FsZXMuIFRvIGNvdW50ZXIgdGhpcworICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhh
IGlzIGFwcGxpZWQgdG8gdGhlIHVuZGVybGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwg
c2NhbGVzLgorICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhh
ID0gMC40ZjsKKyAgICAgICAgZmxvYXQgc2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVB
bHBoYSA/IHNjYWxlIDogbWluaW11bVVuZGVybGluZUFscGhhOworICAgICAgICBjb2xvciA9IGNv
bG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KHNoYWRlKTsKKyAgICB9CisKKyAgICBGbG9h
dFBvaW50IGRldmljZVBvaW50ID0gdHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7
CisgICAgLy8gVmlzdWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFs
IHJvdW5kZi9jZWlsZi4gdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBv
dmVyZmxvdyB2YWx1ZSBmb3IgdW5kZXJsaW5lIGRlY29yYXRpb24uCisgICAgRmxvYXRQb2ludCBk
ZXZpY2VPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihk
ZXZpY2VQb2ludC55KCkpKTsKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVy
c2UoKSkKKyAgICAgICAgb3JpZ2luID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9y
aWdpbik7CisgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRo
KCksIHRoaWNrbmVzcykpOwogfQogCiBzdGF0aWMgSW50U2l6ZSBzY2FsZWRJbWFnZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlKQpAQCAtNjM5
LDE4NyArNTA4LDkgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0
ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHIKICAgICByZXR1cm4gY3JlYXRl
U2NhbGVkSW1hZ2VCdWZmZXIocmVjdCwgc2NhbGVGYWN0b3IoKSwgY29sb3JTcGFjZSwgcmVuZGVy
aW5nTW9kZSgpLCByZW5kZXJpbmdNZXRob2QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgc3lzdGVtSW1hZ2UuZHJhdygqdGhpcywgZGVzdGlu
YXRpb25SZWN0KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICByZXR1cm4g
ZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSksIEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25z
KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBzcmNSZWN0
KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlv
bigpKSk7Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3Qs
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0
aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0
eSgpKTsKLSAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZv
clRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBy
ZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLAotICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoaFJ1bGUg
PT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewot
ICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgq
dGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1hZ2Uu
ZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhS
dWxlLCB2UnVsZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCi17Ci0gICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3Qo
ZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5s
b2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZs
b2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3Bl
KCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIGltYWdlLmRyYXco
KnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgp
OwotICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0
KGRlc3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dp
Y2FsU2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
aW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwotICAg
IGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgZGVzdGluYXRpb24sIEZs
b2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9w
dGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25z
dW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25z
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQotewotICAgIGF1dG8gcmVz
dWx0ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53
aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7Ci0gICAgZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgcmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKLSAg
ICBzY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1h
Z2UuZHJhd1BhdHRlcm4oKnRoaXMsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0
aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcFBhdGgocGF0
aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsK
LSAgICAgICAgY2xpcE91dChyZWN0LnJlY3QoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKLSAgICBjbGlw
T3V0KHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKLXsKLSAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3Qp
OwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQotewotICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotewotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVP
cGVyYXRpb24oKTsKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7Ci0g
ICAgZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2
aW91c09wZXJhdG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpIHsKLSAgICAgICAg
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwot
ICAgICAgICBmaWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKLSAgICAgICAgc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZmlsbFJlY3QocmVjdC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxl
bmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBh
dGguYWRkUmVjdChyZWN0KTsKLQotICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNa
ZXJvKCkpCi0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAot
ICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxlID0gZmlsbFJ1bGUoKTsKLSAgICBDb2xvciBvbGRGaWxs
Q29sb3IgPSBmaWxsQ29sb3IoKTsKLSAgICAKLSAgICBzZXRGaWxsUnVsZShXaW5kUnVsZTo6RXZl
bk9kZCk7Ci0gICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAotICAgIGZpbGxQYXRoKHBhdGgpOwot
ICAgIAotICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKLSAgICBzZXRGaWxsQ29sb3Iob2xk
RmlsbENvbG9yKTsKLX0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCi17Ci0gICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJh
dGlvbjsKLSAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IGJsZW5kTW9kZTsKLSAgICBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hh
bmdlKTsKLX0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRh
cmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBT
dHJva2VTdHlsZSBwZW5TdHlsZSkKIHsKQEAgLTg1MCw3NyArNTQxLDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxv
YXRQb2ludCYgcDIKICAgICB9CiB9CiAKLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yKCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgcmV0
dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci19
Ci0gICAgCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmco
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dAotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAgICBhdXRvIHRyYW5zZm9ybWVk
RGVzdFJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIHRyYW5z
Zm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGZpbGxQYXRoKHBh
dGgpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBw
YXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKLSAgICBmaWxsUGF0aChwYXRoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2Uo
ZWxsaXBzZSk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgZHJhd0xp
bmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAs
IHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOwotfQot
Ci1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgQ29sb3IgZHVt
bXlDb2xvcjsKLSAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xvcik7Ci19Ci0KLUZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgZmxvYXQgdGhpY2tu
ZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7Ci0gICAgaWYgKHByaW50aW5nKQot
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwg
dGhpY2tuZXNzKSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgLy8gSnVz
dCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBh
cmUgZXF1YWwuCi0gICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0
cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7Ci0gICAgaWYgKHNj
YWxlIDwgMS4wKSB7Ci0gICAgICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRo
YXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxpbmUgaGlnaCwKLSAgICAgICAgLy8gd2hpY2ggdGVu
ZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVy
IHRoaXMKLSAgICAgICAgLy8gZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRl
cmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KLSAgICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA9IDAuNGY7Ci0gICAgICAgIGZsb2F0
IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1V
bmRlcmxpbmVBbHBoYTsKLSAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeShzaGFkZSk7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRy
YW5zZm9ybS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOwotICAgIC8vIFZpc3VhbCBvdmVyZmxv
dyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92
ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVy
bGluZSBkZWNvcmF0aW9uLgotICAgIEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2lu
dChyb3VuZGYoZGV2aWNlUG9pbnQueCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7Ci0gICAg
aWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCkpCi0gICAgICAgIG9yaWdpbiA9
IGludmVyc2UudmFsdWUoKS5tYXBQb2ludChkZXZpY2VPcmlnaW4pOwotICAgIHJldHVybiBGbG9h
dFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKLX0KLQog
ZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0
aChmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKIHsKICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJv
a2VUaGlja25lc3MoKTsKQEAgLTk3MiwxNSArNTkyLDQgQEAgVmVjdG9yPEZsb2F0UG9pbnQ+IEdy
YXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2Fs
TGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9OwogfQogCi0jaWYgRU5BQkxFKFZJREVP
KQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYg
cGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHBsYXllci5wbGF5
ZXJQcml2YXRlKCktPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlv
bik7Ci19Ci0jZW5kaWYKLQotdm9pZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5n
SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQotewotfQotCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IGZiOTVkZDI1YjI3MWRlYjlmYTg1ZmYyZDlmMWY3NDcxNmEwNjZiYWUuLmIzOWNkODI0ODAw
YTk0MjczMWY3NzRhYmQwYTk4Y2RmYmE3NGY4YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtMzAsNDkgKzMwLDE4IEBACiAjaW5jbHVkZSAiRGVzdGluYXRpb25D
b2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRp
b24uaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgogCi0jaWYgVVNFKENHKQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0OwotI2VsaWYgVVNFKENBSVJPKQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87Ci19Ci10eXBlZGVmIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2Vsc2UKLXR5cGVkZWYgdm9p
ZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQot
I2luY2x1ZGUgIkRJQlBpeGVsRGF0YS5oIgotdHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKLSNp
ZiAhVVNFKENHKQotLy8gVUludDggaXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2Uu
aAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwotI2VuZGlmCi0jZW5kaWYKLQotLy8gWDEx
IGhlYWRlcnMgZGVmaW5lIGEgYnVuY2ggb2YgbWFjcm9zIHdpdGggY29tbW9uIHRlcm1zLCBpbnRl
cmZlcmluZyB3aXRoIFdlYkNvcmUgYW5kIFdURiBlbnVtIHZhbHVlcy4KLS8vIEFzIGEgd29ya2Fy
b3VuZCwgd2UgZXhwbGljaXRseSB1bmRlZiB0aGVtIGhlcmUuCi0jaWYgZGVmaW5lZChOb25lKQot
I3VuZGVmIE5vbmUKLSNlbmRpZgotI2lmIGRlZmluZWQoQmVsb3cpCi0jdW5kZWYgQmVsb3cKLSNl
bmRpZgotI2lmIGRlZmluZWQoU3VjY2VzcykKLSN1bmRlZiBTdWNjZXNzCi0jZW5kaWYKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CkBAIC04Miw3ICs1MSw2
IEBAIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW50
UmVjdDsKIGNsYXNzIE1lZGlhUGxheWVyOwogY2xhc3MgUm91bmRlZFJlY3Q7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHRHTDsKQEAgLTkxLDE3NCArNTksMTIgQEAgY2xhc3MgU3lzdGVtSW1hZ2U7CiBj
bGFzcyBUZXh0UnVuOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKLW5hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7Ci1jbGFzcyBSZWNvcmRlcjsKLX0KLQotZW51bSBjbGFzcyBUZXh0RHJhd2lu
Z01vZGUgOiB1aW50OF90IHsKLSAgICBGaWxsID0gMSA8PCAwLAotICAgIFN0cm9rZSA9IDEgPDwg
MSwKLX07Ci11c2luZyBUZXh0RHJhd2luZ01vZGVGbGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2lu
Z01vZGU+OwotCi0vLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZh
cywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLS8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50
IG9mIHJhZGlpID4gOHB4LgotZW51bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7Ci0g
ICAgRGVmYXVsdCwKLSAgICBMZWdhY3kKLX07Ci0KLWVudW0gU3Ryb2tlU3R5bGUgewotICAgIE5v
U3Ryb2tlLAotICAgIFNvbGlkU3Ryb2tlLAotICAgIERvdHRlZFN0cm9rZSwKLSAgICBEYXNoZWRT
dHJva2UsCi0gICAgRG91YmxlU3Ryb2tlLAotICAgIFdhdnlTdHJva2UsCi19OwotCi1zdHJ1Y3Qg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgewotICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4X3Qg
ewotICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAot
ICAgICAgICBTcGVsbGluZywKLSAgICAgICAgR3JhbW1hciwKLSAgICAgICAgQXV0b2NvcnJlY3Rp
b25SZXBsYWNlbWVudCwKLSAgICAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAgfSBtb2Rl
OwotICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OwotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2Vy
TGluZVN0eWxlPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbW9kZTsKLSAgICBlbmNvZGVyIDw8IHNob3VsZFVz
ZURhcmtBcHBlYXJhbmNlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRp
b25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9kZTsK
LSAgICBkZWNvZGVyID4+IG1vZGU7Ci0gICAgaWYgKCFtb2RlKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZTsKLSAgICBkZWNvZGVyID4+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmICgh
c2hvdWxkVXNlRGFya0FwcGVhcmFuY2UpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4ge3sgKm1vZGUsICpzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9fTsKLX0KLQot
c3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUgewotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRv
cj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7Ci0KLSAgICBlbnVtIENoYW5nZSA6IHVpbnQzMl90
IHsKLSAgICAgICAgU3Ryb2tlR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAotICAgICAgICBTdHJva2VQYXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgPSAx
IDw8IDEsCi0gICAgICAgIEZpbGxHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMiwKLSAgICAgICAgRmlsbFBhdHRlcm5DaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAzLAotICAgICAgICBTdHJva2VUaGlja25lc3NDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDQsCi0gICAgICAgIFN0cm9rZUNvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgNSwKLSAgICAgICAgU3Ryb2tlU3R5bGVDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgID0gMSA8PCA2LAotICAgICAgICBGaWxsQ29sb3JDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDcsCi0gICAgICAgIEZpbGxSdWxlQ2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgOCwKLSAgICAgICAgU2hhZG93Q2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCA5LAotICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0No
YW5nZSAgICAgICAgICAgPSAxIDw8IDEwLAotICAgICAgICBBbHBoYUNoYW5nZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAotICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDEyLAotICAgICAgICBCbGVuZE1vZGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAotICAgICAgICBUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAotICAgICAgICBTaG91bGRBbnRp
YWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAotICAgICAgICBTaG91bGRT
bW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAotICAgICAgICBTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAgPSAxIDw8IDE3LAotICAgICAgICBE
cmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE4LAotICAgICAg
ICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAgICAgICAgPSAxIDw8IDE5LAotI2lm
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgICAgIFVzZURhcmtBcHBlYXJhbmNlQ2hh
bmdlICAgICAgICAgICAgICAgICA9IDEgPDwgMjAsCi0jZW5kaWYKLSAgICB9OwotICAgIHVzaW5n
IFN0YXRlQ2hhbmdlRmxhZ3MgPSBPcHRpb25TZXQ8Q2hhbmdlPjsKLQotICAgIHZvaWQgbWVyZ2VD
aGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVu
dDsKLSAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKLSAgICAKLSAgICBSZWZQdHI8
R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKLSAgICBSZWZQdHI8UGF0dGVybj4gZmlsbFBhdHRlcm47
Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotCi0gICAgQ29sb3Igc3Ryb2tlQ29sb3Ig
eyBDb2xvcjo6YmxhY2sgfTsKLSAgICBDb2xvciBmaWxsQ29sb3IgeyBDb2xvcjo6YmxhY2sgfTsK
LSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBzdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtOwotICAgIEFmZmluZVRyYW5zZm9ybSBmaWxsR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybTsKLQotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyB7IDAgfTsKLSAgICBmbG9h
dCBzaGFkb3dCbHVyIHsgMCB9OwotICAgIGZsb2F0IGFscGhhIHsgMSB9OwotCi0gICAgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUgeyBTb2xpZFN0cm9rZSB9OwotICAgIFdpbmRSdWxlIGZpbGxSdWxl
IHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKLQotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRE
cmF3aW5nTW9kZSB7IFRleHREcmF3aW5nTW9kZTo6RmlsbCB9OwotICAgIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsK
LSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlIHsgQmxlbmRNb2RlOjpOb3JtYWwgfTsKLSAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlv
blF1YWxpdHk6OkRlZmF1bHQgfTsKLSAgICBTaGFkb3dSYWRpdXNNb2RlIHNoYWRvd1JhZGl1c01v
ZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07Ci0KLSAgICBib29sIHNob3VsZEFudGlh
bGlhcyA6IDE7Ci0gICAgYm9vbCBzaG91bGRTbW9vdGhGb250cyA6IDE7Ci0gICAgYm9vbCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMgOiAxOwotICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgOiAxOwotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwotI2lmIEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCi0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSA6IDE7Ci0jZW5k
aWYKLX07Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSB7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVDaGFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRl
KQotICAgICAgICAsIG1fY2hhbmdlRmxhZ3MoZmxhZ3MpCi0gICAgewotICAgIH0KLQotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBjb25zdDsKLQotICAgIHZvaWQgYWNjdW11bGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKTsKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAg
IAotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKLQotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlIG1fc3RhdGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKLX07Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwot
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBo
aWNzQ29udGV4dCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOiAgIAorICAgIGZy
aWVuZCBjbGFzcyBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworcHVibGljOgorICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdy
YXBoaWNzQ29udGV4dCgpOwogCiAgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNzAsMjcwICs3NiwyNzMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1
bFBhaW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIC8vIENvbnRleHQgU3RhdGUK
KyAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRmdWxQYWludERldGVjdGVkOyB9CisgICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3Rl
ZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZs
b2F0IHRoaWNrbmVzcykgeyBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSk7IH0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZVRoaWNrbmVzczsgfQorICAgIC8vIENvbnRleHQgU3RhdGUKIAotICAgIHZv
aWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHls
ZSA9IHN0eWxlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9Ci0gICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0eWxlOyB9CisgICAgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgbWVy
Z2VTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1fc3Rh
dGUubWVyZ2VDaGFuZ2VzKG90aGVyKTsgfQorICAgIHZvaWQgbWVyZ2VTdGF0ZURpZmZzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikgeyBtX3N0YXRlLm1lcmdlRGlmZnMob3RoZXIp
OyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
Jik7Ci0gICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zdHJva2VDb2xvcjsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmdldENUTSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGN0bSkgeyBtX3N0YXRlLnNldENUTShjdG0sIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkg
eyBzZXRDVE0oZ2V0Q1RNKCkgKiBjdG0pOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkgeyBzZXRDVE0oZ2V0Q1RNKCkudHJhbnNsYXRlKHgsIHkpKTsgfQorICAgIHZvaWQg
dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQm
IHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4
LCBmbG9hdCBzeSkgeyBzZXRDVE0oZ2V0Q1RNKCkuc2NhbGUoc3gsIHN5KSk7IH0KKyAgICB2b2lk
IHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkgeyBzY2FsZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9Cisg
ICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIHsgc2V0Q1RNKGdldENUTSgpLnJv
dGF0ZShyYWQyZGVnKGFuZ2xlSW5SYWRpYW5zKSkpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOwotICAgIFBhdHRlcm4qIHN0cm9r
ZVBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0K
KyAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxs
QnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIGZp
bGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5wYXR0ZXJuKCk7
IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxTcGFjZVRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZv
aWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldEZpbGxDb2xv
cihjb2xvciwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0RmlsbEdyYWRpZW50
KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50
KSwgc3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9
KSB7IG1fc3RhdGUuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zv
cm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxH
cmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQq
IHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5n
ZXQoKTsgfQorICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5m
aWxsUnVsZSgpOyB9CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBt
X3N0YXRlLnNldEZpbGxSdWxlKGZpbGxSdWxlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAg
ICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuZmlsbFJ1bGUg
PSBmaWxsUnVsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxSdWxlQ2hhbmdlKTsgfQotICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQorICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGll
bnQqIHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgp
LmdyYWRpZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
cm9rZUJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fc3RhdGUuc2V0U3Ryb2tlQ29sb3IoY29sb3IsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVu
dD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNm
b3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCks
IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJl
ZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblNwYWNl
VHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlUGF0dGVybihXVEZNb3ZlKHBhdHRl
cm4pLCBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsgfQorICAgIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKCk7IH0KKyAg
ICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zZXRT
dHJva2VUaGlja25lc3ModGhpY2tuZXNzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQ
YXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4u
Z2V0KCk7IH0KKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuc3Ryb2tlU3R5bGUoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5
bGUgc3R5bGUpIHsgbV9zdGF0ZS5zZXRTdHJva2VTdHlsZShzdHlsZSwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdy
YWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKLSAgICBHcmFkaWVudCog
ZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7
IH0KKyAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVDYXAo
KTsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsgbV9zdGF0ZS5zZXRM
aW5lQ2FwKGxpbmVDYXAsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IGRp
ZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtc0NoYW5nZSk7IH0KLSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIGNv
bnN0IExpbmVEYXNoIGxpbmVEYXNoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5saW5lRGFzaCgp
OyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVEYXNoKSB7IG1fc3RhdGUu
c2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAot
ICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3Rh
dGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQotICAg
IGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRp
YWxpYXM7IH0KKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
bGluZUpvaW4oKTsgfQorICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pIHsg
bV9zdGF0ZS5zZXRMaW5lSm9pbihsaW5lSm9pbiwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0g
ICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1f
c3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KTsgfQotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNob3VsZFNtb290aEZvbnRzOyB9CisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUubWl0ZXJMaW1pdCgpOyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyTGltaXQpIHsgbV9zdGF0ZS5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQsIG1fbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KIAotICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVh
bnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5n
IGdseXBocy4KLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBl
bnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBzZXRT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMpIHsgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsgfQorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlTW9kZSgpOyB9CisgICAgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9k
ZSgpLm9wZXJhdGlvbjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVy
biBjb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVNb2Rl
KENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX3N0YXRlLnNldENvbXBvc2l0ZU1vZGUo
Y29tcG9zaXRlTW9kZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbikgeyBzZXRDb21wb3NpdGVN
b2RlKHsgb3BlcmF0aW9uLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsgfQogCi0gICAgdm9pZCBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsg
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2UpOyB9Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eTsgfQorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmRyb3BTaGFkb3coKTsgfQorICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBkcm9wU2hhZG93KCkub2Zmc2V0OyB9CisgICAgZmxvYXQgc2hhZG93Qmx1cigp
IGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5ibHVyUmFkaXVzOyB9CisgICAgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yKCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmNvbG9yOyB9Cisg
ICAgdm9pZCBzZXREcm9wU2hhZG93KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpIHsgbV9z
dGF0ZS5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3csIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAg
ICB2b2lkIGNsZWFyU2hhZG93KCkgeyBzZXREcm9wU2hhZG93KHsgfSk7IH0KIAotICAgIHZvaWQg
c2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOyBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOyB9Ci0gICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CisgICAgYm9vbCBo
YXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmlzVmlzaWJsZSgp
OyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRv
dygpLmlzQmx1cnJlZCgpOyB9CisgICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBk
cm9wU2hhZG93KCkuaGFzT3V0c2V0cygpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRN
b2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KLSAgICBCbGVuZE1v
ZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7
IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGEoKTsgfQor
ICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5zZXRBbHBoYShhbHBoYSwg
bV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3
THVtaW5hbmNlTWFzazsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsgfQotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOyB9CisgICAgdm9pZCBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpIHsgbV9zdGF0ZS5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZv
aWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV9zdGF0
ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsgfQotICAgIFRleHREcmF3aW5n
TW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERy
YXdpbmdNb2RlOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUoKTsgfQorICAgIHZvaWQgc2V0
VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSkgeyBt
X3N0YXRlLnNldFRleHREcmF3aW5nTW9kZSh0ZXh0RHJhd2luZ01vZGUsIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRv
d1JhZGl1c01vZGU6OkRlZmF1bHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBj
bGVhclNoYWRvdygpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6
ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25zdDsKKyAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKCk7IH0KKyAgICB2b2lkIHNldFNo
b3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNldFNob3VsZEFu
dGlhbGlhcyhzaG91bGRBbnRpYWxpYXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIGJv
b2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3Iu
aXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zp
c2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zm
c2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9v
bCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYm
IG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKCk7IH0KKyAgICB2b2lkIHNldFNo
b3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91
bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQog
Ci0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtBcHBl
YXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5j
ZSA9IHVzZURhcmtBcHBlYXJhbmNlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9Ci0gICAgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0K
LSNlbmRpZgorICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVhbnRpemF0aW9u
IGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5nIGdseXBocy4K
KyAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBlbnN1cmUgYSBo
aWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCisgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMo
Ym9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMoc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBtX2xhc3RBcHBs
aWVkU3RhdGUpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpOyB9CisgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQg
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2soKTsgfQorICAgIHZvaWQgc2V0
RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLnNldERy
YXdMdW1pbmFuY2VNYXNrKGRyYXdMdW1pbmFuY2VNYXNrLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9
CiAKLSAgICAvLyBDYWxsZWQgKmFmdGVyKiBhbnkgY2hhbmdlIHRvIEdyYXBoaWNzQ29udGV4dFN0
YXRlOyBnZW5lcmFsbHkgdXNlZCB0byBwcm9wYWdhdGUgY2hhbmdlcwotICAgIC8vIHRvIHRoZSBw
bGF0Zm9ybSBjb250ZXh0J3Mgc3RhdGUuCi0gICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MpID0gMDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBl
YXJhbmNlKCk7IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UpIHsgbV9zdGF0ZS5zZXRVc2VEYXJrQXBwZWFyYW5jZSh1c2VEYXJrQXBwZWFyYW5j
ZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorI2VuZGlmCiAKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0
b3JlKCk7Ci0gICAgCisgICAgdm9pZCBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHVuc2ln
bmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSA9IDA7CiAjaWYgVVNFKENHKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0
aG9kcz8KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSA9IDA7CisjZW5kaWYKIAotICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFr
ZSB0aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNy
b3NzLXBsYXRmb3JtPwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CiAKLSAgICAvLyBG
SVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0
ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/Ci0gICAgdmlydHVhbCB2b2lkIHNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpID0gMDsKLSNlbmRpZgorICAgIC8vIFRoaXMgZnVu
Y3Rpb24gYXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFr
aW5nIHRoZSBjb250ZXh0IGNhcGFibGUgb2YKKyAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVs
IGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KIAotICAg
IHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMK
IAotICAgIC8vIFBpeGVsIFNuYXBwaW5nCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBpc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVy
cygpICYmIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsgfQogCi0gICAgZW51bSBSb3VuZGluZ01v
ZGUgewotICAgICAgICBSb3VuZEFsbFNpZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVu
c2lvbnMKLSAgICB9OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgPSAwOwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhG
bG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VT
dHlsZSk7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIC8vIFNoYXBlcworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogCi0gICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwg
ZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KLSAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRy
YXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwotICAgIC8v
IHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0
aGUgY29ycmVjdAotICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdmlydHVhbCB2b2lkIGRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX3N0YXRlLmNsaXBCb3VuZHMoKSk7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IHsgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgc3Ryb2tlRWxsaXBzZUFzUGF0aChl
bGxpcHNlKTsgfQorICAgIC8vIFNoYXBlcworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1h
bCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJiwgQmxlbmRNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOwogCi0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRN
aXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0KLSAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVk
aWEKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICBJbnRTaXplIGNvbXBh
dGlibGVJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0g
c3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxv
cHQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmIHNj
YWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6
bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxl
ZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7
IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0Owor
ICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxp
bmcuCisgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGljaCBmaWxscyBwcm9w
ZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKKyAgICAvLyB1c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGlu
c2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKKyAgICAvLyBzdHJva2Ug
Y29sb3IpLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9k
PiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aXJ0dWFsIGRy
YXdQYXRoKGNvbnN0IFBhdGgmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICAvLyBGb2N1
cyBSaW5ncwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFn
ZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImKSA9IDA7CisgICAgLy8gRklYTUU6IENhbiB3ZSBoaWRlIHRoZXNlIGluIHRoZSBD
RyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQs
IGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisjZW5kaWYKIAorICAgIC8v
IEltYWdlcwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihS
ZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXIm
LCBGaWx0ZXJSZXN1bHRzJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6
RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCisgICAg
V0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFj
dG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICNpZiBFTkFC
TEUoVklERU8pCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogI2VuZGlm
Ci0KLSAgICAvLyBDbGlwcGluZwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSA9IDA7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdDsKLQorICAgIAogICAgIC8vIFRleHQKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQg
ZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RS
ZWFkeSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIHsKLSAg
ICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JU
IEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0g
Rm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZv
clRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9
IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNl
LCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUpID0gMDsKIAotICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
OwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0Zv
clRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7CiAKLSAgICAvLyBGb2N1cyBS
aW5ncworICAgIC8vIENvbXBhdGlibGUgSW1hZ2VCdWZmZXIKIAotICAgIHZpcnR1YWwgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikg
PSAwOwotICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50
YXRpb24/IE9yIGVsc2V3aGVyZT8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVl
ZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotI2VuZGlmCisgICAgSW50U2l6ZSBjb21wYXRp
YmxlSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwogCi0gICAgLy8gVHJh
bnNmb3JtcworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUoeyBzLCBzIH0pOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKSB7IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9
Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54
KCksIHAueSgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2Nh
bGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9
IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxv
cHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAx
IH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3Rk
OjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAg
IHZpcnR1YWwgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01l
dGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
UmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQp
IGNvbnN0OwogCi0gICAgZW51bSBJbmNsdWRlRGV2aWNlU2NhbGUgeyBEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlLCBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSB9OwotICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3QgPSAwOworICAgIC8vIFBpeGVsIFNuYXBwaW5nCiAKLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCi0gICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIHZpcnR1YWwg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3Ip
OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OworICAg
IGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAgICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91
bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAgfTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxs
U2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9Q
aXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJv
a2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwogCiAgICAgLy8gTGlua3MKIAorICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAg
dmlydHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0Jikg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIHsgfQogCi0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICAvLyBDb250ZW50ZnVsIFBhaW50IERldGVjdGlvbgorI2lmIFVTRShDRykKKyAgICAv
LyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRo
ZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQotICAgIGJv
b2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBh
aW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRl
eHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRl
eHQ/CisgICAgdmlydHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIHsgfQor
I2VuZGlmCiAKICAgICAvLyBGSVhNRTogTm90aGluZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBo
ZXJlLCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVsc2V3aGVyZS4KICNpZiBPUyhXSU5ET1dTKQpAQCAt
NTQ2LDEwICszNTUsNyBAQCBwdWJsaWM6CiAgICAgLy8gcHV0IGNvZGUgc2hhcmVkIGJldHdlZW4g
V2luZG93cyBDRyBhbmQgV2luZG93cyBDYWlybyBiYWNrZW5kcy4KICAgICB2aXJ0dWFsIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9h
dFJlY3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7
CkBAIC01NjEsMTkxICszNjcsMTcgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IGRhc2hlZExpbmVQ
YXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCwg
ZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OwogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJM
aW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0
aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKSBjb25zdDsKIAotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7Ci0KIHByaXZhdGU6CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBo
aWNzQ29udGV4dFN0YXRlPiBtX2xhc3RBcHBsaWVkU3RhdGU7CiAgICAgVmVjdG9yPEdyYXBoaWNz
Q29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCiAgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lM
YXllckNvdW50IHsgMCB9OwogICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZh
bHNlIH07CiB9OwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUp
Ci0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFu
ZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAg
ICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgfQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAg
ICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29u
dGV4dC5zYXZlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQot
ICAgIHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9y
ZSk7Ci0gICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dCYgbV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KLWNsYXNz
IFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgewotcHVibGljOgotICAgIFRyYW5zcGFyZW5jeUxheWVy
U2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxh
eWVyID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX2Fs
cGhhKGFscGhhKQotICAgICAgICAsIG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQotICAgIHsKLSAg
ICAgICAgaWYgKGJlZ2luTGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihtX2FscGhhKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBiZWdpbkxheWVyKGZs
b2F0IGFscGhhKQotICAgIHsKLSAgICAgICAgbV9hbHBoYSA9IGFscGhhOwotICAgICAgICBtX2Nv
bnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKLSAgICAgICAgbV9iZWdhbkxh
eWVyID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKLSAgICAgICAgICAgIG1fY29udGV4dC5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0Nv
bnRleHQmIG1fY29udGV4dDsKLSAgICBmbG9hdCBtX2FscGhhOwotICAgIGJvb2wgbV9iZWdhbkxh
eWVyOwotfTsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgewotcHVi
bGljOgotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3N0
YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQotICAgIHsgfQotICAgIAotICAgIH5HcmFwaGlj
c0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0
LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJH
cmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBieSAlZCIsICZtX2NvbnRleHQsIChpbnQp
bV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0YWNrU2l6ZSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1fc3Rh
Y2tTaXplOwotfTsKLQotY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9s
YXRpb25RdWFsaXR5VG9Vc2UpCi0gICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3ND
b250ZXh0KQotICAgICAgICAsIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KGdyYXBoaWNz
Q29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAgICAgICwgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSAhPSBJbnRlcnBv
bGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSAh
PSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKTsKLSAg
ICB9Ci0KLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1
YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5KQotICAgICAgICA6IEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGludGVycG9sYXRpb25RdWFsaXR5ID8gaW50
ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpCi0gICAgewotICAgIH0KLQotICAgIH5JbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgYm9vbCBt
X2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
LAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tp
bmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAotICAgIFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKLSAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0g
ICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpGaWxsR3JhZGllbnRDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUNvbG9yQ2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VTdHlsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpGaWxsUnVsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGFDaGFu
Z2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6QmxlbmRNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhc0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21v
b3RoRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2Us
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQot
ICAgICAgICAsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtB
cHBlYXJhbmNlQ2hhbmdlCi0jZW5kaWYKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCi0gICAgV2ViQ29yZTo6U3Ryb2tl
U3R5bGU6Ok5vU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwK
LSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0
cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJs
ZVN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQotICAgID47Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9k
ZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6OlRl
eHREcmF3aW5nTW9kZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAot
ICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQotICAgID47Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM5ZTU4MWRjYzIyMDNhZDIxYTdmNDhmMzU3
ODE0ZGVmYzNjZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKKworI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgQ2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2NsaXBCb3VuZHMoaW5pdGlhbENUTS5tYXBSZWN0KGlu
aXRpYWxDbGlwKSkKKyAgICAsIG1fY2hhbmdlRmxhZ3MoY2hhbmdlRmxhZ3MpCisgICAgLCBtX2N0
bShpbml0aWFsQ1RNKQoreworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmNs
aXBCb3VuZHMoKSBjb25zdAoreworICAgIGlmIChhdXRvIGludmVyc2UgPSBtX2N0bS5pbnZlcnNl
KCkpCisgICAgICAgIHJldHVybiBpbnZlcnNlLT5tYXBSZWN0KG1fY2xpcEJvdW5kcyk7CisKKyAg
ICAvLyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJl
Y3QuCisgICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9y
bSBiZWhhdmlvci4KKyAgICByZXR1cm4gbV9jbGlwQm91bmRzOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0Cit7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBwcmltaXRpdmVDaGFuZ2VGbGFncyB7IENoYW5nZTo6
U3Ryb2tlVGhpY2tuZXNzLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6OkZpbGxCcnVzaCB9
OworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgIT0gKG1fY2hhbmdlRmxhZ3MgJiBwcmltaXRpdmVD
aGFuZ2VGbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKENoYW5nZTo6U3Ryb2tlQnJ1c2gpICYmICFtX3N0cm9rZUJydXNoLmlzUHJp
bWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKENoYW5nZTo6RmlsbEJydXNoKSAmJiAhbV9maWxsQnJ1c2guaXNQcmltaXRpdmUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZUNoYW5nZSA9IFsmXShDaGFuZ2UgY2hhbmdl
LCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG90
aGVyLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkgeworICAgICAgICAgICAgdGhpcy0+
KnByb3BlcnR5ID0gb3RoZXIuKnByb3BlcnR5OworICAgICAgICAgICAgbV9jaGFuZ2VGbGFncy5h
ZGQoY2hhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBBU1NFUlQobV9jbGlwQm91bmRz
ID09IG90aGVyLm1fY2xpcEJvdW5kcyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNUTSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7
CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2Uo
Q2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZUJydXNo
LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNo
KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VD
aGFuZ2UoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Okxp
bmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xp
bmVDYXApOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TWl0ZXJMaW1p
dCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1p
dCk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkFs
cGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Fs
cGhhKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHks
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cywgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcywgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjptZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikKK3sKKyAg
ICBhdXRvIG1lcmdlRGlmZiA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSAhPSBvdGhl
ci4qcHJvcGVydHkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9w
ZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisgICAgCisgICAgbWVyZ2VEaWZm
KENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbFJ1bGUsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAg
IG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ry
b2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9r
ZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIG1l
cmdlRGlmZihDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lRGFzaCwg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOwor
ICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TWl0
ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVy
TGltaXQpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkFscGhhLCAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7Cisg
ICAgbWVyZ2VEaWZmKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hv
dWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3Vs
ZEFudGlhbGlhcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBtZXJn
ZURpZmYoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlRGlmZihDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBzdGF0ZUNoYW5nZU5hbWUoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZSBjaGFuZ2UpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHN0YXRlQ2hhbmdlTmFt
ZXNbXSA9IHsKKyAgICAgICAgImN0bSIsCisKKyAgICAgICAgImZpbGwtYnJ1c2giLAorICAgICAg
ICAiZmlsbC1ydWxlIiwKKworICAgICAgICAic3Ryb2tlLWJydXNoIiwKKyAgICAgICAgInN0cm9r
ZS10aGlja25lc3MiLAorICAgICAgICAic3Ryb2tlLXN0eWxlIiwKKworICAgICAgICAibGluZS1j
YXAiLAorICAgICAgICAibGluZS1kYXNoIiwKKyAgICAgICAgImxpbmUtam9pbiIsCisgICAgICAg
ICJtaXRlci1saW1pdCIsCisKKyAgICAgICAgImNvbXBvc2l0ZS1tb2RlIiwKKyAgICAgICAgImRy
b3Atc2hhZG93IiwKKworICAgICAgICAiYWxwaGEiLAorICAgICAgICAiaW1hZ2UtaW50ZXJwb2xh
dGlvbi1xdWFsaXR5IiwKKyAgICAgICAgInRleHQtZHJhd2luZy1tb2RlIiwKKworICAgICAgICAi
c2hvdWxkLWFudGlhbGlhcyIsCisgICAgICAgICJzaG91bGQtc21vb3RoLWZvbnRzIiwKKyAgICAg
ICAgInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsCisgICAgICAgICJzaGFkb3dzLWln
bm9yZS10cmFuc2Zvcm1zIiwKKyAgICAgICAgImRyYXctbHVtaW5hbmNlLW1hc2siCisjaWYgSEFW
RShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAgICAgLCAidXNlLWRhcmstYXBwZWFyYW5jZSIK
KyNlbmRpZgorICAgIH07CisKKyAgICB1bnNpZ25lZCBtYXNrID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNoYW5nZSk7CisgICAgQVNTRVJUKCEoKG1hc2sgLSAxKSAmIG1hc2spKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2cyKG1hc2spKTsKKyAg
ICByZXR1cm4gc3RhdGVDaGFuZ2VOYW1lc1tpbmRleF07Cit9CisKK1RleHRTdHJlYW0mIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGF1dG8g
ZHVtcCA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJv
cGVydHksIGNvbnN0IFN0cmluZyYgbmFtZSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhjaGFuZ2UpKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KG5hbWUsIHRoaXMt
Pipwcm9wZXJ0eSk7CisgICAgfTsKKworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdlLWZsYWdz
IiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBkdW1wKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q1RNKSk7CisKKyAgICBkdW1wKENo
YW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6RmlsbEJydXNoKSk7CisgICAgZHVtcChDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkZpbGxSdWxlKSk7CisKKyAgICBkdW1wKENo
YW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6U3Ryb2tlQnJ1c2gpKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MsICAgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSk7CisgICAg
ZHVtcChDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFt
ZShDaGFuZ2U6OlN0cm9rZVN0eWxlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6TGluZUNhcCwgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwLCAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUNhcCkpOworICAg
IGR1bXAoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2xpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5h
bWUoQ2hhbmdlOjpMaW5lRGFzaCkpOworICAgIGR1bXAoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luLCAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpMaW5lSm9pbikpOworICAgIGR1
bXAoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX21pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUo
Q2hhbmdlOjpNaXRlckxpbWl0KSk7CisKKyAgICBkdW1wKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCAg
ICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q29tcG9zaXRlTW9kZSkpOwor
ICAgIGR1bXAoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5n
ZU5hbWUoQ2hhbmdlOjpEcm9wU2hhZG93KSk7CisKKyAgICBkdW1wKENoYW5nZTo6QWxwaGEsICAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6QWxwaGEpKTsKKyAg
ICBkdW1wKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAgIGR1bXAoQ2hhbmdl
OjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3RleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpU
ZXh0RHJhd2luZ01vZGUpKTsKKworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcywgICAg
ICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMpKTsKKyAg
ICBkdW1wKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMpKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKSk7CisgICAgZHVtcChDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zLCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMsICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKSk7CisgICAgZHVtcChDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgIHN0
YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrKSk7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBkdW1wKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UpKTsKKyNl
bmRpZgorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSBjaGFuZ2UpCit7CisgICAgdHMg
PDwgc3RhdGVDaGFuZ2VOYW1lKGNoYW5nZSk7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIHN0YXRlLmR1bXAodHMpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmU0Y2VhM2MyZDU4Yzg3YjQ5
MjM4NDc1ZTQ2OGI1ZGZkNWVlM2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApAQCAtMCwwICsxLDM4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VCcnVzaC5oIgorI2luY2x1ZGUgIldpbmRSdWxlLmgi
CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENoYW5n
ZSA6IHVpbnQzMl90IHsKKyAgICAgICAgQ1RNICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAorCisgICAgICAgIEZpbGxCcnVzaCAgICAgICAgICAgICAgICAgICA9IDEgPDwgMSwKKyAg
ICAgICAgRmlsbFJ1bGUgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAorCisgICAgICAgIFN0
cm9rZUJydXNoICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICAgICAgU3Ryb2tlVGhpY2tu
ZXNzICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAgICBTdHJva2VTdHlsZSAgICAgICAgICAg
ICAgICAgPSAxIDw8IDUsCisKKyAgICAgICAgTGluZUNhcCAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCA2LAorICAgICAgICBMaW5lRGFzaCAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisg
ICAgICAgIExpbmVKb2luICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgTWl0
ZXJMaW1pdCAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorCisgICAgICAgIENvbXBvc2l0ZU1v
ZGUgICAgICAgICAgICAgICA9IDEgPDwgMTAsCisgICAgICAgIERyb3BTaGFkb3cgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMTEsCisKKyAgICAgICAgQWxwaGEgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAxMiwKKyAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSAgID0gMSA8PCAx
MywKKyAgICAgICAgVGV4dERyYXdpbmdNb2RlICAgICAgICAgICAgID0gMSA8PCAxNCwKKworICAg
ICAgICBTaG91bGRBbnRpYWxpYXMgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAgICAgICBTaG91
bGRTbW9vdGhGb250cyAgICAgICAgICAgPSAxIDw8IDE2LAorICAgICAgICBTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMgPSAxIDw8IDE3LAorICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyAgICAgPSAxIDw8IDE4LAorICAgICAgICBEcmF3THVtaW5hbmNlTWFzayAgICAgICAgICAgPSAx
IDw8IDE5LAorI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgIFVzZURhcmtB
cHBlYXJhbmNlICAgICAgICAgICA9IDEgPDwgMjAsCisjZW5kaWYKKyAgICB9OworICAgIHVzaW5n
IENoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IENoYW5nZUZsYWdzIGluaXRpYWxDaGFuZ2VGbGFncyA9IHsgQ2hhbmdlOjpGaWxsQnJ1c2gsIENo
YW5nZTo6U3Ryb2tlQnJ1c2gsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzIH07CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwQm91bmRzLCBjb25zdCBDaGFuZ2VGbGFncyYgPSB7IH0sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgaW5pdGlhbENUTSA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0OworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsg
bV9jbGlwQm91bmRzLmludGVyc2VjdChtX2N0bS5tYXBSZWN0KHJlY3QpKTsgfQorCisgICAgQ2hh
bmdlRmxhZ3MgY2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlRmxhZ3M7IH0KKyAgICB2
b2lkIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCkgeyBtX2NoYW5nZUZsYWdzID0geyB9OyB9CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9jdG07IH0KKyAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSwgY29uc3Qgc3RkOjpvcHRpb25h
bDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHko
Q2hhbmdlOjpDVE0sICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sIGN0bSwgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IFNvdXJjZUJydXNoJiBmaWxsQnJ1c2goKSBjb25zdCB7
IHJldHVybiBtX2ZpbGxCcnVzaDsgfQorICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvciwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RB
cHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpGaWxsQnJ1c2gsICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxsQnJ1c2guc2V0R3JhZGll
bnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQo
Q2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1f
ZmlsbEJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyBt
X2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVzaCk7IH0KKworICAgIFdpbmRSdWxlIGZp
bGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbFJ1bGUs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSwgZmlsbFJ1bGUsIGxhc3RBcHBsaWVk
U3RhdGUpOyB9CisKKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1c2goKSBjb25zdCB7
IHJldHVybiBtX3N0cm9rZUJydXNoOyB9CisgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBD
b2xvciYgY29sb3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBs
YXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlQnJ1c2gsICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgeyBjb2xvciB9LCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRp
ZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1
c2guc2V0R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFu
Z2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFj
ZVRyYW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwg
c3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsg
fQorCisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VU
aGlja25lc3M7IH0KKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlj
a25lc3MsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBw
bGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MsIGxhc3RB
cHBsaWVkU3RhdGUpOyB9CisKKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3Ryb2tlU3R5bGU7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsIHN0cm9rZVN0eWxlLCBsYXN0QXBw
bGllZFN0YXRlKTsgfQorCisgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5lQ2FwOyB9CisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0
UHJvcGVydHkoQ2hhbmdlOjpMaW5lQ2FwLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNh
cCwgbGluZUNhcCwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IExpbmVEYXNoJiBs
aW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZURhc2g7IH0KKyAgICB2b2lkIHNldExpbmVE
YXNoKExpbmVEYXNoJiYgbGluZURhc2gsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250
ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZURh
c2gsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCwgV1RGTW92ZShsaW5lRGFzaCks
IGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUpvaW47IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVK
b2luLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVKb2luLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUpvaW4sIGxpbmVKb2luLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAg
ZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQorICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFu
Z2U6Ok1pdGVyTGltaXQsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCBtaXRl
ckxpbWl0LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIENvbXBvc2l0ZU1vZGUgY29t
cG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlTW9kZTsgfQorICAgIHZvaWQg
c2V0Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFBy
b3BlcnR5KENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Nv
bXBvc2l0ZU1vZGUsIGNvbXBvc2l0ZU1vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisg
ICAgY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcFNo
YWRvdzsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hh
ZG93LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkRyb3BTaGFkb3csICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9kcm9wU2hhZG93LCBkcm9wU2hhZG93LCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2FscGhhOyB9CisgICAgdm9pZCBz
ZXRBbHBoYShmbG9hdCBhbHBoYSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRT
dGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpBbHBoYSwgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhLCBhbHBoYSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICAKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisgICAgdm9p
ZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIGxhc3RBcHBsaWVkU3RhdGUp
OyB9CisgICAgCisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5n
TW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3Bl
cnR5KENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4
dERyYXdpbmdNb2RlLCB0ZXh0RHJhd2luZ01vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAg
ICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQW50aWFsaWFz
OyB9CisgICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRl
KSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzLCBzaG91bGRBbnRpYWxpYXMsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9z
aG91bGRTbW9vdGhGb250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBz
aG91bGRTbW9vdGhGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRTbW9vdGhG
b250cywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzLCBzaG91bGRT
bW9vdGhGb250cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0Nv
bnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25z
dCB7IHJldHVybiBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CisgICAgdm9pZCBzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBz
ZXRQcm9wZXJ0eShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX2RyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgdm9pZCBzZXRE
cmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0
eShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJh
d0x1bWluYW5jZU1hc2ssIGRyYXdMdW1pbmFuY2VNYXNrLCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBlYXJh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV91c2VEYXJrQXBwZWFyYW5jZTsgfQorICAgIHZvaWQgc2V0
VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSwgY29uc3Qgc3RkOjpvcHRp
b25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVy
dHkoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Vz
ZURhcmtBcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyNlbmRpZgorCisgICAgYm9vbCBoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0OworICAg
IHZvaWQgbWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7Cisg
ICAgdm9pZCBtZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7CisK
KyAgICBXVEY6OlRleHRTdHJlYW0mIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3ND
b250ZXh0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgY29uc3QgVCYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gdmFsdWU7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Mu
c2V0KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJv
cGVydHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgc2V0UHJvcGVydHkoQ2hhbmdlIGNoYW5nZSwgVCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6KnByb3BlcnR5LCBUJiYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhp
Y3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhp
cy0+KnByb3BlcnR5ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Muc2V0
KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJvcGVy
dHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgbV9jbGlwQm91
bmRzOworCisgICAgQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBtX2N0bTsKKworICAgIFNvdXJjZUJydXNoIG1fZmlsbEJydXNoIHsgQ29sb3I6OmJsYWNr
IH07CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07CisKKyAg
ICBTb3VyY2VCcnVzaCBtX3N0cm9rZUJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgZmxvYXQg
bV9zdHJva2VUaGlja25lc3MgeyAwIH07CisgICAgU3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZSB7
IFNvbGlkU3Ryb2tlIH07CisKKyAgICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1dHQg
fTsKKyAgICBMaW5lRGFzaCBtX2xpbmVEYXNoOworICAgIExpbmVKb2luIG1fbGluZUpvaW4geyBM
aW5lSm9pbjo6TWl0ZXIgfTsKKyAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAwIH07CisKKyAgICBD
b21wb3NpdGVNb2RlIG1fY29tcG9zaXRlTW9kZSB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9OworICAgIERyb3BTaGFkb3cgbV9kcm9wU2hhZG93Owor
CisgICAgZmxvYXQgbV9hbHBoYSB7IDEgfTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2lt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9
OworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdp
bmdNb2RlOjpGaWxsIH07CisKKyAgICBib29sIG1fc2hvdWxkQW50aWFsaWFzIHsgdHJ1ZSB9Owor
ICAgIGJvb2wgbV9zaG91bGRTbW9vdGhGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RyYXdMdW1pbmFuY2VNYXNrIHsgZmFs
c2UgfTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgbV91c2VEYXJr
QXBwZWFyYW5jZSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBhdXRvIGVuY29kZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdGhpcy0+KnByb3BlcnR5
OworICAgIH07CisKKyAgICBlbmNvZGVyIDw8IG1fY2xpcEJvdW5kczsKKworICAgIGVuY29kZXIg
PDwgbV9jaGFuZ2VGbGFnczsKKworICAgIGVuY29kZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgZW5j
b2RlKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6RmlsbFJ1bGUsICAg
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsK
KworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6
U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3N0cm9rZVRoaWNrbmVzcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKwor
ICAgIGVuY29kZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lRGFz
aCwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURh
c2gpOworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgZW5jb2RlKENoYW5nZTo6
TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X21pdGVyTGltaXQpOworCisgICAgZW5jb2RlKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAg
IGVuY29kZShDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkFscGhh
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBo
YSk7CisgICAgZW5jb2RlKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAg
IGVuY29kZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6
U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZEFudGlhbGlhcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMs
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRz
KTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAg
ICBlbmNvZGUoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIGVuY29kZShD
aGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9S
VCkKKyAgICBlbmNvZGUoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgYXV0byBkZWNvZGUgPSBbJl0oR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDaGFuZ2Ug
Y2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAg
aWYgKCFzdGF0ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICB1c2luZyBQcm9wZXJ0eVR5cGUgPSB0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9yZWZlcmVuY2U8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPigpLipwcm9wZXJ0eSk+Ojp0eXBlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFByb3BlcnR5
VHlwZT4gdmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RhdGUuKnByb3BlcnR5
ID0gKnZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGNsaXBCb3VuZHM7CisgICAgZGVjb2RlciA+PiBjbGlwQm91bmRzOwor
ICAgIGlmICghY2xpcEJvdW5kcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOworICAgIGRlY29kZXIgPj4g
Y2hhbmdlRmxhZ3M7CisgICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlKCpjbGlwQm91bmRzLCAq
Y2hhbmdlRmxhZ3MpOworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6Q1RNLCAgICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Zp
bGxCcnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUo
c3RhdGUsIENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVRoaWNr
bmVzcywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVz
cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUs
IENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc3Ryb2tlU3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZURhc2gsICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVK
b2luLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2lu
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9taXRlckxpbWl0KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyb3BTaGFkb3csICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
YWxwaGEpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0
YXRlLCBDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlRleHREcmF3aW5nTW9k
ZSwgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zaG91bGRBbnRpYWxpYXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcmF3
THVtaW5hbmNlTWFzaywgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVt
aW5hbmNlTWFzaykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpVc2VEYXJr
QXBwZWFyYW5jZSwgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBw
ZWFyYW5jZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKKworICAgIHJl
dHVybiBzdGF0ZTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSk7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpD
VE0sCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Rmls
bEJydXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpG
aWxsUnVsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpTdHJva2VCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlVGhpY2tuZXNzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4sCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQsCisKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdywKKworICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYSwKKyAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4
dERyYXdpbmdNb2RlLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZEFudGlhbGlhcywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywKKyAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBw
ZWFyYW5jZQorI2VuZGlmCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3MjEzMjg1MjYxZTY5MGNhMzA2MGQ3ZTAyNmU1
MGU1MmVlYTU5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJl
c3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1f
c2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAgICBpZiAobV9zYXZl
QW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgfQorICAgIAor
ICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3Nh
dmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVz
dG9yZSk7CisgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBB
U1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Cisg
ICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQorCitwcml2
YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIGJvb2wgbV9zYXZlQW5k
UmVzdG9yZTsKK307CisKK2NsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgeworcHVibGljOgor
ICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9h
dCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgLCBtX2FscGhhKGFscGhhKQorICAgICAgICAsIG1fYmVnYW5MYXllcihi
ZWdpbkxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKGJlZ2luTGF5ZXIpCisgICAgICAgICAgICBt
X2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQorICAgIHsKKyAgICAgICAgbV9hbHBoYSA9
IGFscGhhOworICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhh
KTsKKyAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgflRyYW5z
cGFyZW5jeUxheWVyU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKKyAg
ICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBmbG9hdCBtX2FscGhh
OworICAgIGJvb2wgbV9iZWdhbkxheWVyOworfTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTdGFja0NoZWNrZXIgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQorICAgIHsg
fQorCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9zdGFja1NpemUpCisgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBzdGFjayBjaGFuZ2VkIGJ5ICVkIiwg
Jm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXplKCkgLSAoaW50KW1fc3RhY2tTaXpl
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Cisg
ICAgdW5zaWduZWQgbV9zdGFja1NpemU7Cit9OworCitjbGFzcyBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW50ZXJwb2xhdGlv
blF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICAgICAgOiBtX2dyYXBoaWNz
Q29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgICAgICwgbV9jdXJyZW50SW50ZXJwb2xhdGlv
blF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAg
ICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZChpbnRlcnBvbGF0aW9uUXVhbGl0
eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0ICYmIG1fY3VycmVudEludGVy
cG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgeworICAg
ICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dy
YXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGludGVycG9sYXRpb25R
dWFsaXR5VG9Vc2UpOworICAgIH0KKworICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgc3RkOjpvcHRpb25h
bDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkpCisgICAgICAgIDog
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBoaWNzQ29udGV4dCwgaW50ZXJwb2xh
dGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52YWx1ZSgpIDogZ3JhcGhpY3NDb250
ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICB7CisgICAgfQorCisgICAgfklu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCisgICAgeworICAgICAgICBpZiAobV9pbnRl
cnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5z
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29u
dGV4dDsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVh
bGl0eTsKKyAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCAxNWRmMWRmZGI2ZjNhMTZhZDVlYWY2NDcyNjFm
Y2ZjNGI3YTkzYWI0Li42MmY5ZjQ2NGMzZDZkOWQ1YTA5Y2E1YTRiN2JkOGExMDM2MTU5MWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmNwcApAQCAtMTI2LDI3ICsxMjYsNTEgQEAgU3RyaW5nIGJsZW5kTW9kZU5hbWUoQmxlbmRNb2Rl
IGJsZW5kT3ApCiAgICAgcmV0dXJuIGJsZW5kT3BlcmF0b3JOYW1lc1tzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oYmxlbmRPcCkgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQmxlbmRNb2RlOjpOb3JtYWwp
XTsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKK3sKKyAgICByZXR1cm4gdHMgPDwgYmxlbmRNb2RlTmFtZShibGVuZE1vZGUp
OworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVN
b2RlIGNvbXBvc2l0ZU1vZGUpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3Bl
cmF0aW9uIiwgY29tcG9zaXRlTW9kZS5vcGVyYXRpb24pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
YmxlbmQtbW9kZSIsIGNvbXBvc2l0ZU1vZGUuYmxlbmRNb2RlKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQogewogICAgIHJldHVybiB0cyA8PCBjb21wb3NpdGVPcGVyYXRvck5hbWUob3AsIEJs
ZW5kTW9kZTo6Tm9ybWFsKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpCiB7Ci0gICAgcmV0dXJuIHRz
IDw8IGJsZW5kTW9kZU5hbWUoYmxlbmRNb2RlKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRv
dy1vZmZzZXQiLCBkcm9wU2hhZG93Lm9mZnNldCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFk
b3ctYmx1ciIsIGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJz
aGFkb3ctY29sb3IiLCBkcm9wU2hhZG93LmNvbG9yKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBkcm9wU2hhZG93LnJhZGl1c01vZGUgPT0gU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdpbmRSdWxlIHJ1bGUpCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9u
UXVhbGl0eSkKIHsKLSAgICBzd2l0Y2ggKHJ1bGUpIHsKLSAgICBjYXNlIFdpbmRSdWxlOjpOb25a
ZXJvOgotICAgICAgICB0cyA8PCAiTk9OLVpFUk8iOworICAgIHN3aXRjaCAoaW50ZXJwb2xhdGlv
blF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAg
ICAgICB0cyA8PCAiREVGQVVMVCI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2luZFJ1bGU6
OkV2ZW5PZGQ6Ci0gICAgICAgIHRzIDw8ICJFVkVOLU9ERCI7CisgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgdHMgPDwgIkRPLU5PVC1JTlRF
UlBPTEFURSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkxvdzoKKyAgICAgICAgdHMgPDwgIkxPVyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgdHMgPDwgIk1FRElVTSI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAg
IHRzIDw8ICJIRUlHSCI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQogICAgIHJldHVybiB0czsK
IH0KIApAQCAtMTY2LDYgKzE5MCwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBMaW5lQ2FwIGNhcFN0eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZURhc2gpCit7CisgICAgcmV0dXJuIHRz
OworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBq
b2luU3R5bGUpCiB7CiAgICAgc3dpdGNoIChqb2luU3R5bGUpIHsKQEAgLTE4Miw0ICsyMTEsNTYg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gam9pblN0
eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit7CisgICAgc3dpdGNoIChzdHJva2VT
dHlsZSkgeworICAgIGNhc2UgU3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlOgorICAgICAgICB0cyA8PCAi
Tk8tU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6U29saWRT
dHJva2U6CisgICAgICAgIHRzIDw8ICJTT0xJRC1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2U6CisgICAgICAgIHRzIDw8ICJET1RURUQt
U1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RGFzaGVkU3Ry
b2tlOgorICAgICAgICB0cyA8PCAiREFTSEVELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRPVUJMRS1T
VFJPS0UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tl
OgorICAgICAgICB0cyA8PCAiV0FWWS1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBUZXh0RHJhd2luZ01vZGUgdGV4dERyYXdpbmdNb2RlKQoreworICAgIHN3aXRjaCAodGV4dERy
YXdpbmdNb2RlKSB7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OkZpbGw6CisgICAgICAgIHRz
IDw8ICJGSUxMIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OlN0
cm9rZToKKyAgICAgICAgdHMgPDwgIlNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFdpbmRSdWxlIHJ1bGUpCit7CisgICAgc3dpdGNoIChydWxlKSB7CisgICAgY2FzZSBXaW5kUnVs
ZTo6Tm9uWmVybzoKKyAgICAgICAgdHMgPDwgIk5PTi1aRVJPIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXaW5kUnVsZTo6RXZlbk9kZDoKKyAgICAgICAgdHMgPDwgIkVWRU4tT0REIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmgKaW5kZXggNGQyMDRlOTdlNWM1NDRkNzc2YmZhN2YzMGFhY2MxYjdjNDYzZTBlMC4u
MGY4YjJkMDI3NTViZmFlYzY1ZDk1YzA0ZjJjNDViNTI0OTRmMjYzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGFz
aEFycmF5LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIK
ICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC03Myw2ICs3Niw3OSBAQCBlbnVtIGNsYXNzIEJsZW5kTW9kZSA6IHVpbnQ4X3QgewogICAgIFBs
dXNMaWdodGVyCiB9OwogCitzdHJ1Y3QgQ29tcG9zaXRlTW9kZSB7CisgICAgQ29tcG9zaXRlT3Bl
cmF0b3Igb3BlcmF0aW9uOworICAgIEJsZW5kTW9kZSBibGVuZE1vZGU7CisKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ29tcG9zaXRlTW9kZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1
cm4gb3BlcmF0aW9uID09IG90aGVyLm9wZXJhdGlvbiAmJiBibGVuZE1vZGUgPT0gb3RoZXIuYmxl
bmRNb2RlOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3Rl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENvbXBvc2l0ZU1vZGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgb3BlcmF0aW9uOworICAgIGVuY29k
ZXIgPDwgYmxlbmRNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRp
b25hbDxDb21wb3NpdGVNb2RlPiBDb21wb3NpdGVNb2RlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBvcGVyYXRpb247Cisg
ICAgZGVjb2RlciA+PiBvcGVyYXRpb247CisgICAgaWYgKCFvcGVyYXRpb24pCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRN
b2RlOworICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOworICAgIGlmICghYmxlbmRNb2RlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb3BlcmF0aW9uLCAq
YmxlbmRNb2RlIH0gfTsKK30KKworc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAg
ICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgVGV4dENoZWNraW5nRGljdGF0
aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKKyAgICAgICAgU3BlbGxpbmcsCisgICAgICAgIEdy
YW1tYXIsCisgICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgICAgIERpY3Rh
dGlvbkFsdGVybmF0aXZlcworICAgIH0gbW9kZTsKKyAgICBib29sIHNob3VsZFVzZURhcmtBcHBl
YXJhbmNlIHsgZmFsc2UgfTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsK
K307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0
eWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1v
ZGU7CisgICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+
IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlm
ICghbW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRV
c2VEYXJrQXBwZWFyYW5jZTsKKyAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqbW9kZSwgKnNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlIH0gfTsKK30KKwogZW51bSBjbGFzcyBHcmFkaWVudFNwcmVhZE1l
dGhvZCA6IHVpbnQ4X3QgewogICAgIFBhZCwKICAgICBSZWZsZWN0LApAQCAtOTMsNiArMTY5LDQy
IEBAIGVudW0gY2xhc3MgTGluZUNhcCA6IHVpbnQ4X3QgewogICAgIFNxdWFyZQogfTsKIAorc3Ry
dWN0IExpbmVEYXNoIHsKKyAgICBEYXNoQXJyYXkgZGFzaGVzOworICAgIGZsb2F0IG9mZnNldDsK
KyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IExpbmVEYXNoJiBhLCBjb25zdCBMaW5lRGFzaCYgYikKK3sKKyAgICByZXR1cm4gYS5k
YXNoZXMgPT0gYi5kYXNoZXMgJiYgYS5vZmZzZXQgPT0gYi5vZmZzZXQ7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGRhc2hlczsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGluZURhc2g+IExp
bmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERh
c2hBcnJheT4gZGFzaGVzOworICAgIGRlY29kZXIgPj4gZGFzaGVzOworICAgIGlmICghZGFzaGVz
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9h
dD4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpkYXNo
ZXMpLCAqb2Zmc2V0IH0gfTsKK30KKwogZW51bSBjbGFzcyBMaW5lSm9pbiA6IHVpbnQ4X3Qgewog
ICAgIE1pdGVyLAogICAgIFJvdW5kLApAQCAtMTA1LDYgKzIxNyw3NiBAQCBlbnVtIEhvcml6b250
YWxBbGlnbm1lbnQgewogICAgIEFsaWduSENlbnRlcgogfTsKIAorLy8gTGVnYWN5IHNoYWRvdyBi
bHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisv
LyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xhc3Mg
U2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9Owor
CitzdHJ1Y3QgRHJvcFNoYWRvdyB7CisgICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICBmbG9hdCBi
bHVyUmFkaXVzIHsgMCB9OworICAgIENvbG9yIGNvbG9yOworICAgIFNoYWRvd1JhZGl1c01vZGUg
cmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKKyAgICAKKyAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9v
bCBpc0JsdXJyZWQoKSBjb25zdCB7IHJldHVybiBpc1Zpc2libGUoKSAmJiBibHVyUmFkaXVzOyB9
CisgICAgYm9vbCBoYXNPdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gaXNCbHVycmVkKCkgfHwgKGlz
VmlzaWJsZSgpICYmICFvZmZzZXQuaXNaZXJvKCkpOyB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IGRlY29kZShEZWNv
ZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERyb3BTaGFkb3cmIGEs
IGNvbnN0IERyb3BTaGFkb3cmIGIpCit7CisgICAgcmV0dXJuIGEub2Zmc2V0ID09IGIub2Zmc2V0
ICYmIGEuYmx1clJhZGl1cyA9PSBiLmJsdXJSYWRpdXMgJiYgYS5jb2xvciA9PSBiLmNvbG9yICYm
IGEucmFkaXVzTW9kZSA9PSBiLnJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIERyb3BTaGFkb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgb2Zmc2V0OworICAgIGVuY29kZXIgPDwgYmx1clJhZGl1czsKKyAgICBl
bmNvZGVyIDw8IGNvbG9yOworICAgIGVuY29kZXIgPDwgcmFkaXVzTW9kZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gRHJvcFNoYWRvdzo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+
IG9mZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJsdXJS
YWRpdXM7CisgICAgZGVjb2RlciA+PiBibHVyUmFkaXVzOworICAgIGlmICghYmx1clJhZGl1cykK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+
IGNvbG9yOworICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9k
ZT4gcmFkaXVzTW9kZTsKKyAgICBkZWNvZGVyID4+IHJhZGl1c01vZGU7CisgICAgaWYgKCFyYWRp
dXNNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAq
b2Zmc2V0LCAqYmx1clJhZGl1cywgKmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07Cit9CisKK2VudW0g
U3Ryb2tlU3R5bGUgeworICAgIE5vU3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tlLAorICAgIERvdHRl
ZFN0cm9rZSwKKyAgICBEYXNoZWRTdHJva2UsCisgICAgRG91YmxlU3Ryb2tlLAorICAgIFdhdnlT
dHJva2UsCit9OworCiBlbnVtIFRleHRCYXNlbGluZSB7CiAgICAgQWxwaGFiZXRpY1RleHRCYXNl
bGluZSwKICAgICBUb3BUZXh0QmFzZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwyOSBAQCBlbnVtIFRl
eHRBbGlnbiB7CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLVN0cmluZyBjb21wb3NpdGVPcGVy
YXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7
Ci1TdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwotYm9vbCBwYXJzZUJs
ZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKLWJvb2wgcGFyc2VD
b21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0
ZU9wZXJhdG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CitlbnVtIGNsYXNzIFRleHREcmF3aW5n
TW9kZSA6IHVpbnQ4X3QgeworICAgIEZpbGwgPSAxIDw8IDAsCisgICAgU3Ryb2tlID0gMSA8PCAx
LAorfTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRl
T3BlcmF0b3IpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKK3VzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0g
T3B0aW9uU2V0PFRleHREcmF3aW5nTW9kZT47CisKK1N0cmluZyBjb21wb3NpdGVPcGVyYXRvck5h
bWUoQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CitTdHJpbmcgYmxlbmRNb2RlTmFtZShC
bGVuZE1vZGUpOworYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBCbGVuZE1vZGUm
KTsKK2Jvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENv
bXBvc2l0ZU9wZXJhdG9yJiwgQmxlbmRNb2RlJik7CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBCbGVuZE1vZGUpOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENv
bXBvc2l0ZU9wZXJhdG9yKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDb21wb3NpdGVNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEcm9wU2hh
ZG93Jik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExp
bmVEYXNoKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgU3Ryb2tlU3R5bGUpOworV0VCQ09SRV9FWFBP
UlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFRleHREcmF3
aW5nTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKQEAg
LTIxOSw0ICs0MTQsMzUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpM
aW5lSm9pbj4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlN0cm9rZVN0eWxlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICBXZWJDb3JlOjpTdHJva2VTdHlsZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6Tm9TdHJv
a2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAorICAgIFdlYkNvcmU6
OlN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRh
c2hlZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG91YmxlU3Ryb2tlLAorICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlPiB7CisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2Rl
LAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OkZpbGwsCisgICAgICAgIFdlYkNv
cmU6OlRleHREcmF3aW5nTW9kZTo6U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpNb2RlLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
OjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAorICAg
IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKKyAgICBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNl
bWVudCwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVzCisgICAgPjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VH
ZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggNGUwNzFmNzJmMzViZThhNThmYzRjZDU3N2ExNDU2ZGUx
NzQ2NjgyYy4uNDFiMDUxMWE4Zjc4YTE3OWIzMDRjZjg5ZDQxMDNlMzVkZTNlMTI1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYW1lZElt
YWdlR2VuZXJhdGVkSW1hZ2UuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBO
YW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGCiB7CiAjaWYgVVNFKE5FV19USEVNRSkgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBv
cHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRp
b25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29u
dGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QubG9jYXRp
b24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oCmluZGV4IGI2MjM2Nzg4MGUzZTUzNTRiNjE3MTEzNDdjOWExMWI0MjI0Njg4NWUuLmQ2N2Qz
ZWExMTVkMjRlZmQ5MDllMDNhYzlhZGU5M2E4YjQ3NjRmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsODcg
KzM4LDU3IEBAIHB1YmxpYzoKICAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CiAgICAg
fTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJl
YXNvbnMpCi0gICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAg
ICBOdWxsR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIFBhaW50
SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQorICAgICAgICA6IEdyYXBoaWNzQ29udGV4dChp
bml0aWFsQ2xpcCkKKyAgICAgICAgLCBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25z
KQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0KICAgICBib29sIHBhaW50
aW5nRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBwZXJm
b3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52
YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KICAg
ICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJl
YXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzOyB9CiAgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQogCi0gICAgdm9pZCBk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KLQotI2lmIFVTRShDRykKLSAgICB2
b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQotI2VuZGlmCi0KLSAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfTsKLQotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KLQotICAgIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotCisgICAgdm9pZCBzYXZlKCkgZmluYWwg
eyB9CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVN0YXRlQ2hh
bmdlcygpIGZpbmFsIHsgfTsKICNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRl
cm4oKSBmaW5hbCB7IH0KICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KLSAg
ICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgdm9p
ZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQotICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAg
IHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9Ci0g
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBS
b3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9Ci0gICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFz
aEFycmF5JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWwgeyB9Ci0gICAgdm9p
ZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0
KGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsIHsg
fQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWwgeyB9Ci0gICAgdm9pZCBy
b3RhdGUoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmlu
YWwgeyB9Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwgeyB9
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJs
eUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWwgeyB9CisKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCkgZmluYWwgeyB9CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsIHsgfQotICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgcmVzdG9yZSgp
IGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBGbG9hdFNpemUgZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQp
IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsg
fQorICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAKLSAgICB2b2lk
IGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21TdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3
QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2Fk
ZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQorICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsIHsgfQor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQogCi0gICAgSW1hZ2VEcmF3UmVz
dWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAg
IHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7
IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxv
YXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CkBAIC0xMjcsMjgg
Kzk3LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KICNlbmRp
ZgogCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0KLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0Um91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0K
LQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0K
LQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotCisgICAgdm9pZCBkcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBGaWx0ZXIm
LCBGaWx0ZXJSZXN1bHRzJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbCB7IH0KICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KICNlbmRpZgog
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwg
U3Ryb2tlU3R5bGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisK
KyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KKwog
I2lmIE9TKFdJTkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotcHJpdmF0ZToKICAgICBjb25zdCBQYWludEludmFsaWRh
dGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgeyBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6Ok5vbmUgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdl
MDFmZDM5NDY0MzM5ZDJkNGQ1NGJhOTM2NGM1OTQ1Y2ZhZDdkNWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAi
RElCUGl4ZWxEYXRhLmgiCit0eXBlZGVmIHN0cnVjdCBIRENfXyogSERDOworI2lmICFVU0UoQ0cp
CisvLyBVSW50OCBpcyBkZWZpbmVkIGluIENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oCit0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgVUludDg7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFKENHKQordXNp
bmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBzdHJ1Y3QgQ0dDb250ZXh0OworI2VsaWYgVVNF
KENBSVJPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87
Cit9Cit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOworI2Vsc2UKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gdm9pZDsK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcAppbmRleCBiYjEzOGI1Mjk3YTUyMWZiZjdkNjkzY2QxMTQxMDQ0MDBmY2FiYzRlLi45MDI0
ZjVkMWFiZmNlMzgwODE4M2EzYjIzMWZiY2UwZmZiMmZmNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkxLDE3ICsxOTEsMTcg
QEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICB1cGRhdGVTaGFkb3dCbHVyVmFsdWVzKCk7
CiB9CiAKLVNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlKQotICAgIDogbV9jb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIG1fYmx1clJh
ZGl1cyhzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dCbHVyKQotICAgICwgbV9vZmZzZXQo
c3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3Qg
RHJvcFNoYWRvdyYgZHJvcFNoYWRvdywgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKKyAg
ICA6IG1fY29sb3IoZHJvcFNoYWRvdy5jb2xvcikKKyAgICAsIG1fYmx1clJhZGl1cyhkcm9wU2hh
ZG93LmJsdXJSYWRpdXMsIGRyb3BTaGFkb3cuYmx1clJhZGl1cykKKyAgICAsIG1fb2Zmc2V0KGRy
b3BTaGFkb3cub2Zmc2V0KQorICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gQ29yZSBHcmFwaGljcyBp
bmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJv
YmxlbS84MTAzNDQyPiksCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdn
eSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgaWYgKHN0
YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KSB7Ci0gICAg
ICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0ZS5zaGFkb3dC
bHVyKTsKKyAgICBpZiAoZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSkgeworICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRp
dXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVzKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRT
aXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCmluZGV4IDE0ZmQ4M2VkZTFhMWJh
Y2YxNzdmMzMxZWNhZDFhNDMwMjkzZjYwM2EuLjQ1ZDBlNTgzMjljZGVlYWJmYjc4YTRkNWU2N2Fi
OGQ4ODFhZTU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmgKQEAgLTM4LDggKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBB
ZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1zdHJ1Y3QgR3JhcGhpY3ND
b250ZXh0U3RhdGU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIEltYWdlQnVm
ZmVyOworc3RydWN0IERyb3BTaGFkb3c7CiAKIGNsYXNzIFNoYWRvd0JsdXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNoYWRvd0JsdXIpOwpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAK
ICAgICBTaGFkb3dCbHVyKCk7CiAgICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgYm9vbCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKLSAgICBTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJik7CisgICAgU2hhZG93Qmx1cihjb25zdCBEcm9wU2hhZG93JiwgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93VmFsdWVz
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIGJvb2wg
aWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNmFjMTNmZDI1YzZmMGY4
MDE1ODcyZmYxOWVkMjhhMWZhNTJiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTb3VyY2VCcnVzaDo6U291cmNlQnJ1c2goY29uc3QgQ29sb3ImIGNvbG9yLCBzdGQ6Om9wdGlv
bmFsPEJydXNoPiYmIGJydXNoKQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAsIG1fYnJ1c2go
V1RGTW92ZShicnVzaCkpCit7Cit9CisKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgU291cmNlQnJ1
c2g6OnNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QWZmaW5lVHJhbnNmb3JtPiBpZGVudGl0eTsKKyAgICByZXR1cm4gbV9icnVzaCA/IG1fYnJ1c2gt
PnNwYWNlVHJhbnNmb3JtIDogaWRlbnRpdHkuZ2V0KCk7Cit9CisKK0dyYWRpZW50KiBTb3VyY2VC
cnVzaDo6Z3JhZGllbnQoKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8qIGdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdy
YWRpZW50Pj4oJm1fYnJ1c2gtPmJydXNoKSkKKyAgICAgICAgcmV0dXJuIGdyYWRpZW50LT5wdHIo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGF0dGVybiogU291cmNlQnJ1c2g6OnBhdHRl
cm4oKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKGF1dG8qIHBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZtX2Jy
dXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBwYXR0ZXJuLT5wdHIoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQoUmVmPEdyYWRpZW50
PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQorewor
ICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSB9OworfQor
Cit2b2lkIFNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pCit7CisgICAgbV9icnVzaCA9IHsg
V1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKworV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTb3VyY2VCcnVzaCYgYnJ1c2gpCit7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGJydXNoLmNvbG9yKCkpOworCisgICAgaWYg
KGF1dG8gZ3JhZGllbnQgPSBicnVzaC5ncmFkaWVudCgpKQorICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoImdyYWRpZW50IiwgZ3JhZGllbnQpOworCisgICAgaWYgKGF1dG8gcGF0dGVybiA9IGJydXNo
LnBhdHRlcm4oKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuIiwgcGF0dGVybik7
CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcx
MTBmMjFmZGJlYWNiZjM1ZDc4OTBjNzhmNzM5OTc5NjRhZGZlYTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCkBAIC0wLDAg
KzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5o
IgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
b3VyY2VCcnVzaCB7CitwdWJsaWM6CisgICAgc3RydWN0IEJydXNoIHsKKyAgICAgICAgc3RkOjp2
YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4gYnJ1c2g7CisgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBzcGFjZVRyYW5zZm9ybTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEJydXNoPiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIH07CisKKyAgICBTb3VyY2VCcnVzaCgpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBTb3VyY2VCcnVzaChjb25zdCBDb2xvciYsIHN0ZDo6b3B0aW9uYWw8QnJ1c2g+JiYg
PSBzdGQ6Om51bGxvcHQpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3IgY29sb3IpIHsgbV9j
b2xvciA9IGNvbG9yOyB9CisKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYgYnJ1c2go
KSBjb25zdCB7IHJldHVybiBtX2JydXNoOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFkaWVu
dCogZ3JhZGllbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXR0ZXJuKiBwYXR0ZXJu
KCkgY29uc3Q7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSgpIGNv
bnN0OworCisgICAgdm9pZCBzZXRHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworICAgIHZvaWQgc2V0UGF0dGVybihS
ZWY8UGF0dGVybj4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsg
fSk7CisKKyAgICBib29sIGlzUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gIW1fYnJ1c2ggJiYg
bV9jb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBkZWNvZGUoRGVjb2RlciYp
OworCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBz
dGQ6Om9wdGlvbmFsPEJydXNoPiBtX2JydXNoOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50PiwgUmVmPFBhdHRlcm4+PiYgYSwgY29u
c3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGIpCit7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24oYSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+
JiBhR3JhZGllbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBiR3JhZGllbnQgPSBzdGQ6Omdl
dF9pZjxSZWY8R3JhZGllbnQ+PigmYikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFHcmFkaWVu
dC5wdHIoKSA9PSBiR3JhZGllbnQtPnB0cigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgYVBhdHRlcm4pIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBiUGF0dGVybiA9IHN0ZDo6Z2V0X2lmPFJlZjxQYXR0ZXJu
Pj4oJmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhUGF0dGVybi5wdHIoKSA9PSBiUGF0dGVy
bi0+cHRyKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICApOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYSwg
Y29uc3QgU291cmNlQnJ1c2g6OkJydXNoJiBiKQoreworICAgIHJldHVybiBhLmJydXNoID09IGIu
YnJ1c2ggJiYgYS5zcGFjZVRyYW5zZm9ybSA9PSBiLnNwYWNlVHJhbnNmb3JtOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoJiBhLCBjb25zdCBTb3VyY2VCcnVz
aCYgYikKK3sKKyAgICByZXR1cm4gYS5jb2xvcigpID09IGIuY29sb3IoKSAmJiBhLmJydXNoKCkg
PT0gYi5icnVzaCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBTb3Vy
Y2VCcnVzaDo6QnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgc3BhY2VUcmFuc2Zvcm07CisgICAgV1RGOjpzd2l0Y2hPbihicnVzaCwKKyAgICAg
ICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+JiBncmFkaWVudCkgeworICAgICAgICAgICAgZW5j
b2RlciA8PCB0cnVlIDw8IGdyYWRpZW50LmdldCgpOworICAgICAgICB9LAorICAgICAgICBbJl0g
KGNvbnN0IFJlZjxQYXR0ZXJuPiYgcGF0dGVybikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBm
YWxzZSA8PCBwYXR0ZXJuLmdldCgpOworICAgICAgICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g6OkJydXNoPiBTb3Vy
Y2VCcnVzaDo6QnJ1c2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBzcGFjZVRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHNw
YWNlVHJhbnNmb3JtOworICAgIGlmICghc3BhY2VUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGhhc0dyYWRpZW50OworICAg
IGRlY29kZXIgPj4gaGFzR3JhZGllbnQ7CisgICAgaWYgKCFoYXNHcmFkaWVudCkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBpZiAoKmhhc0dyYWRpZW50KSB7CisgICAg
ICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBp
ZiAoIWdyYWRpZW50KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIHsgeyBXVEZNb3ZlKCpncmFkaWVudCksICpzcGFjZVRyYW5zZm9ybSB9IH07CisgICAg
fQorCisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOworICAgIGlm
ICghcGF0dGVybikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7
IFdURk1vdmUoKnBhdHRlcm4pLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBTb3VyY2VCcnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9icnVz
aDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1
c2g+IFNvdXJjZUJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29s
b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0
ZDo6b3B0aW9uYWw8QnJ1c2g+PiBicnVzaDsKKyAgICBkZWNvZGVyID4+IGJydXNoOworICAgIGlm
ICghYnJ1c2gpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU291
cmNlQnJ1c2goKmNvbG9yLCBXVEZNb3ZlKCpicnVzaCkpOworfQorCitXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgU291cmNlQnJ1c2gmKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UZXh0Qm94SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBjZjY1
YmEyYzEwZTg4ODhkZDQ5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRleHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0
Qm94SXRlcmF0b3IgeworcHVibGljOgorICAgIFRleHRCb3hJdGVyYXRvcigpCisgICAgICAgIDog
bV90ZXh0UnVuKDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAg
VGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkK
KyAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CisgICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBib29s
IGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRS
dW4tPmxlbmd0aCgpOyB9CisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90
ZXh0UnVuKVttX29mZnNldF07IH0KKyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1
cnJlbnQoKSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1f
b2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
ICFvcGVyYXRvcj09KG90aGVyKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1f
dGV4dFJ1bjsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDcyOGQzYmVhMGExNzIzNTAxNGYwZjEyY2YzZDZkN2Rh
MTkzYzM1YTUuLjE1ZTg0NTU3YWM4MWE3NjdhMDA3NDZlMzAxNjE1MzU0NGYyMTU2N2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcApAQCAtMTgzNCw3ICsxODM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJl
Y3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmEK
ICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwg
c2l6ZSgpKTsKIAotICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1f
ZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVU
cmFuc2Zvcm0oKSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4dCgq
bV9kaXNwbGF5TGlzdCwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAgICAg
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1NmEy
M2E1ZmRmYjEwYWZlY2EyY2M5MmE3Mjc5NDU4MTAyZS4uNGU2MjFkNWQ0MWJhMzE0NTkxOWM5N2Iy
OTlmNDRhNjgwOWI1ZDQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0yMjcsNyArMjI3LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEYKICAgICAgICAgc29saWRGaWd1cmVFeHRlbnRzLnVu
aXRlKGZpbGxFeHRlbnRzKTsKICAgICB9CiAKLSAgICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0
YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZv
cm1Db250ZXh0KSwgc29saWRGaWd1cmVFeHRlbnRzLAorICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5
ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91
bmRzKHBsYXRmb3JtQ29udGV4dCksIHNvbGlkRmlndXJlRXh0ZW50cywKICAgICAgICAgW2NhaXJv
Q29udGV4dCwgZHJhd2luZ1N0eWxlLCAmcGF0aCwgJmZpbGxTb3VyY2UsICZzdHJva2VTb3VyY2Vd
KEdyYXBoaWNzQ29udGV4dCYgc2hhZG93Q29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAg
Y2Fpcm9fdCogY2Fpcm9TaGFkb3dDb250ZXh0ID0gc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKTsKQEAgLTM0MSw3ICszNDEsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hh
ZG93KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFNoYWRvdwog
ICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMoc2NhbGVkRm9udCwgZ2x5cGhzLmRh
dGEoKSwgZ2x5cGhzLnNpemUoKSwgJmV4dGVudHMpOwogICAgIEZsb2F0UmVjdCBmb250RXh0ZW50
c1JlY3QocG9pbnQueCgpICsgZXh0ZW50cy54X2JlYXJpbmcsIHBvaW50LnkoKSArIGV4dGVudHMu
eV9iZWFyaW5nLCBleHRlbnRzLndpZHRoLCBleHRlbnRzLmhlaWdodCk7CiAKLSAgICBzaGFkb3cu
ZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6Omdl
dENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZm9udEV4dGVudHNSZWN0LAorICAgIHNoYWRv
dy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0
YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGZvbnRFeHRlbnRzUmVjdCwKICAg
ICAgICAgW3NjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsICZnbHlwaHMsIGZvbnRTbW9v
dGhpbmdNb2RlXShHcmFwaGljc0NvbnRleHQmIHNoYWRvd0NvbnRleHQpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGRyYXdHbHlwaHNUb0NvbnRleHQoc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBmb250
U21vb3RoaW5nTW9kZSk7CkBAIC0zNjcsNyArMzY3LDcgQEAgRmxvYXRSZWN0IGNvbXB1dGVMaW5l
Qm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBs
YXQKICAgICBpZiAocHJpbnRpbmcpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBG
bG9hdFNpemUod2lkdGgsIHRoaWNrbmVzcykpOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCk7CisgICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSA9IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4
dC5jcigpKTsKICAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3Vt
aW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KICAgICBmbG9hdCBzY2FsZSA9IHRyYW5zZm9y
bS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJhbnNm
b3JtLmEoKTsKICAgICBpZiAoc2NhbGUgPCAxLjApIHsKQEAgLTQ0NiwxNyArNDQ2LDE2IEBAIHN0
YXRpYyBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBp
c1ZlcnRpY2FsTGluZSwgZmxvYXQKIAogbmFtZXNwYWNlIFN0YXRlIHsKIAotdm9pZCBzZXRTdHJv
a2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQg
c3Ryb2tlVGhpY2tuZXNzKQordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCogY3IsIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcykKIHsKLSAgICBjYWlyb19zZXRfbGluZV93aWR0aChwbGF0Zm9y
bUNvbnRleHQuY3IoKSwgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBjYWlyb19zZXRfbGluZV93aWR0
aChjciwgc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBzZXRTdHJva2VTdHlsZShHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkK
K3ZvaWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCogY3IsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KQogewogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGFzaFBhdHRlcm5bXSA9IHsgNS4wLCA1LjAg
fTsKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRvdFBhdHRlcm5bXSA9IHsgMS4wLCAxLjAgfTsK
IAotICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAgICAgc3dpdGNoIChz
dHJva2VTdHlsZSkgewogICAgIGNhc2UgTm9TdHJva2U6CiAgICAgICAgIC8vIEZJWE1FOiBpcyBp
dCB0aGUgcmlnaHQgd2F5IHRvIGVtdWxhdGUgTm9TdHJva2U/CkBAIC00NzcsMjkgKzQ3NiwyOSBA
QCB2b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eQogICAgIH0KIH0KIAotdm9pZCBzZXRDb21wb3NpdGVP
cGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBz
ZXRDb21wb3NpdGVPcGVyYXRpb24oY2Fpcm9fdCogY3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBjYWlyb19zZXRfb3Bl
cmF0b3IocGxhdGZvcm1Db250ZXh0LmNyKCksIHRvQ2Fpcm9PcGVyYXRvcihjb21wb3NpdGVPcGVy
YXRpb24sIGJsZW5kTW9kZSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgdG9DYWlyb09w
ZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CiB9CiAKLXZvaWQgc2V0U2hv
dWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGJvb2wg
ZW5hYmxlKQordm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoY2Fpcm9fdCogY3IsIGJvb2wgZW5hYmxl
KQogewogICAgIC8vIFdoZW4gdHJ1ZSwgdXNlIHRoZSBkZWZhdWx0IENhaXJvIGJhY2tlbmQgYW50
aWFsaWFzIG1vZGUgKHVzdWFsbHkgdGhpcwogICAgIC8vIGVuYWJsZXMgc3RhbmRhcmQgJ2dyYXlz
Y2FsZScgYW50aWFsaWFzaW5nKTsgZmFsc2UgdG8gZXhwbGljaXRseSBkaXNhYmxlCiAgICAgLy8g
YW50aWFsaWFzaW5nLgotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0LmNy
KCksIGVuYWJsZSA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05P
TkUpOworICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY3IsIGVuYWJsZSA/IENBSVJPX0FOVElBTElB
U19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05PTkUpOwogfQogCi12b2lkIHNldENUTShHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqIGNyLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKIHsKICAgICBjb25zdCBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSB0b0Nh
aXJvTWF0cml4KHRyYW5zZm9ybSk7Ci0gICAgY2Fpcm9fc2V0X21hdHJpeChwbGF0Zm9ybUNvbnRl
eHQuY3IoKSwgJm1hdHJpeCk7CisgICAgY2Fpcm9fc2V0X21hdHJpeChjciwgJm1hdHJpeCk7CiB9
CiAKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCkKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCogY3IpCiB7CiAgICAgY2Fp
cm9fbWF0cml4X3QgbTsKLSAgICBjYWlyb19nZXRfbWF0cml4KHBsYXRmb3JtQ29udGV4dC5jcigp
LCAmbSk7CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwogICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0obS54eCwgbS55eCwgbS54eSwgbS55eSwgbS54MCwgbS55MCk7CiB9CiAKQEAgLTU1
Niw0NSArNTU1LDQ1IEBAIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKIH0gLy8gbmFtZXNwYWNlIFN0YXRlCiAKIEZpbGxTb3Vy
Y2U6OkZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDog
Z2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEpCi0gICAgLCBmaWxsUnVsZShzdGF0ZS5maWxsUnVsZSkK
KyAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkpCisgICAgLCBmaWxsUnVsZShzdGF0ZS5m
aWxsUnVsZSgpKQogewotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikgewotICAgICAgICBwYXR0
ZXJuLm9iamVjdCA9IGFkb3B0UmVmKHN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpKTsKKyAgICBpZiAoYXV0byBmaWxsUGF0dGVybiA9IHN0
YXRlLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkgeworICAgICAgICBwYXR0ZXJuLm9iamVjdCA9IGFk
b3B0UmVmKGZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3Jt
KCkpKTsKIAotICAgICAgICBhdXRvJiBwYXR0ZXJuSW1hZ2UgPSBzdGF0ZS5maWxsUGF0dGVybi0+
dGlsZUltYWdlKCk7CisgICAgICAgIGF1dG8mIHBhdHRlcm5JbWFnZSA9IGZpbGxQYXR0ZXJuLT50
aWxlSW1hZ2UoKTsKICAgICAgICAgcGF0dGVybi5zaXplID0gcGF0dGVybkltYWdlLnNpemUoKTsK
LSAgICAgICAgcGF0dGVybi50cmFuc2Zvcm0gPSBzdGF0ZS5maWxsUGF0dGVybi0+cGF0dGVyblNw
YWNlVHJhbnNmb3JtKCk7Ci0gICAgICAgIHBhdHRlcm4ucmVwZWF0WCA9IHN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRYKCk7Ci0gICAgICAgIHBhdHRlcm4ucmVwZWF0WSA9IHN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRZKCk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQpIHsKLSAg
ICAgICAgZ3JhZGllbnQuYmFzZSA9IHN0YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigx
LCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmIChzdGF0ZS5h
bHBoYSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRlLmZp
bGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSwgc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9IGZpbGxQYXR0ZXJu
LT5wYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gZmls
bFBhdHRlcm4tPnJlcGVhdFgoKTsKKyAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gZmlsbFBhdHRl
cm4tPnJlcGVhdFkoKTsKKyAgICB9IGVsc2UgaWYgKGF1dG8gZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEJydXNoKCkuZ3JhZGllbnQoKSkgeworICAgICAgICBncmFkaWVudC5iYXNlID0gZmlsbEdy
YWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEsIHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3Jt
KCkpOworICAgICAgICBpZiAoc3RhdGUuYWxwaGEoKSAhPSAxKQorICAgICAgICAgICAgZ3JhZGll
bnQuYWxwaGFBZGp1c3RlZCA9IGZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBo
YSgpLCBzdGF0ZS5maWxsQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgY29sb3IgPSBzdGF0ZS5maWxsQ29sb3I7CisgICAgICAgIGNvbG9yID0gc3RhdGUuZmls
bEJydXNoKCkuY29sb3IoKTsKIH0KIAogU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxw
aGEpCi17Ci0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pCi0gICAgICAgIHBhdHRlcm4gPSBh
ZG9wdFJlZihzdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5l
VHJhbnNmb3JtKCkpKTsKLSAgICBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkgewotICAg
ICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4o
MSwgc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmIChzdGF0
ZS5hbHBoYSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRl
LnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhLCBzdGF0ZS5zdHJva2VH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkp
Cit7CisgICAgaWYgKGF1dG8gc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZUJydXNoKCkucGF0
dGVybigpKQorICAgICAgICBwYXR0ZXJuID0gYWRvcHRSZWYoc3Ryb2tlUGF0dGVybi0+Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgZWxzZSBpZiAoYXV0byBz
dHJva2VHcmFkaWVudCA9IHN0YXRlLnN0cm9rZUJydXNoKCkuZ3JhZGllbnQoKSkgeworICAgICAg
ICBncmFkaWVudC5iYXNlID0gc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3RhdGUu
c3Ryb2tlQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgaWYgKHN0YXRlLmFscGhh
KCkgIT0gMSkKKyAgICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBzdHJva2VHcmFk
aWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSgpLCBzdGF0ZS5zdHJva2VCcnVzaCgpLnNw
YWNlVHJhbnNmb3JtKCkpOwogICAgIH0gZWxzZQotICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9r
ZUNvbG9yOworICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsKIH0K
IAogU2hhZG93U3RhdGU6OlNoYWRvd1N0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSkKLSAgICA6IG9mZnNldChzdGF0ZS5zaGFkb3dPZmZzZXQpCi0gICAgLCBibHVyKHN0YXRl
LnNoYWRvd0JsdXIpCi0gICAgLCBjb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIGlnbm9y
ZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgLCBnbG9iYWxB
bHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yKQorICAgIDogb2Zmc2V0KHN0YXRlLmRyb3BTaGFkb3coKS5vZmZzZXQp
CisgICAgLCBibHVyKHN0YXRlLmRyb3BTaGFkb3coKS5ibHVyUmFkaXVzKQorICAgICwgY29sb3Io
c3RhdGUuZHJvcFNoYWRvdygpLmNvbG9yKQorICAgICwgaWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKQorICAgICwgZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEo
KSkKKyAgICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNvbXBvc2l0ZU1vZGUoKS5v
cGVyYXRpb24pCiB7CiB9CiAKQEAgLTYxNSwxNCArNjE0LDE0IEBAIGJvb2wgU2hhZG93U3RhdGU6
OmlzUmVxdWlyZWQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2UgY2FuIGF2b2lkIFNoYWRvd0JsdXIs
IHNpbmNlIHRoZXJlIGFyZSBubyB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGNhbnZh
cy4KLSAgICBpZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLmlzSWRlbnRpdHkoKSkK
KyAgICBpZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSkuaXNJZGVudGl0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBPdGhlcndpc2UsIG5vIGNoYW5jZSBh
dm9pZGluZyBTaGFkb3dCbHVyLgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIHNldExpbmVD
YXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2Fw
KQordm9pZCBzZXRMaW5lQ2FwKGNhaXJvX3QqIGNyLCBMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAg
Y2Fpcm9fbGluZV9jYXBfdCBjYWlyb0NhcCB7IH07CiAgICAgc3dpdGNoIChsaW5lQ2FwKSB7CkBA
IC02MzYsMTggKzYzNSwxOCBAQCB2b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQogICAgICAgICBjYWlyb0NhcCA9IENB
SVJPX0xJTkVfQ0FQX1NRVUFSRTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3Nl
dF9saW5lX2NhcChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fpcm9DYXApOworICAgIGNhaXJvX3Nl
dF9saW5lX2NhcChjciwgY2Fpcm9DYXApOwogfQogCi12b2lkIHNldExpbmVEYXNoKEdyYXBoaWNz
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQordm9pZCBzZXRMaW5lRGFzaChjYWlyb190KiBjciwgY29uc3QgRGFz
aEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7CiAgICAgaWYgKHN0ZDo6YWxsX29m
KGRhc2hlcy5iZWdpbigpLCBkYXNoZXMuZW5kKCksIFtdKGF1dG8mIGRhc2gpIHsgcmV0dXJuICFk
YXNoOyB9KSkKLSAgICAgICAgY2Fpcm9fc2V0X2Rhc2gocGxhdGZvcm1Db250ZXh0LmNyKCksIDAs
IDAsIDApOworICAgICAgICBjYWlyb19zZXRfZGFzaChjciwgMCwgMCwgMCk7CiAgICAgZWxzZQot
ICAgICAgICBjYWlyb19zZXRfZGFzaChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgZGFzaGVzLmRhdGEo
KSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7CisgICAgICAgIGNhaXJvX3NldF9kYXNoKGNy
LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBz
ZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9p
biBsaW5lSm9pbikKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCogY3IsIExpbmVKb2luIGxpbmVK
b2luKQogewogICAgIGNhaXJvX2xpbmVfam9pbl90IGNhaXJvSm9pbiB7IH07CiAgICAgc3dpdGNo
IChsaW5lSm9pbikgewpAQCAtNjYxLDEyICs2NjAsMTIgQEAgdm9pZCBzZXRMaW5lSm9pbihHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikKICAg
ICAgICAgY2Fpcm9Kb2luID0gQ0FJUk9fTElORV9KT0lOX0JFVkVMOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xpbmVfam9pbihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fp
cm9Kb2luKTsKKyAgICBjYWlyb19zZXRfbGluZV9qb2luKGNyLCBjYWlyb0pvaW4pOwogfQogCi12
b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
ZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiBjciwgZmxvYXQg
bWl0ZXJMaW1pdCkKIHsKLSAgICBjYWlyb19zZXRfbWl0ZXJfbGltaXQocGxhdGZvcm1Db250ZXh0
LmNyKCksIG1pdGVyTGltaXQpOworICAgIGNhaXJvX3NldF9taXRlcl9saW1pdChjciwgbWl0ZXJM
aW1pdCk7CiB9CiAKIHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291
cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCkBAIC02ODIsNyArNjgxLDcgQEAg
dm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnMKIHsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxl
KCkpIHsKICAgICAgICAgU2hhZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFk
b3dTdGF0ZS5ibHVyIH0sIHNoYWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNo
YWRvd1N0YXRlLmlnbm9yZVRyYW5zZm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFk
b3coU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhw
bGF0Zm9ybUNvbnRleHQpLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3QpLAorICAgICAgICBzaGFkb3cu
ZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRl
OjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIEZsb2F0Um91bmRlZFJlY3QocmVjdCks
CiAgICAgICAgICAgICBbJnBsYXRmb3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1ZmZl
ciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0
U2l6ZSYgbGF5ZXJTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxTaGFk
b3dCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5ZXJT
aXplLCBzaGFkb3dTdGF0ZSk7CkBAIC03MTMsNyArNzEyLDcgQEAgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmUKIHsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgU2hh
ZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFkb3dTdGF0ZS5ibHVyIH0sIHNo
YWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLmlnbm9yZVRy
YW5zZm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShw
bGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBy
ZWN0LAorICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShwbGF0Zm9y
bUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHJl
Y3QsCiAgICAgICAgICAgICBbJnBsYXRmb3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1
ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZs
b2F0U2l6ZSYgbGF5ZXJTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxT
aGFkb3dCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5
ZXJTaXplLCBzaGFkb3dTdGF0ZSk7CkBAIC03NDYsNyArNzQ1LDcgQEAgdm9pZCBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFIKIAogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAgICAgICBT
aGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwg
c2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3Jl
VHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5kcmF3SW5zZXRTaGFkb3coU3RhdGU6OmdldENU
TShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQp
LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsCisgICAgICAgIHNoYWRvdy5kcmF3SW5zZXRTaGFkb3co
U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRz
KHBsYXRmb3JtQ29udGV4dCksIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwKICAgICAgICAgICAgIFsm
cGxhdGZvcm1Db250ZXh0LCAmc2hhZG93U3RhdGVdKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBj
b25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9y
bUNvbnRleHQsIGxheWVySW1hZ2UsIGxheWVyT3JpZ2luLCBsYXllclNpemUsIHNoYWRvd1N0YXRl
KTsKQEAgLTg2Myw5ICs4NjIsOSBAQCB2b2lkIGRyYXdQbGF0Zm9ybUltYWdlKEdyYXBoaWNzQ29u
dGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNhaXJvX3N1cmZhY2VfdCogcwogCiAgICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCiAgICAgaWYgKG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciAmJiBvcHRpb25zLmJs
ZW5kTW9kZSgpID09IEJsZW5kTW9kZTo6Tm9ybWFsICYmICFjYWlyb1N1cmZhY2VIYXNBbHBoYShz
dXJmYWNlKSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxh
dGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSwgQmxlbmRNb2RlOjpOb3JtYWwp
OworICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNv
bnRleHQuY3IoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHksIEJsZW5kTW9kZTo6Tm9ybWFsKTsK
ICAgICBlbHNlCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBs
YXRmb3JtQ29udGV4dCwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5k
TW9kZSgpKTsKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxh
dGZvcm1Db250ZXh0LmNyKCksIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSk7CiAKICAgICBGbG9hdFJlY3QgZHN0ID0gZGVzdFJlY3Q7CiAgICAgaWYgKG9w
dGlvbnMub3JpZW50YXRpb24oKSAhPSBJbWFnZU9yaWVudGF0aW9uOjpOb25lKSB7CkBAIC05NjQs
NyArOTYzLDcgQEAgdm9pZCBkcmF3U3VyZmFjZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UKIAogICAgIFNoYWRvd0JsdXIgc2hh
ZG93KHsgc2hhZG93U3RhdGUuYmx1ciwgc2hhZG93U3RhdGUuYmx1ciB9LCBzaGFkb3dTdGF0ZS5v
ZmZzZXQsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5pZ25vcmVUcmFuc2Zvcm1zKTsK
ICAgICBpZiAoc2hhZG93LnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgewotICAgICAg
ICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwg
U3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZGVzdFJlY3QsCisgICAgICAg
IHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3Io
KSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGRlc3RSZWN0LAogICAg
ICAgICAgICAgWyZwYXR0ZXJuLCAmZGVzdFJlY3RdKEdyYXBoaWNzQ29udGV4dCYgc2hhZG93Q29u
dGV4dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBkcmF3UGF0dGVyblRvQ2Fpcm9D
b250ZXh0KHNoYWRvd0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHBhdHRlcm4uZ2V0
KCksIGRlc3RSZWN0LCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKaW5kZXggNTQ5ODU2M2NlNDljMTVlMzVk
MDgyNTljMmQyNmRjN2IxN2NlYTg4NS4uZTVhMzQyNGFlNjExNzA3YWM5N2QwZDE5ZTdjYzMwNjFh
YjcwNjFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKQEAgLTQ2LDIyICs0NiwyMSBAQCBjbGFzcyBDb2xv
cjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBGbG9h
dFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIFBhdGg7CiAKLXN0cnVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKLQogbmFtZXNwYWNlIENhaXJvIHsKIAogbmFtZXNwYWNl
IFN0YXRlIHsKIAotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
LCBmbG9hdCk7Ci12b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgU3Ry
b2tlU3R5bGUpOwordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCosIGZsb2F0KTsKK3Zv
aWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCosIFN0cm9rZVN0eWxlKTsKIAotdm9pZCBzZXRDb21w
b3NpdGVPcGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJv
JiwgYm9vbCk7Cit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSk7Cit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190Kiwg
Ym9vbCk7CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJv
Jik7Cit2b2lkIHNldENUTShjYWlyb190KiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CitBZmZp
bmVUcmFuc2Zvcm0gZ2V0Q1RNKGNhaXJvX3QqKTsKIAogSW50UmVjdCBnZXRDbGlwQm91bmRzKEdy
YXBoaWNzQ29udGV4dENhaXJvJik7CiBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhHcmFw
aGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtMTI1LDEwICsxMjQsMTAg
QEAgc3RydWN0IFNoYWRvd1N0YXRlIHsKICAgICBDb21wb3NpdGVPcGVyYXRvciBnbG9iYWxDb21w
b3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07CiB9OwogCi12
b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5lQ2FwKTsKLXZvaWQgc2V0
TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7
Ci12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgTGluZUpvaW4pOwotdm9p
ZCBzZXRNaXRlckxpbWl0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgZmxvYXQpOwordm9pZCBzZXRM
aW5lQ2FwKGNhaXJvX3QqLCBMaW5lQ2FwKTsKK3ZvaWQgc2V0TGluZURhc2goY2Fpcm9fdCosIGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0KTsKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCosIExpbmVK
b2luKTsKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiwgZmxvYXQpOwogCiB2b2lkIGZpbGxS
ZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmlsbFNv
dXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7CiB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4
dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRDYWlyby5jcHAKaW5kZXggYTdhZjBjZWI1MjQ5MDQwNDFlZTEyZDUxZjg5YzZkZjE2Y2IzNjAz
Ny4uM2QxOTc1NzlhMmNjMjI5OTMzODg1YTFhMTU5NWM2Mzk2Y2E4NmRmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBA
IC03Miw3ICs3Miw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgYXV0byYgc3RhdGUg
PSBjb250ZXh0LnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKmNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2Fs
ZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAg
ICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNo
YWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAgIHN0YXRlLnRleHREcmF3aW5n
TW9kZSgpLCBzdGF0ZS5zdHJva2VUaGlja25lc3MoKSwgc3RhdGUuZHJvcFNoYWRvdygpLm9mZnNl
dCwgc3RhdGUuZHJvcFNoYWRvdygpLmNvbG9yLAogICAgICAgICBmb250U21vb3RoaW5nTW9kZSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhZGllbnRDYWlyby5jcHAKaW5kZXggOTAwOTZhYzY0NTIyNGRiZmRjNjBiZmE2Y2FjYWQw
MzA3NmNiMjk3ZC4uYmUyYzI5NWNhNTA3ZDliNTYzZjg1ZDViY2I4NzA5NzJmMGRhZDhlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90
PiBHcmFkaWVudDo6Y3JlYXRlUGF0dGVybihmbG9hdCBnbG9iYWxBbHBoYSwgY29uc3QgQWZmaW5l
VAogCiB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGF1dG8gcGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4w
LCBjb250ZXh0LnN0YXRlKCkuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGF1dG8g
cGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4wLCBjb250ZXh0LmZpbGxTcGFjZVRyYW5zZm9ybSgp
KTsKICAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCmluZGV4IGMzMjMwNDQ1MzUxYjAzZjJhYTg3MzZhZWUyYmNlNzhiYzQzNjFm
NDkuLmM1ZmFjMjA0MWIzY2Q1ZGJkZGI2NzlhYWU1NTI1ZWM4YjU0MjgxZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDggTnVhbnRpIEx0ZC4KQEAgLTY4LDcgKzY4LDggQEAgcHVibGljOgogfTsKIAogR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKFJlZlB0cjxjYWlyb190PiYmIGNv
bnRleHQpCi0gICAgOiBtX2NyKFdURk1vdmUoY29udGV4dCkpCisgICAgOiBHcmFwaGljc0NvbnRl
eHQoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkKKyAgICAsIG1fY3IoV1RGTW92ZShjb250ZXh0
KSkKIHsKICAgICBtX2NhaXJvU3RhdGVTdGFjay5hcHBlbmQoQ2Fpcm9TdGF0ZSgpKTsKICAgICBt
X2NhaXJvU3RhdGUgPSAmbV9jYWlyb1N0YXRlU3RhY2subGFzdCgpOwpAQCAtODYsMTAgKzg3LDkg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK1JlbmRl
cmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewot
ICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU2NhbGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6Omlz
QWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKIEdyYXBoaWNz
Q29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29u
c3QKQEAgLTEzNCw1MyArMTM0LDExMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZXN0
b3JlKCkKICAgICBjYWlyb19yZXN0b3JlKG1fY3IuZ2V0KCkpOwogfQogCi0vLyBEcmF3cyBhIGZp
bGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjphcHBseVN0YXRlQ2hhbmdlcygpCiB7
Ci0gICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNz
LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7
CisKKyAgICBpZiAoIXN0YXRlLmNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChhdXRvIGNoYW5nZSA6IHN0YXRlLmNoYW5nZXMoKSkgeworICAgICAgICBzd2l0Y2ggKGNoYW5n
ZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTToKKyAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKG1fY3IuZ2V0KCksIHN0YXRlLmdldENUTSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRTdHJva2VUaGlja25lc3MobV9jci5nZXQoKSwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKCksIDAuZikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZToKKyAgICAgICAgICAgIENhaXJvOjpT
dGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9jci5nZXQoKSwgc3RhdGUuc3Ryb2tlU3R5bGUoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OkxpbmVDYXA6CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZUNhcChtX2NyLmdldCgp
LCBzdGF0ZS5saW5lQ2FwKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjoKKyAgICAgICAgICAgIENhaXJv
OjpzZXRMaW5lSm9pbihtX2NyLmdldCgpLCBzdGF0ZS5saW5lSm9pbigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGlu
ZURhc2g6CisgICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2gobV9jci5nZXQoKSwgc3RhdGUu
bGluZURhc2goKS5kYXNoZXMsIHN0YXRlLmxpbmVEYXNoKCkub2Zmc2V0KTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0
ZXJMaW1pdDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fY3IuZ2V0KCksIHN0
YXRlLm1pdGVyTGltaXQoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1vZGU6CisgICAgICAgICAgICBD
YWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX2NyLmdldCgpLCBzdGF0ZS5jb21w
b3NpdGVNb2RlKCkub3BlcmF0aW9uLCBzdGF0ZS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKSB7CisgICAgICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3Jh
cGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0
CisgICAgICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1M
NSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgICAgICBhdXRvIGRyb3BT
aGFkb3cgPSBzdGF0ZS5kcm9wU2hhZG93KCk7CisgICAgICAgICAgICAgICAgZHJvcFNoYWRvdy5v
ZmZzZXQgPSB7IGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCksIC1kcm9wU2hhZG93Lm9mZnNldC5o
ZWlnaHQoKSB9OworICAgICAgICAgICAgICAgIHNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENhaXJv
OjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fY3IuZ2V0KCksIHN0YXRlLnNob3VsZEFudGlh
bGlhcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwotICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqdGhpcywgbmF0aXZlSW1hZ2UucGxh
dGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
b3BhY2l0eSk7CisgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMsIG9wYWNp
dHkpOwogfQogCi0vLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNo
b3VsZCBub3QgZHJhdyBzaGFkb3dzLgotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAg
aWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCi0gICAgICAgIHJldHVybjsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgQ2Fpcm86OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCp0aGlzKTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUu
c2hvdWxkQW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAg
ICBDYWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIGlzIG9ubHkg
dXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgotdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgY2xpcFJ1bGUpCiB7Ci0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENh
aXJvOjpkcmF3RWxsaXBzZSgqdGhpcywgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7CisgICAgQ2Fpcm86OmNs
aXBQYXRoKCp0aGlzLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGF0aC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBDYWlybzo6Y2xpcE91dCgqdGhpcywgcmVjdCk7
Cit9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxQ
YXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBQ
YXRoJiBwYXRoKQoreworICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCBwYXRoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBDYWlybzo6Y2xp
cFRvSW1hZ2VCdWZmZXIoKnRoaXMsIG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCks
IGRlc3RSZWN0KTsKK30KIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBD
YWlybzo6c3Ryb2tlUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSks
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBDYWlybzo6Y2xlYXJSZWN0
KCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMTk2LDggKzI1NSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7Ci0gICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigx
LjAsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICBhdXRvIHBhdHRlcm4g
PSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOwogICAg
IGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMDYsMzUgKzI2NCw2NCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CisgICAgQ2Fp
cm86OmZpbGxSb3VuZGVkUmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSgpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKCFjb2xv
ci5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3I7CisgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0
aGlzLCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bigqdGhpcywgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgQ2Fpcm86OmZpbGxS
ZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAg
Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHByZXZpb3VzT3BlcmF0
b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CisgICAgQ2Fpcm86OmZpbGxQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
CiB7Ci0gICAgQ2Fpcm86OmNsaXAoKnRoaXMsIHJlY3QpOworICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKKyAgICBDYWlybzo6c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwgbGluZVdpZHRo
LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENhaXJvOjpjbGlwUGF0aCgqdGhpcywgcGF0
aCwgY2xpcFJ1bGUpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpzdHJva2VQYXRo
KCp0aGlzLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3Vu
ZHMoKSBjb25zdAorLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJv
cmRlci4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHJldHVybiBDYWlybzo6U3Rh
dGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoIXJlY3Qu
aXNFbXB0eSgpKTsKKyAgICBDYWlybzo6ZHJhd1JlY3QoKnRoaXMsIHJlY3QsIGJvcmRlclRoaWNr
bmVzcywgZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
YnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQorLy8gVGhpcyBpcyBvbmx5IHVzZWQg
dG8gZHJhdyBib3JkZXJzLCBzbyB3ZSBzaG91bGQgbm90IGRyYXcgc2hhZG93cy4KK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVm
ZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJv
OjpjbGlwVG9JbWFnZUJ1ZmZlcigqdGhpcywgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5n
ZXQoKSwgZGVzdFJlY3QpOworICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMsIHBvaW50MSwgcG9pbnQy
LCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc2hvdWxk
QW50aWFsaWFzKCkpOworfQorCisvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0
aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBDYWlybzo6ZHJh
d0VsbGlwc2UoKnRoaXMsIHJlY3QsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VD
b2xvcigpLCBzdHJva2VUaGlja25lc3MoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMjYxLDEzOCArMzQ4LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHcKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnRoaXMsIHBvaW50LCB0aGlj
a25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tl
Q29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCi17Ci0gICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKnRoaXMsIHJl
Y3QsIHN0eWxlKTsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5n
TW9kZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocm91bmRpbmdNb2RlKTsKLSAgICByZXR1cm4gQ2Fp
cm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCp0aGlzLCByZWN0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAg
Q2Fpcm86OnRyYW5zbGF0ZSgqdGhpcywgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKLSAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoKnRoaXMsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUoKnRo
aXMsIHN0YXRlLnN0cm9rZVN0eWxlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKLSAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBj
b250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAg
ICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhh
dmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBzdGF0
ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hh
ZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKCp0aGlzLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQot
ICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFu
Z2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKCp0aGlzLCBzdGF0
ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OmNv
bmNhdENUTSgqdGhpcywgdHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q1RNKCp0aGlzLCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIENh
aXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCp0aGlzLCBvcGFjaXR5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBDYWlybzo6ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKnRoaXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3QoKnRo
aXMsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwgbGlu
ZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVDYXAoTGluZUNh
cCBsaW5lQ2FwKQotewotICAgIENhaXJvOjpzZXRMaW5lQ2FwKCp0aGlzLCBsaW5lQ2FwKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNoKCp0
aGlzLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBDYWlybzo6c2V0TGluZUpv
aW4oKnRoaXMsIGxpbmVKb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0
TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKLXsKLSAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdCgqdGhp
cywgbWl0ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHBhdGgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykKLXsKLSAgICBD
YWlybzo6cm90YXRlKCp0aGlzLCByYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIENhaXJvOjpzY2FsZSgq
dGhpcywgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGlwT3V0KCp0aGlzLCByZWN0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdl
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlm
ICghY29sb3IuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0aGlz
LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCp0aGlz
LCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7
IG9wdGlvbnMsIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSB9LCBhbHBoYSgpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUoKSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkBAIC00MDQs
MTEgKzM2Miw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRSZWN0CiAgICAgQ2Fpcm86OmRyYXdQYXR0
ZXJuKCp0aGlzLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIG5hdGl2ZUltYWdl
LnNpemUoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0
aW9ucyk7CiB9CiAKLVJlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmlu
Z01vZGUoKSBjb25zdAotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250
U21vb3RoaW5nKQogewogICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCkBAIC00
MzQsMTIgKzM4NywzMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3R2x5cGhzKCp0aGlzLCBDYWlybzo6Rmls
bFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAogICAgICAgICBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9m
ZnNldCwgY2Fpcm9HbHlwaHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9k
ZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRv
d0NvbG9yLAorICAgICAgICB0ZXh0RHJhd2luZ01vZGUoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHNo
YWRvd09mZnNldCgpLCBzaGFkb3dDb2xvcigpLAogICAgICAgICBmb250U21vb3RoaW5nKTsKIH0K
IAordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3sKKyAg
ICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpkcmF3
TGluZXNGb3JUZXh0KCp0aGlzLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBk
b3VibGVVbmRlcmxpbmVzLCBzdHJva2VDb2xvcigpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQoreworICAgIENhaXJvOjpkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKCp0aGlzLCByZWN0LCBzdHlsZSk7Cit9CisKK0Zsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHJvdW5k
aW5nTW9kZSk7CisgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscygq
dGhpcywgcmVjdCk7Cit9CisKIGNhaXJvX3QqIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjcigpIGNv
bnN0CiB7CisgICAgY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRDYWlybyY+KCp0aGlzKS5hcHBs
eVN0YXRlQ2hhbmdlcygpOwogICAgIHJldHVybiBtX2NyLmdldCgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaAppbmRleCA1NjQ2MWMxNTlhNTgzYzg5YzYxZThmMDJlNGUwYmVlN2IwNTkz
MmVmLi42ZmNkZTNhOGJiMWRmOWY1NWJmNjliYmJmNGZjNjQ2NWY4NWU5YWI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw2MSArNTEsNDkgQEAg
cHVibGljOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAg
R3JhcGhpY3NDb250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0g
ICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAg
IHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5h
bDsKIAotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVK
b2luKExpbmVKb2luKSBmaW5hbDsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFs
OworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxl
KSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgCisgICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0OwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYp
IGZpbmFsOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBm
aW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbDsK
LSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKwogICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAg
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9p
ZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwog
Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5Jiwg
Ym9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmlu
YWw7CisKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENv
bG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogCi0gICAgdm9pZCBzYXZl
KCkgZmluYWw7Ci0gICAgdm9pZCByZXN0b3JlKCkgZmluYWw7Ci0KLSAgICB2b2lkIHRyYW5zbGF0
ZShmbG9hdCwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBmaW5hbDsKLSAg
ICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxv
YXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZp
Y2VTY2FsZSkgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKyAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKIAotICAgIHZvaWQgY2xp
cChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2
b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7Ci0gICAgSW50UmVjdCBj
bGlwQm91bmRzKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIAotICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHJhd0dseXBocyhjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdN
b2RlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5
bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKICAgICBGbG9hdFJlY3Qg
cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJv
dW5kaW5nTW9kZSkgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApp
bmRleCA5NmM3NjEzNTQxYmRjNjU4YTc4N2FiMDNlNzc4MTg4MzRkMzE4NWM0Li5jOGU1Njc4MjQy
MzE1YWMzOTM1MWUwMjA4ZmY4YTBlZGVlMTNkOWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuY3BwCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0CiAg
ICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0Q29udGV4dC5zdGF0
ZSgpOwogCiAgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUp
KQotICAgICAgICBkcmF3UGxhdGZvcm1JbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0
KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9w
dGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
fSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dT
dGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOworICAgICAgICBkcmF3UGxhdGZvcm1JbWFn
ZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLT5wbGF0Zm9ybUltYWdlKCku
Z2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0
ZS5hbHBoYSgpLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0
U3RhdGUpKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE4NTZhMDQzOTNmZDI0ZTk2MjhmNmZlOTM0NjllZWJlYTRhYmI1OTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0Nv
bnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0dDb250ZXh0U3RhdGVTYXZlciB7Citw
dWJsaWM6CisgICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYgY29udGV4dCwgYm9v
bCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKKyAgICB7CisgICAgICAg
IGlmIChtX3NhdmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSht
X2NvbnRleHQpOworICAgIH0KKyAgICAKKyAgICB+Q0dDb250ZXh0U3RhdGVTYXZlcigpCisgICAg
eworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzYXZlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4
dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IHRydWU7
CisgICAgfQorCisgICAgdm9pZCByZXN0b3JlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Nh
dmVBbmRSZXN0b3JlKTsKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShtX2NvbnRleHQp
OworICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJv
b2wgZGlkU2F2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zYXZlQW5kUmVzdG9y
ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENHQ29udGV4dFJlZiBtX2NvbnRleHQ7Cisg
ICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDMyNDVjNjAwNDMxNTUy
ZDUxM2I3NGVlYmMwOWYzMThlZWMzZGQ3MmEuLjQwNWZhODQ2YzYzMmMwNzExYzVlOGE0MDFkNTFi
MTk3ZGI1ZWVmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0xODUsMTQgKzE4NSwxMyBAQCBzdGF0aWMgdm9pZCBzZXRDR0Js
ZW5kTW9kZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZQogfQogCiBHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0
UmVmIGNnQ29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dChDR0NvbnRleHRHZXRDbGlwQm91
bmRpbmdCb3goY2dDb250ZXh0KSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmluaXRpYWxDaGFuZ2VG
bGFncywgQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCkpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoY2dDb250ZXh0KTsKLSAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3Rh
cnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwg
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UgfSk7Ci0gICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0g
Y29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5
KHBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShj
b3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSkpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6On5H
cmFwaGljc0NvbnRleHRDRygpCkBAIC0yMDYsNiArMjA1LDE0IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB9CiAKIENHQ29udGV4dFJlZiBHcmFw
aGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICAvLyBTb21lIGNh
bGxlcnMgdG8gdGhpcyBtZXRob2QgdXNlcyB0aGUgcGxhdGZvcm0gY29udGV4dCBvdXRzaWRlIHRo
ZSBzY29wZQorICAgIC8vIG9mIHRoaXMgY2xhc3MuIENvbW1pdCBhbnkgY2hhbmdlcyBiZWZvcmUg
cmV0dXJuaW5nIHRoZSBwbGF0Zm9ybSBjb250ZXh0LgorICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3ND
b250ZXh0Q0cmPigqdGhpcykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1cm4gaW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQoKTsKK30KKworQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENH
OjppbnRlcm5hbFBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZGF0YS0+
bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwpAQCAt
MzM4LDcgKzM0NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZShO
YXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6CiAjZW5kaWYKIAogICAgIGF1
dG8gb2xkQ29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKLSAgICBhdXRv
IG9sZEJsZW5kTW9kZSA9IGJsZW5kTW9kZU9wZXJhdGlvbigpOworICAgIGF1dG8gb2xkQmxlbmRN
b2RlID0gYmxlbmRNb2RlKCk7CiAgICAgc2V0Q0dCbGVuZE1vZGUoY29udGV4dCwgb3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIC8vIE1ha2Ug
dGhlIG9yaWdpbiBiZSBhdCBhZGp1c3RlZERlc3RSZWN0LmxvY2F0aW9uKCkKQEAgLTM5Niw3ICs0
MDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZAogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRl
c3RSZWN0KTsKIAotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9w
ZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIHNldENvbXBvc2l0ZU1vZGUoeyBv
cHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAKICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55
KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwg
MSwgLTEpOwpAQCAtNTU1LDEzICs1NjIsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlmICghbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
KQorICAgIGlmICghc3Ryb2tlUGF0dGVybigpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0Nv
bnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0Nv
bnRleHQpKTsKIAotICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gbV9zdGF0ZS5zdHJva2VQYXR0
ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CisgICAgYXV0byBwbGF0
Zm9ybVBhdHRlcm4gPSBzdHJva2VQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2Vy
VG9CYXNlQ1RNKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwog
CkBAIC01NzQsMTMgKzU4MSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9r
ZVBhdHRlcm4oKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkK
IHsKLSAgICBpZiAoIW1fc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKCFmaWxsUGF0dGVybigp
KQogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVU
cmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIAotICAgIGF1dG8gcGxhdGZv
cm1QYXR0ZXJuID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVz
ZXJUb0Jhc2VDVE0pOworICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gZmlsbFBhdHRlcm4oKS0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJUb0Jhc2VDVE0pOwogICAgIGlmICghcGxhdGZvcm1Q
YXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTU5MSwxMSArNTk4LDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIENHQ29udGV4dFNldEZpbGxQ
YXR0ZXJuKGNnQ29udGV4dCwgcGxhdGZvcm1QYXR0ZXJuLmdldCgpLCAmcGF0dGVybkFscGhhKTsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUpCitzdGF0aWMg
aW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBDR1BhdGhEcmF3aW5nTW9kZSYgbW9kZSkKIHsKLSAgICBib29sIHNob3VsZEZpbGwg
PSBzdGF0ZS5maWxsUGF0dGVybiB8fCBzdGF0ZS5maWxsQ29sb3IuaXNWaXNpYmxlKCk7Ci0gICAg
Ym9vbCBzaG91bGRTdHJva2UgPSBzdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IChzdGF0ZS5zdHJva2VT
dHlsZSAhPSBOb1N0cm9rZSAmJiBzdGF0ZS5zdHJva2VDb2xvci5pc1Zpc2libGUoKSk7Ci0gICAg
Ym9vbCB1c2VFT0ZpbGwgPSBzdGF0ZS5maWxsUnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZDsKKyAg
ICBib29sIHNob3VsZEZpbGwgPSBjb250ZXh0LmZpbGxQYXR0ZXJuKCkgfHwgY29udGV4dC5maWxs
Q29sb3IoKS5pc1Zpc2libGUoKTsKKyAgICBib29sIHNob3VsZFN0cm9rZSA9IGNvbnRleHQuc3Ry
b2tlUGF0dGVybigpIHx8IChjb250ZXh0LnN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UgJiYgY29u
dGV4dC5zdHJva2VDb2xvcigpLmlzVmlzaWJsZSgpKTsKKyAgICBib29sIHVzZUVPRmlsbCA9IGNv
bnRleHQuZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZDsKIAogICAgIGlmIChzaG91bGRG
aWxsKSB7CiAgICAgICAgIGlmIChzaG91bGRTdHJva2UpIHsKQEAgLTYyNCw5ICs2MzEsOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKLSAg
ICBpZiAoc3RhdGUuZmlsbEdyYWRpZW50IHx8IHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAg
aWYgKGZpbGxHcmFkaWVudCgpIHx8IHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBmaWxsICYgc3Ryb2tlIGEgcGF0aCB1c2lu
ZyBncmFkaWVudHMKICAgICAgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJvdXQgdGhpcy4KICAg
ICAgICAgZmlsbFBhdGgocGF0aCk7CkBAIC02MzQsMTMgKzY0MCwxMyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKHN0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlmIChmaWxsUGF0dGVybigp
KQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRl
cm4pCisgICAgaWYgKHN0cm9rZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJu
KCk7CiAKICAgICBDR1BhdGhEcmF3aW5nTW9kZSBkcmF3aW5nTW9kZTsKLSAgICBpZiAoY2FsY3Vs
YXRlRHJhd2luZ01vZGUoc3RhdGUsIGRyYXdpbmdNb2RlKSkgeworICAgIGlmIChjYWxjdWxhdGVE
cmF3aW5nTW9kZSgqdGhpcywgZHJhd2luZ01vZGUpKSB7CiAjaWYgSEFWRShDR19DT05URVhUX0RS
QVdfUEFUSF9ESVJFQ1QpCiAgICAgICAgIENHQ29udGV4dERyYXdQYXRoRGlyZWN0KGNvbnRleHQs
IGRyYXdpbmdNb2RlLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCBudWxscHRyKTsKICNlbHNlCkBAIC02
NTgsNyArNjY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRpZW50
KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3Qg
cmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgRmxvYXRTaXplIGxh
eWVyU2l6ZSA9IGdldENUTSgpLm1hcFNpemUocmVjdC5zaXplKCkpOwpAQCAtNjcwLDMzICs2NzYs
MzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
ICAgICAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShsYXllckNvbnRleHQsIC1yZWN0Lngo
KSwgLXJlY3QueSgpKTsKICAgICAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChsYXllckNvbnRl
eHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChsYXllckNvbnRleHQsIHBhdGgucGxh
dGZvcm1QYXRoKCkpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4
dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgICAgICBDR0Nv
bnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAg
ICAgICAgICAgIGlmIChmaWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAg
ICAgICAgIENHQ29udGV4dEVPQ2xpcChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAg
ICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAgICAg
ICBmaWxsR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29u
dGV4dERyYXdMYXllckluUmVjdChjb250ZXh0LCByZWN0LCBsYXllci5nZXQoKSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CiAgICAg
ICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAg
ICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKIAogICAgICAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0g
V2luZFJ1bGU6OkV2ZW5PZGQpCiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRl
eHQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29u
dGV4dCk7CiAKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludCgqdGhpcyk7
CisgICAgICAgICAgICBmaWxsR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwogICAgICAgICB9CiAK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQor
ICAgIGlmIChmaWxsUGF0dGVybigpKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAjaWYg
SEFWRShDR19DT05URVhUX0RSQVdfUEFUSF9ESVJFQ1QpCiAgICAgQ0dDb250ZXh0RHJhd1BhdGhE
aXJlY3QoY29udGV4dCwgZmlsbFJ1bGUoKSA9PSBXaW5kUnVsZTo6RXZlbk9kZCA/IGtDR1BhdGhF
T0ZpbGwgOiBrQ0dQYXRoRmlsbCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgbnVsbHB0cik7CkBAIC03
MTcsNyArNzIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgaWYgKHN0cm9rZUdy
YWRpZW50KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7CiAgICAgICAgICAgICBGbG9h
dFJlY3QgcmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgICAgICAgICAgZmxvYXQg
bGluZVdpZHRoID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC03NDIsOCArNzQ4LDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICAg
ICAgQ0dDb250ZXh0QWRkUGF0aChsYXllckNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwog
ICAgICAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgobGF5ZXJDb250
ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKLSAgICAgICAg
ICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5w
YWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVy
Q29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBzdHJva2VHcmFk
aWVudCgpLT5wYWludChsYXllckNvbnRleHQpOwogCiAgICAgICAgICAgICBmbG9hdCBkZXN0aW5h
dGlvblggPSByb3VuZGYocmVjdC54KCkgLSBsaW5lV2lkdGgpOwogICAgICAgICAgICAgZmxvYXQg
ZGVzdGluYXRpb25ZID0gcm91bmRmKHJlY3QueSgpIC0gbGluZVdpZHRoKTsKQEAgLTc1NCwxMyAr
NzYwLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0Zm9y
bVBhdGgoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0
aChjb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dENsaXAoY29udGV4dCk7Ci0gICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNw
YWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50
KCp0aGlzKTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBzdHJva2VT
cGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KCp0
aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fc3Rh
dGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAoc3Ryb2tlUGF0dGVybigpKQogICAgICAgICBhcHBs
eVN0cm9rZVBhdHRlcm4oKTsKIAogI2lmIFVTRShDR19DT05URVhUX1NUUk9LRV9MSU5FX1NFR01F
TlRTX1dIRU5fU1RST0tJTkdfUEFUSCkKQEAgLTc4NSw3ICs3OTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLmZp
bGxHcmFkaWVudCkgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSkgewogICAgICAgICBDR0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGlmIChoYXNTaGFkb3co
KSkgewogICAgICAgICAgICAgRmxvYXRTaXplIGxheWVyU2l6ZSA9IGdldENUTSgpLm1hcFNpemUo
cmVjdC5zaXplKCkpOwpAQCAtNzk4LDI3ICs4MDQsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICAgICAgQ0dDb250ZXh0
QWRkUmVjdChsYXllckNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChs
YXllckNvbnRleHQpOwogCi0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250
ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1f
c3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOworICAgICAgICAgICAgQ0dD
b250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOworICAg
ICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7CiAgICAgICAgICAg
ICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVjdCwgbGF5ZXIuZ2V0KCkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0
LCByZWN0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRl
LmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29u
dGV4dCwgZmlsbFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCkt
PnBhaW50KCp0aGlzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCisgICAgaWYgKGZpbGxQYXR0ZXJuKCkpCiAgICAgICAg
IGFwcGx5RmlsbFBhdHRlcm4oKTsKIAogICAgIGJvb2wgZHJhd093blNoYWRvdyA9IGNhblVzZVNo
YWRvd0JsdXIoKTsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwg
ZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVy
biBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBs
YXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0
U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAgIFNo
YWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBjb250
ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAgICAg
ICAgIGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0Um91bmRlZFJlY3Qo
cmVjdCkpOwogICAgIH0KIApAQCAtODM3LDkgKzg0Myw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93
KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFk
b3dzLgotICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0
KCksIENHU2l6ZVplcm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29s
b3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250
ZXh0U2hhZG93KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJv
cFNoYWRvdygpLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNo
YWRvdy5kcmF3UmVjdFNoYWRvdygqdGhpcywgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSk7CiAgICAg
fQogCkBAIC04NTIsNyArODU4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICBzZXRD
R0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBvcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChyZWN0LCBjb2xvciwgb3BlcmF0aW9uLCBibGVuZE1vZGUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9y
KCk7CkBAIC04NjQsOSArODc1LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdAogICAgIENHQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBp
ZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAg
ICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6
ZVplcm8sIDAsIDApOworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4
dCwgQ0dTaXplWmVybywgMCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93
KG1fc3RhdGUpOworICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygp
LCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3
UmVjdFNoYWRvdygqdGhpcywgcmVjdCk7CiAgICAgfQogCkBAIC04NzQsNyArODg1LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdAogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiBy
YWRpaSA9IHJlY3QucmFkaWkoKTsKICAgICBib29sIGVxdWFsV2lkdGhzID0gKHJhZGlpLnRvcExl
ZnQoKS53aWR0aCgpID09IHJhZGlpLnRvcFJpZ2h0KCkud2lkdGgoKSAmJiByYWRpaS50b3BSaWdo
dCgpLndpZHRoKCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLndpZHRoKCkgJiYgcmFkaWkuYm90dG9t
TGVmdCgpLndpZHRoKCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS53aWR0aCgpKTsKICAgICBib29s
IGVxdWFsSGVpZ2h0cyA9IChyYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9t
TGVmdCgpLmhlaWdodCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50
b3BSaWdodCgpLmhlaWdodCgpICYmIHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWku
Ym90dG9tUmlnaHQoKS5oZWlnaHQoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21GaWxsID0gbV9zdGF0
ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybjsKKyAgICBib29sIGhhc0N1c3Rv
bUZpbGwgPSBmaWxsR3JhZGllbnQoKSB8fCBmaWxsUGF0dGVybigpOwogICAgIGlmICghaGFzQ3Vz
dG9tRmlsbCAmJiBlcXVhbFdpZHRocyAmJiBlcXVhbEhlaWdodHMgJiYgcmFkaWkudG9wTGVmdCgp
LndpZHRoKCkgKiAyID09IHIud2lkdGgoKSAmJiByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKiAy
ID09IHIuaGVpZ2h0KCkpCiAgICAgICAgIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0KGNvbnRl
eHQsIHIpOwogICAgIGVsc2UgewpAQCAtOTEzLDkgKzkyNCw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdP
d25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2Zm
IENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9y
bUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRv
d1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dC
bHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNo
YWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBj
b250ZXh0U2hhZG93LmRyYXdJbnNldFNoYWRvdygqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0
KTsKICAgICB9CiAKQEAgLTkzMCw2ICs5NDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsbwog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXAocmVjdCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiAgICAgbV9kYXRhLT5jbGlwKHJlY3QpOwogfQpA
QCAtOTQwLDMxICs5NTIsMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwg
Q0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQg
dGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRy
YW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUz
PgogICAgIC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRo
ZXIuCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2FuVXNlQ0dS
ZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dD
b250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7Ci0gICAgQ0dSZWN0IHJlY3RzWzJd
ID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0
Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9OwotICAgIENHQ29udGV4
dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVjdHMocGxh
dGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKLSAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1D
b250ZXh0KCkpOworICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRU
eXBlKGNvbnRleHQpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkgPT0g
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsK
KyAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0SW5m
aW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCksIHJlY3QgfTsKKyAg
ICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdHMoY29u
dGV4dCwgcmVjdHMsIDIpOworICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIENH
Q29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0QWRkUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3Jt
Q29udGV4dCgpKSk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVj
dChjb250ZXh0LCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCkpOwogICAgIGlm
ICghcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIENHQ29udGV4dEFkZFBhdGgocGxhdGZvcm1Db250
ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCkpOwotICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGF0aC5wbGF0
Zm9ybVBhdGgoKSk7CisgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlw
UnVsZSkKIHsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsK
KwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYg
KHBhdGguaXNFbXB0eSgpKQogICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENH
UmVjdFplcm8pOwogICAgIGVsc2UgewotICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZv
cm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgp
LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRl
eHQpOworICAgICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRo
KCkpOwogCiAgICAgICAgIGlmIChjbGlwUnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZCkKICAgICAg
ICAgICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKQEAgLTk3NSwxMSArOTkxLDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
Y2xpcFJ1bGUpCiAgICAgbV9kYXRhLT5jbGlwKHBhdGgpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNz
Q29udGV4dENHOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQogewogICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihv
cGFjaXR5KTsKQEAgLTEwMDIsMTcgKzEwMTMsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHJlc3RvcmUoKTsKIH0KIAotc3RhdGljIHZvaWQg
YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQorc3RhdGljIHZv
aWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIENHRmxvYXQmIHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
ICAgICBVTlVTRURfUEFSQU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwog
I2Vsc2UKLSAgICBpZiAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChDR0NvbnRleHREcmF3c1dp
dGhDb3JyZWN0U2hhZG93T2Zmc2V0cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICBp
ZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29udGV4dCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIFdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81NTM5Mzg4
PiBieSBlbnN1cmluZyB0aGF0IHRoZSBvZmZzZXRzIHdpbGwgZ2V0IHRydW5jYXRlZApAQCAtMTAz
MCwxMCArMTAzOCw1NSBAQCBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJ
Zk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotc3Rh
dGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29s
b3IpCitzdGF0aWMgdm9pZCBzZXRDR0xpbmVDYXAoQ0dDb250ZXh0UmVmIGNvbnRleHQsIExpbmVD
YXAgY2FwKQogewotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpOworICAgIHN3aXRjaCAoY2FwKSB7CisgICAgY2FzZSBMaW5lQ2FwOjpC
dXR0OgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKGNvbnRleHQsIGtDR0xpbmVDYXBCdXR0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQ2FwOjpSb3VuZDoKKyAgICAgICAgQ0dD
b250ZXh0U2V0TGluZUNhcChjb250ZXh0LCBrQ0dMaW5lQ2FwUm91bmQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNh
cChjb250ZXh0LCBrQ0dMaW5lQ2FwU3F1YXJlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQog
CitzdGF0aWMgdm9pZCBzZXRDR0xpbmVKb2luKENHQ29udGV4dFJlZiBjb250ZXh0LCBMaW5lSm9p
biBqb2luKQoreworICAgIHN3aXRjaCAoam9pbikgeworICAgIGNhc2UgTGluZUpvaW46Ok1pdGVy
OgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dMaW5lSm9pbk1pdGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6CisgICAgICAgIENH
Q29udGV4dFNldExpbmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luUm91bmQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIExpbmVKb2luOjpCZXZlbDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZUpvaW4oY29udGV4dCwga0NHTGluZUpvaW5CZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgc2V0Q0dNaXRlckxpbWl0KENHQ29udGV4dFJlZiBjb250ZXh0LCBm
bG9hdCBsaW1pdCkKK3sKKyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KGNvbnRleHQsIGxpbWl0
KTsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dMaW5lRGFzaChDR0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgaWYgKGRh
c2hPZmZzZXQgPCAwKSB7CisgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbGVuZ3Ro
ICs9IHN0YXRpY19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOworICAgICAgICBpZiAobGVuZ3RoKQor
ICAgICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0
aDsKKyAgICB9CisgICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29udGV4dCwgZGFzaE9mZnNldCwg
ZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHU2hh
ZG93KENHQ29udGV4dFJlZiBjb250ZXh0LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIGJv
b2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCit7CiAgICAgaWYgKG9mZnNldC5pc1plcm8oKSAm
JiAhYmx1cikgewogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwg
Q0dTaXplWmVybywgMCwgMCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNDUsNyArMTA5OCw3IEBA
IHN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGbG9hdFNpemUmCiAgICAgQ0dGbG9hdCB5T2Zmc2V0ID0gb2Zmc2V0Lmhl
aWdodCgpOwogICAgIENHRmxvYXQgYmx1clJhZGl1cyA9IGJsdXI7CiAKLSAgICBpZiAoIWdyYXBo
aWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CisgICAgaWYgKCFzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykgewogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNl
Q1RNID0gZ2V0VXNlclRvQmFzZUNUTShjb250ZXh0KTsKIAogICAgICAgICBDR0Zsb2F0IEEgPSB1
c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9CYXNlQ1RNLmEgKyB1c2VyVG9CYXNlQ1RNLmIgKiB1c2Vy
VG9CYXNlQ1RNLmI7CkBAIC0xMDY2LDcgKzExMTksOCBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRv
dyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXpl
JgogICAgIC8vIEV4dHJlbWUgImJsdXIiIHZhbHVlcyBjYW4gbWFrZSB0ZXh0IGRyYXdpbmcgY3Jh
c2ggb3IgdGFrZSBjcmF6eSBsb25nIHRpbWVzLCBzbyBjbGFtcAogICAgIGJsdXJSYWRpdXMgPSBz
dGQ6Om1pbihibHVyUmFkaXVzLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQoMTAwMC4wKSk7CiAK
LSAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQs
IHhPZmZzZXQsIHlPZmZzZXQpOworICAgIGlmIChyZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkKQorICAgICAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5l
ZWRlZChjb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKIAogICAgIC8vIENoZWNrIGZvciBhbiBp
bnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0IGZv
ciB0aGUgc2hhZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2UgdGhl
IGRlZmF1bHQgc2hhZG93IGNvbG9yLgpAQCAtMTA3Niw0NCArMTEzMCw4MSBAQCBzdGF0aWMgdm9p
ZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgRmxvYXRTaXplJgogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4
dCwgQ0dTaXplTWFrZSh4T2Zmc2V0LCB5T2Zmc2V0KSwgYmx1clJhZGl1cywgY2FjaGVkQ0dDb2xv
cihjb2xvcikuZ2V0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkaWRVcGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBw
bHlTdGF0ZUNoYW5nZXMoKQogewotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OworICAgIGlmICghc3RhdGUoKS5jaGFuZ2VzKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgMC5mKSk7CisgICAgYXV0byBjb250ZXh0ID0gaW50ZXJuYWxQ
bGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VD
b2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKS5n
ZXQoKSk7CisgICAgZm9yIChhdXRvIGNoYW5nZSA6IHN0YXRlKCkuY2hhbmdlcygpKSB7CisgICAg
ICAgIHN3aXRjaCAoY2hhbmdlKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6Q1RNOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q1RNKGNvbnRleHQsIHN0YXRl
KCkuZ2V0Q1RNKCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIHNldENH
RmlsbENvbG9yKGNvbnRleHQsIHN0YXRlLmZpbGxDb2xvcik7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoOgorICAgICAgICAgICAgc2V0Q0dGaWxs
Q29sb3IoY29udGV4dCwgc3RhdGUoKS5maWxsQnJ1c2goKS5jb2xvcigpKTsKKyAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpB
bHBoYUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlLmFs
cGhhKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VU
aGlja25lc3M6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3Rk
OjptYXgoc3RhdGUoKS5zdHJva2VUaGlja25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVh
azsKIAotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVD
aGFuZ2UgfSkpCi0gICAgICAgIHNldENHQmxlbmRNb2RlKGNvbnRleHQsIHN0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoOgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0U3Ry
b2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZSgpLnN0cm9rZUJy
dXNoKCkuY29sb3IoKSkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkp
Ci0gICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3
aW5nTW9kZShzdGF0ZS50ZXh0RHJhd2luZ01vZGUpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwOgorICAgICAgICAgICAgc2V0Q0dMaW5lQ2FwKGNv
bnRleHQsIHN0YXRlKCkubGluZUNhcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFu
Z2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUu
c2hvdWxkQW50aWFsaWFzKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpMaW5lSm9pbjoKKyAgICAgICAgICAgIHNldENHTGluZUpvaW4oY29udGV4dCwgc3RhdGUo
KS5saW5lSm9pbigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAg
ICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNob3VsZFNt
b290aEZvbnRzKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpM
aW5lRGFzaDoKKyAgICAgICAgICAgIHNldENHTGluZURhc2goY29udGV4dCwgc3RhdGUoKS5saW5l
RGFzaCgpLmRhc2hlcywgc3RhdGUoKS5saW5lRGFzaCgpLm9mZnNldCk7CisgICAgICAgICAgICBi
cmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldEludGVy
cG9sYXRpb25RdWFsaXR5KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQ6CisgICAgICAgICAgICBzZXRDR01pdGVyTGltaXQoY29u
dGV4dCwgc3RhdGUoKS5taXRlckxpbWl0KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBp
ZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCi0g
ICAgICAgIHNldENHU2hhZG93KCp0aGlzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci19CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZToKKyAgICAgICAgICAgIHNldENHQmxl
bmRNb2RlKGNvbnRleHQsIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLm9wZXJhdGlvbiwgc3RhdGUo
KS5jb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi12b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIENH
Q29udGV4dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAgICAg
ICAgc2V0Q0dTaGFkb3coY29udGV4dCwgcmVuZGVyaW5nTW9kZSgpLCBzdGF0ZSgpLmRyb3BTaGFk
b3coKS5vZmZzZXQsIHN0YXRlKCkuZHJvcFNoYWRvdygpLmJsdXJSYWRpdXMsIHN0YXRlKCkuZHJv
cFNoYWRvdygpLmNvbG9yLCBzdGF0ZSgpLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpBbHBoYToKKyAgICAgICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRl
KCkuYWxwaGEoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk6CisgICAgICAg
ICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9s
YXRpb25RdWFsaXR5KHN0YXRlKCkuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlRleHREcmF3aW5nTW9kZToKKyAgICAgICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5n
TW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9kZShzdGF0ZSgpLnRleHREcmF3aW5nTW9kZSgp
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczoKKyAgICAgICAgICAgIENHQ29udGV4dFNldFNo
b3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZSgpLnNob3VsZEFudGlhbGlhcygpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6U2hvdWxkU21vb3RoRm9udHM6CisgICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9v
dGhGb250cyhjb250ZXh0LCBzdGF0ZSgpLnNob3VsZFNtb290aEZvbnRzKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTExMjUsNyAr
MTIxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7
CisgICAgaWYgKHN0cm9rZUdyYWRpZW50KCkpIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7
CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkb3VibGVMaW5lV2lkdGggPSBsaW5lV2lkdGggKiAy
OwogICAgICAgICAgICAgZmxvYXQgYWRqdXN0ZWRXaWR0aCA9IGNlaWxmKHJlY3Qud2lkdGgoKSAr
IGRvdWJsZUxpbmVXaWR0aCk7CkBAIC0xMTM1LDcgKzEyMjYsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQogICAgICAgICAgICAgYXV0byBsYXllciA9IGFkb3B0Q0YoQ0dMYXllckNyZWF0ZVdpdGhDb250
ZXh0KGNvbnRleHQsIGxheWVyU2l6ZSwgMCkpOwogCiAgICAgICAgICAgICBDR0NvbnRleHRSZWYg
bGF5ZXJDb250ZXh0ID0gQ0dMYXllckdldENvbnRleHQobGF5ZXIuZ2V0KCkpOwotICAgICAgICAg
ICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSBsaW5lV2lkdGg7CiAgICAgICAgICAgICBDR0Nv
bnRleHRTZXRMaW5lV2lkdGgobGF5ZXJDb250ZXh0LCBsaW5lV2lkdGgpOwogCiAgICAgICAgICAg
ICAvLyBDb21wZW5zYXRlIGZvciB0aGUgbGluZSB3aWR0aCwgb3RoZXJ3aXNlIHRoZSBsYXllcidz
IHRvcC1sZWZ0IGNvcm5lciB3b3VsZCBiZQpAQCAtMTE0OSw4ICsxMjM5LDggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0
KTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGxheWVy
Q29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7Ci0gICAg
ICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVu
dC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShs
YXllckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tl
R3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAogICAgICAgICAgICAgY29uc3QgZmxv
YXQgZGVzdGluYXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdpZHRoKTsKICAgICAgICAg
ICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAtIGxpbmVXaWR0
aCk7CkBAIC0xMTYxLDEzICsxMjUxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAg
ICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIHJlY3QpOwogICAgICAgICAgICAgQ0dDb250ZXh0
UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0
YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBz
dHJva2VHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9r
ZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICAgICAvLyBVc2lu
ZyBDR0NvbnRleHRBZGRSZWN0IGFuZCBDR0NvbnRleHRTdHJva2VQYXRoIHRvIHN0cm9rZSByZWN0
IHJhdGhlciB0aGFuCkBAIC0xMTgyLDk0ICsxMjcyLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAg
ICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQotewotICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAg
Y2FzZSBMaW5lQ2FwOjpCdXR0OgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3Jt
Q29udGV4dCgpLCBrQ0dMaW5lQ2FwQnV0dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGlu
ZUNhcDo6Um91bmQ6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0
KCksIGtDR0xpbmVDYXBSb3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTGluZUNhcDo6
U3F1YXJlOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBr
Q0dMaW5lQ2FwU3F1YXJlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKLXsKLSAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKLSAgICAgICAgZmxvYXQg
bGVuZ3RoID0gMDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBsZW5ndGggKz0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhc2hlc1tp
XSk7Ci0gICAgICAgIGlmIChsZW5ndGgpCi0gICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChk
YXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRMaW5l
RGFzaChwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVz
LnNpemUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKExpbmVK
b2luIGpvaW4pCi17Ci0gICAgc3dpdGNoIChqb2luKSB7Ci0gICAgY2FzZSBMaW5lSm9pbjo6TWl0
ZXI6Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dM
aW5lSm9pbk1pdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6Um91bmQ6
Ci0gICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5l
Sm9pblJvdW5kKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6Ci0g
ICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lSm9p
bkJldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgQ0dDb250ZXh0U2NhbGVD
VE0ocGxhdGZvcm1Db250ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
bV9kYXRhLT5zY2FsZShzaXplKTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
cm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIENHQ29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHQoKSwgYW5nbGUpOwotICAgIG1fZGF0YS0+cm90YXRlKGFuZ2xlKTsKLSAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0g
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKLSAgICBt
X2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENH
Q29udGV4dENvbmNhdENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKLSAgICBtX2Rh
dGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ0dD
b250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+
c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0Nv
bnRleHRDRzo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0Ci17
Ci0gICAgLy8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBl
eGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0aGUKLSAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3Np
dGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgotICAg
IC8vIGxldmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBj
YW4gdXNlIHRoaXMgQ0cgQVBJLgotICAgIGlmIChpbmNsdWRlU2NhbGUgPT0gRGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSkKLSAgICAgICAgcmV0dXJuIENHQ29udGV4dEdldFVzZXJTcGFjZVRv
RGV2aWNlU3BhY2VUcmFuc2Zvcm0ocGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgcmV0dXJuIENH
Q29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KIEZsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJv
dW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7CiAgICAgLy8gSXQgaXMgbm90IGVub3VnaCBqdXN0
IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UuIFRoZSByb3RhdGlvbiBwYXJ0IG9m
IHRoZQpAQCAtMTI4MCw3ICsxMjgyLDkgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmcKICAgICBp
ZiAobV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5KQogICAg
ICAgICByZXR1cm4gcm91bmRlZEludFJlY3QocmVjdCk7CiAKLSAgICBDR0FmZmluZVRyYW5zZm9y
bSBkZXZpY2VNYXRyaXggPSBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNm
b3JtKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOworCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dD
b250ZXh0R2V0VXNlclNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShjb250ZXh0KTsKICAgICBp
ZiAoQ0dBZmZpbmVUcmFuc2Zvcm1Jc0lkZW50aXR5KGRldmljZU1hdHJpeCkpIHsKICAgICAgICAg
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3QpOwpAQCAtMTMxOSw2ICsxMzIzLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXMKICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgQ29sb3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAogICAgIEZs
b2F0UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JU
ZXh0KEZsb2F0UmVjdChwb2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykp
LCBwcmludGluZywgbG9jYWxTdHJva2VDb2xvcik7CkBAIC0xMzY0LDEyICsxMzY5LDEyIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAgICAgfQogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1
YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQo
KSwgbG9jYWxTdHJva2VDb2xvcik7CisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGxv
Y2FsU3Ryb2tlQ29sb3IpOwogCi0gICAgQ0dDb250ZXh0RmlsbFJlY3RzKHBsYXRmb3JtQ29udGV4
dCgpLCBkYXNoQm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkpOworICAgIENHQ29udGV4
dEZpbGxSZWN0cyhjb250ZXh0LCBkYXNoQm91bmRzLmRhdGEoKSwgZGFzaEJvdW5kcy5zaXplKCkp
OwogCiAgICAgaWYgKGZpbGxDb2xvcklzTm90RXF1YWxUb1N0cm9rZUNvbG9yKQotICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9yKCkpOworICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBmaWxsQ29sb3IoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQpAQCAtMTQxMiwxNyArMTQxNywxOCBAQCBSZW5kZXJpbmdNb2RlIEdyYXBoaWNz
Q29udGV4dENHOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAg
Ly8gQ29yZUdyYXBoaWNzIGV4cGVjdHMgdGhlIGJhc2UgQ1RNIG9mIGEgSGlEUEkgY29udGV4dCB0
byBoYXZlIHRoZSBzY2FsZSBmYWN0b3IgYXBwbGllZCB0byBpdC4KICAgICAvLyBGYWlsaW5nIHRv
IGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBDVE0gd2lsbCBjYXVzZSBjZXJ0YWluIENHIGZlYXR1cmVz
LCBzdWNoIGFzIGZvY3VzIHJpbmdzLAogICAgIC8vIHRvIGRyYXcgd2l0aCBhIHNjYWxlIGZhY3Rv
ciBvZiAxIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2NhbGUgZmFjdG9yLgotICAgIENHQ29udGV4
dFNldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dD
b250ZXh0R2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBk
ZXZpY2VTY2FsZUZhY3RvcikpOworICAgIENHQ29udGV4dFNldEJhc2VDVE0oY29udGV4dCwgQ0dB
ZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKGNvbnRleHQpLCBkZXZpY2VT
Y2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewogICAgIC8vIENH
Q29udGV4dEZpbGxFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAg
IGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAg
aWYgKGZpbGxHcmFkaWVudCgpIHx8IGZpbGxQYXR0ZXJuKCkpIHsKICAgICAgICAgZmlsbEVsbGlw
c2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDM0LDcgKzE0
NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5S
ZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdy
YWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgIGlmIChzdHJva2VHcmFkaWVu
dCgpIHx8IHN0cm9rZVBhdHRlcm4oKSkgewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVs
bGlwc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ2OCw5ICsxNDc0LDEwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IEZsb2F0UG9pCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0Q0c6OmNhblVzZVNo
YWRvd0JsdXIoKSBjb25zdAogewotICAgIHJldHVybiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICByZXR1cm4gKHJlbmRlcmluZ01vZGUoKSA9
PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYg
IXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCk7CiB9CiAKLX0KIAotI2VuZGlmCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCA0Njhh
NDRiYWE4NmVlNTI2MTlkMjU1ZjkzOTQzYTk3NTViYWM5ZmFiLi4xNTdhMWEwNjgxZGQxY2YxZjdm
YjYzNDdhODhiZjgyYzMwNzBlMGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDEwLCAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsNTMgKzI1LDEzIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNFKENHKQorCiAjaW5jbHVk
ZSAiQ29sb3JTcGFjZUNHLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShDR0Nv
bnRleHRSZWYpOwotCi1jbGFzcyBDR0NvbnRleHRTdGF0ZVNhdmVyIHsKLXB1YmxpYzoKLSAgICBD
R0NvbnRleHRTdGF0ZVNhdmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBib29sIHNhdmVBbmRSZXN0
b3JlID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3Nh
dmVBbmRSZXN0b3JlKHNhdmVBbmRSZXN0b3JlKQotICAgIHsKLSAgICAgICAgaWYgKG1fc2F2ZUFu
ZFJlc3RvcmUpCi0gICAgICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7Ci0g
ICAgfQotICAgIAotICAgIH5DR0NvbnRleHRTdGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlm
IChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZSht
X2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNhdmUoKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKCFtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSht
X2NvbnRleHQpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlc3RvcmUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fc2F2ZUFuZFJlc3RvcmUp
OwotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7Ci0gICAgICAgIG1f
c2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBkaWRTYXZlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NhdmVBbmRSZXN0b3JlOwotICAgIH0KLSAg
ICAKLXByaXZhdGU6Ci0gICAgQ0dDb250ZXh0UmVmIG1fY29udGV4dDsKLSAgICBib29sIG1fc2F2
ZUFuZFJlc3RvcmU7Ci19OwotCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRD
RyA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgewogcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4
dENHKENHQ29udGV4dFJlZik7CkBAIC04NSw2OSArNDUsNDkgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzYXZlKCkgZmluYWw7Ci0gICAg
dm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wp
IGZpbmFsOworICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAg
dm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAx
KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOwogCisgICAgdm9pZCBz
YXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisgICAgdm9pZCBhcHBseVN0
YXRlQ2hhbmdlcygpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7
CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCBkcmF3UGF0aChj
b25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7
Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLQotICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3Q7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAg
dm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgp
IGZpbmFsOwotCi0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAg
IGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0Fj
Y2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkgZmluYWw7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFs
OwogCiAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLQotICAgIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgZmluYWw7Ci0KICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9
IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAg
IEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZp
bmFsOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6
Tm9ybWFsKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIHVz
aW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNp
emUmKSBmaW5hbDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7
Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7
CiAKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAg
ICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKKyAgICB2b2lk
IHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5j
bHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzID0gMSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmlu
YWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKQEAgLTE1NiwxOCArOTYsMjEgQEAgcHVibGljOgogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFs
OworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXpl
JiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZv
aWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CiAKKyAgICB2b2lk
IGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0
cm9rZVN0eWxlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCi0gICAgdm9p
ZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0g
ICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICBGbG9hdFJlY3Qgcm91
bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFs
bFNpZGVzKSBmaW5hbDsKIAogICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3Qg
ZmluYWw7CiAKLSAgICB2b2lkIGRpZFVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAg
IHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KworICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CiAKICAgICB2aXJ0dWFs
IGJvb2wgY2FuVXNlU2hhZG93Qmx1cigpIGNvbnN0OwogCkBAIC0xNzUsOSArMTE4LDE2IEBAIHB1
YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBDR0NvbnRleHRSZWYgaW50
ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKIH07CiAKLX0KK0NHQWZm
aW5lVHJhbnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjaW5jbHVkZSAiQ0dDb250ZXh0U3RhdGVTYXZlci5oIgogCisjZW5k
aWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCBlNmNlMmZiOTcyNDdhNmI4NmMwOWIx
YWQzNjE3MDFjMmVjM2U4NjI1Li5hZjAwYTAxMzM0N2UwY2Q4NWEzMGI4ODRlYmM3OWYzMmYxZTIz
MTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIGJvb2wgUERGRG9jdW1l
bnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hCiAKICAgICAvLyBPbGQgYW5kIG5ldyBjb250ZXh0IHNjYWxpbmcgZmFjdG9ycyBo
YXZlIHRvIG1hdGNoIGFzIHdlbGwuCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlw
ZSBkZWNvbXBvc2VkVHJhbnNmb3JtOwotICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4
dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFu
c2Zvcm0pOworICAgIGNvbnRleHQuZ2V0Q1RNKCkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zv
cm0pOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBjYWNoZWREZWNvbXBv
c2VkVHJhbnNmb3JtOwogICAgIG1fY2FjaGVkVHJhbnNmb3JtLmRlY29tcG9zZShjYWNoZWREZWNv
bXBvc2VkVHJhbnNmb3JtKTsKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFBERkRvY3VtZW50SW1h
Z2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdAogICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhidWZmZXJDb250ZXh0LCBkc3RS
ZWN0LCBGbG9hdFJlY3QobV9jYWNoZWRJbWFnZVJlY3QubG9jYXRpb24oKSwgc3JjUmVjdC5zaXpl
KCkpKTsKICAgICBkcmF3UERGUGFnZShidWZmZXJDb250ZXh0KTsKIAotICAgIG1fY2FjaGVkVHJh
bnNmb3JtID0gY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKKyAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKCk7
CiAgICAgbV9jYWNoZWREZXN0aW5hdGlvblJlY3QgPSBkc3RSZWN0OwogICAgIG1fY2FjaGVkU291
cmNlUmVjdCA9IHNyY1JlY3Q7CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CkBAIC0z
NjMsNiArMzYzLDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3UERGUGFnZShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtbV9jcm9wQm94Lmxv
Y2F0aW9uKCkpOwogCisgICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgLy8g
Q0dQREYgcGFnZXMgYXJlIGluZGV4ZWQgZnJvbSAxLgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IENHQ29udGV4dERyYXdQREZQYWdlV2l0aEFubm90YXRpb25zKGNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIENHUERGRG9jdW1lbnRHZXRQYWdlKG1fZG9jdW1lbnQuZ2V0KCksIDEpLCBudWxscHRy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmlu
ZGV4IGQ2ODlhNTFhODkxMDJhNTA5MDQ1NTliNDQyMjM2OWRlMTQ3MDMzMzUuLmZkZWVmNmIzOGQw
YzViNTU1NjczN2ViN2Y0NGFmMmYyZmM5YTQ0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMjQ3LDcgKzI0Nyw3IEBAIGJvb2wgUGF0
aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoR3JhcGhpY3NDCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCi0gICAg
Ym9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9p
bnQsIGtDR1BhdGhTdHJva2UpOworICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhD
b250YWluc1BvaW50KGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIGtD
R1BhdGhTdHJva2UpOwogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAKICAg
ICByZXR1cm4gaGl0U3VjY2VzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNv
cmVUZXh0LmNwcAppbmRleCBlZmJjMWU0OTU0NDFiZWRlNzM0ZTk0OGRkMjZkMzcxNDQxNjU1M2Uw
Li5lOWI3YWM0ZDdmNGNiZjc0MTI4OTM5YmZhOGMwNGU3NjVhMGRiZDg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVjb3Jk
ZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYXdHbHlwaHNSZWNvcmRlci5oIgogCi0j
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC0zNSw0OSArMzQsNDEgQEAKICNpbmNs
dWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHBh
bC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxl
Z2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVm
IGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVS
ZWYpCitzdGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgYmVnaW5MYXllcihDR0NvbnRleHREZWxl
Z2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRl
LCBDR1JlY3QsIENGRGljdGlvbmFyeVJlZiwgQ0dDb250ZXh0RGVsZWdhdGVSZWYpCiB7CiAgICAg
RHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVj
b3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRl
ci5yZWNvcmRCZWdpbkxheWVyKHJzdGF0ZSwgZ3N0YXRlLCByZWN0KTsKKyAgICByZWNvcmRlci5y
ZWNvcmRCZWdpbkxheWVyKGdzdGF0ZSk7CiAgICAgcmV0dXJuIGRlbGVnYXRlOwogfQogCi1zdGF0
aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVs
ZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUpCitz
dGF0aWMgQ0dDb250ZXh0RGVsZWdhdGVSZWYgZW5kTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYg
ZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKICAg
ICBEcmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNS
ZWNvcmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgIHJlY29y
ZGVyLnJlY29yZEVuZExheWVyKHJzdGF0ZSwgZ3N0YXRlKTsKKyAgICByZWNvcmRlci5yZWNvcmRF
bmRMYXllcihnc3RhdGUpOwogICAgIHJldHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHRXJy
b3IgZHJhd0dseXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdT
dGF0ZVJlZiByc3RhdGUsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zv
cm0qIHRtLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1td
LCBzaXplX3QgY291bnQpCitzdGF0aWMgQ0dFcnJvciBkcmF3R2x5cGhzKENHQ29udGV4dERlbGVn
YXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUs
IGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3Qg
Q0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQogewotICAgIGlmIChDR0dTdGF0ZUdl
dEFscGhhKGdzdGF0ZSkgPiAwKSB7Ci0gICAgICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3Jk
ZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVH
ZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgICAgIHJlY29yZGVyLnJlY29yZERyYXdHbHlwaHMocnN0
YXRlLCBnc3RhdGUsIHRtLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwotICAgIH0KKyAgICBE
cmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNv
cmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOworICAgIHJlY29yZGVy
LnJlY29yZERyYXdHbHlwaHMoZ3N0YXRlLCBnbHlwaHMsIHBvc2l0aW9ucywgY291bnQpOwogICAg
IHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShD
R0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhdGUs
IENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgaW1hZ2UpCitzdGF0
aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVu
ZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VS
ZWYgaW1hZ2UpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpzdGF0aWNf
Y2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8oZGVsZWdh
dGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UocnN0YXRlLCBnc3RhdGUsIHJlY3Qs
IGltYWdlKTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3SW1hZ2UoZ3N0YXRlLCByZWN0LCBpbWFn
ZSk7CiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotVW5pcXVlUmVmPEdyYXBoaWNz
Q29udGV4dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQorc3Rh
dGljIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFsQ29udGV4dChEcmF3
R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyKQogewotICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0g
YWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7CisgICAgYXV0byBjb250ZXh0
RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKCZyZWNvcmRlcikpOwog
ICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBk
ZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4o
JmJlZ2luTGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHRE
ZWxlZ2F0ZS5nZXQoKSwgZGVFbmRMYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxl
Z2F0ZUNhbGxiYWNrPigmZW5kTGF5ZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxi
YWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0
PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZXZWJDb3JlOjpkcmF3R2x5cGhzKSk7CkBAIC04
Niw2NyArNzcsMTUgQEAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0dseXBoc1JlY29y
ZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdy
YXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAotRHJhd0dseXBoc1JlY29yZGVy
OjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3RE
cmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250ZXh0IGRl
cml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVj
b3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29u
dGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZl
Rm9udEZyb21Db250ZXh0IGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRp
b25Db250ZXh0KGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICAsIG1fZGVjb25zdHJ1Y3REcmF3R2x5
cGhzKGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGVyaXZlRm9udEZyb21Db250ZXh0
KGRlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICAsIG1faW50ZXJuYWxDb250ZXh0KGNyZWF0ZUlu
dGVybmFsQ29udGV4dCgpKQorICAgICwgbV9pbnRlcm5hbENvbnRleHQoY3JlYXRlSW50ZXJuYWxD
b250ZXh0KCp0aGlzKSkKIHsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRl
SW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQot
ewotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBjb250ZXh0U3RhdGUuZmls
bENvbG9yOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQgPSBjb250ZXh0
U3RhdGUuZmlsbEdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bTsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUu
ZmlsbFBhdHRlcm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IgPSBj
b250ZXh0U3RhdGUuc3Ryb2tlQ29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmdyYWRpZW50ID0gY29udGV4dFN0YXRlLnN0cm9rZUdyYWRpZW50OwotICAgIG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtID0gY29udGV4dFN0YXRlLnN0
cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0
eWxlLnBhdHRlcm4gPSBjb250ZXh0U3RhdGUuc3Ryb2tlUGF0dGVybjsKLQotICAgIG1fb3JpZ2lu
YWxTdGF0ZS5jdG0gPSBtX293bmVyLmdldENUTSgpOyAvLyBGSVhNRTogRGVhbCB3aXRoIGJhc2Ug
Q1RNLgotCi0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQgPSBjb250ZXh0U3RhdGUu
c2hhZG93T2Zmc2V0OwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciA9IGNvbnRleHRT
dGF0ZS5zaGFkb3dCbHVyOwotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IgPSBjb250
ZXh0U3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVU
cmFuc2Zvcm1zID0gY29udGV4dFN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotCi0gICAg
bV9jdXJyZW50U3RhdGUgPSBtX29yaWdpbmFsU3RhdGU7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgY29udGV4dFN0YXRlKQotewotICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNv
bG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvciht
X29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKLSAgICBlbHNlIGlmIChtX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0
RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGVsc2Ugewot
ICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKLSAgICAg
ICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNv
bG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7Ci0gICAgZWxzZSBpZiAobV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFk
aWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LnBhdHRlcm4pOwotICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRl
cm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwotICAgIH0KLQotICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7Ci0KLSAgICBtX2ludGVybmFs
Q29udGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRv
dy5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIs
IG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNN
b2RlKTsKLQotICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4
dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpw
cmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250
KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAg
ICAgQVNTRVJUKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShDVEZvbnRHZXRNYXRyaXgoZm9u
dC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpKTsKIApAQCAtMTU2LDEwNCArOTUsMzggQEAgdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYg
Zm9udCwgRm9udFNtb290aGluZ00KICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVP
dmVyYWxsVGV4dE1hdHJpeChmb250KTsKICAgICBpZiAoZm9udC5wbGF0Zm9ybURhdGEoKS5vcmll
bnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpCiAgICAgICAgIG1fb3JpZ2lu
YWxUZXh0TWF0cml4ID0gY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCBtX29yaWdpbmFs
VGV4dE1hdHJpeCk7Ci0KLSAgICBhdXRvJiBjb250ZXh0U3RhdGUgPSBtX293bmVyLnN0YXRlKCk7
Ci0gICAgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnRleHRTdGF0ZSk7Ci0gICAgcG9wdWxhdGVJ
bnRlcm5hbENvbnRleHQoY29udGV4dFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkKK0dyYXBoaWNzQ29udGV4dFN0YXRlIERyYXdH
bHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCgpCiB7Ci0gICAgdXBkYXRlQ1RN
KG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwotICAgIHVwZGF0ZUZpbGxDb2xvcihtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLmNvbG9yLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50Lmdl
dCgpLCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0
ZVN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciwgbV9vcmlnaW5h
bFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LmdldCgpLCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tl
U3R5bGUucGF0dGVybi5nZXQoKSk7Ci0gICAgdXBkYXRlU2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0
ZS5zaGFkb3cuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA/
IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMgOiBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6
Tm8pOworICAgIGF1dG8gb3JpZ2luYWxTdGF0ZSA9IG1fZGVzdGluYXRpb25Db250ZXh0LnN0YXRl
KCk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPm1lcmdlU3RhdGVEaWZmcyhvcmlnaW5hbFN0YXRl
KTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZXR1
cm4gb3JpZ2luYWxTdGF0ZTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZUZp
bGxDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRpZW50KiBuZXdHcmFkaWVudCwgUGF0
dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZXN0b3JlRGVzdGlu
YXRpb25Db250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKQog
ewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0IGl0IGFjdHVhbGx5IGlzbid0LCBm
b3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwgb25seSBldmVyIHNldCB0aGlzIHRv
IGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNvcnJlY3QgY2hlY2sgZm9yLgotICAg
IC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ugc2V0IGl0IGJhY2sgdG8gd2hhdCBp
dCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3b3JrcyBjb3JyZWN0bHkgZm9yIHRv
by4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3RhdGUuZmlsbFN0eWxlLmNvbG9yKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAg
ICBuZXdTdGF0ZS5maWxsQ29sb3IgPSBuZXdDb2xvcjsKLSAgICBpZiAobmV3R3JhZGllbnQpCi0g
ICAgICAgIG5ld1N0YXRlLmZpbGxHcmFkaWVudCA9IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQ
YXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5maWxsUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAg
bV9vd25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbENvbG9yQ2hhbmdlIH0pOwotICAgIG1fY3VycmVudFN0YXRlLmZpbGxTdHlsZS5jb2xvciA9
IG5ld0NvbG9yOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0Lm1lcmdlU3RhdGVEaWZmcyhvcmln
aW5hbFN0YXRlKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVN0cm9rZUNv
bG9yKGNvbnN0IENvbG9yJiBuZXdDb2xvciwgR3JhZGllbnQqIG5ld0dyYWRpZW50LCBQYXR0ZXJu
KiBuZXdQYXR0ZXJuKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIo
Q0dHU3RhdGVSZWYgZ3N0YXRlKQogewotICAgIC8vIFRoaXMgY2hlY2sgbG9va3Mgd3JvbmcgYnV0
IGl0IGFjdHVhbGx5IGlzbid0LCBmb3Igb3VyIGxpbWl0ZWQgdXNlLgotICAgIC8vIENUIHdpbGwg
b25seSBldmVyIHNldCB0aGlzIHRvIGEgc29saWQgY29sb3IsIHdoaWNoIHRoaXMgaXMgdGhlIGNv
cnJlY3QgY2hlY2sgZm9yLgotICAgIC8vIEluIGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCkgd2Ug
c2V0IGl0IGJhY2sgdG8gd2hhdCBpdCB3YXMgb3JpZ2luYWxseSwgd2hpY2ggdGhpcyBjaGVjayB3
b3JrcyBjb3JyZWN0bHkgZm9yIHRvby4KLSAgICBpZiAobmV3Q29sb3IgPT0gbV9jdXJyZW50U3Rh
dGUuc3Ryb2tlU3R5bGUuY29sb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIG5ld1N0YXRlLnN0cm9rZUNvbG9yID0gbmV3Q29sb3I7
Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5zdHJva2VHcmFkaWVudCA9
IG5ld0dyYWRpZW50OwotICAgIGlmIChuZXdQYXR0ZXJuKQotICAgICAgICBuZXdTdGF0ZS5zdHJv
a2VQYXR0ZXJuID0gbmV3UGF0dGVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0
YXRlLCB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB9KTsKLSAgICBt
X2N1cnJlbnRTdGF0ZS5zdHJva2VTdHlsZS5jb2xvciA9IG5ld0NvbG9yOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0
aW5hdGlvbkNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihDR0dTdGF0ZUdldEFscGhhKGdz
dGF0ZSkpOwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlQ1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgY3RtKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEVuZExh
eWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICBpZiAoY3RtID09IG1fY3VycmVudFN0YXRl
LmN0bSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vd25lci5zZXRDVE0oY3RtKTsKLSAgICBt
X2N1cnJlbnRTdGF0ZS5jdG0gPSBjdG07CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0Q1RN
KCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5lbmRU
cmFuc3BhcmVuY3lMYXllcigpOwogfQogCi1zdGF0aWMgYm9vbCBzaGFkb3dJc0NsZWFyZWQoY29u
c3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIpCi17Ci0gICAgcmV0
dXJuIHNoYWRvd09mZnNldCA9PSBGbG9hdFNpemUoKSAmJiAhc2hhZG93Qmx1cjsKLX0KLQotdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRv
d09mZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsKLSAgICAvLyBX
ZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGlmIG5vYm9k
eSBoYXMgYW55IHNoYWRvd3MuCi0gICAgaWYgKHNoYWRvd0lzQ2xlYXJlZChzaGFkb3dPZmZzZXQs
IHNoYWRvd0JsdXIpICYmIHNoYWRvd0lzQ2xlYXJlZChtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zm
c2V0LCBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuYmx1cikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlIG5ld1N0YXRlOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzIHN0YXRlQ2hhbmdlRmxhZ3M7Ci0KLSAgICBpZiAoc2hhZG93T2Zm
c2V0ICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZzZXQgfHwgc2hhZG93Qmx1ciAhPSBtX2N1
cnJlbnRTdGF0ZS5zaGFkb3cuYmx1ciB8fCBzaGFkb3dDb2xvciAhPSBtX2N1cnJlbnRTdGF0ZS5z
aGFkb3cuY29sb3IpIHsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93T2Zmc2V0ID0gc2hhZG93T2Zm
c2V0OwotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjsKLSAgICAgICAg
bmV3U3RhdGUuc2hhZG93Q29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICAgICAgc3RhdGVDaGFuZ2VG
bGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Ci0gICAgfQotICAg
IGlmIChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAhPSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6
VW5zcGVjaWZpZWQgJiYgKHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zOjpZZXMpICE9IG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1z
KSB7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotICAgICAg
ICBzdGF0ZUNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXNDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc3RhdGVDaGFuZ2VGbGFncy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX293bmVyLmRpZFVwZGF0ZVN0YXRlKG5ld1N0
YXRlLCBzdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5vZmZz
ZXQgPSBzaGFkb3dPZmZzZXQ7Ci0gICAgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgPSBzaGFk
b3dCbHVyOwotICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5jb2xvciA9IHNoYWRvd0NvbG9yOwot
ICAgIG1fY3VycmVudFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zID0gKHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zID09IFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpZZXMpOwotfQotCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KENHU3R5bGVSZWYgc3R5bGUpCitzdGF0
aWMgdm9pZCBzZXREcm9wU2hhZG93KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0
LCBDR1N0eWxlUmVmIHN0eWxlKQogewogICAgIGlmIChDR1N0eWxlR2V0VHlwZShzdHlsZSkgIT0g
a0NHU3R5bGVTaGFkb3cpIHsKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBraW5kcyBv
ZiBDR1N0eWxlcy4KLSAgICAgICAgdXBkYXRlU2hhZG93KHswLCAwfSwgMCwgQ29sb3IoKSwgU2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkKTsKKyAgICAgICAgZGVzdGluYXRpb25D
b250ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2MSwy
MCArMTM0LDkgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRvdyhDR1N0eWxl
UmVmIHN0eWxlKQogICAgIGF1dG8gcmFkID0gZGVnMnJhZChzaGFkb3dTdHlsZS5hemltdXRoIC0g
MTgwKTsKICAgICBhdXRvIHNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZShzdGQ6OmNvcyhyYWQpLCBz
dGQ6OnNpbihyYWQpKSAqIHNoYWRvd1N0eWxlLmhlaWdodDsKICAgICBhdXRvIHNoYWRvd0NvbG9y
ID0gQ0dTdHlsZUdldENvbG9yKHN0eWxlKTsKLSAgICB1cGRhdGVTaGFkb3coc2hhZG93T2Zmc2V0
LCBzaGFkb3dTdHlsZS5yYWRpdXMsIENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2Uo
c2hhZG93Q29sb3IpLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKTsKLX0KIAotdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3QpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdl
dENUTShnc3RhdGUpKTsKLSAgICBhdXRvIGFscGhhID0gQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUp
OwotICAgIG1fb3duZXIuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihhbHBoYSk7Ci19Ci0KLXZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBD
R0dTdGF0ZVJlZiBnc3RhdGUpCi17Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3Rh
dGUpKTsKLSAgICBtX293bmVyLmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgZGVzdGluYXRp
b25Db250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHN0YXRpY19jYXN0PGZsb2F0
PihzaGFkb3dTdHlsZS5yYWRpdXMpLCBDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNl
KHNoYWRvd0NvbG9yKSB9KTsKKyAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2V0U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXModHJ1ZSk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8Q0dTaXplPiBjb21wdXRlQWR2
YW5jZXNGcm9tUG9zaXRpb25zKGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3Vu
dCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIHRleHRNYXRyaXgpCkBAIC0yOTAsMTggKzE1Miwx
OCBAQCBzdGF0aWMgVmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhj
b25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVS
ZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBD
R0dseXBoIGdseXBoc1tdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQp
Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR0dTdGF0ZVJlZiBn
c3RhdGUsIGNvbnN0IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10s
IHNpemVfdCBjb3VudCkKIHsKICAgICBBU1NFUlRfSU1QTElFUyhtX2Rlcml2ZUZvbnRGcm9tQ29u
dGV4dCA9PSBEZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vLCBtX29yaWdpbmFsRm9udCk7CiAKLSAg
ICBpZiAoIWNvdW50KQorICAgIGlmICghY291bnQgfHwgQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUp
IDw9IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIENHRm9udFJlZiB1c2VkRm9udCA9IENHR1N0
YXRlR2V0Rm9udChnc3RhdGUpOwogICAgIGlmIChtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBE
ZXJpdmVGb250RnJvbUNvbnRleHQ6Ok5vICYmIHVzZWRGb250ICE9IGFkb3B0Q0YoQ1RGb250Q29w
eUdyYXBoaWNzRm9udChtX29yaWdpbmFsRm9udC0+cGxhdGZvcm1EYXRhKCkuY3RGb250KCksIG51
bGxwdHIpKS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0
ZUdldENUTShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0
YXRlR2V0Q1RNKGdzdGF0ZSkpOwogCiAgICAgLy8gV2Ugd2FudCB0aGUgcmVwbGF5ZXIncyBDVE0g
YW5kIHRleHQgbWF0cml4IHRvIG1hdGNoIHRoZSBjdXJyZW50IENUTSBhbmQgdGV4dCBtYXRyaXgu
CiAgICAgLy8gVGhlIGN1cnJlbnQgdGV4dCBtYXRyaXggaXMgYSBjb25jYXRlbmF0aW9uIG9mIHdo
YXRldmVyIFdlYktpdCBzZXRzIGl0IHRvIGFuZCB3aGF0ZXZlcgpAQCAtMzI0LDEzICsxODYsMTYg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdT
dGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgaW52ZXJzZUNUTUZpeHVwID0gaW52
ZXJzZS52YWx1ZSgpOwogICAgIGVsc2UKICAgICAgICAgY3RtRml4dXAgPSBBZmZpbmVUcmFuc2Zv
cm0oKTsKLSAgICBtX293bmVyLmNvbmNhdENUTShjdG1GaXh1cCk7CisKKyAgICBtX2Rlc3RpbmF0
aW9uQ29udGV4dC5jb25jYXRDVE0oY3RtRml4dXApOwogCiAgICAgYXV0byBmaWxsQ29sb3IgPSBD
R0dTdGF0ZUdldEZpbGxDb2xvcihnc3RhdGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNl
dEZpbGxDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKGZpbGxDb2xvcikp
OworCiAgICAgYXV0byBzdHJva2VDb2xvciA9IENHR1N0YXRlR2V0U3Ryb2tlQ29sb3IoZ3N0YXRl
KTsKLSAgICB1cGRhdGVGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFj
ZShmaWxsQ29sb3IpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihDb2xvcjo6Y3JlYXRlQW5kUHJl
c2VydmVDb2xvclNwYWNlKHN0cm9rZUNvbG9yKSk7Ci0gICAgdXBkYXRlU2hhZG93KENHR1N0YXRl
R2V0U3R5bGUoZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOworCisg
ICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwgQ0dHU3RhdGVHZXRTdHlsZShn
c3RhdGUpKTsKIAogICAgIGF1dG8gZm9udFNpemUgPSBDR0dTdGF0ZUdldEZvbnRTaXplKGdzdGF0
ZSk7CiAgICAgUmVmIGZvbnQgPSBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dCA9PSBEZXJpdmVGb250
RnJvbUNvbnRleHQ6Ok5vID8gKm1fb3JpZ2luYWxGb250IDogRm9udDo6Y3JlYXRlKEZvbnRQbGF0
Zm9ybURhdGEoYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KHVzZWRGb250LCBm
b250U2l6ZSwgbnVsbHB0ciwgbnVsbHB0cikpLCBmb250U2l6ZSkpOwpAQCAtMzQ1LDMwICsyMTAs
MzggQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJp
bmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgLy8gRklYTUU6IDxodHRwczov
L3dlYmtpdC5vcmcvYi8yMzI5MTc+IChgRHJhd0dseXBoc1JlY29yZGVyYCBzaG91bGQgYmUgYWJs
ZSB0byByZWNvcmQrcmVwbGF5IHZlcnRpY2FsIHRleHQpCiAgICAgfQogCi0gICAgbV9vd25lci5k
cmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBv
c2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCB0ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0
TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7Ci0KLSAgICBt
X293bmVyLmNvbmNhdENUTShpbnZlcnNlQ1RNRml4dXApOworICAgIG1fZGVzdGluYXRpb25Db250
ZXh0LmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNG
cm9tUG9zaXRpb25zKHBvc2l0aW9ucywgY291bnQsIHRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQs
IHRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsKIH0KIAot
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNnSW1hZ2Up
Cit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKENHR1N0YXRlUmVmIGdz
dGF0ZSwgQ0dSZWN0IHJlY3QsIENHSW1hZ2VSZWYgY2dJbWFnZSkKIHsKLSAgICB1cGRhdGVDVE0o
KkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOwotICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0
eWxlKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVH
ZXRDVE0oZ3N0YXRlKSk7CisgICAgc2V0RHJvcFNoYWRvdyhtX2Rlc3RpbmF0aW9uQ29udGV4dCwg
Q0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKIAogICAgIC8vIENvcmUgR3JhcGhpY3MgYXNzdW1l
cyBhICJ5IHVwIiBjb29yZGluYXRlIHN5c3RlbSwgYnV0IGluIFdlYktpdCwgd2UgdXNlIGEgInkt
ZG93biIgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgLy8gVGhpcyBtZWFucyB0aGF0IFdlYktpdCdz
IGRyYXdpbmcgcm91dGluZXMgKEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkpIGludGVudGlv
bmFsbHkgZHJhdyBpbWFnZXMgdXBzaWRlLWRvd24gZnJvbSBDb3JlIEdyYXBoaWNzJ3MgcG9pbnQg
b2Ygdmlldy4KICAgICAvLyAoVGhlcmUncyBhIHktZmxpcCBpbnNpZGUgdGhlIGltcGxlbWVudGF0
aW9uIG9mIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkuKQogICAgIC8vIFRoZSByZWN0IGhh
cyB0aGUgcmlnaHQgYm91bmRzLCBidXQgd2UgbmVlZCB0byB0cmFuc2Zvcm0gZnJvbSBDRydzIGNv
b3JkaW5hdGUgc3lzdGVtIHRvIFdlYktpdCdzIGJ5IHBlcmZvcm1pbmcgb3VyIG93biB5LWZsaXAg
c28gaW1hZ2VzIGFyZSBkcmF3biB0aGUgcmlnaHQtc2lkZS11cC4KICAgICAvLyBXZSBkbyB0aGlz
IGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHRoZSB0d28gQVBJcywgd2hpY2ggaXMgcmlnaHQgaGVy
ZS4KLSAgICBtX293bmVyLnRyYW5zbGF0ZSgwLCByZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qu
b3JpZ2luLnkpOwotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0KKyAgICBt
X2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgcmVjdC5zaXplLmhlaWdodCArIDIgKiBy
ZWN0Lm9yaWdpbi55KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKKyAgICAKICAgICBhdXRvIGltYWdlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShjZ0lt
YWdlKTsKLSAgICBtX293bmVyLmRyYXdOYXRpdmVJbWFnZSgqaW1hZ2UsIGltYWdlLT5zaXplKCks
IEZsb2F0UmVjdChyZWN0KSwgRmxvYXRSZWN0IHt7IH0sIGltYWdlLT5zaXplKCl9LCBJbWFnZVBh
aW50aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7Ci0KKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoKmltYWdlLCBpbWFnZS0+c2l6
ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7IHsgfSwgaW1hZ2UtPnNpemUoKSB9LCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7
CisgICAgCiAgICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRl
eHQuCi0gICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBtX293bmVyLnRy
YW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSkpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIG1fZGVz
dGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZSgwLCAtKHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVj
dC5vcmlnaW4ueSkpOworfQorCit2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZH
UnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2Rl
KQoreworICAgIHNldEludGVybmFsRm9udChmb250LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAKKyAg
ICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KCk7CisgICAgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2
YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CisgICAgcmVzdG9y
ZURlc3RpbmF0aW9uQ29udGV4dChvcmlnaW5hbFN0YXRlKTsKIH0KIAogdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdPVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKQEAgLTM3OSwyNSArMjUyLDE5IEBAIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCoKICAgICAgICAgYXV0byBib3VuZHMgPSBmb250LmJvdW5kc0ZvckdseXBoKGdseXBo
c1tpXSk7CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgbG9jYWwgSW1hZ2VCdWZmZXIgYmVjYXVzZSBk
ZWNvZGluZyB0aGUgU1ZHIGZvbnRzIGhhcyB0byBoYXBwZW4gaW4gV2ViUHJvY2Vzcy4KLSAgICAg
ICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX293bmVyLmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZl
cihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6
OkxvY2FsKSkgeworICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fZGVzdGluYXRpb25D
b250ZXh0LmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihib3VuZHMsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBSZW5kZXJpbmdNZXRob2Q6OkxvY2FsKSkgeworICAgICAgICAgICAgaW1h
Z2VCdWZmZXItPmNvbnRleHQoKS5hcHBseVN0YXRlQ2hhbmdlcygpOwogICAgICAgICAgICAgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoaW1hZ2VCdWZmZXItPmNvbnRleHQoKSwgZm9udCwgZ2x5cGhz
ICsgaSwgYWR2YW5jZXMgKyBpLCAxLCBGbG9hdFBvaW50KCksIHNtb290aGluZ01vZGUpOwogCiAg
ICAgICAgICAgICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0ID0gZW5jbG9zaW5nSW50UmVjdChi
b3VuZHMpOwogICAgICAgICAgICAgZGVzdGluYXRpb25SZWN0Lm1vdmVCeShwZW5Qb3NpdGlvbik7
Ci0gICAgICAgICAgICBtX293bmVyLmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRlc3Rp
bmF0aW9uUmVjdCk7CisgICAgICAgICAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwogICAgICAgICB9CiAKICAgICAg
ICAgcGVuUG9zaXRpb24ubW92ZShzaXplKGFkdmFuY2VzW2ldKSk7CiAgICAgfQogfQogCi12b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd05vbk9UU1ZHUnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIHByZXBhcmVJbnRlcm5h
bENvbnRleHQoZm9udCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgRm9udENhc2NhZGU6OmRyYXdHbHlw
aHMobV9pbnRlcm5hbENvbnRleHQsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
c3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7Ci0gICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQo
KTsKLX0KLQogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdCeVNwbGl0dGluZ0ludG9PVFNW
R0FuZE5vbk9UU1ZHUnVucyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUg
c21vb3RoaW5nTW9kZSkKIHsKICAgICBhdXRvIG90c3ZnR2x5cGhzID0gZm9udC5maW5kT1RTVkdH
bHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpOwpAQCAtNDQwLDcgKzMwNyw3IEBAIHZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29u
c3QgRm9udCYgZm9uCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBp
ZiAobV9kZWNvbnN0cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpObykg
ewotICAgICAgICBtX293bmVyLmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKKyAgICAgICAg
bV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC00NTMsMTUgKzMyMCwxNyBAQCB2b2lkIERyYXdHbHlwaHNS
ZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQoQ1RGb250UmVmIGZvbnQsIENHRmxvYXQgZm9udFNpemUs
IENUTGluZQogewogICAgIEFTU0VSVChtX2RlY29uc3RydWN0RHJhd0dseXBocyA9PSBEZWNvbnN0
cnVjdERyYXdHbHlwaHM6Olllcyk7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNh
dmVyKG1fb3duZXIpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIobV9kZXN0
aW5hdGlvbkNvbnRleHQpOwogCi0gICAgbV9vd25lci50cmFuc2xhdGUobGluZVJlY3Qub3JpZ2lu
LngsIGxpbmVSZWN0Lm9yaWdpbi55ICsgbGluZVJlY3Quc2l6ZS5oZWlnaHQpOwotICAgIG1fb3du
ZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJh
bnNsYXRlKGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0LnNp
emUuaGVpZ2h0KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwg
LTEpKTsKIAotICAgIHByZXBhcmVJbnRlcm5hbENvbnRleHQoRm9udDo6Y3JlYXRlKEZvbnRQbGF0
Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50
aWFsaWFzZWQpOworICAgIHNldEludGVybmFsRm9udChGb250OjpjcmVhdGUoRm9udFBsYXRmb3Jt
RGF0YShmb250LCBmb250U2l6ZSkpLCBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxp
YXNlZCk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUludGVybmFsQ29u
dGV4dCgpOwogICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksIDAsIDApOwogICAgIENUTGluZURyYXcobGluZSwgbV9pbnRlcm5h
bENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBjb25jbHVkZUludGVybmFsQ29udGV4
dCgpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0ZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAK
aW5kZXggNTExZTA5Yjk2Y2VmMDMyNTA5MGUyM2FmOTE0YWUzNWYyYWI4ZWQyZS4uZTUzNGNjNTVh
ZjI2YjdmYjgyODBlNjNiN2RjMjVhM2Q0YTQxNjM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVD
b3JlVGV4dC5jcHAKQEAgLTE1MiwyNSArMTUyLDI3IEBAIHN0YXRpYyB2b2lkIGZpbGxWZWN0b3JX
aXRoVmVydGljYWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25z
CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBj
b3VudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQorc3RhdGljIHZvaWQgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYg
Zm9udCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNv
bnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRleHRNYXRyaXgpCiB7CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAg
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURh
dGEoKTsKKwogICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7CiAgICAg
aWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGlj
YWwpIHsKLSAgICAgICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGlj
YWxUZXh0TWF0cml4KGZvbnQsIHRleHRNYXRyaXgpLCBjb250ZXh0KTsKKyAgICAgICAgU2NvcGVk
VGV4dE1hdHJpeCBzYXZlZE1hdHJpeChjb21wdXRlVmVydGljYWxUZXh0TWF0cml4KGZvbnQsIHRl
eHRNYXRyaXgpLCBjZ0NvbnRleHQpOwogCiAgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJh
bnNsYXRpb25zKGNvdW50KTsKICAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNG
b3JHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRh
KCksIGNvdW50KTsKIAogICAgICAgICBhdXRvIGFzY2VudERlbHRhID0gZm9udC5mb250TWV0cmlj
cygpLmZsb2F0QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygp
LmZsb2F0QXNjZW50KCk7Ci0gICAgICAgIGZpbGxWZWN0b3JXaXRoVmVydGljYWxHbHlwaFBvc2l0
aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBj
b3VudCwgcG9pbnQsIGFzY2VudERlbHRhKTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0
Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRl
eHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRp
b25zLCBjZ0NvbnRleHQsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGFkdmFuY2VzLCBjb3VudCwgcG9p
bnQsIGFzY2VudERlbHRhKTsKKyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNnQ29udGV4dCk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlv
bnMocG9zaXRpb25zLCBjb250ZXh0LCBhZHZhbmNlcywgY291bnQsIHBvaW50KTsKLSAgICAgICAg
Q1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25z
LmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAgICAgICBmaWxsVmVjdG9yV2l0aEhvcml6b250
YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNnQ29udGV4dCwgYWR2YW5jZXMsIGNvdW50LCBw
b2ludCk7CisgICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBn
bHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0KIH0KIApA
QCAtMjQyLDEwICsyNDQsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIHNldENHRm9u
dFJlbmRlcmluZ01vZGUoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250
ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7
Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBjb250
ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKyAg
ICBhdXRvIGRyb3BTaGFkb3cgPSBjb250ZXh0LmRyb3BTaGFkb3coKTsKIAogICAgIEFmZmluZVRy
YW5zZm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKICAgICBmbG9hdCBzeW50aGV0
aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CkBAIC0yNTgsMjkgKzI1
NywyOSBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0
RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVy
ICYmICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNvbnRleHQuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9u
T3JGbGlwcGVkKCkpICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJv
b2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJh
d2luZ01vZGU6OkZpbGwgJiYgZHJvcFNoYWRvdy5jb2xvci5pc1ZhbGlkKCkgJiYgIWRyb3BTaGFk
b3cuYmx1clJhZGl1cyAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFj
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5
T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7CiAgICAgICAgIC8vIFBhaW50IHNpbXBs
ZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8g
YXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KICAgICAgICAgY29udGV4dC5jbGVh
clNoYWRvdygpOwogICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxDb2xvcigp
OwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOworICAgICAgICBDb2xv
ciBzaGFkb3dGaWxsQ29sb3IgPSBkcm9wU2hhZG93LmNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRYID0gcG9p
bnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRY
ID0gcG9pbnQueCgpICsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKTsKICAgICAgICAgLy8gSWYg
c2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQg
dGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAg
ZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAo
Y29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKLSAgICAgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSks
IGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4
KTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9m
ZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6
IDEpOworICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4
dFgsIHNoYWRvd1RleHRZKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCB0ZXh0TWF0cml4KTsKICAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAg
ICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBz
eW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhz
LCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKKyAgICAgICAgICAgIHNob3dHbHlw
aHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZz
ZXQsIHNoYWRvd1RleHRZKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCB0ZXh0TWF0cml4KTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9y
KTsKICAgICB9CiAKLSAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0Nv
bnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4KTsKIAogICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0
KQotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsg
c3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMs
IGFkdmFuY2VzLCBudW1HbHlwaHMsIHRleHRNYXRyaXgpOworICAgICAgICBzaG93R2x5cGhzV2l0
aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgc3ludGhldGljQm9sZE9mZnNldCwgcG9p
bnQueSgpKSwgZm9udCwgY29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0
TWF0cml4KTsKIAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRleHQuc2V0
U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBj
b250ZXh0LnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250
U21vb3RoaW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggMmUyZjRmNGYyY2I1NWQz
NjVlNWFlMzk5MzI1ZDA1ZjJjMTczNjFmZC4uY2NmNDBjZWE2MmIxNjc0MzY2ZDc0ODQxNjJiMWJj
NGU5Mzc3MDc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC05MCwxMCArOTAsNyBA
QCBib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3Ms
IEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgaWYgKCEoZmxhZ3MgJiBBc1RleHRGbGFnOjpJbmNs
dWRlc1BsYXRmb3JtT3BlcmF0aW9ucykpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHN0YXRl
SXRlbSA9IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICAgICAgLy8gRklYTUU6IGZvciBu
b3csIG9ubHkgZHJvcCB0aGUgaXRlbSBpZiB0aGUgb25seSBzdGF0ZS1jaGFuZ2UgZmxhZ3MgYXJl
IHBsYXRmb3JtLXNwZWNpZmljLgotICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZUNoYW5n
ZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250c0NoYW5nZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCisg
ICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlKCkuY2hhbmdlcygpID09IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yMDIs
MTYgKzE5OSw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAg
ICAgICAgIHJldHVybiBhcHBlbmQ8U2F2ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihpdGVtLmdl
dDxSZXN0b3JlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHJl
dHVybiBhcHBlbmQ8VHJhbnNsYXRlPihpdGVtLmdldDxUcmFuc2xhdGU+KCkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0
PFJvdGF0ZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBh
cHBlbmQ8U2NhbGU+KGl0ZW0uZ2V0PFNjYWxlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5n
ZXQ8Q29uY2F0ZW5hdGVDVE0+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTZXRDVE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1cm4gYXBwZW5kPFNldElu
bGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTIyMCwxNiArMjA3LDYgQEAgdm9p
ZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKICAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0uZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKSk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0
U3RhdGU+KGl0ZW0uZ2V0PFNldFN0YXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVDYXA+KGl0ZW0uZ2V0PFNldExpbmVD
YXA+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4g
YXBwZW5kPFNldExpbmVEYXNoPihpdGVtLmdldDxTZXRMaW5lRGFzaD4oKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZUpvaW4+
KGl0ZW0uZ2V0PFNldExpbmVKb2luPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxp
bWl0OgotICAgICAgICByZXR1cm4gYXBwZW5kPFNldE1pdGVyTGltaXQ+KGl0ZW0uZ2V0PFNldE1p
dGVyTGltaXQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPENsZWFyU2hhZG93PihpdGVtLmdldDxDbGVhclNoYWRvdz4oKSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwPihpdGVtLmdl
dDxDbGlwPigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMjc0LDggKzI1MSw2
IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9y
PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKICAgICAgICAg
cmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAg
ICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21w
b3NpdGVkUmVjdD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAg
ICAgICByZXR1cm4gYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRS
ZWN0PigpKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAppbmRleCAw
YzI1MjI2NGFmNDE2NjU2MjE3NTE2MDQxMDQyYThiZGQzYmZhYmI1Li5kZWZjZTg0ZWYzNTg3YmVh
MDZkMjA3ZGI1YjgwMmFhN2M4MjU2NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpEcmF3aW5n
Q29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCi0gICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3ND
b250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNKQor
ICAgIDogbV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXpl
KSwgaW5pdGlhbENUTSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmNwcAppbmRleCA0NTc3NTUxODliZGFkZDcxOWQyNDVhNGU2ZDJjODFiZGRiMWY3ZGYz
Li4wZGIxNTAzOTYwNDAzMmYzMzAzZmJjYjY1MjFlNTNlNGUzNGY5MThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtNTIsMjEgKzUyLDYgQEAgdm9p
ZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgZ2V0PFJlc3RvcmU+KCkuYXBwbHkoY29udGV4dCk7
CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAg
IGdldDxUcmFuc2xhdGU+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGdldDxSb3RhdGU+KCkuYXBwbHkoY29udGV4
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAg
Z2V0PFNjYWxlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGdldDxDb25jYXRlbmF0ZUNUTT4oKS5h
cHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENU
TToKLSAgICAgICAgZ2V0PFNldENUTT4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgZ2V0PFNl
dElubGluZUZpbGxDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAt
NzksMjEgKzY0LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKLSAgICAgICAgZ2V0PFNldExpbmVDYXA+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZ2V0PFNldExp
bmVEYXNoPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGdldDxTZXRMaW5lSm9pbj4oKS5hcHBseShjb250
ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6
Ci0gICAgICAgIGdldDxTZXRNaXRlckxpbWl0PigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGdldDxDbGVh
clNoYWRvdz4oKS5hcHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXA6CiAgICAgICAgIGdldDxDbGlwPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAg
ICByZXR1cm47CkBAIC0xNjAsOSArMTMwLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6CiAgICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5hcHBseShjb250ZXh0
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDoKLSAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKLSAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAg
ICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjcwLDkgKzIzNyw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgICAgIGdldDxEcmF3UGF0aD4oKS5+RHJhd1BhdGgo
KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDoKLSAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0ZWRSZWN0
KCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAgICAg
ICAgZ2V0PEZpbGxQYXRoPigpLn5GaWxsUGF0aCgpOwogICAgICAgICByZXR1cm47CkBAIC0yODgs
OSArMjUyLDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxS
b3VuZGVkUmVjdCgpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKLSAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBnZXQ8U2V0
U3RhdGU+KCkuflNldFN0YXRlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxNCw5ICsyNzUsNiBA
QCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
Q2xlYXJSZWN0Pjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6
Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPENsZWFyU2hhZG93Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8Q2xpcD46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI2LDkg
KzI4NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPENsaXBUb0ltYWdlQnVmZmVyPjo6dmFsdWUpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENvbmNhdGVuYXRlQ1RNPjo6dmFs
dWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcjoKICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj46OnZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMzg3LDMzICszNDIsMTUgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSZXN0b3JlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSb3RhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTYXZlPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNjYWxlPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRDVE0+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxDb2xv
cj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZVN0cm9rZUNvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRJbmxpbmVTdHJva2VDb2xvcj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2
YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0
OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
ZXRNaXRlckxpbWl0Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTQzNyw5ICszNzQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQog
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUxpbmU6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUxpbmU+Ojp2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZhbHVlKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIApAQCAtNTAxLDggKzQzNSw2IEBAIGJvb2wgSXRl
bUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRp
b24pIGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxEcmF3UGF0dGVybj4oaXRlbU9mZnNl
dCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICByZXR1cm4g
Y29weUludG88RHJhd1BhdGg+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxsQ29tcG9z
aXRlZFJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0
aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxQYXRoPihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CkBAIC01MTMsOCArNDQ1LDYg
QEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRs
ZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJvdW5kZWRSZWN0OgogICAgICAgICByZXR1cm4gY29weUludG88RmlsbFJvdW5kZWRSZWN0Pihp
dGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAg
ICAgIHJldHVybiBjb3B5SW50bzxTZXRMaW5lRGFzaD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0U3Rh
dGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgpA
QCAtNTMxLDE2ICs0NjEsMTIgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBp
dGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclJl
Y3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoK
LSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsZWFyU2hhZG93PihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXA+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgICAg
ICByZXR1cm4gY29weUludG88Q2xpcE91dD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgICAgICByZXR1cm4gY29weUludG88Q2xp
cFRvSW1hZ2VCdWZmZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
b25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENvbmNhdGVuYXRlQ1RNPihp
dGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToK
QEAgLTU3MywyNCArNDk5LDEyIEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUg
aXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAjZW5kaWYKICAgICBjYXNl
IEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAgICByZXR1cm4gY29weUludG88UmVzdG9yZT4oaXRl
bU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFJvdGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNhdmU6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTYXZlPihpdGVtT2Zmc2V0LCAqdGhp
cyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxT
Y2FsZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldENUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PFNldElubGluZUZpbGxDb2xvcj4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgogICAgICAgICByZXR1cm4gY29weUludG88U2V0SW5s
aW5lU3Ryb2tlQ29sb3I+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGluZUNhcD4oaXRlbU9mZnNl
dCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1
cm4gY29weUludG88U2V0TGluZUpvaW4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TWl0ZXJM
aW1pdD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRl
bU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CkBAIC02
MDcsOCArNTIxLDYgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVtVHlwZSBpdGVtVHlw
ZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PFN0cm9rZVJlY3Q+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VMaW5lOgogICAgICAgICByZXR1cm4gY29weUludG88U3Ryb2tlTGluZT4oaXRlbU9mZnNldCwg
KnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPFRyYW5zbGF0ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKaW5kZXgg
NTRlYTFjODY4MmMwNzQ0MmUyZTg0MTRiNzMyOGFhMzI0ODAyNWE3NS4uYmEwZDk1MWMyMmNmNDlj
ZTQxN2UzMzU1M2IwMGUwYTViOGFiMjA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1UeXBlLmNwcApAQCAtMzgsMTYgKzM4LDYgQEAgc3RhdGljIHNpemVfdCBzaXplT2ZJdGVt
SW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gc2l6ZW9mKFNhdmUpOwogICAg
IGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVybiBzaXplb2YoUmVzdG9yZSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFRy
YW5zbGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFJvdGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoU2NhbGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKENvbmNhdGVuYXRlQ1RNKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRD
VE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0Q1RNKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5lRmlsbENv
bG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKQEAgLTU2LDE2
ICs0Niw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkK
ICAgICAgICAgcmV0dXJuIHNpemVvZihTZXRTdHJva2VUaGlja25lc3MpOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0YXRlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0YXRlKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVD
YXApOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKFNldExpbmVEYXNoKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihTZXRMaW5lSm9pbik7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRNaXRlckxpbWl0KTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIHNpemVvZihDbGVhclNoYWRv
dyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgcmV0dXJuIHNpemVvZihDbGlw
KTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgpAQCAtMTEwLDggKzkwLDYgQEAgc3RhdGlj
IHNpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxSZWN0V2l0aENvbG9yKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudDoKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhHcmFkaWVudCk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxDb21wb3NpdGVkUmVjdCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5k
ZWRSZWN0OgogICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSb3VuZGVkUmVjdCk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CkBAIC0xODIsMjggKzE2MCwxOCBA
QCBib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseUZpbGxQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoK
ICNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgogICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKICAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgogICAgIGNhc2UgSXRlbVR5cGU6OkZsdXNoQ29udGV4dDoKICAgICBjYXNlIEl0ZW1U
eXBlOjpSZXN0b3JlOgotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKICAgICBjYXNlIEl0ZW1U
eXBlOjpTYXZlOgotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgIGNhc2UgSXRlbVR5cGU6
OlNldENUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgogICAgIGNh
c2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKQEAgLTIyMiw3ICsxOTAsNiBAQCBib29sIGlzRHJhd2lu
Z0l0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKICAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVu
Y3lMYXllcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbExpbmU6CkBAIC0yODgsMTMgKzI1NSwxMSBAQCBib29sIGlz
SW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UGF0aDoKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
Q29sb3I6CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJvdW5kZWRSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1N5c3RlbUltYWdlOgpAQCAtMzA2LDExICsyNzEsOSBAQCBi
b29sIGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlw
ZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBU
b0ltYWdlQnVmZmVyOgotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0VsbGlwc2U6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXI6CkBAIC0zMzMsMTUgKzI5Niw5IEBAIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlIHR5cGUp
CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgogI2VuZGlmCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VU
aGlja25lc3M6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKQEAgLTM1MSw3ICszMDgsNiBAQCBib29sIGlzSW5saW5lSXRlbShJ
dGVtVHlwZSB0eXBlKQogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0
ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKaW5kZXggZDY4M2IyYWNmNzg0
NWY5OWMzY2QwOTVlYjkxMWU1NGYxZjhjZTExMS4uMTY2MGI5OGZkYTVlZjI3YjNmNzVkMjJhNTc5
YTNhOWFlM2NjNzBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCkBA
IC0zMSwyMCArMzEsMTAgQEAgbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIGVudW0gY2xhc3MgSXRl
bVR5cGUgOiB1aW50OF90IHsKICAgICBTYXZlLAogICAgIFJlc3RvcmUsCi0gICAgVHJhbnNsYXRl
LAotICAgIFJvdGF0ZSwKLSAgICBTY2FsZSwKLSAgICBDb25jYXRlbmF0ZUNUTSwKLSAgICBTZXRD
VE0sCiAgICAgU2V0SW5saW5lRmlsbENvbG9yLAogICAgIFNldElubGluZVN0cm9rZUNvbG9yLAog
ICAgIFNldFN0cm9rZVRoaWNrbmVzcywKICAgICBTZXRTdGF0ZSwKLSAgICBTZXRMaW5lQ2FwLAot
ICAgIFNldExpbmVEYXNoLAotICAgIFNldExpbmVKb2luLAotICAgIFNldE1pdGVyTGltaXQsCi0g
ICAgQ2xlYXJTaGFkb3csCiAgICAgQ2xpcCwKICAgICBDbGlwT3V0LAogICAgIENsaXBUb0ltYWdl
QnVmZmVyLApAQCAtNjcsNyArNTcsNiBAQCBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7
CiAgICAgRmlsbFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgRmlsbFJlY3RXaXRo
R3JhZGllbnQsCi0gICAgRmlsbENvbXBvc2l0ZWRSZWN0LAogICAgIEZpbGxSb3VuZGVkUmVjdCwK
ICAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAyM2QwYmJjYzcxYzI4
MWM1MmMzNWE4YzI1MmRhOTZjMGFiMTJhOThjLi4zNmZhNmExMjdmZjA3OTNjZWYyMzBlZGY3YTY0
MWRkZTAyZmUzNzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC01NCw2NyArNTUsNiBAQCB2
b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBUcmFuc2xhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ4IiwgaXRlbS54KCkp
OwotICAgIHRzLmR1bXBQcm9wZXJ0eSgieSIsIGl0ZW0ueSgpKTsKLQotICAgIHJldHVybiB0czsK
LX0KLQotdm9pZCBSb3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
LXsKLSAgICBjb250ZXh0LnJvdGF0ZShtX2FuZ2xlKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKLXsKLSAgICB0
cy5kdW1wUHJvcGVydHkoImFuZ2xlIiwgaXRlbS5hbmdsZSgpKTsKLQotICAgIHJldHVybiB0czsK
LX0KLQotdm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAot
ewotICAgIGNvbnRleHQuc2NhbGUobV9zaXplKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVtKQotewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgic2l6ZSIsIGl0ZW0uYW1vdW50KCkpOwotCi0gICAgcmV0dXJuIHRzOwotfQot
Ci12b2lkIFNldENUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuc2V0Q1RNKG1fdHJhbnNmb3JtKTsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRlbSkKLXsKLSAgICB0
cy5kdW1wUHJvcGVydHkoInNldC1jdG0iLCBpdGVtLnRyYW5zZm9ybSgpKTsKLQotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKLX0K
LQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENv
bmNhdGVuYXRlQ1RNJiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3RtIiwgaXRlbS50
cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KIHZvaWQgU2V0SW5saW5lRmlsbENv
bG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoY29sb3IoKSk7CkBAIC0xNDgsNzcgKzg4LDIyIEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdHJva2VUaGlja25l
c3MmIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgOiBtX3N0YXRlQ2hhbmdlKHN0YXRlLCBmbGFncykKLXsK
LX0KLQotU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
JiBzdGF0ZUNoYW5nZSkKLSAgICA6IG1fc3RhdGVDaGFuZ2Uoc3RhdGVDaGFuZ2UpCitTZXRTdGF0
ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQorICAgIDogbV9z
dGF0ZShzdGF0ZSkKIHsKIH0KIAogdm9pZCBTZXRTdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQogewotICAgIG1fc3RhdGVDaGFuZ2UuYXBwbHkoY29udGV4dCk7CisgICAgY29u
dGV4dC5tZXJnZVN0YXRlQ2hhbmdlcyhtX3N0YXRlKTsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBzdGF0ZSkKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYg
aXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0ZS5zdGF0ZUNoYW5nZSgpOworICAgIHRzIDw8IGl0ZW0u
c3RhdGUoKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLXZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TGluZUNhcCht
X2xpbmVDYXApOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNhcCkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHko
ImxpbmUtY2FwIiwgbGluZUNhcC5saW5lQ2FwKCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9p
ZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewot
ICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7Ci19Ci0K
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRM
aW5lRGFzaCYgbGluZURhc2gpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkYXNoLWFycmF5Iiwg
bGluZURhc2guZGFzaEFycmF5KCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGFzaC1vZmZzZXQi
LCBsaW5lRGFzaC5kYXNoT2Zmc2V0KCkpOwotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRM
aW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNv
bnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCi17
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWpvaW4iLCBsaW5lSm9pbi5saW5lSm9pbigpKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21p
dGVyTGltaXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKLXsKLSAgICB0cy5kdW1wUHJv
cGVydHkoIm1pdHJlLWxpbWl0IiwgbWl0ZXJMaW1pdC5taXRlckxpbWl0KCkpOwotICAgIHJldHVy
biB0czsKLX0KLQotdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLX0KLQogdm9pZCBDbGlw
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5j
bGlwKG1fcmVjdCk7CkBAIC02NTcsMzAgKzU0MiwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0p
CiAgICAgcmV0dXJuIHRzOwogfQogCi12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAotewotICAgIGNvbnRleHQuZmlsbFJlY3QobV9y
ZWN0LCBtX2NvbG9yLCBtX29wLCBtX2JsZW5kTW9kZSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0
ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwotICAgIHRz
LmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAg
dHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7Ci0gICAgcmV0
dXJuIHRzOwotfQotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwg
bV9jb2xvciwgbV9ibGVuZE1vZGUpOworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVj
dCwgbV9jb2xvcik7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUm91bmRlZFJlY3QmIGl0ZW0pCiB7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yb3VuZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNv
bG9yIiwgaXRlbS5jb2xvcigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBp
dGVtLmJsZW5kTW9kZSgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTc2OCw4ICs2MzgsOCBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmls
bEVsbGlwc2UmIGl0ZW0pCiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1QYWludEZyYW1lRm9yTWVk
aWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKQotICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkp
CitQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50
aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKKyAgICA6IG1f
aWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikK
IHsKIH0KQEAgLTEwMTEsMTkgKzg4MSwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5cGUgdHlwZSkKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6IHRzIDw8ICJyZXN0b3JlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOiB0cyA8PCAidHJhbnNsYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOiB0cyA8PCAicm90YXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2Nh
bGU6IHRzIDw8ICJzY2FsZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogdHMg
PDwgInNldC1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTog
dHMgPDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsQ29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLWZpbGwtY29sb3IiOyBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogdHMgPDwgInNldC1pbmxpbmUt
c3Ryb2tlLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tu
ZXNzOiB0cyA8PCAic2V0LXN0cm9rZS10aGlja25lc3MiOyBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdGF0ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVDYXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogdHMgPDwgInNldC1saW5lLWpvaW4iOyBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB0cyA8PCAic2V0LW1pdGVyLWxpbWl0
IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogdHMgPDwgImNsaXAiOyBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB0cyA8PCAiY2xpcC1vdXQiOyBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjogdHMgPDwgImNsaXAtdG8taW1hZ2Ut
YnVmZmVyIjsgYnJlYWs7CkBAIC0xMDQ2LDcgKzkwNyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0OiB0cyA8PCAiZmlsbC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHRzIDw8ICJmaWxsLXJlY3Qtd2l0aC1jb2xvciI7IGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB0cyA8PCAiZmlsbC1y
ZWN0LXdpdGgtZ3JhZGllbnQiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6IHRzIDw8ICJmaWxsLWNvbXBvc2l0ZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogdHMgPDwgImZpbGwtcm91bmRlZC1yZWN0IjsgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHRzIDw8ICJm
aWxsLXJlY3Qtd2l0aC1yb3VuZGVkLWhvbGUiOyBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKQEAgLTEwNzgsNyArOTM4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjogdHMgPDwgImFwcGx5LWZpbGwtcGF0dGVybiI7IGJyZWFrOwogI2VuZGlm
CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogdHMgPDwgImFwcGx5
LWRldmljZS1zY2FsZS1mYWN0b3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzogdHMgPDwgImNsZWFyLXNoYWRvdyI7IGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gdHM7
CiB9CkBAIC0xMDg4LDIxICs5NDcsNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKICAgICBz
d2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAg
ICAgICB0cyA8PCBpdGVtLmdldDxUcmFuc2xhdGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Um90YXRlPigpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8U2NhbGU+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dENUTToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8Q29uY2F0ZW5hdGVDVE0+KCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxDb2xvcjoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmls
bENvbG9yPigpOwogICAgICAgICBicmVhazsKQEAgLTExMTUsMTggKzk1OSw2IEBAIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3RhdGU+KCk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVDYXA+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lRGFz
aD4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0g
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVKb2luPigpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBpdGVtLmdldDxT
ZXRNaXRlckxpbWl0PigpOwotICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
OgogICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwPigpOwogICAgICAgICBicmVhazsKQEAgLTEx
OTMsOSArMTAyNSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0
ZW1IYW5kbGUgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoK
ICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpOwotICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PEZpbGxSb3VuZGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjcxLDcgKzExMDAsNiBA
QCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0p
CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgogICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RmlsbFBhdHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNo
YWRvdzoKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0czsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IDk3Y2I1ZmM4ZDA0YmE4NjYyYjcyYzdkZGVlYmM0NDE1
NWMyODI1YjcuLmU4MWJiMzQ2YzllZmViZTk2YTY1MGQ3NTQ1YTgxZjYxNmI3ZDZhOWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtODUsMTA0ICs4NSw2IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
fTsKIAotY2xhc3MgVHJhbnNsYXRlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlRyYW5zbGF0ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Ci0gICAgICAgIDogbV94KHgpCi0gICAgICAgICwgbV95KHkpCi0gICAgewotICAgIH0KLQotICAg
IGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiBtX3g7IH0KLSAgICBmbG9hdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV95OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1feCB7IDAgfTsKLSAgICBmbG9h
dCBtX3kgeyAwIH07Ci19OwotCi1jbGFzcyBSb3RhdGUgewotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90YXRlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBSb3RhdGUoZmxvYXQgYW5nbGUp
Ci0gICAgICAgIDogbV9hbmdsZShhbmdsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgZmxvYXQgYW5n
bGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1f
YW5nbGUgeyAwIH07IC8vIEluIHJhZGlhbnMuCi19OwotCi1jbGFzcyBTY2FsZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTY2Fs
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBGbG9hdFNpemUgbV9zaXplOwotfTsKLQotY2xhc3MgU2V0
Q1RNIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OlNldENUTTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwotCi0gICAgU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAg
ICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCi1jbGFz
cyBDb25jYXRlbmF0ZUNUTSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKLX07Ci0KIGNsYXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I7CkBAIC0yNDcsMTAgKzE0OSw4IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFNl
dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmIHN0YXRlQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZUNoYW5nZTsgfQotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIHsgcmV0dXJuIG1fc3RhdGVD
aGFuZ2U7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBTZXRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYpOworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKQEAg
LTI1OCw0MDQgKzE1OCwyNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKTsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UgbV9zdGF0ZUNoYW5nZTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZSBtX3N0YXRlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgU2V0U3RhdGU6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGF1dG8gY2hhbmdlRmxhZ3Mg
PSBtX3N0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3M7Ci0gICAgZW5jb2RlciA8PCBjaGFuZ2VGbGFn
czsKLQotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZUNoYW5nZS5tX3N0YXRlOwotCi0gICAgaWYg
KGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVu
dENoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0cm9rZUdyYWRpZW50KTsKLSAgICAg
ICAgZW5jb2RlciA8PCAqc3RhdGUuc3Ryb2tlR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNo
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0gICAgICAgIGVu
Y29kZXIgPDwgKnN0YXRlLnN0cm9rZVBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7
Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5maWxsR3JhZGllbnQpOwotICAgICAgICBlbmNvZGVyIDw8
ICpzdGF0ZS5maWxsR3JhZGllbnQ7Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAg
QVNTRVJUKHN0YXRlLmZpbGxQYXR0ZXJuKTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuZmls
bFBhdHRlcm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
c2hhZG93T2Zmc2V0OwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0JsdXI7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Q29sb3I7Ci0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuc2hhZG93UmFkaXVzTW9kZTsKLSAgICB9Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2Up
KQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZUNvbG9yOwotCi0gICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmZpbGxDb2xvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpKQotICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZVN0eWxlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSkpCi0gICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuZmlsbFJ1bGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkpCi0gICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSkpCi0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYmxlbmRNb2RlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpBbHBoYUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYWxwaGE7Ci0KLSAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlh
bGlhc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkQW50aWFsaWFzOwot
Ci0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hvdWxkU21v
b3RoRm9udHM7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIGVuY29k
ZXIgPDwgc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtc0NoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7CisgICAgZW5jb2RlciA8PCBtX3N0YXRlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgogc3RkOjpvcHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewotICAgIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOwotICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7Ci0g
ICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiBzdGF0ZTsKKyAgICBkZWNvZGVyID4+IHN0YXRlOworICAgIGlmICghc3RhdGUpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSBzdGF0ZUNoYW5nZTsKLSAgICBzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzID0gKmNoYW5nZUZs
YWdzOwotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBhdXRvIHN0
cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFz
dHJva2VHcmFkaWVudCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoKnN0cm9rZUdy
YWRpZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsKLSAgICAg
ICAgYXV0byBzdHJva2VQYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAg
ICBpZiAoIXN0cm9rZVBhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUoKnN0
cm9rZVBhdHRlcm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKSB7Ci0g
ICAgICAgIGF1dG8gZmlsbEdyYWRpZW50ID0gR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKTsKLSAg
ICAgICAgaWYgKCFmaWxsR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZSgq
ZmlsbEdyYWRpZW50KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKSB7Ci0g
ICAgICAgIGF1dG8gZmlsbFBhdHRlcm4gPSBQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAg
ICAgIGlmICghZmlsbFBhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
Ci0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKCpmaWxs
UGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgc3Rk
OjpvcHRpb25hbDxGbG9hdFNpemU+IHNoYWRvd09mZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBz
aGFkb3dPZmZzZXQ7Ci0gICAgICAgIGlmICghc2hhZG93T2Zmc2V0KQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd09m
ZnNldCA9ICpzaGFkb3dPZmZzZXQ7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gc2hh
ZG93Qmx1cjsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dCbHVyOwotICAgICAgICBpZiAoIXNo
YWRvd0JsdXIpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93Qmx1ciA9ICpzaGFkb3dCbHVyOwotCi0gICAgICAgIHN0
ZDo6b3B0aW9uYWw8Q29sb3I+IHNoYWRvd0NvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRv
d0NvbG9yOwotICAgICAgICBpZiAoIXNoYWRvd0NvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0NvbG9yID0g
KnNoYWRvd0NvbG9yOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4g
c2hhZG93UmFkaXVzTW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dSYWRpdXNNb2RlOwot
ICAgICAgICBpZiAoIXNoYWRvd1JhZGl1c01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9
IFdURk1vdmUoKnNoYWRvd1JhZGl1c01vZGUpOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHN0cm9rZVRoaWNr
bmVzczsKLSAgICAgICAgZGVjb2RlciA+PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGlmICgh
c3Ryb2tlVGhpY2tuZXNzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
ICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9ICpzdHJva2VUaGlja25l
c3M7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpIHsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDxUZXh0RHJhd2luZ01vZGVGbGFncz4gdGV4dERyYXdpbmdNb2RlOwotICAg
ICAgICBkZWNvZGVyID4+IHRleHREcmF3aW5nTW9kZTsKLSAgICAgICAgaWYgKCF0ZXh0RHJhd2lu
Z01vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRl
Q2hhbmdlLm1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gV1RGTW92ZSgqdGV4dERyYXdpbmdNb2Rl
KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6
b3B0aW9uYWw8Q29sb3I+IHN0cm9rZUNvbG9yOwotICAgICAgICBkZWNvZGVyID4+IHN0cm9rZUNv
bG9yOwotICAgICAgICBpZiAoIXN0cm9rZUNvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZUNvbG9yID0gKnN0
cm9rZUNvbG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKSB7Ci0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGZpbGxDb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBmaWxs
Q29sb3I7Ci0gICAgICAgIGlmICghZmlsbENvbG9yKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZpbGxDb2xvciA9ICpmaWxs
Q29sb3I7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkgewotICAgICAgICBT
dHJva2VTdHlsZSBzdHJva2VTdHlsZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdHJv
a2VTdHlsZSkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8V2luZFJ1bGU+
IGZpbGxSdWxlOwotICAgICAgICBkZWNvZGVyID4+IGZpbGxSdWxlOwotICAgICAgICBpZiAoIWZp
bGxSdWxlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLmZpbGxSdWxlID0gKmZpbGxSdWxlOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29tcG9z
aXRlT3BlcmF0b3I+IGNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBkZWNvZGVyID4+IGNvbXBv
c2l0ZU9wZXJhdG9yOwotICAgICAgICBpZiAoIWNvbXBvc2l0ZU9wZXJhdG9yKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yID0gKmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVu
ZE1vZGU7Ci0gICAgICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOwotICAgICAgICBpZiAoIWJsZW5k
TW9kZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5ibGVuZE1vZGUgPSAqYmxlbmRNb2RlOwotICAgIH0KLQotICAgIGlmIChz
dGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFs
PEludGVycG9sYXRpb25RdWFsaXR5PiBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotICAgICAg
ICBkZWNvZGVyID4+IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgICAgIGlmICghaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
ID0gKmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hh
bmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBhbHBoYTsKLSAgICAgICAgZGVj
b2RlciA+PiBhbHBoYTsKLSAgICAgICAgaWYgKCFhbHBoYSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5hbHBoYSA9ICphbHBo
YTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkgewotICAgICAgICBz
dGQ6Om9wdGlvbmFsPGJvb2w+IHNob3VsZEFudGlhbGlhczsKLSAgICAgICAgZGVjb2RlciA+PiBz
aG91bGRBbnRpYWxpYXM7Ci0gICAgICAgIGlmICghc2hvdWxkQW50aWFsaWFzKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNo
b3VsZEFudGlhbGlhcyA9ICpzaG91bGRBbnRpYWxpYXM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFNtb290aEZvbnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHNob3Vs
ZFNtb290aEZvbnRzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFNtb290aEZvbnRzOwotICAg
ICAgICBpZiAoIXNob3VsZFNtb290aEZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0g
KnNob3VsZFNtb290aEZvbnRzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHNDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgICAgICBkZWNvZGVyID4+IHNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsKLSAgICAgICAgaWYgKCFzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1f
c3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gKnNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250czsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2Up
KSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7
Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgICAgIGlm
ICghc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMgPSAqc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgeyBz
dGF0ZUNoYW5nZSB9IH07Ci19Ci0KLWNsYXNzIFNldExpbmVDYXAgewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUNhcDsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0gICAgU2V0TGluZUNh
cChMaW5lQ2FwIGxpbmVDYXApCi0gICAgICAgIDogbV9saW5lQ2FwKGxpbmVDYXApCi0gICAgewot
ICAgIH0KLQotICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNhcDsg
fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKLQotcHJpdmF0ZToKLSAgICBMaW5lQ2FwIG1fbGluZUNhcDsKLX07Ci0KLWNsYXNzIFNldExp
bmVEYXNoIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNldExpbmVEYXNoOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IGZhbHNlOwotCi0gICAgU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXks
IGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgICAgIDogbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAg
ICAgICAsIG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25z
dCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9Ci0g
ICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxTZXRMaW5l
RGFzaD4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBEYXNoQXJyYXkgbV9kYXNo
QXJyYXk7Ci0gICAgZmxvYXQgbV9kYXNoT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ewotICAgIGVuY29kZXIgPDwgbV9kYXNoQXJyYXk7Ci0gICAgZW5jb2RlciA8PCBtX2Rhc2hPZmZz
ZXQ7CisgICAgcmV0dXJuIFNldFN0YXRlKCpzdGF0ZSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1zdGQ6Om9wdGlvbmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJh
eTsKLSAgICBkZWNvZGVyID4+IGRhc2hBcnJheTsKLSAgICBpZiAoIWRhc2hBcnJheSkKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGRhc2hP
ZmZzZXQ7Ci0gICAgZGVjb2RlciA+PiBkYXNoT2Zmc2V0OwotICAgIGlmICghZGFzaE9mZnNldCkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqZGFzaEFycmF5
LCAqZGFzaE9mZnNldCB9fTsKLX0KLQotY2xhc3MgU2V0TGluZUpvaW4gewotcHVibGljOgotICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUpv
aW47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExp
bmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotICAgICAgICA6IG1fbGluZUpvaW4obGluZUpvaW4p
Ci0gICAgewotICAgIH0KLQotICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lSm9pbjsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMaW5lSm9pbiBtX2xpbmVKb2luOwotfTsK
LQotY2xhc3MgU2V0TWl0ZXJMaW1pdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1p
dGVyTGltaXQpCi0gICAgICAgIDogbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi0gICAgewotICAg
IH0KLQotICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgbV9taXRlckxpbWl0OwotfTsKLQotY2xhc3MgQ2xl
YXJTaGFkb3cgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci19OwotCiAvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2luZyBpdGVtPwogY2xh
c3MgQ2xpcCB7CiBwdWJsaWM6CkBAIC0xNjEyLDkxICsxMTM0LDIwIEBAIHN0ZDo6b3B0aW9uYWw8
RmlsbFJlY3RXaXRoR3JhZGllbnQ+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlCiAgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0KCkgfX07CiB9CiAK
LWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKLQotICAgIEZpbGxDb21wb3NpdGVk
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgICAgIDogbV9yZWN0KHJlY3Qp
Ci0gICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAgICAgLCBtX29wKG9wKQotICAgICAgICAs
IG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgc3RkOjpvcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQot
ICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBDb2xvciBt
X2NvbG9yOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7Ci0gICAgQmxlbmRNb2RlIG1fYmxl
bmRNb2RlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbENvbXBvc2l0
ZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8
IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fY29sb3I7Ci0gICAgZW5jb2RlciA8PCBtX29wOwot
ICAgIGVuY29kZXIgPDwgbV9ibGVuZE1vZGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1zdGQ6Om9wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gRmlsbENvbXBvc2l0ZWRSZWN0Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxDb2xvcj4gY29sb3I7Ci0gICAg
ZGVjb2RlciA+PiBjb2xvcjsKLSAgICBpZiAoIWNvbG9yKQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxDb21wb3NpdGVPcGVyYXRvcj4gb3A7Ci0gICAg
ZGVjb2RlciA+PiBvcDsKLSAgICBpZiAoIW9wKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotCi0gICAgc3RkOjpvcHRpb25hbDxCbGVuZE1vZGU+IGJsZW5kTW9kZTsKLSAgICBkZWNvZGVy
ID4+IGJsZW5kTW9kZTsKLSAgICBpZiAoIWJsZW5kTW9kZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUg
fX07Ci19Ci0KIGNsYXNzIEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIEZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCisgICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgOiBtX3JlY3QocmVjdCkK
ICAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9k
ZSkKICAgICB7CiAgICAgfQogCiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIHN0ZDo6b3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwpA
QCAtMTcwOSw3ICsxMTYwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRS
ZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9k
ZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xNzE3LDcgKzExNjcsNiBAQCB2
b2lkIEZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAg
ICAgZW5jb2RlciA8PCBtX3JlY3Q7CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yOwotICAgIGVuY29k
ZXIgPDwgbV9ibGVuZE1vZGU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0xNzMz
LDEyICsxMTgyLDcgQEAgc3RkOjpvcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IEZpbGxSb3VuZGVk
UmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2RlPiBibGVu
ZE1vZGU7Ci0gICAgZGVjb2RlciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1vZGUpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xv
ciwgKmJsZW5kTW9kZSB9fTsKKyAgICByZXR1cm4geyB7ICpyZWN0LCAqY29sb3IgfSB9OwogfQog
CiBjbGFzcyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSB7CkBAIC0xOTYxLDcgKzE0MDUsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgUGFp
bnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bik7CisgICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRl
bnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CkBAIC0y
MjU2LDEzICsxNzAwLDExIEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6dmFyaWFudAog
ICAgIDwgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcgogICAgICwgQmVnaW5UcmFuc3BhcmVuY3lMYXll
cgogICAgICwgQ2xlYXJSZWN0Ci0gICAgLCBDbGVhclNoYWRvdwogICAgICwgQ2xpcAogICAgICwg
Q2xpcE91dAogICAgICwgQ2xpcE91dFRvUGF0aAogICAgICwgQ2xpcFBhdGgKICAgICAsIENsaXBU
b0ltYWdlQnVmZmVyCi0gICAgLCBDb25jYXRlbmF0ZUNUTQogICAgICwgRHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcgogICAgICwgRHJhd0VsbGlwc2UKICAgICAsIERyYXdGaWx0ZXJlZEltYWdlQnVm
ZmVyCkBAIC0yMjc4LDcgKzE3MjAsNiBAQCB1c2luZyBEaXNwbGF5TGlzdEl0ZW0gPSBzdGQ6OnZh
cmlhbnQKICAgICAsIERyYXdSZWN0CiAgICAgLCBEcmF3U3lzdGVtSW1hZ2UKICAgICAsIEVuZFRy
YW5zcGFyZW5jeUxheWVyCi0gICAgLCBGaWxsQ29tcG9zaXRlZFJlY3QKICAgICAsIEZpbGxFbGxp
cHNlCiAgICAgLCBGaWxsUGF0aAogICAgICwgRmlsbFJlY3QKQEAgLTIyODgsMjMgKzE3MjksMTUg
QEAgdXNpbmcgRGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgLCBGaWxsUm91bmRl
ZFJlY3QKICAgICAsIEZsdXNoQ29udGV4dAogICAgICwgUmVzdG9yZQotICAgICwgUm90YXRlCiAg
ICAgLCBTYXZlCi0gICAgLCBTY2FsZQotICAgICwgU2V0Q1RNCiAgICAgLCBTZXRJbmxpbmVGaWxs
Q29sb3IKICAgICAsIFNldElubGluZVN0cm9rZUNvbG9yCi0gICAgLCBTZXRMaW5lQ2FwCi0gICAg
LCBTZXRMaW5lRGFzaAotICAgICwgU2V0TGluZUpvaW4KLSAgICAsIFNldE1pdGVyTGltaXQKICAg
ICAsIFNldFN0YXRlCiAgICAgLCBTZXRTdHJva2VUaGlja25lc3MKICAgICAsIFN0cm9rZUVsbGlw
c2UKICAgICAsIFN0cm9rZUxpbmUKICAgICAsIFN0cm9rZVBhdGgKICAgICAsIFN0cm9rZVJlY3QK
LSAgICAsIFRyYW5zbGF0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgLCBG
aWxsTGluZQpAQCAtMjM0MSwyMCArMTc3NCwxMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNh
dmUsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlLAotICAgIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlLAotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2NhbGUsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRD
VE0sCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvciwK
ICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNz
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGUsCi0gICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwLAotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZURhc2gsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbiwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldE1pdGVyTGltaXQsCi0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpDbGVhclNoYWRvdywKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXAs
CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0LAogICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXIsCkBAIC0yMzc2LDcg
KzE3OTksNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFJlY3QsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdy
YWRpZW50LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0
ZWRSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRS
ZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUsCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggZWVlNDQ3MWQzNTRlNzUxNTMxMjUxODlkZmNj
OTQxOGEzOTQ1MTRhMS4uYTUzNTA5OTgwYTkzMTQwN2U5MWU1NGY5ZjkyMzI1Y2U1ZTVkMDVkYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNDIsMzUwICs0
MiwxODkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAK
LVJlY29yZGVyOjpSZWNvcmRlcihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlh
bENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1
Y3REcmF3R2x5cGhzKQotICAgIDogbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3Ry
dWN0RHJhd0dseXBocykKLXsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUsIGluaXRp
YWxDVE0sIGluaXRpYWxDVE0ubWFwUmVjdChpbml0aWFsQ2xpcCkgfSk7Ci19CitSZWNvcmRlcjo6
UmVjb3JkZXIoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBo
cyBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBHcmFwaGljc0NvbnRleHQoaW5pdGlhbENs
aXAsIHsgfSwgIGluaXRpYWxDVE0pCisgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywg
ZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogCi1SZWNvcmRlcjo6flJlY29yZGVyKCkKIHsKLSAgICBB
U1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAxKTsgLy8gSWYgdGhpcyBmaXJlcywgaXQgaW5k
aWNhdGVzIG1pc21hdGNoZWQgc2F2ZS9yZXN0b3JlLgogfQogCi1zdGF0aWMgYm9vbCBjb250YWlu
c09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
IGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZs
YWdzKQotewotICAgIHN0YXRpYyBjb25zdGV4cHIgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgaW5saW5lU3RhdGVDaGFuZ2VGbGFncyB7Ci0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSwKLSAgICB9OwotCi0gICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFu
Z2VGbGFncyAmIGlubGluZVN0YXRlQ2hhbmdlRmxhZ3MpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFz
U1JHQkFCeXRlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7CitSZWNvcmRlcjo6flJlY29yZGVy
KCkgPSBkZWZhdWx0OwogCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9y
LnRyeUdldEFzU1JHQkFCeXRlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKK3ZvaWQgUmVjb3JkZXI6OnNhdmUoKQog
ewotICAgIGlmICghY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNoYW5nZXMsIGNoYW5n
ZUZsYWdzKSkgewotICAgICAgICBpZiAoYXV0byBwYXR0ZXJuID0gY2hhbmdlcy5tX3N0YXRlLnN0
cm9rZVBhdHRlcm4pCi0gICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxl
SW1hZ2UoKSk7Ci0gICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBjaGFuZ2VzLm1fc3RhdGUuZmls
bFBhdHRlcm4pCi0gICAgICAgICAgICByZWNvcmRSZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1h
Z2UoKSk7Ci0gICAgICAgIHJlY29yZFNldFN0YXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxh
Z3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIHJl
Y29yZFNldElubGluZVN0cm9rZUNvbG9yKCpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5
R2V0QXNTUkdCQUJ5dGVzKCkpOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICByZWNvcmRT
ZXRTdHJva2VUaGlja25lc3MoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAg
ICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xv
ckNoYW5nZSkpCi0gICAgICAgIHJlY29yZFNldElubGluZUZpbGxDb2xvcigqY2hhbmdlcy5tX3N0
YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpzYXZlKCk7CisgICAgcmVjb3JkU2F2ZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjphcHBlbmRT
dGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpCit2b2lkIFJlY29yZGVyOjpyZXN0b3JlKCkKIHsK
LSAgICAvLyBGSVhNRTogVGhpcyBpcyBjdXJyZW50bHkgaW52b2tlZCBpbiBhbiBhZC1ob2MgbWFu
bmVyIHdoZW4gcmVjb3JkaW5nIGRyYXdpbmcgaXRlbXMuIFdlIHNob3VsZCBjb25zaWRlciBlaXRo
ZXIKLSAgICAvLyBzcGxpdHRpbmcgR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5nZXMgaW50byBp
bmRpdmlkdWFsIGRpc3BsYXkgbGlzdCBpdGVtcywgb3IgcmVmYWN0b3JpbmcgdGhlIGNvZGUgc3Vj
aCB0aGF0Ci0gICAgLy8gdGhpcyBtZXRob2QgaXMgYXV0b21hdGljYWxseSBpbnZva2VkIHdoZW4g
cmVjb3JkaW5nIGEgZHJhd2luZyBpdGVtLgotICAgIGF1dG8mIHN0YXRlQ2hhbmdlcyA9IGN1cnJl
bnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOwotICAgIGF1dG8gY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBz
dGF0ZUNoYW5nZXMuY2hhbmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0
YXRlKTsKLSAgICBpZiAoIWNoYW5nZXNGcm9tTGFzdFN0YXRlKQorICAgIGlmICghc3RhY2tTaXpl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMs
IHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkp
OwotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShzdGF0ZUNoYW5nZXMsIGNoYW5nZXNGcm9tTGFz
dFN0YXRlKTsKLSAgICBzdGF0ZUNoYW5nZXMubV9jaGFuZ2VGbGFncyA9IHsgfTsKLSAgICBjdXJy
ZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRlID0gc3RhdGVDaGFuZ2VzLm1fc3RhdGU7Ci19Ci0K
LWNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBSZWNvcmRlcjo6c3RhdGUoKSBjb25zdAotewot
ICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5tX3N0YXRlOwotfQotCi12b2lk
IFJlY29yZGVyOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAg
IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlLmFjY3VtdWxhdGUoc3RhdGUsIGZsYWdzKTsKLX0K
LQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgcmVj
b3JkU2V0TGluZUNhcChsaW5lQ2FwKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgcmVj
b3JkU2V0TGluZURhc2goZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgcmVjb3JkU2V0TGluZUpv
aW4obGluZUpvaW4pOwotfQotCi12b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1p
dGVyTGltaXQpCi17Ci0gICAgcmVjb3JkU2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0KTsKKyAgICBH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKKyAgICByZWNvcmRSZXN0b3JlKCk7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBG
aWx0ZXJSZXN1bHRzJiByZXN1bHRzKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdGF0ZUNoYW5nZXMo
KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBmb3Ig
KGF1dG8mIGVmZmVjdCA6IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVJbWFnZSkpIHsKLSAgICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVm
ZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3Vy
Y2VJbWFnZSgpKSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFzb3Vy
Y2VJbWFnZSkgewotICAgICAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihudWxscHRy
LCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7CisgICAgaWYgKCFzdGF0ZSgpLmNoYW5nZXMoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoKnNv
dXJjZUltYWdlKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdl
QnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlciwgcmVzdWx0cyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZl
cihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQogCi12b2lkIFJlY29y
ZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQotewotICAgIG1fZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9u
dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2Rl
KTsKLX0KKyAgICBpZiAoc3RhdGUoKS5oYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpKSB7CisgICAg
ICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpGaWxsQnJ1c2gpKQorICAgICAgICAgICAgcmVjb3JkU2V0SW5saW5lRmlsbENvbG9y
KCpmaWxsQ29sb3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSk7CiAKLXZvaWQgUmVjb3JkZXI6OmRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7Ci0gICAg
cmVjb3JkRHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNo
b3IsIHNtb290aGluZ01vZGUpOwotfQorICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlQnJ1c2gpKQorICAgICAg
ICAgICAgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3IoKnN0cm9rZUNvbG9yKCkudHJ5R2V0QXNT
UkdCQUJ5dGVzKCkpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIGlmIChzdGF0ZSgp
LmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VU
aGlja25lc3MpKQorICAgICAgICAgICAgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRo
aWNrbmVzcygpKTsKIAotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZWNvcmREcmF3SW1hZ2VCdWZmZXIo
aW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNv
cmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVzZShp
bWFnZSk7Ci0gICAgcmVjb3JkRHJhd05hdGl2ZUltYWdlKGltYWdlLnJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcigpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0K
LQotdm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgcmVjb3JkRHJhd1N5
c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOwotfQotCi12b2lkIFJlY29y
ZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRSZXNvdXJjZVVz
ZShpbWFnZSk7Ci0gICAgcmVjb3JkRHJhd1BhdHRlcm4oaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLQotICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VC
dWZmZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VCdWZm
ZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVzaCkpIHsKKyAgICAg
ICAgaWYgKGF1dG8gcGF0dGVybiA9IGZpbGxQYXR0ZXJuKCkpCisgICAgICAgICAgICByZWNvcmRS
ZXNvdXJjZVVzZShwYXR0ZXJuLT50aWxlSW1hZ2UoKSk7CiAgICAgfQogCi0gICAgcmVjb3JkRHJh
d1BhdHRlcm4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RS
ZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwotfQotCi12b2lkIFJlY29yZGVyOjpzYXZlKCkKLXsKLSAgICByZWNvcmRTYXZlKCk7Ci0gICAg
bV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsK
LX0KLQotdm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCi17Ci0gICAgaWYgKCFtX3N0YXRlU3RhY2su
c2l6ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUJydXNoKSkgeworICAgICAg
ICBpZiAoYXV0byBwYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpKQorICAgICAgICAgICAgcmVjb3Jk
UmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOworICAgIH0KIAotICAgIG1fc3RhdGVT
dGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgcmVjb3JkUmVzdG9yZSgpOworICAgIHJlY29yZFNldFN0
YXRlKHN0YXRlKCkpOworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIGN1cnJlbnRTdGF0ZSgp
LnRyYW5zbGF0ZSh4LCB5KTsKLSAgICByZWNvcmRUcmFuc2xhdGUoeCwgeSk7Ci19Ci0KLXZvaWQg
UmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKKyNpZiBVU0UoQ0cpCit2b2lk
IFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGN1cnJlbnRTdGF0ZSgpLnJv
dGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgcmVjb3JkUm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigp
OwogfQogCi12b2lkIFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lk
IFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5zY2Fs
ZShzaXplKTsKLSAgICByZWNvcmRTY2FsZShzaXplKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKIH0KKyNlbmRpZgogCi12b2lkIFJlY29y
ZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIFJl
Y29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQog
ewotICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQotICAgICAgICByZXR1cm47CisgICAg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKIAotICAgIGN1cnJlbnRTdGF0ZSgpLmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29y
ZENvbmNhdGVuYXRlQ1RNKHRyYW5zZm9ybSk7CisgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0
aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVu
dHMuCisgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KKyAgICBy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9p
ZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAg
IGN1cnJlbnRTdGF0ZSgpLnNldENUTSh0cmFuc2Zvcm0pOwotICAgIHJlY29yZFNldENUTSh0cmFu
c2Zvcm0pOwotfQorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAKLUFmZmluZVRyYW5zZm9ybSBS
ZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07Ci19CisgICAgR3JhcGhpY3NDb250
ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgIEdyYXBoaWNzQ29udGV4
dDo6c2F2ZSgpOwogCi12b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAg
ICBzZXRBbHBoYShvcGFjaXR5KTsKICAgICByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpOwotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9u
ZUZvclRyYW5zcGFyZW5jeUxheWVyKCkpOwogfQogCiB2b2lkIFJlY29yZGVyOjplbmRUcmFuc3Bh
cmVuY3lMYXllcigpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsK
LSAgICByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIG1fc3RhdGVTdGFjay5yZW1v
dmVMYXN0KCk7Ci19CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotdm9pZCBSZWNvcmRlcjo6
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3
UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotfQotCi12b2lkIFJlY29yZGVyOjpkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsK
LSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdM
aW5lKHBvaW50MSwgcG9pbnQyKTsKLX0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKLXZvaWQgUmVj
b3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChGbG9hdFBvaW50KCksIHRvRmxv
YXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7
CisgICAgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAg
ICByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKKyAgICBy
ZWNvcmRDbGlwKHJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZERyYXdFbGxpcHNlKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7Cisg
ICAgcmVjb3JkQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKLSAgICByZWNvcmREcmF3UGF0aChwYXRoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJlY29yZENsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0Zv
Y3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKIH0KIAotdm9pZCBSZWNv
cmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6
OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZz
ZXQsIGNvbG9yKTsKLX0KKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkg
eworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVy
LCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0jaWYgUExBVEZP
Uk0oTUFDKQotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91Ymxl
LCBib29sJiwgY29uc3QgQ29sb3ImKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXBw
bHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZl
ciwgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKK3Zv
aWQgUmVjb3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsZWFy
UmVjdChyZWN0KTsKIH0KLSNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nhcnko
KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0KHJlY3QpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgp
OworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3Io
cmVjdCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CiAgICAgcmVjb3JkRmls
bFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVyOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIFJlY29yZGVyOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkRmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xv
cik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2
b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAg
cmVjb3JkRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOworICAgIGFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwg
cm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFu
Z2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShy
ZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwor
ICAgIHJlY29yZEZpbGxFbGxpcHNlKHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNz
YXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYgKHBhdGgu
aGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQwMiwyMSArMjQxLDIxIEBAIHZvaWQgUmVj
b3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcmVjb3JkRmlsbFBhdGgocGF0
aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3Nh
cnkoKTsKLSAgICByZWNvcmRGaWxsRWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIHJlY29yZFN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKK3ZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVj
b3JkU3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkU3Ryb2tlRWxsaXBzZShyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ry
b2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlm
TmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKICAgICAgICAgaWYg
KHBhdGguaGFzSW5saW5lRGF0YTxMaW5lRGF0YT4oKSkKQEAgLTQzMywxNDggKzI3MiwxNjggQEAg
dm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHJlY29yZFN0
cm9rZVBhdGgocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJ
dGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRTdHJva2VFbGxpcHNlKHJlY3QpOworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tu
ZXNzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkQ2xlYXJSZWN0KHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmVjb3JkRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwogfQogCi0jaWYgVVNF
KENHKQotdm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNo
YW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpOwor
ICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0VsbGlwc2UocmVjdCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBSZWNvcmRlcjo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5l
Y2Vzc2FyeSgpOwotICAgIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIHJlY29yZERyYXdQYXRoKHBhdGgpOwogfQotI2VuZGlmCiAKLXZvaWQg
UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRl
cnNlY3QoY3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocmVjdCkpOwotICAgIHJlY29yZENsaXAo
cmVjdCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3Rm9jdXNSaW5n
UGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNs
aXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICByZWNvcmRDbGlwT3V0KHJlY3QpOworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3Rz
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29u
c3QgUGF0aCYgcGF0aCkKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAg
cmVjb3JkQ2xpcE91dFRvUGF0aChwYXRoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12
b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVs
ZSkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCiB7Ci0gICAgY3VycmVudFN0YXRlKCkuY2xp
cEJvdW5kcy5pbnRlcnNlY3QoY3VycmVudFN0YXRlKCkuY3RtLm1hcFJlY3QocGF0aC5mYXN0Qm91
bmRpbmdSZWN0KCkpKTsKLSAgICByZWNvcmRDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KKyNlbmRpZgogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91
bmRzKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYg
KGF1dG8gaW52ZXJzZSA9IGN1cnJlbnRTdGF0ZSgpLmN0bS5pbnZlcnNlKCkpCi0gICAgICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KGludmVyc2UtPm1hcFJlY3QoY3VycmVudFN0YXRlKCkuY2xp
cEJvdW5kcykpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIpKSB7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAv
LyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlY3Qu
Ci0gICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9ybSBi
ZWhhdmlvci4KLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUoKS5jbGlw
Qm91bmRzKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdJbWFnZUJ1
ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi12b2lk
IFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKIHsKLSAg
ICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcik7Ci0gICAgcmVjb3JkQ2xpcFRvSW1hZ2VC
dWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0KTsKLX0KKyAgICBmb3IgKGF1dG8mIGVmZmVjdCA6
IGZpbHRlci5lZmZlY3RzT2ZUeXBlKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkpIHsKKyAg
ICAgICAgYXV0byYgZmVJbWFnZSA9IGRvd25jYXN0PEZFSW1hZ2U+KGVmZmVjdC5nZXQoKSk7Cisg
ICAgICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoZmVJbWFnZS5zb3VyY2VJbWFnZSgpKSkgewor
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3Vy
Y2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IFJlY29yZGVy
OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01vZGU+IHJlbmRlcmluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8UmVuZGVy
aW5nTWV0aG9kPiByZW5kZXJpbmdNZXRob2QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QudmFsdWVfb3IoUmVuZGVyaW5nTWV0
aG9kOjpEaXNwbGF5TGlzdCkpOwotfQorICAgIGlmICghc291cmNlSW1hZ2UpIHsKKyAgICAgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICAgICAgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZm
ZXIobnVsbHB0ciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1l
ZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17
Ci0gICAgaWYgKCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGlmICghcmVj
b3JkUmVzb3VyY2VVc2UoKnNvdXJjZUltYWdlKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIGZp
bHRlciwgcmVzdWx0cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQVNTRVJUKHBsYXll
ci5pZGVudGlmaWVyKCkpOwotICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRl
c3RpbmF0aW9uKTsKKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyKTsK
IH0KLSNlbmRpZgogCi12b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yKQordm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgLy8gV2UgbW9kaWZ5IHRoZSBzdGF0ZSBkaXJlY3Rs
eSBoZXJlIGluc3RlYWQgb2YgY2FsbGluZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKCkKLSAgICAv
LyBiZWNhdXNlIHRoZSByZWNvcmRlZCBpdGVtIHdpbGwgc2NhbGUoKSB3aGVuIHJlcGxheWVkLgot
ICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHsgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxl
RmFjdG9yIH0pOworICAgIHJlY29yZFJlc291cmNlVXNlKGltYWdlKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOworICAgIHJlY29yZERyYXdOYXRpdmVJbWFnZShpbWFnZS5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
Cit9CiAKLSAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxs
IGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KLSAgICAvLyBBc3NlcnQgdGhh
dCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPwotICAgIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwordm9pZCBSZWNvcmRlcjo6ZHJhd1N5c3RlbUltYWdl
KFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpCit7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3U3lzdGVtSW1h
Z2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLUZsb2F0UmVjdCBSZWNvcmRl
cjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29u
dGV4dDo6Um91bmRpbmdNb2RlKQordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250
ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggRGlz
cGxheUxpc3Q6OlJlY29yZGVyLiIpOwotICAgIHJldHVybiByZWN0OworICAgIHJlY29yZFJlc291
cmNlVXNlKGltYWdlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdQ
YXR0ZXJuKGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAot
Y29uc3QgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZSYgUmVjb3JkZXI6OmN1cnJlbnRTdGF0ZSgpIGNv
bnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkpOwotICAgIHJl
dHVybiBtX3N0YXRlU3RhY2subGFzdCgpOworICAgIGlmICghcmVjb3JkUmVzb3VyY2VVc2UoaW1h
Z2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oaW1hZ2VC
dWZmZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLVJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJl
Y29yZGVyOjpjdXJyZW50U3RhdGUoKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgUmVjb3JkZXI6
OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKQogewotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpKTsKLSAgICBy
ZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkp
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBk
ZXN0aW5hdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigp
LCBkZXN0aW5hdGlvbik7CiB9CisjZW5kaWYKIAotY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBSZWNv
cmRlcjo6Y3RtKCkgY29uc3QKK3ZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgcmV0dXJu
IGN1cnJlbnRTdGF0ZSgpLmN0bTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIG1fZHJh
d0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29u
dGV4dFN0YXRlOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgUmVjb3JkZXI6OmRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCiB7Ci0gICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKKyAgICByZWNvcmRS
ZXNvdXJjZVVzZShjb25zdF9jYXN0PEZvbnQmPihmb250KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5n
ZXMoKTsKKyAgICByZWNvcmREcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50
LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRl
eHRTdGF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBSZWNvcmRlcjo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
U3Ryb2tlU3R5bGUpCiB7Ci0gICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzID0gcmFkMmRlZyhzdGF0
aWNfY2FzdDxkb3VibGU+KGFuZ2xlSW5SYWRpYW5zKSk7Ci0gICAgY3RtLnJvdGF0ZShhbmdsZUlu
RGVncmVlcyk7Ci0gICAgCi0gICAgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uOwotICAgIHJvdGF0
aW9uLnJvdGF0ZShhbmdsZUluRGVncmVlcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAg
ICByZWNvcmREcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRp
bmcsIGRvdWJsZUxpbmVzKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpzY2Fs
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCiB7Ci0gICAgY3RtLnNjYWxlKHNpemUpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbWF0cml4KQorUmVmUHRyPEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdN
b2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVy
aW5nTWV0aG9kKSBjb25zdAogewotICAgIGN0bSA9IG1hdHJpeDsKKyAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZC52YWx1ZV9vcihSZW5kZXJpbmdN
ZXRob2Q6OkRpc3BsYXlMaXN0KSk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorRmxvYXRSZWN0IFJlY29y
ZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3ND
b250ZXh0OjpSb3VuZGluZ01vZGUpCiB7Ci0gICAgY3RtICo9IG1hdHJpeDsKKyAgICBXVEZMb2dB
bHdheXMoIkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5vdCB5ZXQg
Y29tcGF0aWJsZSB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKKyAgICByZXR1cm4gcmVj
dDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCmluZGV4IDg0NWVjMDA3NzJlZDJjNTRhMWU2Y2IyNmIyMTUxZGFiYWE2
ZWMwNzUuLmFlMzQzNzliZTY3ZjA1ZTEwNDJmNmFkYzVhYWJmODhjMjcwYzE3MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1
ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKICNpbmNsdWRlICJEcmF3R2x5cGhzUmVjb3JkZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3Ig
SW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIklubGluZVBhdGhEYXRhLmgiCiAjaW5jbHVkZSAi
VGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MSw3ICs1MCw3
IEBAIGNsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwog
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5
cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWNvcmRlcihjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3
R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHM6Olllcyk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOwpAQCAtNjEsNDcgKzYwLDM1IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2F2ZSgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkUmVzdG9yZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkUm90YXRlKGZsb2F0IGFuZ2xlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ29uY2F0
ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworCiAgICAgdmlydHVhbCB2b2lk
IHJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRT
ZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gMDsKKworI2lmIFVTRShDRykK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworI2VuZGlmCisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpID0gMDsKKwogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb25SZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBP
dXRUb1BhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIEZpbHRlciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3U3lz
dGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxv
YXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZERyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1Jl
Y3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAw
OworCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0
V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbExpbmUo
Y29uc3QgTGluZURhdGEmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxBcmMoY29u
c3QgQXJjRGF0YSYpID0gMDsKQEAgLTEwOSwxMSArOTYsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikg
PSAwOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24p
ID0gMDsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tl
TGluZShjb25zdCBMaW5lRGF0YSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tl
QXJjKGNvbnN0IEFyY0RhdGEmKSA9IDA7CkBAIC0xMjEsMTE2ICsxMDcsODEgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJD
dXJ2ZURhdGEmKSA9IDA7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCB2b2lkIHJl
Y29yZEFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBw
bHlGaWxsUGF0dGVybigpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXRo
KGNvbnN0IFBhdGgmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmlu
Z1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdOYXRpdmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyNpZiBFTkFC
TEUoVklERU8pCisgICAgdmlydHVhbCB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0gMDsKICNl
bmRpZgotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWNv
cmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlJikgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291
cmNlVXNlKE5hdGl2ZUltYWdlJikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJj
ZVVzZShJbWFnZUJ1ZmZlciYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VV
c2UoY29uc3QgU291cmNlSW1hZ2UmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHJlY29yZFJlc291
cmNlVXNlKEZvbnQmKSA9IDA7CiAKLSAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKLSAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIGN0bTsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHM7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdlOwotICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZSBsYXN0RHJhd2luZ1N0YXRlOwotCi0gICAgICAgIENvbnRleHRTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNsaXApCi0gICAgICAgICAgICA6IGN0bSh0
cmFuc2Zvcm0pCi0gICAgICAgICAgICAsIGNsaXBCb3VuZHMoY2xpcCkKLSAgICAgICAgICAgICwg
bGFzdERyYXdpbmdTdGF0ZShzdGF0ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
Q29udGV4dFN0YXRlIGNsb25lRm9yU2F2ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IENvbnRleHRTdGF0ZSBzdGF0ZShsYXN0RHJhd2luZ1N0YXRlLCBjdG0sIGNsaXBCb3VuZHMpOwot
ICAgICAgICAgICAgc3RhdGUuc3RhdGVDaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKLSAgICAgICAgICAg
IHJldHVybiBzdGF0ZTsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZv
clRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBz
dGF0ZSA9IGNsb25lRm9yU2F2ZSgpOwotICAgICAgICAgICAgc3RhdGUubGFzdERyYXdpbmdTdGF0
ZS5hbHBoYSA9IDE7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAgdm9pZCByb3Rh
dGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOwotICAgICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpOwotICAgICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsK
LSAgICAgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgfTsKLQot
ICAgIGNvbnN0IFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+JiBzdGF0ZVN0YWNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZVN0YWNrOyB9Ci0KLSAgICBjb25zdCBDb250ZXh0U3RhdGUmIGN1cnJlbnRT
dGF0ZSgpIGNvbnN0OwotICAgIENvbnRleHRTdGF0ZSYgY3VycmVudFN0YXRlKCk7Ci0KICAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiwgc3RkOjpvcHRpb25hbDxSZW5k
ZXJpbmdNZXRob2Q+KSBjb25zdCBvdmVycmlkZTsKKyAgICAKKworICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7CiAKIHByaXZhdGU6CiAgICAg
Ym9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBudWxscHRyOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQot
ICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlz
Q0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQg
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKICNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CiAKLSAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxl
ID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNs
aXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1p
dGVyTGltaXQoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSNp
ZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsK
LSNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlcmVk
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgRmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwg
Rm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ds
eXBoc0FuZENhY2hlRm9udChjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50
JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3U3lzdGVtSW1h
Z2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxl
KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7CiAKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwpAQCAtMjQxLDQwICsxOTIsMjMgQEAgcHJpdmF0
ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENv
bG9yJikgZmluYWw7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpIGZp
bmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpIGZpbmFsOwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
ZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIGdldENUTShH
cmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmlj
ZVNjYWxlKSBjb25zdCBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImLCBGaWx0ZXJSZXN1bHRzJikg
ZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsOwogI2lmIEVOQUJMRShWSURFTykKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pIGZpbmFsOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3Vu
dCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0Jiwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250
ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOwotCi0gICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLQot
ICAgIFZlY3RvcjxDb250ZXh0U3RhdGUsIDQ+IG1fc3RhdGVTdGFjazsKICAgICBEcmF3R2x5cGhz
UmVjb3JkZXIgbV9kcmF3R2x5cGhzUmVjb3JkZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcAppbmRleCAxZmRjNmJhNTZiZmRiMjYzNmVmYjM0
NjJhZGEyYTk5MGQzMzg5OTQ1Li4xZmI0ZGQ3OTVhZTEwYWE4Y2NjYmNkZDgzMTRlZWE4MDg2ZThk
YjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAK
QEAgLTQyLDE4ICs0MiwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKIAotUmVjb3JkZXJJbXBsOjpSZWNvcmRlckltcGwoRGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0ds
eXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhz
KQotICAgIDogUmVjb3JkZXIoc3RhdGUsIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0
cnVjdERyYXdHbHlwaHMpCitSZWNvcmRlckltcGw6OlJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdH
bHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDogUmVjb3JkZXIoaW5pdGlhbENsaXAs
IGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAsIG1fZGlzcGxheUxpc3Qo
ZGlzcGxheUxpc3QpCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFt
IDw8ICJcblJlY29yZGluZyB3aXRoIGNsaXAgIiA8PCBpbml0aWFsQ2xpcCk7CiB9CiAKLVJlY29y
ZGVySW1wbDo6flJlY29yZGVySW1wbCgpCi17Ci0gICAgQVNTRVJUKHN0YXRlU3RhY2soKS5zaXpl
KCkgPT0gMSk7IC8vIElmIHRoaXMgZmlyZXMsIGl0IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUv
cmVzdG9yZS4KLX0KLQogdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNhdmUoKQogewogICAgIGFw
cGVuZDxTYXZlPigpOwpAQCAtNjQsMzEgKzU5LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZFJlc3RvcmUoKQogICAgIGFwcGVuZDxSZXN0b3JlPigpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgYXBwZW5kPFRyYW5z
bGF0ZT4oeCwgeSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRSb3RhdGUoZmxvYXQg
YW5nbGUpCi17Ci0gICAgYXBwZW5kPFJvdGF0ZT4oYW5nbGUpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBhcHBlbmQ8
U2NhbGU+KHNjYWxlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBhcHBlbmQ8U2V0Q1RNPih0cmFu
c2Zvcm0pOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgYXBwZW5kPENvbmNhdGVuYXRl
Q1RNPih0cmFuc2Zvcm0pOwotfQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU2V0SW5saW5l
RmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGlubGluZUNvbG9yKQogewogICAgIGFwcGVuZDxTZXRJ
bmxpbmVGaWxsQ29sb3I+KGlubGluZUNvbG9yKTsKQEAgLTEwNCw5MiArNzQsMjYgQEAgdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAg
ICAgYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4odGhpY2tuZXNzKTsKIH0KIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCi17
Ci0gICAgYXBwZW5kPFNldFN0YXRlPihzdGF0ZSwgY2hhbmdlRmxhZ3MpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgYXBw
ZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBhcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLXsK
LSAgICBhcHBlbmQ8U2V0TGluZURhc2g+KGFycmF5LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCi17Ci0gICAgYXBw
ZW5kPFNldExpbmVKb2luPihqb2luKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNl
dE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgYXBwZW5kPFNldE1pdGVyTGltaXQ+KGxp
bWl0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyU2hhZG93KCkKLXsKLSAg
ICBhcHBlbmQ8Q2xlYXJTaGFkb3c+KCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRD
bGlwKGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXA+KGNsaXBS
ZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiBjbGlwUmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgYXBwZW5kPENsaXBPdXQ+KGNsaXBS
ZWN0KTsKKyAgICBhcHBlbmQ8U2V0U3RhdGU+KHN0YXRlKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgYXBwZW5kPENsaXBUb0ltYWdl
QnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGlu
YXRpb25SZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0aCk7Ci19
Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBX
aW5kUnVsZSBydWxlKQotewotICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgcnVsZSk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0
ZXImIGZpbHRlcikKLXsKLSAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcj4gaWRlbnRpZmllcjsKLSAgICBpZiAoc291cmNlSW1hZ2UpCi0gICAgICAgIGlkZW50aWZp
ZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7Ci0gICAgYXBw
ZW5kPERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJ
bWFnZVJlY3QsIGZpbHRlcik7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewotICAgIGFw
cGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNo
b3IsIG1vZGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3TmF0
aXZlSW1hZ2U+KGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CisgICAgYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKIH0KIAotdm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVuZDxEcmF3U3lzdGVtSW1hZ2U+
KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0
ZXJuPigpOwogfQorI2VuZGlmIC8vIFVTRShDRykKIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlRmFjdG9yKQogewotICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2VJZGVudGlm
aWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihzY2FsZUZhY3Rvcik7CiB9
CiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCkBAIC0yMDIsNDQgKzEwNiwzNCBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4o
KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwg
bGluZVdpZHRoKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGFw
cGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBh
cHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOworICAgIGFwcGVuZDxDbGlwPihj
bGlwUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUmIHN0eWxlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUpCiB7Ci0gICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKKyAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBhdGgsIHJ1bGUp
OwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiBjbGlwUmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOworICAgIGFw
cGVuZDxDbGlwT3V0PihjbGlwUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRE
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZENsaXBP
dXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgp
OworICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0
aD4ocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1
ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0
aW9uUmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVj
dHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1Jl
Y3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOworICAgIGFwcGVuZDxDbGVhclJlY3Q+
KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQpAQCAtMjU3LDIzICsxNTEsMjIgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGcKICAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KHJlY3QsIGdyYWRpZW50KTsKIH0K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJs
ZW5kTW9kZSBtb2RlKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
YXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBtb2RlKTsKKyAgICBh
cHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29sb3IsIG1vZGUpOworICAgIGFwcGVu
ZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKTsKIH0K
IAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPihyZWN0LCByb3VuZGVkUmVjdCwgY29sb3IpOworICAgIGFwcGVuZDxGaWxsRWxsaXBzZT4o
cmVjdCk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRl
ckltcGw6OnJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJiBsaW5lKQogewogICAgIGFwcGVu
ZDxGaWxsTGluZT4obGluZSk7CkBAIC0yOTMsNyArMTg2LDYgQEAgdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEZpbGxCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewog
ICAgIGFwcGVuZDxGaWxsQmV6aWVyQ3VydmU+KGN1cnZlKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKQEAgLTMwMSwyNSArMTkzLDE3IEBAIHZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxGaWxsUGF0aD4o
cGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKLX0KLQot
I2lmIEVOQUJMRShWSURFTykKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
K3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVk
aWE+KHBsYXllciwgZGVzdGluYXRpb24pOworICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBi
b3JkZXJUaGlja25lc3MpOwogfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKIAotdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3
aWR0aCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgd2lkdGgpOworICAg
IGFwcGVuZDxTdHJva2VFbGxpcHNlPihyZWN0KTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQotCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5l
RGF0YSYgbGluZSkKIHsKICAgICBhcHBlbmQ8U3Ryb2tlTGluZT4obGluZSk7CkBAIC0zMzksNyAr
MjIzLDYgQEAgdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0
IEJlemllckN1cnZlRGF0YSYgY3VydmUpCiB7CiAgICAgYXBwZW5kPFN0cm9rZUJlemllckN1cnZl
PihjdXJ2ZSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM0
NywzMyArMjMwLDg0IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgYXBwZW5kPFN0cm9rZVBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3Qp
OworICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAotdm9p
ZCBSZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kPENsZWFyUmVjdD4ocmVj
dCk7CisgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLSNpZiBVU0Uo
Q0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7Cit9CiAKLXZvaWQgUmVj
b3JkZXJJbXBsOjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kPEFwcGx5U3Ry
b2tlUGF0dGVybj4oKTsKKyAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOwogfQogCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxBcHBseUZpbGxQ
YXR0ZXJuPigpOworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9m
ZnNldCwgY29sb3IpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBh
cHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwor
fQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
YXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KHNjYWxlRmFjdG9yKTsKKyAgICBhcHBlbmQ8
RHJhd05hdGl2ZUltYWdlPihpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QpCit7CisgICAgYXBwZW5kPERyYXdTeXN0ZW1JbWFnZT4oc3lzdGVtSW1hZ2UsIGRl
c3RpbmF0aW9uUmVjdCk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQoreworICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9
CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBG
aWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAoc291cmNlSW1hZ2UpCisgICAgICAgIGlkZW50
aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCk7CisgICAg
YXBwZW5kPERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyPihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3Vy
Y2VJbWFnZVJlY3QsIGZpbHRlcik7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3
UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZUlkZW50aWZpZXIsIGRlc3RSZWN0LCB0
aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKKyNpZiBF
TkFCTEUoVklERU8pCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQoreworICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KGlkZW50aWZpZXIsIGRl
c3RpbmF0aW9uKTsKK30KKyNlbmRpZgorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBh
cHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5j
aG9yLCBtb2RlKTsKK30KKwordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgYXBw
ZW5kPERyYXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKK30KKwordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYgc3R5bGUpCit7CisgICAgYXBw
ZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKIH0KIAogYm9vbCBS
ZWNvcmRlckltcGw6OnJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSkK
QEAgLTQxNywyMCArMzUxLDE2IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdF
eHRlbnQoZmxvYXQgYmx1clJhZGl1cykKIAogRmxvYXRSZWN0IFJlY29yZGVySW1wbDo6ZXh0ZW50
RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBGbG9h
dFJlY3QgYm91bmRzID0gcmVjdDsKLSAgICBhdXRvJiBzdGF0ZSA9IGN1cnJlbnRTdGF0ZSgpOwor
ICAgIGF1dG8gYm91bmRzID0gcmVjdDsKIAotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0g
ICAgZmxvYXQgc2hhZG93UmFkaXVzOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGlmIChn
ZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgewotICAg
ICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50ID0gYm91bmRzOwotICAgICAgICBzaGFkb3dFeHRl
bnQubW92ZShzaGFkb3dPZmZzZXQpOwotICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFk
b3dQYWludGluZ0V4dGVudChzaGFkb3dSYWRpdXMpKTsKKyAgICBpZiAoaGFzU2hhZG93KCkpIHsK
KyAgICAgICAgYXV0byBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CisgICAgICAgIHNoYWRvd0V4dGVu
dC5tb3ZlKGRyb3BTaGFkb3coKS5vZmZzZXQpOworICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0
ZShzaGFkb3dQYWludGluZ0V4dGVudChkcm9wU2hhZG93KCkuYmx1clJhZGl1cykpOwogICAgICAg
ICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKICAgICB9CiAKLSAgICByZXR1cm4gaW50ZXJz
ZWN0aW9uKHN0YXRlLmNsaXBCb3VuZHMsIHN0YXRlLmN0bS5tYXBSZWN0KGJvdW5kcykpOworICAg
IHJldHVybiBpbnRlcnNlY3Rpb24oY2xpcEJvdW5kcygpLCBnZXRDVE0oKS5tYXBSZWN0KGJvdW5k
cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAppbmRleCA2NDIyNjVmMDk4MDIyY2YyYjA1ZjE4MGMx
NzRmYTAzNDYyZjJkZDQwLi42ZGU2YWVkZmZjYjE3ZGIyZDA4MWI0MmMxZGU2YmMzMjlhMzhiZjQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlckltcGwuaApAQCAtMzUs
OSArMzUsOCBAQCBjbGFzcyBSZWNvcmRlckltcGwgOiBwdWJsaWMgUmVjb3JkZXIgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVy
SW1wbCk7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlM
aXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5
cGhzOjpZZXMpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVySW1wbCgpOwot
CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXJJbXBsKERpc3BsYXlMaXN0JiwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0g
eyB9LCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlw
aHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOworICAgIAogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKICAg
ICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBmaW5hbCB7IH0KQEAgLTQ3LDQ3ICs0Niwz
NSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkU2F2ZSgpIGZpbmFsOwogICAg
IHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkVHJhbnNsYXRlKGZs
b2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xl
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAg
IHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7
CisKICAgICB2b2lkIHJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PikgZmlu
YWw7CiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1aW50OF90Pikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRTZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRTZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxp
bWl0KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7Cisg
ICAgdm9pZCByZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGZpbmFs
OworCisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmlu
YWw7CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKwor
ICAgIHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAg
dm9pZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9pZCByZWNv
cmRDbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xpcFBhdGgo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZENsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKICAg
ICB2b2lkIHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ds
eXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJu
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29y
ZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3Qg
RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IERvY3VtZW50TWFya2VyTGluZVN0eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0
IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2
b2lkIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRoQ29sb3IoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0
V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9p
ZCByZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVu
ZE1vZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAg
IHZvaWQgcmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJl
Y29yZEZpbGxBcmMoY29uc3QgQXJjRGF0YSYpIGZpbmFsOwpAQCAtOTUsMTEgKzgyLDEwIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVE
YXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOwotI2Vu
ZGlmCi0gICAgdm9pZCByZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBm
aW5hbDsKKworICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYpIGZpbmFsOwogICAgIHZv
aWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IEFyY0RhdGEmKSBmaW5hbDsKQEAgLTEwNywxMyArOTMs
MjggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlY29yZFN0cm9rZUJlemllckN1cnZlKGNvbnN0IEJl
emllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRTdHJva2VQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0
ZXJuKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisK
KyAgICB2b2lkIHJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgIGZpbmFsOworCisgICAgdm9pZCBy
ZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZERyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHJlY29yZERyYXdG
b2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgZmlu
YWw7CisgICAgdm9pZCByZWNvcmREcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2Uo
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lk
IHJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb25SZWN0KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQ
YWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRT
bW9vdGhpbmdNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwogCiAgICAgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShO
YXRpdmVJbWFnZSYpIGZpbmFsOwogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1hZ2VCdWZm
ZXImKSBmaW5hbDsKQEAgLTEzOSw2ICsxNDAsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
fQogCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBmaW5hbDsK
KwogICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0Jikg
Y29uc3Q7CiAKICAgICBEaXNwbGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAppbmRleCA4ZmYxOWQwMDM1NGNkYmVkZTNhNWJhMWFm
NzU4Y2ZmMDIzYTI1YTIyLi42NmZjOWQ4ODJhNGQzZjdkZThlODkxMmExZjMwYWYxOThkMDM1Mjgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC05NywxMCAr
OTcsMTAgQEAgaW5saW5lIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcj4gYXBwbHlTZXRTdGF0ZUl0ZW0oR3JhcGgKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKICAgICB9OwogCi0gICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVy
blRpbGVJbWFnZShzZXRTdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLnN0cm9rZVBhdHRl
cm4uZ2V0KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxl
SW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVybigpKSkKICAgICAg
ICAgcmV0dXJuICppbWFnZUlkZW50aWZpZXI7CiAKLSAgICBpZiAoYXV0byBpbWFnZUlkZW50aWZp
ZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3Rh
dGUuZmlsbFBhdHRlcm4uZ2V0KCkpKQorICAgIGlmIChhdXRvIGltYWdlSWRlbnRpZmllciA9IGZp
eFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlKCkuZmlsbEJydXNoKCkucGF0dGVy
bigpKSkKICAgICAgICAgcmV0dXJuICppbWFnZUlkZW50aWZpZXI7CiAKICAgICBzZXRTdGF0ZUl0
ZW0uYXBwbHkoY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJm
QnV6ei5jcHAKaW5kZXggZDA5YzEzNzNlYTlhYWFmNGExODUxMzZlZTg4NTNkNzg4ZmM0MTc4ZC4u
ZmNhZGVmMjM4ZTA5ZmUwMjgyYWNlZWM5YTFmMjVmODczMzlkOWM3ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVy
SGFyZkJ1enouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtMjksMTcgKzI5LDE4IEBACiAj
aW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNz
Q29udGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250
ZXh0KQotICAgIDogbV9vd25lcihvd25lcikKK0RyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBo
c1JlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBEZWNvbnN0cnVj
dERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkKKyAgICA6IG1fZGVzdGluYXRpb25D
b250ZXh0KGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKIH0KIAogdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNt
b290aGluZ01vZGUpCiB7Ci0gICAgbV9vd25lci5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7
CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8v
Tmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCmluZGV4IDkxMTQ2ZGZjNmZkODRkZjhl
Mjk1NGYwMzc3ZDAwNjZhNzcyMzNjYzkuLjUxNTQ3YWU2ZGZhMTA0YjVkZDY1NGE5MzBiOTcyNDFk
OTc3OGQwOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxOCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxNjAgKzc4LDM4OSBA
QCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9v
ZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2YQogfQogCiBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyKFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCi0g
ICAgOiBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KEZs
b2F0UmVjdDo6aW5maW5pdGVSZWN0KCkpCisgICAgLCBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0
KQogewotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7IH0sIHsgfSwgRmxvYXRSZWN0OjppbmZp
bml0ZVJlY3QoKSB9KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkaWRVcGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpzYXZlKCkKK3sKKyAgICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPD4geworICAgICAgICB2aXJ0dWFsIH5TYXZlKCkgPSBkZWZhdWx0Owor
CisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLnNhdmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTYXZl
PD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2F2ZT4oKSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6cmVzdG9yZSgpCit7CisgICAgc3RydWN0IFJlc3RvcmUgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmlydHVhbCB+UmVz
dG9yZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5yZXN0b3JlKCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiUmVzdG9yZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAg
IGlmICghc3RhY2tTaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFJlc3RvcmU+KCkpOworfQor
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
KSB7CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpDaGFuZ2U6OkNUTSkpIHsKKyAgICAgICAgc3RydWN0IFNldENUTSBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEFmZmluZVRyYW5zZm9ybT4geworICAgICAgICAg
ICAgdmlydHVhbCB+U2V0Q1RNKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1
dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6Q1RNPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8U2V0Q1RNPihnZXRDVE0oKSkpOworICAgIH0KKworICAgIGlmIChzdGF0
ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VUaGlja25lc3MpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VUaGlja25lc3NDaGFuZ2UgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewogICAgICAgICAg
ICAgdmlydHVhbCB+U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAg
ICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVy
cmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ry
b2tlVGhpY2tuZXNzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAg
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoY29udGV4dEZvclJl
cGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VUaGlja25lc3NDaGFuZ2U8Plxu
IjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzczw+XG4iOwogICAgICAgICAgICAgfQogICAgICAgICB9
OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVRoaWNrbmVzc0NoYW5nZT4o
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0
cm9rZVRoaWNrbmVzc0NoYW5nZT4oc3Ryb2tlVGhpY2tuZXNzKCkpKTsKICAgICB9CiAKLSAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpIHsKKyAg
ICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlU3R5bGUpKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VTdHlsZUNoYW5nZSBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFN0cm9rZVN0eWxlPiB7CiAg
ICAgICAgICAgICB2aXJ0dWFsIH5TdHJva2VTdHlsZUNoYW5nZSgpID0gZGVmYXVsdDsKIAogICAg
ICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dFN0cm9rZVN0eWxlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAg
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6
OlN0cm9rZVN0eWxlPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0cm9rZVN0eWxlKCkpKTsK
KyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcCkpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVDYXAg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lQ2FwPiB7CisgICAg
ICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2
b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6TGluZUNhcDw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXAoKSkpOworICAgIH0K
KworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpMaW5lRGFzaCkpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVEYXNoIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFzaEFycmF5LCBmbG9hdD4gewor
ICAgICAgICAgICAgdmlydHVhbCB+U2V0TGluZURhc2goKSA9IGRlZmF1bHQ7CisKKyAgICAgICAg
ICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJy
aWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVEYXNoKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVEYXNoPD5cbiI7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZURhc2g+KGxp
bmVEYXNoKCkuZGFzaGVzLCBsaW5lRGFzaCgpLm9mZnNldCkpOworICAgIH0KKworICAgIGlmIChz
dGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpM
aW5lSm9pbikpIHsKKyAgICAgICAgc3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUpvaW4+IHsKKyAgICAgICAgICAgIHZpcnR1YWwg
flNldExpbmVKb2luKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKS5jcigpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVK
b2luPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKCkpKTsKKyAgICB9CisKKyAgICBpZiAo
c3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6
TWl0ZXJMaW1pdCkpIHsKKyAgICAgICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4geworICAgICAgICAgICAgdmlydHVh
bCB+U2V0TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVN0eWxlQ2hhbmdlPD5cbiI7CisgICAg
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpNaXRlckxpbWl0PD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKLSAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlU3R5bGVDaGFuZ2U+KHN0YXRlLnN0cm9rZVN0eWxl
KSk7CisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVyTGltaXQ+KG1pdGVyTGlt
aXQoKSkpOwogICAgIH0KIAotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpIHsKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSkpIHsKICAg
ICAgICAgc3RydWN0IENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGU+IHsKICAg
ICAgICAgICAgIHZpcnR1YWwgfkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSgpID0gZGVmYXVsdDsK
IAogICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSwg
YXJnPDE+KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0
ZU1vZGU8PlxuIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2U+KHN0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlPihjb21wb3NpdGVNb2RlKCkub3BlcmF0aW9uLCBjb21w
b3NpdGVNb2RlKCkuYmxlbmRNb2RlKSk7CiAgICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkgeworICAgIAorICAgIGlmIChz
dGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpT
aG91bGRBbnRpYWxpYXMpKSB7CiAgICAgICAgIHN0cnVjdCBTaG91bGRBbnRpYWxpYXNDaGFuZ2Ug
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxib29sPiB7CiAgICAgICAg
ICAgICB2aXJ0dWFsIH5TaG91bGRBbnRpYWxpYXNDaGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAg
ICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92
ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
aG91bGRBbnRpYWxpYXMoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAg
ICAgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNob3VsZEFudGlhbGlhc0NoYW5nZTw+
XG4iOworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzPD5cbiI7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH07CiAKLSAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2hvdWxkQW50aWFsaWFzQ2hhbmdl
PihzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
U2hvdWxkQW50aWFsaWFzQ2hhbmdlPihzaG91bGRBbnRpYWxpYXMoKSkpOwogICAgIH0KKworICAg
IGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQoreworICAgIHN0cnVjdCBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8ZmxvYXQ+IHsKKyAgICAgICAgdmlydHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigp
ID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworCisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNp
dHkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9w
YWNpdHkpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFuc3BhcmVu
Y3lMYXllcigpCit7CisgICAgc3RydWN0IEVuZFRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7CisgICAgICAgIHZpcnR1YWwgfkVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OworCisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRW5kVHJhbnNw
YXJlbmN5TGF5ZXI8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIAorICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7Cit9
CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgc3RydWN0IENsaXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAgICAgdmlydHVhbCB+Q2xpcCgpID0gZGVmYXVsdDsK
KworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVy
KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6Y2xpcChjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8
PCBpbmRlbnQgPDwgIkNsaXA8PlxuIjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOworCisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3QpOworICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPENsaXA+KHJlY3QpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkK
K3sKKyAgICBzdHJ1Y3QgQ2xpcFBhdGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxQYXRoLCBXaW5kUnVsZT4geworICAgICAgICB2aXJ0dWFsIH5DbGlwUGF0aCgpID0g
ZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6Y2xpcFBh
dGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFBhdGg8PlxuIjsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgR3JhcGhpY3ND
b250ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8Q2xpcFBhdGg+KHBhdGgsIHdpbmRSdWxlKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHN0cnVjdCBT
ZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUNh
cD4gewotICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OworICAgIHN0cnVj
dCBDbGlwT3V0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRS
ZWN0PiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVDYXAoY29udGV4dEZvclJlcGxh
eShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiU2V0TGluZUNhcDw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJDbGlwT3V0PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8U2V0TGluZUNhcD4obGluZUNhcCkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2Vz
KCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocmVjdCkpOwogfQogCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc3RydWN0IFNldExpbmVEYXNoIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RGFzaEFycmF5LCBmbG9hdD4gewotICAg
ICAgICB2aXJ0dWFsIH5TZXRMaW5lRGFzaCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgQ2xpcE91
dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGg+IHsKKyAgICAg
ICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6c2V0TGluZURhc2goY29udGV4dEZvclJlcGxheShyZXBsYXllciks
IGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIlNldExpbmVEYXNoPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkNsaXBPdXQ8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxTZXRMaW5lRGFzaD4oZGFzaGVzLCBkYXNoT2Zmc2V0KSk7CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwT3V0PihwYXRoKSk7
CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUpvaW4oTGluZUpvaW4g
bGluZUpvaW4pCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAg
c3RydWN0IFNldExpbmVKb2luIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8TGluZUpvaW4+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7
CisgICAgc3RydWN0IENsaXBUb0ltYWdlQnVmZmVyIGZpbmFsOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgRmxvYXRSZWN0PiB7CisgICAg
ICAgIHZpcnR1YWwgfkNsaXBUb0ltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lSm9pbihjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCkp
OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldExpbmVKb2luPD5c
biI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBUb0ltYWdlQnVmZmVyPD5cbiI7
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZUpv
aW4+KGxpbmVKb2luKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIGlmIChhdXRv
IG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSkpCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBUb0ltYWdlQnVmZmVyPihuYXRp
dmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCkpOwogfQogCi12b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBzdHJ1Y3QgU2V0TWl0ZXJMaW1pdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPGZsb2F0PiB7Ci0gICAgICAgIHZpcnR1YWwgflNldE1pdGVyTGltaXQoKSA9IGRl
ZmF1bHQ7CisgICAgc3RydWN0IENsZWFyUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGVhclJlY3QoKSA9
IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldE1p
dGVyTGltaXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAg
ICAgIENhaXJvOjpjbGVhclJlY3QoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigp
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRNaXRlckxpbWl0
PD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsZWFyUmVjdDw+XG4iOwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldE1pdGVyTGltaXQ+
KG1pdGVyTGltaXQpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPENsZWFyUmVjdD4ocmVjdCkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI0OSw2ICs0NzksOCBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PEZpbGxSZWN0PihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKIH0KQEAgLTI2OSw2ICs1MDEsOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgICAgICB9CiAgICAgfTsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCkBAIC0yOTEsMzUgKzUyNSwxMiBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3Jh
ZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3Jt
KSkpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21w
b3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBzdHJ1Y3QgRmlsbFJl
Y3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENv
bG9yLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUsIENv
bXBvc2l0ZU9wZXJhdG9yPiB7Ci0gICAgICAgIHZpcnR1YWwgfkZpbGxSZWN0KCkgPSBkZWZhdWx0
OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4
dCA9IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpOwotCi0gICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBhcmc8
Mz4oKSk7Ci0gICAgICAgICAgICBDYWlybzo6ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0LCBhcmc8
MD4oKSwgYXJnPDE+KCksIGFyZzw0PigpKTsKLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDU+KCksIEJsZW5kTW9kZTo6
Tm9ybWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJGaWxsUmVj
dDw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PEZpbGxSZWN0PihyZWN0LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpKTsKKyAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3JhZGllbnQuY3JlYXRlUGF0dGVy
bigxLjAsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBzdHJ1Y3QgRmlsbFJv
dW5kZWRSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRS
b3VuZGVkUmVjdCwgQ29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIENhaXJvOjpT
aGFkb3dTdGF0ZT4gewogICAgICAgICB2aXJ0dWFsIH5GaWxsUm91bmRlZFJlY3QoKSA9IGRlZmF1
bHQ7CkBAIC0zMjgsNyArNTM5LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAg
ewogICAgICAgICAgICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dEZvclJlcGxheShy
ZXBsYXllcik7CiAKLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDI+KCksIGFyZzwzPigpKTsKKyAgICAgICAgICAgIENh
aXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dC5jcigpLCBh
cmc8Mj4oKSwgYXJnPDM+KCkpOwogCiAgICAgICAgICAgICBhdXRvJiByZWN0ID0gYXJnPDA+KCk7
CiAgICAgICAgICAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKQEAgLTMzNiw3ICs1NDcsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IENhaXJvOjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgpLCBhcmc8MT4oKSwg
YXJnPDQ+KCkpOwogCi0gICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAg
ICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRl
eHQuY3IoKSwgYXJnPDI+KCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTM0NSw4ICs1NTYsOSBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91
bmRlZFJlY3Q+KHJvdW5kZWRSZWN0LCBjb2xvciwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIGJs
ZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+KHJvdW5k
ZWRSZWN0LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAt
MzY1LDEwICs1NzcsMzYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgfQogICAg
IH07CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgVU5VU0VEX1BBUkFNKGNvbG9y
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAor
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgc3RydWN0IEZpbGxFbGxpcHNlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNo
YWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0Owor
CisgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgICAg
IHBhdGguYWRkRWxsaXBzZShhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZmlsbFBhdGgo
Y29udGV4dEZvclJlcGxheShyZXBsYXllciksIHBhdGgsIGFyZzwxPigpLCBhcmc8Mj4oKSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbEVsbGlwc2U8PlxuIjsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxF
bGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpKTsKK30KKwogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewogICAgIHN0cnVjdCBGaWxsUGF0aCBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6
U2hhZG93U3RhdGU+IHsKQEAgLTM4OCwzMiArNjI2LDEyIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisKICAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Rmls
bFBhdGg+KHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgRmlsbEVsbGlwc2UgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENhaXJvOjpGaWxs
U291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKLSAgICAgICAgdmlydHVhbCB+RmlsbEVsbGlw
c2UoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgUGF0aCBw
YXRoOwotICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKGFyZzwwPigpKTsKLSAgICAgICAgICAg
IENhaXJvOjpmaWxsUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgcGF0aCwgYXJnPDE+
KCksIGFyZzwyPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJG
aWxsRWxsaXBzZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsRWxsaXBzZT4ocmVj
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7
Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKICAgICBzdHJ1Y3QgU3Ryb2tlUmVjdCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgZmxvYXQs
IENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewpAQCAtNDMwLDMxICs2
NDgsMTAgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxT
dHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHN0cnVjdCBTdHJva2VQ
YXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86
OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgflN0
cm9rZVBhdGgoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3Bl
cmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAg
Q2Fpcm86OnN0cm9rZVBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBh
cmc8MT4oKSwgYXJnPDI+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIlN0cm9rZVBhdGg8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PFN0cm9rZVBhdGg+KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUmVjdD4o
cmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNDc5LDEwNyArNjc2LDI5IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCwgQ2Fp
cm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIHN0cnVjdCBDbGVhclJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlv
biwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xlYXJSZWN0
KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJl
cGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpj
bGVhclJlY3QoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGVhclJlY3Q8PlxuIjsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGVhclJlY3Q+KHJlY3QpKTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKK3ZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHN0cnVjdCBE
cmF3R2x5cGhzIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Q2Fpcm86
OkZpbGxTb3VyY2UsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZSwgRmxv
YXRQb2ludCwgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+LCBmbG9hdCwgVmVjdG9yPGNhaXJv
X2dseXBoX3Q+LCBmbG9hdCwgVGV4dERyYXdpbmdNb2RlRmxhZ3MsIGZsb2F0LCBGbG9hdFNpemUs
IENvbG9yLCBGb250U21vb3RoaW5nTW9kZT4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3R2x5cGhz
KCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBTdHJva2VQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVy
YXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNo
YWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgflN0cm9rZVBhdGgoKSA9IGRlZmF1bHQ7CiAK
ICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoY29udGV4
dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwz
PigpLCBhcmc8ND4oKS5nZXQoKSwKLSAgICAgICAgICAgICAgICBhcmc8NT4oKSwgYXJnPDY+KCks
IGFyZzw3PigpLCBhcmc8OD4oKSwgYXJnPDk+KCksIGFyZzwxMD4oKSwgYXJnPDExPigpLCBhcmc8
MTI+KCkpOworICAgICAgICAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAg
ICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdHbHlwaHM8PlxuIjsKKyAgICAgICAgICAgIHRz
IDw8IGluZGVudCA8PCAiU3Ryb2tlUGF0aDw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAg
VmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7Ci0gICAgewotICAg
ICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBn
bHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2
YW5jZXNbaV0ud2lkdGgoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3R2x5cGhzPihDYWly
bzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAotICAgICAg
ICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwKLSAgICAgICAgUmVmUHRyPGNhaXJv
X3NjYWxlZF9mb250X3Q+KGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpKSwKLSAgICAg
ICAgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIFdURk1vdmUoY2Fpcm9HbHlwaHMpLCB4T2Zm
c2V0LCBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsCi0gICAgICAgIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwgZm9udFNtb290aGluZykp
OwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQot
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1hZ2UgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zLCBmbG9hdCwgQ2Fp
cm86OlNoYWRvd1N0YXRlPiB7Ci0gICAgICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpID0g
ZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd1Bs
YXRmb3JtSW1hZ2UoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBh
cmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAg
ICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdOYXRpdmVJbWFnZTw+XG4iOwot
ICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0gICAgVU5VU0VE
X1BBUkFNKGltYWdlU2l6ZSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdOYXRpdmVJbWFnZT4obmF0aXZlSW1hZ2UucGxhdGZv
cm1JbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMob3B0aW9u
cywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSksIHN0YXRlLmFscGhhLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IHN0cnVjdCBEcmF3UGF0dGVybiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBJbnRTaXplLCBGbG9hdFJlY3QsIEZsb2F0UmVj
dCwgQWZmaW5lVHJhbnNmb3JtLCBGbG9hdFBvaW50LCBJbWFnZVBhaW50aW5nT3B0aW9ucz4gewot
ICAgICAgICB2aXJ0dWFsIH5EcmF3UGF0dGVybigpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lk
IGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oY29udGV4dEZvclJlcGxheShy
ZXBsYXllciksIGFyZzwwPigpLmdldCgpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigpLCBh
cmc8ND4oKSwgYXJnPDU+KCksIGFyZzw2PigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJEcmF3UGF0dGVybjw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UGF0
dGVybj4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBuYXRpdmVJbWFnZS5zaXplKCksIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpKTsKKyAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCiB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQpAQCAtNTk4LDggKzcxNyw4IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25l
c3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9y
KSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxE
cmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUo
KSwgc3Ryb2tlQ29sb3IoKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQy
KQpAQCAtNjIxLDUwICs3NDAsOCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludAogICAgIGlmIChz
dHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+
KHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7Ci19Ci0KLXZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBzdHJ1
Y3QgRHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEZsb2F0UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yPiB7Ci0g
ICAgICAgIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
LSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigp
LCBhcmc8ND4oKSwgYXJnPDU+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkRyYXdMaW5lc0ZvclRleHQ8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBp
ZiAod2lkdGhzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRl
eHQ+KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMs
IHN0YXRlLnN0cm9rZUNvbG9yKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIHN0cnVjdCBEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI8PlxuIjsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyPihyZWN0LCBzdHlsZSkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyLCBzdHJva2VTdHlsZSgp
LCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc2hvdWxkQW50aWFsaWFzKCkpKTsK
IH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCkBAIC02ODMsMTEgKzc2MCwxMSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tl
U3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdFbGxpcHNl
PihyZWN0LCBmaWxsQ29sb3IoKSwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tl
VGhpY2tuZXNzKCkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2Fp
dGE6OnBhaW50Rm9jdXMoKnRoaXMsIHBhdGgsIGNvbG9yKTsKQEAgLTcwNywxMiArNzg0LDEyIEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICAgICAgfQogICAgIH07CiAKKyAgICBhcHBseVN0
YXRlQ2hhbmdlcygpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdGb2N1c1Jpbmc+KHBh
dGgsIHdpZHRoLCBjb2xvcikpOwogI2VuZGlmCi0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiB9
CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAg
IFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcmVjdHMsIGNvbG9yKTsKQEAgLTczMiwz
NjggKzgwOSwxNDYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQKICAgICAgICAgfQogICAgIH07
CiAKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERy
YXdGb2N1c1Jpbmc+KHJlY3RzLCB3aWR0aCwgY29sb3IpKTsKICNlbmRpZgotICAgIFVOVVNFRF9Q
QVJBTShvZmZzZXQpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNhdmUoKQot
ewotICAgIHN0cnVjdCBTYXZlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8PiB7Ci0gICAgICAgIHZpcnR1YWwgflNhdmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikuc2F2ZSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNhdmU8PlxuIjsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKLQotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFNhdmU+KCkpOwotCi0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0
YXRlU3RhY2subGFzdCgpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0
b3JlKCkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAg
IHN0cnVjdCBSZXN0b3JlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
PiB7Ci0gICAgICAgIHZpcnR1YWwgflJlc3RvcmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikucmVzdG9yZSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlJlc3RvcmU8PlxuIjsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAoIXN0YWNrU2l6ZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKLQotICAgIGlmIChtX3N0YXRl
U3RhY2suaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxSZXN0b3JlPigpKTsKLQotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAg
aWYgKG1fc3RhdGVTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIG1fc3RhdGVTdGFjay5jbGVhcigp
OworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQog
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIHN0cnVjdCBUcmFuc2xhdGUgZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdCwgZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+VHJh
bnNsYXRlKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3TmF0aXZlSW1hZ2UgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90Piwg
RmxvYXRSZWN0LCBGbG9hdFJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zLCBmbG9hdCwgQ2Fpcm86
OlNoYWRvd1N0YXRlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpID0gZGVm
YXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6dHJhbnNsYXRl
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAg
ICAgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCks
IGFyZzw1PigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJUcmFu
c2xhdGU8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd05hdGl2ZUltYWdl
PD5cbiI7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8VHJh
bnNsYXRlPih4LCB5KSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0
YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGUuY3RtLnRyYW5zbGF0ZSh4LCB5KTsKLQotICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gdDsKLSAgICAgICAgdC50cmFuc2xhdGUoLXgsIC15KTsKLSAgICAg
ICAgc3RhdGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0KKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdOYXRpdmVJ
bWFnZT4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgSW1h
Z2VQYWludGluZ09wdGlvbnMob3B0aW9ucywgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKSwg
YWxwaGEoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQogewotICAgIHN0cnVjdCBSb3RhdGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2aXJ0dWFsIH5Sb3RhdGUoKSA9IGRlZmF1bHQ7
Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXll
cikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnJvdGF0ZShjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIlJvdGF0ZTw+XG4iOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPFJvdGF0ZT4oYW5nbGVJblJhZGlhbnMpKTsKLQotICAgIHsKLSAg
ICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZS5j
dG0ucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdDsK
LSAgICAgICAgdC5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgICAgICBzdGF0ZS5jdG1JbnZl
cnNlID0gdCAqIHN0YXRlLmN0bUludmVyc2U7Ci0gICAgfQotfQotCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBzdHJ1Y3Qg
U2NhbGUgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFNpemU+
IHsKLSAgICAgICAgdmlydHVhbCB+U2NhbGUoKSA9IGRlZmF1bHQ7CisgICAgc3RydWN0IERyYXdQ
YXR0ZXJuIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4sIEludFNpemUsIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBBZmZpbmVUcmFu
c2Zvcm0sIEZsb2F0UG9pbnQsIEltYWdlUGFpbnRpbmdPcHRpb25zPiB7CisgICAgICAgIHZpcnR1
YWwgfkRyYXdQYXR0ZXJuKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpzY2FsZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkp
OworICAgICAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+
KCksIGFyZzw1PigpLCBhcmc8Nj4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGlu
ZGVudCA8PCAiU2NhbGU8PlxuIjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd1Bh
dHRlcm48PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTY2FsZT4oc2l6ZSkpOwotCi0gICAgewotICAgICAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVT
dGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmN0bS5zY2FsZShzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0OwotICAgICAgICB0LnNjYWxl
KDEgLyBzaXplLndpZHRoKCksIDEgLyBzaXplLmhlaWdodCgpKTsKLSAgICAgICAgc3RhdGUuY3Rt
SW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAgIH0KKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdQYXR0ZXJuPihuYXRpdmVJbWFn
ZS5wbGF0Zm9ybUltYWdlKCksIG5hdGl2ZUltYWdlLnNpemUoKSwgZGVzdFJlY3QsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucykpOwogfQogCi12b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQogewotICAgIHN0cnVjdCBDb25jYXRDVE0gZmluYWwgOiBQYWludGluZ09wZXJhdGlv
biwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFuc2Zvcm0+IHsKLSAgICAgICAgdmlydHVhbCB+Q29u
Y2F0Q1RNKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJh
dGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENh
aXJvOjpjb25jYXRDVE0oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAg
ICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDb25jYXRDVE08PlxuIjsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICBhdXRvIGludmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgp
OwotICAgIGlmICghaW52ZXJzZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8Q29uY2F0Q1RNPih0cmFuc2Zvcm0pKTsKLQotICAgIGF1dG8mIHN0YXRlID0gbV9z
dGF0ZVN0YWNrLmxhc3QoKTsKLSAgICBzdGF0ZS5jdG0gKj0gdHJhbnNmb3JtOwotICAgIHN0YXRl
LmN0bUludmVyc2UgPSBpbnZlcnNlLnZhbHVlKCkgKiBzdGF0ZS5jdG1JbnZlcnNlOworICAgIC8v
IEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1l
Rm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CisjZW5kaWYKIAotdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQogewotICAgIHN0cnVjdCBTZXRDVE0g
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZpbmVUcmFuc2Zvcm0+
IHsKLSAgICAgICAgdmlydHVhbCB+U2V0Q1RNKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3
R2x5cGhzIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Q2Fpcm86OkZp
bGxTb3VyY2UsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZSwgRmxvYXRQ
b2ludCwgUmVmUHRyPGNhaXJvX3NjYWxlZF9mb250X3Q+LCBmbG9hdCwgVmVjdG9yPGNhaXJvX2ds
eXBoX3Q+LCBmbG9hdCwgVGV4dERyYXdpbmdNb2RlRmxhZ3MsIGZsb2F0LCBGbG9hdFNpemUsIENv
bG9yLCBGb250U21vb3RoaW5nTW9kZT4geworICAgICAgICB2aXJ0dWFsIH5EcmF3R2x5cGhzKCkg
PSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxh
eSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q1RNKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAg
ICAgICBDYWlybzo6ZHJhd0dseXBocyhjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLmdldCgpLAorICAgICAg
ICAgICAgICAgIGFyZzw1PigpLCBhcmc8Nj4oKSwgYXJnPDc+KCksIGFyZzw4PigpLCBhcmc8OT4o
KSwgYXJnPDEwPigpLCBhcmc8MTE+KCksIGFyZzwxMj4oKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiU2V0Q1RNPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkRyYXdHbHlwaHM8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvIGlu
dmVyc2UgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgIGlmICghaW52ZXJzZSkKKyAgICBpZiAo
IWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhcHBl
bmQoY3JlYXRlQ29tbWFuZDxTZXRDVE0+KHRyYW5zZm9ybSkpOwotCi0gICAgYXV0byYgc3RhdGUg
PSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgIHN0YXRlLmN0bSA9IHRyYW5zZm9ybTsKLSAgICBz
dGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0g
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURl
dmljZVNjYWxlKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpLmN0bTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgc3RydWN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2
aXJ0dWFsIH5CZWdpblRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiQmVnaW5UcmFuc3BhcmVuY3lMYXllcjw+XG4iOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihv
cGFjaXR5KTsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI+KG9wYWNpdHkpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjplbmRUcmFu
c3BhcmVuY3lMYXllcigpCi17Ci0gICAgc3RydWN0IEVuZFRyYW5zcGFyZW5jeUxheWVyIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8PiB7Ci0gICAgICAgIHZpcnR1YWwg
fkVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRW5k
VHJhbnNwYXJlbmN5TGF5ZXI8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3RydWN0IENsaXAg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKLSAg
ICAgICAgdmlydHVhbCB+Q2xpcCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUo
UGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDYWlybzo6Y2xpcChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVy
cmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkNsaXA8PlxuIjsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwPihyZWN0
KSk7Ci0KKyAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7CisgICAgVmVjdG9yPGNhaXJvX2ds
eXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7CiAgICAgewotICAgICAgICBhdXRvJiBzdGF0
ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmNsaXBCb3VuZHMuaW50ZXJz
ZWN0KHN0YXRlLmN0bS5tYXBSZWN0KHJlY3QpKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc3Ry
dWN0IENsaXBPdXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9h
dFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKLQotICAgICAg
ICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkNsaXBPdXQ8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxDbGlwT3V0PihyZWN0KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHN0cnVjdCBDbGlwT3V0IGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aD4gewotICAgICAgICB2
aXJ0dWFsIH5DbGlwT3V0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIENhaXJvOjpjbGlwT3V0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4o
KSk7CisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNb
aV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNl
dCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAg
dHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OworICAgIGFw
cGx5U3RhdGVDaGFuZ2VzKCk7CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwT3V0Pihw
YXRoKSk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0
cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBv
aW50LAorICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5wbGF0Zm9ybURh
dGEoKS5zY2FsZWRGb250KCkpLAorICAgICAgICBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwg
V1RGTW92ZShjYWlyb0dseXBocyksIHhPZmZzZXQsIHRleHREcmF3aW5nTW9kZSgpLAorICAgICAg
ICBzdHJva2VUaGlja25lc3MoKSwgc2hhZG93T2Zmc2V0KCksIHNoYWRvd0NvbG9yKCksIGZvbnRT
bW9vdGhpbmcpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBzdHJ1Y3QgQ2xpcFBhdGggZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBXaW5kUnVsZT4gewot
ICAgICAgICB2aXJ0dWFsIH5DbGlwUGF0aCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd0xp
bmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0
UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yPiB7CisgICAgICAgIHZp
cnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAg
ewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRl
eHQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+
KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkNsaXBQYXRoPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkRyYXdMaW5lc0ZvclRleHQ8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwUGF0aD4ocGF0aCwgY2xpcFJ1bGUpKTsKLQotICAgIHsK
LSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0
ZS5jbGlwQm91bmRzLmludGVyc2VjdChzdGF0ZS5jdG0ubWFwUmVjdChwYXRoLmZhc3RCb3VuZGlu
Z1JlY3QoKSkpOwotICAgIH0KLX0KKyAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOwogCi1JbnRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBj
b25zdAotewotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChzdGF0ZS5jdG1JbnZlcnNlLm1hcFJlY3Qoc3RhdGUuY2xpcEJv
dW5kcykpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlQ29sb3IoKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBzdHJ1Y3QgQ2xpcFRvSW1hZ2VCdWZmZXIgZmluYWw6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
LCBGbG9hdFJlY3Q+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcFRvSW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7CisgICAgc3RydWN0IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlPiB7CisgICAgICAgIHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9
IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsaXBU
b0ltYWdlQnVmZmVyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwg
YXJnPDE+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CiAgICAgICAg
IH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcFRvSW1hZ2VCdWZmZXI8PlxuIjsK
KyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjw+
XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZm
ZXIuY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICBpZiAoIWltYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpKQotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlw
VG9JbWFnZUJ1ZmZlcj4obmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QpKTsK
LX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KQoteworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpKTsKIH0KIAogRmxv
YXRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKQEAgLTExMDYs
MTIgKzk2MSw0IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5p
cXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJiBjb21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5h
cHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIC8vIEZJWE1FOiBOb3Qg
aW1wbGVtZW50ZWQuCi0gICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxh
eWVyLCBkZXN0aW5hdGlvbik7Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5o
CmluZGV4IDgzYzZkMjdkNmVhMzZjNzliZWJkNzgyNWY5OWI3YzQzOTA4ZWU1NGIuLmFmNDc4ZmM0
MzdlOGI0ZWU5N2E3YzAxYjc3YmMyMmEwMzU0NDc5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDc4ICs0Miw1OCBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0
cjsgfQogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBvdmVycmlkZTsKKyAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3Rv
cmUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOworICAgIHZv
aWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xpcChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xp
cE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwVG9JbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxv
YXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29s
b3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNv
bXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Ci0g
ICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBmaWxs
RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAg
IHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBkcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViQ29yZTo6Rm9udFNtb290
aGluZ01vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKFdl
YkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJu
KFdlYkNvcmU6Ok5hdGl2ZUltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0
IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJv
a2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRy
YXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKICAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hB
cnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOworCiAgICAgdm9pZCBk
cmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25z
dCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBv
dmVycmlkZTsKLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29y
ZTo6UGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0
aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdl
YkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dGluYXRpb24pIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBXZWJDb3Jl
OjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6
OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgV2ViQ29yZTo6
U3Ryb2tlU3R5bGUpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSkgb3ZlcnJpZGU7CiAKICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGFwcGVuZChzdGQ6OnVuaXF1ZV9w
dHI8UGFpbnRpbmdPcGVyYXRpb24+JiYpOwogICAgIFBhaW50aW5nT3BlcmF0aW9ucyYgbV9jb21t
YW5kTGlzdDsKLQotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSBjdG07Ci0gICAgICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG1JbnZlcnNl
OwotICAgICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY2xpcEJvdW5kczsKLSAgICB9OwotICAgIFZl
Y3RvcjxTdGF0ZSwgMzI+IG1fc3RhdGVTdGFjazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIE5pY29z
aWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3
R2x5cGhzUmVjb3JkZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKaW5kZXggNWQ2NmViNzJhZDEzYzI0ZGFjMDk1
YTk0NWY2MTRhNmY1NTIyMjQ5Mi4uMDdjMDMzOWY1OGJmMzJjN2Q1ZjhmODE3ZGJkZDNlYjdmMWVl
NzM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Ry
YXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKQEAgLTI5LDE3ICsyOSwxOCBAQAog
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGlj
c0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29u
dGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlw
aHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1
Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9u
Q29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9k
ZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIG1fc21vb3RoaW5nTW9k
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKaW5kZXggYzE5ZTc0MTU1N2MzMDhj
OTQxZTRlZjcxNWUzZGI0NjU5NGQxODViNi4uMmNkNzg2NWVjYTgyOWViNDU3ODBlOWZiMGU3MjQ3
YTM3MTJiY2MzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDR1dpbi5jcHAKQEAgLTE3NiwyNSArMTc2LDIyIEBAIHZvaWQgRm9udENhc2NhZGU6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQm
IGZvbnQsCiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEu
c2l6ZSgpKTsKICAgICBGb250Q2FzY2FkZTo6c2V0Q0dDb250ZXh0Rm9udFJlbmRlcmluZ1N0eWxl
KGNnQ29udGV4dCwgZm9udC5wbGF0Zm9ybURhdGEoKS5pc1N5c3RlbUZvbnQoKSwgZmFsc2UsIGZv
bnQucGxhdGZvcm1EYXRhKCkudXNlR0RJKCkpOwogCi0gICAgRmxvYXRTaXplIHNoYWRvd09mZnNl
dDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGdy
YXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dD
b2xvcik7CisgICAgYXV0byBkcm9wU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LmRyb3BTaGFkb3co
KTsKIAotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3
aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlk
KCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRp
b25PckZsaXBwZWQoKSk7CisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBncmFwaGljc0NvbnRl
eHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIGRyb3BTaGFk
b3cuY29sb3IuaXNWYWxpZCgpICYmICFkcm9wU2hhZG93LmJsdXJSYWRpdXMgJiYgKCFncmFwaGlj
c0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0
Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CiAgICAgaWYgKGhhc1Np
bXBsZVNoYWRvdykgewogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMg
aW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhl
bCBhbnRpYWxpYXNpbmcuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwog
ICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0g
ICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CisgICAgICAgIENvbG9yIHNo
YWRvd0ZpbGxDb2xvciA9IGRyb3BTaGFkb3cuY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9
IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOworICAgICAgICBmbG9hdCBzaGFkb3dU
ZXh0WCA9IHBvaW50LngoKSArIGRyb3BTaGFkb3cub2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIC8v
IElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBs
aWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgp
ICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsK
KyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBkcm9wU2hhZG93Lm9mZnNl
dC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/
IC0xIDogMSk7CiAgICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHNo
YWRvd1RleHRYLCBzaGFkb3dUZXh0WSk7CiAgICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRo
QWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOwogICAgICAg
ICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIENHQ29udGV4
dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0
aCgpICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIHNoYWRvd09mZnNl
dC5oZWlnaHQoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250
ZXh0LCBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9mZnNldC53aWR0aCgpICsgZm9udC5zeW50aGV0
aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIGRyb3BTaGFkb3cub2Zmc2V0LmhlaWdodCgpKTsK
ICAgICAgICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBn
bHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMpOwogICAgICAgICB9CiAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKQEAgLTIwOCw3ICsyMDUsNyBAQCB2b2lk
IEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBjb25zdCBGb250JiBmb250LAogICAgIH0KIAogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCi0g
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVy
LCBzaGFkb3dDb2xvcik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXREcm9wU2hhZG93KGRy
b3BTaGFkb3cpOwogCiAgICAgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0Nv
bnRleHQsIG9sZEZvbnRTbW9vdGhpbmdTdHlsZSk7CiAgICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJp
eChjZ0NvbnRleHQsIHNhdmVkTWF0cml4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggM2NmNzQ2MGM4
MGUzYmUxZDViYTNmMGNlZDdjMTliMjVkZjI5YWJmMi4uNzg1ZTk0YmVjZjA3Y2Q0YTg0YzljMzRk
OWNlY2M4Mzg1N2UwNjk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTI5MiwxMiArMjkyLDEyIEBA
IHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCiAgICAgRmxvYXRSZWN0IGZyYW1lUmVjdCgyLCAyLCBzaXplLndpZHRoKCkgLSAz
LCBzaXplLmhlaWdodCgpIC0gMyk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcjo6
d2hpdGUpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDMpOwotICAgIGNvbnRleHQu
c2V0TGluZURhc2gobV9kYXNoV2lkdGhzLCAwKTsKKyAgICBjb250ZXh0LnNldExpbmVEYXNoKHsg
bV9kYXNoV2lkdGhzLCAwIH0pOwogICAgIG1fcGF0aC5hZGRSZWN0KGZyYW1lUmVjdCk7CiAgICAg
bV9wYXRoLmNsb3NlU3VicGF0aCgpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChtX3BhdGgpOwog
Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaChEYXNoQXJyYXkoKSwgMCk7CisgICAgY29udGV4dC5z
ZXRMaW5lRGFzaCh7IHsgfSwgMCB9KTsKICAgICBtX3BhdGguY2xlYXIoKTsKICAgICBtX3BhdGgu
bW92ZVRvKEZsb2F0UG9pbnQoMCwgYm94VG9wICsgYm94U2l6ZSkpOwogICAgIG1fcGF0aC5hZGRM
aW5lVG8oRmxvYXRQb2ludChzaXplLndpZHRoKCksIGJveFRvcCArIGJveFNpemUpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcApp
bmRleCAxYjE4MmExZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0M2I3NjdkLi5lODBmMmVlODkx
OTM5MTQ0MThlODc4YmYwYTRhMjg0MGVlNjg5ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBA
IGJvb2wgQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50
KEZyYW1lVmlldyYgZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5zZXRQYWludEJlaGF2aW9yKFBh
aW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CiAgICAgZnJhbWVWaWV3LnNl
dFBhaW50c0VudGlyZUNvbnRlbnRzKHRydWUpOwogCi0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBj
aGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBj
aGVja2VyQ29udGV4dChmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSwgTnVs
bEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250
ZW50ZnVsUGFpbnQpOwogICAgIGZyYW1lVmlldy5wYWludChjaGVja2VyQ29udGV4dCwgZnJhbWVW
aWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCkpOwogCiAgICAgZnJhbWVWaWV3LnNldFBh
aW50c0VudGlyZUNvbnRlbnRzKG9sZEVudGlyZUNvbnRlbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCmluZGV4IGM5YWIyMTc2MTQxZmE3YTMz
OWEyMDk3YjNhYmY5NzY1MDc4N2U0ZjEuLjRiZmY4ZDAwODM5MjUxNGNiZTYyY2E5NWQ0ZTc0M2Zj
MTk3ZjAxOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lFbGxp
cHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lz
Qm94LmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIExlZ2FjeUVsbGlwc2lzQm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmcwogICAgIGJv
b2wgc2V0U2hhZG93ID0gZmFsc2U7CiAgICAgaWYgKGxpbmVTdHlsZS50ZXh0U2hhZG93KCkpIHsK
ICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBsaW5lU3R5bGUuY29sb3JCeUFwcGx5aW5nQ29s
b3JGaWx0ZXIobGluZVN0eWxlLnRleHRTaGFkb3coKS0+Y29sb3IoKSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KExheW91dFNpemUobGluZVN0eWxlLnRleHRTaGFkb3coKS0+eCgpLnZhbHVl
KCksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnkoKS52YWx1ZSgpKSwgbGluZVN0eWxlLnRleHRT
aGFkb3coKS0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IpOworICAgICAgICBjb250ZXh0
LnNldERyb3BTaGFkb3coeyBMYXlvdXRTaXplKGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPngoKS52
YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCkudmFsdWUoKSksIGxpbmVTdHlsZS50
ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAgICBz
ZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMjRjODJjOWQ2YmQ0M2Y3NGJhMDVhYjVh
Yzc2NzkzZDc1ZDE1ZTU3Ny4uOGQ5N2QyNTcxZTI0NTNkZjE5MjhiZGU2Yzc3Yzc2MzE1ZmJjODgy
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCkBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JC
YWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3QKICAgICAg
ICAgYm94U2hhZG93ID0gYm94U2hhZG93LT5uZXh0KCk7CiAKICAgICBGbG9hdFNpemUgc2hhZG93
T2Zmc2V0KGJveFNoYWRvdy0+eCgpLnZhbHVlKCksIGJveFNoYWRvdy0+eSgpLnZhbHVlKCkpOwot
ICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKS52
YWx1ZSgpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9y
KCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpM
ZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICBjb250ZXh0LnNldERyb3BT
aGFkb3coeyBzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUu
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93
LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93
UmFkaXVzTW9kZTo6RGVmYXVsdCB9KTsKIH0KIAogSW50ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmNob29zZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCB2b2lkKiBsYXllciwgY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKQEAgLTIwODcsNyArMjA4Nyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gbGluZURhc2ggPSBEYXNoQXJyYXk6
OmZyb20oZGFzaExlbmd0aCwgZ2FwTGVuZ3RoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRMaW5lRGFzaChXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCk7CisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExl
bmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5n
IHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVzIHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTI0
NTYsNyArMjQ1Niw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9h
dFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhl
bChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNl
UGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAg
ICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4g
LSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAg
Y29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgICAgICBjb250ZXh0
LnNldERyb3BTaGFkb3coeyBzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpM
ZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH0pOwogCiAgICAgICAgICAgICBpZiAo
aGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFx
dWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBz
YXZlcyB0aW1lCkBAIC0yNTU4LDcgKzI1NTgsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwog
ICAgICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCiAgICAgICAgICAgICBh
dXRvIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSByb3VuZFNpemVUb0RldmljZVBpeGVscyhzaGFkb3dP
ZmZzZXQsIGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93
KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+
aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1Jh
ZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsg
c25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5p
c1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFk
aXVzTW9kZTo6RGVmYXVsdCB9KTsKICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUocGl4ZWxTbmFwcGVkT3V0ZXJSZWN0LCBwaXhlbFNuYXBwZWRIb2xlUmVjdCwgZmls
bENvbG9yKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCmluZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2MjMyMWZlZWQ5YjY4NmMzY2Qu
LjhjZjk2MWUwYmMyMzY0ZTk2MmNkYTg4MWY4NTllNGYzMWEzYzk4M2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjI1MywxNCArMjI1MywxNCBAQCB2b2lk
IFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IExheWVyUAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgICAg
IGJvb2wgdXNlc0NvbXBvc2l0ZU9wZXJhdGlvbiA9IGhhc0JsZW5kTW9kZSgpICYmICEocmVuZGVy
ZXIoKS5pc0xlZ2FjeVNWR1Jvb3QoKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJW
aWV3TGF5ZXIoKSk7CiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAg
ICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVy
YXRpb24oKSwgYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVN
b2RlKHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKCkgfSk7CiAjZW5k
aWYKIAogICAgICAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIocmVuZGVyZXIoKS5v
cGFjaXR5KCkpOwogCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICAgICAgaWYgKHVz
ZXNDb21wb3NpdGVPcGVyYXRpb24pCi0gICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7
CisgICAgICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBjb250ZXh0LmNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICNlbmRpZgogCiAjaWZkZWYgUkVW
RUFMX1RSQU5TUEFSRU5DWV9MQVlFUlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggNWY5OGI5MTI0YTM0OWFjNzU1NzlmNzExMzVlZTBm
MzhhYmI0ZjEyZC4uM2UyZTZiZjFkZTVkNTRlYjM4ZDkyN2E1MWYwN2M4OTEwYWU2YzFiZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAg
LTE4MzEsNyArMTgzMSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJl
Z2lvbigpCiAgICAgfTsKIAogICAgIGF1dG8gdXBkYXRlRXZlbnRSZWdpb25Gb3JMYXllciA9IFsm
XShHcmFwaGljc0xheWVyJiBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgbnVsbENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKKyAgICAgICAgYXV0byBkaXJ0eVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQ
b2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigpKSwgZ3JhcGhpY3NMYXllci5z
aXplKCkpOworICAgIAorICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KGRp
cnR5UmVjdCwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpO
b25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRB
QkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRp
dGFibGVSZWdpb24oKSkKQEAgLTE4NTMsOCArMTg1NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVFdmVudFJlZ2lvbigpCiAgICAgICAgICAgICBldmVudFJlZ2lvbkNvbnRleHQu
dW5pdGUoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoLWxheWVyT2Zmc2V0LCBncmFwaGljc0xh
eWVyLnNpemUoKSkpLCByZW5kZXJlcigpLnN0eWxlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
YXV0byBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KGdy
YXBoaWNzTGF5ZXIub2Zmc2V0RnJvbVJlbmRlcmVyKCkpLCBncmFwaGljc0xheWVyLnNpemUoKSkp
OwotICAgICAgICBwYWludEludG9MYXllcigmZ3JhcGhpY3NMYXllciwgbnVsbENvbnRleHQsIGRp
cnR5UmVjdCwgeyB9LCAmZXZlbnRSZWdpb25Db250ZXh0KTsKKyAgICAgICAgcGFpbnRJbnRvTGF5
ZXIoJmdyYXBoaWNzTGF5ZXIsIG51bGxDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVj
dCksIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4dCk7CiAKICAgICAgICAgZXZlbnRSZWdpb24udHJh
bnNsYXRlKHRvSW50U2l6ZShsYXllck9mZnNldCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggMzBjZDM0M2VhN2RmOTE2OGNjM2NkZTQ3ZGJlZjhm
NzU5ZTg4ZjczMS4uMjU2ZmM3NDk1NmRhMzM4NmE1NGQzNTJkZTExYjZmZjczNjY5YTFmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtNjA1LDcgKzYw
NSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50VGV4dEZpZWxkSW5uZXJTaGFkb3coY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0CiAgICAgY29uc3QgRmxvYXRTaXplIGlubmVy
U2hhZG93T2Zmc2V0IHsgMCwgNSB9OwogICAgIGNvbnN0ZXhwciBhdXRvIGlubmVyU2hhZG93Qmx1
ciA9IDEwLjBmOwogICAgIGF1dG8gaW5uZXJTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4g
eyAwLCAwLCAwLCAwLjA0ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KGlubmVyU2hhZG93T2Zm
c2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IGlubmVyU2hhZG93T2Zmc2V0LCBpbm5lclNoYWRvd0JsdXIsIGlubmVyU2hh
ZG93Q29sb3IgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAog
ICAgIFBhdGggaW5uZXJTaGFkb3dQYXRoOwpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBQ
YWludEluZm8mIHBhaW4KICAgICAvLyBVc2UgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiwg
YmVjYXVzZSBpdCBjYWxjdWxhdGVzIHRoZSBibHVyIHJhZGl1cyBpbiBjb250ZXh0IHNwYWNlLAog
ICAgIC8vIHJhdGhlciB0aGFuIHNjcmVlbiBzcGFjZS4KICAgICBjb25zdGV4cHIgYXV0byBzaGFk
b3dDb2xvciA9IENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYUJ5dGUoMjYpOwotICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRTaGFkb3coRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yKTsKKyAg
ICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFk
b3dDb2xvciB9KTsKIAogICAgIC8vIFRoZSBjaXJjbGUgbXVzdCBoYXZlIGFuIGFscGhhIGNoYW5u
ZWwgdmFsdWUgb2YgMSBmb3IgdGhlIHNoYWRvdyBjb2xvciB0byBhcHBlYXIuCiAgICAgQ0dGbG9h
dCBjaXJjbGVDb2xvckNvbXBvbmVudHNbNF0gPSB7IDAsIDAsIDAsIDEgfTsKQEAgLTIyNzMsNyAr
MjI3Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hh
ZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjCiAKICAgICBib29sIGlzRW1wdHkgPSAh
c3RhdGVzLmNvbnRhaW5zQW55KHsgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpDaGVja2VkLCBDb250
cm9sU3RhdGVzOjpTdGF0ZXM6OkluZGV0ZXJtaW5hdGUgfSk7CiAgICAgYXV0byBmaXJzdFNoYWRv
d0NvbG9yID0gRGlzcGxheVAzPGZsb2F0PiB7IDAsIDAsIDAsIGlzRW1wdHkgPyAwLjA1ZiA6IDAu
MWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFk
b3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBp
bm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBmaXJzdFNoYWRvd0NvbG9yIH0pOwog
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVy
U2hhZG93UGF0aDsKQEAgLTIyOTAsNyArMjI5MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBh
aW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
CiAgICAgY29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogCiAgICAgY29uc3RleHBy
IGF1dG8gc2Vjb25kU2hhZG93Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMSwgMSwgMSwgMC41
ZiB9OwotICAgIGNvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IDAsIDAgfSwgMSwgc2Vjb25k
U2hhZG93Q29sb3IpOworICAgIGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSB7IDAs
IDAgfSwgMSwgc2Vjb25kU2hhZG93Q29sb3IgfSk7CiAKICAgICBjb250ZXh0LmZpbGxQYXRoKGlu
bmVyU2hhZG93UGF0aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KaW5kZXggMDEwZWNiYWVkODdhNzNhNDIwYWZiOTdlOGU4MGZlYTYzNzlmZWQzZS4uMTBk
YzkwZTU3ZTVhZTBmNDI1YTBkYWFhMzY0ZjgxNGU0NDk0OTkwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjgxNiw3ICsyODE2LDcgQEAgc3RhdGlj
IHZvaWQgcGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXIoY29uc3QgUmVuZGVyQXR0YWNo
bWVudCYgYXR0YWNobWVudCwKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHBsYWNlaG9sZGVy
Qm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQ
bGFjZWhvbGRlckJvcmRlcldpZHRoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKERhc2hl
ZFN0cm9rZSk7Ci0gICAgY29udGV4dC5zZXRMaW5lRGFzaCh7YXR0YWNobWVudFBsYWNlaG9sZGVy
Qm9yZGVyRGFzaExlbmd0aH0sIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IGF0dGFj
aG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGggfSwgMCB9KTsKICAgICBjb250ZXh0LnN0
cm9rZVBhdGgoYm9yZGVyUGF0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXggNjc1NTY4YWZmNjExOGYwMTNiZDFk
NGY1NWE2YzM2NGZhOGFmMzhlOC4uODMwOWIyZjhkNGEzMWZhMDNiMWFiZjg0MzlkYTBmM2VmMTYy
ODQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9u
UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHREZWNvcmF0aW9u
UGFpbnRlci5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFRleHREZWNvcmF0aW9uUGFpbnRl
cjo6cGFpbnRCYWNrZ3JvdW5kRGVjb3JhdGlvbnMoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgYwog
ICAgICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPmNvbG9yKCk7CiAgICAgICAg
ICAgICBpZiAobV9zaGFkb3dDb2xvckZpbHRlcikKICAgICAgICAgICAgICAgICBtX3NoYWRvd0Nv
bG9yRmlsdGVyLT50cmFuc2Zvcm1Db2xvcihzaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQp
LCBzaGFkb3ctPnJhZGl1cygpLnZhbHVlKCksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIG1f
Y29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd1gsIHNoYWRvd1kgLSBleHRy
YU9mZnNldCksIHNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc2hhZG93Q29sb3IgfSk7CiAgICAg
ICAgICAgICBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCA4ODVkODI2ZWU5ZTc5NmY0YjVjNWI1
ODMzZjcxYTAyOGM0NTQxYTdhLi5mZTg4NjljMTllNWY4ZDQzYjdmYTE2ZTQwMWI0ZmJjNmRjZjdl
ZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTc0LDcg
Kzc0LDcgQEAgU2hhZG93QXBwbGllcjo6U2hhZG93QXBwbGllcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywKICAgICB9CiAKICAgICBpZiAoIW1fYXZv
aWREcmF3aW5nU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIGNvbnRleHQuc2V0
RHJvcFNoYWRvdyh7IHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVlKCksIHNoYWRvd0Nv
bG9yIH0pOwogfQogCiBpbmxpbmUgYm9vbCBTaGFkb3dBcHBsaWVyOjppc0xhc3RTaGFkb3dJdGVy
YXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5j
cHAKaW5kZXggN2VkNTM3YzkyNzkzNzcwZjQ0ODhhZTI5ZGY0MDcyN2Q3ZWIxYTNhOS4uNmM3MzBl
ZjA3ZTQ4YzdlY2Y4YzQwZTM3ZTAwMzQ1Y2ZhYjU2YzY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCkBAIC02OSw3ICs2OSw3IEBAIEZsb2F0
UmVjdCBSZW5kZXJTVkdQYXRoOjpjYWxjdWxhdGVVcGRhdGVkU3Ryb2tlQm91bmRpbmdCb3goKSBj
b25zdAogc3RhdGljIHZvaWQgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQogewogICAgIGlmIChhdXRvIGdyYWRpZW50ID0gY29udGV4dC5zdHJva2VHcmFkaWVu
dCgpKQotICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudCgqZ3JhZGllbnQsIGNvbnRleHQu
c3RhdGUoKS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgY29udGV4dC5z
ZXRGaWxsR3JhZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0cm9rZVNwYWNlVHJhbnNmb3JtKCkp
OwogICAgIGVsc2UgaWYgKFBhdHRlcm4qIHBhdHRlcm4gPSBjb250ZXh0LnN0cm9rZVBhdHRlcm4o
KSkKICAgICAgICAgY29udGV4dC5zZXRGaWxsUGF0dGVybigqcGF0dGVybik7CiAgICAgZWxzZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAK
aW5kZXggY2MzOGVjNzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4uYjY1ODY4ZDFi
ZDM0YzkwZDRiYmZkZDQ3N2FkMmM3NDI4MmEwNTZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC01MDEsMTAgKzUwMSwxMiBA
QCB2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNhblNl
dExpbmVEYXNoKQotICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaChkYXNoQXJyYXksIGxl
bmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tlRGFzaE9mZnNldCgpKSAq
IHNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goeyBXVEZNb3Zl
KGRhc2hBcnJheSksIGxlbmd0aENvbnRleHQudmFsdWVGb3JMZW5ndGgoc3ZnU3R5bGUuc3Ryb2tl
RGFzaE9mZnNldCgpKSAqIHNjYWxlRmFjdG9yIH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICB9CisKKyAgICBjb250
ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6c3R5
bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
cmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJp
bmdDb250ZXh0LmNwcAppbmRleCAyZmI4ZjMzYTg3MGRmY2NlYjYyZTE0OTY1NmIxNDQzNzIyZWJl
YTJkLi5mNTc5ZTVhNzVmZTkxMGY2ZTViNThhOWFlZmI2ODM1ODk2MjIxMGU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAK
QEAgLTExNSwxMiArMTE1LDEyIEBAIHZvaWQgU1ZHUmVuZGVyaW5nQ29udGV4dDo6cHJlcGFyZVRv
UmVuZGVyU1ZHQ29udGVudChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUGFpCiAgICAgICAgIGlm
IChvcGFjaXR5IDwgMSB8fCBoYXNCbGVuZE1vZGUgfHwgaXNvbGF0ZU1hc2tGb3JCbGVuZGluZyB8
fCBoYXNJc29sYXRpb24pIHsKIAogICAgICAgICAgICAgaWYgKGhhc0JsZW5kTW9kZSkKLSAgICAg
ICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBvc2l0ZU9wZXJhdGlvbiht
X3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBzdHlsZS5ibGVuZE1v
ZGUoKSk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3Np
dGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgc3R5
bGUuYmxlbmRNb2RlKCkgfSk7CiAKICAgICAgICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCku
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgICAgICAgICAgaWYgKGhhc0Js
ZW5kTW9kZSkKLSAgICAgICAgICAgICAgICBtX3BhaW50SW5mby0+Y29udGV4dCgpLnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BhaW50SW5mby0+Y29udGV4dCgpLmNvbXBvc2l0ZU9wZXJhdGlvbigp
LCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRl
eHQoKS5zZXRDb21wb3NpdGVNb2RlKHsgbV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVP
cGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwgfSk7CiAKICAgICAgICAgICAgIG1fcmVuZGVy
aW5nRmxhZ3MgfD0gRW5kT3BhY2l0eUxheWVyOwogICAgICAgICB9CkBAIC0yNzMsNyArMjczLDcg
QEAgYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKQogCiAgICAgLy8gSW52YWxpZGF0ZSBhbiBleGlzdGluZyBi
dWZmZXIgaWYgdGhlIHNjYWxlIGlzIG5vdCBjb3JyZWN0LgogICAgIGlmIChpbWFnZUJ1ZmZlcikg
ewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWludEluZm8tPmNvbnRl
eHQoKS5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250
ZXh0KCkuZ2V0Q1RNKCk7CiAgICAgICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0JveCA9IGV4
cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXplIGJ1ZmZl
clNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lkdGgoKSAq
IHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3Vu
ZGluZ0JveC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKICAgICAgICAgaWYgKGJ1
ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCA0ZGQ3ZjgwZTM3Nzc5ODdkY2I3MGMxYTNjOGE4
N2NkOGE0ZmQ2ZmI5Li5jZDg4YWRmMDhkZGE4MDNiZmQ5M2Y4OTU3NzQwNzY4NmFjNGM1NDYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTI2OSwxNCArMjY5
LDE0IEBAIEltYWdlRHJhd1Jlc3VsdCBTVkdJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjCiAgICAgQVNTRVJUKHZpZXcpOwogCiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0
aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpIH0pOwogICAgIGNvbnRl
eHQuY2xpcChlbmNsb3NpbmdJbnRSZWN0KGRzdFJlY3QpKTsKIAogICAgIGZsb2F0IGFscGhhID0g
Y29udGV4dC5hbHBoYSgpOwogICAgIGJvb2wgY29tcG9zaXRpbmdSZXF1aXJlc1RyYW5zcGFyZW5j
eUxheWVyID0gb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpICE9IENvbXBvc2l0ZU9wZXJhdG9y
OjpTb3VyY2VPdmVyIHx8IG9wdGlvbnMuYmxlbmRNb2RlKCkgIT0gQmxlbmRNb2RlOjpOb3JtYWwg
fHwgYWxwaGEgPCAxOwogICAgIGlmIChjb21wb3NpdGluZ1JlcXVpcmVzVHJhbnNwYXJlbmN5TGF5
ZXIpIHsKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGFscGhhKTsKLSAg
ICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3Np
dGVNb2RlKHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFs
IH0pOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaG9ub3Igb3B0aW9ucy5vcmll
bnRhdGlvbigpLCBzaW5jZSBJbWFnZUJpdG1hcCdzIGZsaXBZIGhhbmRsaW5nIHJlbGllcyBvbiBp
dC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTAwMQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDU0MzgxODJkZGU4NzYzZWJhZDM4ZjE5MmRmNzk1
YWEwNjBiNjUxYmIuLjhkYTM5MGY2ZGE3MGUzNzk1NTBhNTcyZTA5ZTA4NDExODljMmRkZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTc0LDMxICs3NCw2IEBAIHZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgaGFuZGxlSXRlbShEaXNwbGF5
TGlzdDo6UmVzdG9yZSgpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0
OjpUcmFuc2xhdGUoeCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpSb3Rh
dGUoYW5nbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNjYWxlKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNj
YWxlKHNjYWxlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxp
c3Q6OlNldENUTShjdG0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpj
b25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsKLSAgICBoYW5kbGVJ
dGVtKERpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTShjdG0pKTsKLX0KLQogdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpzZXRJbmxpbmVGaWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxDb2xvciYmIGl0ZW0pCiB7CiAgICAgaGFuZGxlSXRlbShXVEZNb3ZlKGl0ZW0pKTsK
QEAgLTEyOCw0MCArMTAzLDE1IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0
U3RhdGUoRGlzcGxheUxpc3Q6OlNldFN0YXRlJiYgaXRlbSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfTsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJbWFnZShpdGVtLnN0YXRlQ2hhbmdl
KCkubV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxl
SW1hZ2UoaXRlbS5zdGF0ZSgpLnN0cm9rZUJydXNoKCkucGF0dGVybigpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGVDaGFuZ2UoKS5t
X3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoIWZpeFBhdHRlcm5UaWxlSW1hZ2Uo
aXRlbS5zdGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgaGFuZGxlSXRl
bShEaXNwbGF5TGlzdDo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYg
aXRlbSkKLXsKLSAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwotfQotCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1p
dCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0KGxpbWl0KSk7
Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93KCkpOwotfQotCiB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewog
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkNsaXAocmVjdCkpOwpAQCAtMzcxLDE0ICszMjEs
OSBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aEdyYWRpZW50
KERpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcgogICAgIGhhbmRsZUl0ZW0oV1RGTW92ZShpdGVt
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6ZmlsbENvbXBvc2l0ZWRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVP
cGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwg
YmxlbmRNb2RlKSk7CisgICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
KHJlY3QsIGNvbG9yKSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlci5oCmluZGV4IDNiYmFmNzY1ZDA1ZjQ0YWJmNGQ5NjFlNzY2Y2U2NTQ2OThl
ZGUyOTQuLjgxODg5NjZhZmZhNzA5ZTZmZDBhMzFiZmNhNmMzZTcxODU2NWM1OGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtNTksMjAgKzU5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2F2ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlKTsKLSAgICB2b2lkIHNj
YWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgY29uY2F0ZW5hdGVDVE0o
Y29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJik7CiAgICAgdm9pZCBzZXRJbmxpbmVGaWxs
Q29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciYmKTsKICAgICB2
b2lkIHNldElubGluZVN0cm9rZUNvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVT
dHJva2VDb2xvciYmKTsKICAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CiAgICAg
dm9pZCBzZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUmJik7Ci0gICAgdm9p
ZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApOwotICAgIHZvaWQgc2V0TGluZURhc2goV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoJiYpOwotICAgIHZvaWQgc2V0TGluZUpvaW4o
V2ViQ29yZTo6TGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0gICAg
dm9pZCBjbGVhclNoYWRvdygpOwogICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAg
dm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKQEAgLTk3LDgg
Kzg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jik7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhDb2xvcihjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoR3JhZGll
bnQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50JiYpOwotICAgIHZv
aWQgZmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5k
TW9kZSk7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogICAgIHZvaWQgZmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KaW5kZXggMjgwMmZmZThmODM5N2Mw
ZWQ0ZGYxMjFhMDE3ZmU3ODEwOGZmNmMyMC4uNDE0YzMxYTEzMjBjMGIyZTc4NmJjOGQ5ZjY1OTgx
MDJkODcwZjQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIubWVzc2FnZXMu
aW4KQEAgLTI1LDQ3ICsyNSwzNSBAQAogbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgU2F2ZSgpCiAgICAgUmVzdG9yZSgpCi0g
ICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgUm90YXRlKGZsb2F0IGFuZ2xlKQot
ICAgIFNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZSBzY2FsZSkKLSAgICBTZXRDVE0oV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIGN0bSkKLSAgICBDb25jYXRlbmF0ZUNUTShXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gY3RtKQorCiAgICAgU2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVGaWxsQ29sb3IgaXRlbSkKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3IgaXRlbSkKICAgICBTZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIFNldFN0YXRlKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRTdGF0ZSBpdGVtKQotICAgIFNldExpbmVDYXAoZW51bTp1aW50OF90IFdl
YkNvcmU6OkxpbmVDYXAgbGluZUNhcCkKLSAgICBTZXRMaW5lRGFzaChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZURhc2ggaXRlbSkKLSAgICBTZXRMaW5lSm9pbihlbnVtOnVpbnQ4X3QgV2Vi
Q29yZTo6TGluZUpvaW4gbGluZUpvaW4pCi0gICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkK
LSAgICBDbGVhclNoYWRvdygpCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVybigp
CisgICAgQXBwbHlGaWxsUGF0dGVybigpCisjZW5kaWYKKyAgICBBcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKKwogICAgIENsaXAoV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QpCisgICAgQ2xpcFBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoLCBlbnVt
OnVpbnQ4X3QgV2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgQ2xpcE91dChXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQogICAgIENsaXBPdXRUb1BhdGgoV2ViQ29yZTo6
UGF0aCBwYXRoKQotICAgIENsaXBQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90
IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlKQotICAgIERyYXdHbHlwaHMoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHMgaXRlbSkKLSAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNl
SW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6
OkZpbHRlclJlZmVyZW5jZSBmaWx0ZXIpCi0gICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6
OkZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBz
dHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBEcmF3TmF0
aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRp
ZmllciwgV2ViQ29yZTo6RmxvYXRTaXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRl
c3RSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdl
UGFpbnRpbmdPcHRpb25zIG9wdGlvbnMpCi0gICAgRHJhd1N5c3RlbUltYWdlKFJlZjxXZWJDb3Jl
OjpTeXN0ZW1JbWFnZT4gc3lzdGVtSW1hZ2UsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0aW5hdGlv
blJlY3QpCi0gICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3Jl
OjpGbG9hdFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0s
IFdlYkNvcmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBz
dHJ1Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKLSAgICBCZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KQotICAgIERyYXdSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCi0gICAgRHJhd0xpbmUoV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDEsIFdlYkNvcmU6
OkZsb2F0UG9pbnQgcG9pbnQyKQotICAgIERyYXdMaW5lc0ZvclRleHQoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgRHJhd0VsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJl
Y3QpCi0gICAgRHJhd1BhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIERyYXdGb2N1c1JpbmdQ
YXRoKFdlYkNvcmU6OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29y
ZTo6Q29sb3IgY29sb3IpCi0gICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpG
bG9hdFJlY3Q+IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xv
ciBjb2xvcikKKyAgICBDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJl
Y3QgZGVzdGluYXRpb25SZWN0KQorCisgICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0KQorCiAgICAgRmlsbFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAgICAgRmlsbFJl
Y3RXaXRoQ29sb3IoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9y
KQogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhHcmFkaWVudCBpdGVtKQotICAgIEZpbGxDb21wb3NpdGVkUmVjdChXZWJDb3JlOjpGbG9h
dFJlY3QgcmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpD
b21wb3NpdGVPcGVyYXRvciBvcCwgZW51bTp1aW50OF90IFdlYkNvcmU6OkJsZW5kTW9kZSBibGVu
ZE1vZGUpCi0gICAgRmlsbFJvdW5kZWRSZWN0KFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QgcmVj
dCwgV2ViQ29yZTo6Q29sb3IgY29sb3IsIGVudW06dWludDhfdCBXZWJDb3JlOjpCbGVuZE1vZGUg
YmxlbmRNb2RlKQorICAgIEZpbGxSb3VuZGVkUmVjdChXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0
IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJvdW5k
ZWRIb2xlUmVjdCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBGaWxsRWxsaXBzZShXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBG
aWxsTGluZShzdHJ1Y3QgV2ViQ29yZTo6TGluZURhdGEgZGF0YSkKICAgICBGaWxsQXJjKHN0cnVj
dCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC03MywxMSArNjEsMTAgQEAgbWVzc2FnZXMgLT4g
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZDb3VudGVkIFN0cmVhbSB7CiAgICAgRmls
bEJlemllckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRp
ZgogICAgIEZpbGxQYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBGaWxsRWxsaXBzZShXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLSAgICBU
cmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9y
U3BhY2UpCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRp
ZmllciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCisKICAgICBT
dHJva2VSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisKKyAg
ICBTdHJva2VFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogICAgIFN0cm9rZUxpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRhIGRh
dGEpCiAgICAgU3Ryb2tlQXJjKHN0cnVjdCBXZWJDb3JlOjpBcmNEYXRhIGRhdGEpCkBAIC04NSwx
MyArNzIsMzEgQEAgbWVzc2FnZXMgLT4gUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlciBOb3RSZWZD
b3VudGVkIFN0cmVhbSB7CiAgICAgU3Ryb2tlQmV6aWVyQ3VydmUoc3RydWN0IFdlYkNvcmU6OkJl
emllckN1cnZlRGF0YSBkYXRhKQogI2VuZGlmCiAgICAgU3Ryb2tlUGF0aChXZWJDb3JlOjpQYXRo
IHBhdGgpCi0gICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKLSAgICBD
bGVhclJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0jaWYgVVNFKENHKQotICAgIEFwcGx5
U3Ryb2tlUGF0dGVybigpCi0gICAgQXBwbHlGaWxsUGF0dGVybigpCisKKyAgICBEcmF3UmVjdChX
ZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIERyYXdM
aW5lKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50
MikKKworICAgIERyYXdFbGxpcHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIERyYXdQ
YXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKKworICAgIERyYXdGb2N1c1JpbmdQYXRoKFdlYkNvcmU6
OlBhdGggcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29s
b3IpCisgICAgRHJhd0ZvY3VzUmluZ1JlY3RzKFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKKwor
ICAgIERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyPiBzb3VyY2VJbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZs
b2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlIGZpbHRlcikKKyAg
ICBEcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGlt
YWdlQnVmZmVySWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCwg
V2ViQ29yZTo6RmxvYXRSZWN0IHNyY1JlY3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyBvcHRpb25zKQorICAgIERyYXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVt
SW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQor
ICAgIERyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
aW1hZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFNpemUgaW1hZ2VTaXplLCBXZWJDb3JlOjpG
bG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1Y3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3UGF0dGVybihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBXZWJDb3Jl
OjpGbG9hdFJlY3QgZGVzdFJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB0aWxlUmVjdCwgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSwgV2ViQ29yZTo6RmxvYXRQb2ludCBwaGFzZSwg
V2ViQ29yZTo6RmxvYXRTaXplIHNwYWNpbmcsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5n
T3B0aW9ucyBvcHRpb25zKQorI2lmIEVOQUJMRShWSURFTykKKyAgICBQYWludEZyYW1lRm9yTWVk
aWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYkNvcmU6OkZs
b2F0UmVjdCBkZXN0aW5hdGlvbikKICNlbmRpZgotICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgc2NhbGVGYWN0b3IpCisKKyAgICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3R2x5cGhzIGl0ZW0pCisgICAgRHJhd0xpbmVzRm9yVGV4dChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCBpdGVtKQorICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIHN0cnVjdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKKworICAgIENvbnZlcnRUb0x1bWluYW5jZU1hc2soKQorICAgIFRy
YW5zZm9ybVRvQ29sb3JTcGFjZShXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JT
cGFjZSkKICAgICBGbHVzaENvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2Nh
aXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCAyMzNmMWQ3MDFmMzhkNjYwMWI5YTgz
MmIzMDgzNjBjY2Q5ZDExZTgwLi45N2I1ZTYzZjE1YTgzMWZlNGVlMDVhMWFlYjMyODdjYzBiZDcx
OWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRt
YXBDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0
bWFwQ2Fpcm8uY3BwCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWlu
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNjYWxlRmFjdG9yLCBjb25zdCBJCiAK
ICAgICBBU1NFUlQoY29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3Rh
dGUgPSBjb250ZXh0LnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdTdXJmYWNlKCpjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3U3VyZmFjZSgqY29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHN0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSwgc3RhdGUuYWxwaGEoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSk7CiB9CiAKIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
Q2Fpcm9TdXJmYWNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
LmNwcAppbmRleCA4NTc3Y2JiZGU2ZDM5MDFkMzQ3MDc2MWVkMzBmNzlkOThlODJiOThkLi42Y2Zi
YWJjYTdiY2ZiZWRjNTk1NDgzZThlZWIxZDVhYjEyMDk2NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCkBAIC0zMiwzNiArMzIsMjEgQEAKICNpbmNs
dWRlICJSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9NZWRpYVBsYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHkoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkmIHJlbmRlcmluZ0JhY2tlbmQsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0
cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQotICAgIDogRGlzcGxheUxpc3Q6
OlJlY29yZGVyKHsgfSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0ds
eXBocykKKyAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcihpbml0aWFsQ2xpcCwgaW5pdGlhbENU
TSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQogICAgICwgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50
aWZpZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpCiAgICAgLCBt
X2ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKQogICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kKHJlbmRl
cmluZ0JhY2tlbmQpCiB7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKGNv
bnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2Zvcm1Ub0NvbG9y
U3BhY2UoY29sb3JTcGFjZSkpOwotfQotCiBSZW5kZXJpbmdNb2RlIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXIgPyBtX2ltYWdlQnVmZmVyLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOwpAQCAtNzcsMzEgKzYyLDYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZFJlc3RvcmUoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFuc2xhdGUo
eCwgeSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
Um90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlJvdGF0ZShhbmdsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTY2FsZShzY2FsZSkp
OwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldENUTSh0cmFuc2Zvcm0pKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENvbmNhdGVuYXRlQ1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNvbmNhdGVuYXRlQ1RNKHRyYW5zZm9ybSkpOwotfQot
CiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0SW5saW5lRmls
bENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldElubGluZUZpbGxDb2xvcihEaXNwbGF5TGlzdDo6U2V0
SW5saW5lRmlsbENvbG9yIHsgY29sb3IgfSkpOwpAQCAtMTE3LDkyICs3NywyNiBAQCB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGZs
b2F0IHRoaWNrbmVzcykKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpTZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZs
YWdzKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNl
dFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSB7IHN0YXRlLCBmbGFncyB9KSk7Ci19Ci0KLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lQ2FwKExpbmVD
YXAgbGluZUNhcCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpTZXRMaW5lQ2FwKGxpbmVDYXApKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgYXJyYXksIGZs
b2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6U2V0TGluZURhc2goRGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIHsgYXJyYXksIGRh
c2hPZmZzZXQgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUpvaW4obGluZUpvaW4pKTsKLX0K
LQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldE1pdGVyTGlt
aXQoZmxvYXQgbGltaXQpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJTaGFkb3coKQotewotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyU2hhZG93KCkpOwotfQotCi12b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Q2xpcChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwT3V0KHJlY3QpKTsKLX0KLQotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xp
cFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGRlc3RpbmF0aW9uUmVjdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkp
OwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6Q2xpcFBhdGgocGF0aCwgcnVsZSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0
ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlk
ZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJjZUltYWdlKQotICAgICAgICBpZGVudGlmaWVyID0gc291
cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpOwotICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdU
Rk1vdmUoaWRlbnRpZmllciksIHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2Uo
UmVmPEZpbHRlcj4geyBmaWx0ZXIgfSkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUgeyBzdGF0ZSB9
KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0
IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBtb2RlKQotewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdHbHlwaHMoRGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHMgeyBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9j
YWxBbmNob3IsIG1vZGUgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIucmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Ci19
Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZl
SW1hZ2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCisj
aWYgVVNFKENHKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFw
cGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRpZmllciwgaW1hZ2VTaXplLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKIH0KIAotdm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1J
bWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RmlsbFBhdHRlcm4o
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdT
eXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KSk7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKIH0K
KyNlbmRpZiAvLyBVU0UoQ0cpCiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVu
dGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIHsKLSAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFnZUlkZW50
aWZpZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0
aW9ucykpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFw
cGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKIH0KIAogdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSkKQEAgLTIxNSw0NCArMTA5LDM0IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIHdpZHRoKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZShwb2ludDEs
IHBvaW50MikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25z
dCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdM
aW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBibG9ja0xvY2F0aW9u
LCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyB9
KSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcChy
ZWN0KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1bGUp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsKIH0KIAotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RWxsaXBzZShyZWN0KSk7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dChyZWN0KSk7CiB9
CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3UGF0aChj
b25zdCBQYXRoJiBwYXRoKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xpcE91dFRvUGF0aChwYXRoKSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9j
dXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpLCBkZXN0aW5hdGlvblJlY3QpKTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29s
b3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGVh
clJlY3QocmVjdCkpOwogfQogCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjcwLDIzICsxNTQsMjIg
QEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0
aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQgeyByZWN0LCBncmFkaWVudCB9KSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBC
bGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBtb2RlKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5kZWRS
ZWN0KHJvdW5kZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBtb2RlKQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpGaWxsUm91bmRlZFJlY3Qocm91bmRlZFJlY3QsIGNvbG9yLCBt
b2RlKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRSZWN0LCBjb2xvcikpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxFbGxpcHNlKHJlY3QpKTsKIH0KIAog
I2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbExpbmUoY29uc3QgTGluZURhdGEmIGRhdGEpCiB7CiAgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbExpbmUoZGF0YSkp
OwpAQCAtMzA2LDcgKzE4OSw2IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhCiB7CiAgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEJlemllckN1cnZlKGRh
dGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKQEAgLTMxNCwyMyArMTk2LDE3IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxQYXRoKHBhdGgpKTsKIH0KIAotdm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpGaWxsRWxsaXBzZShyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBs
YXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OlBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIuaWRlbnRpZmllcigpLCBk
ZXN0aW5hdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OlN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlUmVjdChyZWN0LCB3
aWR0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0
cm9rZUVsbGlwc2UocmVjdCkpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0K
IHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VMaW5lKGNv
bnN0IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OlN0cm9rZUxpbmUoZGF0YSkpOwpAQCAtMzUwLDcgKzIyNiw2IEBAIHZvaWQg
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTdHJva2VCZXppZXJDdXJ2ZShj
b25zdCBCZXppZXJDdXJ2ZURhCiB7CiAgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6U3Ryb2tlQmV6aWVyQ3VydmUoZGF0YSkpOwogfQotCiAjZW5kaWYgLy8gRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmRTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNTgsMzMgKzIzMyw4
NCBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OlN0cm9rZVBhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U3Ryb2tlRWxsaXBzZShyZWN0KSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1JlY3Qo
cmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmRDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsZWFyUmVjdChyZWN0KSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQx
LCBwb2ludDIpKTsKIH0KIAotI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0VsbGlwc2Uo
cmVjdCkpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
QXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5U3Ryb2tlUGF0dGVybigpKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0aChwYXRoKSk7
CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZp
bGxQYXR0ZXJuKCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6QXBwbHlGaWxsUGF0dGVybigpKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcikpOwogfQogCi0jZW5kaWYgLy8gVVNFKENHKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7
Cit9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQordm9pZCBSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihz
Y2FsZUZhY3RvcikpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdl
QnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZp
bHRlciYgZmlsdGVyKQoreworICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyPiBpZGVudGlmaWVyOworICAgIGlmIChzb3VyY2VJbWFnZSkKKyAgICAgICAgaWRlbnRp
ZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3RmlsdGVyZWRJbWFn
ZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJlY3QsIElQQzo6RmlsdGVy
UmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd05hdGl2ZUltYWdlKGltYWdlSWRlbnRp
ZmllciwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworfQorCit2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5
c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
Cit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd1N5
c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpKTsKK30KKwordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3UGF0dGVybihpbWFnZUlkZW50aWZp
ZXIsIGRlc3RSZWN0LCB0aWxlUmVjdCwgdHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cykpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIg
aWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9yTWVkaWEoaWRl
bnRpZmllciwgZGVzdGluYXRpb24pKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9u
dFNtb290aGluZ01vZGUgbW9kZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9udCwg
Z2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsKK30KKwordm9p
ZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCit7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0xpbmVzRm9yVGV4dChEaXNw
bGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dCB7IEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9p
bnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzIH0pKTsKK30KKwor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSYgc3R5bGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOwogfQogCiBi
b29sIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoTmF0
aXZlSW1hZ2UmIGltYWdlKQpAQCAtNDM0LDExICszNjAsNiBAQCBib29sIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUmVzb3VyY2VVc2UoRm9udCYgZm9udCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNo
Q29udGV4dChHcmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKLXsKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRleHQo
aWRlbnRpZmllcikpOwotfQotCiBSZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JT
cGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdNb2RlLCBzdGQ6Om9w
dGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25zdAogewogICAgIGlm
IChVTkxJS0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkgewpAQCAtNDY0LDYgKzM4NSwyMSBAQCBS
ZWZQdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y3JlYXRl
QWxpZ25lZEltYWdlQnVmZmVyKGNvbgogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0
ZVNjYWxlZEltYWdlQnVmZmVyKHJlY3QsIHNjYWxlRmFjdG9yKCksIGNvbG9yU3BhY2UsIHJlbmRl
cmluZ01vZGUsIHJlbmRlcmluZ01ldGhvZCk7CiB9CiAKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5Ojpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkp
OworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6dHJhbnNmb3JtVG9D
b2xvclNwYWNlKGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFj
ZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpUcmFu
c2Zvcm1Ub0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6Zmx1c2hDb250ZXh0KEdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRp
ZmllciBpZGVudGlmaWVyKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkZsdXNoQ29udGV4dChpZGVudGlmaWVyKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCmluZGV4IDliMzNhMDY3ZmQxNmJjY2YxNDA0MmMx
OTc0ZGQ2OTE5NDIyNjI0NjguLmYyYWQ4ZDBhYTQ1ODU4OWFlZTgxOTA3ZDljOTA4OTZkMzRiNmY3
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaApAQCAtMzgs
NiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTsKIAogY2xhc3MgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5IDogcHVibGlj
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlciB7CisgICAgZnJpZW5kIGNsYXNzIFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjsKIHB1YmxpYzoKICAgICBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHkoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29u
c3RydWN0RHJhd0dseXBocyA9IFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIH5SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHko
KSA9IGRlZmF1bHQ7CkBAIC01MCw2MyArNTEsMzkgQEAgcHVibGljOgogICAgIHZvaWQgZmx1c2hD
b250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllcikgZmluYWw7CiAK
IHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNlbmQoVCYmIG1l
c3NhZ2UpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsKLSAg
ICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwg
bV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOwotICAgIH0KLQotICAgIGZyaWVuZCBjbGFz
cyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7Ci0KICAgICBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgcmVjb3JkU2F2ZSgp
IGZpbmFsOwogICAgIHZvaWQgcmVjb3JkUmVzdG9yZSgpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
VHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkUm90YXRl
KGZsb2F0IGFuZ2xlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNjYWxlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0Q1RNKGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ29uY2F0ZW5hdGVDVE0o
Y29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKICAgICB2b2lkIHJlY29y
ZFNldElubGluZUZpbGxDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90PikgZmluYWw7CiAgICAg
dm9pZCByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3JlOjpTUkdCQTx1aW50OF90Pikg
ZmluYWw7CiAgICAgdm9pZCByZWNvcmRTZXRTdHJva2VUaGlja25lc3MoZmxvYXQpIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxv
YXQgZGFzaE9mZnNldCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRMaW5lSm9pbihXZWJDb3Jl
OjpMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0KSBm
aW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyU2hhZG93KCkgZmluYWw7CisgICAgdm9pZCByZWNv
cmRTZXRTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGZpbmFsOwor
CisjaWYgVVNFKENHKQorICAgIHZvaWQgcmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7
CisgICAgdm9pZCByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisjZW5kaWYKKworICAg
IHZvaWQgcmVjb3JkQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9p
ZCByZWNvcmRFbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRD
bGlwKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQ2xp
cFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBmaW5hbDsKICAg
ICB2b2lkIHJlY29yZENsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZENsaXBPdXRUb1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZv
aWQgcmVjb3JkQ2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxl
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNvcmU6
OkltYWdlQnVmZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IFdlYkNvcmU6OkZpbHRlciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhjb25z
dCBXZWJDb3JlOjpGb250JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IFdlYkNvcmU6OkdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGUp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVm
ZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoV2ViQ29y
ZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHJl
Y29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdMaW5l
c0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBX
ZWJDb3JlOjpEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cykgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdQYXRoKGNvbnN0IFdlYkNvcmU6
OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFdl
YkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3JlOjpD
b2xvciYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBUb0ltYWdlQnVm
ZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0
aW5hdGlvblJlY3QpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRDbGVhclJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JikgZmluYWw7CisKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkRmlsbFJlY3RXaXRo
Q29sb3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBm
aW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50JikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRG
aWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2Rl
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVuZE1v
ZGUpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOwogICAgIHZv
aWQgcmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9y
JikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZEZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIHZvaWQg
cmVjb3JkRmlsbExpbmUoY29uc3QgV2ViQ29yZTo6TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lk
IHJlY29yZEZpbGxBcmMoY29uc3QgV2ViQ29yZTo6QXJjRGF0YSYpIGZpbmFsOwpAQCAtMTE0LDkg
KzkxLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3Qg
V2ViQ29yZTo6QmV6aWVyQ3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29y
ZEZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEZp
bGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTdHJva2VS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlTGluZShjb25zdCBXZWJDb3JlOjpMaW5lRGF0YSYpIGZpbmFs
OwogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQXJjKGNvbnN0IFdlYkNvcmU6OkFyY0RhdGEmKSBmaW5h
bDsKQEAgLTEyNCwxMyArMTAyLDI4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRTdHJva2VC
ZXppZXJDdXJ2ZShjb25zdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRp
ZgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVy
bigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworCisg
ICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0xpbmUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb2lu
dDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBXZWJDb3Jl
OjpQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBXZWJDb3Jl
OjpDb2xvciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdl
QnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3Jl
OjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ZpbHRl
cmVkSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgV2ViQ29yZTo6RmlsdGVyJikgZmluYWw7CisgICAgdm9p
ZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bDsKKyAgICB2b2lkIHJlY29yZERyYXdTeXN0ZW1JbWFnZShXZWJDb3JlOjpTeXN0ZW1JbWFnZSYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KTsKKyAgICB2b2lkIHJl
Y29yZERyYXdQYXR0ZXJuKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKSBmaW5hbDsKICNlbmRpZgotICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgV2ViQ29y
ZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3Jl
OjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwogCiAgICAgYm9vbCByZWNv
cmRSZXNvdXJjZVVzZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYpIGZpbmFsOwogICAgIGJvb2wgcmVj
b3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSBmaW5hbDsKQEAgLTE0MSw2ICsx
MzQsMTggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0
ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJD
b3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRl
cmluZ01ldGhvZD4pIGNvbnN0IGZpbmFsOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZl
cj4gY3JlYXRlQWxpZ25lZEltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6UmVuZGVyaW5nTWV0aG9kPikgY29uc3QgZmluYWw7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgc2VuZChUJiYgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghbV9yZW5kZXJpbmdCYWNrZW5kKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBtX25lZWRzRmx1c2ggPSB0cnVlOworICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQtPnNlbmRU
b1N0cmVhbShXVEZNb3ZlKG1lc3NhZ2UpLCBtX2Rlc3RpbmF0aW9uQnVmZmVySWRlbnRpZmllcik7
CisgICAgfQorCisgICAgdm9pZCByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBm
aW5hbDsKKwogICAgIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBtX2Rlc3Rp
bmF0aW9uQnVmZmVySWRlbnRpZmllcjsKICAgICBXZWFrUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVy
PiBtX2ltYWdlQnVmZmVyOwogICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
PiBtX3JlbmRlcmluZ0JhY2tlbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAppbmRl
eCA1NTA4OGFlYjJhYjk5MjAyNDE5OTE3M2IzYWNhMTc5YmQ1MTFiODhmLi41ZTVjZWZmNzAxYzll
NGFlMWQ4YmUzZTU4MTQwZThkYjE0M2ZjNDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0
ay5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNv
bnZlcnRDYWlyb1N1cmZhY2VUb1NoYXJlYWJsZUJpdG1hcChjYWlyb19zdXJmYWMKIAogICAgIEFT
U0VSVChncmFwaGljc0NvbnRleHQtPmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBz
dGF0ZSA9IGdyYXBoaWNzQ29udGV4dC0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1N1cmZhY2Uo
KmdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UsIEludFJlY3QoSW50
UG9pbnQoKSwgaW1hZ2VTaXplKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVNpemUpLCBzdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OmRyYXdTdXJmYWNlKCpncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlU2l6ZSks
IEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VTaXplKSwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpLCBzdGF0ZS5hbHBoYSgpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKICAg
ICByZXR1cm4gYml0bWFwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggMWQ2NDNiNmI0Mjg4ZDA4ZTAzOGM0NjI1
ZDA1NDlkZTY4YWYyYWE3Ny4uMDc5OTNiMzgwZjFlYTdkMzQ5ZGQ3ZWJmYzE2MGM4MDRkYWQ0M2Uz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcApAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmRyYXdS
ZWN0KFBhZ2VPdmVybGF5JiwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvCiAK
ICAgICAvLyBEcmF3IHdoaXRlIGZyYW1lcyBhcm91bmQgdGhlIGhvbGVzLgogICAgIC8vIFdlIGRv
dWJsZSB0aGUgdGhpY2tuZXNzIGJlY2F1c2UgaGFsZiBvZiB0aGUgc3Ryb2tlIHdpbGwgYmUgZXJh
c2VkIHdoZW4gd2UgY2xlYXIgdGhlIGhvbGVzLgotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFk
b3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFkb3dCbHVyUmFk
aXVzLCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3coeyBG
bG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMs
IHNoYWRvd0NvbG9yIH0pOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xv
cjo6d2hpdGUpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVy
V2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiB3aGl0ZUZyYW1lUGF0aHMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5n
ZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91
bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAppbmRleCBmMTZmNzk2ZTA0N2U5OTE5NzJjMGVkMWY0
YWUxMTNjZTE2NTY1YzEwLi40OWUwMGJlMzM3ZWFmZWUxMjkzZWYwNzdhZGY2MTdjZGFlM2Q0YTE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRl
eHRSYW5nZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2
b2lkIFdlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlcjo6ZHJhd1JlY3QoV2ViQ29yZTo6UGFnZU92
ZXJsYXkmLCBXZWJDb3JlOjpHcmFwaAogCiAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBncmFwaGljc0NvbnRl
eHQuc2V0U2hhZG93KFdlYkNvcmU6OkZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZz
ZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNzQ29udGV4
dC5zZXREcm9wU2hhZG93KHsgV2ViQ29yZTo6RmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRv
d09mZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAgICBncmFwaGlj
c0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZm91bmRDb2xvcik7CiAgICAgZ3JhcGhpY3NDb250ZXh0
LnNldFN0cm9rZVRoaWNrbmVzcyhpbmRpY2F0b3JCb3JkZXJXaWR0aCAqIDIpOwogICAgIGZvciAo
YXV0byYgcGF0aCA6IGZvdW5kRnJhbWVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvY2YvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwIGIvU291cmNl
L1dlYktpdExlZ2FjeS9jZi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHAK
aW5kZXggM2U1NTJkZWI5YTllMzRkMDM4MGZkYzM3ZGZkOTRmOTVhN2E5ZGQxYS4uNTU4MDI4Mzgw
OWIxZTg3ZDZhMzYxNjE1MWIxOWZhNmI3YTE3MDkzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9jZi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRDRi5jcHAKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9jZi9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnRD
Ri5jcHAKQEAgLTM1LDEwICszNSw2IEBACiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAot
I2lmIFBMQVRGT1JNKFdJTikgJiYgIWRlZmluZWQoVVNFX0NHKQotI2RlZmluZSBVU0VfQ0cgMQot
I2VuZGlmCi0KIC8vIE5PVEU6IFRoZXNlIG5lZWQgdG8gYXBwZWFyIHVwIHRvcCwgYXMgdGhleSBk
ZWNsYXJlIG1hY3JvcyB1c2VkIGluIHRoZSBKUyBhbmQgV1RGIGhlYWRlcnMuCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNFeHBvcnRNYWNyb3MuaD4KICNpbmNsdWRlIDx3dGYvRXhwb3J0TWFj
cm9zLmg+CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggZTk3YzIwYTRmZjViZTQxZDljMzIwNTdjNTA4MWNmZmM0YjgxYTRhNi4uN2IwNDQwNjdiNjlh
MzVhNmZjZmVlMDE2NjQ2Y2IyOTJhNDUwM2Q3MSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAzLTE1ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
R3JhcGhpY3NDb250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0
Zm9ybSBjb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzc3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3ND
b250ZXh0VGVzdHNDRy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvR3JhcGhpY3NDb250ZXh0VGVzdHND
Ry5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMi0wMy0xNCAgSm9u
YXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW2dpdC13ZWJraXRd
IEhhbmRsZSBjb21wYXJpbmcgVXNlciBhbmQgQ29udHJpYnV0b3IgdG8gTm9uZQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHRUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9j
Zy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5kZXggOGU0MWM1YTczYWUz
Njg0Y2VkZGYxZjk0ZjlmMTcxODk1MzUxNGM5Zi4uZWJlNjQ0ODcxZTI4ZjUxOWNkMjYxMjBiOGE4
Mjc4ODZjMDE5MDJiZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL2NnL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRl
c3RzQ0cuY3BwCkBAIC01NCw3ICs1NCw3IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dFRlc3RzLCBCYXNpYykKICAgICBHcmFwaGljc0NvbnRleHRDRyBwcmltYXJ5Q29udGV4dChwcmlt
YXJ5Q0dDb250ZXh0LmdldCgpKTsKIAogICAgIEluTWVtb3J5RGlzcGxheUxpc3QgZGlzcGxheUxp
c3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIHsgfSwg
RmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAg
UmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRleHQoZGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAw
LCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtOTAs
MTAgKzkwLDEwIEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCYXNpYykK
IFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBUZXh0KQogewogICAgIEluTWVt
b3J5RGlzcGxheUxpc3QgcHJpbWFyeURpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBwcmlt
YXJ5Q29udGV4dChwcmltYXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNvbnRl
eHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHByaW1hcnlD
b250ZXh0KHByaW1hcnlEaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwg
Y29udGV4dEhlaWdodCkpOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBzZWNvbmRhcnlEaXNw
bGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlEaXNw
bGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0
KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dChzZWNvbmRhcnlEaXNw
bGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCkpOwog
CiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29u
ZGFyeUNvbnRleHQpOwogCkBAIC0yMDEsNyArMjAxLDcgQEAgVEVTVChCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0VGVzdHMsIEJvcmRlcnMpCiAgICAgR3JhcGhpY3NDb250ZXh0Q0cgcHJpbWFyeUNv
bnRleHQocHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0
IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlM
aXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7
IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRpc3BsYXlMaXN0LCBGbG9h
dFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7CiAKICAgICBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7
CiAKQEAgLTIyOCw3ICsyMjgsNyBAQCBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0
cywgVHJhbnNmb3JtZWRDbGlwKQogICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQg
PSBwcmltYXJ5Q29udGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlz
dDsKLSAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCB7IH0s
IEZsb2F0UmVjdCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29u
ZGFyeUNvbnRleHRETChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAg
ICAgR3JhcGhpY3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5Q29udGV4dERM
OwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNl
Y29uZGFyeUNvbnRleHQpOwpAQCAtMjg3LDE1ICsyODcsMTUgQEAgVEVTVChCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0VGVzdHMsIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgR3JhcGhpY3ND
b250ZXh0JiBwcmltYXJ5Q29udGV4dCA9IHByaW1hcnlDb250ZXh0Q0c7CiAKICAgICBJbk1lbW9y
eURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250
ZXh0REwoZGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgeyB9KTsK
KyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCBGbG9hdFJl
Y3QoMCwgMCwgMTAwLCAxMDApKTsKICAgICBHcmFwaGljc0NvbnRleHQmIHNlY29uZGFyeUNvbnRl
eHQgPSBzZWNvbmRhcnlDb250ZXh0REw7CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vjb25kYXJ5Q29udGV4dCk7CiAKICAgICBjdHguYXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcigyKTsKIAotICAgIGF1dG8gcHJpbWFyeUNUTSA9IHByaW1hcnlDb250
ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5pdGVs
eUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlD
b250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZTo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgYXV0byBwcmltYXJ5Q1RNID0gcHJpbWFyeUNv
bnRleHQuZ2V0Q1RNKCk7CisgICAgYXV0byBzZWNvbmRhcnlDVE0gPSBzZWNvbmRhcnlDb250ZXh0
LmdldENUTSgpOwogCiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueFNjYWxlKCksIHNlY29uZGFy
eUNUTS54U2NhbGUoKSk7CiAgICAgRVhQRUNUX0VRKHByaW1hcnlDVE0ueVNjYWxlKCksIHNlY29u
ZGFyeUNUTS55U2NhbGUoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvY2cvR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvY2cvR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKaW5kZXggMjQ3
MzU4MGYxOTBlMGZkNjc0YzM2N2RhNDdjOWYxOTJiYTI0ODVlNC4uMjE1YzE3YzY2NTdhZWRhNmE2
ZTJjZDBhZTBjOWM5MjZmM2JkODJiMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL2NnL0dyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcApA
QCAtNTIsNyArNTIsNyBAQCBURVNUKEdyYXBoaWNzQ29udGV4dFRlc3RzLCBEcmF3TmF0aXZlSW1h
Z2VEb2VzTm90TGVha0NvbXBvc2l0ZU9wZXJhdG9yKQogICAgIEdyYXBoaWNzQ29udGV4dENHIGN0
eChjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgRVhQRUNUX0VRKGN0eC5jb21wb3NpdGVPcGVyYXRp
b24oKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIpOwotICAgIEVYUEVDVF9FUShjdHgu
YmxlbmRNb2RlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICBFWFBFQ1RfRVEo
Y3R4LmJsZW5kTW9kZSgpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CiAKICAgICBhdXRvIGdyZWVuUGl4
ZWxDRyA9IGdyZWVuSW1hZ2UoKTsKICAgICBhdXRvIGdyZWVuUGl4ZWxOYXRpdmUgPSBOYXRpdmVJ
bWFnZTo6Y3JlYXRlKGdyZWVuUGl4ZWxDRy5nZXQoKSk7CkBAIC03MSw3ICs3MSw3IEBAIFRFU1Qo
R3JhcGhpY3NDb250ZXh0VGVzdHMsIERyYXdOYXRpdmVJbWFnZURvZXNOb3RMZWFrQ29tcG9zaXRl
T3BlcmF0b3IpCiAgICAgRVhQRUNUX0VRKHByaW1hcnlEYXRhWzJdLCAwKTsKIAogICAgIEVYUEVD
VF9FUShjdHguY29tcG9zaXRlT3BlcmF0aW9uKCksIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyKTsKLSAgICBFWFBFQ1RfRVEoY3R4LmJsZW5kTW9kZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgRVhQRUNUX0VRKGN0eC5ibGVuZE1vZGUoKSwgQmxlbmRNb2RlOjpOb3Jt
YWwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTE3N2VkOTI5
ODBkZDhkNGJhNGJmM2FmM2QxNDEwNmE2MmZkNmI4Ny4uNDc0OGZmNWJiZmM1NGU5OGU5MzUyMzI3
ZjZjMjZiODczMjg3ZDRkYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIyLTAzLTE1ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
R3JhcGhpY3NDb250ZXh0U3RhdGUgc2hvdWxkIGJlIGxhemlseSBhcHBsaWVkIHRvIHRoZSBwbGF0
Zm9ybSBjb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzc3MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1l
eHBlY3RlZC50eHQ6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxs
b3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAppbmRl
eCA1MTFiN2MwYzU0ZDMzMjE2YjdjNmVhZjA0M2E3NWMxNjc2NmQwNDI3Li5kYmY1NGIzZWEyMDRl
MTkyNGJkNDM1ZDUxNzM2ZGM3MzQ3NzAyY2ZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CkBA
IC0xLDE3ICsxLDEzIEBACiAKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCiAo
c2F2ZSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyA1MTIpCi0gIChzaGFkb3ctYmx1ciAx
Mi4wMCkKLSAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQotICAoc2hhZG93LWNv
bG9yICMwMDAwMDApCi0gIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQotKGZpbGwtY29t
cG9zaXRlZC1yZWN0CisgIChjaGFuZ2UtZmxhZ3MgW2Ryb3Atc2hhZG93XSkKKyAgKGRyb3Atc2hh
ZG93CisgICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3ct
Ymx1ciAxMi4wMCkKKyAgICAoc2hhZG93LWNvbG9yICMwMDAwMDApCisgICAgKHNoYWRvd3MtdXNl
LWxlZ2FjeS1yYWRpdXMgMCkpKQorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICg1
MCw1MCkgc2l6ZSAxMDB4MTAwKQotICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVy
YXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0Myw1
MCkgc2l6ZSAxMzR4MTM3KQorICAoY29sb3IgIzAwMDBGRikgZXh0ZW50IGF0ICg0Myw1MCkgc2l6
ZSAxMzR4MTM3KQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAppbmRl
eCAzODZlMzk0MTE4NWYwOWEzYzY4ZWM2YzJhZTg4ZGYxMWM3MGIwYTY5Li41Zjc4YjhjMzUwNWM5
ZTgwMzk5YmQ2MDVhOWJlOTU1YWIwOWI3MDVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3Rl
ZC50eHQKQEAgLTEsMjEgKzEsMTQgQEAKIAotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAy
Mi4wMCkpCi0oY29uY2F0ZW50YXRlLWN0bQotICAoY3RtIHttPSgoMC44NywwLjUwKSgtMC41MCww
Ljg3KSkgdD0oODEuNzAsLTE4LjMwKX0pKQogKHNhdmUpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2Ut
ZmxhZ3MgNTEyKQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRo
PTEwIGhlaWdodD0yMCkKLSAgKHNoYWRvdy1jb2xvciAjMDAwMDAwKQotICAoc2hhZG93cy11c2Ut
bGVnYWN5LXJhZGl1cyAwKSkKLShmaWxsLWNvbXBvc2l0ZWQtcmVjdAorICAoY2hhbmdlLWZsYWdz
IFtjdG0sIGRyb3Atc2hhZG93XSkKKyAgKGN0bSB7bT0oKDAuODcsMC41MCkoLTAuNTAsMC44Nykp
IHQ9KDgxLjcwLDMuNzApfSkKKyAgKGRyb3Atc2hhZG93CisgICAgKHNoYWRvdy1vZmZzZXQgd2lk
dGg9MTAgaGVpZ2h0PTIwKQorICAgIChzaGFkb3ctYmx1ciAxMi4wMCkKKyAgICAoc2hhZG93LWNv
bG9yICMwMDAwMDApCisgICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpKQorKGZpbGwt
cmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKLSAgKGNvbG9y
ICMwMDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQt
bW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCisg
IChjb2xvciAjMDAwMEZGKSBleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1
KQogKHJlc3RvcmUpCi0oc2V0LWN0bQotICAoc2V0LWN0bSB7bT0oKDEuMDAsMC4wMCkoMC4wMCwx
LjAwKSkgdD0oMC4wMCwyMi4wMCl9KSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5
bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGJjMTdiNTExNDk5Zjgy
NTZjOTkyOTBkYWU4NjE0ZDQ4OTRjYWY5Y2MuLjU0NmRjNDkxMmY1MmQwM2E4OWFkOTA2ODU3MmIy
OGVkYzgwMzIyNTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1k
aXNwYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xh
eWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSwxNiArMSwxMiBAQAogCi0odHJhbnNs
YXRlCi0gICh4IDAuMDApCi0gICh5IDAuMDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisoZmls
bC1yZWN0LXdpdGgtY29sb3IKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQotICAoY29s
b3IgIzAwODAwMCkKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVu
ZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKKyAgKGNvbG9yICMw
MDgwMDApIGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAoc2V0LXN0YXRlCi0gIChjaGFu
Z2UtZmxhZ3MgMzI5NjApCi0gIChmaWxsLWNvbG9yICMwMDAwRkYpCi0gIChzdHJva2Utc3R5bGUg
MCkKKyAgKGNoYW5nZS1mbGFncyBbZmlsbC1icnVzaCwgc3Ryb2tlLXN0eWxlLCBzaG91bGQtYW50
aWFsaWFzXSkKKyAgKGZpbGwtYnJ1c2gKKyAgICAoY29sb3IgIzAwMDBGRikpCisgIChzdHJva2Ut
c3R5bGUgTk8tU1RST0tFKQogICAoc2hvdWxkLWFudGlhbGlhcyAwKSkKIChkcmF3LXJlY3QKICAg
KHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKaW5k
ZXggYmI1OTNkMjBmNmRhNjQ4NjI5MmQzNmMwMjIwZTJhOWQ4NzJmODJiOS4uYjg2MDQ4Y2MwOGM5
OTM3ZWYwMDc4MmU3MTA4OWNhY2JjOTljNTMzMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50
eHQKQEAgLTEsMTYgKzEsOCBAQAogcmVjb3JkZWQ6Ci0odHJhbnNsYXRlCi0gICh4IDAuMDApCi0g
ICh5IDAuMDApKQotKGZpbGwtY29tcG9zaXRlZC1yZWN0CisoZmlsbC1yZWN0LXdpdGgtY29sb3IK
ICAgKHJlY3QgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAwMEZGKQotICAo
Y29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBl
eHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCisgIChjb2xvciAjMDAwMEZGKSBleHRlbnQg
YXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAKIHJlcGxheWVkOgogKAogICAoY2xpcCBhdCAoNTEy
LDApIHNpemUgNTEyeDIwMCkKLSh0cmFuc2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMC4wMCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454801</attachid>
            <date>2022-03-15 22:52:14 -0700</date>
            <delta_ts>2022-03-16 00:11:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237728-20220315225213.patch</filename>
            <type>text/plain</type>
            <size>676214</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYxYzkxNGQ3NWIzNDQ1
M2VkMjI3NWQ3MjU2NTY0YTEwYWE0MTEyNS4uNjcwMTcwMzVhMjgzZWVkMzkzM2Y2OTQzNGI5YWI3
NmU2ZTczMTUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1NSBAQAorMjAyMi0wMy0xNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
QXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZy
b21QYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25Q
YWludGVyOjpwYWludEJveFNoYWRvdyBjb25zdCk6CisgICAgICAgICogaHRtbC9DdXN0b21QYWlu
dEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0
VW5jaGVja2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpkcmF3TGF5b3V0U3RpcHBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdMYXlvdXRIYXRjaGluZyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c2V0SXNDQUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6
OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Up
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5h
bExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGlw
Qm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJM
aW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQ6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3
QmlkaVRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRHJhd0dseXBoc1JlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRlY29uc3RydWN0RHJhd0dseXBocyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4dFJ1biBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkaWRBcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNjYWxlRmFjdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3U3lzdGVtSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6VGV4dEJveEl0ZXJhdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6b2Zmc2V0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6aW5jcmVtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6YXRFbmQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpjdXJyZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRvcjo6ZGly
ZWN0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Qm94
SXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjptZXJnZUNoYW5nZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5n
ZXNGcm9tU3RhdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3cgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQ
YXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbFBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdl
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29udGVuZnVsUGFpbnRE
ZXRlY3RlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENv
bnRlbnRmdWxQYWludERldGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6bWVy
Z2VTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptZXJn
ZVN0YXRlRGlmZnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxHcmFkaWVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXR0ZXJuIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFNwYWNlVHJhbnNm
b3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUnVsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdHRlcm4gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VTcGFjZVRyYW5zZm9ybSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlU3R5bGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmxpbmVDYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6bGluZURhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmxpbmVKb2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjptaXRlckxpbWl0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbXBvc2l0ZU1vZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb21wb3NpdGVPcGVyYXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpibGVuZE1vZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJvcFNoYWRvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd09mZnNldCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dDb2xvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyb3BTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1Zpc2libGVTaGFkb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNCbHVycmVkU2hhZG93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzU2hhZG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWxwaGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdN
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkQW50aWFsaWFz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50
aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hvdWxkU21vb3Ro
Rm9udHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91
bGRTbW9vdGhGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3THVtaW5hbmNlTWFz
ayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERyYXdMdW1p
bmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dXNlRGFya0Fw
cGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRV
c2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojppc0luVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVNjYWxlZEltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5h
bExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXND
QUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ0FM
YXllckNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OkdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcjo6fkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6c2F2ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpyZXN0b3JlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OmNvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJT
Y29wZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjpiZWdpbkxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6On5UcmFuc3BhcmVuY3lMYXllclNjb3Bl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcjo6fkdyYXBoaWNz
Q29udGV4dFN0YXRlU3RhY2tDaGVja2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcjo6SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lcjo6fkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Y2xpcEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aGFzT25s
eVByaW1pdGl2ZUNoYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bWVyZ2VEaWZmcyk6CisgICAgICAgIChXZWJDb3JlOjpzdGF0ZUNoYW5nZU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmR1bXAgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmNoYW5nZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmRpZEFwcGx5U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6ZmlsbEJydXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OnNldEZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c2V0RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OmZpbGxSdWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dFN0YXRlOjpzZXRGaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VHcmFkaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c3Ryb2tlVGhpY2tuZXNzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VUaGlja25lc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnN0cm9rZVN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRTdHJva2VT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZUNhcCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUNh
cCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6bGluZURhc2ggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpsaW5lSm9pbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0TGluZUpvaW4p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1pdGVyTGltaXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldE1pdGVyTGlt
aXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmNvbXBvc2l0ZU1v
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldENv
bXBvc2l0ZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRy
b3BTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OnNldERyb3BTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6
OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6aW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXRUZXh0RHJhd2luZ01vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNob3VsZEFudGlhbGlhcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxk
QW50aWFsaWFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaG91
bGRTbW9vdGhGb250cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6c2V0U2hvdWxkU21vb3RoRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpzZXREcmF3THVtaW5hbmNlTWFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6dXNlRGFya0FwcGVhcmFuY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OnNldFVzZURh
cmtBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpz
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZW5j
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpkZWNv
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
OjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXI6On5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGU6OlRyYW5zcGFyZW5jeUxheWVyU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5TGF5ZXJTY29wZTo6YmVnaW5MYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllclNjb3BlOjp+VHJhbnNwYXJlbmN5
TGF5ZXJTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVN0YWNr
Q2hlY2tlcjo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXI6On5HcmFwaGljc0NvbnRleHRT
dGF0ZVN0YWNrQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXI6OkludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXI6On5JbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
TW9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVNb2RlOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlTW9kZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVEYXNoOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGluZURhc2g6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEcm9wU2hhZG93Ojppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJvcFNoYWRvdzo6aXNCbHVycmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
b3BTaGFkb3c6Omhhc091dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRv
dzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3c6OmRlY29kZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTo6ZHJhdyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6TnVsbEdyYXBoaWNzQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
QnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1
enouY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Nv
dXJjZUJydXNoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6U291
cmNlQnJ1c2gpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNwYWNlVHJhbnNmb3Jt
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNoOjpncmFkaWVudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6cGF0dGVybiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlQnJ1c2g6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJydXNo
OjpicnVzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6c2V0R3JhZGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OnNldFBhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmlzUHJpbWl0aXZlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNo
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OkJydXNoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnJ1c2g6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCcnVzaDo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UZXh0Qm94SXRlcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpUZXh0Qm94SXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjpvZmZzZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJhdG9yOjppbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEJveEl0ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Qm94SXRlcmF0b3I6OmN1cnJlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0
ZXJhdG9yOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEJveEl0ZXJh
dG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRCb3hJdGVyYXRv
cjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3UGF0aFNo
YWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd0dseXBoc1NoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdGF0ZTo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpTdGF0ZTo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpGaWxsU291
cmNlOjpGaWxsU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdHJva2VTb3VyY2U6
OlN0cm9rZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGU6OlNo
YWRvd1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZTo6aXNSZXF1
aXJlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZUNhcCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fp
cm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpzZXRNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1BsYXRm
b3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTdXJmYWNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZp
bGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGlj
c0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6YXBwbHlTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlw
aHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0Zv
clRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0Q1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2Fw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybzo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdHbHlwaHNS
ZWNvcmRlcldpbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpD
R0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0YXRlU2F2
ZXI6On5DR0NvbnRleHRTdGF0ZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29udGV4dFN0
YXRlU2F2ZXI6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6
cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVyOjpkaWRTYXZl
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250
ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJu
YWxQbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3aW5n
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5k
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dMaW5lQ2FwKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENHTGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHTGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q0dTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5
U3RhdGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzdHJv
a2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGlu
ZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseURl
dmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpm
aWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tl
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2FuVXNlU2hh
ZG93Qmx1ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFJvdW5kZWRSZWN0SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6ZGlkVXBkYXRlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXApOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9pbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb250ZXh0U3RhdGVTYXZlcjo6Q0dDb250ZXh0U3Rh
dGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0NvbnRleHRTdGF0ZVNhdmVy
Ojp+Q0dDb250ZXh0U3RhdGVTYXZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDR0Nv
bnRleHRTdGF0ZVNhdmVyOjpzYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNHQ29u
dGV4dFN0YXRlU2F2ZXI6OnJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dD
b250ZXh0U3RhdGVTYXZlcjo6ZGlkU2F2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRyYXdQREZQYWdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6c3Ryb2tlQ29udGFpbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJlZ2luTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3SW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6c2V0SW50ZXJuYWxGb250KToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0RHJvcFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3Tm9uT1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4pOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6ZHJhd05hdGl2ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFs
Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI6
OmNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlRmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVDVE0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6c2hhZG93SXNDbGVhcmVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdHbHlwaHNSZWNvcmRlcjo6dXBkYXRlU2hhZG93KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGU6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6
OnNhZmVDb3B5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6c2l6ZU9mSXRlbUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Omlz
RHJhd2luZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzSW5saW5lSXRl
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Rh
dGU6OlNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFp
bnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xh
dGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSb3RhdGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTY2FsZTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldENUTTo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjphcHBseSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6YXBwbHkgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjph
cHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZUpvaW46OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRNaXRlckxpbWl0OjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0YXRlOjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSb3VuZGVkUmVjdDo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6eCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjp5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjphbmdsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6YW1vdW50IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjp0cmFu
c2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNv
bmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OnRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OnN0YXRlQ2hhbmdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
c3RhdGVDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXA6OmxpbmVDYXAgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRhc2hBcnJheSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6
OmRhc2hPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVEYXNoOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxpbmVKb2luIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxp
bWl0OjpTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRNaXRlckxpbWl0OjptaXRlckxpbWl0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVk
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBv
c2l0ZWRSZWN0OjpyZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNvbXBvc2l0ZU9w
ZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q6OmJsZW5kTW9kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpnbG9iYWxCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRS
ZWN0OjpibGVuZE1vZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6UmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Om1fZHJhd0dseXBoc1JlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjphcHBseVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5j
eUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZv
ck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ds
eXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlw
aHNBbmRDYWNoZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6On5SZWNvcmRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Y29udGFpbnNPbmx5SW5saW5lU3RhdGVD
aGFuZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRpZFVwZGF0ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
b25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3VycmVudFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y3Rt
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6Q29udGV4dFN0YXRlOjp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6c2Nh
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpD
b250ZXh0U3RhdGU6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5o
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZWNvcmREcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRT
dGF0ZTo6Q29udGV4dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjpjbG9uZUZvclNhdmUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpDb250ZXh0U3RhdGU6
OmNsb25lRm9yVHJhbnNwYXJlbmN5TGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdGF0ZVN0YWNrIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1w
bDo6UmVjb3JkZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6OnJlY29yZFNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbDo6cmVjb3JkQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlckltcGw6OnJlY29yZENsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ2xlYXJS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29y
ZEZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsRWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3Vy
dmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3Jk
U3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBs
OjpyZWNvcmRTdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUJlemllckN1cnZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERy
YXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1N5c3Rl
bUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZERyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXJJbXBsOjpyZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRQYWludEZyYW1l
Rm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXJJbXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6ZXh0ZW50RnJvbUxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
ckltcGw6On5SZWNvcmRlckltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkVHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJlY29yZFJvdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRT
Y2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJ
bXBsOjpyZWNvcmRTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkQ29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6cmVjb3JkU2V0TGluZUNhcCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpy
ZWNvcmRTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRNaXRlckxpbWl0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlckltcGw6OnJl
Y29yZENsZWFyU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlckltcGw6OnJlY29yZEZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsOjpSZWNv
cmRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbDo6
cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjphcHBseVNldFN0YXRlSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcDoK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2
ZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyZXN0b3JlKToK
KyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGx5U3RhdGVDaGFu
Z2VzKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Y2xpcCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwT3V0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNs
aXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGlu
ZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpzZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKE5p
Y29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpyb3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2NhbGUpOiBEZWxldGVk
LgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y29uY2F0Q1RNKTog
RGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpn
ZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09w
ZXJhdGlvblJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RyYXdH
bHlwaHNSZWNvcmRlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmRyYXdCb3hlcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFk
b3dGb3JCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRUZXh0RmllbGRJbm5lclNoYWRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hSYWRpb0lubmVyU2hhZG93KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5n
L1RleHREZWNvcmF0aW9uUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1c2VTdHJva2VTdHlsZVRvRmlsbCk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1JlbmRlclN1cHBvcnQ6OmFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZTo6ZHJhdyk6CisKIDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3Qg
YWxsb3cgbW9kZWwgdG8gYmUgcm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZDljYzNjNGZlNjll
OGJjZTVlMDFjODlhZjRkMDdjNzVhYzgwYzNlNi4uZTE2MmJlOGJmMTJiMzA4ZDA3MTIxZDg0OWQ0
YTczMzc4NDRmZTdiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAyMi0wMy0xNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBsYXppbHkgYXBwbGllZCB0byB0aGUgcGxh
dGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRTdGF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSb3VuZGVk
UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnRyYW5z
bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0TGluZURhc2gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpz
ZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdCk6IERl
bGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRTZXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBs
eURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dFRvUGF0
aCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkQ2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxCZXppZXJDdXJ2ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVj
b3JkU3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TGluZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1Jl
Y3RzKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZERyYXdTeXN0ZW1JbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
RHJhd0dseXBocyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6dHJhbnNmb3JtVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjptX3JlbmRlcmluZ0JhY2tlbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFRyYW5zbGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUm90
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDb25jYXRlbmF0
ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkU2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0TGluZURhc2gpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29y
ZFNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGVhclNoYWRv
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6c2VuZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyOjpkcmF3UmVjdCk6CisK
IDIwMjItMDMtMTQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW21vZGVsXSA8bW9kZWwgaW50ZXJhY3RpdmU+IGRvZXNuJ3QgYWxsb3cgbW9kZWwgdG8gYmUg
cm90YXRlZCBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA2YmUwNjRlMzgz
ODkzN2ZkZTVlODUyODY5NWY0MTQwYzJkODNiMmRhLi44ODEzYmNkMWUxYmVhMzNmZTVkOTBhZTdk
NjY3NzhiMjdhYTdkMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMjItMDMtMTUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0dQVSBQcm9jZXNzXSBHcmFwaGljc0NvbnRleHRTdGF0ZSBzaG91bGQgYmUgbGF6
aWx5IGFwcGxpZWQgdG8gdGhlIHBsYXRmb3JtIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzcyOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJW
aWV3OjpwYWludEludG9CYWNraW5nU3RvcmUpOgorCiAyMDIyLTAzLTA0ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSG9tZSBsaW5rIG9uIHdlYXRoZXIuZ292IGlz
IG5vdCB3b3JraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA3MzY0NDJhMDhhNzQ1MDBhMzUyZjA0
YzJlMTA2ZDhjNDFlN2E0ZmM1Li5lMzdjNDg2ZDg1OTczOTQwZTVlNTc3N2MxOTZlYjkyYjdkMGIw
Y2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0OTEsNiArMTQ5MSw4IEBAIHNldChXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTFN0YXRlLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ckNvbnRlbnRzRGlzcGxheURlbGVnYXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyQ2xpZW50LmgKQEAgLTE1NTAsNiArMTU1Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUF1ZGlvVHJh
Y2tDb25maWd1cmF0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUNvbG9yU3Bh
Y2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
LmgKQEAgLTE1NjgsNiArMTU3MSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hvdWxkTG9j
YWxpemVBeGlzTmFtZXMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Tb3VyY2VJbWFnZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA2
MmQ0M2U2YTNhOTMyMTVmZjA3NTdhNDc4ODRhOGI2Yzg0NGI4OTZkLi5kMDU2NWJlYzkyMWYwY2Q5
MTVlNDg4NWZkZjZiYTMyYTNhNmJkM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTE1Niw2ICsxNTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJl
ZUhvc3RDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW4uaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JTcGFjZUNHLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudFJlbmRlcmVyQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNWRlZTc1
NDA1MzU3OWY1NWI1NWYyZmU0YWQwZGQwYTY5ZGViZmQ0YS4uZTRmNjI3MTkwY2M4OWJlODZkMDY5
ODFmMzFkMDEzMzY1OTJlOTY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTY0MCw2
ICs2NDAsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViVmlkZW9Db250YWluZXJMYXllci5oCiAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9DR0NvbnRleHRTdGF0ZVNhdmVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQ
b29sLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggNWM3YjczZWIyMDVlMDllYzI0NmUwMTFkMGE1MDJkY2Q0
YzFkY2E1MC4uZWI3NmExODZkMzQ4ZDRiMzY4OWYyMzRmM2RiZjYyODJhYWFkZTA1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTIwNDUsNiArMjA0NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ29udGVudHNEaXNwbGF5RGVsZWdhdGUuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcApAQCAtMjA4NCw2
ICsyMDg1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3Qu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnJ1c2guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9T
dHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggODI5NjJiYTA0ZTJmZmQ3ZmZhMGM2ZTYxZDljOWMyYzE3
YTVmNjQ2Ny4uYjU1YzVjMWM0MmUzMjk1NTcwZWQyNGM4NDBkYzNlNGYyZmQzMDJlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MjMzMSwxMCArMjMzMSwxMiBAQAogCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGMDVGODAyNTEyNDQy
RTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NT
UHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MUZDQjE3MDI3QkFCM0ZFMDBFMDYzMUMgLyogRnJhbWVSYXRlQWxpZ25l
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQ0Ix
NkQyN0JBQjNERjAwRTA2MzFDIC8qIEZyYW1lUmF0ZUFsaWduZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAxNzgzQjI3RDU3RjlGMDA5QkVC
MUIgLyogQ0dDb250ZXh0U3RhdGVTYXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFCIC8qIENHQ29udGV4dFN0
YXRlU2F2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZC
QTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVF
NTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMUI0OTc0MjUxMkJBM0IwMEZF
OUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBJbWFnZUJpdG1h
cEJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMw
QjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyNDYwREQ3MjdDODZEQUQwMEQ1RjlG
NCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI0Njk2M0IyNzVDNUZBNjAwQTkxNTZBIC8qIENTU0ZpbHRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1M0ZCODMyMTNCMUJCODAwQzQw
RDM0IC8qIENTU0ZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyNDY5NjNEMjc1QzYxNDQwMEE5MTU2QSAvKiBGaWx0ZXJFZmZlY3RWZWN0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMTRC
OUI3Mjc0NDU4RkEwMDNCRTZERiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjQ2OTYzRTI3NUM2MTY3MDBB
OTE1NkEgLyogRmlsdGVySW1hZ2VWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjRFRjdDMjc0RUUzN0YwMDI5M0MyRiAvKiBGaWx0ZXJJbWFn
ZVZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yMzQyLDYgKzIzNDQsOSBAQAogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgwRDg0
MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIg
LyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI1NjA3OEUyNzlEMzRCNjAwN0QyREQzIC8qIEZF
SW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
RjdFNzRGMjc5Q0VERTgwMEQ4MkQyRCAvKiBGRUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI1ODE4NTQyN0NEQTY5QTAwQzNEOTdFIC8q
IFNvdXJjZUJydXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkIzNTEwRjI3Q0I0MkZFMDBEMjdBRTAgLyogU291cmNlQnJ1c2guaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjU4MTg1NTI3Q0RBODBF
MDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MkIzNTEwRDI3Q0EzMjhGMDBEMjdBRTAgLyogR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcyNkNERTIwMjc1OTczNTAwMEE0NDVCMiAvKiBGaWx0ZXJFZmZlY3RHZW9tZXRyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5NjYxQTIyNzU5NjBB
NTAwRTdERjlCIC8qIEZpbHRlckVmZmVjdEdlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTIyNTNBRTI4RDAwMDJFRjkwIC8q
IFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI2RDU2RTMyNTNB
RTM2NjAwMDJFRjkwIC8qIE5hdGl2ZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1h
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTEzMTgsNiArMTEzMjMsOCBAQAogCQk3MUZDQjE2RDI3QkFCM0RGMDBFMDYzMUMgLyogRnJhbWVS
YXRlQWxpZ25lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZVJhdGVB
bGlnbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkNCMTZGMjdCQUIzRTAw
MEUwNjMxQyAvKiBGcmFtZVJhdGVBbGlnbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZyYW1lUmF0ZUFsaWduZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2lu
dHMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc4M0EyN0Q1NzNCMjAwOUJFQjFC
IC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0dDb250ZXh0U3RhdGVT
YXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjA2RDQzNTI3REFERUNBMDA0
MEZFQjIgLyogVGV4dEJveEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRCb3hJdGVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjExQjVENjI3NjUzNjgyMDA3NkZF
RjggLyogRmlsdGVyUmVzdWx0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJSZXN1bHRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBT
VkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1
ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENB
RDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVl
UHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzI3LDYgKzExMzM0
LDggQEAKIAkJNzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0MzVFRjQyNzNEMDc2NzAwMDVFN0VFIC8qIEZpbHRlckltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZpbHRlckltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNDM1RUY1MjczRDA3NjcwMDA1RTdFRSAvKiBGaWx0ZXJJbWFnZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGaWx0ZXJJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
NDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNDYwREQ2MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRTdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRN
aW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRN
aW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0
MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0
RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTM4OSw2ICsxMTM5OCwxMCBAQAogCQk3MkExM0FENTI3NERFNTRFMDBFMkE4OEUgLyog
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlQWxwaGFT
b2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBMTNBRDYy
NzRERTU3ODAwRTJBODhFIC8qIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQTEzQUQ3Mjc0REU1NzgwMEUyQTg4RSAvKiBTb3VyY2VH
cmFwaGljU29mdHdhcmVBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvdXJjZUdyYXBoaWNTb2Z0
d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEMyN0M5
RjkzRTAwRDI3QUUwIC8qIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQjM1MTBEMjdDQTMyOEYwMEQyN0FFMCAvKiBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEUyN0NCNDJGRDAwRDI3QUUwIC8qIFNvdXJjZUJydXNo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZUJydXNoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCMzUxMEYyN0NCNDJGRTAwRDI3QUUwIC8qIFNvdXJjZUJydXNoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNvdXJjZUJydXNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQjRFRjc0Mjc0RTIzMzMwMDI5M0MyRiAvKiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJCNEVGNzUyNzRFMjMzNDAwMjkzQzJGIC8qIEZFQmxlbmRTb2Z0d2Fy
ZUFwcGxpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRkVCbGVuZFNvZnR3YXJlQXBwbGllci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQjRFRjdDMjc0RUUzN0YwMDI5M0My
RiAvKiBGaWx0ZXJJbWFnZVZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWx0ZXJJbWFnZVZlY3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg4MTAsNiArMjg4MjMsNyBAQAog
CQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3ODNBMjdENTczQjIwMDlCRUIxQiAvKiBDR0Nv
bnRleHRTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENv
bG9yQ0cuY3BwICovLAogCQkJCUJDQUZFREIzMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNl
Q0cuY3BwICovLAogCQkJCUJDQUZFREIyMjU5NjhEMEIwMDMwRTZBQSAvKiBDb2xvclNwYWNlQ0cu
aCAqLywKQEAgLTI5MDQzLDYgKzI5MDU3LDkgQEAKIAkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlE
MDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRB
NDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAq
LywKIAkJCQk3Qjk1Q0ZFOTI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZS5oICovLAorCQkJCTcyNDYwREQ1MjdDODVEMDEwMEQ1RjlGNCAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZS5jcHAgKi8sCisJCQkJNzI0NjBERDYyN0M4NUQwMTAwRDVGOUY0IC8qIEdyYXBoaWNzQ29u
dGV4dFN0YXRlLmggKi8sCisJCQkJNzJCMzUxMEQyN0NBMzI4RjAwRDI3QUUwIC8qIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyog
R3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5IC8qIEdy
YXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhp
Y3NMYXllckNsaWVudC5oICovLApAQCAtMjkxNDMsNiArMjkxNjAsNyBAQAogCQkJCUJDQTU1OTEy
MjYzREJENzkwMDdGMTlCMyAvKiBQaXhlbEZvcm1hdC5oICovLAogCQkJCUNERDA4QUJGMjc3RTU0
RjAwMEVBMzc1NSAvKiBQbGF0Zm9ybUF1ZGlvVHJhY2tDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJ
QkMzRTYyNDIyNjU5NzkxNzAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oICovLAorCQkJ
CTcyQjM1MTBDMjdDOUY5M0UwMEQyN0FFMCAvKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oICov
LAogCQkJCTcyNkQ1NkUxMjUzQUUwNDMwMDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJ
CQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywK
IAkJCQk1NTA2NDBBRDI0MDc1NkRBMDBBQUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tl
bmQuaCAqLywKQEAgLTI5MTY2LDYgKzI5MTg0LDggQEAKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAw
RDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkw
IC8qIFNoYWRvd0JsdXIuaCAqLywKIAkJCQkxQzREQjAyNDI3MzM5RTVFMDA3QjBBRDEgLyogU2hv
dWxkTG9jYWxpemVBeGlzTmFtZXMuaCAqLywKKwkJCQk3MkIzNTEwRTI3Q0I0MkZEMDBEMjdBRTAg
LyogU291cmNlQnJ1c2guY3BwICovLAorCQkJCTcyQjM1MTBGMjdDQjQyRkUwMEQyN0FFMCAvKiBT
b3VyY2VCcnVzaC5oICovLAogCQkJCTFERDEyN0FDMjU2RTNBODcwMEIyMjdENyAvKiBTb3VyY2VC
dWZmZXJQcml2YXRlLmNwcCAqLywKIAkJCQlDRDY0MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291
cmNlQnVmZmVyUHJpdmF0ZS5oICovLAogCQkJCUNEQzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi8sCkBAIC0yOTE3Nyw2ICsyOTE5Nyw3IEBACiAJ
CQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVy
YXRvci5oICovLAogCQkJCTk1RTlGNDQ0MjdDOUEzOUIwMDk0NTMzNyAvKiBTeXN0ZW1JbWFnZS5o
ICovLAogCQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCisJCQkJ
NzIwNkQ0MzUyN0RBREVDQTAwNDBGRUIyIC8qIFRleHRCb3hJdGVyYXRvci5oICovLAogCQkJCTM3
NkRDQ0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLywKIAkJCQlBODI0QjQ2NDBF
MkVGMkVBMDA4MUE3QjcgLyogVGV4dFJ1bi5oICovLAogCQkJCUNEMUU3MzQ2MTY3QkM3OEUwMDlB
ODg1RCAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5jcHAgKi8sCkBAIC0zMzg3Myw2ICszMzg5
NCw3IEBACiAJCQkJQ0RFM0FFMTIyNEI0OTE2QTAwMTI4RTdFIC8qIENETVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUZBOTA0Q0ExNzhFNjFGNTAwNEM4QTJEIC8qIENlcnRpZmljYXRl
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTFCOEYwQjUyMTk1M0Q2NTAwMEMyQjAwIC8qIENl
cnRpZmljYXRlU3VtbWFyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc4M0IyN0Q1N0Y5RjAw
OUJFQjFCIC8qIENHQ29udGV4dFN0YXRlU2F2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZG
RDE1MTZDNzgyNjUwMEY4ODdDMSAvKiBDaGFuZ2VWZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTdCQzY5REQxNTA1RjA3NjAwMUI3NEFDIC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNzg1RDkxNTI0QjREMUNBMDAxNERCMjEgLyogQ2hhbm5lbENv
dW50TW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDc5OCw2ICszNDgyMCw4IEBACiAJCQkJNDlD
N0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Qjk1Q0ZFQjI3NTRGRjZFMDAwMDYwQ0UgLyogR3JhcGhpY3NDb250ZXh0
R0xTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjQ2MERENzI3Qzg2REFEMDBENUY5RjQgLyogR3JhcGhpY3NDb250ZXh0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyNTgxODU2MjdDREFGRDUwMEMzRDk3RSAvKiBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAw
RTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUw
RjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtMzY3MDUsNiArMzY3MjksNyBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0
Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjU4MTg1NTI3Q0RBODBFMDBDM0Q5N0UgLyogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyNkQ1NkUyMjUzQUUyOEQwMDAyRUY5MCAvKiBQ
bGF0Zm9ybUltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDc3MDVDNzI1NTI3NkNEMDAxRDBD
OTQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTUwNjQwQUYy
NDA3NTgyRDAwQUFFMDQ1IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM3Mzg2LDYgKzM3NDExLDcgQEAKIAkJCQk1MTBENEEzODEwMzE2NUVFMDA0OUVB
NTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFC
QUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODRBODFGM0UwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhhLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjU4MTg1NDI3Q0RBNjlBMDBDM0Q5N0UgLyogU291cmNlQnJ1c2gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTYyMTdBOUQwMUIwMDI3NEU0MiAvKiBTb3VyY2VC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0E0OTY1MTdBOUQwMUIwMDI3NEU0MiAvKiBT
b3VyY2VCdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYxMzUwOTI0QzlGQ0EzMDA0
MzJFMUUgLyogU291cmNlQnVmZmVyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50
ZXIuY3BwCmluZGV4IDg1NmEzZGU1MDRkZWMwYmJmYTkwYWMxN2RlMzdmNTE1ZTE0ZDkyMDQuLjlk
OTM1YTZmZjMyMzBmM2Y0NmEyZWY1ZDdlYTEwMDEwYWU5ZTEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVy
LmNwcApAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVG
cm9tUGF0aChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgY29uc3QKICAgICAgICAg
ICAgIERhc2hBcnJheSBsaW5lRGFzaDsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChkYXNo
TGVuZ3RoKTsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBMZW5ndGgpOwotICAgICAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2gobGluZURhc2gsIGRhc2hM
ZW5ndGgpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGluZURhc2go
eyBXVEZNb3ZlKGxpbmVEYXNoKSwgZGFzaExlbmd0aCB9KTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgLy8gRklYTUU6IHN0cm9raW5nIHRoZSBib3JkZXIgcGF0aCBjYXVzZXMgaXNzdWVz
IHdpdGggdGlnaHQgY29ybmVyczoKQEAgLTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgQm94RGVjb3Jh
dGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250
ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdpbiA9IGZpbGxSZWN0LnJlY3Qo
KS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBhdXRvIGFkanVzdGVkU2hhZG93
T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0
aW9uKCk7CiAKLSAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVz
dGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNo
YWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldERyb3BTaGFkb3coeyBhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZhbHVl
KCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAKICAgICAg
ICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBv
cGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBz
byBzYXZlcyB0aW1lCkBAIC0xNDA1LDcgKzE0MDUsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWlu
dGVyOjpwYWludEJveFNoYWRvdyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hh
ZAogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQp
OwogICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLnZh
bHVlKCksIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNo
YWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVm
YXVsdCB9KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsK
ICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50SW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludEltYWdlLmNwcAppbmRleCBm
NGI5OGJhNjJlMTE5YTA3NzEzMTJkM2I4OGM0OTE5MzY4MzZlZTM3Li5lZTUwNGYwOGM0OWZjOGQ1
YjVhZWQ3MDJiZTIxN2YxYjA2ZmQ0ZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRJbWFnZS5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFp
bnRJbWFnZTo6ZG9DdXN0b21QYWludChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjbwog
SW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RD
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUo
eyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAg
ICAgZGVzdENvbnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRl
KGRlc3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVj
dC5zaXplKCkpCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKIAogICAgIC8vIEZhY3RvciBp
biB0aGUgZGVzdGluYXRpb24gY29udGV4dCdzIHNjYWxlIHRvIGdlbmVyYXRlIGF0IHRoZSBiZXN0
IHJlc29sdXRpb24KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29u
dGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxl
KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZGVzdENvbnRleHRDVE0gPSBkZXN0Q29udGV4dC5nZXRD
VE0oKTsKICAgICBkb3VibGUgeFNjYWxlID0gZmFicyhkZXN0Q29udGV4dENUTS54U2NhbGUoKSk7
CiAgICAgZG91YmxlIHlTY2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueVNjYWxlKCkpOwogICAg
IEFmZmluZVRyYW5zZm9ybSBhZGp1c3RlZFBhdHRlcm5DVE0gPSBwYXR0ZXJuVHJhbnNmb3JtOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCAwZTc4MDYzZTNhNDFjYmM2OTBmMGQwY2NiNzg4MTE3
ZGU2OTM4YTAyLi5kYmM5NTdjNTNkMDRhMzk2ZWFjNjRkNjdmZTZhMmIxN2U0NDhjNjYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcApAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6YXBwbHlMaW5lRGFzaCgpIGNvbnN0CiAgICAgRGFzaEFycmF5IGNv
bnZlcnRlZExpbmVEYXNoKHN0YXRlKCkubGluZURhc2guc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRlKCkubGluZURhc2guc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbnZl
cnRlZExpbmVEYXNoW2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4oc3RhdGUoKS5s
aW5lRGFzaFtpXSk7Ci0gICAgYy0+c2V0TGluZURhc2goY29udmVydGVkTGluZURhc2gsIHN0YXRl
KCkubGluZURhc2hPZmZzZXQpOworICAgIGMtPnNldExpbmVEYXNoKHsgV1RGTW92ZShjb252ZXJ0
ZWRMaW5lRGFzaCksIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0ZSgpLmxpbmVEYXNoT2Zmc2V0KSB9
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRHbG9iYWxBbHBo
YShkb3VibGUgYWxwaGEpCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBv
cGUKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICgh
YykKICAgICAgICAgcmV0dXJuOwotICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxl
bmRNb2RlKTsKKyAgICBjLT5zZXRDb21wb3NpdGVNb2RlKHsgb3AsIGJsZW5kTW9kZSB9KTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzY2FsZShkb3VibGUgc3gsIGRv
dWJsZSBzeSkKQEAgLTExODYsNyArMTE4Niw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6aXNQb2ludEluU3Ryb2tlSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZG91CiAg
ICAgICAgIERhc2hBcnJheSBjb252ZXJ0ZWRMaW5lRGFzaChsaW5lRGFzaC5zaXplKCkpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVEYXNoLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2FzdDxEYXNoQXJyYXlFbGVtZW50
PihsaW5lRGFzaFtpXSk7Ci0gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goY29udmVydGVkTGlu
ZURhc2gsIHN0YXRlLmxpbmVEYXNoT2Zmc2V0KTsKKyAgICAgICAgY29udGV4dC5zZXRMaW5lRGFz
aCh7IFdURk1vdmUoY29udmVydGVkTGluZURhc2gpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGUu
bGluZURhc2hPZmZzZXQpIH0pOwogICAgIH0pOwogfQogCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChkb3VibGUgeCwgZG91
YmxlIHksIGRvdWJsZSB3aWR0aCwgZAogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAg
ICAgICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBj
b250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOworICAgICAgICBjb250ZXh0LT5zZXREcm9wU2hh
ZG93KHsgRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRp
dXNNb2RlOjpMZWdhY3kgfSk7CiAgICAgfQogICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9
IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTM2Myw5ICsxMzYzLDkgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3Vs
ZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09m
ZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNl
dC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdo
dCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgYy0+c2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5IH0pOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRTaGFk
b3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kpOworICAgICAgICBjLT5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKCksIDAs
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgfSk7CiB9
CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3Mo
KSBjb25zdApAQCAtMjQzMiwxOSArMjQzMiwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGRvdQog
CiAgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0KDAsIDIgKiBtYXNrUmVjdC5oZWlnaHQoKSk7
CiAKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBmbG9h
dCBzaGFkb3dSYWRpdXM7Ci0gICAgICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICAgICAg
ICAgIGMtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3Ip
OwotCiAgICAgICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChtYXNrUmVjdCk7Ci0gICAgICAg
ICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc2hhZG93UmFkaXVzICogMS40KTsKLSAgICAgICAgICAg
IHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQgKiAtMSk7CisgICAgICAgICAgICBhdXRvIGRy
b3BTaGFkb3cgPSBjLT5kcm9wU2hhZG93KCk7CisKKyAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5m
bGF0ZShkcm9wU2hhZG93LmJsdXJSYWRpdXMgKiAxLjQpOworICAgICAgICAgICAgc2hhZG93UmVj
dC5tb3ZlKGRyb3BTaGFkb3cub2Zmc2V0ICogLTEpOwogICAgICAgICAgICAgYy0+Y2xpcChzaGFk
b3dSZWN0KTsKIAotICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKKyAgICAgICAg
ICAgIGRyb3BTaGFkb3cub2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVz
TW9kZTo6TGVnYWN5KTsKKyAgICAgICAgICAgIGMtPnNldERyb3BTaGFkb3coZHJvcFNoYWRvdyk7
CiAKICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xv
cihDb2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXkuY3BwCmluZGV4IDRmNjNhZGNlOTM5MTZkYjIzMjBlOTY3OGFhYmZlMGYzY2Q5OTc2MmIu
LjlhODAzYTQwOGQ4OGMyZmY0OGRkM2JlYTAyOTUxYjg3NTgwOThlMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTEyNDQsNyArMTI0NCw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRTdGlwcGxpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKICAg
ICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UpOwotICAg
IGNvbnRleHQuc2V0TGluZURhc2goeyAxLCBkZW5zaXR5IH0sIDEpOworICAgIGNvbnRleHQuc2V0
TGluZURhc2goeyB7IDEsIGRlbnNpdHkgfSwgMSB9KTsKIAogICAgIGRyYXdMYXlvdXRQYXR0ZXJu
KGNvbnRleHQsIHF1YWQsIGRlbnNpdHksIEZsaXA6Ok5vKTsKIH0KQEAgLTEyNTQsNyArMTI1NCw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHNhdmVyKGNvbnRleHQpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNSk7CiAg
ICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZTo6RGFzaGVkU3Ryb2tlKTsKLSAg
ICBjb250ZXh0LnNldExpbmVEYXNoKHsgMiwgMiB9LCAyKTsKKyAgICBjb250ZXh0LnNldExpbmVE
YXNoKHsgeyAyLCAyIH0sIDIgfSk7CiAKICAgICBjb25zdGV4cHIgYXV0byBkZWZhdWx0TGF5b3V0
SGF0Y2hTcGFjaW5nID0gMTI7CiAgICAgZHJhd0xheW91dFBhdHRlcm4oY29udGV4dCwgcXVhZCwg
ZGVmYXVsdExheW91dEhhdGNoU3BhY2luZywgZmxpcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKaW5kZXggYjU4OGY2ZmE0YTExZDc3MGMzYzg0OTk5NjcyZDdkN2VmZjQzMmM0Zi4uOGExN2Fl
MzcwYWUzNmIwMGViYjdhOWIyZTA3NTUxODA2YmVkMTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcApAQCAtNDMwMyw3ICs0MzAzLDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXQKICAg
ICBpZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwog
Ci0gICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGZyYW1lUmVjdCgpLCBwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRlbnRzKCkuCiAgICAgICAgIHBhaW50
Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50Vmlz
aWJsZVJlY3QpKTsKQEAgLTQ4NTQsNyArNDg1NCw3IEBAIHZvaWQgRnJhbWVWaWV3OjphZGp1c3RQ
YWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0
CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgot
ICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY29u
dGV4dChmcmFtZVJlY3QoKSwgTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHAKaW5kZXggZGM2MGU3
NWIyOTViYzUzYTU5YTQ3MDJhMTk5ODdjMDNhMTFmOTVhMS4uYWM5MDkxMTM3M2FmZTVmNjI2OTc1
NDA2YmNjYzM4MzUwZDlkMzQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Fk
d2FpdGEvVGhlbWVBZHdhaXRhLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgVGhlbWVBZHdh
aXRhOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBQ
YXRoJiBwYXRoCiAKICAgICBncmFwaGljc0NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihj
b2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZVRoaWNr
bmVzcyhmb2N1c0xpbmVXaWR0aCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsg
Zm9jdXNMaW5lV2lkdGgsIDIgKiBmb2N1c0xpbmVXaWR0aCB9LCAwKTsKKyAgICBncmFwaGljc0Nv
bnRleHQuc2V0TGluZURhc2goeyB7IGZvY3VzTGluZVdpZHRoLCAyICogZm9jdXNMaW5lV2lkdGgg
fSwgMCB9KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZUNhcChMaW5lQ2FwOjpTcXVhcmUp
OwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRMaW5lSm9pbihMaW5lSm9pbjo6TWl0ZXIpOwogICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xvci5vcGFxdWVDb2xvcigpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOWZkMjVkODBhZDEyZGM5MWRkMTFmOTE1OThm
YzZjOGVmYTRjYjJhMi4uMjg5NTc0YjljMWU0MGNkNzEyYjRlMmI2ZTllYjM0YjAxNzI5ZGZjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTI5LDcgKzI5LDggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6QmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQmIHByaW1hcnlDb250ZXh0LCBHcmFwaGljc0NvbnRl
eHQmIHNlY29uZGFyeUNvbnRleHQpCi0gICAgOiBtX3ByaW1hcnlDb250ZXh0KHByaW1hcnlDb250
ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0KHByaW1hcnlDb250ZXh0LmNsaXBCb3VuZHMoKSwg
eyB9LCBwcmltYXJ5Q29udGV4dC5nZXRDVE0oKSkKKyAgICAsIG1fcHJpbWFyeUNvbnRleHQocHJp
bWFyeUNvbnRleHQpCiAgICAgLCBtX3NlY29uZGFyeUNvbnRleHQoc2Vjb25kYXJ5Q29udGV4dCkK
IHsKIH0KQEAgLTQ4LDYgKzQ5LDMwIEBAIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBt
X3ByaW1hcnlDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogfQogCisjaWYgVVNFKENHKQorYm9v
bCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Cit9CisKK3Zv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlz
Q0FMYXllckNvbnRleHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250
ZXh0KGlzQ0FMYXllckNvbnRleHQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRJc0NBTGF5
ZXJDb250ZXh0KGlzQ0FMYXllckNvbnRleHQpOworfQorCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZENvbnRl
eHQpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChpc0Fj
Y2VsZXJhdGVkQ29udGV4dCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKK30KKyNlbmRpZgorCitSZW5kZXJpbmdN
b2RlIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaW1hcnlDb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKK30KKwogdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKIHsKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgbm90IHVzaW5nIHRoZSBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0J3Mgc3RhdGUgc3RhY2sg
YXQgYWxsLApAQCAtNjQsMjIgKzg5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpCiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9p
ZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwgY29uc3QgRmxvYXRQb2lu
dCYgdG8pCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7Ci0gICAg
bV9zZWNvbmRhcnlDb250ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5kcmF3RWxsaXBzZShyZWN0KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9
CiAKICNpZiBVU0UoQ0cpCkBAIC05NiwyMiArMTA5LDEwIEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCiB9CiAjZW5kaWYKIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIG1f
cHJpbWFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRy
YXdQYXRoKHBhdGgpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChw
YXRoKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IGZhY3RvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7Ci0g
ICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CisgICAgbV9wcmltYXJ5Q29u
dGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmFjdG9yKTsKIH0KIAogdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBA
IC0xMjYsMjIyICsxMjcsMTI2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmYWN0b3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5hcHBs
eURldmljZVNjYWxlRmFjdG9yKGZhY3Rvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0
KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fcHJpbWFy
eUNvbnRleHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5m
aWxsUmVjdChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUm91bmRlZFJlY3RJ
bXBsKHJlY3QsIGNvbG9yKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
SW1wbChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBtX3ByaW1hcnlDb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLX0KLQotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIG1fcHJpbWFyeUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC5jbGVhclJlY3QocmVjdCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsK
LSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotfQotCi12b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmZpbGxFbGxpcHNlKGVsbGlwc2UpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLSNp
ZiBVU0UoQ0cpCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNv
bnRleHQoYm9vbCBpc0NBTGF5ZXJDb250ZXh0KQotewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRl
eHQuc2V0SXNDQUxheWVyQ29udGV4dChpc0NBTGF5ZXJDb250ZXh0KTsKLX0KLQotYm9vbCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5pc0NBTGF5ZXJDb250ZXh0KCk7Ci19Ci0KLXZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCkKLXsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGlzQWNjZWxlcmF0ZWRDb250ZXh0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQu
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoaXNBY2NlbGVyYXRlZENvbnRleHQpOwotfQotI2VuZGlm
Ci0KLVJlbmRlcmluZ01vZGUgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9k
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQucmVuZGVyaW5nTW9kZSgp
OwotfQotCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChyZWN0KTsKICAgICBtX3By
aW1hcnlDb250ZXh0LmNsaXAocmVjdCk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXAocmVj
dCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwot
ICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5jbGlwT3V0KHJlY3QpOwotfQotCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBtX3By
aW1hcnlDb250ZXh0LmNsaXBPdXQocGF0aCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBP
dXQocGF0aCk7Ci19Ci0KIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7CisgICAgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlw
UGF0aChwYXRoLCB3aW5kUnVsZSk7CiAgICAgbV9zZWNvbmRhcnlDb250ZXh0LmNsaXBQYXRoKHBh
dGgsIHdpbmRSdWxlKTsKIH0KIAotSW50UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5jbGlwQm91
bmRzKCk7Ci19Ci0KLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TGluZUNh
cChsaW5lQ2FwKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TGluZUNhcChsaW5lQ2FwKTsK
KyAgICBtX3ByaW1hcnlDb250ZXh0LmNsaXBPdXQocmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmNsaXBPdXQocmVjdCk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQp
Cit2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9m
ZnNldCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFz
aE9mZnNldCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOworICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5jbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQordm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQuc2V0TGluZUpvaW4obGluZUpvaW4pOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRM
aW5lSm9pbihsaW5lSm9pbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZl
cihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZv
aWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxp
bWl0KQordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRl
ckxpbWl0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0TWl0ZXJMaW1pdChtaXRlckxpbWl0
KTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICBtX3NlY29uZGFy
eUNvbnRleHQuY2xlYXJSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShuYXRpdmVJbWFnZSwg
c2VsZlNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKG5hdGl2ZUltYWdlLCBzZWxmU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCk7Cisg
ICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0KHJlY3QpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQordm9pZCBCaWZ1cmNhdGVkR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1J
bWFnZSwgZGVzdGluYXRpb25SZWN0KTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1N5c3Rl
bUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworICAgIG1fcHJpbWFyeUNvbnRl
eHQuZmlsbFJlY3QocmVjdCwgY29sb3IpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVj
dChyZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdQYXR0ZXJuKG5h
dGl2ZUltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdHRlcm4obmF0
aXZlSW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3QocmVjdCwgZ3Jh
ZGllbnQpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5maWxsUmVjdChyZWN0LCBncmFkaWVudCk7
CiB9CiAKLUltYWdlRHJhd1Jlc3VsdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byByZXN1bHQg
PSBtX3ByaW1hcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgZGVzdGlu
YXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX3ByaW1h
cnlDb250ZXh0LmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CiB9CiAKLUltYWdlRHJhd1Jlc3Vs
dCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1fcHJpbWFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2Uo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsK
LSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIG1fcHJpbWFyeUNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91
bmRlZEhvbGVSZWN0LCBjb2xvcik7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi1JbWFnZURy
YXdSZXN1bHQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBo
UnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGF1dG8gcmVzdWx0ID0gbV9wcmltYXJ5Q29u
dGV4dC5kcmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxl
RmFjdG9yLCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5k
cmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9y
LCBoUnVsZSwgdlJ1bGUsIG9wdGlvbnMpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9wcmlt
YXJ5Q29udGV4dC5maWxsRWxsaXBzZShlbGxpcHNlKTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQu
ZmlsbEVsbGlwc2UoZWxsaXBzZSk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEJpZnVy
Y2F0ZWRHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQordm9pZCBCaWZ1cmNhdGVkR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIG1fcHJpbWFyeUNv
bnRleHQucGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwotICAgIG1fc2Vj
b25kYXJ5Q29udGV4dC5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Cisg
ICAgbV9wcmltYXJ5Q29udGV4dC5maWxsUGF0aChwYXRoKTsKKyAgICBtX3NlY29uZGFyeUNvbnRl
eHQuZmlsbFBhdGgocGF0aCk7CiB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCi12b2lkIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUpCit2
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5z
Y2FsZShzY2FsZSk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNjYWxlKHNjYWxlKTsKKyAgICBt
X3ByaW1hcnlDb250ZXh0LnN0cm9rZVJlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlUmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQog
Ci12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5yb3RhdGUoYW5n
bGVJblJhZGlhbnMpOwotICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5yb3RhdGUoYW5nbGVJblJhZGlh
bnMpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuc3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKIH0KIAotdm9pZCBCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQog
ewotICAgIG1fcHJpbWFyeUNvbnRleHQudHJhbnNsYXRlKHgsIHkpOwotICAgIG1fc2Vjb25kYXJ5
Q29udGV4dC50cmFuc2xhdGUoeCwgeSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5zdHJva2VQYXRo
KHBhdGgpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwogfQogCi12
b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
bV9wcmltYXJ5Q29udGV4dC5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNv
bnRleHQuY29uY2F0Q1RNKHRyYW5zZm9ybSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgZnJvbSwg
Y29uc3QgRmxvYXRQb2ludCYgdG8pCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRDVE0odHJh
bnNmb3JtKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuc2V0Q1RNKHRyYW5zZm9ybSk7CisgICAg
bV9wcmltYXJ5Q29udGV4dC5kcmF3TGluZShmcm9tLCB0byk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdMaW5lKGZyb20sIHRvKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEJpZnVyY2F0ZWRH
cmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZURldmljZVNj
YWxlKSBjb25zdAordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFyeUNvbnRleHQuZ2V0
Q1RNKGluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RWxsaXBz
ZShyZWN0KTsKKyAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0VsbGlwc2UocmVjdCk7CiB9CiAK
LUZsb2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3ZvaWQg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsK
LSAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJv
dW5kaW5nTW9kZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0aChwYXRoKTsKKyAgICBt
X3NlY29uZGFyeUNvbnRleHQuZHJhd1BhdGgocGF0aCk7CiB9CiAKIHZvaWQgQmlmdXJjYXRlZEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM3
MCwyOSArMjc1LDU0IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvCiB9CiAjZW5kaWYKIAotRmxv
YXRTaXplIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKK3ZvaWQgQmlmdXJj
YXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhdXRvIHNpemUgPSBtX3By
aW1hcnlDb250ZXh0LmRyYXdUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd1RleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgZnJvbSwg
dG8pOwotICAgIHJldHVybiBzaXplOworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwogfQogCi12b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKK3ZvaWQgQmlm
dXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVy
JiBmaWx0ZXIsIEZpbHRlclJlc3VsdHMmIGZpbHRlclJlc3VsdHMpCiB7Ci0gICAgbV9wcmltYXJ5
Q29udGV4dC5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9p
bnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3Vy
Y2VJbWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOworICAgIG1f
c2Vjb25kYXJ5Q29udGV4dC5kcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291
cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIGZpbHRlclJlc3VsdHMpOwogfQogCi12b2lkIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBj
YXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiB0bykKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3RW1waGFz
aXNNYXJrcyhjYXNjYWRlLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7Ci0gICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdFbXBoYXNpc01hcmtzKGNhc2NhZGUsIHJ1biwgbWFyaywgcG9pbnQs
IGZyb20sIHRvKTsKKyAgICBtX3ByaW1hcnlDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Jp
ZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBjYXNjYWRlLCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3Qmlk
aVRleHQoY2FzY2FkZSwgcnVuLCBwb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKLSAg
ICBtX3NlY29uZGFyeUNvbnRleHQuZHJhd0JpZGlUZXh0KGNhc2NhZGUsIHJ1biwgcG9pbnQsIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3U3lzdGVt
SW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0aW9uUmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250
ZXh0LmRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsKK30KKwor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5kcmF3UGF0dGVybihp
bWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0ZXJuKGltYWdlLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKK30KKwordm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihJ
bWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5k
cmF3UGF0dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0LmRyYXdQYXR0
ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgQmlmdXJjYXRl
ZEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit7CisgICAgbV9wcmltYXJ5Q29udGV4dC5w
YWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgbV9zZWNvbmRhcnlD
b250ZXh0LnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pCisKK3ZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdN
b2RlKQoreworICAgIG1fcHJpbWFyeUNvbnRleHQuZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CisgICAgbV9zZWNv
bmRhcnlDb250ZXh0LmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhz
LCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEJpZnVyY2F0ZWRHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQpAQCAtNDA3LDE2ICszMzcsOSBA
QCB2b2lkIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LAogICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5kcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIG1hcmtlclN0eWxlKTsKIH0KIAotdm9pZCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXRVUkxGb3JSZWN0KHVy
bCwgcmVjdCk7Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldFVSTEZvclJlY3QodXJsLCByZWN0
KTsKLX0KLQotdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZv
clJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIEJp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0CiB7
Ci0gICAgbV9wcmltYXJ5Q29udGV4dC5zZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7
Ci0gICAgbV9zZWNvbmRhcnlDb250ZXh0LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0
KTsKKyAgICByZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5zdXBwb3J0c0ludGVybmFsTGlua3MoKTsK
IH0KIAogdm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKQEAgLTQyNSwx
OCArMzQ4LDE2IEBAIHZvaWQgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRp
b25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QKICAgICBtX3NlY29uZGFyeUNvbnRl
eHQuYWRkRGVzdGluYXRpb25BdFBvaW50KG5hbWUsIHBvaW50KTsKIH0KIAotYm9vbCBCaWZ1cmNh
dGVkR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAordm9pZCBC
aWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIG1fcHJpbWFy
eUNvbnRleHQuc3VwcG9ydHNJbnRlcm5hbExpbmtzKCk7CisgICAgbV9wcmltYXJ5Q29udGV4dC5z
ZXREZXN0aW5hdGlvbkZvclJlY3QobmFtZSwgcmVjdCk7CisgICAgbV9zZWNvbmRhcnlDb250ZXh0
LnNldERlc3RpbmF0aW9uRm9yUmVjdChuYW1lLCByZWN0KTsKIH0KIAotdm9pZCBCaWZ1cmNhdGVk
R3JhcGhpY3NDb250ZXh0OjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQor
dm9pZCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgLy8gVGhpcyBjYWxscyB1cGRhdGVT
dGF0ZSgpIGluc3RlYWQgb2YgZGlkVXBkYXRlU3RhdGUoKSBzbyB0aGF0IGNoYW5nZXMKLSAgICAv
LyBhcmUgYWxzbyBhcHBsaWVkIHRvIGVhY2ggY29udGV4dCdzIEdyYXBoaWNzQ29udGV4dFN0YXRl
LCBzbyB0aGF0IGNvZGUKLSAgICAvLyBpbnRlcm5hbCB0byB0aGUgY2hpbGQgY29udGV4dHMgdGhh
dCByZWFkcyBmcm9tIHRoZSBzdGF0ZSBnZXRzIHRoZSByaWdodCB2YWx1ZXMuCi0gICAgbV9wcmlt
YXJ5Q29udGV4dC51cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOwotICAgIG1fc2Vjb25kYXJ5Q29u
dGV4dC51cGRhdGVTdGF0ZShzdGF0ZSwgZmxhZ3MpOworICAgIG1fcHJpbWFyeUNvbnRleHQuc2V0
VVJMRm9yUmVjdCh1cmwsIHJlY3QpOworICAgIG1fc2Vjb25kYXJ5Q29udGV4dC5zZXRVUkxGb3JS
ZWN0KHVybCwgcmVjdCk7CiB9CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNFKENBSVJPKQpAQCAt
NDQ2LDUgKzM2NywxMCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEJpZnVyY2F0
ZWRHcmFwaGljc0NvbnRleHQ6OmRlcHJlY2F0ZWRQcml2YXRlQ29udAogfQogI2VuZGlmCiAKK0Zs
b2F0UmVjdCBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK3sKKyAgICBy
ZXR1cm4gbV9wcmltYXJ5Q29udGV4dC5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5n
TW9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4
dC5oCmluZGV4IGY1OGIzNGM5MTQzNDJiNzM3NzcyN2MxMWE3M2I2ZDgyMThlMTU1NmYuLjdhMzdh
MTEzZGQ4MTVlYjNiOTU2MDc1MmQ5ZGM3MGViNWE4OTdjNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250
ZXh0LmgKQEAgLTQzLDgzICs0Myw1NCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdDsKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250
ZXh0KCkgY29uc3QgZmluYWw7CiAKLSAgICB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICB2b2lkIHJl
c3RvcmUoKSBmaW5hbDsKKyNpZiBVU0UoQ0cpCisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwog
Ci0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25l
c3MgPSAxKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFs
OworI2VuZGlmCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7
CiAKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAg
ICB2b2lkIGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAjaWYgVVNFKENHKQogICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
ZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBmYWN0b3IpIGZpbmFsOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpIGZpbmFsOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
IAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOwot
Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKLSAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7Ci0gICAgdm9pZCBj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0gICAgdm9pZCBzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7Ci0KLSNpZiBVU0UoQ0cpCi0g
ICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwotICAgIGJvb2wgaXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKCkgY29uc3QgZmluYWw7Ci0KICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6
RXZlbk9kZCkgZmluYWw7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotCiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJl
Y3QpIGZpbmFsOwogCi0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBX
aW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7Ci0KLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25z
dCBmaW5hbDsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwot
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgZmluYWw7Ci0KLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSkgZmluYWw7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9
KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdl
OjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pIGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7Ci0jZW5kaWYKKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dDo6c2NhbGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bDsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7Ci0gICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisgICAgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29u
c3QgUGF0aCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbDsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0g
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91
bmRBbGxTaWRlcykgZmluYWw7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZpbmFsOwogCisgICAg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7
CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0
IENvbG9yJikgZmluYWw7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTI3LDIzICs5OCwyNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jiwg
ZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICNlbmRpZgogCi0gICAgRmxvYXRT
aXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8g
PSBzdGQ6Om51bGxvcHQpIGZpbmFsOwotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5h
bDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNp
Z25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQp
IGZpbmFsOwotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJl
YWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWw7
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0
ZXImLCBGaWx0ZXJSZXN1bHRzJikgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworI2lm
IEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFsOworI2VuZGlmCiAKKyAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKICAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBm
aW5hbDsKLQogICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CiAKLSAgICB2b2lkIHNldFVSTEZv
clJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KLSAgICB2b2lkIHNl
dERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOwotICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotCiAgICAgYm9vbCBzdXBwb3J0c0ludGVybmFs
TGlua3MoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIHNldERl
c3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7Cisg
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRp
bmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CiAKICNpZiBPUyhXSU5ET1dTKSAmJiAhVVNF
KENBSVJPKQogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXgg
YmI0ZGFjMDE5YzViOWUxM2IxMzdhZTY5NGU0YmY2YjI3NmJmY2MwZC4uMWMxYjk2ZWM1Yjk4M2Nj
NWYxOGQ2ZmYxZmQyNTg1N2ZhOTQzYzQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcApAQCAt
OTAsNyArOTAsNyBAQCB2b2lkIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOjpkcmF3Q3Jvc3NmYWRl
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIEltYWdlRHJhd1Jlc3VsdCBDcm9zc2ZhZGVHZW5l
cmF0ZWRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkgfSk7CiAgICAgY29udGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQu
dHJhbnNsYXRlKGRzdFJlY3QubG9jYXRpb24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9
IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAyNWEzZDNmZTg3NzMzMWRkYTM5NTc4MDEx
YjZkODkwZjIxMmM3MmU2Li4zYmNiNTA1YWYzYzI4MmY0MjIzMjVjZDdlMzAwNTM0ZmQ5Zjk5Y2I5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhz
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5
cGhzUmVjb3JkZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDI0ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdy
YWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiUGF0dGVy
bi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
U3RhdGUuaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CiAKLSNpZiBVU0UoQ09SRV9URVhUKQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KLSNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2lmIFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2Vsc2UKLSNpbmNs
dWRlIDxwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRmxvYXRQb2ludDsKQEAgLTYyLDc2ICs0OSwzMiBAQCBwdWJsaWM6CiAjaWYgVVNFKENP
UkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKICAgICB2b2lkIGRyYXdOYXRpdmVUZXh0KENURm9u
dFJlZiwgQ0dGbG9hdCBmb250U2l6ZSwgQ1RMaW5lUmVmLCBDR1JlY3QgbGluZVJlY3QpOwogCi0g
ICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVm
LCBDR1JlY3QpOwotICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYpOwotICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBo
W10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7Ci0gICAgdm9pZCBy
ZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIENHUmVjdCwg
Q0dJbWFnZVJlZik7CisgICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmKTsKKyAg
ICB2b2lkIHJlY29yZEVuZExheWVyKENHR1N0YXRlUmVmKTsKKyAgICB2b2lkIHJlY29yZERyYXdH
bHlwaHMoQ0dHU3RhdGVSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlv
bnNbXSwgc2l6ZV90IGNvdW50KTsKKyAgICB2b2lkIHJlY29yZERyYXdJbWFnZShDR0dTdGF0ZVJl
ZiwgQ0dSZWN0LCBDR0ltYWdlUmVmKTsKICNlbmRpZgogCi0gICAgRGVjb25zdHJ1Y3REcmF3R2x5
cGhzIGRlY29uc3RydWN0RHJhd0dseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb25zdHJ1Y3RE
cmF3R2x5cGhzOyB9Ci0KIHByaXZhdGU6Ci0jaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JN
KFdJTikKLSAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRl
eHQoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25P
VFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFu
Y2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3T1RTVkdSdW4oY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBG
b250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3Tm9uT1RTVkdSdW4oY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSk7Ci0KLSAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYpOwotICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICB2b2lkIHByZXBhcmVJbnRlcm5hbENvbnRleHQo
Y29uc3QgRm9udCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGNvbmNsdWRlSW50ZXJu
YWxDb250ZXh0KCk7CisgICAgdm9pZCBzZXRJbnRlcm5hbEZvbnQoY29uc3QgRm9udCYsIEZvbnRT
bW9vdGhpbmdNb2RlKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBwcmVwYXJlSW50ZXJuYWxD
b250ZXh0KCk7CisgICAgdm9pZCByZXN0b3JlRGVzdGluYXRpb25Db250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBvcmlnaW5hbFN0YXRlKTsKIAotICAgIHZvaWQgdXBkYXRlRmlsbENv
bG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0gbnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRy
KTsKLSAgICB2b2lkIHVwZGF0ZVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiwgR3JhZGllbnQqID0g
bnVsbHB0ciwgUGF0dGVybiogPSBudWxscHRyKTsKLSAgICB2b2lkIHVwZGF0ZUNUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICBlbnVtIGNsYXNzIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
IHsKLSAgICAgICAgVW5zcGVjaWZpZWQsCi0gICAgICAgIFllcywKLSAgICAgICAgTm8KLSAgICB9
OwotICAgIHZvaWQgdXBkYXRlU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBm
bG9hdCBzaGFkb3dCbHVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKTsKLQotI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCi0gICAg
dm9pZCB1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZik7Ci0jZW5kaWYKKyAgICB2b2lkIGRyYXdOb25P
VFNWR1J1bihjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnRQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd09UU1ZHUnVuKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25P
VFNWR1J1bnMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0
YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9v
d25lcjsKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fZGVzdGluYXRpb25Db250ZXh0OwogICAgIERl
Y29uc3RydWN0RHJhd0dseXBocyBtX2RlY29uc3RydWN0RHJhd0dseXBoczsKICAgICBEZXJpdmVG
b250RnJvbUNvbnRleHQgbV9kZXJpdmVGb250RnJvbUNvbnRleHQ7CiAKLSNpZiBVU0UoQ09SRV9U
RVhUKSAmJiAhUExBVEZPUk0oV0lOKQotICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1f
aW50ZXJuYWxDb250ZXh0OwotI2VuZGlmCi0KICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9u
dCB7IG51bGxwdHIgfTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X29yaWdpbmFsVGV4dE1hdHJpeDsKIAotICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIHN0cnVj
dCBTdHlsZSB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIFJlZlB0cjxH
cmFkaWVudD4gZ3JhZGllbnQ7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybTsKLSAgICAgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuOwotICAg
ICAgICB9OwotICAgICAgICBTdHlsZSBmaWxsU3R5bGU7Ci0gICAgICAgIFN0eWxlIHN0cm9rZVN0
eWxlOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0KLSAgICAgICAgc3RydWN0IFNo
YWRvd1N0YXRlIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7Ci0gICAgICAgICAgICBm
bG9hdCBibHVyIHsgMCB9OwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBi
b29sIGlnbm9yZVRyYW5zZm9ybXMgeyBmYWxzZSB9OwotICAgICAgICB9OwotICAgICAgICBTaGFk
b3dTdGF0ZSBzaGFkb3c7Ci0gICAgfTsKLSAgICBTdGF0ZSBtX29yaWdpbmFsU3RhdGU7Ci0gICAg
U3RhdGUgbV9jdXJyZW50U3RhdGU7CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJ
TikKKyAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg1MTgwYWQxMDlmZDgxOGU5
YmIxNTg4Y2U5NjJhYjQ2MzA4MTZhMDkuLjM2MTFiMTJjYTlhYjI5ZWI5MjFmMjMyNWUxZjk2ZDI5
NTI1M2M3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5jcHAKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1bgog
CiBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRD
YXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBj
b25zdAogewotICAgIEFTU0VSVCghY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpOworICAgIEFT
U0VSVF9VTlVTRUQoY29udGV4dCwgIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICB1
bnNpZ25lZCBkZXN0aW5hdGlvbiA9IHRvLnZhbHVlX29yKHJ1bi5sZW5ndGgoKSk7CiAgICAgCiAg
ICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRp
YWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTAwMDUwCkBAIC0yMTQsNyArMjE0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0
OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlM
aXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxh
eUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+KCk7Ci0gICAgRGlzcGxheUxpc3Q6OlJlY29yZGVy
SW1wbCByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9h
dFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1
Y3REcmF3R2x5cGhzOjpObyk7CisgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVySW1wbCByZWNvcmRp
bmdDb250ZXh0KCpkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6Tm8pOwogICAgIAogICAg
IEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBo
QnVmZmVyLmluaXRpYWxBZHZhbmNlKCkpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5n
Q29udGV4dCwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1h
Z2UuY3BwCmluZGV4IDY0NTg0ZTVjZmUwMTE4ODJlZmFiMmUyM2MzYTU5NGUxNzgyZjI4OTAuLjJm
ODI3ZjYyNWY2NGI1OWNhMWE2NjQ5NjA3MzBmMDNjMjNiYzM3YWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCkBAIC00Myw3ICs0
Myw3IEBAIEdyYWRpZW50SW1hZ2U6On5HcmFkaWVudEltYWdlKCkgPSBkZWZhdWx0OwogSW1hZ2VE
cmF3UmVzdWx0IEdyYWRpZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZGVzdENvbnRleHQpOwotICAgIGRlc3RDb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMu
YmxlbmRNb2RlKCkpOworICAgIGRlc3RDb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRpb25z
LmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgZGVzdENv
bnRleHQuY2xpcChkZXN0UmVjdCk7CiAgICAgZGVzdENvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0
LmxvY2F0aW9uKCkpOwogICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkp
CkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgR3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAgbV9ncmFkaWVu
dC0+YWRqdXN0UGFyYW1ldGVyc0ZvclRpbGVkRHJhd2luZyhhZGp1c3RlZFNpemUsIGFkanVzdGVk
U3JjUmVjdCwgc3BhY2luZyk7CiAKICAgICAvLyBGYWN0b3IgaW4gdGhlIGRlc3RpbmF0aW9uIGNv
bnRleHQncyBzY2FsZSB0byBnZW5lcmF0ZSBhdCB0aGUgYmVzdCByZXNvbHV0aW9uCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgQWZmaW5lVHJhbnNm
b3JtIGRlc3RDb250ZXh0Q1RNID0gZGVzdENvbnRleHQuZ2V0Q1RNKCk7CiAgICAgZG91YmxlIHhT
Y2FsZSA9IGZhYnMoZGVzdENvbnRleHRDVE0ueFNjYWxlKCkpOwogICAgIGRvdWJsZSB5U2NhbGUg
PSBmYWJzKGRlc3RDb250ZXh0Q1RNLnlTY2FsZSgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gYWRq
dXN0ZWRQYXR0ZXJuQ1RNID0gcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDBiYjEzNTk3
Y2VhNzM2OWRiYmM2ZTE3MjdmMjZjOTJiOGZiNzUxNzYuLmNmOGM3MThiODEyYzc5NzkxZjJiZTNl
YjdkOGJlOGQ1NWEyYzMzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVy
SW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCkBAIC0zNiw0NzMgKzM1LDMx
MCBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2lu
Y2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIlN5c3RlbUltYWdlLmgi
Ci0jaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlRleHRCb3hJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBUZXh0Qm94SXRlcmF0b3IgewotcHVibGljOgotICAgIFRleHRCb3hJdGVyYXRvcigpCi0g
ICAgICAgIDogbV90ZXh0UnVuKDApCi0gICAgICAgICwgbV9vZmZzZXQoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgVGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVk
IG9mZnNldCkKLSAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKLSAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCi0gICAgewotICAgIH0KLQotICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0K
LSAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+
PSBtX3RleHRSdW4tPmxlbmd0aCgpOyB9Ci0gICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0
dXJuICgqbV90ZXh0UnVuKVttX29mZnNldF07IH0KLSAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGly
ZWN0aW9uKGN1cnJlbnQoKSk7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94
SXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09
IG90aGVyLm1fb2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47Ci0gICAgfQot
Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IFRl
eHRSdW4qIG1fdGV4dFJ1bjsKLSAgICB1bnNpZ25lZCBtX29mZnNldDsKLX07Ci0KLSNkZWZpbmUg
Q0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoZmxhZywgcHJvcGVydHkpIFwKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZykgJiYgKG1fc3Rh
dGUucHJvcGVydHkgIT0gc3RhdGUucHJvcGVydHkpKSBcCi0gICAgICAgIGNoYW5nZUZsYWdzLmFk
ZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZyk7Ci0KLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAs
IHNob3VsZFNtb290aEZvbnRzKHRydWUpCi0gICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHModHJ1ZSkKLSAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotICAgICwgZHJh
d0x1bWluYW5jZU1hc2soZmFsc2UpCitHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxD
VE0pCisgICAgOiBtX3N0YXRlKGluaXRpYWxDbGlwLCBjaGFuZ2VGbGFncywgaW5pdGlhbENUTSkK
IHsKIH0KIAotR3JhcGhpY3NDb250ZXh0U3RhdGU6On5HcmFwaGljc0NvbnRleHRTdGF0ZSgpID0g
ZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0YXRl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKSA9IGRlZmF1bHQ7
Ci1HcmFwaGljc0NvbnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKLUdyYXBoaWNzQ29udGV4dFN0
YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpID0gZGVmYXVsdDsKLQotdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6bWVyZ2VDaGFuZ2Vz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRl
eHQoKQogewotICAgIGF1dG8gc3Ryb2tlRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSB9OwotICAgIGlm
IChmbGFncy5jb250YWluc0FueShzdHJva2VGbGFncykpIHsKLSAgICAgICAgc3Ryb2tlQ29sb3Ig
PSBzdGF0ZS5zdHJva2VDb2xvcjsKLSAgICAgICAgc3Ryb2tlR3JhZGllbnQgPSBzdGF0ZS5zdHJv
a2VHcmFkaWVudDsKLSAgICAgICAgc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZVBhdHRlcm47
Ci0gICAgfQotCi0gICAgYXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsQ29sb3JDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFn
cy5jb250YWluc0FueShmaWxsRmxhZ3MpKSB7Ci0gICAgICAgIGZpbGxDb2xvciA9IHN0YXRlLmZp
bGxDb2xvcjsKLSAgICAgICAgZmlsbEdyYWRpZW50ID0gc3RhdGUuZmlsbEdyYWRpZW50OwotICAg
ICAgICBmaWxsUGF0dGVybiA9IHN0YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAg
ICAgICBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgIHNoYWRvd0Js
dXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwotICAgICAgICBzaGFkb3dDb2xvciA9IHN0YXRlLnNoYWRv
d0NvbG9yOwotICAgICAgICBzaGFkb3dSYWRpdXNNb2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZTsKLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIHN0cm9rZVRoaWNrbmVzcyA9IHN0YXRl
LnN0cm9rZVRoaWNrbmVzczsKLQotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgdGV4dERyYXdpbmdNb2Rl
ID0gc3RhdGUudGV4dERyYXdpbmdNb2RlOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIHN0cm9rZVN0eWxl
ID0gc3RhdGUuc3Ryb2tlU3R5bGU7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkKLSAgICAgICAgZmlsbFJ1bGUgPSBzdGF0ZS5m
aWxsUnVsZTsKKyAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghbV90
cmFuc3BhcmVuY3lMYXllckNvdW50KTsKK30KIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBhbHBoYSA9IHN0YXRlLmFs
cGhhOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQoreworICAgIG1fc3RhY2suYXBwZW5k
KG1fc3RhdGUpOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkJsZW5kTW9kZUNoYW5nZSB9KSkgewotICAgICAgICBjb21wb3NpdGVPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgICAgICBibGVuZE1vZGUgPSBzdGF0ZS5ibGVuZE1vZGU7
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCit7CisgICAgaWYgKG1fc3RhY2suaXNF
bXB0eSgpKSB7CisgICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxp
YXNDaGFuZ2UpKQotICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBzdGF0ZS5zaG91bGRBbnRpYWxp
YXM7CisgICAgbV9zdGF0ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBtX2xhc3RBcHBsaWVk
U3RhdGUgPSBzdGQ6Om51bGxvcHQ7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKLSAgICAgICAgc2hvdWxkU21v
b3RoRm9udHMgPSBzdGF0ZS5zaG91bGRTbW9vdGhGb250czsKLQotICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKSkKLSAgICAgICAgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc3RhdGUuc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Cisg
ICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0YWNrIGJ1ZmZlciB3aGVu
IGl0IGdvZXMgZW1wdHkuCisgICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkg
c2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5LgorICAgIGlm
IChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zdGFjay5jbGVhcigpOworfQogCi0gICAg
aWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFz
a0NoYW5nZSkpCi0gICAgICAgIGRyYXdMdW1pbmFuY2VNYXNrID0gc3RhdGUuZHJhd0x1bWluYW5j
ZU1hc2s7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKQorewor
ICAgIG1fc3RhdGUuZGlkQXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBtX2xhc3RBcHBsaWVkU3Rh
dGUgPSBtX3N0YXRlOworfQogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKLSAgICAgICAgaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7CitG
bG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0Cit7CisgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTSgpOworICAgIHJldHVybiBGbG9hdFNpemUo
dHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworfQorICAgIAorRmxvYXRT
aXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKCk7CisgICAgYXV0byB0cmFuc2Zvcm1lZERl
c3RSZWN0ID0gdHJhbnNmb3JtLm1hcFJlY3QoZGVzdFJlY3QpOworICAgIHJldHVybiB0cmFuc2Zv
cm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOworfQogCi0jaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKSkKLSAgICAgICAgdXNlRGFya0FwcGVhcmFu
Y2UgPSBzdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsKLSNlbmRpZgordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpCit7CisgICAgKyttX3RyYW5zcGFyZW5j
eUxheWVyQ291bnQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CisgICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3Vu
dCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OworfQogCi0gICAgQ0hFQ0tf
Rk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlR3JhZGllbnRDaGFuZ2UsIHN0cm9rZUdyYWRpZW50
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VQYXR0ZXJuQ2hhbmdlLCBz
dHJva2VQYXR0ZXJuKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShGaWxsR3JhZGll
bnRDaGFuZ2UsIGZpbGxHcmFkaWVudCk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFko
RmlsbFBhdHRlcm5DaGFuZ2UsIGZpbGxQYXR0ZXJuKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3N0YXRlLmNsaXAocmVjdCk7Cit9
CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKQotICAgICAgICAmJiAobV9zdGF0ZS5zaGFkb3dPZmZzZXQgIT0gc3RhdGUu
c2hhZG93T2Zmc2V0Ci0gICAgICAgICAgICB8fCBtX3N0YXRlLnNoYWRvd0JsdXIgIT0gc3RhdGUu
c2hhZG93Qmx1cgotICAgICAgICAgICAgfHwgbV9zdGF0ZS5zaGFkb3dDb2xvciAhPSBzdGF0ZS5z
aGFkb3dDb2xvcikpCi0gICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSkKK3sKKyAgICBtX3N0YXRlLmNsaXAocGF0aC5mYXN0Qm91bmRp
bmdSZWN0KCkpOworfQogCi0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoU3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlLCBzdHJva2VUaGlja25lc3MpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BS
T1BFUlRZKFRleHREcmF3aW5nTW9kZUNoYW5nZSwgdGV4dERyYXdpbmdNb2RlKTsKLSAgICBDSEVD
S19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VDb2xvckNoYW5nZSwgc3Ryb2tlQ29sb3IpOwot
ICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxDb2xvckNoYW5nZSwgZmlsbENvbG9y
KTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShTdHJva2VTdHlsZUNoYW5nZSwgc3Ry
b2tlU3R5bGUpOwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKEZpbGxSdWxlQ2hhbmdl
LCBmaWxsUnVsZSk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoQWxwaGFDaGFuZ2Us
IGFscGhhKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSb3Vu
ZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwUGF0aChwYXRoKTsKK30KIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJh
dGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KQotICAg
ICAgICAmJiAobV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciAhPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciB8fCBtX3N0YXRlLmJsZW5kTW9kZSAhPSBzdGF0ZS5ibGVuZE1vZGUpKSB7Ci0gICAgICAg
IGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlKTsKLSAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQoreworICAgIGlmICghcmVjdC5pc1JvdW5k
ZWQoKSkgeworICAgICAgICBjbGlwT3V0KHJlY3QucmVjdCgpKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKFNob3VsZEFudGlhbGlhc0No
YW5nZSwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJUWShT
aG91bGRTbW9vdGhGb250c0NoYW5nZSwgc2hvdWxkU21vb3RoRm9udHMpOwotICAgIENIRUNLX0ZP
Ul9DSEFOR0VEX1BST1BFUlRZKFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKLSAgICBDSEVDS19GT1JfQ0hBTkdFRF9QUk9QRVJU
WShTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
OwotICAgIENIRUNLX0ZPUl9DSEFOR0VEX1BST1BFUlRZKERyYXdMdW1pbmFuY2VNYXNrQ2hhbmdl
LCBkcmF3THVtaW5hbmNlTWFzayk7Ci0gICAgQ0hFQ0tfRk9SX0NIQU5HRURfUFJPUEVSVFkoSW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSwgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7
Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIENIRUNLX0ZPUl9DSEFOR0VE
X1BST1BFUlRZKFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlLCB1c2VEYXJrQXBwZWFyYW5jZSk7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiBjaGFuZ2VGbGFnczsKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0
aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKKyAgICBjbGlwT3V0KHBhdGgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBt
X3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwgZmxhZ3MpOwotCi0gICAgYXV0byBzdHJva2VGbGFn
cyA9IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VQYXR0ZXJuQ2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHN0cm9rZUZs
YWdzKSkKLSAgICAgICAgbV9jaGFuZ2VGbGFncy5yZW1vdmUoc3Ryb2tlRmxhZ3MpOwotCi0gICAg
YXV0byBmaWxsRmxhZ3MgPSB7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSB9OwotICAgIGlmIChmbGFncy5jb250YWluc0FueShm
aWxsRmxhZ3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShmaWxsRmxhZ3MpOwotCi0g
ICAgYXV0byBjb21wb3NpdGVPcGVyYXRvckZsYWdzID0geyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2Rl
Q2hhbmdlIH07Ci0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KGNvbXBvc2l0ZU9wZXJhdG9yRmxh
Z3MpKQotICAgICAgICBtX2NoYW5nZUZsYWdzLnJlbW92ZShjb21wb3NpdGVPcGVyYXRvckZsYWdz
KTsKLQotICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGZsYWdzKTsKKyAgICBpbWFnZUJ1ZmZlci5jbGlw
VG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUdy
YWRpZW50KCptX3N0YXRlLnN0cm9rZUdyYWRpZW50LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0
cm9rZVBhdHRlcm4oKm1fc3RhdGUuc3Ryb2tlUGF0dGVybik7Ci0KLSAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoKm1fc3RhdGUuZmlsbEdyYWRpZW50LCBt
X3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fc3RhdGUuZmlsbFBhdHRlcm4pOwotCi0g
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9z
dGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1
c01vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvIHByZXZpb3VzQ29t
cG9zaXRlTW9kZSA9IGNvbXBvc2l0ZU1vZGUoKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAg
ICAgICBjb250ZXh0LnNldFRleHREcmF3aW5nTW9kZShtX3N0YXRlLnRleHREcmF3aW5nTW9kZSk7
Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fc3Rh
dGUuc3Ryb2tlQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKG1fc3RhdGUuZmlsbENvbG9yKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkpCi0gICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlU3R5bGUobV9zdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2Up
KQotICAgICAgICBjb250ZXh0LnNldEZpbGxSdWxlKG1fc3RhdGUuZmlsbFJ1bGUpOwotCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRBbHBoYShtX3N0YXRlLmFscGhhKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5n
ZSB9KSkKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9zdGF0ZS5jb21w
b3NpdGVPcGVyYXRvciwgbV9zdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkp
Ci0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKG1fc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hvdWxk
U21vb3RoRm9udHMobV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Ci0KLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXRTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMobV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOwotCi0gICAgaWYg
KG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFu
Y2VNYXNrQ2hhbmdlKSkKLSAgICAgICAgY29udGV4dC5zZXREcmF3THVtaW5hbmNlTWFzayhtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkK
LSAgICAgICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpV
c2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIGNvbnRleHQuc2V0VXNlRGFya0FwcGVh
cmFuY2UobV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSk7Ci0jZW5kaWYKKyAgICBzZXRDb21wb3Np
dGVNb2RlKHsgb3BlcmF0aW9uLCBibGVuZE1vZGUgfSk7CisgICAgZmlsbFJlY3QocmVjdCwgY29s
b3IpOworICAgIHNldENvbXBvc2l0ZU1vZGUocHJldmlvdXNDb21wb3NpdGVNb2RlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29u
c3QKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNoYW5nZS1mbGFn
cyIsIG1fY2hhbmdlRmxhZ3MudG9SYXcoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKQotICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoInN0cm9rZS1ncmFkaWVudCIsIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQuZ2V0KCkpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHko
InN0cm9rZS1wYXR0ZXJuIiwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsKLQotICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtZ3JhZGllbnQiLCBtX3N0
YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7Ci0KLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoImZpbGwtcGF0dGVybiIsIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOwor
ICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctYmx1ciIsIG1fc3RhdGUuc2hhZG93Qmx1cik7Ci0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LW9mZnNldCIsIG1fc3RhdGUuc2hhZG93T2Zm
c2V0KTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctY29sb3IiLCBtX3N0YXRlLnNo
YWRvd0NvbG9yKTsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3kt
cmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKK3sKKyAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKKyAgICAgICAgZmlsbFJlY3QocmVj
dC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICAgICAgCisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOworICAgIHNldENvbXBvc2l0ZU1vZGUo
eyBwcmV2aW91c09wZXJhdG9yLCBibGVuZE1vZGUgfSk7CisgICAgZmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ocHJldmlvdXNPcGVyYXRvcik7
Cit9CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdHJv
a2UtdGhpY2tuZXNzIiwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNo
YW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgidGV4dC1kcmF3aW5nLW1vZGUiLCBtX3N0
YXRlLnRleHREcmF3aW5nTW9kZS50b1JhdygpKTsKLQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic3Ryb2tlLWNvbG9yIiwgbV9zdGF0ZS5zdHJva2VDb2xvcik7Ci0K
LSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaWxsLWNvbG9yIiwgbV9z
dGF0ZS5maWxsQ29sb3IpOwotCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzdHJva2Utc3R5bGUiLCBtX3N0YXRlLnN0cm9rZVN0eWxlKTsKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQoreworICAgIFBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFu
Z2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZpbGwtcnVsZSIsIG1fc3RhdGUuZmlsbFJ1
bGUpOworICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNaZXJvKCkpCisgICAgICAg
IHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKKyAgICBlbHNlCisgICAgICAg
IHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAotICAgIGlmIChtX2NoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEiLCBtX3N0YXRlLmFscGhhKTsKKyAgICBXaW5kUnVs
ZSBvbGRGaWxsUnVsZSA9IGZpbGxSdWxlKCk7CisgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmls
bENvbG9yKCk7CisgICAgCisgICAgc2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5PZGQpOworICAg
IHNldEZpbGxDb2xvcihjb2xvcik7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3BlcmF0b3IiLCBtX3N0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICAKKyAgICBzZXRGaWxsUnVsZShvbGRG
aWxsUnVsZSk7CisgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hh
bmdlKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgbV9zdGF0ZS5ibGVu
ZE1vZGUpOwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRFbGxpcHNl
KGVsbGlwc2UpOworICAgIGZpbGxQYXRoKHBhdGgpOworfQogCi0gICAgaWYgKG1fY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hvdWxkLWFudGlhbGlhcyIsIG1fc3RhdGUuc2hv
dWxkQW50aWFsaWFzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRo
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3sKKyAgICBQYXRoIHBhdGg7CisgICAgcGF0aC5h
ZGRFbGxpcHNlKGVsbGlwc2UpOworICAgIHN0cm9rZVBhdGgocGF0aCk7Cit9CiAKLSAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3Ro
Rm9udHNDaGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNob3VsZC1zbW9vdGgtZm9u
dHMiLCBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxp
cHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikKK3sKKyAgICBhdXRvIG9sZEZpbGxD
b2xvciA9IGZpbGxDb2xvcigpOworICAgIGF1dG8gb2xkU3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xv
cigpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic2hvdWxkLXN1YnBpeGVsLXF1YW50aXplLWZvbnRzIiwgbV9zdGF0ZS5zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMpOworICAgIHNldEZpbGxDb2xvcihzaGFkb3dDb2xvcik7Cisg
ICAgc2V0U3Ryb2tlQ29sb3Ioc2hhZG93Q29sb3IpOworICAgIGRyYXdFbGxpcHNlKEZsb2F0UmVj
dChyZWN0LngoKSwgcmVjdC55KCkgKyAxLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
IAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyIsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpOworICAgIHNldEZpbGxDb2xvcihlbGxpcHNlQ29sb3IpOworICAgIHNldFN0cm9rZUNvbG9y
KGVsbGlwc2VDb2xvcik7CisgICAgZHJhd0VsbGlwc2UocmVjdCk7CiAKLSAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tD
aGFuZ2UpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImRyYXctbHVtaW5hbmNlLW1hc2siLCBt
X3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrKTsKKyAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9y
KTsKKyAgICBzZXRTdHJva2VDb2xvcihvbGRTdHJva2VDb2xvcik7Cit9CiAKLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSkpCi0gICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgidXNlLWRhcmstYXBwZWFyYW5jZSIsIG1fc3RhdGUudXNlRGFya0FwcGVhcmFu
Y2UpOwotI2VuZGlmCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3sKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQog
Ci1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
IHsKLSAgICBzdGF0ZUNoYW5nZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7CisgICAgZHJhd0lt
YWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXpl
KCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09w
dGlvbnMpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAg
IEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5sb2dpY2FsU2l6ZSgpKSwg
aW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhY2suYXBw
ZW5kKG1fc3RhdGUpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBv
bGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKKyAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIGlmIChtX3N0YWNrLmlzRW1wdHko
KSkgewotICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9zdGF0ZSA9IG1fc3RhY2subGFzdCgpOwotICAgIG1fc3RhY2sucmVt
b3ZlTGFzdCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHdlIGRlYWxsb2NhdGUgdGhlIHN0YXRlIHN0
YWNrIGJ1ZmZlciB3aGVuIGl0IGdvZXMgZW1wdHkuCi0gICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdp
bGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNh
cGFjaXR5LgotICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zdGFjay5jbGVh
cigpOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwor
ICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0KGRl
c3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dpY2Fs
U2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBtX3N0YXRlLm1lcmdlQ2hhbmdlcyhzdGF0ZSwg
ZmxhZ3MpOwotICAgIGRpZFVwZGF0ZVN0YXRlKHN0YXRlLCBmbGFncyk7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5s
b2dpY2FsU2l6ZSgpOworICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdl
KSwgZGVzdGluYXRpb24sIEZsb2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNv
bnN0IENvbG9yJiBzaGFkb3dDb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3Vt
aW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHNhdmUoKTsKLQotICAgIHNldFN0cm9rZUNvbG9y
KHNoYWRvd0NvbG9yKTsKLSAgICBzZXRGaWxsQ29sb3Ioc2hhZG93Q29sb3IpOwotCi0gICAgZHJh
d0VsbGlwc2UoRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSkpOwotCi0gICAgc2V0U3Ryb2tlQ29sb3IoZWxsaXBzZUNvbG9yKTsKLSAg
ICBzZXRGaWxsQ29sb3IoZWxsaXBzZUNvbG9yKTsKLQotICAgIGRyYXdFbGxpcHNlKHJlY3QpOyAg
Ci0KLSAgICByZXN0b3JlKCk7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAg
IEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRo
aXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGltYWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0
ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRz
KQogewotICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRy
OwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSk7CisgICAgYXV0byByZXN1bHQgPSBmaWx0ZXIuYXBwbHkoc291cmNlSW1h
Z2UsIHNvdXJjZUltYWdlUmVjdCwgcmVzdWx0cyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gcmVzdWx0LT5pbWFnZUJ1ZmZl
cigpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHNjYWxl
KHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2Nh
bGUoKS5oZWlnaHQoKSB9KTsKKyAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1
bHQtPmFic29sdXRlSW1hZ2VSZWN0KCkpOworICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUm
IG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dSYWRpdXNNb2Rl
IHJhZGl1c01vZGUpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIG1fc3RhdGUuc2hh
ZG93T2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9k
ZSA9IHJhZGl1c01vZGU7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CisgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxv
YXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclNoYWRvdygpCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKLSAgICBtX3N0YXRlLnNoYWRvd0Js
dXIgPSAwOwotICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwotICAgIG1fc3RhdGUu
c2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQ7Ci0gICAgZGlkVXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7Cisg
ICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKGltYWdlUGFpbnRp
bmdPcHRpb25zLm9yaWVudGF0aW9uKCkpKTsKKyAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc3JjUmVjdCwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwg
Q29sb3ImIGNvbG9yKSBjb25zdAorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIG9mZnNldCA9IG1fc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgIGJsdXIgPSBtX3N0YXRl
LnNoYWRvd0JsdXI7Ci0gICAgY29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwotCi0gICAgcmV0
dXJuIGhhc1NoYWRvdygpOworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRl
cnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9u
UXVhbGl0eSgpKTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgbV9zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKLSAgICBtX3N0YXRlLmZpbGxHcmFk
aWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAg
ZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNo
YW5nZSk7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25R
dWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkp
OworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK0ltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAorICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgPSBudWxscHRyOwotICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUocGF0dGVy
bik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVBhdHRlcm5DaGFuZ2UpOworICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUg
JiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CisgICAgICAgIC8vIEp1c3QgZG8gYSBz
Y2FsZS4KKyAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJj
ZSwgb3B0aW9ucyk7CisgICAgfQorCisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOworICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBvcHRpb25zLmNv
bXBvc2l0ZU9wZXJhdG9yKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKIHsKLSAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKLSAgICBtX3N0
YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdU
Rk1vdmUocGF0dGVybik7Ci0gICAgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKKyAgICBzeXN0ZW1JbWFnZS5kcmF3KCp0aGlz
LCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tl
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIG1fc3RhdGUu
c3Ryb2tlQ29sb3IgPSB7IH07Ci0gICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUo
Z3JhZGllbnQpOwotICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHN0
cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0g
bnVsbHB0cjsKLSAgICBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOworICAgIGltYWdlLmRyYXdQYXR0ZXJuKCp0aGlzLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3Jh
ZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKQogewotICAgIG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwotICAgIG1fc3RhdGUu
ZmlsbEdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7Ci0gICAgbV9zdGF0ZS5maWxsR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAgIG1fc3Rh
dGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwotICAgIC8vIEZJWE1FOiBh
bHNvIGZpbGwgcGF0dGVybj8KKyAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsK
KyAgICBGb250Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNv
dW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CisgICAgZHJhd0dseXBo
cyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5n
TW9kZSk7CiB9CiAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCB1bnNpZ25lZCBmcm9tLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB0bykKQEAgLTUxMSwx
MSArMzQ3LDYgQEAgRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICByZXR1cm4gZm9udC5kcmF3
VGV4dCgqdGhpcywgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmdNb2RlKQotewotICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gdG8pCiB7CiAgICAgZm9udC5kcmF3RW1waGFzaXNNYXJrcygqdGhpcywgcnVuLCBt
YXJrLCBwb2ludCwgZnJvbSwgdG8pOwpAQCAtNTQ5LDcgKzM4MCw0NSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sCiAgICAgICAgIGJpZGlSdW4gPSBiaWRpUnVuLT5uZXh0KCk7CiAgICAgfQogCi0g
ICAgYmlkaVJ1bnMuY2xlYXIoKTsKKyAgICBiaWRpUnVucy5jbGVhcigpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHlsZSkKK3sK
KyAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFz
aEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBz
dHlsZSk7Cit9CisKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVC
b3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykKK3sKKyAg
ICBDb2xvciBkdW1teUNvbG9yOworICAgIHJldHVybiBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KHJlY3QsIHByaW50aW5nLCBkdW1teUNvbG9yKTsKK30KKworRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIENvbG9yJiBj
b2xvcikKK3sKKyAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBm
bG9hdCB0aGlja25lc3MgPSBzdGQ6Om1heChyZWN0LmhlaWdodCgpLCAwLjVmKTsKKyAgICBpZiAo
cHJpbnRpbmcpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVj
dC53aWR0aCgpLCB0aGlja25lc3MpKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBnZXRDVE0oKTsKKyAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFz
c3VtaW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KKyAgICBmbG9hdCBzY2FsZSA9IHRyYW5z
Zm9ybS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJh
bnNmb3JtLmEoKTsKKyAgICBpZiAoc2NhbGUgPCAxLjApIHsKKyAgICAgICAgLy8gVGhpcyBjb2Rl
IGFsd2F5cyBkcmF3cyBhIGxpbmUgdGhhdCBpcyBhdCBsZWFzdCBvbmUtcGl4ZWwgbGluZSBoaWdo
LAorICAgICAgICAvLyB3aGljaCB0ZW5kcyB0byB2aXN1YWxseSBvdmVyd2hlbG0gdGV4dCBhdCBz
bWFsbCBzY2FsZXMuIFRvIGNvdW50ZXIgdGhpcworICAgICAgICAvLyBlZmZlY3QsIGFuIGFscGhh
IGlzIGFwcGxpZWQgdG8gdGhlIHVuZGVybGluZSBjb2xvciB3aGVuIHRleHQgaXMgYXQgc21hbGwg
c2NhbGVzLgorICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWluaW11bVVuZGVybGluZUFscGhh
ID0gMC40ZjsKKyAgICAgICAgZmxvYXQgc2hhZGUgPSBzY2FsZSA+IG1pbmltdW1VbmRlcmxpbmVB
bHBoYSA/IHNjYWxlIDogbWluaW11bVVuZGVybGluZUFscGhhOworICAgICAgICBjb2xvciA9IGNv
bG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KHNoYWRlKTsKKyAgICB9CisKKyAgICBGbG9h
dFBvaW50IGRldmljZVBvaW50ID0gdHJhbnNmb3JtLm1hcFBvaW50KHJlY3QubG9jYXRpb24oKSk7
CisgICAgLy8gVmlzdWFsIG92ZXJmbG93IG1pZ2h0IG9jY3VyIGhlcmUgZHVlIHRvIGludGVncmFs
IHJvdW5kZi9jZWlsZi4gdmlzdWFsT3ZlcmZsb3dGb3JEZWNvcmF0aW9ucyBhZGp1c3RzIHRoZSBv
dmVyZmxvdyB2YWx1ZSBmb3IgdW5kZXJsaW5lIGRlY29yYXRpb24uCisgICAgRmxvYXRQb2ludCBk
ZXZpY2VPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kZihkZXZpY2VQb2ludC54KCkpLCBjZWlsZihk
ZXZpY2VQb2ludC55KCkpKTsKKyAgICBpZiAoYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVy
c2UoKSkKKyAgICAgICAgb3JpZ2luID0gaW52ZXJzZS52YWx1ZSgpLm1hcFBvaW50KGRldmljZU9y
aWdpbik7CisgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRo
KCksIHRoaWNrbmVzcykpOwogfQogCiBzdGF0aWMgSW50U2l6ZSBzY2FsZWRJbWFnZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlKQpAQCAtNjM5
LDE4NyArNTA4LDkgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0
ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHIKICAgICByZXR1cm4gY3JlYXRl
U2NhbGVkSW1hZ2VCdWZmZXIocmVjdCwgc2NhbGVGYWN0b3IoKSwgY29sb3JTcGFjZSwgcmVuZGVy
aW5nTW9kZSgpLCByZW5kZXJpbmdNZXRob2QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiBzeXN0ZW1JbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QpCi17Ci0gICAgc3lzdGVtSW1hZ2UuZHJhdygqdGhpcywgZGVzdGlu
YXRpb25SZWN0KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLSAgICByZXR1cm4g
ZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVzdGluYXRpb24sIGltYWdlLnNpemUoKSksIEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25z
KTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBzcmNSZWN0
KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZShpbWFnZVBhaW50aW5nT3B0aW9ucy5vcmllbnRhdGlv
bigpKSk7Ci0gICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNyY1JlY3Qs
IGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0
aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0
eSgpKTsKLSAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxl
ZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZv
clRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICBy
ZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KLUltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxl
RmFjdG9yLAotICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoaFJ1bGUg
PT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewot
ICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCi0gICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgq
dGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICByZXR1cm4gaW1hZ2Uu
ZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhS
dWxlLCB2UnVsZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCi17Ci0gICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBGbG9hdFJlY3Qo
ZGVzdGluYXRpb24sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBGbG9hdFJlY3QoeyB9LCBpbWFnZS5s
b2dpY2FsU2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQotewotICAgIGRyYXdJbWFnZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIEZs
b2F0UmVjdCh7IH0sIGltYWdlLmxvZ2ljYWxTaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3Bl
KCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgIGltYWdlLmRyYXco
KnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgp
OwotICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxvYXRSZWN0
KGRlc3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KHsgfSwgaW1hZ2VMb2dp
Y2FsU2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
aW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2FsU2l6ZSgpOwotICAg
IGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgZGVzdGluYXRpb24sIEZs
b2F0UmVjdCh7IH0sIGltYWdlTG9naWNhbFNpemUpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9w
dGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25z
dW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25z
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJSZXN1bHRzJiByZXN1bHRzKQotewotICAgIGF1dG8gcmVz
dWx0ID0gZmlsdGVyLmFwcGx5KHNvdXJjZUltYWdlLCBzb3VyY2VJbWFnZVJlY3QsIHJlc3VsdHMp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IHJlc3VsdC0+aW1hZ2VCdWZmZXIoKTsKLSAgICBpZiAoIWltYWdlQnVmZmVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53
aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7Ci0gICAgZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgcmVzdWx0LT5hYnNvbHV0ZUltYWdlUmVjdCgpKTsKLSAg
ICBzY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1h
Z2UuZHJhd1BhdHRlcm4oKnRoaXMsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0
aCBwYXRoOwotICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7Ci0gICAgY2xpcFBhdGgocGF0
aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsK
LSAgICAgICAgY2xpcE91dChyZWN0LnJlY3QoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKLSAgICBjbGlw
T3V0KHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCkKLXsKLSAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3Qp
OwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQotewotICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotewotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVP
cGVyYXRpb24oKTsKLSAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7Ci0g
ICAgZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihwcmV2
aW91c09wZXJhdG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpIHsKLSAgICAgICAg
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwot
ICAgICAgICBmaWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKLSAgICAgICAgc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZmlsbFJlY3QocmVjdC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxl
bmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBh
dGguYWRkUmVjdChyZWN0KTsKLQotICAgIGlmICghcm91bmRlZEhvbGVSZWN0LnJhZGlpKCkuaXNa
ZXJvKCkpCi0gICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qocm91bmRlZEhvbGVSZWN0KTsKLSAg
ICBlbHNlCi0gICAgICAgIHBhdGguYWRkUmVjdChyb3VuZGVkSG9sZVJlY3QucmVjdCgpKTsKIAot
ICAgIFdpbmRSdWxlIG9sZEZpbGxSdWxlID0gZmlsbFJ1bGUoKTsKLSAgICBDb2xvciBvbGRGaWxs
Q29sb3IgPSBmaWxsQ29sb3IoKTsKLSAgICAKLSAgICBzZXRGaWxsUnVsZShXaW5kUnVsZTo6RXZl
bk9kZCk7Ci0gICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAotICAgIGZpbGxQYXRoKHBhdGgpOwot
ICAgIAotICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKLSAgICBzZXRGaWxsQ29sb3Iob2xk
RmlsbENvbG9yKTsKLX0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCi17Ci0gICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJh
dGlvbjsKLSAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IGJsZW5kTW9kZTsKLSAgICBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hh
bmdlKTsKLX0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRh
cmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBT
dHJva2VTdHlsZSBwZW5TdHlsZSkKIHsKQEAgLTg1MCw3NyArNTQxLDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxv
YXRQb2ludCYgcDIKICAgICB9CiB9CiAKLUZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxl
RmFjdG9yKCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgcmV0
dXJuIEZsb2F0U2l6ZSh0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci19
Ci0gICAgCi1GbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmco
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dAotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAgICBhdXRvIHRyYW5zZm9ybWVk
RGVzdFJlY3QgPSB0cmFuc2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIHRyYW5z
Zm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGZpbGxQYXRoKHBh
dGgpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgUGF0aCBw
YXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShlbGxpcHNlKTsKLSAgICBmaWxsUGF0aChwYXRoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2Uo
ZWxsaXBzZSk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgZHJhd0xp
bmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAs
IHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOwotfQot
Ci1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcpCi17Ci0gICAgQ29sb3IgZHVt
bXlDb2xvcjsKLSAgICByZXR1cm4gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2Rl
Rm9yVGV4dChyZWN0LCBwcmludGluZywgZHVtbXlDb2xvcik7Ci19Ci0KLUZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgRmxvYXRQb2ludCBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgZmxvYXQgdGhpY2tu
ZXNzID0gc3RkOjptYXgocmVjdC5oZWlnaHQoKSwgMC41Zik7Ci0gICAgaWYgKHByaW50aW5nKQot
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwg
dGhpY2tuZXNzKSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgLy8gSnVz
dCBjb21wdXRlIHNjYWxlIGluIHggZGltZW5zaW9uLCBhc3N1bWluZyB4IGFuZCB5IHNjYWxlcyBh
cmUgZXF1YWwuCi0gICAgZmxvYXQgc2NhbGUgPSB0cmFuc2Zvcm0uYigpID8gc3RkOjpoeXBvdCh0
cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpKSA6IHRyYW5zZm9ybS5hKCk7Ci0gICAgaWYgKHNj
YWxlIDwgMS4wKSB7Ci0gICAgICAgIC8vIFRoaXMgY29kZSBhbHdheXMgZHJhd3MgYSBsaW5lIHRo
YXQgaXMgYXQgbGVhc3Qgb25lLXBpeGVsIGxpbmUgaGlnaCwKLSAgICAgICAgLy8gd2hpY2ggdGVu
ZHMgdG8gdmlzdWFsbHkgb3ZlcndoZWxtIHRleHQgYXQgc21hbGwgc2NhbGVzLiBUbyBjb3VudGVy
IHRoaXMKLSAgICAgICAgLy8gZWZmZWN0LCBhbiBhbHBoYSBpcyBhcHBsaWVkIHRvIHRoZSB1bmRl
cmxpbmUgY29sb3Igd2hlbiB0ZXh0IGlzIGF0IHNtYWxsIHNjYWxlcy4KLSAgICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0IG1pbmltdW1VbmRlcmxpbmVBbHBoYSA9IDAuNGY7Ci0gICAgICAgIGZsb2F0
IHNoYWRlID0gc2NhbGUgPiBtaW5pbXVtVW5kZXJsaW5lQWxwaGEgPyBzY2FsZSA6IG1pbmltdW1V
bmRlcmxpbmVBbHBoYTsKLSAgICAgICAgY29sb3IgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeShzaGFkZSk7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBkZXZpY2VQb2ludCA9IHRy
YW5zZm9ybS5tYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpOwotICAgIC8vIFZpc3VhbCBvdmVyZmxv
dyBtaWdodCBvY2N1ciBoZXJlIGR1ZSB0byBpbnRlZ3JhbCByb3VuZGYvY2VpbGYuIHZpc3VhbE92
ZXJmbG93Rm9yRGVjb3JhdGlvbnMgYWRqdXN0cyB0aGUgb3ZlcmZsb3cgdmFsdWUgZm9yIHVuZGVy
bGluZSBkZWNvcmF0aW9uLgotICAgIEZsb2F0UG9pbnQgZGV2aWNlT3JpZ2luID0gRmxvYXRQb2lu
dChyb3VuZGYoZGV2aWNlUG9pbnQueCgpKSwgY2VpbGYoZGV2aWNlUG9pbnQueSgpKSk7Ci0gICAg
aWYgKGF1dG8gaW52ZXJzZSA9IHRyYW5zZm9ybS5pbnZlcnNlKCkpCi0gICAgICAgIG9yaWdpbiA9
IGludmVyc2UudmFsdWUoKS5tYXBQb2ludChkZXZpY2VPcmlnaW4pOwotICAgIHJldHVybiBGbG9h
dFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKLX0KLQog
ZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0
aChmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKIHsKICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJv
a2VUaGlja25lc3MoKTsKQEAgLTk3MiwxNSArNTkyLDQgQEAgVmVjdG9yPEZsb2F0UG9pbnQ+IEdy
YXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2Fs
TGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9OwogfQogCi0jaWYgRU5BQkxFKFZJREVP
KQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYg
cGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHBsYXllci5wbGF5
ZXJQcml2YXRlKCktPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlv
bik7Ci19Ci0jZW5kaWYKLQotdm9pZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5n
SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQotewotfQotCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IGZiOTVkZDI1YjI3MWRlYjlmYTg1ZmYyZDlmMWY3NDcxNmEwNjZiYWUuLmIzOWNkODI0ODAw
YTk0MjczMWY3NzRhYmQwYTk4Y2RmYmE3NGY4YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtMzAsNDkgKzMwLDE4IEBACiAjaW5jbHVkZSAiRGVzdGluYXRpb25D
b2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0U3RhdGUuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRp
b24uaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgogCi0jaWYgVVNFKENHKQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0OwotI2VsaWYgVVNFKENBSVJPKQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87Ci19Ci10eXBlZGVmIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwotI2Vsc2UKLXR5cGVkZWYgdm9p
ZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQot
I2luY2x1ZGUgIkRJQlBpeGVsRGF0YS5oIgotdHlwZWRlZiBzdHJ1Y3QgSERDX18qIEhEQzsKLSNp
ZiAhVVNFKENHKQotLy8gVUludDggaXMgZGVmaW5lZCBpbiBDb3JlRm91bmRhdGlvbi9DRkJhc2Uu
aAotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJbnQ4OwotI2VuZGlmCi0jZW5kaWYKLQotLy8gWDEx
IGhlYWRlcnMgZGVmaW5lIGEgYnVuY2ggb2YgbWFjcm9zIHdpdGggY29tbW9uIHRlcm1zLCBpbnRl
cmZlcmluZyB3aXRoIFdlYkNvcmUgYW5kIFdURiBlbnVtIHZhbHVlcy4KLS8vIEFzIGEgd29ya2Fy
b3VuZCwgd2UgZXhwbGljaXRseSB1bmRlZiB0aGVtIGhlcmUuCi0jaWYgZGVmaW5lZChOb25lKQot
I3VuZGVmIE5vbmUKLSNlbmRpZgotI2lmIGRlZmluZWQoQmVsb3cpCi0jdW5kZWYgQmVsb3cKLSNl
bmRpZgotI2lmIGRlZmluZWQoU3VjY2VzcykKLSN1bmRlZiBTdWNjZXNzCi0jZW5kaWYKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CkBAIC04Miw3ICs1MSw2
IEBAIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW50
UmVjdDsKIGNsYXNzIE1lZGlhUGxheWVyOwogY2xhc3MgUm91bmRlZFJlY3Q7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHRHTDsKQEAgLTkxLDE3NCArNTksMTIgQEAgY2xhc3MgU3lzdGVtSW1hZ2U7CiBj
bGFzcyBUZXh0UnVuOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKLW5hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7Ci1jbGFzcyBSZWNvcmRlcjsKLX0KLQotZW51bSBjbGFzcyBUZXh0RHJhd2lu
Z01vZGUgOiB1aW50OF90IHsKLSAgICBGaWxsID0gMSA8PCAwLAotICAgIFN0cm9rZSA9IDEgPDwg
MSwKLX07Ci11c2luZyBUZXh0RHJhd2luZ01vZGVGbGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2lu
Z01vZGU+OwotCi0vLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZh
cywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLS8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50
IG9mIHJhZGlpID4gOHB4LgotZW51bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7Ci0g
ICAgRGVmYXVsdCwKLSAgICBMZWdhY3kKLX07Ci0KLWVudW0gU3Ryb2tlU3R5bGUgewotICAgIE5v
U3Ryb2tlLAotICAgIFNvbGlkU3Ryb2tlLAotICAgIERvdHRlZFN0cm9rZSwKLSAgICBEYXNoZWRT
dHJva2UsCi0gICAgRG91YmxlU3Ryb2tlLAotICAgIFdhdnlTdHJva2UsCi19OwotCi1zdHJ1Y3Qg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgewotICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4X3Qg
ewotICAgICAgICBUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAot
ICAgICAgICBTcGVsbGluZywKLSAgICAgICAgR3JhbW1hciwKLSAgICAgICAgQXV0b2NvcnJlY3Rp
b25SZXBsYWNlbWVudCwKLSAgICAgICAgRGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0gICAgfSBtb2Rl
OwotICAgIGJvb2wgc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgeyBmYWxzZSB9OwotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERvY3VtZW50TWFya2Vy
TGluZVN0eWxlPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbW9kZTsKLSAgICBlbmNvZGVyIDw8IHNob3VsZFVz
ZURhcmtBcHBlYXJhbmNlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRp
b25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8TW9kZT4gbW9kZTsK
LSAgICBkZWNvZGVyID4+IG1vZGU7Ci0gICAgaWYgKCFtb2RlKQotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotCi0gICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZTsKLSAgICBkZWNvZGVyID4+IHNob3VsZFVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmICgh
c2hvdWxkVXNlRGFya0FwcGVhcmFuY2UpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4ge3sgKm1vZGUsICpzaG91bGRVc2VEYXJrQXBwZWFyYW5jZSB9fTsKLX0KLQot
c3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUgewotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwotCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRv
cj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7Ci0KLSAgICBlbnVtIENoYW5nZSA6IHVpbnQzMl90
IHsKLSAgICAgICAgU3Ryb2tlR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAotICAgICAgICBTdHJva2VQYXR0ZXJuQ2hhbmdlICAgICAgICAgICAgICAgICAgICAgPSAx
IDw8IDEsCi0gICAgICAgIEZpbGxHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMiwKLSAgICAgICAgRmlsbFBhdHRlcm5DaGFuZ2UgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAzLAotICAgICAgICBTdHJva2VUaGlja25lc3NDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgPSAxIDw8IDQsCi0gICAgICAgIFN0cm9rZUNvbG9yQ2hhbmdlICAgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgNSwKLSAgICAgICAgU3Ryb2tlU3R5bGVDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgID0gMSA8PCA2LAotICAgICAgICBGaWxsQ29sb3JDaGFuZ2UgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDcsCi0gICAgICAgIEZpbGxSdWxlQ2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgOCwKLSAgICAgICAgU2hhZG93Q2hhbmdlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMSA8PCA5LAotICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0No
YW5nZSAgICAgICAgICAgPSAxIDw8IDEwLAotICAgICAgICBBbHBoYUNoYW5nZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDExLAotICAgICAgICBDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UgICAgICAgICAgICAgICAgPSAxIDw8IDEyLAotICAgICAgICBCbGVuZE1vZGVDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDEzLAotICAgICAgICBUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE0LAotICAgICAgICBTaG91bGRBbnRp
YWxpYXNDaGFuZ2UgICAgICAgICAgICAgICAgICAgPSAxIDw8IDE1LAotICAgICAgICBTaG91bGRT
bW9vdGhGb250c0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE2LAotICAgICAgICBTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UgICAgICAgPSAxIDw8IDE3LAotICAgICAgICBE
cmF3THVtaW5hbmNlTWFza0NoYW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDE4LAotICAgICAg
ICBJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlICAgICAgICAgPSAxIDw8IDE5LAotI2lm
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgICAgIFVzZURhcmtBcHBlYXJhbmNlQ2hh
bmdlICAgICAgICAgICAgICAgICA9IDEgPDwgMjAsCi0jZW5kaWYKLSAgICB9OwotICAgIHVzaW5n
IFN0YXRlQ2hhbmdlRmxhZ3MgPSBPcHRpb25TZXQ8Q2hhbmdlPjsKLQotICAgIHZvaWQgbWVyZ2VD
aGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVu
dDsKLSAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKLSAgICAKLSAgICBSZWZQdHI8
R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKLSAgICBSZWZQdHI8UGF0dGVybj4gZmlsbFBhdHRlcm47
Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotCi0gICAgQ29sb3Igc3Ryb2tlQ29sb3Ig
eyBDb2xvcjo6YmxhY2sgfTsKLSAgICBDb2xvciBmaWxsQ29sb3IgeyBDb2xvcjo6YmxhY2sgfTsK
LSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBzdHJva2VHcmFk
aWVudFNwYWNlVHJhbnNmb3JtOwotICAgIEFmZmluZVRyYW5zZm9ybSBmaWxsR3JhZGllbnRTcGFj
ZVRyYW5zZm9ybTsKLQotICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyB7IDAgfTsKLSAgICBmbG9h
dCBzaGFkb3dCbHVyIHsgMCB9OwotICAgIGZsb2F0IGFscGhhIHsgMSB9OwotCi0gICAgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUgeyBTb2xpZFN0cm9rZSB9OwotICAgIFdpbmRSdWxlIGZpbGxSdWxl
IHsgV2luZFJ1bGU6Ok5vblplcm8gfTsKLQotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRE
cmF3aW5nTW9kZSB7IFRleHREcmF3aW5nTW9kZTo6RmlsbCB9OwotICAgIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsK
LSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlIHsgQmxlbmRNb2RlOjpOb3JtYWwgfTsKLSAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlv
blF1YWxpdHk6OkRlZmF1bHQgfTsKLSAgICBTaGFkb3dSYWRpdXNNb2RlIHNoYWRvd1JhZGl1c01v
ZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07Ci0KLSAgICBib29sIHNob3VsZEFudGlh
bGlhcyA6IDE7Ci0gICAgYm9vbCBzaG91bGRTbW9vdGhGb250cyA6IDE7Ci0gICAgYm9vbCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMgOiAxOwotICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgOiAxOwotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwotI2lmIEhBVkUoT1Nf
REFSS19NT0RFX1NVUFBPUlQpCi0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSA6IDE7Ci0jZW5k
aWYKLX07Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSB7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVDaGFuZ2UoKSA9IGRlZmF1bHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRl
KQotICAgICAgICAsIG1fY2hhbmdlRmxhZ3MoZmxhZ3MpCi0gICAgewotICAgIH0KLQotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXNGcm9tU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBjb25zdDsKLQotICAgIHZvaWQgYWNjdW11bGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKTsKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAg
IAotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKLQotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlIG1fc3RhdGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKLX07Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwot
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBo
aWNzQ29udGV4dCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOiAgIAorICAgIGZy
aWVuZCBjbGFzcyBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0OwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworcHVibGljOgorICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dChjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlRmxhZ3MmID0geyB9LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkdy
YXBoaWNzQ29udGV4dCgpOwogCiAgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNzAsMjcwICs3NiwyNzMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1
bFBhaW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIC8vIENvbnRleHQgU3RhdGUK
KyAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRmdWxQYWludERldGVjdGVkOyB9CisgICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3Rl
ZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZs
b2F0IHRoaWNrbmVzcykgeyBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsgZGlk
VXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSk7IH0KLSAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZVRoaWNrbmVzczsgfQorICAgIC8vIENvbnRleHQgU3RhdGUKIAotICAgIHZv
aWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHls
ZSA9IHN0eWxlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9Ci0gICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0eWxlOyB9CisgICAgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgbWVy
Z2VTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG90aGVyKSB7IG1fc3Rh
dGUubWVyZ2VDaGFuZ2VzKG90aGVyKTsgfQorICAgIHZvaWQgbWVyZ2VTdGF0ZURpZmZzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikgeyBtX3N0YXRlLm1lcmdlRGlmZnMob3RoZXIp
OyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
Jik7Ci0gICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zdHJva2VDb2xvcjsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmdldENUTSgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGN0bSkgeyBtX3N0YXRlLnNldENUTShjdG0sIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkg
eyBzZXRDVE0oZ2V0Q1RNKCkgKiBjdG0pOyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkgeyBzZXRDVE0oZ2V0Q1RNKCkudHJhbnNsYXRlKHgsIHkpKTsgfQorICAgIHZvaWQg
dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQm
IHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KKyAgICB2b2lkIHNjYWxlKGZsb2F0IHN4
LCBmbG9hdCBzeSkgeyBzZXRDVE0oZ2V0Q1RNKCkuc2NhbGUoc3gsIHN5KSk7IH0KKyAgICB2b2lk
IHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkgeyBzY2FsZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9Cisg
ICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIHsgc2V0Q1RNKGdldENUTSgpLnJv
dGF0ZShyYWQyZGVnKGFuZ2xlSW5SYWRpYW5zKSkpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOwotICAgIFBhdHRlcm4qIHN0cm9r
ZVBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0K
KyAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxs
QnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuZ3JhZGllbnQoKTsgfQorICAgIFBhdHRlcm4qIGZp
bGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQnJ1c2goKS5wYXR0ZXJuKCk7
IH0KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxTcGFjZVRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZv
aWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3N0YXRlLnNldEZpbGxDb2xv
cihjb2xvciwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0RmlsbEdyYWRpZW50
KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRy
YW5zZm9ybSA9IHsgfSkgeyBtX3N0YXRlLnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKGdyYWRpZW50
KSwgc3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtID0geyB9
KSB7IG1fc3RhdGUuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zv
cm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxH
cmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7Ci0gICAgR3JhZGllbnQq
IHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5n
ZXQoKTsgfQorICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5m
aWxsUnVsZSgpOyB9CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBt
X3N0YXRlLnNldEZpbGxSdWxlKGZpbGxSdWxlLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAg
ICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuZmlsbFJ1bGUg
PSBmaWxsUnVsZTsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxSdWxlQ2hhbmdlKTsgfQotICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQorICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQnJ1c2goKS5jb2xvcigpOyB9CisgICAgR3JhZGll
bnQqIHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgp
LmdyYWRpZW50KCk7IH0KKyAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VCcnVzaCgpLnBhdHRlcm4oKTsgfQorICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
cm9rZUJydXNoKCkuc3BhY2VUcmFuc2Zvcm0oKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fc3RhdGUuc2V0U3Ryb2tlQ29sb3IoY29sb3IsIG1fbGFz
dEFwcGxpZWRTdGF0ZSk7IH0KKyAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVu
dD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNm
b3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShncmFkaWVudCks
IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOyB9CisgICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJl
ZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblNwYWNl
VHJhbnNmb3JtID0geyB9KSB7IG1fc3RhdGUuc2V0U3Ryb2tlUGF0dGVybihXVEZNb3ZlKHBhdHRl
cm4pLCBwYXR0ZXJuU3BhY2VUcmFuc2Zvcm0pOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwotICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxDb2xvcjsgfQorICAgIGZsb2F0IHN0cm9rZVRo
aWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKCk7IH0KKyAg
ICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zZXRT
dHJva2VUaGlja25lc3ModGhpY2tuZXNzLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKLSAgICBQ
YXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4u
Z2V0KCk7IH0KKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuc3Ryb2tlU3R5bGUoKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5
bGUgc3R5bGUpIHsgbV9zdGF0ZS5zZXRTdHJva2VTdHlsZShzdHlsZSwgbV9sYXN0QXBwbGllZFN0
YXRlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdy
YWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKLSAgICBHcmFkaWVudCog
ZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7
IH0KKyAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmxpbmVDYXAo
KTsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApIHsgbV9zdGF0ZS5zZXRM
aW5lQ2FwKGxpbmVDYXAsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQgc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IGRp
ZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtc0NoYW5nZSk7IH0KLSAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQorICAgIGNv
bnN0IExpbmVEYXNoIGxpbmVEYXNoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5saW5lRGFzaCgp
OyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChMaW5lRGFzaCYmIGxpbmVEYXNoKSB7IG1fc3RhdGUu
c2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAot
ICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3Rh
dGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyBkaWRVcGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQotICAg
IGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRp
YWxpYXM7IH0KKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
bGluZUpvaW4oKTsgfQorICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pIHsg
bV9zdGF0ZS5zZXRMaW5lSm9pbihsaW5lSm9pbiwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0g
ICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1f
c3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KTsgfQotICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNob3VsZFNtb290aEZvbnRzOyB9CisgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUubWl0ZXJMaW1pdCgpOyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyTGltaXQpIHsgbV9zdGF0ZS5zZXRNaXRlckxpbWl0KG1pdGVyTGltaXQsIG1fbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KIAotICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVh
bnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5n
IGdseXBocy4KLSAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBl
bnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBzZXRT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMpIHsgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9Ci0gICAgYm9vbCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250czsgfQorICAgIENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlTW9kZSgpOyB9CisgICAgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29tcG9zaXRlTW9k
ZSgpLm9wZXJhdGlvbjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVy
biBjb21wb3NpdGVNb2RlKCkuYmxlbmRNb2RlOyB9CisgICAgdm9pZCBzZXRDb21wb3NpdGVNb2Rl
KENvbXBvc2l0ZU1vZGUgY29tcG9zaXRlTW9kZSkgeyBtX3N0YXRlLnNldENvbXBvc2l0ZU1vZGUo
Y29tcG9zaXRlTW9kZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIHZvaWQgc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbikgeyBzZXRDb21wb3NpdGVN
b2RlKHsgb3BlcmF0aW9uLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsgfQogCi0gICAgdm9pZCBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsg
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgZGlkVXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2UpOyB9Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eTsgfQorICAgIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3coKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmRyb3BTaGFkb3coKTsgfQorICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBkcm9wU2hhZG93KCkub2Zmc2V0OyB9CisgICAgZmxvYXQgc2hhZG93Qmx1cigp
IGNvbnN0IHsgcmV0dXJuIGRyb3BTaGFkb3coKS5ibHVyUmFkaXVzOyB9CisgICAgY29uc3QgQ29s
b3ImIHNoYWRvd0NvbG9yKCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmNvbG9yOyB9Cisg
ICAgdm9pZCBzZXREcm9wU2hhZG93KGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpIHsgbV9z
dGF0ZS5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3csIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKyAg
ICB2b2lkIGNsZWFyU2hhZG93KCkgeyBzZXREcm9wU2hhZG93KHsgfSk7IH0KIAotICAgIHZvaWQg
c2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOyBkaWRVcGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOyB9Ci0gICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CisgICAgYm9vbCBo
YXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRvdygpLmlzVmlzaWJsZSgp
OyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gZHJvcFNoYWRv
dygpLmlzQmx1cnJlZCgpOyB9CisgICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBk
cm9wU2hhZG93KCkuaGFzT3V0c2V0cygpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRN
b2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KLSAgICBCbGVuZE1v
ZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7
IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGEoKTsgfQor
ICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5zZXRBbHBoYShhbHBoYSwg
bV9sYXN0QXBwbGllZFN0YXRlKTsgfQogCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3
THVtaW5hbmNlTWFzazsgZGlkVXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsgfQotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOyB9CisgICAgdm9pZCBzZXRJ
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpIHsgbV9zdGF0ZS5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZv
aWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV9zdGF0
ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsgfQotICAgIFRleHREcmF3aW5n
TW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERy
YXdpbmdNb2RlOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUoKTsgfQorICAgIHZvaWQgc2V0
VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSkgeyBt
X3N0YXRlLnNldFRleHREcmF3aW5nTW9kZSh0ZXh0RHJhd2luZ01vZGUsIG1fbGFzdEFwcGxpZWRT
dGF0ZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRv
d1JhZGl1c01vZGU6OkRlZmF1bHQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBj
bGVhclNoYWRvdygpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6
ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25zdDsKKyAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzKCk7IH0KKyAgICB2b2lkIHNldFNo
b3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNldFNob3VsZEFu
dGlhbGlhcyhzaG91bGRBbnRpYWxpYXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIGJv
b2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3Iu
aXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zp
c2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zm
c2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9v
bCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYm
IG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzKCk7IH0KKyAgICB2b2lkIHNldFNo
b3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91
bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cywgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQog
Ci0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtBcHBl
YXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5j
ZSA9IHVzZURhcmtBcHBlYXJhbmNlOyBkaWRVcGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9Ci0gICAgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0K
LSNlbmRpZgorICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVhbnRpemF0aW9u
IGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5nIGdseXBocy4K
KyAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBlbnN1cmUgYSBo
aWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCisgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cygpOyB9CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMo
Ym9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0ZS5zZXRTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMoc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzLCBtX2xhc3RBcHBs
aWVkU3RhdGUpOyB9CiAKLSAgICB2aXJ0dWFsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBib29sIHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cygpOyB9CisgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMsIG1fbGFzdEFwcGxpZWRTdGF0ZSk7IH0KIAotICAgIHZvaWQg
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2soKTsgfQorICAgIHZvaWQgc2V0
RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLnNldERy
YXdMdW1pbmFuY2VNYXNrKGRyYXdMdW1pbmFuY2VNYXNrLCBtX2xhc3RBcHBsaWVkU3RhdGUpOyB9
CiAKLSAgICAvLyBDYWxsZWQgKmFmdGVyKiBhbnkgY2hhbmdlIHRvIEdyYXBoaWNzQ29udGV4dFN0
YXRlOyBnZW5lcmFsbHkgdXNlZCB0byBwcm9wYWdhdGUgY2hhbmdlcwotICAgIC8vIHRvIHRoZSBw
bGF0Zm9ybSBjb250ZXh0J3Mgc3RhdGUuCi0gICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MpID0gMDsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBl
YXJhbmNlKCk7IH0KKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UpIHsgbV9zdGF0ZS5zZXRVc2VEYXJrQXBwZWFyYW5jZSh1c2VEYXJrQXBwZWFyYW5j
ZSwgbV9sYXN0QXBwbGllZFN0YXRlKTsgfQorI2VuZGlmCiAKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0
b3JlKCk7Ci0gICAgCisgICAgdm9pZCBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOwogICAgIHVuc2ln
bmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSA9IDA7CiAjaWYgVVNFKENHKQogICAgIC8v
IEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0
aG9kcz8KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSA9IDA7CisjZW5kaWYKIAotICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFr
ZSB0aGlzIGEgd2h5IGluc3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNy
b3NzLXBsYXRmb3JtPwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CiAKLSAgICAvLyBG
SVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0
ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/Ci0gICAgdmlydHVhbCB2b2lkIHNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpID0gMDsKLSNlbmRpZgorICAgIC8vIFRoaXMgZnVu
Y3Rpb24gYXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFr
aW5nIHRoZSBjb250ZXh0IGNhcGFibGUgb2YKKyAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVs
IGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCisgICAgdmlydHVhbCB2b2lkIGFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxlKGZhY3Rvcik7IH0KIAotICAg
IHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMK
IAotICAgIC8vIFBpeGVsIFNuYXBwaW5nCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBpc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVy
cygpICYmIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsgfQogCi0gICAgZW51bSBSb3VuZGluZ01v
ZGUgewotICAgICAgICBSb3VuZEFsbFNpZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVu
c2lvbnMKLSAgICB9OwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgPSAwOwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhG
bG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VT
dHlsZSk7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIC8vIFNoYXBlcworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogCi0gICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwg
ZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KLSAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRy
YXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwotICAgIC8v
IHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0
aGUgY29ycmVjdAotICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdmlydHVhbCB2b2lkIGRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYp
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX3N0YXRlLmNsaXBCb3VuZHMoKSk7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IHsgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgc3Ryb2tlRWxsaXBzZUFzUGF0aChl
bGxpcHNlKTsgfQorICAgIC8vIFNoYXBlcworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1h
bCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJiwgQmxlbmRNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOwogCi0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRN
aXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0KLSAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVk
aWEKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKLSAgICBJbnRTaXplIGNvbXBh
dGlibGVJbWFnZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlID0gMSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0g
c3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxv
cHQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVTY2FsZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmIHNj
YWxlID0geyAxLCAxIH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6
bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZVNjYWxl
ZEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYgc2NhbGUgPSB7
IDEsIDEgfSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01vZGU+ID0gc3RkOjpudWxsb3B0
LCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0Owor
ICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxp
bmcuCisgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGljaCBmaWxscyBwcm9w
ZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKKyAgICAvLyB1c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGlu
c2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKKyAgICAvLyBzdHJva2Ug
Y29sb3IpLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0
aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9k
PiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUlt
YWdlJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB2aXJ0dWFsIGRy
YXdQYXRoKGNvbnN0IFBhdGgmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICAvLyBGb2N1
cyBSaW5ncwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFn
ZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImKSA9IDA7CisgICAgLy8gRklYTUU6IENhbiB3ZSBoaWRlIHRoZXNlIGluIHRoZSBD
RyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQs
IGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisjZW5kaWYKIAorICAgIC8v
IEltYWdlcwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVy
KFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihS
ZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXIm
LCBGaWx0ZXJSZXN1bHRzJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6
RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCisgICAg
V0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFj
dG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKICNpZiBFTkFC
TEUoVklERU8pCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogI2VuZGlm
Ci0KLSAgICAvLyBDbGlwcGluZwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSA9IDA7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdDsKLQorICAgIAogICAgIC8vIFRleHQKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQg
ZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RS
ZWFkeSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBoc0FuZENhY2hlRm9udChjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVm
ZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQotICAgIHsKLSAg
ICAgICAgZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JU
IEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IHRvID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBzdGQ6Om51bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0g
Rm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZv
clRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9
IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNl
LCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUpID0gMDsKIAotICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
OwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0Zv
clRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7CiAKLSAgICAvLyBGb2N1cyBS
aW5ncworICAgIC8vIENvbXBhdGlibGUgSW1hZ2VCdWZmZXIKIAotICAgIHZpcnR1YWwgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikg
PSAwOwotICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50
YXRpb24/IE9yIGVsc2V3aGVyZT8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVl
ZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwotI2VuZGlmCisgICAgSW50U2l6ZSBjb21wYXRp
YmxlSW1hZ2VCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OwogCi0gICAgLy8gVHJh
bnNmb3JtcworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxvcHQsIHN0
ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUoeyBzLCBzIH0pOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKSB7IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9
Ci0gICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54
KCksIHAueSgpKTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlU2Nh
bGVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiBzY2FsZSA9
IHsgMSwgMSB9LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmID0gRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCksIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gPSBzdGQ6Om51bGxv
cHQsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPiA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVTY2FsZWRJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmIHNjYWxlID0geyAxLCAx
IH0sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiA9IHN0ZDo6bnVsbG9wdCwgc3Rk
OjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKIAotICAg
IHZpcnR1YWwgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01l
dGhvZD4gPSBzdGQ6Om51bGxvcHQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
UmVmUHRyPEltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiA9IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6U1JHQigpLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gPSBzdGQ6Om51bGxvcHQp
IGNvbnN0OwogCi0gICAgZW51bSBJbmNsdWRlRGV2aWNlU2NhbGUgeyBEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlLCBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSB9OwotICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1
ZGVEZXZpY2VTY2FsZSkgY29uc3QgPSAwOworICAgIC8vIFBpeGVsIFNuYXBwaW5nCiAKLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCi0gICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIHZpcnR1YWwg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3Ip
OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OworICAg
IGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAgICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91
bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAgfTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxs
U2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9Q
aXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJv
a2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwogCiAgICAgLy8gTGlua3MKIAorICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAg
dmlydHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0Jikg
eyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIHsgfQogCi0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICAvLyBDb250ZW50ZnVsIFBhaW50IERldGVjdGlvbgorI2lmIFVTRShDRykKKyAgICAv
LyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRo
ZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWlu
dERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQotICAgIGJv
b2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBh
aW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRl
eHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRl
eHQ/CisgICAgdmlydHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIHsgfQor
I2VuZGlmCiAKICAgICAvLyBGSVhNRTogTm90aGluZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBo
ZXJlLCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVsc2V3aGVyZS4KICNpZiBPUyhXSU5ET1dTKQpAQCAt
NTQ2LDEwICszNTUsNyBAQCBwdWJsaWM6CiAgICAgLy8gcHV0IGNvZGUgc2hhcmVkIGJldHdlZW4g
V2luZG93cyBDRyBhbmQgV2luZG93cyBDYWlybyBiYWNrZW5kcy4KICAgICB2aXJ0dWFsIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9h
dFJlY3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7
CkBAIC01NjEsMTkxICszNjcsMTcgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IGRhc2hlZExpbmVQ
YXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCwg
ZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OwogICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJM
aW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0
aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKSBjb25zdDsKIAotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7Ci0KIHByaXZhdGU6CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPEdyYXBo
aWNzQ29udGV4dFN0YXRlPiBtX2xhc3RBcHBsaWVkU3RhdGU7CiAgICAgVmVjdG9yPEdyYXBoaWNz
Q29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCiAgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lM
YXllckNvdW50IHsgMCB9OwogICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZh
bHNlIH07CiB9OwogCi1jbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUp
Ci0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFu
ZFJlc3RvcmUpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAg
ICAgIG1fY29udGV4dC5zYXZlKCk7Ci0gICAgfQotICAgIAotICAgIH5HcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAg
ICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzYXZlKCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAgICAgIG1fY29u
dGV4dC5zYXZlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOwotICAgIH0KLQot
ICAgIHZvaWQgcmVzdG9yZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9y
ZSk7Ci0gICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29u
dGV4dCYgbV9jb250ZXh0OwotICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKLX07Ci0KLWNsYXNz
IFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgewotcHVibGljOgotICAgIFRyYW5zcGFyZW5jeUxheWVy
U2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9hdCBhbHBoYSwgYm9vbCBiZWdpbkxh
eWVyID0gdHJ1ZSkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX2Fs
cGhhKGFscGhhKQotICAgICAgICAsIG1fYmVnYW5MYXllcihiZWdpbkxheWVyKQotICAgIHsKLSAg
ICAgICAgaWYgKGJlZ2luTGF5ZXIpCi0gICAgICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihtX2FscGhhKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBiZWdpbkxheWVyKGZs
b2F0IGFscGhhKQotICAgIHsKLSAgICAgICAgbV9hbHBoYSA9IGFscGhhOwotICAgICAgICBtX2Nv
bnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKLSAgICAgICAgbV9iZWdhbkxh
eWVyID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgflRyYW5zcGFyZW5jeUxheWVyU2NvcGUoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKLSAgICAgICAgICAgIG1fY29udGV4dC5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0Nv
bnRleHQmIG1fY29udGV4dDsKLSAgICBmbG9hdCBtX2FscGhhOwotICAgIGJvb2wgbV9iZWdhbkxh
eWVyOwotfTsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTdGFja0NoZWNrZXIgewotcHVi
bGljOgotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAgICAgLCBtX3N0
YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQotICAgIHsgfQotICAgIAotICAgIH5HcmFwaGlj
c0NvbnRleHRTdGF0ZVN0YWNrQ2hlY2tlcigpCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0
LnN0YWNrU2l6ZSgpICE9IG1fc3RhY2tTaXplKQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJH
cmFwaGljc0NvbnRleHQgJXAgc3RhY2sgY2hhbmdlZCBieSAlZCIsICZtX2NvbnRleHQsIChpbnQp
bV9jb250ZXh0LnN0YWNrU2l6ZSgpIC0gKGludCltX3N0YWNrU2l6ZSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwotICAgIHVuc2lnbmVkIG1fc3Rh
Y2tTaXplOwotfTsKLQotY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9s
YXRpb25RdWFsaXR5VG9Vc2UpCi0gICAgICAgIDogbV9ncmFwaGljc0NvbnRleHQoZ3JhcGhpY3ND
b250ZXh0KQotICAgICAgICAsIG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5KGdyYXBoaWNz
Q29udGV4dC5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpCi0gICAgICAgICwgbV9pbnRlcnBv
bGF0aW9uUXVhbGl0eUNoYW5nZWQoaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSAhPSBJbnRlcnBv
bGF0aW9uUXVhbGl0eTo6RGVmYXVsdCAmJiBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSAh
PSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJw
b2xhdGlvblF1YWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKTsKLSAg
ICB9Ci0KLSAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIHN0ZDo6b3B0aW9uYWw8SW50ZXJwb2xhdGlvblF1
YWxpdHk+IGludGVycG9sYXRpb25RdWFsaXR5KQotICAgICAgICA6IEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lcihncmFwaGljc0NvbnRleHQsIGludGVycG9sYXRpb25RdWFsaXR5ID8gaW50
ZXJwb2xhdGlvblF1YWxpdHkudmFsdWUoKSA6IGdyYXBoaWNzQ29udGV4dC5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCkpCi0gICAgewotICAgIH0KLQotICAgIH5JbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1faW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2VkKQotICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgbV9jdXJyZW50SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0gICAgYm9vbCBt
X2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZDsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsKLSAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2Rl
LAotICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tp
bmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAotICAgIFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKLSAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwKLSAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzCi0g
ICAgPjsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2UsCi0gICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUdyYWRpZW50Q2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlOjpGaWxsR3JhZGllbnRDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxQYXR0ZXJuQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UsCi0gICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZUNvbG9yQ2hh
bmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJv
a2VTdHlsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6RmlsbENvbG9yQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpGaWxsUnVsZUNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93Q2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGFDaGFu
Z2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBv
c2l0ZU9wZXJhdGlvbkNoYW5nZSwKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNoYW5nZTo6QmxlbmRNb2RlQ2hhbmdlLAotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UsCi0gICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhc0NoYW5nZSwK
LSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21v
b3RoRm9udHNDaGFuZ2UsCi0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSwKLSAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2Us
Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UKLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQot
ICAgICAgICAsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlVzZURhcmtB
cHBlYXJhbmNlQ2hhbmdlCi0jZW5kaWYKLSAgICA+OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpTdHJva2VTdHlsZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGUsCi0gICAgV2ViQ29yZTo6U3Ryb2tl
U3R5bGU6Ok5vU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpTb2xpZFN0cm9rZSwK
LSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG90dGVkU3Ryb2tlLAotICAgIFdlYkNvcmU6OlN0
cm9rZVN0eWxlOjpEYXNoZWRTdHJva2UsCi0gICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRvdWJs
ZVN0cm9rZSwKLSAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6V2F2eVN0cm9rZQotICAgID47Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlRleHREcmF3aW5nTW9k
ZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgICAgIFdlYkNvcmU6OlRl
eHREcmF3aW5nTW9kZSwKLSAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlOjpGaWxsLAot
ICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OlN0cm9rZQotICAgID47Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRTdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmM5ZTU4MWRjYzIyMDNhZDIxYTdmNDhmMzU3
ODE0ZGVmYzNjZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFN0YXRlLmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0U3RhdGUuaCIKKworI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgQ2hhbmdlRmxhZ3MmIGNoYW5nZUZsYWdzLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2NsaXBCb3VuZHMoaW5pdGlhbENUTS5tYXBSZWN0KGlu
aXRpYWxDbGlwKSkKKyAgICAsIG1fY2hhbmdlRmxhZ3MoY2hhbmdlRmxhZ3MpCisgICAgLCBtX2N0
bShpbml0aWFsQ1RNKQoreworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0U3RhdGU6OmNs
aXBCb3VuZHMoKSBjb25zdAoreworICAgIGlmIChhdXRvIGludmVyc2UgPSBtX2N0bS5pbnZlcnNl
KCkpCisgICAgICAgIHJldHVybiBpbnZlcnNlLT5tYXBSZWN0KG1fY2xpcEJvdW5kcyk7CisKKyAg
ICAvLyBJZiB0aGUgQ1RNIGlzIG5vdCBpbnZlcnRpYmxlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHJl
Y3QuCisgICAgLy8gVGhpcyBtYXRjaGVzIENHUmVjdEFwcGx5SW52ZXJzZUFmZmluZVRyYW5zZm9y
bSBiZWhhdmlvci4KKyAgICByZXR1cm4gbV9jbGlwQm91bmRzOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0Cit7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBDaGFuZ2VGbGFncyBwcmltaXRpdmVDaGFuZ2VGbGFncyB7IENoYW5nZTo6
U3Ryb2tlVGhpY2tuZXNzLCBDaGFuZ2U6OlN0cm9rZUJydXNoLCBDaGFuZ2U6OkZpbGxCcnVzaCB9
OworCisgICAgaWYgKG1fY2hhbmdlRmxhZ3MgIT0gKG1fY2hhbmdlRmxhZ3MgJiBwcmltaXRpdmVD
aGFuZ2VGbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKENoYW5nZTo6U3Ryb2tlQnJ1c2gpICYmICFtX3N0cm9rZUJydXNoLmlzUHJp
bWl0aXZlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKENoYW5nZTo6RmlsbEJydXNoKSAmJiAhbV9maWxsQnJ1c2guaXNQcmltaXRpdmUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1lcmdlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgb3RoZXIpCit7CisgICAgYXV0byBtZXJnZUNoYW5nZSA9IFsmXShDaGFuZ2UgY2hhbmdl
LCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG90
aGVyLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoY2hhbmdlKSkgeworICAgICAgICAgICAgdGhpcy0+
KnByb3BlcnR5ID0gb3RoZXIuKnByb3BlcnR5OworICAgICAgICAgICAgbV9jaGFuZ2VGbGFncy5h
ZGQoY2hhbmdlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBBU1NFUlQobV9jbGlwQm91bmRz
ID09IG90aGVyLm1fY2xpcEJvdW5kcyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNUTSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7
CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VDaGFuZ2Uo
Q2hhbmdlOjpGaWxsUnVsZSwgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9maWxsUnVsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZUJydXNo
LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZUJydXNo
KTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlN0cm9rZVRoaWNrbmVzcywgICAgICAgICAgICAg
ICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VD
aGFuZ2UoQ2hhbmdlOjpTdHJva2VTdHlsZSwgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zdHJva2VTdHlsZSk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6Okxp
bmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xp
bmVDYXApOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TGluZURhc2gsICAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOworICAgIG1lcmdlQ2hh
bmdlKENoYW5nZTo6TGluZUpvaW4sICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fbGluZUpvaW4pOworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6TWl0ZXJMaW1p
dCwgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbWl0ZXJMaW1p
dCk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6RHJvcFNoYWRvdywgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fZHJvcFNoYWRvdyk7CisKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkFs
cGhhLCAgICAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Fs
cGhhKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHks
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OworICAgIG1lcmdlQ2hhbmdlKENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4dERyYXdpbmdNb2RlKTsKKworICAgIG1lcmdl
Q2hhbmdlKENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAmR3JhcGhpY3ND
b250ZXh0U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZFNtb290aEZvbnRzKTsKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6OlNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cywgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpTaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcywgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtcyk7CisgICAgbWVyZ2VDaGFuZ2UoQ2hhbmdlOjpEcmF3THVtaW5hbmNlTWFzaywg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBtZXJnZUNoYW5nZShDaGFuZ2U6
OlVzZURhcmtBcHBlYXJhbmNlLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3VzZURhcmtBcHBlYXJhbmNlKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjptZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcikKK3sKKyAg
ICBhdXRvIG1lcmdlRGlmZiA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSAhPSBvdGhl
ci4qcHJvcGVydHkpIHsKKyAgICAgICAgICAgIHRoaXMtPipwcm9wZXJ0eSA9IG90aGVyLipwcm9w
ZXJ0eTsKKyAgICAgICAgICAgIG1fY2hhbmdlRmxhZ3MuYWRkKGNoYW5nZSk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2N0bSk7CisgICAgCisgICAgbWVyZ2VEaWZm
KENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0
YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6RmlsbFJ1bGUsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsKKworICAg
IG1lcmdlRGlmZihDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ry
b2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9r
ZVRoaWNrbmVzcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKworICAgIG1l
cmdlRGlmZihDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBtZXJnZURpZmYoQ2hhbmdlOjpMaW5lRGFzaCwg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpOwor
ICAgIG1lcmdlRGlmZihDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6TWl0
ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX21pdGVy
TGltaXQpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAgICAg
ICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIG1lcmdlRGlmZihDaGFuZ2U6OkFscGhhLCAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSk7Cisg
ICAgbWVyZ2VEaWZmKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgJkdyYXBo
aWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIG1lcmdl
RGlmZihDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hv
dWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3Vs
ZEFudGlhbGlhcyk7CisgICAgbWVyZ2VEaWZmKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAg
ICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKTsKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAgICBtZXJn
ZURpZmYoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1lcmdlRGlmZihDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6
bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICBtZXJnZURpZmYoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBzdGF0ZUNoYW5nZU5hbWUoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZSBjaGFuZ2UpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHN0YXRlQ2hhbmdlTmFt
ZXNbXSA9IHsKKyAgICAgICAgImN0bSIsCisKKyAgICAgICAgImZpbGwtYnJ1c2giLAorICAgICAg
ICAiZmlsbC1ydWxlIiwKKworICAgICAgICAic3Ryb2tlLWJydXNoIiwKKyAgICAgICAgInN0cm9r
ZS10aGlja25lc3MiLAorICAgICAgICAic3Ryb2tlLXN0eWxlIiwKKworICAgICAgICAibGluZS1j
YXAiLAorICAgICAgICAibGluZS1kYXNoIiwKKyAgICAgICAgImxpbmUtam9pbiIsCisgICAgICAg
ICJtaXRlci1saW1pdCIsCisKKyAgICAgICAgImNvbXBvc2l0ZS1tb2RlIiwKKyAgICAgICAgImRy
b3Atc2hhZG93IiwKKworICAgICAgICAiYWxwaGEiLAorICAgICAgICAiaW1hZ2UtaW50ZXJwb2xh
dGlvbi1xdWFsaXR5IiwKKyAgICAgICAgInRleHQtZHJhd2luZy1tb2RlIiwKKworICAgICAgICAi
c2hvdWxkLWFudGlhbGlhcyIsCisgICAgICAgICJzaG91bGQtc21vb3RoLWZvbnRzIiwKKyAgICAg
ICAgInNob3VsZC1zdWJwaXhlbC1xdWFudGl6ZS1mb250cyIsCisgICAgICAgICJzaGFkb3dzLWln
bm9yZS10cmFuc2Zvcm1zIiwKKyAgICAgICAgImRyYXctbHVtaW5hbmNlLW1hc2siCisjaWYgSEFW
RShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICAgICAgLCAidXNlLWRhcmstYXBwZWFyYW5jZSIK
KyNlbmRpZgorICAgIH07CisKKyAgICB1bnNpZ25lZCBtYXNrID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNoYW5nZSk7CisgICAgQVNTRVJUKCEoKG1hc2sgLSAxKSAmIG1hc2spKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsb2cyKG1hc2spKTsKKyAg
ICByZXR1cm4gc3RhdGVDaGFuZ2VOYW1lc1tpbmRleF07Cit9CisKK1RleHRTdHJlYW0mIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGF1dG8g
ZHVtcCA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJv
cGVydHksIGNvbnN0IFN0cmluZyYgbmFtZSkgeworICAgICAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhjaGFuZ2UpKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KG5hbWUsIHRoaXMt
Pipwcm9wZXJ0eSk7CisgICAgfTsKKworICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2hhbmdlLWZsYWdz
IiwgbV9jaGFuZ2VGbGFncyk7CisKKyAgICBkdW1wKENoYW5nZTo6Q1RNLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q1RNKSk7CisKKyAgICBkdW1wKENo
YW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9maWxsQnJ1c2gsICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6RmlsbEJydXNoKSk7CisgICAgZHVtcChDaGFuZ2U6OkZpbGxSdWxlLCAgICAgICAgICAgICAg
ICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZmlsbFJ1bGUsICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkZpbGxSdWxlKSk7CisKKyAgICBkdW1wKENo
YW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zdHJva2VCcnVzaCwgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5n
ZTo6U3Ryb2tlQnJ1c2gpKTsKKyAgICBkdW1wKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAgICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VUaGlja25lc3MsICAgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSk7CisgICAg
ZHVtcChDaGFuZ2U6OlN0cm9rZVN0eWxlLCAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlTmFt
ZShDaGFuZ2U6OlN0cm9rZVN0eWxlKSk7CisKKyAgICBkdW1wKENoYW5nZTo6TGluZUNhcCwgICAg
ICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwLCAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6TGluZUNhcCkpOworICAg
IGR1bXAoQ2hhbmdlOjpMaW5lRGFzaCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2xpbmVEYXNoLCAgICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5h
bWUoQ2hhbmdlOjpMaW5lRGFzaCkpOworICAgIGR1bXAoQ2hhbmdlOjpMaW5lSm9pbiwgICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2luLCAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpMaW5lSm9pbikpOworICAgIGR1
bXAoQ2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX21pdGVyTGltaXQsICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUo
Q2hhbmdlOjpNaXRlckxpbWl0KSk7CisKKyAgICBkdW1wKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jb21wb3NpdGVNb2RlLCAg
ICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6Q29tcG9zaXRlTW9kZSkpOwor
ICAgIGR1bXAoQ2hhbmdlOjpEcm9wU2hhZG93LCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNz
Q29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICBzdGF0ZUNoYW5n
ZU5hbWUoQ2hhbmdlOjpEcm9wU2hhZG93KSk7CisKKyAgICBkdW1wKENoYW5nZTo6QWxwaGEsICAg
ICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBoYSwgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6QWxwaGEpKTsKKyAg
ICBkdW1wKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworICAgIGR1bXAoQ2hhbmdl
OjpUZXh0RHJhd2luZ01vZGUsICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3RleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpU
ZXh0RHJhd2luZ01vZGUpKTsKKworICAgIGR1bXAoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZEFudGlhbGlhcywgICAg
ICAgICAgICAgICBzdGF0ZUNoYW5nZU5hbWUoQ2hhbmdlOjpTaG91bGRBbnRpYWxpYXMpKTsKKyAg
ICBkdW1wKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsICAgICAgICAgICAgICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9zaG91bGRTbW9vdGhGb250cywgICAgICAgICAgICAgc3RhdGVDaGFuZ2VO
YW1lKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMpKTsKKyAgICBkdW1wKENoYW5nZTo6U2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzLCAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKSk7CisgICAgZHVtcChDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zLCAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMsICAgICAgIHN0YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKSk7CisgICAgZHVtcChDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJhd0x1bWluYW5jZU1hc2ssICAgICAgICAgICAgIHN0
YXRlQ2hhbmdlTmFtZShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrKSk7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBkdW1wKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UsICAg
ICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBwZWFyYW5jZSwgICAg
ICAgICAgICAgc3RhdGVDaGFuZ2VOYW1lKENoYW5nZTo6VXNlRGFya0FwcGVhcmFuY2UpKTsKKyNl
bmRpZgorICAgIHJldHVybiB0czsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSBjaGFuZ2UpCit7CisgICAgdHMg
PDwgc3RhdGVDaGFuZ2VOYW1lKGNoYW5nZSk7CisgICAgcmV0dXJuIHRzOworfQorCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIHN0YXRlLmR1bXAodHMpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNmU0Y2VhM2MyZDU4Yzg3YjQ5
MjM4NDc1ZTQ2OGI1ZGZkNWVlM2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3RhdGUuaApAQCAtMCwwICsxLDM4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VCcnVzaC5oIgorI2luY2x1ZGUgIldpbmRSdWxlLmgi
CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENoYW5n
ZSA6IHVpbnQzMl90IHsKKyAgICAgICAgQ1RNICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAorCisgICAgICAgIEZpbGxCcnVzaCAgICAgICAgICAgICAgICAgICA9IDEgPDwgMSwKKyAg
ICAgICAgRmlsbFJ1bGUgICAgICAgICAgICAgICAgICAgID0gMSA8PCAyLAorCisgICAgICAgIFN0
cm9rZUJydXNoICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICAgICAgU3Ryb2tlVGhpY2tu
ZXNzICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAgICBTdHJva2VTdHlsZSAgICAgICAgICAg
ICAgICAgPSAxIDw8IDUsCisKKyAgICAgICAgTGluZUNhcCAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCA2LAorICAgICAgICBMaW5lRGFzaCAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDcsCisg
ICAgICAgIExpbmVKb2luICAgICAgICAgICAgICAgICAgICA9IDEgPDwgOCwKKyAgICAgICAgTWl0
ZXJMaW1pdCAgICAgICAgICAgICAgICAgID0gMSA8PCA5LAorCisgICAgICAgIENvbXBvc2l0ZU1v
ZGUgICAgICAgICAgICAgICA9IDEgPDwgMTAsCisgICAgICAgIERyb3BTaGFkb3cgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMTEsCisKKyAgICAgICAgQWxwaGEgICAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAxMiwKKyAgICAgICAgSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSAgID0gMSA8PCAx
MywKKyAgICAgICAgVGV4dERyYXdpbmdNb2RlICAgICAgICAgICAgID0gMSA8PCAxNCwKKworICAg
ICAgICBTaG91bGRBbnRpYWxpYXMgICAgICAgICAgICAgPSAxIDw8IDE1LAorICAgICAgICBTaG91
bGRTbW9vdGhGb250cyAgICAgICAgICAgPSAxIDw8IDE2LAorICAgICAgICBTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMgPSAxIDw8IDE3LAorICAgICAgICBTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyAgICAgPSAxIDw8IDE4LAorICAgICAgICBEcmF3THVtaW5hbmNlTWFzayAgICAgICAgICAgPSAx
IDw8IDE5LAorI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgICAgIFVzZURhcmtB
cHBlYXJhbmNlICAgICAgICAgICA9IDEgPDwgMjAsCisjZW5kaWYKKyAgICB9OworICAgIHVzaW5n
IENoYW5nZUZsYWdzID0gT3B0aW9uU2V0PENoYW5nZT47CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IENoYW5nZUZsYWdzIGluaXRpYWxDaGFuZ2VGbGFncyA9IHsgQ2hhbmdlOjpGaWxsQnJ1c2gsIENo
YW5nZTo6U3Ryb2tlQnJ1c2gsIENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzIH07CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwQm91bmRzLCBjb25zdCBDaGFuZ2VGbGFncyYgPSB7IH0sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgaW5pdGlhbENUTSA9IHsgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0OworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsg
bV9jbGlwQm91bmRzLmludGVyc2VjdChtX2N0bS5tYXBSZWN0KHJlY3QpKTsgfQorCisgICAgQ2hh
bmdlRmxhZ3MgY2hhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlRmxhZ3M7IH0KKyAgICB2
b2lkIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCkgeyBtX2NoYW5nZUZsYWdzID0geyB9OyB9CisKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3QgeyByZXR1cm4gbV9jdG07IH0KKyAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSwgY29uc3Qgc3RkOjpvcHRpb25h
bDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHko
Q2hhbmdlOjpDVE0sICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0sIGN0bSwgbGFzdEFwcGxp
ZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IFNvdXJjZUJydXNoJiBmaWxsQnJ1c2goKSBjb25zdCB7
IHJldHVybiBtX2ZpbGxCcnVzaDsgfQorICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvciwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RB
cHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpGaWxsQnJ1c2gsICZHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6bV9maWxsQnJ1c2gsIHsgY29sb3IgfSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pIHsgbV9maWxsQnJ1c2guc2V0R3JhZGll
bnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFuZ2VGbGFncy5hZGQo
Q2hhbmdlOjpGaWxsQnJ1c2gpOyB9CisgICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVy
bj4mJiBwYXR0ZXJuLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1f
ZmlsbEJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0pOyBt
X2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OkZpbGxCcnVzaCk7IH0KKworICAgIFdpbmRSdWxlIGZp
bGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorICAgIHZvaWQgc2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6RmlsbFJ1bGUs
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9maWxsUnVsZSwgZmlsbFJ1bGUsIGxhc3RBcHBsaWVk
U3RhdGUpOyB9CisKKyAgICBjb25zdCBTb3VyY2VCcnVzaCYgc3Ryb2tlQnJ1c2goKSBjb25zdCB7
IHJldHVybiBtX3N0cm9rZUJydXNoOyB9CisgICAgdm9pZCBzZXRTdHJva2VDb2xvcihjb25zdCBD
b2xvciYgY29sb3IsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBs
YXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlQnJ1c2gsICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCwgeyBjb2xvciB9LCBsYXN0QXBwbGllZFN0
YXRlKTsgfQorICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRp
ZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKSB7IG1fc3Ryb2tlQnJ1
c2guc2V0R3JhZGllbnQoV1RGTW92ZShncmFkaWVudCksIHNwYWNlVHJhbnNmb3JtKTsgbV9jaGFu
Z2VGbGFncy5hZGQoQ2hhbmdlOjpTdHJva2VCcnVzaCk7IH0KKyAgICB2b2lkIHNldFN0cm9rZVBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFj
ZVRyYW5zZm9ybSkgeyBtX3N0cm9rZUJydXNoLnNldFBhdHRlcm4oV1RGTW92ZShwYXR0ZXJuKSwg
c3BhY2VUcmFuc2Zvcm0pOyBtX2NoYW5nZUZsYWdzLmFkZChDaGFuZ2U6OlN0cm9rZUJydXNoKTsg
fQorCisgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VU
aGlja25lc3M7IH0KKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlj
a25lc3MsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBw
bGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzLCAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlVGhpY2tuZXNzLCBzdHJva2VUaGlja25lc3MsIGxhc3RB
cHBsaWVkU3RhdGUpOyB9CisKKyAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3Ryb2tlU3R5bGU7IH0KKyAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
PiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OlN0cm9rZVN0eWxlLCAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlU3R5bGUsIHN0cm9rZVN0eWxlLCBsYXN0QXBw
bGllZFN0YXRlKTsgfQorCisgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5lQ2FwOyB9CisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0
UHJvcGVydHkoQ2hhbmdlOjpMaW5lQ2FwLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNh
cCwgbGluZUNhcCwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGNvbnN0IExpbmVEYXNoJiBs
aW5lRGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZURhc2g7IH0KKyAgICB2b2lkIHNldExpbmVE
YXNoKExpbmVEYXNoJiYgbGluZURhc2gsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250
ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6TGluZURh
c2gsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lRGFzaCwgV1RGTW92ZShsaW5lRGFzaCks
IGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUpvaW47IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luIGxpbmVK
b2luLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkxpbmVKb2luLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fbGluZUpvaW4sIGxpbmVKb2luLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorCisgICAg
ZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQorICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFu
Z2U6Ok1pdGVyTGltaXQsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9taXRlckxpbWl0LCBtaXRl
ckxpbWl0LCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIENvbXBvc2l0ZU1vZGUgY29t
cG9zaXRlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlTW9kZTsgfQorICAgIHZvaWQg
c2V0Q29tcG9zaXRlTW9kZShDb21wb3NpdGVNb2RlIGNvbXBvc2l0ZU1vZGUsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFBy
b3BlcnR5KENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Nv
bXBvc2l0ZU1vZGUsIGNvbXBvc2l0ZU1vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisgICAgCisg
ICAgY29uc3QgRHJvcFNoYWRvdyYgZHJvcFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fZHJvcFNo
YWRvdzsgfQorICAgIHZvaWQgc2V0RHJvcFNoYWRvdyhjb25zdCBEcm9wU2hhZG93JiBkcm9wU2hh
ZG93LCBjb25zdCBzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxp
ZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0eShDaGFuZ2U6OkRyb3BTaGFkb3csICZHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6bV9kcm9wU2hhZG93LCBkcm9wU2hhZG93LCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2FscGhhOyB9CisgICAgdm9pZCBz
ZXRBbHBoYShmbG9hdCBhbHBoYSwgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRT
dGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpBbHBoYSwgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2FscGhhLCBhbHBoYSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyAgICAKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisgICAgdm9p
ZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0
U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3BlcnR5KENoYW5nZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHksIGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIGxhc3RBcHBsaWVkU3RhdGUp
OyB9CisgICAgCisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01vZGU7IH0KKyAgICB2b2lkIHNldFRleHREcmF3aW5n
TW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKSB7IHNldFByb3Bl
cnR5KENoYW5nZTo6VGV4dERyYXdpbmdNb2RlLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdGV4
dERyYXdpbmdNb2RlLCB0ZXh0RHJhd2luZ01vZGUsIGxhc3RBcHBsaWVkU3RhdGUpOyB9CisKKyAg
ICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQW50aWFsaWFz
OyB9CisgICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRl
KSB7IHNldFByb3BlcnR5KENoYW5nZTo6U2hvdWxkQW50aWFsaWFzLCAmR3JhcGhpY3NDb250ZXh0
U3RhdGU6Om1fc2hvdWxkQW50aWFsaWFzLCBzaG91bGRBbnRpYWxpYXMsIGxhc3RBcHBsaWVkU3Rh
dGUpOyB9CisKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9z
aG91bGRTbW9vdGhGb250czsgfQorICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBz
aG91bGRTbW9vdGhGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91bGRTbW9vdGhG
b250cywgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzLCBzaG91bGRT
bW9vdGhGb250cywgbGFzdEFwcGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHM7IH0KKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgY29uc3Qgc3RkOjpvcHRpb25hbDxHcmFwaGljc0Nv
bnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVydHkoQ2hhbmdlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywgbGFzdEFw
cGxpZWRTdGF0ZSk7IH0KKworICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25z
dCB7IHJldHVybiBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CisgICAgdm9pZCBzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBz
ZXRQcm9wZXJ0eShDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMsIHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zLCBsYXN0QXBwbGllZFN0YXRlKTsgfQorICAgIAorICAgIGJvb2wgZHJhd0x1bWluYW5jZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX2RyYXdMdW1pbmFuY2VNYXNrOyB9CisgICAgdm9pZCBzZXRE
cmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlPiYgbGFzdEFwcGxpZWRTdGF0ZSkgeyBzZXRQcm9wZXJ0
eShDaGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fZHJh
d0x1bWluYW5jZU1hc2ssIGRyYXdMdW1pbmFuY2VNYXNrLCBsYXN0QXBwbGllZFN0YXRlKTsgfQor
CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICBib29sIHVzZURhcmtBcHBlYXJh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV91c2VEYXJrQXBwZWFyYW5jZTsgfQorICAgIHZvaWQgc2V0
VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSwgY29uc3Qgc3RkOjpvcHRp
b25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4mIGxhc3RBcHBsaWVkU3RhdGUpIHsgc2V0UHJvcGVy
dHkoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Vz
ZURhcmtBcHBlYXJhbmNlLCB1c2VEYXJrQXBwZWFyYW5jZSwgbGFzdEFwcGxpZWRTdGF0ZSk7IH0K
KyNlbmRpZgorCisgICAgYm9vbCBoYXNPbmx5UHJpbWl0aXZlQ2hhbmdlcygpIGNvbnN0OworICAg
IHZvaWQgbWVyZ2VDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7Cisg
ICAgdm9pZCBtZXJnZURpZmZzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvdGhlcik7CisK
KyAgICBXVEY6OlRleHRTdHJlYW0mIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8R3JhcGhpY3ND
b250ZXh0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldFByb3BlcnR5KENoYW5nZSBjaGFuZ2UsIFQgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Oipwcm9wZXJ0eSwgY29uc3QgVCYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy0+KnByb3BlcnR5ID0gdmFsdWU7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Mu
c2V0KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJv
cGVydHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHZvaWQgc2V0UHJvcGVydHkoQ2hhbmdlIGNoYW5nZSwgVCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6KnByb3BlcnR5LCBUJiYgdmFsdWUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8R3JhcGhp
Y3NDb250ZXh0U3RhdGU+JiBsYXN0QXBwbGllZFN0YXRlKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMtPipwcm9wZXJ0eSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhp
cy0+KnByb3BlcnR5ID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIG1fY2hhbmdlRmxhZ3Muc2V0
KGNoYW5nZSwgIWxhc3RBcHBsaWVkU3RhdGUgfHwgKCpsYXN0QXBwbGllZFN0YXRlKS4qcHJvcGVy
dHkgIT0gdGhpcy0+KnByb3BlcnR5KTsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgbV9jbGlwQm91
bmRzOworCisgICAgQ2hhbmdlRmxhZ3MgbV9jaGFuZ2VGbGFnczsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBtX2N0bTsKKworICAgIFNvdXJjZUJydXNoIG1fZmlsbEJydXNoIHsgQ29sb3I6OmJsYWNr
IH07CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZSB7IFdpbmRSdWxlOjpOb25aZXJvIH07CisKKyAg
ICBTb3VyY2VCcnVzaCBtX3N0cm9rZUJydXNoIHsgQ29sb3I6OmJsYWNrIH07CisgICAgZmxvYXQg
bV9zdHJva2VUaGlja25lc3MgeyAwIH07CisgICAgU3Ryb2tlU3R5bGUgbV9zdHJva2VTdHlsZSB7
IFNvbGlkU3Ryb2tlIH07CisKKyAgICBMaW5lQ2FwIG1fbGluZUNhcCB7IExpbmVDYXA6OkJ1dHQg
fTsKKyAgICBMaW5lRGFzaCBtX2xpbmVEYXNoOworICAgIExpbmVKb2luIG1fbGluZUpvaW4geyBM
aW5lSm9pbjo6TWl0ZXIgfTsKKyAgICBmbG9hdCBtX21pdGVyTGltaXQgeyAwIH07CisKKyAgICBD
b21wb3NpdGVNb2RlIG1fY29tcG9zaXRlTW9kZSB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9OworICAgIERyb3BTaGFkb3cgbV9kcm9wU2hhZG93Owor
CisgICAgZmxvYXQgbV9hbHBoYSB7IDEgfTsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2lt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9
OworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlIHsgVGV4dERyYXdp
bmdNb2RlOjpGaWxsIH07CisKKyAgICBib29sIG1fc2hvdWxkQW50aWFsaWFzIHsgdHJ1ZSB9Owor
ICAgIGJvb2wgbV9zaG91bGRTbW9vdGhGb250cyB7IHRydWUgfTsKKyAgICBib29sIG1fc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RyYXdMdW1pbmFuY2VNYXNrIHsgZmFs
c2UgfTsKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIGJvb2wgbV91c2VEYXJr
QXBwZWFyYW5jZSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBhdXRvIGVuY29kZSA9IFsmXShDaGFuZ2UgY2hhbmdlLCBhdXRvIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoY2hhbmdlKSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdGhpcy0+KnByb3BlcnR5
OworICAgIH07CisKKyAgICBlbmNvZGVyIDw8IG1fY2xpcEJvdW5kczsKKworICAgIGVuY29kZXIg
PDwgbV9jaGFuZ2VGbGFnczsKKworICAgIGVuY29kZShDaGFuZ2U6OkNUTSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9jdG0pOworCisgICAgZW5j
b2RlKENoYW5nZTo6RmlsbEJydXNoLCAgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjptX2ZpbGxCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6RmlsbFJ1bGUsICAg
ICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ZpbGxSdWxlKTsK
KworICAgIGVuY29kZShDaGFuZ2U6OlN0cm9rZUJydXNoLCAgICAgICAgICAgICAgICAgICAgICZH
cmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zdHJva2VCcnVzaCk7CisgICAgZW5jb2RlKENoYW5nZTo6
U3Ryb2tlVGhpY2tuZXNzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3N0cm9rZVRoaWNrbmVzcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVN0eWxlKTsKKwor
ICAgIGVuY29kZShDaGFuZ2U6OkxpbmVDYXAsICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFw
aGljc0NvbnRleHRTdGF0ZTo6bV9saW5lQ2FwKTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpMaW5lRGFz
aCwgICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURh
c2gpOworICAgIGVuY29kZShDaGFuZ2U6OkxpbmVKb2luLCAgICAgICAgICAgICAgICAgICAgICAg
ICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9saW5lSm9pbik7CisgICAgZW5jb2RlKENoYW5nZTo6
TWl0ZXJMaW1pdCwgICAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X21pdGVyTGltaXQpOworCisgICAgZW5jb2RlKENoYW5nZTo6Q29tcG9zaXRlTW9kZSwgICAgICAg
ICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpOworICAg
IGVuY29kZShDaGFuZ2U6OkRyb3BTaGFkb3csICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV9kcm9wU2hhZG93KTsKKworICAgIGVuY29kZShDaGFuZ2U6OkFscGhh
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9hbHBo
YSk7CisgICAgZW5jb2RlKENoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAg
IGVuY29kZShDaGFuZ2U6OlRleHREcmF3aW5nTW9kZSwgICAgICAgICAgICAgICAgICZHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6bV90ZXh0RHJhd2luZ01vZGUpOworCisgICAgZW5jb2RlKENoYW5nZTo6
U2hvdWxkQW50aWFsaWFzLCAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjpt
X3Nob3VsZEFudGlhbGlhcyk7CisgICAgZW5jb2RlKENoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMs
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRz
KTsKKyAgICBlbmNvZGUoQ2hhbmdlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMsICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKTsKKyAg
ICBlbmNvZGUoQ2hhbmdlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3JtcywgICAgICAgICAmR3JhcGhp
Y3NDb250ZXh0U3RhdGU6Om1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIGVuY29kZShD
aGFuZ2U6OkRyYXdMdW1pbmFuY2VNYXNrLCAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRT
dGF0ZTo6bV9kcmF3THVtaW5hbmNlTWFzayk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9S
VCkKKyAgICBlbmNvZGUoQ2hhbmdlOjpVc2VEYXJrQXBwZWFyYW5jZSwgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fdXNlRGFya0FwcGVhcmFuY2UpOworI2VuZGlmCit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgYXV0byBkZWNvZGUgPSBbJl0oR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDaGFuZ2Ug
Y2hhbmdlLCBhdXRvIEdyYXBoaWNzQ29udGV4dFN0YXRlOjoqcHJvcGVydHkpIHsKKyAgICAgICAg
aWYgKCFzdGF0ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKGNoYW5nZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICB1c2luZyBQcm9wZXJ0eVR5cGUgPSB0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9yZWZlcmVuY2U8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPEdyYXBoaWNzQ29udGV4dFN0
YXRlPigpLipwcm9wZXJ0eSk+Ojp0eXBlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFByb3BlcnR5
VHlwZT4gdmFsdWU7CisgICAgICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgICAgIGlmICghdmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RhdGUuKnByb3BlcnR5
ID0gKnZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+IGNsaXBCb3VuZHM7CisgICAgZGVjb2RlciA+PiBjbGlwQm91bmRzOwor
ICAgIGlmICghY2xpcEJvdW5kcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IHN0ZDo6b3B0aW9uYWw8Q2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOworICAgIGRlY29kZXIgPj4g
Y2hhbmdlRmxhZ3M7CisgICAgaWYgKCFjaGFuZ2VGbGFncykKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIHN0YXRlKCpjbGlwQm91bmRzLCAq
Y2hhbmdlRmxhZ3MpOworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6Q1RNLCAgICAg
ICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fY3RtKSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6
OkZpbGxCcnVzaCwgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Zp
bGxCcnVzaCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUo
c3RhdGUsIENoYW5nZTo6RmlsbFJ1bGUsICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250
ZXh0U3RhdGU6Om1fZmlsbFJ1bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6U3Ryb2tlQnJ1c2gsICAgICAgICAgICAgICAg
ICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fc3Ryb2tlQnJ1c2gpKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlN0cm9rZVRoaWNr
bmVzcywgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3N0cm9rZVRoaWNrbmVz
cykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUs
IENoYW5nZTo6U3Ryb2tlU3R5bGUsICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3Rh
dGU6Om1fc3Ryb2tlU3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
aWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZUNhcCwgICAgICAgICAgICAgICAgICAgICAm
R3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZUNhcCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5nZTo6TGluZURhc2gsICAgICAgICAg
ICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1fbGluZURhc2gpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkxpbmVK
b2luLCAgICAgICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2xpbmVKb2lu
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpNaXRlckxpbWl0LCAgICAgICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9taXRlckxpbWl0KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkNvbXBvc2l0ZU1vZGUsICAgICAgICAgICAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX2NvbXBvc2l0ZU1vZGUpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OkRyb3BTaGFkb3csICAg
ICAgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX2Ryb3BTaGFkb3cpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGUoc3RhdGUsIENoYW5n
ZTo6QWxwaGEsICAgICAgICAgICAgICAgICAgICAgICAmR3JhcGhpY3NDb250ZXh0U3RhdGU6Om1f
YWxwaGEpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0
YXRlLCBDaGFuZ2U6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksICAgJkdyYXBoaWNzQ29udGV4
dFN0YXRlOjptX2ltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlRleHREcmF3aW5nTW9k
ZSwgICAgICAgICAgICAgJkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3RleHREcmF3aW5nTW9kZSkp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwg
Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXMsICAgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0
ZTo6bV9zaG91bGRBbnRpYWxpYXMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IGlmICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzLCAgICAgICAgICAg
JkdyYXBoaWNzQ29udGV4dFN0YXRlOjptX3Nob3VsZFNtb290aEZvbnRzKSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMsICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlm
ICghZGVjb2RlKHN0YXRlLCBDaGFuZ2U6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zLCAgICAgJkdy
YXBoaWNzQ29udGV4dFN0YXRlOjptX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpEcmF3
THVtaW5hbmNlTWFzaywgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV9kcmF3THVt
aW5hbmNlTWFzaykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjaWYgSEFWRShPU19E
QVJLX01PREVfU1VQUE9SVCkKKyAgICBpZiAoIWRlY29kZShzdGF0ZSwgQ2hhbmdlOjpVc2VEYXJr
QXBwZWFyYW5jZSwgICAgICAgICAgICZHcmFwaGljc0NvbnRleHRTdGF0ZTo6bV91c2VEYXJrQXBw
ZWFyYW5jZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisjZW5kaWYKKworICAgIHJl
dHVybiBzdGF0ZTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZSk7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q2hhbmdlLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpD
VE0sCisKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Rmls
bEJydXNoLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpG
aWxsUnVsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpTdHJva2VCcnVzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNo
YW5nZTo6U3Ryb2tlVGhpY2tuZXNzLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZSwKKworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lQ2FwLAorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFzaCwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4sCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQsCisKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZSwKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RHJvcFNoYWRvdywKKworICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpBbHBoYSwKKyAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSwKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6VGV4
dERyYXdpbmdNb2RlLAorCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
aGFuZ2U6OlNob3VsZEFudGlhbGlhcywKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNoYW5nZTo6U2hvdWxkU21vb3RoRm9udHMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cywKKyAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMsCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkRyYXdMdW1pbmFuY2VNYXNrCisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAg
ICAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpVc2VEYXJrQXBw
ZWFyYW5jZQorI2VuZGlmCisgICAgPjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3MjEzMjg1MjYxZTY5MGNhMzA2MGQ3ZTAyNmU1
MGU1MmVlYTU5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJl
c3RvcmUgPSB0cnVlKQorICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1f
c2F2ZUFuZFJlc3RvcmUoc2F2ZUFuZFJlc3RvcmUpCisgICAgeworICAgICAgICBpZiAobV9zYXZl
QW5kUmVzdG9yZSkKKyAgICAgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgfQorICAgIAor
ICAgIH5HcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3Nh
dmVBbmRSZXN0b3JlKQorICAgICAgICAgICAgbV9jb250ZXh0LnJlc3RvcmUoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzYXZlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVz
dG9yZSk7CisgICAgICAgIG1fY29udGV4dC5zYXZlKCk7CisgICAgICAgIG1fc2F2ZUFuZFJlc3Rv
cmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisgICAgeworICAgICAgICBB
U1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIG1fY29udGV4dC5yZXN0b3JlKCk7Cisg
ICAgICAgIG1fc2F2ZUFuZFJlc3RvcmUgPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gJm1fY29udGV4dDsgfQorCitwcml2
YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OworICAgIGJvb2wgbV9zYXZlQW5k
UmVzdG9yZTsKK307CisKK2NsYXNzIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUgeworcHVibGljOgor
ICAgIFRyYW5zcGFyZW5jeUxheWVyU2NvcGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9h
dCBhbHBoYSwgYm9vbCBiZWdpbkxheWVyID0gdHJ1ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgLCBtX2FscGhhKGFscGhhKQorICAgICAgICAsIG1fYmVnYW5MYXllcihi
ZWdpbkxheWVyKQorICAgIHsKKyAgICAgICAgaWYgKGJlZ2luTGF5ZXIpCisgICAgICAgICAgICBt
X2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhhKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBiZWdpbkxheWVyKGZsb2F0IGFscGhhKQorICAgIHsKKyAgICAgICAgbV9hbHBoYSA9
IGFscGhhOworICAgICAgICBtX2NvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX2FscGhh
KTsKKyAgICAgICAgbV9iZWdhbkxheWVyID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgflRyYW5z
cGFyZW5jeUxheWVyU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYmVnYW5MYXllcikKKyAg
ICAgICAgICAgIG1fY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKKyAgICBmbG9hdCBtX2FscGhh
OworICAgIGJvb2wgbV9iZWdhbkxheWVyOworfTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTdGFja0NoZWNrZXIgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tD
aGVja2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKKyAgICAgICAgLCBtX3N0YWNrU2l6ZShjb250ZXh0LnN0YWNrU2l6ZSgpKQorICAgIHsg
fQorCisgICAgfkdyYXBoaWNzQ29udGV4dFN0YXRlU3RhY2tDaGVja2VyKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2NvbnRleHQuc3RhY2tTaXplKCkgIT0gbV9zdGFja1NpemUpCisgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dCAlcCBzdGFjayBjaGFuZ2VkIGJ5ICVkIiwg
Jm1fY29udGV4dCwgKGludCltX2NvbnRleHQuc3RhY2tTaXplKCkgLSAoaW50KW1fc3RhY2tTaXpl
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7Cisg
ICAgdW5zaWduZWQgbV9zdGFja1NpemU7Cit9OworCitjbGFzcyBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW50ZXJwb2xhdGlv
blF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKKyAgICAgICAgOiBtX2dyYXBoaWNz
Q29udGV4dChncmFwaGljc0NvbnRleHQpCisgICAgICAgICwgbV9jdXJyZW50SW50ZXJwb2xhdGlv
blF1YWxpdHkoZ3JhcGhpY3NDb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAg
ICAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlZChpbnRlcnBvbGF0aW9uUXVhbGl0
eVRvVXNlICE9IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0ICYmIG1fY3VycmVudEludGVy
cG9sYXRpb25RdWFsaXR5ICE9IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCisgICAgeworICAg
ICAgICBpZiAobV9pbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dy
YXBoaWNzQ29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGludGVycG9sYXRpb25R
dWFsaXR5VG9Vc2UpOworICAgIH0KKworICAgIGV4cGxpY2l0IEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgc3RkOjpvcHRpb25h
bDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW50ZXJwb2xhdGlvblF1YWxpdHkpCisgICAgICAgIDog
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKGdyYXBoaWNzQ29udGV4dCwgaW50ZXJwb2xh
dGlvblF1YWxpdHkgPyBpbnRlcnBvbGF0aW9uUXVhbGl0eS52YWx1ZSgpIDogZ3JhcGhpY3NDb250
ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSkKKyAgICB7CisgICAgfQorCisgICAgfklu
dGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcigpCisgICAgeworICAgICAgICBpZiAobV9pbnRl
cnBvbGF0aW9uUXVhbGl0eUNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC5z
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KG1fY3VycmVudEludGVycG9sYXRpb25RdWFsaXR5
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29u
dGV4dDsKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2N1cnJlbnRJbnRlcnBvbGF0aW9uUXVh
bGl0eTsKKyAgICBib29sIG1faW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2VkOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCAxNWRmMWRmZGI2ZjNhMTZhZDVlYWY2NDcyNjFm
Y2ZjNGI3YTkzYWI0Li42MmY5ZjQ2NGMzZDZkOWQ1YTA5Y2E1YTRiN2JkOGExMDM2MTU5MWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmNwcApAQCAtMTI2LDI3ICsxMjYsNTEgQEAgU3RyaW5nIGJsZW5kTW9kZU5hbWUoQmxlbmRNb2Rl
IGJsZW5kT3ApCiAgICAgcmV0dXJuIGJsZW5kT3BlcmF0b3JOYW1lc1tzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oYmxlbmRPcCkgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQmxlbmRNb2RlOjpOb3JtYWwp
XTsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKK3sKKyAgICByZXR1cm4gdHMgPDwgYmxlbmRNb2RlTmFtZShibGVuZE1vZGUp
OworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb21wb3NpdGVN
b2RlIGNvbXBvc2l0ZU1vZGUpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3Bl
cmF0aW9uIiwgY29tcG9zaXRlTW9kZS5vcGVyYXRpb24pOworICAgIHRzLmR1bXBQcm9wZXJ0eSgi
YmxlbmQtbW9kZSIsIGNvbXBvc2l0ZU1vZGUuYmxlbmRNb2RlKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQogewogICAgIHJldHVybiB0cyA8PCBjb21wb3NpdGVPcGVyYXRvck5hbWUob3AsIEJs
ZW5kTW9kZTo6Tm9ybWFsKTsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyb3BTaGFkb3cmIGRyb3BTaGFkb3cpCiB7Ci0gICAgcmV0dXJuIHRz
IDw8IGJsZW5kTW9kZU5hbWUoYmxlbmRNb2RlKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRv
dy1vZmZzZXQiLCBkcm9wU2hhZG93Lm9mZnNldCk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFk
b3ctYmx1ciIsIGRyb3BTaGFkb3cuYmx1clJhZGl1cyk7CisgICAgdHMuZHVtcFByb3BlcnR5KCJz
aGFkb3ctY29sb3IiLCBkcm9wU2hhZG93LmNvbG9yKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBkcm9wU2hhZG93LnJhZGl1c01vZGUgPT0gU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5KTsKKyAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFdpbmRSdWxlIHJ1bGUpCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9u
UXVhbGl0eSkKIHsKLSAgICBzd2l0Y2ggKHJ1bGUpIHsKLSAgICBjYXNlIFdpbmRSdWxlOjpOb25a
ZXJvOgotICAgICAgICB0cyA8PCAiTk9OLVpFUk8iOworICAgIHN3aXRjaCAoaW50ZXJwb2xhdGlv
blF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAg
ICAgICB0cyA8PCAiREVGQVVMVCI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2luZFJ1bGU6
OkV2ZW5PZGQ6Ci0gICAgICAgIHRzIDw8ICJFVkVOLU9ERCI7CisgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgdHMgPDwgIkRPLU5PVC1JTlRF
UlBPTEFURSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkxvdzoKKyAgICAgICAgdHMgPDwgIkxPVyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgdHMgPDwgIk1FRElVTSI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAg
IHRzIDw8ICJIRUlHSCI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQogICAgIHJldHVybiB0czsK
IH0KIApAQCAtMTY2LDYgKzE5MCwxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBMaW5lQ2FwIGNhcFN0eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZURhc2gpCit7CisgICAgcmV0dXJuIHRz
OworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBMaW5lSm9pbiBq
b2luU3R5bGUpCiB7CiAgICAgc3dpdGNoIChqb2luU3R5bGUpIHsKQEAgLTE4Miw0ICsyMTEsNTYg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgTGluZUpvaW4gam9pblN0
eWxlKQogICAgIHJldHVybiB0czsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit7CisgICAgc3dpdGNoIChzdHJva2VT
dHlsZSkgeworICAgIGNhc2UgU3Ryb2tlU3R5bGU6Ok5vU3Ryb2tlOgorICAgICAgICB0cyA8PCAi
Tk8tU1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6U29saWRT
dHJva2U6CisgICAgICAgIHRzIDw8ICJTT0xJRC1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2U6CisgICAgICAgIHRzIDw8ICJET1RURUQt
U1RST0tFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdHJva2VTdHlsZTo6RGFzaGVkU3Ry
b2tlOgorICAgICAgICB0cyA8PCAiREFTSEVELVNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU3Ryb2tlU3R5bGU6OkRvdWJsZVN0cm9rZToKKyAgICAgICAgdHMgPDwgIkRPVUJMRS1T
VFJPS0UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tl
OgorICAgICAgICB0cyA8PCAiV0FWWS1TVFJPS0UiOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHRzOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBUZXh0RHJhd2luZ01vZGUgdGV4dERyYXdpbmdNb2RlKQoreworICAgIHN3aXRjaCAodGV4dERy
YXdpbmdNb2RlKSB7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OkZpbGw6CisgICAgICAgIHRz
IDw8ICJGSUxMIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0RHJhd2luZ01vZGU6OlN0
cm9rZToKKyAgICAgICAgdHMgPDwgIlNUUk9LRSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gdHM7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IFdpbmRSdWxlIHJ1bGUpCit7CisgICAgc3dpdGNoIChydWxlKSB7CisgICAgY2FzZSBXaW5kUnVs
ZTo6Tm9uWmVybzoKKyAgICAgICAgdHMgPDwgIk5PTi1aRVJPIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXaW5kUnVsZTo6RXZlbk9kZDoKKyAgICAgICAgdHMgPDwgIkVWRU4tT0REIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmgKaW5kZXggNGQyMDRlOTdlNWM1NDRkNzc2YmZhN2YzMGFhY2MxYjdjNDYzZTBlMC4u
MGY4YjJkMDI3NTViZmFlYzY1ZDk1YzA0ZjJjNDViNTI0OTRmMjYzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUs
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRGFz
aEFycmF5LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIK
ICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC03Myw2ICs3Niw3OSBAQCBlbnVtIGNsYXNzIEJsZW5kTW9kZSA6IHVpbnQ4X3QgewogICAgIFBs
dXNMaWdodGVyCiB9OwogCitzdHJ1Y3QgQ29tcG9zaXRlTW9kZSB7CisgICAgQ29tcG9zaXRlT3Bl
cmF0b3Igb3BlcmF0aW9uOworICAgIEJsZW5kTW9kZSBibGVuZE1vZGU7CisKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ29tcG9zaXRlTW9kZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1
cm4gb3BlcmF0aW9uID09IG90aGVyLm9wZXJhdGlvbiAmJiBibGVuZE1vZGUgPT0gb3RoZXIuYmxl
bmRNb2RlOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8Q29tcG9zaXRlTW9kZT4gZGVjb2RlKERlY29kZXImKTsKK307CisKK3Rl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENvbXBvc2l0ZU1vZGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgb3BlcmF0aW9uOworICAgIGVuY29k
ZXIgPDwgYmxlbmRNb2RlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorc3RkOjpvcHRp
b25hbDxDb21wb3NpdGVNb2RlPiBDb21wb3NpdGVNb2RlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBvcGVyYXRpb247Cisg
ICAgZGVjb2RlciA+PiBvcGVyYXRpb247CisgICAgaWYgKCFvcGVyYXRpb24pCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRN
b2RlOworICAgIGRlY29kZXIgPj4gYmxlbmRNb2RlOworICAgIGlmICghYmxlbmRNb2RlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqb3BlcmF0aW9uLCAq
YmxlbmRNb2RlIH0gfTsKK30KKworc3RydWN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHsKKyAg
ICBlbnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgVGV4dENoZWNraW5nRGljdGF0
aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywKKyAgICAgICAgU3BlbGxpbmcsCisgICAgICAgIEdy
YW1tYXIsCisgICAgICAgIEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsCisgICAgICAgIERpY3Rh
dGlvbkFsdGVybmF0aXZlcworICAgIH0gbW9kZTsKKyAgICBib29sIHNob3VsZFVzZURhcmtBcHBl
YXJhbmNlIHsgZmFsc2UgfTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gZGVjb2RlKERlY29kZXImKTsK
K307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIERvY3VtZW50TWFya2VyTGluZVN0
eWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1v
ZGU7CisgICAgZW5jb2RlciA8PCBzaG91bGRVc2VEYXJrQXBwZWFyYW5jZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+
IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBzdGQ6Om9wdGlvbmFsPE1vZGU+IG1vZGU7CisgICAgZGVjb2RlciA+PiBtb2RlOworICAgIGlm
ICghbW9kZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gc2hvdWxkVXNlRGFya0FwcGVhcmFuY2U7CisgICAgZGVjb2RlciA+PiBzaG91bGRV
c2VEYXJrQXBwZWFyYW5jZTsKKyAgICBpZiAoIXNob3VsZFVzZURhcmtBcHBlYXJhbmNlKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAqbW9kZSwgKnNob3Vs
ZFVzZURhcmtBcHBlYXJhbmNlIH0gfTsKK30KKwogZW51bSBjbGFzcyBHcmFkaWVudFNwcmVhZE1l
dGhvZCA6IHVpbnQ4X3QgewogICAgIFBhZCwKICAgICBSZWZsZWN0LApAQCAtOTMsNiArMTY5LDQy
IEBAIGVudW0gY2xhc3MgTGluZUNhcCA6IHVpbnQ4X3QgewogICAgIFNxdWFyZQogfTsKIAorc3Ry
dWN0IExpbmVEYXNoIHsKKyAgICBEYXNoQXJyYXkgZGFzaGVzOworICAgIGZsb2F0IG9mZnNldDsK
KyAgICAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IExpbmVEYXNoJiBhLCBjb25zdCBMaW5lRGFzaCYgYikKK3sKKyAgICByZXR1cm4gYS5k
YXNoZXMgPT0gYi5kYXNoZXMgJiYgYS5vZmZzZXQgPT0gYi5vZmZzZXQ7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIExpbmVEYXNoOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGRhc2hlczsKKyAgICBlbmNvZGVyIDw8IG9mZnNldDsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8TGluZURhc2g+IExp
bmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPERh
c2hBcnJheT4gZGFzaGVzOworICAgIGRlY29kZXIgPj4gZGFzaGVzOworICAgIGlmICghZGFzaGVz
KQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3RkOjpvcHRpb25hbDxmbG9h
dD4gb2Zmc2V0OworICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgIGlmICghb2Zmc2V0KQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpkYXNo
ZXMpLCAqb2Zmc2V0IH0gfTsKK30KKwogZW51bSBjbGFzcyBMaW5lSm9pbiA6IHVpbnQ4X3Qgewog
ICAgIE1pdGVyLAogICAgIFJvdW5kLApAQCAtMTA1LDYgKzIxNyw3NiBAQCBlbnVtIEhvcml6b250
YWxBbGlnbm1lbnQgewogICAgIEFsaWduSENlbnRlcgogfTsKIAorLy8gTGVnYWN5IHNoYWRvdyBi
bHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisv
LyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xhc3Mg
U2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9Owor
CitzdHJ1Y3QgRHJvcFNoYWRvdyB7CisgICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICBmbG9hdCBi
bHVyUmFkaXVzIHsgMCB9OworICAgIENvbG9yIGNvbG9yOworICAgIFNoYWRvd1JhZGl1c01vZGUg
cmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKKyAgICAKKyAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGNvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9v
bCBpc0JsdXJyZWQoKSBjb25zdCB7IHJldHVybiBpc1Zpc2libGUoKSAmJiBibHVyUmFkaXVzOyB9
CisgICAgYm9vbCBoYXNPdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gaXNCbHVycmVkKCkgfHwgKGlz
VmlzaWJsZSgpICYmICFvZmZzZXQuaXNaZXJvKCkpOyB9CisgICAgCisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPERyb3BTaGFkb3c+IGRlY29kZShEZWNv
ZGVyJik7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERyb3BTaGFkb3cmIGEs
IGNvbnN0IERyb3BTaGFkb3cmIGIpCit7CisgICAgcmV0dXJuIGEub2Zmc2V0ID09IGIub2Zmc2V0
ICYmIGEuYmx1clJhZGl1cyA9PSBiLmJsdXJSYWRpdXMgJiYgYS5jb2xvciA9PSBiLmNvbG9yICYm
IGEucmFkaXVzTW9kZSA9PSBiLnJhZGl1c01vZGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIERyb3BTaGFkb3c6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgb2Zmc2V0OworICAgIGVuY29kZXIgPDwgYmx1clJhZGl1czsKKyAgICBl
bmNvZGVyIDw8IGNvbG9yOworICAgIGVuY29kZXIgPDwgcmFkaXVzTW9kZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8RHJvcFNoYWRvdz4gRHJvcFNoYWRvdzo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFNpemU+
IG9mZnNldDsKKyAgICBkZWNvZGVyID4+IG9mZnNldDsKKyAgICBpZiAoIW9mZnNldCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGJsdXJS
YWRpdXM7CisgICAgZGVjb2RlciA+PiBibHVyUmFkaXVzOworICAgIGlmICghYmx1clJhZGl1cykK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+
IGNvbG9yOworICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAgaWYgKCFjb2xvcikKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHN0ZDo6b3B0aW9uYWw8U2hhZG93UmFkaXVzTW9k
ZT4gcmFkaXVzTW9kZTsKKyAgICBkZWNvZGVyID4+IHJhZGl1c01vZGU7CisgICAgaWYgKCFyYWRp
dXNNb2RlKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgeyAq
b2Zmc2V0LCAqYmx1clJhZGl1cywgKmNvbG9yLCAqcmFkaXVzTW9kZSB9IH07Cit9CisKK2VudW0g
U3Ryb2tlU3R5bGUgeworICAgIE5vU3Ryb2tlLAorICAgIFNvbGlkU3Ryb2tlLAorICAgIERvdHRl
ZFN0cm9rZSwKKyAgICBEYXNoZWRTdHJva2UsCisgICAgRG91YmxlU3Ryb2tlLAorICAgIFdhdnlT
dHJva2UsCit9OworCiBlbnVtIFRleHRCYXNlbGluZSB7CiAgICAgQWxwaGFiZXRpY1RleHRCYXNl
bGluZSwKICAgICBUb3BUZXh0QmFzZWxpbmUsCkBAIC0xMjIsMTYgKzMwNCwyOSBAQCBlbnVtIFRl
eHRBbGlnbiB7CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLVN0cmluZyBjb21wb3NpdGVPcGVy
YXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7
Ci1TdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwotYm9vbCBwYXJzZUJs
ZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKLWJvb2wgcGFyc2VD
b21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkNvbXBvc2l0
ZU9wZXJhdG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CitlbnVtIGNsYXNzIFRleHREcmF3aW5n
TW9kZSA6IHVpbnQ4X3QgeworICAgIEZpbGwgPSAxIDw8IDAsCisgICAgU3Ryb2tlID0gMSA8PCAx
LAorfTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkJsZW5kTW9kZSk7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRl
T3BlcmF0b3IpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKK3VzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0g
T3B0aW9uU2V0PFRleHREcmF3aW5nTW9kZT47CisKK1N0cmluZyBjb21wb3NpdGVPcGVyYXRvck5h
bWUoQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CitTdHJpbmcgYmxlbmRNb2RlTmFtZShC
bGVuZE1vZGUpOworYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBCbGVuZE1vZGUm
KTsKK2Jvb2wgcGFyc2VDb21wb3NpdGVBbmRCbGVuZE9wZXJhdG9yKGNvbnN0IFN0cmluZyYsIENv
bXBvc2l0ZU9wZXJhdG9yJiwgQmxlbmRNb2RlJik7CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBCbGVuZE1vZGUpOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENv
bXBvc2l0ZU9wZXJhdG9yKTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDb21wb3NpdGVNb2RlKTsKK1dFQkNPUkVfRVhQT1JUIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEcm9wU2hh
ZG93Jik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExp
bmVEYXNoKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgU3Ryb2tlU3R5bGUpOworV0VCQ09SRV9FWFBP
UlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFRleHREcmF3
aW5nTW9kZSk7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKQEAg
LTIxOSw0ICs0MTQsMzUgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpM
aW5lSm9pbj4gewogICAgID47CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OlN0cm9rZVN0eWxlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICBXZWJDb3JlOjpTdHJva2VTdHlsZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6Tm9TdHJv
a2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OlNvbGlkU3Ryb2tlLAorICAgIFdlYkNvcmU6
OlN0cm9rZVN0eWxlOjpEb3R0ZWRTdHJva2UsCisgICAgV2ViQ29yZTo6U3Ryb2tlU3R5bGU6OkRh
c2hlZFN0cm9rZSwKKyAgICBXZWJDb3JlOjpTdHJva2VTdHlsZTo6RG91YmxlU3Ryb2tlLAorICAg
IFdlYkNvcmU6OlN0cm9rZVN0eWxlOjpXYXZ5U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6VGV4dERyYXdpbmdNb2RlPiB7CisgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6VGV4dERyYXdpbmdNb2Rl
LAorICAgICAgICBXZWJDb3JlOjpUZXh0RHJhd2luZ01vZGU6OkZpbGwsCisgICAgICAgIFdlYkNv
cmU6OlRleHREcmF3aW5nTW9kZTo6U3Ryb2tlCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlOjpNb2RlLAorICAgIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
OjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLAorICAg
IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZywKKyAgICBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciwKKyAgICBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNl
bWVudCwKKyAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVzCisgICAgPjsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hbWVkSW1hZ2VH
ZW5lcmF0ZWRJbWFnZS5jcHAKaW5kZXggNGUwNzFmNzJmMzViZThhNThmYzRjZDU3N2ExNDU2ZGUx
NzQ2NjgyYy4uNDFiMDUxMWE4Zjc4YTE3OWIzMDRjZjg5ZDQxMDNlMzVkZTNlMTI1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmFtZWRJbWFnZUdlbmVyYXRl
ZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYW1lZElt
YWdlR2VuZXJhdGVkSW1hZ2UuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEltYWdlRHJhd1Jlc3VsdCBO
YW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGCiB7CiAjaWYgVVNFKE5FV19USEVNRSkgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgY29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBv
cHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU1vZGUoeyBvcHRp
b25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkgfSk7CiAgICAgY29u
dGV4dC5jbGlwKGRzdFJlY3QpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QubG9jYXRp
b24oKSk7CiAgICAgaWYgKGRzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4
dC5oCmluZGV4IGI2MjM2Nzg4MGUzZTUzNTRiNjE3MTEzNDdjOWExMWI0MjI0Njg4NWUuLmQ2N2Qz
ZWExMTVkMjRlZmQ5MDllMDNhYzlhZGU5M2E4YjQ3NjRmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsODcg
KzM4LDU3IEBAIHB1YmxpYzoKICAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CiAgICAg
fTsKIAotICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJl
YXNvbnMpCi0gICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAg
ICBOdWxsR3JhcGhpY3NDb250ZXh0KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIFBhaW50
SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQorICAgICAgICA6IEdyYXBoaWNzQ29udGV4dChp
bml0aWFsQ2xpcCkKKyAgICAgICAgLCBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25z
KQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0KICAgICBib29sIHBhaW50
aW5nRGlzYWJsZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBwZXJm
b3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52
YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KICAg
ICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9CiAgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJl
YXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzOyB9CiAgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQogCi0gICAgdm9pZCBk
aWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KLQotI2lmIFVTRShDRykKLSAgICB2
b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQotI2VuZGlmCi0KLSAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWwgeyB9Ci0KLSAgICB2b2lkIGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfTsKLQotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KLQotICAgIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQotCisgICAgdm9pZCBzYXZlKCkgZmluYWwg
eyB9CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVN0YXRlQ2hh
bmdlcygpIGZpbmFsIHsgfTsKICNpZiBVU0UoQ0cpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRl
cm4oKSBmaW5hbCB7IH0KICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KLSAg
ICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KICNlbmRpZgogCi0gICAgdm9p
ZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQotICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQotICAg
IHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotICAgIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9Ci0g
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBS
b3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9Ci0gICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFz
aEFycmF5JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBm
aW5hbCB7IH0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWwgeyB9Ci0gICAgdm9p
ZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWwgeyB9Ci0gICAgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWwgeyB9Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0
KGZsb2F0KSBmaW5hbCB7IH0KLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsIHsg
fQotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWwgeyB9Ci0gICAgdm9pZCBy
b3RhdGUoZmxvYXQpIGZpbmFsIHsgfQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkg
ZmluYWwgeyB9Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmlu
YWwgeyB9Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwgeyB9
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJs
eUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWwgeyB9CisKICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVs
ZTo6RXZlbk9kZCkgZmluYWwgeyB9CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsIHsgfQotICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgcmVzdG9yZSgp
IGZpbmFsIHsgfQotCi0gICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBGbG9hdFNpemUgZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIHVuc2lnbmVkID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gPSBzdGQ6Om51bGxvcHQp
IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsg
fQorICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAKLSAgICB2b2lk
IGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21TdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiA9IHN0ZDo6bnVsbG9wdCkgZmluYWwgeyB9Ci0gICAgdm9pZCBkcmF3
QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2Fk
ZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQorICAgIAorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWwgeyB9CiAKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsIHsgfQor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQogCi0gICAgSW1hZ2VEcmF3UmVz
dWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAg
IHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7
IH0KIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CiAKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxv
YXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CkBAIC0xMjcsMjgg
Kzk3LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KICNlbmRp
ZgogCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
IGZpbmFsIHsgfQotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0KLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9Ci0gICAgdm9pZCBjbGlwT3V0Um91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQotICAgIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0K
LQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7
IH0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0K
LQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KLSAgICB2
b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQotCisgICAgdm9pZCBkcmF3SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBGaWx0ZXIm
LCBGaWx0ZXJSZXN1bHRzJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsIHsgfQorICAgIHZvaWQgZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbCB7IH0KICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KICNlbmRpZgog
CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwg
U3Ryb2tlU3R5bGUpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisK
KyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KKwog
I2lmIE9TKFdJTkRPV1MpICYmICFVU0UoQ0FJUk8pCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotcHJpdmF0ZToKICAgICBjb25zdCBQYWludEludmFsaWRh
dGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgeyBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6Ok5vbmUgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdl
MDFmZDM5NDY0MzM5ZDJkNGQ1NGJhOTM2NGM1OTQ1Y2ZhZDdkNWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAi
RElCUGl4ZWxEYXRhLmgiCit0eXBlZGVmIHN0cnVjdCBIRENfXyogSERDOworI2lmICFVU0UoQ0cp
CisvLyBVSW50OCBpcyBkZWZpbmVkIGluIENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oCit0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgVUludDg7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgVVNFKENHKQordXNp
bmcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQgPSBzdHJ1Y3QgQ0dDb250ZXh0OworI2VsaWYgVVNF
KENBSVJPKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0Q2Fpcm87
Cit9Cit1c2luZyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCA9IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOworI2Vsc2UKK3VzaW5nIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0ID0gdm9pZDsK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcAppbmRleCBiYjEzOGI1Mjk3YTUyMWZiZjdkNjkzY2QxMTQxMDQ0MDBmY2FiYzRlLi45MDI0
ZjVkMWFiZmNlMzgwODE4M2EzYjIzMWZiY2UwZmZiMmZmNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkxLDE3ICsxOTEsMTcg
QEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICB1cGRhdGVTaGFkb3dCbHVyVmFsdWVzKCk7
CiB9CiAKLVNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlKQotICAgIDogbV9jb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIG1fYmx1clJh
ZGl1cyhzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dCbHVyKQotICAgICwgbV9vZmZzZXQo
c3RhdGUuc2hhZG93T2Zmc2V0KQotICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3Qg
RHJvcFNoYWRvdyYgZHJvcFNoYWRvdywgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKKyAg
ICA6IG1fY29sb3IoZHJvcFNoYWRvdy5jb2xvcikKKyAgICAsIG1fYmx1clJhZGl1cyhkcm9wU2hh
ZG93LmJsdXJSYWRpdXMsIGRyb3BTaGFkb3cuYmx1clJhZGl1cykKKyAgICAsIG1fb2Zmc2V0KGRy
b3BTaGFkb3cub2Zmc2V0KQorICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cpCiAgICAgLy8gQ29yZSBHcmFwaGljcyBp
bmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJv
YmxlbS84MTAzNDQyPiksCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdn
eSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgaWYgKHN0
YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KSB7Ci0gICAg
ICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0ZS5zaGFkb3dC
bHVyKTsKKyAgICBpZiAoZHJvcFNoYWRvdy5yYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSkgeworICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRp
dXMoZHJvcFNoYWRvdy5ibHVyUmFkaXVzKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRT
aXplKHNoYWRvd0JsdXIsIHNoYWRvd0JsdXIpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCmluZGV4IDE0ZmQ4M2VkZTFhMWJh
Y2YxNzdmMzMxZWNhZDFhNDMwMjkzZjYwM2EuLjQ1ZDBlNTgzMjljZGVlYWJmYjc4YTRkNWU2N2Fi
OGQ4ODFhZTU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmgKQEAgLTM4LDggKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBB
ZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1zdHJ1Y3QgR3JhcGhpY3ND
b250ZXh0U3RhdGU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIEltYWdlQnVm
ZmVyOworc3RydWN0IERyb3BTaGFkb3c7CiAKIGNsYXNzIFNoYWRvd0JsdXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNoYWRvd0JsdXIpOwpAQCAtNTIsNyArNTMsNyBAQCBwdWJsaWM6CiAK
ICAgICBTaGFkb3dCbHVyKCk7CiAgICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1
cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgYm9vbCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKLSAgICBTaGFkb3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJik7CisgICAgU2hhZG93Qmx1cihjb25zdCBEcm9wU2hhZG93JiwgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93VmFsdWVz
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIGJvb2wg
aWdub3JlVHJhbnNmb3JtcyA9IGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnJ1c2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNmFjMTNmZDI1YzZmMGY4
MDE1ODcyZmYxOWVkMjhhMWZhNTJiZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU291cmNlQnJ1c2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTb3VyY2VCcnVzaDo6U291cmNlQnJ1c2goY29uc3QgQ29sb3ImIGNvbG9yLCBzdGQ6Om9wdGlv
bmFsPEJydXNoPiYmIGJydXNoKQorICAgIDogbV9jb2xvcihjb2xvcikKKyAgICAsIG1fYnJ1c2go
V1RGTW92ZShicnVzaCkpCit7Cit9CisKK2NvbnN0IEFmZmluZVRyYW5zZm9ybSYgU291cmNlQnJ1
c2g6OnNwYWNlVHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
QWZmaW5lVHJhbnNmb3JtPiBpZGVudGl0eTsKKyAgICByZXR1cm4gbV9icnVzaCA/IG1fYnJ1c2gt
PnNwYWNlVHJhbnNmb3JtIDogaWRlbnRpdHkuZ2V0KCk7Cit9CisKK0dyYWRpZW50KiBTb3VyY2VC
cnVzaDo6Z3JhZGllbnQoKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgaWYgKGF1dG8qIGdyYWRpZW50ID0gc3RkOjpnZXRfaWY8UmVmPEdy
YWRpZW50Pj4oJm1fYnJ1c2gtPmJydXNoKSkKKyAgICAgICAgcmV0dXJuIGdyYWRpZW50LT5wdHIo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGF0dGVybiogU291cmNlQnJ1c2g6OnBhdHRl
cm4oKSBjb25zdAoreworICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKGF1dG8qIHBhdHRlcm4gPSBzdGQ6OmdldF9pZjxSZWY8UGF0dGVybj4+KCZtX2Jy
dXNoLT5icnVzaCkpCisgICAgICAgIHJldHVybiBwYXR0ZXJuLT5wdHIoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwordm9pZCBTb3VyY2VCcnVzaDo6c2V0R3JhZGllbnQoUmVmPEdyYWRpZW50
PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHNwYWNlVHJhbnNmb3JtKQorewor
ICAgIG1fYnJ1c2ggPSB7IFdURk1vdmUoZ3JhZGllbnQpLCBzcGFjZVRyYW5zZm9ybSB9OworfQor
Cit2b2lkIFNvdXJjZUJydXNoOjpzZXRQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4sIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0pCit7CisgICAgbV9icnVzaCA9IHsg
V1RGTW92ZShwYXR0ZXJuKSwgc3BhY2VUcmFuc2Zvcm0gfTsKK30KKworV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTb3VyY2VCcnVzaCYgYnJ1c2gpCit7
CisgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGJydXNoLmNvbG9yKCkpOworCisgICAgaWYg
KGF1dG8gZ3JhZGllbnQgPSBicnVzaC5ncmFkaWVudCgpKQorICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoImdyYWRpZW50IiwgZ3JhZGllbnQpOworCisgICAgaWYgKGF1dG8gcGF0dGVybiA9IGJydXNo
LnBhdHRlcm4oKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuIiwgcGF0dGVybik7
CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJydXNoLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcx
MTBmMjFmZGJlYWNiZjM1ZDc4OTBjNzhmNzM5OTc5NjRhZGZlYTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCcnVzaC5oCkBAIC0wLDAg
KzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5o
IgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
b3VyY2VCcnVzaCB7CitwdWJsaWM6CisgICAgc3RydWN0IEJydXNoIHsKKyAgICAgICAgc3RkOjp2
YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4gYnJ1c2g7CisgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBzcGFjZVRyYW5zZm9ybTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEJydXNoPiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIH07CisKKyAgICBTb3VyY2VCcnVzaCgpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBTb3VyY2VCcnVzaChjb25zdCBDb2xvciYsIHN0ZDo6b3B0aW9uYWw8QnJ1c2g+JiYg
PSBzdGQ6Om51bGxvcHQpOworCisgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvcjsgfQorICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgQ29sb3IgY29sb3IpIHsgbV9j
b2xvciA9IGNvbG9yOyB9CisKKyAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPEJydXNoPiYgYnJ1c2go
KSBjb25zdCB7IHJldHVybiBtX2JydXNoOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFkaWVu
dCogZ3JhZGllbnQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQYXR0ZXJuKiBwYXR0ZXJu
KCkgY29uc3Q7CisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSgpIGNv
bnN0OworCisgICAgdm9pZCBzZXRHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgc3BhY2VUcmFuc2Zvcm0gPSB7IH0pOworICAgIHZvaWQgc2V0UGF0dGVybihS
ZWY8UGF0dGVybj4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzcGFjZVRyYW5zZm9ybSA9IHsg
fSk7CisKKyAgICBib29sIGlzUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gIW1fYnJ1c2ggJiYg
bV9jb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKTsgfQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFNvdXJjZUJydXNoPiBkZWNvZGUoRGVjb2RlciYp
OworCitwcml2YXRlOgorICAgIENvbG9yIG1fY29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKKyAgICBz
dGQ6Om9wdGlvbmFsPEJydXNoPiBtX2JydXNoOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBzdGQ6OnZhcmlhbnQ8UmVmPEdyYWRpZW50PiwgUmVmPFBhdHRlcm4+PiYgYSwgY29u
c3Qgc3RkOjp2YXJpYW50PFJlZjxHcmFkaWVudD4sIFJlZjxQYXR0ZXJuPj4mIGIpCit7CisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24oYSwKKyAgICAgICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+
JiBhR3JhZGllbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBiR3JhZGllbnQgPSBzdGQ6Omdl
dF9pZjxSZWY8R3JhZGllbnQ+PigmYikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFHcmFkaWVu
dC5wdHIoKSA9PSBiR3JhZGllbnQtPnB0cigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJlZjxQYXR0ZXJuPiYgYVBhdHRlcm4pIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBiUGF0dGVybiA9IHN0ZDo6Z2V0X2lmPFJlZjxQYXR0ZXJu
Pj4oJmIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhUGF0dGVybi5wdHIoKSA9PSBiUGF0dGVy
bi0+cHRyKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICApOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoOjpCcnVzaCYgYSwg
Y29uc3QgU291cmNlQnJ1c2g6OkJydXNoJiBiKQoreworICAgIHJldHVybiBhLmJydXNoID09IGIu
YnJ1c2ggJiYgYS5zcGFjZVRyYW5zZm9ybSA9PSBiLnNwYWNlVHJhbnNmb3JtOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUJydXNoJiBhLCBjb25zdCBTb3VyY2VCcnVz
aCYgYikKK3sKKyAgICByZXR1cm4gYS5jb2xvcigpID09IGIuY29sb3IoKSAmJiBhLmJydXNoKCkg
PT0gYi5icnVzaCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPgordm9pZCBTb3Vy
Y2VCcnVzaDo6QnJ1c2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVu
Y29kZXIgPDwgc3BhY2VUcmFuc2Zvcm07CisgICAgV1RGOjpzd2l0Y2hPbihicnVzaCwKKyAgICAg
ICAgWyZdIChjb25zdCBSZWY8R3JhZGllbnQ+JiBncmFkaWVudCkgeworICAgICAgICAgICAgZW5j
b2RlciA8PCB0cnVlIDw8IGdyYWRpZW50LmdldCgpOworICAgICAgICB9LAorICAgICAgICBbJl0g
KGNvbnN0IFJlZjxQYXR0ZXJuPiYgcGF0dGVybikgeworICAgICAgICAgICAgZW5jb2RlciA8PCBm
YWxzZSA8PCBwYXR0ZXJuLmdldCgpOworICAgICAgICB9CisgICAgKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1c2g6OkJydXNoPiBTb3Vy
Y2VCcnVzaDo6QnJ1c2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHN0ZDo6b3B0
aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBzcGFjZVRyYW5zZm9ybTsKKyAgICBkZWNvZGVyID4+IHNw
YWNlVHJhbnNmb3JtOworICAgIGlmICghc3BhY2VUcmFuc2Zvcm0pCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGhhc0dyYWRpZW50OworICAg
IGRlY29kZXIgPj4gaGFzR3JhZGllbnQ7CisgICAgaWYgKCFoYXNHcmFkaWVudCkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAKKyAgICBpZiAoKmhhc0dyYWRpZW50KSB7CisgICAg
ICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgICAgICBp
ZiAoIWdyYWRpZW50KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIHsgeyBXVEZNb3ZlKCpncmFkaWVudCksICpzcGFjZVRyYW5zZm9ybSB9IH07CisgICAg
fQorCisgICAgYXV0byBwYXR0ZXJuID0gUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpOworICAgIGlm
ICghcGF0dGVybikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7
IFdURk1vdmUoKnBhdHRlcm4pLCAqc3BhY2VUcmFuc2Zvcm0gfSB9OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBTb3VyY2VCcnVzaDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9icnVz
aDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK3N0ZDo6b3B0aW9uYWw8U291cmNlQnJ1
c2g+IFNvdXJjZUJydXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBzdGQ6Om9w
dGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBkZWNvZGVyID4+IGNvbG9yOworICAgIGlmICghY29s
b3IpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0
ZDo6b3B0aW9uYWw8QnJ1c2g+PiBicnVzaDsKKyAgICBkZWNvZGVyID4+IGJydXNoOworICAgIGlm
ICghYnJ1c2gpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gU291
cmNlQnJ1c2goKmNvbG9yLCBXVEZNb3ZlKCpicnVzaCkpOworfQorCitXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgU291cmNlQnJ1c2gmKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UZXh0Qm94SXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2U2OGUzOGYwMjM3YjAyMjBjZjY1
YmEyYzEwZTg4ODhkZDQ5ODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dEJveEl0ZXJhdG9yLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRleHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0
Qm94SXRlcmF0b3IgeworcHVibGljOgorICAgIFRleHRCb3hJdGVyYXRvcigpCisgICAgICAgIDog
bV90ZXh0UnVuKDApCisgICAgICAgICwgbV9vZmZzZXQoMCkKKyAgICB7CisgICAgfQorCisgICAg
VGV4dEJveEl0ZXJhdG9yKGNvbnN0IFRleHRSdW4qIHRleHRSdW4sIHVuc2lnbmVkIG9mZnNldCkK
KyAgICAgICAgOiBtX3RleHRSdW4odGV4dFJ1bikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CisgICAgdm9pZCBpbmNyZW1lbnQoKSB7IG1fb2Zmc2V0Kys7IH0KKyAgICBib29s
IGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1biB8fCBtX29mZnNldCA+PSBtX3RleHRS
dW4tPmxlbmd0aCgpOyB9CisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICgqbV90
ZXh0UnVuKVttX29mZnNldF07IH0KKyAgICBVQ2hhckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBhdEVuZCgpID8gVV9PVEhFUl9ORVVUUkFMIDogdV9jaGFyRGlyZWN0aW9uKGN1
cnJlbnQoKSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0Qm94SXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1f
b2Zmc2V0ICYmIG1fdGV4dFJ1biA9PSBvdGhlci5tX3RleHRSdW47CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRleHRCb3hJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
ICFvcGVyYXRvcj09KG90aGVyKTsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRleHRSdW4qIG1f
dGV4dFJ1bjsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9H
cmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDcyOGQzYmVhMGExNzIzNTAxNGYwZjEyY2YzZDZkN2Rh
MTkzYzM1YTUuLjE1ZTg0NTU3YWM4MWE3NjdhMDA3NDZlMzAxNjE1MzU0NGYyMTU2N2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcApAQCAtMTgzNCw3ICsxODM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJl
Y3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmEK
ICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwg
c2l6ZSgpKTsKIAotICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXJJbXBsIGNvbnRleHQoKm1f
ZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVU
cmFuc2Zvcm0oKSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlckltcGwgY29udGV4dCgq
bV9kaXNwbGF5TGlzdCwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAgICAgICAg
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggMTU1MjM1NmEy
M2E1ZmRmYjEwYWZlY2EyY2M5MmE3Mjc5NDU4MTAyZS4uNGU2MjFkNWQ0MWJhMzE0NTkxOWM5N2Iy
OTlmNDRhNjgwOWI1ZDQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0yMjcsNyArMjI3LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGRyYXdQYXRoU2hhZG93KEdyYXBoaWNzQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEYKICAgICAgICAgc29saWRGaWd1cmVFeHRlbnRzLnVu
aXRlKGZpbGxFeHRlbnRzKTsKICAgICB9CiAKLSAgICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0
YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZv
cm1Db250ZXh0KSwgc29saWRGaWd1cmVFeHRlbnRzLAorICAgIHNoYWRvdy5kcmF3U2hhZG93TGF5
ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91
bmRzKHBsYXRmb3JtQ29udGV4dCksIHNvbGlkRmlndXJlRXh0ZW50cywKICAgICAgICAgW2NhaXJv
Q29udGV4dCwgZHJhd2luZ1N0eWxlLCAmcGF0aCwgJmZpbGxTb3VyY2UsICZzdHJva2VTb3VyY2Vd
KEdyYXBoaWNzQ29udGV4dCYgc2hhZG93Q29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAg
Y2Fpcm9fdCogY2Fpcm9TaGFkb3dDb250ZXh0ID0gc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKTsKQEAgLTM0MSw3ICszNDEsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hh
ZG93KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFNoYWRvdwog
ICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMoc2NhbGVkRm9udCwgZ2x5cGhzLmRh
dGEoKSwgZ2x5cGhzLnNpemUoKSwgJmV4dGVudHMpOwogICAgIEZsb2F0UmVjdCBmb250RXh0ZW50
c1JlY3QocG9pbnQueCgpICsgZXh0ZW50cy54X2JlYXJpbmcsIHBvaW50LnkoKSArIGV4dGVudHMu
eV9iZWFyaW5nLCBleHRlbnRzLndpZHRoLCBleHRlbnRzLmhlaWdodCk7CiAKLSAgICBzaGFkb3cu
ZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6Omdl
dENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZm9udEV4dGVudHNSZWN0LAorICAgIHNoYWRv
dy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0
YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGZvbnRFeHRlbnRzUmVjdCwKICAg
ICAgICAgW3NjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsICZnbHlwaHMsIGZvbnRTbW9v
dGhpbmdNb2RlXShHcmFwaGljc0NvbnRleHQmIHNoYWRvd0NvbnRleHQpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGRyYXdHbHlwaHNUb0NvbnRleHQoc2hhZG93Q29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBmb250
U21vb3RoaW5nTW9kZSk7CkBAIC0zNjcsNyArMzY3LDcgQEAgRmxvYXRSZWN0IGNvbXB1dGVMaW5l
Qm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBs
YXQKICAgICBpZiAocHJpbnRpbmcpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBG
bG9hdFNpemUod2lkdGgsIHRoaWNrbmVzcykpOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCk7CisgICAgQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybSA9IENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4
dC5jcigpKTsKICAgICAvLyBKdXN0IGNvbXB1dGUgc2NhbGUgaW4geCBkaW1lbnNpb24sIGFzc3Vt
aW5nIHggYW5kIHkgc2NhbGVzIGFyZSBlcXVhbC4KICAgICBmbG9hdCBzY2FsZSA9IHRyYW5zZm9y
bS5iKCkgPyBzdGQ6Omh5cG90KHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCkpIDogdHJhbnNm
b3JtLmEoKTsKICAgICBpZiAoc2NhbGUgPCAxLjApIHsKQEAgLTQ0NiwxNyArNDQ2LDE2IEBAIHN0
YXRpYyBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBp
c1ZlcnRpY2FsTGluZSwgZmxvYXQKIAogbmFtZXNwYWNlIFN0YXRlIHsKIAotdm9pZCBzZXRTdHJv
a2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgZmxvYXQg
c3Ryb2tlVGhpY2tuZXNzKQordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCogY3IsIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcykKIHsKLSAgICBjYWlyb19zZXRfbGluZV93aWR0aChwbGF0Zm9y
bUNvbnRleHQuY3IoKSwgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBjYWlyb19zZXRfbGluZV93aWR0
aChjciwgc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBzZXRTdHJva2VTdHlsZShHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkK
K3ZvaWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCogY3IsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KQogewogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGFzaFBhdHRlcm5bXSA9IHsgNS4wLCA1LjAg
fTsKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRvdFBhdHRlcm5bXSA9IHsgMS4wLCAxLjAgfTsK
IAotICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAgICAgc3dpdGNoIChz
dHJva2VTdHlsZSkgewogICAgIGNhc2UgTm9TdHJva2U6CiAgICAgICAgIC8vIEZJWE1FOiBpcyBp
dCB0aGUgcmlnaHQgd2F5IHRvIGVtdWxhdGUgTm9TdHJva2U/CkBAIC00NzcsMjkgKzQ3NiwyOSBA
QCB2b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eQogICAgIH0KIH0KIAotdm9pZCBzZXRDb21wb3NpdGVP
cGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBz
ZXRDb21wb3NpdGVPcGVyYXRpb24oY2Fpcm9fdCogY3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBjYWlyb19zZXRfb3Bl
cmF0b3IocGxhdGZvcm1Db250ZXh0LmNyKCksIHRvQ2Fpcm9PcGVyYXRvcihjb21wb3NpdGVPcGVy
YXRpb24sIGJsZW5kTW9kZSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgdG9DYWlyb09w
ZXJhdG9yKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKSk7CiB9CiAKLXZvaWQgc2V0U2hv
dWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGJvb2wg
ZW5hYmxlKQordm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoY2Fpcm9fdCogY3IsIGJvb2wgZW5hYmxl
KQogewogICAgIC8vIFdoZW4gdHJ1ZSwgdXNlIHRoZSBkZWZhdWx0IENhaXJvIGJhY2tlbmQgYW50
aWFsaWFzIG1vZGUgKHVzdWFsbHkgdGhpcwogICAgIC8vIGVuYWJsZXMgc3RhbmRhcmQgJ2dyYXlz
Y2FsZScgYW50aWFsaWFzaW5nKTsgZmFsc2UgdG8gZXhwbGljaXRseSBkaXNhYmxlCiAgICAgLy8g
YW50aWFsaWFzaW5nLgotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0LmNy
KCksIGVuYWJsZSA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05P
TkUpOworICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY3IsIGVuYWJsZSA/IENBSVJPX0FOVElBTElB
U19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05PTkUpOwogfQogCi12b2lkIHNldENUTShHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3ZvaWQgc2V0Q1RNKGNhaXJvX3QqIGNyLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKIHsKICAgICBjb25zdCBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSB0b0Nh
aXJvTWF0cml4KHRyYW5zZm9ybSk7Ci0gICAgY2Fpcm9fc2V0X21hdHJpeChwbGF0Zm9ybUNvbnRl
eHQuY3IoKSwgJm1hdHJpeCk7CisgICAgY2Fpcm9fc2V0X21hdHJpeChjciwgJm1hdHJpeCk7CiB9
CiAKLUFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCkKK0FmZmluZVRyYW5zZm9ybSBnZXRDVE0oY2Fpcm9fdCogY3IpCiB7CiAgICAgY2Fp
cm9fbWF0cml4X3QgbTsKLSAgICBjYWlyb19nZXRfbWF0cml4KHBsYXRmb3JtQ29udGV4dC5jcigp
LCAmbSk7CisgICAgY2Fpcm9fZ2V0X21hdHJpeChjciwgJm0pOwogICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0obS54eCwgbS55eCwgbS54eSwgbS55eSwgbS54MCwgbS55MCk7CiB9CiAKQEAgLTU1
Niw0NSArNTU1LDQ1IEBAIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKIH0gLy8gbmFtZXNwYWNlIFN0YXRlCiAKIEZpbGxTb3Vy
Y2U6OkZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDog
Z2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEpCi0gICAgLCBmaWxsUnVsZShzdGF0ZS5maWxsUnVsZSkK
KyAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkpCisgICAgLCBmaWxsUnVsZShzdGF0ZS5m
aWxsUnVsZSgpKQogewotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVybikgewotICAgICAgICBwYXR0
ZXJuLm9iamVjdCA9IGFkb3B0UmVmKHN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpKTsKKyAgICBpZiAoYXV0byBmaWxsUGF0dGVybiA9IHN0
YXRlLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkgeworICAgICAgICBwYXR0ZXJuLm9iamVjdCA9IGFk
b3B0UmVmKGZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3Jt
KCkpKTsKIAotICAgICAgICBhdXRvJiBwYXR0ZXJuSW1hZ2UgPSBzdGF0ZS5maWxsUGF0dGVybi0+
dGlsZUltYWdlKCk7CisgICAgICAgIGF1dG8mIHBhdHRlcm5JbWFnZSA9IGZpbGxQYXR0ZXJuLT50
aWxlSW1hZ2UoKTsKICAgICAgICAgcGF0dGVybi5zaXplID0gcGF0dGVybkltYWdlLnNpemUoKTsK
LSAgICAgICAgcGF0dGVybi50cmFuc2Zvcm0gPSBzdGF0ZS5maWxsUGF0dGVybi0+cGF0dGVyblNw
YWNlVHJhbnNmb3JtKCk7Ci0gICAgICAgIHBhdHRlcm4ucmVwZWF0WCA9IHN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRYKCk7Ci0gICAgICAgIHBhdHRlcm4ucmVwZWF0WSA9IHN0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRZKCk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQpIHsKLSAg
ICAgICAgZ3JhZGllbnQuYmFzZSA9IHN0YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigx
LCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmIChzdGF0ZS5h
bHBoYSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRlLmZp
bGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSwgc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBwYXR0ZXJuLnRyYW5zZm9ybSA9IGZpbGxQYXR0ZXJu
LT5wYXR0ZXJuU3BhY2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gZmls
bFBhdHRlcm4tPnJlcGVhdFgoKTsKKyAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gZmlsbFBhdHRl
cm4tPnJlcGVhdFkoKTsKKyAgICB9IGVsc2UgaWYgKGF1dG8gZmlsbEdyYWRpZW50ID0gc3RhdGUu
ZmlsbEJydXNoKCkuZ3JhZGllbnQoKSkgeworICAgICAgICBncmFkaWVudC5iYXNlID0gZmlsbEdy
YWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEsIHN0YXRlLmZpbGxCcnVzaCgpLnNwYWNlVHJhbnNmb3Jt
KCkpOworICAgICAgICBpZiAoc3RhdGUuYWxwaGEoKSAhPSAxKQorICAgICAgICAgICAgZ3JhZGll
bnQuYWxwaGFBZGp1c3RlZCA9IGZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBo
YSgpLCBzdGF0ZS5maWxsQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgY29sb3IgPSBzdGF0ZS5maWxsQ29sb3I7CisgICAgICAgIGNvbG9yID0gc3RhdGUuZmls
bEJydXNoKCkuY29sb3IoKTsKIH0KIAogU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotICAgIDogZ2xvYmFsQWxwaGEoc3RhdGUuYWxw
aGEpCi17Ci0gICAgaWYgKHN0YXRlLnN0cm9rZVBhdHRlcm4pCi0gICAgICAgIHBhdHRlcm4gPSBh
ZG9wdFJlZihzdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5l
VHJhbnNmb3JtKCkpKTsKLSAgICBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkgewotICAg
ICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4o
MSwgc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmIChzdGF0
ZS5hbHBoYSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRl
LnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhLCBzdGF0ZS5zdHJva2VH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICA6IGdsb2JhbEFscGhhKHN0YXRlLmFscGhhKCkp
Cit7CisgICAgaWYgKGF1dG8gc3Ryb2tlUGF0dGVybiA9IHN0YXRlLnN0cm9rZUJydXNoKCkucGF0
dGVybigpKQorICAgICAgICBwYXR0ZXJuID0gYWRvcHRSZWYoc3Ryb2tlUGF0dGVybi0+Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSk7CisgICAgZWxzZSBpZiAoYXV0byBz
dHJva2VHcmFkaWVudCA9IHN0YXRlLnN0cm9rZUJydXNoKCkuZ3JhZGllbnQoKSkgeworICAgICAg
ICBncmFkaWVudC5iYXNlID0gc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSwgc3RhdGUu
c3Ryb2tlQnJ1c2goKS5zcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgaWYgKHN0YXRlLmFscGhh
KCkgIT0gMSkKKyAgICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBzdHJva2VHcmFk
aWVudC0+Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSgpLCBzdGF0ZS5zdHJva2VCcnVzaCgpLnNw
YWNlVHJhbnNmb3JtKCkpOwogICAgIH0gZWxzZQotICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9r
ZUNvbG9yOworICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9rZUJydXNoKCkuY29sb3IoKTsKIH0K
IAogU2hhZG93U3RhdGU6OlNoYWRvd1N0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSkKLSAgICA6IG9mZnNldChzdGF0ZS5zaGFkb3dPZmZzZXQpCi0gICAgLCBibHVyKHN0YXRl
LnNoYWRvd0JsdXIpCi0gICAgLCBjb2xvcihzdGF0ZS5zaGFkb3dDb2xvcikKLSAgICAsIGlnbm9y
ZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgLCBnbG9iYWxB
bHBoYShzdGF0ZS5hbHBoYSkKLSAgICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yKQorICAgIDogb2Zmc2V0KHN0YXRlLmRyb3BTaGFkb3coKS5vZmZzZXQp
CisgICAgLCBibHVyKHN0YXRlLmRyb3BTaGFkb3coKS5ibHVyUmFkaXVzKQorICAgICwgY29sb3Io
c3RhdGUuZHJvcFNoYWRvdygpLmNvbG9yKQorICAgICwgaWdub3JlVHJhbnNmb3JtcyhzdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKQorICAgICwgZ2xvYmFsQWxwaGEoc3RhdGUuYWxwaGEo
KSkKKyAgICAsIGdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yKHN0YXRlLmNvbXBvc2l0ZU1vZGUoKS5v
cGVyYXRpb24pCiB7CiB9CiAKQEAgLTYxNSwxNCArNjE0LDE0IEBAIGJvb2wgU2hhZG93U3RhdGU6
OmlzUmVxdWlyZWQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2UgY2FuIGF2b2lkIFNoYWRvd0JsdXIs
IHNpbmNlIHRoZXJlIGFyZSBubyB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGNhbnZh
cy4KLSAgICBpZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLmlzSWRlbnRpdHkoKSkK
KyAgICBpZiAoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSkuaXNJZGVudGl0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBPdGhlcndpc2UsIG5vIGNoYW5jZSBh
dm9pZGluZyBTaGFkb3dCbHVyLgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIHNldExpbmVD
YXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2Fw
KQordm9pZCBzZXRMaW5lQ2FwKGNhaXJvX3QqIGNyLCBMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAg
Y2Fpcm9fbGluZV9jYXBfdCBjYWlyb0NhcCB7IH07CiAgICAgc3dpdGNoIChsaW5lQ2FwKSB7CkBA
IC02MzYsMTggKzYzNSwxOCBAQCB2b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgTGluZUNhcCBsaW5lQ2FwKQogICAgICAgICBjYWlyb0NhcCA9IENB
SVJPX0xJTkVfQ0FQX1NRVUFSRTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3Nl
dF9saW5lX2NhcChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fpcm9DYXApOworICAgIGNhaXJvX3Nl
dF9saW5lX2NhcChjciwgY2Fpcm9DYXApOwogfQogCi12b2lkIHNldExpbmVEYXNoKEdyYXBoaWNz
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQordm9pZCBzZXRMaW5lRGFzaChjYWlyb190KiBjciwgY29uc3QgRGFz
aEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7CiAgICAgaWYgKHN0ZDo6YWxsX29m
KGRhc2hlcy5iZWdpbigpLCBkYXNoZXMuZW5kKCksIFtdKGF1dG8mIGRhc2gpIHsgcmV0dXJuICFk
YXNoOyB9KSkKLSAgICAgICAgY2Fpcm9fc2V0X2Rhc2gocGxhdGZvcm1Db250ZXh0LmNyKCksIDAs
IDAsIDApOworICAgICAgICBjYWlyb19zZXRfZGFzaChjciwgMCwgMCwgMCk7CiAgICAgZWxzZQot
ICAgICAgICBjYWlyb19zZXRfZGFzaChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgZGFzaGVzLmRhdGEo
KSwgZGFzaGVzLnNpemUoKSwgZGFzaE9mZnNldCk7CisgICAgICAgIGNhaXJvX3NldF9kYXNoKGNy
LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBz
ZXRMaW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9p
biBsaW5lSm9pbikKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCogY3IsIExpbmVKb2luIGxpbmVK
b2luKQogewogICAgIGNhaXJvX2xpbmVfam9pbl90IGNhaXJvSm9pbiB7IH07CiAgICAgc3dpdGNo
IChsaW5lSm9pbikgewpAQCAtNjYxLDEyICs2NjAsMTIgQEAgdm9pZCBzZXRMaW5lSm9pbihHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBMaW5lSm9pbiBsaW5lSm9pbikKICAg
ICAgICAgY2Fpcm9Kb2luID0gQ0FJUk9fTElORV9KT0lOX0JFVkVMOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgY2Fpcm9fc2V0X2xpbmVfam9pbihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgY2Fp
cm9Kb2luKTsKKyAgICBjYWlyb19zZXRfbGluZV9qb2luKGNyLCBjYWlyb0pvaW4pOwogfQogCi12
b2lkIHNldE1pdGVyTGltaXQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
ZmxvYXQgbWl0ZXJMaW1pdCkKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiBjciwgZmxvYXQg
bWl0ZXJMaW1pdCkKIHsKLSAgICBjYWlyb19zZXRfbWl0ZXJfbGltaXQocGxhdGZvcm1Db250ZXh0
LmNyKCksIG1pdGVyTGltaXQpOworICAgIGNhaXJvX3NldF9taXRlcl9saW1pdChjciwgbWl0ZXJM
aW1pdCk7CiB9CiAKIHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291
cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCkBAIC02ODIsNyArNjgxLDcgQEAg
dm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnMKIHsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxl
KCkpIHsKICAgICAgICAgU2hhZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFk
b3dTdGF0ZS5ibHVyIH0sIHNoYWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNo
YWRvd1N0YXRlLmlnbm9yZVRyYW5zZm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFk
b3coU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhw
bGF0Zm9ybUNvbnRleHQpLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3QpLAorICAgICAgICBzaGFkb3cu
ZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRl
OjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIEZsb2F0Um91bmRlZFJlY3QocmVjdCks
CiAgICAgICAgICAgICBbJnBsYXRmb3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1ZmZl
ciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0
U2l6ZSYgbGF5ZXJTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxTaGFk
b3dCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5ZXJT
aXplLCBzaGFkb3dTdGF0ZSk7CkBAIC03MTMsNyArNzEyLDcgQEAgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmUKIHsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgU2hh
ZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFkb3dTdGF0ZS5ibHVyIH0sIHNo
YWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLmlnbm9yZVRy
YW5zZm9ybXMpOwotICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShw
bGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBy
ZWN0LAorICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShwbGF0Zm9y
bUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHJl
Y3QsCiAgICAgICAgICAgICBbJnBsYXRmb3JtQ29udGV4dCwgJnNoYWRvd1N0YXRlXShJbWFnZUJ1
ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZs
b2F0U2l6ZSYgbGF5ZXJTaXplKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZpbGxT
aGFkb3dCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBsYXllckltYWdlLCBsYXllck9yaWdpbiwgbGF5
ZXJTaXplLCBzaGFkb3dTdGF0ZSk7CkBAIC03NDYsNyArNzQ1LDcgQEAgdm9pZCBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFIKIAogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAgICAgICBT
aGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwg
c2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3Jl
VHJhbnNmb3Jtcyk7Ci0gICAgICAgIHNoYWRvdy5kcmF3SW5zZXRTaGFkb3coU3RhdGU6OmdldENU
TShwbGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQp
LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsCisgICAgICAgIHNoYWRvdy5kcmF3SW5zZXRTaGFkb3co
U3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3IoKSksIFN0YXRlOjpnZXRDbGlwQm91bmRz
KHBsYXRmb3JtQ29udGV4dCksIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwKICAgICAgICAgICAgIFsm
cGxhdGZvcm1Db250ZXh0LCAmc2hhZG93U3RhdGVdKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBj
b25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmlsbFNoYWRvd0J1ZmZlcihwbGF0Zm9y
bUNvbnRleHQsIGxheWVySW1hZ2UsIGxheWVyT3JpZ2luLCBsYXllclNpemUsIHNoYWRvd1N0YXRl
KTsKQEAgLTg2Myw5ICs4NjIsOSBAQCB2b2lkIGRyYXdQbGF0Zm9ybUltYWdlKEdyYXBoaWNzQ29u
dGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNhaXJvX3N1cmZhY2VfdCogcwogCiAgICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCiAgICAgaWYgKG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciAmJiBvcHRpb25zLmJs
ZW5kTW9kZSgpID09IEJsZW5kTW9kZTo6Tm9ybWFsICYmICFjYWlyb1N1cmZhY2VIYXNBbHBoYShz
dXJmYWNlKSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxh
dGZvcm1Db250ZXh0LCBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSwgQmxlbmRNb2RlOjpOb3JtYWwp
OworICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNv
bnRleHQuY3IoKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHksIEJsZW5kTW9kZTo6Tm9ybWFsKTsK
ICAgICBlbHNlCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBs
YXRmb3JtQ29udGV4dCwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5k
TW9kZSgpKTsKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxh
dGZvcm1Db250ZXh0LmNyKCksIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSk7CiAKICAgICBGbG9hdFJlY3QgZHN0ID0gZGVzdFJlY3Q7CiAgICAgaWYgKG9w
dGlvbnMub3JpZW50YXRpb24oKSAhPSBJbWFnZU9yaWVudGF0aW9uOjpOb25lKSB7CkBAIC05NjQs
NyArOTYzLDcgQEAgdm9pZCBkcmF3U3VyZmFjZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UKIAogICAgIFNoYWRvd0JsdXIgc2hh
ZG93KHsgc2hhZG93U3RhdGUuYmx1ciwgc2hhZG93U3RhdGUuYmx1ciB9LCBzaGFkb3dTdGF0ZS5v
ZmZzZXQsIHNoYWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5pZ25vcmVUcmFuc2Zvcm1zKTsK
ICAgICBpZiAoc2hhZG93LnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgewotICAgICAg
ICBzaGFkb3cuZHJhd1NoYWRvd0xheWVyKFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwg
U3RhdGU6OmdldENsaXBCb3VuZHMocGxhdGZvcm1Db250ZXh0KSwgZGVzdFJlY3QsCisgICAgICAg
IHNoYWRvdy5kcmF3U2hhZG93TGF5ZXIoU3RhdGU6OmdldENUTShwbGF0Zm9ybUNvbnRleHQuY3Io
KSksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIGRlc3RSZWN0LAogICAg
ICAgICAgICAgWyZwYXR0ZXJuLCAmZGVzdFJlY3RdKEdyYXBoaWNzQ29udGV4dCYgc2hhZG93Q29u
dGV4dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBkcmF3UGF0dGVyblRvQ2Fpcm9D
b250ZXh0KHNoYWRvd0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHBhdHRlcm4uZ2V0
KCksIGRlc3RSZWN0LCAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKaW5kZXggNTQ5ODU2M2NlNDljMTVlMzVk
MDgyNTljMmQyNmRjN2IxN2NlYTg4NS4uZTVhMzQyNGFlNjExNzA3YWM5N2QwZDE5ZTdjYzMwNjFh
YjcwNjFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKQEAgLTQ2LDIyICs0NiwyMSBAQCBjbGFzcyBDb2xv
cjsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBGbG9h
dFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZTsKIGNsYXNzIFBhdGg7CiAKLXN0cnVj
dCBHcmFwaGljc0NvbnRleHRTdGF0ZTsKLQogbmFtZXNwYWNlIENhaXJvIHsKIAogbmFtZXNwYWNl
IFN0YXRlIHsKIAotdm9pZCBzZXRTdHJva2VUaGlja25lc3MoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
LCBmbG9hdCk7Ci12b2lkIHNldFN0cm9rZVN0eWxlKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgU3Ry
b2tlU3R5bGUpOwordm9pZCBzZXRTdHJva2VUaGlja25lc3MoY2Fpcm9fdCosIGZsb2F0KTsKK3Zv
aWQgc2V0U3Ryb2tlU3R5bGUoY2Fpcm9fdCosIFN0cm9rZVN0eWxlKTsKIAotdm9pZCBzZXRDb21w
b3NpdGVPcGVyYXRpb24oR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlKTsKLXZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKEdyYXBoaWNzQ29udGV4dENhaXJv
JiwgYm9vbCk7Cit2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjYWlyb190KiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSk7Cit2b2lkIHNldFNob3VsZEFudGlhbGlhcyhjYWlyb190Kiwg
Ym9vbCk7CiAKLXZvaWQgc2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJik7Ci1BZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dENhaXJv
Jik7Cit2b2lkIHNldENUTShjYWlyb190KiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CitBZmZp
bmVUcmFuc2Zvcm0gZ2V0Q1RNKGNhaXJvX3QqKTsKIAogSW50UmVjdCBnZXRDbGlwQm91bmRzKEdy
YXBoaWNzQ29udGV4dENhaXJvJik7CiBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhHcmFw
aGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtMTI1LDEwICsxMjQsMTAg
QEAgc3RydWN0IFNoYWRvd1N0YXRlIHsKICAgICBDb21wb3NpdGVPcGVyYXRvciBnbG9iYWxDb21w
b3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyIH07CiB9OwogCi12
b2lkIHNldExpbmVDYXAoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBMaW5lQ2FwKTsKLXZvaWQgc2V0
TGluZURhc2goR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCk7
Ci12b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgTGluZUpvaW4pOwotdm9p
ZCBzZXRNaXRlckxpbWl0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgZmxvYXQpOwordm9pZCBzZXRM
aW5lQ2FwKGNhaXJvX3QqLCBMaW5lQ2FwKTsKK3ZvaWQgc2V0TGluZURhc2goY2Fpcm9fdCosIGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0KTsKK3ZvaWQgc2V0TGluZUpvaW4oY2Fpcm9fdCosIExpbmVK
b2luKTsKK3ZvaWQgc2V0TWl0ZXJMaW1pdChjYWlyb190KiwgZmxvYXQpOwogCiB2b2lkIGZpbGxS
ZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmlsbFNv
dXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7CiB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4
dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBTaGFkb3dTdGF0
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRDYWlyby5jcHAKaW5kZXggYTdhZjBjZWI1MjQ5MDQwNDFlZTEyZDUxZjg5YzZkZjE2Y2IzNjAz
Ny4uM2QxOTc1NzlhMmNjMjI5OTMzODg1YTFhMTU5NWM2Mzk2Y2E4NmRmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBA
IC03Miw3ICs3Miw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgYXV0byYgc3RhdGUg
PSBjb250ZXh0LnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKmNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2Fs
ZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAg
ICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNo
YWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAgIHN0YXRlLnRleHREcmF3aW5n
TW9kZSgpLCBzdGF0ZS5zdHJva2VUaGlja25lc3MoKSwgc3RhdGUuZHJvcFNoYWRvdygpLm9mZnNl
dCwgc3RhdGUuZHJvcFNoYWRvdygpLmNvbG9yLAogICAgICAgICBmb250U21vb3RoaW5nTW9kZSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhZGllbnRDYWlyby5jcHAKaW5kZXggOTAwOTZhYzY0NTIyNGRiZmRjNjBiZmE2Y2FjYWQw
MzA3NmNiMjk3ZC4uYmUyYzI5NWNhNTA3ZDliNTYzZjg1ZDViY2I4NzA5NzJmMGRhZDhlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90
PiBHcmFkaWVudDo6Y3JlYXRlUGF0dGVybihmbG9hdCBnbG9iYWxBbHBoYSwgY29uc3QgQWZmaW5l
VAogCiB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGF1dG8gcGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4w
LCBjb250ZXh0LnN0YXRlKCkuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGF1dG8g
cGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4wLCBjb250ZXh0LmZpbGxTcGFjZVRyYW5zZm9ybSgp
KTsKICAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCmluZGV4IGMzMjMwNDQ1MzUxYjAzZjJhYTg3MzZhZWUyYmNlNzhiYzQzNjFm
NDkuLjFhMmVlOTUxZWRiYjJhZTFlNGU0NzJiNjNjYTI2YzgxNzgwZTY0OGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDggTnVhbnRpIEx0ZC4KQEAgLTY4LDcgKzY4LDggQEAgcHVibGljOgogfTsKIAogR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKFJlZlB0cjxjYWlyb190PiYmIGNv
bnRleHQpCi0gICAgOiBtX2NyKFdURk1vdmUoY29udGV4dCkpCisgICAgOiBHcmFwaGljc0NvbnRl
eHQoRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSkKKyAgICAsIG1fY3IoV1RGTW92ZShjb250ZXh0
KSkKIHsKICAgICBtX2NhaXJvU3RhdGVTdGFjay5hcHBlbmQoQ2Fpcm9TdGF0ZSgpKTsKICAgICBt
X2NhaXJvU3RhdGUgPSAmbV9jYWlyb1N0YXRlU3RhY2subGFzdCgpOwpAQCAtODYsMTAgKzg3LDkg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK1JlbmRl
cmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewot
ICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlU2NhbGUpOwotICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6Omlz
QWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKIEdyYXBoaWNz
Q29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29u
c3QKQEAgLTEzNCwyMDUgKzEzNCwxNjIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVz
dG9yZSgpCiAgICAgY2Fpcm9fcmVzdG9yZShtX2NyLmdldCgpKTsKIH0KIAotLy8gRHJhd3MgYSBm
aWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKQotewotICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwotICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1JlY3QoKnRoaXMsIHJlY3QsIGJvcmRl
clRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ry
b2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1h
Z2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnRoaXMsIG5hdGl2ZUltYWdlLnBsYXRm
b3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Ci19Ci0KLS8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28g
d2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MikKLXsKLSAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGlu
ZSgqdGhpcywgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQot
Ci0vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMg
dXNlZCBpbiBsaXN0cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCp0aGlzLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsK
LSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgsIENh
aXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKCFzdGF0ZS5jaGFuZ2VzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBD
YWlybzo6c3Ryb2tlUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSks
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxsUmVjdCgqdGhpcywgcmVjdCwgQ2Fpcm86
OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KKyAgICBm
b3IgKGF1dG8gY2hhbmdlIDogc3RhdGUuY2hhbmdlcygpKSB7CisgICAgICAgIHN3aXRjaCAoY2hh
bmdlKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q1RNOgor
ICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0obV9jci5nZXQoKSwgc3RhdGUuZ2V0Q1RN
KCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3M6CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6
OnNldFN0cm9rZVRoaWNrbmVzcyhtX2NyLmdldCgpLCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlj
a25lc3MoKSwgMC5mKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlOgorICAgICAgICAgICAgQ2Fpcm86
OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX2NyLmdldCgpLCBzdGF0ZS5zdHJva2VTdHlsZSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNoYW5nZTo6TGluZUNhcDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lQ2FwKG1fY3IuZ2V0
KCksIHN0YXRlLmxpbmVDYXAoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVKb2luOgorICAgICAgICAgICAgQ2Fp
cm86OnNldExpbmVKb2luKG1fY3IuZ2V0KCksIHN0YXRlLmxpbmVKb2luKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpM
aW5lRGFzaDoKKyAgICAgICAgICAgIENhaXJvOjpzZXRMaW5lRGFzaChtX2NyLmdldCgpLCBzdGF0
ZS5saW5lRGFzaCgpLmRhc2hlcywgc3RhdGUubGluZURhc2goKS5vZmZzZXQpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpN
aXRlckxpbWl0OgorICAgICAgICAgICAgQ2Fpcm86OnNldE1pdGVyTGltaXQobV9jci5nZXQoKSwg
c3RhdGUubWl0ZXJMaW1pdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6Q29tcG9zaXRlTW9kZToKKyAgICAgICAgICAg
IENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fY3IuZ2V0KCksIHN0YXRlLmNv
bXBvc2l0ZU1vZGUoKS5vcGVyYXRpb24sIHN0YXRlLmNvbXBvc2l0ZU1vZGUoKS5ibGVuZE1vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q2hhbmdlOjpEcm9wU2hhZG93OgorICAgICAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBn
cmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQKKyAgICAgICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhU
TUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcworICAgICAgICAgICAgICAgIGF1dG8gZHJv
cFNoYWRvdyA9IHN0YXRlLmRyb3BTaGFkb3coKTsKKyAgICAgICAgICAgICAgICBkcm9wU2hhZG93
Lm9mZnNldCA9IHsgZHJvcFNoYWRvdy5vZmZzZXQud2lkdGgoKSwgLWRyb3BTaGFkb3cub2Zmc2V0
LmhlaWdodCgpIH07CisgICAgICAgICAgICAgICAgc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzOgorICAgICAgICAgICAgQ2Fp
cm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9jci5nZXQoKSwgc3RhdGUuc2hvdWxkQW50
aWFsaWFzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
LXsKLSAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUoKSkpOworICAgIGRpZEFwcGx5U3RhdGVDaGFuZ2VzKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
ZGllbnQmIGdyYWRpZW50KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKLSAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3Rh
dGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgIGlmICghcGF0dGVybikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2F2ZSgpOwotICAgIENhaXJvOjpmaWxsUmVjdCgqdGhpcywgcmVj
dCwgcGF0dGVybi5nZXQoKSk7Ci0gICAgcmVzdG9yZSgpOworICAgIEdyYXBoaWNzQ29udGV4dDo6
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBDYWlybzo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcigqdGhpcywgb3BhY2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJl
dmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgQ2Fpcm86OlN0
YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVu
ZE1vZGUpOwotICAgIENhaXJvOjpmaWxsUmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKCp0aGlzLCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIENhaXJvOjplbmRUcmFu
c3BhcmVuY3lMYXllcigqdGhpcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNs
aXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChy
ZWN0KTsKICAgICBDYWlybzo6Y2xpcCgqdGhpcywgcmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxl
KQogeworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwogICAg
IENhaXJvOjpjbGlwUGF0aCgqdGhpcywgcGF0aCwgY2xpcFJ1bGUpOwogfQogCi1JbnRSZWN0IEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwQm91bmRzKCkgY29uc3QKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBD
YWlybzo6U3RhdGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDYWly
bzo6Y2xpcE91dCgqdGhpcywgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKCp0aGlzLCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7
CisgICAgQ2Fpcm86OmNsaXBPdXQoKnRoaXMsIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCiB7Ci0jaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCi0gICAg
VGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7Ci0gICAgVU5VU0VE
X1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICByZXR1cm47Ci0j
ZWxzZQotICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCp0aGlzLCBwYXRoLCB3aWR0aCwgY29sb3Ip
OwotI2VuZGlmCisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKCp0aGlzLCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQot
ICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcmVjdHMsIGNvbG9yKTsKLSAgICBV
TlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIHJldHVy
bjsKLSNlbHNlCi0gICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnRoaXMsIHJlY3RzLCB3aWR0aCwg
Y29sb3IpOwotI2VuZGlmCisgICAgQ2Fpcm86OmNsZWFyUmVjdCgqdGhpcywgcmVjdCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7CisgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpmaWxsUmVjdCgqdGhpcywgcmVjdCwgQ2Fpcm86
OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKnRo
aXMsIHJlY3QsIHN0eWxlKTsKKyAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9y
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBS
b3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAg
VU5VU0VEX1BBUkFNKHJvdW5kaW5nTW9kZSk7Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91
bmRUb0RldmljZVBpeGVscygqdGhpcywgcmVjdCk7Ci19CisgICAgYXV0byBwYXR0ZXJuID0gZ3Jh
ZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBpZiAo
IXBhdHRlcm4pCisgICAgICAgIHJldHVybjsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQ2Fpcm86OnRyYW5zbGF0ZSgqdGhp
cywgeCwgeSk7CisgICAgc2F2ZSgpOworICAgIENhaXJvOjpmaWxsUmVjdCgqdGhpcywgcmVjdCwg
cGF0dGVybi5nZXQoKSk7CisgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkaWRVcGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcygq
dGhpcywgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRTdHJva2VTdHlsZSgqdGhpcywgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBpZiAoc3Rh
dGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhh
dCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFu
ZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8mIHNo
YWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG1fc3RhdGUuc2hh
ZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQo
KSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24oKnRoaXMsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0
ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
b3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRp
YWxpYXMoKnRoaXMsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChyZWN0LCBjb2xvciwgb3BlcmF0aW9uLCBibGVuZE1vZGUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIENh
aXJvOjpjb25jYXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7CisgICAgQ2Fpcm86OmZpbGxSb3VuZGVk
UmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQ2Fpcm86OlN0YXRl
OjpzZXRDVE0oKnRoaXMsIHRyYW5zZm9ybSk7Ci19CisgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIEdyYXBoaWNzQ29udGV4dDo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcigqdGhpcywgb3BhY2l0eSk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OworICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRl
ZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lM
YXllcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoKQogewotICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAg
ICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnRoaXMpOwotfQorICAgIGlmIChwYXRoLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3Qo
KnRoaXMsIHJlY3QpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDYWly
bzo6ZmlsbFBhdGgoKnRoaXMsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCkBAIC0zNDEs
NTggKzI5OCw2NCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENhaXJvOjpzdHJva2VSZWN0
KCp0aGlzLCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAoKnRo
aXMsIGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBDYWly
bzo6c2V0TGluZURhc2goKnRoaXMsIGRhc2hlcywgZGFzaE9mZnNldCk7Ci19CisgICAgaWYgKHBh
dGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIENhaXJvOjpzZXRMaW5l
Sm9pbigqdGhpcywgbGluZUpvaW4pOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
KyAgICBDYWlybzo6c3Ryb2tlUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQorLy8gRHJhd3MgYSBmaWxsZWQg
cmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KQogewotICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCp0aGlzLCBtaXRlcik7CisgICAgQVNTRVJU
KCFyZWN0LmlzRW1wdHkoKSk7CisgICAgQ2Fpcm86OmRyYXdSZWN0KCp0aGlzLCByZWN0LCBib3Jk
ZXJUaGlja25lc3MsIGZpbGxDb2xvcigpLCBzdHJva2VTdHlsZSgpLCBzdHJva2VDb2xvcigpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQorLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLCBzbyB3ZSBzaG91bGQgbm90
IGRyYXcgc2hhZG93cy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIENh
aXJvOjpjbGlwT3V0KCp0aGlzLCBwYXRoKTsKLX0KKyAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBO
b1N0cm9rZSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpy
b3RhdGUoZmxvYXQgcmFkaWFucykKLXsKLSAgICBDYWlybzo6cm90YXRlKCp0aGlzLCByYWRpYW5z
KTsKKyAgICBDYWlybzo6ZHJhd0xpbmUoKnRoaXMsIHBvaW50MSwgcG9pbnQyLCBzdHJva2VTdHls
ZSgpLCBzdHJva2VDb2xvcigpLCBzdHJva2VUaGlja25lc3MoKSwgc2hvdWxkQW50aWFsaWFzKCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCisvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNp
cmNsZXMgdXNlZCBpbiBsaXN0cy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBDYWlybzo6c2NhbGUoKnRoaXMsIHNp
emUpOworICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqdGhpcywgcmVjdCwgZmlsbENvbG9yKCksIHN0
cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBD
YWlybzo6Y2xpcE91dCgqdGhpcywgcmVjdCk7CisjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9S
TShHVEspCisgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7
CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAg
ICByZXR1cm47CisjZWxzZQorICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCp0aGlzLCBwYXRoLCB3
aWR0aCwgY29sb3IpOworI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZp
bGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KCp0aGlzLCBy
ZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKKyNpZiBQTEFURk9STShX
UEUpIHx8IFBMQVRGT1JNKEdUSykKKyAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMs
IHJlY3RzLCBjb2xvcik7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKKyAgICByZXR1cm47CisjZWxzZQorICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5n
KCp0aGlzLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKKyNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6
RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJv
OjpkcmF3UGxhdGZvcm1JbWFnZSgqdGhpcywgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdl
dCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBpbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KCkgfSwgYWxwaGEoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQpAQCAtNDA0LDExICszNjcsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdAogICAgIENhaXJvOjpkcmF3UGF0dGVybigqdGhpcywgbmF0aXZlSW1hZ2UucGxhdGZvcm1J
bWFnZSgpLmdldCgpLCBuYXRpdmVJbWFnZS5zaXplKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwogfQogCi1SZW5kZXJpbmdNb2RlIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ2Fp
cm86OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpID8gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwot
fQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKICAgICBpZiAoIWZvbnQucGxh
dGZvcm1EYXRhKCkuc2l6ZSgpKQpAQCAtNDM0LDEyICszOTIsMzEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKgogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZHJh
d0dseXBocygqdGhpcywgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNj
YWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAotICAg
ICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUu
c2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKKyAgICAgICAgdGV4dERyYXdpbmdNb2Rl
KCksIHN0cm9rZVRoaWNrbmVzcygpLCBzaGFkb3dPZmZzZXQoKSwgc2hhZG93Q29sb3IoKSwKICAg
ICAgICAgZm9udFNtb290aGluZyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJs
aW5lcywgU3Ryb2tlU3R5bGUpCit7CisgICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3Ryb2tlQ29sb3IoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
K3sKKyAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigqdGhpcywgcmVjdCwgc3R5
bGUpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQor
eworICAgIFVOVVNFRF9QQVJBTShyb3VuZGluZ01vZGUpOworICAgIHJldHVybiBDYWlybzo6U3Rh
dGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnRoaXMsIHJlY3QpOworfQorCiBjYWlyb190KiBHcmFw
aGljc0NvbnRleHRDYWlybzo6Y3IoKSBjb25zdAogeworICAgIGNvbnN0X2Nhc3Q8R3JhcGhpY3ND
b250ZXh0Q2Fpcm8mPigqdGhpcykuYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICByZXR1cm4gbV9j
ci5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKaW5kZXggNTY0NjFjMTU5YTU4
M2M4OWM2MWU4ZjAyZTRlMGJlZTdiMDU5MzJlZi4uOTI2NzhhMjQwOTViNzE5YzkyMWE2NGM4NzM2
YWIyZTk2OTM1ZTJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTAsNjEgKzUxLDUwIEBAIHB1YmxpYzoKICAgICBib29sIGhhc1BsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0IGZpbmFsOwogICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyk7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisKKyAg
ICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKyAgICB2b2lk
IGFwcGx5U3RhdGVDaGFuZ2VzKCkgZmluYWw7CiAKLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNh
cCkgZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkg
ZmluYWw7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAgdm9pZCBz
ZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
KworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQ
YXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7
CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOworICAgIAorICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOwogCi0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdDsKICAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWw7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBC
bGVuZE1vZGU6Ok5vcm1hbCkgZmluYWw7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOwogICAg
IHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisKICAgICB2b2lkIGZpbGxQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7
Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIGRyYXdQ
YXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAK
ICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKICAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7
Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsK
LSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworCiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwogICAgIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3Im
KSBmaW5hbDsKIAotICAgIHZvaWQgc2F2ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZp
bmFsOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKLSAgICB2b2lk
IHJvdGF0ZShmbG9hdCkgZmluYWw7Ci0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsK
LSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIHZvaWQgY29uY2F0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3Jh
cGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9p
ZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgZmluYWw7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgZmluYWw7CiAKLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAg
dm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgY2xpcE91dChj
b25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1
bGUpIGZpbmFsOwotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOwotICAgIHZv
aWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUp
IGZpbmFsOwogCiAgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKaW5kZXggOTZjNzYxMzU0MWJkYzY1OGE3ODdhYjAzZTc3
ODE4ODM0ZDMxODVjNC4uYzhlNTY3ODI0MjMxNWFjMzkzNTFlMDIwOGZmOGEwZWRlZTEzZDliNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtNjUsNyArNjUsNyBAQCB2
b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdAogICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4
dFN0YXRlID0gZGVzdENvbnRleHQuc3RhdGUoKTsKIAogICAgIGlmIChhdXRvIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9y
ZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgZHJhd1BsYXRmb3JtSW1hZ2UoKmRl
c3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgp
LCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhh
LCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsK
KyAgICAgICAgZHJhd1BsYXRmb3JtSW1hZ2UoKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LCBpbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRp
b25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkg
fSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEoKSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRv
d1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0NHQ29udGV4dFN0YXRlU2F2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NHQ29udGV4dFN0YXRlU2F2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODU2YTA0MzkzZmQyNGU5NjI4
ZjZmZTkzNDY5ZWViZWE0YWJiNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ0dDb250ZXh0U3RhdGVTYXZlci5oCkBAIC0wLDAgKzEsNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENHQ29udGV4dFN0YXRlU2F2ZXIgeworcHVibGljOgorICAgIENHQ29udGV4dFN0YXRlU2F2ZXIo
Q0dDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgc2F2ZUFuZFJlc3RvcmUgPSB0cnVlKQorICAgICAg
ICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc2F2ZUFuZFJlc3RvcmUoc2F2ZUFu
ZFJlc3RvcmUpCisgICAgeworICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKKyAgICAgICAg
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICB9CisgICAgCisgICAgfkNH
Q29udGV4dFN0YXRlU2F2ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZUFuZFJlc3RvcmUp
CisgICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKG1fY29udGV4dCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2F2ZSgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2F2ZUFuZFJl
c3RvcmUpOworICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKG1fY29udGV4dCk7CisgICAgICAg
IG1fc2F2ZUFuZFJlc3RvcmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZSgpCisg
ICAgeworICAgICAgICBBU1NFUlQobV9zYXZlQW5kUmVzdG9yZSk7CisgICAgICAgIENHQ29udGV4
dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0KTsKKyAgICAgICAgbV9zYXZlQW5kUmVzdG9yZSA9IGZh
bHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGRpZFNhdmUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fc2F2ZUFuZFJlc3RvcmU7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBD
R0NvbnRleHRSZWYgbV9jb250ZXh0OworICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcAppbmRleCAzMjQ1YzYwMDQzMTU1MmQ1MTNiNzRlZWJjMDlmMzE4ZWVjM2RkNzJhLi40MDVm
YTg0NmM2MzJjMDcxMWM1ZThhNDAxZDUxYjE5N2RiNWVlZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNl
aWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTg1LDE0ICsxODUs
MTMgQEAgc3RhdGljIHZvaWQgc2V0Q0dCbGVuZE1vZGUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUKIH0KIAogR3JhcGhpY3NDb250ZXh0Q0c6Okdy
YXBoaWNzQ29udGV4dENHKENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCisgICAgOiBHcmFwaGljc0Nv
bnRleHQoQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNnQ29udGV4dCksIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjppbml0aWFsQ2hhbmdlRmxhZ3MsIENHQ29udGV4dEdldENUTShjZ0NvbnRleHQp
KQogewogICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEg
PSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7Ci0gICAgLy8g
TWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAg
IGRpZFVwZGF0ZVN0YXRlKG1fc3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xv
ckNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlIH0pOwotICAgIG1fc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvcmVJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRl
eHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHNldElt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4
dEdldEludGVycG9sYXRpb25RdWFsaXR5KGludGVybmFsUGxhdGZvcm1Db250ZXh0KCkpKSk7CiB9
CiAKIEdyYXBoaWNzQ29udGV4dENHOjp+R3JhcGhpY3NDb250ZXh0Q0coKQpAQCAtMjA2LDYgKzIw
NSwxNCBAQCBib29sIEdyYXBoaWNzQ29udGV4dENHOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAogfQogCiBDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgLy8gU29tZSBjYWxsZXJzIHRvIHRoaXMgbWV0aG9kIHVzZXMgdGhlIHBs
YXRmb3JtIGNvbnRleHQgb3V0c2lkZSB0aGUgc2NvcGUKKyAgICAvLyBvZiB0aGlzIGNsYXNzLiBD
b21taXQgYW55IGNoYW5nZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcGxhdGZvcm0gY29udGV4dC4K
KyAgICBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dENHJj4oKnRoaXMpLmFwcGx5U3RhdGVDaGFu
Z2VzKCk7CisgICAgcmV0dXJuIGludGVybmFsUGxhdGZvcm1Db250ZXh0KCk7Cit9CisKK0NHQ29u
dGV4dFJlZiBHcmFwaGljc0NvbnRleHRDRzo6aW50ZXJuYWxQbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAogewogICAgIEFTU0VSVChtX2RhdGEtPm1fY2dDb250ZXh0KTsKICAgICByZXR1cm4gbV9kYXRh
LT5tX2NnQ29udGV4dC5nZXQoKTsKQEAgLTMzOCw3ICszNDUsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBG
bG9hdFNpegogI2VuZGlmCiAKICAgICBhdXRvIG9sZENvbXBvc2l0ZU9wZXJhdG9yID0gY29tcG9z
aXRlT3BlcmF0aW9uKCk7Ci0gICAgYXV0byBvbGRCbGVuZE1vZGUgPSBibGVuZE1vZGVPcGVyYXRp
b24oKTsKKyAgICBhdXRvIG9sZEJsZW5kTW9kZSA9IGJsZW5kTW9kZSgpOwogICAgIHNldENHQmxl
bmRNb2RlKGNvbnRleHQsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVu
ZE1vZGUoKSk7CiAKICAgICAvLyBNYWtlIHRoZSBvcmlnaW4gYmUgYXQgYWRqdXN0ZWREZXN0UmVj
dC5sb2NhdGlvbigpCkBAIC0zOTYsNyArNDAzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQK
ICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgQ0dDb250
ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0UmVjdCk7CiAKLSAgICBzZXRDb21wb3NpdGVPcGVy
YXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsK
KyAgICBzZXRDb21wb3NpdGVNb2RlKHsgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpIH0pOwogCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQs
IGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAgIENH
Q29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKQEAgLTU1NSwxMyArNTYyLDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBp
ZiAoIW1fc3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICBpZiAoIXN0cm9rZVBhdHRlcm4oKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNm
b3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtUGF0
dGVybiA9IG1fc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKHVzZXJU
b0Jhc2VDVE0pOworICAgIGF1dG8gcGxhdGZvcm1QYXR0ZXJuID0gc3Ryb2tlUGF0dGVybigpLT5j
cmVhdGVQbGF0Zm9ybVBhdHRlcm4odXNlclRvQmFzZUNUTSk7CiAgICAgaWYgKCFwbGF0Zm9ybVBh
dHRlcm4pCiAgICAgICAgIHJldHVybjsKIApAQCAtNTc0LDEzICs1ODEsMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLmZpbGxQYXR0ZXJu
KQorICAgIGlmICghZmlsbFBhdHRlcm4oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9y
bSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250
ZXh0KSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtUGF0dGVybiA9IG1fc3RhdGUuZmlsbFBhdHRlcm4t
PmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNlQ1RNKTsKKyAgICBhdXRvIHBsYXRmb3Jt
UGF0dGVybiA9IGZpbGxQYXR0ZXJuKCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybih1c2VyVG9CYXNl
Q1RNKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC01
OTEsMTEgKzU5OCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJu
KCkKICAgICBDR0NvbnRleHRTZXRGaWxsUGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVy
bi5nZXQoKSwgJnBhdHRlcm5BbHBoYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjYWxjdWxh
dGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0aERy
YXdpbmdNb2RlJiBtb2RlKQorc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2Rl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ0dQYXRoRHJhd2luZ01vZGUmIG1vZGUp
CiB7Ci0gICAgYm9vbCBzaG91bGRGaWxsID0gc3RhdGUuZmlsbFBhdHRlcm4gfHwgc3RhdGUuZmls
bENvbG9yLmlzVmlzaWJsZSgpOwotICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gc3RhdGUuc3Ryb2tl
UGF0dGVybiB8fCAoc3RhdGUuc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UgJiYgc3RhdGUuc3Ryb2tl
Q29sb3IuaXNWaXNpYmxlKCkpOwotICAgIGJvb2wgdXNlRU9GaWxsID0gc3RhdGUuZmlsbFJ1bGUg
PT0gV2luZFJ1bGU6OkV2ZW5PZGQ7CisgICAgYm9vbCBzaG91bGRGaWxsID0gY29udGV4dC5maWxs
UGF0dGVybigpIHx8IGNvbnRleHQuZmlsbENvbG9yKCkuaXNWaXNpYmxlKCk7CisgICAgYm9vbCBz
aG91bGRTdHJva2UgPSBjb250ZXh0LnN0cm9rZVBhdHRlcm4oKSB8fCAoY29udGV4dC5zdHJva2VT
dHlsZSgpICE9IE5vU3Ryb2tlICYmIGNvbnRleHQuc3Ryb2tlQ29sb3IoKS5pc1Zpc2libGUoKSk7
CisgICAgYm9vbCB1c2VFT0ZpbGwgPSBjb250ZXh0LmZpbGxSdWxlKCkgPT0gV2luZFJ1bGU6OkV2
ZW5PZGQ7CiAKICAgICBpZiAoc2hvdWxkRmlsbCkgewogICAgICAgICBpZiAoc2hvdWxkU3Ryb2tl
KSB7CkBAIC02MjQsOSArNjMxLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUgPSBtX3N0YXRlOwogCi0gICAgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCB8fCBzdGF0
ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBzdHJva2VHcmFk
aWVudCgpKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IG9wdGltaXplZCB3YXkgdG8g
ZmlsbCAmIHN0cm9rZSBhIHBhdGggdXNpbmcgZ3JhZGllbnRzCiAgICAgICAgIC8vIEZJWE1FOiBC
ZSBzbWFydGVyIGFib3V0IHRoaXMuCiAgICAgICAgIGZpbGxQYXRoKHBhdGgpOwpAQCAtNjM0LDEz
ICs2NDAsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYg
cGF0aCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChzdGF0ZS5maWxsUGF0dGVy
bikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwot
ICAgIGlmIChzdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAg
ICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwogCiAgICAgQ0dQYXRoRHJhd2luZ01vZGUgZHJh
d2luZ01vZGU7Ci0gICAgaWYgKGNhbGN1bGF0ZURyYXdpbmdNb2RlKHN0YXRlLCBkcmF3aW5nTW9k
ZSkpIHsKKyAgICBpZiAoY2FsY3VsYXRlRHJhd2luZ01vZGUoKnRoaXMsIGRyYXdpbmdNb2RlKSkg
ewogI2lmIEhBVkUoQ0dfQ09OVEVYVF9EUkFXX1BBVEhfRElSRUNUKQogICAgICAgICBDR0NvbnRl
eHREcmF3UGF0aERpcmVjdChjb250ZXh0LCBkcmF3aW5nTW9kZSwgcGF0aC5wbGF0Zm9ybVBhdGgo
KSwgbnVsbHB0cik7CiAjZWxzZQpAQCAtNjU4LDcgKzY2NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAKICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50
KSB7CisgICAgaWYgKGZpbGxHcmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkg
ewogICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsK
ICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXllclNpemUgPSBnZXRDVE0oKS5tYXBTaXplKHJlY3Qu
c2l6ZSgpKTsKQEAgLTY3MCwzMyArNjc2LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0obGF5ZXJDb250ZXh0LCAtcmVjdC54KCksIC1yZWN0LnkoKSk7CiAgICAgICAgICAgICBDR0Nv
bnRleHRCZWdpblBhdGgobGF5ZXJDb250ZXh0KTsKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBh
dGgobGF5ZXJDb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICAgICAgICAgIENHQ29u
dGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0pOworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgZmls
bFNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBXaW5k
UnVsZTo6RXZlbk9kZCkKICAgICAgICAgICAgICAgICBDR0NvbnRleHRFT0NsaXAobGF5ZXJDb250
ZXh0KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxh
eWVyQ29udGV4dCk7CiAKLSAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChs
YXllckNvbnRleHQpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBhaW50KGxheWVyQ29u
dGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY29udGV4dCwgcmVj
dCwgbGF5ZXIuZ2V0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0
QmVnaW5QYXRoKGNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0
LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShjb250
ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIENH
Q29udGV4dENvbmNhdENUTShjb250ZXh0LCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSk7CiAKICAgICAg
ICAgICAgIGlmIChmaWxsUnVsZSgpID09IFdpbmRSdWxlOjpFdmVuT2RkKQogICAgICAgICAgICAg
ICAgIENHQ29udGV4dEVPQ2xpcChjb250ZXh0KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwogCi0gICAgICAgICAgICBtX3N0YXRlLmZp
bGxHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAgICAgZmlsbEdyYWRpZW50KCktPnBh
aW50KCp0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAobV9zdGF0ZS5maWxsUGF0dGVybikKKyAgICBpZiAoZmlsbFBhdHRlcm4oKSkKICAgICAgICAg
YXBwbHlGaWxsUGF0dGVybigpOwogI2lmIEhBVkUoQ0dfQ09OVEVYVF9EUkFXX1BBVEhfRElSRUNU
KQogICAgIENHQ29udGV4dERyYXdQYXRoRGlyZWN0KGNvbnRleHQsIGZpbGxSdWxlKCkgPT0gV2lu
ZFJ1bGU6OkV2ZW5PZGQgPyBrQ0dQYXRoRU9GaWxsIDoga0NHUGF0aEZpbGwsIHBhdGgucGxhdGZv
cm1QYXRoKCksIG51bGxwdHIpOwpAQCAtNzE3LDcgKzcyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIAogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFk
aWVudCkgeworICAgIGlmIChzdHJva2VHcmFkaWVudCgpKSB7CiAgICAgICAgIGlmIChoYXNTaGFk
b3coKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1Jl
Y3QoKTsKICAgICAgICAgICAgIGZsb2F0IGxpbmVXaWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwpA
QCAtNzQyLDggKzc0OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFBhdGgobGF5ZXJDb250ZXh0
LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRo
V2l0aFN0cm9rZWRQYXRoKGxheWVyQ29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRleHRDbGlw
KGxheWVyQ29udGV4dCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250
ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwotICAgICAgICAgICAg
bV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKKyAgICAgICAgICAg
IENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIHN0cm9rZVNwYWNlVHJhbnNmb3JtKCkp
OworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQobGF5ZXJDb250ZXh0KTsKIAog
ICAgICAgICAgICAgZmxvYXQgZGVzdGluYXRpb25YID0gcm91bmRmKHJlY3QueCgpIC0gbGluZVdp
ZHRoKTsKICAgICAgICAgICAgIGZsb2F0IGRlc3RpbmF0aW9uWSA9IHJvdW5kZihyZWN0LnkoKSAt
IGxpbmVXaWR0aCk7CkBAIC03NTQsMTMgKzc2MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRBZGRQ
YXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0
UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CiAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQs
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0
YXRlLnN0cm9rZUdyYWRpZW50LT5wYWludCgqdGhpcyk7CisgICAgICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgc3Ryb2tlU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBz
dHJva2VHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgaWYgKHN0cm9r
ZVBhdHRlcm4oKSkKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAKICNpZiBVU0UoQ0df
Q09OVEVYVF9TVFJPS0VfTElORV9TRUdNRU5UU19XSEVOX1NUUk9LSU5HX1BBVEgpCkBAIC03ODUs
NyArNzkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAKLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICBpZiAoZmlsbEdyYWRp
ZW50KCkpIHsKICAgICAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQp
OwogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBsYXll
clNpemUgPSBnZXRDVE0oKS5tYXBTaXplKHJlY3Quc2l6ZSgpKTsKQEAgLTc5OCwyNyArODA0LDI3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKICAgICAgICAgICAgIENHQ29udGV4dEFkZFJlY3QobGF5ZXJDb250ZXh0LCByZWN0KTsKICAg
ICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAotICAgICAgICAgICAgQ0dD
b250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRy
YW5zZm9ybSk7Ci0gICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJD
b250ZXh0KTsKKyAgICAgICAgICAgIENHQ29udGV4dENvbmNhdENUTShsYXllckNvbnRleHQsIGZp
bGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludChs
YXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xheWVySW5SZWN0KGNvbnRl
eHQsIHJlY3QsIGxheWVyLmdldCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENH
Q29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcmVjdCk7Ci0gICAgICAgICAgICBDR0NvbnRleHRD
b25jYXRDVE0oY29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0g
ICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQoKnRoaXMpOworICAgICAgICAg
ICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIGZpbGxTcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICAgICAgICAgIGZpbGxHcmFkaWVudCgpLT5wYWludCgqdGhpcyk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQorICAgIGlm
IChmaWxsUGF0dGVybigpKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKICAgICBib29s
IGRyYXdPd25TaGFkb3cgPSBjYW5Vc2VTaGFkb3dCbHVyKCk7CiAgICAgQ0dDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3du
U2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCi0gICAgICAgIENHQ29u
dGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwg
MCk7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVa
ZXJvLCAwLCAwKTsKIAotICAgICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3cobV9zdGF0ZSk7
CisgICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhkcm9wU2hhZG93KCksIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKCkpOwogICAgICAgICBjb250ZXh0U2hhZG93LmRyYXdSZWN0U2hhZG93
KCp0aGlzLCBGbG9hdFJvdW5kZWRSZWN0KHJlY3QpKTsKICAgICB9CiAKQEAgLTgzNyw5ICs4NDMs
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAg
ICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93
V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAg
Q0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwog
Ci0gICAgICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hh
ZG93Qmx1ciBjb250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoKSk7CiAgICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIEZsb2F0
Um91bmRlZFJlY3QocmVjdCkpOwogICAgIH0KIApAQCAtODUyLDcgKzg1OCwxMiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9y
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQoreworICAgIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QocmVjdCwgY29sb3IsIG9wZXJhdGlv
biwgYmxlbmRNb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9y
IG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwpAQCAtODY0LDkgKzg3NSw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8g
VHVybiBvZmYgQ0cgc2hhZG93cy4KLSAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9y
KHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKKyAgICAgICAgQ0dDb250ZXh0
U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogCi0gICAgICAg
IFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhtX3N0YXRlKTsKKyAgICAgICAgU2hhZG93Qmx1ciBj
b250ZXh0U2hhZG93KGRyb3BTaGFkb3coKSwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSk7CiAg
ICAgICAgIGNvbnRleHRTaGFkb3cuZHJhd1JlY3RTaGFkb3coKnRoaXMsIHJlY3QpOwogICAgIH0K
IApAQCAtODc0LDcgKzg4NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVk
UmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QKICAgICBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWkgPSByZWN0LnJhZGlpKCk7CiAgICAgYm9vbCBl
cXVhbFdpZHRocyA9IChyYWRpaS50b3BMZWZ0KCkud2lkdGgoKSA9PSByYWRpaS50b3BSaWdodCgp
LndpZHRoKCkgJiYgcmFkaWkudG9wUmlnaHQoKS53aWR0aCgpID09IHJhZGlpLmJvdHRvbUxlZnQo
KS53aWR0aCgpICYmIHJhZGlpLmJvdHRvbUxlZnQoKS53aWR0aCgpID09IHJhZGlpLmJvdHRvbVJp
Z2h0KCkud2lkdGgoKSk7CiAgICAgYm9vbCBlcXVhbEhlaWdodHMgPSAocmFkaWkudG9wTGVmdCgp
LmhlaWdodCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS5oZWlnaHQoKSAmJiByYWRpaS5ib3R0b21M
ZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSAmJiByYWRpaS50b3BS
aWdodCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbVJpZ2h0KCkuaGVpZ2h0KCkpOwotICAgIGJv
b2wgaGFzQ3VzdG9tRmlsbCA9IG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmlsbFBh
dHRlcm47CisgICAgYm9vbCBoYXNDdXN0b21GaWxsID0gZmlsbEdyYWRpZW50KCkgfHwgZmlsbFBh
dHRlcm4oKTsKICAgICBpZiAoIWhhc0N1c3RvbUZpbGwgJiYgZXF1YWxXaWR0aHMgJiYgZXF1YWxI
ZWlnaHRzICYmIHJhZGlpLnRvcExlZnQoKS53aWR0aCgpICogMiA9PSByLndpZHRoKCkgJiYgcmFk
aWkudG9wTGVmdCgpLmhlaWdodCgpICogMiA9PSByLmhlaWdodCgpKQogICAgICAgICBDR0NvbnRl
eHRGaWxsRWxsaXBzZUluUmVjdChjb250ZXh0LCByKTsKICAgICBlbHNlIHsKQEAgLTkxMyw5ICs5
MjQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsbwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRv
dykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgotICAgICAgICBDR0NvbnRleHRT
ZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwor
ICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywg
MCwgMCk7CiAKLSAgICAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KG1fc3RhdGUpOworICAg
ICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coZHJvcFNoYWRvdygpLCBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKTsKICAgICAgICAgY29udGV4dFNoYWRvdy5kcmF3SW5zZXRTaGFkb3coKnRo
aXMsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCk7CiAgICAgfQogCkBAIC05MzAsNiArOTQxLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBGbG8KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlwKHJlY3Qp
OwogICAgIENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAg
IG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KQEAgLTk0MCwzMSArOTUyLDM1IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIC8vIHRvIDxy
ZGFyOi8vcHJvYmxlbS8xMjU4NDQ5Mj4sIENHUmVjdEluZmluaXRlIGNhbid0IGJlIHVzZWQgd2l0
aCBhbiBhY2NlbGVyYXRlZCBjb250ZXh0IHRoYXQKICAgICAvLyBoYXMgY2VydGFpbiB0cmFuc2Zv
cm1zIHRoYXQgYXJlbid0IGp1c3QgYSB0cmFuc2xhdGlvbiBvciBhIHNjYWxlLiBBbmQgZHVlIHRv
IDxyZGFyOi8vcHJvYmxlbS8xNDYzNDQ1Mz4KICAgICAvLyB3ZSBjYW5ub3QgdXNlIGl0IGluIGZv
ciBhIHByaW50aW5nIGNvbnRleHQgZWl0aGVyLgorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRD
VE0oKTsKLSAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShw
bGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKHJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMo
KSkpOwotICAgIENHUmVjdCByZWN0c1syXSA9IHsgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPyBDR1Jl
Y3RJbmZpbml0ZSA6IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQo
KSksIHJlY3QgfTsKLSAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwot
ICAgIENHQ29udGV4dEFkZFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgMik7Ci0gICAg
Q0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBib29sIGNhblVzZUNHUmVj
dEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShjb250ZXh0KSAhPSBrQ0dDb250ZXh0VHlwZVBE
RiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwg
KCFjdG0uYigpICYmICFjdG0uYygpKSk7CisgICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VD
R1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5n
Qm94KGNvbnRleHQpLCByZWN0IH07CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwor
ICAgIENHQ29udGV4dEFkZFJlY3RzKGNvbnRleHQsIHJlY3RzLCAyKTsKKyAgICBDR0NvbnRleHRF
T0NsaXAoY29udGV4dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0
KCkpOwotICAgIENHQ29udGV4dEFkZFJlY3QocGxhdGZvcm1Db250ZXh0KCksIENHQ29udGV4dEdl
dENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRl
eHQpOworICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5k
aW5nQm94KGNvbnRleHQpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQotICAgICAgICBDR0Nv
bnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAg
ICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOworICAgICAgICBDR0NvbnRleHRB
ZGRQYXRoKGNvbnRleHQsIHBhdGgucGxhdGZvcm1QYXRoKCkpOworICAgIENHQ29udGV4dEVPQ2xp
cChjb250ZXh0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dCgpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgQ0dDb250
ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBDR1JlY3RaZXJvKTsKICAgICBlbHNlIHsKLSAgICAgICAg
Q0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0
QWRkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisgICAgICAg
IENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChj
b250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKIAogICAgICAgICBpZiAoY2xpcFJ1bGUgPT0g
V2luZFJ1bGU6OkV2ZW5PZGQpCiAgICAgICAgICAgICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7
CkBAIC05NzUsMTEgKzk5MSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKGNv
bnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+Y2xpcChwYXRo
KTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94
KHBsYXRmb3JtQ29udGV4dCgpKSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKICAgICBHcmFwaGljc0NvbnRleHQ6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CkBAIC0xMDAyLDE3ICsxMDEzLDE0IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICByZXN0
b3JlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVl
ZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dG
bG9hdCYgeU9mZnNldCkKK3N0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElm
TmVlZGVkKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5
T2Zmc2V0KQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKICAg
ICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKHhPZmZzZXQpOwogICAg
IFVOVVNFRF9QQVJBTSh5T2Zmc2V0KTsKICNlbHNlCi0gICAgaWYgKGNvbnRleHQucmVuZGVyaW5n
TW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSkpCisgICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFk
b3dPZmZzZXRzKGNvbnRleHQpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXb3JrIGFyb3Vu
ZCA8cmRhcjovL3Byb2JsZW0vNTUzOTM4OD4gYnkgZW5zdXJpbmcgdGhhdCB0aGUgb2Zmc2V0cyB3
aWxsIGdldCB0cnVuY2F0ZWQKQEAgLTEwMzAsMTAgKzEwMzgsNTUgQEAgc3RhdGljIHZvaWQgYXBw
bHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxv
YXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0Q0dMaW5lQ2FwKENH
Q29udGV4dFJlZiBjb250ZXh0LCBMaW5lQ2FwIGNhcCkKIHsKLSAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzd2l0Y2ggKGNh
cCkgeworICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNh
cChjb250ZXh0LCBrQ0dMaW5lQ2FwQnV0dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGlu
ZUNhcDo6Um91bmQ6CisgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAoY29udGV4dCwga0NHTGlu
ZUNhcFJvdW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lQ2FwOjpTcXVhcmU6Cisg
ICAgICAgIENHQ29udGV4dFNldExpbmVDYXAoY29udGV4dCwga0NHTGluZUNhcFNxdWFyZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KIAorc3RhdGljIHZvaWQgc2V0Q0dMaW5lSm9pbihDR0Nv
bnRleHRSZWYgY29udGV4dCwgTGluZUpvaW4gam9pbikKK3sKKyAgICBzd2l0Y2ggKGpvaW4pIHsK
KyAgICBjYXNlIExpbmVKb2luOjpNaXRlcjoKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4o
Y29udGV4dCwga0NHTGluZUpvaW5NaXRlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGlu
ZUpvaW46OlJvdW5kOgorICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihjb250ZXh0LCBrQ0dM
aW5lSm9pblJvdW5kKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMaW5lSm9pbjo6QmV2ZWw6
CisgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKGNvbnRleHQsIGtDR0xpbmVKb2luQmV2ZWwp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNldENHTWl0ZXJMaW1p
dChDR0NvbnRleHRSZWYgY29udGV4dCwgZmxvYXQgbGltaXQpCit7CisgICAgQ0dDb250ZXh0U2V0
TWl0ZXJMaW1pdChjb250ZXh0LCBsaW1pdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHTGluZURh
c2goQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBk
YXNoT2Zmc2V0KQoreworICAgIGlmIChkYXNoT2Zmc2V0IDwgMCkgeworICAgICAgICBmbG9hdCBs
ZW5ndGggPSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIGxlbmd0aCArPSBzdGF0aWNfY2FzdDxmbG9hdD4oZGFzaGVzW2ld
KTsKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRh
c2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7CisgICAgfQorICAgIENHQ29udGV4dFNldExpbmVE
YXNoKGNvbnRleHQsIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkpOwor
fQorCitzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhDR0NvbnRleHRSZWYgY29udGV4dCwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1
ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQorewog
ICAgIGlmIChvZmZzZXQuaXNaZXJvKCkgJiYgIWJsdXIpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0
U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIDApOwogICAgICAgICByZXR1
cm47CkBAIC0xMDQ1LDcgKzEwOTgsNyBAQCBzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJgogICAgIENH
RmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWlnaHQoKTsKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMg
PSBibHVyOwogCi0gICAgaWYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoKSkgeworICAgIGlmICghc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKICAgICAgICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7
CiAKICAgICAgICAgQ0dGbG9hdCBBID0gdXNlclRvQmFzZUNUTS5hICogdXNlclRvQmFzZUNUTS5h
ICsgdXNlclRvQmFzZUNUTS5iICogdXNlclRvQmFzZUNUTS5iOwpAQCAtMTA2Niw3ICsxMTE5LDgg
QEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICAvLyBFeHRyZW1lICJibHVyIiB2YWx1ZXMg
Y2FuIG1ha2UgdGV4dCBkcmF3aW5nIGNyYXNoIG9yIHRha2UgY3JhenkgbG9uZyB0aW1lcywgc28g
Y2xhbXAKICAgICBibHVyUmFkaXVzID0gc3RkOjptaW4oYmx1clJhZGl1cywgbmFycm93UHJlY2lz
aW9uVG9DR0Zsb2F0KDEwMDAuMCkpOwogCi0gICAgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5k
SWZOZWVkZWQoZ3JhcGhpY3NDb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICBpZiAocmVu
ZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKKyAgICAgICAgYXBwbHlT
aGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7
CiAKICAgICAvLyBDaGVjayBmb3IgYW4gaW52YWxpZCBjb2xvciwgYXMgdGhpcyBtZWFucyB0aGF0
IHRoZSBjb2xvciB3YXMgbm90IHNldCBmb3IgdGhlIHNoYWRvdwogICAgIC8vIGFuZCB3ZSBzaG91
bGQgdGhlcmVmb3JlIGp1c3QgdXNlIHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KQEAgLTEwNzYs
NDQgKzExMzAsODEgQEAgc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYKICAgICAgICAgQ0dDb250ZXh0
U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZU1ha2UoeE9mZnNldCwgeU9mZnNldCks
IGJsdXJSYWRpdXMsIGNhY2hlZENHQ29sb3IoY29sb3IpLmdldCgpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBhdXRvIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoIXN0YXRlKCkuY2hhbmdlcygpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIENHQ29udGV4dFNldExpbmVX
aWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlja25lc3MsIDAuZikpOworICAg
IGF1dG8gY29udGV4dCA9IGludGVybmFsUGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAg
ICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dD
b2xvcihzdGF0ZS5zdHJva2VDb2xvcikuZ2V0KCkpOworICAgIGZvciAoYXV0byBjaGFuZ2UgOiBz
dGF0ZSgpLmNoYW5nZXMoKSkgeworICAgICAgICBzd2l0Y2ggKGNoYW5nZSkgeworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTToKKyAgICAgICAgICAgIENHQ29u
dGV4dFNldENUTShjb250ZXh0LCBzdGF0ZSgpLmdldENUTSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29s
b3JDaGFuZ2UpKQotICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZS5maWxsQ29s
b3IpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkZpbGxCcnVz
aDoKKyAgICAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0YXRlKCkuZmlsbEJydXNo
KCkuY29sb3IoKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRT
ZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5hbHBoYSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICAgICAgQ0dDb250ZXh0
U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0YXRlKCkuc3Ryb2tlVGhpY2tuZXNzKCks
IDAuZikpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnko
eyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKQotICAgICAgICBzZXRDR0JsZW5kTW9k
ZShjb250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VCcnVzaDoKKyAg
ICAgICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hl
ZENHQ29sb3Ioc3RhdGUoKS5zdHJva2VCcnVzaCgpLmNvbG9yKCkpLmdldCgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2lu
Z01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKSk7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUNhcDoKKyAg
ICAgICAgICAgIHNldENHTGluZUNhcChjb250ZXh0LCBzdGF0ZSgpLmxpbmVDYXAoKSk7CisgICAg
ICAgICAgICBicmVhazsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxk
QW50aWFsaWFzKGNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW46CisgICAgICAgICAgICBzZXRD
R0xpbmVKb2luKGNvbnRleHQsIHN0YXRlKCkubGluZUpvaW4oKSk7CisgICAgICAgICAgICBicmVh
azsKIAotICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxk
U21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250
cyhjb250ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2g6CisgICAgICAgICAgICBzZXRDR0xpbmVE
YXNoKGNvbnRleHQsIHN0YXRlKCkubGluZURhc2goKS5kYXNoZXMsIHN0YXRlKCkubGluZURhc2go
KS5vZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQot
ICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVy
cG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpNaXRlckxpbWl0OgorICAgICAg
ICAgICAgc2V0Q0dNaXRlckxpbWl0KGNvbnRleHQsIHN0YXRlKCkubWl0ZXJMaW1pdCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQotICAgICAgICBzZXRDR1NoYWRvdygqdGhpcywgc3RhdGUu
c2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwot
fQorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNvbXBvc2l0ZU1v
ZGU6CisgICAgICAgICAgICBzZXRDR0JsZW5kTW9kZShjb250ZXh0LCBzdGF0ZSgpLmNvbXBvc2l0
ZU1vZGUoKS5vcGVyYXRpb24sIHN0YXRlKCkuY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1p
dChmbG9hdCBsaW1pdCkKLXsKLSAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29u
dGV4dCgpLCBsaW1pdCk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5n
ZTo6RHJvcFNoYWRvdzoKKyAgICAgICAgICAgIHNldENHU2hhZG93KGNvbnRleHQsIHJlbmRlcmlu
Z01vZGUoKSwgc3RhdGUoKS5kcm9wU2hhZG93KCkub2Zmc2V0LCBzdGF0ZSgpLmRyb3BTaGFkb3co
KS5ibHVyUmFkaXVzLCBzdGF0ZSgpLmRyb3BTaGFkb3coKS5jb2xvciwgc3RhdGUoKS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6QWxwaGE6CisgICAgICAgICAgICBDR0NvbnRl
eHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZSgpLmFscGhhKCkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5OgorICAgICAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1
YWxpdHkoY29udGV4dCwgY2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZSgpLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpUZXh0RHJhd2luZ01vZGU6CisgICAgICAgICAg
ICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUo
c3RhdGUoKS50ZXh0RHJhd2luZ01vZGUoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRBbnRpYWxpYXM6Cisg
ICAgICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUoKS5z
aG91bGRBbnRpYWxpYXMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZFNtb290aEZvbnRzOgorICAgICAgICAg
ICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY29udGV4dCwgc3RhdGUoKS5zaG91bGRT
bW9vdGhGb250cygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRpZEFwcGx5U3RhdGVD
aGFuZ2VzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmIHIpCkBAIC0xMTI1LDcgKzEyMTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAo
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgeworICAgIGlmIChzdHJva2VHcmFkaWVudCgpKSB7CiAg
ICAgICAgIGlmIChoYXNTaGFkb3coKSkgewogICAgICAgICAgICAgY29uc3QgZmxvYXQgZG91Ymxl
TGluZVdpZHRoID0gbGluZVdpZHRoICogMjsKICAgICAgICAgICAgIGZsb2F0IGFkanVzdGVkV2lk
dGggPSBjZWlsZihyZWN0LndpZHRoKCkgKyBkb3VibGVMaW5lV2lkdGgpOwpAQCAtMTEzNSw3ICsx
MjI2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgICAgIGF1dG8gbGF5ZXIgPSBhZG9w
dENGKENHTGF5ZXJDcmVhdGVXaXRoQ29udGV4dChjb250ZXh0LCBsYXllclNpemUsIDApKTsKIAog
ICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGxheWVyQ29udGV4dCA9IENHTGF5ZXJHZXRDb250ZXh0
KGxheWVyLmdldCgpKTsKLSAgICAgICAgICAgIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID0gbGlu
ZVdpZHRoOwogICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGxheWVyQ29udGV4dCwg
bGluZVdpZHRoKTsKIAogICAgICAgICAgICAgLy8gQ29tcGVuc2F0ZSBmb3IgdGhlIGxpbmUgd2lk
dGgsIG90aGVyd2lzZSB0aGUgbGF5ZXIncyB0b3AtbGVmdCBjb3JuZXIgd291bGQgYmUKQEAgLTEx
NDksOCArMTIzOSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgICAgICBDR0NvbnRleHRB
ZGRSZWN0KGxheWVyQ29udGV4dCwgcmVjdCk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXBsYWNl
UGF0aFdpdGhTdHJva2VkUGF0aChsYXllckNvbnRleHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0
Q2xpcChsYXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVy
Q29udGV4dCwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICAgICAg
ICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7CisgICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBzdHJva2VTcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICAgICAgICAgIHN0cm9rZUdyYWRpZW50KCktPnBhaW50KGxheWVyQ29udGV4dCk7
CiAKICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRlc3RpbmF0aW9uWCA9IHJvdW5kZihyZWN0Lngo
KSAtIGxpbmVXaWR0aCk7CiAgICAgICAgICAgICBjb25zdCBmbG9hdCBkZXN0aW5hdGlvblkgPSBy
b3VuZGYocmVjdC55KCkgLSBsaW5lV2lkdGgpOwpAQCAtMTE2MSwxMyArMTI1MSwxMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgbGluZVdpZHRoKQogICAgICAgICAgICAgQ0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCByZWN0
KTsKICAgICAgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9rZWRQYXRoKGNvbnRl
eHQpOwogICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250ZXh0KTsKLSAgICAgICAgICAgIENH
Q29udGV4dENvbmNhdENUTShjb250ZXh0LCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0pOwotICAgICAgICAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGFpbnQoKnRoaXMp
OworICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHQsIHN0cm9rZVNwYWNlVHJh
bnNmb3JtKCkpOworICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQoKS0+cGFpbnQoKnRoaXMpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuKQorICAgIGlmIChzdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGFwcGx5U3Ryb2tl
UGF0dGVybigpOwogCiAgICAgLy8gVXNpbmcgQ0dDb250ZXh0QWRkUmVjdCBhbmQgQ0dDb250ZXh0
U3Ryb2tlUGF0aCB0byBzdHJva2UgcmVjdCByYXRoZXIgdGhhbgpAQCAtMTE4Miw5NCArMTI3Miw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKLXsK
LSAgICBzd2l0Y2ggKGNhcCkgewotICAgIGNhc2UgTGluZUNhcDo6QnV0dDoKLSAgICAgICAgQ0dD
b250ZXh0U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcEJ1dHQpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIExpbmVDYXA6OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRT
ZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5lQ2FwUm91bmQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIExpbmVDYXA6OlNxdWFyZToKLSAgICAgICAgQ0dDb250ZXh0U2V0TGlu
ZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFNxdWFyZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2goY29uc3Qg
RGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgaWYgKGRhc2hPZmZz
ZXQgPCAwKSB7Ci0gICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbGVuZ3RoICs9IHN0
YXRpY19jYXN0PGZsb2F0PihkYXNoZXNbaV0pOwotICAgICAgICBpZiAobGVuZ3RoKQotICAgICAg
ICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsKLSAg
ICB9Ci0gICAgQ0dDb250ZXh0U2V0TGluZURhc2gocGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZz
ZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXplKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQotewotICAgIHN3aXRjaCAoam9pbikg
ewotICAgIGNhc2UgTGluZUpvaW46Ok1pdGVyOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9p
bihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgTGluZUpvaW46OlJvdW5kOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihw
bGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5Sb3VuZCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTGluZUpvaW46OkJldmVsOgotICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0
Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5CZXZlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQotewotICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpOwotICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7Ci0gICAgbV9kYXRh
LT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBDR0Nv
bnRleHRSb3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKLSAgICBtX2RhdGEtPnJv
dGF0ZShhbmdsZSk7Ci0gICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9C
ZUlkZW50aXR5ID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9y
bUNvbnRleHQoKSwgeCwgeSk7Ci0gICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgbV9k
YXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0
KCksIHRyYW5zZm9ybSk7Ci0gICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBt
X2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQotewotICAgIENHQ29udGV4dFNldENUTShwbGF0Zm9ybUNvbnRleHQoKSwg
dHJhbnNmb3JtKTsKLSAgICBtX2RhdGEtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgIG1fZGF0YS0+
bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwotfQotCi1B
ZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2aWNlU2Nh
bGUgaW5jbHVkZVNjYWxlKSBjb25zdAotewotICAgIC8vIFRoZSBDVE0gdXN1YWxseSBpbmNsdWRl
cyB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgZXhjZXB0IGluIFdlYktpdCAxIHdoZW4gdGhlCi0gICAg
Ly8gY29udGVudCBpcyBub24tY29tcG9zaXRlZCwgc2luY2UgdGhlIHNjYWxlIGZhY3RvciBpcyBp
bnRlZ3JhdGVkIGF0IGEgbG93ZXIKLSAgICAvLyBsZXZlbC4gVG8gZ3VhcmFudGVlIHRoZSBkZXZp
Y2VTY2FsZSBpcyBpbmNsdWRlZCwgd2UgY2FuIHVzZSB0aGlzIENHIEFQSS4KLSAgICBpZiAoaW5j
bHVkZVNjYWxlID09IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpCi0gICAgICAgIHJldHVy
biBDR0NvbnRleHRHZXRVc2VyU3BhY2VUb0RldmljZVNwYWNlVHJhbnNmb3JtKHBsYXRmb3JtQ29u
dGV4dCgpKTsKLQotICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkp
OwotfQotCiBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewogICAg
IC8vIEl0IGlzIG5vdCBlbm91Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2aWNlIHNw
YWNlLiBUaGUgcm90YXRpb24gcGFydCBvZiB0aGUKQEAgLTEyODAsNyArMTI4Miw5IEBAIEZsb2F0
UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIFJvdW5kaW5nCiAgICAgaWYgKG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zv
cm1Lbm93blRvQmVJZGVudGl0eSkKICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRSZWN0KHJlY3Qp
OwogCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZGV2aWNlTWF0cml4ID0gQ0dDb250ZXh0R2V0VXNl
clNwYWNlVG9EZXZpY2VTcGFjZVRyYW5zZm9ybShwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIENHQWZmaW5lVHJh
bnNmb3JtIGRldmljZU1hdHJpeCA9IENHQ29udGV4dEdldFVzZXJTcGFjZVRvRGV2aWNlU3BhY2VU
cmFuc2Zvcm0oY29udGV4dCk7CiAgICAgaWYgKENHQWZmaW5lVHJhbnNmb3JtSXNJZGVudGl0eShk
ZXZpY2VNYXRyaXgpKSB7CiAgICAgICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1L
bm93blRvQmVJZGVudGl0eSA9IHRydWU7CiAgICAgICAgIHJldHVybiByb3VuZGVkSW50UmVjdChy
ZWN0KTsKQEAgLTEzMTksNiArMTMyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzCiAgICAg
aWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIGxvY2FsU3Ryb2tlQ29sb3Io
c3Ryb2tlQ29sb3IoKSk7CiAKICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3Vu
ZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChGbG9hdFJlY3QocG9pbnQsIEZsb2F0U2l6ZSh3
aWR0aHMubGFzdCgpLCB0aGlja25lc3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3IpOwpA
QCAtMTM2NCwxMiArMTM2OSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lcwogICAgIH0KIAog
ICAgIGlmIChmaWxsQ29sb3JJc05vdEVxdWFsVG9TdHJva2VDb2xvcikKLSAgICAgICAgc2V0Q0dG
aWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGxvY2FsU3Ryb2tlQ29sb3IpOworICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBsb2NhbFN0cm9rZUNvbG9yKTsKIAotICAgIENHQ29udGV4
dEZpbGxSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaEJvdW5kcy5kYXRhKCksIGRhc2hCb3Vu
ZHMuc2l6ZSgpKTsKKyAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwgZGFzaEJvdW5kcy5k
YXRhKCksIGRhc2hCb3VuZHMuc2l6ZSgpKTsKIAogICAgIGlmIChmaWxsQ29sb3JJc05vdEVxdWFs
VG9TdHJva2VDb2xvcikKLSAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCks
IGZpbGxDb2xvcigpKTsKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgZmlsbENvbG9y
KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVS
TCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKQEAgLTE0MTIsMTcgKzE0MTcsMTgg
QEAgUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0
CiB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKQogewogICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBiYXNl
IENUTSBvZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQg
dG8gaXQuCiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwg
Y2F1c2UgY2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKICAgICAvLyB0
byBkcmF3IHdpdGggYSBzY2FsZSBmYWN0b3Igb2YgMSByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIHNj
YWxlIGZhY3Rvci4KLSAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBD
R0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0
KCkpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBDR0NvbnRl
eHRTZXRCYXNlQ1RNKGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0
QmFzZUNUTShjb250ZXh0KSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgZWxsaXBzZSkKIHsKICAgICAvLyBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1
cHBvcnRzIHNvbGlkIGNvbG9ycy4KLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9z
dGF0ZS5maWxsUGF0dGVybikgeworICAgIGlmIChmaWxsR3JhZGllbnQoKSB8fCBmaWxsUGF0dGVy
bigpKSB7CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMTQzNCw3ICsxNDQwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogdm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7CiAgICAgLy8g
Q0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4K
LSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4p
IHsKKyAgICBpZiAoc3Ryb2tlR3JhZGllbnQoKSB8fCBzdHJva2VQYXR0ZXJuKCkpIHsKICAgICAg
ICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTE0NjgsOSArMTQ3NCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphZGREZXN0aW5h
dGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaQogCiBib29sIEdy
YXBoaWNzQ29udGV4dENHOjpjYW5Vc2VTaGFkb3dCbHVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
KHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNC
bHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAg
cmV0dXJuIChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkg
JiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpOwogfQog
Ci19CiAKLSNlbmRpZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENH
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmgKaW5kZXggNDY4YTQ0YmFhODZlZTUyNjE5ZDI1NWY5Mzk0M2E5NzU1YmFj
OWZhYi4uMTU3YTFhMDY4MWRkMWNmMWY3ZmI2MzQ3YTg4YmY4MmMzMDcwZTBhMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAxMCwgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDUzICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2lmIFVTRShDRykKKwogI2luY2x1ZGUgIkNvbG9yU3BhY2VDRy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNHQWZmaW5lVHJhbnNm
b3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKLQotY2xhc3MgQ0dDb250ZXh0U3Rh
dGVTYXZlciB7Ci1wdWJsaWM6Ci0gICAgQ0dDb250ZXh0U3RhdGVTYXZlcihDR0NvbnRleHRSZWYg
Y29udGV4dCwgYm9vbCBzYXZlQW5kUmVzdG9yZSA9IHRydWUpCi0gICAgICAgIDogbV9jb250ZXh0
KGNvbnRleHQpCi0gICAgICAgICwgbV9zYXZlQW5kUmVzdG9yZShzYXZlQW5kUmVzdG9yZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX3NhdmVBbmRSZXN0b3JlKQotICAgICAgICAgICAgQ0dDb250ZXh0
U2F2ZUdTdGF0ZShtX2NvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICB+Q0dDb250ZXh0U3RhdGVT
YXZlcigpCi0gICAgewotICAgICAgICBpZiAobV9zYXZlQW5kUmVzdG9yZSkKLSAgICAgICAgICAg
IENHQ29udGV4dFJlc3RvcmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzYXZlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9zYXZlQW5kUmVzdG9yZSk7Ci0gICAg
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUobV9jb250ZXh0KTsKLSAgICAgICAgbV9zYXZlQW5kUmVz
dG9yZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlKCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX3NhdmVBbmRSZXN0b3JlKTsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShtX2NvbnRleHQpOwotICAgICAgICBtX3NhdmVBbmRSZXN0b3JlID0gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIGJvb2wgZGlkU2F2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9z
YXZlQW5kUmVzdG9yZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIENHQ29udGV4dFJlZiBt
X2NvbnRleHQ7Ci0gICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOwotfTsKLQogY2xhc3MgV0VCQ09S
RV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0Q0cgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKIHB1
YmxpYzoKICAgICBHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYpOwpAQCAtODUsNjkgKzQ1
LDQ5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFs
OwogICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKIAotICAg
IHZvaWQgc2F2ZSgpIGZpbmFsOwotICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworICAgIHZvaWQg
c2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbDsKKyAgICBib29sIGlzQ0FMYXllckNvbnRl
eHQoKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7Ci0gICAgdm9pZCBkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOwotICAgIHZvaWQgZHJhd0Vs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChi
b29sKSBmaW5hbDsKIAorICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgp
IGZpbmFsOworICAgIHZvaWQgYXBwbHlTdGF0ZUNoYW5nZXMoKSBmaW5hbDsKICAgICB2b2lkIGFw
cGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwogICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZp
bmFsOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgZmls
bFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWw7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0
eSkgZmluYWw7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOwogCiAgICAg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CiAKLSAgICB1
c2luZyBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0OwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpIGZpbmFsOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKLQotICAgIHZvaWQgZmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKLQotICAgIHZvaWQgc2V0SXNDQUxheWVy
Q29udGV4dChib29sKSBmaW5hbDsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBm
aW5hbDsKLQotICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7Ci0g
ICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKIAogICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0K
LSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwotCiAgICAgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisgICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CiAKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZv
aWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQgc2V0TGluZUpv
aW4oTGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWw7CisgICAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7CiAK
LSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
c2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKLSAgICB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25z
dCBQYXRoJikgZmluYWw7CiAKLSAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OnNjYWxlOwotICAg
IHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7Ci0gICAgdm9pZCByb3RhdGUoZmxv
YXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MpIGZpbmFsOwogCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVk
ZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQgZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKIAotICAg
IEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5n
TW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7
CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9h
dCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CkBAIC0xNTYsMTgg
Kzk2LDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlmCiAK
LSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pIGZpbmFsOwogCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CiAgICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBhZGRE
ZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50Jikg
ZmluYWw7CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CiAKICAgICBib29sIHN1cHBv
cnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBkaWRVcGRhdGVTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwg
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVj
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQg
YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2lu
dCYpIGZpbmFsOwogCiAgICAgdmlydHVhbCBib29sIGNhblVzZVNoYWRvd0JsdXIoKSBjb25zdDsK
IApAQCAtMTc1LDkgKzExOCwxNiBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKICNlbmRp
ZgogCisgICAgQ0dDb250ZXh0UmVmIGludGVybmFsUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisK
IHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBu
dWxscHRyIH07CiB9OwogCi19CitDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENH
Q29udGV4dFJlZik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2luY2x1ZGUgIkNHQ29u
dGV4dFN0YXRlU2F2ZXIuaCIKIAorI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5k
ZXggZTZjZTJmYjk3MjQ3YTZiODZjMDliMWFkMzYxNzAxYzJlYzNlODYyNS4uYWYwMGEwMTMzNDdl
MGNkODVhMzBiODg0ZWJjNzlmMzJmMWUyMzEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTEyNyw3
ICsxMjcsNyBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYQogCiAgICAgLy8gT2xkIGFuZCBuZXcg
Y29udGV4dCBzY2FsaW5nIGZhY3RvcnMgaGF2ZSB0byBtYXRjaCBhcyB3ZWxsLgogICAgIEFmZmlu
ZVRyYW5zZm9ybTo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFRyYW5zZm9ybTsKLSAgICBjb250
ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUp
LmRlY29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKKyAgICBjb250ZXh0LmdldENUTSgpLmRl
Y29tcG9zZShkZWNvbXBvc2VkVHJhbnNmb3JtKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybTo6RGVj
b21wb3NlZFR5cGUgY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybTsKICAgICBtX2NhY2hlZFRyYW5z
Zm9ybS5kZWNvbXBvc2UoY2FjaGVkRGVjb21wb3NlZFRyYW5zZm9ybSk7CkBAIC0yNTUsNyArMjU1
LDcgQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICB0cmFuc2Zvcm1Db250ZXh0Rm9yUGFp
bnRpbmcoYnVmZmVyQ29udGV4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KG1fY2FjaGVkSW1hZ2VSZWN0
LmxvY2F0aW9uKCksIHNyY1JlY3Quc2l6ZSgpKSk7CiAgICAgZHJhd1BERlBhZ2UoYnVmZmVyQ29u
dGV4dCk7CiAKLSAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgbV9jYWNoZWRUcmFu
c2Zvcm0gPSBjb250ZXh0LmdldENUTSgpOwogICAgIG1fY2FjaGVkRGVzdGluYXRpb25SZWN0ID0g
ZHN0UmVjdDsKICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogICAgICsrbV9jYWNo
aW5nQ291bnRGb3JUZXN0aW5nOwpAQCAtMzYzLDYgKzM2Myw4IEBAIHZvaWQgUERGRG9jdW1lbnRJ
bWFnZTo6ZHJhd1BERlBhZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogCiAgICAgY29udGV4
dC50cmFuc2xhdGUoLW1fY3JvcEJveC5sb2NhdGlvbigpKTsKIAorICAgIGNvbnRleHQuYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKwogICAgIC8vIENHUERGIHBhZ2VzIGFyZSBpbmRleGVkIGZyb20gMS4K
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICBDR0NvbnRleHREcmF3UERGUGFnZVdpdGhBbm5vdGF0
aW9ucyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDR1BERkRvY3VtZW50R2V0UGFnZShtX2Rv
Y3VtZW50LmdldCgpLCAxKSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCBkNjg5YTUxYTg5MTAyYTUwOTA0NTU5YjQ0MjIz
NjlkZTE0NzAzMzM1Li5mZGVlZjZiMzhkMGM1YjU1NTY3MzdlYjdmNDRhZjJmMmZjOWE0NDQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAg
LTI0Nyw3ICsyNDcsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgIEdyYXBoaWNzQ29u
dGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBzdHJva2VTdHlsZUFwcGxpZXIo
Z3JhcGhpY3NDb250ZXh0KTsKIAotICAgIGJvb2wgaGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhD
b250YWluc1BvaW50KGNvbnRleHQsIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKKyAgICBib29sIGhp
dFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChncmFwaGljc0NvbnRleHQucGxh
dGZvcm1Db250ZXh0KCksIHBvaW50LCBrQ0dQYXRoU3Ryb2tlKTsKICAgICBDR0NvbnRleHRSZXN0
b3JlR1N0YXRlKGNvbnRleHQpOwogCiAgICAgcmV0dXJuIGhpdFN1Y2Nlc3M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9EcmF3R2x5cGhzUmVj
b3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9EcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggZWZiYzFlNDk1NDQxYmVk
ZTczNGU5NDhkZDI2ZDM3MTQ0MTY1NTNlMC4uZTliN2FjNGQ3ZjRjYmY3NDEyODkzOWJmYThjMDRl
NzY1YTBkYmQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZXRleHQvRHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0RyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJE
cmF3R2x5cGhzUmVjb3JkZXIuaCIKIAotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVk
ZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRm9udC5oIgpA
QCAtMzUsNDkgKzM0LDQxIEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KICNpbmNsdWRl
IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotI2lmIFBM
QVRGT1JNKFdJTikKLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVm
IGJlZ2luTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3Rh
dGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDRkRpY3Rpb25h
cnlSZWYsIENHQ29udGV4dERlbGVnYXRlUmVmKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVm
IGJlZ2luTGF5ZXIoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3Rh
dGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0LCBDRkRpY3Rpb25hcnlSZWYsIENHQ29u
dGV4dERlbGVnYXRlUmVmKQogewogICAgIERyYXdHbHlwaHNSZWNvcmRlciYgcmVjb3JkZXIgPSAq
c3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250ZXh0RGVsZWdhdGVHZXRJbmZv
KGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihyc3RhdGUsIGdzdGF0
ZSwgcmVjdCk7CisgICAgcmVjb3JkZXIucmVjb3JkQmVnaW5MYXllcihnc3RhdGUpOwogICAgIHJl
dHVybiBkZWxlZ2F0ZTsKIH0KIAotc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExheWVy
KENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGF0
ZSwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQorc3RhdGljIENHQ29udGV4dERlbGVnYXRlUmVmIGVuZExh
eWVyKENHQ29udGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBD
R0dTdGF0ZVJlZiBnc3RhdGUpCiB7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9
ICpzdGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldElu
Zm8oZGVsZWdhdGUpKTsKLSAgICByZWNvcmRlci5yZWNvcmRFbmRMYXllcihyc3RhdGUsIGdzdGF0
ZSk7CisgICAgcmVjb3JkZXIucmVjb3JkRW5kTGF5ZXIoZ3N0YXRlKTsKICAgICByZXR1cm4gZGVs
ZWdhdGU7CiB9CiAKLXN0YXRpYyBDR0Vycm9yIGRyYXdHbHlwaHMoQ0dDb250ZXh0RGVsZWdhdGVS
ZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3Rh
dGUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiB0bSwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwg
Y29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQorc3RhdGljIENHRXJyb3Ig
ZHJhd0dseXBocyhDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0
ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0
IENHR2x5cGggZ2x5cGhzW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3Vu
dCkKIHsKLSAgICBpZiAoQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpID4gMCkgewotICAgICAgICBE
cmF3R2x5cGhzUmVjb3JkZXImIHJlY29yZGVyID0gKnN0YXRpY19jYXN0PERyYXdHbHlwaHNSZWNv
cmRlcio+KENHQ29udGV4dERlbGVnYXRlR2V0SW5mbyhkZWxlZ2F0ZSkpOwotICAgICAgICByZWNv
cmRlci5yZWNvcmREcmF3R2x5cGhzKHJzdGF0ZSwgZ3N0YXRlLCB0bSwgZ2x5cGhzLCBwb3NpdGlv
bnMsIGNvdW50KTsKLSAgICB9CisgICAgRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlciA9ICpz
dGF0aWNfY2FzdDxEcmF3R2x5cGhzUmVjb3JkZXIqPihDR0NvbnRleHREZWxlZ2F0ZUdldEluZm8o
ZGVsZWdhdGUpKTsKKyAgICByZWNvcmRlci5yZWNvcmREcmF3R2x5cGhzKGdzdGF0ZSwgZ2x5cGhz
LCBwb3NpdGlvbnMsIGNvdW50KTsKICAgICByZXR1cm4ga0NHRXJyb3JTdWNjZXNzOwogfQogCi1z
dGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENH
UmVuZGVyaW5nU3RhdGVSZWYgcnN0YXRlLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0
LCBDR0ltYWdlUmVmIGltYWdlKQorc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERl
bGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3Rh
dGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGltYWdlKQogewogICAgIERyYXdHbHlwaHNSZWNv
cmRlciYgcmVjb3JkZXIgPSAqc3RhdGljX2Nhc3Q8RHJhd0dseXBoc1JlY29yZGVyKj4oQ0dDb250
ZXh0RGVsZWdhdGVHZXRJbmZvKGRlbGVnYXRlKSk7Ci0gICAgcmVjb3JkZXIucmVjb3JkRHJhd0lt
YWdlKHJzdGF0ZSwgZ3N0YXRlLCByZWN0LCBpbWFnZSk7CisgICAgcmVjb3JkZXIucmVjb3JkRHJh
d0ltYWdlKGdzdGF0ZSwgcmVjdCwgaW1hZ2UpOwogICAgIHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7
CiB9CiAKLVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3Jl
YXRlSW50ZXJuYWxDb250ZXh0KCkKK3N0YXRpYyBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBj
cmVhdGVJbnRlcm5hbENvbnRleHQoRHJhd0dseXBoc1JlY29yZGVyJiByZWNvcmRlcikKIHsKLSAg
ICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdhdGVDcmVhdGUo
dGhpcykpOworICAgIGF1dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxl
Z2F0ZUNyZWF0ZSgmcmVjb3JkZXIpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNr
KGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVCZWdpbkxheWVyLCByZWludGVycHJldF9jYXN0PENH
Q29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZiZWdpbkxheWVyKSk7CiAgICAgQ0dDb250ZXh0RGVs
ZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRW5kTGF5ZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmVuZExheWVyKSk7CiAgICAg
Q0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJh
d0dseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmV2Vi
Q29yZTo6ZHJhd0dseXBocykpOwpAQCAtODYsNjcgKzc3LDE1IEBAIFVuaXF1ZVJlZjxHcmFwaGlj
c0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHRDRz4oY29udGV4dC5nZXQoKSk7
CiB9CiAKLURyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKEdyYXBoaWNzQ29u
dGV4dCYgb3duZXIsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNvbnN0cnVjdERyYXdHbHlwaHMs
IERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293
bmVyKG93bmVyKQorRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocyBkZWNv
bnN0cnVjdERyYXdHbHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCBkZXJpdmVGb250RnJvbUNv
bnRleHQpCisgICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiAg
ICAgLCBtX2RlY29uc3RydWN0RHJhd0dseXBocyhkZWNvbnN0cnVjdERyYXdHbHlwaHMpCiAgICAg
LCBtX2Rlcml2ZUZvbnRGcm9tQ29udGV4dChkZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgLCBt
X2ludGVybmFsQ29udGV4dChjcmVhdGVJbnRlcm5hbENvbnRleHQoKSkKKyAgICAsIG1faW50ZXJu
YWxDb250ZXh0KGNyZWF0ZUludGVybmFsQ29udGV4dCgqdGhpcykpCiB7CiB9CiAKLXZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxl
LmNvbG9yID0gY29udGV4dFN0YXRlLmZpbGxDb2xvcjsKLSAgICBtX29yaWdpbmFsU3RhdGUuZmls
bFN0eWxlLmdyYWRpZW50ID0gY29udGV4dFN0YXRlLmZpbGxHcmFkaWVudDsKLSAgICBtX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBjb250ZXh0U3RhdGUu
ZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07Ci0gICAgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLmZpbGxQYXR0ZXJuOwotCi0gICAgbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmNvbG9yID0gY29udGV4dFN0YXRlLnN0cm9rZUNvbG9yOwotICAgIG1f
b3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCA9IGNvbnRleHRTdGF0ZS5zdHJva2VH
cmFkaWVudDsKLSAgICBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybSA9IGNvbnRleHRTdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwotICAg
IG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuID0gY29udGV4dFN0YXRlLnN0cm9r
ZVBhdHRlcm47Ci0KLSAgICBtX29yaWdpbmFsU3RhdGUuY3RtID0gbV9vd25lci5nZXRDVE0oKTsg
Ly8gRklYTUU6IERlYWwgd2l0aCBiYXNlIENUTS4KLQotICAgIG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cub2Zmc2V0ID0gY29udGV4dFN0YXRlLnNoYWRvd09mZnNldDsKLSAgICBtX29yaWdpbmFsU3Rh
dGUuc2hhZG93LmJsdXIgPSBjb250ZXh0U3RhdGUuc2hhZG93Qmx1cjsKLSAgICBtX29yaWdpbmFs
U3RhdGUuc2hhZG93LmNvbG9yID0gY29udGV4dFN0YXRlLnNoYWRvd0NvbG9yOwotICAgIG1fb3Jp
Z2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcyA9IGNvbnRleHRTdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtczsKLQotICAgIG1fY3VycmVudFN0YXRlID0gbV9vcmlnaW5hbFN0YXRl
OwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKLXsKLSAgICBpZiAobV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvcik7
Ci0gICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCkKLSAgICAg
ICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNl
VHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxTdGF0ZS5m
aWxsU3R5bGUucGF0dGVybik7Ci0gICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxl
LnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4o
Km1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7Ci0gICAgfQotCi0gICAgaWYgKG1f
b3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50
ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUu
Y29sb3IpOwotICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVu
dCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdp
bmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHls
ZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG1f
b3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKLSAgICAgICAgaWYgKG1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRl
eHQtPnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJu
KTsKLSAgICB9Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0Q1RNKG1fb3JpZ2luYWxTdGF0
ZS5jdG0pOwotCi0gICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgbV9pbnRl
cm5hbENvbnRleHQtPnNldFNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9v
cmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBj
b250ZXh0U3RhdGUuc2hhZG93UmFkaXVzTW9kZSk7Ci0KLSAgICBtX2ludGVybmFsQ29udGV4dC0+
c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwotfQotCi12
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250
JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OnNldEludGVybmFsRm9udChjb25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIEFTU0VSVChDR0FmZmluZVRyYW5zZm9ybUlzSWRl
bnRpdHkoQ1RGb250R2V0TWF0cml4KGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKSk7CiAK
QEAgLTE1NiwxMDQgKzk1LDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50
ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNCiAgICAgbV9vcmln
aW5hbFRleHRNYXRyaXggPSBjb21wdXRlT3ZlcmFsbFRleHRNYXRyaXgoZm9udCk7CiAgICAgaWYg
KGZvbnQucGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZl
cnRpY2FsKQogICAgICAgICBtX29yaWdpbmFsVGV4dE1hdHJpeCA9IGNvbXB1dGVWZXJ0aWNhbFRl
eHRNYXRyaXgoZm9udCwgbV9vcmlnaW5hbFRleHRNYXRyaXgpOwotCi0gICAgYXV0byYgY29udGV4
dFN0YXRlID0gbV9vd25lci5zdGF0ZSgpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb250
ZXh0U3RhdGUpOwotICAgIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnRleHRTdGF0ZSk7CiB9
CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpjb25jbHVkZUludGVybmFsQ29udGV4dCgpCitH
cmFwaGljc0NvbnRleHRTdGF0ZSBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENv
bnRleHQoKQogewotICAgIHVwZGF0ZUNUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKLSAgICB1cGRh
dGVGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvciwgbV9vcmlnaW5hbFN0
YXRlLmZpbGxTdHlsZS5ncmFkaWVudC5nZXQoKSwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5w
YXR0ZXJuLmdldCgpKTsKLSAgICB1cGRhdGVTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ry
b2tlU3R5bGUuY29sb3IsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudC5nZXQo
KSwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4uZ2V0KCkpOwotICAgIHVwZGF0
ZVNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNo
YWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBtX29yaWdpbmFsU3RhdGUu
c2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMgPyBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzIDog
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6Ok5vKTsKKyAgICBhdXRvIG9yaWdpbmFsU3RhdGUgPSBt
X2Rlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5tZXJn
ZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPmFwcGx5
U3RhdGVDaGFuZ2VzKCk7CisgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGU7CiB9CiAKLXZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjp1cGRhdGVGaWxsQ29sb3IoY29uc3QgQ29sb3ImIG5ld0NvbG9yLCBH
cmFkaWVudCogbmV3R3JhZGllbnQsIFBhdHRlcm4qIG5ld1BhdHRlcm4pCit2b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6cmVzdG9yZURlc3RpbmF0aW9uQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3JpZ2luYWxTdGF0ZSkKIHsKLSAgICAvLyBUaGlzIGNoZWNrIGxvb2tzIHdyb25n
IGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1pdGVkIHVzZS4KLSAgICAvLyBDVCB3
aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNvbG9yLCB3aGljaCB0aGlzIGlzIHRo
ZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25jbHVkZUludGVybmFsQ29udGV4dCgp
IHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdpbmFsbHksIHdoaWNoIHRoaXMgY2hl
Y2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYgKG5ld0NvbG9yID09IG1fY3VycmVu
dFN0YXRlLmZpbGxTdHlsZS5jb2xvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0U3RhdGUgbmV3U3RhdGU7Ci0gICAgbmV3U3RhdGUuZmlsbENvbG9yID0gbmV3Q29sb3I7
Ci0gICAgaWYgKG5ld0dyYWRpZW50KQotICAgICAgICBuZXdTdGF0ZS5maWxsR3JhZGllbnQgPSBu
ZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0dGVybikKLSAgICAgICAgbmV3U3RhdGUuZmlsbFBh
dHRlcm4gPSBuZXdQYXR0ZXJuOwotICAgIG1fb3duZXIuZGlkVXBkYXRlU3RhdGUobmV3U3RhdGUs
IHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSB9KTsKLSAgICBtX2N1cnJl
bnRTdGF0ZS5maWxsU3R5bGUuY29sb3IgPSBuZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29u
dGV4dC5tZXJnZVN0YXRlRGlmZnMob3JpZ2luYWxTdGF0ZSk7CiB9CiAKLXZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjp1cGRhdGVTdHJva2VDb2xvcihjb25zdCBDb2xvciYgbmV3Q29sb3IsIEdyYWRp
ZW50KiBuZXdHcmFkaWVudCwgUGF0dGVybiogbmV3UGF0dGVybikKK3ZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpyZWNvcmRCZWdpbkxheWVyKENHR1N0YXRlUmVmIGdzdGF0ZSkKIHsKLSAgICAvLyBU
aGlzIGNoZWNrIGxvb2tzIHdyb25nIGJ1dCBpdCBhY3R1YWxseSBpc24ndCwgZm9yIG91ciBsaW1p
dGVkIHVzZS4KLSAgICAvLyBDVCB3aWxsIG9ubHkgZXZlciBzZXQgdGhpcyB0byBhIHNvbGlkIGNv
bG9yLCB3aGljaCB0aGlzIGlzIHRoZSBjb3JyZWN0IGNoZWNrIGZvci4KLSAgICAvLyBJbiBjb25j
bHVkZUludGVybmFsQ29udGV4dCgpIHdlIHNldCBpdCBiYWNrIHRvIHdoYXQgaXQgd2FzIG9yaWdp
bmFsbHksIHdoaWNoIHRoaXMgY2hlY2sgd29ya3MgY29ycmVjdGx5IGZvciB0b28uCi0gICAgaWYg
KG5ld0NvbG9yID09IG1fY3VycmVudFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsKLSAgICBuZXdTdGF0
ZS5zdHJva2VDb2xvciA9IG5ld0NvbG9yOwotICAgIGlmIChuZXdHcmFkaWVudCkKLSAgICAgICAg
bmV3U3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBuZXdHcmFkaWVudDsKLSAgICBpZiAobmV3UGF0dGVy
bikKLSAgICAgICAgbmV3U3RhdGUuc3Ryb2tlUGF0dGVybiA9IG5ld1BhdHRlcm47Ci0gICAgbV9v
d25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlQ29sb3JDaGFuZ2UgfSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuc3Ryb2tlU3R5bGUuY29sb3Ig
PSBuZXdDb2xvcjsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0
Q1RNKGdzdGF0ZSkpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoQ0dHU3RhdGVHZXRBbHBoYShnc3RhdGUpKTsKIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnVwZGF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKK3ZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpyZWNvcmRFbmRMYXllcihDR0dTdGF0ZVJlZiBnc3RhdGUpCiB7Ci0gICAg
aWYgKGN0bSA9PSBtX2N1cnJlbnRTdGF0ZS5jdG0pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
b3duZXIuc2V0Q1RNKGN0bSk7Ci0gICAgbV9jdXJyZW50U3RhdGUuY3RtID0gY3RtOworICAgIG1f
ZGVzdGluYXRpb25Db250ZXh0LnNldENUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAg
bV9kZXN0aW5hdGlvbkNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAotc3RhdGlj
IGJvb2wgc2hhZG93SXNDbGVhcmVkKGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9h
dCBzaGFkb3dCbHVyKQotewotICAgIHJldHVybiBzaGFkb3dPZmZzZXQgPT0gRmxvYXRTaXplKCkg
JiYgIXNoYWRvd0JsdXI7Ci19Ci0KLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjp1cGRhdGVTaGFk
b3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRvd0JsdXIsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyBpZiBub2JvZHkgaGFzIGFueSBzaGFkb3dzLgotICAgIGlmIChzaGFk
b3dJc0NsZWFyZWQoc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyKSAmJiBzaGFkb3dJc0NsZWFyZWQo
bV9jdXJyZW50U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBuZXdTdGF0ZTsK
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBzdGF0ZUNoYW5nZUZs
YWdzOwotCi0gICAgaWYgKHNoYWRvd09mZnNldCAhPSBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zm
c2V0IHx8IHNoYWRvd0JsdXIgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmJsdXIgfHwgc2hhZG93
Q29sb3IgIT0gbV9jdXJyZW50U3RhdGUuc2hhZG93LmNvbG9yKSB7Ci0gICAgICAgIG5ld1N0YXRl
LnNoYWRvd09mZnNldCA9IHNoYWRvd09mZnNldDsKLSAgICAgICAgbmV3U3RhdGUuc2hhZG93Qmx1
ciA9IHNoYWRvd0JsdXI7Ci0gICAgICAgIG5ld1N0YXRlLnNoYWRvd0NvbG9yID0gc2hhZG93Q29s
b3I7Ci0gICAgICAgIHN0YXRlQ2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dDaGFuZ2UpOwotICAgIH0KLSAgICBpZiAoc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgIT0g
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXM6OlVuc3BlY2lmaWVkICYmIChzaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtczo6WWVzKSAhPSBtX2N1cnJlbnRTdGF0
ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICBuZXdTdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtczo6WWVzKTsKLSAgICAgICAgc3RhdGVDaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKLSAgICB9Ci0gICAg
aWYgKHN0YXRlQ2hhbmdlRmxhZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9v
d25lci5kaWRVcGRhdGVTdGF0ZShuZXdTdGF0ZSwgc3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBt
X2N1cnJlbnRTdGF0ZS5zaGFkb3cub2Zmc2V0ID0gc2hhZG93T2Zmc2V0OwotICAgIG1fY3VycmVu
dFN0YXRlLnNoYWRvdy5ibHVyID0gc2hhZG93Qmx1cjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFk
b3cuY29sb3IgPSBzaGFkb3dDb2xvcjsKLSAgICBtX2N1cnJlbnRTdGF0ZS5zaGFkb3cuaWdub3Jl
VHJhbnNmb3JtcyA9IChzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9PSBTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtczo6WWVzKTsKLX0KLQotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnVwZGF0ZVNoYWRv
dyhDR1N0eWxlUmVmIHN0eWxlKQorc3RhdGljIHZvaWQgc2V0RHJvcFNoYWRvdyhHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgQ0dTdHlsZVJlZiBzdHlsZSkKIHsKICAgICBpZiAo
Q0dTdHlsZUdldFR5cGUoc3R5bGUpICE9IGtDR1N0eWxlU2hhZG93KSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBTdXBwb3J0IG1vcmUga2luZHMgb2YgQ0dTdHlsZXMuCi0gICAgICAgIHVwZGF0ZVNoYWRv
dyh7MCwgMH0sIDAsIENvbG9yKCksIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOjpVbnNwZWNpZmll
ZCk7CisgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5jbGVhclNoYWRvdygpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0yNjEsMjAgKzEzNCw5IEBAIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjp1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZiBzdHlsZSkKICAgICBhdXRvIHJhZCA9IGRlZzJy
YWQoc2hhZG93U3R5bGUuYXppbXV0aCAtIDE4MCk7CiAgICAgYXV0byBzaGFkb3dPZmZzZXQgPSBG
bG9hdFNpemUoc3RkOjpjb3MocmFkKSwgc3RkOjpzaW4ocmFkKSkgKiBzaGFkb3dTdHlsZS5oZWln
aHQ7CiAgICAgYXV0byBzaGFkb3dDb2xvciA9IENHU3R5bGVHZXRDb2xvcihzdHlsZSk7Ci0gICAg
dXBkYXRlU2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93U3R5bGUucmFkaXVzLCBDb2xvcjo6Y3Jl
YXRlQW5kUHJlc2VydmVDb2xvclNwYWNlKHNoYWRvd0NvbG9yKSwgU2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM6Olllcyk7Ci19CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRCZWdpbkxh
eWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZSwgQ0dSZWN0KQotewot
ICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgYXV0byBhbHBoYSA9
IENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKTsKLSAgICBtX293bmVyLmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoYWxwaGEpOwotfQotCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRW5kTGF5
ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlKQotewotICAgIHVwZGF0
ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7Ci0gICAgbV9vd25lci5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOworICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93
T2Zmc2V0LCBzdGF0aWNfY2FzdDxmbG9hdD4oc2hhZG93U3R5bGUucmFkaXVzKSwgQ29sb3I6OmNy
ZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzaGFkb3dDb2xvcikgfSk7CisgICAgZGVzdGluYXRp
b25Db250ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRydWUpOwogfQogCiBzdGF0aWMg
VmVjdG9yPENHU2l6ZT4gY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhjb25zdCBDR1BvaW50
IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiB0ZXh0
TWF0cml4KQpAQCAtMjkwLDE4ICsxNTIsMTggQEAgc3RhdGljIFZlY3RvcjxDR1NpemU+IGNvbXB1
dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMoY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2kKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJh
d0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUsIGNvbnN0IENH
QWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaCBnbHlwaHNbXSwgY29uc3QgQ0dQb2ludCBw
b3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdHbHlwaHMoQ0dHU3RhdGVSZWYgZ3N0YXRlLCBjb25zdCBDR0dseXBoIGdseXBoc1tdLCBj
b25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpCiB7CiAgICAgQVNTRVJUX0lN
UExJRVMobV9kZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpO
bywgbV9vcmlnaW5hbEZvbnQpOwogCi0gICAgaWYgKCFjb3VudCkKKyAgICBpZiAoIWNvdW50IHx8
IENHR1N0YXRlR2V0QWxwaGEoZ3N0YXRlKSA8PSAwKQogICAgICAgICByZXR1cm47CiAKICAgICBD
R0ZvbnRSZWYgdXNlZEZvbnQgPSBDR0dTdGF0ZUdldEZvbnQoZ3N0YXRlKTsKICAgICBpZiAobV9k
ZXJpdmVGb250RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyAmJiB1c2Vk
Rm9udCAhPSBhZG9wdENGKENURm9udENvcHlHcmFwaGljc0ZvbnQobV9vcmlnaW5hbEZvbnQtPnBs
YXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBudWxscHRyKSkuZ2V0KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHVwZGF0ZUNUTSgqQ0dHU3RhdGVHZXRDVE0oZ3N0YXRlKSk7CisgICAgbV9kZXN0aW5h
dGlvbkNvbnRleHQuc2V0Q1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKIAogICAgIC8vIFdl
IHdhbnQgdGhlIHJlcGxheWVyJ3MgQ1RNIGFuZCB0ZXh0IG1hdHJpeCB0byBtYXRjaCB0aGUgY3Vy
cmVudCBDVE0gYW5kIHRleHQgbWF0cml4LgogICAgIC8vIFRoZSBjdXJyZW50IHRleHQgbWF0cml4
IGlzIGEgY29uY2F0ZW5hdGlvbiBvZiB3aGF0ZXZlciBXZWJLaXQgc2V0cyBpdCB0byBhbmQgd2hh
dGV2ZXIKQEAgLTMyNCwxMyArMTg2LDE2IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNv
cmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAg
ICAgIGludmVyc2VDVE1GaXh1cCA9IGludmVyc2UudmFsdWUoKTsKICAgICBlbHNlCiAgICAgICAg
IGN0bUZpeHVwID0gQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgbV9vd25lci5jb25jYXRDVE0oY3Rt
Rml4dXApOworCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RNKGN0bUZpeHVwKTsK
IAogICAgIGF1dG8gZmlsbENvbG9yID0gQ0dHU3RhdGVHZXRGaWxsQ29sb3IoZ3N0YXRlKTsKKyAg
ICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNl
cnZlQ29sb3JTcGFjZShmaWxsQ29sb3IpKTsKKwogICAgIGF1dG8gc3Ryb2tlQ29sb3IgPSBDR0dT
dGF0ZUdldFN0cm9rZUNvbG9yKGdzdGF0ZSk7Ci0gICAgdXBkYXRlRmlsbENvbG9yKENvbG9yOjpj
cmVhdGVBbmRQcmVzZXJ2ZUNvbG9yU3BhY2UoZmlsbENvbG9yKSk7Ci0gICAgdXBkYXRlU3Ryb2tl
Q29sb3IoQ29sb3I6OmNyZWF0ZUFuZFByZXNlcnZlQ29sb3JTcGFjZShzdHJva2VDb2xvcikpOwot
ICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOworICAgIG1fZGVzdGlu
YXRpb25Db250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yOjpjcmVhdGVBbmRQcmVzZXJ2ZUNvbG9y
U3BhY2Uoc3Ryb2tlQ29sb3IpKTsKKworICAgIHNldERyb3BTaGFkb3cobV9kZXN0aW5hdGlvbkNv
bnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAgICBhdXRvIGZvbnRTaXplID0g
Q0dHU3RhdGVHZXRGb250U2l6ZShnc3RhdGUpOwogICAgIFJlZiBmb250ID0gbV9kZXJpdmVGb250
RnJvbUNvbnRleHQgPT0gRGVyaXZlRm9udEZyb21Db250ZXh0OjpObyA/ICptX29yaWdpbmFsRm9u
dCA6IEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0
aEdyYXBoaWNzRm9udCh1c2VkRm9udCwgZm9udFNpemUsIG51bGxwdHIsIG51bGxwdHIpKSwgZm9u
dFNpemUpKTsKQEAgLTM0NSwzMCArMjEwLDM4IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpy
ZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAg
ICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjMyOTE3PiAoYERyYXdHbHlw
aHNSZWNvcmRlcmAgc2hvdWxkIGJlIGFibGUgdG8gcmVjb3JkK3JlcGxheSB2ZXJ0aWNhbCB0ZXh0
KQogICAgIH0KIAotICAgIG1fb3duZXIuZHJhd0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlw
aHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3VudCwgdGV4dE1h
dHJpeCkuZGF0YSgpLCBjb3VudCwgdGV4dE1hdHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBt
X3Ntb290aGluZ01vZGUpOwotCi0gICAgbV9vd25lci5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVw
KTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5kcmF3R2x5cGhzQW5kQ2FjaGVGb250KGZvbnQs
IGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCB0
ZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCB0ZXh0TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1sw
XSksIG1fc21vb3RoaW5nTW9kZSk7CisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuY29uY2F0Q1RN
KGludmVyc2VDVE1GaXh1cCk7CiB9CiAKLXZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRE
cmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlLCBDR1JlY3Qg
cmVjdCwgQ0dJbWFnZVJlZiBjZ0ltYWdlKQordm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdJbWFnZShDR0dTdGF0ZVJlZiBnc3RhdGUsIENHUmVjdCByZWN0LCBDR0ltYWdlUmVmIGNn
SW1hZ2UpCiB7Ci0gICAgdXBkYXRlQ1RNKCpDR0dTdGF0ZUdldENUTShnc3RhdGUpKTsKLSAgICB1
cGRhdGVTaGFkb3coQ0dHU3RhdGVHZXRTdHlsZShnc3RhdGUpKTsKKyAgICBtX2Rlc3RpbmF0aW9u
Q29udGV4dC5zZXRDVE0oKkNHR1N0YXRlR2V0Q1RNKGdzdGF0ZSkpOworICAgIHNldERyb3BTaGFk
b3cobV9kZXN0aW5hdGlvbkNvbnRleHQsIENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKICAg
ICAvLyBDb3JlIEdyYXBoaWNzIGFzc3VtZXMgYSAieSB1cCIgY29vcmRpbmF0ZSBzeXN0ZW0sIGJ1
dCBpbiBXZWJLaXQsIHdlIHVzZSBhICJ5LWRvd24iIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgIC8v
IFRoaXMgbWVhbnMgdGhhdCBXZWJLaXQncyBkcmF3aW5nIHJvdXRpbmVzIChHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZSgpKSBpbnRlbnRpb25hbGx5IGRyYXcgaW1hZ2VzIHVwc2lkZS1kb3duIGZy
b20gQ29yZSBHcmFwaGljcydzIHBvaW50IG9mIHZpZXcuCiAgICAgLy8gKFRoZXJlJ3MgYSB5LWZs
aXAgaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZSgpLikKICAgICAvLyBUaGUgcmVjdCBoYXMgdGhlIHJpZ2h0IGJvdW5kcywgYnV0IHdlIG5lZWQg
dG8gdHJhbnNmb3JtIGZyb20gQ0cncyBjb29yZGluYXRlIHN5c3RlbSB0byBXZWJLaXQncyBieSBw
ZXJmb3JtaW5nIG91ciBvd24geS1mbGlwIHNvIGltYWdlcyBhcmUgZHJhd24gdGhlIHJpZ2h0LXNp
ZGUtdXAuCiAgICAgLy8gV2UgZG8gdGhpcyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGUgdHdv
IEFQSXMsIHdoaWNoIGlzIHJpZ2h0IGhlcmUuCi0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgcmVj
dC5zaXplLmhlaWdodCArIDIgKiByZWN0Lm9yaWdpbi55KTsKLSAgICBtX293bmVyLnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQudHJhbnNsYXRlKDAs
IHJlY3Quc2l6ZS5oZWlnaHQgKyAyICogcmVjdC5vcmlnaW4ueSk7CisgICAgbV9kZXN0aW5hdGlv
bkNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgCiAgICAgYXV0byBpbWFnZSA9
IE5hdGl2ZUltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5kcmF3TmF0aXZlSW1h
Z2UoKmltYWdlLCBpbWFnZS0+c2l6ZSgpLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9
LCBpbWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9u
OjpPcmlnaW5Ub3BMZWZ0IH0pOwotCisgICAgbV9kZXN0aW5hdGlvbkNvbnRleHQuZHJhd05hdGl2
ZUltYWdlKCppbWFnZSwgaW1hZ2UtPnNpemUoKSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9hdFJlY3Qg
eyB7IH0sIGltYWdlLT5zaXplKCkgfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVu
dGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOworICAgIAogICAgIC8vIFVuZG8gdGhlIGFib3ZlIHkt
ZmxpcCB0byByZXN0b3JlIHRoZSBjb250ZXh0LgotICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXpl
KDEsIC0xKSk7Ci0gICAgbV9vd25lci50cmFuc2xhdGUoMCwgLShyZWN0LnNpemUuaGVpZ2h0ICsg
MiAqIHJlY3Qub3JpZ2luLnkpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShGbG9h
dFNpemUoMSwgLTEpKTsKKyAgICBtX2Rlc3RpbmF0aW9uQ29udGV4dC50cmFuc2xhdGUoMCwgLShy
ZWN0LnNpemUuaGVpZ2h0ICsgMiAqIHJlY3Qub3JpZ2luLnkpKTsKK30KKwordm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNWR1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMs
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNt
b290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAgICBzZXRJbnRlcm5hbEZvbnQoZm9udCwg
c21vb3RoaW5nTW9kZSk7CisgICAgCisgICAgYXV0byBvcmlnaW5hbFN0YXRlID0gcHJlcGFyZUlu
dGVybmFsQ29udGV4dCgpOworICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxD
b250ZXh0LCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNt
b290aGluZ01vZGUpOworICAgIHJlc3RvcmVEZXN0aW5hdGlvbkNvbnRleHQob3JpZ2luYWxTdGF0
ZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3T1RTVkdSdW4oY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0zNzksMjUg
KzI1MiwxOSBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd09UU1ZHUnVuKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAgICAgICAgIGF1dG8gYm91bmRzID0g
Zm9udC5ib3VuZHNGb3JHbHlwaChnbHlwaHNbaV0pOwogCiAgICAgICAgIC8vIENyZWF0ZSBhIGxv
Y2FsIEltYWdlQnVmZmVyIGJlY2F1c2UgZGVjb2RpbmcgdGhlIFNWRyBmb250cyBoYXMgdG8gaGFw
cGVuIGluIFdlYlByb2Nlc3MuCi0gICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9vd25l
ci5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoYm91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9kOjpMb2NhbCkpIHsKKyAgICAgICAgaWYgKGF1dG8gaW1h
Z2VCdWZmZXIgPSBtX2Rlc3RpbmF0aW9uQ29udGV4dC5jcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIo
Ym91bmRzLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUmVuZGVyaW5nTWV0aG9kOjpM
b2NhbCkpIHsKKyAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKICAgICAgICAgICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKGltYWdlQnVmZmVy
LT5jb250ZXh0KCksIGZvbnQsIGdseXBocyArIGksIGFkdmFuY2VzICsgaSwgMSwgRmxvYXRQb2lu
dCgpLCBzbW9vdGhpbmdNb2RlKTsKIAogICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9u
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKTsKICAgICAgICAgICAgIGRlc3RpbmF0aW9u
UmVjdC5tb3ZlQnkocGVuUG9zaXRpb24pOwotICAgICAgICAgICAgbV9vd25lci5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOworICAgICAgICAgICAgbV9kZXN0
aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25S
ZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIHBlblBvc2l0aW9uLm1vdmUoc2l6ZShhZHZhbmNl
c1tpXSkpOwogICAgIH0KIH0KIAotdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOb25PVFNW
R1J1bihjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKLXsKLSAgICBwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGZvbnQsIHNtb290aGluZ01vZGUpOwot
ICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKG1faW50ZXJuYWxDb250ZXh0LCBmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwotICAg
IGNvbmNsdWRlSW50ZXJuYWxDb250ZXh0KCk7Ci19Ci0KIHZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpkcmF3QnlTcGxpdHRpbmdJbnRvT1RTVkdBbmROb25PVFNWR1J1bnMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0
UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7CiAgICAgYXV0byBvdHN2
Z0dseXBocyA9IGZvbnQuZmluZE9UU1ZHR2x5cGhzKGdseXBocywgbnVtR2x5cGhzKTsKQEAgLTQ0
MCw3ICszMDcsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0J5U3BsaXR0aW5nSW50
b09UU1ZHQW5kTm9uT1RTVkdSdW5zKGNvbnN0IEZvbnQmIGZvbgogdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCiB7CiAgICAgaWYgKG1fZGVjb25zdHJ1Y3REcmF3R2x5cGhzID09IERl
Y29uc3RydWN0RHJhd0dseXBoczo6Tm8pIHsKLSAgICAgICAgbV9vd25lci5kcmF3R2x5cGhzQW5k
Q2FjaGVGb250KGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwg
c21vb3RoaW5nTW9kZSk7CisgICAgICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdHbHlwaHNB
bmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFydFBvaW50
LCBzbW9vdGhpbmdNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDUzLDE1ICsz
MjAsMTcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdOYXRpdmVUZXh0KENURm9udFJl
ZiBmb250LCBDR0Zsb2F0IGZvbnRTaXplLCBDVExpbmUKIHsKICAgICBBU1NFUlQobV9kZWNvbnN0
cnVjdERyYXdHbHlwaHMgPT0gRGVjb25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogCi0gICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihtX293bmVyKTsKKyAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHNhdmVyKG1fZGVzdGluYXRpb25Db250ZXh0KTsKIAotICAgIG1fb3duZXIu
dHJhbnNsYXRlKGxpbmVSZWN0Lm9yaWdpbi54LCBsaW5lUmVjdC5vcmlnaW4ueSArIGxpbmVSZWN0
LnNpemUuaGVpZ2h0KTsKLSAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAg
IG1fZGVzdGluYXRpb25Db250ZXh0LnRyYW5zbGF0ZShsaW5lUmVjdC5vcmlnaW4ueCwgbGluZVJl
Y3Qub3JpZ2luLnkgKyBsaW5lUmVjdC5zaXplLmhlaWdodCk7CisgICAgbV9kZXN0aW5hdGlvbkNv
bnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAKLSAgICBwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRhKGZvbnQsIGZvbnRTaXplKSksIEZvbnRT
bW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkKTsKKyAgICBzZXRJbnRlcm5hbEZvbnQo
Rm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgZm9udFNpemUpKSwgRm9udFNtb290
aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQpOworICAgIAorICAgIGF1dG8gb3JpZ2luYWxT
dGF0ZSA9IHByZXBhcmVJbnRlcm5hbENvbnRleHQoKTsKICAgICBDR0NvbnRleHRTZXRUZXh0UG9z
aXRpb24obV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAwLCAwKTsKICAgICBD
VExpbmVEcmF3KGxpbmUsIG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0g
ICAgY29uY2x1ZGVJbnRlcm5hbENvbnRleHQoKTsKKyAgICByZXN0b3JlRGVzdGluYXRpb25Db250
ZXh0KG9yaWdpbmFsU3RhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2Fk
ZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCmluZGV4IDUxMWUwOWI5NmNlZjAzMjUwOTBlMjNhZjkx
NGFlMzVmMmFiOGVkMmUuLmU1MzRjYzU1YWYyNmI3ZmI4MjgwZTYzYjdkYzI1YTNkNGE0MTYzNzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0Zv
bnRDYXNjYWRlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC0xNTIsMjUgKzE1MiwyNyBA
QCBzdGF0aWMgdm9pZCBmaWxsVmVjdG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMoVmVjdG9y
PENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgc2hvd0ds
eXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9u
dCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dT
aXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4
dE1hdHJpeCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBj
b3VudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXh0TWF0cml4KQogewogICAgIGlmICghY291
bnQpCiAgICAgICAgIHJldHVybjsKIAorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRm
b3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisKICAgICBWZWN0b3I8Q0dQb2ludCwgMjU2
PiBwb3NpdGlvbnMoY291bnQpOwogICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9
PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7Ci0gICAgICAgIFNjb3BlZFRleHRNYXRyaXgg
c2F2ZWRNYXRyaXgoY29tcHV0ZVZlcnRpY2FsVGV4dE1hdHJpeChmb250LCB0ZXh0TWF0cml4KSwg
Y29udGV4dCk7CisgICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgoY29tcHV0ZVZl
cnRpY2FsVGV4dE1hdHJpeChmb250LCB0ZXh0TWF0cml4KSwgY2dDb250ZXh0KTsKIAogICAgICAg
ICBWZWN0b3I8Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhjb3VudCk7CiAgICAgICAgIENURm9u
dEdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
Z2x5cGhzLCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7CiAKICAgICAgICAgYXV0byBhc2Nl
bnREZWx0YSA9IGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2Vs
aW5lKSAtIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpOwotICAgICAgICBmaWxsVmVj
dG9yV2l0aFZlcnRpY2FsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjb250ZXh0LCB0cmFuc2xh
dGlvbnMuZGF0YSgpLCBhZHZhbmNlcywgY291bnQsIHBvaW50LCBhc2NlbnREZWx0YSk7Ci0gICAg
ICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0
aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICAgICAgZmlsbFZlY3RvcldpdGhWZXJ0
aWNhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY2dDb250ZXh0LCB0cmFuc2xhdGlvbnMuZGF0
YSgpLCBhZHZhbmNlcywgY291bnQsIHBvaW50LCBhc2NlbnREZWx0YSk7CisgICAgICAgIENURm9u
dERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRh
KCksIGNvdW50LCBjZ0NvbnRleHQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpbGxWZWN0b3JX
aXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgYWR2YW5jZXMs
IGNvdW50LCBwb2ludCk7Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0
Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICAg
ICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjZ0Nv
bnRleHQsIGFkdmFuY2VzLCBjb3VudCwgcG9pbnQpOworICAgICAgICBDVEZvbnREcmF3R2x5cGhz
KHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwg
Y2dDb250ZXh0KTsKICAgICB9CiB9CiAKQEAgLTI0MiwxMCArMjQ0LDcgQEAgdm9pZCBGb250Q2Fz
Y2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEcKICAgICBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOwogICAgIENH
Q29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAKLSAg
ICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29s
b3Igc2hhZG93Q29sb3I7Ci0gICAgY29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dCbHVyLCBzaGFkb3dDb2xvcik7CisgICAgYXV0byBkcm9wU2hhZG93ID0gY29udGV4dC5kcm9w
U2hhZG93KCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQuZ2V0
Q1RNKCk7CiAgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9s
ZE9mZnNldCgpOwpAQCAtMjU4LDI5ICsyNTcsMjkgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQu
dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9y
LmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBG
b250KCkgJiYgKCFjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENU
TS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQudGV4
dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIGRyb3BTaGFkb3cuY29s
b3IuaXNWYWxpZCgpICYmICFkcm9wU2hhZG93LmJsdXJSYWRpdXMgJiYgIXBsYXRmb3JtRGF0YS5p
c0NvbG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
IHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNv
bnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykg
ewogICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiBy
ZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNp
bmcuCiAgICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENv
bG9yID0gY29udGV4dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9y
ID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhh
QXNGbG9hdCgpKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gZHJvcFNoYWRvdy5j
b2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkp
OwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAg
ICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwor
ICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIGRyb3BTaGFkb3cub2Zmc2V0
LndpZHRoKCk7CiAgICAgICAgIC8vIElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMs
IHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRv
d24gaXMgbmVnYXRpdmUuCi0gICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsg
c2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
KSA/IC0xIDogMSk7Ci0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChz
aGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5j
ZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0g
cG9pbnQueSgpICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZh
bmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNvbnRleHQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGlmIChz
eW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhG
bG9hdFBvaW50KHNoYWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkp
LCBmb250LCBjZ0NvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJp
eCk7CisgICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93
VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNvbnRleHQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAgICAgICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7CiAgICAgfQogCi0gICAgc2hvd0dseXBoc1dpdGhB
ZHZhbmNlcyhwb2ludCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlw
aHMsIHRleHRNYXRyaXgpOworICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQs
IGNvbnRleHQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAKICAg
ICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSks
IGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCB0ZXh0TWF0cml4
KTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSAr
IHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNvbnRleHQsIGdseXBocywg
YWR2YW5jZXMsIG51bUdseXBocywgdGV4dE1hdHJpeCk7CiAKICAgICBpZiAoaGFzU2ltcGxlU2hh
ZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIs
IHNoYWRvd0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KGRyb3BTaGFkb3cp
OwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKHNob3VsZFNtb290aEZvbnRz
ICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3Qu
Y3BwCmluZGV4IDJlMmY0ZjRmMmNiNTVkMzY1ZTVhZTM5OTMyNWQwNWYyYzE3MzYxZmQuLmNjZjQw
Y2VhNjJiMTY3NDM2NmQ3NDg0MTYyYjFiYzRlOTM3NzA3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0LmNwcApAQCAtOTAsMTAgKzkwLDcgQEAgYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZv
ckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgICAgIGlmICgh
KGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMpKSB7CiAgICAg
ICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93LCBvbmx5IGRyb3AgdGhlIGl0ZW0gaWYgdGhlIG9u
bHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4KLSAgICAgICAgICAg
IGlmIChzdGF0ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlQ2hh
bmdlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQorICAgICAgICAgICAgaWYgKHN0YXRlSXRlbS5zdGF0ZSgp
LmNoYW5nZXMoKSA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwpAQCAtMjAyLDE2ICsxOTksNiBAQCB2b2lkIERpc3BsYXlMaXN0Ojph
cHBlbmQoSXRlbUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPFNhdmU+KGl0ZW0u
Z2V0PFNhdmU+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIHJldHVy
biBhcHBlbmQ8UmVzdG9yZT4oaXRlbS5nZXQ8UmVzdG9yZT4oKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gYXBwZW5kPFRyYW5zbGF0ZT4oaXRlbS5nZXQ8
VHJhbnNsYXRlPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVy
biBhcHBlbmQ8Um90YXRlPihpdGVtLmdldDxSb3RhdGU+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNjYWxlOgotICAgICAgICByZXR1cm4gYXBwZW5kPFNjYWxlPihpdGVtLmdldDxTY2FsZT4oKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBhcHBl
bmQ8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVtLmdl
dDxTZXRDVE0+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAg
ICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0uZ2V0PFNldElubGlu
ZUZpbGxDb2xvcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6
CkBAIC0yMjAsMTYgKzIwNyw2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxl
IGl0ZW0pCiAgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtLmdl
dDxTZXRTdHJva2VUaGlja25lc3M+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgog
ICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0YXRlPihpdGVtLmdldDxTZXRTdGF0ZT4oKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRM
aW5lQ2FwPihpdGVtLmdldDxTZXRMaW5lQ2FwPigpKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lRGFzaD4oaXRlbS5nZXQ8U2V0
TGluZURhc2g+KCkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBy
ZXR1cm4gYXBwZW5kPFNldExpbmVKb2luPihpdGVtLmdldDxTZXRMaW5lSm9pbj4oKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRN
aXRlckxpbWl0PihpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGVhclNoYWRvdz4oaXRlbS5n
ZXQ8Q2xlYXJTaGFkb3c+KCkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHJl
dHVybiBhcHBlbmQ8Q2xpcD4oaXRlbS5nZXQ8Q2xpcD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dDoKQEAgLTI3NCw4ICsyNTEsNiBAQCB2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRl
bUhhbmRsZSBpdGVtKQogICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9yPihp
dGVtLmdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbENvbXBvc2l0
ZWRSZWN0PihpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOwogICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUm91bmRlZFJl
Y3Q+KGl0ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5jcHAKaW5kZXggMGMyNTIyNjRhZjQxNjY1NjIxNzUxNjA0MTA0MmE4YmRk
M2JmYWJiNS4uZGVmY2U4NGVmMzU4N2JlYTA2ZDIwN2RiNWI4MDJhYTdjODI1NjUwYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcApAQCAtMzQs
NyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3Qgewog
CiBEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDogbV9jb250ZXh0
KG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxv
Z2ljYWxTaXplKSwgaW5pdGlhbENUTSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0LCBG
bG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0pCiB7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggNDU3NzU1MTg5YmRhZGQ3
MTlkMjQ1YTRlNmQyYzgxYmRkYjFmN2RmMy4uMGRiMTUwMzk2MDQwMzJmMzMwM2ZiY2I2NTIxZTUz
ZTRlMzRmOTE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHAKQEAgLTUyLDIxICs1Miw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CiAgICAgICAgIGdldDxS
ZXN0b3JlPigpLmFwcGx5KGNvbnRleHQpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVt
VHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBnZXQ8VHJhbnNsYXRlPigpLmFwcGx5KGNvbnRleHQp
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBn
ZXQ8Um90YXRlPigpLmFwcGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGdldDxTY2FsZT4oKS5hcHBseShjb250ZXh0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAg
ICBnZXQ8Q29uY2F0ZW5hdGVDVE0+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGdldDxTZXRDVE0+KCkuYXBwbHko
Y29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVG
aWxsQ29sb3I6CiAgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkuYXBwbHkoY29udGV4
dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc5LDIxICs2NCw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
YXRlOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIGdldDxTZXRMaW5lQ2FwPigpLmFw
cGx5KGNvbnRleHQpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5hcHBseShjb250ZXh0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBnZXQ8
U2V0TGluZUpvaW4+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICBnZXQ8U2V0TWl0ZXJMaW1pdD4oKS5h
cHBseShjb250ZXh0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFy
U2hhZG93OgotICAgICAgICBnZXQ8Q2xlYXJTaGFkb3c+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgICAgICBnZXQ8Q2xpcD4o
KS5hcHBseShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTYwLDkgKzEzMCw2IEBAIHZv
aWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgogICAgICAgICBnZXQ8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+KCkuYXBwbHkoY29udGV4dCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUm91bmRlZFJlY3Q6CiAgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkuYXBwbHko
Y29udGV4dCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI3MCw5ICsyMzcsNiBAQCB2b2lkIEl0ZW1I
YW5kbGU6OmRlc3Ryb3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgogICAgICAgICBn
ZXQ8RHJhd1BhdGg+KCkufkRyYXdQYXRoKCk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+KCkufkZpbGxDb21wb3NpdGVkUmVjdCgpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIGdldDxGaWxsUGF0aD4oKS5+RmlsbFBhdGgoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjg4LDkgKzI1Miw2IEBAIHZvaWQgSXRlbUhhbmRsZTo6ZGVz
dHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgogICAgICAgICBnZXQ8
RmlsbFJvdW5kZWRSZWN0PigpLn5GaWxsUm91bmRlZFJlY3QoKTsKICAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBnZXQ8U2V0TGluZURhc2g+
KCkuflNldExpbmVEYXNoKCk7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRTdGF0ZToKICAgICAgICAgZ2V0PFNldFN0YXRlPigpLn5TZXRTdGF0ZSgpOwogICAgICAgICBy
ZXR1cm47CkBAIC0zMTQsOSArMjc1LDYgQEAgdm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsZWFyUmVjdD46OnZhbHVlKTsKICAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclNoYWRvdz46OnZhbHVlKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsaXA+Ojp2YWx1ZSk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTMyNiw5ICsyODQsNiBAQCB2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ry
b3koKQogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0ltYWdlQnVmZmVyOgogICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwVG9JbWFnZUJ1ZmZl
cj46OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVu
YXRlQ1RNOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxDb25jYXRlbmF0ZUNUTT46OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTM4NywzMyArMzQyLDE1IEBAIHZvaWQg
SXRlbUhhbmRsZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UmVzdG9yZT46
OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Um90YXRl
Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKICAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2F2ZT46
OnZhbHVlKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTY2FsZT46
OnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0Q1RN
Pjo6dmFsdWUpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbENvbG9yOgogICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxTZXRJbmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lU3Ryb2tlQ29sb3I+
Ojp2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2Fw
OgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
ZXRMaW5lQ2FwPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUpvaW46Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFNldExpbmVKb2luPjo6dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TWl0ZXJMaW1pdD46OnZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKICAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0U3Ryb2tlVGhp
Y2tuZXNzPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47CkBAIC00MzcsOSArMzc0LDYgQEAgdm9p
ZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VMaW5lOgog
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTdHJv
a2VMaW5lPjo6dmFsdWUpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJh
bnNsYXRlOgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxUcmFuc2xhdGU+Ojp2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKQEAg
LTUwMSw4ICs0MzUsNiBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1U
eXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gY29weUlu
dG88RHJhd1BhdHRlcm4+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3UGF0aDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPERyYXdQYXRoPihpdGVtT2Zmc2V0LCAq
dGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBy
ZXR1cm4gY29weUludG88RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxGaWxs
UGF0aD4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aENvbG9yOgpAQCAtNTEzLDggKzQ0NSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRl
bVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAgICAgICAgIHJl
dHVybiBjb3B5SW50bzxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbU9mZnNldCwgKnRoaXMp
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIGNv
cHlJbnRvPEZpbGxSb3VuZGVkUmVjdD4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gY29weUludG88U2V0TGluZURhc2g+
KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPFNldFN0YXRlPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKQEAgLTUzMSwxNiArNDYxLDEyIEBAIGJvb2wgSXRlbUhh
bmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihp
dGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgogICAgICAg
ICByZXR1cm4gY29weUludG88Q2xlYXJSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxDbGVhclNo
YWRvdz4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAg
ICAgIHJldHVybiBjb3B5SW50bzxDbGlwPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dDoKICAgICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBPdXQ+KGl0ZW1P
ZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKICAg
ICAgICAgcmV0dXJuIGNvcHlJbnRvPENsaXBUb0ltYWdlQnVmZmVyPihpdGVtT2Zmc2V0LCAqdGhp
cyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBj
b3B5SW50bzxDb25jYXRlbmF0ZUNUTT4oaXRlbU9mZnNldCwgKnRoaXMpOwogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CiAgICAgICAgIHJldHVybiBjb3B5SW50
bzxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtT2Zmc2V0LCAqdGhpcyk7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CkBAIC01NzMsMjQgKzQ5OSwxMiBAQCBib29sIEl0ZW1I
YW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFuZGxlIGRlc3RpbmF0aW9u
KSBjb25zdAogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKICAgICAgICAgcmV0
dXJuIGNvcHlJbnRvPFJlc3RvcmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxSb3RhdGU+KGl0ZW1PZmZzZXQs
ICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgogICAgICAgICByZXR1cm4gY29weUlu
dG88U2F2ZT4oaXRlbU9mZnNldCwgKnRoaXMpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgot
ICAgICAgICByZXR1cm4gY29weUludG88U2NhbGU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRDVE0+KGl0
ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW1PZmZzZXQs
ICp0aGlzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKICAgICAg
ICAgcmV0dXJuIGNvcHlJbnRvPFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtT2Zmc2V0LCAqdGhp
cyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIGNvcHlJ
bnRvPFNldExpbmVDYXA+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIGNvcHlJbnRvPFNldExpbmVKb2luPihpdGVtT2Zm
c2V0LCAqdGhpcyk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAg
cmV0dXJuIGNvcHlJbnRvPFNldE1pdGVyTGltaXQ+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CiAgICAgICAgIHJldHVybiBjb3B5SW50
bzxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW1PZmZzZXQsICp0aGlzKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VFbGxpcHNlOgpAQCAtNjA3LDggKzUyMSw2IEBAIGJvb2wgSXRlbUhhbmRsZTo6
c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0
CiAgICAgICAgIHJldHVybiBjb3B5SW50bzxTdHJva2VSZWN0PihpdGVtT2Zmc2V0LCAqdGhpcyk7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToKICAgICAgICAgcmV0dXJuIGNvcHlJbnRv
PFN0cm9rZUxpbmU+KGl0ZW1PZmZzZXQsICp0aGlzKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFu
c2xhdGU6Ci0gICAgICAgIHJldHVybiBjb3B5SW50bzxUcmFuc2xhdGU+KGl0ZW1PZmZzZXQsICp0
aGlzKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbVR5cGUuY3BwCmluZGV4IDU0ZWExYzg2ODJjMDc0NDJlMmU4NDE0YjczMjhhYTMy
NDgwMjVhNzUuLmJhMGQ5NTFjMjJjZjQ5Y2U0MTdlMzM1NTNiMDBlMGE1YjhhYjIwOTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKQEAgLTM4LDE2ICszOCw2IEBA
IHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKICAgICAgICAg
cmV0dXJuIHNpemVvZihTYXZlKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgogICAgICAg
ICByZXR1cm4gc2l6ZW9mKFJlc3RvcmUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToK
LSAgICAgICAgcmV0dXJuIHNpemVvZihUcmFuc2xhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJv
dGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihSb3RhdGUpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNjYWxlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNjYWxlKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihDb25jYXRlbmF0ZUNUTSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKFNldENU
TSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgogICAgICAgICByZXR1
cm4gc2l6ZW9mKFNldElubGluZUZpbGxDb2xvcik7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lU3Ryb2tlQ29sb3I6CkBAIC01NiwxNiArNDYsNiBAQCBzdGF0aWMgc2l6ZV90IHNpemVPZkl0
ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAgICAgICAgIHJldHVybiBzaXplb2YoU2V0U3Ryb2tl
VGhpY2tuZXNzKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgcmV0dXJu
IHNpemVvZihTZXRTdGF0ZSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihTZXRMaW5lQ2FwKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
RGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lRGFzaCk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZUpvaW4pOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
U2V0TWl0ZXJMaW1pdCk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoQ2xlYXJTaGFkb3cpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAg
ICAgICAgIHJldHVybiBzaXplb2YoQ2xpcCk7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoK
QEAgLTExMCw4ICs5MCw2IEBAIHN0YXRpYyBzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5
cGUgdHlwZSkKICAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhDb2xvcik7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHJldHVybiBzaXpl
b2YoRmlsbFJlY3RXaXRoR3JhZGllbnQpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3Np
dGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsQ29tcG9zaXRlZFJlY3QpOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKICAgICAgICAgcmV0dXJuIHNpemVvZihG
aWxsUm91bmRlZFJlY3QpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOgpAQCAtMTgyLDI4ICsxNjAsMTggQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5
cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKICAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CiAjZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clNoYWRvdzoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBPdXQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZmZXI6CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpGbHVz
aENvbnRleHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICBjYXNlIEl0ZW1UeXBl
OjpSb3RhdGU6CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
Y2FsZToKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
OgotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZURhc2g6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TWl0ZXJMaW1pdDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJh
bnNsYXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5U
cmFuc3BhcmVuY3lMYXllcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CkBAIC0yMjIs
NyArMTkwLDYgQEAgYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1BhdGg6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bENvbXBvc2l0ZWRSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgogI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxMaW5lOgpAQCAt
Mjg4LDEzICsyNTUsMTEgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0Zv
clRleHQ6CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lRGFzaDoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VQYXRoOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdTeXN0ZW1JbWFn
ZToKQEAgLTMwNiwxMSArMjcxLDkgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkK
ICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93
OgogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9JbWFnZUJ1ZmZlcjoKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTToKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyOgogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgogICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyOgpAQCAtMzMzLDE1ICsyOTYsOSBAQCBib29sIGlz
SW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVG
b3JNZWRpYToKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOgogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxDb2xvcjoKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjoKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVKb2luOgotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgogICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZUVsbGlwc2U6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCkBAIC0zNTEsNyArMzA4
LDYgQEAgYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKICNlbmRpZgogICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlTGluZToKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
VHlwZS5oCmluZGV4IGQ2ODNiMmFjZjc4NDVmOTljM2NkMDk1ZWI5MTFlNTRmMWY4Y2UxMTEuLjE2
NjBiOThmZGE1ZWYyN2IzZjc1ZDIyYTU3OWEzYTlhZTNjYzcwZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbVR5cGUuaApAQCAtMzEsMjAgKzMxLDEwIEBAIG5hbWVzcGFjZSBEaXNw
bGF5TGlzdCB7CiBlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CiAgICAgU2F2ZSwKICAg
ICBSZXN0b3JlLAotICAgIFRyYW5zbGF0ZSwKLSAgICBSb3RhdGUsCi0gICAgU2NhbGUsCi0gICAg
Q29uY2F0ZW5hdGVDVE0sCi0gICAgU2V0Q1RNLAogICAgIFNldElubGluZUZpbGxDb2xvciwKICAg
ICBTZXRJbmxpbmVTdHJva2VDb2xvciwKICAgICBTZXRTdHJva2VUaGlja25lc3MsCiAgICAgU2V0
U3RhdGUsCi0gICAgU2V0TGluZUNhcCwKLSAgICBTZXRMaW5lRGFzaCwKLSAgICBTZXRMaW5lSm9p
biwKLSAgICBTZXRNaXRlckxpbWl0LAotICAgIENsZWFyU2hhZG93LAogICAgIENsaXAsCiAgICAg
Q2xpcE91dCwKICAgICBDbGlwVG9JbWFnZUJ1ZmZlciwKQEAgLTY3LDcgKzU3LDYgQEAgZW51bSBj
bGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIEZpbGxSZWN0LAogICAgIEZpbGxSZWN0V2l0
aENvbG9yLAogICAgIEZpbGxSZWN0V2l0aEdyYWRpZW50LAotICAgIEZpbGxDb21wb3NpdGVkUmVj
dCwKICAgICBGaWxsUm91bmRlZFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCiAj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5jcHAKaW5kZXggMjNkMGJiY2M3MWMyODFjNTJjMzVhOGMyNTJkYTk2YzBhYjEyYTk4Yy4uMzZm
YTZhMTI3ZmYwNzkzY2VmMjMwZWRmN2E2NDFkZGUwMmZlMzc0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlM
aXN0UmVwbGF5ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGb250Q2FzY2Fk
ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFN0YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgpAQCAtNTQsNjcgKzU1LDYgQEAgdm9pZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgVHJh
bnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29u
dGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNsYXRlJiBpdGVtKQotewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgieCIsIGl0ZW0ueCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoInkiLCBpdGVt
LnkoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgUm90YXRlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgY29udGV4dC5yb3RhdGUobV9hbmdsZSk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSb3RhdGUmIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbmdsZSIsIGl0ZW0uYW5n
bGUoKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
Y2FsZSYgaXRlbSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoInNpemUiLCBpdGVtLmFtb3VudCgp
KTsKLQotICAgIHJldHVybiB0czsKLX0KLQotdm9pZCBTZXRDVE06OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldENUTShtX3RyYW5zZm9ybSk7
Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRDVE0mIGl0ZW0pCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJzZXQtY3RtIiwgaXRlbS50
cmFuc2Zvcm0oKSk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ29uY2F0ZW5hdGVDVE06
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNv
bmNhdENUTShtX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYgaXRlbSkKLXsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImN0bSIsIGl0ZW0udHJhbnNmb3JtKCkpOwotCi0gICAgcmV0dXJuIHRzOwot
fQotCiB2b2lkIFNldElubGluZUZpbGxDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKCkpOwpAQCAtMTQ4
LDc3ICs4OCwyMiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU2V0U3Ryb2tlVGhpY2tuZXNzJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAK
LVNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIDogbV9zdGF0
ZUNoYW5nZShzdGF0ZSwgZmxhZ3MpCi17Ci19Ci0KLVNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCi0gICAgOiBtX3N0YXRlQ2hh
bmdlKHN0YXRlQ2hhbmdlKQorU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSkKKyAgICA6IG1fc3RhdGUoc3RhdGUpCiB7CiB9CiAKIHZvaWQgU2V0U3Rh
dGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBtX3N0YXRlQ2hhbmdl
LmFwcGx5KGNvbnRleHQpOworICAgIGNvbnRleHQubWVyZ2VTdGF0ZUNoYW5nZXMobV9zdGF0ZSk7
CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRTdGF0ZSYgc3RhdGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGUuc3RhdGVD
aGFuZ2UoKTsKKyAgICB0cyA8PCBpdGVtLnN0YXRlKCk7CiAgICAgcmV0dXJuIHRzOwogfQogCi12
b2lkIFNldExpbmVDYXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBjb250ZXh0LnNldExpbmVDYXAobV9saW5lQ2FwKTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXAp
Ci17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLWNhcCIsIGxpbmVDYXAubGluZUNhcCgpKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFy
cmF5LCBtX2Rhc2hPZmZzZXQpOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQotewotICAgIHRzLmR1
bXBQcm9wZXJ0eSgiZGFzaC1hcnJheSIsIGxpbmVEYXNoLmRhc2hBcnJheSgpKTsKLSAgICB0cy5k
dW1wUHJvcGVydHkoImRhc2gtb2Zmc2V0IiwgbGluZURhc2guZGFzaE9mZnNldCgpKTsKLSAgICBy
ZXR1cm4gdHM7Ci19Ci0KLXZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwot
fQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
U2V0TGluZUpvaW4mIGxpbmVKb2luKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS1qb2lu
IiwgbGluZUpvaW4ubGluZUpvaW4oKSk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIFNldE1p
dGVyTGltaXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBj
b250ZXh0LnNldE1pdGVyTGltaXQobV9taXRlckxpbWl0KTsKLX0KLQotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVyTGltaXQmIG1pdGVy
TGltaXQpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJtaXRyZS1saW1pdCIsIG1pdGVyTGltaXQu
bWl0ZXJMaW1pdCgpKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLXZvaWQgQ2xlYXJTaGFkb3c6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsKLSAgICBjb250ZXh0LmNsZWFy
U2hhZG93KCk7Ci19Ci0KIHZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwpAQCAtNjU3LDMwICs1NDIsMTUg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZp
bGxSZWN0V2l0aEdyYWRpZW50JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotdm9pZCBGaWxs
Q29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKLXsK
LSAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUp
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQotewotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVj
dCIsIGl0ZW0ucmVjdCgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xv
cigpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNv
bXBvc2l0ZU9wZXJhdG9yKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0
ZW0uYmxlbmRNb2RlKCkpOwotICAgIHJldHVybiB0czsKLX0KLQogdm9pZCBGaWxsUm91bmRlZFJl
Y3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBjb250ZXh0
LmZpbGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKKyAgICBjb250
ZXh0LmZpbGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IpOwogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBp
dGVtKQogewogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7Ci0gICAgdHMuZHVt
cFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5ibGVuZE1vZGUoKSk7CiAgICAgcmV0dXJuIHRz
OwogfQogCkBAIC03NjgsOCArNjM4LDggQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQogfQogCiAjaWYgRU5BQkxF
KFZJREVPKQotUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5
ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLSAgICA6IG1faWRlbnRp
ZmllcihwbGF5ZXIuaWRlbnRpZmllcigpKQorUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1f
ZGVzdGluYXRpb24oZGVzdGluYXRpb24pCiB7CiB9CkBAIC0xMDExLDE5ICs4ODEsMTAgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUp
CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogdHMgPDwgInNh
dmUiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB0cyA8PCAicmVzdG9yZSI7
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogdHMgPDwgInRyYW5zbGF0ZSI7
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogdHMgPDwgInJvdGF0ZSI7IGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRDVE06IHRzIDw8ICJzZXQtY3RtIjsgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06IHRzIDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB0cyA8PCAic2V0LWlubGlu
ZS1maWxsLWNvbG9yIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tl
Q29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLXN0cm9rZS1jb2xvciI7IGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogdHMgPDwgInNldC1zdHJva2UtdGhpY2tuZXNz
IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHRzIDw8ICJzZXQtc3RhdGUi
OyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB0cyA8PCAic2V0LWxpbmUt
Y2FwIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6IHRzIDw8ICJzZXQt
bGluZS1kYXNoIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHRzIDw8
ICJzZXQtbGluZS1qb2luIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1p
dDogdHMgPDwgInNldC1taXRlci1saW1pdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXA6IHRzIDw8ICJjbGlwIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDogdHMg
PDwgImNsaXAtb3V0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvSW1hZ2VCdWZm
ZXI6IHRzIDw8ICJjbGlwLXRvLWltYWdlLWJ1ZmZlciI7IGJyZWFrOwpAQCAtMTA0Niw3ICs5MDcs
NiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5
cGUgdHlwZSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogdHMgPDwgImZpbGwtcmVjdCI7
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB0cyA8PCAiZmls
bC1yZWN0LXdpdGgtY29sb3IiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudDogdHMgPDwgImZpbGwtcmVjdC13aXRoLWdyYWRpZW50IjsgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21wb3NpdGVk
LXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6IHRzIDw8
ICJmaWxsLXJvdW5kZWQtcmVjdCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIjsgYnJl
YWs7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCkBAIC0xMDc4LDcgKzkzOCw2IEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBl
KQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHRzIDw8ICJhcHBseS1maWxs
LXBhdHRlcm4iOyBicmVhazsKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6IHRzIDw8ICJhcHBseS1kZXZpY2Utc2NhbGUtZmFjdG9yIjsgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHRzIDw8ICJjbGVhci1zaGFkb3ciOyBicmVh
azsKICAgICB9CiAgICAgcmV0dXJuIHRzOwogfQpAQCAtMTA4OCwyMSArOTQ3LDYgQEAgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIHRz
IDw8IGl0ZW0udHlwZSgpOwogCiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2Ug
SXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8VHJhbnNsYXRlPigp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFJvdGF0ZT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2NhbGU6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNjYWxlPigpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNl
dENUTT4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVD
VE06Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpOwotICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CiAgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CkBAIC0x
MTE1LDE4ICs5NTksNiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJ
dGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lQ2FwPigpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lSm9p
bj4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
LSAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKLSAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKICAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcD4o
KTsKICAgICAgICAgYnJlYWs7CkBAIC0xMTkzLDkgKzEwMjUsNiBAQCBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CiAgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0
V2l0aEdyYWRpZW50PigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
Q29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVj
dD4oKTsKLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0
OgogICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTI3MSw3ICsxMTAwLDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tl
UGF0dGVybjoKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgogI2VuZGlmCi0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICByZXR1cm4gdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRleCA5N2NiNWZj
OGQwNGJhODY2MmI3MmM3ZGRlZWJjNDQxNTVjMjgyNWI3Li5lODFiYjM0NmM5ZWZlYmU5NmE2NTBk
NzU0NWE4MWY2MTZiN2Q2YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAg
LTg1LDEwNCArODUsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIH07CiAKLWNsYXNzIFRyYW5zbGF0ZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFu
c2xhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFRy
YW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgICAgICA6IG1feCh4KQotICAgICAgICAsIG1f
eSh5KQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9
Ci0gICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBm
bG9hdCBtX3ggeyAwIH07Ci0gICAgZmxvYXQgbV95IHsgMCB9OwotfTsKLQotY2xhc3MgUm90YXRl
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlJvdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwot
Ci0gICAgUm90YXRlKGZsb2F0IGFuZ2xlKQotICAgICAgICA6IG1fYW5nbGUoYW5nbGUpCi0gICAg
ewotICAgIH0KLQotICAgIGZsb2F0IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICBmbG9hdCBtX2FuZ2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgotfTsK
LQotY2xhc3MgU2NhbGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6U2NhbGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKLQotICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICAgICAg
OiBtX3NpemUoc2l6ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgRmxvYXRTaXplJiBhbW91
bnQoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgRmxvYXRTaXpl
IG1fc2l6ZTsKLX07Ci0KLWNsYXNzIFNldENUTSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRDVE07Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKLSAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi0gICAg
ewotICAgIH0KLQotICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFuc2Zvcm07IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IG1fdHJhbnNmb3JtOwotfTsKLQotY2xhc3MgQ29uY2F0ZW5hdGVDVE0gewotcHVibGljOgotICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q29uY2F0ZW5h
dGVDVE07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIENv
bmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgICAgICA6
IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci19OwotCiBjbGFzcyBT
ZXRJbmxpbmVGaWxsQ29sb3IgewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOwpAQCAtMjQ3LDEwICsx
NDksOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGVDaGFuZ2U7IH0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVD
aGFuZ2UoKSB7IHJldHVybiBtX3N0YXRlQ2hhbmdlOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgZXhw
bGljaXQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8U2V0U3Rh
dGU+IGRlY29kZShEZWNvZGVyJik7CkBAIC0yNTgsNDA0ICsxNTgsMjYgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UmKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGVDaGFuZ2U7
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKIH07CiAKIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+CiB2b2lkIFNldFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IHsKLSAgICBhdXRvIGNoYW5nZUZsYWdzID0gbV9zdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzOwot
ICAgIGVuY29kZXIgPDwgY2hhbmdlRmxhZ3M7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVD
aGFuZ2UubV9zdGF0ZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5zdHJva2VHcmFkaWVudCk7Ci0gICAgICAgIGVuY29kZXIgPDwgKnN0YXRlLnN0cm9rZUdyYWRp
ZW50OwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLnN0
cm9rZVBhdHRlcm4pOwotICAgICAgICBlbmNvZGVyIDw8ICpzdGF0ZS5zdHJva2VQYXR0ZXJuOwot
ICAgIH0KLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuZmlsbEdyYWRp
ZW50KTsKLSAgICAgICAgZW5jb2RlciA8PCAqc3RhdGUuZmlsbEdyYWRpZW50OwotICAgIH0KLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBh
dHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5maWxsUGF0dGVybik7Ci0gICAg
ICAgIGVuY29kZXIgPDwgKnN0YXRlLmZpbGxQYXR0ZXJuOwotICAgIH0KLQotICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5zaGFkb3dCbHVyOwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9y
OwotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7Ci0gICAgfQotCi0g
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnN0cm9rZVRoaWNrbmVz
czsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS50ZXh0RHJh
d2luZ01vZGU7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJv
a2VDb2xvcjsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWxsQ29s
b3I7Ci0KLSAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVN0eWxlQ2hhbmdlKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zdHJva2VTdHls
ZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbFJ1bGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmZpbGxSdWxlOwotCi0g
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3Np
dGVPcGVyYXRpb25DaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpCbGVuZE1vZGVDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmJsZW5kTW9k
ZTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCi0gICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQotICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLmFscGhhOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLnNob3VsZEFudGlhbGlhczsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQotICAgICAgICBl
bmNvZGVyIDw8IHN0YXRlLnNob3VsZFNtb290aEZvbnRzOwotCi0gICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250czsKLQotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQotICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIGVuY29kZXIgPDwgbV9zdGF0ZTsK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIHN0ZDo6b3B0aW9uYWw8U2V0U3RhdGU+IFNl
dFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKLSAgICBk
ZWNvZGVyID4+IGNoYW5nZUZsYWdzOwotICAgIGlmICghY2hhbmdlRmxhZ3MpCisgICAgc3RkOjpv
cHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZT4gc3RhdGU7CisgICAgZGVjb2RlciA+PiBzdGF0
ZTsKKyAgICBpZiAoIXN0YXRlKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2U7Ci0gICAgc3RhdGVDaGFuZ2Uu
bV9jaGFuZ2VGbGFncyA9ICpjaGFuZ2VGbGFnczsKLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2No
YW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENo
YW5nZSkpIHsKLSAgICAgICAgYXV0byBzdHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpkZWNvZGUo
ZGVjb2Rlcik7Ci0gICAgICAgIGlmICghc3Ryb2tlR3JhZGllbnQpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQgPSBXVEZNb3ZlKCpzdHJva2VHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVBhdHRlcm5DaGFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gc3Ryb2tlUGF0dGVybiA9IFBhdHRlcm46
OmRlY29kZShkZWNvZGVyKTsKLSAgICAgICAgaWYgKCFzdHJva2VQYXR0ZXJuKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0
cm9rZVBhdHRlcm4gPSBXVEZNb3ZlKCpzdHJva2VQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBpZiAo
c3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
RmlsbEdyYWRpZW50Q2hhbmdlKSkgewotICAgICAgICBhdXRvIGZpbGxHcmFkaWVudCA9IEdyYWRp
ZW50OjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIGlmICghZmlsbEdyYWRpZW50KQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRl
LmZpbGxHcmFkaWVudCA9IFdURk1vdmUoKmZpbGxHcmFkaWVudCk7Ci0gICAgfQotCi0gICAgaWYg
KHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxQYXR0ZXJuQ2hhbmdlKSkgewotICAgICAgICBhdXRvIGZpbGxQYXR0ZXJuID0gUGF0dGVy
bjo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICBpZiAoIWZpbGxQYXR0ZXJuKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLmZp
bGxQYXR0ZXJuID0gV1RGTW92ZSgqZmlsbFBhdHRlcm4pOwotICAgIH0KLQotICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRTaXplPiBzaGFkb3dPZmZz
ZXQ7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93T2Zmc2V0OwotICAgICAgICBpZiAoIXNoYWRv
d09mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3Rh
dGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSAqc2hhZG93T2Zmc2V0OwotCi0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHNoYWRvd0JsdXI7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hh
ZG93Qmx1cjsKLSAgICAgICAgaWYgKCFzaGFkb3dCbHVyKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0JsdXIgPSAq
c2hhZG93Qmx1cjsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzaGFkb3dDb2xvcjsK
LSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dDb2xvcjsKLSAgICAgICAgaWYgKCFzaGFkb3dDb2xv
cikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFu
Z2UubV9zdGF0ZS5zaGFkb3dDb2xvciA9ICpzaGFkb3dDb2xvcjsKLQotICAgICAgICBzdGQ6Om9w
dGlvbmFsPFNoYWRvd1JhZGl1c01vZGU+IHNoYWRvd1JhZGl1c01vZGU7Ci0gICAgICAgIGRlY29k
ZXIgPj4gc2hhZG93UmFkaXVzTW9kZTsKLSAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5t
X3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBXVEZNb3ZlKCpzaGFkb3dSYWRpdXNNb2RlKTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9w
dGlvbmFsPGZsb2F0PiBzdHJva2VUaGlja25lc3M7Ci0gICAgICAgIGRlY29kZXIgPj4gc3Ryb2tl
VGhpY2tuZXNzOwotICAgICAgICBpZiAoIXN0cm9rZVRoaWNrbmVzcykKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zdHJva2VU
aGlja25lc3MgPSAqc3Ryb2tlVGhpY2tuZXNzOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2lu
Z01vZGVDaGFuZ2UpKSB7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8VGV4dERyYXdpbmdNb2RlRmxh
Z3M+IHRleHREcmF3aW5nTW9kZTsKLSAgICAgICAgZGVjb2RlciA+PiB0ZXh0RHJhd2luZ01vZGU7
Ci0gICAgICAgIGlmICghdGV4dERyYXdpbmdNb2RlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9
IFdURk1vdmUoKnRleHREcmF3aW5nTW9kZSk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdl
Lm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9y
Q2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBzdHJva2VDb2xvcjsKLSAg
ICAgICAgZGVjb2RlciA+PiBzdHJva2VDb2xvcjsKLSAgICAgICAgaWYgKCFzdHJva2VDb2xvcikK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5zdHJva2VDb2xvciA9ICpzdHJva2VDb2xvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3Rh
dGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbG9yPiBmaWxsQ29sb3I7
Ci0gICAgICAgIGRlY29kZXIgPj4gZmlsbENvbG9yOwotICAgICAgICBpZiAoIWZpbGxDb2xvcikK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2Uu
bV9zdGF0ZS5maWxsQ29sb3IgPSAqZmlsbENvbG9yOwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNo
YW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VT
dHlsZUNoYW5nZSkpIHsKLSAgICAgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGU7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc3Ryb2tlU3R5bGUpKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnN0cm9rZVN0eWxlID0g
c3Ryb2tlU3R5bGU7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKSkgewotICAgICAg
ICBzdGQ6Om9wdGlvbmFsPFdpbmRSdWxlPiBmaWxsUnVsZTsKLSAgICAgICAgZGVjb2RlciA+PiBm
aWxsUnVsZTsKLSAgICAgICAgaWYgKCFmaWxsUnVsZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5maWxsUnVsZSA9ICpmaWxs
UnVsZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSkgewotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENvbXBvc2l0ZU9wZXJhdG9yPiBjb21wb3NpdGVPcGVyYXRvcjsK
LSAgICAgICAgZGVjb2RlciA+PiBjb21wb3NpdGVPcGVyYXRvcjsKLSAgICAgICAgaWYgKCFjb21w
b3NpdGVPcGVyYXRvcikKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9ICpjb21wb3NpdGVPcGVy
YXRvcjsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlKSkgewotICAgICAgICBzdGQ6
Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRNb2RlOwotICAgICAgICBkZWNvZGVyID4+IGJsZW5k
TW9kZTsKLSAgICAgICAgaWYgKCFibGVuZE1vZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuYmxlbmRNb2RlID0gKmJsZW5k
TW9kZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkp
IHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxJbnRlcnBvbGF0aW9uUXVhbGl0eT4gaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eTsKLSAgICAgICAgZGVjb2RlciA+PiBpbWFnZUludGVycG9sYXRpb25R
dWFsaXR5OwotICAgICAgICBpZiAoIWltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9ICppbWFnZUludGVycG9sYXRpb25RdWFsaXR5Owot
ICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxm
bG9hdD4gYWxwaGE7Ci0gICAgICAgIGRlY29kZXIgPj4gYWxwaGE7Ci0gICAgICAgIGlmICghYWxw
aGEpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuYWxwaGEgPSAqYWxwaGE7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlQ2hhbmdl
Lm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlh
bGlhc0NoYW5nZSkpIHsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRBbnRpYWxp
YXM7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hvdWxkQW50aWFsaWFzOwotICAgICAgICBpZiAoIXNo
b3VsZEFudGlhbGlhcykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSAqc2hvdWxkQW50aWFsaWFz
OwotICAgIH0KLQotICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpIHsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDxib29sPiBzaG91bGRTbW9vdGhGb250czsKLSAgICAgICAgZGVjb2RlciA+
PiBzaG91bGRTbW9vdGhGb250czsKLSAgICAgICAgaWYgKCFzaG91bGRTbW9vdGhGb250cykKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyA9ICpzaG91bGRTbW9vdGhGb250czsKLSAgICB9Ci0KLSAg
ICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKSkgewotICAgICAgICBzdGQ6
Om9wdGlvbmFsPGJvb2w+IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICAgICAgZGVj
b2RlciA+PiBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgICAgIGlmICghc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cyA9ICpzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRl
Q2hhbmdlLm1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKSkgewotICAgICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+
IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgICAgICBkZWNvZGVyID4+IHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zOwotICAgICAgICBpZiAoIXNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwot
ICAgIH0KLQotICAgIHJldHVybiB7IHsgc3RhdGVDaGFuZ2UgfSB9OwotfQotCi1jbGFzcyBTZXRM
aW5lQ2FwIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNldExpbmVDYXA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKLQotICAgIFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotICAgICAgICA6IG1f
bGluZUNhcChsaW5lQ2FwKQotICAgIHsKLSAgICB9Ci0KLSAgICBMaW5lQ2FwIGxpbmVDYXAoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTGluZUNhcCBtX2xp
bmVDYXA7Ci19OwotCi1jbGFzcyBTZXRMaW5lRGFzaCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKLQotICAgIFNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotICAgICAgICA6IG1f
ZGFzaEFycmF5KGRhc2hBcnJheSkKLSAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkK
LSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7
IHJldHVybiBtX2Rhc2hBcnJheTsgfQotICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2Rhc2hPZmZzZXQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8U2V0TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZh
dGU6Ci0gICAgRGFzaEFycmF5IG1fZGFzaEFycmF5OwotICAgIGZsb2F0IG1fZGFzaE9mZnNldDsK
LX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldExpbmVEYXNoOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fZGFzaEFycmF5Owot
ICAgIGVuY29kZXIgPDwgbV9kYXNoT2Zmc2V0OworICAgIHJldHVybiBTZXRTdGF0ZSgqc3RhdGUp
OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxTZXRMaW5lRGFz
aD4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIHN0ZDo6b3B0
aW9uYWw8RGFzaEFycmF5PiBkYXNoQXJyYXk7Ci0gICAgZGVjb2RlciA+PiBkYXNoQXJyYXk7Ci0g
ICAgaWYgKCFkYXNoQXJyYXkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBkYXNoT2Zmc2V0OwotICAgIGRlY29kZXIgPj4gZGFzaE9mZnNl
dDsKLSAgICBpZiAoIWRhc2hPZmZzZXQpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4ge3sgKmRhc2hBcnJheSwgKmRhc2hPZmZzZXQgfX07Ci19Ci0KLWNsYXNzIFNl
dExpbmVKb2luIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlNldExpbmVKb2luOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7Ci0KLSAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAgICAg
ICAgOiBtX2xpbmVKb2luKGxpbmVKb2luKQotICAgIHsKLSAgICB9Ci0KLSAgICBMaW5lSm9pbiBs
aW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
TGluZUpvaW4gbV9saW5lSm9pbjsKLX07Ci0KLWNsYXNzIFNldE1pdGVyTGltaXQgewotcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0
TWl0ZXJMaW1pdDsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwotCi0g
ICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotICAgICAgICA6IG1fbWl0ZXJMaW1p
dChtaXRlckxpbWl0KQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29u
c3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZsb2F0IG1fbWl0
ZXJMaW1pdDsKLX07Ci0KLWNsYXNzIENsZWFyU2hhZG93IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyU2hhZG93OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotfTsKLQogLy8gRklYTUU6IHRy
ZWF0IGFzIGRyYXdpbmcgaXRlbT8KIGNsYXNzIENsaXAgewogcHVibGljOgpAQCAtMTYxMiw5MSAr
MTEzNCwyMCBAQCBzdGQ6Om9wdGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdp
dGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZQogICAgIHJldHVybiB7eyAqcmVjdCwg
Z3JhZGllbnQtPmdldCgpIH19OwogfQogCi1jbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgewotcHVi
bGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7Ci0KLSAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotICAgICAgICA6IG1fcmVjdChyZWN0KQotICAgICAgICAsIG1fY29sb3IoY29sb3IpCi0gICAg
ICAgICwgbV9vcChvcCkKLSAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCi0gICAgewot
ICAgIH0KLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0g
ICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsg
fQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsg
fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8Rmls
bENvbXBvc2l0ZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIEZsb2F0
UmVjdCBtX3JlY3Q7Ci0gICAgQ29sb3IgbV9jb2xvcjsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBt
X29wOwotICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Ci12b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2NvbG9y
OwotICAgIGVuY29kZXIgPDwgbV9vcDsKLSAgICBlbmNvZGVyIDw8IG1fYmxlbmRNb2RlOwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotc3RkOjpvcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+IEZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAg
c3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAg
IGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0
aW9uYWw8Q29sb3I+IGNvbG9yOwotICAgIGRlY29kZXIgPj4gY29sb3I7Ci0gICAgaWYgKCFjb2xv
cikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8Q29t
cG9zaXRlT3BlcmF0b3I+IG9wOwotICAgIGRlY29kZXIgPj4gb3A7Ci0gICAgaWYgKCFvcCkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHN0ZDo6b3B0aW9uYWw8QmxlbmRNb2Rl
PiBibGVuZE1vZGU7Ci0gICAgZGVjb2RlciA+PiBibGVuZE1vZGU7Ci0gICAgaWYgKCFibGVuZE1v
ZGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4ge3sgKnJlY3Qs
ICpjb2xvciwgKm9wLCAqYmxlbmRNb2RlIH19OwotfQotCiBjbGFzcyBGaWxsUm91bmRlZFJlY3Qg
ewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6RmlsbFJvdW5kZWRSZWN0OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CiAKLSAgICBGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIEZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiAgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAg
ICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewogICAgIH0KIAogICAgIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAg
ICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIEJs
ZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCiAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEZpbGxSb3VuZGVk
UmVjdD4gZGVjb2RlKERlY29kZXImKTsKQEAgLTE3MDksNyArMTE2MCw2IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgRmxvYXRSb3VuZGVkUmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsK
LSAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PgpAQCAtMTcxNyw3ICsxMTY3LDYgQEAgdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9yZWN0OwogICAgIGVuY29k
ZXIgPDwgbV9jb2xvcjsKLSAgICBlbmNvZGVyIDw8IG1fYmxlbmRNb2RlOwogfQogCiB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgpAQCAtMTczMywxMiArMTE4Miw3IEBAIHN0ZDo6b3B0aW9uYWw8Rmls
bFJvdW5kZWRSZWN0PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBzdGQ6
Om9wdGlvbmFsPEJsZW5kTW9kZT4gYmxlbmRNb2RlOwotICAgIGRlY29kZXIgPj4gYmxlbmRNb2Rl
OwotICAgIGlmICghYmxlbmRNb2RlKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IsICpibGVuZE1vZGUgfX07CisgICAgcmV0dXJuIHsg
eyAqcmVjdCwgKmNvbG9yIH0gfTsKIH0KIAogY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUg
ewpAQCAtMTk2MSw3ICsxNDA1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKIAotICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOworICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwogCiAgICAg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRp
b247IH0KICAgICBNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1faWRlbnRpZmllcjsgfQpAQCAtMjI1NiwxMyArMTcwMCwxMSBAQCB1c2luZyBEaXNwbGF5
TGlzdEl0ZW0gPSBzdGQ6OnZhcmlhbnQKICAgICA8IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IKICAg
ICAsIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIKICAgICAsIENsZWFyUmVjdAotICAgICwgQ2xlYXJT
aGFkb3cKICAgICAsIENsaXAKICAgICAsIENsaXBPdXQKICAgICAsIENsaXBPdXRUb1BhdGgKICAg
ICAsIENsaXBQYXRoCiAgICAgLCBDbGlwVG9JbWFnZUJ1ZmZlcgotICAgICwgQ29uY2F0ZW5hdGVD
VE0KICAgICAsIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIKICAgICAsIERyYXdFbGxpcHNlCiAg
ICAgLCBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcgpAQCAtMjI3OCw3ICsxNzIwLDYgQEAgdXNpbmcg
RGlzcGxheUxpc3RJdGVtID0gc3RkOjp2YXJpYW50CiAgICAgLCBEcmF3UmVjdAogICAgICwgRHJh
d1N5c3RlbUltYWdlCiAgICAgLCBFbmRUcmFuc3BhcmVuY3lMYXllcgotICAgICwgRmlsbENvbXBv
c2l0ZWRSZWN0CiAgICAgLCBGaWxsRWxsaXBzZQogICAgICwgRmlsbFBhdGgKICAgICAsIEZpbGxS
ZWN0CkBAIC0yMjg4LDIzICsxNzI5LDE1IEBAIHVzaW5nIERpc3BsYXlMaXN0SXRlbSA9IHN0ZDo6
dmFyaWFudAogICAgICwgRmlsbFJvdW5kZWRSZWN0CiAgICAgLCBGbHVzaENvbnRleHQKICAgICAs
IFJlc3RvcmUKLSAgICAsIFJvdGF0ZQogICAgICwgU2F2ZQotICAgICwgU2NhbGUKLSAgICAsIFNl
dENUTQogICAgICwgU2V0SW5saW5lRmlsbENvbG9yCiAgICAgLCBTZXRJbmxpbmVTdHJva2VDb2xv
cgotICAgICwgU2V0TGluZUNhcAotICAgICwgU2V0TGluZURhc2gKLSAgICAsIFNldExpbmVKb2lu
Ci0gICAgLCBTZXRNaXRlckxpbWl0CiAgICAgLCBTZXRTdGF0ZQogICAgICwgU2V0U3Ryb2tlVGhp
Y2tuZXNzCiAgICAgLCBTdHJva2VFbGxpcHNlCiAgICAgLCBTdHJva2VMaW5lCiAgICAgLCBTdHJv
a2VQYXRoCiAgICAgLCBTdHJva2VSZWN0Ci0gICAgLCBUcmFuc2xhdGUKIAogI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQogICAgICwgRmlsbExpbmUKQEAgLTIzNDEsMjAgKzE3NzQsMTAgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUsCiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTYXZlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6UmVzdG9yZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRy
YW5zbGF0ZSwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZSwKLSAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNjYWxlLAotICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0Q1RNLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0sCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvciwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzcywKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldFN0YXRlLAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
TGluZUNhcCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNo
LAotICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW4sCi0gICAg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0LAotICAgIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJTaGFkb3csCiAgICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q2xpcE91dCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBU
b0ltYWdlQnVmZmVyLApAQCAtMjM3Niw3ICsxNzk5LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51
bVRyYWl0czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudCwKLSAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGVl
ZTQ0NzFkMzU0ZTc1MTUzMTI1MTg5ZGZjYzk0MThhMzk0NTE0YTEuLmE1MzUwOTk4MGE5MzE0MDdl
OTFlNTRmOWY5MjMyNWNlNWU1ZDA1ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKQEAgLTQyLDM1MCArNDIsMTg5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKLSAgICA6IG1fZHJhd0dseXBo
c1JlY29yZGVyKCp0aGlzLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCi17Ci0gICAgbV9zdGF0ZVN0
YWNrLmFwcGVuZCh7IHN0YXRlLCBpbml0aWFsQ1RNLCBpbml0aWFsQ1RNLm1hcFJlY3QoaW5pdGlh
bENsaXApIH0pOwotfQorUmVjb3JkZXI6OlJlY29yZGVyKGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRHJhd0dseXBoc1JlY29y
ZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorICAgIDog
R3JhcGhpY3NDb250ZXh0KGluaXRpYWxDbGlwLCB7IH0sICBpbml0aWFsQ1RNKQorICAgICwgbV9k
cmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRlY29uc3RydWN0RHJhd0dseXBocykKIAotUmVjb3Jk
ZXI6On5SZWNvcmRlcigpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPT0gMSk7
IC8vIElmIHRoaXMgZmlyZXMsIGl0IGluZGljYXRlcyBtaXNtYXRjaGVkIHNhdmUvcmVzdG9yZS4K
IH0KIAotc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKLXsKLSAgICBzdGF0aWMgY29uc3RleHByIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGlubGluZVN0YXRlQ2hhbmdlRmxh
Z3MgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
LAotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsCi0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsCi0gICAgfTsKLQotICAg
IGlmIChjaGFuZ2VGbGFncyAhPSAoY2hhbmdlRmxhZ3MgJiBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdz
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9z
dGF0ZS5zdHJva2VDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworUmVjb3JkZXI6On5SZWNvcmRlcigpID0gZGVmYXVsdDsKIAotICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAh
Y2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmFw
cGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hh
bmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3Mp
Cit2b2lkIFJlY29yZGVyOjpzYXZlKCkKIHsKLSAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0
YXRlQ2hhbmdlcyhjaGFuZ2VzLCBjaGFuZ2VGbGFncykpIHsKLSAgICAgICAgaWYgKGF1dG8gcGF0
dGVybiA9IGNoYW5nZXMubV9zdGF0ZS5zdHJva2VQYXR0ZXJuKQotICAgICAgICAgICAgcmVjb3Jk
UmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOwotICAgICAgICBpZiAoYXV0byBwYXR0
ZXJuID0gY2hhbmdlcy5tX3N0YXRlLmZpbGxQYXR0ZXJuKQotICAgICAgICAgICAgcmVjb3JkUmVz
b3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkpOwotICAgICAgICByZWNvcmRTZXRTdGF0ZShj
aGFuZ2VzLm1fc3RhdGUsIGNoYW5nZUZsYWdzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
Q29sb3JDaGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRJbmxpbmVTdHJva2VDb2xvcigqY2hhbmdl
cy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKTsKLQotICAgIGlmIChj
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKSkKLSAgICAgICAgcmVjb3JkU2V0U3Ryb2tlVGhpY2tuZXNzKGNoYW5nZXMubV9zdGF0
ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICByZWNvcmRTZXRJbmxp
bmVGaWxsQ29sb3IoKmNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVz
KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOworICAgIHJlY29yZFNhdmUoKTsKIH0K
IAotdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKQordm9p
ZCBSZWNvcmRlcjo6cmVzdG9yZSgpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5
IGludm9rZWQgaW4gYW4gYWQtaG9jIG1hbm5lciB3aGVuIHJlY29yZGluZyBkcmF3aW5nIGl0ZW1z
LiBXZSBzaG91bGQgY29uc2lkZXIgZWl0aGVyCi0gICAgLy8gc3BsaXR0aW5nIEdyYXBoaWNzQ29u
dGV4dCBzdGF0ZSBjaGFuZ2VzIGludG8gaW5kaXZpZHVhbCBkaXNwbGF5IGxpc3QgaXRlbXMsIG9y
IHJlZmFjdG9yaW5nIHRoZSBjb2RlIHN1Y2ggdGhhdAotICAgIC8vIHRoaXMgbWV0aG9kIGlzIGF1
dG9tYXRpY2FsbHkgaW52b2tlZCB3aGVuIHJlY29yZGluZyBhIGRyYXdpbmcgaXRlbS4KLSAgICBh
dXRvJiBzdGF0ZUNoYW5nZXMgPSBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZTsKLSAgICBhdXRv
IGNoYW5nZXNGcm9tTGFzdFN0YXRlID0gc3RhdGVDaGFuZ2VzLmNoYW5nZXNGcm9tU3RhdGUoY3Vy
cmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSk7Ci0gICAgaWYgKCFjaGFuZ2VzRnJvbUxhc3RT
dGF0ZSkKKyAgICBpZiAoIXN0YWNrU2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMT0df
V0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZpbmcg
c3RhdGUgIiA8PCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0
ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oc3Rh
dGVDaGFuZ2VzLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSk7Ci0gICAgc3RhdGVDaGFuZ2VzLm1fY2hh
bmdlRmxhZ3MgPSB7IH07Ci0gICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0
YXRlQ2hhbmdlcy5tX3N0YXRlOwotfQotCi1jb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgUmVj
b3JkZXI6OnN0YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuc3RhdGVD
aGFuZ2UubV9zdGF0ZTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBjdXJyZW50U3RhdGUoKS5zdGF0ZUNoYW5nZS5hY2N1
bXVsYXRlKHN0YXRlLCBmbGFncyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAoTGlu
ZUNhcCBsaW5lQ2FwKQotewotICAgIHJlY29yZFNldExpbmVDYXAobGluZUNhcCk7Ci19Ci0KLXZv
aWQgUmVjb3JkZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9h
dCBkYXNoT2Zmc2V0KQotewotICAgIHJlY29yZFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9m
ZnNldCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2lu
KQotewotICAgIHJlY29yZFNldExpbmVKb2luKGxpbmVKb2luKTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewotICAgIHJlY29yZFNldE1pdGVy
TGltaXQobWl0ZXJMaW1pdCk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CisgICAg
cmVjb3JkUmVzdG9yZSgpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3RmlsdGVyZWRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBGaWx0ZXImIGZpbHRlciwgRmlsdGVyUmVzdWx0cyYgcmVzdWx0cykKK3ZvaWQgUmVj
b3JkZXI6OmFwcGx5U3RhdGVDaGFuZ2VzKCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1J
Zk5lY2Vzc2FyeSgpOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXIuZWZmZWN0c09m
VHlwZShGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFSW1hZ2UpKSB7Ci0gICAgICAgIGF1dG8mIGZlSW1h
Z2UgPSBkb3duY2FzdDxGRUltYWdlPihlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoIXJlY29y
ZFJlc291cmNlVXNlKGZlSW1hZ2Uuc291cmNlSW1hZ2UoKSkpIHsKLSAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUlt
YWdlUmVjdCwgZmlsdGVyLCByZXN1bHRzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmICghc291cmNlSW1hZ2UpIHsKLSAgICAgICAgcmVjb3JkRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIobnVsbHB0ciwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworICAg
IGlmICghc3RhdGUoKS5jaGFuZ2VzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIXJlY29yZFJlc291cmNlVXNlKCpzb3VyY2VJbWFnZSkpIHsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJbWFnZSwgc291cmNlSW1hZ2VS
ZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVj
b3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwg
ZmlsdGVyKTsKLX0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQ
b2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBtX2RyYXdHbHlw
aHNSZWNvcmRlci5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywg
c3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7Ci19CisgICAgaWYgKHN0YXRlKCkuaGFzT25seVBy
aW1pdGl2ZUNoYW5nZXMoKSkgeworICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6RmlsbEJydXNoKSkKKyAgICAgICAgICAg
IHJlY29yZFNldElubGluZUZpbGxDb2xvcigqZmlsbENvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVz
KCkpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2Fs
QW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3Rf
Y2FzdDxGb250Jj4oZm9udCkpOwotICAgIHJlY29yZERyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKTsKLX0KKyAgICAgICAg
aWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OlN0cm9rZUJydXNoKSkKKyAgICAgICAgICAgIHJlY29yZFNldElubGluZVN0cm9rZUNvbG9y
KCpzdHJva2VDb2xvcigpLnRyeUdldEFzU1JHQkFCeXRlcygpKTsKIAotdm9pZCBSZWNvcmRlcjo6
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2Fy
eSgpOworICAgICAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSkKKyAgICAgICAgICAgIHJlY29yZFNl
dFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7CiAKLSAgICBpZiAoIXJlY29yZFJl
c291cmNlVXNlKGltYWdlQnVmZmVyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAg
ICAgICBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgcmVjb3JkRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7
Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwotICAgIHJlY29yZERyYXdOYXRpdmVJbWFn
ZShpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFn
ZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KQotewotICAgIHJlY29yZERyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRp
b25SZWN0KTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5
KCk7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2UpOwotICAgIHJlY29yZERyYXdQYXR0ZXJu
KGltYWdlLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBpZiAo
IXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hh
bmdlOjpGaWxsQnJ1c2gpKSB7CisgICAgICAgIGlmIChhdXRvIHBhdHRlcm4gPSBmaWxsUGF0dGVy
bigpKQorICAgICAgICAgICAgcmVjb3JkUmVzb3VyY2VVc2UocGF0dGVybi0+dGlsZUltYWdlKCkp
OwogICAgIH0KIAotICAgIHJlY29yZERyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCi17
Ci0gICAgcmVjb3JkU2F2ZSgpOwotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNr
Lmxhc3QoKS5jbG9uZUZvclNhdmUoKSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQot
ewotICAgIGlmICghbV9zdGF0ZVN0YWNrLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChzdGF0ZSgpLmNoYW5nZXMoKS5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdl
OjpTdHJva2VCcnVzaCkpIHsKKyAgICAgICAgaWYgKGF1dG8gcGF0dGVybiA9IHN0cm9rZVBhdHRl
cm4oKSkKKyAgICAgICAgICAgIHJlY29yZFJlc291cmNlVXNlKHBhdHRlcm4tPnRpbGVJbWFnZSgp
KTsKKyAgICB9CiAKLSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIHJlY29yZFJl
c3RvcmUoKTsKKyAgICByZWNvcmRTZXRTdGF0ZShzdGF0ZSgpKTsKKyAgICBkaWRBcHBseVN0YXRl
Q2hhbmdlcygpOwogfQogCi12b2lkIFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkKLXsKLSAgICBjdXJyZW50U3RhdGUoKS50cmFuc2xhdGUoeCwgeSk7Ci0gICAgcmVjb3JkVHJh
bnNsYXRlKHgsIHkpOwotfQotCi12b2lkIFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJh
ZGlhbnMpCisjaWYgVVNFKENHKQordm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkK
IHsKLSAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgIHJlY29y
ZFJvdGF0ZShhbmdsZUluUmFkaWFucyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBy
ZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybigpCiB7
Ci0gICAgY3VycmVudFN0YXRlKCkuc2NhbGUoc2l6ZSk7Ci0gICAgcmVjb3JkU2NhbGUoc2l6ZSk7
CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCk7
CiB9CisjZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQordm9pZCBSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICBpZiAodHJhbnNmb3JtLmlzSWRlbnRpdHko
KSkKLSAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CiAKLSAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRD
VE0odHJhbnNmb3JtKTsKLSAgICByZWNvcmRDb25jYXRlbmF0ZUNUTSh0cmFuc2Zvcm0pOworICAg
IC8vIEZJWE1FOiB0aGlzIGNoYW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0
ZSBhbGwgb2Ygb3VyIGNhY2hlZCBleHRlbnRzLgorICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25s
eSBjYWxsZWQgZWFybHkgb24/CisgICAgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZp
Y2VTY2FsZUZhY3Rvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBjdXJyZW50U3RhdGUoKS5zZXRDVE0odHJhbnNmb3Jt
KTsKLSAgICByZWNvcmRTZXRDVE0odHJhbnNmb3JtKTsKLX0KKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOwogCi1BZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCku
Y3RtOwotfQorICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFj
aXR5KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKIAotdm9pZCBSZWNvcmRlcjo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgc2V0QWxwaGEob3BhY2l0eSk7CiAgICAgcmVjb3Jk
QmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5k
KG1fc3RhdGVTdGFjay5sYXN0KCkuY2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllcigpKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGFwcGVuZFN0YXRl
Q2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKLSAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwotfQorICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLX0K
LQotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNl
c3NhcnkoKTsKLSAgICByZWNvcmREcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci19CisgICAgR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZSgpOwogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZERyYXdMaW5lc0Zv
clRleHQoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhz
LCBwcmludGluZywgZG91YmxlTGluZXMpOworICAgIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgUmVj
b3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0YXRlQ2hh
bmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihyZWN0LCBzdHlsZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OmNsaXAocmVjdCk7CisgICAgcmVjb3JkQ2xpcChyZWN0KTsKIH0KIAotdm9pZCBSZWNv
cmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlcjo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7Ci0gICAgYXBw
ZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmREcmF3RWxsaXBzZShy
ZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFBhdGgocGF0aCwgd2luZFJ1bGUpOworICAgIHJlY29yZENsaXBQYXRoKHBhdGgsIHdpbmRSdWxl
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQg
UmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd1BhdGgocGF0aCk7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRDbGlwT3V0KHJlY3QpOwogfQogCi12
b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgUmVjb3JkZXI6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vz
c2FyeSgpOwotICAgIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQs
IGNvbG9yKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZENsaXBPdXRUb1Bh
dGgocGF0aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIGFw
cGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRHJhd0ZvY3VzUmlu
Z1JlY3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Ci19CisgICAgaWYgKCFyZWNvcmRS
ZXNvdXJjZVVzZShpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpjbGlw
VG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkQ2xp
cFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLXZvaWQg
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUs
IGJvb2wmLCBjb25zdCBDb2xvciYpCit2b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmRDbGVhclJlY3QocmVjdCk7CiB9Ci0jZW5kaWYKIAogdm9pZCBS
ZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZFN0
YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAg
ICByZWNvcmRGaWxsUmVjdChyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogICAg
IHJlY29yZEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7
Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKKyAgICBhcHBseVN0YXRl
Q2hhbmdlcygpOwogICAgIHJlY29yZEZpbGxSZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50
KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQordm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxDb21wb3NpdGVkUmVjdChyZWN0LCBjb2xv
ciwgb3AsIGJsZW5kTW9kZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRG
aWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5n
ZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZEZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xv
ciwgYmxlbmRNb2RlKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQogCi12
b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3Jk
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Cisg
ICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRGaWxsRWxsaXBzZShyZWN0KTsKIH0K
IAogdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBl
bmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0
YSgpKSB7CiAgICAgICAgIGlmIChwYXRoLmhhc0lubGluZURhdGE8TGluZURhdGE+KCkpCkBAIC00
MDIsMjEgKzI0MSwyMSBAQCB2b2lkIFJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogICAgIHJlY29yZEZpbGxQYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVyOjpmaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkRmlsbEVsbGlwc2UocmVj
dCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRTdHJva2VSZWN0KHJlY3Qs
IGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIFJlY29yZGVyOjpzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0
ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZFN0cm9rZUVsbGlwc2UocmVjdCk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAg
ICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOworICAgIGFwcGx5U3RhdGVDaGFu
Z2VzKCk7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5s
aW5lRGF0YSgpKSB7CiAgICAgICAgIGlmIChwYXRoLmhhc0lubGluZURhdGE8TGluZURhdGE+KCkp
CkBAIC00MzMsMTQ4ICsyNzIsMTY4IEBAIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKICAgICByZWNvcmRTdHJva2VQYXRoKHBhdGgpOwogfQogCi12b2lkIFJlY29y
ZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQog
ewotICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmVjb3JkU3Ry
b2tlRWxsaXBzZShyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERy
YXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW1JZk5lY2Vzc2FyeSgpOwotICAgIHJlY29yZENsZWFyUmVjdChy
ZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdMaW5lKHBvaW50
MSwgcG9pbnQyKTsKIH0KIAotI2lmIFVTRShDRykKLXZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tl
UGF0dGVybigpCit2b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNv
cmRBcHBseVN0cm9rZVBhdHRlcm4oKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJl
Y29yZERyYXdFbGxpcHNlKHJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjphcHBseUZpbGxQYXR0
ZXJuKCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAg
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICByZWNvcmRBcHBseUZpbGxQ
YXR0ZXJuKCk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0aChw
YXRoKTsKIH0KLSNlbmRpZgogCi12b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGN1cnJl
bnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KGN1cnJlbnRTdGF0ZSgpLmN0bS5tYXBSZWN0
KHJlY3QpKTsKLSAgICByZWNvcmRDbGlwKHJlY3QpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3Ip
OwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rz
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
cmVjb3JkQ2xpcE91dChyZWN0KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCi12
b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCisjaWYgUExBVEZPUk0oTUFD
KQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29s
JiwgY29uc3QgQ29sb3ImKQogewotICAgIHJlY29yZENsaXBPdXRUb1BhdGgocGF0aCk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0
aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQog
ewotICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KGN1cnJlbnRTdGF0ZSgp
LmN0bS5tYXBSZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKSk7Ci0gICAgcmVjb3JkQ2xpcFBh
dGgocGF0aCwgd2luZFJ1bGUpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisjZW5kaWYKIAot
SW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Cit2b2lkIFJlY29yZGVyOjpkcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQogewotICAgIGlmIChhdXRvIGludmVyc2UgPSBjdXJyZW50U3RhdGUoKS5j
dG0uaW52ZXJzZSgpKQotICAgICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChpbnZlcnNlLT5t
YXBSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpKTsKKyAgICBpZiAoIXJlY29yZFJlc291
cmNlVXNlKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgLy8gSWYgdGhlIENUTSBpcyBub3QgaW52ZXJ0aWJsZSwg
cmV0dXJuIHRoZSBvcmlnaW5hbCByZWN0LgotICAgIC8vIFRoaXMgbWF0Y2hlcyBDR1JlY3RBcHBs
eUludmVyc2VBZmZpbmVUcmFuc2Zvcm0gYmVoYXZpb3IuCi0gICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QoY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcyk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMo
KTsKKyAgICByZWNvcmREcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBS
ZWNvcmRlcjo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIsIEZpbHRl
clJlc3VsdHMmIHJlc3VsdHMpCiB7Ci0gICAgcmVjb3JkUmVzb3VyY2VVc2UoaW1hZ2VCdWZmZXIp
OwotICAgIHJlY29yZENsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCk7Ci19
CisgICAgZm9yIChhdXRvJiBlZmZlY3QgOiBmaWx0ZXIuZWZmZWN0c09mVHlwZShGaWx0ZXJFZmZl
Y3Q6OlR5cGU6OkZFSW1hZ2UpKSB7CisgICAgICAgIGF1dG8mIGZlSW1hZ2UgPSBkb3duY2FzdDxG
RUltYWdlPihlZmZlY3QuZ2V0KCkpOworICAgICAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKGZl
SW1hZ2Uuc291cmNlSW1hZ2UoKSkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVy
LCByZXN1bHRzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KIAotUmVm
UHRyPEltYWdlQnVmZmVyPiBSZWNvcmRlcjo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgY29sb3JTcGFjZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNb2RlPiByZW5kZXJpbmdN
b2RlLCBzdGQ6Om9wdGlvbmFsPFJlbmRlcmluZ01ldGhvZD4gcmVuZGVyaW5nTWV0aG9kKSBjb25z
dAotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nTWV0
aG9kLnZhbHVlX29yKFJlbmRlcmluZ01ldGhvZDo6RGlzcGxheUxpc3QpKTsKLX0KKyAgICBpZiAo
IXNvdXJjZUltYWdlKSB7CisgICAgICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgICAgIHJl
Y29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKG51bGxwdHIsIHNvdXJjZUltYWdlUmVjdCwgZmls
dGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotI2lmIEVOQUJMRShWSURFTykKLXZvaWQg
UmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIGlmICghcGxheWVyLmlkZW50aWZpZXIoKSkg
ewotICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRl
c3RpbmF0aW9uKTsKKyAgICBpZiAoIXJlY29yZFJlc291cmNlVXNlKCpzb3VyY2VJbWFnZSkpIHsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzb3VyY2VJ
bWFnZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIsIHJlc3VsdHMpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIEFTU0VSVChwbGF5ZXIuaWRlbnRpZmllcigpKTsKLSAgICByZWNvcmRQYWlu
dEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisKKyAgICBhcHBseVN0YXRlQ2hh
bmdlcygpOworICAgIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKHNvdXJjZUltYWdlLCBz
b3VyY2VJbWFnZVJlY3QsIGZpbHRlcik7CiB9Ci0jZW5kaWYKIAotdm9pZCBSZWNvcmRlcjo6YXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIC8vIFdl
IG1vZGlmeSB0aGUgc3RhdGUgZGlyZWN0bHkgaGVyZSBpbnN0ZWFkIG9mIGNhbGxpbmcgR3JhcGhp
Y3NDb250ZXh0OjpzY2FsZSgpCi0gICAgLy8gYmVjYXVzZSB0aGUgcmVjb3JkZWQgaXRlbSB3aWxs
IHNjYWxlKCkgd2hlbiByZXBsYXllZC4KLSAgICBjdXJyZW50U3RhdGUoKS5zY2FsZSh7IGRldmlj
ZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvciB9KTsKKyAgICByZWNvcmRSZXNvdXJjZVVz
ZShpbWFnZSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmREcmF3TmF0aXZl
SW1hZ2UoaW1hZ2UucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGltYWdlU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQogCi0gICAgLy8gRklYTUU6IHRoaXMgY2hhbmdl
cyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4
dGVudHMuCi0gICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KLSAg
ICByZWNvcmRBcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7
CisgICAgcmVjb3JkRHJhd1N5c3RlbUltYWdlKHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3Qp
OwogfQogCi1GbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKK3ZvaWQgUmVjb3Jk
ZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBX
VEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscygpIGlzIG5v
dCB5ZXQgY29tcGF0aWJsZSB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1
cm4gcmVjdDsKKyAgICByZWNvcmRSZXNvdXJjZVVzZShpbWFnZSk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICByZWNvcmREcmF3UGF0dGVybihpbWFnZS5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKLWNvbnN0IFJlY29yZGVyOjpDb250ZXh0U3RhdGUmIFJl
Y29yZGVyOjpjdXJyZW50U3RhdGUoKSBjb25zdAordm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4o
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIEFTU0VSVChtX3N0
YXRlU3RhY2suc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBp
ZiAoIXJlY29yZFJlc291cmNlVXNlKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQYXR0ZXJuKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd1BhdHRlcm4o
aW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCi1S
ZWNvcmRlcjo6Q29udGV4dFN0YXRlJiBSZWNvcmRlcjo6Y3VycmVudFN0YXRlKCkKKyNpZiBFTkFC
TEUoVklERU8pCit2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
IHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBBU1NFUlQobV9z
dGF0ZVN0YWNrLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAg
aWYgKCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFp
bnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICByZWNvcmRQYWludEZyYW1lRm9y
TWVkaWEocGxheWVyLmlkZW50aWZpZXIoKSwgZGVzdGluYXRpb24pOwogfQorI2VuZGlmCiAKLWNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgUmVjb3JkZXI6OmN0bSgpIGNvbnN0Cit2b2lkIFJlY29yZGVy
OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9v
dGhpbmdNb2RlKQogewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07CisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKyAgICBtX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzKGZvbnQs
IGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7
CiB9CiAKLXZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpCit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzQW5kQ2FjaGVGb250KGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJB
ZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2Fs
QW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIGN0bS50cmFu
c2xhdGUoeCwgeSk7CisgICAgcmVjb3JkUmVzb3VyY2VVc2UoY29uc3RfY2FzdDxGb250Jj4oZm9u
dCkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0dseXBocyhmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpOwog
fQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKQogewotICAgIGRvdWJsZSBhbmds
ZUluRGVncmVlcyA9IHJhZDJkZWcoc3RhdGljX2Nhc3Q8ZG91YmxlPihhbmdsZUluUmFkaWFucykp
OwotICAgIGN0bS5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOwotICAgIAotICAgIEFmZmluZVRyYW5z
Zm9ybSByb3RhdGlvbjsKLSAgICByb3RhdGlvbi5yb3RhdGUoYW5nbGVJbkRlZ3JlZXMpOworICAg
IGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgcmVjb3JkRHJhd0xpbmVzRm9yVGV4dChwb2ludCwg
dGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CiB9CiAKLXZvaWQgUmVj
b3JkZXI6OkNvbnRleHRTdGF0ZTo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBS
ZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGN0bS5zY2FsZShzaXplKTsK
KyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIocmVjdCwgc3R5bGUpOwogfQogCi12b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4g
UmVjb3JkZXI6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2Us
IHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9kZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmluZ01ldGhvZCkgY29uc3QKIHsKLSAgICBjdG0gPSBt
YXRyaXg7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdN
ZXRob2QudmFsdWVfb3IoUmVuZGVyaW5nTWV0aG9kOjpEaXNwbGF5TGlzdCkpOwogfQogCi12b2lk
IFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IG1hdHJpeCkKK0Zsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQogewotICAgIGN0
bSAqPSBtYXRyaXg7CisgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVj
b3JkZXIuIik7CisgICAgcmV0dXJuIHJlY3Q7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlM
aXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA4NDVlYzAwNzcy
ZWQyYzU0YTFlNmNiMjZiMjE1MWRhYmFhNmVjMDc1Li5hZTM0Mzc5YmU2N2YwNWUxMDQyZjZhZGM1
YWFiZjg4YzI3MGMxNzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
QEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCiAjaW5jbHVk
ZSAiRHJhd0dseXBoc1JlY29yZGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4KICNpbmNsdWRlICJJbmxp
bmVQYXRoRGF0YS5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgpAQCAtNTEsNyArNTAsNyBAQCBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNv
cmRlcihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25z
dHJ1Y3REcmF3R2x5cGhzID0gRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlw
aHM6Olllcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoY29uc3QgRmxvYXRSZWN0JiBp
bml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBocyA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RGVj
b25zdHJ1Y3REcmF3R2x5cGhzOjpZZXMpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJl
Y29yZGVyKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpID0g
MDsKQEAgLTYxLDQ3ICs2MCwzNSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIHJlY29yZFNhdmUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZFJlc3RvcmUoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRTY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
ID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8
dWludDhfdD4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29s
b3IoU1JHQkE8dWludDhfdD4pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGluZUNhcChMaW5lQ2Fw
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TGlu
ZUpvaW4oTGluZUpvaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1p
dChmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGVhclNoYWRvdygpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmKSA9IDA7CisKKyNpZiBVU0UoQ0cpCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5U3Ry
b2tlUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVy
bigpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdOYXRpdmVJ
bWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlY29yZEVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb25SZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQ2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxS
ZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBH
cmFkaWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSA9IDA7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVEYXRhJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IEFyY0RhdGEmKSA9IDA7CkBAIC0xMDksMTEgKzk2
LDEwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRmlsbEJlemllckN1cnZl
KGNvbnN0IEJlemllckN1cnZlRGF0YSYpID0gMDsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBy
ZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRG
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAg
IHZpcnR1YWwgdm9pZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSA9IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjb3JkU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSA9IDA7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25zdCBBcmNEYXRhJikgPSAwOwpAQCAtMTIx
LDExNiArMTA3LDgxIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkU3Ryb2tl
QmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYXRhJikgPSAwOwogI2VuZGlmCiAgICAgdmly
dHVhbCB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0jaWYgVVNF
KENHKQotICAgIHZpcnR1YWwgdm9pZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY29yZEFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3Jk
RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
b3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZWNvcmREcmF3TmF0aXZlSW1hZ2UoUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERy
YXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25S
ZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29yZERyYXdQYXR0ZXJuKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSA9IDA7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgdm9pZCByZWNv
cmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKSA9IDA7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlY29y
ZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpID0gMDsKIAogICAg
IHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShOYXRpdmVJbWFnZSYpID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoSW1hZ2VCdWZmZXImKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIHJlY29yZFJlc291cmNlVXNlKGNvbnN0IFNvdXJjZUltYWdlJikgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCByZWNvcmRSZXNvdXJjZVVzZShGb250JikgPSAwOwogCi0gICAgc3RydWN0
IENvbnRleHRTdGF0ZSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0gICAgICAgIEZs
b2F0UmVjdCBjbGlwQm91bmRzOwotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSBz
dGF0ZUNoYW5nZTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbGFzdERyYXdpbmdTdGF0
ZTsKLQotICAgICAgICBDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBj
bGlwKQotICAgICAgICAgICAgOiBjdG0odHJhbnNmb3JtKQotICAgICAgICAgICAgLCBjbGlwQm91
bmRzKGNsaXApCi0gICAgICAgICAgICAsIGxhc3REcmF3aW5nU3RhdGUoc3RhdGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnRleHRTdGF0ZSBjbG9uZUZvclNhdmUoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBDb250ZXh0U3RhdGUgc3RhdGUobGFzdERyYXdpbmdT
dGF0ZSwgY3RtLCBjbGlwQm91bmRzKTsKLSAgICAgICAgICAgIHN0YXRlLnN0YXRlQ2hhbmdlID0g
c3RhdGVDaGFuZ2U7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBDb250ZXh0U3RhdGUgY2xvbmVGb3JUcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGF1dG8gc3RhdGUgPSBjbG9uZUZvclNhdmUoKTsKLSAgICAgICAg
ICAgIHN0YXRlLmxhc3REcmF3aW5nU3RhdGUuYWxwaGEgPSAxOwotICAgICAgICAgICAgcmV0dXJu
IHN0YXRlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSk7Ci0gICAgICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKLSAgICAg
ICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICAgICAgdm9pZCBjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOwotICAgIH07Ci0KLSAgICBjb25zdCBWZWN0b3I8Q29udGV4dFN0YXRlLCA0
PiYgc3RhdGVTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVTdGFjazsgfQotCi0gICAgY29u
c3QgQ29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKSBjb25zdDsKLSAgICBDb250ZXh0U3RhdGUm
IGN1cnJlbnRTdGF0ZSgpOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5n
TW9kZT4sIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTWV0aG9kPikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgCisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCkgPSAwOwogCiBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxh
dGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQogCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZXN0b3JlKCkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseVN0YXRlQ2hhbmdl
cygpIGZpbmFsOwogI2lmIFVTRShDRykKLSAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9v
bCkgZmluYWwgeyB9Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZp
bmFsIHsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmlu
YWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CiAj
ZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpIGZpbmFsOwogCi0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
LQotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgp
IGNvbnN0IGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRpZFVw
ZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xp
cChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQ
YXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpIGZpbmFsOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBmaW5hbDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lk
dGgpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOwogCi0jaWYgVVNFKENHKQotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
cHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7Ci0jZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIEZpbHRlciYsIEZpbHRlclJl
c3VsdHMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHNBbmRDYWNoZUZvbnQoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2Rl
KSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3UGF0dGVybihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpIGZp
bmFsOwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKQEAg
LTI0MSw0MCArMTkyLDIzIEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJv
b2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNhdmUoKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
c3RvcmUoKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcm90YXRlKGZsb2F0
IGFuZ2xlSW5SYWRpYW5zKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JU
IEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2Nh
bGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFs
OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5h
bDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZp
bmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwg
RmlsdGVyJiwgRmlsdGVyUmVzdWx0cyYpIGZpbmFsOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b25SZWN0KSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5h
bDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKICNpZiBFTkFC
TEUoVklERU8pCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBm
aW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5n
TW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3R2x5cGhzQW5kQ2FjaGVG
b250KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9y
LCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VT
dHlsZSkgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKIAotICAg
IHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGFwcGVu
ZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQotICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgY3RtKCkgY29uc3Q7Ci0KLSAgICBWZWN0b3I8Q29udGV4dFN0YXRlLCA0PiBtX3N0
YXRlU3RhY2s7CiAgICAgRHJhd0dseXBoc1JlY29yZGVyIG1fZHJhd0dseXBoc1JlY29yZGVyOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5jcHAKaW5k
ZXggMWZkYzZiYTU2YmZkYjI2MzZlZmIzNDYyYWRhMmE5OTBkMzM4OTk0NS4uMWZiNGRkNzk1YWUx
MGFhOGNjY2JjZGQ4MzE0ZWVhODA4NmU4ZGI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlckltcGwuY3BwCkBAIC00MiwxOCArNDIsMTMgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLVJlY29yZGVySW1wbDo6UmVjb3Jk
ZXJJbXBsKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5
cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKLSAgICA6IFJlY29yZGVyKHN0YXRlLCBpbml0aWFs
Q2xpcCwgaW5pdGlhbENUTSwgZGVjb25zdHJ1Y3REcmF3R2x5cGhzKQorUmVjb3JkZXJJbXBsOjpS
ZWNvcmRlckltcGwoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBGbG9hdFJlY3QmIGlu
aXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERyYXdHbHlwaHNS
ZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0dseXBocykKKyAg
ICA6IFJlY29yZGVyKGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlw
aHMpCiAgICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQogewogICAgIExPR19XSVRIX1NU
UkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiXG5SZWNvcmRpbmcgd2l0aCBjbGlwICIgPDwg
aW5pdGlhbENsaXApOwogfQogCi1SZWNvcmRlckltcGw6On5SZWNvcmRlckltcGwoKQotewotICAg
IEFTU0VSVChzdGF0ZVN0YWNrKCkuc2l6ZSgpID09IDEpOyAvLyBJZiB0aGlzIGZpcmVzLCBpdCBp
bmRpY2F0ZXMgbWlzbWF0Y2hlZCBzYXZlL3Jlc3RvcmUuCi19Ci0KIHZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRTYXZlKCkKIHsKICAgICBhcHBlbmQ8U2F2ZT4oKTsKQEAgLTY0LDMxICs1OSw2IEBA
IHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRSZXN0b3JlKCkKICAgICBhcHBlbmQ8UmVzdG9yZT4o
KTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KQotewotICAgIGFwcGVuZDxUcmFuc2xhdGU+KHgsIHkpOwotfQotCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkUm90YXRlKGZsb2F0IGFuZ2xlKQotewotICAgIGFwcGVuZDxSb3RhdGU+KGFu
Z2xlKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgc2NhbGUpCi17Ci0gICAgYXBwZW5kPFNjYWxlPihzY2FsZSk7Ci19Ci0KLXZvaWQgUmVjb3Jk
ZXJJbXBsOjpyZWNvcmRTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17
Ci0gICAgYXBwZW5kPFNldENUTT4odHJhbnNmb3JtKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQot
ewotICAgIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4odHJhbnNmb3JtKTsKLX0KLQogdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBpbmxpbmVD
b2xvcikKIHsKICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihpbmxpbmVDb2xvcik7CkBA
IC0xMDQsOTIgKzc0LDI2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdHJva2VUaGlj
a25lc3MoZmxvYXQgdGhpY2tuZXNzKQogICAgIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KHRo
aWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGNoYW5nZUZsYWdzKQotewotICAgIGFwcGVuZDxTZXRTdGF0ZT4oc3RhdGUsIGNo
YW5nZUZsYWdzKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVDYXAoTGlu
ZUNhcCBsaW5lQ2FwKQotewotICAgIGFwcGVuZDxTZXRMaW5lQ2FwPihsaW5lQ2FwKTsKLX0KLQot
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgYXJy
YXksIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgYXBwZW5kPFNldExpbmVEYXNoPihhcnJheSwg
ZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRMaW5lSm9pbihM
aW5lSm9pbiBqb2luKQotewotICAgIGFwcGVuZDxTZXRMaW5lSm9pbj4oam9pbik7Ci19Ci0KLXZv
aWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAg
IGFwcGVuZDxTZXRNaXRlckxpbWl0PihsaW1pdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGVhclNoYWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwotfQotCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQot
ewotICAgIGFwcGVuZDxDbGlwPihjbGlwUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCit2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewot
ICAgIGFwcGVuZDxDbGlwT3V0PihjbGlwUmVjdCk7CisgICAgYXBwZW5kPFNldFN0YXRlPihzdGF0
ZSk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQot
ewotICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIGRlc3RpbmF0aW9uUmVjdCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXBwZW5k
PENsaXBPdXRUb1BhdGg+KHBhdGgpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSkKLXsKLSAgICBhcHBlbmQ8Q2xp
cFBhdGg+KHBhdGgsIHJ1bGUpOwotfQotCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd0Zp
bHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgc3RkOjpvcHRpb25h
bDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7Ci0gICAgaWYgKHNvdXJj
ZUltYWdlKQotICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpOwotICAgIGFwcGVuZDxEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcj4oV1RG
TW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOwotfQotCi12b2lkIFJl
Y29yZGVySW1wbDo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMs
IHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290
aGluZ01vZGUgbW9kZSkKLXsKLSAgICBhcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhzLCBh
ZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlKTsKLX0KLQotdm9pZCBSZWNvcmRlcklt
cGw6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZl
cj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdOYXRp
dmVJbWFnZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
KyNpZiBVU0UoQ0cpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0ZXJu
KCkKIHsKLSAgICBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpbWFnZUlkZW50aWZpZXIsIGltYWdl
U2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgIGFwcGVuZDxBcHBseVN0cm9r
ZVBhdHRlcm4+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3U3lzdGVtSW1h
Z2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
UmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAg
ICBhcHBlbmQ8RHJhd1N5c3RlbUltYWdlPihzeXN0ZW1JbWFnZSwgZGVzdGluYXRpb25SZWN0KTsK
KyAgICBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4oKTsKIH0KKyNlbmRpZiAvLyBVU0UoQ0cpCiAK
LXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKIHsKLSAgICBhcHBlbmQ8
RHJhd1BhdHRlcm4+KGltYWdlSWRlbnRpZmllciwgZGVzdFJlY3QsIHRpbGVSZWN0LCB0cmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcj4oc2NhbGVGYWN0b3IpOwogfQogCiB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQpAQCAtMjAyLDQ0ICsxMDYsMzQgQEAg
dm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBhcHBl
bmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmREcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAg
ICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGxpbmVXaWR0aCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikKLXsKLSAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsK
LX0KLQotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwKGNvbnN0IEZsb2F0
UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KGJsb2NrTG9j
YXRpb24sIGxvY2FsQW5jaG9yLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxp
bmVzKTsKKyAgICBhcHBlbmQ8Q2xpcD4oY2xpcFJlY3QpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3ZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQogewotICAg
IGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihyZWN0LCBzdHlsZSk7CisgICAgYXBw
ZW5kPENsaXBQYXRoPihwYXRoLCBydWxlKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29y
ZERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpy
ZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgYXBwZW5kPERy
YXdFbGxpcHNlPihyZWN0KTsKKyAgICBhcHBlbmQ8Q2xpcE91dD4oY2xpcFJlY3QpOwogfQogCi12
b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQg
UmVjb3JkZXJJbXBsOjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgYXBwZW5kPERyYXdQYXRoPihwYXRoKTsKKyAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0
aCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAg
ICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1BhdGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsK
KyAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi12b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0
cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KTsKKyAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI1NywyMyArMTUxLDIy
IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBnCiAgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRp
ZW50PihyZWN0LCBncmFkaWVudCk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxs
Q29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVjb3JkZXJJbXBs
OjpyZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KHJlY3Qs
IGNvbG9yLCBvcCwgbW9kZSk7CisgICAgYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29s
b3IpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIG1v
ZGUpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3Qs
IGNvbG9yLCBtb2RlKTsKKyAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3Qs
IHJvdW5kZWRSZWN0LCBjb2xvcik7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFw
cGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZFJlY3QsIGNvbG9yKTsK
KyAgICBhcHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwogfQogCiAjaWYgRU5BQkxFKElOTElORV9Q
QVRIX0RBVEEpCi0KIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsTGluZShjb25zdCBMaW5l
RGF0YSYgbGluZSkKIHsKICAgICBhcHBlbmQ8RmlsbExpbmU+KGxpbmUpOwpAQCAtMjkzLDcgKzE4
Niw2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRGaWxsQmV6aWVyQ3VydmUoY29uc3QgQmV6
aWVyQ3VydmVEYXRhJiBjdXJ2ZSkKIHsKICAgICBhcHBlbmQ8RmlsbEJlemllckN1cnZlPihjdXJ2
ZSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zMDEsMjUgKzE5
MywxNyBAQCB2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKICAgICBhcHBlbmQ8RmlsbFBhdGg+KHBhdGgpOwogfQogCi12b2lkIFJlY29yZGVySW1wbDo6
cmVjb3JkRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGFwcGVuZDxG
aWxsRWxsaXBzZT4ocmVjdCk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIFJlY29yZGVy
SW1wbDo6cmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkU3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAg
ICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICBh
cHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KLSNlbmRpZiAvLyBF
TkFCTEUoVklERU8pCiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3Jk
U3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kPFN0cm9r
ZVJlY3Q+KHJlY3QsIHdpZHRoKTsKKyAgICBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CiB9
CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQogdm9pZCBSZWNvcmRlckltcGw6OnJl
Y29yZFN0cm9rZUxpbmUoY29uc3QgTGluZURhdGEmIGxpbmUpCiB7CiAgICAgYXBwZW5kPFN0cm9r
ZUxpbmU+KGxpbmUpOwpAQCAtMzM5LDcgKzIyMyw2IEBAIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNv
cmRTdHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmIGN1cnZlKQogewogICAg
IGFwcGVuZDxTdHJva2VCZXppZXJDdXJ2ZT4oY3VydmUpOwogfQotCiAjZW5kaWYgLy8gRU5BQkxF
KElOTElORV9QQVRIX0RBVEEpCiAKIHZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRTdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNDcsMzMgKzIzMCw4NCBAQCB2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIGFwcGVuZDxTdHJva2VQ
YXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZFN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFw
cGVuZDxTdHJva2VFbGxpcHNlPihyZWN0KTsKKyAgICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGJv
cmRlclRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmRDbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewot
ICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOworICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQx
LCBwb2ludDIpOwogfQogCi0jaWYgVVNFKENHKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhcHBlbmQ8RHJhd0VsbGlw
c2U+KHJlY3QpOworfQogCi12b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkQXBwbHlTdHJva2VQYXR0
ZXJuKCkKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+KCk7CisgICAgYXBwZW5kPERyYXdQ
YXRoPihwYXRoKTsKIH0KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFwcGx5RmlsbFBhdHRl
cm4oKQordm9pZCBSZWNvcmRlckltcGw6OnJlY29yZERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4oKTsKKyAgICBhcHBlbmQ8RHJhd0ZvY3Vz
UmluZ1BhdGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAotI2VuZGlmIC8vIFVT
RShDRykKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMs
IHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKK30KIAotdm9pZCBSZWNvcmRlckltcGw6OnJlY29yZEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCit2b2lkIFJlY29yZGVySW1w
bDo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihz
Y2FsZUZhY3Rvcik7CisgICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2VJZGVudGlmaWVy
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZWNv
cmRlckltcGw6OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIGFwcGVuZDxEcmF3U3lz
dGVtSW1hZ2U+KHN5c3RlbUltYWdlLCBkZXN0aW5hdGlvblJlY3QpOworfQorCit2b2lkIFJlY29y
ZGVySW1wbDo6cmVjb3JkRHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBhcHBlbmQ8RHJhd0ltYWdl
QnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIFJlY29yZGVySW1wbDo6cmVjb3JkRHJh
d0ZpbHRlcmVkSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGlkZW50aWZpZXI7CisgICAgaWYgKHNv
dXJjZUltYWdlKQorICAgICAgICBpZGVudGlmaWVyID0gc291cmNlSW1hZ2UtPnJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpOworICAgIGFwcGVuZDxEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcj4o
V1RGTW92ZShpZGVudGlmaWVyKSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXIpOworfQorCit2b2lk
IFJlY29yZGVySW1wbDo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1h
Z2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBSZWNvcmRlckltcGw6
OnJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKK3sKKyAgICBhcHBlbmQ8UGFpbnRGcmFt
ZUZvck1lZGlhPihpZGVudGlmaWVyLCBkZXN0aW5hdGlvbik7Cit9CisjZW5kaWYKKwordm9pZCBS
ZWNvcmRlckltcGw6OnJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9v
dGhpbmdNb2RlIG1vZGUpCit7CisgICAgYXBwZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBocywg
YWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgbW9kZSk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJ
bXBsOjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKQoreworICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihGbG9hdFBvaW50
KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVMaW5lcyk7Cit9CisKK3ZvaWQgUmVjb3JkZXJJbXBsOjpyZWNvcmREcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUmIHN0eWxlKQoreworICAgIGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihy
ZWN0LCBzdHlsZSk7CiB9CiAKIGJvb2wgUmVjb3JkZXJJbXBsOjpyZWNvcmRSZXNvdXJjZVVzZShO
YXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UpCkBAIC00MTcsMjAgKzM1MSwxNiBAQCBzdGF0aWMgaW5s
aW5lIGZsb2F0IHNoYWRvd1BhaW50aW5nRXh0ZW50KGZsb2F0IGJsdXJSYWRpdXMpCiAKIEZsb2F0
UmVjdCBSZWNvcmRlckltcGw6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IHJlY3Q7Ci0gICAgYXV0byYg
c3RhdGUgPSBjdXJyZW50U3RhdGUoKTsKKyAgICBhdXRvIGJvdW5kcyA9IHJlY3Q7CiAKLSAgICBG
bG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd1JhZGl1czsKLSAgICBDb2xv
ciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFk
aXVzLCBzaGFkb3dDb2xvcikpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJv
dW5kczsKLSAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKLSAgICAgICAg
c2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7
CisgICAgaWYgKGhhc1NoYWRvdygpKSB7CisgICAgICAgIGF1dG8gc2hhZG93RXh0ZW50ID0gYm91
bmRzOworICAgICAgICBzaGFkb3dFeHRlbnQubW92ZShkcm9wU2hhZG93KCkub2Zmc2V0KTsKKyAg
ICAgICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoZHJvcFNoYWRv
dygpLmJsdXJSYWRpdXMpKTsKICAgICAgICAgYm91bmRzLnVuaXRlKHNoYWRvd0V4dGVudCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGludGVyc2VjdGlvbihzdGF0ZS5jbGlwQm91bmRzLCBzdGF0ZS5j
dG0ubWFwUmVjdChib3VuZHMpKTsKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKGNsaXBCb3VuZHMo
KSwgZ2V0Q1RNKCkubWFwUmVjdChib3VuZHMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKaW5kZXgg
NjQyMjY1ZjA5ODAyMmNmMmIwNWYxODBjMTc0ZmEwMzQ2MmYyZGQ0MC4uNmRlNmFlZGZmY2IxN2Ri
MmQwODFiNDJjMWRlNmJjMzI5YTM4YmY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXJJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXJJbXBsLmgKQEAgLTM1LDkgKzM1LDggQEAgY2xhc3MgUmVjb3JkZXJJbXBsIDog
cHVibGljIFJlY29yZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShSZWNvcmRlckltcGwpOwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQ
T1JUIFJlY29yZGVySW1wbChEaXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVj
b3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5SZWNvcmRlckltcGwoKTsKLQorICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVySW1w
bChEaXNwbGF5TGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSwgRHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0
cnVjdERyYXdHbHlwaHMgPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBo
czo6WWVzKTsKKyAgICAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bs
YXlMaXN0LmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkg
ZmluYWwgeyB9CkBAIC00Nyw0NyArNDYsMzUgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lk
IHJlY29yZFNhdmUoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFJlc3RvcmUoKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKLSAgICB2b2lk
IHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRTY2FsZShj
b25zdCBGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxs
Q29sb3IoU1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ry
b2tlQ29sb3IoU1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwot
ICAgIHZvaWQgcmVjb3JkU2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmRDbGVhclNoYWRvdygpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmKSBmaW5hbDsKKworI2lmIFVTRShDRykKKyAgICB2b2lkIHJlY29y
ZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0
dGVybigpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSBmaW5hbDsKKwogICAgIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CiAg
ICAgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0
IFBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5k
UnVsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciosIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImKSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAg
ICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdOYXRpdmVJbWFnZShSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3Jk
RHJhd1N5c3RlbUltYWdlKFN5c3RlbUltYWdlJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Ci0g
ICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdGb2N1c1JpbmdSZWN0
cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCiAgICAgdm9p
ZCByZWNvcmRGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICAgICB2b2lkIHJlY29y
ZEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7
CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBH
cmFkaWVudCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworCisgICAg
dm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IExpbmVE
YXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IEFyY0RhdGEmKSBmaW5h
bDsKQEAgLTk1LDExICs4MiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVjb3JkRmlsbEJlemll
ckN1cnZlKGNvbnN0IEJlemllckN1cnZlRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAgICAgdm9pZCBy
ZWNvcmRGaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9p
ZCByZWNvcmRQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKSBmaW5hbDsKLSNlbmRpZgotICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKworICAg
IHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3Qg
TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25zdCBBcmNEYXRh
JikgZmluYWw7CkBAIC0xMDcsMTMgKzkzLDI4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNvcmRT
dHJva2VCZXppZXJDdXJ2ZShjb25zdCBCZXppZXJDdXJ2ZURhdGEmKSBmaW5hbDsKICNlbmRpZgog
ICAgIHZvaWQgcmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmRTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwotI2lmIFVTRShDRykKLSAgICB2
b2lkIHJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQXBw
bHlGaWxsUGF0dGVybigpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpIGZpbmFsOworICAgIHZvaWQgcmVjb3Jk
RHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpICBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7Cisg
ICAgCisgICAgdm9pZCByZWNvcmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIEZpbHRlciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZv
aWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFn
ZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisjaWYgRU5BQkxF
KFZJREVPKQorICAgIHZvaWQgcmVjb3JkUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRl
bnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKLSAg
ICB2b2lkIHJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisgICAg
dm9pZCByZWNvcmREcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCBy
ZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
KSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmKSBmaW5hbDsKIAogICAg
IGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoTmF0aXZlSW1hZ2UmKSBmaW5hbDsKICAgICBib29sIHJl
Y29yZFJlc291cmNlVXNlKEltYWdlQnVmZmVyJikgZmluYWw7CkBAIC0xMzksNiArMTQwLDggQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgcmVjb3JkQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2Fs
Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCiAgICAgRGlzcGxheUxpc3QmIG1fZGlz
cGxheUxpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXgg
OGZmMTlkMDAzNTRjZGJlZGUzYTViYTFhZjc1OGNmZjAyM2EyNWEyMi4uNjZmYzlkODgyYTRkM2Y3
ZGU4ZTg5MTJhMWYzMGFmMTk4ZDAzNTI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlcGxheWVyLmNwcApAQCAtOTcsMTAgKzk3LDEwIEBAIGlubGluZSBzdGF0aWMgc3RkOjpvcHRp
b25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IGFwcGx5U2V0U3RhdGVJdGVtKEdyYXBo
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfTsKIAotICAgIGlmIChhdXRvIGlt
YWdlSWRlbnRpZmllciA9IGZpeFBhdHRlcm5UaWxlSW1hZ2Uoc2V0U3RhdGVJdGVtLnN0YXRlQ2hh
bmdlKCkubV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAoYXV0byBpbWFnZUlk
ZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5zdGF0ZSgpLmZpbGxC
cnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybiAqaW1hZ2VJZGVudGlmaWVyOwogCi0g
ICAgaWYgKGF1dG8gaW1hZ2VJZGVudGlmaWVyID0gZml4UGF0dGVyblRpbGVJbWFnZShzZXRTdGF0
ZUl0ZW0uc3RhdGVDaGFuZ2UoKS5tX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpKSkKKyAgICBpZiAo
YXV0byBpbWFnZUlkZW50aWZpZXIgPSBmaXhQYXR0ZXJuVGlsZUltYWdlKHNldFN0YXRlSXRlbS5z
dGF0ZSgpLmZpbGxCcnVzaCgpLnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybiAqaW1hZ2VJZGVu
dGlmaWVyOwogCiAgICAgc2V0U3RhdGVJdGVtLmFwcGx5KGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRHJhd0dseXBoc1JlY29y
ZGVySGFyZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovRHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCmluZGV4IGQwOWMxMzczZWE5YWFhZjRh
MTg1MTM2ZWU4ODUzZDc4OGZjNDE3OGQuLmZjYWRlZjIzOGUwOWZlMDI4MmFjZWVjOWExZjI1Zjg3
MzM5ZDljN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0RyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9EcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5j
cHAKQEAgLTI5LDE3ICsyOSwxOCBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRl
ICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EcmF3R2x5cGhzUmVjb3JkZXI6OkRy
YXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIG93bmVyLCBEZWNvbnN0cnVjdERyYXdH
bHlwaHMsIERlcml2ZUZvbnRGcm9tQ29udGV4dCkKLSAgICA6IG1fb3duZXIob3duZXIpCitEcmF3
R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGRlc3Rp
bmF0aW9uQ29udGV4dCwgRGVjb25zdHJ1Y3REcmF3R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRl
eHQpCisgICAgOiBtX2Rlc3RpbmF0aW9uQ29udGV4dChkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiB9
CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBv
aW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuZHJh
d0dseXBoc0FuZENhY2hlRm9udChmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHN0
YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRyYXdH
bHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBzdGFy
dFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNw
cAppbmRleCA5MTE0NmRmYzZmZDg0ZGY4ZTI5NTRmMDM3N2QwMDY2YTc3MjMzY2M5Li41MTU0N2Fl
NmRmYTEwNGI1ZGQ2NTRhOTMwYjk3MjQxZDk3NzhkMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAq
IENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNzcsMTYwICs3OCwzODkgQEAgYXV0byBjcmVhdGVDb21tYW5kKCkgLT4gc3RkOjpl
bmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8T3BlcmF0aW9uRGF0YTw+LCBUPjo6dmEKIH0KIAog
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09w
ZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDogbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkK
KyAgICA6IEdyYXBoaWNzQ29udGV4dChGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpKQorICAgICwg
bV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKIHsKLSAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsg
eyB9LCB7IH0sIEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0KCkgfSk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZGlkVXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykK
K3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2F2ZSgpCit7CisgICAgc3RydWN0IFNhdmUg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTw+IHsKKyAgICAgICAgdmly
dHVhbCB+U2F2ZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdP
cGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5zYXZlKCk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiU2F2ZTw+XG4iOworICAgICAgICB9CisgICAgfTsKKworICAg
IEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNhdmU+
KCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJlc3RvcmUoKQoreworICAg
IHN0cnVjdCBSZXN0b3JlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
PiB7CisgICAgICAgIHZpcnR1YWwgflJlc3RvcmUoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikucmVzdG9yZSgp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlJlc3RvcmU8PlxuIjsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBpZiAoIXN0YWNrU2l6ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKKyAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxSZXN0b3JlPigpKTsKK30KKwordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjph
cHBseVN0YXRlQ2hhbmdlcygpCiB7Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkgeworICAgIGlmIChzdGF0ZSgpLmNoYW5nZXMoKS5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpDVE0pKSB7CisgICAgICAgIHN0
cnVjdCBTZXRDVE0gZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxBZmZp
bmVUcmFuc2Zvcm0+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldENUTSgpID0gZGVmYXVsdDsK
KworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENUTShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4oKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3Zl
cnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkNUTTw+XG4iOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldENUTT4oZ2V0Q1RNKCkp
KTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNoYW5nZTo6U3Ryb2tlVGhpY2tuZXNzKSkgewogICAgICAgICBzdHJ1Y3Qg
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8ZmxvYXQ+IHsKICAgICAgICAgICAgIHZpcnR1YWwgflN0cm9rZVRoaWNrbmVzc0NoYW5n
ZSgpID0gZGVmYXVsdDsKIAogICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0
aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ry
b2tlVGhpY2tuZXNzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLmNyKCksIGFyZzwwPigpKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBv
dmVycmlkZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VUaGlja25lc3M8PlxuIjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAotICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTdHJva2VUaGlja25lc3NDaGFuZ2U+KHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VUaGlja25lc3NDaGFuZ2U+KHN0cm9rZVRoaWNr
bmVzcygpKSk7CiAgICAgfQogCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVN0eWxlQ2hhbmdlKSB7CisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlN0cm9rZVN0eWxlKSkgewogICAgICAgICBz
dHJ1Y3QgU3Ryb2tlU3R5bGVDaGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxTdHJva2VTdHlsZT4gewogICAgICAgICAgICAgdmlydHVhbCB+U3Ryb2tlU3R5bGVD
aGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ry
b2tlU3R5bGUoY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJy
aWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFw
aGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpTdHJva2VTdHlsZTw+XG4iOworICAgICAgICAgICAg
fQorICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVN0eWxl
Q2hhbmdlPihzdHJva2VTdHlsZSgpKSk7CisgICAgfQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdl
cygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXApKSB7Cisg
ICAgICAgIHN0cnVjdCBTZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8TGluZUNhcD4geworICAgICAgICAgICAgdmlydHVhbCB+U2V0TGluZUNhcCgpID0g
ZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVw
bGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBD
YWlybzo6c2V0TGluZUNhcChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBhcmc8MD4o
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OkxpbmVDYXA8PlxuIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTZXRMaW5l
Q2FwPihsaW5lQ2FwKCkpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZURhc2gpKSB7CisgICAgICAg
IHN0cnVjdCBTZXRMaW5lRGFzaCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPERhc2hBcnJheSwgZmxvYXQ+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldExpbmVEYXNo
KCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIENhaXJvOjpzZXRMaW5lRGFzaChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5jcigpLCBh
cmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1
bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lRGFz
aDw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFNldExpbmVEYXNoPihsaW5lRGFzaCgpLmRhc2hlcywgbGluZURhc2goKS5vZmZz
ZXQpKTsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TGluZUpvaW4pKSB7CisgICAgICAgIHN0cnVjdCBTZXRM
aW5lSm9pbiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPExpbmVKb2lu
PiB7CisgICAgICAgICAgICB2aXJ0dWFsIH5TZXRMaW5lSm9pbigpID0gZGVmYXVsdDsKKworICAg
ICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikg
b3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYWlybzo6c2V0TGluZUpv
aW4oY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q2hhbmdlOjpMaW5lSm9pbjw+XG4iOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVKb2luPihsaW5lSm9p
bigpKSk7CisgICAgfQorCisgICAgaWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6Ok1pdGVyTGltaXQpKSB7CisgICAgICAgIHN0cnVjdCBT
ZXRNaXRlckxpbWl0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Zmxv
YXQ+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7CisK
KyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2Fpcm86OnNldE1p
dGVyTGltaXQoY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJy
aWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJv
a2VTdHlsZUNoYW5nZTw+XG4iOworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6TWl0ZXJMaW1pdDw+XG4iOwogICAgICAgICAgICAg
fQogICAgICAgICB9OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVN0eWxl
Q2hhbmdlPihzdGF0ZS5zdHJva2VTdHlsZSkpOworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTZXRNaXRlckxpbWl0PihtaXRlckxpbWl0KCkpKTsKICAgICB9CiAKLSAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSB7CisgICAg
aWYgKHN0YXRlKCkuY2hhbmdlcygpLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFu
Z2U6OkNvbXBvc2l0ZU1vZGUpKSB7CiAgICAgICAgIHN0cnVjdCBDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlPiB7CiAgICAgICAgICAgICB2aXJ0dWFsIH5Db21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWlu
dGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4
dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICAg
ICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dEZvclJlcGxheShy
ZXBsYXllcikuY3IoKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ29tcG9zaXRlT3BlcmF0aW9uQ2hh
bmdlPD5cbiI7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q2hhbmdlOjpDb21wb3NpdGVNb2RlPD5cbiI7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH07CiAKLSAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlPihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CisgICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZT4oY29tcG9z
aXRlTW9kZSgpLm9wZXJhdGlvbiwgY29tcG9zaXRlTW9kZSgpLmJsZW5kTW9kZSkpOwogICAgIH0K
LQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXND
aGFuZ2UpIHsKKyAgICAKKyAgICBpZiAoc3RhdGUoKS5jaGFuZ2VzKCkuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNoYW5nZTo6U2hvdWxkQW50aWFsaWFzKSkgewogICAgICAgICBzdHJ1
Y3QgU2hvdWxkQW50aWFsaWFzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8Ym9vbD4gewogICAgICAgICAgICAgdmlydHVhbCB+U2hvdWxkQW50aWFsaWFzQ2hh
bmdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
aG91bGRBbnRpYWxpYXMoY29udGV4dEZvclJlcGxheShyZXBsYXllcikuY3IoKSwgYXJnPDA+KCkp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJTaG91bGRBbnRpYWxpYXNDaGFuZ2U8PlxuIjsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkdyYXBoaWNzQ29udGV4dFN0YXRlOjpDaGFuZ2U6OlNob3VsZEFudGlhbGlhczw+XG4i
OwogICAgICAgICAgICAgfQogICAgICAgICB9OwogCi0gICAgICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPFNob3VsZEFudGlhbGlhc0NoYW5nZT4oc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7CisgICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNob3VsZEFudGlhbGlhc0NoYW5nZT4oc2hvdWxkQW50
aWFsaWFzKCkpKTsKICAgICB9CisKKyAgICBkaWRBcHBseVN0YXRlQ2hhbmdlcygpOworfQorCit2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSkKK3sKKyAgICBzdHJ1Y3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGZsb2F0PiB7CisgICAgICAgIHZpcnR1YWwg
fkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJCZWdpblRyYW5zcGFyZW5jeUxheWVyPD5cbiI7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxC
ZWdpblRyYW5zcGFyZW5jeUxheWVyPihvcGFjaXR5KSk7Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQoreworICAgIHN0cnVjdCBFbmRUcmFu
c3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4g
eworICAgICAgICB2aXJ0dWFsIH5FbmRUcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKKwor
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllcikpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0
cyA8PCBpbmRlbnQgPDwgIkVuZFRyYW5zcGFyZW5jeUxheWVyPD5cbiI7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RW5k
VHJhbnNwYXJlbmN5TGF5ZXI+KCkpOworfQorCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHN0cnVjdCBDbGlwIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7CisgICAgICAgIHZp
cnR1YWwgfkNsaXAoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5n
T3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgQ2Fpcm86OmNsaXAoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAg
ICAgICAgeworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwPD5cbiI7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKworICAgIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcChyZWN0KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGlwPihyZWN0KSk7
Cit9CisKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit7CisgICAgc3RydWN0IENsaXBQYXRoIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgV2luZFJ1bGU+IHsKKyAgICAg
ICAgdmlydHVhbCB+Q2xpcFBhdGgoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgewor
ICAgICAgICAgICAgQ2Fpcm86OmNsaXBQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIkNsaXBQYXRoPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgocGF0aCwgd2luZFJ1bGUp
OworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSkpOwog
fQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5l
Q2FwKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBzdHJ1Y3QgU2V0TGluZUNhcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPExpbmVDYXA+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZUNh
cCgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwT3V0
KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJl
cGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpz
ZXRMaW5lQ2FwKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAg
ICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkp
OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldExpbmVDYXA8Plxu
IjsKKyAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOwogICAgICAgICB9
CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNldExpbmVDYXA+KGxpbmVDYXAp
KTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENs
aXBPdXQ+KHJlY3QpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIHN0
cnVjdCBTZXRMaW5lRGFzaCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PERhc2hBcnJheSwgZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+U2V0TGluZURhc2goKSA9IGRl
ZmF1bHQ7CisgICAgc3RydWN0IENsaXBPdXQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxQYXRoPiB7CisgICAgICAgIHZpcnR1YWwgfkNsaXBPdXQoKSA9IGRlZmF1bHQ7
CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXll
cikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OnNldExpbmVEYXNoKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOworICAgICAgICAg
ICAgQ2Fpcm86OmNsaXBPdXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTZXRMaW5lRGFzaDw+XG4i
OworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7CiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0TGluZURhc2g+KGRhc2hlcywg
ZGFzaE9mZnNldCkpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7CisgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8Q2xpcE91dD4ocGF0aCkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQordm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0KQogewotICAgIHN0cnVjdCBTZXRMaW5lSm9pbiBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPExpbmVKb2luPiB7Ci0gICAgICAgIHZpcnR1YWwg
flNldExpbmVKb2luKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBDbGlwVG9JbWFnZUJ1ZmZlciBm
aW5hbDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4sIEZsb2F0UmVjdD4geworICAgICAgICB2aXJ0dWFsIH5DbGlwVG9JbWFnZUJ1ZmZlcigp
ID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c2V0
TGluZUpvaW4oY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAg
ICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
YXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJTZXRMaW5lSm9pbjw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJDbGlwVG9JbWFnZUJ1ZmZlcjw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFNldExpbmVKb2luPihsaW5lSm9pbikpOworICAgIGFwcGx5U3RhdGVD
aGFuZ2VzKCk7CisKKyAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxDbGlwVG9JbWFnZUJ1ZmZlcj4obmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJl
Y3QpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZs
b2F0IG1pdGVyTGltaXQpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgc3RydWN0IFNldE1pdGVyTGltaXQgZmluYWwg
OiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewotICAgICAgICB2aXJ0
dWFsIH5TZXRNaXRlckxpbWl0KCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBDbGVhclJlY3QgZmlu
YWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKKyAgICAg
ICAgdmlydHVhbCB+Q2xlYXJSZWN0KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAgICBDYWlybzo6Y2xlYXJSZWN0KGNvbnRleHRGb3JS
ZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1
bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8
IGluZGVudCA8PCAiU2V0TWl0ZXJMaW1pdDw+XG4iOworICAgICAgICAgICAgdHMgPDwgaW5kZW50
IDw8ICJDbGVhclJlY3Q8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxTZXRNaXRlckxpbWl0PihtaXRlckxpbWl0KSk7CisgICAgYXBwbHlTdGF0ZUNo
YW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxDbGVhclJlY3Q+KHJlY3QpKTsKIH0K
IAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCkBAIC0yNDksNiArNDc5LDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKKwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
ICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3Vy
Y2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CkBAIC0yNjksNiArNTAx
LDggQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgfQogICAgIH07CiAKKyAgICBh
cHBseVN0YXRlQ2hhbmdlcygpOworCiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+
KHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIApAQCAtMjkx
LDM1ICs1MjUsMTIgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5m
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi17Ci0gICAgc3RydWN0IEZpbGxSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9w
ZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSwgQ2Fpcm86OlNoYWRvd1N0YXRlLCBDb21wb3NpdGVPcGVyYXRvcj4gewotICAgICAgICB2aXJ0
dWFsIH5GaWxsUmVjdCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKTsK
LQotICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZv
cm1Db250ZXh0LCBhcmc8Mj4oKSwgYXJnPDM+KCkpOwotICAgICAgICAgICAgQ2Fpcm86OmZpbGxS
ZWN0KHBsYXRmb3JtQ29udGV4dCwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8ND4oKSk7Ci0gICAg
ICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRl
eHQsIGFyZzw1PigpLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRzIDw8IGluZGVudCA8PCAiRmlsbFJlY3Q8PlxuIjsKLSAgICAgICAgfQotICAgIH07CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
LSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIGNvbXBvc2l0
ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHN0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJl
Y3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBmaWxsU3BhY2VUcmFuc2Zvcm0oKSkpKTsK
IH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgc3RydWN0IEZpbGxSb3VuZGVkUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0Um91bmRlZFJlY3QsIENvbG9yLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKICAgICAgICAgdmlydHVhbCB+
RmlsbFJvdW5kZWRSZWN0KCkgPSBkZWZhdWx0OwpAQCAtMzI4LDcgKzUzOSw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRSZWN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8mIHBsYXRmb3JtQ29u
dGV4dCA9IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpOwogCi0gICAgICAgICAgICBDYWlybzo6
U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBh
cmc8Mz4oKSk7CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bihwbGF0Zm9ybUNvbnRleHQuY3IoKSwgYXJnPDI+KCksIGFyZzwzPigpKTsKIAogICAgICAgICAg
ICAgYXV0byYgcmVjdCA9IGFyZzwwPigpOwogICAgICAgICAgICAgaWYgKHJlY3QuaXNSb3VuZGVk
KCkpCkBAIC0zMzYsNyArNTQ3LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBDYWlybzo6ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0
LCByZWN0LnJlY3QoKSwgYXJnPDE+KCksIGFyZzw0PigpKTsKIAotICAgICAgICAgICAgQ2Fpcm86
OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LCBhcmc8Mj4oKSwg
QmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3Np
dGVPcGVyYXRpb24ocGxhdGZvcm1Db250ZXh0LmNyKCksIGFyZzwyPigpLCBCbGVuZE1vZGU6Ok5v
cm1hbCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCkBAIC0zNDUsOCArNTU2LDkgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwgY29sb3IsIHN0
YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOworCisgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdGlv
bigpLCBibGVuZE1vZGUoKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM2NSwxMCArNTc3LDM2IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zCiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsK
KwogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Zmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHN0cnVjdCBGaWxsRWxsaXBz
ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ2Fp
cm86OkZpbGxTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5G
aWxsRWxsaXBzZSgpID0gZGVmYXVsdDsKKworICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdP
cGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBQYXRoIHBhdGg7CisgICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2UoYXJnPDA+KCkpOworICAg
ICAgICAgICAgQ2Fpcm86OmZpbGxQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBwYXRo
LCBhcmc8MT4oKSwgYXJnPDI+KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICB0cyA8PCBpbmRl
bnQgPDwgIkZpbGxFbGxpcHNlPD5cbiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwbHlT
dGF0ZUNoYW5nZXMoKTsKKworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uo
c3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7Cit9CisKIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBzdHJ1Y3Qg
RmlsbFBhdGggZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBD
YWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7CkBAIC0zODgsMzIgKzYyNiwx
MiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworCiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxQYXRoPihwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAg
c3RydWN0IEZpbGxFbGxpcHNlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8RmxvYXRSZWN0LCBDYWlybzo6RmlsbFNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Ci0g
ICAgICAgIHZpcnR1YWwgfkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFBhdGggcGF0aDsKLSAgICAgICAgICAgIHBhdGguYWRkRWxsaXBz
ZShhcmc8MD4oKSk7Ci0gICAgICAgICAgICBDYWlybzo6ZmlsbFBhdGgoY29udGV4dEZvclJlcGxh
eShyZXBsYXllciksIHBhdGgsIGFyZzwxPigpLCBhcmc8Mj4oKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbEVsbGlwc2U8PlxuIjsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RmlsbEVsbGlwc2U+KHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7
CiAgICAgc3RydWN0IFN0cm9rZVJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxGbG9hdFJlY3QsIGZsb2F0LCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hh
ZG93U3RhdGU+IHsKQEAgLTQzMCwzMSArNjQ4LDEwIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0g
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgbGluZVdpZHRoLCBDYWly
bzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwotfQot
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKLXsKLSAgICBzdHJ1Y3QgU3Ryb2tlUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPFBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0
ZT4gewotICAgICAgICB2aXJ0dWFsIH5TdHJva2VQYXRoKCkgPSBkZWZhdWx0OwotCi0gICAgICAg
IHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzdHJva2VQYXRoKGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewot
ICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VQYXRoPD5cbiI7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAg
YXBwbHlTdGF0ZUNoYW5nZXMoKTsKIAogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
LSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ryb2tl
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIAogdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
QEAgLTQ3OSwxMDcgKzY3NiwyOSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PFN0cm9rZUVsbGlwc2U+KHJlY3QsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBzdHJ1Y3QgQ2xlYXJSZWN0
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7Ci0g
ICAgICAgIHZpcnR1YWwgfkNsZWFyUmVjdCgpID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4
ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xlYXJSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
Q2xlYXJSZWN0PD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8Q2xlYXJSZWN0PihyZWN0KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9v
dGhpbmcpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBzdHJ1Y3QgRHJhd0dseXBocyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U3Ryb2tlU291cmNl
LCBDYWlybzo6U2hhZG93U3RhdGUsIEZsb2F0UG9pbnQsIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9u
dF90PiwgZmxvYXQsIFZlY3RvcjxjYWlyb19nbHlwaF90PiwgZmxvYXQsIFRleHREcmF3aW5nTW9k
ZUZsYWdzLCBmbG9hdCwgRmxvYXRTaXplLCBDb2xvciwgRm9udFNtb290aGluZ01vZGU+IHsKLSAg
ICAgICAgdmlydHVhbCB+RHJhd0dseXBocygpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3QgU3Ryb2tl
UGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGgsIENhaXJv
OjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFsIH5T
dHJva2VQYXRoKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAg
IENhaXJvOjpkcmF3R2x5cGhzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwg
YXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCkuZ2V0KCksCi0gICAgICAgICAg
ICAgICAgYXJnPDU+KCksIGFyZzw2PigpLCBhcmc8Nz4oKSwgYXJnPDg+KCksIGFyZzw5PigpLCBh
cmc8MTA+KCksIGFyZzwxMT4oKSwgYXJnPDEyPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpzdHJv
a2VQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFy
ZzwyPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3R2x5
cGhzPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlN0cm9rZVBhdGg8PlxuIjsK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgp
KQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byB4
T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0dseXBo
cyhudW1HbHlwaHMpOwotICAgIHsKLSAgICAgICAgYXV0byB5T2Zmc2V0ID0gcG9pbnQueSgpOwot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAg
ICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH07Ci0g
ICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ry
b2tlU291cmNlKHN0YXRlKSwKLSAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9p
bnQsCi0gICAgICAgIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0
YSgpLnNjYWxlZEZvbnQoKSksCi0gICAgICAgIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBX
VEZNb3ZlKGNhaXJvR2x5cGhzKSwgeE9mZnNldCwgc3RhdGUudGV4dERyYXdpbmdNb2RlLAotICAg
ICAgICBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hh
ZG93Q29sb3IsIGZvbnRTbW9vdGhpbmcpKTsKLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCi17Ci0gICAgLy8gRklY
TUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzdHJ1
Y3QgRHJhd05hdGl2ZUltYWdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBJbWFnZVBh
aW50aW5nT3B0aW9ucywgZmxvYXQsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewotICAgICAgICB2aXJ0
dWFsIH5EcmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRl
KFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewot
ICAgICAgICAgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJn
PDQ+KCksIGFyZzw1PigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3Ry
ZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8
ICJEcmF3TmF0aXZlSW1hZ2U8PlxuIjsKLSAgICAgICAgfQotICAgIH07CisgICAgYXBwbHlTdGF0
ZUNoYW5nZXMoKTsKIAotICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwogICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TmF0aXZl
SW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIElt
YWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkpLCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwotfQotCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBzdHJ1Y3QgRHJhd1BhdHRlcm4gZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgSW50
U2l6ZSwgRmxvYXRSZWN0LCBGbG9hdFJlY3QsIEFmZmluZVRyYW5zZm9ybSwgRmxvYXRQb2ludCwg
SW1hZ2VQYWludGluZ09wdGlvbnM+IHsKLSAgICAgICAgdmlydHVhbCB+RHJhd1BhdHRlcm4oKSA9
IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdQ
YXR0ZXJuKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKS5nZXQoKSwgYXJnPDE+
KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFyZzw1PigpLCBhcmc8Nj4oKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRHJhd1BhdHRlcm48PlxuIjsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBVTlVTRURfUEFSQU0oc3BhY2luZyk7Ci0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1BhdHRlcm4+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2Uo
KSwgbmF0aXZlSW1hZ2Uuc2l6ZSgpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBvcHRpb25zKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0
aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKQEAgLTU5OCw4ICs3MTcs
OCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3
UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcikpOworICAgIGFwcGx5U3RhdGVDaGFuZ2VzKCk7Cisg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywg
ZmlsbENvbG9yKCksIHN0cm9rZVN0eWxlKCksIHN0cm9rZUNvbG9yKCkpKTsKIH0KIAogdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKQEAgLTYyMSw1MCArNzQwLDggQEAgdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5
bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3Vs
ZEFudGlhbGlhcykpOwotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywg
U3Ryb2tlU3R5bGUpCi17Ci0gICAgc3RydWN0IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBmbG9hdCwgRGFzaEFycmF5
LCBib29sLCBib29sLCBDb2xvcj4gewotICAgICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0
KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJl
cGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpk
cmF3TGluZXNGb3JUZXh0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJn
PDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFyZzw1PigpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TGluZXNGb3JUZXh0PD5cbiI7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHBy
aW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xvcikpOwotfQotCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBz
dHJ1Y3QgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHsKLSAg
ICAgICAgdmlydHVhbCB+RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKLQot
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
LSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpKTsKKyAgICBhcHBs
eVN0YXRlQ2hhbmdlcygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lPihwb2lu
dDEsIHBvaW50Miwgc3Ryb2tlU3R5bGUoKSwgc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNz
KCksIHNob3VsZEFudGlhbGlhcygpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtNjgzLDExICs3NjAsMTEg
QEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdFbGxpcHNlPihyZWN0LCBzdGF0
ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzKSk7CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVjdCwgZmlsbENvbG9yKCksIHN0cm9rZVN0eWxl
KCksIHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVzcygpKSk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgs
IGZsb2F0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFU
Rk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xv
cik7CkBAIC03MDcsMTIgKzc4NCwxMiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0CiAgICAgICAg
IH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxEcmF3Rm9jdXNSaW5nPihwYXRoLCB3aWR0aCwgY29sb3IpKTsKICNlbmRpZgotICAg
IFVOVVNFRF9QQVJBTShvZmZzZXQpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBm
bG9hdCB3aWR0aCwgZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICNpZiBQTEFURk9STShX
UEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMs
IHJlY3RzLCBjb2xvcik7CkBAIC03MzIsMzY4ICs4MDksMTQ2IEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMs
IGZsb2F0CiAgICAgICAgIH0KICAgICB9OwogCisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3Rm9jdXNSaW5nPihyZWN0cywgd2lkdGgsIGNvbG9y
KSk7CiAjZW5kaWYKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLX0KLQotdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpzYXZlKCkKLXsKLSAgICBzdHJ1Y3QgU2F2ZSBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4gewotICAgICAgICB2aXJ0dWFsIH5TYXZlKCkg
PSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxh
eSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRGb3JS
ZXBsYXkocmVwbGF5ZXIpLnNhdmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChU
ZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJTYXZlPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR3JhcGhpY3NDb250
ZXh0OjpzYXZlKCk7Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTYXZlPigpKTsKLQotICAg
IG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKSk7CiB9CiAKLXZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6cmVzdG9yZSgpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzdHJ1Y3QgUmVzdG9yZSBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPD4gewotICAgICAgICB2aXJ0dWFsIH5SZXN0b3JlKCkg
PSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxh
eSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHRGb3JS
ZXBsYXkocmVwbGF5ZXIpLnJlc3RvcmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJSZXN0b3JlPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKCFz
dGFja1NpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCk7Ci0KLSAgICBpZiAobV9zdGF0ZVN0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8UmVzdG9yZT4oKSk7Ci0KLSAgICBtX3N0YXRl
U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIGlmIChtX3N0YXRlU3RhY2suaXNFbXB0eSgpKQotICAg
ICAgICBtX3N0YXRlU3RhY2suY2xlYXIoKTsKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVk
LgorICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzdHJ1Y3QgVHJhbnNs
YXRlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQsIGZsb2F0
PiB7Ci0gICAgICAgIHZpcnR1YWwgflRyYW5zbGF0ZSgpID0gZGVmYXVsdDsKKyAgICBzdHJ1Y3Qg
RHJhd05hdGl2ZUltYWdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4sIEZsb2F0UmVjdCwgRmxvYXRSZWN0LCBJbWFnZVBhaW50
aW5nT3B0aW9ucywgZmxvYXQsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgICAgICB2aXJ0dWFs
IH5EcmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBh
aW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAg
ICAgICAgICAgQ2Fpcm86OnRyYW5zbGF0ZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJn
PDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZShj
b250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBhcmc8
Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiVHJhbnNsYXRlPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBp
bmRlbnQgPDwgIkRyYXdOYXRpdmVJbWFnZTw+XG4iOwogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPFRyYW5zbGF0ZT4oeCwgeSkpOwotCi0gICAgewotICAgICAg
ICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgICAgIHN0YXRlLmN0bS50
cmFuc2xhdGUoeCwgeSk7Ci0KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHQ7Ci0gICAgICAgIHQu
dHJhbnNsYXRlKC14LCAteSk7Ci0gICAgICAgIHN0YXRlLmN0bUludmVyc2UgPSB0ICogc3RhdGUu
Y3RtSW52ZXJzZTsKLSAgICB9CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2Uo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSksIGFscGhhKCksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSgpKSkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBh
bmdsZUluUmFkaWFucykKK3ZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdHRlcm4o
TmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBzdHJ1Y3QgUm90YXRlIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8ZmxvYXQ+IHsKLSAgICAgICAgdmly
dHVhbCB+Um90YXRlKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGlu
Z09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENhaXJvOjpyb3RhdGUoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUK
LSAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJSb3RhdGU8PlxuIjsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxSb3RhdGU+KGFuZ2xl
SW5SYWRpYW5zKSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNr
Lmxhc3QoKTsKLSAgICAgICAgc3RhdGUuY3RtLnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0KLSAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIHQ7Ci0gICAgICAgIHQucm90YXRlKGFuZ2xlSW5SYWRpYW5z
KTsKLSAgICAgICAgc3RhdGUuY3RtSW52ZXJzZSA9IHQgKiBzdGF0ZS5jdG1JbnZlcnNlOwotICAg
IH0KLX0KLQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNp
emUmIHNpemUpCi17Ci0gICAgc3RydWN0IFNjYWxlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8RmxvYXRTaXplPiB7Ci0gICAgICAgIHZpcnR1YWwgflNjYWxlKCkgPSBk
ZWZhdWx0OworICAgIHN0cnVjdCBEcmF3UGF0dGVybiBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+LCBJbnRTaXplLCBGbG9hdFJl
Y3QsIEZsb2F0UmVjdCwgQWZmaW5lVHJhbnNmb3JtLCBGbG9hdFBvaW50LCBJbWFnZVBhaW50aW5n
T3B0aW9ucz4geworICAgICAgICB2aXJ0dWFsIH5EcmF3UGF0dGVybigpID0gZGVmYXVsdDsKIAog
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6c2NhbGUoY29udGV4dEZvclJl
cGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3UGF0dGVy
bihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpLCBh
cmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSwgYXJnPDY+KCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQogICAgICAg
ICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNjYWxlPD5cbiI7CisgICAgICAgICAg
ICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdQYXR0ZXJuPD5cbiI7CiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2NhbGU+KHNpemUpKTsKLQotICAgIHsKLSAgICAg
ICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAgICBzdGF0ZS5jdG0u
c2NhbGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLQotICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gdDsKLSAgICAgICAgdC5zY2FsZSgxIC8gc2l6ZS53aWR0aCgpLCAxIC8gc2l6ZS5oZWln
aHQoKSk7Ci0gICAgICAgIHN0YXRlLmN0bUludmVyc2UgPSB0ICogc3RhdGUuY3RtSW52ZXJzZTsK
LSAgICB9CisgICAgYXBwbHlTdGF0ZUNoYW5nZXMoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxEcmF3UGF0dGVybj4obmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBuYXRpdmVJbWFnZS5z
aXplKCksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlv
bnMpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBzdHJ1Y3QgQ29uY2F0Q1RN
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8QWZmaW5lVHJhbnNmb3Jt
PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNvbmNhdENUTSgpID0gZGVmYXVsdDsKLQotICAgICAgICB2
b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y29uY2F0Q1RNKGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYgdHMpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVu
dCA8PCAiQ29uY2F0Q1RNPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXV0byBpbnZl
cnNlID0gdHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBpZiAoIWludmVyc2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPENvbmNhdENUTT4odHJhbnNmb3JtKSk7
Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVTdGFjay5sYXN0KCk7Ci0gICAgc3RhdGUuY3Rt
ICo9IHRyYW5zZm9ybTsKLSAgICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpICog
c3RhdGUuY3RtSW52ZXJzZTsKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIEdy
YXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwog
fQorI2VuZGlmCiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGlu
ZykKIHsKLSAgICBzdHJ1Y3QgU2V0Q1RNIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8QWZmaW5lVHJhbnNmb3JtPiB7Ci0gICAgICAgIHZpcnR1YWwgflNldENUTSgpID0g
ZGVmYXVsdDsKKyAgICBzdHJ1Y3QgRHJhd0dseXBocyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U3Ryb2tlU291cmNlLCBD
YWlybzo6U2hhZG93U3RhdGUsIEZsb2F0UG9pbnQsIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90
PiwgZmxvYXQsIFZlY3RvcjxjYWlyb19nbHlwaF90PiwgZmxvYXQsIFRleHREcmF3aW5nTW9kZUZs
YWdzLCBmbG9hdCwgRmxvYXRTaXplLCBDb2xvciwgRm9udFNtb290aGluZ01vZGU+IHsKKyAgICAg
ICAgdmlydHVhbCB+RHJhd0dseXBocygpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1
dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7
Ci0gICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENUTShjb250ZXh0Rm9yUmVwbGF5KHJlcGxh
eWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCksIGFyZzwzPigp
LCBhcmc8ND4oKS5nZXQoKSwKKyAgICAgICAgICAgICAgICBhcmc8NT4oKSwgYXJnPDY+KCksIGFy
Zzw3PigpLCBhcmc8OD4oKSwgYXJnPDk+KCksIGFyZzwxMD4oKSwgYXJnPDExPigpLCBhcmc8MTI+
KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVy
cmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNldENUTTw+XG4i
OworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3R2x5cGhzPD5cbiI7CiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgYXV0byBpbnZlcnNlID0gdHJhbnNmb3JtLmludmVyc2UoKTsKLSAg
ICBpZiAoIWludmVyc2UpCisgICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2V0Q1RNPih0cmFuc2Zv
cm0pKTsKLQotICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLSAgICBzdGF0
ZS5jdG0gPSB0cmFuc2Zvcm07Ci0gICAgc3RhdGUuY3RtSW52ZXJzZSA9IGludmVyc2UudmFsdWUo
KTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTShH
cmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIHN0cnVjdCBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8ZmxvYXQ+IHsKLSAgICAgICAgdmlydHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigp
ID0gZGVmYXVsdDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlk
ZQotICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI8PlxuIjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0KLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihvcGFjaXR5KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIHN0cnVjdCBF
bmRUcmFuc3BhcmVuY3lMYXllciBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPD4gewotICAgICAgICB2aXJ0dWFsIH5FbmRUcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVs
dDsKLQotICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxh
eWVyKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoY29udGV4dEZvclJlcGxheShyZXBsYXllcikpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAg
ICAgICB0cyA8PCBpbmRlbnQgPDwgIkVuZFRyYW5zcGFyZW5jeUxheWVyPD5cbiI7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigp
OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCkpOwot
fQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIHN0cnVjdCBDbGlwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8RmxvYXRSZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXAoKSA9IGRlZmF1bHQ7
Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXll
cikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmNsaXAoY29udGV4dEZv
clJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgdHMg
PDwgaW5kZW50IDw8ICJDbGlwPD5cbiI7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8Q2xpcD4ocmVjdCkpOwotCisgICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQu
eCgpOworICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOwog
ICAgIHsKLSAgICAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwotICAgICAg
ICBzdGF0ZS5jbGlwQm91bmRzLmludGVyc2VjdChzdGF0ZS5jdG0ubWFwUmVjdChyZWN0KSk7Ci0g
ICAgfQotfQotCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIHN0cnVjdCBDbGlwT3V0IGZpbmFsIDogUGFpbnRpbmdPcGVy
YXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwgfkNsaXBP
dXQoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86
OmNsaXBPdXQoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwT3V0PD5cbiI7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocmVjdCkpOwotfQot
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBzdHJ1Y3QgQ2xpcE91dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPFBhdGg+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcE91dCgpID0gZGVmYXVsdDsKLQot
ICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBv
dmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6Y2xpcE91dChjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2lu
dC55KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsK
KyAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZz
ZXQgfTsKKyAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKICAgICAg
ICAgfQorICAgIH0KIAotICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiQ2xpcE91dDw+XG4iOwot
ICAgICAgICB9Ci0gICAgfTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygpOwogCi0gICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8Q2xpcE91dD4ocGF0aCkpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3R2x5cGhzPihDYWlybzo6Rmls
bFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAorICAgICAgICBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwKKyAgICAgICAgUmVmUHRyPGNhaXJvX3NjYWxl
ZF9mb250X3Q+KGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpKSwKKyAgICAgICAgZm9u
dC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIFdURk1vdmUoY2Fpcm9HbHlwaHMpLCB4T2Zmc2V0LCB0
ZXh0RHJhd2luZ01vZGUoKSwKKyAgICAgICAgc3Ryb2tlVGhpY2tuZXNzKCksIHNoYWRvd09mZnNl
dCgpLCBzaGFkb3dDb2xvcigpLCBmb250U21vb3RoaW5nKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1
bGUpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7
Ci0gICAgc3RydWN0IENsaXBQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8UGF0aCwgV2luZFJ1bGU+IHsKLSAgICAgICAgdmlydHVhbCB+Q2xpcFBhdGgoKSA9IGRl
ZmF1bHQ7CisgICAgc3RydWN0IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBi
b29sLCBDb2xvcj4geworICAgICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZh
dWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVw
bGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpjbGlwUGF0aChj
b250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKKyAgICAgICAg
ICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFyZzw1Pigp
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKICAgICAgICAgewotICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJDbGlwUGF0aDw+XG4i
OworICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJEcmF3TGluZXNGb3JUZXh0PD5cbiI7CiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcFBhdGg+KHBh
dGgsIGNsaXBSdWxlKSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0
YWNrLmxhc3QoKTsKLSAgICAgICAgc3RhdGUuY2xpcEJvdW5kcy5pbnRlcnNlY3Qoc3RhdGUuY3Rt
Lm1hcFJlY3QocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpKTsKLSAgICB9Ci19CisgICAgaWYgKHdp
ZHRocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotSW50UmVjdCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwQm91bmRzKCkgY29uc3QKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IG1fc3Rh
dGVTdGFjay5sYXN0KCk7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qoc3RhdGUuY3RtSW52
ZXJzZS5tYXBSZWN0KHN0YXRlLmNsaXBCb3VuZHMpKTsKKyAgICBhcHBseVN0YXRlQ2hhbmdlcygp
OworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRleHQ+KHBvaW50LCB0aGlj
a25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0cm9rZUNvbG9yKCkp
KTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgc3RydWN0
IENsaXBUb0ltYWdlQnVmZmVyIGZpbmFsOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiwgRmxvYXRSZWN0PiB7Ci0gICAgICAgIHZpcnR1YWwg
fkNsaXBUb0ltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworICAgIHN0cnVjdCBEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Rmxv
YXRSZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4geworICAgICAgICB2aXJ0dWFsIH5EcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCkuZ2V0KCksIGFyZzwxPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8
MD4oKSwgYXJnPDE+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwg
IkNsaXBUb0ltYWdlQnVmZmVyPD5cbiI7CisgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI8PlxuIjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gbmF0
aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKLSAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KG5hdGl2ZUltYWdlLT5wbGF0
Zm9ybUltYWdlKCksIGRlc3RSZWN0KSk7Ci19Ci0KLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkKLXsKKyAgICBhcHBseVN0YXRlQ2hhbmdl
cygpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+
KHJlY3QsIHN0eWxlKSk7CiB9CiAKIEZsb2F0UmVjdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0
OjpSb3VuZGluZ01vZGUpCkBAIC0xMTA2LDEyICs5NjEsNCBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRpbmdPcGVyYXRpb24+JiYgY29t
bWFuZAogICAgIG1fY29tbWFuZExpc3QuYXBwZW5kKFdURk1vdmUoY29tbWFuZCkpOwogfQogCi0j
aWYgRU5BQkxFKFZJREVPKQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotICAgIEdyYXBoaWNzQ29udGV4
dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwotfQotI2VuZGlmCi0K
IH0gLy8gbmFtZXNwYWNlIE5pY29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCA4M2M2ZDI3ZDZlYTM2Yzc5YmViZDc4MjVm
OTliN2M0MzkwOGVlNTRiLi5hZjQ3OGZjNDM3ZThiNGVlOTdhN2MwMWI3N2JjMjJhMDM1NDQ3OTU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxOCBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgogICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3OCArNDIsNTggQEAgcHJpdmF0ZToKICAg
ICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotICAgIHZvaWQgZGlkVXBkYXRlU3RhdGUo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7CisgICAgdm9pZCBzYXZlKCkg
b3ZlcnJpZGU7CisgICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseVN0
YXRlQ2hhbmdlcygpIG92ZXJyaWRlOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1
bGUpIG92ZXJyaWRlOworICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJy
aWRlOworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0TGluZUNh
cChXZWJDb3JlOjpMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0
IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExpbmVK
b2luKFdlYkNvcmU6OkxpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQo
ZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRN
b2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGUgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6
OkJsZW5kTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29s
b3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBv
dmVycmlkZTsKKwogICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6
UGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBh
dGgmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBXZWJDb3JlOjpGb250
JiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IFdlYkNvcmU6OkdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYsIFdlYkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihXZWJDb3JlOjpOYXRpdmVJbWFnZSYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IG92ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJv
a2VTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
KSBvdmVycmlkZTsKKwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6
UGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBm
bG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IHNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxv
YXQgYW5nbGVJblJhZGlhbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2Fs
ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgY2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNs
aXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgb3ZlcnJpZGU7
Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKFdlYkNv
cmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoV2ViQ29y
ZTo6TmF0aXZlSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oV2Vi
Q29yZTo6TmF0aXZlSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKICNpZiBFTkFCTEUoVklERU8p
CiAgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXImLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsKICNlbmRpZgogCi0g
ICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBXZWJDb3JlOjpGb250U21vb3Ro
aW5nTW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJh
eSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogCiAgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOwogCiAgICAg
dm9pZCBhcHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50aW5nT3BlcmF0aW9uPiYmKTsKICAgICBQ
YWludGluZ09wZXJhdGlvbnMmIG1fY29tbWFuZExpc3Q7Ci0KLSAgICBzdHJ1Y3QgU3RhdGUgewot
ICAgICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gY3RtOwotICAgICAgICBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0gY3RtSW52ZXJzZTsKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNs
aXBCb3VuZHM7Ci0gICAgfTsKLSAgICBWZWN0b3I8U3RhdGUsIDMyPiBtX3N0YXRlU3RhY2s7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRHJhd0dseXBoc1JlY29yZGVyV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCmlu
ZGV4IDVkNjZlYjcyYWQxM2MyNGRhYzA5NWE5NDVmNjE0YTZmNTUyMjI0OTIuLjA3YzAzMzlmNThi
ZjMyYzdkNWY4ZjgxN2RiZGQzZWI3ZjFlZTczNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EcmF3R2x5cGhzUmVjb3JkZXJXaW4u
Y3BwCkBAIC0yOSwxNyArMjksMTggQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRHJhd0dseXBoc1JlY29yZGVyOjpE
cmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBvd25lciwgRGVjb25zdHJ1Y3REcmF3
R2x5cGhzLCBEZXJpdmVGb250RnJvbUNvbnRleHQpCi0gICAgOiBtX293bmVyKG93bmVyKQorRHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBkZXN0
aW5hdGlvbkNvbnRleHQsIERlY29uc3RydWN0RHJhd0dseXBocywgRGVyaXZlRm9udEZyb21Db250
ZXh0KQorICAgIDogbV9kZXN0aW5hdGlvbkNvbnRleHQoZGVzdGluYXRpb25Db250ZXh0KQogewog
fQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQ
b2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKLSAgICBtX293bmVyLmRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBz
dGFydFBvaW50LCBtX3Ntb290aGluZ01vZGUpOworICAgIG1fZGVzdGluYXRpb25Db250ZXh0LmRy
YXdHbHlwaHNBbmRDYWNoZUZvbnQoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBz
dGFydFBvaW50LCBtX3Ntb290aGluZ01vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENH
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4u
Y3BwCmluZGV4IGMxOWU3NDE1NTdjMzA4Yzk0MWU0ZWY3MTVlM2RiNDY1OTRkMTg1YjYuLjJjZDc4
NjVlY2E4MjllYjQ1NzgwZTlmYjBlNzI0N2EzNzEyYmNjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCkBAIC0xNzYsMjUgKzE3
NiwyMiBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LAogICAgIENHQ29udGV4dFNldEZvbnRTaXpl
KGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CiAgICAgRm9udENhc2NhZGU6OnNldENH
Q29udGV4dEZvbnRSZW5kZXJpbmdTdHlsZShjZ0NvbnRleHQsIGZvbnQucGxhdGZvcm1EYXRhKCku
aXNTeXN0ZW1Gb250KCksIGZhbHNlLCBmb250LnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpKTsKIAot
ICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBD
b2xvciBzaGFkb3dDb2xvcjsKLSAgICBncmFwaGljc0NvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09m
ZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgIGF1dG8gZHJvcFNoYWRvdyA9IGdy
YXBoaWNzQ29udGV4dC5kcm9wU2hhZG93KCk7CiAKLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9
IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZp
bGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICghZ3JhcGhpY3ND
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0LmdldENU
TSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworICAgIGJvb2wgaGFzU2lt
cGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3
aW5nTW9kZTo6RmlsbCAmJiBkcm9wU2hhZG93LmNvbG9yLmlzVmFsaWQoKSAmJiAhZHJvcFNoYWRv
dy5ibHVyUmFkaXVzICYmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgfHwgZ3JhcGhpY3NDb250ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JG
bGlwcGVkKCkpOwogICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKICAgICAgICAgLy8gUGFpbnQg
c2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dz
LCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgICAgICBncmFwaGlj
c0NvbnRleHQuY2xlYXJTaGFkb3coKTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhp
Y3NDb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBz
aGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zs
b2F0KCkpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBkcm9wU2hhZG93LmNvbG9y
LmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CiAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAg
ICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgo
KTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBkcm9wU2hhZG93Lm9m
ZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zv
cm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBz
byBkb3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50Lnko
KSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisgICAgICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9p
bnQueSgpICsgZHJvcFNoYWRvdy5vZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwogICAgICAgICBDR0NvbnRleHRTZXRU
ZXh0UG9zaXRpb24oY2dDb250ZXh0LCBzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpOwogICAgICAg
ICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZh
bmNlcywgbnVtR2x5cGhzKTsKICAgICAgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgp
KSB7Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBwb2lu
dC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgp
LCBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgQ0dDb250
ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgZHJvcFNoYWRvdy5vZmZz
ZXQud2lkdGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyBkcm9w
U2hhZG93Lm9mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhz
V2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzKTsKICAg
ICAgICAgfQogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7
CkBAIC0yMDgsNyArMjA1LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwKICAgICB9CiAKICAg
ICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93
KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0RHJvcFNoYWRvdyhkcm9wU2hhZG93KTsKIAogICAgIEZvbnRDYXNjYWRlOjpz
ZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBvbGRGb250U21vb3RoaW5nU3R5bGUpOwog
ICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY2dDb250ZXh0LCBzYXZlZE1hdHJpeCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2UuY3BwCmluZGV4IDNjZjc0NjBjODBlM2JlMWQ1YmEzZjBjZWQ3YzE5YjI1ZGYyOWFiZjIu
Ljc4NWU5NGJlY2YwN2NkNGE4NGM5YzM0ZDljZWNjODM4NTdlMDY5OWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2Uu
Y3BwCkBAIC0yOTIsMTIgKzI5MiwxMiBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpk
cmF3Qm94ZXMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIEZsb2F0UmVjdCBmcmFtZVJl
Y3QoMiwgMiwgc2l6ZS53aWR0aCgpIC0gMywgc2l6ZS5oZWlnaHQoKSAtIDMpOwogICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcygzKTsKLSAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaFdpZHRocywgMCk7Cisg
ICAgY29udGV4dC5zZXRMaW5lRGFzaCh7IG1fZGFzaFdpZHRocywgMCB9KTsKICAgICBtX3BhdGgu
YWRkUmVjdChmcmFtZVJlY3QpOwogICAgIG1fcGF0aC5jbG9zZVN1YnBhdGgoKTsKICAgICBjb250
ZXh0LnN0cm9rZVBhdGgobV9wYXRoKTsKIAotICAgIGNvbnRleHQuc2V0TGluZURhc2goRGFzaEFy
cmF5KCksIDApOworICAgIGNvbnRleHQuc2V0TGluZURhc2goeyB7IH0sIDAgfSk7CiAgICAgbV9w
YXRoLmNsZWFyKCk7CiAgICAgbV9wYXRoLm1vdmVUbyhGbG9hdFBvaW50KDAsIGJveFRvcCArIGJv
eFNpemUpKTsKICAgICBtX3BhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoc2l6ZS53aWR0aCgpLCBi
b3hUb3AgKyBib3hTaXplKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29u
dGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKaW5kZXggMWIxODJhMWQzNmI3Y2ZhYWEwYjE2OWQwZDhj
ODU0MzVmNDNiNzY3ZC4uZTgwZjJlZTg5MTkzOTE0NDE4ZTg3OGJmMGE0YTI4NDBlZTY4OWQwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVj
a2VyLmNwcApAQCAtMzksNyArMzksNyBAQCBib29sIENvbnRlbnRmdWxQYWludENoZWNrZXI6OnF1
YWxpZmllc0ZvckNvbnRlbnRmdWxQYWludChGcmFtZVZpZXcmIGZyYW1lVmlldykKICAgICBmcmFt
ZVZpZXcuc2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdM
YXllcnMpOwogICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyh0cnVlKTsKIAot
ICAgIE51bGxHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4
dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOwor
ICAgIE51bGxHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoZnJhbWVWaWV3LnJlbmRlclZp
ZXcoKS0+ZG9jdW1lbnRSZWN0KCksIE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0
aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KTsKICAgICBmcmFtZVZpZXcucGFp
bnQoY2hlY2tlckNvbnRleHQsIGZyYW1lVmlldy5yZW5kZXJWaWV3KCktPmRvY3VtZW50UmVjdCgp
KTsKIAogICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyhvbGRFbnRpcmVDb250
ZW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBz
aXNCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUVsbGlwc2lzQm94LmNw
cAppbmRleCBjOWFiMjE3NjE0MWZhN2EzMzlhMjA5N2IzYWJmOTc2NTA3ODdlNGYxLi40YmZmOGQw
MDgzOTI1MTRjYmU2MmNhOTVkNGU3NDNmYzE5N2YwMTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvTGVnYWN5RWxsaXBzaXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9MZWdhY3lFbGxpcHNpc0JveC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBM
ZWdhY3lFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnMKICAgICBib29sIHNldFNoYWRvdyA9IGZhbHNlOwogICAgIGlmIChs
aW5lU3R5bGUudGV4dFNoYWRvdygpKSB7CiAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0gbGlu
ZVN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGxpbmVTdHlsZS50ZXh0U2hhZG93KCkt
PmNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhMYXlvdXRTaXplKGxpbmVTdHls
ZS50ZXh0U2hhZG93KCktPngoKS52YWx1ZSgpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT55KCku
dmFsdWUoKSksIGxpbmVTdHlsZS50ZXh0U2hhZG93KCktPnJhZGl1cygpLnZhbHVlKCksIHNoYWRv
d0NvbG9yKTsKKyAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgTGF5b3V0U2l6ZShsaW5l
U3R5bGUudGV4dFNoYWRvdygpLT54KCkudmFsdWUoKSwgbGluZVN0eWxlLnRleHRTaGFkb3coKS0+
eSgpLnZhbHVlKCkpLCBsaW5lU3R5bGUudGV4dFNoYWRvdygpLT5yYWRpdXMoKS52YWx1ZSgpLCBz
aGFkb3dDb2xvciB9KTsKICAgICAgICAgc2V0U2hhZG93ID0gdHJ1ZTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4
IDI0YzgyYzlkNmJkNDNmNzRiYTA1YWI1YWM3Njc5M2Q3NWQxNWU1NzcuLjhkOTdkMjU3MWUyNDUz
ZGYxOTI4YmRlNmM3N2M3NjMxNWZiYzg4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNzA1LDcgKzcwNSw3IEBAIHN0YXRp
YyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCgp
OwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFkb3ctPngoKS52YWx1ZSgpLCBi
b3hTaGFkb3ctPnkoKS52YWx1ZSgpKTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIGJveFNoYWRvdy0+cmFkaXVzKCkudmFsdWUoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29s
b3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRv
dygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVs
dCk7CisgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ct
PnJhZGl1cygpLnZhbHVlKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNo
YWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiB9CiAKIElu
dGVycG9sYXRpb25RdWFsaXR5IFJlbmRlckJveE1vZGVsT2JqZWN0OjpjaG9vc2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEltYWdlJiBpbWFnZSwgY29uc3Qg
dm9pZCogbGF5ZXIsIGNvbnN0IExheW91dFNpemUmIHNpemUpCkBAIC0yMDg3LDcgKzIwODcsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBh
dXRvIGxpbmVEYXNoID0gRGFzaEFycmF5Ojpmcm9tKGRhc2hMZW5ndGgsIGdhcExlbmd0aCk7Ci0g
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0TGluZURhc2goV1RGTW92ZShsaW5lRGFzaCks
IGRhc2hMZW5ndGgpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldExpbmVEYXNoKHsg
V1RGTW92ZShsaW5lRGFzaCksIGRhc2hMZW5ndGggfSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3
aXRoIHRpZ2h0IGNvcm5lcnM6CkBAIC0yNDU2LDcgKzI0NTYsNyBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExh
eW91dFJlYwogICAgICAgICAgICAgRmxvYXRQb2ludCBzbmFwcGVkU2hhZG93T3JpZ2luID0gRmxv
YXRQb2ludChyb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi54KCksIGRldmljZVNj
YWxlRmFjdG9yKSwgcm91bmRUb0RldmljZVBpeGVsKHNoYWRvd1JlY3RPcmlnaW4ueSgpLCBkZXZp
Y2VTY2FsZUZhY3RvcikpOwogICAgICAgICAgICAgRmxvYXRTaXplIHNuYXBwZWRTaGFkb3dPZmZz
ZXQgPSBzbmFwcGVkU2hhZG93T3JpZ2luIC0gcGl4ZWxTbmFwcGVkRmlsbFJlY3QucmVjdCgpLmxv
Y2F0aW9uKCk7CiAKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dP
ZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFk
b3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1
bHQpOworICAgICAgICAgICAgY29udGV4dC5zZXREcm9wU2hhZG93KHsgc25hcHBlZFNoYWRvd09m
ZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRv
dygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVs
dCB9KTsKIAogICAgICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAg
ICAgIC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0
IG91dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMjU1OCw3ICsyNTU4LDcgQEAg
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRy
YU9mZnNldDsKIAogICAgICAgICAgICAgYXV0byBzbmFwcGVkU2hhZG93T2Zmc2V0ID0gcm91bmRT
aXplVG9EZXZpY2VQaXhlbHMoc2hhZG93T2Zmc2V0LCBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAg
ICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRp
dXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRp
dXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICAgICAgICAg
IGNvbnRleHQuc2V0RHJvcFNoYWRvdyh7IHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1
c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfSk7CiAgICAgICAgICAg
ICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwg
cGl4ZWxTbmFwcGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA4NTBiZGU0OGU0OTI4ZTg2
ZGMxNzZiNjIzMjFmZWVkOWI2ODZjM2NkLi44Y2Y5NjFlMGJjMjM2NGU5NjJjZGE4ODFmODU5ZTRm
MzFhM2M5ODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAg
LTIyNTMsMTQgKzIyNTMsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclAKICNpZiBFTkFCTEUo
Q1NTX0NPTVBPU0lUSU5HKQogICAgICAgICBib29sIHVzZXNDb21wb3NpdGVPcGVyYXRpb24gPSBo
YXNCbGVuZE1vZGUoKSAmJiAhKHJlbmRlcmVyKCkuaXNMZWdhY3lTVkdSb290KCkgJiYgcGFyZW50
KCkgJiYgcGFyZW50KCktPmlzUmVuZGVyVmlld0xheWVyKCkpOwogICAgICAgICBpZiAodXNlc0Nv
bXBvc2l0ZU9wZXJhdGlvbikKLSAgICAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSgpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IGNvbnRleHQuY29tcG9zaXRlT3BlcmF0aW9u
KCksIGJsZW5kTW9kZSgpIH0pOwogI2VuZGlmCiAKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5z
cGFyZW5jeUxheWVyKHJlbmRlcmVyKCkub3BhY2l0eSgpKTsKIAogI2lmIEVOQUJMRShDU1NfQ09N
UE9TSVRJTkcpCiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAgICAg
ICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRp
b24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3Np
dGVNb2RlKHsgY29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwg
fSk7CiAjZW5kaWYKIAogI2lmZGVmIFJFVkVBTF9UUkFOU1BBUkVOQ1lfTEFZRVJTCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDVmOThi
OTEyNGEzNDlhYzc1NTc5ZjcxMTM1ZWUwZjM4YWJiNGYxMmQuLjNlMmU2YmYxZGU1ZDU0ZWIzOGQ5
MjdhNTFmMDdjODkxMGFlNmMxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xODMxLDcgKzE4MzEsOSBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0
ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBbJl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikg
ewotICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KE51bGxHcmFwaGljc0Nv
bnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgICAgIGF1dG8gZGly
dHlSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoZ3JhcGhpY3NMYXllci5vZmZzZXRGcm9tUmVu
ZGVyZXIoKSksIGdyYXBoaWNzTGF5ZXIuc2l6ZSgpKTsKKyAgICAKKyAgICAgICAgTnVsbEdyYXBo
aWNzQ29udGV4dCBudWxsQ29udGV4dChkaXJ0eVJlY3QsIE51bGxHcmFwaGljc0NvbnRleHQ6OlBh
aW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgICAgIEV2ZW50UmVnaW9uIGV2ZW50
UmVnaW9uOwogI2lmIEVOQUJMRShFRElUQUJMRV9SRUdJT04pCiAgICAgICAgIGlmIChyZW5kZXJl
cigpLnBhZ2UoKS5zaG91bGRCdWlsZEVkaXRhYmxlUmVnaW9uKCkpCkBAIC0xODUzLDggKzE4NTUs
NyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgICAg
ICAgICAgZXZlbnRSZWdpb25Db250ZXh0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0
KC1sYXllck9mZnNldCwgZ3JhcGhpY3NMYXllci5zaXplKCkpKSwgcmVuZGVyZXIoKS5zdHlsZSgp
KTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChGbG9hdFJlY3QoRmxvYXRQb2ludChncmFwaGljc0xheWVyLm9mZnNldEZyb21SZW5kZXJlcigp
KSwgZ3JhcGhpY3NMYXllci5zaXplKCkpKTsKLSAgICAgICAgcGFpbnRJbnRvTGF5ZXIoJmdyYXBo
aWNzTGF5ZXIsIG51bGxDb250ZXh0LCBkaXJ0eVJlY3QsIHsgfSwgJmV2ZW50UmVnaW9uQ29udGV4
dCk7CisgICAgICAgIHBhaW50SW50b0xheWVyKCZncmFwaGljc0xheWVyLCBudWxsQ29udGV4dCwg
ZW5jbG9zaW5nSW50UmVjdChkaXJ0eVJlY3QpLCB7IH0sICZldmVudFJlZ2lvbkNvbnRleHQpOwog
CiAgICAgICAgIGV2ZW50UmVnaW9uLnRyYW5zbGF0ZSh0b0ludFNpemUobGF5ZXJPZmZzZXQpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDMwY2Qz
NDNlYTdkZjkxNjhjYzNjZGU0N2RiZWY4Zjc1OWU4OGY3MzEuLjI1NmZjNzQ5NTZkYTMzODZhNTRk
MzUyZGUxMWI2ZmY3MzY2OWExZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVJT1MubW0KQEAgLTYwNSw3ICs2MDUsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWlu
dFRleHRGaWVsZElubmVyU2hhZG93KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdAog
ICAgIGNvbnN0IEZsb2F0U2l6ZSBpbm5lclNoYWRvd09mZnNldCB7IDAsIDUgfTsKICAgICBjb25z
dGV4cHIgYXV0byBpbm5lclNoYWRvd0JsdXIgPSAxMC4wZjsKICAgICBhdXRvIGlubmVyU2hhZG93
Q29sb3IgPSBEaXNwbGF5UDM8ZmxvYXQ+IHsgMCwgMCwgMCwgMC4wNGYgfTsKLSAgICBjb250ZXh0
LnNldFNoYWRvdyhpbm5lclNoYWRvd09mZnNldCwgaW5uZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRv
d0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBpbm5lclNoYWRvd09mZnNldCwg
aW5uZXJTaGFkb3dCbHVyLCBpbm5lclNoYWRvd0NvbG9yIH0pOwogICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIGlubmVyU2hhZG93UGF0aDsKQEAgLTIw
ODAsNyArMjA4MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0Jh
ZGdlKEltYWdlJiBpbWFnZSwgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgLy8gVXNlIHRoZSBH
cmFwaGljc0NvbnRleHQgZnVuY3Rpb24sIGJlY2F1c2UgaXQgY2FsY3VsYXRlcyB0aGUgYmx1ciBy
YWRpdXMgaW4gY29udGV4dCBzcGFjZSwKICAgICAvLyByYXRoZXIgdGhhbiBzY3JlZW4gc3BhY2Uu
CiAgICAgY29uc3RleHByIGF1dG8gc2hhZG93Q29sb3IgPSBDb2xvcjo6YmxhY2suY29sb3JXaXRo
QWxwaGFCeXRlKDI2KTsKLSAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7
IH0sIDE2LCBzaGFkb3dDb2xvcik7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldERyb3BTaGFkb3co
eyBGbG9hdFNpemUgeyB9LCAxNiwgc2hhZG93Q29sb3IgfSk7CiAKICAgICAvLyBUaGUgY2lyY2xl
IG11c3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIHZhbHVlIG9mIDEgZm9yIHRoZSBzaGFkb3cgY29s
b3IgdG8gYXBwZWFyLgogICAgIENHRmxvYXQgY2lyY2xlQ29sb3JDb21wb25lbnRzWzRdID0geyAw
LCAwLCAwLCAxIH07CkBAIC0yMjczLDcgKzIyNzMsNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpw
YWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
YwogCiAgICAgYm9vbCBpc0VtcHR5ID0gIXN0YXRlcy5jb250YWluc0FueSh7IENvbnRyb2xTdGF0
ZXM6OlN0YXRlczo6Q2hlY2tlZCwgQ29udHJvbFN0YXRlczo6U3RhdGVzOjpJbmRldGVybWluYXRl
IH0pOwogICAgIGF1dG8gZmlyc3RTaGFkb3dDb2xvciA9IERpc3BsYXlQMzxmbG9hdD4geyAwLCAw
LCAwLCBpc0VtcHR5ID8gMC4wNWYgOiAwLjFmIH07Ci0gICAgY29udGV4dC5zZXRTaGFkb3coaW5u
ZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1ciwgZmlyc3RTaGFkb3dDb2xvcik7CisgICAg
Y29udGV4dC5zZXREcm9wU2hhZG93KHsgaW5uZXJTaGFkb3dPZmZzZXQsIGlubmVyU2hhZG93Qmx1
ciwgZmlyc3RTaGFkb3dDb2xvciB9KTsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6
YmxhY2spOwogCiAgICAgUGF0aCBpbm5lclNoYWRvd1BhdGg7CkBAIC0yMjkwLDcgKzIyOTAsNyBA
QCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94UmFkaW9Jbm5lclNoYWRvdyhjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgYwogICAgIGNvbnRleHQuZmlsbFBhdGgoaW5uZXJTaGFk
b3dQYXRoKTsKIAogICAgIGNvbnN0ZXhwciBhdXRvIHNlY29uZFNoYWRvd0NvbG9yID0gRGlzcGxh
eVAzPGZsb2F0PiB7IDEsIDEsIDEsIDAuNWYgfTsKLSAgICBjb250ZXh0LnNldFNoYWRvdyhGbG9h
dFNpemUgeyAwLCAwIH0sIDEsIHNlY29uZFNoYWRvd0NvbG9yKTsKKyAgICBjb250ZXh0LnNldERy
b3BTaGFkb3coeyBGbG9hdFNpemUgeyAwLCAwIH0sIDEsIHNlY29uZFNoYWRvd0NvbG9yIH0pOwog
CiAgICAgY29udGV4dC5maWxsUGF0aChpbm5lclNoYWRvd1BhdGgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDAxMGVjYmFlZDg3YTczYTQyMGFm
Yjk3ZThlODBmZWE2Mzc5ZmVkM2UuLjEwZGM5MGU1N2U1YWUwZjQyNWEwZGFhYTM2NGY4MTRlNDQ5
NDk5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAg
LTI4MTYsNyArMjgxNiw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVy
Qm9yZGVyKGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQsCiAgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihwbGFjZWhvbGRlckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0
cm9rZVRoaWNrbmVzcyhhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJXaWR0aCk7CiAgICAgY29u
dGV4dC5zZXRTdHJva2VTdHlsZShEYXNoZWRTdHJva2UpOwotICAgIGNvbnRleHQuc2V0TGluZURh
c2goe2F0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hMZW5ndGh9LCAwKTsKKyAgICBjb250
ZXh0LnNldExpbmVEYXNoKHsgeyBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNoTGVuZ3Ro
IH0sIDAgfSk7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKGJvcmRlclBhdGgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dERlY29yYXRpb25QYWludGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCmlu
ZGV4IDY3NTU2OGFmZjYxMThmMDEzYmQxZDRmNTVhNmMzNjRmYThhZjM4ZTguLjgzMDliMmY4ZDRh
MzFmYTAzYjFhYmY4NDM5ZGEwZjNlZjE2Mjg0MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBAIC0yNzEsNyArMjcxLDcgQEAg
dm9pZCBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZERlY29yYXRpb25zKGNv
bnN0IFRleHRSdW4mIHRleHRSdW4sIGMKICAgICAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yID0g
c2hhZG93LT5jb2xvcigpOwogICAgICAgICAgICAgaWYgKG1fc2hhZG93Q29sb3JGaWx0ZXIpCiAg
ICAgICAgICAgICAgICAgbV9zaGFkb3dDb2xvckZpbHRlci0+dHJhbnNmb3JtQ29sb3Ioc2hhZG93
Q29sb3IpOwotICAgICAgICAgICAgbV9jb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUoc2hhZG93
WCwgc2hhZG93WSAtIGV4dHJhT2Zmc2V0KSwgc2hhZG93LT5yYWRpdXMoKS52YWx1ZSgpLCBzaGFk
b3dDb2xvcik7CisgICAgICAgICAgICBtX2NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IEZsb2F0U2l6
ZShzaGFkb3dYLCBzaGFkb3dZIC0gZXh0cmFPZmZzZXQpLCBzaGFkb3ctPnJhZGl1cygpLnZhbHVl
KCksIHNoYWRvd0NvbG9yIH0pOwogICAgICAgICAgICAgc2hhZG93ID0gc2hhZG93LT5uZXh0KCk7
CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQ
YWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKaW5k
ZXggODg1ZDgyNmVlOWU3OTZmNGI1YzViNTgzM2Y3MWEwMjhjNDU0MWE3YS4uZmU4ODY5YzE5ZTVm
OGQ0M2I3ZmExNmU0MDFiNGZiYzZkY2Y3ZWVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dFBhaW50ZXIuY3BwCkBAIC03NCw3ICs3NCw3IEBAIFNoYWRvd0FwcGxpZXI6OlNoYWRvd0Fw
cGxpZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cs
CiAgICAgfQogCiAgICAgaWYgKCFtX2F2b2lkRHJhd2luZ1NoYWRvdykKLSAgICAgICAgY29udGV4
dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMudmFsdWUoKSwgc2hhZG93Q29s
b3IpOworICAgICAgICBjb250ZXh0LnNldERyb3BTaGFkb3coeyBzaGFkb3dPZmZzZXQsIHNoYWRv
d1JhZGl1cy52YWx1ZSgpLCBzaGFkb3dDb2xvciB9KTsKIH0KIAogaW5saW5lIGJvb2wgU2hhZG93
QXBwbGllcjo6aXNMYXN0U2hhZG93SXRlcmF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCmluZGV4IDdlZDUzN2M5Mjc5Mzc3MGY0NDg4YWUy
OWRmNDA3MjdkN2ViMWEzYTkuLjZjNzMwZWYwN2U0OGM3ZWNmOGM0MGUzN2UwMDM0NWNmYWI1NmM2
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0
aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNw
cApAQCAtNjksNyArNjksNyBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6Y2FsY3VsYXRlVXBk
YXRlZFN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKIHN0YXRpYyB2b2lkIHVzZVN0cm9rZVN0eWxl
VG9GaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoYXV0byBncmFkaWVu
dCA9IGNvbnRleHQuc3Ryb2tlR3JhZGllbnQoKSkKLSAgICAgICAgY29udGV4dC5zZXRGaWxsR3Jh
ZGllbnQoKmdyYWRpZW50LCBjb250ZXh0LnN0YXRlKCkuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KCpncmFkaWVudCwgY29udGV4
dC5zdHJva2VTcGFjZVRyYW5zZm9ybSgpKTsKICAgICBlbHNlIGlmIChQYXR0ZXJuKiBwYXR0ZXJu
ID0gY29udGV4dC5zdHJva2VQYXR0ZXJuKCkpCiAgICAgICAgIGNvbnRleHQuc2V0RmlsbFBhdHRl
cm4oKnBhdHRlcm4pOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IGNjMzhlYzcwMzBlNjBjZTE3NTliMTMyODdk
ZTI1ZjczZDU2NWM4NTguLmI2NTg2OGQxYmQzNGM5MGQ0YmJmZGQ0NzdhZDJjNzQyODJhMDU2YWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9y
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmNwcApAQCAtNTAxLDEwICs1MDEsMTIgQEAgdm9pZCBTVkdSZW5kZXJTdXBwb3J0OjphcHBseVN0
cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChjYW5TZXRMaW5lRGFzaCkKLSAgICAgICAgICAgIGNvbnRleHQu
c2V0TGluZURhc2goZGFzaEFycmF5LCBsZW5ndGhDb250ZXh0LnZhbHVlRm9yTGVuZ3RoKHN2Z1N0
eWxlLnN0cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBjb250
ZXh0LnNldExpbmVEYXNoKHsgV1RGTW92ZShkYXNoQXJyYXkpLCBsZW5ndGhDb250ZXh0LnZhbHVl
Rm9yTGVuZ3RoKHN2Z1N0eWxlLnN0cm9rZURhc2hPZmZzZXQoKSkgKiBzY2FsZUZhY3RvciB9KTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0
cm9rZSk7CiAgICAgfQorCisgICAgY29udGV4dC5hcHBseVN0YXRlQ2hhbmdlcygpOwogfQogCiB2
b2lkIFNWR1JlbmRlclN1cHBvcnQ6OnN0eWxlQ2hhbmdlZChSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMmZiOGYzM2E4NzBk
ZmNjZWI2MmUxNDk2NTZiMTQ0MzcyMmViZWEyZC4uZjU3OWU1YTc1ZmU5MTBmNmU1YjU4YTlhZWZi
NjgzNTg5NjIyMTBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xMTUsMTIgKzExNSwxMiBAQCB2b2lkIFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OnByZXBhcmVUb1JlbmRlclNWR0NvbnRlbnQoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIFBhaQogICAgICAgICBpZiAob3BhY2l0eSA8IDEgfHwgaGFzQmxlbmRNb2RlIHx8
IGlzb2xhdGVNYXNrRm9yQmxlbmRpbmcgfHwgaGFzSXNvbGF0aW9uKSB7CiAKICAgICAgICAgICAg
IGlmIChoYXNCbGVuZE1vZGUpCi0gICAgICAgICAgICAgICAgbV9wYWludEluZm8tPmNvbnRleHQo
KS5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9wYWludEluZm8tPmNvbnRleHQoKS5jb21wb3NpdGVP
cGVyYXRpb24oKSwgc3R5bGUuYmxlbmRNb2RlKCkpOworICAgICAgICAgICAgICAgIG1fcGFpbnRJ
bmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJbmZvLT5jb250ZXh0KCku
Y29tcG9zaXRlT3BlcmF0aW9uKCksIHN0eWxlLmJsZW5kTW9kZSgpIH0pOwogCiAgICAgICAgICAg
ICBtX3BhaW50SW5mby0+Y29udGV4dCgpLmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7
CiAKICAgICAgICAgICAgIGlmIChoYXNCbGVuZE1vZGUpCi0gICAgICAgICAgICAgICAgbV9wYWlu
dEluZm8tPmNvbnRleHQoKS5zZXRDb21wb3NpdGVPcGVyYXRpb24obV9wYWludEluZm8tPmNvbnRl
eHQoKS5jb21wb3NpdGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAgICAg
ICAgICAgIG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuc2V0Q29tcG9zaXRlTW9kZSh7IG1fcGFpbnRJ
bmZvLT5jb250ZXh0KCkuY29tcG9zaXRlT3BlcmF0aW9uKCksIEJsZW5kTW9kZTo6Tm9ybWFsIH0p
OwogCiAgICAgICAgICAgICBtX3JlbmRlcmluZ0ZsYWdzIHw9IEVuZE9wYWNpdHlMYXllcjsKICAg
ICAgICAgfQpAQCAtMjczLDcgKzI3Myw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVm
ZmVyRm9yZWdyb3VuZChSZWZQdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZlcikKIAogICAgIC8v
IEludmFsaWRhdGUgYW4gZXhpc3RpbmcgYnVmZmVyIGlmIHRoZSBzY2FsZSBpcyBub3QgY29ycmVj
dC4KICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVm
aW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTSgpOwogICAgICAgICBJbnRTaXpl
IGV4cGFuZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgp
KTsKICAgICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChleHBh
bmRlZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGljX2Nh
c3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNj
YWxlKCkpKSk7CiAgICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5iYWNrZW5k
U2l6ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggNGRk
N2Y4MGUzNzc3OTg3ZGNiNzBjMWEzYzhhODdjZDhhNGZkNmZiOS4uY2Q4OGFkZjA4ZGRhODAzYmZk
OTNmODk1Nzc0MDc2ODZhYzRjNTQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwCkBAIC0yNjksMTQgKzI2OSwxNCBAQCBJbWFnZURyYXdSZXN1bHQgU1ZHSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlYwog
ICAgIEFTU0VSVCh2aWV3KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25z
LmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIGNvbnRleHQu
c2V0Q29tcG9zaXRlTW9kZSh7IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSB9KTsKICAgICBjb250ZXh0LmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0
KSk7CiAKICAgICBmbG9hdCBhbHBoYSA9IGNvbnRleHQuYWxwaGEoKTsKICAgICBib29sIGNvbXBv
c2l0aW5nUmVxdWlyZXNUcmFuc3BhcmVuY3lMYXllciA9IG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSAhPSBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciB8fCBvcHRpb25zLmJsZW5kTW9k
ZSgpICE9IEJsZW5kTW9kZTo6Tm9ybWFsIHx8IGFscGhhIDwgMTsKICAgICBpZiAoY29tcG9zaXRp
bmdSZXF1aXJlc1RyYW5zcGFyZW5jeUxheWVyKSB7CiAgICAgICAgIGNvbnRleHQuYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihhbHBoYSk7Ci0gICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Cisg
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyLCBCbGVuZE1vZGU6Ok5vcm1hbCB9KTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGhvbm9yIG9wdGlvbnMub3JpZW50YXRpb24oKSwgc2luY2UgSW1hZ2VCaXRtYXAncyBm
bGlwWSBoYW5kbGluZyByZWxpZXMgb24gaXQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzEwMDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCA1NDM4
MTgyZGRlODc2M2ViYWQzOGYxOTJkZjc5NWFhMDYwYjY1MWJiLi44ZGEzOTBmNmRhNzBlMzc5NTUw
YTU3MmUwOWUwODQxMTg5YzJkZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBA
IC03NCwzMSArNzQsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnJlc3RvcmUo
KQogICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlJlc3RvcmUoKSk7CiB9CiAKLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0g
ICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGUpCi17Ci0gICAgaGFu
ZGxlSXRlbShEaXNwbGF5TGlzdDo6Um90YXRlKGFuZ2xlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzY2FsZSkKLXsKLSAgICBo
YW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTY2FsZShzY2FsZSkpOwotfQotCi12b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSkKLXsK
LSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRDVE0oY3RtKSk7Ci19Ci0KLXZvaWQgUmVt
b3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Y29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBjdG0pCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE0o
Y3RtKSk7Ci19Ci0KIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6c2V0SW5saW5lRmls
bENvbG9yKERpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3ImJiBpdGVtKQogewogICAgIGhh
bmRsZUl0ZW0oV1RGTW92ZShpdGVtKSk7CkBAIC0xMjgsNDAgKzEwMywxNSBAQCB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldFN0YXRlKERpc3BsYXlMaXN0OjpTZXRTdGF0ZSYmIGl0
ZW0pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH07CiAKLSAgICBpZiAoIWZpeFBhdHRlcm5U
aWxlSW1hZ2UoaXRlbS5zdGF0ZUNoYW5nZSgpLm1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSkp
CisgICAgaWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGUoKS5zdHJva2VCcnVzaCgp
LnBhdHRlcm4oKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghZml4UGF0dGVyblRpbGVJ
bWFnZShpdGVtLnN0YXRlQ2hhbmdlKCkubV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSkpCisgICAg
aWYgKCFmaXhQYXR0ZXJuVGlsZUltYWdlKGl0ZW0uc3RhdGUoKS5maWxsQnJ1c2goKS5wYXR0ZXJu
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwog
fQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKQotewotICAgIGhhbmRsZUl0ZW0oRGlzcGxheUxpc3Q6OlNldExpbmVDYXAobGluZUNh
cCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OnNldExpbmVEYXNoKERp
c3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYmIGl0ZW0pCi17Ci0gICAgaGFuZGxlSXRlbShXVEZNb3Zl
KGl0ZW0pKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpzZXRMaW5lSm9p
bihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpTZXRM
aW5lSm9pbihsaW5lSm9pbikpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlz
dDo6U2V0TWl0ZXJMaW1pdChsaW1pdCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OmNsZWFyU2hhZG93KCkKLXsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDbGVh
clNoYWRvdygpKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpDbGlw
KHJlY3QpKTsKQEAgLTM3MSwxNCArMzIxLDkgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpmaWxsUmVjdFdpdGhHcmFkaWVudChEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3IKICAg
ICBoYW5kbGVJdGVtKFdURk1vdmUoaXRlbSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OmZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUp
Ci17Ci0gICAgaGFuZGxlSXRlbShEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0KHJlY3Qs
IGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNv
cmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBoYW5kbGVJdGVtKERpc3BsYXlMaXN0OjpGaWxs
Um91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOworICAgIGhhbmRsZUl0ZW0oRGlz
cGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcikpOwogfQogCiB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCAzYmJhZjc2NWQw
NWY0NGFiZjRkOTYxZTc2NmNlNjU0Njk4ZWRlMjk0Li44MTg4OTY2YWZmYTcwOWU2ZmQwYTMxYmZj
YTZjM2U3MTg1NjVjNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTU5LDIwICs1
OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUoKTsK
LSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCBhbmdsZSk7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNj
YWxlKTsKLSAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKTsK
LSAgICB2b2lkIGNvbmNhdGVuYXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYp
OwogICAgIHZvaWQgc2V0SW5saW5lRmlsbENvbG9yKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVGaWxsQ29sb3ImJik7CiAgICAgdm9pZCBzZXRJbmxpbmVTdHJva2VDb2xvcihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3ImJik7CiAgICAgdm9pZCBzZXRTdHJv
a2VUaGlja25lc3MoZmxvYXQpOwogICAgIHZvaWQgc2V0U3RhdGUoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldFN0YXRlJiYpOwotICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKTsK
LSAgICB2b2lkIHNldExpbmVEYXNoKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaCYm
KTsKLSAgICB2b2lkIHNldExpbmVKb2luKFdlYkNvcmU6OkxpbmVKb2luKTsKLSAgICB2b2lkIHNl
dE1pdGVyTGltaXQoZmxvYXQpOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKTsKICAgICB2b2lkIGNs
aXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCk7CkBAIC05Nyw4ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoQ29s
b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICAg
ICB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhHcmFkaWVudCYmKTsKLSAgICB2b2lkIGZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0
ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYs
IFdlYkNvcmU6OkJsZW5kTW9kZSk7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAgICAgdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKICNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIGZpbGxMaW5lKGNvbnN0IFdlYkNv
cmU6OkxpbmVEYXRhJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3NhZ2Vz
LmluCmluZGV4IDI4MDJmZmU4ZjgzOTdjMGVkNGRmMTIxYTAxN2ZlNzgxMDhmZjZjMjAuLjQxNGMz
MWExMzIwYzBiMmU3ODZiYzhkOWY2NTk4MTAyZDg3MGY0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyLm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyLm1lc3NhZ2VzLmluCkBAIC0yNSw0NyArMjUsMzUgQEAKIG1lc3NhZ2Vz
IC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAg
IFNhdmUoKQogICAgIFJlc3RvcmUoKQotICAgIFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQot
ICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICBTY2FsZShXZWJDb3JlOjpGbG9hdFNpemUgc2Nh
bGUpCi0gICAgU2V0Q1RNKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBjdG0pCi0gICAgQ29uY2F0
ZW5hdGVDVE0oV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGN0bSkKKwogICAgIFNldElubGluZUZp
bGxDb2xvcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yIGl0ZW0pCiAg
ICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0
cm9rZUNvbG9yIGl0ZW0pCiAgICAgU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykK
ICAgICBTZXRTdGF0ZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGUgaXRlbSkKLSAgICBT
ZXRMaW5lQ2FwKGVudW06dWludDhfdCBXZWJDb3JlOjpMaW5lQ2FwIGxpbmVDYXApCi0gICAgU2V0
TGluZURhc2goV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoIGl0ZW0pCi0gICAgU2V0
TGluZUpvaW4oZW51bTp1aW50OF90IFdlYkNvcmU6OkxpbmVKb2luIGxpbmVKb2luKQotICAgIFNl
dE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi0gICAgQ2xlYXJTaGFkb3coKQorI2lmIFVTRShDRykK
KyAgICBBcHBseVN0cm9rZVBhdHRlcm4oKQorICAgIEFwcGx5RmlsbFBhdHRlcm4oKQorI2VuZGlm
CisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKworICAgIEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICBFbmRUcmFuc3BhcmVuY3lM
YXllcigpCisKICAgICBDbGlwKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQorICAgIENsaXBQYXRo
KFdlYkNvcmU6OlBhdGggcGF0aCwgZW51bTp1aW50OF90IFdlYkNvcmU6OldpbmRSdWxlIHdpbmRS
dWxlKQogICAgIENsaXBPdXQoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xpcFRvSW1h
Z2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKICAg
ICBDbGlwT3V0VG9QYXRoKFdlYkNvcmU6OlBhdGggcGF0aCkKLSAgICBDbGlwUGF0aChXZWJDb3Jl
OjpQYXRoIHBhdGgsIGVudW06dWludDhfdCBXZWJDb3JlOjpXaW5kUnVsZSB3aW5kUnVsZSkKLSAg
ICBEcmF3R2x5cGhzKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIGl0ZW0pCi0gICAg
RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXI+IHNvdXJjZUltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRS
ZWN0IHNvdXJjZUltYWdlUmVjdCwgSVBDOjpGaWx0ZXJSZWZlcmVuY2UgZmlsdGVyKQotICAgIERy
YXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VC
dWZmZXJJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0LCBXZWJD
b3JlOjpGbG9hdFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRp
b25zIG9wdGlvbnMpCi0gICAgRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZsb2F0U2l6ZSBpbWFnZVNp
emUsIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHNyY1Jl
Y3QsIHN0cnVjdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKQotICAgIERy
YXdTeXN0ZW1JbWFnZShSZWY8V2ViQ29yZTo6U3lzdGVtSW1hZ2U+IHN5c3RlbUltYWdlLCBXZWJD
b3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KQotICAgIERyYXdQYXR0ZXJuKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OkZs
b2F0UmVjdCBkZXN0UmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBoYXNlLCBXZWJD
b3JlOjpGbG9hdFNpemUgc3BhY2luZywgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRp
b25zIG9wdGlvbnMpCi0gICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQot
ICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLSAgICBEcmF3UmVjdChXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotICAgIERyYXdMaW5lKFdlYkNvcmU6OkZs
b2F0UG9pbnQgcG9pbnQxLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MikKLSAgICBEcmF3TGlu
ZXNGb3JUZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0IGl0ZW0pCi0g
ICAgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgc3Ry
dWN0IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgIERyYXdFbGxp
cHNlKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KQotICAgIERyYXdQYXRoKFdlYkNvcmU6OlBhdGgg
cGF0aCkKLSAgICBEcmF3Rm9jdXNSaW5nUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQotICAgIERyYXdGb2N1c1Jp
bmdSZWN0cyhWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cywgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgV2ViQ29yZTo6Q29sb3IgY29sb3IpCisgICAgQ2xpcFRvSW1hZ2VCdWZmZXIo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKKworICAgIENsZWFy
UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkKKwogICAgIEZpbGxSZWN0KFdlYkNvcmU6OkZs
b2F0UmVjdCByZWN0KQogICAgIEZpbGxSZWN0V2l0aENvbG9yKFdlYkNvcmU6OkZsb2F0UmVjdCBy
ZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKICAgICBGaWxsUmVjdFdpdGhHcmFkaWVudChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQgaXRlbSkKLSAgICBGaWxsQ29t
cG9zaXRlZFJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9y
LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGVudW06dWludDhf
dCBXZWJDb3JlOjpCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIEZpbGxSb3VuZGVkUmVjdChXZWJD
b3JlOjpGbG9hdFJvdW5kZWRSZWN0IHJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9yLCBlbnVtOnVp
bnQ4X3QgV2ViQ29yZTo6QmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBGaWxsUm91bmRlZFJlY3Qo
V2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCByZWN0LCBXZWJDb3JlOjpDb2xvciBjb2xvcikKICAg
ICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCwgV2ViQ29y
ZTo6RmxvYXRSb3VuZGVkUmVjdCByb3VuZGVkSG9sZVJlY3QsIFdlYkNvcmU6OkNvbG9yIGNvbG9y
KQorCisgICAgRmlsbEVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCiAjaWYgRU5BQkxF
KElOTElORV9QQVRIX0RBVEEpCiAgICAgRmlsbExpbmUoc3RydWN0IFdlYkNvcmU6OkxpbmVEYXRh
IGRhdGEpCiAgICAgRmlsbEFyYyhzdHJ1Y3QgV2ViQ29yZTo6QXJjRGF0YSBkYXRhKQpAQCAtNzMs
MTEgKzYxLDEwIEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIgTm90UmVm
Q291bnRlZCBTdHJlYW0gewogICAgIEZpbGxCZXppZXJDdXJ2ZShzdHJ1Y3QgV2ViQ29yZTo6QmV6
aWVyQ3VydmVEYXRhIGRhdGEpCiAjZW5kaWYKICAgICBGaWxsUGF0aChXZWJDb3JlOjpQYXRoIHBh
dGgpCi0gICAgRmlsbEVsbGlwc2UoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpCi0gICAgVHJhbnNmb3JtVG9Db2xvclNwYWNlKFdlYkNvcmU6OkRl
c3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIFBhaW50RnJhbWVGb3JNZWRpYShX
ZWJDb3JlOjpNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRS
ZWN0IGRlc3RpbmF0aW9uKQorCiAgICAgU3Ryb2tlUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQorCisgICAgU3Ryb2tlRWxsaXBzZShXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCkKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBTdHJva2VMaW5lKHN0
cnVjdCBXZWJDb3JlOjpMaW5lRGF0YSBkYXRhKQogICAgIFN0cm9rZUFyYyhzdHJ1Y3QgV2ViQ29y
ZTo6QXJjRGF0YSBkYXRhKQpAQCAtODUsMTMgKzcyLDMxIEBAIG1lc3NhZ2VzIC0+IFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXIgTm90UmVmQ291bnRlZCBTdHJlYW0gewogICAgIFN0cm9rZUJlemll
ckN1cnZlKHN0cnVjdCBXZWJDb3JlOjpCZXppZXJDdXJ2ZURhdGEgZGF0YSkKICNlbmRpZgogICAg
IFN0cm9rZVBhdGgoV2ViQ29yZTo6UGF0aCBwYXRoKQotICAgIFN0cm9rZUVsbGlwc2UoV2ViQ29y
ZTo6RmxvYXRSZWN0IHJlY3QpCi0gICAgQ2xlYXJSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0
KQotI2lmIFVTRShDRykKLSAgICBBcHBseVN0cm9rZVBhdHRlcm4oKQotICAgIEFwcGx5RmlsbFBh
dHRlcm4oKQorCisgICAgRHJhd1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKKyAgICBEcmF3TGluZShXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50MSwg
V2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludDIpCisKKyAgICBEcmF3RWxsaXBzZShXZWJDb3JlOjpG
bG9hdFJlY3QgcmVjdCkKKyAgICBEcmF3UGF0aChXZWJDb3JlOjpQYXRoIHBhdGgpCisKKyAgICBE
cmF3Rm9jdXNSaW5nUGF0aChXZWJDb3JlOjpQYXRoIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorICAgIERyYXdGb2N1c1JpbmdSZWN0cyhWZWN0
b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
V2ViQ29yZTo6Q29sb3IgY29sb3IpCisKKyAgICBEcmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihzdGQ6
Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gc291cmNlSW1h
Z2VJZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0LCBJUEM6OkZp
bHRlclJlZmVyZW5jZSBmaWx0ZXIpCisgICAgRHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdlYkNvcmU6OkZs
b2F0UmVjdCBkZXN0aW5hdGlvblJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCBzcmNSZWN0LCBzdHJ1
Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyAgICBEcmF3U3lzdGVt
SW1hZ2UoUmVmPFdlYkNvcmU6OlN5c3RlbUltYWdlPiBzeXN0ZW1JbWFnZSwgV2ViQ29yZTo6Rmxv
YXRSZWN0IGRlc3RpbmF0aW9uUmVjdCkKKyAgICBEcmF3TmF0aXZlSW1hZ2UoV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRT
aXplIGltYWdlU2l6ZSwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpGbG9h
dFJlY3Qgc3JjUmVjdCwgc3RydWN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlv
bnMpCisgICAgRHJhd1BhdHRlcm4oV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGltYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6RmxvYXRSZWN0IGRlc3RSZWN0LCBXZWJDb3JlOjpG
bG9hdFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0sIFdl
YkNvcmU6OkZsb2F0UG9pbnQgcGhhc2UsIFdlYkNvcmU6OkZsb2F0U2l6ZSBzcGFjaW5nLCBzdHJ1
Y3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucykKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgUGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmll
ciBpZGVudGlmaWVyLCBXZWJDb3JlOjpGbG9hdFJlY3QgZGVzdGluYXRpb24pCiAjZW5kaWYKLSAg
ICBBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorCisgICAgRHJhd0ds
eXBocyhXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocyBpdGVtKQorICAgIERyYXdMaW5l
c0ZvclRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgaXRlbSkKKyAg
ICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBzdHJ1
Y3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisKKyAgICBDb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkKKyAgICBUcmFuc2Zvcm1Ub0NvbG9yU3BhY2UoV2ViQ29yZTo6RGVz
dGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgRmx1c2hDb250ZXh0KFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKaW5k
ZXggMjMzZjFkNzAxZjM4ZDY2MDFiOWE4MzJiMzA4MzYwY2NkOWQxMWU4MC4uOTdiNWU2M2YxNWE4
MzFmZTRlZTA1YTFhZWIzMjg3Y2MwYmQ3MTlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcApAQCAtNzgsNyArNzgsNyBAQCB2
b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBmbG9h
dCBzY2FsZUZhY3RvciwgY29uc3QgSQogCiAgICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOwotICAgIENhaXJv
OjpkcmF3U3VyZmFjZSgqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHksIHN0YXRl
LmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBDYWlybzo6ZHJhd1N1cmZh
Y2UoKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBz
cmNSZWN0LCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCksIHN0YXRlLmFscGhhKCks
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCiBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUNhaXJvU3VyZmFjZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5jcHAKaW5kZXggODU3N2NiYmRlNmQzOTAxZDM0NzA3
NjFlZDMwZjc5ZDk4ZTgyYjk4ZC4uNmNmYmFiY2E3YmNmYmVkYzU5NTQ4M2U4ZWViMWQ1YWIxMjA5
NjZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5LmNwcApA
QCAtMzIsMzYgKzMyLDIxIEBACiAjaW5jbHVkZSAiUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlck1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbWFn
ZUJ1ZmZlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5ZXIuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiByZW5kZXJpbmdCYWNrZW5kLCBjb25zdCBGbG9h
dFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERy
YXdHbHlwaHNSZWNvcmRlcjo6RGVjb25zdHJ1Y3REcmF3R2x5cGhzIGRlY29uc3RydWN0RHJhd0ds
eXBocykKLSAgICA6IERpc3BsYXlMaXN0OjpSZWNvcmRlcih7IH0sIGluaXRpYWxDbGlwLCBpbml0
aWFsQ1RNLCBkZWNvbnN0cnVjdERyYXdHbHlwaHMpCisgICAgOiBEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXIoaW5pdGlhbENsaXAsIGluaXRpYWxDVE0sIGRlY29uc3RydWN0RHJhd0dseXBocykKICAgICAs
IG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpKQogICAgICwgbV9pbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikKICAgICAs
IG1fcmVuZGVyaW5nQmFja2VuZChyZW5kZXJpbmdCYWNrZW5kKQogewogfQogCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6Q29udmVydFRvTHVt
aW5hbmNlTWFzaygpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKLX0KLQogUmVuZGVy
aW5nTW9kZSBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlbmRlcmluZ01vZGUoKSBj
b25zdAogewogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyID8gbV9pbWFnZUJ1ZmZlci0+cmVuZGVy
aW5nTW9kZSgpIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKQEAgLTc3LDMxICs2Miw2
IEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRSZXN0b3JlKCkK
ICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSZXN0b3JlKCkp
OwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkVHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlcjo6VHJhbnNsYXRlKHgsIHkpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkKLXsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpSb3RhdGUoYW5nbGUpKTsKLX0K
LQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNjYWxlKGNvbnN0
IEZsb2F0U2l6ZSYgc2NhbGUpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6U2NhbGUoc2NhbGUpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRD
VE0odHJhbnNmb3JtKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
LXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDb25jYXRl
bmF0ZUNUTSh0cmFuc2Zvcm0pKTsKLX0KLQogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZFNldElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvcikKIHsK
ICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRJbmxpbmVG
aWxsQ29sb3IoRGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvciB7IGNvbG9yIH0pKTsKQEAg
LTExNyw5MiArNzcsMjYgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiAgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVz
cykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTZXRTdGF0ZShEaXNwbGF5TGlzdDo6U2V0U3RhdGUgeyBz
dGF0ZSwgZmxhZ3MgfSkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0TGluZUNhcChsaW5lQ2FwKSk7Ci19Ci0K
LXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRTZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmIGFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldExpbmVEYXNoKERpc3BsYXlMaXN0
OjpTZXRMaW5lRGFzaCB7IGFycmF5LCBkYXNoT2Zmc2V0IH0pKTsKLX0KLQotdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFNldExpbmVKb2luKExpbmVKb2luIGxpbmVK
b2luKQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNl
dExpbmVKb2luKGxpbmVKb2luKSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRTZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlNldE1pdGVyTGltaXQobGltaXQpKTsK
LX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsZWFyU2hh
ZG93KCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpD
bGVhclNoYWRvdygpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAocmVjdCkpOwotfQotCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
Q2xpcE91dChyZWN0KSk7Ci19Ci0KLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQotewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLnJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0aW5hdGlvblJlY3QpKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBPdXRUb1BhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyOjpDbGlwT3V0VG9QYXRoKHBhdGgpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnJlY29yZENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHJ1
bGUpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU2V0U3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkNsaXBQYXRoKHBhdGgsIHJ1bGUpKTsKLX0KLQot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdGaWx0ZXJlZElt
YWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIEZpbHRlciYgZmlsdGVyKQotewotICAgIHN0ZDo6b3B0aW9uYWw8UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGlmIChzb3VyY2VJbWFnZSkK
LSAgICAgICAgaWRlbnRpZmllciA9IHNvdXJjZUltYWdlLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpE
cmF3RmlsdGVyZWRJbWFnZUJ1ZmZlcihXVEZNb3ZlKGlkZW50aWZpZXIpLCBzb3VyY2VJbWFnZVJl
Y3QsIElQQzo6RmlsdGVyUmVmZXJlbmNlKFJlZjxGaWx0ZXI+IHsgZmlsdGVyIH0pKSk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6U2V0U3RhdGUoRGlzcGxh
eUxpc3Q6OlNldFN0YXRlIHsgc3RhdGUgfSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNt
b290aGluZ01vZGUgbW9kZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlz
dFJlY29yZGVyOjpEcmF3R2x5cGhzKERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzIHsgZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBtb2RlIH0pKTsKLX0KLQotdm9pZCBS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17
Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ltYWdl
QnVmZmVyKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucykpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQorI2lmIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5OjpyZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdOYXRpdmVJbWFnZShpbWFn
ZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseVN0cm9rZVBh
dHRlcm4oKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3U3lzdGVtSW1hZ2UoU3lzdGVtSW1hZ2UmIHN5c3RlbUltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRBcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3U3lzdGVtSW1hZ2Uoc3lzdGVtSW1hZ2UsIGRlc3RpbmF0
aW9uUmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkFwcGx5RmlsbFBhdHRlcm4oKSk7CiB9CisjZW5kaWYgLy8gVVNFKENHKQogCi12b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdHRlcm4oUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIGltYWdlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2Nh
bGVGYWN0b3IpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBseURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9y
KSk7CiB9CiAKIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRCZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBAIC0yMTUsNDQgKzEwOSwzNCBAQCB2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKQogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0
aCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3
UmVjdChyZWN0LCB3aWR0aCkpOwotfQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKLX0KLQotdm9pZCBSZW1vdGVEaXNw
bGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRD
bGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3TGluZXNGb3JUZXh0KERpc3BsYXlMaXN0OjpEcmF3TGlu
ZXNGb3JUZXh0IHsgYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhz
LCBwcmludGluZywgZG91YmxlTGluZXMgfSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkNsaXAocmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IERvY3VtZW50TWFya2VyTGluZVN0eWxlJiBzdHlsZSkKK3Zv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSBydWxlKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUp
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwUGF0
aChwYXRoLCBydWxlKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIFJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d0VsbGlwc2UocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkNsaXBPdXQocmVjdCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgUmVtb3RlRGlz
cGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d1BhdGgocGF0aCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkNsaXBPdXRUb1BhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZENsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmlu
Z1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpDbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlci5y
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdGluYXRpb25SZWN0KSk7CiB9CiAKLXZv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3Rm9jdXNSaW5nUmVj
dHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3Rm9jdXNSaW5nUmVjdHMo
cmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6Q2xlYXJSZWN0KHJlY3QpKTsKIH0KIAogdm9pZCBSZW1vdGVE
aXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKQEAgLTI3MCwyMyArMTU0LDIyIEBAIHZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
clByb3h5OjpyZWNvcmRGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmCiAgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQoRGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50IHsgcmVjdCwgZ3JhZGllbnQg
fSkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmls
bENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUpCit2b2lkIFJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbENvbXBvc2l0ZWRSZWN0KHJl
Y3QsIGNvbG9yLCBvcCwgbW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkZpbGxSb3VuZGVkUmVjdChyb3VuZGVkUmVjdCwgY29sb3IpKTsKIH0KIAot
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBCbGVuZE1vZGUgbW9kZSkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmRGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbFJvdW5kZWRS
ZWN0KHJvdW5kZWRSZWN0LCBjb2xvciwgbW9kZSkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5k
ZWRSZWN0LCBjb2xvcikpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94
eTo6cmVjb3JkRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkUmVjdCwg
Y29sb3IpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpG
aWxsRWxsaXBzZShyZWN0KSk7CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLQog
dm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEZpbGxMaW5lKGNvbnN0
IExpbmVEYXRhJiBkYXRhKQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkZpbGxMaW5lKGRhdGEpKTsKQEAgLTMwNiw3ICsxODksNiBAQCB2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbEJlemllckN1cnZlKGNvbnN0IEJl
emllckN1cnZlRGF0YQogewogICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OkZpbGxCZXppZXJDdXJ2ZShkYXRhKSk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKIAogdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJl
Y29yZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zMTQsMjMgKzE5NiwxNyBAQCB2b2lk
IFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKICAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpG
aWxsUGF0aChwYXRoKSk7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmRGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RmlsbEVsbGlwc2UocmVjdCkpOwot
fQotCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkUGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24pCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpQYWludEZyYW1lRm9yTWVk
aWEocGxheWVyLmlkZW50aWZpZXIoKSwgZGVzdGluYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VSZWN0KHJlY3QsIGJvcmRlclRoaWNr
bmVzcykpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3Jk
U3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQordm9pZCBSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXI6OlN0cm9rZVJlY3QocmVjdCwgd2lkdGgpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VFbGxpcHNlKHJlY3QpKTsKIH0KIAogI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQotCiB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQ
cm94eTo6cmVjb3JkU3Ryb2tlTGluZShjb25zdCBMaW5lRGF0YSYgZGF0YSkKIHsKICAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VMaW5lKGRhdGEpKTsK
QEAgLTM1MCw3ICsyMjYsNiBAQCB2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6
cmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgQmV6aWVyQ3VydmVEYQogewogICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OlN0cm9rZUJlemllckN1cnZlKGRh
dGEpKTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCiB2b2lkIFJl
bW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkU3Ryb2tlUGF0aChjb25zdCBQYXRo
JiBwYXRoKQpAQCAtMzU4LDMzICsyMzMsODQgQEAgdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29y
ZGVyUHJveHk6OnJlY29yZFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpTdHJva2VQYXRoKHBhdGgpKTsKIH0K
IAotdm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
UHJveHk6OnJlY29yZERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OlN0cm9rZUVsbGlwc2UocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3Bs
YXlMaXN0UmVjb3JkZXI6OkRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogfQogCi12
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkQ2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5Ojpy
ZWNvcmREcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVy
OjpDbGVhclJlY3QocmVjdCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0
UmVjb3JkZXI6OkRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKSk7CiB9CiAKLSNpZiBVU0UoQ0cpCit2
b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXI6OkRyYXdFbGxpcHNlKHJlY3QpKTsKK30KIAotdm9pZCBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZEFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIFJlbW90
ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpBcHBs
eVN0cm9rZVBhdHRlcm4oKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd1BhdGgocGF0aCkpOwogfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkQXBwbHlGaWxsUGF0dGVybigpCit2b2lkIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkFwcGx5RmlsbFBhdHRl
cm4oKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJh
d0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKIH0KIAotI2VuZGlm
IC8vIFVTRShDRykKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRE
cmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3Rz
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworfQogCi12b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVj
b3JkZXJQcm94eTo6cmVjb3JkQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3Rv
cikKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6
OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpEcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIu
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmREcmF3
RmlsdGVyZWRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBzdGQ6Om9wdGlv
bmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gaWRlbnRpZmllcjsKKyAgICBpZiAoc291
cmNlSW1hZ2UpCisgICAgICAgIGlkZW50aWZpZXIgPSBzb3VyY2VJbWFnZS0+cmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RS
ZWNvcmRlcjo6RHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoV1RGTW92ZShpZGVudGlmaWVyKSwgc291
cmNlSW1hZ2VSZWN0LCBJUEM6OkZpbHRlclJlZmVyZW5jZShSZWY8RmlsdGVyPiB7IGZpbHRlciB9
KSkpOworfQorCit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6cmVjb3JkRHJh
d05hdGl2ZUltYWdlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIs
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRy
YXdOYXRpdmVJbWFnZShpbWFnZUlkZW50aWZpZXIsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wdGlvbnMpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6
OnJlY29yZERyYXdTeXN0ZW1JbWFnZShTeXN0ZW1JbWFnZSYgc3lzdGVtSW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURp
c3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdTeXN0ZW1JbWFnZShzeXN0ZW1JbWFnZSwgZGVzdGluYXRp
b25SZWN0KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNv
cmREcmF3UGF0dGVybihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlmaWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
RHJhd1BhdHRlcm4oaW1hZ2VJZGVudGlmaWVyLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK3Zv
aWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5OjpyZWNvcmRQYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRl
cjo6UGFpbnRGcmFtZUZvck1lZGlhKGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKSk7Cit9CisjZW5k
aWYKKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZERyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxv
YXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIG1vZGUpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6RHJhd0dseXBocyhEaXNwbGF5
TGlzdDo6RHJhd0dseXBocyB7IGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFu
Y2hvciwgbW9kZSB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5
OjpyZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3Jk
ZXI6OkRyYXdMaW5lc0ZvclRleHQoRGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQgeyBGbG9h
dFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVMaW5lcyB9KSk7Cit9CisKK3ZvaWQgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclBy
b3h5OjpyZWNvcmREcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUmIHN0eWxlKQoreworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIocmVjdCwgc3R5bGUpKTsKIH0KIAogYm9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHk6OnJlY29yZFJlc291cmNlVXNlKE5hdGl2ZUltYWdlJiBpbWFnZSkKQEAgLTQzNCwxMSArMzYw
LDYgQEAgYm9vbCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OnJlY29yZFJlc291cmNl
VXNlKEZvbnQmIGZvbnQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVtb3RlRGlzcGxh
eUxpc3RSZWNvcmRlclByb3h5OjpmbHVzaENvbnRleHQoR3JhcGhpY3NDb250ZXh0Rmx1c2hJZGVu
dGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlcjo6Rmx1c2hDb250ZXh0KGlkZW50aWZpZXIpKTsKLX0KLQogUmVmUHRyPEltYWdl
QnVmZmVyPiBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIHN0ZDo6b3B0aW9uYWw8UmVuZGVyaW5nTW9k
ZT4gcmVuZGVyaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxSZW5kZXJpbmdNZXRob2Q+IHJlbmRlcmlu
Z01ldGhvZCkgY29uc3QKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkp
IHsKQEAgLTQ2NCw2ICszODUsMjEgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBSZW1vdGVEaXNwbGF5
TGlzdFJlY29yZGVyUHJveHk6OmNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb24KICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVTY2FsZWRJbWFnZUJ1ZmZlcihyZWN0LCBzY2FsZUZh
Y3RvcigpLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdNZXRob2QpOwogfQog
Cit2b2lkIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eTo6Y29udmVydFRvTHVtaW5hbmNl
TWFzaygpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlcjo6
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpKTsKK30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJl
Y29yZGVyUHJveHk6OnRyYW5zZm9ybVRvQ29sb3JTcGFjZShjb25zdCBXZWJDb3JlOjpEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlcjo6VHJhbnNmb3JtVG9Db2xvclNwYWNlKGNvbG9yU3BhY2UpKTsK
K30KKwordm9pZCBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHk6OmZsdXNoQ29udGV4dChH
cmFwaGljc0NvbnRleHRGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyOjpGbHVzaENvbnRleHQoaWRlbnRpZmll
cikpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkuaAppbmRl
eCA5YjMzYTA2N2ZkMTZiY2NmMTQwNDJjMTk3NGRkNjkxOTQyMjYyNDY4Li5mMmFkOGQwYWE0NTg1
ODlhZWU4MTkwN2Q5YzkwODk2ZDM0YjZmNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXJQcm94eS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlRGlzcGxheUxp
c3RSZWNvcmRlclByb3h5LmgKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBj
bGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiAKIGNsYXNzIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXIg
eworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpEcmF3R2x5cGhzUmVjb3JkZXI7CiBwdWJsaWM6
CiAgICAgUmVtb3RlRGlzcGxheUxpc3RSZWNvcmRlclByb3h5KFdlYkNvcmU6OkltYWdlQnVmZmVy
JiwgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiwgV2ViQ29yZTo6
RHJhd0dseXBoc1JlY29yZGVyOjpEZWNvbnN0cnVjdERyYXdHbHlwaHMgPSBXZWJDb3JlOjpEcmF3
R2x5cGhzUmVjb3JkZXI6OkRlY29uc3RydWN0RHJhd0dseXBoczo6WWVzKTsKICAgICB+UmVtb3Rl
RGlzcGxheUxpc3RSZWNvcmRlclByb3h5KCkgPSBkZWZhdWx0OwpAQCAtNTAsNjMgKzUxLDM5IEBA
IHB1YmxpYzoKICAgICB2b2lkIGZsdXNoQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRG
bHVzaElkZW50aWZpZXIpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgdm9pZCBzZW5kKFQmJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElL
RUxZKCFtX3JlbmRlcmluZ0JhY2tlbmQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IG1fbmVlZHNGbHVzaCA9IHRydWU7Ci0gICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZC0+c2VuZFRv
U3RyZWFtKFdURk1vdmUobWVzc2FnZSksIG1fZGVzdGluYXRpb25CdWZmZXJJZGVudGlmaWVyKTsK
LSAgICB9Ci0KLSAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RHJhd0dseXBoc1JlY29yZGVyOwot
CiAgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7
CiAKICAgICB2b2lkIHJlY29yZFNhdmUoKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFJlc3RvcmUo
KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5h
bDsKLSAgICB2b2lkIHJlY29yZFJvdGF0ZShmbG9hdCBhbmdsZSkgZmluYWw7Ci0gICAgdm9pZCBy
ZWNvcmRTY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBmaW5hbDsKLSAgICB2b2lkIHJl
Y29yZFNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZENvbmNhdGVuYXRlQ1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYp
IGZpbmFsOworCiAgICAgdm9pZCByZWNvcmRTZXRJbmxpbmVGaWxsQ29sb3IoV2ViQ29yZTo6U1JH
QkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0SW5saW5lU3Ryb2tlQ29sb3Io
V2ViQ29yZTo6U1JHQkE8dWludDhfdD4pIGZpbmFsOwogICAgIHZvaWQgcmVjb3JkU2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldFN0YXRlKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU2V0TGluZUNhcChX
ZWJDb3JlOjpMaW5lQ2FwKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFNldExpbmVEYXNoKGNvbnN0
IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwotICAgIHZvaWQg
cmVjb3JkU2V0TGluZUpvaW4oV2ViQ29yZTo6TGluZUpvaW4pIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkU2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRDbGVhclNoYWRv
dygpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkU2V0U3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGUmKSBmaW5hbDsKKworI2lmIFVTRShDRykKKyAgICB2b2lkIHJlY29yZEFw
cGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkQXBwbHlGaWxsUGF0dGVy
bigpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIHJlY29yZEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBm
aW5hbDsKKwogICAgIHZvaWQgcmVjb3JkQ2xpcChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBXZWJD
b3JlOjpXaW5kUnVsZSkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkQ2xpcFRvSW1hZ2VCdWZmZXIo
V2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCkgZmluYWw7CiAgICAgdm9pZCByZWNvcmRDbGlwT3V0VG9QYXRoKGNvbnN0IFdlYkNv
cmU6OlBhdGgmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsaXBQYXRoKGNvbnN0IFdlYkNvcmU6
OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3Rmls
dGVyZWRJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciosIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBXZWJDb3JlOjpGaWx0ZXImKSBmaW5hbDsKLSAgICB2
b2lkIHJlY29yZERyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9udCYsIGNvbnN0IFdlYkNvcmU6
OkdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1
bnNpZ25lZCBjb3VudCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIFdl
YkNvcmU6OkZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29y
ZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERyYXdOYXRp
dmVJbWFnZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgaW1hZ2VJZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBXZWJDb3JlOjpJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOwotICAgIHZvaWQgcmVj
b3JkRHJhd1N5c3RlbUltYWdlKFdlYkNvcmU6OlN5c3RlbUltYWdlJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRCZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0KSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmlu
YWw7Ci0gICAgdm9pZCByZWNvcmREcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBm
bG9hdCkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MikgZmluYWw7
Ci0gICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9jYWxBbmNob3Is
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRHJh
d0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCByZWNv
cmREcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRE
cmF3Rm9jdXNSaW5nUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZERy
YXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisgICAg
dm9pZCByZWNvcmRDbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KSBmaW5hbDsKKworICAgIHZvaWQg
cmVjb3JkQ2xlYXJSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworCiAgICAg
dm9pZCByZWNvcmRGaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICAg
ICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsUmVjdFdp
dGhHcmFkaWVudChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYp
IGZpbmFsOwotICAgIHZvaWQgcmVjb3JkRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3Bl
cmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSkgZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsUm91
bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIHJlY29yZEZpbGxS
b3VuZGVkUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIGZpbmFsOworCisgICAgdm9pZCByZWNvcmRGaWxs
RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZEZpbGxMaW5lKGNvbnN0IFdlYkNvcmU6Okxp
bmVEYXRhJikgZmluYWw7CiAgICAgdm9pZCByZWNvcmRGaWxsQXJjKGNvbnN0IFdlYkNvcmU6OkFy
Y0RhdGEmKSBmaW5hbDsKQEAgLTExNCw5ICs5MSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVj
b3JkRmlsbEJlemllckN1cnZlKGNvbnN0IFdlYkNvcmU6OkJlemllckN1cnZlRGF0YSYpIGZpbmFs
OwogI2VuZGlmCiAgICAgdm9pZCByZWNvcmRGaWxsUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikg
ZmluYWw7Ci0gICAgdm9pZCByZWNvcmRGaWxsRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZFBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpN
ZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24pIGZpbmFs
OwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBm
bG9hdCkgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZFN0cm9rZVJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKworICAgIHZvaWQgcmVj
b3JkU3Ryb2tlRWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICB2b2lkIHJlY29yZFN0cm9rZUxpbmUoY29uc3Qg
V2ViQ29yZTo6TGluZURhdGEmKSBmaW5hbDsKICAgICB2b2lkIHJlY29yZFN0cm9rZUFyYyhjb25z
dCBXZWJDb3JlOjpBcmNEYXRhJikgZmluYWw7CkBAIC0xMjQsMTMgKzEwMiwyOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgcmVjb3JkU3Ryb2tlQmV6aWVyQ3VydmUoY29uc3QgV2ViQ29yZTo6QmV6aWVy
Q3VydmVEYXRhJikgZmluYWw7CiAjZW5kaWYKICAgICB2b2lkIHJlY29yZFN0cm9rZVBhdGgoY29u
c3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOwotICAgIHZvaWQgcmVjb3JkU3Ryb2tlRWxsaXBzZShj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZENsZWFyUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKLSNpZiBVU0UoQ0cpCi0gICAgdm9p
ZCByZWNvcmRBcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKLSAgICB2b2lkIHJlY29yZEFwcGx5
RmlsbFBhdHRlcm4oKSBmaW5hbDsKKworICAgIHZvaWQgcmVjb3JkRHJhd1JlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBmaW5hbDsKKyAgICB2b2lk
IHJlY29yZERyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQyKSAgZmluYWw7CisKKyAgICB2b2lkIHJlY29yZERy
YXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgcmVj
b3JkRHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIGZpbmFsOworCisgICAgdm9pZCByZWNv
cmREcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIHJlY29y
ZERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgZmluYWw7CisK
KyAgICB2b2lkIHJlY29yZERyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsK
KyAgICB2b2lkIHJlY29yZERyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVm
ZmVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIFdlYkNvcmU6
OkZpbHRlciYpIGZpbmFsOworICAgIHZvaWQgcmVjb3JkRHJhd05hdGl2ZUltYWdlKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBpbWFnZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6Oklt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3U3lzdGVtSW1h
Z2UoV2ViQ29yZTo6U3lzdGVtSW1hZ2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCk7CisgICAgdm9pZCByZWNvcmREcmF3UGF0dGVybihXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSkgZmluYWw7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcmVjb3JkUGFp
bnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgZmluYWw7CiAjZW5kaWYKLSAgICB2b2lkIHJl
Y29yZEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCByZWNv
cmREcmF3R2x5cGhzKGNvbnN0IFdlYkNvcmU6OkZvbnQmLCBjb25zdCBXZWJDb3JlOjpHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgV2ViQ29yZTo6R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
Y291bnQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBXZWJDb3JlOjpG
b250U21vb3RoaW5nTW9kZSkgZmluYWw7CisgICAgdm9pZCByZWNvcmREcmF3TGluZXNGb3JUZXh0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNv
cmU6OkRhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBm
aW5hbDsKKyAgICB2b2lkIHJlY29yZERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUm
KSBmaW5hbDsKIAogICAgIGJvb2wgcmVjb3JkUmVzb3VyY2VVc2UoV2ViQ29yZTo6TmF0aXZlSW1h
Z2UmKSBmaW5hbDsKICAgICBib29sIHJlY29yZFJlc291cmNlVXNlKFdlYkNvcmU6OkltYWdlQnVm
ZmVyJikgZmluYWw7CkBAIC0xNDEsNiArMTM0LDE4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVBbGlnbmVkSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgc3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpSZW5kZXJpbmdNZXRob2Q+KSBjb25zdCBmaW5hbDsKICAgICBS
ZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUFsaWduZWRJbWFnZUJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlJlbmRlcmluZ01ldGhvZD4pIGNvbnN0IGZpbmFs
OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNlbmQoVCYmIG1lc3NhZ2Up
CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIW1fcmVuZGVyaW5nQmFja2VuZCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9uZWVkc0ZsdXNoID0gdHJ1ZTsKKyAgICAgICAg
bV9yZW5kZXJpbmdCYWNrZW5kLT5zZW5kVG9TdHJlYW0oV1RGTW92ZShtZXNzYWdlKSwgbV9kZXN0
aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIHZvaWQgcmVjb3JkQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgZmluYWw7CisKICAgICBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgbV9kZXN0aW5hdGlvbkJ1ZmZlcklkZW50aWZpZXI7CiAgICAgV2Vh
a1B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlcjsKICAgICBXZWFrUHRyPFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW5kZXJpbmdCYWNrZW5kOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xp
ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsv
V2ViRHJhZ0NsaWVudEd0ay5jcHAKaW5kZXggNTUwODhhZWIyYWI5OTIwMjQxOTkxNzNiM2FjYTE3
OWJkNTExYjg4Zi4uNWU1Y2VmZjcwMWM5ZTRhZTFkOGJlM2U1ODE0MGU4ZGIxNDNmYzQ1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJE
cmFnQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCkBAIC01NCw3ICs1NCw3IEBAIHN0YXRpYyBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb252ZXJ0Q2Fpcm9TdXJmYWNlVG9TaGFyZWFibGVCaXRt
YXAoY2Fpcm9fc3VyZmFjCiAKICAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LT5oYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQtPnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdTdXJmYWNlKCpncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLCBzdXJmYWNlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlU2l6ZSksIEludFJlY3QoSW50
UG9pbnQoKSwgaW1hZ2VTaXplKSwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSwgc3Rh
dGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3U3Vy
ZmFjZSgqZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZSwgSW50UmVj
dChJbnRQb2ludCgpLCBpbWFnZVNpemUpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlU2l6ZSks
IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSwgc3RhdGUuYWxwaGEoKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiAgICAgcmV0dXJuIGJpdG1hcDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4
IDFkNjQzYjZiNDI4OGQwOGUwMzhjNDYyNWQwNTQ5ZGU2OGFmMmFhNzcuLjA3OTkzYjM4MGYxZWE3
ZDM0OWRkN2ViZmMxNjBjODA0ZGFkNDNlM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTUzNCw3ICs1MzQsNyBAQCB2
b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYsIEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBjbwogCiAgICAgLy8gRHJhdyB3aGl0ZSBmcmFtZXMgYXJvdW5k
IHRoZSBob2xlcy4KICAgICAvLyBXZSBkb3VibGUgdGhlIHRoaWNrbmVzcyBiZWNhdXNlIGhhbGYg
b2YgdGhlIHN0cm9rZSB3aWxsIGJlIGVyYXNlZCB3aGVuIHdlIGNsZWFyIHRoZSBob2xlcy4KLSAg
ICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFk
b3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hhZG93Q29sb3IpOworICAgIGdyYXBoaWNz
Q29udGV4dC5zZXREcm9wU2hhZG93KHsgRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09m
ZnNldFkpLCBzaGFkb3dCbHVyUmFkaXVzLCBzaGFkb3dDb2xvciB9KTsKICAgICBncmFwaGljc0Nv
bnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKICAgICBncmFwaGljc0NvbnRleHQu
c2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoICogMik7CiAgICAgZm9yIChhdXRvJiBwYXRo
IDogd2hpdGVGcmFtZVBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZvdW5kVGV4dFJhbmdlQ29udHJvbGxlci5jcHAKaW5kZXgg
ZjE2Zjc5NmUwNDdlOTkxOTcyYzBlZDFmNGFlMTEzY2UxNjU2NWMxMC4uNDllMDBiZTMzN2VhZmVl
MTI5M2VmMDc3YWRmNjE3Y2RhZTNkNGExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRm91bmRUZXh0UmFuZ2VDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXIu
Y3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBXZWJGb3VuZFRleHRSYW5nZUNvbnRyb2xsZXI6
OmRyYXdSZWN0KFdlYkNvcmU6OlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6R3JhcGgKIAogICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRl
eHQpOwogCi0gICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhXZWJDb3JlOjpGbG9hdFNpemUo
c2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd0JsdXJSYWRpdXMsIHNoYWRvd0Nv
bG9yKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0RHJvcFNoYWRvdyh7IFdlYkNvcmU6OkZsb2F0
U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hhZG93Qmx1clJhZGl1cywgc2hh
ZG93Q29sb3IgfSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKGZvdW5kQ29s
b3IpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoaW5kaWNhdG9yQm9y
ZGVyV2lkdGggKiAyKTsKICAgICBmb3IgKGF1dG8mIHBhdGggOiBmb3VuZEZyYW1lUGF0aHMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2NmL1dlYkNvcmVTdXBwb3J0L1dlYkluc3Bl
Y3RvckNsaWVudENGLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvY2YvV2ViQ29yZVN1cHBvcnQv
V2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwCmluZGV4IDNlNTUyZGViOWE5ZTM0ZDAzODBmZGMzN2Rm
ZDk0Zjk1YTdhOWRkMWEuLjU1ODAyODM4MDliMWU4N2Q2YTM2MTYxNTFiMTlmYTZiN2ExNzA5M2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvY2YvV2ViQ29yZVN1cHBvcnQvV2ViSW5z
cGVjdG9yQ2xpZW50Q0YuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvY2YvV2ViQ29yZVN1
cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwCkBAIC0zNSwxMCArMzUsNiBAQAogCiAjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKLSNpZiBQTEFURk9STShXSU4pICYmICFkZWZpbmVkKFVT
RV9DRykKLSNkZWZpbmUgVVNFX0NHIDEKLSNlbmRpZgotCiAvLyBOT1RFOiBUaGVzZSBuZWVkIHRv
IGFwcGVhciB1cCB0b3AsIGFzIHRoZXkgZGVjbGFyZSBtYWNyb3MgdXNlZCBpbiB0aGUgSlMgYW5k
IFdURiBoZWFkZXJzLgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRXhwb3J0TWFjcm9zLmg+
CiAjaW5jbHVkZSA8d3RmL0V4cG9ydE1hY3Jvcy5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGU5N2MyMGE0ZmY1YmU0MWQ5YzMyMDU3YzUwODFj
ZmZjNGI4MWE0YTYuLjdiMDQ0MDY3YjY5YTM1YTZmY2ZlZTAxNjY0NmNiMjkyYTQ1MDNkNzEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAyMi0wMy0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4K
KworICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBs
YXppbHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0dyYXBoaWNzQ29udGV4dFRlc3RzQ0cuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisKIDIwMjItMDMtMTQgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29t
PgogCiAgICAgICAgIFtnaXQtd2Via2l0XSBIYW5kbGUgY29tcGFyaW5nIFVzZXIgYW5kIENvbnRy
aWJ1dG9yIHRvIE5vbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3Rz
Q0cuY3BwCmluZGV4IDhlNDFjNWE3M2FlMzY4NGNlZGRmMWY5NGY5ZjE3MTg5NTM1MTRjOWYuLmVi
ZTY0NDg3MWUyOGY1MTljZDI2MTIwYjhhODI3ODg2YzAxOTAyYmYgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9CaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0
VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Jp
ZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0c0NHLmNwcApAQCAtNTQsNyArNTQsNyBAQCBURVNU
KEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRUZXN0cywgQmFzaWMpCiAgICAgR3JhcGhpY3NDb250
ZXh0Q0cgcHJpbWFyeUNvbnRleHQocHJpbWFyeUNHQ29udGV4dC5nZXQoKSk7CiAKICAgICBJbk1l
bW9yeURpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlD
b250ZXh0KGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNv
bnRleHRIZWlnaHQpLCB7IH0pOworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0KGRp
c3BsYXlMaXN0LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSk7
CiAKICAgICBCaWZ1cmNhdGVkR3JhcGhpY3NDb250ZXh0IGN0eChwcmltYXJ5Q29udGV4dCwgc2Vj
b25kYXJ5Q29udGV4dCk7CiAKQEAgLTkwLDEwICs5MCwxMCBAQCBURVNUKEJpZnVyY2F0ZWRHcmFw
aGljc0NvbnRleHRUZXN0cywgQmFzaWMpCiBURVNUKEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHRU
ZXN0cywgVGV4dCkKIHsKICAgICBJbk1lbW9yeURpc3BsYXlMaXN0IHByaW1hcnlEaXNwbGF5TGlz
dDsKLSAgICBSZWNvcmRlckltcGwgcHJpbWFyeUNvbnRleHQocHJpbWFyeURpc3BsYXlMaXN0LCB7
IH0sIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpLCB7IH0pOwor
ICAgIFJlY29yZGVySW1wbCBwcmltYXJ5Q29udGV4dChwcmltYXJ5RGlzcGxheUxpc3QsIEZsb2F0
UmVjdCgwLCAwLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEluTWVtb3J5
RGlzcGxheUxpc3Qgc2Vjb25kYXJ5RGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29u
ZGFyeUNvbnRleHQoc2Vjb25kYXJ5RGlzcGxheUxpc3QsIHsgfSwgRmxvYXRSZWN0KDAsIDAsIGNv
bnRleHRXaWR0aCwgY29udGV4dEhlaWdodCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29u
ZGFyeUNvbnRleHQoc2Vjb25kYXJ5RGlzcGxheUxpc3QsIEZsb2F0UmVjdCgwLCAwLCBjb250ZXh0
V2lkdGgsIGNvbnRleHRIZWlnaHQpKTsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRleHQg
Y3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKIApAQCAtMjAxLDcgKzIwMSw3
IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBCb3JkZXJzKQogICAgIEdy
YXBoaWNzQ29udGV4dENHIHByaW1hcnlDb250ZXh0KHByaW1hcnlDR0NvbnRleHQuZ2V0KCkpOwog
CiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBSZWNvcmRlckltcGwg
c2Vjb25kYXJ5Q29udGV4dChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgY29udGV4
dFdpZHRoLCBjb250ZXh0SGVpZ2h0KSwgeyB9KTsKKyAgICBSZWNvcmRlckltcGwgc2Vjb25kYXJ5
Q29udGV4dChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIGNvbnRleHRXaWR0aCwgY29udGV4
dEhlaWdodCkpOwogCiAgICAgQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNv
bnRleHQsIHNlY29uZGFyeUNvbnRleHQpOwogCkBAIC0yMjgsNyArMjI4LDcgQEAgVEVTVChCaWZ1
cmNhdGVkR3JhcGhpY3NDb250ZXh0VGVzdHMsIFRyYW5zZm9ybWVkQ2xpcCkKICAgICBHcmFwaGlj
c0NvbnRleHQmIHByaW1hcnlDb250ZXh0ID0gcHJpbWFyeUNvbnRleHRDRzsKIAogICAgIEluTWVt
b3J5RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0gICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNv
bnRleHRETChkaXNwbGF5TGlzdCwgeyB9LCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApLCB7IH0p
OworICAgIFJlY29yZGVySW1wbCBzZWNvbmRhcnlDb250ZXh0REwoZGlzcGxheUxpc3QsIEZsb2F0
UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgc2Vjb25kYXJ5Q29u
dGV4dCA9IHNlY29uZGFyeUNvbnRleHRETDsKIAogICAgIEJpZnVyY2F0ZWRHcmFwaGljc0NvbnRl
eHQgY3R4KHByaW1hcnlDb250ZXh0LCBzZWNvbmRhcnlDb250ZXh0KTsKQEAgLTI4NywxNSArMjg3
LDE1IEBAIFRFU1QoQmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dFRlc3RzLCBBcHBseURldmljZVNj
YWxlRmFjdG9yKQogICAgIEdyYXBoaWNzQ29udGV4dCYgcHJpbWFyeUNvbnRleHQgPSBwcmltYXJ5
Q29udGV4dENHOwogCiAgICAgSW5NZW1vcnlEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLSAgICBS
ZWNvcmRlckltcGwgc2Vjb25kYXJ5Q29udGV4dERMKGRpc3BsYXlMaXN0LCB7IH0sIEZsb2F0UmVj
dCgwLCAwLCAxMDAsIDEwMCksIHsgfSk7CisgICAgUmVjb3JkZXJJbXBsIHNlY29uZGFyeUNvbnRl
eHRETChkaXNwbGF5TGlzdCwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgR3JhcGhp
Y3NDb250ZXh0JiBzZWNvbmRhcnlDb250ZXh0ID0gc2Vjb25kYXJ5Q29udGV4dERMOwogCiAgICAg
QmlmdXJjYXRlZEdyYXBoaWNzQ29udGV4dCBjdHgocHJpbWFyeUNvbnRleHQsIHNlY29uZGFyeUNv
bnRleHQpOwogCiAgICAgY3R4LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoMik7CiAKLSAgICBhdXRv
IHByaW1hcnlDVE0gPSBwcmltYXJ5Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNs
dWRlRGV2aWNlU2NhbGU6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgIGF1dG8g
c2Vjb25kYXJ5Q1RNID0gc2Vjb25kYXJ5Q29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJ
bmNsdWRlRGV2aWNlU2NhbGU6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIGF1
dG8gcHJpbWFyeUNUTSA9IHByaW1hcnlDb250ZXh0LmdldENUTSgpOworICAgIGF1dG8gc2Vjb25k
YXJ5Q1RNID0gc2Vjb25kYXJ5Q29udGV4dC5nZXRDVE0oKTsKIAogICAgIEVYUEVDVF9FUShwcmlt
YXJ5Q1RNLnhTY2FsZSgpLCBzZWNvbmRhcnlDVE0ueFNjYWxlKCkpOwogICAgIEVYUEVDVF9FUShw
cmltYXJ5Q1RNLnlTY2FsZSgpLCBzZWNvbmRhcnlDVE0ueVNjYWxlKCkpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0dyYXBoaWNzQ29udGV4dFRlc3Rz
Q0cuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0dyYXBoaWNzQ29u
dGV4dFRlc3RzQ0cuY3BwCmluZGV4IDI0NzM1ODBmMTkwZTBmZDY3NGMzNjdkYTQ3YzlmMTkyYmEy
NDg1ZTQuLjIxNWMxN2M2NjU3YWVkYTZhNmUyY2QwYWUwYzljOTI2ZjNiZDgyYjAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9HcmFwaGljc0NvbnRleHRU
ZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvR3Jh
cGhpY3NDb250ZXh0VGVzdHNDRy5jcHAKQEAgLTUyLDcgKzUyLDcgQEAgVEVTVChHcmFwaGljc0Nv
bnRleHRUZXN0cywgRHJhd05hdGl2ZUltYWdlRG9lc05vdExlYWtDb21wb3NpdGVPcGVyYXRvcikK
ICAgICBHcmFwaGljc0NvbnRleHRDRyBjdHgoY2dDb250ZXh0LmdldCgpKTsKIAogICAgIEVYUEVD
VF9FUShjdHguY29tcG9zaXRlT3BlcmF0aW9uKCksIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VP
dmVyKTsKLSAgICBFWFBFQ1RfRVEoY3R4LmJsZW5kTW9kZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgRVhQRUNUX0VRKGN0eC5ibGVuZE1vZGUoKSwgQmxlbmRNb2RlOjpOb3Jt
YWwpOwogCiAgICAgYXV0byBncmVlblBpeGVsQ0cgPSBncmVlbkltYWdlKCk7CiAgICAgYXV0byBn
cmVlblBpeGVsTmF0aXZlID0gTmF0aXZlSW1hZ2U6OmNyZWF0ZShncmVlblBpeGVsQ0cuZ2V0KCkp
OwpAQCAtNzEsNyArNzEsNyBAQCBURVNUKEdyYXBoaWNzQ29udGV4dFRlc3RzLCBEcmF3TmF0aXZl
SW1hZ2VEb2VzTm90TGVha0NvbXBvc2l0ZU9wZXJhdG9yKQogICAgIEVYUEVDVF9FUShwcmltYXJ5
RGF0YVsyXSwgMCk7CiAKICAgICBFWFBFQ1RfRVEoY3R4LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBD
b21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zlcik7Ci0gICAgRVhQRUNUX0VRKGN0eC5ibGVuZE1v
ZGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIEVYUEVDVF9FUShjdHguYmxl
bmRNb2RlKCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDUxNzdlZDkyOTgwZGQ4ZDRiYTRiZjNhZjNkMTQxMDZhNjJmZDZiODcu
LjQ3NDhmZjViYmZjNTRlOThlOTM1MjMyN2Y2YzI2Yjg3MzI4N2Q0ZGIgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAyMi0wMy0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4K
KworICAgICAgICBbR1BVIFByb2Nlc3NdIEdyYXBoaWNzQ29udGV4dFN0YXRlIHNob3VsZCBiZSBs
YXppbHkgYXBwbGllZCB0byB0aGUgcGxhdGZvcm0gY29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzI4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1
ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1p
bmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMv
bGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9y
ZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0OgorCiAyMDIyLTAzLTE0ICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFttb2RlbF0gPG1vZGVs
IGludGVyYWN0aXZlPiBkb2Vzbid0IGFsbG93IG1vZGVsIHRvIGJlIHJvdGF0ZWQgb24gaU9TCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRv
dy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVz
LXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXggNTExYjdjMGM1NGQzMzIxNmI3YzZlYWYwNDNhNzVj
MTY3NjZkMDQyNy4uZGJmNTRiM2VhMjA0ZTE5MjRiZDQzNWQ1MTczNmRjNzM0NzcwMmNmZiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ct
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVk
ZXMtc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtMSwxNyArMSwxMyBAQAogCi0odHJhbnNsYXRlCi0g
ICh4IDAuMDApCi0gICh5IDAuMDApKQogKHNhdmUpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxh
Z3MgNTEyKQotICAoc2hhZG93LWJsdXIgMTIuMDApCi0gIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEw
IGhlaWdodD0yMCkKLSAgKHNoYWRvdy1jb2xvciAjMDAwMDAwKQotICAoc2hhZG93cy11c2UtbGVn
YWN5LXJhZGl1cyAwKSkKLShmaWxsLWNvbXBvc2l0ZWQtcmVjdAorICAoY2hhbmdlLWZsYWdzIFtk
cm9wLXNoYWRvd10pCisgIChkcm9wLXNoYWRvdworICAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEw
IGhlaWdodD0yMCkKKyAgICAoc2hhZG93LWJsdXIgMTIuMDApCisgICAgKHNoYWRvdy1jb2xvciAj
MDAwMDAwKQorICAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKSkKKyhmaWxsLXJlY3Qt
d2l0aC1jb2xvcgogICAocmVjdCBhdCAoNTAsNTApIHNpemUgMTAweDEwMCkKLSAgKGNvbG9yICMw
MDAwRkYpCi0gIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9k
ZSBub3JtYWwpIGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKKyAgKGNvbG9yICMwMDAw
RkYpIGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKIChyZXN0b3JlKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJh
bnNmb3Jtcy1leHBlY3RlZC50eHQKaW5kZXggMzg2ZTM5NDExODVmMDlhM2M2OGVjNmMyYWU4OGRm
MTFjNzBiMGE2OS4uNWY3OGI4YzM1MDVjOWU4MDM5OWJkNjA1YTliZTk1NWFiMDliNzA1ZSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zv
cm1zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWlu
Y2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CkBAIC0xLDIxICsxLDE0IEBACiAKLSh0cmFu
c2xhdGUKLSAgKHggMC4wMCkKLSAgKHkgMjIuMDApKQotKGNvbmNhdGVudGF0ZS1jdG0KLSAgKGN0
bSB7bT0oKDAuODcsMC41MCkoLTAuNTAsMC44NykpIHQ9KDgxLjcwLC0xOC4zMCl9KSkKIChzYXZl
KQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDUxMikKLSAgKHNoYWRvdy1ibHVyIDEyLjAw
KQotICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCi0gIChzaGFkb3ctY29sb3Ig
IzAwMDAwMCkKLSAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCi0oZmlsbC1jb21wb3Np
dGVkLXJlY3QKKyAgKGNoYW5nZS1mbGFncyBbY3RtLCBkcm9wLXNoYWRvd10pCisgIChjdG0ge209
KCgwLjg3LDAuNTApKC0wLjUwLDAuODcpKSB0PSg4MS43MCwzLjcwKX0pCisgIChkcm9wLXNoYWRv
dworICAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKKyAgICAoc2hhZG93LWJs
dXIgMTIuMDApCisgICAgKHNoYWRvdy1jb2xvciAjMDAwMDAwKQorICAgIChzaGFkb3dzLXVzZS1s
ZWdhY3ktcmFkaXVzIDApKSkKKyhmaWxsLXJlY3Qtd2l0aC1jb2xvcgogICAocmVjdCBhdCAoMCww
KSBzaXplIDEwMHgxMDApCi0gIChjb2xvciAjMDAwMEZGKQotICAoY29tcG9zaXRlLW9wZXJhdGlv
biBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDcuMTQsMC4y
MCkgc2l6ZSAxODQuNTV4MTg1LjY1KQorICAoY29sb3IgIzAwMDBGRikgZXh0ZW50IGF0ICg3LjE0
LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKIChyZXN0b3JlKQotKHNldC1jdG0KLSAgKHNldC1j
dG0ge209KCgxLjAwLDAuMDApKDAuMDAsMS4wMCkpIHQ9KDAuMDAsMjIuMDApfSkpCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVk
LnR4dAppbmRleCBiYzE3YjUxMTQ5OWY4MjU2Yzk5MjkwZGFlODYxNGQ0ODk0Y2FmOWNjLi41NDZk
YzQ5MTJmNTJkMDNhODlhZDkwNjg1NzJiMjhlZGM4MDMyMjUzIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKQEAg
LTEsMTYgKzEsMTIgQEAKIAotKHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAwLjAwKSkKLShm
aWxsLWNvbXBvc2l0ZWQtcmVjdAorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICgw
LDApIHNpemUgMTA0eDEwNCkKLSAgKGNvbG9yICMwMDgwMDApCi0gIChjb21wb3NpdGUtb3BlcmF0
aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoMCwwKSBz
aXplIDEwNHgxMDQpCisgIChjb2xvciAjMDA4MDAwKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4
MTA0KQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDMyOTYwKQotICAoZmlsbC1jb2xvciAj
MDAwMEZGKQotICAoc3Ryb2tlLXN0eWxlIDApCisgIChjaGFuZ2UtZmxhZ3MgW2ZpbGwtYnJ1c2gs
IHN0cm9rZS1zdHlsZSwgc2hvdWxkLWFudGlhbGlhc10pCisgIChmaWxsLWJydXNoCisgICAgKGNv
bG9yICMwMDAwRkYpKQorICAoc3Ryb2tlLXN0eWxlIE5PLVNUUk9LRSkKICAgKHNob3VsZC1hbnRp
YWxpYXMgMCkpCiAoZHJhdy1yZWN0CiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTA0eDIpCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlw
cGVkLXJlY3QtZXhwZWN0ZWQudHh0CmluZGV4IGJiNTkzZDIwZjZkYTY0ODYyOTJkMzZjMDIyMGUy
YTlkODcyZjgyYjkuLmI4NjA0OGNjMDhjOTkzN2VmMDA3ODJlNzEwODljYWNiYzk5YzUzMzIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJl
Y3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tp
cC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0CkBAIC0xLDE2ICsxLDggQEAKIHJlY29yZGVkOgot
KHRyYW5zbGF0ZQotICAoeCAwLjAwKQotICAoeSAwLjAwKSkKLShmaWxsLWNvbXBvc2l0ZWQtcmVj
dAorKGZpbGwtcmVjdC13aXRoLWNvbG9yCiAgIChyZWN0IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAw
KQotICAoY29sb3IgIzAwMDBGRikKLSAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIp
Ci0gIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQor
ICAoY29sb3IgIzAwMDBGRikgZXh0ZW50IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogCiByZXBs
YXllZDoKICgKICAgKGNsaXAgYXQgKDUxMiwwKSBzaXplIDUxMngyMDApCi0odHJhbnNsYXRlCi0g
ICh4IDAuMDApCi0gICh5IDAuMDApKQo=
</data>
<flag name="commit-queue"
          id="482571"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>